]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
give it a name: sv_airaccel_qw_stretchfactor ("stretch factor" of QW based bunnyhop...
authorRudolf Polzer <divVerent@xonotic.org>
Tue, 17 May 2011 10:06:25 +0000 (12:06 +0200)
committerRudolf Polzer <divVerent@xonotic.org>
Tue, 17 May 2011 10:09:24 +0000 (12:09 +0200)
qcsrc/server/autocvars.qh
qcsrc/server/cl_physics.qc

index 26bd176b634fe5c7b1b47ea2742333c080d64427..d3112f73d12161ee549c4b84ec6d7c04a48a9482 100644 (file)
@@ -1118,6 +1118,7 @@ float autocvar_sv_accelerate;
 var float autocvar_sv_accuracy_data_share = 1;
 string autocvar_sv_adminnick;
 float autocvar_sv_airaccel_qw;
+float autocvar_sv_airaccel_qw_stretchfactor;
 float autocvar_sv_airaccel_sideways_friction;
 float autocvar_sv_airaccelerate;
 float autocvar_sv_aircontrol;
index b28073b9debc44f8beb4f7d2bd499c6538bdb8dc..c706d25950f23e4357642abf0c4aef984fb44c3c 100644 (file)
@@ -516,20 +516,15 @@ void PM_Accelerate(vector wishdir, float wishspeed, float wishspeed0, float acce
        float vel_xy_backward, vel_xy_forward;
        float speedclamp;
 
+       if(autocvar_sv_airaccel_qw_stretchfactor > 0)
+               speedclamp = autocvar_sv_airaccel_qw_stretchfactor;
+       else if(accelqw < 0)
+               speedclamp = 1; // full clamping, no stretch
+       else
+               speedclamp = -1; // no clamping
+
        if(accelqw < 0)
-       {
-#ifdef SPEEDCLAMP
-               speedclamp = SPEEDCLAMP;
-#else
-               speedclamp = 0.000001; // no strafe accel
-#endif
                accelqw = -accelqw;
-       }
-       else
-               speedclamp = 0;
-       // speedclamp usage:
-       // > 0: max acceleration in qu/s^2 in excess of regular (try 50, 100)
-       // < 0: max acceleration factor in excess of regular (try -0.1)
 
        if(autocvar_sv_gameplayfix_q2airaccelerate)
                wishspeed0 = wishspeed;
@@ -571,15 +566,16 @@ void PM_Accelerate(vector wishdir, float wishspeed, float wishspeed0, float acce
        
        vel_xy = vel_straight * wishdir + vel_perpend;
        
-       if(speedclamp != 0)
+       if(speedclamp >= 0)
        {
-               // ensure we don't get too fast or decelerate faster than we should
-               if(speedclamp > 0)
-                       vel_xy_current = min(vlen(vel_xy), vel_xy_forward + frametime * speedclamp);
-               else
-                       vel_xy_current = min(vlen(vel_xy), vel_xy_current + (vel_xy_forward - vel_xy_current) * (1 - frametime * speedclamp));
-               if(vel_xy_current > 0) // prevent division by zero
-                       vel_xy = normalize(vel_xy) * vel_xy_current;
+               float vel_xy_preclamp;
+               vel_xy_preclamp = vlen(vel_xy);
+               if(vel_xy_preclamp > 0) // prevent division by zero
+               {
+                       vel_xy_current += (vel_xy_forward - vel_xy_current) * speedclamp;
+                       if(vel_xy_current < vel_xy_preclamp)
+                               vel_xy = vel_xy * (vel_xy_current / vel_xy_preclamp);
+               }
        }
 
        self.velocity = vel_xy + vel_z * '0 0 1';