]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/physics.qh
Merge branch 'Mario/qc_updates' into TimePath/csqc_prediction
[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 #ifdef CSQC
26
27         #include "../server/t_jumppads.qh"
28
29         float PM_multijump_checkjump();
30         void PM_multijump();
31     .float speed;
32     .float watertype;
33     .float jumppadcount;
34     .float ladder_time;
35     .entity ladder_entity;
36
37         float player_multijump;
38         float player_jumpheight;
39
40         #define PHYS_INPUT_ANGLES(s)                            input_angles
41 // TODO
42         #define PHYS_WORLD_ANGLES(s)                            input_angles
43
44         #define PHYS_INPUT_TIMELENGTH                           input_timelength
45         #define PHYS_INPUT_FRAMETIME                            serverdeltatime
46
47         #define PHYS_INPUT_MOVEVALUES(s)                        input_movevalues
48
49         #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))
50         #define PHYS_INPUT_BUTTON_ATCK(s)                       !!(input_buttons & 1)
51         #define PHYS_INPUT_BUTTON_JUMP(s)                       !!(input_buttons & 2)
52         #define PHYS_INPUT_BUTTON_ATCK2(s)                      !!(input_buttons & 4)
53         #define PHYS_INPUT_BUTTON_ZOOM(s)                       !!(input_buttons & 8)
54         #define PHYS_INPUT_BUTTON_CROUCH(s)                     !!(input_buttons & 16)
55         #define PHYS_INPUT_BUTTON_HOOK(s)                       !!(input_buttons & 32)
56         #define PHYS_INPUT_BUTTON_USE(s)                        !!(input_buttons & 64)
57         #define PHYS_INPUT_BUTTON_BACKWARD(s)           !!(input_buttons & 128)
58         #define PHYS_INPUT_BUTTON_FORWARD(s)            !!(input_buttons & 256)
59         #define PHYS_INPUT_BUTTON_LEFT(s)                       !!(input_buttons & 512)
60         #define PHYS_INPUT_BUTTON_RIGHT(s)                      !!(input_buttons & 1024)
61         #define PHYS_INPUT_BUTTON_JETPACK(s)            !!(input_buttons & 2048)
62
63         #define PHYS_DEAD(s)                                            s.csqcmodel_isdead
64
65         #define GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE  !!(moveflags & MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE)
66         #define GAMEPLAYFIX_NOGRAVITYONGROUND                   cvar("sv_gameplayfix_nogravityonground")
67         #define GAMEPLAYFIX_Q2AIRACCELERATE                             cvar("sv_gameplayfix_q2airaccelerate")
68
69         #define IS_DUCKED(s)                                            !!(s.pmove_flags & PMF_DUCKED)
70         #define SET_DUCKED(s)                                           s.pmove_flags |= PMF_DUCKED
71         #define UNSET_DUCKED(s)                                         s.pmove_flags &= ~PMF_DUCKED
72
73         #define IS_JUMP_HELD(s)                                         !!(s.pmove_flags & PMF_JUMP_HELD)
74         #define SET_JUMP_HELD(s)                                        s.pmove_flags |= PMF_JUMP_HELD
75         #define UNSET_JUMP_HELD(s)                                      s.pmove_flags &= ~PMF_JUMP_HELD
76
77         #define IS_ONGROUND(s)                                          !!(s.pmove_flags & PMF_ONGROUND)
78         #define SET_ONGROUND(s)                                         s.pmove_flags |= PMF_ONGROUND
79         #define UNSET_ONGROUND(s)                                       s.pmove_flags &= ~PMF_ONGROUND
80
81         #define WAS_ONGROUND(s)                                         !!(s.lastflags & PMF_ONGROUND)
82
83         #define ITEMS(s)                                                        getstati(STAT_ITEMS, 0, 24)
84
85         #define PHYS_AMMO_FUEL(s)                                       getstati(STAT_FUEL)
86
87         #define PHYS_FROZEN(s)                                          getstati(STAT_FROZEN)
88
89         #define PHYS_DOUBLEJUMP                                         getstati(STAT_DOUBLEJUMP)
90
91         #define PHYS_JUMPSPEEDCAP_MIN                           getstatf(STAT_MOVEVARS_JUMPSPEEDCAP_MIN)
92         #define PHYS_JUMPSPEEDCAP_MAX                           getstatf(STAT_MOVEVARS_JUMPSPEEDCAP_MAX)
93         #define PHYS_JUMPSPEEDCAP_DISABLE_ONRAMPS       getstati(STAT_MOVEVARS_JUMPSPEEDCAP_DISABLE_ONRAMPS)
94
95         #define PHYS_TRACK_CANJUMP(s)                           getstati(STAT_MOVEVARS_TRACK_CANJUMP)
96         #define PHYS_ACCELERATE                                         getstatf(STAT_MOVEVARS_ACCELERATE)
97         #define PHYS_AIRACCEL_QW(s)                                     getstatf(STAT_MOVEVARS_AIRACCEL_QW)
98         #define PHYS_AIRACCEL_QW_STRETCHFACTOR(s)       getstatf(STAT_MOVEVARS_AIRACCEL_QW_STRETCHFACTOR)
99         #define PHYS_AIRACCEL_SIDEWAYS_FRICTION         getstatf(STAT_MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION)
100         #define PHYS_AIRACCELERATE                                      getstatf(STAT_MOVEVARS_AIRACCELERATE)
101         #define PHYS_AIRCONTROL                                         getstatf(STAT_MOVEVARS_AIRCONTROL)
102         #define PHYS_AIRCONTROL_PENALTY                         getstatf(STAT_MOVEVARS_AIRCONTROL_PENALTY)
103         #define PHYS_AIRCONTROL_POWER                           getstatf(STAT_MOVEVARS_AIRCONTROL_POWER)
104         #define PHYS_AIRSPEEDLIMIT_NONQW(s)                     getstatf(STAT_MOVEVARS_AIRSPEEDLIMIT_NONQW)
105         #define PHYS_AIRSTOPACCELERATE                          getstatf(STAT_MOVEVARS_AIRSTOPACCELERATE)
106         #define PHYS_AIRSTRAFEACCEL_QW(s)                       getstatf(STAT_MOVEVARS_AIRSTRAFEACCEL_QW)
107         #define PHYS_AIRSTRAFEACCELERATE                        getstatf(STAT_MOVEVARS_AIRSTRAFEACCELERATE)
108         #define PHYS_ENTGRAVITY(s)                                      getstatf(STAT_MOVEVARS_ENTGRAVITY)
109         #define PHYS_FRICTION                                           getstatf(STAT_MOVEVARS_FRICTION)
110         #define PHYS_FRICTION_SLICK                                     getstatf(STAT_MOVEVARS_FRICTION_SLICK)
111         #define PHYS_FRICTION_ONLAND                            getstatf(STAT_MOVEVARS_FRICTION_ONLAND)
112         #define PHYS_GRAVITY                                            getstatf(STAT_MOVEVARS_GRAVITY)
113         #define PHYS_HIGHSPEED                                          getstatf(STAT_MOVEVARS_HIGHSPEED)
114         #define PHYS_JUMPVELOCITY                                       getstatf(STAT_MOVEVARS_JUMPVELOCITY)
115         #define PHYS_MAXAIRSPEED                                        getstatf(STAT_MOVEVARS_MAXAIRSPEED)
116         #define PHYS_MAXAIRSTRAFESPEED                          getstatf(STAT_MOVEVARS_MAXAIRSTRAFESPEED)
117         #define PHYS_MAXSPEED(s)                                        getstatf(STAT_MOVEVARS_MAXSPEED)
118         #define PHYS_STEPHEIGHT                                         getstatf(STAT_MOVEVARS_STEPHEIGHT)
119         #define PHYS_STOPSPEED                                          getstatf(STAT_MOVEVARS_STOPSPEED)
120         #define PHYS_WARSOWBUNNY_ACCEL                          getstatf(STAT_MOVEVARS_WARSOWBUNNY_ACCEL)
121         #define PHYS_WARSOWBUNNY_BACKTOSIDERATIO        getstatf(STAT_MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO)
122         #define PHYS_WARSOWBUNNY_AIRFORWARDACCEL        getstatf(STAT_MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL)
123         #define PHYS_WARSOWBUNNY_TOPSPEED                       getstatf(STAT_MOVEVARS_WARSOWBUNNY_TOPSPEED)
124         #define PHYS_WARSOWBUNNY_TURNACCEL                      getstatf(STAT_MOVEVARS_WARSOWBUNNY_TURNACCEL)
125
126         #define PHYS_JETPACK_ACCEL_UP                           getstatf(STAT_JETPACK_ACCEL_UP)
127         #define PHYS_JETPACK_ACCEL_SIDE                         getstatf(STAT_JETPACK_ACCEL_SIDE)
128         #define PHYS_JETPACK_ANTIGRAVITY                        getstatf(STAT_JETPACK_ANTIGRAVITY)
129         #define PHYS_JETPACK_FUEL                                       getstatf(STAT_JETPACK_FUEL)
130         #define PHYS_JETPACK_MAXSPEED_UP                        getstatf(STAT_JETPACK_MAXSPEED_UP)
131         #define PHYS_JETPACK_MAXSPEED_SIDE                      getstatf(STAT_JETPACK_MAXSPEED_SIDE)
132
133         #define PHYS_DODGING_FROZEN                                     getstati(STAT_DODGING_FROZEN)
134
135 #elif defined(SVQC)
136
137         .float stat_sv_airaccel_qw;
138         .float stat_sv_airstrafeaccel_qw;
139         .float stat_sv_airspeedlimit_nonqw;
140         .float stat_sv_maxspeed;
141         .float stat_movement_highspeed;
142
143         .float stat_sv_friction_on_land;
144         .float stat_sv_friction_slick;
145
146         .float stat_doublejump;
147
148         .float stat_jumpspeedcap_min;
149         .float stat_jumpspeedcap_max;
150         .float stat_jumpspeedcap_disable_onramps;
151
152         .float stat_jetpack_accel_side;
153         .float stat_jetpack_accel_up;
154         .float stat_jetpack_antigravity;
155         .float stat_jetpack_fuel;
156         .float stat_jetpack_maxspeed_up;
157         .float stat_jetpack_maxspeed_side;
158
159         #define PHYS_INPUT_ANGLES(s)                            s.v_angle
160         #define PHYS_WORLD_ANGLES(s)                            s.angles
161
162         #define PHYS_INPUT_TIMELENGTH                           frametime
163         #define PHYS_INPUT_FRAMETIME                            sys_frametime
164
165         #define PHYS_INPUT_MOVEVALUES(s)                        s.movement
166         // TODO: cache
167         #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))
168         #define PHYS_INPUT_BUTTON_ATCK(s)                       s.BUTTON_ATCK
169         #define PHYS_INPUT_BUTTON_JUMP(s)                       s.BUTTON_JUMP
170         #define PHYS_INPUT_BUTTON_ATCK2(s)                      s.BUTTON_ATCK2
171         #define PHYS_INPUT_BUTTON_ZOOM(s)                       s.BUTTON_ZOOM
172         #define PHYS_INPUT_BUTTON_CROUCH(s)                     s.BUTTON_CROUCH
173         #define PHYS_INPUT_BUTTON_HOOK(s)                       s.BUTTON_HOOK
174         #define PHYS_INPUT_BUTTON_USE(s)                        s.BUTTON_USE
175         #define PHYS_INPUT_BUTTON_BACKWARD(s)           (s.movement_x < 0)
176         #define PHYS_INPUT_BUTTON_FORWARD(s)            (s.movement_x > 0)
177         #define PHYS_INPUT_BUTTON_LEFT(s)                       (s.movement_y < 0)
178         #define PHYS_INPUT_BUTTON_RIGHT(s)                      (s.movement_y > 0)
179         #define PHYS_INPUT_BUTTON_JETPACK(s)            s.BUTTON_JETPACK
180
181         #define PHYS_DEAD(s)                                            s.deadflag != DEAD_NO
182
183         #define GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE  autocvar_sv_gameplayfix_gravityunaffectedbyticrate
184         #define GAMEPLAYFIX_NOGRAVITYONGROUND                   cvar("sv_gameplayfix_nogravityonground")
185         #define GAMEPLAYFIX_Q2AIRACCELERATE                             autocvar_sv_gameplayfix_q2airaccelerate
186
187         #define IS_DUCKED(s)                                            s.crouch
188         #define SET_DUCKED(s)                                           s.crouch = true
189         #define UNSET_DUCKED(s)                                         s.crouch = false
190
191         #define IS_JUMP_HELD(s)                                         !(s.flags & FL_JUMPRELEASED)
192         #define SET_JUMP_HELD(s)                                        s.flags &= ~FL_JUMPRELEASED
193         #define UNSET_JUMP_HELD(s)                                      s.flags |= FL_JUMPRELEASED
194
195         #define IS_ONGROUND(s)                                          !!(self.flags & FL_ONGROUND)
196         #define SET_ONGROUND(s)                                         s.flags |= FL_ONGROUND
197         #define UNSET_ONGROUND(s)                                       s.flags &= ~FL_ONGROUND
198
199         #define WAS_ONGROUND(s)                                         !!((s).lastflags & FL_ONGROUND)
200
201         #define ITEMS(s)                                                        s.items
202
203         #define PHYS_AMMO_FUEL(s)                                       s.ammo_fuel
204
205         #define PHYS_FROZEN(s)                                          s.frozen
206
207         #define PHYS_DOUBLEJUMP                                         autocvar_sv_doublejump
208
209         #define PHYS_JUMPSPEEDCAP_MIN                           autocvar_sv_jumpspeedcap_min
210         #define PHYS_JUMPSPEEDCAP_MAX                           autocvar_sv_jumpspeedcap_max
211         #define PHYS_JUMPSPEEDCAP_DISABLE_ONRAMPS       autocvar_sv_jumpspeedcap_max_disable_on_ramps
212
213         #define PHYS_TRACK_CANJUMP(s)                           s.cvar_cl_movement_track_canjump
214         #define PHYS_ACCELERATE                                         autocvar_sv_accelerate
215         #define PHYS_AIRACCEL_QW(s)                                     s.stat_sv_airaccel_qw
216         #define PHYS_AIRACCEL_QW_STRETCHFACTOR(s)       autocvar_sv_airaccel_qw_stretchfactor
217         #define PHYS_AIRACCEL_SIDEWAYS_FRICTION         autocvar_sv_airaccel_sideways_friction
218         #define PHYS_AIRACCELERATE                                      autocvar_sv_airaccelerate
219         #define PHYS_AIRCONTROL                                         autocvar_sv_aircontrol
220         #define PHYS_AIRCONTROL_PENALTY                         autocvar_sv_aircontrol_penalty
221         #define PHYS_AIRCONTROL_POWER                           autocvar_sv_aircontrol_power
222         #define PHYS_AIRSPEEDLIMIT_NONQW(s)                     s.stat_sv_airspeedlimit_nonqw
223         #define PHYS_AIRSTOPACCELERATE                          autocvar_sv_airstopaccelerate
224         #define PHYS_AIRSTRAFEACCEL_QW(s)                       s.stat_sv_airstrafeaccel_qw
225         #define PHYS_AIRSTRAFEACCELERATE                        autocvar_sv_airstrafeaccelerate
226         #define PHYS_ENTGRAVITY(s)                                      s.gravity
227         #define PHYS_FRICTION                                           autocvar_sv_friction
228         #define PHYS_FRICTION_SLICK                                     autocvar_sv_friction_slick
229         #define PHYS_FRICTION_ONLAND                            autocvar_sv_friction_on_land
230         #define PHYS_GRAVITY                                            autocvar_sv_gravity
231         #define PHYS_HIGHSPEED                                          autocvar_g_movement_highspeed
232         #define PHYS_JUMPVELOCITY                                       autocvar_sv_jumpvelocity
233         #define PHYS_MAXAIRSPEED                                        autocvar_sv_maxairspeed
234         #define PHYS_MAXAIRSTRAFESPEED                          autocvar_sv_maxairstrafespeed
235         #define PHYS_MAXSPEED(s)                                        s.stat_sv_maxspeed
236         #define PHYS_STEPHEIGHT                                         autocvar_sv_stepheight
237         #define PHYS_STOPSPEED                                          autocvar_sv_stopspeed
238         #define PHYS_WARSOWBUNNY_ACCEL                          autocvar_sv_warsowbunny_accel
239         #define PHYS_WARSOWBUNNY_BACKTOSIDERATIO        autocvar_sv_warsowbunny_backtosideratio
240         #define PHYS_WARSOWBUNNY_AIRFORWARDACCEL        autocvar_sv_warsowbunny_airforwardaccel
241         #define PHYS_WARSOWBUNNY_TOPSPEED                       autocvar_sv_warsowbunny_topspeed
242         #define PHYS_WARSOWBUNNY_TURNACCEL                      autocvar_sv_warsowbunny_turnaccel
243
244         #define PHYS_JETPACK_ACCEL_UP                           autocvar_g_jetpack_acceleration_up
245         #define PHYS_JETPACK_ACCEL_SIDE                         autocvar_g_jetpack_acceleration_side
246         #define PHYS_JETPACK_ANTIGRAVITY                        autocvar_g_jetpack_antigravity
247         #define PHYS_JETPACK_FUEL                                       autocvar_g_jetpack_fuel
248         #define PHYS_JETPACK_MAXSPEED_UP                        autocvar_g_jetpack_maxspeed_up
249         #define PHYS_JETPACK_MAXSPEED_SIDE                      autocvar_g_jetpack_maxspeed_side
250
251         #define PHYS_DODGING_FROZEN                                     autocvar_sv_dodging_frozen
252
253 #endif
254 #endif