]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/deathtypes.qh
Rename defs to qh
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / deathtypes.qh
1 #ifndef DEATHTYPES_H
2 #define DEATHTYPES_H
3
4 #if defined(CSQC)
5         #include "util-pre.qh"
6         #include "../client/sys-pre.qh"
7         #include "../dpdefs/csprogsdefs.qh"
8         #include "../client/sys-post.qh"
9         #include "../client/defs.qh"
10         #include "../dpdefs/keycodes.qh"
11         #include "constants.qh"
12         #include "stats.qh"
13         #include "../warpzonelib/anglestransform.qh"
14         #include "../warpzonelib/mathlib.qh"
15         #include "../warpzonelib/common.qh"
16         #include "../warpzonelib/client.qh"
17         #include "playerstats.qh"
18         #include "teams.qh"
19         #include "util.qh"
20         #include "nades.qh"
21         #include "buffs.qh"
22         #include "test.qh"
23         #include "counting.qh"
24         #include "weapons/weapons.qh"
25         #include "mapinfo.qh"
26         #include "command/markup.qh"
27         #include "command/rpn.qh"
28         #include "command/generic.qh"
29         #include "command/shared_defs.qh"
30         #include "urllib.qh"
31         #include "animdecide.qh"
32         #include "../client/command/cl_cmd.qh"
33         #include "monsters/monsters.qh"
34         #include "../client/autocvars.qh"
35         #include "notifications.qh"
36 #elif defined(MENUQC)
37 #elif defined(SVQC)
38         #include "util-pre.qh"
39     #include "../server/sys-pre.qh"
40     #include "../dpdefs/progsdefs.qh"
41     #include "../dpdefs/dpextensions.qh"
42     #include "../server/sys-post.qh"
43     #include "../warpzonelib/anglestransform.qh"
44     #include "../warpzonelib/mathlib.qh"
45     #include "../warpzonelib/common.qh"
46     #include "../warpzonelib/util_server.qh"
47     #include "../warpzonelib/server.qh"
48     #include "constants.qh"
49     #include "stats.qh"
50     #include "teams.qh"
51     #include "util.qh"
52     #include "nades.qh"
53     #include "buffs.qh"
54     #include "test.qh"
55     #include "counting.qh"
56     #include "urllib.qh"
57     #include "command/markup.qh"
58     #include "command/rpn.qh"
59     #include "command/generic.qh"
60     #include "command/shared_defs.qh"
61     #include "net_notice.qh"
62     #include "animdecide.qh"
63     #include "monsters/monsters.qh"
64     #include "monsters/sv_monsters.qh"
65     #include "monsters/spawn.qh"
66     #include "weapons/config.qh"
67     #include "weapons/weapons.qh"
68     #include "../server/weapons/accuracy.qh"
69     #include "../server/weapons/common.qh"
70     #include "../server/weapons/csqcprojectile.qh"
71     #include "../server/weapons/hitplot.qh"
72     #include "../server/weapons/selection.qh"
73     #include "../server/weapons/spawning.qh"
74     #include "../server/weapons/throwing.qh"
75     #include "../server/weapons/tracing.qh"
76     #include "../server/weapons/weaponstats.qh"
77     #include "../server/weapons/weaponsystem.qh"
78     #include "../server/t_items.qh"
79     #include "../server/autocvars.qh"
80     #include "../server/constants.qh"
81     #include "../server/defs.qh"
82     #include "notifications.qh"
83 #endif
84
85 // ================================
86 //  Deathtypes, reworked by Samual
87 // ================================
88
89 int DEATH_SPECIAL_START;
90 int NORMAL_POS;
91 int DEATH_MONSTER_FIRST;
92 int DEATH_MONSTER_LAST;
93 int DEATH_TURRET_FIRST;
94 int DEATH_TURRET_LAST;
95 int DEATH_VHFIRST;
96 int DEATH_VHLAST;
97
98 #define DEATHTYPES \
99         DEATHTYPE(DEATH_AUTOTEAMCHANGE,         DEATH_SELF_AUTOTEAMCHANGE,          NO_MSG,                        DEATH_SPECIAL_START) \
100         DEATHTYPE(DEATH_BUFF_VENGEANCE,         NO_MSG,                             DEATH_MURDER_VENGEANCE,        NORMAL_POS) \
101         DEATHTYPE(DEATH_CAMP,                   DEATH_SELF_CAMP,                    NO_MSG,                        NORMAL_POS) \
102         DEATHTYPE(DEATH_CHEAT,                  DEATH_SELF_CHEAT,                   DEATH_MURDER_CHEAT,            NORMAL_POS) \
103         DEATHTYPE(DEATH_CUSTOM,                 DEATH_SELF_CUSTOM,                  NO_MSG,                        NORMAL_POS) \
104         DEATHTYPE(DEATH_DROWN,                  DEATH_SELF_DROWN,                   DEATH_MURDER_DROWN,            NORMAL_POS) \
105         DEATHTYPE(DEATH_FALL,                   DEATH_SELF_FALL,                    DEATH_MURDER_FALL,             NORMAL_POS) \
106         DEATHTYPE(DEATH_FIRE,                   DEATH_SELF_FIRE,                    DEATH_MURDER_FIRE,             NORMAL_POS) \
107         DEATHTYPE(DEATH_GENERIC,                DEATH_SELF_GENERIC,                 NO_MSG,                        NORMAL_POS) \
108         DEATHTYPE(DEATH_HURTTRIGGER,            DEATH_SELF_VOID,                    DEATH_MURDER_VOID,             NORMAL_POS) \
109         DEATHTYPE(DEATH_KILL,                   DEATH_SELF_SUICIDE,                 NO_MSG,                        NORMAL_POS) \
110         DEATHTYPE(DEATH_LAVA,                   DEATH_SELF_LAVA,                    DEATH_MURDER_LAVA,             NORMAL_POS) \
111         DEATHTYPE(DEATH_MIRRORDAMAGE,           DEATH_SELF_BETRAYAL,                NO_MSG,                        NORMAL_POS) \
112         DEATHTYPE(DEATH_MONSTER_MAGE,                   DEATH_SELF_MON_MAGE,                            DEATH_MURDER_MONSTER,              DEATH_MONSTER_FIRST) \
113         DEATHTYPE(DEATH_MONSTER_SHAMBLER_CLAW,  DEATH_SELF_MON_SHAMBLER_CLAW,           DEATH_MURDER_MONSTER,              NORMAL_POS) \
114         DEATHTYPE(DEATH_MONSTER_SHAMBLER_SMASH, DEATH_SELF_MON_SHAMBLER_SMASH,          DEATH_MURDER_MONSTER,              NORMAL_POS) \
115         DEATHTYPE(DEATH_MONSTER_SHAMBLER_ZAP,   DEATH_SELF_MON_SHAMBLER_ZAP,            DEATH_MURDER_MONSTER,              NORMAL_POS) \
116         DEATHTYPE(DEATH_MONSTER_SPIDER,                 DEATH_SELF_MON_SPIDER,                          DEATH_MURDER_MONSTER,              NORMAL_POS) \
117         DEATHTYPE(DEATH_MONSTER_WYVERN,                 DEATH_SELF_MON_WYVERN,                          DEATH_MURDER_MONSTER,              NORMAL_POS) \
118         DEATHTYPE(DEATH_MONSTER_ZOMBIE_JUMP,    DEATH_SELF_MON_ZOMBIE_JUMP,                     DEATH_MURDER_MONSTER,              NORMAL_POS) \
119         DEATHTYPE(DEATH_MONSTER_ZOMBIE_MELEE,   DEATH_SELF_MON_ZOMBIE_MELEE,            DEATH_MURDER_MONSTER,              DEATH_MONSTER_LAST) \
120         DEATHTYPE(DEATH_NADE,                   DEATH_SELF_NADE,                    DEATH_MURDER_NADE,             NORMAL_POS) \
121         DEATHTYPE(DEATH_NADE_NAPALM,            DEATH_SELF_NADE_NAPALM,             DEATH_MURDER_NADE_NAPALM,      NORMAL_POS) \
122         DEATHTYPE(DEATH_NADE_ICE,               DEATH_SELF_NADE_ICE,                DEATH_MURDER_NADE_ICE,         NORMAL_POS) \
123         DEATHTYPE(DEATH_NADE_ICE_FREEZE,        DEATH_SELF_NADE_ICE_FREEZE,         DEATH_MURDER_NADE_ICE_FREEZE,  NORMAL_POS) \
124         DEATHTYPE(DEATH_NADE_HEAL,              DEATH_SELF_NADE_HEAL,               DEATH_MURDER_NADE_HEAL,        NORMAL_POS) \
125         DEATHTYPE(DEATH_NOAMMO,                 DEATH_SELF_NOAMMO,                  NO_MSG,                        NORMAL_POS) \
126         DEATHTYPE(DEATH_ROT,                    DEATH_SELF_ROT,                     NO_MSG,                        NORMAL_POS) \
127         DEATHTYPE(DEATH_SHOOTING_STAR,          DEATH_SELF_SHOOTING_STAR,           DEATH_MURDER_SHOOTING_STAR,    NORMAL_POS) \
128         DEATHTYPE(DEATH_SLIME,                  DEATH_SELF_SLIME,                   DEATH_MURDER_SLIME,            NORMAL_POS) \
129         DEATHTYPE(DEATH_SWAMP,                  DEATH_SELF_SWAMP,                   DEATH_MURDER_SWAMP,            NORMAL_POS) \
130         DEATHTYPE(DEATH_TEAMCHANGE,             DEATH_SELF_TEAMCHANGE,              NO_MSG,                        NORMAL_POS) \
131         DEATHTYPE(DEATH_TELEFRAG,               NO_MSG,                             DEATH_MURDER_TELEFRAG,         NORMAL_POS) \
132         DEATHTYPE(DEATH_TOUCHEXPLODE,           DEATH_SELF_TOUCHEXPLODE,            DEATH_MURDER_TOUCHEXPLODE,     NORMAL_POS) \
133         DEATHTYPE(DEATH_TURRET,                 DEATH_SELF_TURRET,                  NO_MSG,                        DEATH_TURRET_FIRST) \
134         DEATHTYPE(DEATH_TURRET_EWHEEL,          DEATH_SELF_TURRET_EWHEEL,           NO_MSG,                        NORMAL_POS) \
135         DEATHTYPE(DEATH_TURRET_FLAC,            DEATH_SELF_TURRET_FLAC,             NO_MSG,                        NORMAL_POS) \
136         DEATHTYPE(DEATH_TURRET_HELLION,         DEATH_SELF_TURRET_HELLION,          NO_MSG,                        NORMAL_POS) \
137         DEATHTYPE(DEATH_TURRET_HK,              DEATH_SELF_TURRET_HK,               NO_MSG,                        NORMAL_POS) \
138         DEATHTYPE(DEATH_TURRET_MACHINEGUN,      DEATH_SELF_TURRET_MACHINEGUN,       NO_MSG,                        NORMAL_POS) \
139         DEATHTYPE(DEATH_TURRET_MLRS,            DEATH_SELF_TURRET_MLRS,             NO_MSG,                        NORMAL_POS) \
140         DEATHTYPE(DEATH_TURRET_PHASER,          DEATH_SELF_TURRET_PHASER,           NO_MSG,                        NORMAL_POS) \
141         DEATHTYPE(DEATH_TURRET_PLASMA,          DEATH_SELF_TURRET_PLASMA,           NO_MSG,                        NORMAL_POS) \
142         DEATHTYPE(DEATH_TURRET_TESLA,           DEATH_SELF_TURRET_TESLA,            NO_MSG,                        NORMAL_POS) \
143         DEATHTYPE(DEATH_TURRET_WALK_GUN,        DEATH_SELF_TURRET_WALK_GUN,         NO_MSG,                        NORMAL_POS) \
144         DEATHTYPE(DEATH_TURRET_WALK_MEELE,      DEATH_SELF_TURRET_WALK_MEELE,       NO_MSG,                        NORMAL_POS) \
145         DEATHTYPE(DEATH_TURRET_WALK_ROCKET,     DEATH_SELF_TURRET_WALK_ROCKET,      NO_MSG,                        DEATH_TURRET_LAST) \
146         DEATHTYPE(DEATH_VH_BUMB_DEATH,          DEATH_SELF_VH_BUMB_DEATH,           DEATH_MURDER_VH_BUMB_DEATH,    DEATH_VHFIRST) \
147         DEATHTYPE(DEATH_VH_BUMB_GUN,            NO_MSG,                             DEATH_MURDER_VH_BUMB_GUN,      NORMAL_POS) \
148         DEATHTYPE(DEATH_VH_CRUSH,               DEATH_SELF_VH_CRUSH,                DEATH_MURDER_VH_CRUSH,         NORMAL_POS) \
149         DEATHTYPE(DEATH_VH_RAPT_BOMB,           DEATH_SELF_VH_RAPT_BOMB,            DEATH_MURDER_VH_RAPT_BOMB,     NORMAL_POS) \
150         DEATHTYPE(DEATH_VH_RAPT_CANNON,         NO_MSG,                             DEATH_MURDER_VH_RAPT_CANNON,   NORMAL_POS) \
151         DEATHTYPE(DEATH_VH_RAPT_DEATH,          DEATH_SELF_VH_RAPT_DEATH,           DEATH_MURDER_VH_RAPT_DEATH,    NORMAL_POS) \
152         DEATHTYPE(DEATH_VH_RAPT_FRAGMENT,       DEATH_SELF_VH_RAPT_BOMB,            DEATH_MURDER_VH_RAPT_BOMB,     NORMAL_POS) \
153         DEATHTYPE(DEATH_VH_SPID_DEATH,          DEATH_SELF_VH_SPID_DEATH,           DEATH_MURDER_VH_SPID_DEATH,    NORMAL_POS) \
154         DEATHTYPE(DEATH_VH_SPID_MINIGUN,        NO_MSG,                             DEATH_MURDER_VH_SPID_MINIGUN,  NORMAL_POS) \
155         DEATHTYPE(DEATH_VH_SPID_ROCKET,         DEATH_SELF_VH_SPID_ROCKET,          DEATH_MURDER_VH_SPID_ROCKET,   NORMAL_POS) \
156         DEATHTYPE(DEATH_VH_WAKI_DEATH,          DEATH_SELF_VH_WAKI_DEATH,           DEATH_MURDER_VH_WAKI_DEATH,    NORMAL_POS) \
157         DEATHTYPE(DEATH_VH_WAKI_GUN,            NO_MSG,                             DEATH_MURDER_VH_WAKI_GUN,      NORMAL_POS) \
158         DEATHTYPE(DEATH_VH_WAKI_ROCKET,         DEATH_SELF_VH_WAKI_ROCKET,          DEATH_MURDER_VH_WAKI_ROCKET,   DEATH_VHLAST) \
159         DEATHTYPE(DEATH_WEAPON,                 NO_MSG,                             NO_MSG,                        NORMAL_POS)
160
161 #define DT_FIRST 10000
162 #define DT_MAX 128 // limit of recursive functions with ACCUMULATE_FUNCTION
163 int DT_COUNT;
164
165 entity deathtypes[DT_MAX];
166 .entity death_msgself;
167 .entity death_msgmurder;
168
169 #define DEATHTYPE(name,msg_death,msg_death_by,position) \
170         int name; \
171         void RegisterDeathtype_##name() \
172         { \
173                 SET_FIRST_OR_LAST(position, DT_FIRST, DT_COUNT) \
174                 SET_FIELD_COUNT(name, DT_FIRST, DT_COUNT) \
175                 CHECK_MAX_COUNT(name, DT_MAX, DT_COUNT, "deathtypes") \
176                 \
177                 entity deathent = spawn(); \
178                 deathtypes[(name - DT_FIRST)] = deathent; \
179                 deathent.classname = "deathtype"; \
180                 deathent.nent_name = #name; \
181                 if (msg_death != NO_MSG) \
182                         deathent.death_msgself = msg_multi_notifs[msg_death - 1]; \
183                 if (msg_death_by != NO_MSG) \
184                         deathent.death_msgmurder = msg_multi_notifs[msg_death_by - 1]; \
185         } \
186         ACCUMULATE_FUNCTION(RegisterDeathtypes, RegisterDeathtype_##name);
187
188 DEATHTYPES
189 #undef DEATHTYPE
190
191 #define DEATH_ISSPECIAL(t)            ((t) >= DEATH_SPECIAL_START)
192 #define DEATH_ISVEHICLE(t)            ((t) >= DEATH_VHFIRST && (t) <= DEATH_VHLAST)
193 #define DEATH_ISTURRET(t)             ((t) >= DEATH_TURRET_FIRST && (t) <= DEATH_TURRET_LAST)
194 #define DEATH_ISMONSTER(t)            ((t) >= DEATH_MONSTER_FIRST && (t) <= DEATH_MONSTER_LAST)
195 #define DEATH_WEAPONOFWEAPONDEATH(t)  ((t) & DEATH_WEAPONMASK)
196 #define DEATH_ISWEAPON(t,w)           (!DEATH_ISSPECIAL(t) && DEATH_WEAPONOFWEAPONDEATH(t) == (w))
197 #define DEATH_WEAPONOF(t)             (DEATH_ISSPECIAL(t) ? 0 : DEATH_WEAPONOFWEAPONDEATH(t))
198 #define WEP_VALID(w)                  ((w) >= WEP_FIRST && (w) <= WEP_LAST)
199
200 string Deathtype_Name(float deathtype)
201 {
202         if(DEATH_ISSPECIAL(deathtype))
203         {
204                 entity deathent = deathtypes[(deathtype - DT_FIRST)];
205                 if (!deathent) { backtrace("Deathtype_Name: Could not find deathtype entity!\n"); return ""; }
206                 return deathent.nent_name;
207         }
208         else { return ftos(deathtype); }
209 }
210
211 const int DEATH_WEAPONMASK = 0xFF;
212 const int DEATH_HITTYPEMASK = 0x1F00; // which is WAY below 10000 used for normal deaths
213 const int HITTYPE_SECONDARY = 0x100;
214 const int HITTYPE_SPLASH = 0x200; // automatically set by RadiusDamage
215 const int HITTYPE_BOUNCE = 0x400;
216 const int HITTYPE_RESERVED2 = 0x800;
217 const int HITTYPE_RESERVED = 0x1000; // unused yet
218 #endif