]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/deathtypes.qh
Merge remote-tracking branch 'origin/master' into samual/notification_rewrite
[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_death,msg_death_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,                                   DEATH_SELF_FALL,                                        DEATH_MURDER_FALL,                              DEATH_SPECIAL_START) \
22         DEATHTYPE(DEATH_TELEFRAG,                               NO_MSG,                                                         DEATH_MURDER_TELEFRAG,                  NORMAL_POS) \
23         DEATHTYPE(DEATH_DROWN,                                  DEATH_SELF_DROWN,                                       DEATH_MURDER_DROWN,                     NORMAL_POS) \
24         DEATHTYPE(DEATH_HURTTRIGGER,                    DEATH_SELF_VOID,                                        DEATH_MURDER_VOID,                              NORMAL_POS) \
25         DEATHTYPE(DEATH_LAVA,                                   DEATH_SELF_LAVA,                                        DEATH_MURDER_LAVA,                              NORMAL_POS) \
26         DEATHTYPE(DEATH_SLIME,                                  DEATH_SELF_SLIME,                                       DEATH_MURDER_SLIME,                             NORMAL_POS) \
27         DEATHTYPE(DEATH_KILL,                                   DEATH_SELF_SUICIDE,                             NO_MSG,                                                 NORMAL_POS) \
28         DEATHTYPE(DEATH_NOAMMO,                                 DEATH_SELF_NOAMMO,                                      NO_MSG,                                                 NORMAL_POS) \
29         DEATHTYPE(DEATH_SWAMP,                                  DEATH_SELF_SWAMP,                                       DEATH_MURDER_SWAMP,                     NORMAL_POS) \
30         DEATHTYPE(DEATH_TEAMCHANGE,                     DEATH_SELF_TEAMCHANGE,                          NO_MSG,                                                 NORMAL_POS) \
31         DEATHTYPE(DEATH_AUTOTEAMCHANGE,                 DEATH_SELF_AUTOTEAMCHANGE,                      NO_MSG,                                                 NORMAL_POS) \
32         DEATHTYPE(DEATH_CAMP,                                   DEATH_SELF_CAMP,                                        NO_MSG,                                                 NORMAL_POS) \
33         DEATHTYPE(DEATH_SHOOTING_STAR,                  DEATH_SELF_SHOOTING_STAR,                       DEATH_MURDER_SHOOTING_STAR,     NORMAL_POS) \
34         DEATHTYPE(DEATH_ROT,                                    DEATH_SELF_ROT,                                         NO_MSG,                                                 NORMAL_POS) \
35         DEATHTYPE(DEATH_MIRRORDAMAGE,                   DEATH_SELF_BETRAYAL,                            NO_MSG,                                                 NORMAL_POS) \
36         DEATHTYPE(DEATH_TOUCHEXPLODE,                   DEATH_SELF_TOUCHEXPLODE,                        DEATH_MURDER_TOUCHEXPLODE,              NORMAL_POS) \
37         DEATHTYPE(DEATH_CHEAT,                                  DEATH_SELF_CHEAT,                                       DEATH_MURDER_CHEAT,                     NORMAL_POS) \
38         DEATHTYPE(DEATH_FIRE,                                   DEATH_SELF_FIRE,                                        DEATH_MURDER_FIRE,                              NORMAL_POS) \
39         DEATHTYPE(DEATH_VH_CRUSH,                               DEATH_SELF_VH_CRUSH,                            DEATH_MURDER_VH_CRUSH,                  DEATH_VHFIRST) \
40         DEATHTYPE(DEATH_VH_SPID_MINIGUN,                NO_MSG,                                                         DEATH_MURDER_VH_SPID_MINIGUN,   NORMAL_POS) \
41         DEATHTYPE(DEATH_VH_SPID_ROCKET,                 DEATH_SELF_VH_SPID_ROCKET,                      DEATH_MURDER_VH_SPID_ROCKET,    NORMAL_POS) \
42         DEATHTYPE(DEATH_VH_SPID_DEATH,                  DEATH_SELF_VH_SPID_DEATH,                       DEATH_MURDER_VH_SPID_DEATH,             NORMAL_POS) \
43         DEATHTYPE(DEATH_VH_WAKI_GUN,                    NO_MSG,                                                         DEATH_MURDER_VH_WAKI_GUN,               NORMAL_POS) \
44         DEATHTYPE(DEATH_VH_WAKI_ROCKET,                 DEATH_SELF_VH_WAKI_ROCKET,                      DEATH_MURDER_VH_WAKI_ROCKET,    NORMAL_POS) \
45         DEATHTYPE(DEATH_VH_WAKI_DEATH,                  DEATH_SELF_VH_WAKI_DEATH,                       DEATH_MURDER_VH_WAKI_DEATH,             NORMAL_POS) \
46         DEATHTYPE(DEATH_VH_RAPT_CANNON,                 NO_MSG,                                                         DEATH_MURDER_VH_RAPT_CANNON,    NORMAL_POS) \
47         DEATHTYPE(DEATH_VH_RAPT_BOMB,                   DEATH_SELF_VH_RAPT_BOMB,                        DEATH_MURDER_VH_RAPT_BOMB,              NORMAL_POS) \
48         DEATHTYPE(DEATH_VH_RAPT_FRAGMENT,               DEATH_SELF_VH_RAPT_BOMB,                        DEATH_MURDER_VH_RAPT_BOMB,              NORMAL_POS) \
49         DEATHTYPE(DEATH_VH_RAPT_DEATH,                  DEATH_SELF_VH_RAPT_DEATH,                       DEATH_MURDER_VH_RAPT_DEATH,             NORMAL_POS) \
50         DEATHTYPE(DEATH_VH_BUMB_GUN,                    NO_MSG,                                                         DEATH_MURDER_VH_BUMB_GUN,               NORMAL_POS) \
51         DEATHTYPE(DEATH_VH_BUMB_DEATH,                  DEATH_SELF_VH_BUMB_DEATH,                       DEATH_MURDER_VH_BUMB_DEATH,             DEATH_VHLAST) \
52         DEATHTYPE(DEATH_TURRET,                                 DEATH_SELF_TURRET,                                      NO_MSG,                                                 DEATH_TURRET_FIRST) \
53         DEATHTYPE(DEATH_TURRET_EWHEEL,                  DEATH_SELF_TURRET_EWHEEL,                       NO_MSG,                                                 NORMAL_POS) \
54         DEATHTYPE(DEATH_TURRET_FLAC,                    DEATH_SELF_TURRET_FLAC,                         NO_MSG,                                                 NORMAL_POS) \
55         DEATHTYPE(DEATH_TURRET_MACHINEGUN,              DEATH_SELF_TURRET_MACHINEGUN,           NO_MSG,                                                 NORMAL_POS) \
56         DEATHTYPE(DEATH_TURRET_WALK_GUN,                DEATH_SELF_TURRET_WALK_GUN,                     NO_MSG,                                                 NORMAL_POS) \
57         DEATHTYPE(DEATH_TURRET_WALK_MEELE,              DEATH_SELF_TURRET_WALK_MEELE,           NO_MSG,                                                 NORMAL_POS) \
58         DEATHTYPE(DEATH_TURRET_WALK_ROCKET,             DEATH_SELF_TURRET_WALK_ROCKET,          NO_MSG,                                                 NORMAL_POS) \
59         DEATHTYPE(DEATH_TURRET_HELLION,                 DEATH_SELF_TURRET_HELLION,                      NO_MSG,                                                 NORMAL_POS) \
60         DEATHTYPE(DEATH_TURRET_HK,                              DEATH_SELF_TURRET_HK,                           NO_MSG,                                                 NORMAL_POS) \
61         DEATHTYPE(DEATH_TURRET_MLRS,                    DEATH_SELF_TURRET_MLRS,                         NO_MSG,                                                 NORMAL_POS) \
62         DEATHTYPE(DEATH_TURRET_PLASMA,                  DEATH_SELF_TURRET_PLASMA,                       NO_MSG,                                                 NORMAL_POS) \
63         DEATHTYPE(DEATH_TURRET_PHASER,                  DEATH_SELF_TURRET_PHASER,                       NO_MSG,                                                 NORMAL_POS) \
64         DEATHTYPE(DEATH_TURRET_TESLA,                   DEATH_SELF_TURRET_TESLA,                        NO_MSG,                                                 DEATH_TURRET_LAST) \
65         DEATHTYPE(DEATH_GENERIC,                                DEATH_SELF_GENERIC,                             NO_MSG,                                                 NORMAL_POS) \
66         DEATHTYPE(DEATH_WEAPON,                                 NO_MSG,                                                         NO_MSG,                                                 NORMAL_POS) \
67         DEATHTYPE(DEATH_CUSTOM,                                 DEATH_SELF_CUSTOM,                                      NO_MSG,                                                 NORMAL_POS)
68
69 DEATHTYPES
70 #undef DEATHTYPE
71
72 #define DEATH_ISSPECIAL(t)                              ((t) >= DEATH_SPECIAL_START)
73 #define DEATH_ISVEHICLE(t)                              ((t) >= DEATH_VHFIRST && (t) <= DEATH_VHLAST)
74 #define DEATH_ISTURRET(t)                               ((t) >= DEATH_TURRET_FIRST && (t) <= DEATH_TURRET_LAST)
75 #define DEATH_WEAPONOFWEAPONDEATH(t)    ((t) & DEATH_WEAPONMASK)
76 #define DEATH_ISWEAPON(t,w)                             (!DEATH_ISSPECIAL(t) && DEATH_WEAPONOFWEAPONDEATH(t) == (w))
77 #define DEATH_WEAPONOF(t)                               (DEATH_ISSPECIAL(t) ? 0 : DEATH_WEAPONOFWEAPONDEATH(t))
78 #define WEP_VALID(w)                                    ((w) >= WEP_FIRST && (w) <= WEP_LAST)
79
80 string Deathtype_Name(float deathtype)
81 {
82         if(DEATH_ISSPECIAL(deathtype))
83         {
84                 #define DEATHTYPE(name,msg_death,msg_death_by,position) \
85                         { if(deathtype == max(0, name)) return VAR_TO_TEXT(name); }
86
87                 DEATHTYPES
88                 #undef DEATHTYPE
89         }
90         return "foobar";
91 }
92
93 float DEATH_WEAPONMASK = 0xFF;
94 float DEATH_HITTYPEMASK = 0x1F00; // which is WAY below 10000 used for normal deaths
95 float HITTYPE_SECONDARY = 0x100;
96 float HITTYPE_SPLASH = 0x200; // automatically set by RadiusDamage
97 float HITTYPE_BOUNCE = 0x400;
98 float HITTYPE_RESERVED2 = 0x800;
99 float HITTYPE_RESERVED = 0x1000; // unused yet