From deb093fcbdfbea356e7032e71bffbaf8273788de Mon Sep 17 00:00:00 2001 From: div0 Date: Tue, 14 Oct 2008 18:45:40 +0000 Subject: [PATCH] fix antilag 2 git-svn-id: svn://svn.icculus.org/nexuiz/trunk@4754 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/defaultNexuiz.cfg | 2 +- data/qcsrc/server/antilag.qc | 2 +- data/qcsrc/server/antilag.qh | 3 +++ data/qcsrc/server/cl_weaponsystem.qc | 8 ++++---- data/qcsrc/server/g_damage.qc | 2 +- data/qcsrc/server/w_common.qc | 4 ++-- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/data/defaultNexuiz.cfg b/data/defaultNexuiz.cfg index 62ccd0c03..b643069cd 100644 --- a/data/defaultNexuiz.cfg +++ b/data/defaultNexuiz.cfg @@ -268,7 +268,7 @@ alias g_waypointeditor_saveall "impulse 106" locs_enable 0 pausable 0 -set g_antilag 1 +set g_antilag 2 // 1: client side hitscan, 2: history trace set g_shootfromeye 0 set g_shootfromcenter 0 set g_weapon_stay 0 diff --git a/data/qcsrc/server/antilag.qc b/data/qcsrc/server/antilag.qc index 263038759..04db32027 100644 --- a/data/qcsrc/server/antilag.qc +++ b/data/qcsrc/server/antilag.qc @@ -1,4 +1,4 @@ -#define ANTILAG_MAX_ORIGINS 32 +#define ANTILAG_MAX_ORIGINS 16 .vector antilag_origins[ANTILAG_MAX_ORIGINS]; .float antilag_times[ANTILAG_MAX_ORIGINS]; .float antilag_index; diff --git a/data/qcsrc/server/antilag.qh b/data/qcsrc/server/antilag.qh index 757cf7e89..f7bed7b77 100644 --- a/data/qcsrc/server/antilag.qh +++ b/data/qcsrc/server/antilag.qh @@ -3,3 +3,6 @@ float antilag_find(entity e, float t); vector antilag_takebackorigin(entity e, float t); void antilag_takeback(entity e, float t); void antilag_restore(entity e); + +#define ANTILAG_LATENCY(e) min(0.4, e.ping * 0.001) +// add one ticrate? diff --git a/data/qcsrc/server/cl_weaponsystem.qc b/data/qcsrc/server/cl_weaponsystem.qc index 6962f12bd..bf5b558b6 100644 --- a/data/qcsrc/server/cl_weaponsystem.qc +++ b/data/qcsrc/server/cl_weaponsystem.qc @@ -79,7 +79,7 @@ void W_SetupShot(entity ent, vector vecs, float antilag, float recoil, string sn if(self.antilag_debug) antilag_takeback(self.cursor_trace_ent, time - self.antilag_debug); else - antilag_takeback(self.cursor_trace_ent, time - self.ping * 0.001); + antilag_takeback(self.cursor_trace_ent, time - ANTILAG_LATENCY(self)); traceline(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, self); antilag_restore(self.cursor_trace_ent); @@ -100,8 +100,8 @@ void W_SetupShot(entity ent, vector vecs, float antilag, float recoil, string sn { vector v, vplus, vel; float X; - v = antilag_takebackorigin(self.cursor_trace_ent, time - (self.ping * 0.001 )); - vplus = antilag_takebackorigin(self.cursor_trace_ent, time - (self.ping * 0.001 + 0.01)); + v = antilag_takebackorigin(self.cursor_trace_ent, time - (ANTILAG_LATENCY(self) )); + vplus = antilag_takebackorigin(self.cursor_trace_ent, time - (ANTILAG_LATENCY(self) + 0.01)); vel = (vplus - v) * (1 / 0.01); // solve: v + X * vel = closest to self.origin + self.view_ofs, v_forward axis v -= (self.origin + self.view_ofs); @@ -113,7 +113,7 @@ void W_SetupShot(entity ent, vector vecs, float antilag, float recoil, string sn // (v + X * vel)^2 closest to 0 // v^2 + 2 * X * (v * vel) + X^2 * vel^2 closest to 0 X = -(v * vel) / (vel * vel); - dprint("dead center needs adjustment of ", ftos(X * 1000), " (that is, ", ftos(self.ping + X * 1000), " instead of ", ftos(self.ping), "\n"); + dprint("dead center needs adjustment of ", ftos(X), " (that is, ", ftos(ANTILAG_LATENCY(self) + X), " instead of ", ftos(ANTILAG_LATENCY(self)), "\n"); } } } diff --git a/data/qcsrc/server/g_damage.qc b/data/qcsrc/server/g_damage.qc index 6191cec8f..4a68559eb 100644 --- a/data/qcsrc/server/g_damage.qc +++ b/data/qcsrc/server/g_damage.qc @@ -695,7 +695,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float // find height of hit on player axis // if above view_ofs and below maxs, and also in the middle half of the bbox, it is head shot vector headmins, headmaxs, org; - org = antilag_takebackorigin(targ, time - (self.ping * 0.001)); + org = antilag_takebackorigin(targ, time - ANTILAG_LATENCY(attacker)); headmins = org + '0.5 0 0' * targ.mins_x + '0 0.5 0' * targ.mins_y + '0 0 1' * targ.view_ofs_z; headmaxs = org + '0.5 0 0' * targ.maxs_x + '0 0.5 0' * targ.maxs_y + '0 0 1' * targ.maxs_z; if(trace_hits_box(railgun_start, railgun_end, headmins, headmaxs)) diff --git a/data/qcsrc/server/w_common.qc b/data/qcsrc/server/w_common.qc index 96b517c43..cc29528db 100644 --- a/data/qcsrc/server/w_common.qc +++ b/data/qcsrc/server/w_common.qc @@ -46,7 +46,7 @@ void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, f if(self.antilag_debug) traceline_antilag (self, start, end, FALSE, self, self.antilag_debug); else - traceline_antilag (self, start, end, FALSE, self, self.ping * 0.001); + traceline_antilag (self, start, end, FALSE, self, ANTILAG_LATENCY(self)); // if it is world we can't hurt it so stop now if (trace_ent == world || trace_fraction == 1) @@ -121,7 +121,7 @@ void fireBullet (vector start, vector dir, float spread, float damage, float for if(self.antilag_debug) traceline_antilag (self, start, end, FALSE, self, self.antilag_debug); else - traceline_antilag (self, start, end, FALSE, self, self.ping * 0.001); + traceline_antilag (self, start, end, FALSE, self, ANTILAG_LATENCY(self)); if (tracer) { -- 2.39.2