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 STAT(MOVEVARS_ACCELERATE, this)
36 #define PHYS_AIRACCELERATE STAT(MOVEVARS_AIRACCELERATE, this)
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 STAT(MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION, this)
40 #define PHYS_AIRCONTROL STAT(MOVEVARS_AIRCONTROL, this)
41 #define PHYS_AIRCONTROL_PENALTY STAT(MOVEVARS_AIRCONTROL_PENALTY, this)
42 #define PHYS_AIRCONTROL_POWER STAT(MOVEVARS_AIRCONTROL_POWER, this)
43 #define PHYS_AIRSPEEDLIMIT_NONQW(s) STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW, s)
44 #define PHYS_AIRSTOPACCELERATE STAT(MOVEVARS_AIRSTOPACCELERATE, this)
45 #define PHYS_AIRSTRAFEACCELERATE(s) STAT(MOVEVARS_AIRSTRAFEACCELERATE, this)
46 #define PHYS_AIRSTRAFEACCEL_QW(s) STAT(MOVEVARS_AIRSTRAFEACCEL_QW, s)
48 #define PHYS_AMMO_FUEL(s) STAT(FUEL, s)
50 #define PHYS_BUGRIGS STAT(BUGRIGS, this)
51 #define PHYS_BUGRIGS_ACCEL STAT(BUGRIGS_ACCEL, this)
52 #define PHYS_BUGRIGS_AIR_STEERING STAT(BUGRIGS_AIR_STEERING, this)
53 #define PHYS_BUGRIGS_ANGLE_SMOOTHING STAT(BUGRIGS_ANGLE_SMOOTHING, this)
54 #define PHYS_BUGRIGS_CAR_JUMPING STAT(BUGRIGS_CAR_JUMPING, this)
55 #define PHYS_BUGRIGS_FRICTION_AIR STAT(BUGRIGS_FRICTION_AIR, this)
56 #define PHYS_BUGRIGS_FRICTION_BRAKE STAT(BUGRIGS_FRICTION_BRAKE, this)
57 #define PHYS_BUGRIGS_FRICTION_FLOOR STAT(BUGRIGS_FRICTION_FLOOR, this)
58 #define PHYS_BUGRIGS_PLANAR_MOVEMENT STAT(BUGRIGS_PLANAR_MOVEMENT, this)
59 #define PHYS_BUGRIGS_REVERSE_SPEEDING STAT(BUGRIGS_REVERSE_SPEEDING, this)
60 #define PHYS_BUGRIGS_REVERSE_SPINNING STAT(BUGRIGS_REVERSE_SPINNING, this)
61 #define PHYS_BUGRIGS_REVERSE_STOPPING STAT(BUGRIGS_REVERSE_STOPPING, this)
62 #define PHYS_BUGRIGS_SPEED_POW STAT(BUGRIGS_SPEED_POW, this)
63 #define PHYS_BUGRIGS_SPEED_REF STAT(BUGRIGS_SPEED_REF, this)
64 #define PHYS_BUGRIGS_STEER STAT(BUGRIGS_STEER, this)
66 #define PHYS_DODGING_FROZEN STAT(DODGING_FROZEN, this)
68 #define PHYS_DOUBLEJUMP STAT(DOUBLEJUMP, this)
70 #define PHYS_FRICTION STAT(MOVEVARS_FRICTION, this)
71 #define PHYS_FRICTION_ONLAND STAT(MOVEVARS_FRICTION_ONLAND, this)
72 #define PHYS_FRICTION_SLICK STAT(MOVEVARS_FRICTION_SLICK, this)
74 #define PHYS_FROZEN(s) STAT(FROZEN, s)
76 #define PHYS_GRAVITY(s) STAT(MOVEVARS_GRAVITY, s)
78 #define PHYS_HIGHSPEED STAT(MOVEVARS_HIGHSPEED, this)
80 #define PHYS_JETPACK_ACCEL_SIDE STAT(JETPACK_ACCEL_SIDE, this)
81 #define PHYS_JETPACK_ACCEL_UP STAT(JETPACK_ACCEL_UP, this)
82 #define PHYS_JETPACK_ANTIGRAVITY STAT(JETPACK_ANTIGRAVITY, this)
83 #define PHYS_JETPACK_FUEL STAT(JETPACK_FUEL, this)
84 #define PHYS_JETPACK_MAXSPEED_SIDE STAT(JETPACK_MAXSPEED_SIDE, this)
85 #define PHYS_JETPACK_MAXSPEED_UP STAT(JETPACK_MAXSPEED_UP, this)
87 #define PHYS_JUMPSPEEDCAP_DISABLE_ONRAMPS STAT(MOVEVARS_JUMPSPEEDCAP_DISABLE_ONRAMPS, this)
88 #define PHYS_JUMPSTEP STAT(MOVEVARS_JUMPSTEP, this)
89 #define PHYS_JUMPVELOCITY STAT(MOVEVARS_JUMPVELOCITY, this)
91 #define PHYS_MAXAIRSPEED(s) STAT(MOVEVARS_MAXAIRSPEED, s)
92 #define PHYS_MAXAIRSTRAFESPEED STAT(MOVEVARS_MAXAIRSTRAFESPEED, this)
93 #define PHYS_MAXSPEED(s) STAT(MOVEVARS_MAXSPEED, s)
95 #define PHYS_NOSTEP STAT(NOSTEP, this)
96 #define PHYS_STEPHEIGHT STAT(MOVEVARS_STEPHEIGHT, this)
98 #define PHYS_STOPSPEED STAT(MOVEVARS_STOPSPEED, this)
100 #define PHYS_TRACK_CANJUMP(s) STAT(MOVEVARS_TRACK_CANJUMP, s)
102 #define PHYS_WALLFRICTION STAT(MOVEVARS_WALLFRICTION, this)
104 #define PHYS_WARSOWBUNNY_ACCEL STAT(MOVEVARS_WARSOWBUNNY_ACCEL, this)
105 #define PHYS_WARSOWBUNNY_AIRFORWARDACCEL STAT(MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL, this)
106 #define PHYS_WARSOWBUNNY_BACKTOSIDERATIO STAT(MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO, this)
107 #define PHYS_WARSOWBUNNY_TOPSPEED STAT(MOVEVARS_WARSOWBUNNY_TOPSPEED, this)
108 #define PHYS_WARSOWBUNNY_TURNACCEL STAT(MOVEVARS_WARSOWBUNNY_TURNACCEL, this)
110 #define UPWARD_VELOCITY_CLEARS_ONGROUND STAT(GAMEPLAYFIX_UPVELOCITYCLEARSONGROUND, this)
114 const int FL_WATERJUMP = 2048; // player jumping out of water
115 const int FL_JUMPRELEASED = 4096; // for jump debouncing
117 float PM_multijump_checkjump();
128 #define IS_CLIENT(s) (s).isplayermodel
129 #define IS_PLAYER(s) (s).isplayermodel
130 #define isPushable(s) (s).isplayermodel
132 //float player_multijump;
133 //float player_jumpheight;
135 #define TICRATE ticrate
137 #define PHYS_INPUT_ANGLES(s) input_angles
139 #define PHYS_WORLD_ANGLES(s) input_angles
141 #define PHYS_INPUT_TIMELENGTH input_timelength
142 #define PHYS_INPUT_FRAMETIME serverdeltatime
144 #define PHYS_INPUT_MOVEVALUES(s) input_movevalues
146 #define PHYS_INPUT_BUTTON_MASK(s) (input_buttons | 128 * (input_movevalues_x < 0) | 256 * (input_movevalues_x > 0) | 512 * (input_movevalues_y < 0) | 1024 * (input_movevalues_y > 0))
147 #define PHYS_INPUT_BUTTON_ATCK(s) !!(input_buttons & 1)
148 #define PHYS_INPUT_BUTTON_JUMP(s) !!(input_buttons & 2)
149 #define PHYS_INPUT_BUTTON_ATCK2(s) !!(input_buttons & 4)
150 #define PHYS_INPUT_BUTTON_ZOOM(s) !!(input_buttons & 8)
151 #define PHYS_INPUT_BUTTON_CROUCH(s) !!(input_buttons & 16)
152 #define PHYS_INPUT_BUTTON_HOOK(s) !!(input_buttons & 32)
153 #define PHYS_INPUT_BUTTON_USE(s) !!(input_buttons & 64)
154 #define PHYS_INPUT_BUTTON_BACKWARD(s) !!(input_buttons & 128)
155 #define PHYS_INPUT_BUTTON_FORWARD(s) !!(input_buttons & 256)
156 #define PHYS_INPUT_BUTTON_LEFT(s) !!(input_buttons & 512)
157 #define PHYS_INPUT_BUTTON_RIGHT(s) !!(input_buttons & 1024)
158 #define PHYS_INPUT_BUTTON_JETPACK(s) !!(input_buttons & 4096)
160 #define PHYS_DEAD(s) s.csqcmodel_isdead
162 #define GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE (boolean(moveflags & MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE))
163 #define GAMEPLAYFIX_NOGRAVITYONGROUND (boolean(moveflags & MOVEFLAG_NOGRAVITYONGROUND))
164 #define GAMEPLAYFIX_Q2AIRACCELERATE (boolean(moveflags & MOVEFLAG_Q2AIRACCELERATE))
166 #define IS_DUCKED(s) !!(s.flags & FL_DUCKED)
167 #define SET_DUCKED(s) s.flags |= FL_DUCKED
168 #define UNSET_DUCKED(s) s.flags &= ~FL_DUCKED
170 #define IS_JUMP_HELD(s) !(s.flags & FL_JUMPRELEASED)
171 #define SET_JUMP_HELD(s) s.flags &= ~FL_JUMPRELEASED
172 #define UNSET_JUMP_HELD(s) s.flags |= FL_JUMPRELEASED
174 #define IS_ONGROUND(s) !!(s.flags & FL_ONGROUND)
175 #define SET_ONGROUND(s) s.flags |= FL_ONGROUND
176 #define UNSET_ONGROUND(s) s.flags &= ~FL_ONGROUND
178 #define WAS_ONGROUND(s) !!(s.lastflags & FL_ONGROUND)
180 #define ITEMS_STAT(s) (s).items
182 #define PHYS_JUMPSPEEDCAP_MIN cvar_string("cl_jumpspeedcap_min")
183 #define PHYS_JUMPSPEEDCAP_MAX cvar_string("cl_jumpspeedcap_max")
185 #define PHYS_CL_TRACK_CANJUMP(s) STAT(MOVEVARS_CL_TRACK_CANJUMP, s)
186 // FIXME: 0 doesn't mean zero gravity
187 #define PHYS_ENTGRAVITY(s) STAT(MOVEVARS_ENTGRAVITY, s)
191 bool Physics_Valid(string thecvar);
193 .vector stat_pl_view_ofs;
194 .vector stat_pl_crouch_view_ofs;
196 .vector stat_pl_min, stat_pl_max;
197 .vector stat_pl_crouch_min, stat_pl_crouch_max;
199 .float stat_sv_airspeedlimit_nonqw = _STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW);
200 .float stat_sv_maxspeed = _STAT(MOVEVARS_MAXSPEED);
202 /** Not real stats */
203 .string stat_jumpspeedcap_min, stat_jumpspeedcap_max;
205 #define TICRATE sys_frametime
207 #define PHYS_INPUT_ANGLES(s) s.v_angle
208 #define PHYS_WORLD_ANGLES(s) s.angles
210 #define PHYS_INPUT_TIMELENGTH frametime
211 #define PHYS_INPUT_FRAMETIME sys_frametime
213 #define PHYS_INPUT_MOVEVALUES(s) s.movement
215 #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))
216 #define PHYS_INPUT_BUTTON_ATCK(s) s.BUTTON_ATCK
217 #define PHYS_INPUT_BUTTON_JUMP(s) s.BUTTON_JUMP
218 #define PHYS_INPUT_BUTTON_ATCK2(s) s.BUTTON_ATCK2
219 #define PHYS_INPUT_BUTTON_ZOOM(s) s.BUTTON_ZOOM
220 #define PHYS_INPUT_BUTTON_CROUCH(s) s.BUTTON_CROUCH
221 #define PHYS_INPUT_BUTTON_HOOK(s) s.BUTTON_HOOK
222 #define PHYS_INPUT_BUTTON_USE(s) s.BUTTON_USE
223 #define PHYS_INPUT_BUTTON_BACKWARD(s) (s.movement_x < 0)
224 #define PHYS_INPUT_BUTTON_FORWARD(s) (s.movement_x > 0)
225 #define PHYS_INPUT_BUTTON_LEFT(s) (s.movement_y < 0)
226 #define PHYS_INPUT_BUTTON_RIGHT(s) (s.movement_y > 0)
227 #define PHYS_INPUT_BUTTON_JETPACK(s) s.BUTTON_JETPACK
229 #define PHYS_DEAD(s) s.deadflag != DEAD_NO
231 #define GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE autocvar_sv_gameplayfix_gravityunaffectedbyticrate
232 #define GAMEPLAYFIX_NOGRAVITYONGROUND autocvar_sv_gameplayfix_nogravityonground
233 #define GAMEPLAYFIX_Q2AIRACCELERATE autocvar_sv_gameplayfix_q2airaccelerate
235 #define IS_DUCKED(s) s.crouch
236 #define SET_DUCKED(s) s.crouch = true
237 #define UNSET_DUCKED(s) s.crouch = false
239 #define IS_JUMP_HELD(s) !(s.flags & FL_JUMPRELEASED)
240 #define SET_JUMP_HELD(s) s.flags &= ~FL_JUMPRELEASED
241 #define UNSET_JUMP_HELD(s) s.flags |= FL_JUMPRELEASED
243 #define IS_ONGROUND(s) !!(s.flags & FL_ONGROUND)
244 #define SET_ONGROUND(s) s.flags |= FL_ONGROUND
245 #define UNSET_ONGROUND(s) s.flags &= ~FL_ONGROUND
247 #define WAS_ONGROUND(s) !!((s).lastflags & FL_ONGROUND)
249 #define ITEMS_STAT(s) s.items
251 #define PHYS_JUMPSPEEDCAP_MIN autocvar_sv_jumpspeedcap_min
252 #define PHYS_JUMPSPEEDCAP_MAX autocvar_sv_jumpspeedcap_max
254 #define PHYS_CL_TRACK_CANJUMP(s) s.cvar_cl_movement_track_canjump
255 #define PHYS_ENTGRAVITY(s) s.gravity