[nexuiz-commits] r8004 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Thu Oct 1 15:58:52 EDT 2009
Author: lordhavoc
Date: 2009-10-01 15:58:51 -0400 (Thu, 01 Oct 2009)
New Revision: 8004
Modified:
trunk/data/qcsrc/server/cl_client.qc
trunk/data/qcsrc/server/cl_weapons.qc
trunk/data/qcsrc/server/cl_weaponsystem.qc
Log:
allow firing weapons on subframes (client moves) for better accuracy
Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc 2009-10-01 06:05:24 UTC (rev 8003)
+++ trunk/data/qcsrc/server/cl_client.qc 2009-10-01 19:58:51 UTC (rev 8004)
@@ -2522,7 +2522,8 @@
GrapplingHookFrame();
- if(frametime)
+ // LordHavoc: allow firing on move frames (sub-ticrate), this gives better timing on slow servers
+ //if(frametime)
{
self.items &~= self.items_added;
Modified: trunk/data/qcsrc/server/cl_weapons.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weapons.qc 2009-10-01 06:05:24 UTC (rev 8003)
+++ trunk/data/qcsrc/server/cl_weapons.qc 2009-10-01 19:58:51 UTC (rev 8004)
@@ -299,6 +299,9 @@
{
vector fo, ri, up;
+ if (frametime)
+ self.weapon_frametime = frametime;
+
if((arena_roundbased && time < warmup) || ((time < game_starttime) && !cvar("sv_ready_restart_after_countdown")))
return;
@@ -335,7 +338,7 @@
else if (self.weaponentity.state == WS_READY)
{
#ifndef INDEPENDENT_ATTACK_FINISHED
- if(ATTACK_FINISHED(self) <= time + frametime * 0.5)
+ if(ATTACK_FINISHED(self) <= time + self.weapon_frametime * 0.5)
{
#endif
// UGLY WORKAROUND: play this on CHAN_WEAPON2 so it can't cut off fire sounds
@@ -350,6 +353,10 @@
}
}
+ // LordHavoc: network timing test code
+ //if (self.button0)
+ // print(ftos(frametime), " ", ftos(time), " >= ", ftos(ATTACK_FINISHED(self)), " >= ", ftos(self.weapon_nextthink), "\n");
+
float wb;
wb = W_WeaponBit(self.weapon);
@@ -373,7 +380,7 @@
v_up = up;
weapon_action(self.weapon, WR_THINK);
}
- if (time + frametime * 0.5 >= self.weapon_nextthink)
+ if (time + self.weapon_frametime * 0.5 >= self.weapon_nextthink)
{
if(self.weapon_think)
{
Modified: trunk/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weaponsystem.qc 2009-10-01 06:05:24 UTC (rev 8003)
+++ trunk/data/qcsrc/server/cl_weaponsystem.qc 2009-10-01 19:58:51 UTC (rev 8004)
@@ -7,6 +7,8 @@
===========================================================================
*/
+.float weapon_frametime;
+
float W_WeaponRateFactor()
{
float t;
@@ -1025,7 +1027,7 @@
if(attacktime >= 0)
{
// don't fire if previous attack is not finished
- if (ATTACK_FINISHED(self) > time + frametime * 0.5)
+ if (ATTACK_FINISHED(self) > time + self.weapon_frametime * 0.5)
return FALSE;
// don't fire while changing weapon
if (self.weaponentity.state != WS_READY)
@@ -1038,7 +1040,7 @@
// if the weapon hasn't been firing continuously, reset the timer
if(attacktime >= 0)
{
- if (ATTACK_FINISHED(self) < time - frametime * 1.5)
+ if (ATTACK_FINISHED(self) < time - self.weapon_frametime * 1.5)
{
ATTACK_FINISHED(self) = time;
//dprint("resetting attack finished to ", ftos(time), "\n");
@@ -1168,7 +1170,7 @@
self.weapon_nextthink = time;
//dprint("started firing at ", ftos(time), "\n");
}
- if (self.weapon_nextthink < time - frametime * 1.5 || self.weapon_nextthink > time + frametime * 1.5)
+ if (self.weapon_nextthink < time - self.weapon_frametime * 1.5 || self.weapon_nextthink > time + self.weapon_frametime * 1.5)
{
self.weapon_nextthink = time;
//dprint("reset weapon animation timer at ", ftos(time), "\n");
More information about the nexuiz-commits
mailing list