// Deathtypes (weapon deathtypes are the IT_* constants below) // NOTE: when adding death types, please add an explanation to Docs/spamlog.txt too. #define DT_FIRST 10000 #define DT_MAX 1024 // limit of recursive functions with ACCUMULATE_FUNCTION float DT_COUNT; #define DT_MATCH(a,b) if(min(DT_MAX, a) == b) #define DEATHTYPE(name,msg_death,msg_death_by,position) \ float name; \ float position; \ void RegisterDeathtype_##name() \ { \ SET_FIRST_OR_LAST(position, DT_FIRST, DT_COUNT) \ SET_FIELD_COUNT(name, DT_FIRST, DT_COUNT) \ CHECK_MAX_COUNT(name, DT_MAX, DT_COUNT, "deathtypes") \ } \ ACCUMULATE_FUNCTION(RegisterDeathtypes, RegisterDeathtype_##name) #define DEATHTYPES \ DEATHTYPE(DEATH_FALL, DEATH_SELF_FALL, DEATH_MURDER_FALL, DEATH_SPECIAL_START) \ DEATHTYPE(DEATH_TELEFRAG, NO_MSG, DEATH_MURDER_TELEFRAG, NORMAL_POS) \ DEATHTYPE(DEATH_DROWN, DEATH_SELF_DROWN, DEATH_MURDER_DROWN, NORMAL_POS) \ DEATHTYPE(DEATH_HURTTRIGGER, DEATH_SELF_VOID, DEATH_MURDER_VOID, NORMAL_POS) \ DEATHTYPE(DEATH_LAVA, DEATH_SELF_LAVA, DEATH_MURDER_LAVA, NORMAL_POS) \ DEATHTYPE(DEATH_SLIME, DEATH_SELF_SLIME, DEATH_MURDER_SLIME, NORMAL_POS) \ DEATHTYPE(DEATH_KILL, DEATH_SELF_SUICIDE, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_NOAMMO, DEATH_SELF_NOAMMO, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_SWAMP, DEATH_SELF_SWAMP, DEATH_MURDER_SWAMP, NORMAL_POS) \ DEATHTYPE(DEATH_TEAMCHANGE, DEATH_SELF_TEAMCHANGE, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_AUTOTEAMCHANGE, DEATH_SELF_AUTOTEAMCHANGE, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_CAMP, DEATH_SELF_CAMP, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_SHOOTING_STAR, DEATH_SELF_SHOOTING_STAR, DEATH_MURDER_SHOOTING_STAR, NORMAL_POS) \ DEATHTYPE(DEATH_ROT, DEATH_SELF_ROT, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_MIRRORDAMAGE, DEATH_SELF_BETRAYAL, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_TOUCHEXPLODE, DEATH_SELF_TOUCHEXPLODE, DEATH_MURDER_TOUCHEXPLODE, NORMAL_POS) \ DEATHTYPE(DEATH_CHEAT, DEATH_SELF_CHEAT, DEATH_MURDER_CHEAT, NORMAL_POS) \ DEATHTYPE(DEATH_FIRE, DEATH_SELF_FIRE, DEATH_MURDER_FIRE, NORMAL_POS) \ DEATHTYPE(DEATH_VHCRUSH, NO_MSG, NO_MSG, DEATH_VHFIRST) \ DEATHTYPE(DEATH_SBMINIGUN, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_SBROCKET, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_SBBLOWUP, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_WAKIGUN, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_WAKIROCKET, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_WAKIBLOWUP, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_RAPTOR_CANNON, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_RAPTOR_BOMB, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_RAPTOR_BOMB_SPLIT, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_RAPTOR_DEATH, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_BUMB_GUN, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_BUMB_RAY, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_BUMB_RAY_HEAL, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_BUMB_DEATH, NO_MSG, NO_MSG, DEATH_VHLAST) \ DEATHTYPE(DEATH_TURRET, NO_MSG, NO_MSG, DEATH_TURRET_FIRST) \ DEATHTYPE(DEATH_TURRET_EWHEEL, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_TURRET_FLAC, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_TURRET_MACHINEGUN, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_TURRET_WALKER_GUN, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_TURRET_WALKER_MEELE, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_TURRET_WALKER_ROCKET, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_TURRET_HELLION, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_TURRET_HK, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_TURRET_MLRS, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_TURRET_PLASMA, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_TURRET_PHASER, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_TURRET_TESLA, NO_MSG, NO_MSG, DEATH_TURRET_LAST) \ DEATHTYPE(DEATH_GENERIC, DEATH_SELF_GENERIC, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_WEAPON, NO_MSG, NO_MSG, NORMAL_POS) \ DEATHTYPE(DEATH_CUSTOM, DEATH_SELF_CUSTOM, NO_MSG, NORMAL_POS) DEATHTYPES #undef DEATHTYPE #define DEATH_ISSPECIAL(t) ((t) >= DEATH_SPECIAL_START) #define DEATH_ISVEHICLE(t) ((t) >= DEATH_VHFIRST && (t) <= DEATH_VHLAST) #define DEATH_ISTURRET(t) ((t) >= DEATH_TURRET_FIRST && (t) <= DEATH_TURRET_LAST) #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) string Deathtype_Name(float deathtype) { if(DEATH_ISSPECIAL(deathtype)) { #define DEATHTYPE(name,msg_death,msg_death_by,position) \ { if(deathtype == max(0, name)) return VAR_TO_TEXT(name); } DEATHTYPES #undef DEATHTYPE } return "foobar"; } 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 // 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; // this shit has got to go 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;