r5073 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sat Nov 22 03:02:58 EST 2008
Author: div0
Date: 2008-11-22 03:02:55 -0500 (Sat, 22 Nov 2008)
New Revision: 5073
Modified:
trunk/data/qcsrc/server/cl_physics.qc
Log:
new toys: g_bugrigs 2 for a more realistic mode (no steering in air); align the race car to the velocity when in air (looks cool, no gameplay change)
Modified: trunk/data/qcsrc/server/cl_physics.qc
===================================================================
--- trunk/data/qcsrc/server/cl_physics.qc 2008-11-21 16:40:52 UTC (rev 5072)
+++ trunk/data/qcsrc/server/cl_physics.qc 2008-11-22 08:02:55 UTC (rev 5073)
@@ -117,6 +117,26 @@
}
};
+float racecar_angle(float forward, float down)
+{
+ float ret, angle_mult;
+
+ if(forward < 0)
+ {
+ forward = -forward;
+ down = -down;
+ }
+
+ ret = vectoyaw('0 1 0' * down + '1 0 0' * forward);
+
+ angle_mult = forward / (800 + forward);
+
+ if(ret > 180)
+ return ret * angle_mult + 360 * (1 - angle_mult);
+ else
+ return ret * angle_mult;
+}
+
.vector movement_old;
.float buttons_old;
.vector v_angle_old;
@@ -328,11 +348,14 @@
accel = self.movement_x / sv_maxspeed;
steer = self.movement_y / sv_maxspeed;
- // 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!
+
+ if(self.flags & FL_ONGROUND || g_bugrigs == 1)
+ // BUG RIGS: responsive to movement while in air (matches big rigs better where the car is NEVER in air)
+ // g_bugrigs 2 turns off that bug
{
- self.angles_x = 0;
- self.angles_z = 0;
- makevectors(self.angles); // new forward direction!
myspeed = self.velocity * v_forward;
upspeed = self.velocity * v_up;
@@ -365,7 +388,6 @@
rigvel = myspeed * v_forward + '0 0 1' * upspeed;
}
- /*
else
{
myspeed = vlen(self.velocity);
@@ -378,7 +400,6 @@
rigvel = self.velocity;
makevectors(self.angles); // new forward direction!
}
- */
rigvel_z -= frametime * sv_gravity; // 4x gravity plays better
rigvel_xy = rigvel;
@@ -402,9 +423,11 @@
else
neworigin = trace_endpos;
- // now set angles_x so that the car points parallel to the surface
+ self.velocity = (neworigin - self.origin) * (1.0 / frametime);
+
if(trace_fraction < 1)
{
+ // now set angles_x so that the car points parallel to the surface
self.angles = vectoangles(
'1 0 0' * v_forward_x * trace_plane_normal_z
+
@@ -416,13 +439,30 @@
}
else
{
- self.angles_x = angles_save_x;
- self.angles_z = angles_save_z;
- self.velocity += '0 0 1' * upspeed;
+ // now set angles_x so that the car points forward, but is tilted in velocity direction
+ vector vel_local;
+
+ vel_local_x = v_forward * self.velocity;
+ vel_local_y = v_right * self.velocity;
+ vel_local_z = v_up * self.velocity;
+
+ self.angles_x = racecar_angle(vel_local_x, vel_local_z);
+ self.angles_z = racecar_angle(-vel_local_y, vel_local_z);
+
self.flags (-) FL_ONGROUND;
}
- self.velocity = (neworigin - self.origin) * (1.0 / frametime);
+ // smooth the angles
+ vector vf1, vu1, smoothangles;
+ makevectors(self.angles);
+ vf1 = v_forward * frametime * 5;
+ vu1 = v_up;
+ makevectors(angles_save);
+ vf1 = vf1 + v_forward * (1 - frametime * 5);
+ vu1 = vu1 + v_up * (1 - frametime * 5);
+ smoothangles = vectoangles2(vf1, vu1);
+ self.angles_x = -smoothangles_x;
+ self.angles_z = smoothangles_z;
}
else if (self.movetype == MOVETYPE_NOCLIP || self.movetype == MOVETYPE_FLY)
{
More information about the nexuiz-commits
mailing list