set g_physics_xonotic_airaccel_sideways_friction 0
set g_physics_xonotic_aircontrol 100
set g_physics_xonotic_aircontrol_power 2
+set g_physics_xonotic_aircontrol_backwards 0
set g_physics_xonotic_aircontrol_penalty 0
set g_physics_xonotic_warsowbunny_airforwardaccel 1.00001
set g_physics_xonotic_warsowbunny_topspeed 925
set g_physics_nexuiz_airaccel_sideways_friction 0.35
set g_physics_nexuiz_aircontrol 0
set g_physics_nexuiz_aircontrol_power 2
+set g_physics_nexuiz_aircontrol_backwards 0
set g_physics_nexuiz_aircontrol_penalty 0
set g_physics_nexuiz_warsowbunny_airforwardaccel 1.00001
set g_physics_nexuiz_warsowbunny_topspeed 925
set g_physics_quake_airaccel_sideways_friction 0
set g_physics_quake_aircontrol 0
set g_physics_quake_aircontrol_power 2
+set g_physics_quake_aircontrol_backwards 0
set g_physics_quake_aircontrol_penalty 0
set g_physics_quake_warsowbunny_airforwardaccel 1.00001
set g_physics_quake_warsowbunny_topspeed 925
set g_physics_warsow_airaccel_sideways_friction 0
set g_physics_warsow_aircontrol 0
set g_physics_warsow_aircontrol_power 2
+set g_physics_warsow_aircontrol_backwards 0
set g_physics_warsow_aircontrol_penalty 0
set g_physics_warsow_warsowbunny_airforwardaccel 1.00001
set g_physics_warsow_warsowbunny_topspeed 925
set g_physics_defrag_airaccel_sideways_friction 0
set g_physics_defrag_aircontrol 150
set g_physics_defrag_aircontrol_power 2
+set g_physics_defrag_aircontrol_backwards 0
set g_physics_defrag_aircontrol_penalty 0
set g_physics_defrag_warsowbunny_airforwardaccel 1.00001
set g_physics_defrag_warsowbunny_topspeed 925
set g_physics_quake3_airaccel_sideways_friction 0
set g_physics_quake3_aircontrol 0
set g_physics_quake3_aircontrol_power 2
+set g_physics_quake3_aircontrol_backwards 0
set g_physics_quake3_aircontrol_penalty 0
set g_physics_quake3_warsowbunny_airforwardaccel 1.00001
set g_physics_quake3_warsowbunny_topspeed 925
set g_physics_vecxis_airaccel_sideways_friction 0.3
set g_physics_vecxis_aircontrol 0
set g_physics_vecxis_aircontrol_power 2
+set g_physics_vecxis_aircontrol_backwards 0
set g_physics_vecxis_aircontrol_penalty 0
set g_physics_vecxis_warsowbunny_airforwardaccel 1.00001
set g_physics_vecxis_warsowbunny_topspeed 925
set g_physics_quake2_airaccel_sideways_friction 0
set g_physics_quake2_aircontrol 0
set g_physics_quake2_aircontrol_power 2
+set g_physics_quake2_aircontrol_backwards 0
set g_physics_quake2_aircontrol_penalty 0
set g_physics_quake2_warsowbunny_airforwardaccel 1.00001
set g_physics_quake2_warsowbunny_topspeed 925
set g_physics_bones_airaccel_sideways_friction 0
set g_physics_bones_aircontrol 150
set g_physics_bones_aircontrol_power 2
+set g_physics_bones_aircontrol_backwards 0
set g_physics_bones_aircontrol_penalty 0
set g_physics_bones_warsowbunny_airforwardaccel 1.00001
set g_physics_bones_warsowbunny_topspeed 925
sv_aircontrol 150
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_airstrafeaccel_qw -0.97
sv_aircontrol 125
sv_aircontrol_power 2.5
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 125
sv_aircontrol_penalty 150
sv_aircontrol_power 2.5
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 800
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 125
sv_aircontrol_penalty 150
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 800
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 125
sv_aircontrol_penalty 100
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 9 // activates warsow movement mode
sv_warsowbunny_accel 0.1593
sv_aircontrol 150
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 0
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 6 // activates warsow movement mode
sv_warsowbunny_accel 0.1585
sv_aircontrol 100
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 900
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 125
sv_aircontrol_penalty 150
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 800
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 125
sv_aircontrol_penalty 180
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 800
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 150
sv_aircontrol_penalty 0
sv_aircontrol_power 2
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
sv_aircontrol 100
sv_aircontrol_penalty 100
sv_aircontrol_power 2.5
+sv_aircontrol_backwards 0
sv_airspeedlimit_nonqw 0
sv_warsowbunny_turnaccel 0
sv_warsowbunny_accel 0.1593
STAT(MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION, this) = Physics_ClientOption(this, "airaccel_sideways_friction", autocvar_sv_airaccel_sideways_friction);
STAT(MOVEVARS_AIRCONTROL, this) = Physics_ClientOption(this, "aircontrol", autocvar_sv_aircontrol);
STAT(MOVEVARS_AIRCONTROL_POWER, this) = Physics_ClientOption(this, "aircontrol_power", autocvar_sv_aircontrol_power);
+ STAT(MOVEVARS_AIRCONTROL_BACKWARDS, this) = Physics_ClientOption(this, "aircontrol_backwards", autocvar_sv_aircontrol_backwards);
STAT(MOVEVARS_AIRCONTROL_PENALTY, this) = Physics_ClientOption(this, "aircontrol_penalty", autocvar_sv_aircontrol_penalty);
STAT(MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL, this) = Physics_ClientOption(this, "warsowbunny_airforwardaccel", autocvar_sv_warsowbunny_airforwardaccel);
STAT(MOVEVARS_WARSOWBUNNY_TOPSPEED, this) = Physics_ClientOption(this, "warsowbunny_topspeed", autocvar_sv_warsowbunny_topspeed);
void CPM_PM_Aircontrol(entity this, float dt, vector wishdir, float wishspeed)
{
- float k = 32 * (2 * IsMoveInDirection(this.movement, 0) - 1);
+ float movity = IsMoveInDirection(this.movement, 0);
+ if(PHYS_AIRCONTROL_BACKWARDS(this))
+ movity += IsMoveInDirection(this.movement, 180);
+
+ float k = 32 * (2 * movity - 1);
if (k <= 0)
return;
#define PHYS_AIRCONTROL(s) STAT(MOVEVARS_AIRCONTROL, s)
#define PHYS_AIRCONTROL_PENALTY(s) STAT(MOVEVARS_AIRCONTROL_PENALTY, s)
#define PHYS_AIRCONTROL_POWER(s) STAT(MOVEVARS_AIRCONTROL_POWER, s)
+#define PHYS_AIRCONTROL_BACKWARDS(s) STAT(MOVEVARS_AIRCONTROL_BACKWARDS, s)
#define PHYS_AIRSPEEDLIMIT_NONQW(s) STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW, s)
#define PHYS_AIRSTOPACCELERATE(s) STAT(MOVEVARS_AIRSTOPACCELERATE, s)
#define PHYS_AIRSTRAFEACCELERATE(s) STAT(MOVEVARS_AIRSTRAFEACCELERATE, s)
REGISTER_STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW, float)
REGISTER_STAT(MOVEVARS_AIRSTRAFEACCEL_QW, float)
REGISTER_STAT(MOVEVARS_AIRCONTROL_POWER, float)
+REGISTER_STAT(MOVEVARS_AIRCONTROL_BACKWARDS, bool)
noref bool autocvar_sv_gameplayfix_nogravityonground;
REGISTER_STAT(MOVEFLAGS, int, MOVEFLAG_VALID
| (autocvar_sv_gameplayfix_q2airaccelerate ? MOVEFLAG_Q2AIRACCELERATE : 0)
float autocvar_sv_airaccel_sideways_friction;
float autocvar_sv_aircontrol;
float autocvar_sv_aircontrol_power;
+float autocvar_sv_aircontrol_backwards;
float autocvar_sv_aircontrol_penalty;
float autocvar_sv_warsowbunny_airforwardaccel;
float autocvar_sv_warsowbunny_topspeed;