r5069 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Nov 21 07:46:53 EST 2008


Author: div0
Date: 2008-11-21 07:46:52 -0500 (Fri, 21 Nov 2008)
New Revision: 5069

Modified:
   trunk/data/qcsrc/server/cl_physics.qc
Log:
improve big rigs mode


Modified: trunk/data/qcsrc/server/cl_physics.qc
===================================================================
--- trunk/data/qcsrc/server/cl_physics.qc	2008-11-21 10:27:33 UTC (rev 5068)
+++ trunk/data/qcsrc/server/cl_physics.qc	2008-11-21 12:46:52 UTC (rev 5069)
@@ -354,20 +354,33 @@
 		makevectors(self.angles); // new forward direction!
 		myspeed = self.velocity * v_forward;
 		upspeed = self.velocity * v_up;
-		if(myspeed <= 0 && accel < 0)
-			steerfactor = -5000; // LOL
+
+		// responsiveness factor for steering and acceleration
+		f = 1 / (1 + pow(max(0, myspeed / 400), 2));
+
+		steerfactor = -myspeed * f;
+		accelfactor = f * 800;
+
+		// BUG RIGS: make friction FAIL if reversing
+		if(accel < 0)
+		{
+			if(myspeed <= 0)
+				friction = 0;
+			else
+				myspeed = max(0, myspeed - frametime * 1000);
+		}
 		else
-			steerfactor = -400 * 400 / (400 + myspeed);
-		accelfactor = 2000 * 400 / (400 + max(myspeed, -myspeed));
-		friction = 5 * 100 / (100 + max(myspeed, -myspeed));
+			myspeed = max(0, myspeed - frametime * 50);
+			// terminal velocity = velocity at which 50 == accelfactor, that is, 1549 units/sec
 
+		// BUG RIGS: stop when reversing and releasing the button
+		if(myspeed < 0 && accel == 0)
+			myspeed = 0;
+
 		self.angles_y += steer * frametime * steerfactor; // apply steering
 		makevectors(self.angles); // new forward direction!
 
-		myspeed = myspeed * (1 - frametime * friction);
 		myspeed += accel * accelfactor * frametime;
-		if(myspeed < 0)
-			myspeed = 0;
 
 		self.velocity = v_forward * myspeed;
 		upspeed -= frametime * sv_gravity;
@@ -375,6 +388,7 @@
 		tracebox(self.origin, self.mins, self.maxs, self.origin + '0 0 1024', MOVE_NORMAL, self);
 		up = trace_endpos - self.origin;
 
+		// BUG RIGS: align the move to the surface instead of doing collision testing
 		// can we move?
 		neworigin = trace_endpos + self.velocity * frametime;
 		tracebox(trace_endpos, self.mins, self.maxs, neworigin, MOVE_NORMAL, self);




More information about the nexuiz-commits mailing list