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);
27 #define BUFFS_STAT(s) STAT(BUFFS, s)
29 #define GAMEPLAYFIX_DOWNTRACEONGROUND STAT(GAMEPLAYFIX_DOWNTRACEONGROUND, this)
30 #define GAMEPLAYFIX_EASIERWATERJUMP STAT(GAMEPLAYFIX_EASIERWATERJUMP, this)
31 #define GAMEPLAYFIX_STEPDOWN STAT(GAMEPLAYFIX_STEPDOWN, this)
32 #define GAMEPLAYFIX_STEPMULTIPLETIMES STAT(GAMEPLAYFIX_STEPMULTIPLETIMES, this)
33 #define GAMEPLAYFIX_UNSTICKPLAYERS STAT(GAMEPLAYFIX_UNSTICKPLAYERS, this)
35 #define PHYS_ACCELERATE(s) STAT(MOVEVARS_ACCELERATE, s)
36 #define PHYS_AIRACCELERATE(s) STAT(MOVEVARS_AIRACCELERATE, s)
37 #define PHYS_AIRACCEL_QW(s) STAT(MOVEVARS_AIRACCEL_QW, s)
38 #define PHYS_AIRACCEL_QW_STRETCHFACTOR(s) STAT(MOVEVARS_AIRACCEL_QW_STRETCHFACTOR, s)
39 #define PHYS_AIRACCEL_SIDEWAYS_FRICTION(s) STAT(MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION, s)
40 #define PHYS_AIRCONTROL(s) STAT(MOVEVARS_AIRCONTROL, s)
41 #define PHYS_AIRCONTROL_PENALTY(s) STAT(MOVEVARS_AIRCONTROL_PENALTY, s)
42 #define PHYS_AIRCONTROL_POWER(s) STAT(MOVEVARS_AIRCONTROL_POWER, s)
43 #define PHYS_AIRSPEEDLIMIT_NONQW(s) STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW, s)
44 #define PHYS_AIRSTOPACCELERATE(s) STAT(MOVEVARS_AIRSTOPACCELERATE, s)
45 #define PHYS_AIRSTRAFEACCELERATE(s) STAT(MOVEVARS_AIRSTRAFEACCELERATE, s)
46 #define PHYS_AIRSTRAFEACCEL_QW(s) STAT(MOVEVARS_AIRSTRAFEACCEL_QW, s)
48 #define PHYS_AMMO_FUEL(s) STAT(FUEL, s)
50 #define PHYS_DODGING_FROZEN STAT(DODGING_FROZEN, this)
52 #define PHYS_FRICTION(s) STAT(MOVEVARS_FRICTION, s)
53 #define PHYS_FRICTION_ONLAND STAT(MOVEVARS_FRICTION_ONLAND, this)
54 #define PHYS_FRICTION_SLICK STAT(MOVEVARS_FRICTION_SLICK, this)
56 #define PHYS_FROZEN(s) STAT(FROZEN, s)
58 #define PHYS_HIGHSPEED STAT(MOVEVARS_HIGHSPEED, this)
60 #define PHYS_JETPACK_ACCEL_SIDE STAT(JETPACK_ACCEL_SIDE, this)
61 #define PHYS_JETPACK_ACCEL_UP STAT(JETPACK_ACCEL_UP, this)
62 #define PHYS_JETPACK_ANTIGRAVITY STAT(JETPACK_ANTIGRAVITY, this)
63 #define PHYS_JETPACK_FUEL STAT(JETPACK_FUEL, this)
64 #define PHYS_JETPACK_MAXSPEED_SIDE STAT(JETPACK_MAXSPEED_SIDE, this)
65 #define PHYS_JETPACK_MAXSPEED_UP STAT(JETPACK_MAXSPEED_UP, this)
67 #define PHYS_JUMPSPEEDCAP_DISABLE_ONRAMPS STAT(MOVEVARS_JUMPSPEEDCAP_DISABLE_ONRAMPS, this)
68 #define PHYS_JUMPSTEP STAT(MOVEVARS_JUMPSTEP, this)
69 #define PHYS_JUMPVELOCITY(s) STAT(MOVEVARS_JUMPVELOCITY, s)
71 #define PHYS_MAXAIRSPEED(s) STAT(MOVEVARS_MAXAIRSPEED, s)
72 #define PHYS_MAXAIRSTRAFESPEED(s) STAT(MOVEVARS_MAXAIRSTRAFESPEED, s)
73 #define PHYS_MAXSPEED(s) STAT(MOVEVARS_MAXSPEED, s)
75 #define PHYS_NOSTEP STAT(NOSTEP, this)
76 #define PHYS_STEPHEIGHT STAT(MOVEVARS_STEPHEIGHT, this)
78 #define PHYS_STOPSPEED(s) STAT(MOVEVARS_STOPSPEED, s)
80 #define PHYS_TRACK_CANJUMP(s) STAT(MOVEVARS_TRACK_CANJUMP, s)
82 #define PHYS_WALLFRICTION STAT(MOVEVARS_WALLFRICTION, this)
84 #define PHYS_WARSOWBUNNY_ACCEL(s) STAT(MOVEVARS_WARSOWBUNNY_ACCEL, s)
85 #define PHYS_WARSOWBUNNY_AIRFORWARDACCEL(s) STAT(MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL, s)
86 #define PHYS_WARSOWBUNNY_BACKTOSIDERATIO(s) STAT(MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO, s)
87 #define PHYS_WARSOWBUNNY_TOPSPEED(s) STAT(MOVEVARS_WARSOWBUNNY_TOPSPEED, s)
88 #define PHYS_WARSOWBUNNY_TURNACCEL(s) STAT(MOVEVARS_WARSOWBUNNY_TURNACCEL, s)
90 #define UPWARD_VELOCITY_CLEARS_ONGROUND STAT(GAMEPLAYFIX_UPVELOCITYCLEARSONGROUND, this)
94 string autocvar_cl_jumpspeedcap_min;
95 string autocvar_cl_jumpspeedcap_max;
97 noref float pmove_waterjumptime;
99 const int FL_WATERJUMP = 2048; // player jumping out of water
100 const int FL_JUMPRELEASED = 4096; // for jump debouncing
110 #define IS_CLIENT(s) (s).isplayermodel
111 #define IS_PLAYER(s) (s).isplayermodel
112 #define IS_NOT_A_CLIENT(s) !(s).isplayermodel
113 #define isPushable(s) (s).isplayermodel
115 //float player_multijump;
116 //float player_jumpheight;
118 #define PHYS_GRAVITY(s) STAT(MOVEVARS_GRAVITY, s)
120 #define PHYS_TELEPORT_TIME(s) pmove_waterjumptime
122 #define TICRATE ticrate
124 #define PHYS_INPUT_ANGLES(s) input_angles
126 #define PHYS_WORLD_ANGLES(s) input_angles
128 #define PHYS_INPUT_TIMELENGTH input_timelength
129 #define PHYS_INPUT_FRAMETIME serverdeltatime
131 #define PHYS_INPUT_MOVEVALUES(s) input_movevalues
133 #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))
134 #define PHYS_INPUT_BUTTON_ATCK(s) boolean(input_buttons & BIT(0))
135 #define PHYS_INPUT_BUTTON_JUMP(s) boolean(input_buttons & BIT(1))
136 #define PHYS_INPUT_BUTTON_ATCK2(s) boolean(input_buttons & BIT(2))
137 #define PHYS_INPUT_BUTTON_ZOOM(s) boolean(input_buttons & BIT(3))
138 #define PHYS_INPUT_BUTTON_CROUCH(s) boolean(input_buttons & BIT(4))
139 #define PHYS_INPUT_BUTTON_HOOK(s) boolean(input_buttons & BIT(5))
140 #define PHYS_INPUT_BUTTON_USE(s) boolean(input_buttons & BIT(6))
141 #define PHYS_INPUT_BUTTON_BACKWARD(s) boolean(input_buttons & BIT(7))
142 #define PHYS_INPUT_BUTTON_FORWARD(s) boolean(input_buttons & BIT(8))
143 #define PHYS_INPUT_BUTTON_LEFT(s) boolean(input_buttons & BIT(9))
144 #define PHYS_INPUT_BUTTON_RIGHT(s) boolean(input_buttons & BIT(10))
145 #define PHYS_INPUT_BUTTON_JETPACK(s) boolean(input_buttons & BIT(12))
147 #define PHYS_DEAD(s) s.csqcmodel_isdead
149 #define GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE (boolean(moveflags & MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE))
150 #define GAMEPLAYFIX_NOGRAVITYONGROUND (boolean(moveflags & MOVEFLAG_NOGRAVITYONGROUND))
151 #define GAMEPLAYFIX_Q2AIRACCELERATE (boolean(moveflags & MOVEFLAG_Q2AIRACCELERATE))
153 #define IS_DUCKED(s) boolean(s.flags & FL_DUCKED)
154 #define SET_DUCKED(s) s.flags |= FL_DUCKED
155 #define UNSET_DUCKED(s) s.flags &= ~FL_DUCKED
157 #define IS_JUMP_HELD(s) !(s.flags & FL_JUMPRELEASED)
158 #define SET_JUMP_HELD(s) s.flags &= ~FL_JUMPRELEASED
159 #define UNSET_JUMP_HELD(s) s.flags |= FL_JUMPRELEASED
161 #define IS_ONGROUND(s) boolean(s.flags & FL_ONGROUND)
162 #define SET_ONGROUND(s) s.flags |= FL_ONGROUND
163 #define UNSET_ONGROUND(s) s.flags &= ~FL_ONGROUND
165 #define WAS_ONGROUND(s) boolean(s.lastflags & FL_ONGROUND)
167 #define ITEMS_STAT(s) (s).items
169 #define PHYS_JUMPSPEEDCAP_MIN autocvar_cl_jumpspeedcap_min
170 #define PHYS_JUMPSPEEDCAP_MAX autocvar_cl_jumpspeedcap_max
172 #define PHYS_CL_TRACK_CANJUMP(s) STAT(MOVEVARS_CL_TRACK_CANJUMP, s)
173 // FIXME: 0 doesn't mean zero gravity
174 #define PHYS_ENTGRAVITY(s) STAT(MOVEVARS_ENTGRAVITY, s)
178 bool Physics_Valid(string thecvar);
180 .float stat_sv_airspeedlimit_nonqw = _STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW);
181 .float stat_sv_maxspeed = _STAT(MOVEVARS_MAXSPEED);
183 /** Not real stats */
184 .string jumpspeedcap_min
185 .string jumpspeedcap_max;
187 #define PHYS_TELEPORT_TIME(s) s.teleport_time
189 #define PHYS_GRAVITY(s) autocvar_sv_gravity
191 #define TICRATE sys_frametime
193 #define PHYS_INPUT_ANGLES(s) s.v_angle
194 #define PHYS_WORLD_ANGLES(s) s.angles
196 #define PHYS_INPUT_TIMELENGTH frametime
197 #define PHYS_INPUT_FRAMETIME sys_frametime
199 #define PHYS_INPUT_MOVEVALUES(s) s.movement
201 #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))
202 #define PHYS_INPUT_BUTTON_ATCK(s) s.BUTTON_ATCK
203 #define PHYS_INPUT_BUTTON_JUMP(s) s.BUTTON_JUMP
204 #define PHYS_INPUT_BUTTON_ATCK2(s) s.BUTTON_ATCK2
205 #define PHYS_INPUT_BUTTON_ZOOM(s) s.BUTTON_ZOOM
206 #define PHYS_INPUT_BUTTON_CROUCH(s) s.BUTTON_CROUCH
207 #define PHYS_INPUT_BUTTON_HOOK(s) s.BUTTON_HOOK
208 #define PHYS_INPUT_BUTTON_USE(s) s.BUTTON_USE
209 #define PHYS_INPUT_BUTTON_BACKWARD(s) (s.movement_x < 0)
210 #define PHYS_INPUT_BUTTON_FORWARD(s) (s.movement_x > 0)
211 #define PHYS_INPUT_BUTTON_LEFT(s) (s.movement_y < 0)
212 #define PHYS_INPUT_BUTTON_RIGHT(s) (s.movement_y > 0)
213 #define PHYS_INPUT_BUTTON_JETPACK(s) s.BUTTON_JETPACK
215 #define PHYS_DEAD(s) s.deadflag != DEAD_NO
217 #define GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE autocvar_sv_gameplayfix_gravityunaffectedbyticrate
218 #define GAMEPLAYFIX_NOGRAVITYONGROUND autocvar_sv_gameplayfix_nogravityonground
219 #define GAMEPLAYFIX_Q2AIRACCELERATE autocvar_sv_gameplayfix_q2airaccelerate
221 #define IS_DUCKED(s) s.crouch
222 #define SET_DUCKED(s) s.crouch = true
223 #define UNSET_DUCKED(s) s.crouch = false
225 #define IS_JUMP_HELD(s) !(s.flags & FL_JUMPRELEASED)
226 #define SET_JUMP_HELD(s) s.flags &= ~FL_JUMPRELEASED
227 #define UNSET_JUMP_HELD(s) s.flags |= FL_JUMPRELEASED
229 #define IS_ONGROUND(s) boolean(s.flags & FL_ONGROUND)
230 #define SET_ONGROUND(s) s.flags |= FL_ONGROUND
231 #define UNSET_ONGROUND(s) s.flags &= ~FL_ONGROUND
233 #define WAS_ONGROUND(s) boolean((s).lastflags & FL_ONGROUND)
235 #define ITEMS_STAT(s) s.items
237 #define PHYS_JUMPSPEEDCAP_MIN autocvar_sv_jumpspeedcap_min
238 #define PHYS_JUMPSPEEDCAP_MAX autocvar_sv_jumpspeedcap_max
240 #define PHYS_CL_TRACK_CANJUMP(s) s.cvar_cl_movement_track_canjump
241 #define PHYS_ENTGRAVITY(s) s.gravity