From be24f8ae026bd84c31eb01be275a098b2b544696 Mon Sep 17 00:00:00 2001 From: div0 Date: Sun, 20 Sep 2009 09:26:43 +0000 Subject: [PATCH] save/restore v_forward when calling weapon think functions (fixes mikeeusa's "Crylink fires two streams" bug) git-svn-id: svn://svn.icculus.org/nexuiz/trunk@7844 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_weapons.qc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/data/qcsrc/server/cl_weapons.qc b/data/qcsrc/server/cl_weapons.qc index 2040b0107..5fd76dcf9 100644 --- a/data/qcsrc/server/cl_weapons.qc +++ b/data/qcsrc/server/cl_weapons.qc @@ -297,6 +297,8 @@ void W_ThrowWeapon(vector velo, vector delta, float doreduce) // Bringed back weapon frame void W_WeaponFrame() { + vector fo, ri, up; + if((arena_roundbased && time < warmup) || ((time < game_starttime) && !cvar("sv_ready_restart_after_countdown"))) return; @@ -313,6 +315,9 @@ void W_WeaponFrame() } makevectors(self.v_angle); + fo = v_forward; // save them in case the weapon think functions change it + ri = v_right; + up = v_up; // Change weapon if (self.weapon != self.switchweapon) @@ -362,11 +367,21 @@ void W_WeaponFrame() wb = 0; } if(wb) + { + v_forward = fo; + v_right = ri; + v_up = up; weapon_action(self.weapon, WR_THINK); + } if (time + frametime * 0.5 >= self.weapon_nextthink) { if(self.weapon_think) + { + v_forward = fo; + v_right = ri; + v_up = up; self.weapon_think(); + } else bprint("\{1}^1ERROR: undefined weapon think function for ", self.netname, "\n"); } -- 2.39.2