]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/deathtypes.qh
Blub- Error on line 1350, but file is only 1203 lines long?
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / deathtypes.qh
index dc3f42f92bc13762fc6fed4acc25c203c6cf882f..2549858d24d70d3872bbf3a3a6dace3f2109c410 100644 (file)
 #define DT_MAX 1024 // limit of recursive functions with ACCUMULATE_FUNCTION
 float DT_COUNT;
 
-float DEATH_VHFIRST = DT_FIRST;
-float DEATH_VHLAST = DT_FIRST;
+#define DT_MATCH(a,b) if(min(DT_MAX, a) == b)
 
-#define DEATHTYPE(name,type,notification,first,last) \
+#define DEATHTYPE(name,msg_death,msg_death_by,position) \
        float name; \
-       float first; \
-       float last; \
-       void DecDeathtype_##name() \
+       float position; \
+       void RegisterDeathtype_##name() \
        { \
-               SET_FIRST_OR_LAST(first, DT_FIRST, DT_COUNT) \
-               SET_FIRST_OR_LAST(last, DT_FIRST, DT_COUNT) \
+               SET_FIRST_OR_LAST(position, DT_FIRST, DT_COUNT) \
                SET_FIELD_COUNT(name, DT_FIRST, DT_COUNT) \
                CHECK_MAX_COUNT(name, DT_MAX, DT_COUNT, "deathtypes") \
-       }
-       ACCUMULATE_FUNCTION(DecDeathtypes, DecDeathtype_##name)
+       } \
+       ACCUMULATE_FUNCTION(RegisterDeathtypes, RegisterDeathtype_##name)
 
 #define DEATHTYPES \
-       DEATHTYPE(DEATH_FALL, FALSE, FALSE, DEATH_SPECIAL_START, FALSE) \
-       DEATHTYPE(DEATH_TELEFRAG, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_DROWN, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_HURTTRIGGER, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_LAVA, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_SLIME, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_KILL, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_NOAMMO, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_SWAMP, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_TEAMCHANGE, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_AUTOTEAMCHANGE, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_CAMP, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_SHOOTING_STAR, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_ROT, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_MIRRORDAMAGE, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_TOUCHEXPLODE, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_CHEAT, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_FIRE, FALSE, FALSE, FALSE, FALSE) \
-       DEATHTYPE(DEATH_QUIET, FALSE, FALSE, FALSE, FALSE) \
-       #undef DEATHTYPE
+       DEATHTYPE(DEATH_FALL,                                   DEATH_SELF_FALL,                                        DEATH_MURDER_FALL,                              DEATH_SPECIAL_START) \
+       DEATHTYPE(DEATH_TELEFRAG,                               NO_MSG,                                                         DEATH_MURDER_TELEFRAG,                  NORMAL_POS) \
+       DEATHTYPE(DEATH_DROWN,                                  DEATH_SELF_DROWN,                                       DEATH_MURDER_DROWN,                     NORMAL_POS) \
+       DEATHTYPE(DEATH_HURTTRIGGER,                    DEATH_SELF_VOID,                                        DEATH_MURDER_VOID,                              NORMAL_POS) \
+       DEATHTYPE(DEATH_LAVA,                                   DEATH_SELF_LAVA,                                        DEATH_MURDER_LAVA,                              NORMAL_POS) \
+       DEATHTYPE(DEATH_SLIME,                                  DEATH_SELF_SLIME,                                       DEATH_MURDER_SLIME,                             NORMAL_POS) \
+       DEATHTYPE(DEATH_KILL,                                   DEATH_SELF_SUICIDE,                             NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_NOAMMO,                                 DEATH_SELF_NOAMMO,                                      NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_SWAMP,                                  DEATH_SELF_SWAMP,                                       DEATH_MURDER_SWAMP,                     NORMAL_POS) \
+       DEATHTYPE(DEATH_TEAMCHANGE,                     DEATH_SELF_TEAMCHANGE,                          NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_AUTOTEAMCHANGE,                 DEATH_SELF_AUTOTEAMCHANGE,                      NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_CAMP,                                   DEATH_SELF_CAMP,                                        NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_SHOOTING_STAR,                  DEATH_SELF_SHOOTING_STAR,                       DEATH_MURDER_SHOOTING_STAR,     NORMAL_POS) \
+       DEATHTYPE(DEATH_ROT,                                    DEATH_SELF_ROT,                                         NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_MIRRORDAMAGE,                   DEATH_SELF_BETRAYAL,                            NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_TOUCHEXPLODE,                   DEATH_SELF_TOUCHEXPLODE,                        DEATH_MURDER_TOUCHEXPLODE,              NORMAL_POS) \
+       DEATHTYPE(DEATH_CHEAT,                                  DEATH_SELF_CHEAT,                                       DEATH_MURDER_CHEAT,                     NORMAL_POS) \
+       DEATHTYPE(DEATH_FIRE,                                   DEATH_SELF_FIRE,                                        DEATH_MURDER_FIRE,                              NORMAL_POS) \
+       DEATHTYPE(DEATH_VH_CRUSH,                               DEATH_SELF_VH_CRUSH,                            DEATH_MURDER_VH_CRUSH,                  DEATH_VHFIRST) \
+       DEATHTYPE(DEATH_VH_SPID_MINIGUN,                NO_MSG,                                                         DEATH_MURDER_VH_SPID_MINIGUN,   NORMAL_POS) \
+       DEATHTYPE(DEATH_VH_SPID_ROCKET,                 DEATH_SELF_VH_SPID_ROCKET,                      DEATH_MURDER_VH_SPID_ROCKET,    NORMAL_POS) \
+       DEATHTYPE(DEATH_VH_SPID_DEATH,                  DEATH_SELF_VH_SPID_DEATH,                       DEATH_MURDER_VH_SPID_DEATH,             NORMAL_POS) \
+       DEATHTYPE(DEATH_VH_WAKI_GUN,                    NO_MSG,                                                         DEATH_MURDER_VH_WAKI_GUN,               NORMAL_POS) \
+       DEATHTYPE(DEATH_VH_WAKI_ROCKET,                 DEATH_SELF_VH_WAKI_ROCKET,                      DEATH_MURDER_VH_WAKI_ROCKET,    NORMAL_POS) \
+       DEATHTYPE(DEATH_VH_WAKI_DEATH,                  DEATH_SELF_VH_WAKI_DEATH,                       DEATH_MURDER_VH_WAKI_DEATH,             NORMAL_POS) \
+       DEATHTYPE(DEATH_VH_RAPT_CANNON,                 NO_MSG,                                                         DEATH_MURDER_VH_RAPT_CANNON,    NORMAL_POS) \
+       DEATHTYPE(DEATH_VH_RAPT_BOMB,                   DEATH_SELF_VH_RAPT_BOMB,                        DEATH_MURDER_VH_RAPT_BOMB,              NORMAL_POS) \
+       DEATHTYPE(DEATH_VH_RAPT_FRAGMENT,               DEATH_SELF_VH_RAPT_BOMB,                        DEATH_MURDER_VH_RAPT_BOMB,              NORMAL_POS) \
+       DEATHTYPE(DEATH_VH_RAPT_DEATH,                  DEATH_SELF_VH_RAPT_DEATH,                       DEATH_MURDER_VH_RAPT_DEATH,             NORMAL_POS) \
+       DEATHTYPE(DEATH_VH_BUMB_GUN,                    NO_MSG,                                                         DEATH_MURDER_VH_BUMB_GUN,               NORMAL_POS) \
+       DEATHTYPE(DEATH_VH_BUMB_DEATH,                  DEATH_SELF_VH_BUMB_DEATH,                       DEATH_MURDER_VH_BUMB_DEATH,             DEATH_VHLAST) \
+       DEATHTYPE(DEATH_TURRET,                                 DEATH_SELF_TURRET,                                      NO_MSG,                                                 DEATH_TURRET_FIRST) \
+       DEATHTYPE(DEATH_TURRET_EWHEEL,                  DEATH_SELF_TURRET_EWHEEL,                       NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_TURRET_FLAC,                    DEATH_SELF_TURRET_FLAC,                         NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_TURRET_MACHINEGUN,              DEATH_SELF_TURRET_MACHINEGUN,           NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_TURRET_WALK_GUN,                DEATH_SELF_TURRET_WALK_GUN,                     NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_TURRET_WALK_MEELE,              DEATH_SELF_TURRET_WALK_MEELE,           NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_TURRET_WALK_ROCKET,             DEATH_SELF_TURRET_WALK_ROCKET,          NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_TURRET_HELLION,                 DEATH_SELF_TURRET_HELLION,                      NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_TURRET_HK,                              DEATH_SELF_TURRET_HK,                           NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_TURRET_MLRS,                    DEATH_SELF_TURRET_MLRS,                         NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_TURRET_PLASMA,                  DEATH_SELF_TURRET_PLASMA,                       NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_TURRET_PHASER,                  DEATH_SELF_TURRET_PHASER,                       NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_TURRET_TESLA,                   DEATH_SELF_TURRET_TESLA,                        NO_MSG,                                                 DEATH_TURRET_LAST) \
+       DEATHTYPE(DEATH_GENERIC,                                DEATH_SELF_GENERIC,                             NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_WEAPON,                                 NO_MSG,                                                         NO_MSG,                                                 NORMAL_POS) \
+       DEATHTYPE(DEATH_CUSTOM,                                 DEATH_SELF_CUSTOM,                                      NO_MSG,                                                 NORMAL_POS)
 
 DEATHTYPES
+#undef DEATHTYPE
+
+#define DEATH_ISSPECIAL(t)                             ((t) >= DEATH_SPECIAL_START)
+#define DEATH_ISVEHICLE(t)                             ((t) >= DEATH_VHFIRST && (t) <= DEATH_VHLAST)
+#define DEATH_ISTURRET(t)                              ((t) >= DEATH_TURRET_FIRST && (t) <= DEATH_TURRET_LAST)
+#define DEATH_WEAPONOFWEAPONDEATH(t)   ((t) & DEATH_WEAPONMASK)
+#define DEATH_ISWEAPON(t,w)                            (!DEATH_ISSPECIAL(t) && DEATH_WEAPONOFWEAPONDEATH(t) == (w))
+#define DEATH_WEAPONOF(t)                              (DEATH_ISSPECIAL(t) ? 0 : DEATH_WEAPONOFWEAPONDEATH(t))
+#define WEP_VALID(w)                                   ((w) >= WEP_FIRST && (w) <= WEP_LAST)
+
+string Deathtype_Name(float deathtype)
+{
+       if(DEATH_ISSPECIAL(deathtype))
+       {
+               #define DEATHTYPE(name,msg_death,msg_death_by,position) \
+                       { if(deathtype == max(0, name)) return VAR_TO_TEXT(name); }
 
-float  DEATH_VHCRUSH       = 10030;
-float  DEATH_SBMINIGUN     = 10031;
-float  DEATH_SBROCKET      = 10032;
-float  DEATH_SBBLOWUP      = 10033;
-float  DEATH_WAKIGUN       = 10034;
-float  DEATH_WAKIROCKET    = 10035;
-float  DEATH_WAKIBLOWUP    = 10036;
-float  DEATH_RAPTOR_CANNON = 10037;
-float  DEATH_RAPTOR_BOMB   = 10038;
-float  DEATH_RAPTOR_BOMB_SPLIT = 10039;
-float  DEATH_RAPTOR_DEATH   = 10040;
-float  DEATH_BUMB_GUN       = 10041;
-float  DEATH_BUMB_RAY       = 10042;
-float  DEATH_BUMB_RAY_HEAL  = 10043;
-float  DEATH_BUMB_DEATH     = 10044;
-#define DEATH_ISVEHICLE(t)  ((t) >= DEATH_VHFIRST && (t) <= DEATH_VHLAST)
-
-float DEATH_GENERIC = 10050;
-
-float DEATH_WEAPON = 10100;
-
-float DEATH_CUSTOM = 10300;
-
-float DEATH_TURRET                  = 10500;
-float DEATH_TURRET_EWHEEL           = 10501;
-float DEATH_TURRET_FLAC             = 10502;
-float DEATH_TURRET_MACHINEGUN       = 10503;
-float DEATH_TURRET_WALKER_GUN       = 10504;
-float DEATH_TURRET_WALKER_MEELE     = 10505;
-float DEATH_TURRET_WALKER_ROCKET    = 10506;
-float DEATH_TURRET_HELLION          = 10507;
-float DEATH_TURRET_HK               = 10508;
-float DEATH_TURRET_MLRS             = 10509;
-float DEATH_TURRET_PLASMA           = 10510;
-float DEATH_TURRET_PHASER           = 10511;
-float DEATH_TURRET_TESLA            = 10512;
-float DEATH_TURRET_LAST            = 10512;
+               DEATHTYPES
+               #undef DEATHTYPE
+       }
+       return "foobar";
+}
 
 float DEATH_WEAPONMASK = 0xFF;
 float DEATH_HITTYPEMASK = 0x1F00; // which is WAY below 10000 used for normal deaths
 float HITTYPE_SECONDARY = 0x100;
 float HITTYPE_SPLASH = 0x200; // automatically set by RadiusDamage
 float HITTYPE_BOUNCE = 0x400;
-float HITTYPE_HEADSHOT = 0x800; // automatically set by Damage (if headshotbonus is set)
+float HITTYPE_RESERVED2 = 0x800;
 float HITTYPE_RESERVED = 0x1000; // unused yet
-
-// macros to access these
-#define DEATH_ISTURRET(t)            ((t) >= DEATH_TURRET && (t) <= DEATH_TURRET_LAST)
-#define DEATH_ISSPECIAL(t)            ((t) >= DEATH_SPECIAL_START)
-#define DEATH_WEAPONOFWEAPONDEATH(t)  ((t) & DEATH_WEAPONMASK)
-#define DEATH_ISWEAPON(t,w)           (!DEATH_ISSPECIAL(t) && DEATH_WEAPONOFWEAPONDEATH(t) == (w))
-#define DEATH_WEAPONOF(t)             (DEATH_ISSPECIAL(t) ? 0 : DEATH_WEAPONOFWEAPONDEATH(t))
-#define WEP_VALID(w)                  ((w) >= WEP_FIRST && (w) <= WEP_LAST)
-
-// CSQC centerprint/notify message types
-float MSG_SUICIDE = 0;
-float MSG_KILL = 1;
-float MSG_SPREE = 2;
-float MSG_KILL_ACTION = 3;
-float MSG_KILL_ACTION_SPREE = 4;
-float MSG_INFO = 5;
-float MSG_KA = 6;
-float MSG_RACE = 10;
-
-float KILL_TEAM_RED = 12001;
-float KILL_TEAM_BLUE = 12002;
-float KILL_TEAM_SPREE = 12003;
-float KILL_FIRST_BLOOD = 12004;
-float KILL_FIRST_VICTIM = 12005;
-float KILL_TYPEFRAG = 12006;
-float KILL_TYPEFRAGGED = 12007;
-float KILL_FRAG = 12008;
-float KILL_FRAGGED = 12009;
-float KILL_SPREE = 12010;
-float KILL_END_SPREE = 12011;
-float KILL_SPREE_3 = 12012;
-float KILL_SPREE_5 = 12013;
-float KILL_SPREE_10 = 12014;
-float KILL_SPREE_15 = 12015;
-float KILL_SPREE_20 = 12016;
-float KILL_SPREE_25 = 12017;
-float KILL_SPREE_30 = 12018;
-
-float INFO_GOTFLAG = 13001;
-float INFO_PICKUPFLAG = 13002;
-float INFO_LOSTFLAG = 13003;
-float INFO_RETURNFLAG = 13004;
-float INFO_CAPTUREFLAG = 13005;
-
-float KA_PICKUPBALL = 14001;
-float KA_DROPBALL = 14002;
-
-float RACE_SERVER_RECORD = 15001;
-float RACE_NEW_TIME = 15002;
-float RACE_NEW_RANK = 15003;
-float RACE_FAIL = 15004;
-
-       /*print("Obituary_Notification(): ", ftos(deathtype), ".\n");
-       switch(deathtype)
-       {
-               // suicide
-               case DEATH_AUTOTEAMCHANGE:
-               case DEATH_CAMP:
-               case DEATH_NOAMMO:
-               case DEATH_ROT:
-               case DEATH_TEAMCHANGE:
-               
-               case KILL_TEAM_SUICIDE_RED:
-               case KILL_TEAM_SUICIDE_BLUE:
-
-               // murder
-               case KILL_TEAM_FRAG_RED:
-               case KILL_TEAM_FRAG_BLUE:
-
-               case KILL_FIRST_BLOOD:
-               case KILL_FIRST_VICTIM:
-               
-               case KILL_FRAG:
-               case KILL_TYPEFRAG:
-               case KILL_FRAGGED:
-               case KILL_TYPEFRAGGED:
-
-               // accident
-               case WATCH_STEP: 
-               
-               case DEATH_QUIET: break;
-
-               // ideally we should have ALL deathtypes listed here
-               default:
-                       backtrace(strcat("Unhandled deathtype: ", ftos(deathtype), ". Please notify Samual!\n"));
-                       break;
-       }*/