1#pragma once 2 3#ifdef SVQC 4#include <server/client.qh> 5#endif 6 7// Full list of all stat constants, included in a single location for easy reference 8// 255 is the current limit (MAX_CL_STATS - 1), engine will need to be modified if you wish to add more stats 9 10const int MAX_CL_STATS = 256; 11 12// const int STAT_HEALTH = 0; 13// const int STAT_ARMOR = 4; 14// const int STAT_SHELLS = 6; 15// const int STAT_NAILS = 7; 16// const int STAT_ROCKETS = 8; 17// const int STAT_CELLS = 9; 18// const int STAT_ACTIVEWEAPON = 10; 19// const int STAT_ITEMS = 15; // .items | .items2 << 23 | serverflags << 28 20// const int STAT_VIEWHEIGHT = 16; 21 22#if defined(CSQC) 23 #define g_stat_HEALTH getstati(STAT_HEALTH) 24 #define g_stat_ARMOR getstat_int(STAT_ARMOR) 25 #define g_stat_SHELLS getstat_int(STAT_SHELLS) 26 #define g_stat_NAILS getstat_int(STAT_NAILS) 27 #define g_stat_ROCKETS getstat_int(STAT_ROCKETS) 28 #define g_stat_CELLS getstat_int(STAT_CELLS) 29 #define g_stat_ACTIVEWEAPON getstat_int(STAT_ACTIVEWEAPON) 30 #define g_stat_ITEMS getstat_int(STAT_ITEMS) 31 #define g_stat_VIEWHEIGHT getstati(STAT_VIEWHEIGHT) 32#elif defined(SVQC) 33 #define stat_HEALTH health 34 #define stat_ARMOR armorvalue 35 #define stat_SHELLS ammo_shells 36 #define stat_NAILS ammo_nails 37 #define stat_ROCKETS ammo_rockets 38 #define stat_CELLS ammo_cells 39 #define stat_ACTIVEWEAPON weapon 40 #define stat_ITEMS items 41 #define stat_VIEWHEIGHT view_ofs_z 42#endif 43 44REGISTER_STAT(WEAPONS, vectori) 45REGISTER_STAT(WEAPONSINMAP, vectori) 46 47REGISTER_STAT(PL_VIEW_OFS, vector) 48REGISTER_STAT(PL_CROUCH_VIEW_OFS, vector) 49 50REGISTER_STAT(PL_MIN, vector) 51REGISTER_STAT(PL_CROUCH_MIN, vector) 52 53REGISTER_STAT(PL_MAX, vector) 54REGISTER_STAT(PL_CROUCH_MAX, vector) 55 56REGISTER_STAT(KH_KEYS, int) 57 58#ifdef SVQC 59float W_WeaponRateFactor(entity this); 60float game_stopped; 61#endif 62REGISTER_STAT(WEAPONRATEFACTOR, float, W_WeaponRateFactor(this)) 63REGISTER_STAT(GAME_STOPPED, int, game_stopped) 64REGISTER_STAT(GAMESTARTTIME, float) 65REGISTER_STAT(STRENGTH_FINISHED, float) 66REGISTER_STAT(INVINCIBLE_FINISHED, float) 67/** arc heat in [0,1] */ 68REGISTER_STAT(ARC_HEAT, float) 69REGISTER_STAT(PRESSED_KEYS, int) 70/** this stat could later contain some other bits of info, like, more server-side particle config */ 71REGISTER_STAT(ALLOW_OLDVORTEXBEAM, bool) 72REGISTER_STAT(FUEL, int) 73REGISTER_STAT(NB_METERSTART, float) 74/** compressShotOrigin */ 75REGISTER_STAT(SHOTORG, int) 76REGISTER_STAT(LEADLIMIT, float) 77REGISTER_STAT(WEAPON_CLIPLOAD, int) 78REGISTER_STAT(WEAPON_CLIPSIZE, int) 79 80REGISTER_STAT(VORTEX_CHARGE, float) 81REGISTER_STAT(LAST_PICKUP, float) 82REGISTER_STAT(HUD, int) 83REGISTER_STAT(VORTEX_CHARGEPOOL, float) 84REGISTER_STAT(HIT_TIME, float) 85REGISTER_STAT(DAMAGE_DEALT_TOTAL, int) 86REGISTER_STAT(TYPEHIT_TIME, float) 87REGISTER_STAT(LAYED_MINES, int) 88REGISTER_STAT(HAGAR_LOAD, int) 89REGISTER_STAT(SUPERWEAPONS_FINISHED, float) 90REGISTER_STAT(VEHICLESTAT_HEALTH, int) 91REGISTER_STAT(VEHICLESTAT_SHIELD, int) 92REGISTER_STAT(VEHICLESTAT_ENERGY, int) 93REGISTER_STAT(VEHICLESTAT_AMMO1, int) 94REGISTER_STAT(VEHICLESTAT_RELOAD1, int) 95REGISTER_STAT(VEHICLESTAT_AMMO2, int) 96REGISTER_STAT(VEHICLESTAT_RELOAD2, int) 97REGISTER_STAT(VEHICLESTAT_W2MODE, int) 98REGISTER_STAT(NADE_TIMER, float) 99REGISTER_STAT(SECRETS_TOTAL, float) 100REGISTER_STAT(SECRETS_FOUND, float) 101REGISTER_STAT(RESPAWN_TIME, float) 102REGISTER_STAT(ROUNDSTARTTIME, float) 103REGISTER_STAT(MONSTERS_TOTAL, int) 104REGISTER_STAT(MONSTERS_KILLED, int) 105REGISTER_STAT(BUFFS, int) 106REGISTER_STAT(NADE_BONUS, float) 107REGISTER_STAT(NADE_BONUS_TYPE, int) 108REGISTER_STAT(NADE_BONUS_SCORE, float) 109REGISTER_STAT(HEALING_ORB, float) 110REGISTER_STAT(HEALING_ORB_ALPHA, float) 111REGISTER_STAT(PLASMA, int) 112REGISTER_STAT(FROZEN, int) 113REGISTER_STAT(REVIVE_PROGRESS, float) 114REGISTER_STAT(ROUNDLOST, int) 115REGISTER_STAT(BUFF_TIME, float) 116REGISTER_STAT(CTF_FLAGSTATUS, int) 117REGISTER_STAT(CAPTURE_PROGRESS, float) 118REGISTER_STAT(ENTRAP_ORB, float) 119REGISTER_STAT(ENTRAP_ORB_ALPHA, float) 120REGISTER_STAT(ITEMSTIME, int, autocvar_sv_itemstime) 121REGISTER_STAT(KILL_TIME, float) 122 123#ifdef SVQC 124bool autocvar_g_ctf_leaderboard; 125#endif 126REGISTER_STAT(CTF_SHOWLEADERBOARD, bool, autocvar_g_ctf_leaderboard) 127 128#ifdef SVQC 129int autocvar_g_multijump; 130float autocvar_g_multijump_add; 131float autocvar_g_multijump_speed; 132float autocvar_g_multijump_maxspeed; 133float autocvar_g_multijump_dodging = 1; 134#endif 135REGISTER_STAT(MULTIJUMP_DODGING, int, autocvar_g_multijump_dodging) 136REGISTER_STAT(MULTIJUMP_MAXSPEED, float, autocvar_g_multijump_maxspeed) 137REGISTER_STAT(MULTIJUMP_ADD, int, autocvar_g_multijump_add) 138REGISTER_STAT(MULTIJUMP_SPEED, float, autocvar_g_multijump_speed) 139.int multijump_count; 140REGISTER_STAT(MULTIJUMP_COUNT, int, this.multijump_count) 141REGISTER_STAT(MULTIJUMP, int, autocvar_g_multijump) 142REGISTER_STAT(DOUBLEJUMP, int, autocvar_sv_doublejump) 143 144#ifdef SVQC 145bool g_bugrigs; 146bool g_bugrigs_planar_movement; 147bool g_bugrigs_planar_movement_car_jumping; 148float g_bugrigs_reverse_spinning; 149float g_bugrigs_reverse_speeding; 150float g_bugrigs_reverse_stopping; 151float g_bugrigs_air_steering; 152float g_bugrigs_angle_smoothing; 153float g_bugrigs_friction_floor; 154float g_bugrigs_friction_brake; 155float g_bugrigs_friction_air; 156float g_bugrigs_accel; 157float g_bugrigs_speed_ref; 158float g_bugrigs_speed_pow; 159float g_bugrigs_steer; 160#endif 161REGISTER_STAT(BUGRIGS, int, g_bugrigs) 162REGISTER_STAT(BUGRIGS_ACCEL, float, g_bugrigs_accel) 163REGISTER_STAT(BUGRIGS_AIR_STEERING, int, g_bugrigs_air_steering) 164REGISTER_STAT(BUGRIGS_ANGLE_SMOOTHING, int, g_bugrigs_angle_smoothing) 165REGISTER_STAT(BUGRIGS_CAR_JUMPING, int, g_bugrigs_planar_movement_car_jumping) 166REGISTER_STAT(BUGRIGS_FRICTION_AIR, float, g_bugrigs_friction_air) 167REGISTER_STAT(BUGRIGS_FRICTION_BRAKE, float, g_bugrigs_friction_brake) 168REGISTER_STAT(BUGRIGS_FRICTION_FLOOR, float, g_bugrigs_friction_floor) 169REGISTER_STAT(BUGRIGS_PLANAR_MOVEMENT, int, g_bugrigs_planar_movement) 170REGISTER_STAT(BUGRIGS_REVERSE_SPEEDING, int, g_bugrigs_reverse_speeding) 171REGISTER_STAT(BUGRIGS_REVERSE_SPINNING, int, g_bugrigs_reverse_spinning) 172REGISTER_STAT(BUGRIGS_REVERSE_STOPPING, int, g_bugrigs_reverse_stopping) 173REGISTER_STAT(BUGRIGS_SPEED_POW, float, g_bugrigs_speed_pow) 174REGISTER_STAT(BUGRIGS_SPEED_REF, float, g_bugrigs_speed_ref) 175REGISTER_STAT(BUGRIGS_STEER, float, g_bugrigs_steer) 176 177#ifdef SVQC 178int autocvar_sv_gameplayfix_downtracesupportsongroundflag; 179int autocvar_sv_gameplayfix_easierwaterjump; 180int autocvar_sv_gameplayfix_stepdown; 181int autocvar_sv_gameplayfix_stepmultipletimes; 182int autocvar_sv_gameplayfix_unstickplayers; 183int autocvar_sv_gameplayfix_fixedcheckwatertransition; 184#endif 185REGISTER_STAT(GAMEPLAYFIX_DOWNTRACEONGROUND, int, autocvar_sv_gameplayfix_downtracesupportsongroundflag) 186REGISTER_STAT(GAMEPLAYFIX_EASIERWATERJUMP, int, autocvar_sv_gameplayfix_easierwaterjump) 187REGISTER_STAT(GAMEPLAYFIX_STEPDOWN, int, autocvar_sv_gameplayfix_stepdown) 188REGISTER_STAT(GAMEPLAYFIX_STEPMULTIPLETIMES, int, autocvar_sv_gameplayfix_stepmultipletimes) 189REGISTER_STAT(GAMEPLAYFIX_UNSTICKPLAYERS, int, autocvar_sv_gameplayfix_unstickplayers) 190REGISTER_STAT(GAMEPLAYFIX_UPVELOCITYCLEARSONGROUND, int, autocvar_sv_gameplayfix_upwardvelocityclearsongroundflag) 191REGISTER_STAT(GAMEPLAYFIX_WATERTRANSITION, int, autocvar_sv_gameplayfix_fixedcheckwatertransition) 192 193REGISTER_STAT(MOVEVARS_JUMPSTEP, int, cvar("sv_jumpstep")) 194REGISTER_STAT(NOSTEP, int, cvar("sv_nostep")) 195 196REGISTER_STAT(MOVEVARS_FRICTION, float) 197REGISTER_STAT(MOVEVARS_FRICTION_SLICK, float, autocvar_sv_friction_slick) 198REGISTER_STAT(MOVEVARS_FRICTION_ONLAND, float, autocvar_sv_friction_on_land) 199 200REGISTER_STAT(MOVEVARS_JUMPSPEEDCAP_DISABLE_ONRAMPS, int, autocvar_sv_jumpspeedcap_max_disable_on_ramps) 201REGISTER_STAT(MOVEVARS_TRACK_CANJUMP, int) 202/** cvar loopback */ 203REGISTER_STAT(MOVEVARS_CL_TRACK_CANJUMP, int) 204 205#ifdef SVQC 206int g_dodging; 207float autocvar_sv_dodging_delay; 208float autocvar_sv_dodging_wall_distance_threshold; 209bool autocvar_sv_dodging_frozen; 210bool autocvar_sv_dodging_frozen_doubletap; 211float autocvar_sv_dodging_height_threshold; 212float autocvar_sv_dodging_horiz_speed; 213float autocvar_sv_dodging_horiz_speed_frozen; 214float autocvar_sv_dodging_ramp_time; 215float autocvar_sv_dodging_up_speed; 216bool autocvar_sv_dodging_wall_dodging; 217bool autocvar_sv_dodging_air_dodging; 218float autocvar_sv_dodging_maxspeed = 450; 219#endif 220 221#if 0 222REGISTER_STAT(DODGING, int, g_dodging) 223REGISTER_STAT(DODGING_DELAY, float, autocvar_sv_dodging_delay) 224REGISTER_STAT(DODGING_DISTANCE_THRESHOLD, float, autocvar_sv_dodging_wall_distance_threshold) 225REGISTER_STAT(DODGING_FROZEN_NO_DOUBLETAP, int, autocvar_sv_dodging_frozen_doubletap) 226REGISTER_STAT(DODGING_HEIGHT_THRESHOLD, float, autocvar_sv_dodging_height_threshold) 227REGISTER_STAT(DODGING_HORIZ_SPEED, float, autocvar_sv_dodging_horiz_speed) 228REGISTER_STAT(DODGING_HORIZ_SPEED_FROZEN, float, autocvar_sv_dodging_horiz_speed_frozen) 229REGISTER_STAT(DODGING_RAMP_TIME, float, autocvar_sv_dodging_ramp_time) 230REGISTER_STAT(DODGING_UP_SPEED, float, autocvar_sv_dodging_up_speed) 231REGISTER_STAT(DODGING_WALL, bool, autocvar_sv_dodging_wall_dodging) 232REGISTER_STAT(DODGING_AIR, bool, autocvar_sv_dodging_air_dodging) 233REGISTER_STAT(DODGING_MAXSPEED, float, autocvar_sv_dodging_maxspeed) 234#endif 235/** cvar loopback */ 236REGISTER_STAT(DODGING_FROZEN, int, autocvar_sv_dodging_frozen) 237REGISTER_STAT(DODGING_TIMEOUT, float) 238 239REGISTER_STAT(JETPACK_ACCEL_SIDE, float, autocvar_g_jetpack_acceleration_side) 240REGISTER_STAT(JETPACK_ACCEL_UP, float, autocvar_g_jetpack_acceleration_up) 241REGISTER_STAT(JETPACK_ANTIGRAVITY, float, autocvar_g_jetpack_antigravity) 242REGISTER_STAT(JETPACK_FUEL, float, autocvar_g_jetpack_fuel) 243REGISTER_STAT(JETPACK_MAXSPEED_SIDE, float, autocvar_g_jetpack_maxspeed_side) 244REGISTER_STAT(JETPACK_MAXSPEED_UP, float, autocvar_g_jetpack_maxspeed_up) 245REGISTER_STAT(JETPACK_REVERSE_THRUST, float, autocvar_g_jetpack_reverse_thrust) 246 247REGISTER_STAT(MOVEVARS_HIGHSPEED, float) 248 249#ifdef SVQC 250AUTOCVAR(g_walljump, bool, false, "Enable wall jumping mutator"); 251AUTOCVAR(g_walljump_delay, float, 1, "Minimum delay between wall jumps"); 252AUTOCVAR(g_walljump_force, float, 300, "How far to bounce/jump off the wall"); 253AUTOCVAR(g_walljump_velocity_xy_factor, float, 1.15, "How much to slow down along horizontal axis, higher value = higher deceleration, if factor is < 1, you accelerate by wall jumping"); 254AUTOCVAR(g_walljump_velocity_z_factor, float, 0.5, "Upwards velocity factor, multiplied by normal jump velocity"); 255#endif 256REGISTER_STAT(WALLJUMP, int, autocvar_g_walljump) 257REGISTER_STAT(WALLJUMP_VELOCITY_Z_FACTOR, float, autocvar_g_walljump_velocity_z_factor) 258REGISTER_STAT(WALLJUMP_VELOCITY_XY_FACTOR, float, autocvar_g_walljump_velocity_xy_factor) 259REGISTER_STAT(WALLJUMP_DELAY, float, autocvar_g_walljump_delay) 260REGISTER_STAT(WALLJUMP_FORCE, float, autocvar_g_walljump_force) 261REGISTER_STAT(LASTWJ, float) 262 263// freeze tag, clan arena 264REGISTER_STAT(REDALIVE, int) 265REGISTER_STAT(BLUEALIVE, int) 266REGISTER_STAT(YELLOWALIVE, int) 267REGISTER_STAT(PINKALIVE, int) 268 269// domination 270REGISTER_STAT(DOM_TOTAL_PPS, float) 271REGISTER_STAT(DOM_PPS_RED, float) 272REGISTER_STAT(DOM_PPS_BLUE, float) 273REGISTER_STAT(DOM_PPS_YELLOW, float) 274REGISTER_STAT(DOM_PPS_PINK, float) 275 276REGISTER_STAT(TELEPORT_MAXSPEED, float, autocvar_g_teleport_maxspeed) 277REGISTER_STAT(TELEPORT_TELEFRAG_AVOID, int, autocvar_g_telefrags_avoid) 278 279REGISTER_STAT(CAMERA_SPECTATOR, int) 280 281REGISTER_STAT(SPECTATORSPEED, float) 282 283#ifdef SVQC 284bool autocvar_sv_slick_applygravity; 285#endif 286REGISTER_STAT(SLICK_APPLYGRAVITY, bool, autocvar_sv_slick_applygravity) 287 288#ifdef SVQC 289#include "physics/movetypes/movetypes.qh" 290#endif 291 292REGISTER_STAT(MOVEVARS_AIRACCEL_QW_STRETCHFACTOR, float) 293REGISTER_STAT(MOVEVARS_AIRCONTROL_PENALTY, float) 294REGISTER_STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW, float) 295REGISTER_STAT(MOVEVARS_AIRSTRAFEACCEL_QW, float) 296REGISTER_STAT(MOVEVARS_AIRCONTROL_POWER, float) 297REGISTER_STAT(MOVEVARS_AIRCONTROL_BACKWARDS, bool) 298noref bool autocvar_sv_gameplayfix_nogravityonground; 299REGISTER_STAT(MOVEFLAGS, int, MOVEFLAG_VALID 300 | (autocvar_sv_gameplayfix_q2airaccelerate ? MOVEFLAG_Q2AIRACCELERATE : 0) 301 | (autocvar_sv_gameplayfix_nogravityonground ? MOVEFLAG_NOGRAVITYONGROUND : 0) 302 | (autocvar_sv_gameplayfix_gravityunaffectedbyticrate ? MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE : 0)) 303 304REGISTER_STAT(MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL, float) 305REGISTER_STAT(MOVEVARS_WARSOWBUNNY_ACCEL, float) 306REGISTER_STAT(MOVEVARS_WARSOWBUNNY_TOPSPEED, float) 307REGISTER_STAT(MOVEVARS_WARSOWBUNNY_TURNACCEL, float) 308REGISTER_STAT(MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO, float) 309 310REGISTER_STAT(MOVEVARS_AIRSTOPACCELERATE, float) 311REGISTER_STAT(MOVEVARS_AIRSTRAFEACCELERATE, float) 312REGISTER_STAT(MOVEVARS_MAXAIRSTRAFESPEED, float) 313REGISTER_STAT(MOVEVARS_AIRCONTROL, float) 314REGISTER_STAT(FRAGLIMIT, float, autocvar_fraglimit) 315REGISTER_STAT(TIMELIMIT, float, autocvar_timelimit) 316REGISTER_STAT(WARMUP_TIMELIMIT, float, warmup_limit) 317#ifdef SVQC 318float autocvar_sv_wallfriction; 319#endif 320REGISTER_STAT(MOVEVARS_WALLFRICTION, int, autocvar_sv_wallfriction) 321REGISTER_STAT(MOVEVARS_TICRATE, float, autocvar_sys_ticrate) 322REGISTER_STAT(MOVEVARS_TIMESCALE, float, autocvar_slowmo) 323REGISTER_STAT(MOVEVARS_GRAVITY, float, autocvar_sv_gravity) 324REGISTER_STAT(MOVEVARS_STOPSPEED, float) 325REGISTER_STAT(MOVEVARS_MAXSPEED, float) 326REGISTER_STAT(MOVEVARS_ACCELERATE, float) 327REGISTER_STAT(MOVEVARS_AIRACCELERATE, float) 328.float gravity; 329// FIXME: Was 0 on server, 1 on client. Still want that? 330REGISTER_STAT(MOVEVARS_ENTGRAVITY, float, (this.gravity) ? this.gravity : 1) 331REGISTER_STAT(MOVEVARS_JUMPVELOCITY, float) 332REGISTER_STAT(MOVEVARS_MAXAIRSPEED, float) 333REGISTER_STAT(MOVEVARS_STEPHEIGHT, float, autocvar_sv_stepheight) 334REGISTER_STAT(MOVEVARS_AIRACCEL_QW, float) 335REGISTER_STAT(MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION, float) 336 337 338#ifdef CSQC 339noref int autocvar_cl_gunalign; 340#endif 341#ifdef SVQC 342.int cvar_cl_gunalign; 343REPLICATE(cvar_cl_gunalign, int, "cl_gunalign"); 344#endif 345REGISTER_STAT(GUNALIGN, int, this.cvar_cl_gunalign) 346#ifdef SVQC 347SPECTATE_COPYFIELD(_STAT(GUNALIGN)) 348#endif 349