]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/stats.qh
Finish off the last of the 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 = 121;
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 REGISTER_STAT(GAMEPLAYFIX_STEPDOWN, int)
136 REGISTER_STAT(MOVEVARS_JUMPSTEP, int)
137 REGISTER_STAT(NOSTEP, int)
138 REGISTER_STAT(GAMEPLAYFIX_UNSTICKPLAYERS, int)
139 REGISTER_STAT(GAMEPLAYFIX_STEPMULTIPLETIMES, int)
140 REGISTER_STAT(GAMEPLAYFIX_DOWNTRACEONGROUND, int)
141 REGISTER_STAT(GAMEPLAYFIX_EASIERWATERJUMP, int)
142 REGISTER_STAT(MOVEVARS_FRICTION_SLICK, float)
143 REGISTER_STAT(MOVEVARS_FRICTION_ONLAND, float)
144 REGISTER_STAT(MOVEVARS_JUMPSPEEDCAP_DISABLE_ONRAMPS, int)
145 REGISTER_STAT(MOVEVARS_TRACK_CANJUMP, int)
146 REGISTER_STAT(DOUBLEJUMP, int)
147 REGISTER_STAT(MOVEVARS_CL_TRACK_CANJUMP, int)
148 REGISTER_STAT(MULTIJUMP_ADD, int)
149 REGISTER_STAT(MULTIJUMP_SPEED, float)
150 REGISTER_STAT(MULTIJUMP, int)
151 REGISTER_STAT(DODGING_TIMEOUT, float)
152 REGISTER_STAT(DODGING_WALL, int)
153 REGISTER_STAT(DODGING_UP_SPEED, float)
154 REGISTER_STAT(DODGING_RAMP_TIME, float)
155 REGISTER_STAT(DODGING_HEIGHT_THRESHOLD, float)
156 REGISTER_STAT(DODGING_DISTANCE_THRESHOLD, float)
157 REGISTER_STAT(DODGING_HORIZ_SPEED, float)
158 REGISTER_STAT(DODGING_DELAY, float)
159 REGISTER_STAT(DODGING_FROZEN_NO_DOUBLETAP, int)
160 REGISTER_STAT(DODGING_HORIZ_SPEED_FROZEN, float)
161 REGISTER_STAT(DODGING, int)
162 REGISTER_STAT(DODGING_FROZEN, int)
163 REGISTER_STAT(JETPACK_MAXSPEED_UP, float)
164 REGISTER_STAT(JETPACK_MAXSPEED_SIDE, float)
165 REGISTER_STAT(JETPACK_FUEL, float)
166 REGISTER_STAT(JETPACK_ANTIGRAVITY, float)
167 REGISTER_STAT(JETPACK_ACCEL_SIDE, float)
168 REGISTER_STAT(JETPACK_ACCEL_UP, float)
169 REGISTER_STAT(MOVEVARS_HIGHSPEED, float)
170
171 enum {
172     STAT_FIRST_MAIN = (STAT_LAST_VECTOR - 1) + REGISTERED_STATS,
173
174     STAT_LAST_MAIN
175 };
176
177 const int STAT_LAST = STAT_LAST_MAIN + 5;
178
179 /* The following stats change depending on the gamemode, so can share the same ID */
180
181 // freeze tag, clan arena, jailbreak
182 enum {
183     STAT_REDALIVE = STAT_LAST_MAIN,
184     STAT_BLUEALIVE,
185     STAT_YELLOWALIVE,
186     STAT_PINKALIVE,
187 };
188
189 // domination
190 enum {
191     STAT_DOM_TOTAL_PPS = STAT_LAST_MAIN,
192     STAT_DOM_PPS_RED,
193     STAT_DOM_PPS_BLUE,
194     STAT_DOM_PPS_YELLOW,
195     STAT_DOM_PPS_PINK,
196 };
197
198 // vip
199 enum {
200     STAT_VIP = STAT_LAST_MAIN,
201     STAT_VIP_RED,
202     STAT_VIP_BLUE,
203     STAT_VIP_YELLOW,
204     STAT_VIP_PINK,
205 };
206
207 // key hunt
208 enum {
209     STAT_KH_REDKEY_TEAM = STAT_LAST_MAIN,
210     STAT_KH_BLUEKEY_TEAM,
211     STAT_KH_YELLOWKEY_TEAM,
212     STAT_KH_PINKKEY_TEAM,
213 };
214
215 #define ASSERT_LESS(name, var, const) noref int name[(const - var + 1)];
216 ASSERT_LESS(stat_limit, STAT_LAST, 220)
217
218 #ifdef SVQC
219 void GlobalStats_update(entity e) {}
220 #define STAT_GLOBAL(T, x, expr) REGISTER_STAT(x, T); [[accumulate]] void GlobalStats_update(entity e) { STAT(x, e) = (expr); }
221 #include "movetypes/movetypes.qh"
222 #else
223 #define STAT_GLOBAL(T, x, expr) REGISTER_STAT(x, T)
224 #endif
225
226 REGISTER_STAT(MOVEVARS_AIRACCEL_QW_STRETCHFACTOR, float)
227 REGISTER_STAT(MOVEVARS_AIRCONTROL_PENALTY, float)
228 REGISTER_STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW, float)
229 REGISTER_STAT(MOVEVARS_AIRSTRAFEACCEL_QW, float)
230 REGISTER_STAT(MOVEVARS_AIRCONTROL_POWER, float)
231 noref bool autocvar_sv_gameplayfix_nogravityonground;
232 STAT_GLOBAL(int, MOVEFLAGS, MOVEFLAG_VALID
233                             | (autocvar_sv_gameplayfix_q2airaccelerate ? MOVEFLAG_Q2AIRACCELERATE : 0)
234                             | (autocvar_sv_gameplayfix_nogravityonground ? MOVEFLAG_NOGRAVITYONGROUND : 0)
235                             | (autocvar_sv_gameplayfix_gravityunaffectedbyticrate ? MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE : 0))
236 const int STAT_MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL   = 226;
237 const int STAT_MOVEVARS_WARSOWBUNNY_ACCEL             = 227;
238 const int STAT_MOVEVARS_WARSOWBUNNY_TOPSPEED          = 228;
239 const int STAT_MOVEVARS_WARSOWBUNNY_TURNACCEL         = 229;
240 const int STAT_MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO   = 230;
241 const int STAT_MOVEVARS_AIRSTOPACCELERATE             = 231;
242 const int STAT_MOVEVARS_AIRSTRAFEACCELERATE           = 232;
243 const int STAT_MOVEVARS_MAXAIRSTRAFESPEED             = 233;
244 const int STAT_MOVEVARS_AIRCONTROL                    = 234;
245 STAT_GLOBAL(float, FRAGLIMIT, autocvar_fraglimit)
246 STAT_GLOBAL(float, TIMELIMIT, autocvar_timelimit)
247 noref float autocvar_sv_wallfriction;
248 STAT_GLOBAL(int, MOVEVARS_WALLFRICTION, autocvar_sv_wallfriction)
249 const int STAT_MOVEVARS_FRICTION                      = 238;
250 STAT_GLOBAL(float, MOVEVARS_TICRATE, autocvar_sys_ticrate)
251 STAT_GLOBAL(float, MOVEVARS_TIMESCALE, autocvar_slowmo)
252 STAT_GLOBAL(float, MOVEVARS_GRAVITY, autocvar_sv_gravity)
253 const int STAT_MOVEVARS_STOPSPEED                     = 243;
254 const int STAT_MOVEVARS_MAXSPEED                      = 244;
255 const int STAT_MOVEVARS_ACCELERATE                    = 246;
256 const int STAT_MOVEVARS_AIRACCELERATE                 = 247;
257 .float gravity;
258 STAT_GLOBAL(float, MOVEVARS_ENTGRAVITY, (e.gravity) ? e.gravity : 1)
259 const int STAT_MOVEVARS_JUMPVELOCITY                  = 250;
260 const int STAT_MOVEVARS_MAXAIRSPEED                   = 252;
261 STAT_GLOBAL(float, MOVEVARS_STEPHEIGHT, autocvar_sv_stepheight)
262 const int STAT_MOVEVARS_AIRACCEL_QW                   = 254;
263 const int STAT_MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION    = 255;
264 #endif