]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/stats.qh
Do another bunch of stats
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / stats.qh
1 #ifndef STATS_H
2 #define STATS_H
3
4 // Full list of all stat constants, included in a single location for easy reference
5 // 255 is the current limit (MAX_CL_STATS - 1), engine will need to be modified if you wish to add more stats
6
7 const int MAX_CL_STATS = 256;
8 #ifndef CSQC
9 const int STAT_HEALTH = 0; // .health
10 const int STAT_ARMOR = 4; // .armorvalue
11 const int STAT_SHELLS = 6; // .ammo_shells
12 const int STAT_NAILS = 7; // .ammo_nails
13 const int STAT_ROCKETS = 8; // .ammo_rockets
14 const int STAT_CELLS = 9; // .ammo_cells
15 const int STAT_ACTIVEWEAPON = 10; // .weapon
16 const int STAT_ITEMS = 15; // .items | .items2 << 23 | serverflags << 28
17 const int STAT_VIEWHEIGHT = 16; // .view_ofs_z
18 #endif
19
20 enum {
21     STAT_WEAPONS = 32,
22     STAT_WEAPONS2,
23     STAT_WEAPONS3,
24
25     STAT_WEAPONSINMAP,
26     STAT_WEAPONSINMAP2,
27     STAT_WEAPONSINMAP3,
28
29     STAT_PL_VIEW_OFS1,
30     STAT_PL_VIEW_OFS2,
31     STAT_PL_VIEW_OFS3,
32
33     STAT_PL_CROUCH_VIEW_OFS1,
34     STAT_PL_CROUCH_VIEW_OFS2,
35     STAT_PL_CROUCH_VIEW_OFS3,
36
37     STAT_PL_MIN1,
38     STAT_PL_MIN2,
39     STAT_PL_MIN3,
40
41     STAT_PL_MAX1,
42     STAT_PL_MAX2,
43     STAT_PL_MAX3,
44
45     STAT_PL_CROUCH_MIN1,
46     STAT_PL_CROUCH_MIN2,
47     STAT_PL_CROUCH_MIN3,
48
49     STAT_PL_CROUCH_MAX1,
50     STAT_PL_CROUCH_MAX2,
51     STAT_PL_CROUCH_MAX3,
52
53     STAT_LAST_VECTOR
54 };
55
56 const int REGISTERED_STATS = 86;
57
58 REGISTER_STAT(KH_KEYS, int)
59 /** weapon requested to switch to; next WANTED weapon (for HUD) */
60 REGISTER_STAT(SWITCHWEAPON, int)
61 REGISTER_STAT(GAMESTARTTIME, float)
62 REGISTER_STAT(STRENGTH_FINISHED, float)
63 REGISTER_STAT(INVINCIBLE_FINISHED, float)
64 /** arc heat in [0,1] */
65 REGISTER_STAT(ARC_HEAT, float)
66 REGISTER_STAT(PRESSED_KEYS, int)
67 /** this stat could later contain some other bits of info, like, more server-side particle config */
68 REGISTER_STAT(ALLOW_OLDVORTEXBEAM, bool)
69 REGISTER_STAT(FUEL, int)
70 REGISTER_STAT(NB_METERSTART, float)
71 /** compressShotOrigin */
72 REGISTER_STAT(SHOTORG, int)
73 REGISTER_STAT(LEADLIMIT, float)
74 REGISTER_STAT(WEAPON_CLIPLOAD, int)
75 REGISTER_STAT(WEAPON_CLIPSIZE, int)
76
77 REGISTER_STAT(VORTEX_CHARGE, float)
78 REGISTER_STAT(LAST_PICKUP, float)
79 REGISTER_STAT(HUD, int)
80 REGISTER_STAT(VORTEX_CHARGEPOOL, float)
81 REGISTER_STAT(HIT_TIME, float)
82 REGISTER_STAT(DAMAGE_DEALT_TOTAL, int)
83 REGISTER_STAT(TYPEHIT_TIME, float)
84 REGISTER_STAT(LAYED_MINES, int)
85 REGISTER_STAT(HAGAR_LOAD, int)
86 REGISTER_STAT(SWITCHINGWEAPON, int)
87 REGISTER_STAT(SUPERWEAPONS_FINISHED, float)
88 REGISTER_STAT(VEHICLESTAT_HEALTH, int)
89 REGISTER_STAT(VEHICLESTAT_SHIELD, int)
90 REGISTER_STAT(VEHICLESTAT_ENERGY, int)
91 REGISTER_STAT(VEHICLESTAT_AMMO1, int)
92 REGISTER_STAT(VEHICLESTAT_RELOAD1, int)
93 REGISTER_STAT(VEHICLESTAT_AMMO2, int)
94 REGISTER_STAT(VEHICLESTAT_RELOAD2, int)
95 REGISTER_STAT(VEHICLESTAT_W2MODE, int)
96 REGISTER_STAT(NADE_TIMER, float)
97 REGISTER_STAT(SECRETS_TOTAL, float)
98 REGISTER_STAT(SECRETS_FOUND, float)
99 REGISTER_STAT(RESPAWN_TIME, float)
100 REGISTER_STAT(ROUNDSTARTTIME, float)
101 REGISTER_STAT(MONSTERS_TOTAL, int)
102 REGISTER_STAT(MONSTERS_KILLED, int)
103 REGISTER_STAT(BUFFS, int)
104 REGISTER_STAT(NADE_BONUS, float)
105 REGISTER_STAT(NADE_BONUS_TYPE, int)
106 REGISTER_STAT(NADE_BONUS_SCORE, float)
107 REGISTER_STAT(HEALING_ORB, float)
108 REGISTER_STAT(HEALING_ORB_ALPHA, float)
109 REGISTER_STAT(PLASMA, int)
110 REGISTER_STAT(OK_AMMO_CHARGE, float)
111 REGISTER_STAT(OK_AMMO_CHARGEPOOL, float)
112 REGISTER_STAT(FROZEN, int)
113 REGISTER_STAT(REVIVE_PROGRESS, float)
114 REGISTER_STAT(ROUNDLOST, int)
115 REGISTER_STAT(BUFF_TIME, float)
116 REGISTER_STAT(CTF_FLAGSTATUS, int)
117 REGISTER_STAT(MULTIJUMP_DODGING, int)
118 REGISTER_STAT(MULTIJUMP_MAXSPEED, float)
119 REGISTER_STAT(GAMEPLAYFIX_UPVELOCITYCLEARSONGROUND, int)
120 REGISTER_STAT(BUGRIGS_REVERSE_STOPPING, int)
121 REGISTER_STAT(BUGRIGS_REVERSE_SPINNING, int)
122 REGISTER_STAT(BUGRIGS_CAR_JUMPING, int)
123 REGISTER_STAT(BUGRIGS_FRICTION_AIR, float)
124 REGISTER_STAT(BUGRIGS_STEER, float)
125 REGISTER_STAT(BUGRIGS_SPEED_POW, float)
126 REGISTER_STAT(BUGRIGS_SPEED_REF, float)
127 REGISTER_STAT(BUGRIGS_ACCEL, float)
128 REGISTER_STAT(BUGRIGS_FRICTION_BRAKE, float)
129 REGISTER_STAT(BUGRIGS_AIR_STEERING, int)
130 REGISTER_STAT(BUGRIGS_FRICTION_FLOOR, float)
131 REGISTER_STAT(BUGRIGS_REVERSE_SPEEDING, int)
132 REGISTER_STAT(BUGRIGS_PLANAR_MOVEMENT, int)
133 REGISTER_STAT(BUGRIGS_ANGLE_SMOOTHING, int)
134 REGISTER_STAT(BUGRIGS, int)
135
136 enum {
137     STAT_FIRST_MAIN = (STAT_LAST_VECTOR - 1) + REGISTERED_STATS,
138
139     STAT_GAMEPLAYFIX_STEPDOWN,
140     STAT_MOVEVARS_JUMPSTEP,
141     STAT_NOSTEP,
142     STAT_GAMEPLAYFIX_UNSTICKPLAYERS,
143     STAT_GAMEPLAYFIX_STEPMULTIPLETIMES,
144     STAT_GAMEPLAYFIX_DOWNTRACEONGROUND,
145     STAT_GAMEPLAYFIX_EASIERWATERJUMP,
146     STAT_MOVEVARS_FRICTION_SLICK,
147     STAT_MOVEVARS_FRICTION_ONLAND,
148     STAT_MOVEVARS_JUMPSPEEDCAP_DISABLE_ONRAMPS,
149     STAT_MOVEVARS_TRACK_CANJUMP,
150     STAT_DOUBLEJUMP,
151     STAT_MOVEVARS_CL_TRACK_CANJUMP,
152     STAT_MULTIJUMP_ADD,
153     STAT_MULTIJUMP_SPEED,
154     STAT_MULTIJUMP,
155     STAT_DODGING_TIMEOUT,
156     STAT_DODGING_WALL,
157     STAT_DODGING_UP_SPEED,
158     STAT_DODGING_RAMP_TIME,
159     STAT_DODGING_HEIGHT_THRESHOLD,
160     STAT_DODGING_DISTANCE_THRESHOLD,
161     STAT_DODGING_HORIZ_SPEED,
162     STAT_DODGING_DELAY,
163     STAT_DODGING_FROZEN_NO_DOUBLETAP,
164     STAT_DODGING_HORIZ_SPEED_FROZEN,
165     STAT_DODGING,
166     STAT_DODGING_FROZEN,
167     STAT_JETPACK_MAXSPEED_UP,
168     STAT_JETPACK_MAXSPEED_SIDE,
169     STAT_JETPACK_FUEL,
170     STAT_JETPACK_ANTIGRAVITY,
171     STAT_JETPACK_ACCEL_SIDE,
172     STAT_JETPACK_ACCEL_UP,
173     STAT_MOVEVARS_HIGHSPEED,
174
175     STAT_LAST_MAIN
176 };
177
178 const int STAT_LAST = STAT_LAST_MAIN + 5;
179
180 /* The following stats change depending on the gamemode, so can share the same ID */
181
182 // freeze tag, clan arena, jailbreak
183 enum {
184     STAT_REDALIVE = STAT_LAST_MAIN,
185     STAT_BLUEALIVE,
186     STAT_YELLOWALIVE,
187     STAT_PINKALIVE,
188 };
189
190 // domination
191 enum {
192     STAT_DOM_TOTAL_PPS = STAT_LAST_MAIN,
193     STAT_DOM_PPS_RED,
194     STAT_DOM_PPS_BLUE,
195     STAT_DOM_PPS_YELLOW,
196     STAT_DOM_PPS_PINK,
197 };
198
199 // vip
200 enum {
201     STAT_VIP = STAT_LAST_MAIN,
202     STAT_VIP_RED,
203     STAT_VIP_BLUE,
204     STAT_VIP_YELLOW,
205     STAT_VIP_PINK,
206 };
207
208 // key hunt
209 enum {
210     STAT_KH_REDKEY_TEAM = STAT_LAST_MAIN,
211     STAT_KH_BLUEKEY_TEAM,
212     STAT_KH_YELLOWKEY_TEAM,
213     STAT_KH_PINKKEY_TEAM,
214 };
215
216 #define ASSERT_LESS(name, var, const) noref int name[(const - var + 1)];
217 ASSERT_LESS(stat_limit, STAT_LAST, 220)
218
219 #ifdef SVQC
220 void GlobalStats_update(entity e) {}
221 #define STAT_GLOBAL(T, x, expr) REGISTER_STAT(x, T); [[accumulate]] void GlobalStats_update(entity e) { STAT(x, e) = (expr); }
222 #include "movetypes/movetypes.qh"
223 #else
224 #define STAT_GLOBAL(T, x, expr) REGISTER_STAT(x, T)
225 #endif
226
227 REGISTER_STAT(MOVEVARS_AIRACCEL_QW_STRETCHFACTOR, float)
228 REGISTER_STAT(MOVEVARS_AIRCONTROL_PENALTY, float)
229 REGISTER_STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW, float)
230 REGISTER_STAT(MOVEVARS_AIRSTRAFEACCEL_QW, float)
231 REGISTER_STAT(MOVEVARS_AIRCONTROL_POWER, float)
232 noref bool autocvar_sv_gameplayfix_nogravityonground;
233 STAT_GLOBAL(int, MOVEFLAGS, MOVEFLAG_VALID
234                             | (autocvar_sv_gameplayfix_q2airaccelerate ? MOVEFLAG_Q2AIRACCELERATE : 0)
235                             | (autocvar_sv_gameplayfix_nogravityonground ? MOVEFLAG_NOGRAVITYONGROUND : 0)
236                             | (autocvar_sv_gameplayfix_gravityunaffectedbyticrate ? MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE : 0))
237 const int STAT_MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL   = 226;
238 const int STAT_MOVEVARS_WARSOWBUNNY_ACCEL             = 227;
239 const int STAT_MOVEVARS_WARSOWBUNNY_TOPSPEED          = 228;
240 const int STAT_MOVEVARS_WARSOWBUNNY_TURNACCEL         = 229;
241 const int STAT_MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO   = 230;
242 const int STAT_MOVEVARS_AIRSTOPACCELERATE             = 231;
243 const int STAT_MOVEVARS_AIRSTRAFEACCELERATE           = 232;
244 const int STAT_MOVEVARS_MAXAIRSTRAFESPEED             = 233;
245 const int STAT_MOVEVARS_AIRCONTROL                    = 234;
246 STAT_GLOBAL(float, FRAGLIMIT, autocvar_fraglimit)
247 STAT_GLOBAL(float, TIMELIMIT, autocvar_timelimit)
248 noref float autocvar_sv_wallfriction;
249 STAT_GLOBAL(int, MOVEVARS_WALLFRICTION, autocvar_sv_wallfriction)
250 const int STAT_MOVEVARS_FRICTION                      = 238;
251 STAT_GLOBAL(float, MOVEVARS_TICRATE, autocvar_sys_ticrate)
252 STAT_GLOBAL(float, MOVEVARS_TIMESCALE, autocvar_slowmo)
253 STAT_GLOBAL(float, MOVEVARS_GRAVITY, autocvar_sv_gravity)
254 const int STAT_MOVEVARS_STOPSPEED                     = 243;
255 const int STAT_MOVEVARS_MAXSPEED                      = 244;
256 const int STAT_MOVEVARS_ACCELERATE                    = 246;
257 const int STAT_MOVEVARS_AIRACCELERATE                 = 247;
258 .float gravity;
259 STAT_GLOBAL(float, MOVEVARS_ENTGRAVITY, (e.gravity) ? e.gravity : 1)
260 const int STAT_MOVEVARS_JUMPVELOCITY                  = 250;
261 const int STAT_MOVEVARS_MAXAIRSPEED                   = 252;
262 STAT_GLOBAL(float, MOVEVARS_STEPHEIGHT, autocvar_sv_stepheight)
263 const int STAT_MOVEVARS_AIRACCEL_QW                   = 254;
264 const int STAT_MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION    = 255;
265 #endif