From: Rudolf Polzer Date: Thu, 22 Jul 2010 13:52:50 +0000 (+0200) Subject: make the second trace hit X-Git-Tag: xonotic-v0.1.0preview~423^2~20 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=b4a912024bf4786b87ee5ab789c53befcc48acb2;p=xonotic%2Fxonotic-data.pk3dir.git make the second trace hit --- diff --git a/qcsrc/server/w_electro.qc b/qcsrc/server/w_electro.qc index 02cfa0a6e..2be1573cd 100644 --- a/qcsrc/server/w_electro.qc +++ b/qcsrc/server/w_electro.qc @@ -215,6 +215,8 @@ float lgbeam_send(entity to, float sf) void lgbeam_think() { vector endpos; + float oldsolid; + self.owner.prevlgfire = time; if (self.owner.weaponentity.state != WS_INUSE || (self.owner.ammo_cells <= 0 && !(self.owner.items & IT_UNLIMITED_WEAPON_AMMO)) || self != self.owner.lgbeam || self.owner.deadflag != DEAD_NO || !self.owner.BUTTON_ATCK) { @@ -237,9 +239,14 @@ void lgbeam_think() vecs = debug_shotorg; org = self.owner.origin + self.owner.view_ofs + v_forward * vecs_x + v_right * -vecs_y + v_up * vecs_z; + oldsolid = self.owner.dphitcontentsmask; + self.owner.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE; + WarpZone_traceline_antilag(self.owner, self.owner.origin + self.owner.view_ofs, self.owner.origin + self.owner.view_ofs + angle * cvar("g_balance_electro_primary_range"), MOVE_NORMAL, self.owner, ANTILAG_LATENCY(self.owner)); endpos = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos); - WarpZone_traceline_antilag(self.owner, org, endpos, MOVE_NORMAL, self.owner, ANTILAG_LATENCY(self.owner)); + WarpZone_traceline_antilag(self.owner, org, endpos + 4 * normalize(endpos - org), MOVE_NORMAL, self.owner, ANTILAG_LATENCY(self.owner)); + + self.owner.dphitcontentsmask = oldsolid; if not(self.owner.items & IT_UNLIMITED_WEAPON_AMMO) self.owner.ammo_cells = max(0, self.owner.ammo_cells - cvar("g_balance_electro_primary_ammo") * frametime); diff --git a/qcsrc/server/w_laser.qc b/qcsrc/server/w_laser.qc index ed1d36db8..870c26627 100644 --- a/qcsrc/server/w_laser.qc +++ b/qcsrc/server/w_laser.qc @@ -132,6 +132,8 @@ float gauntletbeam_send(entity to, float sf) void gauntletbeam_think() { vector endpos; + float oldsolid; + float damage, myforce, myradius; if(self.cnt) { @@ -168,9 +170,14 @@ void gauntletbeam_think() vecs = debug_shotorg; org = self.owner.origin + self.owner.view_ofs + v_forward * vecs_x + v_right * -vecs_y + v_up * vecs_z; + oldsolid = self.owner.dphitcontentsmask; + self.owner.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE; + WarpZone_traceline_antilag(self.owner, self.owner.origin + self.owner.view_ofs, self.owner.origin + self.owner.view_ofs + angle * myradius, MOVE_NORMAL, self.owner, ANTILAG_LATENCY(self.owner)); endpos = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos); - WarpZone_traceline_antilag(self.owner, org, endpos, MOVE_NORMAL, self.owner, ANTILAG_LATENCY(self.owner)); + WarpZone_traceline_antilag(self.owner, org, endpos + 4 * normalize(endpos - org), MOVE_NORMAL, self.owner, ANTILAG_LATENCY(self.owner)); + + self.owner.dphitcontentsmask = oldsolid; // apply the damage if(trace_fraction < 1)