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_GRAVITY(s) STAT(MOVEVARS_GRAVITY, s)
60 #define PHYS_HIGHSPEED STAT(MOVEVARS_HIGHSPEED, this)
62 #define PHYS_JETPACK_ACCEL_SIDE STAT(JETPACK_ACCEL_SIDE, this)
63 #define PHYS_JETPACK_ACCEL_UP STAT(JETPACK_ACCEL_UP, this)
64 #define PHYS_JETPACK_ANTIGRAVITY STAT(JETPACK_ANTIGRAVITY, this)
65 #define PHYS_JETPACK_FUEL STAT(JETPACK_FUEL, this)
66 #define PHYS_JETPACK_MAXSPEED_SIDE STAT(JETPACK_MAXSPEED_SIDE, this)
67 #define PHYS_JETPACK_MAXSPEED_UP STAT(JETPACK_MAXSPEED_UP, this)
69 #define PHYS_JUMPSPEEDCAP_DISABLE_ONRAMPS STAT(MOVEVARS_JUMPSPEEDCAP_DISABLE_ONRAMPS, this)
70 #define PHYS_JUMPSTEP STAT(MOVEVARS_JUMPSTEP, this)
71 #define PHYS_JUMPVELOCITY(s) STAT(MOVEVARS_JUMPVELOCITY, s)
73 #define PHYS_MAXAIRSPEED(s) STAT(MOVEVARS_MAXAIRSPEED, s)
74 #define PHYS_MAXAIRSTRAFESPEED(s) STAT(MOVEVARS_MAXAIRSTRAFESPEED, s)
75 #define PHYS_MAXSPEED(s) STAT(MOVEVARS_MAXSPEED, s)
77 #define PHYS_NOSTEP STAT(NOSTEP, this)
78 #define PHYS_STEPHEIGHT STAT(MOVEVARS_STEPHEIGHT, this)
80 #define PHYS_STOPSPEED(s) STAT(MOVEVARS_STOPSPEED, s)
82 #define PHYS_TRACK_CANJUMP(s) STAT(MOVEVARS_TRACK_CANJUMP, s)
84 #define PHYS_WALLFRICTION STAT(MOVEVARS_WALLFRICTION, this)
86 #define PHYS_WARSOWBUNNY_ACCEL(s) STAT(MOVEVARS_WARSOWBUNNY_ACCEL, s)
87 #define PHYS_WARSOWBUNNY_AIRFORWARDACCEL(s) STAT(MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL, s)
88 #define PHYS_WARSOWBUNNY_BACKTOSIDERATIO(s) STAT(MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO, s)
89 #define PHYS_WARSOWBUNNY_TOPSPEED(s) STAT(MOVEVARS_WARSOWBUNNY_TOPSPEED, s)
90 #define PHYS_WARSOWBUNNY_TURNACCEL(s) STAT(MOVEVARS_WARSOWBUNNY_TURNACCEL, s)
92 #define UPWARD_VELOCITY_CLEARS_ONGROUND STAT(GAMEPLAYFIX_UPVELOCITYCLEARSONGROUND, this)
96 const int FL_WATERJUMP = 2048; // player jumping out of water
97 const int FL_JUMPRELEASED = 4096; // for jump debouncing
107 #define IS_CLIENT(s) (s).isplayermodel
108 #define IS_PLAYER(s) (s).isplayermodel
109 #define isPushable(s) (s).isplayermodel
111 //float player_multijump;
112 //float player_jumpheight;
114 #define TICRATE ticrate
116 #define PHYS_INPUT_ANGLES(s) input_angles
118 #define PHYS_WORLD_ANGLES(s) input_angles
120 #define PHYS_INPUT_TIMELENGTH input_timelength
121 #define PHYS_INPUT_FRAMETIME serverdeltatime
123 #define PHYS_INPUT_MOVEVALUES(s) input_movevalues
125 #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))
126 #define PHYS_INPUT_BUTTON_ATCK(s) boolean(input_buttons & BIT(0))
127 #define PHYS_INPUT_BUTTON_JUMP(s) boolean(input_buttons & BIT(1))
128 #define PHYS_INPUT_BUTTON_ATCK2(s) boolean(input_buttons & BIT(2))
129 #define PHYS_INPUT_BUTTON_ZOOM(s) boolean(input_buttons & BIT(3))
130 #define PHYS_INPUT_BUTTON_CROUCH(s) boolean(input_buttons & BIT(4))
131 #define PHYS_INPUT_BUTTON_HOOK(s) boolean(input_buttons & BIT(5))
132 #define PHYS_INPUT_BUTTON_USE(s) boolean(input_buttons & BIT(6))
133 #define PHYS_INPUT_BUTTON_BACKWARD(s) boolean(input_buttons & BIT(7))
134 #define PHYS_INPUT_BUTTON_FORWARD(s) boolean(input_buttons & BIT(8))
135 #define PHYS_INPUT_BUTTON_LEFT(s) boolean(input_buttons & BIT(9))
136 #define PHYS_INPUT_BUTTON_RIGHT(s) boolean(input_buttons & BIT(10))
137 #define PHYS_INPUT_BUTTON_JETPACK(s) boolean(input_buttons & BIT(12))
139 #define PHYS_DEAD(s) s.csqcmodel_isdead
141 #define GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE (boolean(moveflags & MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE))
142 #define GAMEPLAYFIX_NOGRAVITYONGROUND (boolean(moveflags & MOVEFLAG_NOGRAVITYONGROUND))
143 #define GAMEPLAYFIX_Q2AIRACCELERATE (boolean(moveflags & MOVEFLAG_Q2AIRACCELERATE))
145 #define IS_DUCKED(s) boolean(s.flags & FL_DUCKED)
146 #define SET_DUCKED(s) s.flags |= FL_DUCKED
147 #define UNSET_DUCKED(s) s.flags &= ~FL_DUCKED
149 #define IS_JUMP_HELD(s) !(s.flags & FL_JUMPRELEASED)
150 #define SET_JUMP_HELD(s) s.flags &= ~FL_JUMPRELEASED
151 #define UNSET_JUMP_HELD(s) s.flags |= FL_JUMPRELEASED
153 #define IS_ONGROUND(s) boolean(s.flags & FL_ONGROUND)
154 #define SET_ONGROUND(s) s.flags |= FL_ONGROUND
155 #define UNSET_ONGROUND(s) s.flags &= ~FL_ONGROUND
157 #define WAS_ONGROUND(s) boolean(s.lastflags & FL_ONGROUND)
159 #define ITEMS_STAT(s) (s).items
161 #define PHYS_JUMPSPEEDCAP_MIN cvar_string("cl_jumpspeedcap_min")
162 #define PHYS_JUMPSPEEDCAP_MAX cvar_string("cl_jumpspeedcap_max")
164 #define PHYS_CL_TRACK_CANJUMP(s) STAT(MOVEVARS_CL_TRACK_CANJUMP, s)
165 // FIXME: 0 doesn't mean zero gravity
166 #define PHYS_ENTGRAVITY(s) STAT(MOVEVARS_ENTGRAVITY, s)
170 bool Physics_Valid(string thecvar);
172 .float stat_sv_airspeedlimit_nonqw = _STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW);
173 .float stat_sv_maxspeed = _STAT(MOVEVARS_MAXSPEED);
175 /** Not real stats */
176 .string stat_jumpspeedcap_min, stat_jumpspeedcap_max;
178 #define TICRATE sys_frametime
180 #define PHYS_INPUT_ANGLES(s) s.v_angle
181 #define PHYS_WORLD_ANGLES(s) s.angles
183 #define PHYS_INPUT_TIMELENGTH frametime
184 #define PHYS_INPUT_FRAMETIME sys_frametime
186 #define PHYS_INPUT_MOVEVALUES(s) s.movement
188 #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))
189 #define PHYS_INPUT_BUTTON_ATCK(s) s.BUTTON_ATCK
190 #define PHYS_INPUT_BUTTON_JUMP(s) s.BUTTON_JUMP
191 #define PHYS_INPUT_BUTTON_ATCK2(s) s.BUTTON_ATCK2
192 #define PHYS_INPUT_BUTTON_ZOOM(s) s.BUTTON_ZOOM
193 #define PHYS_INPUT_BUTTON_CROUCH(s) s.BUTTON_CROUCH
194 #define PHYS_INPUT_BUTTON_HOOK(s) s.BUTTON_HOOK
195 #define PHYS_INPUT_BUTTON_USE(s) s.BUTTON_USE
196 #define PHYS_INPUT_BUTTON_BACKWARD(s) (s.movement_x < 0)
197 #define PHYS_INPUT_BUTTON_FORWARD(s) (s.movement_x > 0)
198 #define PHYS_INPUT_BUTTON_LEFT(s) (s.movement_y < 0)
199 #define PHYS_INPUT_BUTTON_RIGHT(s) (s.movement_y > 0)
200 #define PHYS_INPUT_BUTTON_JETPACK(s) s.BUTTON_JETPACK
202 #define PHYS_DEAD(s) s.deadflag != DEAD_NO
204 #define GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE autocvar_sv_gameplayfix_gravityunaffectedbyticrate
205 #define GAMEPLAYFIX_NOGRAVITYONGROUND autocvar_sv_gameplayfix_nogravityonground
206 #define GAMEPLAYFIX_Q2AIRACCELERATE autocvar_sv_gameplayfix_q2airaccelerate
208 #define IS_DUCKED(s) s.crouch
209 #define SET_DUCKED(s) s.crouch = true
210 #define UNSET_DUCKED(s) s.crouch = false
212 #define IS_JUMP_HELD(s) !(s.flags & FL_JUMPRELEASED)
213 #define SET_JUMP_HELD(s) s.flags &= ~FL_JUMPRELEASED
214 #define UNSET_JUMP_HELD(s) s.flags |= FL_JUMPRELEASED
216 #define IS_ONGROUND(s) boolean(s.flags & FL_ONGROUND)
217 #define SET_ONGROUND(s) s.flags |= FL_ONGROUND
218 #define UNSET_ONGROUND(s) s.flags &= ~FL_ONGROUND
220 #define WAS_ONGROUND(s) boolean((s).lastflags & FL_ONGROUND)
222 #define ITEMS_STAT(s) s.items
224 #define PHYS_JUMPSPEEDCAP_MIN autocvar_sv_jumpspeedcap_min
225 #define PHYS_JUMPSPEEDCAP_MAX autocvar_sv_jumpspeedcap_max
227 #define PHYS_CL_TRACK_CANJUMP(s) s.cvar_cl_movement_track_canjump
228 #define PHYS_ENTGRAVITY(s) s.gravity