1 #ifndef COMMON_PHYSICS_H
2 #define COMMON_PHYSICS_H
4 // Client/server mappings
11 .float swamp_slowdown;
15 .float spectatorspeed;
20 .string lastclassname;
22 .float() PlayerPhysplug;
23 float AdjustAirAccelQW(float accelqw, float factor);
25 bool IsFlying(entity a);
29 const int FL_WATERJUMP = 2048; // player jumping out of water
30 const int FL_JUMPRELEASED = 4096; // for jump debouncing
40 #define IS_CLIENT(s) (s).isplayermodel
41 #define IS_PLAYER(s) (s).isplayermodel
42 #define isPushable(s) (s).isplayermodel
44 //float player_multijump;
45 //float player_jumpheight;
47 #define PHYS_INPUT_ANGLES(s) input_angles
49 #define PHYS_WORLD_ANGLES(s) input_angles
51 #define PHYS_INPUT_TIMELENGTH input_timelength
52 #define PHYS_INPUT_FRAMETIME serverdeltatime
54 #define PHYS_INPUT_MOVEVALUES(s) input_movevalues
56 #define PHYS_INPUT_BUTTON_MASK(s) (input_buttons | BIT(7) * (input_movevalues.x < 0) | BIT(8) * (input_movevalues.x > 0) | BIT(9) * (input_movevalues.y < 0) | BIT(10) * (input_movevalues.y > 0))
57 #define PHYS_INPUT_BUTTON_ATCK(s) boolean(input_buttons & BIT(0))
58 #define PHYS_INPUT_BUTTON_JUMP(s) boolean(input_buttons & BIT(1))
59 #define PHYS_INPUT_BUTTON_ATCK2(s) boolean(input_buttons & BIT(2))
60 #define PHYS_INPUT_BUTTON_ZOOM(s) boolean(input_buttons & BIT(3))
61 #define PHYS_INPUT_BUTTON_CROUCH(s) boolean(input_buttons & BIT(4))
62 #define PHYS_INPUT_BUTTON_HOOK(s) boolean(input_buttons & BIT(5))
63 #define PHYS_INPUT_BUTTON_USE(s) boolean(input_buttons & BIT(6))
64 #define PHYS_INPUT_BUTTON_BACKWARD(s) boolean(input_buttons & BIT(7))
65 #define PHYS_INPUT_BUTTON_FORWARD(s) boolean(input_buttons & BIT(8))
66 #define PHYS_INPUT_BUTTON_LEFT(s) boolean(input_buttons & BIT(9))
67 #define PHYS_INPUT_BUTTON_RIGHT(s) boolean(input_buttons & BIT(10))
68 #define PHYS_INPUT_BUTTON_JETPACK(s) boolean(input_buttons & BIT(12))
70 #define PHYS_DEAD(s) s.csqcmodel_isdead
72 #define GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE boolean(moveflags & MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE)
73 #define GAMEPLAYFIX_NOGRAVITYONGROUND cvar("sv_gameplayfix_nogravityonground")
74 #define GAMEPLAYFIX_Q2AIRACCELERATE cvar("sv_gameplayfix_q2airaccelerate")
75 #define GAMEPLAYFIX_EASIERWATERJUMP getstati(STAT_GAMEPLAYFIX_EASIERWATERJUMP)
76 #define GAMEPLAYFIX_DOWNTRACEONGROUND getstati(STAT_GAMEPLAYFIX_DOWNTRACEONGROUND)
77 #define GAMEPLAYFIX_STEPMULTIPLETIMES getstati(STAT_GAMEPLAYFIX_STEPMULTIPLETIMES)
78 #define GAMEPLAYFIX_UNSTICKPLAYERS getstati(STAT_GAMEPLAYFIX_UNSTICKPLAYERS)
79 #define GAMEPLAYFIX_STEPDOWN getstati(STAT_GAMEPLAYFIX_STEPDOWN)
81 #define IS_DUCKED(s) boolean(s.flags & FL_DUCKED)
82 #define SET_DUCKED(s) s.flags |= FL_DUCKED
83 #define UNSET_DUCKED(s) s.flags &= ~FL_DUCKED
85 #define IS_JUMP_HELD(s) !(s.flags & FL_JUMPRELEASED)
86 #define SET_JUMP_HELD(s) s.flags &= ~FL_JUMPRELEASED
87 #define UNSET_JUMP_HELD(s) s.flags |= FL_JUMPRELEASED
89 #define IS_ONGROUND(s) boolean(s.flags & FL_ONGROUND)
90 #define SET_ONGROUND(s) s.flags |= FL_ONGROUND
91 #define UNSET_ONGROUND(s) s.flags &= ~FL_ONGROUND
93 #define WAS_ONGROUND(s) boolean(s.lastflags & FL_ONGROUND)
95 #define ITEMS_STAT(s) (s).items
96 #define BUFFS_STAT(s) getstati(STAT_BUFFS)
98 #define PHYS_AMMO_FUEL(s) getstati(STAT_FUEL)
100 #define PHYS_FROZEN(s) getstati(STAT_FROZEN)
102 #define PHYS_JUMPSPEEDCAP_MIN cvar_string("cl_jumpspeedcap_min")
103 #define PHYS_JUMPSPEEDCAP_MAX cvar_string("cl_jumpspeedcap_max")
104 #define PHYS_JUMPSPEEDCAP_DISABLE_ONRAMPS getstati(STAT_MOVEVARS_JUMPSPEEDCAP_DISABLE_ONRAMPS)
106 #define PHYS_CL_TRACK_CANJUMP(s) getstati(STAT_MOVEVARS_CL_TRACK_CANJUMP)
107 #define PHYS_TRACK_CANJUMP(s) getstati(STAT_MOVEVARS_TRACK_CANJUMP)
108 #define PHYS_ACCELERATE getstatf(STAT_MOVEVARS_ACCELERATE)
109 #define PHYS_AIRACCEL_QW(s) getstatf(STAT_MOVEVARS_AIRACCEL_QW)
110 #define PHYS_AIRACCEL_QW_STRETCHFACTOR(s) getstatf(STAT_MOVEVARS_AIRACCEL_QW_STRETCHFACTOR)
111 #define PHYS_AIRACCEL_SIDEWAYS_FRICTION getstatf(STAT_MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION)
112 #define PHYS_AIRACCELERATE getstatf(STAT_MOVEVARS_AIRACCELERATE)
113 #define PHYS_AIRCONTROL getstatf(STAT_MOVEVARS_AIRCONTROL)
114 #define PHYS_AIRCONTROL_PENALTY getstatf(STAT_MOVEVARS_AIRCONTROL_PENALTY)
115 #define PHYS_AIRCONTROL_POWER getstatf(STAT_MOVEVARS_AIRCONTROL_POWER)
116 #define PHYS_AIRSPEEDLIMIT_NONQW(s) getstatf(STAT_MOVEVARS_AIRSPEEDLIMIT_NONQW)
117 #define PHYS_AIRSTOPACCELERATE getstatf(STAT_MOVEVARS_AIRSTOPACCELERATE)
118 #define PHYS_AIRSTRAFEACCEL_QW(s) getstatf(STAT_MOVEVARS_AIRSTRAFEACCEL_QW)
119 #define PHYS_AIRSTRAFEACCELERATE(s) getstatf(STAT_MOVEVARS_AIRSTRAFEACCELERATE)
120 #define PHYS_ENTGRAVITY(s) getstatf(STAT_MOVEVARS_ENTGRAVITY)
121 #define PHYS_FRICTION getstatf(STAT_MOVEVARS_FRICTION)
122 #define PHYS_FRICTION_SLICK getstatf(STAT_MOVEVARS_FRICTION_SLICK)
123 #define PHYS_FRICTION_ONLAND getstatf(STAT_MOVEVARS_FRICTION_ONLAND)
124 #define PHYS_GRAVITY getstatf(STAT_MOVEVARS_GRAVITY)
125 #define PHYS_HIGHSPEED getstatf(STAT_MOVEVARS_HIGHSPEED)
126 #define PHYS_JUMPVELOCITY getstatf(STAT_MOVEVARS_JUMPVELOCITY)
127 #define PHYS_MAXAIRSPEED(s) getstatf(STAT_MOVEVARS_MAXAIRSPEED)
128 #define PHYS_MAXAIRSTRAFESPEED getstatf(STAT_MOVEVARS_MAXAIRSTRAFESPEED)
129 #define PHYS_MAXSPEED(s) getstatf(STAT_MOVEVARS_MAXSPEED)
130 #define PHYS_STEPHEIGHT getstatf(STAT_MOVEVARS_STEPHEIGHT)
131 #define PHYS_STOPSPEED getstatf(STAT_MOVEVARS_STOPSPEED)
132 #define PHYS_WARSOWBUNNY_ACCEL getstatf(STAT_MOVEVARS_WARSOWBUNNY_ACCEL)
133 #define PHYS_WARSOWBUNNY_BACKTOSIDERATIO getstatf(STAT_MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO)
134 #define PHYS_WARSOWBUNNY_AIRFORWARDACCEL getstatf(STAT_MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL)
135 #define PHYS_WARSOWBUNNY_TOPSPEED getstatf(STAT_MOVEVARS_WARSOWBUNNY_TOPSPEED)
136 #define PHYS_WARSOWBUNNY_TURNACCEL getstatf(STAT_MOVEVARS_WARSOWBUNNY_TURNACCEL)
138 #define PHYS_WALLFRICTION getstati(STAT_MOVEVARS_WALLFRICTION)
140 #define PHYS_JETPACK_ACCEL_UP getstatf(STAT_JETPACK_ACCEL_UP)
141 #define PHYS_JETPACK_ACCEL_SIDE getstatf(STAT_JETPACK_ACCEL_SIDE)
142 #define PHYS_JETPACK_ANTIGRAVITY getstatf(STAT_JETPACK_ANTIGRAVITY)
143 #define PHYS_JETPACK_FUEL getstatf(STAT_JETPACK_FUEL)
144 #define PHYS_JETPACK_MAXSPEED_UP getstatf(STAT_JETPACK_MAXSPEED_UP)
145 #define PHYS_JETPACK_MAXSPEED_SIDE getstatf(STAT_JETPACK_MAXSPEED_SIDE)
147 #define PHYS_DODGING_FROZEN getstati(STAT_DODGING_FROZEN)
149 #define PHYS_NOSTEP getstati(STAT_NOSTEP)
150 #define PHYS_JUMPSTEP getstati(STAT_MOVEVARS_JUMPSTEP)
154 bool Physics_Valid(string thecvar);
156 .vector stat_pl_view_ofs;
157 .vector stat_pl_crouch_view_ofs;
161 .vector stat_pl_crouch_min;
162 .vector stat_pl_crouch_max;
164 .float stat_sv_airaccel_qw;
165 .float stat_sv_airstrafeaccel_qw;
166 .float stat_sv_airspeedlimit_nonqw;
167 .float stat_sv_maxspeed;
168 .float stat_movement_highspeed;
170 .float stat_sv_friction_on_land;
171 .float stat_sv_friction_slick;
173 .string stat_jumpspeedcap_min;
174 .string stat_jumpspeedcap_max;
175 .float stat_jumpspeedcap_disable_onramps;
177 .float stat_jetpack_accel_side;
178 .float stat_jetpack_accel_up;
179 .float stat_jetpack_antigravity;
180 .float stat_jetpack_fuel;
181 .float stat_jetpack_maxspeed_up;
182 .float stat_jetpack_maxspeed_side;
183 .float stat_gameplayfix_easierwaterjump;
184 .float stat_gameplayfix_downtracesupportsongroundflag;
185 .float stat_gameplayfix_stepmultipletimes;
186 .float stat_gameplayfix_unstickplayers;
187 .float stat_gameplayfix_stepdown;
190 .float stat_sv_jumpvelocity;
191 .float stat_sv_airaccel_qw_stretchfactor;
192 .float stat_sv_maxairstrafespeed;
193 .float stat_sv_maxairspeed;
194 .float stat_sv_airstrafeaccelerate;
195 .float stat_sv_warsowbunny_turnaccel;
196 .float stat_sv_airaccel_sideways_friction;
197 .float stat_sv_aircontrol;
198 .float stat_sv_aircontrol_power;
199 .float stat_sv_aircontrol_penalty;
200 .float stat_sv_warsowbunny_airforwardaccel;
201 .float stat_sv_warsowbunny_topspeed;
202 .float stat_sv_warsowbunny_accel;
203 .float stat_sv_warsowbunny_backtosideratio;
204 .float stat_sv_friction;
205 .float stat_sv_accelerate;
206 .float stat_sv_stopspeed;
207 .float stat_sv_airaccelerate;
208 .float stat_sv_airstopaccelerate;
211 .float stat_jumpstep;
213 .bool stat_sv_track_canjump;
215 #define PHYS_INPUT_ANGLES(s) s.v_angle
216 #define PHYS_WORLD_ANGLES(s) s.angles
218 #define PHYS_INPUT_TIMELENGTH frametime
219 #define PHYS_INPUT_FRAMETIME sys_frametime
221 #define PHYS_INPUT_MOVEVALUES(s) s.movement
223 #define PHYS_INPUT_BUTTON_MASK(s) (s.BUTTON_ATCK | 2 * s.BUTTON_JUMP | 4 * s.BUTTON_ATCK2 | 8 * s.BUTTON_ZOOM | 16 * s.BUTTON_CROUCH | 32 * s.BUTTON_HOOK | 64 * s.BUTTON_USE | 128 * (s.movement_x < 0) | 256 * (s.movement_x > 0) | 512 * (s.movement_y < 0) | 1024 * (s.movement_y > 0))
224 #define PHYS_INPUT_BUTTON_ATCK(s) s.BUTTON_ATCK
225 #define PHYS_INPUT_BUTTON_JUMP(s) s.BUTTON_JUMP
226 #define PHYS_INPUT_BUTTON_ATCK2(s) s.BUTTON_ATCK2
227 #define PHYS_INPUT_BUTTON_ZOOM(s) s.BUTTON_ZOOM
228 #define PHYS_INPUT_BUTTON_CROUCH(s) s.BUTTON_CROUCH
229 #define PHYS_INPUT_BUTTON_HOOK(s) s.BUTTON_HOOK
230 #define PHYS_INPUT_BUTTON_USE(s) s.BUTTON_USE
231 #define PHYS_INPUT_BUTTON_BACKWARD(s) (s.movement_x < 0)
232 #define PHYS_INPUT_BUTTON_FORWARD(s) (s.movement_x > 0)
233 #define PHYS_INPUT_BUTTON_LEFT(s) (s.movement_y < 0)
234 #define PHYS_INPUT_BUTTON_RIGHT(s) (s.movement_y > 0)
235 #define PHYS_INPUT_BUTTON_JETPACK(s) s.BUTTON_JETPACK
237 #define PHYS_DEAD(s) s.deadflag != DEAD_NO
239 #define GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE autocvar_sv_gameplayfix_gravityunaffectedbyticrate
240 #define GAMEPLAYFIX_NOGRAVITYONGROUND cvar("sv_gameplayfix_nogravityonground")
241 #define GAMEPLAYFIX_Q2AIRACCELERATE autocvar_sv_gameplayfix_q2airaccelerate
242 #define GAMEPLAYFIX_EASIERWATERJUMP cvar("sv_gameplayfix_easierwaterjump")
243 #define GAMEPLAYFIX_DOWNTRACEONGROUND cvar("sv_gameplayfix_downtracesupportsongroundflag")
244 #define GAMEPLAYFIX_STEPMULTIPLETIMES cvar("sv_gameplayfix_stepmultipletimes")
245 #define GAMEPLAYFIX_UNSTICKPLAYERS cvar("sv_gameplayfix_unstickplayers")
246 #define GAMEPLAYFIX_STEPDOWN cvar("sv_gameplayfix_stepdown")
248 #define IS_DUCKED(s) s.crouch
249 #define SET_DUCKED(s) s.crouch = true
250 #define UNSET_DUCKED(s) s.crouch = false
252 #define IS_JUMP_HELD(s) !(s.flags & FL_JUMPRELEASED)
253 #define SET_JUMP_HELD(s) s.flags &= ~FL_JUMPRELEASED
254 #define UNSET_JUMP_HELD(s) s.flags |= FL_JUMPRELEASED
256 #define IS_ONGROUND(s) boolean(s.flags & FL_ONGROUND)
257 #define SET_ONGROUND(s) s.flags |= FL_ONGROUND
258 #define UNSET_ONGROUND(s) s.flags &= ~FL_ONGROUND
260 #define WAS_ONGROUND(s) boolean((s).lastflags & FL_ONGROUND)
262 #define ITEMS_STAT(s) s.items
263 #define BUFFS_STAT(s) (s).buffs
265 #define PHYS_AMMO_FUEL(s) s.ammo_fuel
267 #define PHYS_FROZEN(s) s.frozen
269 #define PHYS_JUMPSPEEDCAP_MIN autocvar_sv_jumpspeedcap_min
270 #define PHYS_JUMPSPEEDCAP_MAX autocvar_sv_jumpspeedcap_max
271 #define PHYS_JUMPSPEEDCAP_DISABLE_ONRAMPS autocvar_sv_jumpspeedcap_max_disable_on_ramps
273 #define PHYS_CL_TRACK_CANJUMP(s) s.cvar_cl_movement_track_canjump
274 #define PHYS_TRACK_CANJUMP(s) s.stat_sv_track_canjump
275 #define PHYS_ACCELERATE self.stat_sv_accelerate
276 #define PHYS_AIRACCEL_QW(s) s.stat_sv_airaccel_qw
277 #define PHYS_AIRACCEL_QW_STRETCHFACTOR(s) self.stat_sv_airaccel_qw_stretchfactor
278 #define PHYS_AIRACCEL_SIDEWAYS_FRICTION self.stat_sv_airaccel_sideways_friction
279 #define PHYS_AIRACCELERATE self.stat_sv_airaccelerate
280 #define PHYS_AIRCONTROL self.stat_sv_aircontrol
281 #define PHYS_AIRCONTROL_PENALTY self.stat_sv_aircontrol_penalty
282 #define PHYS_AIRCONTROL_POWER self.stat_sv_aircontrol_power
283 #define PHYS_AIRSPEEDLIMIT_NONQW(s) s.stat_sv_airspeedlimit_nonqw
284 #define PHYS_AIRSTOPACCELERATE self.stat_sv_airstopaccelerate
285 #define PHYS_AIRSTRAFEACCEL_QW(s) s.stat_sv_airstrafeaccel_qw
286 #define PHYS_AIRSTRAFEACCELERATE(s) s.stat_sv_airstrafeaccelerate
287 #define PHYS_ENTGRAVITY(s) s.gravity
288 #define PHYS_FRICTION self.stat_sv_friction
289 #define PHYS_FRICTION_SLICK autocvar_sv_friction_slick
290 #define PHYS_FRICTION_ONLAND autocvar_sv_friction_on_land
291 #define PHYS_GRAVITY autocvar_sv_gravity
292 #define PHYS_HIGHSPEED autocvar_g_movement_highspeed
293 #define PHYS_JUMPVELOCITY self.stat_sv_jumpvelocity
294 #define PHYS_MAXAIRSPEED(s) self.stat_sv_maxairspeed
295 #define PHYS_MAXAIRSTRAFESPEED self.stat_sv_maxairstrafespeed
296 #define PHYS_MAXSPEED(s) s.stat_sv_maxspeed
297 #define PHYS_STEPHEIGHT autocvar_sv_stepheight
298 #define PHYS_STOPSPEED self.stat_sv_stopspeed
299 #define PHYS_WARSOWBUNNY_ACCEL self.stat_sv_warsowbunny_accel
300 #define PHYS_WARSOWBUNNY_BACKTOSIDERATIO self.stat_sv_warsowbunny_backtosideratio
301 #define PHYS_WARSOWBUNNY_AIRFORWARDACCEL self.stat_sv_warsowbunny_airforwardaccel
302 #define PHYS_WARSOWBUNNY_TOPSPEED self.stat_sv_warsowbunny_topspeed
303 #define PHYS_WARSOWBUNNY_TURNACCEL self.stat_sv_warsowbunny_turnaccel
305 #define PHYS_WALLFRICTION cvar("sv_wallfriction")
307 #define PHYS_JETPACK_ACCEL_UP autocvar_g_jetpack_acceleration_up
308 #define PHYS_JETPACK_ACCEL_SIDE autocvar_g_jetpack_acceleration_side
309 #define PHYS_JETPACK_ANTIGRAVITY autocvar_g_jetpack_antigravity
310 #define PHYS_JETPACK_FUEL autocvar_g_jetpack_fuel
311 #define PHYS_JETPACK_MAXSPEED_UP autocvar_g_jetpack_maxspeed_up
312 #define PHYS_JETPACK_MAXSPEED_SIDE autocvar_g_jetpack_maxspeed_side
314 #define PHYS_DODGING_FROZEN autocvar_sv_dodging_frozen
316 #define PHYS_NOSTEP cvar("sv_nostep")
317 #define PHYS_JUMPSTEP cvar("sv_jumpstep")