From d35415a2feca70c00f7e009e290513a5a0b48014 Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 11 Jun 2018 23:46:52 +1000 Subject: [PATCH] Potential fix for arc's buffer overflow issue (hacky method) --- qcsrc/common/weapons/weapon/arc.qc | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/qcsrc/common/weapons/weapon/arc.qc b/qcsrc/common/weapons/weapon/arc.qc index e5d4f2eb2..3fe93fe4c 100644 --- a/qcsrc/common/weapons/weapon/arc.qc +++ b/qcsrc/common/weapons/weapon/arc.qc @@ -863,6 +863,8 @@ void Reset_ArcBeam() } } +.float beam_tag_index; +.int beam_prevusevieworigin; void Draw_ArcBeam(entity this) { float dt = time - this.move_time; @@ -911,10 +913,16 @@ void Draw_ArcBeam(entity this) else { start_pos = this.origin; } - int v_shot_idx; // used later - (v_shot_idx = gettagindex(wepent, "shot")) || (v_shot_idx = gettagindex(wepent, "tag_shot")); - if(v_shot_idx && this.beam_usevieworigin == 2) - start_pos = gettaginfo(wepent, v_shot_idx) - '0 0 2'; + if(this.beam_prevusevieworigin != this.beam_usevieworigin) + { + this.beam_prevusevieworigin = this.beam_usevieworigin; + int v_shot_idx; // used later + (v_shot_idx = gettagindex(wepent, "shot")) || (v_shot_idx = gettagindex(wepent, "tag_shot")); + this.beam_tag_index = v_shot_idx; + } + + if(this.beam_tag_index && this.beam_usevieworigin == 2) + start_pos = gettaginfo(wepent, this.beam_tag_index) - '0 0 2'; // trace forward with an estimation WarpZone_TraceLine( @@ -933,7 +941,7 @@ void Draw_ArcBeam(entity this) // move shot origin to the actual gun muzzle origin vector origin_offset = '0 0 0'; - if(!v_shot_idx || this.beam_usevieworigin != 2) + if(!this.beam_tag_index || this.beam_usevieworigin != 2) { this.beam_shotorigin = wepent.movedir; origin_offset = -- 2.39.2