0466c230ab3b709f40343ce3d2bba3c2c3442894
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / deathtypes / all.qh
1 #pragma once
2
3 #include <common/notifications/all.qh>
4
5 REGISTRY(Deathtypes, BITS(8))
6 #define Deathtypes_from(i) _Deathtypes_from(i, NULL)
7 REGISTER_REGISTRY(Deathtypes)
8 REGISTRY_CHECK(Deathtypes)
9
10 .entity death_msgself;
11 .entity death_msgmurder;
12 .string death_msgextra;
13
14 int dt_identity(int i) { return i; }
15
16 #define REGISTER_DEATHTYPE(id, msg_death, msg_death_by, extra) \
17     REGISTER(Deathtypes, DEATH, id, m_id, new_pure(deathtype)) { \
18         this.m_id += DT_FIRST; \
19         this.nent_name = #id; \
20         this.death_msgextra = extra; \
21         this.death_msgself = msg_death; \
22         this.death_msgmurder = msg_death_by; \
23     }
24
25 const int DEATH_WEAPONMASK = BITS(8);
26 const int HITTYPE_SECONDARY = BITS(1) << 8;
27 /** automatically set by RadiusDamage */
28 const int HITTYPE_SPLASH = BITS(1) << 9;
29 const int HITTYPE_BOUNCE = BITS(1) << 10;
30 // unused yet
31 const int HITTYPE_RESERVED = BITS(1) << 11;
32 const int HITTYPE_RESERVED2 = BITS(1) << 12;
33 const int DEATH_HITTYPEMASK = HITTYPE_SECONDARY | HITTYPE_SPLASH | HITTYPE_BOUNCE | HITTYPE_RESERVED | HITTYPE_RESERVED2;
34 // normal deaths begin
35 const int DT_FIRST = BIT(13);
36
37 #define DEATH_ISSPECIAL(t)      (t >= DT_FIRST)
38 #define DEATH_IS(t, dt)         (DEATH_ISSPECIAL(t) && (Deathtypes_from(t - DT_FIRST)) == dt)
39 #define DEATH_ENT(t)            (DEATH_ISSPECIAL(t) ?  (Deathtypes_from(t - DT_FIRST)) : NULL)
40 #define DEATH_ISVEHICLE(t)      (DEATH_ISSPECIAL(t) && (Deathtypes_from(t - DT_FIRST)).death_msgextra == "vehicle")
41 #define DEATH_ISTURRET(t)       (DEATH_ISSPECIAL(t) && (Deathtypes_from(t - DT_FIRST)).death_msgextra == "turret")
42 #define DEATH_ISMONSTER(t)      (DEATH_ISSPECIAL(t) && (Deathtypes_from(t - DT_FIRST)).death_msgextra == "monster")
43 #define DEATH_WEAPONOF(t)       (DEATH_ISSPECIAL(t) ? WEP_Null : Weapons_from((t) & DEATH_WEAPONMASK))
44 #define DEATH_ISWEAPON(t, w)    (DEATH_WEAPONOF(t) == (w))
45
46 string Deathtype_Name(int deathtype);
47
48 #include "all.inc"