1 // Deathtypes (weapon deathtypes are the IT_* constants below)
2 // NOTE: when adding death types, please add an explanation to Docs/spamlog.txt too.
4 #define DT_MAX 1024 // limit of recursive functions with ACCUMULATE_FUNCTION
7 #define DT_MATCH(a,b) if(min(DT_MAX, a) == b)
9 #define DEATHTYPE(name,msg_death_by,msg_death,position) \
12 void RegisterDeathtype_##name() \
14 SET_FIRST_OR_LAST(position, DT_FIRST, DT_COUNT) \
15 SET_FIELD_COUNT(name, DT_FIRST, DT_COUNT) \
16 CHECK_MAX_COUNT(name, DT_MAX, DT_COUNT, "deathtypes") \
18 ACCUMULATE_FUNCTION(RegisterDeathtypes, RegisterDeathtype_##name)
21 DEATHTYPE(DEATH_FALL, NO_MSG, DEATH_SELF_FALL, DEATH_SPECIAL_START) \
22 DEATHTYPE(DEATH_TELEFRAG, NO_MSG, NO_MSG, NORMAL_POS) \
23 DEATHTYPE(DEATH_DROWN, NO_MSG, DEATH_SELF_DROWN, NORMAL_POS) \
24 DEATHTYPE(DEATH_HURTTRIGGER, NO_MSG, DEATH_SELF_CUSTOM, NORMAL_POS) \
25 DEATHTYPE(DEATH_LAVA, NO_MSG, DEATH_SELF_LAVA, NORMAL_POS) \
26 DEATHTYPE(DEATH_SLIME, NO_MSG, DEATH_SELF_SLIME, NORMAL_POS) \
27 DEATHTYPE(DEATH_KILL, NO_MSG, DEATH_SELF_SUICIDE, NORMAL_POS) \
28 DEATHTYPE(DEATH_NOAMMO, NO_MSG, DEATH_SELF_NOAMMO, NORMAL_POS) \
29 DEATHTYPE(DEATH_SWAMP, NO_MSG, DEATH_SELF_SWAMP, NORMAL_POS) \
30 DEATHTYPE(DEATH_TEAMCHANGE, NO_MSG, DEATH_SELF_TEAMCHANGE, NORMAL_POS) \
31 DEATHTYPE(DEATH_AUTOTEAMCHANGE, NO_MSG, DEATH_SELF_AUTOTEAMCHANGE, NORMAL_POS) \
32 DEATHTYPE(DEATH_CAMP, NO_MSG, DEATH_SELF_CAMP, NORMAL_POS) \
33 DEATHTYPE(DEATH_SHOOTING_STAR, NO_MSG, DEATH_SELF_SHOOTING_STAR, NORMAL_POS) \
34 DEATHTYPE(DEATH_ROT, NO_MSG, DEATH_SELF_ROT, NORMAL_POS) \
35 DEATHTYPE(DEATH_MIRRORDAMAGE, NO_MSG, DEATH_SELF_BETRAYAL, NORMAL_POS) \
36 DEATHTYPE(DEATH_TOUCHEXPLODE, NO_MSG, NO_MSG, NORMAL_POS) \
37 DEATHTYPE(DEATH_CHEAT, NO_MSG, NO_MSG, NORMAL_POS) \
38 DEATHTYPE(DEATH_FIRE, NO_MSG, DEATH_SELF_FIRE, NORMAL_POS) \
39 DEATHTYPE(DEATH_VHCRUSH, NO_MSG, NO_MSG, DEATH_VHFIRST) \
40 DEATHTYPE(DEATH_SBMINIGUN, NO_MSG, NO_MSG, NORMAL_POS) \
41 DEATHTYPE(DEATH_SBROCKET, NO_MSG, NO_MSG, NORMAL_POS) \
42 DEATHTYPE(DEATH_SBBLOWUP, NO_MSG, NO_MSG, NORMAL_POS) \
43 DEATHTYPE(DEATH_WAKIGUN, NO_MSG, NO_MSG, NORMAL_POS) \
44 DEATHTYPE(DEATH_WAKIROCKET, NO_MSG, NO_MSG, NORMAL_POS) \
45 DEATHTYPE(DEATH_WAKIBLOWUP, NO_MSG, NO_MSG, NORMAL_POS) \
46 DEATHTYPE(DEATH_RAPTOR_CANNON, NO_MSG, NO_MSG, NORMAL_POS) \
47 DEATHTYPE(DEATH_RAPTOR_BOMB, NO_MSG, NO_MSG, NORMAL_POS) \
48 DEATHTYPE(DEATH_RAPTOR_BOMB_SPLIT, NO_MSG, NO_MSG, NORMAL_POS) \
49 DEATHTYPE(DEATH_RAPTOR_DEATH, NO_MSG, NO_MSG, NORMAL_POS) \
50 DEATHTYPE(DEATH_BUMB_GUN, NO_MSG, NO_MSG, NORMAL_POS) \
51 DEATHTYPE(DEATH_BUMB_RAY, NO_MSG, NO_MSG, NORMAL_POS) \
52 DEATHTYPE(DEATH_BUMB_RAY_HEAL, NO_MSG, NO_MSG, NORMAL_POS) \
53 DEATHTYPE(DEATH_BUMB_DEATH, NO_MSG, NO_MSG, DEATH_VHLAST) \
54 DEATHTYPE(DEATH_TURRET, NO_MSG, NO_MSG, DEATH_TURRET_FIRST) \
55 DEATHTYPE(DEATH_TURRET_EWHEEL, NO_MSG, NO_MSG, NORMAL_POS) \
56 DEATHTYPE(DEATH_TURRET_FLAC, NO_MSG, NO_MSG, NORMAL_POS) \
57 DEATHTYPE(DEATH_TURRET_MACHINEGUN, NO_MSG, NO_MSG, NORMAL_POS) \
58 DEATHTYPE(DEATH_TURRET_WALKER_GUN, NO_MSG, NO_MSG, NORMAL_POS) \
59 DEATHTYPE(DEATH_TURRET_WALKER_MEELE, NO_MSG, NO_MSG, NORMAL_POS) \
60 DEATHTYPE(DEATH_TURRET_WALKER_ROCKET, NO_MSG, NO_MSG, NORMAL_POS) \
61 DEATHTYPE(DEATH_TURRET_HELLION, NO_MSG, NO_MSG, NORMAL_POS) \
62 DEATHTYPE(DEATH_TURRET_HK, NO_MSG, NO_MSG, NORMAL_POS) \
63 DEATHTYPE(DEATH_TURRET_MLRS, NO_MSG, NO_MSG, NORMAL_POS) \
64 DEATHTYPE(DEATH_TURRET_PLASMA, NO_MSG, NO_MSG, NORMAL_POS) \
65 DEATHTYPE(DEATH_TURRET_PHASER, NO_MSG, NO_MSG, NORMAL_POS) \
66 DEATHTYPE(DEATH_TURRET_TESLA, NO_MSG, NO_MSG, DEATH_TURRET_LAST) \
67 DEATHTYPE(DEATH_GENERIC, NO_MSG, DEATH_SELF_GENERIC, NORMAL_POS) \
68 DEATHTYPE(DEATH_WEAPON, NO_MSG, NO_MSG, NORMAL_POS) \
69 DEATHTYPE(DEATH_CUSTOM, NO_MSG, DEATH_SELF_CUSTOM, NORMAL_POS)
74 #define DEATH_ISSPECIAL(t) ((t) >= DEATH_SPECIAL_START)
75 #define DEATH_ISVEHICLE(t) ((t) >= DEATH_VHFIRST && (t) <= DEATH_VHLAST)
76 #define DEATH_ISTURRET(t) ((t) >= DEATH_TURRET_FIRST && (t) <= DEATH_TURRET_LAST)
77 #define DEATH_WEAPONOFWEAPONDEATH(t) ((t) & DEATH_WEAPONMASK)
78 #define DEATH_ISWEAPON(t,w) (!DEATH_ISSPECIAL(t) && DEATH_WEAPONOFWEAPONDEATH(t) == (w))
79 #define DEATH_WEAPONOF(t) (DEATH_ISSPECIAL(t) ? 0 : DEATH_WEAPONOFWEAPONDEATH(t))
80 #define WEP_VALID(w) ((w) >= WEP_FIRST && (w) <= WEP_LAST)
82 string Deathtype_Name(float deathtype)
84 if(DEATH_ISSPECIAL(deathtype))
86 #define DEATHTYPE(name,msg_death_by,msg_death,position) \
87 { if(deathtype == max(0, name)) return VAR_TO_TEXT(name); }
95 float DEATH_WEAPONMASK = 0xFF;
96 float DEATH_HITTYPEMASK = 0x1F00; // which is WAY below 10000 used for normal deaths
97 float HITTYPE_SECONDARY = 0x100;
98 float HITTYPE_SPLASH = 0x200; // automatically set by RadiusDamage
99 float HITTYPE_BOUNCE = 0x400;
100 float HITTYPE_HEADSHOT = 0x800; // automatically set by Damage (if headshotbonus is set)
101 float HITTYPE_RESERVED = 0x1000; // unused yet
103 // macros to access these
105 // CSQC centerprint/notify message types
106 float MSG_SUICIDE = 0;
109 float MSG_KILL_ACTION = 3;
110 float MSG_KILL_ACTION_SPREE = 4;
115 float KILL_TEAM_RED = 12001;
116 float KILL_TEAM_BLUE = 12002;
117 float KILL_TEAM_SPREE = 12003;
118 float KILL_FIRST_BLOOD = 12004;
119 float KILL_FIRST_VICTIM = 12005;
120 float KILL_TYPEFRAG = 12006;
121 float KILL_TYPEFRAGGED = 12007;
122 float KILL_FRAG = 12008;
123 float KILL_FRAGGED = 12009;
124 float KILL_SPREE = 12010;
125 float KILL_END_SPREE = 12011;
126 float KILL_SPREE_3 = 12012;
127 float KILL_SPREE_5 = 12013;
128 float KILL_SPREE_10 = 12014;
129 float KILL_SPREE_15 = 12015;
130 float KILL_SPREE_20 = 12016;
131 float KILL_SPREE_25 = 12017;
132 float KILL_SPREE_30 = 12018;
136 // this shit has got to go
137 float INFO_GOTFLAG = 13001;
138 float INFO_PICKUPFLAG = 13002;
139 float INFO_LOSTFLAG = 13003;
140 float INFO_RETURNFLAG = 13004;
141 float INFO_CAPTUREFLAG = 13005;
143 float KA_PICKUPBALL = 14001;
144 float KA_DROPBALL = 14002;
146 float RACE_SERVER_RECORD = 15001;
147 float RACE_NEW_TIME = 15002;
148 float RACE_NEW_RANK = 15003;
149 float RACE_FAIL = 15004;
151 /*print("Obituary_Notification(): ", ftos(deathtype), ".\n");
155 case DEATH_AUTOTEAMCHANGE:
159 case DEATH_TEAMCHANGE:
161 case KILL_TEAM_SUICIDE_RED:
162 case KILL_TEAM_SUICIDE_BLUE:
165 case KILL_TEAM_FRAG_RED:
166 case KILL_TEAM_FRAG_BLUE:
168 case KILL_FIRST_BLOOD:
169 case KILL_FIRST_VICTIM:
174 case KILL_TYPEFRAGGED:
179 case DEATH_QUIET: break;
181 // ideally we should have ALL deathtypes listed here
183 backtrace(strcat("Unhandled deathtype: ", ftos(deathtype), ". Please notify Samual!\n"));