]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/notifications.qh
Merge MSG_WEAPON and MSG_DEATH to be MSG_MULTI
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / notifications.qh
index b3591a4108e1e5a771493fdb91b0d26030c849c9..11f731af13eb4d4769b9cfdb3046bb58c74a09d9 100644 (file)
@@ -6,8 +6,8 @@
 // main types/groups of notifications
 #define MSG_INFO 1 // "Global" information messages (sent to console, and notify panel if it has an icon)
 #define MSG_CENTER 2 // "Personal" centerprint messages
-#define MSG_WEAPON 3 // "Personal" weapon messages (like "You got the Nex", sent to weapon notify panel)
-#define MSG_DEATH 4 // "Personal" AND "Global" death messages 
+#define MSG_CENTER_KILL 3 // Kill centerprint message
+#define MSG_MULTI 4 // Subcall MSG_INFO and/or MSG_CENTER notifications
 
 #define NO_MSG -12345 
 
        VARITEM(3, 4, XPD(s1, s2, s3, f1, f2, f3, f4)) \
        VARITEM(4, 4, XPD(s1, s2, s3, s4, f1, f2, f3, f4))
 
+void Destroy_All_Notifications(void);
+void Create_Notification_Entity(
+       float var_default,
+       float var_cvar,
+       float typeid,
+       float nameid,
+       string namestring,
+       float infoname,
+       float centername,
+       float strnum,
+       float flnum,
+       string args,
+       string hudargs,
+       string icon,
+       float cpid,
+       string durcnt,
+       string normal,
+       string gentle,
+       float msg_is_info,
+       float msg_is_multi);
+
 void Dump_Notifications(float fh, float alsoprint);
+
 void Local_Notification(float net_type, float net_name, ...count);
-void Local_Notification_WOVA(float net_type, float net_name, float stringcount, float floatcount, string s1, string s2, string s3, string s4, float f1, float f2, float f3, float f4);
+void Local_Notification_WOVA(
+       float net_type, float net_name,
+       float stringcount, float floatcount,
+       string s1, string s2, string s3, string s4,
+       float f1, float f2, float f3, float f4);
 
 #ifdef CSQC // CLIENT ONLY
 void Read_Notification(float is_new);
@@ -56,10 +82,23 @@ void Read_Notification(float is_new);
 #define IFSTR(num) ((num < notif.nent_stringcount) ? ...(num, string) : "")
 #define IFFL(num) ((((notif.nent_stringcount-1) + num) < count) ? ...(((notif.nent_stringcount-1) + num), float) : 0)
 
-void Send_Notification(float broadcast, entity client, float net_type, float net_name, ...count);
-void Send_Notification_WOVA(float broadcast, entity client, float net_type, float net_name, string s1, string s2, string s3, string s4, float f1, float f2, float f3, float f4);
+void Kill_Notification(
+       float broadcast, entity client,
+       float net_type, float net_name);
+void Send_Notification(
+       float broadcast, entity client,
+       float net_type, float net_name,
+       ...count);
+void Send_Notification_WOVA(
+       float broadcast, entity client,
+       float net_type, float net_name,
+       string s1, string s2, string s3, string s4,
+       float f1, float f2, float f3, float f4);
+
+// legacy stuff
 void Send_CSQC_Centerprint_Generic(entity e, float id, string s, float duration, float countdown_num);
 #define Send_CSQC_Centerprint_Generic_Expire(e,id) Send_CSQC_Centerprint_Generic(e, id, "", 1, 0)
+float CPID_KH_MSG = 10;
 #endif
 
 
@@ -92,8 +131,7 @@ void Send_CSQC_Centerprint_Generic(entity e, float id, string s, float duration,
       durcnt: XPD(FLOAT, FLOAT): Duration/Countdown: extra arguments for centerprint messages
       normal: STRING: Normal message (string for sprintf when gentle messages are NOT enabled)
       gentle: STRING: Gentle message (string for sprintf when gentle messages ARE enabled)
-    MSG_WEAPON:
-    MSG_DEATH:
+    MSG_MULTI:
       default: FLOAT: Default setting for whether the notification is enabled or not
          ^-> 0 = disabled, 1 = enabled
       name: VAR: Name of chaining notification
@@ -160,46 +198,46 @@ void Send_CSQC_Centerprint_Generic(entity e, float id, string s, float duration,
        MULTITEAM_INFO(1, INFO_CTF_CAPTURE_BROKEN_, 2,                  2, 2, "s1 f1p2dec s2 f2p2dec", "s1",    "notify_%s_captured",   _("^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG%s^BG's previous record of ^F2%s^BG seconds\n"), "") \
        MULTITEAM_INFO(1, INFO_CTF_CAPTURE_UNBROKEN_, 2,                2, 2, "s1 f1p2dec s2 f2p2dec", "s1",    "notify_%s_captured",   _("^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break ^BG%s^BG's previous record of ^F1%s^BG seconds\n"), "") \
        MULTITEAM_INFO(1, INFO_DEATH_TEAMKILL_, 4,                              3, 1, "s1 s2 s3loc spree_end", "s2 s1", "notify_teamkill_%s",   _("^BG%s^K1 was betrayed by ^BG%s^K1%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CUSTOM,                               3, 1, "s1 s2 s3loc spree_lost", "s1",           "notify_void",                  _("^BG%s^K1 %s^K1%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_GENERIC,                              2, 1, "s1 s2loc spree_lost", "s1",                      "notify_selfkill",              _("^BG%s^K1 died%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VOID,                                 2, 1, "s1 s2loc spree_lost", "s1",                      "notify_void",                  _("^BG%s^K1 was in the wrong place%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SUICIDE,                              2, 1, "s1 s2loc spree_lost", "s1",                      "notify_selfkill",              _("^BG%s^K1 couldn't take it anymore%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NOAMMO,                               2, 1, "s1 s2loc spree_lost", "s1",                      "notify_outofammo",             _("^BG%s^K1 died%s%s. What's the point of living without ammo?\n"), _("^BG%s^K1 ran out of ammo%s%s\n")) \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_ROT,                                  2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 rotted away%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CAMP,                                 2, 1, "s1 s2loc spree_lost", "s1",                      "notify_camping",               _("^BG%s^K1 thought they found a nice camping ground%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_BETRAYAL,                             2, 1, "s1 s2loc spree_lost", "s1",                      "notify_teamkill_red",  _("^BG%s^K1 became enemies with the Lord of Teamplay%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TEAMCHANGE,                   2, 1, "s1 s2loc death_team", "",                        "",                                             _("^BG%s^K1 switched to the %s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_AUTOTEAMCHANGE,               2, 1, "s1 s2loc death_team", "",                        "",                                             _("^BG%s^K1 was moved into the %s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_FALL,                                 2, 1, "s1 s2loc spree_lost", "s1",                      "notify_fall",                  _("^BG%s^K1 hit the ground with a crunch%s%s\n"), _("^BG%s^K1 hit the ground with a bit too much force%s%s\n")) \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_DROWN,                                2, 1, "s1 s2loc spree_lost", "s1",                      "notify_water",                 _("^BG%s^K1 couldn't catch their breath%s%s\n"), _("^BG%s^K1 was in the water for too long%s%s\n")) \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_FIRE,                                 2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 became a bit too crispy%s%s\n"), _("^BG%s^K1 felt a little hot%s%s\n")) \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_LAVA,                                 2, 1, "s1 s2loc spree_lost", "s1",                      "notify_lava",                  _("^BG%s^K1 turned into hot slag%s%s\n"), _("^BG%s^K1 found a hot place%s%s\n")) \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SLIME,                                2, 1, "s1 s2loc spree_lost", "s1",                      "notify_slime",                 _("^BG%s^K1 was slimed%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SHOOTING_STAR,                2, 1, "s1 s2loc spree_lost", "s1",                      "notify_shootingstar",  _("^BG%s^K1 became a shooting star%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SWAMP,                                2, 1, "s1 s2loc spree_lost", "s1",                      "notify_slime",                 _("^BG%s^K1 is now preserved for centuries to come%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CHEAT,                                2, 1, "s1 s2loc spree_lost", "s1",                      "notify_selfkill",              _("^BG%s^K1 unfairly eliminated themself%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TOUCHEXPLODE,                 2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 died in an accident%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET,                               2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 ran into a turret%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_EWHEEL,                2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 was blasted away by an eWheel turret%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_FLAC,                  2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 got caught up in the FLAC turret fire%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_MACHINEGUN,    2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_GUN,              2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 got served a lead enrichment by a Walker turret%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_MEELE,    2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 was impaled by a Walker turret%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_ROCKET,   2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 was blasted away by a Walker turret%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_HELLION,               2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 was blasted away by a Hellion turret%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_HK,                    2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 could not hide from the Hunter turret%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_MLRS,                  2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_PLASMA,                2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 got served some superheated plasma from a turret%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_PHASER,                2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 was phased out by a turret%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_TESLA,                 2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 was electrocuted by a Tesla turret%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_CRUSH,                             2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 was crushed by a vehicle%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_SPID_ROCKET,               2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_SPID_DEATH,                2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_WAKI_ROCKET,               2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 couldn't find shelter from a Racer rocket%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_WAKI_DEATH,                2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 got caught in the blast of a Racer explosion%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_RAPT_BOMB,                 2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 was caught in a Raptor cluster bomb%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_RAPT_DEATH,                2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 got caught in the blast of a Raptor explosion%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_BUMB_DEATH,                2, 1, "s1 s2loc spree_lost", "s1",                      "notify_death",                 _("^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CUSTOM,                               3, 1, "s1 s2 s3loc spree_lost", "s1",   "notify_void",                  _("^BG%s^K1 %s^K1%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_GENERIC,                              2, 1, "s1 s2loc spree_lost", "s1",              "notify_selfkill",              _("^BG%s^K1 died%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VOID,                                 2, 1, "s1 s2loc spree_lost", "s1",              "notify_void",                  _("^BG%s^K1 was in the wrong place%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SUICIDE,                              2, 1, "s1 s2loc spree_lost", "s1",              "notify_selfkill",              _("^BG%s^K1 couldn't take it anymore%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NOAMMO,                               2, 1, "s1 s2loc spree_lost", "s1",              "notify_outofammo",             _("^BG%s^K1 died%s%s. What's the point of living without ammo?\n"), _("^BG%s^K1 ran out of ammo%s%s\n")) \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_ROT,                                  2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 rotted away%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CAMP,                                 2, 1, "s1 s2loc spree_lost", "s1",              "notify_camping",               _("^BG%s^K1 thought they found a nice camping ground%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_BETRAYAL,                             2, 1, "s1 s2loc spree_lost", "s1",              "notify_teamkill_red",  _("^BG%s^K1 became enemies with the Lord of Teamplay%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TEAMCHANGE,                   2, 1, "s1 s2loc death_team", "",                "",                                             _("^BG%s^K1 switched to the %s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_AUTOTEAMCHANGE,               2, 1, "s1 s2loc death_team", "",                "",                                             _("^BG%s^K1 was moved into the %s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_FALL,                                 2, 1, "s1 s2loc spree_lost", "s1",              "notify_fall",                  _("^BG%s^K1 hit the ground with a crunch%s%s\n"), _("^BG%s^K1 hit the ground with a bit too much force%s%s\n")) \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_DROWN,                                2, 1, "s1 s2loc spree_lost", "s1",              "notify_water",                 _("^BG%s^K1 couldn't catch their breath%s%s\n"), _("^BG%s^K1 was in the water for too long%s%s\n")) \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_FIRE,                                 2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 became a bit too crispy%s%s\n"), _("^BG%s^K1 felt a little hot%s%s\n")) \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_LAVA,                                 2, 1, "s1 s2loc spree_lost", "s1",              "notify_lava",                  _("^BG%s^K1 turned into hot slag%s%s\n"), _("^BG%s^K1 found a hot place%s%s\n")) \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SLIME,                                2, 1, "s1 s2loc spree_lost", "s1",              "notify_slime",                 _("^BG%s^K1 was slimed%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SHOOTING_STAR,                2, 1, "s1 s2loc spree_lost", "s1",              "notify_shootingstar",  _("^BG%s^K1 became a shooting star%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SWAMP,                                2, 1, "s1 s2loc spree_lost", "s1",              "notify_slime",                 _("^BG%s^K1 is now preserved for centuries to come%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_CHEAT,                                2, 1, "s1 s2loc spree_lost", "s1",              "notify_selfkill",              _("^BG%s^K1 unfairly eliminated themself%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TOUCHEXPLODE,                 2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 died in an accident%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET,                               2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 ran into a turret%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_EWHEEL,                2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 was blasted away by an eWheel turret%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_FLAC,                  2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 got caught up in the FLAC turret fire%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_MACHINEGUN,    2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_GUN,              2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 got served a lead enrichment by a Walker turret%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_MEELE,    2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 was impaled by a Walker turret%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_ROCKET,   2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 was blasted away by a Walker turret%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_HELLION,               2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 was blasted away by a Hellion turret%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_HK,                    2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 could not hide from the Hunter turret%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_MLRS,                  2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_PLASMA,                2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 got served some superheated plasma from a turret%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_PHASER,                2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 was phased out by a turret%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_TESLA,                 2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 was electrocuted by a Tesla turret%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_CRUSH,                             2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 was crushed by a vehicle%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_SPID_ROCKET,               2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_SPID_DEATH,                2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_WAKI_ROCKET,               2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 couldn't find shelter from a Racer rocket%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_WAKI_DEATH,                2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 got caught in the blast of a Racer explosion%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_RAPT_BOMB,                 2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 was caught in a Raptor cluster bomb%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_RAPT_DEATH,                2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 got caught in the blast of a Raptor explosion%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_BUMB_DEATH,                2, 1, "s1 s2loc spree_lost", "s1",              "notify_death",                 _("^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_TELEFRAG,                   3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",               "notify_telefrag",              _("^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s\n"), _("^BG%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s\n")) \
        MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_FALL,                               3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",               "notify_fall",                  _("^BG%s%s^K1 was grounded by ^BG%s^K1%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_DROWN,                              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",               "notify_water",                 _("^BG%s%s^K1 was drowned by ^BG%s^K1%s%s\n"), "") \
@@ -220,7 +258,6 @@ void Send_CSQC_Centerprint_Generic(entity e, float id, string s, float duration,
        MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_WAKI_DEATH,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",               "notify_death",                 _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_RAPT_CANNON,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",               "notify_death",                 _("^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_RAPT_BOMB,               3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",               "notify_death",                 _("^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_RAPT_FRAGMENT,   3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",               "notify_death",                 _("^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_RAPT_DEATH,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",               "notify_death",                 _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_BUMB_GUN,                3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",               "notify_death",                 _("^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_VH_BUMB_DEATH,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",               "notify_death",                 _("^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s\n"), "") \
@@ -234,17 +271,18 @@ void Send_CSQC_Centerprint_Generic(entity e, float id, string s, float duration,
        MSG_INFO_NOTIF(2, INFO_JOIN_PLAY,                                               1, 0, "s1", "",                                                 "",                                             _("^BG%s^F3 is now playing\n"), "") \
        MSG_INFO_NOTIF(1, INFO_KEEPAWAY_DROPPED,                                1, 0, "s1", "s1",                                               "notify_balldropped",   _("^BG%s^BG has dropped the ball!\n"), "") \
        MSG_INFO_NOTIF(1, INFO_KEEPAWAY_PICKUP,                                 1, 0, "s1", "s1",                                               "notify_ballpickedup",  _("^BG%s^BG has picked up the ball!\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_LMS_NOLIVES,                                             1, 0, "s1", "s1",                                               "",                                             _("^BG%s^F3 has no more lives left\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_LMS_FORFEIT,                                             1, 0, "s1", "s1",                                               "",                                             _("^BG%s^F3 forfeited\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_LMS_NOLIVES,                                             1, 0, "s1", "",                                                 "",                                             _("^BG%s^F3 has no more lives left\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_LMS_FORFEIT,                                             1, 0, "s1", "",                                                 "",                                             _("^BG%s^F3 forfeited\n"), "") \
        MSG_INFO_NOTIF(1, INFO_POWERUP_INVISIBILITY,                    1, 0, "s1", "s1",                                               "strength",                             _("^BG%s^K1 picked up Invisibility\n"), "") \
        MSG_INFO_NOTIF(1, INFO_POWERUP_SHIELD,                                  1, 0, "s1", "s1",                                               "shield",                               _("^BG%s^K1 picked up Shield\n"), "") \
        MSG_INFO_NOTIF(1, INFO_POWERUP_SPEED,                                   1, 0, "s1", "s1",                                               "shield",                               _("^BG%s^K1 picked up Speed\n"), "") \
        MSG_INFO_NOTIF(1, INFO_POWERUP_STRENGTH,                                1, 0, "s1", "s1",                                               "strength",                             _("^BG%s^K1 picked up Strength\n"), "") \
-       MSG_INFO_NOTIF(2, INFO_QUIT_DISCONNECT,                                 1, 0, "s1", "s1",                                               "",                                             _("^BG%s^F3 disconnected\n"), "") \
-       MSG_INFO_NOTIF(2, INFO_QUIT_KICK_IDLING,                                1, 0, "s1", "s1",                                               "",                                             _("^BG%s^F3 was kicked for idling\n"), "") \
+       MSG_INFO_NOTIF(2, INFO_QUIT_DISCONNECT,                                 1, 0, "s1", "",                                                 "",                                             _("^BG%s^F3 disconnected\n"), "") \
+       MSG_INFO_NOTIF(2, INFO_QUIT_KICK_IDLING,                                1, 0, "s1", "",                                                 "",                                             _("^BG%s^F3 was kicked for idling\n"), "") \
        MSG_INFO_NOTIF(1, INFO_QUIT_KICK_SPECTATING,                    0, 0, "", "",                                                   "",                                             _("^F2You were kicked from the server because you are a spectator and spectators aren't allowed at the moment.\n"), "") \
-       MSG_INFO_NOTIF(2, INFO_QUIT_SPECTATE,                                   1, 0, "s1", "s1",                                               "",                                             _("^BG%s^F3 is now spectating\n"), "") \
-       MSG_INFO_NOTIF(1, INFO_RACE_FAIL,                                               2, 0, "s1 s2", "s1",                                    "race_newfail",                 "TODO\n", "") \
+       MSG_INFO_NOTIF(2, INFO_QUIT_SPECTATE,                                   1, 0, "s1", "",                                                 "",                                             _("^BG%s^F3 is now spectating\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_RACE_FAIL_RANKED,                                1, 3, "s1 f1ord race_time race_diff", "s1",             "race_newfail", _("^BG%s^BG couldn't break their %s place record of %s %s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_RACE_FAIL_UNRANKED,                              1, 3, "s1 f1ord race_time race_diff", "s1",             "race_newfail", _("^BG%s^BG couldn't break the %s place record of %s %s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_RACE_NEW_RECORD,                                 2, 0, "s1 s2", "s1",                                    "race_newrecordserver", "TODO\n", "") \
        MSG_INFO_NOTIF(1, INFO_RACE_NEW_TIME,                                   2, 0, "s1 s2", "s1",                                    "race_newtime",                 "TODO\n", "") \
        MSG_INFO_NOTIF(1, INFO_RACE_NEW_RANK,                                   2, 0, "s1 s2", "s1",                                    "race_newrankyellow",   "TODO\n", "") \
@@ -255,6 +293,8 @@ void Send_CSQC_Centerprint_Generic(entity e, float id, string s, float duration,
        MSG_INFO_NOTIF(2, INFO_VERSION_OLD,                                             2, 0, "s1 s2", "",                                              "",                                             _("^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s\n"), "") \
        MSG_INFO_NOTIF(2, INFO_VERSION_OUTDATED,                                2, 0, "s1 s2", "",                                              "",                                             _("^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get the update from ^F3http://www.xonotic.org/^BG!\n"), "") \
        MSG_INFO_NOTIF(1, INFO_WATERMARK,                                               1, 0, "s1", "",                                                 "",                                             _("^F3SVQC Build information: ^F4%s\n"), "") \
+       MSG_INFO_NOTIF(0, INFO_WEAPON_GOTWEP,                                   0, 1, "item_wepname", "",                               "",                                     _("^BGYou got the ^F1%s\n"), "") \
+       MSG_INFO_NOTIF(0, INFO_WEAPON_DROPPED,                                  1, 1, "item_wepname item_wepammo", "",  "",                                     _("^BGYou dropped the ^F1%s^BG%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_WEAPON_THINKING_WITH_PORTALS,                    2, 1, "s1 s2loc spree_lost", "s1",                                      "notify_selfkill",                      _("^BG%s^K1 is now thinking with portals%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_WEAPON_CRYLINK_SUICIDE,                                  2, 1, "s1 s2loc spree_lost", "s1",                                      "weaponcrylink",                        _("^BG%s^K1 felt the strong pull of their Crylink%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_WEAPON_CRYLINK_MURDER,                                   3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",       "weaponcrylink",                        _("^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s\n"), "") \
@@ -318,6 +358,11 @@ void Send_CSQC_Centerprint_Generic(entity e, float id, string s, float duration,
        /*MSG_CENTER_NOTIF(1, CENTER_EMPTY,                                                     0, 0, "",                               NO_CPID,                                "0 0", "null", "")*/ \
        MSG_CENTER_NOTIF(1, CENTER_ASSAULT_ATTACKING,                           0, 0, "",                               CPID_ASSAULT_ROLE,              "0 0", _("^BGYou are attacking!"), "") \
        MSG_CENTER_NOTIF(1, CENTER_ASSAULT_DEFENDING,                           0, 0, "",                               CPID_ASSAULT_ROLE,              "0 0", _("^BGYou are defending!"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_ARENA_BEGIN,                                         0, 0, "",                               CPID_ARENA,                             "2 0", _("^F4Begin!"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_ARENA_NEEDPLAYER,                            0, 0, "",                               CPID_ARENA,                             "2 0", _("^BGNeed at least 1 player in each team to play Clan Arena!"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_ARENA_ROUNDSTART,                            0, 1, "",                               CPID_ARENA,                     "1 f1", _("^F4Round will start in ^COUNT"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_BEGIN,                                     0, 0, "",                               CPID_GAMESTART,                 "2 0", _("^F4Begin!"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_GAMESTART,                         0, 1, "",                               CPID_GAMESTART,                 "1 f1", _("^F4Game starts in ^COUNT"), "") \
        MSG_CENTER_NOTIF(1, CENTER_CTF_CAPTURESHIELD_SHIELDED,          0, 0, "",                               CPID_CTF_CAPSHIELD,             "0 0", _("^BGYou are now ^F1shielded^BG from the flag\n^BGfor ^F2too many unsuccessful attempts^BG to capture.\n^BGMake some defensive scores before trying again."), "") \
        MSG_CENTER_NOTIF(1, CENTER_CTF_CAPTURESHIELD_FREE,                      0, 0, "",                               CPID_CTF_CAPSHIELD,             "0 0", _("^BGYou are now free.\n^BGFeel free to ^F2try to capture^BG the flag again\n^BGif you think you will succeed."), "") \
        MULTITEAM_CENTER(1, CENTER_CTF_PASS_OTHER_, 2,                          2, 0, "s1 s2",                  CPID_CTF_PASS,                  "0 0", _("^BG%s^BG passed the ^TC^TT^BG flag to %s"), "") \
@@ -386,10 +431,15 @@ void Send_CSQC_Centerprint_Generic(entity e, float id, string s, float duration,
        MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_DROPPED,                            1, 0, "s1",                     CPID_KEEPAWAY,                  "0 0", _("^BG%s^BG has dropped the ball!"), "") \
        MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_PICKUP,                                     1, 0, "s1",                     CPID_KEEPAWAY,                  "0 0", _("^BG%s^BG has picked up the ball!"), "") \
        MSG_CENTER_NOTIF(1, CENTER_KEEPAWAY_WARN,                                       0, 0, "",                               CPID_KA_WARN,                   "0 0", _("^BGKilling people while you don't have the ball gives no points!"), "") \
-       MSG_CENTER_NOTIF(1, CENTER_LMS_CAMPCHECK,                                       0, 0, "",                               CPID_LMS_CAMP,                  "0 0", _("^K1Don't camp!"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_LMS_CAMPCHECK,                                       0, 0, "",                               CPID_LMS_CAMP,                  "0 0", _("^F2Don't camp!"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_MOTD,                                                        1, 0, "s1",                             CPID_MOTD,                              "-1 0", _("^BG%s"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_MINSTA_FINDAMMO,                                     0, 0, "",                               CPID_MINSTA_FINDAMMO,   "1 9", _("^F4^COUNT^BG left to find some ammo!"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_MINSTA_FINDAMMO_FIRST,                       0, 0, "",                               CPID_MINSTA_FINDAMMO,   "1 10", _("^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"), _("Get some ammo! ^F4^COUNT^BG left!")) \
+       MSG_CENTER_NOTIF(1, CENTER_NIX_COUNTDOWN,                                       0, 2, "item_wepname",   CPID_NIX,                               "1 f2", _("^F2^COUNT^BG until weapon change...\nNext weapon: ^F1%s"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_NIX_NEWWEAPON,                                       0, 1, "item_wepname",   CPID_NIX,                               "0 0", _("^F2Active weapon: ^F1%s"), "") \
        MSG_CENTER_NOTIF(1, CENTER_JOIN_NOSPAWNS,                                       0, 0, "",                               CPID_PREVENT_JOIN,              "0 0", _("^K1No spawnpoints available!\nHope your team can fix it..."), "") \
        MSG_CENTER_NOTIF(1, CENTER_JOIN_PREVENT,                                        0, 0, "",                               CPID_PREVENT_JOIN,              "0 0", _("^K1You may not join the game at this time.\nThe player limit reached maximum capacity."), "") \
-       MSG_CENTER_NOTIF(1, CENTER_OVERTIME_TIME,                                       0, 1, "f1",                             CPID_OVERTIME,                  "0 0", _("^F2Now playing ^F4OVERTIME^F2!\nAdded ^F4%s ^F2minute(s) to the game!"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_OVERTIME_TIME,                                       0, 1, "f1time",                 CPID_OVERTIME,                  "0 0", _("^F2Now playing ^F4OVERTIME^F2!\nAdded ^F4%s ^F2minute(s) to the game!"), "") \
        MSG_CENTER_NOTIF(1, CENTER_OVERTIME_FRAG,                                       0, 0, "",                               CPID_OVERTIME,                  "0 0", _("^F2Now playing ^F4OVERTIME^F2!\nKeep fragging until we have a winner!"), _("^F2Now playing ^F4OVERTIME^F2!\nKeep scoring until we have a winner!")) \
        MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_INVISIBILITY,                      0, 0, "",                               CPID_POWERUP,                   "0 0", _("^F2Invisibility has worn off"), "") \
        MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_SHIELD,                            0, 0, "",                               CPID_POWERUP,                   "0 0", _("^F2Shield has worn off"), "") \
@@ -406,125 +456,128 @@ void Send_CSQC_Centerprint_Generic(entity e, float id, string s, float duration,
        MULTITEAM_CENTER(1, CENTER_TEAMCHANGE_, 4,                                      0, 1, "",                               CPID_TEAMCHANGE,                "1 f1", _("^BGChanging to ^TC^TT^BG in ^COUNT"), "") \
        MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_SPECTATE,                         0, 1, "",                               CPID_TEAMCHANGE,                "1 f1", _("^BGSpectating in ^COUNT"), "") \
        MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_AUTO,                                     0, 1, "",                               CPID_TEAMCHANGE,                "1 f1", _("^BGChanging team in ^COUNT"), "") \
-       MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_SUICIDE,                          0, 1, "",                               CPID_TEAMCHANGE,                "1 f1", _("^K1Suicide in ^COUNT"), "")
-
-#define MSG_WEAPON_NOTIFICATIONS \
-       /*MSG_WEAPON_NOTIF(1, WEAPON_EMPTY,                                                     NO_MSG,                                                                         NO_MSG)*/ \
-       MSG_WEAPON_NOTIF(1, WEAPON_THINKING_WITH_PORTALS,                       INFO_WEAPON_THINKING_WITH_PORTALS,                      CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_CRYLINK_SUICIDE,                             INFO_WEAPON_CRYLINK_SUICIDE,                            CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_CRYLINK_MURDER,                                      INFO_WEAPON_CRYLINK_MURDER,                             NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_ELECTRO_SUICIDE_ORBS,                        INFO_WEAPON_ELECTRO_SUICIDE_ORBS,                       CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_ELECTRO_SUICIDE_BOLT,                        INFO_WEAPON_ELECTRO_SUICIDE_BOLT,                       CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_ELECTRO_MURDER_BOLT,                         INFO_WEAPON_ELECTRO_MURDER_BOLT,                        NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_ELECTRO_MURDER_ORBS,                         INFO_WEAPON_ELECTRO_MURDER_ORBS,                        NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_ELECTRO_MURDER_COMBO,                        INFO_WEAPON_ELECTRO_MURDER_COMBO,                       NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_FIREBALL_SUICIDE_FIREMINE,           INFO_WEAPON_FIREBALL_SUICIDE_FIREMINE,          CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_FIREBALL_SUICIDE_BLAST,                      INFO_WEAPON_FIREBALL_SUICIDE_BLAST,             CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_FIREBALL_MURDER_FIREMINE,            INFO_WEAPON_FIREBALL_MURDER_FIREMINE,           NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_FIREBALL_MURDER_BLAST,                       INFO_WEAPON_FIREBALL_MURDER_BLAST,                      NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_MORTAR_SUICIDE_EXPLODE,                      INFO_WEAPON_MORTAR_SUICIDE_EXPLODE,             CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_MORTAR_SUICIDE_BOUNCE,                       INFO_WEAPON_MORTAR_SUICIDE_BOUNCE,                      CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_MORTAR_MURDER_EXPLODE,                       INFO_WEAPON_MORTAR_MURDER_EXPLODE,                      NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_MORTAR_MURDER_BOUNCE,                        INFO_WEAPON_MORTAR_MURDER_BOUNCE,                       NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_HAGAR_SUICIDE,                                       INFO_WEAPON_HAGAR_SUICIDE,                                      CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_HAGAR_MURDER_BURST,                          INFO_WEAPON_HAGAR_MURDER_BURST,                         NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_HAGAR_MURDER_SPRAY,                          INFO_WEAPON_HAGAR_MURDER_SPRAY,                         NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_HLAC_SUICIDE,                                        INFO_WEAPON_HLAC_SUICIDE,                                       CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_HLAC_MURDER,                                         INFO_WEAPON_HLAC_MURDER,                                        NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_HOOK_MURDER,                                         INFO_WEAPON_HOOK_MURDER,                                        NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_LASER_SUICIDE,                                       INFO_WEAPON_LASER_SUICIDE,                                      CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_LASER_MURDER,                                        INFO_WEAPON_LASER_MURDER,                                       NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_MINELAYER_SUICIDE,                           INFO_WEAPON_MINELAYER_SUICIDE,                          CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_MINELAYER_MURDER,                            INFO_WEAPON_MINELAYER_MURDER,                           NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_MINSTANEX_MURDER,                            INFO_WEAPON_MINSTANEX_MURDER,                           NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_NEX_MURDER,                                          INFO_WEAPON_NEX_MURDER,                                         NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_RIFLE_MURDER_HAIL_PIERCING,          INFO_WEAPON_RIFLE_MURDER_HAIL_PIERCING,         NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_RIFLE_MURDER_HAIL,                           INFO_WEAPON_RIFLE_MURDER_HAIL,                          NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_RIFLE_MURDER_PIERCING,                       INFO_WEAPON_RIFLE_MURDER_PIERCING,                      NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_RIFLE_MURDER,                                        INFO_WEAPON_RIFLE_MURDER,                                       NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_RIFLE_MURDER_HEADSHOT,                       INFO_WEAPON_RIFLE_MURDER_HEADSHOT,                      NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_ROCKETLAUNCHER_SUICIDE,                      INFO_WEAPON_ROCKETLAUNCHER_SUICIDE,             CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_ROCKETLAUNCHER_MURDER_DIRECT,        INFO_WEAPON_ROCKETLAUNCHER_MURDER_DIRECT,       NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_ROCKETLAUNCHER_MURDER_SPLASH,        INFO_WEAPON_ROCKETLAUNCHER_MURDER_SPLASH,       NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_SEEKER_SUICIDE,                                      INFO_WEAPON_SEEKER_SUICIDE,                             CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_SEEKER_MURDER_TAG,                           INFO_WEAPON_SEEKER_MURDER_TAG,                          NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_SEEKER_MURDER_SPRAY,                         INFO_WEAPON_SEEKER_MURDER_SPRAY,                        NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_SHOTGUN_MURDER_SLAP,                         INFO_WEAPON_SHOTGUN_MURDER_SLAP,                        NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_SHOTGUN_MURDER,                                      INFO_WEAPON_SHOTGUN_MURDER,                             NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_TUBA_SUICIDE,                                        INFO_WEAPON_TUBA_SUICIDE,                                       CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_TUBA_MURDER,                                         INFO_WEAPON_TUBA_MURDER,                                        NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_ACCORDEON_SUICIDE,                           INFO_WEAPON_ACCORDEON_SUICIDE,                          CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_ACCORDEON_MURDER,                            INFO_WEAPON_ACCORDEON_MURDER,                           NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_KLEINBOTTLE_SUICIDE,                         INFO_WEAPON_KLEINBOTTLE_SUICIDE,                        CENTER_DEATH_SELF_GENERIC) \
-       MSG_WEAPON_NOTIF(1, WEAPON_KLEINBOTTLE_MURDER,                          INFO_WEAPON_KLEINBOTTLE_MURDER,                         NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_UZI_MURDER_SNIPE,                            INFO_WEAPON_UZI_MURDER_SNIPE,                           NO_MSG) \
-       MSG_WEAPON_NOTIF(1, WEAPON_UZI_MURDER_SPRAY,                            INFO_WEAPON_UZI_MURDER_SPRAY,                           NO_MSG) 
-
-#define MSG_DEATH_NOTIFICATIONS \
-       /*MSG_DEATH_NOTIF(1, DEATH_EMPTY,                                               NO_MSG,                                                                 NO_MSG)*/ \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_CUSTOM,                                   INFO_DEATH_SELF_GENERIC,                                CENTER_DEATH_SELF_CUSTOM) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_GENERIC,                                  INFO_DEATH_SELF_GENERIC,                                CENTER_DEATH_SELF_GENERIC) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_VOID,                                             INFO_DEATH_SELF_VOID,                                   CENTER_DEATH_SELF_VOID) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_SUICIDE,                                  INFO_DEATH_SELF_SUICIDE,                                CENTER_DEATH_SELF_SUICIDE) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_NOAMMO,                                   INFO_DEATH_SELF_NOAMMO,                                 CENTER_DEATH_SELF_NOAMMO) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_ROT,                                              INFO_DEATH_SELF_ROT,                                    CENTER_DEATH_SELF_ROT) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_CAMP,                                             INFO_DEATH_SELF_CAMP,                                   CENTER_DEATH_SELF_CAMP) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_BETRAYAL,                                 INFO_DEATH_SELF_BETRAYAL,                               CENTER_DEATH_SELF_BETRAYAL) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_TEAMCHANGE,                               INFO_DEATH_SELF_TEAMCHANGE,                             CENTER_DEATH_SELF_TEAMCHANGE) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_AUTOTEAMCHANGE,                   INFO_DEATH_SELF_AUTOTEAMCHANGE,                 CENTER_DEATH_SELF_AUTOTEAMCHANGE) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_FALL,                                             INFO_DEATH_SELF_FALL,                                   CENTER_DEATH_SELF_FALL) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_DROWN,                                    INFO_DEATH_SELF_DROWN,                                  CENTER_DEATH_SELF_DROWN) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_FIRE,                                             INFO_DEATH_SELF_FIRE,                                   CENTER_DEATH_SELF_FIRE) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_LAVA,                                             INFO_DEATH_SELF_LAVA,                                   CENTER_DEATH_SELF_LAVA) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_SLIME,                                    INFO_DEATH_SELF_SLIME,                                  CENTER_DEATH_SELF_SLIME) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_SHOOTING_STAR,                    INFO_DEATH_SELF_SHOOTING_STAR,                  CENTER_DEATH_SELF_SHOOTING_STAR) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_SWAMP,                                    INFO_DEATH_SELF_SWAMP,                                  CENTER_DEATH_SELF_SWAMP) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_CHEAT,                                    INFO_DEATH_SELF_CHEAT,                                  CENTER_DEATH_SELF_CHEAT) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_TOUCHEXPLODE,                             INFO_DEATH_SELF_TOUCHEXPLODE,                   CENTER_DEATH_SELF_TOUCHEXPLODE) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_TURRET,                                   INFO_DEATH_SELF_TURRET,                                 CENTER_DEATH_SELF_TURRET) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_TURRET_EWHEEL,                    INFO_DEATH_SELF_TURRET_EWHEEL,                  CENTER_DEATH_SELF_TURRET_EWHEEL) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_TURRET_FLAC,                              INFO_DEATH_SELF_TURRET_FLAC,                    CENTER_DEATH_SELF_TURRET) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_TURRET_MACHINEGUN,                INFO_DEATH_SELF_TURRET_MACHINEGUN,              CENTER_DEATH_SELF_TURRET) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_TURRET_WALK_GUN,                  INFO_DEATH_SELF_TURRET_WALK_GUN,                CENTER_DEATH_SELF_TURRET_WALK) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_TURRET_WALK_MEELE,                INFO_DEATH_SELF_TURRET_WALK_MEELE,              CENTER_DEATH_SELF_TURRET_WALK) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_TURRET_WALK_ROCKET,               INFO_DEATH_SELF_TURRET_WALK_ROCKET,             CENTER_DEATH_SELF_TURRET_WALK) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_TURRET_HELLION,                   INFO_DEATH_SELF_TURRET_HELLION,                 CENTER_DEATH_SELF_TURRET) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_TURRET_HK,                                INFO_DEATH_SELF_TURRET_HK,                              CENTER_DEATH_SELF_TURRET) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_TURRET_MLRS,                              INFO_DEATH_SELF_TURRET_MLRS,                    CENTER_DEATH_SELF_TURRET) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_TURRET_PLASMA,                    INFO_DEATH_SELF_TURRET_PLASMA,                  CENTER_DEATH_SELF_TURRET) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_TURRET_PHASER,                    INFO_DEATH_SELF_TURRET_PHASER,                  CENTER_DEATH_SELF_TURRET) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_TURRET_TESLA,                             INFO_DEATH_SELF_TURRET_TESLA,                   CENTER_DEATH_SELF_TURRET) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_VH_CRUSH,                                 INFO_DEATH_SELF_VH_CRUSH,                               CENTER_DEATH_SELF_VH_CRUSH) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_VH_SPID_ROCKET,                   INFO_DEATH_SELF_VH_SPID_ROCKET,                 CENTER_DEATH_SELF_VH_SPID_ROCKET) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_VH_SPID_DEATH,                    INFO_DEATH_SELF_VH_SPID_DEATH,                  CENTER_DEATH_SELF_VH_SPID_DEATH) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_VH_WAKI_ROCKET,                   INFO_DEATH_SELF_VH_WAKI_ROCKET,                 CENTER_DEATH_SELF_VH_WAKI_ROCKET) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_VH_WAKI_DEATH,                    INFO_DEATH_SELF_VH_WAKI_DEATH,                  CENTER_DEATH_SELF_VH_WAKI_DEATH) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_VH_RAPT_BOMB,                             INFO_DEATH_SELF_VH_RAPT_BOMB,                   CENTER_DEATH_SELF_VH_RAPT_BOMB) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_VH_RAPT_DEATH,                    INFO_DEATH_SELF_VH_RAPT_DEATH,                  CENTER_DEATH_SELF_VH_RAPT_DEATH) \
-       MSG_DEATH_NOTIF(1, DEATH_SELF_VH_BUMB_DEATH,                    INFO_DEATH_SELF_VH_BUMB_DEATH,                  CENTER_DEATH_SELF_VH_BUMB_DEATH) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_TELEFRAG,                               INFO_DEATH_MURDER_TELEFRAG,                             NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_FALL,                                   INFO_DEATH_MURDER_FALL,                                 NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_DROWN,                                  INFO_DEATH_MURDER_DROWN,                                NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_LAVA,                                   INFO_DEATH_MURDER_LAVA,                                 NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_SLIME,                                  INFO_DEATH_MURDER_SLIME,                                NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_SHOOTING_STAR,                  INFO_DEATH_MURDER_SHOOTING_STAR,                NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_SWAMP,                                  INFO_DEATH_MURDER_SWAMP,                                NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_VOID,                                   INFO_DEATH_MURDER_VOID,                                 NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_TOUCHEXPLODE,                   INFO_DEATH_MURDER_TOUCHEXPLODE,                 NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_CHEAT,                                  INFO_DEATH_MURDER_CHEAT,                                NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_FIRE,                                   INFO_DEATH_MURDER_FIRE,                                 NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_VH_CRUSH,                               INFO_DEATH_MURDER_VH_CRUSH,                             NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_VH_SPID_MINIGUN,                INFO_DEATH_MURDER_VH_SPID_MINIGUN,              NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_VH_SPID_ROCKET,                 INFO_DEATH_MURDER_VH_SPID_ROCKET,               NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_VH_SPID_DEATH,                  INFO_DEATH_MURDER_VH_SPID_DEATH,                NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_VH_WAKI_GUN,                    INFO_DEATH_MURDER_VH_WAKI_GUN,                  NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_VH_WAKI_ROCKET,                 INFO_DEATH_MURDER_VH_WAKI_ROCKET,               NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_VH_WAKI_DEATH,                  INFO_DEATH_MURDER_VH_WAKI_DEATH,                NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_VH_RAPT_CANNON,                 INFO_DEATH_MURDER_VH_RAPT_CANNON,               NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_VH_RAPT_BOMB,                   INFO_DEATH_MURDER_VH_RAPT_BOMB,                 NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_VH_RAPT_DEATH,                  INFO_DEATH_MURDER_VH_RAPT_DEATH,                NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_VH_BUMB_GUN,                    INFO_DEATH_MURDER_VH_BUMB_GUN,                  NO_MSG) \
-       MSG_DEATH_NOTIF(1, DEATH_MURDER_VH_BUMB_DEATH,                  INFO_DEATH_MURDER_VH_BUMB_DEATH,                NO_MSG) 
+       MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_SUICIDE,                          0, 1, "",                               CPID_TEAMCHANGE,                "1 f1", _("^K1Suicide in ^COUNT"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_BEGINNING,                           0, 1, "",                               CPID_TIMEOUT,                   "1 f1", _("^F4Timeout begins in ^COUNT"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_ENDING,                                      0, 1, "",                               CPID_TIMEOUT,                   "1 f1", _("^F4Timeout ends in ^COUNT"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_WEAPON_GOTWEP,                                       0, 1, "item_wepname",                           CPID_ITEM,      "item_centime 0", _("^BGYou got the ^F1%s"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_WEAPON_DROPPED,                                      1, 1, "item_wepname item_wepammo",      CPID_ITEM,      "item_centime 0", _("^BGYou dropped the ^F1%s^BG%s"), "")
+
+#define MSG_MULTI_NOTIFICATIONS \
+       /*MSG_MULTI_NOTIF(1, MULTI_EMPTY,                                                       NO_MSG,                                                                         NO_MSG)*/ \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_CUSTOM,                                           INFO_DEATH_SELF_GENERIC,                                        CENTER_DEATH_SELF_CUSTOM) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_GENERIC,                                          INFO_DEATH_SELF_GENERIC,                                        CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_VOID,                                                     INFO_DEATH_SELF_VOID,                                           CENTER_DEATH_SELF_VOID) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_SUICIDE,                                          INFO_DEATH_SELF_SUICIDE,                                        CENTER_DEATH_SELF_SUICIDE) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_NOAMMO,                                           INFO_DEATH_SELF_NOAMMO,                                         CENTER_DEATH_SELF_NOAMMO) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_ROT,                                                      INFO_DEATH_SELF_ROT,                                            CENTER_DEATH_SELF_ROT) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_CAMP,                                                     INFO_DEATH_SELF_CAMP,                                           CENTER_DEATH_SELF_CAMP) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_BETRAYAL,                                         INFO_DEATH_SELF_BETRAYAL,                                       CENTER_DEATH_SELF_BETRAYAL) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_TEAMCHANGE,                                       INFO_DEATH_SELF_TEAMCHANGE,                                     CENTER_DEATH_SELF_TEAMCHANGE) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_AUTOTEAMCHANGE,                           INFO_DEATH_SELF_AUTOTEAMCHANGE,                         CENTER_DEATH_SELF_AUTOTEAMCHANGE) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_FALL,                                                     INFO_DEATH_SELF_FALL,                                           CENTER_DEATH_SELF_FALL) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_DROWN,                                            INFO_DEATH_SELF_DROWN,                                          CENTER_DEATH_SELF_DROWN) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_FIRE,                                                     INFO_DEATH_SELF_FIRE,                                           CENTER_DEATH_SELF_FIRE) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_LAVA,                                                     INFO_DEATH_SELF_LAVA,                                           CENTER_DEATH_SELF_LAVA) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_SLIME,                                            INFO_DEATH_SELF_SLIME,                                          CENTER_DEATH_SELF_SLIME) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_SHOOTING_STAR,                            INFO_DEATH_SELF_SHOOTING_STAR,                          CENTER_DEATH_SELF_SHOOTING_STAR) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_SWAMP,                                            INFO_DEATH_SELF_SWAMP,                                          CENTER_DEATH_SELF_SWAMP) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_CHEAT,                                            INFO_DEATH_SELF_CHEAT,                                          CENTER_DEATH_SELF_CHEAT) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_TOUCHEXPLODE,                                     INFO_DEATH_SELF_TOUCHEXPLODE,                           CENTER_DEATH_SELF_TOUCHEXPLODE) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET,                                           INFO_DEATH_SELF_TURRET,                                         CENTER_DEATH_SELF_TURRET) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_EWHEEL,                            INFO_DEATH_SELF_TURRET_EWHEEL,                          CENTER_DEATH_SELF_TURRET_EWHEEL) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_FLAC,                                      INFO_DEATH_SELF_TURRET_FLAC,                            CENTER_DEATH_SELF_TURRET) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_MACHINEGUN,                        INFO_DEATH_SELF_TURRET_MACHINEGUN,                      CENTER_DEATH_SELF_TURRET) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_GUN,                          INFO_DEATH_SELF_TURRET_WALK_GUN,                        CENTER_DEATH_SELF_TURRET_WALK) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_MEELE,                        INFO_DEATH_SELF_TURRET_WALK_MEELE,                      CENTER_DEATH_SELF_TURRET_WALK) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_ROCKET,                       INFO_DEATH_SELF_TURRET_WALK_ROCKET,                     CENTER_DEATH_SELF_TURRET_WALK) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_HELLION,                           INFO_DEATH_SELF_TURRET_HELLION,                         CENTER_DEATH_SELF_TURRET) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_HK,                                        INFO_DEATH_SELF_TURRET_HK,                                      CENTER_DEATH_SELF_TURRET) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_MLRS,                                      INFO_DEATH_SELF_TURRET_MLRS,                            CENTER_DEATH_SELF_TURRET) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_PLASMA,                            INFO_DEATH_SELF_TURRET_PLASMA,                          CENTER_DEATH_SELF_TURRET) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_PHASER,                            INFO_DEATH_SELF_TURRET_PHASER,                          CENTER_DEATH_SELF_TURRET) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_TESLA,                                     INFO_DEATH_SELF_TURRET_TESLA,                           CENTER_DEATH_SELF_TURRET) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_VH_CRUSH,                                         INFO_DEATH_SELF_VH_CRUSH,                                       CENTER_DEATH_SELF_VH_CRUSH) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_VH_SPID_ROCKET,                           INFO_DEATH_SELF_VH_SPID_ROCKET,                         CENTER_DEATH_SELF_VH_SPID_ROCKET) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_VH_SPID_DEATH,                            INFO_DEATH_SELF_VH_SPID_DEATH,                          CENTER_DEATH_SELF_VH_SPID_DEATH) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_VH_WAKI_ROCKET,                           INFO_DEATH_SELF_VH_WAKI_ROCKET,                         CENTER_DEATH_SELF_VH_WAKI_ROCKET) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_VH_WAKI_DEATH,                            INFO_DEATH_SELF_VH_WAKI_DEATH,                          CENTER_DEATH_SELF_VH_WAKI_DEATH) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_VH_RAPT_BOMB,                                     INFO_DEATH_SELF_VH_RAPT_BOMB,                           CENTER_DEATH_SELF_VH_RAPT_BOMB) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_VH_RAPT_DEATH,                            INFO_DEATH_SELF_VH_RAPT_DEATH,                          CENTER_DEATH_SELF_VH_RAPT_DEATH) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_VH_BUMB_DEATH,                            INFO_DEATH_SELF_VH_BUMB_DEATH,                          CENTER_DEATH_SELF_VH_BUMB_DEATH) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_TELEFRAG,                                       INFO_DEATH_MURDER_TELEFRAG,                                     NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_FALL,                                           INFO_DEATH_MURDER_FALL,                                         NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_DROWN,                                          INFO_DEATH_MURDER_DROWN,                                        NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_LAVA,                                           INFO_DEATH_MURDER_LAVA,                                         NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_SLIME,                                          INFO_DEATH_MURDER_SLIME,                                        NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_SHOOTING_STAR,                          INFO_DEATH_MURDER_SHOOTING_STAR,                        NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_SWAMP,                                          INFO_DEATH_MURDER_SWAMP,                                        NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_VOID,                                           INFO_DEATH_MURDER_VOID,                                         NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_TOUCHEXPLODE,                           INFO_DEATH_MURDER_TOUCHEXPLODE,                         NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_CHEAT,                                          INFO_DEATH_MURDER_CHEAT,                                        NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_FIRE,                                           INFO_DEATH_MURDER_FIRE,                                         NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_CRUSH,                                       INFO_DEATH_MURDER_VH_CRUSH,                                     NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_SPID_MINIGUN,                        INFO_DEATH_MURDER_VH_SPID_MINIGUN,                      NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_SPID_ROCKET,                         INFO_DEATH_MURDER_VH_SPID_ROCKET,                       NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_SPID_DEATH,                          INFO_DEATH_MURDER_VH_SPID_DEATH,                        NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_WAKI_GUN,                            INFO_DEATH_MURDER_VH_WAKI_GUN,                          NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_WAKI_ROCKET,                         INFO_DEATH_MURDER_VH_WAKI_ROCKET,                       NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_WAKI_DEATH,                          INFO_DEATH_MURDER_VH_WAKI_DEATH,                        NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_RAPT_CANNON,                         INFO_DEATH_MURDER_VH_RAPT_CANNON,                       NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_RAPT_BOMB,                           INFO_DEATH_MURDER_VH_RAPT_BOMB,                         NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_RAPT_DEATH,                          INFO_DEATH_MURDER_VH_RAPT_DEATH,                        NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_BUMB_GUN,                            INFO_DEATH_MURDER_VH_BUMB_GUN,                          NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_VH_BUMB_DEATH,                          INFO_DEATH_MURDER_VH_BUMB_DEATH,                        NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_GOTWEP,                                                       INFO_WEAPON_GOTWEP,                                                     CENTER_WEAPON_GOTWEP) \
+       MSG_MULTI_NOTIF(1, WEAPON_DROPPED,                                                      INFO_WEAPON_DROPPED,                                            CENTER_WEAPON_DROPPED) \
+       MSG_MULTI_NOTIF(1, WEAPON_THINKING_WITH_PORTALS,                        INFO_WEAPON_THINKING_WITH_PORTALS,                      CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_CRYLINK_SUICIDE,                                      INFO_WEAPON_CRYLINK_SUICIDE,                            CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_CRYLINK_MURDER,                                       INFO_WEAPON_CRYLINK_MURDER,                             NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_SUICIDE_ORBS,                         INFO_WEAPON_ELECTRO_SUICIDE_ORBS,                       CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_SUICIDE_BOLT,                         INFO_WEAPON_ELECTRO_SUICIDE_BOLT,                       CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_MURDER_BOLT,                          INFO_WEAPON_ELECTRO_MURDER_BOLT,                        NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_MURDER_ORBS,                          INFO_WEAPON_ELECTRO_MURDER_ORBS,                        NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_ELECTRO_MURDER_COMBO,                         INFO_WEAPON_ELECTRO_MURDER_COMBO,                       NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_SUICIDE_FIREMINE,            INFO_WEAPON_FIREBALL_SUICIDE_FIREMINE,          CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_SUICIDE_BLAST,                       INFO_WEAPON_FIREBALL_SUICIDE_BLAST,             CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_MURDER_FIREMINE,             INFO_WEAPON_FIREBALL_MURDER_FIREMINE,           NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_FIREBALL_MURDER_BLAST,                        INFO_WEAPON_FIREBALL_MURDER_BLAST,                      NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_MORTAR_SUICIDE_EXPLODE,                       INFO_WEAPON_MORTAR_SUICIDE_EXPLODE,             CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_MORTAR_SUICIDE_BOUNCE,                        INFO_WEAPON_MORTAR_SUICIDE_BOUNCE,                      CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_MORTAR_MURDER_EXPLODE,                        INFO_WEAPON_MORTAR_MURDER_EXPLODE,                      NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_MORTAR_MURDER_BOUNCE,                         INFO_WEAPON_MORTAR_MURDER_BOUNCE,                       NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_HAGAR_SUICIDE,                                        INFO_WEAPON_HAGAR_SUICIDE,                                      CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_HAGAR_MURDER_BURST,                           INFO_WEAPON_HAGAR_MURDER_BURST,                         NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_HAGAR_MURDER_SPRAY,                           INFO_WEAPON_HAGAR_MURDER_SPRAY,                         NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_HLAC_SUICIDE,                                         INFO_WEAPON_HLAC_SUICIDE,                                       CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_HLAC_MURDER,                                          INFO_WEAPON_HLAC_MURDER,                                        NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_HOOK_MURDER,                                          INFO_WEAPON_HOOK_MURDER,                                        NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_LASER_SUICIDE,                                        INFO_WEAPON_LASER_SUICIDE,                                      CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_LASER_MURDER,                                         INFO_WEAPON_LASER_MURDER,                                       NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_MINELAYER_SUICIDE,                            INFO_WEAPON_MINELAYER_SUICIDE,                          CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_MINELAYER_MURDER,                             INFO_WEAPON_MINELAYER_MURDER,                           NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_MINSTANEX_MURDER,                             INFO_WEAPON_MINSTANEX_MURDER,                           NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_NEX_MURDER,                                           INFO_WEAPON_NEX_MURDER,                                         NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER_HAIL_PIERCING,           INFO_WEAPON_RIFLE_MURDER_HAIL_PIERCING,         NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER_HAIL,                            INFO_WEAPON_RIFLE_MURDER_HAIL,                          NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER_PIERCING,                        INFO_WEAPON_RIFLE_MURDER_PIERCING,                      NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER,                                         INFO_WEAPON_RIFLE_MURDER,                                       NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_RIFLE_MURDER_HEADSHOT,                        INFO_WEAPON_RIFLE_MURDER_HEADSHOT,                      NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_ROCKETLAUNCHER_SUICIDE,                       INFO_WEAPON_ROCKETLAUNCHER_SUICIDE,             CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_ROCKETLAUNCHER_MURDER_DIRECT,         INFO_WEAPON_ROCKETLAUNCHER_MURDER_DIRECT,       NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_ROCKETLAUNCHER_MURDER_SPLASH,         INFO_WEAPON_ROCKETLAUNCHER_MURDER_SPLASH,       NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_SEEKER_SUICIDE,                                       INFO_WEAPON_SEEKER_SUICIDE,                             CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_SEEKER_MURDER_TAG,                            INFO_WEAPON_SEEKER_MURDER_TAG,                          NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_SEEKER_MURDER_SPRAY,                          INFO_WEAPON_SEEKER_MURDER_SPRAY,                        NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_SHOTGUN_MURDER_SLAP,                          INFO_WEAPON_SHOTGUN_MURDER_SLAP,                        NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_SHOTGUN_MURDER,                                       INFO_WEAPON_SHOTGUN_MURDER,                             NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_TUBA_SUICIDE,                                         INFO_WEAPON_TUBA_SUICIDE,                                       CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_TUBA_MURDER,                                          INFO_WEAPON_TUBA_MURDER,                                        NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_ACCORDEON_SUICIDE,                            INFO_WEAPON_ACCORDEON_SUICIDE,                          CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_ACCORDEON_MURDER,                             INFO_WEAPON_ACCORDEON_MURDER,                           NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_KLEINBOTTLE_SUICIDE,                          INFO_WEAPON_KLEINBOTTLE_SUICIDE,                        CENTER_DEATH_SELF_GENERIC) \
+       MSG_MULTI_NOTIF(1, WEAPON_KLEINBOTTLE_MURDER,                           INFO_WEAPON_KLEINBOTTLE_MURDER,                         NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_UZI_MURDER_SNIPE,                             INFO_WEAPON_UZI_MURDER_SNIPE,                           NO_MSG) \
+       MSG_MULTI_NOTIF(1, WEAPON_UZI_MURDER_SPRAY,                             INFO_WEAPON_UZI_MURDER_SPRAY,                           NO_MSG) 
 
 
 // ===========================
@@ -543,21 +596,23 @@ var float autocvar_notification_show_sprees_info = 3; // 0 = off, 1 = target onl
 var float autocvar_notification_show_sprees_info_newline = FALSE;
 var float autocvar_notification_show_sprees_info_specialonly = TRUE;
 var float autocvar_notification_errors_are_fatal = TRUE;
+var float autocvar_notification_lifetime_runtime = 0.5;
+var float autocvar_notification_lifetime_mapload = 10;
 
 #ifdef SVQC
 .float FRAG_VERBOSE;
 void Notification_GetCvars(void);
 #else
-var float autocvar_notification_allow_chatboxprint = 1; // 0 = no, 1 = yes, 2 = forced on for all MSG_INFO notifs
+var float autocvar_notification_item_centerprinttime = 1.5;
+var float autocvar_notification_allow_chatboxprint = 1; // 0 = no, 1 = yes, 2 = forced on for all MSG_INFO notifs // todo set back to 1 after testing
 var float autocvar_notification_show_sprees_center = TRUE;
 var float autocvar_notification_show_sprees_center_specialonly = TRUE;
 var float autocvar_notification_frag_verbose = TRUE;
 #endif
 
-
 // ============================
 //  Notification Argument List
-// ============================
+// ============================ TODO UPDATE THIS
 /*
  These arguments get replaced with the Local_Notification_sprintf
  and Local_Notification_HUD_Notify_Push functions to supply data
@@ -601,32 +656,42 @@ string arg_slot[NOTIF_MAX_ARGS];
 #define ARG_CS_SV 3 // enabled on CSQC and SVQC
 #define ARG_CS 4 // unique result to CSQC
 #define ARG_SV 5 // unique result to SVQC
+#define ARG_DC 6 // unique result to durcnt/centerprint
+
+// todo possible idea.... declare how many floats/strings each arg needs, and then dynamically increment the input
+// this way, we don't need to have duplicates like i.e. s2loc and s3loc
 
 #define NOTIF_ARGUMENT_LIST \
-       ARG_CASE(ARG_CS_SV_HA, "s1",                    s1) \
-       ARG_CASE(ARG_CS_SV_HA, "s2",                    s2) \
-       ARG_CASE(ARG_CS_SV_HA, "s3",                    s3) \
-       ARG_CASE(ARG_CS_SV_HA, "s4",                    s4) \
-       ARG_CASE(ARG_CS_SV, "s2loc",                    (autocvar_notification_show_location ? sprintf( ( ((tmp_s = autocvar_notification_show_location_string) != "") ? tmp_s : _(" (near %s)") ), s2) : "")) \
-       ARG_CASE(ARG_CS_SV, "s3loc",                    (autocvar_notification_show_location ? sprintf( ( ((tmp_s = autocvar_notification_show_location_string) != "") ? tmp_s : _(" (near %s)") ), s3) : "")) \
-       ARG_CASE(ARG_CS_SV_DC, "f1",                    ftos(f1)) \
-       ARG_CASE(ARG_CS_SV_DC, "f2",                    ftos(f2)) \
-       ARG_CASE(ARG_CS_SV, "f3",                               ftos(f3)) \
-       ARG_CASE(ARG_CS_SV, "f4",                               ftos(f4)) \
-       ARG_CASE(ARG_CS_SV, "f1p2dec",                  ftos_decimals(f1/100, 2)) \
-       ARG_CASE(ARG_CS_SV, "f2p2dec",                  ftos_decimals(f2/100, 2)) \
-       ARG_CASE(ARG_CS, "f1secs",                              count_seconds(f1)) \
-       ARG_CASE(ARG_CS, "pass_key",                    ((((tmp_s = getcommandkey("pass", "+use")) != "pass") && !(strstrofs(tmp_s, "not bound", 0) >= 0)) ? sprintf(CCR(_(" ^F1(Press %s)")), tmp_s) : "")) \
-       ARG_CASE(ARG_CS, "frag_ping",                   ((f2 != NO_MSG) ? sprintf(CCR(_("\n(Ping ^2%d^BG)")), f2) : "")) \
-       ARG_CASE(ARG_CS, "frag_stats",                  sprintf(CCR(_("\n(Health ^1%d^BG / Armor ^2%d^BG)%s")), f2, f3, ((f4 != NO_MSG) ? sprintf(CCR(_(" (Ping ^2%d^BG)")), f4) : ""))) \
-       /*ARG_CASE(ARG_CS, "frag_pos",                  ((Should_Print_Score_Pos(f1)) ? sprintf("\n^BG%s", Read_Score_Pos(f1)) : ""))*/ \
-       ARG_CASE(ARG_CS, "spree_cen",                   (autocvar_notification_show_sprees ? notif_arg_spree_cen(f1) : "")) \
-       ARG_CASE(ARG_CS_SV, "spree_inf",                (autocvar_notification_show_sprees ? notif_arg_spree_inf(1, input, s2, f2) : "")) \
-       ARG_CASE(ARG_CS_SV, "spree_end",                (autocvar_notification_show_sprees ? notif_arg_spree_inf(-1, "", "", f1) : "")) \
-       ARG_CASE(ARG_CS_SV, "spree_lost",               (autocvar_notification_show_sprees ? notif_arg_spree_inf(-2, "", "", f1) : "")) \
-       ARG_CASE(ARG_CS_SV, "weapon_name",              ftos(f1)) \
-       ARG_CASE(ARG_SV, "death_team",                  Team_ColoredFullName(f1)) \
-       ARG_CASE(ARG_CS, "death_team",                  Team_ColoredFullName(f1 - 1))
+       ARG_CASE(ARG_CS_SV_HA,          "s1",                           s1) \
+       ARG_CASE(ARG_CS_SV_HA,          "s2",                           s2) \
+       ARG_CASE(ARG_CS_SV_HA,          "s3",                           s3) \
+       ARG_CASE(ARG_CS_SV_HA,          "s4",                           s4) \
+       ARG_CASE(ARG_CS_SV,             "s2loc",                        (autocvar_notification_show_location ? sprintf(( ((tmp_s = autocvar_notification_show_location_string) != "") ? tmp_s : _(" (near %s)") ), s2) : "")) \
+       ARG_CASE(ARG_CS_SV,             "s3loc",                        (autocvar_notification_show_location ? sprintf(( ((tmp_s = autocvar_notification_show_location_string) != "") ? tmp_s : _(" (near %s)") ), s3) : "")) \
+       ARG_CASE(ARG_CS_SV_DC,          "f1",                           ftos(f1)) \
+       ARG_CASE(ARG_CS_SV_DC,          "f2",                           ftos(f2)) \
+       ARG_CASE(ARG_CS_SV,             "f3",                           ftos(f3)) \
+       ARG_CASE(ARG_CS_SV,             "f4",                           ftos(f4)) \
+       ARG_CASE(ARG_CS_SV,             "f1p2dec",                      ftos_decimals(f1/100, 2)) \
+       ARG_CASE(ARG_CS_SV,             "f2p2dec",                      ftos_decimals(f2/100, 2)) \
+       ARG_CASE(ARG_CS,                        "f1secs",                       count_seconds(f1)) \
+       ARG_CASE(ARG_CS_SV,                     "f1ord",                        count_ordinal(f1)) \
+       ARG_CASE(ARG_CS,                        "f1time",                       process_time("todo", f1)) \
+       ARG_CASE(ARG_CS,                        "pass_key",             ((((tmp_s = getcommandkey("pass", "+use")) != "pass") && !(strstrofs(tmp_s, "not bound", 0) >= 0)) ? sprintf(CCR(_(" ^F1(Press %s)")), tmp_s) : "")) \
+       ARG_CASE(ARG_CS,                        "frag_ping",            ((f2 != NO_MSG) ? sprintf(CCR(_("\n(Ping ^2%d^BG)")), f2) : "")) \
+       ARG_CASE(ARG_CS,                        "frag_stats",           sprintf(CCR(_("\n(Health ^1%d^BG / Armor ^2%d^BG)%s")), f2, f3, ((f4 != NO_MSG) ? sprintf(CCR(_(" (Ping ^2%d^BG)")), f4) : ""))) \
+       /*ARG_CASE(ARG_CS,                      "frag_pos",                     ((Should_Print_Score_Pos(f1)) ? sprintf("\n^BG%s", Read_Score_Pos(f1)) : ""))*/ \
+       ARG_CASE(ARG_CS,                        "spree_cen",            (autocvar_notification_show_sprees ? notif_arg_spree_cen(f1) : "")) \
+       ARG_CASE(ARG_CS_SV,             "spree_inf",            (autocvar_notification_show_sprees ? notif_arg_spree_inf(1, input, s2, f2) : "")) \
+       ARG_CASE(ARG_CS_SV,             "spree_end",            (autocvar_notification_show_sprees ? notif_arg_spree_inf(-1, "", "", f1) : "")) \
+       ARG_CASE(ARG_CS_SV,             "spree_lost",           (autocvar_notification_show_sprees ? notif_arg_spree_inf(-2, "", "", f1) : "")) \
+       ARG_CASE(ARG_CS_SV,             "item_wepname",         W_Name(f1)) \
+       ARG_CASE(ARG_CS_SV,                     "item_wepammo",         (s1 != "" ? sprintf(_(" with %s"), s1) : "")) \
+       ARG_CASE(ARG_DC,                        "item_centime",         ftos(autocvar_notification_item_centerprinttime)) \
+       ARG_CASE(ARG_SV,                        "death_team",           Team_ColoredFullName(f1)) \
+       ARG_CASE(ARG_CS,                        "death_team",           Team_ColoredFullName(f1 - 1)) \
+       ARG_CASE(ARG_CS_SV,                     "race_time",            mmssss(f2)) \
+       ARG_CASE(ARG_CS_SV,             "race_diff",            ((f2 > f3) ? sprintf(CCR("^1[+%s]"), mmssss(f2 - f3)) : sprintf(CCR("^2[-%s]"), mmssss(f3 - f2))))
 
 #define NOTIF_HIT_MAX(count,funcname) if(sel_num == count) { backtrace(sprintf("%s: Hit maximum arguments!\n", funcname)); break; }
 #define NOTIF_HIT_UNKNOWN(token,funcname) { backtrace(sprintf("%s: Hit unknown token in selected string! '%s'\n", funcname, selected)); break; }
@@ -797,14 +862,12 @@ float notif_global_error;
 // notification entities
 entity msg_info_notifs[NOTIF_MAX];
 entity msg_center_notifs[NOTIF_MAX];
-entity msg_weapon_notifs[NOTIF_MAX];
-entity msg_death_notifs[NOTIF_MAX];
+entity msg_multi_notifs[NOTIF_MAX];
 
 // notification counts
 float NOTIF_INFO_COUNT;
 float NOTIF_CENTER_COUNT;
-float NOTIF_WEAPON_COUNT;
-float NOTIF_DEATH_COUNT;
+float NOTIF_MULTI_COUNT;
 float NOTIF_CPID_COUNT;
 
 // notification entity values
@@ -831,204 +894,6 @@ float NOTIF_CPID_COUNT;
 .string nent_strings[4];
 .float nent_floats[4];
 
-string Process_Notif_Line(float check_newline, float chat, string input, string notiftype, string notifname, string stringtype)
-{
-       if(check_newline)
-       {
-               #ifdef CSQC
-               if((chat && autocvar_notification_allow_chatboxprint)
-                       || (autocvar_notification_allow_chatboxprint == 2))
-               {
-                       // pass 1: add ETX char at beginning of line
-                       input = strcat("\{3}", input);
-
-                       // pass 2: add ETX char at end of each new line (so that messages with multiple lines are put through chatbox too)
-                       input = strreplace("\n", "\n\{3}", input);
-
-                       // pass 3: strip trailing ETX char
-                       if(substring(input, (strlen(input) - 1), 1) == "\{3}")
-                               { input = substring(input, 0, (strlen(input) - 1)); }
-               }
-               #endif
-               if(substring(input, (strlen(input) - 1), 1) != "\n")
-               {
-                       print(sprintf("^1MISSING/BROKEN NEW LINE AT END OF NOTIFICATION: ^7net_type = MSG_%s, net_name = %s, string = %s.\n", notiftype, notifname, stringtype));
-                       notif_error = TRUE;
-                       return strcat(input, "\n");
-               }
-       }
-       return input;
-}
-
-string Process_Notif_Args(float arg_type, string args, string notiftype, string notifname)
-{
-       string selected, remaining = args;
-       float sel_num = 0;
-
-       for(;(remaining != "");)
-       {
-               selected = car(remaining); remaining = cdr(remaining);
-
-               switch(arg_type)
-               {
-                       case 1: // normal args
-                       {
-                               if(sel_num == NOTIF_MAX_ARGS)
-                               {
-                                       print(sprintf("^1NOTIFICATION HAS TOO MANY ARGUMENTS: ^7net_type = MSG_%s, net_name = %s, max args = %d.\n",
-                                               notiftype, notifname, NOTIF_MAX_ARGS));
-                                       notif_error = TRUE;
-                                       break;
-                               }
-
-                               switch(strtolower(selected))
-                               {
-                                       #define ARG_CASE(prog,selected,result) case selected: { ++sel_num; break; }
-                                       NOTIF_ARGUMENT_LIST
-                                       #undef ARG_CASE
-                                       default:
-                                       {
-                                               print(sprintf("^1NOTIFICATION WITH UNKNOWN TOKEN IN ARGUMENT STRING: ^7net_type = MSG_%s, net_name = %s, args arg = '%s'.\n",
-                                                       notiftype, notifname, selected));
-                                               notif_error = TRUE;
-                                               break;
-                                       }
-                               }
-                               break;
-                       }
-                       case 2: // hudargs
-                       {
-                               if(sel_num == NOTIF_MAX_HUDARGS)
-                               {
-                                       print(sprintf("^1NOTIFICATION HAS TOO MANY ARGUMENTS: ^7net_type = MSG_%s, net_name = %s, max hudargs = %d.\n",
-                                               notiftype, notifname, NOTIF_MAX_HUDARGS));
-                                       notif_error = TRUE;
-                                       break;
-                               }
-
-                               switch(strtolower(selected))
-                               {
-                                       #define ARG_CASE(prog,selected,result) \
-                                               #if (prog == ARG_CS_SV_HA) \
-                                                       case selected: { ++sel_num; break; } \
-                                               #endif
-                                       NOTIF_ARGUMENT_LIST
-                                       #undef ARG_CASE
-                                       default:
-                                       {
-                                               print(sprintf("^1NOTIFICATION WITH UNKNOWN TOKEN IN ARGUMENT STRING: ^7net_type = MSG_%s, net_name = %s, hudargs arg = '%s'.\n",
-                                                       notiftype, notifname, selected));
-                                               notif_error = TRUE;
-                                               break;
-                                       }
-                               }
-                               break;
-                       }
-                       case 3: // durcnt 
-                       {
-                               if(sel_num == NOTIF_MAX_DURCNT)
-                               {
-                                       print(sprintf("^1NOTIFICATION HAS TOO MANY ARGUMENTS: ^7net_type = MSG_%s, net_name = %s, max durcnt = %d.\n",
-                                               notiftype, notifname, NOTIF_MAX_DURCNT));
-                                       notif_error = TRUE;
-                                       break;
-                               }
-
-                               switch(strtolower(selected))
-                               {
-                                       #define ARG_CASE(prog,selected,result) \
-                                               #if (prog == ARG_CS_SV_DC) \
-                                                       case selected: { ++sel_num; break; } \
-                                               #endif
-                                       NOTIF_ARGUMENT_LIST
-                                       #undef ARG_CASE
-                                       default:
-                                       {
-                                               if(ftos(stof(selected)) != "") { ++sel_num; }
-                                               else
-                                               {
-                                                       print(sprintf("^1NOTIFICATION WITH UNKNOWN TOKEN IN ARGUMENT STRING: ^7net_type = MSG_%s, net_name = %s, durcnt arg = '%s'.\n",
-                                                               notiftype, notifname, selected));
-                                                       notif_error = TRUE;
-                                               }
-                                               break;
-                                       }
-                               }
-                               break;
-                       }
-               }
-       }
-       return args;
-}
-
-#define CREATE_NOTIF_ENTITY(default,type,name,infoname,centername,strnum,flnum,args,hudargs,icon,cpid,durcnt,normal,gentle,check_newline,subcalls) \
-{ \
-       notif_error = FALSE; \
-       \
-       /* global entity setup */ \
-       entity notif = spawn(); \
-       msg_##type##_notifs[name - 1] = notif; \
-       notif.classname = "msg_#type#_notification"; \
-       notif.nent_default = default; \
-       notif.nent_name = strzone(#name); \
-       notif.nent_id = name; \
-       notif.nent_enabled = (1 <= autocvar_notification_##name); \
-       \
-       /* notification specific settings */ \
-       #if subcalls /* MSG_DEATH and MSG_WEAPON */ \
-               #if (infoname == NO_MSG) && (centername == NO_MSG) \
-                       print(sprintf("^1NOTIFICATION WITH NO SUBCALLS: ^7net_type = MSG_%s, net_name = %s.\n", strtoupper(#type), #name)); \
-                       notif_error = TRUE; \
-               #else \
-                       float infoname_stringcount = 0, infoname_floatcount = 0, centername_stringcount = 0, centername_floatcount = 0; \
-                       #if (infoname != NO_MSG) \
-                               notif.nent_msginfo = msg_info_notifs[infoname - 1]; \
-                               infoname_stringcount = notif.nent_msginfo.nent_stringcount; \
-                               infoname_floatcount = notif.nent_msginfo.nent_floatcount; \
-                       #endif \
-                       #if (centername != NO_MSG) \
-                               notif.nent_msgcenter = msg_center_notifs[centername - 1]; \
-                               centername_stringcount = notif.nent_msgcenter.nent_stringcount; \
-                               centername_floatcount = notif.nent_msgcenter.nent_floatcount; \
-                       #endif \
-                       /* set the requirements of THIS notification to the total requirements of its subcalls */ \
-                       notif.nent_stringcount = max(infoname_stringcount, centername_stringcount); \
-                       notif.nent_floatcount = max(infoname_floatcount, centername_floatcount); \
-               #endif \
-       #else /* MSG_INFO and MSG_CENTER */ \
-               float nent_chat = (autocvar_notification_##name > 1); \
-               \
-               notif.nent_stringcount = strnum; \
-               notif.nent_floatcount = flnum; \
-               if(args != "") { notif.nent_args = strzone(Process_Notif_Args(1, args, strtoupper(#type), #name)); } \
-               \
-               /* MSG_INFO only */ \
-                       if(hudargs != "") { notif.nent_hudargs = strzone(Process_Notif_Args(2, hudargs, strtoupper(#type), #name)); } \
-                       if(icon != "") { notif.nent_icon = strzone(icon); } \
-               \
-               /* MSG_CENTER only */ \
-               if(cpid != NO_MSG) { notif.nent_cpid = cpid; } \
-               if(durcnt != "") { notif.nent_durcnt = strzone(Process_Notif_Args(3, durcnt, strtoupper(#type), #name)); } \
-               \
-               /* string setup */ \
-               /* select gentle/normal string and bake color codes in on init, this way it does not need to be re-processed at run time */ \
-               if(GENTLE) \
-               { \
-                       if(gentle != "") { notif.nent_string = strzone(CCR(Process_Notif_Line(check_newline, nent_chat, gentle, strtoupper(#type), #name, "GENTLE"))); } \
-                       else if(normal != "") { notif.nent_string = strzone(CCR(Process_Notif_Line(check_newline, nent_chat, normal, strtoupper(#type), #name, "NORMAL"))); } \
-               } \
-               else if(normal != "") { notif.nent_string = strzone(CCR(Process_Notif_Line(check_newline, nent_chat, normal, strtoupper(#type), #name, "NORMAL"))); } \
-               if(notif.nent_string == "") { print(sprintf("^1EMPTY NOTIFICATION: ^7net_type = MSG_%s, net_name = %s.\n", strtoupper(#type), #name)); notif_error = TRUE; } \
-       #endif \
-       \
-       /* now check to see if any errors happened */ \
-       if(notif_error) \
-       { \
-               notif.nent_enabled = FALSE; /* disable the notification so it can't cause trouble */ \
-               notif_global_error = TRUE; /* throw the red flag that an error happened on init */ \
-       } \
-}
-
 #define MSG_INFO_NOTIF(default,name,strnum,flnum,args,hudargs,icon,normal,gentle) \
        NOTIF_ADD_AUTOCVAR(name, default) \
        float name; \
@@ -1036,23 +901,25 @@ string Process_Notif_Args(float arg_type, string args, string notiftype, string
        { \
                SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_INFO_COUNT) \
                CHECK_MAX_COUNT(name, NOTIF_MAX, NOTIF_INFO_COUNT, "notifications") \
-               CREATE_NOTIF_ENTITY( \
-                       default,        /* default */ \
-                       info,           /* type */ \
-                       name,           /* name */ \
-                       NO_MSG,         /* infoname */ \
-                       NO_MSG,         /* centername */ \
-                       strnum,         /* strnum */ \
-                       flnum,          /* flnum */ \
-                       args,           /* args */ \
-                       hudargs,        /* hudargs */ \
-                       icon,           /* icon */ \
-                       NO_MSG,         /* cpid */ \
-                       "",             /* durcnt */ \
-                       normal,         /* normal */ \
-                       gentle,         /* gentle */ \
-                       1,                      /* check_newline */ \
-                       0)                      /* subcalls */ \
+               Create_Notification_Entity( \
+                       default,                                                /* var_default */ \
+                       autocvar_notification_##name,   /* var_cvar */ \
+                       MSG_INFO,                                               /* typeid */ \
+                       name,                                                   /* nameid */ \
+                       strtoupper(#name),                              /* namestring */ \
+                       NO_MSG,                                                 /* infoname */ \
+                       NO_MSG,                                                 /* centername */ \
+                       strnum,                                                 /* strnum */ \
+                       flnum,                                                  /* flnum */ \
+                       args,                                                   /* args */ \
+                       hudargs,                                                /* hudargs */ \
+                       icon,                                                   /* icon */ \
+                       NO_MSG,                                                 /* cpid */ \
+                       "",                                                     /* durcnt */ \
+                       normal,                                                 /* normal */ \
+                       gentle,                                                 /* gentle */ \
+                       TRUE,                                                   /* msg_is_info */ \
+                       FALSE);                                                 /* msg_is_multi */ \
        } \
        ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name)
 
@@ -1065,83 +932,68 @@ string Process_Notif_Args(float arg_type, string args, string notiftype, string
                SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_CENTER_COUNT) \
                SET_FIELD_COUNT(cpid, NOTIF_FIRST, NOTIF_CPID_COUNT) \
                CHECK_MAX_COUNT(name, NOTIF_MAX, NOTIF_CENTER_COUNT, "notifications") \
-               CREATE_NOTIF_ENTITY( \
-                       default,        /* default */ \
-                       center,         /* type */ \
-                       name,           /* name */ \
-                       NO_MSG,         /* infoname */ \
-                       NO_MSG,         /* centername */ \
-                       strnum,         /* strnum */ \
-                       flnum,          /* flnum */ \
-                       args,           /* args */ \
-                       "",             /* hudargs */ \
-                       "",             /* icon */ \
-                       cpid,           /* cpid */ \
-                       durcnt,         /* durcnt */ \
-                       normal,         /* normal */ \
-                       gentle,         /* gentle */ \
-                       0,                      /* check_newline */ \
-                       0)                      /* subcalls */ \
-       } \
-       ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name)
-
-#define MSG_WEAPON_NOTIF(default,name,infoname,centername) \
-       NOTIF_ADD_AUTOCVAR(name, default) \
-       float name; \
-       void RegisterNotification_##name() \
-       { \
-               SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_WEAPON_COUNT) \
-               CHECK_MAX_COUNT(name, NOTIF_MAX, NOTIF_WEAPON_COUNT, "notifications") \
-               CREATE_NOTIF_ENTITY( \
-                       default,        /* default */ \
-                       weapon,         /* type */ \
-                       name,           /* name */ \
-                       infoname,       /* infoname */ \
-                       centername, /* centername */ \
-                       NO_MSG,         /* strnum */ \
-                       NO_MSG,         /* flnum */ \
-                       "",             /* args */ \
-                       "",             /* hudargs */ \
-                       "",             /* icon */ \
-                       NO_MSG,         /* cpid */ \
-                       "",             /* durcnt */ \
-                       "",             /* normal */ \
-                       "",             /* gentle */ \
-                       0,                      /* check_newline */ \
-                       1)                      /* subcalls */ \
+               Create_Notification_Entity( \
+                       default,                                                /* var_default */ \
+                       autocvar_notification_##name,   /* var_cvar */ \
+                       MSG_CENTER,                                     /* typeid */ \
+                       name,                                                   /* nameid */ \
+                       strtoupper(#name),                              /* namestring */ \
+                       NO_MSG,                                                 /* infoname */ \
+                       NO_MSG,                                                 /* centername */ \
+                       strnum,                                                 /* strnum */ \
+                       flnum,                                                  /* flnum */ \
+                       args,                                                   /* args */ \
+                       "",                                                     /* hudargs */ \
+                       "",                                                     /* icon */ \
+                       cpid,                                                   /* cpid */ \
+                       durcnt,                                                 /* durcnt */ \
+                       normal,                                                 /* normal */ \
+                       gentle,                                                 /* gentle */ \
+                       FALSE,                                                  /* msg_is_info */ \
+                       FALSE);                                                 /* msg_is_multi */ \
        } \
        ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name)
 
-#define MSG_DEATH_NOTIF(default,name,infoname,centername) \
+#define MSG_MULTI_NOTIF(default,name,infoname,centername) \
        NOTIF_ADD_AUTOCVAR(name, default) \
        float name; \
        void RegisterNotification_##name() \
        { \
-               SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_DEATH_COUNT) \
-               CHECK_MAX_COUNT(name, NOTIF_MAX, NOTIF_DEATH_COUNT, "notifications") \
-               CREATE_NOTIF_ENTITY( \
-                       default,        /* default */ \
-                       death,          /* type */ \
-                       name,           /* name */ \
-                       infoname,       /* infoname */ \
-                       centername, /* centername */ \
-                       NO_MSG,         /* strnum */ \
-                       NO_MSG,         /* flnum */ \
-                       "",             /* args */ \
-                       "",             /* hudargs */ \
-                       "",             /* icon */ \
-                       NO_MSG,         /* cpid */ \
-                       "",             /* durcnt */ \
-                       "",             /* normal */ \
-                       "",             /* gentle */ \
-                       0,                      /* check_newline */ \
-                       1)                      /* subcalls */ \
+               SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_MULTI_COUNT) \
+               CHECK_MAX_COUNT(name, NOTIF_MAX, NOTIF_MULTI_COUNT, "notifications") \
+               Create_Notification_Entity( \
+                       default,                                                /* var_default */ \
+                       autocvar_notification_##name,   /* var_cvar */ \
+                       MSG_MULTI,                                              /* typeid */ \
+                       name,                                                   /* nameid */ \
+                       strtoupper(#name),                              /* namestring */ \
+                       infoname,                                               /* infoname */ \
+                       centername,                                     /* centername */ \
+                       NO_MSG,                                                 /* strnum */ \
+                       NO_MSG,                                                 /* flnum */ \
+                       "",                                                     /* args */ \
+                       "",                                                     /* hudargs */ \
+                       "",                                                     /* icon */ \
+                       NO_MSG,                                                 /* cpid */ \
+                       "",                                                     /* durcnt */ \
+                       "",                                                     /* normal */ \
+                       "",                                                     /* gentle */ \
+                       FALSE,                                                  /* msg_is_info */ \
+                       TRUE);                                                  /* msg_is_multi */ \
        } \
        ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name)
 
 void RegisterNotifications_First()
 {
        notif_global_error = FALSE;
+
+       #ifdef SVQC
+       #define dedi (server_is_dedicated ? "a dedicated " : "")
+       #else
+       #define dedi ""
+       #endif
+       
+       print(sprintf("Beginning notification initialization on %s%s program...\n", dedi, PROGNAME));
        
        // maybe do another implementation of this with checksums? for now, we don't need versioning
        /*if(autocvar_notification_version != NOTIF_VERSION)
@@ -1154,29 +1006,31 @@ void RegisterNotifications_First()
                        notif_global_error = TRUE;
 
                print(sprintf("^1NOTIFICATION VERSION MISMATCH: ^7program = %s, config = %d, code = %d.\n",
-                       "foobar", autocvar_notification_version, NOTIF_VERSION));
+                       PROGNAME, autocvar_notification_version, NOTIF_VERSION));
        }*/
 }
 
 void RegisterNotifications_Done()
 {
-       if(notif_global_error && autocvar_notification_errors_are_fatal)
+       if(notif_global_error)
        {
-               // shit happened... stop the loading of the program now
-               error("Notification initialization failed!");
+               // shit happened... stop the loading of the program now if this is unacceptable
+               if(autocvar_notification_errors_are_fatal)
+                       error("Notification initialization failed! Read above and fix the errors!\n");
+               else
+                       print("Notification initialization failed! Read above and fix the errors!\n");
        }
+       else { print("Notification initialization successful!\n"); }
 }
 
 // NOW we actually activate the declarations
 ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotifications_First)
 MSG_INFO_NOTIFICATIONS
 MSG_CENTER_NOTIFICATIONS
-MSG_WEAPON_NOTIFICATIONS
-MSG_DEATH_NOTIFICATIONS
+MSG_MULTI_NOTIFICATIONS
 ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotifications_Done)
 #undef MSG_INFO_NOTIF
 #undef MSG_CENTER_NOTIF
-#undef MSG_WEAPON_NOTIF
-#undef MSG_DEATH_NOTIF
+#undef MSG_MULTI_NOTIF
 
 #undef NOTIF_ADD_AUTOCVAR