Add A_CanBob() function to weapons to force-enable bobbing within a state.
Use it sparingly in places where it should have been needed (Hellblazer and Biospark pre/post fire, Hammer alt charge, MR overpressure charge). Also, replace all instances of A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) with it, since that was basically the same thing but with extra steps (and with the side effect of potentially resetting psprite offsets).
This commit is contained in:
parent
997823dd27
commit
aaa65af795
8 changed files with 75 additions and 44 deletions
|
|
@ -125,6 +125,7 @@ Class ItamexHammer : SWWMWeapon
|
|||
|
||||
action void A_AltCharge()
|
||||
{
|
||||
A_CanBob();
|
||||
invoker.charge = min(100.,invoker.charge+SWWMUtility.Lerp(4.,.5,(invoker.charge/100.)**.25));
|
||||
double vibe = (invoker.charge/100.)**2.;
|
||||
A_WeaponOffset(FRandom[Hammer](-.5,.5)*vibe,32+FRandom[Hammer](-.5,.5)*vibe,WOF_INTERPOLATE);
|
||||
|
|
@ -132,6 +133,7 @@ Class ItamexHammer : SWWMWeapon
|
|||
|
||||
action State A_AltHold()
|
||||
{
|
||||
A_CanBob();
|
||||
invoker.charge = min(100.,invoker.charge+SWWMUtility.Lerp(4.,.5,(invoker.charge/100.)**.25));
|
||||
double vibe = (invoker.charge/100.)**2.;
|
||||
A_WeaponOffset(FRandom[Hammer](-.5,.5)*vibe,32+FRandom[Hammer](-.5,.5)*vibe,WOF_INTERPOLATE);
|
||||
|
|
|
|||
|
|
@ -655,6 +655,7 @@ Class MisterRifle : SWWMWeapon
|
|||
action void A_MisterStartRail()
|
||||
{
|
||||
// pre-heat our ovens
|
||||
A_CanBob();
|
||||
A_StartSound("mister/chargeover",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
A_StartSound("mister/holdover",CHAN_WEAPONEXTRA,CHANF_LOOPING,.01,4.,.5);
|
||||
invoker.prefirecnt = 0;
|
||||
|
|
@ -662,6 +663,7 @@ Class MisterRifle : SWWMWeapon
|
|||
|
||||
action State A_MisterHoldRail()
|
||||
{
|
||||
A_CanBob();
|
||||
if ( (invoker.prefirecnt < 100) && !(player.cmd.buttons&BT_ATTACK) )
|
||||
{
|
||||
invoker.prefirecnt = 0;
|
||||
|
|
@ -1305,7 +1307,7 @@ Class MisterRifle : SWWMWeapon
|
|||
Goto AutoCycle;
|
||||
FireOverpressure:
|
||||
XZW2 A 2 A_MisterStartRail();
|
||||
XZW4 DEF 5;
|
||||
XZW4 DEF 5 A_CanBob();
|
||||
XZW4 F 1 A_MisterHoldRail();
|
||||
Wait;
|
||||
FireOverpressureRelease:
|
||||
|
|
|
|||
|
|
@ -613,6 +613,14 @@ Class SWWMWeapon : Weapon abstract
|
|||
player.SetPSprite(PSP_FLASH,null);
|
||||
player.mo.BringUpWeapon();
|
||||
}
|
||||
// quick 'n dirty function to enable bobbing for the current state
|
||||
// cleaner than using A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH), at least
|
||||
action void A_CanBob( bool toggle = true )
|
||||
{
|
||||
if ( !player ) return;
|
||||
if ( toggle ) player.weaponstate |= WF_WEAPONBOBBING;
|
||||
else player.weaponstate &= ~WF_WEAPONBOBBING;
|
||||
}
|
||||
override void PlayUpSound( Actor origin )
|
||||
{
|
||||
if ( UpSound ) origin.A_StartSound(UpSound,CHAN_WEAPON,CHANF_OVERLAP);
|
||||
|
|
|
|||
|
|
@ -393,6 +393,7 @@ Class Hellblazer : SWWMWeapon
|
|||
return A_JumpX("Unload","Unload_G");
|
||||
if ( player.cmd.buttons&BT_ATTACK )
|
||||
{
|
||||
A_CanBob();
|
||||
invoker.preloadcnt++;
|
||||
if ( (player.cmd.buttons&BT_ALTATTACK) || ((invoker.clipcount < 2) && (invoker.preloadcnt >= 10)) )
|
||||
{
|
||||
|
|
@ -440,6 +441,7 @@ Class Hellblazer : SWWMWeapon
|
|||
return A_JumpX("Unload","Unload_G");
|
||||
if ( player.cmd.buttons&BT_ALTATTACK )
|
||||
{
|
||||
A_CanBob();
|
||||
invoker.preloadcnt++;
|
||||
if ( (player.cmd.buttons&BT_ATTACK) || ((invoker.clipcount < 2) && (invoker.preloadcnt >= 10)) )
|
||||
{
|
||||
|
|
@ -478,19 +480,25 @@ Class Hellblazer : SWWMWeapon
|
|||
XZW8 ABCD 2;
|
||||
Goto Ready_G; // state jump to cycling is done elsewhere
|
||||
PreLoad:
|
||||
XZW2 A 10 A_StartSound("hellblazer/preload",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW2 A 10
|
||||
{
|
||||
A_StartSound("hellblazer/preload",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
A_CanBob();
|
||||
}
|
||||
XZW2 A 2
|
||||
{
|
||||
invoker.magpos = (invoker.magpos+1)%6;
|
||||
invoker.preload++;
|
||||
A_GlassOverlay("Cycle_G");
|
||||
A_CanBob();
|
||||
}
|
||||
XZW3 E 2;
|
||||
XZW3 FGHI 2;
|
||||
XZW3 I 0;
|
||||
XZW3 FE 2;
|
||||
XZW3 E 2 A_CanBob();
|
||||
XZW3 FGHI 2 A_CanBob();
|
||||
XZW3 I 0 A_CanBob();
|
||||
XZW3 FE 2 A_CanBob();
|
||||
XZW2 A 1
|
||||
{
|
||||
A_CanBob();
|
||||
if ( !(player.cmd.buttons&BT_ATTACK) )
|
||||
return A_JumpX("DoFire","DoFire_G");
|
||||
if ( (player.cmd.buttons&BT_ALTATTACK) || (invoker.preload >= min(invoker.clipcount-1,2)) )
|
||||
|
|
@ -499,19 +507,25 @@ Class Hellblazer : SWWMWeapon
|
|||
}
|
||||
Wait;
|
||||
PreAltLoad:
|
||||
XZW2 A 10 A_StartSound("hellblazer/preload",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW2 A 10
|
||||
{
|
||||
A_StartSound("hellblazer/preload",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
A_CanBob();
|
||||
}
|
||||
XZW2 A 2
|
||||
{
|
||||
invoker.magpos = (invoker.magpos+1)%6;
|
||||
invoker.preload++;
|
||||
A_GlassOverlay("Cycle_G");
|
||||
A_CanBob();
|
||||
}
|
||||
XZW3 E 2;
|
||||
XZW3 FGHI 2;
|
||||
XZW3 I 0;
|
||||
XZW3 FE 2;
|
||||
XZW3 E 2 A_CanBob();
|
||||
XZW3 FGHI 2 A_CanBob();
|
||||
XZW3 I 0 A_CanBob();
|
||||
XZW3 FE 2 A_CanBob();
|
||||
XZW2 A 1
|
||||
{
|
||||
A_CanBob();
|
||||
if ( !(player.cmd.buttons&BT_ALTATTACK) )
|
||||
return A_JumpX("DoAltFire","DoAltFire_G");
|
||||
if ( (player.cmd.buttons&BT_ATTACK) || (invoker.preload >= min(invoker.clipcount-1,2)) )
|
||||
|
|
@ -529,7 +543,7 @@ Class Hellblazer : SWWMWeapon
|
|||
{
|
||||
if ( !(player.cmd.buttons&BT_ATTACK) )
|
||||
return A_JumpX("DoFire","DoFire_G");
|
||||
A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
A_CanBob();
|
||||
if ( (player.cmd.buttons&BT_ZOOM) && !(player.oldbuttons&BT_ZOOM) )
|
||||
A_CheckLockOn();
|
||||
if ( (player.cmd.buttons&BT_RELOAD) && !(player.oldbuttons&BT_RELOAD) )
|
||||
|
|
@ -551,7 +565,7 @@ Class Hellblazer : SWWMWeapon
|
|||
{
|
||||
if ( !(player.cmd.buttons&BT_ALTATTACK) )
|
||||
return A_JumpX("DoAltFire","DoAltFire_G");
|
||||
A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
A_CanBob();
|
||||
if ( (player.cmd.buttons&BT_ZOOM) && !(player.oldbuttons&BT_ZOOM) )
|
||||
A_CheckLockOn();
|
||||
if ( (player.cmd.buttons&BT_RELOAD) && !(player.oldbuttons&BT_RELOAD) )
|
||||
|
|
@ -566,14 +580,15 @@ Class Hellblazer : SWWMWeapon
|
|||
Cycle:
|
||||
XZW2 A 2
|
||||
{
|
||||
A_CanBob();
|
||||
invoker.spinskipped--;
|
||||
invoker.magpos = (invoker.magpos+1)%6;
|
||||
A_GlassOverlay("Cycle_G");
|
||||
}
|
||||
XZW3 E 2;
|
||||
XZW3 FGHI 2;
|
||||
XZW3 I 0;
|
||||
XZW3 FE 2;
|
||||
XZW3 E 2 A_CanBob();
|
||||
XZW3 FGHI 2 A_CanBob();
|
||||
XZW3 I 0 A_CanBob();
|
||||
XZW3 FE 2 A_CanBob();
|
||||
Goto Ready;
|
||||
Cycle_G:
|
||||
XZW7 A 2 A_StartSound("hellblazer/shift",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
|
|
|
|||
|
|
@ -274,20 +274,20 @@ Class Ynykron : SWWMWeapon
|
|||
A_StartSound("ynykron/ventopen",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
A_BumpFOV(.995);
|
||||
A_QuakeEx(1.2,1.2,1.2,6,0,15,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.2);
|
||||
A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
A_CanBob();
|
||||
}
|
||||
XZWA ABCDEF 2 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
XZWA ABCDEF 2 A_CanBob();
|
||||
XZWA G 2
|
||||
{
|
||||
A_StartSound("ynykron/ventclose",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
A_CanBob();
|
||||
}
|
||||
XZWA H 2 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
XZWA H 2 A_CanBob();
|
||||
XZWA I 2
|
||||
{
|
||||
A_BumpFOV(.99);
|
||||
A_QuakeEx(1.4,1.4,1.4,6,0,15,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.3);
|
||||
A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
A_CanBob();
|
||||
}
|
||||
Goto Ready;
|
||||
ReadyVentSmoke:
|
||||
|
|
@ -441,36 +441,36 @@ Class Ynykron : SWWMWeapon
|
|||
A_OverlayFlags(PSP_WEAPON+1,PSPF_RENDERSTYLE|PSPF_ALPHA|PSPF_FORCESTYLE|PSPF_FORCEALPHA,true);
|
||||
A_OverlayRenderStyle(PSP_WEAPON+1,STYLE_Add);
|
||||
A_OverlayAlpha(PSP_WEAPON+1,0.);
|
||||
A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
A_CanBob();
|
||||
A_StartSound("ynykron/ventopen",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
}
|
||||
XZW7 R 2 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
XZW7 R 2 A_CanBob();
|
||||
XZW7 S 2
|
||||
{
|
||||
A_BumpFOV(.995);
|
||||
A_QuakeEx(1.2,1.2,1.2,6,0,15,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.2);
|
||||
A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
A_CanBob();
|
||||
}
|
||||
XZW7 TUV 2 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
XZW7 TUV 2 A_CanBob();
|
||||
Discharging:
|
||||
XZW7 W 2
|
||||
{
|
||||
A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
A_CanBob();
|
||||
return A_JumpIf(invoker.chargestate==CS_IDLE,1);
|
||||
}
|
||||
Wait;
|
||||
XZW7 W 3 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
XZW7 W 3 A_CanBob();
|
||||
XZW7 X 2
|
||||
{
|
||||
A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
A_CanBob();
|
||||
A_StartSound("ynykron/ventclose",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
}
|
||||
XZW7 Y 2 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
XZW7 Y 2 A_CanBob();
|
||||
XZW7 Z 2
|
||||
{
|
||||
A_BumpFOV(.99);
|
||||
A_QuakeEx(1.4,1.4,1.4,6,0,15,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.3);
|
||||
A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
A_CanBob();
|
||||
}
|
||||
Goto Ready;
|
||||
DischargeSmoke:
|
||||
|
|
|
|||
|
|
@ -297,13 +297,13 @@ Class Sparkster : SWWMWeapon
|
|||
A_StartSound("biospark/prefire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
return A_JumpIf(invoker.doublestacc,"DoubleFire");
|
||||
}
|
||||
XZW4 Y 12;
|
||||
XZW4 Y 12 A_CanBob();
|
||||
XZW4 Y 1 A_FireSpark(0);
|
||||
XZW2 NOPQ 2;
|
||||
Goto PreVent;
|
||||
DoubleFire:
|
||||
XZW5 Z 1;
|
||||
XZW8 L 12;
|
||||
XZW8 L 12 A_CanBob();
|
||||
XZW8 L 1 A_FireSpark(0);
|
||||
XZW7 EFGH 2;
|
||||
Goto DoublePreVent;
|
||||
|
|
@ -314,19 +314,20 @@ Class Sparkster : SWWMWeapon
|
|||
A_StartSound("biospark/prefire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
return A_JumpIf(invoker.doublestacc,"DoubleAltFire");
|
||||
}
|
||||
XZW4 Z 12;
|
||||
XZW4 Z 12 A_CanBob();
|
||||
XZW4 Z 1 A_FireSpark(1);
|
||||
XZW2 RSTU 2;
|
||||
Goto PreVent;
|
||||
DoubleAltFire:
|
||||
XZW5 Z 1;
|
||||
XZW8 M 12;
|
||||
XZW8 M 12 A_CanBob();
|
||||
XZW8 M 1 A_FireSpark(1);
|
||||
XZW7 IJKL 2;
|
||||
Goto DoublePreVent;
|
||||
PreVent:
|
||||
XZW2 AAAAAAAA 1
|
||||
{
|
||||
A_CanBob();
|
||||
if ( invoker.ClipCount > 0 )
|
||||
{
|
||||
if ( player.cmd.buttons&BT_ATTACK )
|
||||
|
|
@ -340,6 +341,7 @@ Class Sparkster : SWWMWeapon
|
|||
DoublePreVent:
|
||||
XZW5 ZZZZZZZZ 1
|
||||
{
|
||||
A_CanBob();
|
||||
if ( (invoker.ClipCount > 0) && (invoker.ClipCount%4) )
|
||||
{
|
||||
if ( player.cmd.buttons&BT_ATTACK )
|
||||
|
|
@ -369,6 +371,7 @@ Class Sparkster : SWWMWeapon
|
|||
Vent:
|
||||
XZW2 A 8
|
||||
{
|
||||
A_CanBob();
|
||||
A_Overlay(PSP_WEAPON+2,"VentFlash");
|
||||
A_OverlayFlags(PSP_WEAPON+2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
|
||||
A_OverlayRenderStyle(PSP_WEAPON+2,STYLE_Add);
|
||||
|
|
@ -378,6 +381,7 @@ Class Sparkster : SWWMWeapon
|
|||
DoubleVent:
|
||||
XZW5 Z 8
|
||||
{
|
||||
A_CanBob();
|
||||
A_Overlay(PSP_WEAPON+2,"VentFlash");
|
||||
A_OverlayFlags(PSP_WEAPON+2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
|
||||
A_OverlayRenderStyle(PSP_WEAPON+2,STYLE_Add);
|
||||
|
|
@ -392,28 +396,28 @@ Class Sparkster : SWWMWeapon
|
|||
XZW2 A 0 A_JumpIf(invoker.doublestacc,"DoubleZoom");
|
||||
XZW2 A 0 A_JumpIf(invoker.ClipCount<2,"NoZoom");
|
||||
XZW2 A 1 A_StartSound("biospark/prethird",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW5 A 12;
|
||||
XZW5 A 12 A_CanBob();
|
||||
XZW5 A 1 A_FireSpark(2);
|
||||
XZW2 VWXYZ 2;
|
||||
Goto Ready;
|
||||
DoubleZoom:
|
||||
XZW5 Z 0 A_JumpIf((invoker.ClipCount<2)||((invoker.ClipCount>4)&&(invoker.ClipCount<6)),"DoubleNoZoom");
|
||||
XZW5 Z 1 A_StartSound("biospark/prethird",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW8 N 12;
|
||||
XZW8 N 12 A_CanBob();
|
||||
XZW8 N 1 A_FireSpark(2);
|
||||
XZW7 MNOPQ 2;
|
||||
Goto DoubleReady;
|
||||
NoZoom:
|
||||
XZW2 A 1 A_StartSound("biospark/prethird",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW5 A 12;
|
||||
XZW5 A 12 A_CanBob();
|
||||
XZW5 A 8 A_FailZoom();
|
||||
XZW2 A 20;
|
||||
XZW2 A 20 A_CanBob();
|
||||
Goto Ready;
|
||||
DoubleNoZoom:
|
||||
XZW5 Z 1 A_StartSound("biospark/prethird",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW8 N 12;
|
||||
XZW8 N 12 A_CanBob();
|
||||
XZW8 N 8 A_FailZoom();
|
||||
XZW5 Z 20;
|
||||
XZW5 Z 20 A_CanBob();
|
||||
Goto DoubleReady;
|
||||
Reload:
|
||||
XZW2 A 0
|
||||
|
|
|
|||
|
|
@ -884,7 +884,7 @@ Class DualExplodiumGun : SWWMWeapon
|
|||
player.SetPSprite(PSP_WEAPON+1,ResolveState("LeftFire"));
|
||||
// allow bobbing while the right weapon reloads
|
||||
if ( !sis.CurState.InStateSequence(ResolveState("Fire")) && !sis.CurState.InStateSequence(ResolveState("FireLast")) )
|
||||
A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH);
|
||||
A_CanBob();
|
||||
}
|
||||
Wait;
|
||||
Fire:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue