cl_bob 0.01 // how much view moves up/down when moving (does not move if cl_bobcycle is 0, but still enables cl_bobmodel), default is 0.02
cl_bobmodel 1 // whether to have gun model move around on screen when moving (only works if cl_bob is not 0), default is 1
cl_leanmodel 1 // enables weapon leaning effect when looking around
-cl_leanmodel_side_speed 1 "gun leaning sideways speed"
+cl_leanmodel_side_speed 0.7 "gun leaning sideways speed"
cl_leanmodel_side_limit 35 "gun leaning sideways limit"
cl_leanmodel_side_highpass1 30 "gun leaning sideways pre-highpass in 1/s"
cl_leanmodel_side_highpass 3 "gun leaning sideways highpass in 1/s"
cl_leanmodel_side_lowpass 20 "gun leaning sideways lowpass in 1/s"
-cl_leanmodel_up_speed 1 "gun leaning upward speed"
+cl_leanmodel_up_speed 0.65 "gun leaning upward speed"
cl_leanmodel_up_limit 50 "gun leaning upward limit"
cl_leanmodel_up_highpass1 5 "gun leaning upward pre-highpass in 1/s"
cl_leanmodel_up_highpass 15 "gun leaning upward highpass in 1/s"
cl_leanmodel_up_lowpass 20 "gun leaning upward lowpass in 1/s"
cl_followmodel 1 // enables weapon pushing / pulling effect when walking
-cl_followmodel_side_speed 0.5 "gun following sideways speed"
+cl_followmodel_side_speed 0.25 "gun following sideways speed"
cl_followmodel_side_limit 6 "gun following sideways limit"
cl_followmodel_side_highpass1 30 "gun following sideways pre-highpass in 1/s"
cl_followmodel_side_highpass 5 "gun following sideways highpass in 1/s"
cl_followmodel_side_lowpass 10 "gun following sideways lowpass in 1/s"
-cl_followmodel_up_speed 1 "gun following upward speed"
+cl_followmodel_up_speed 0.5 "gun following upward speed"
cl_followmodel_up_limit 5 "gun following upward limit"
cl_followmodel_up_highpass1 60 "gun following upward pre-highpass in 1/s"
cl_followmodel_up_highpass 2 "gun following upward highpass in 1/s"
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 150
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airaccel_sideways_friction -0.2
sv_airaccel_qw -0.9475
sv_airstopaccelerate 2.5
-sv_airstrafeaccelerate 42
+sv_airstrafeaccelerate 24
sv_maxairstrafespeed 100
-sv_airstrafeaccel_qw -0.99
+sv_airstrafeaccel_qw -0.9825
sv_aircontrol 125
sv_aircontrol_power 2.5
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 9 // activates warsow movement mode
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 150
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
sv_airstrafeaccel_qw 0
sv_aircontrol 0
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 6 // activates warsow movement mode
sv_warsowbunny_accel 0.1585
sv_warsowbunny_topspeed 900
sv_airstrafeaccel_qw 1
sv_aircontrol 150
sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_warsowbunny_topspeed 925
const float STAT_BULLETS_LOADED = 48;
// see DP source, quakedef.h
+const float STAT_MOVEVARS_AIRSPEEDLIMIT_NONQW = 222;
const float STAT_MOVEVARS_AIRSTRAFEACCEL_QW = 223;
const float STAT_MOVEVARS_AIRACCEL_QW = 254;
float sv_warsowbunny_topspeed;
float sv_warsowbunny_turnaccel;
float sv_warsowbunny_backtosideratio;
+float sv_airspeedlimit_nonqw;
.float ladder_time;
.entity ladder_entity;
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
// prvm_globalset server speedclamp_mode 1
// (or 2)
-void PM_Accelerate(vector wishdir, float wishspeed, float wishspeed0, float accel, float accelqw, float sidefric)
+void PM_Accelerate(vector wishdir, float wishspeed, float wishspeed0, float accel, float accelqw, float sidefric, float speedlimit)
{
float vel_straight;
float vel_z;
step = accel * frametime * wishspeed0;
vel_xy_current = vlen(vel_xy);
+ if(speedlimit)
+ accelqw = AdjustAirAccelQW(accelqw, (speedlimit - bound(wishspeed, vel_xy_current, speedlimit)) / max(1, 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)
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;
+ self.stat_sv_airspeedlimit_nonqw = sv_airspeedlimit_nonqw * autocvar_g_movement_highspeed;
if(self.PlayerPhysplug)
if(self.PlayerPhysplug())
if (wishspeed > sv_maxspeed*maxspd_mod)
wishspeed = sv_maxspeed*maxspd_mod;
if (time >= self.teleport_time)
- PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0);
+ PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0, 0);
}
else if (self.waterlevel >= WATERLEVEL_SWIMMING)
{
self.velocity = self.velocity * (1 - frametime * sv_friction);
// water acceleration
- PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0);
+ PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0, 0);
}
else if (time < self.ladder_time)
{
if (time >= self.teleport_time)
{
// water acceleration
- PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0);
+ PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0, 0);
}
}
else if ((self.items & IT_JETPACK) && self.BUTTON_HOOK && (!cvar("g_jetpack_fuel") || self.ammo_fuel >= 0.01 || self.items & IT_UNLIMITED_WEAPON_AMMO))
if (self.crouch)
wishspeed = wishspeed * 0.5;
if (time >= self.teleport_time)
- PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0);
+ PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0, 0);
}
else
{
if(sv_warsowbunny_turnaccel && accelerating && self.movement_y == 0 && self.movement_x != 0)
PM_AirAccelerate(wishdir, wishspeed);
else
- PM_Accelerate(wishdir, wishspeed, wishspeed0, airaccel, airaccelqw, sv_airaccel_sideways_friction / maxairspd);
+ PM_Accelerate(wishdir, wishspeed, wishspeed0, airaccel, airaccelqw, sv_airaccel_sideways_friction / maxairspd, self.stat_sv_airspeedlimit_nonqw);
if(sv_aircontrol)
CPM_PM_Aircontrol(wishdir, wishspeed2);
.float stat_sv_airaccel_qw;
.float stat_sv_airstrafeaccel_qw;
+.float stat_sv_airspeedlimit_nonqw;
void W_Porto_Remove (entity p);
addstat(STAT_BULLETS_LOADED, AS_INT, campingrifle_bulletcounter);
// g_movementspeed hack
+ addstat(STAT_MOVEVARS_AIRSPEEDLIMIT_NONQW, AS_FLOAT, stat_sv_airspeedlimit_nonqw);
addstat(STAT_MOVEVARS_AIRACCEL_QW, AS_FLOAT, stat_sv_airaccel_qw);
addstat(STAT_MOVEVARS_AIRSTRAFEACCEL_QW, AS_FLOAT, stat_sv_airstrafeaccel_qw);
sv_warsowbunny_topspeed = cvar("sv_warsowbunny_topspeed");
sv_warsowbunny_turnaccel = cvar("sv_warsowbunny_turnaccel");
sv_warsowbunny_backtosideratio = cvar("sv_warsowbunny_backtosideratio");
+ sv_airspeedlimit_nonqw = cvar("sv_airspeedlimit_nonqw");
teamplay = cvar ("teamplay");
sys_frametime = cvar("sys_ticrate") * cvar("slowmo");
sv_doublejump = cvar("sv_doublejump");