From: Mario Date: Mon, 11 Jun 2018 13:46:52 +0000 (+1000) Subject: Potential fix for arc's buffer overflow issue (hacky method) X-Git-Tag: xonotic-v0.8.5~2069 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=d35415a2feca70c00f7e009e290513a5a0b48014;p=xonotic%2Fxonotic-data.pk3dir.git Potential fix for arc's buffer overflow issue (hacky method) --- 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 =