From c90c5ca03e74ebe8bfda53f55a9aa6423877de13 Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 30 Jul 2024 12:48:05 +1000 Subject: [PATCH] Fix MachineGun and Arc burst attacks not respecting IT_UNLIMITED_AMMO --- qcsrc/common/weapons/weapon/arc.qc | 22 +++++++++++++--------- qcsrc/common/weapons/weapon/machinegun.qc | 20 ++++++++++++-------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/qcsrc/common/weapons/weapon/arc.qc b/qcsrc/common/weapons/weapon/arc.qc index d12310c18..d1c7fbe27 100644 --- a/qcsrc/common/weapons/weapon/arc.qc +++ b/qcsrc/common/weapons/weapon/arc.qc @@ -644,15 +644,19 @@ METHOD(Arc, wr_think, void(entity thiswep, entity actor, .entity weaponentity, i w_ready(thiswep, actor, weaponentity, fire); return; } - float ammo_available = GetResource(actor, thiswep.ammo_type); - // We don't want to shoot 3 rounds if there's 2 left in the mag, so we'll use a fraction. - // Also keep the fraction <= 1 otherwise we'd mag dump in one burst. - float burst_fraction = min(1, ammo_available / WEP_CVAR(arc, bolt_ammo)); - int to_shoot = floor(WEP_CVAR(arc, bolt_count) * burst_fraction); - - // We also don't want to use 3 rounds if there's only 2 left. - int to_use = min(WEP_CVAR(arc, bolt_ammo), ammo_available); - W_DecreaseAmmo(thiswep, actor, to_use, weaponentity); + int to_shoot = WEP_CVAR(arc, bolt_count); + if(!(actor.items & IT_UNLIMITED_AMMO)) + { + float ammo_available = GetResource(actor, thiswep.ammo_type); + // We don't want to shoot 3 rounds if there's 2 left in the mag, so we'll use a fraction. + // Also keep the fraction <= 1 otherwise we'd mag dump in one burst. + float burst_fraction = min(1, ammo_available / WEP_CVAR(arc, bolt_ammo)); + to_shoot = floor(to_shoot * burst_fraction); + + // We also don't want to use 3 rounds if there's only 2 left. + int to_use = min(WEP_CVAR(arc, bolt_ammo), ammo_available); + W_DecreaseAmmo(thiswep, actor, to_use, weaponentity); + } // Bursting counts up to 0 from a negative. actor.(weaponentity).misc_bulletcounter = -to_shoot; diff --git a/qcsrc/common/weapons/weapon/machinegun.qc b/qcsrc/common/weapons/weapon/machinegun.qc index efb4913c0..5414ed9d9 100644 --- a/qcsrc/common/weapons/weapon/machinegun.qc +++ b/qcsrc/common/weapons/weapon/machinegun.qc @@ -208,14 +208,18 @@ METHOD(MachineGun, wr_think, void(entity thiswep, entity actor, .entity weaponen ammo_available = GetResource(actor, thiswep.ammo_type); } - // We don't want to shoot 3 rounds if there's 2 left in the mag, so we'll use a fraction. - // Also keep the fraction <= 1 otherwise we'd mag dump in one burst. - float burst_fraction = min(1, ammo_available / WEP_CVAR(machinegun, burst_ammo)); - int to_shoot = floor(WEP_CVAR(machinegun, burst) * burst_fraction); - - // We also don't want to use 3 rounds if there's only 2 left. - int to_use = min(WEP_CVAR(machinegun, burst_ammo), ammo_available); - W_DecreaseAmmo(thiswep, actor, to_use, weaponentity); + int to_shoot = WEP_CVAR(machinegun, burst); + if(!(actor.items & IT_UNLIMITED_AMMO)) + { + // We don't want to shoot 3 rounds if there's 2 left in the mag, so we'll use a fraction. + // Also keep the fraction <= 1 otherwise we'd mag dump in one burst. + float burst_fraction = min(1, ammo_available / WEP_CVAR(machinegun, burst_ammo)); + to_shoot = floor(to_shoot * burst_fraction); + + // We also don't want to use 3 rounds if there's only 2 left. + int to_use = min(WEP_CVAR(machinegun, burst_ammo), ammo_available); + W_DecreaseAmmo(thiswep, actor, to_use, weaponentity); + } // Bursting counts up to 0 from a negative. actor.(weaponentity).misc_bulletcounter = -to_shoot; -- 2.39.2