]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/deathtypes.qh
Massive progress with the notification system, plus some cleanup/comments
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / deathtypes.qh
1 // Deathtypes (weapon deathtypes are the IT_* constants below)
2 // NOTE: when adding death types, please add an explanation to Docs/spamlog.txt too.
3 #define DT_FIRST 10000
4 #define DT_MAX 1024 // limit of recursive functions with ACCUMULATE_FUNCTION
5 float DT_COUNT;
6
7 #define DT_MATCH(a,b) if(min(DT_MAX, a) == b)
8
9 #define DEATHTYPE(name,msg_info,msg_center,msg_info_by,msg_center_by,position) \
10         float name; \
11         float position; \
12         void RegisterDeathtype_##name() \
13         { \
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") \
17         } \
18         ACCUMULATE_FUNCTION(RegisterDeathtypes, RegisterDeathtype_##name)
19
20 #define DEATHTYPES \
21         DEATHTYPE(DEATH_FALL,                                   FALSE,                                  CENTER_DEATH_FALL,                              FALSE,                                  FALSE,                                  DEATH_SPECIAL_START) \
22         DEATHTYPE(DEATH_TELEFRAG,                               FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
23         DEATHTYPE(DEATH_DROWN,                                  FALSE,                                  CENTER_DEATH_DROWN,                     FALSE,                                  FALSE,                                  NORMAL_POS) \
24         DEATHTYPE(DEATH_HURTTRIGGER,                    FALSE,                                  CENTER_DEATH_CUSTOM,                    FALSE,                                  FALSE,                                  NORMAL_POS) \
25         DEATHTYPE(DEATH_LAVA,                                   FALSE,                                  CENTER_DEATH_LAVA,                              FALSE,                                  FALSE,                                  NORMAL_POS) \
26         DEATHTYPE(DEATH_SLIME,                                  FALSE,                                  CENTER_DEATH_SLIME,                     FALSE,                                  FALSE,                                  NORMAL_POS) \
27         DEATHTYPE(DEATH_KILL,                                   FALSE,                                  CENTER_DEATH_SUICIDE,                   FALSE,                                  FALSE,                                  NORMAL_POS) \
28         DEATHTYPE(DEATH_NOAMMO,                                 FALSE,                                  CENTER_DEATH_NOAMMO,                    FALSE,                                  FALSE,                                  NORMAL_POS) \
29         DEATHTYPE(DEATH_SWAMP,                                  FALSE,                                  CENTER_DEATH_SWAMP,                     FALSE,                                  FALSE,                                  NORMAL_POS) \
30         DEATHTYPE(DEATH_TEAMCHANGE,                     FALSE,                                  CENTER_DEATH_TEAMCHANGE,                FALSE,                                  FALSE,                                  NORMAL_POS) \
31         DEATHTYPE(DEATH_AUTOTEAMCHANGE,                 FALSE,                                  CENTER_DEATH_AUTOTEAMCHANGE,    FALSE,                                  FALSE,                                  NORMAL_POS) \
32         DEATHTYPE(DEATH_CAMP,                                   FALSE,                                  CENTER_DEATH_CAMP,                              FALSE,                                  FALSE,                                  NORMAL_POS) \
33         DEATHTYPE(DEATH_SHOOTING_STAR,                  FALSE,                                  CENTER_DEATH_SHOOTING_STAR,     FALSE,                                  FALSE,                                  NORMAL_POS) \
34         DEATHTYPE(DEATH_ROT,                                    FALSE,                                  CENTER_DEATH_ROT,                               FALSE,                                  FALSE,                                  NORMAL_POS) \
35         DEATHTYPE(DEATH_MIRRORDAMAGE,                   FALSE,                                  CENTER_DEATH_BETRAYAL,                  FALSE,                                  FALSE,                                  NORMAL_POS) \
36         DEATHTYPE(DEATH_TOUCHEXPLODE,                   FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
37         DEATHTYPE(DEATH_CHEAT,                                  FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
38         DEATHTYPE(DEATH_FIRE,                                   FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
39         DEATHTYPE(DEATH_VHCRUSH,                                FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  DEATH_VHFIRST) \
40         DEATHTYPE(DEATH_SBMINIGUN,                              FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
41         DEATHTYPE(DEATH_SBROCKET,                               FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
42         DEATHTYPE(DEATH_SBBLOWUP,                               FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
43         DEATHTYPE(DEATH_WAKIGUN,                                FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
44         DEATHTYPE(DEATH_WAKIROCKET,                             FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
45         DEATHTYPE(DEATH_WAKIBLOWUP,                             FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
46         DEATHTYPE(DEATH_RAPTOR_CANNON,                  FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
47         DEATHTYPE(DEATH_RAPTOR_BOMB,                    FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
48         DEATHTYPE(DEATH_RAPTOR_BOMB_SPLIT,              FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
49         DEATHTYPE(DEATH_RAPTOR_DEATH,                   FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
50         DEATHTYPE(DEATH_BUMB_GUN,                               FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
51         DEATHTYPE(DEATH_BUMB_RAY,                               FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
52         DEATHTYPE(DEATH_BUMB_RAY_HEAL,                  FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
53         DEATHTYPE(DEATH_BUMB_DEATH,                             FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  DEATH_VHLAST) \
54         DEATHTYPE(DEATH_TURRET,                                 FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  DEATH_TURRET_FIRST) \
55         DEATHTYPE(DEATH_TURRET_EWHEEL,                  FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
56         DEATHTYPE(DEATH_TURRET_FLAC,                    FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
57         DEATHTYPE(DEATH_TURRET_MACHINEGUN,              FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
58         DEATHTYPE(DEATH_TURRET_WALKER_GUN,              FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
59         DEATHTYPE(DEATH_TURRET_WALKER_MEELE,    FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
60         DEATHTYPE(DEATH_TURRET_WALKER_ROCKET,   FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
61         DEATHTYPE(DEATH_TURRET_HELLION,                 FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
62         DEATHTYPE(DEATH_TURRET_HK,                              FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
63         DEATHTYPE(DEATH_TURRET_MLRS,                    FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
64         DEATHTYPE(DEATH_TURRET_PLASMA,                  FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
65         DEATHTYPE(DEATH_TURRET_PHASER,                  FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
66         DEATHTYPE(DEATH_TURRET_TESLA,                   FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  DEATH_TURRET_LAST) \
67         DEATHTYPE(DEATH_GENERIC,                                FALSE,                                  CENTER_DEATH_GENERIC,                   FALSE,                                  FALSE,                                  NORMAL_POS) \
68         DEATHTYPE(DEATH_WEAPON,                                 FALSE,                                  FALSE,                                                  FALSE,                                  FALSE,                                  NORMAL_POS) \
69         DEATHTYPE(DEATH_CUSTOM,                                 FALSE,                                  CENTER_DEATH_CUSTOM,                    FALSE,                                  FALSE,                                  NORMAL_POS) \
70         #undef DEATHTYPE
71
72 DEATHTYPES
73
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)
81
82 string Deathtype_Name(float deathtype)
83 {
84         if(DEATH_ISSPECIAL(deathtype))
85         {
86                 #define DEATHTYPE(name,msg_info,msg_center,msg_info_by,msg_center_by,position) \
87                         { if(deathtype == max(0, name)) return VAR_TO_TEXT(name); }
88
89                 DEATHTYPES
90         }
91         return "foobar";
92 }
93
94 float DEATH_WEAPONMASK = 0xFF;
95 float DEATH_HITTYPEMASK = 0x1F00; // which is WAY below 10000 used for normal deaths
96 float HITTYPE_SECONDARY = 0x100;
97 float HITTYPE_SPLASH = 0x200; // automatically set by RadiusDamage
98 float HITTYPE_BOUNCE = 0x400;
99 float HITTYPE_HEADSHOT = 0x800; // automatically set by Damage (if headshotbonus is set)
100 float HITTYPE_RESERVED = 0x1000; // unused yet
101
102 // macros to access these
103
104 // CSQC centerprint/notify message types
105 float MSG_SUICIDE = 0;
106 float MSG_KILL = 1;
107 float MSG_SPREE = 2;
108 float MSG_KILL_ACTION = 3;
109 float MSG_KILL_ACTION_SPREE = 4;
110 float MSG_INFO = 5;
111 float MSG_KA = 6;
112 float MSG_RACE = 10;
113
114 float KILL_TEAM_RED = 12001;
115 float KILL_TEAM_BLUE = 12002;
116 float KILL_TEAM_SPREE = 12003;
117 float KILL_FIRST_BLOOD = 12004;
118 float KILL_FIRST_VICTIM = 12005;
119 float KILL_TYPEFRAG = 12006;
120 float KILL_TYPEFRAGGED = 12007;
121 float KILL_FRAG = 12008;
122 float KILL_FRAGGED = 12009;
123 float KILL_SPREE = 12010;
124 float KILL_END_SPREE = 12011;
125 float KILL_SPREE_3 = 12012;
126 float KILL_SPREE_5 = 12013;
127 float KILL_SPREE_10 = 12014;
128 float KILL_SPREE_15 = 12015;
129 float KILL_SPREE_20 = 12016;
130 float KILL_SPREE_25 = 12017;
131 float KILL_SPREE_30 = 12018;
132
133
134
135 // this shit has got to go
136 float INFO_GOTFLAG = 13001;
137 float INFO_PICKUPFLAG = 13002;
138 float INFO_LOSTFLAG = 13003;
139 float INFO_RETURNFLAG = 13004;
140 float INFO_CAPTUREFLAG = 13005;
141
142 float KA_PICKUPBALL = 14001;
143 float KA_DROPBALL = 14002;
144
145 float RACE_SERVER_RECORD = 15001;
146 float RACE_NEW_TIME = 15002;
147 float RACE_NEW_RANK = 15003;
148 float RACE_FAIL = 15004;
149
150         /*print("Obituary_Notification(): ", ftos(deathtype), ".\n");
151         switch(deathtype)
152         {
153                 // suicide
154                 case DEATH_AUTOTEAMCHANGE:
155                 case DEATH_CAMP:
156                 case DEATH_NOAMMO:
157                 case DEATH_ROT:
158                 case DEATH_TEAMCHANGE:
159                 
160                 case KILL_TEAM_SUICIDE_RED:
161                 case KILL_TEAM_SUICIDE_BLUE:
162
163                 // murder
164                 case KILL_TEAM_FRAG_RED:
165                 case KILL_TEAM_FRAG_BLUE:
166
167                 case KILL_FIRST_BLOOD:
168                 case KILL_FIRST_VICTIM:
169                 
170                 case KILL_FRAG:
171                 case KILL_TYPEFRAG:
172                 case KILL_FRAGGED:
173                 case KILL_TYPEFRAGGED:
174
175                 // accident
176                 case WATCH_STEP: 
177                 
178                 case DEATH_QUIET: break;
179
180                 // ideally we should have ALL deathtypes listed here
181                 default:
182                         backtrace(strcat("Unhandled deathtype: ", ftos(deathtype), ". Please notify Samual!\n"));
183                         break;
184         }*/