[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