diff --git a/language.version b/language.version index 5e5852054..159e335aa 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1097 \cu(Mon 22 Jan 21:00:43 CET 2024)\c-"; -SWWM_SHORTVER="\cw1.3pre r1097 \cu(2024-01-22 21:00:43)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1098 \cu(Wed 24 Jan 13:32:24 CET 2024)\c-"; +SWWM_SHORTVER="\cw1.3pre r1098 \cu(2024-01-24 13:32:24)\c-"; diff --git a/zscript/dlc1/swwm_hammertime.zsc b/zscript/dlc1/swwm_hammertime.zsc index 747745df7..259b7ec6d 100644 --- a/zscript/dlc1/swwm_hammertime.zsc +++ b/zscript/dlc1/swwm_hammertime.zsc @@ -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); diff --git a/zscript/dlc1/swwm_mister.zsc b/zscript/dlc1/swwm_mister.zsc index 7fc74b610..0751dcea1 100644 --- a/zscript/dlc1/swwm_mister.zsc +++ b/zscript/dlc1/swwm_mister.zsc @@ -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: diff --git a/zscript/weapons/swwm_baseweapon.zsc b/zscript/weapons/swwm_baseweapon.zsc index 0bedd59b2..0bce41a63 100644 --- a/zscript/weapons/swwm_baseweapon.zsc +++ b/zscript/weapons/swwm_baseweapon.zsc @@ -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); diff --git a/zscript/weapons/swwm_blazeit.zsc b/zscript/weapons/swwm_blazeit.zsc index 4e7c34b00..33714fa7c 100644 --- a/zscript/weapons/swwm_blazeit.zsc +++ b/zscript/weapons/swwm_blazeit.zsc @@ -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); diff --git a/zscript/weapons/swwm_deathlydeathcannon.zsc b/zscript/weapons/swwm_deathlydeathcannon.zsc index bc78bf70b..10c67613c 100644 --- a/zscript/weapons/swwm_deathlydeathcannon.zsc +++ b/zscript/weapons/swwm_deathlydeathcannon.zsc @@ -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: diff --git a/zscript/weapons/swwm_sparkyboi.zsc b/zscript/weapons/swwm_sparkyboi.zsc index baabf1921..7c10b61f8 100644 --- a/zscript/weapons/swwm_sparkyboi.zsc +++ b/zscript/weapons/swwm_sparkyboi.zsc @@ -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 diff --git a/zscript/weapons/swwm_splode.zsc b/zscript/weapons/swwm_splode.zsc index ca1053e27..02e6365d7 100644 --- a/zscript/weapons/swwm_splode.zsc +++ b/zscript/weapons/swwm_splode.zsc @@ -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: