r5071 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Nov 21 08:57:35 EST 2008


Author: div0
Date: 2008-11-21 08:57:34 -0500 (Fri, 21 Nov 2008)
New Revision: 5071

Modified:
   trunk/data/qcsrc/server/cl_physics.qc
   trunk/data/qcsrc/server/miscfunctions.qc
Log:
more bug rigs improvements


Modified: trunk/data/qcsrc/server/cl_physics.qc
===================================================================
--- trunk/data/qcsrc/server/cl_physics.qc	2008-11-21 12:50:00 UTC (rev 5070)
+++ trunk/data/qcsrc/server/cl_physics.qc	2008-11-21 13:57:34 UTC (rev 5071)
@@ -165,7 +165,7 @@
 	if(g_bugrigs && self.movetype == MOVETYPE_WALK)
 	{
 		self.disableclientprediction = 1;
-		self.movetype = MOVETYPE_NONE;
+		self.movetype = MOVETYPE_NOCLIP;
 	}
 
 	if (self.punchangle != '0 0 0')
@@ -316,101 +316,102 @@
 			self.teleport_time = 0;
 		}
 	}
-	else if (self.movetype == MOVETYPE_NOCLIP || self.movetype == MOVETYPE_FLY)
+	else if (g_bugrigs && self.classname == "player")
 	{
-		// noclipping or flying
-		self.flags = self.flags - (self.flags & FL_ONGROUND);
-
-		self.velocity = self.velocity * (1 - frametime * sv_friction);
-		makevectors(self.v_angle);
-		//wishvel = v_forward * self.movement_x + v_right * self.movement_y + v_up * self.movement_z;
-		wishvel = v_forward * self.movement_x + v_right * self.movement_y + '0 0 1' * self.movement_z;
-		// acceleration
-		wishdir = normalize(wishvel);
-		wishspeed = vlen(wishvel);
-		if (wishspeed > sv_maxspeed*maxspd_mod)
-			wishspeed = sv_maxspeed*maxspd_mod;
-		if (time >= self.teleport_time)
-		{
-			f = wishspeed - (self.velocity * wishdir);
-			if (f > 0)
-				self.velocity = self.velocity + wishdir * min(f, sv_accelerate*maxspd_mod * frametime * wishspeed);
-		}
-	}
-	else if (g_bugrigs)
-	{
 		// using this move type for "big rigs"
 		// the engine does not push the entity!
-
+		
 		float accel, steer, myspeed, steerfactor, accelfactor, upspeed, friction;
-		vector neworigin, up, angles_save;
+		vector neworigin, up, angles_save, rigvel, rigvel_xy;
 
+		angles_save = self.angles;
 		accel = self.movement_x / sv_maxspeed;
 		steer = self.movement_y / sv_maxspeed;
 
-		angles_save = self.angles;
-		self.angles_x = 0;
-		self.angles_z = 0;
-		makevectors(self.angles); // new forward direction!
-		myspeed = self.velocity * v_forward;
-		upspeed = self.velocity * v_up;
+		// if(self.flags & FL_ONGROUND || 1) // BUG RIGS: responsive to movement while in air (matches big rigs better where the car is NEVER in air)
+		{
+			self.angles_x = 0;
+			self.angles_z = 0;
+			makevectors(self.angles); // new forward direction!
+			myspeed = self.velocity * v_forward;
+			upspeed = self.velocity * v_up;
 
-		// responsiveness factor for steering and acceleration
-		f = 1 / (1 + pow(max(0, myspeed / 400), 2));
+			// responsiveness factor for steering and acceleration
+			f = 1 / (1 + pow(max(0, myspeed / 400), 2));
 
-		steerfactor = -myspeed * f;
-		accelfactor = f * 800;
+			steerfactor = -myspeed * f;
+			accelfactor = f * 800;
 
-		// BUG RIGS: make friction FAIL if reversing
-		if(accel < 0)
-		{
-			if(myspeed <= 0)
-				friction = 0;
+			// BUG RIGS: make friction FAIL if reversing
+			if(accel < 0)
+			{
+				if(myspeed <= 0)
+					friction = 0;
+				else
+					myspeed = max(0, myspeed - frametime * 1000);
+			}
 			else
-				myspeed = max(0, myspeed - frametime * 1000);
+				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 += accel * accelfactor * frametime;
+
+			rigvel = myspeed * v_forward + '0 0 1' * upspeed;
 		}
+		/*
 		else
-			myspeed = max(0, myspeed - frametime * 50);
-			// terminal velocity = velocity at which 50 == accelfactor, that is, 1549 units/sec
+		{
+			myspeed = vlen(self.velocity);
 
-		// BUG RIGS: stop when reversing and releasing the button
-		if(myspeed < 0 && accel == 0)
-			myspeed = 0;
+			// responsiveness factor for steering and acceleration
+			f = 1 / (1 + pow(max(0, myspeed / 400), 2));
+			steerfactor = -myspeed * f;
+			self.angles_y += steer * frametime * steerfactor; // apply steering
 
-		self.angles_y += steer * frametime * steerfactor; // apply steering
-		makevectors(self.angles); // new forward direction!
+			rigvel = self.velocity;
+			makevectors(self.angles); // new forward direction!
+		}
+		*/
 
-		myspeed += accel * accelfactor * frametime;
+		rigvel_z -= frametime * sv_gravity; // 4x gravity plays better
+		rigvel_xy = rigvel;
+		rigvel_xy_z = 0;
 
-		self.velocity = v_forward * myspeed;
-		upspeed -= frametime * sv_gravity;
-
 		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);
+		tracebox(trace_endpos, self.mins, self.maxs, trace_endpos + rigvel_xy * frametime, MOVE_NORMAL, self);
 
 		// align to surface
-		tracebox(trace_endpos, self.mins, self.maxs, neworigin - up + '0 0 1' * upspeed * frametime, MOVE_NORMAL, self);
+		tracebox(trace_endpos, self.mins, self.maxs, trace_endpos - up + '0 0 1' * rigvel_z * frametime, MOVE_NORMAL, self);
 
-		if(trace_fraction >= 0.5)
-			self.origin = trace_endpos;
+		if(trace_fraction < 0.5)
+		{
+			trace_fraction = 1;
+			neworigin = self.origin;
+		}
 		else
-			trace_fraction = 1;
+			neworigin = trace_endpos;
 
 		// now set angles_x so that the car points parallel to the surface
 		if(trace_fraction < 1)
 		{
-			self.angles = vectoangles(normalize(
+			self.angles = vectoangles(
 				'1 0 0' * v_forward_x * trace_plane_normal_z
 				+
 				'0 1 0' * v_forward_y * trace_plane_normal_z
 				+
 				'0 0 1' * -(v_forward_x * trace_plane_normal_x + v_forward_y * trace_plane_normal_y)
-			));
+			);
 			self.flags |= FL_ONGROUND;
 		}
 		else
@@ -421,9 +422,29 @@
 			self.flags (-) FL_ONGROUND;
 		}
 
-		// relink
-		setorigin(self, self.origin);
+		self.velocity = (neworigin - self.origin) * (1.0 / frametime);
 	}
+	else if (self.movetype == MOVETYPE_NOCLIP || self.movetype == MOVETYPE_FLY)
+	{
+		// noclipping or flying
+		self.flags = self.flags - (self.flags & FL_ONGROUND);
+
+		self.velocity = self.velocity * (1 - frametime * sv_friction);
+		makevectors(self.v_angle);
+		//wishvel = v_forward * self.movement_x + v_right * self.movement_y + v_up * self.movement_z;
+		wishvel = v_forward * self.movement_x + v_right * self.movement_y + '0 0 1' * self.movement_z;
+		// acceleration
+		wishdir = normalize(wishvel);
+		wishspeed = vlen(wishvel);
+		if (wishspeed > sv_maxspeed*maxspd_mod)
+			wishspeed = sv_maxspeed*maxspd_mod;
+		if (time >= self.teleport_time)
+		{
+			f = wishspeed - (self.velocity * wishdir);
+			if (f > 0)
+				self.velocity = self.velocity + wishdir * min(f, sv_accelerate*maxspd_mod * frametime * wishspeed);
+		}
+	}
 	else if (self.waterlevel >= 2)
 	{
 		// swimming

Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2008-11-21 12:50:00 UTC (rev 5070)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2008-11-21 13:57:34 UTC (rev 5071)
@@ -920,7 +920,7 @@
 void readlevelcvars(void)
 {
  	sv_clones = cvar("sv_clones");
- 	g_bugrigs = cvar("g_bigrigs");
+ 	g_bugrigs = cvar("g_bugrigs");
 	sv_cheats = cvar("sv_cheats");
 	sv_gentle = cvar("sv_gentle");
 	sv_foginterval = cvar("sv_foginterval");




More information about the nexuiz-commits mailing list