From: Rudolf Polzer Date: Tue, 25 May 2010 08:30:51 +0000 (+0200) Subject: new funny cvar sv_speedlimit (not engine predicted yet). Please test (e.g set sv_spee... X-Git-Tag: xonotic-v0.1.0preview~553^2~6 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=c0744a0b42d6a22796acf80439e7ba33754734a4;ds=sidebyside new funny cvar sv_speedlimit (not engine predicted yet). Please test (e.g set sv_speedlimit 1000)! --- diff --git a/qcsrc/server/cl_physics.qc b/qcsrc/server/cl_physics.qc index f42e142091..10086bbc43 100644 --- a/qcsrc/server/cl_physics.qc +++ b/qcsrc/server/cl_physics.qc @@ -21,6 +21,7 @@ float sv_warsowbunny_accel; float sv_warsowbunny_topspeed; float sv_warsowbunny_turnaccel; float sv_warsowbunny_backtosideratio; +float sv_speedlimit; .float ladder_time; .entity ladder_entity; @@ -448,6 +449,11 @@ void CPM_PM_Aircontrol(vector wishdir, float wishspeed) self.velocity_z = zspeed; } +float AdjustAirAccelQW(float accelqw, float factor) +{ + return copysign(bound(0.000001, 1 - (1 - fabs(accelqw)) * factor, 1), accelqw); +} + // example config for alternate speed clamping: // sv_airaccel_qw 0.8 // sv_airaccel_sideways_friction 0 @@ -480,6 +486,8 @@ void PM_Accelerate(vector wishdir, float wishspeed, float wishspeed0, float acce step = accel * frametime * wishspeed0; vel_xy_current = vlen(vel_xy); + if(sv_speedlimit) + accelqw = AdjustAirAccelQW(accelqw, (sv_speedlimit - bound(wishspeed, vel_xy_current, sv_speedlimit)) / max(1, sv_speedlimit - wishspeed)); vel_xy_forward = vel_xy_current + bound(0, wishspeed - vel_xy_current, step) * accelqw + step * (1 - accelqw); vel_xy_backward = vel_xy_current - bound(0, wishspeed + vel_xy_current, step) * accelqw - step * (1 - accelqw); if(vel_xy_backward < 0) @@ -616,9 +624,9 @@ void SV_PlayerPhysics() string c; // fix physics stats for g_movement_highspeed - self.stat_sv_airaccel_qw = copysign(bound(0, 1-(1-fabs(sv_airaccel_qw))*autocvar_g_movement_highspeed, 1), sv_airaccel_qw); + self.stat_sv_airaccel_qw = AdjustAirAccelQW(sv_airaccel_qw, autocvar_g_movement_highspeed); if(sv_airstrafeaccel_qw) - self.stat_sv_airstrafeaccel_qw = copysign(bound(0.001, 1-(1-fabs(sv_airstrafeaccel_qw))*autocvar_g_movement_highspeed, 1), sv_airstrafeaccel_qw); + self.stat_sv_airstrafeaccel_qw = AdjustAirAccelQW(sv_airstrafeaccel_qw, autocvar_g_movement_highspeed); else self.stat_sv_airstrafeaccel_qw = 0; diff --git a/qcsrc/server/sv_main.qc b/qcsrc/server/sv_main.qc index 0212fce8a4..da576360aa 100644 --- a/qcsrc/server/sv_main.qc +++ b/qcsrc/server/sv_main.qc @@ -198,6 +198,7 @@ void StartFrame (void) sv_warsowbunny_topspeed = cvar("sv_warsowbunny_topspeed"); sv_warsowbunny_turnaccel = cvar("sv_warsowbunny_turnaccel"); sv_warsowbunny_backtosideratio = cvar("sv_warsowbunny_backtosideratio"); + sv_speedlimit = cvar("sv_speedlimit"); teamplay = cvar ("teamplay"); sys_frametime = cvar("sys_ticrate") * cvar("slowmo");