From 465d62674962da427f919c19e5b34b6f32141455 Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Tue, 17 Aug 2021 09:04:48 +0200 Subject: [PATCH] Spreadgun: Don't consume ammo until chambered. --- language.version | 4 ++-- zscript/weapons/swwm_shot.zsc | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/language.version b/language.version index a872ab634..fdd25ca8b 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw1.0.3 \cu(Sun 15 Aug 16:59:32 CEST 2021)\c-"; -SWWM_SHORTVER="\cw1.0.3 \cu(2021-08-15 16:59:32)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw1.0.4 \cu(Tue 17 Aug 09:15:42 CEST 2021)\c-"; +SWWM_SHORTVER="\cw1.0.4 \cu(2021-08-17 09:15:42)\c-"; diff --git a/zscript/weapons/swwm_shot.zsc b/zscript/weapons/swwm_shot.zsc index 8e4c4aae2..592f94bae 100644 --- a/zscript/weapons/swwm_shot.zsc +++ b/zscript/weapons/swwm_shot.zsc @@ -118,6 +118,7 @@ Class SpreadSlugTracer : SpreadgunTracer Class Spreadgun : SWWMWeapon { bool fired; // shell was used + transient bool wasfired; // for hammer priming bool chambered; // a shell is actually loaded bool emptyup; // next reload will keep the chamber empty Class loadammo, nextammo; // currently loaded shell, next shell to load @@ -259,17 +260,17 @@ Class Spreadgun : SWWMWeapon amidx = i; break; } + invoker.wasfired = false; if ( invoker.emptyup ) { if ( !invoker.fired ) player.SetPSprite(PSP_WEAPON,invoker.FindState("LoadEmpty")); else player.SetPSprite(PSP_WEAPON,invoker.FindState("LoadEmptyFired")); } else if ( !invoker.fired ) player.SetPSprite(PSP_WEAPON,invoker.FindState(primedstates[amidx])); - else player.SetPSprite(PSP_WEAPON,invoker.FindState(firedstates[amidx])); - if ( !invoker.emptyup && !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true) ) + else { - let amo = FindInventory(invoker.nextammo); - if ( amo && (amo.Amount > 0) ) amo.Amount--; + invoker.wasfired = true; + player.SetPSprite(PSP_WEAPON,invoker.FindState(firedstates[amidx])); } if ( invoker.emptyup ) A_Overlay(-9999,"LoadDummyEmpty"); else A_Overlay(-9999,"LoadDummy"); @@ -661,16 +662,21 @@ Class Spreadgun : SWWMWeapon action void A_LoadShell() { A_StartSound("spreadgun/shellin",CHAN_WEAPON,CHANF_OVERLAP); + if ( !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true) ) + { + let amo = FindInventory(invoker.nextammo); + if ( amo && (amo.Amount > 0) ) amo.Amount--; + } invoker.chambered = true; + invoker.fired = false; invoker.loadammo = invoker.nextammo; } action void A_Prime() { - if ( invoker.fired ) + if ( invoker.fired || invoker.wasfired ) { A_StartSound("spreadgun/hammer",CHAN_WEAPON,CHANF_OVERLAP); - invoker.fired = false; } }