]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/physics.qh
Kill use of self in player physics code
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / physics.qh
1 #ifndef COMMON_PHYSICS_H
2 #define COMMON_PHYSICS_H
3
4 // Client/server mappings
5
6 .entity conveyor;
7
8 .float race_penalty;
9
10 .float gravity;
11 .float swamp_slowdown;
12 .float lastflags;
13 .float lastground;
14 .float wasFlying;
15 .float spectatorspeed;
16
17 .vector movement_old;
18 .float buttons_old;
19 .vector v_angle_old;
20 .string lastclassname;
21
22 .float() PlayerPhysplug;
23 float AdjustAirAccelQW(float accelqw, float factor);
24
25 bool IsFlying(entity a);
26
27 #ifdef CSQC
28
29         const int FL_WATERJUMP = 2048;  // player jumping out of water
30         const int FL_JUMPRELEASED = 4096;       // for jump debouncing
31
32         .float watertype;
33         .float waterlevel;
34         .int items;
35
36         .vector movement;
37         .vector v_angle;
38
39 // TODO
40         #define IS_CLIENT(s)                                            (s).isplayermodel
41         #define IS_PLAYER(s)                                            (s).isplayermodel
42         #define isPushable(s)                                           (s).isplayermodel
43
44         //float player_multijump;
45         //float player_jumpheight;
46
47         #define PHYS_INPUT_ANGLES(s)                            input_angles
48 // TODO
49         #define PHYS_WORLD_ANGLES(s)                            input_angles
50
51         #define PHYS_INPUT_TIMELENGTH                           input_timelength
52         #define PHYS_INPUT_FRAMETIME                            serverdeltatime
53
54         #define PHYS_INPUT_MOVEVALUES(s)                        input_movevalues
55
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))
69
70         #define PHYS_DEAD(s)                                            s.csqcmodel_isdead
71
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)
80
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
84
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
88
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
92
93         #define WAS_ONGROUND(s)                                         boolean(s.lastflags & FL_ONGROUND)
94
95         #define ITEMS_STAT(s)                                           (s).items
96         #define BUFFS_STAT(s)                                           getstati(STAT_BUFFS)
97
98         #define PHYS_AMMO_FUEL(s)                                       getstati(STAT_FUEL)
99
100         #define PHYS_FROZEN(s)                                          getstati(STAT_FROZEN)
101
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)
105
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(s)                                      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(s)      getstatf(STAT_MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION)
112         #define PHYS_AIRACCELERATE(s)                           getstatf(STAT_MOVEVARS_AIRACCELERATE)
113         #define PHYS_AIRCONTROL(s)                                      getstatf(STAT_MOVEVARS_AIRCONTROL)
114         #define PHYS_AIRCONTROL_PENALTY(s)                      getstatf(STAT_MOVEVARS_AIRCONTROL_PENALTY)
115         #define PHYS_AIRCONTROL_POWER(s)                        getstatf(STAT_MOVEVARS_AIRCONTROL_POWER)
116         #define PHYS_AIRSPEEDLIMIT_NONQW(s)                     getstatf(STAT_MOVEVARS_AIRSPEEDLIMIT_NONQW)
117         #define PHYS_AIRSTOPACCELERATE(s)                       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(s)                                        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(s)                            getstatf(STAT_MOVEVARS_JUMPVELOCITY)
127         #define PHYS_MAXAIRSPEED(s)                                     getstatf(STAT_MOVEVARS_MAXAIRSPEED)
128         #define PHYS_MAXAIRSTRAFESPEED(s)                       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(s)                                       getstatf(STAT_MOVEVARS_STOPSPEED)
132         #define PHYS_WARSOWBUNNY_ACCEL(s)                       getstatf(STAT_MOVEVARS_WARSOWBUNNY_ACCEL)
133         #define PHYS_WARSOWBUNNY_BACKTOSIDERATIO(s)     getstatf(STAT_MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO)
134         #define PHYS_WARSOWBUNNY_AIRFORWARDACCEL(s)     getstatf(STAT_MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL)
135         #define PHYS_WARSOWBUNNY_TOPSPEED(s)            getstatf(STAT_MOVEVARS_WARSOWBUNNY_TOPSPEED)
136         #define PHYS_WARSOWBUNNY_TURNACCEL(s)           getstatf(STAT_MOVEVARS_WARSOWBUNNY_TURNACCEL)
137
138         #define PHYS_WALLFRICTION                                       getstati(STAT_MOVEVARS_WALLFRICTION)
139
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)
146
147         #define PHYS_DODGING_FROZEN                                     getstati(STAT_DODGING_FROZEN)
148
149         #define PHYS_NOSTEP                                                     getstati(STAT_NOSTEP)
150         #define PHYS_JUMPSTEP                                           getstati(STAT_MOVEVARS_JUMPSTEP)
151
152 #elif defined(SVQC)
153
154         bool Physics_Valid(string thecvar);
155
156         .vector stat_pl_view_ofs;
157         .vector stat_pl_crouch_view_ofs;
158
159         .vector stat_pl_min;
160         .vector stat_pl_max;
161         .vector stat_pl_crouch_min;
162         .vector stat_pl_crouch_max;
163
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;
169
170         .float stat_sv_friction_on_land;
171         .float stat_sv_friction_slick;
172
173         .string stat_jumpspeedcap_min;
174         .string stat_jumpspeedcap_max;
175         .float stat_jumpspeedcap_disable_onramps;
176
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;
188
189         // new properties
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;
209
210         .float stat_nostep;
211         .float stat_jumpstep;
212
213         .bool stat_sv_track_canjump;
214
215         #define PHYS_INPUT_ANGLES(s)                            s.v_angle
216         #define PHYS_WORLD_ANGLES(s)                            s.angles
217
218         #define PHYS_INPUT_TIMELENGTH                           frametime
219         #define PHYS_INPUT_FRAMETIME                            sys_frametime
220
221         #define PHYS_INPUT_MOVEVALUES(s)                        s.movement
222         // TODO: cache
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
236
237         #define PHYS_DEAD(s)                                            s.deadflag != DEAD_NO
238
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")
247
248         #define IS_DUCKED(s)                                            s.crouch
249         #define SET_DUCKED(s)                                           s.crouch = true
250         #define UNSET_DUCKED(s)                                         s.crouch = false
251
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
255
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
259
260         #define WAS_ONGROUND(s)                                         boolean((s).lastflags & FL_ONGROUND)
261
262         #define ITEMS_STAT(s)                                           s.items
263         #define BUFFS_STAT(s)                                           (s).buffs
264
265         #define PHYS_AMMO_FUEL(s)                                       s.ammo_fuel
266
267         #define PHYS_FROZEN(s)                                          s.frozen
268
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
272
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(s)                                      s.stat_sv_accelerate
276         #define PHYS_AIRACCEL_QW(s)                                     s.stat_sv_airaccel_qw
277         #define PHYS_AIRACCEL_QW_STRETCHFACTOR(s)       s.stat_sv_airaccel_qw_stretchfactor
278         #define PHYS_AIRACCEL_SIDEWAYS_FRICTION(s)      s.stat_sv_airaccel_sideways_friction
279         #define PHYS_AIRACCELERATE(s)                           s.stat_sv_airaccelerate
280         #define PHYS_AIRCONTROL(s)                                      s.stat_sv_aircontrol
281         #define PHYS_AIRCONTROL_PENALTY(s)                      s.stat_sv_aircontrol_penalty
282         #define PHYS_AIRCONTROL_POWER(s)                        s.stat_sv_aircontrol_power
283         #define PHYS_AIRSPEEDLIMIT_NONQW(s)                     s.stat_sv_airspeedlimit_nonqw
284         #define PHYS_AIRSTOPACCELERATE(s)                       s.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(s)                                        s.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(s)                            s.stat_sv_jumpvelocity
294         #define PHYS_MAXAIRSPEED(s)                                     s.stat_sv_maxairspeed
295         #define PHYS_MAXAIRSTRAFESPEED(s)                       s.stat_sv_maxairstrafespeed
296         #define PHYS_MAXSPEED(s)                                        s.stat_sv_maxspeed
297         #define PHYS_STEPHEIGHT                                         autocvar_sv_stepheight
298         #define PHYS_STOPSPEED(s)                                       s.stat_sv_stopspeed
299         #define PHYS_WARSOWBUNNY_ACCEL(s)                       s.stat_sv_warsowbunny_accel
300         #define PHYS_WARSOWBUNNY_BACKTOSIDERATIO(s)s.stat_sv_warsowbunny_backtosideratio
301         #define PHYS_WARSOWBUNNY_AIRFORWARDACCEL(s)s.stat_sv_warsowbunny_airforwardaccel
302         #define PHYS_WARSOWBUNNY_TOPSPEED(s)            s.stat_sv_warsowbunny_topspeed
303         #define PHYS_WARSOWBUNNY_TURNACCEL(s)           s.stat_sv_warsowbunny_turnaccel
304
305         #define PHYS_WALLFRICTION                                       cvar("sv_wallfriction")
306
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
313
314         #define PHYS_DODGING_FROZEN                                     autocvar_sv_dodging_frozen
315
316         #define PHYS_NOSTEP                                                     cvar("sv_nostep")
317         #define PHYS_JUMPSTEP                                           cvar("sv_jumpstep")
318
319 #endif
320 #endif