// COMMIT-TODO: Update if necessary before committing // Revision 1: additional statistics sent (flag caps, returns, deaths) // Revision 2: Mapvote preview pictures // Revision 3: optimized map vote protocol // Revision 4: CSQC config var system // Revision 5: mapvote time fix // Revision 6: more robust against packet loss/delays, also show not yet connected clients // Revision 7: packet loss column // Revision 8: race // Revision 9: race delta // Revision 10: scoreboard force // Revision 11: scoreboard unforce; spectator support beginning // Revision 12: smaller scores updates (SERVER: requires new engine) // Revision 13: pointparticles // Revision 14: laser // Revision 15: zoom // Revision 16: multi-weapons // Revision 17: multi-weaponimpulses // Revision 18: warmup // Revision 19: fog // Revision 20: naggers // Revision 21: entcs for players optimized (position data down from 12 to 7 bytes); waypointsprites in csqc for team radar // Revision 22: hook shot origin #define CSQC_REVISION 22 const float AS_STRING = 1; const float AS_INT = 2; const float AS_FLOAT_TRUNCATED = 2; const float AS_FLOAT = 8; const float TE_CSQC_PICTURE = 100; const float TE_CSQC_RACE = 101; const float TE_CSQC_SPAWN = 102; const float TE_CSQC_ZCURVEPARTICLES = 103; const float TE_CSQC_NEXGUNBEAMPARTICLE = 104; const float TE_CSQC_LIGHTNINGARC = 105; const float TE_CSQC_TEAMNAGGER = 106; const float TE_CSQC_PINGPLREPORT = 107; const float TE_CSQC_ANNOUNCE = 110; const float TE_CSQC_TARGET_MUSIC = 111; const float TE_CSQC_KILLNOTIFY = 112; const float TE_CSQC_KILLCENTERPRINT = 113; const float TE_CSQC_CENTERPRINT_GENERIC = 114; const float TE_CSQC_WEAPONCOMPLAIN = 115; const float TE_CSQC_NEX_SCOPE = 116; const float TE_CSQC_MINELAYER_MAXMINES = 117; const float TE_CSQC_HAGAR_MAXROCKETS = 118; const float TE_CSQC_VEHICLESETUP = 119; const float RACE_NET_CHECKPOINT_HIT_QUALIFYING = 0; // byte checkpoint, short time, short recordtime, string recordholder const float RACE_NET_CHECKPOINT_CLEAR = 1; const float RACE_NET_CHECKPOINT_NEXT_QUALIFYING = 2; // byte nextcheckpoint, short recordtime, string recordholder const float RACE_NET_CHECKPOINT_HIT_RACE = 3; // byte checkpoint, short delta, byte lapsdelta, string opponent const float RACE_NET_CHECKPOINT_HIT_RACE_BY_OPPONENT = 4; // byte checkpoint, short delta, byte lapsdelta, string opponent const float RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING = 5; // byte nextcheckpoint, float laptime, short recordtime, string recordholder const float RACE_NET_PENALTY_RACE = 6; // byte penaltytime, string reason const float RACE_NET_PENALTY_QUALIFYING = 7; // byte penaltytime, string reason const float RACE_NET_SERVER_RECORD = 8; // server record, sent to client const float RACE_NET_SPEED_AWARD = 9; // speed award, sent to client const float RACE_NET_SPEED_AWARD_BEST = 10; // all time best speed award, sent to client const float RACE_NET_SERVER_RANKINGS = 11; const float RACE_NET_SERVER_STATUS = 12; const float RANKINGS_CNT = 15; const float ENT_CLIENT = 0; const float ENT_CLIENT_DEAD = 1; const float ENT_CLIENT_ENTCS = 2; const float ENT_CLIENT_SCORES_INFO = 3; const float ENT_CLIENT_SCORES = 4; const float ENT_CLIENT_TEAMSCORES = 5; const float ENT_CLIENT_POINTPARTICLES = 6; const float ENT_CLIENT_RAINSNOW = 7; const float ENT_CLIENT_LASER = 8; const float ENT_CLIENT_NAGGER = 9; // flags [votecalledvote] const float ENT_CLIENT_WAYPOINT = 10; // flags origin [team displayrule] [spritename] [spritename2] [spritename3] [lifetime maxdistance hideable] const float ENT_CLIENT_RADARLINK = 11; // flags [startorigin] [endorigin] [startcolor+16*endcolor] const float ENT_CLIENT_PROJECTILE = 12; const float ENT_CLIENT_GIBSPLASH = 13; const float ENT_CLIENT_DAMAGEINFO = 14; const float ENT_CLIENT_CASING = 15; const float ENT_CLIENT_INIT = 16; const float ENT_CLIENT_MAPVOTE = 17; const float ENT_CLIENT_CLIENTDATA = 18; const float ENT_CLIENT_RANDOMSEED = 19; const float ENT_CLIENT_WALL = 20; const float ENT_CLIENT_SPIDERBOT = 21; const float ENT_CLIENT_MODELEFFECT = 22; const float ENT_CLIENT_TUBANOTE = 23; const float ENT_CLIENT_WARPZONE = 24; const float ENT_CLIENT_WARPZONE_CAMERA = 25; const float ENT_CLIENT_TRIGGER_MUSIC = 26; const float ENT_CLIENT_HOOK = 27; const float ENT_CLIENT_LGBEAM = 28; const float ENT_CLIENT_GAUNTLET = 29; const float ENT_CLIENT_ACCURACY = 30; const float ENT_CLIENT_SHOWNAMES = 31; const float ENT_CLIENT_WARPZONE_TELEPORTED = 32; const float ENT_CLIENT_MODEL = 33; const float ENT_CLIENT_TURRET = 40; const float ENT_CLIENT_AUXILIARYXHAIR = 50; const float ENT_CLIENT_VEHICLE = 60; const float SPRITERULE_DEFAULT = 0; const float SPRITERULE_TEAMPLAY = 1; const float RADARICON_NONE = 0; const float RADARICON_FLAG = 1; const float RADARICON_FLAGCARRIER = 1; const float RADARICON_HERE = 1; // TODO make these 3 and 4, and make images for them const float RADARICON_DANGER = 1; const float RADARICON_WAYPOINT = 1; const float RADARICON_HELPME = 1; const float RADARICON_CONTROLPOINT = 1; const float RADARICON_GENERATOR = 1; const float RADARICON_OBJECTIVE = 1; const float RADARICON_DOMPOINT = 1; const float RADARICON_POWERUP = 1; const float RADARICON_TAGGED = 1; /////////////////////////// // keys pressed const float KEY_FORWARD = 1; const float KEY_BACKWARD = 2; const float KEY_LEFT = 4; const float KEY_RIGHT = 8; const float KEY_JUMP = 16; const float KEY_CROUCH = 32; /////////////////////////// // cvar constants float CVAR_SAVE = 1; float CVAR_NOTIFY = 2; float CVAR_READONLY = 4; /////////////////////////// // csqc communication stuff const float STAT_KH_KEYS = 32; const float STAT_CTF_STATE = 33; const float STAT_WEAPONS = 35; const float STAT_SWITCHWEAPON = 36; const float STAT_GAMESTARTTIME = 37; const float STAT_STRENGTH_FINISHED = 38; const float STAT_INVINCIBLE_FINISHED = 39; const float STAT_PRESSED_KEYS = 42; const float STAT_ALLOW_OLDNEXBEAM = 43; // this stat could later contain some other bits of info, like, more server-side particle config const float STAT_FUEL = 44; const float STAT_NB_METERSTART = 45; const float STAT_SHOTORG = 46; // compressShotOrigin const float STAT_LEADLIMIT = 47; const float STAT_WEAPON_CLIPLOAD = 48; const float STAT_WEAPON_CLIPSIZE = 49; const float STAT_NEX_CHARGE = 50; const float STAT_LAST_PICKUP = 51; const float STAT_HUD = 52; const float STAT_NEX_CHARGEPOOL = 53; const float STAT_HIT_TIME = 54; const float STAT_TYPEHIT_TIME = 55; const float STAT_LAYED_MINES = 56; const float STAT_HAGAR_LOAD = 57; const float STAT_SWITCHINGWEAPON = 58; // see DP source, quakedef.h const float STAT_MOVEVARS_AIRSPEEDLIMIT_NONQW = 222; const float STAT_MOVEVARS_AIRSTRAFEACCEL_QW = 223; const float STAT_MOVEVARS_MAXSPEED = 244; const float STAT_MOVEVARS_AIRACCEL_QW = 254; const float CTF_STATE_ATTACK = 1; const float CTF_STATE_DEFEND = 2; const float CTF_STATE_COMMANDER = 3; const float HUD_NORMAL = 0; const float HUD_VEHICLE_FIRST = 10; const float HUD_SPIDERBOT = 10; const float HUD_WAKIZASHI = 11; const float HUD_RAPTOR = 12; const float HUD_BUMBLEBEE = 13; const float HUD_VEHICLE_LAST = 13; const vector eX = '1 0 0'; const vector eY = '0 1 0'; const vector eZ = '0 0 1'; const float STAT_VEHICLESTAT_HEALTH = 60; const float STAT_VEHICLESTAT_SHIELD = 61; const float STAT_VEHICLESTAT_ENERGY = 62; const float STAT_VEHICLESTAT_AMMO1 = 63; const float STAT_VEHICLESTAT_RELOAD1 = 64; const float STAT_VEHICLESTAT_AMMO2 = 65; const float STAT_VEHICLESTAT_RELOAD2 = 66; const float STAT_SECRETS_TOTAL = 70; const float STAT_SECRETS_FOUND = 71; // mod stats (1xx) const float STAT_REDALIVE = 100; const float STAT_BLUEALIVE = 101; const float STAT_YELLOWALIVE = 102; const float STAT_PINKALIVE = 103; // freeze tag const float STAT_FROZEN = 104; const float STAT_REVIVE_PROGRESS = 105; const float STAT_DOM_TOTAL_PPS = 100; const float STAT_DOM_PPS_RED = 101; const float STAT_DOM_PPS_BLUE = 102; const float STAT_DOM_PPS_PINK = 103; const float STAT_DOM_PPS_YELLOW = 104; //const float STAT_SPIDERBOT_AIM 53 // compressShotOrigin //const float STAT_SPIDERBOT_TARGET 54 // compressShotOrigin // moved that here so the client knows the max. // # of maps, I'll use arrays for them :P #define MAPVOTE_COUNT 10 /** * Lower scores are better (e.g. suicides) */ #define SFL_LOWER_IS_BETTER 1 /** * Don't show zero values as scores */ #define SFL_HIDE_ZERO 2 /** * Allow a column to be hidden (do not automatically add it even if it is a sorting key) */ #define SFL_ALLOW_HIDE 16 /** * Display as a rank (with st, nd, rd, th suffix) */ #define SFL_RANK 32 /** * Display as mm:ss.s, value is stored as 10ths of a second (AND 0 is the worst possible value!) */ #define SFL_TIME 64 // not an extra constant yet #define SFL_ZERO_IS_WORST SFL_TIME /** * Scoring priority (NOTE: PRIMARY is used for fraglimit) */ #define SFL_SORT_PRIO_SECONDARY 4 #define SFL_SORT_PRIO_PRIMARY 8 #define SFL_SORT_PRIO_MASK 12 /** * Score indices */ #define MAX_SCORE 10 #define MAX_TEAMSCORE 2 #define ST_SCORE 0 #define SP_KILLS 0 #define SP_DEATHS 1 #define SP_SUICIDES 2 #define SP_SCORE 3 // game mode specific indices are not in common/, but in server/scores_rules.qc! #ifdef COMPAT_XON010_CHANNELS float CH_INFO = 0; // only on world and csqc float CH_TRIGGER = 0; // only on players; compat: FALSELY CONTROLLED BY "Info" float CH_WEAPON_A = 1; // only on players and entities float CH_WEAPON_SINGLE = 5; // only on players and entities float CH_VOICE = 2; // only on players float CH_BGM_SINGLE = 2; // only on csqc; compat: FALSELY CONTROLLED BY "Voice" float CH_AMBIENT = 2; // only on csqc; compat: FALSELY CONTROLLED BY "Voice" float CH_TRIGGER_SINGLE = 3; // only on players, entities, csqc float CH_SHOTS = 4; // only on players, entities, csqc float CH_SHOTS_SINGLE = 4; // only on players, entities, csqc float CH_WEAPON_B = 5; // only on players and entities float CH_PAIN = 6; // only on players and csqc float CH_PAIN_SINGLE = 6; // only on players and csqc float CH_PLAYER = 7; // only on players and entities float CH_TUBA = 5; // only on csqc #else float CH_INFO = 0; float CH_TRIGGER = -3; float CH_WEAPON_A = -1; float CH_WEAPON_SINGLE = 1; float CH_VOICE = -2; float CH_BGM_SINGLE = 8; float CH_AMBIENT = -9; float CH_TRIGGER_SINGLE = 3; float CH_SHOTS = -4; float CH_SHOTS_SINGLE = 4; float CH_WEAPON_B = -1; float CH_PAIN = -6; float CH_PAIN_SINGLE = 6; float CH_PLAYER = -7; float CH_TUBA = 5; #endif float ATTN_NONE = 0; float ATTN_MIN = 0.015625; float ATTN_NORM = 0.5; float ATTN_LARGE = 1; float ATTN_IDLE = 2; float ATTN_STATIC = 3; float ATTN_MAX = 3.984375; #define VOL_BASE 0.7 #define VOL_BASEVOICE 1.0 // this sets sounds and other properties of the projectiles in csqc float PROJECTILE_ELECTRO = 1; float PROJECTILE_ROCKET = 2; float PROJECTILE_TAG = 3; float PROJECTILE_BULLET = 4; float PROJECTILE_CRYLINK = 5; float PROJECTILE_ELECTRO_BEAM = 6; float PROJECTILE_GRENADE = 7; float PROJECTILE_GRENADE_BOUNCING = 8; float PROJECTILE_MINE = 9; float PROJECTILE_LASER = 10; float PROJECTILE_HLAC = 11; float PROJECTILE_SEEKER = 12; float PROJECTILE_FLAC = 13; float PROJECTILE_PORTO_RED = 14; float PROJECTILE_PORTO_BLUE = 15; float PROJECTILE_HOOKBOMB = 16; float PROJECTILE_HAGAR = 17; float PROJECTILE_HAGAR_BOUNCING = 18; float PROJECTILE_BULLET_GLOWING = 19; float PROJECTILE_CRYLINK_BOUNCING = 20; float PROJECTILE_FIREBALL = 21; float PROJECTILE_FIREMINE = 22; float PROJECTILE_BULLET_GLOWING_TRACER = 23; float PROJECTILE_RAPTORCANNON = 24; float PROJECTILE_RAPTORBOMB = 25; float PROJECTILE_RAPTORBOMBLET = 26; float PROJECTILE_SPIDERROCKET = 27; float PROJECTILE_WAKIROCKET = 28; float PROJECTILE_WAKICANNON = 29; float SPECIES_HUMAN = 0; float SPECIES_ROBOT_SOLID = 1; float SPECIES_ALIEN = 2; float SPECIES_ANIMAL = 3; float SPECIES_ROBOT_RUSTY = 4; float SPECIES_ROBOT_SHINY = 5; float SPECIES_RESERVED = 15; // Deathtypes (weapon deathtypes are the IT_* constants below) // NOTE: when adding death types, please add an explanation to Docs/spamlog.txt too. float DEATH_SPECIAL_START = 10000; float DEATH_FALL = 10000; float DEATH_TELEFRAG = 10001; float DEATH_DROWN = 10002; float DEATH_HURTTRIGGER = 10003; float DEATH_LAVA = 10004; float DEATH_SLIME = 10005; float DEATH_KILL = 10006; float DEATH_NOAMMO = 10007; float DEATH_SWAMP = 10008; float DEATH_TEAMCHANGE = 10009; float DEATH_AUTOTEAMCHANGE = 10010; float DEATH_CAMP = 10011; float DEATH_SHOOTING_STAR = 10012; float DEATH_ROT = 10013; float DEATH_MIRRORDAMAGE = 10014; float DEATH_TOUCHEXPLODE = 10015; float DEATH_CHEAT = 10016; float DEATH_FIRE = 10017; float DEATH_QUIET = 10021; float DEATH_VHFIRST = 10030; float DEATH_VHCRUSH = 10030; float DEATH_SBMINIGUN = 10031; float DEATH_SBROCKET = 10032; float DEATH_SBBLOWUP = 10033; float DEATH_WAKIGUN = 10034; float DEATH_WAKIROCKET = 10035; float DEATH_WAKIBLOWUP = 10036; float DEATH_RAPTOR_CANNON = 10037; float DEATH_RAPTOR_BOMB = 10038; float DEATH_RAPTOR_BOMB_SPLIT = 10039; float DEATH_RAPTOR_DEATH = 10040; float DEATH_VHLAST = 10040; #define DEATH_ISVEHICLE(t) ((t) >= DEATH_VHFIRST && (t) <= DEATH_VHLAST) float DEATH_GENERIC = 10050; float DEATH_WEAPON = 10100; float DEATH_CUSTOM = 10300; float DEATH_TURRET = 10500; float DEATH_TURRET_EWHEEL = 10501; float DEATH_TURRET_FLAC = 10502; float DEATH_TURRET_MACHINEGUN = 10503; float DEATH_TURRET_WALKER_GUN = 10504; float DEATH_TURRET_WALKER_MEELE = 10505; float DEATH_TURRET_WALKER_ROCKET = 10506; float DEATH_TURRET_HELLION = 10507; float DEATH_TURRET_HK = 10508; float DEATH_TURRET_MLRS = 10509; float DEATH_TURRET_PLASMA = 10510; float DEATH_TURRET_PHASER = 10511; float DEATH_TURRET_TESLA = 10512; float DEATH_TURRET_LAST = 10512; float DEATH_WEAPONMASK = 0xFF; float DEATH_HITTYPEMASK = 0x1F00; // which is WAY below 10000 used for normal deaths float HITTYPE_SECONDARY = 0x100; float HITTYPE_SPLASH = 0x200; // automatically set by RadiusDamage float HITTYPE_BOUNCE = 0x400; float HITTYPE_HEADSHOT = 0x800; // automatically set by Damage (if headshotbonus is set) float HITTYPE_RESERVED = 0x1000; // unused yet // macros to access these #define DEATH_ISTURRET(t) ((t) >= DEATH_TURRET && (t) <= DEATH_TURRET_LAST) #define DEATH_ISSPECIAL(t) ((t) >= DEATH_SPECIAL_START) #define DEATH_WEAPONOFWEAPONDEATH(t) ((t) & DEATH_WEAPONMASK) #define DEATH_ISWEAPON(t,w) (!DEATH_ISSPECIAL(t) && DEATH_WEAPONOFWEAPONDEATH(t) == (w)) #define DEATH_WEAPONOF(t) (DEATH_ISSPECIAL(t) ? 0 : DEATH_WEAPONOFWEAPONDEATH(t)) #define WEP_VALID(w) ((w) >= WEP_FIRST && (w) <= WEP_LAST) #define FRAGS_PLAYER 0 #define FRAGS_SPECTATOR -666 #define FRAGS_LMS_LOSER -616 #define FRAGS_PLAYER_NONSOLID -616 // we can use this frags value for both // water levels float WATERLEVEL_NONE = 0; float WATERLEVEL_WETFEET = 1; float WATERLEVEL_SWIMMING = 2; float WATERLEVEL_SUBMERGED = 3; float MAX_SHOT_DISTANCE = 32768; //centerprint ID list float CPID_TEAMCHANGE = 1; float CPID_CTF_CAPTURESHIELD = 2; float CPID_MINSTA_FINDAMMO = 3; float CPID_NIX_WPNCHANGE = 4; float CPID_DISCONNECT_IDLING = 5; float CPID_ROUND_STARTING = 6; float CPID_GAME_STARTING = 7; float CPID_TIMEOUT_COUNTDOWN = 8; float CPID_MOTD = 9; float CPID_KH_MSG = 10; float CPID_PREVENT_JOIN = 11; // CSQC centerprint/notify message types float MSG_SUICIDE = 0; float MSG_KILL = 1; float MSG_SPREE = 2; float MSG_KILL_ACTION = 3; float MSG_KILL_ACTION_SPREE = 4; float MSG_INFO = 5; float MSG_KA = 6; float MSG_RACE = 10; float KILL_TEAM_RED = 12001; float KILL_TEAM_BLUE = 12002; float KILL_TEAM_SPREE = 12003; float KILL_FIRST_BLOOD = 12004; float KILL_FIRST_VICTIM = 12005; float KILL_TYPEFRAG = 12006; float KILL_TYPEFRAGGED = 12007; float KILL_FRAG = 12008; float KILL_FRAGGED = 12009; float KILL_SPREE = 12010; float KILL_END_SPREE = 12011; float KILL_SPREE_3 = 12012; float KILL_SPREE_5 = 12013; float KILL_SPREE_10 = 12014; float KILL_SPREE_15 = 12015; float KILL_SPREE_20 = 12016; float KILL_SPREE_25 = 12017; float KILL_SPREE_30 = 12018; float INFO_GOTFLAG = 13001; float INFO_PICKUPFLAG = 13002; float INFO_LOSTFLAG = 13003; float INFO_RETURNFLAG = 13004; float INFO_CAPTUREFLAG = 13005; float KA_PICKUPBALL = 14001; float KA_DROPBALL = 14002; float RACE_SERVER_RECORD = 15001; float RACE_NEW_TIME = 15002; float RACE_NEW_RANK = 15003; float RACE_FAIL = 15004; // weapon requests float WR_SETUP = 1; // (SVQC) setup weapon data float WR_THINK = 2; // (SVQC) logic to run every frame float WR_CHECKAMMO1 = 3; // (SVQC) checks ammo for weapon float WR_CHECKAMMO2 = 4; // (SVQC) checks ammo for weapon float WR_AIM = 5; // (SVQC) runs bot aiming code for this weapon float WR_PRECACHE = 6; // (CSQC and SVQC) precaches models/sounds used by this weapon float WR_SUICIDEMESSAGE = 7; // (CSQC) sets w_deathtypestring or leaves it alone (and may inspect w_deathtype for details) float WR_KILLMESSAGE = 8; // (CSQC) sets w_deathtypestring or leaves it alone float WR_RELOAD = 9; // (SVQC) does not need to do anything float WR_RESETPLAYER = 10; // (SVQC) does not need to do anything float WR_IMPACTEFFECT = 11; // (CSQC) impact effect float WR_SWITCHABLE = 12; // (CSQC) impact effect float WR_PLAYERDEATH = 13; // (SVQC) does not need to do anything float WR_GONETHINK = 14; // (SVQC) logic to run every frame, also if no longer having the weapon as long as the switch away has not been performed float HUD_PANEL_WEAPONS = 0; float HUD_PANEL_AMMO = 1; float HUD_PANEL_POWERUPS = 2; float HUD_PANEL_HEALTHARMOR = 3; float HUD_PANEL_NOTIFY = 4; float HUD_PANEL_TIMER = 5; float HUD_PANEL_RADAR = 6; float HUD_PANEL_SCORE = 7; float HUD_PANEL_RACETIMER = 8; float HUD_PANEL_VOTE = 9; float HUD_PANEL_MODICONS = 10; float HUD_PANEL_PRESSEDKEYS = 11; float HUD_PANEL_CHAT = 12; float HUD_PANEL_ENGINEINFO = 13; float HUD_PANEL_INFOMESSAGES = 14; float HUD_PANEL_PHYSICS = 15; float HUD_PANEL_CENTERPRINT = 16; float HUD_PANEL_NUM = 17; // always last panel id + 1, please increment when adding a new panel string HUD_PANELNAME_WEAPONS = "weapons"; string HUD_PANELNAME_AMMO = "ammo"; string HUD_PANELNAME_POWERUPS = "powerups"; string HUD_PANELNAME_HEALTHARMOR = "healtharmor"; string HUD_PANELNAME_NOTIFY = "notify"; string HUD_PANELNAME_TIMER = "timer"; string HUD_PANELNAME_RADAR = "radar"; string HUD_PANELNAME_SCORE = "score"; string HUD_PANELNAME_RACETIMER = "racetimer"; string HUD_PANELNAME_VOTE = "vote"; string HUD_PANELNAME_MODICONS = "modicons"; string HUD_PANELNAME_PRESSEDKEYS = "pressedkeys"; string HUD_PANELNAME_CHAT = "chat"; string HUD_PANELNAME_ENGINEINFO = "engineinfo"; string HUD_PANELNAME_INFOMESSAGES = "infomessages"; string HUD_PANELNAME_PHYSICS = "physics"; string HUD_PANELNAME_CENTERPRINT = "centerprint"; float HUD_MENU_ENABLE = 0; #define SERVERFLAG_ALLOW_FULLBRIGHT 1 #define SERVERFLAG_TEAMPLAY 2 #define SERVERFLAG_PLAYERSTATS 4 var vector autocvar_sv_player_maxs = '16 16 45'; var vector autocvar_sv_player_mins = '-16 -16 -24'; var vector autocvar_sv_player_viewoffset = '0 0 20'; var vector autocvar_sv_player_crouch_maxs = '16 16 25'; var vector autocvar_sv_player_crouch_mins = '-16 -16 -24'; var vector autocvar_sv_player_crouch_viewoffset = '0 0 20'; noref var vector autocvar_sv_player_headsize = '24 24 12'; #define PL_VIEW_OFS autocvar_sv_player_viewoffset #define PL_MIN autocvar_sv_player_mins #define PL_MAX autocvar_sv_player_maxs #define PL_CROUCH_VIEW_OFS autocvar_sv_player_crouch_viewoffset #define PL_CROUCH_MIN autocvar_sv_player_crouch_mins #define PL_CROUCH_MAX autocvar_sv_player_crouch_maxs #define PL_HEAD autocvar_sv_player_headsize // helpers #define PL_VIEW_OFS_z autocvar_sv_player_viewoffset_z #define PL_MIN_z autocvar_sv_player_mins_z #define PL_MAX_z autocvar_sv_player_maxs_z #define PL_CROUCH_VIEW_OFS_z autocvar_sv_player_crouch_viewoffset_z #define PL_CROUCH_MIN_z autocvar_sv_player_mins_z #define PL_HEAD_x autocvar_sv_player_headsize_x #define PL_HEAD_y autocvar_sv_player_headsize_y #define PL_HEAD_z autocvar_sv_player_headsize_z // spawnpoint prios #define SPAWN_PRIO_NEAR_TEAMMATE_FOUND 200 #define SPAWN_PRIO_NEAR_TEAMMATE_SAMETEAM 100 #define SPAWN_PRIO_RACE_PREVIOUS_SPAWN 50 #define SPAWN_PRIO_GOOD_DISTANCE 10