From 13c8c9afccee3ae931713bad953b03c582e343f7 Mon Sep 17 00:00:00 2001 From: drjaska Date: Thu, 5 Sep 2024 08:39:18 +0300 Subject: [PATCH] Allow for reversed spread, inaccurate to accurate --- qcsrc/common/weapons/weapon/machinegun.qc | 49 +++++++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/qcsrc/common/weapons/weapon/machinegun.qc b/qcsrc/common/weapons/weapon/machinegun.qc index cee025caf..672ccc80c 100644 --- a/qcsrc/common/weapons/weapon/machinegun.qc +++ b/qcsrc/common/weapons/weapon/machinegun.qc @@ -5,6 +5,10 @@ .float machinegun_spread_accumulation; .float spreadUpdateTime; +//float spreadSpectrumMin; // localized to Auto and Burst +//float spreadSpectrumMax; // localized to Auto and Burst +//bool inversedSpread; // localized to Auto + ERASEABLE void MachineGun_Update_Spread(entity actor, .entity weaponentity, float spreadSpectrumMin, float spreadSpectrumMax) @@ -135,11 +139,33 @@ void W_MachineGun_Attack_Auto(Weapon thiswep, entity actor, .entity weaponentity actor.punchangle_y = random() - 0.5; } - MachineGun_Update_Spread(actor, weaponentity, WEP_CVAR(WEP_MACHINEGUN, spread_min), WEP_CVAR(WEP_MACHINEGUN, spread_max)); + float spreadSpectrumMin; + float spreadSpectrumMax; + bool inversedSpread; + // check if max is lower or higher than min so it can be used invertedly, + // accurate with more firing, like Hyperion weapons from Borderlands + if (WEP_CVAR(WEP_MACHINEGUN, spread_min) < WEP_CVAR(WEP_MACHINEGUN, spread_max)) + { + spreadSpectrumMin = WEP_CVAR(WEP_MACHINEGUN, spread_min); + spreadSpectrumMax = WEP_CVAR(WEP_MACHINEGUN, spread_max); + inversedSpread = false; + } + else + { + spreadSpectrumMin = WEP_CVAR(WEP_MACHINEGUN, spread_max); + spreadSpectrumMax = WEP_CVAR(WEP_MACHINEGUN, spread_min); + inversedSpread = true; + } + + MachineGun_Update_Spread(actor, weaponentity, spreadSpectrumMin, spreadSpectrumMax); float spread_accum = actor.(weaponentity).machinegun_spread_accumulation; - float spread_accuracy = WEP_CVAR(WEP_MACHINEGUN, spread_min) + spread_accum; + float spread_accuracy; + if (!inversedSpread) + spread_accuracy = spreadSpectrumMin + spread_accum; + else + spread_accuracy = spreadSpectrumMax - spread_accum; fireBullet_falloff(actor, weaponentity, w_shotorg, w_shotdir, spread_accuracy, @@ -180,7 +206,24 @@ void W_MachineGun_Attack_Burst(Weapon thiswep, entity actor, .entity weaponentit actor.punchangle_y = random() - 0.5; } - MachineGun_Update_Spread(actor, weaponentity, WEP_CVAR(WEP_MACHINEGUN, spread_min), WEP_CVAR(WEP_MACHINEGUN, spread_max)); + float spreadSpectrumMin; + float spreadSpectrumMax; + // check if max is lower or higher than min so it can be used invertedly, + // accurate with more firing, like Hyperion weapons from Borderlands + if (WEP_CVAR(WEP_MACHINEGUN, spread_min) < WEP_CVAR(WEP_MACHINEGUN, spread_max)) + { + spreadSpectrumMin = WEP_CVAR(WEP_MACHINEGUN, spread_min); + spreadSpectrumMax = WEP_CVAR(WEP_MACHINEGUN, spread_max); + //inversedSpread = false; + } + else + { + spreadSpectrumMin = WEP_CVAR(WEP_MACHINEGUN, spread_max); + spreadSpectrumMax = WEP_CVAR(WEP_MACHINEGUN, spread_min); + //inversedSpread = true; + } + + MachineGun_Update_Spread(actor, weaponentity, spreadSpectrumMin, spreadSpectrumMax); float spread_accum = actor.(weaponentity).machinegun_spread_accumulation; -- 2.39.2