]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Mostly integrate MSG_CHOICE into initialization function
authorSamual Lenks <samual@xonotic.org>
Tue, 20 Aug 2013 22:57:05 +0000 (18:57 -0400)
committerSamual Lenks <samual@xonotic.org>
Tue, 20 Aug 2013 22:57:05 +0000 (18:57 -0400)
qcsrc/common/notifications.qc
qcsrc/common/notifications.qh

index 512b98836959fee1d98e3ebbfce060a06f288117..6ede8250a522a1be5e77e04854558381218bcfd0 100644 (file)
@@ -12,6 +12,7 @@ string Get_Notif_TypeName(float net_type)
                case MSG_CENTER: return "MSG_CENTER";
                case MSG_CENTER_CPID: return "MSG_CENTER_CPID";
                case MSG_MULTI: return "MSG_MULTI";
+               case MSG_CHOICE: return "MSG_CHOICE";
        }
        backtrace(sprintf("Get_Notif_TypeName(%d): Improper net type!\n", net_type));
        return "";
@@ -25,6 +26,7 @@ entity Get_Notif_Ent(float net_type, float net_name)
                case MSG_INFO: return msg_info_notifs[net_name - 1];
                case MSG_CENTER: return msg_center_notifs[net_name - 1];
                case MSG_MULTI: return msg_multi_notifs[net_name - 1];
+               case MSG_CHOICE: return msg_choice_notifs[net_name - 1];
        }
        backtrace(sprintf("Get_Notif_Ent(%d, %d): Improper net type!\n", net_type, net_name));
        return world;
@@ -43,6 +45,7 @@ string Notification_CheckArgs_TypeName(float net_type, float net_name)
                CHECKARG_TYPENAME(INFO)
                CHECKARG_TYPENAME(CENTER)
                CHECKARG_TYPENAME(MULTI)
+               CHECKARG_TYPENAME(CHOICE)
                default: { checkargs = sprintf("Improper type: %d!", checkargs, net_type); break; }
        }
        #undef CHECKARG_TYPENAME
@@ -141,20 +144,21 @@ void Destroy_All_Notifications(void)
        DESTROY_LOOP(MSG_INFO, NOTIF_INFO_COUNT)
        DESTROY_LOOP(MSG_CENTER, NOTIF_CENTER_COUNT)
        DESTROY_LOOP(MSG_MULTI, NOTIF_MULTI_COUNT)
+       DESTROY_LOOP(MSG_CHOICE, NOTIF_CHOICE_COUNT)
        #undef DESTROY_LOOP
 }
 
 string Process_Notif_Line(
-       float msg_is_info,
+       float typeid,
        float chat,
        string input,
        string notiftype,
        string notifname,
        string stringtype)
 {
-       if(msg_is_info)
+       #ifdef CSQC
+       if(typeid == MSG_INFO)
        {
-               #ifdef CSQC
                if((chat && autocvar_notification_allow_chatboxprint)
                        || (autocvar_notification_allow_chatboxprint == 2))
                {
@@ -169,22 +173,25 @@ string Process_Notif_Line(
                        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(
-                               strcat(
-                                       "^1TRAILING NEW LINE AT END OF NOTIFICATION: ",
-                                       "^7net_type = %s, net_name = %s, string = %s.\n"
-                               ),
-                               notiftype,
-                               notifname,
-                               stringtype
-                       ));
-                       notif_error = TRUE;
-                       return substring(input, 1, (strlen(input) - 1));
-               }
        }
+       #endif
+
+       // done to both MSG_INFO and MSG_CENTER
+       if(substring(input, (strlen(input) - 1), 1) == "\n")
+       {
+               print(sprintf(
+                       strcat(
+                               "^1TRAILING NEW LINE AT END OF NOTIFICATION: ",
+                               "^7net_type = %s, net_name = %s, string = %s.\n"
+                       ),
+                       notiftype,
+                       notifname,
+                       stringtype
+               ));
+               notif_error = TRUE;
+               input = substring(input, 1, (strlen(input) - 1));
+       }
+
        return input;
 }
 
@@ -360,8 +367,9 @@ void Create_Notification_Entity(
        string durcnt,
        string normal,
        string gentle,
-       float msg_is_info,
-       float msg_is_multi)
+       float chtype,
+       float optiona,
+       float optionb)
 {
        // =====================
        //  Global Entity Setup
@@ -395,7 +403,14 @@ void Create_Notification_Entity(
                {
                        typestring = "MSG_MULTI";
                        msg_multi_notifs[nameid - 1] = notif;
-                       notif.classname = "MSG_MULTI_notification";
+                       notif.classname = "msg_multi_notification";
+                       break;
+               }
+               case MSG_CHOICE:
+               {
+                       typestring = "MSG_CHOICE";
+                       msg_choice_notifs[nameid - 1] = notif;
+                       notif.classname = "msg_choice_notification";
                        break;
                }
 
@@ -423,147 +438,124 @@ void Create_Notification_Entity(
        // ====================
        //  Notification Setup
        // ====================
-       if(msg_is_multi)
-       {
-               // Set MSG_MULTI string/float counts
-               if((anncename == NO_MSG) && (infoname == NO_MSG) && (centername == NO_MSG))
-               {
-                       print(sprintf(
-                               strcat(
-                                       "^1NOTIFICATION WITH NO SUBCALLS: ",
-                                       "^7net_type = %s, net_name = %s.\n"
-                               ),
-                               typestring,
-                               namestring
-                       ));
-                       notif_error = TRUE;
-               }
-               else
-               {
-                       // announcements don't actually need any arguments, so lets not even count them.
-                       if(anncename != NO_MSG) { notif.nent_msgannce = msg_annce_notifs[anncename - 1]; }
-                       
-                       float infoname_stringcount = 0, infoname_floatcount = 0;
-                       float 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;
-                       }
-                       
-                       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;
-                       }
-                       
-                       // set the requirements of THIS notification to the totals of its subcalls
-                       notif.nent_stringcount = max(infoname_stringcount, centername_stringcount);
-                       notif.nent_floatcount = max(infoname_floatcount, centername_floatcount);
-               }
-       }
-       else if(typeid == MSG_ANNCE)
-       {
-               // Set MSG_ANNCE information and handle precaching
-               #ifdef CSQC
-               if not(GENTLE && (var_cvar == 1))
-               {
-                       if(snd != "")
-                       {
-                               if(notif.nent_enabled)
-                               {
-                                       precache_sound(sprintf("announcer/%s/%s.wav", autocvar_cl_announcer, snd));
-                                       notif.nent_channel = channel;
-                                       notif.nent_snd = strzone(snd);
-                                       notif.nent_vol = vol;
-                                       notif.nent_position = position;
-                               }
-                       }
-                       else
-                       {
-                               print(sprintf(
-                                       strcat(
-                                               "^1NOTIFICATION WITH NO SOUND: ",
-                                               "^7net_type = %s, net_name = %s.\n"
-                                       ),
-                                       typestring,
-                                       namestring
-                               ));
-                               notif_error = TRUE;
-                       }
-               }
-               else { notif.nent_enabled = FALSE; }
-               #else
-               notif.nent_enabled = FALSE;
-               #endif
-       }
-       else
+       switch(typeid)
        {
-               // Set MSG_INFO and MSG_CENTER string/float counts
-               notif.nent_stringcount = strnum;
-               notif.nent_floatcount = flnum;
-
-               // Only initialize arguments if we're either a client or on a dedicated server
-               #ifdef SVQC
-               float should_process_args = server_is_dedicated;
-               #else
-               float should_process_args = TRUE;
-               #endif
-
-               if(should_process_args)
+               case MSG_ANNCE:
                {
-                       // ========================
-                       //  Process Main Arguments
-                       // ========================
-                       if(strnum + flnum)
+                       // Set MSG_ANNCE information and handle precaching
+                       #ifdef CSQC
+                       if not(GENTLE && (var_cvar == 1))
                        {
-                               if(args != "")
+                               if(snd != "")
                                {
-                                       notif.nent_args = strzone(
-                                               Process_Notif_Args(1, args, typestring, namestring));
+                                       if(notif.nent_enabled)
+                                       {
+                                               precache_sound(sprintf("announcer/%s/%s.wav", autocvar_cl_announcer, snd));
+                                               notif.nent_channel = channel;
+                                               notif.nent_snd = strzone(snd);
+                                               notif.nent_vol = vol;
+                                               notif.nent_position = position;
+                                       }
                                }
-                               else if((hudargs == "") && (durcnt ==""))
+                               else
                                {
                                        print(sprintf(
                                                strcat(
-                                                       "^1NOTIFICATION HAS ARG COUNTS BUT NO ARGS OR HUDARGS OR DURCNT: ",
-                                                       "^7net_type = %s, net_name = %s, strnum = %d, flnum = %d\n"
+                                                       "^1NOTIFICATION WITH NO SOUND: ",
+                                                       "^7net_type = %s, net_name = %s.\n"
                                                ),
                                                typestring,
-                                               namestring,
-                                               strnum,
-                                               flnum
+                                               namestring
                                        ));
                                        notif_error = TRUE;
                                }
                        }
-                       else if(args != "")
-                       {
-                               notif.nent_args = strzone(
-                                       Process_Notif_Args(1, args, typestring, namestring));
-                       }
+                       else { notif.nent_enabled = FALSE; }
+                       #else
+                       notif.nent_enabled = FALSE;
+                       #endif
 
+                       break;
+               }
+               
+               case MSG_INFO:
+               case MSG_CENTER:
+               {
+                       // Set MSG_INFO and MSG_CENTER string/float counts
+                       notif.nent_stringcount = strnum;
+                       notif.nent_floatcount = flnum;
 
-                       // =======================================
-                       //  Process HUD and Centerprint Arguments
-                       //    Only processed on CSQC, as these
-                       //    args are only for HUD features.
-                       // =======================================
-                       #ifdef CSQC
-                       if(hudargs != "")
+                       // Only initialize arguments if we're either a client or on a dedicated server
+                       #ifdef SVQC
+                       float should_process_args = server_is_dedicated;
+                       #else
+                       float should_process_args = TRUE;
+                       #endif
+
+                       if(should_process_args)
                        {
-                               notif.nent_hudargs = strzone(
-                                       Process_Notif_Args(2, hudargs, typestring, namestring));
-                                       
-                               if(icon != "") { notif.nent_icon = strzone(icon); }
-                               else
+                               // ========================
+                               //  Process Main Arguments
+                               // ========================
+                               if(strnum + flnum)
+                               {
+                                       if(args != "")
+                                       {
+                                               notif.nent_args = strzone(
+                                                       Process_Notif_Args(1, args, typestring, namestring));
+                                       }
+                                       else if((hudargs == "") && (durcnt ==""))
+                                       {
+                                               print(sprintf(
+                                                       strcat(
+                                                               "^1NOTIFICATION HAS ARG COUNTS BUT NO ARGS OR HUDARGS OR DURCNT: ",
+                                                               "^7net_type = %s, net_name = %s, strnum = %d, flnum = %d\n"
+                                                       ),
+                                                       typestring,
+                                                       namestring,
+                                                       strnum,
+                                                       flnum
+                                               ));
+                                               notif_error = TRUE;
+                                       }
+                               }
+                               else if(args != "")
+                               {
+                                       notif.nent_args = strzone(
+                                               Process_Notif_Args(1, args, typestring, namestring));
+                               }
+
+
+                               // =======================================
+                               //  Process HUD and Centerprint Arguments
+                               //    Only processed on CSQC, as these
+                               //    args are only for HUD features.
+                               // =======================================
+                               #ifdef CSQC
+                               if(hudargs != "")
+                               {
+                                       notif.nent_hudargs = strzone(
+                                               Process_Notif_Args(2, hudargs, typestring, namestring));
+                                               
+                                       if(icon != "") { notif.nent_icon = strzone(icon); }
+                                       else
+                                       {
+                                               print(sprintf(
+                                                       strcat(
+                                                               "^1NOTIFICATION HAS HUDARGS BUT NO ICON: ",
+                                                               "^7net_type = %s, net_name = %s.\n"
+                                                       ),
+                                                       typestring,
+                                                       namestring
+                                               ));
+                                               notif_error = TRUE;
+                                       }
+                               }
+                               else if(icon != "")
                                {
                                        print(sprintf(
                                                strcat(
-                                                       "^1NOTIFICATION HAS HUDARGS BUT NO ICON: ",
+                                                       "^1NOTIFICATION HAS ICON BUT NO HUDARGS: ",
                                                        "^7net_type = %s, net_name = %s.\n"
                                                ),
                                                typestring,
@@ -571,31 +563,60 @@ void Create_Notification_Entity(
                                        ));
                                        notif_error = TRUE;
                                }
-                       }
-                       else if(icon != "")
-                       {
-                               print(sprintf(
-                                       strcat(
-                                               "^1NOTIFICATION HAS ICON BUT NO HUDARGS: ",
-                                               "^7net_type = %s, net_name = %s.\n"
-                                       ),
-                                       typestring,
-                                       namestring
-                               ));
-                               notif_error = TRUE;
-                       }
 
-                       if(durcnt != "")
-                       {
-                               notif.nent_durcnt = strzone(
-                                       Process_Notif_Args(3, durcnt, typestring, namestring));
-                                       
-                               if(cpid != NO_MSG) { notif.nent_cpid = cpid; }
-                               else
+                               if(durcnt != "")
+                               {
+                                       notif.nent_durcnt = strzone(
+                                               Process_Notif_Args(3, durcnt, typestring, namestring));
+                                               
+                                       if(cpid != NO_MSG) { notif.nent_cpid = cpid; }
+                                       else
+                                       {
+                                               print(sprintf(
+                                                       strcat(
+                                                               "^1NOTIFICATION HAS DURCNT BUT NO CPID: ",
+                                                               "^7net_type = %s, net_name = %s.\n"
+                                                       ),
+                                                       typestring,
+                                                       namestring
+                                               ));
+                                               notif_error = TRUE;
+                                       }
+                               } 
+                               else if(cpid != NO_MSG) { notif.nent_cpid = cpid; }
+                               #endif
+
+
+                               // ======================
+                               //  Process Notif String
+                               // ======================
+                               #define SET_NOTIF_STRING(string,stringname) \
+                                       notif.nent_string = strzone(CCR( \
+                                               Process_Notif_Line( \
+                                                       typeid, \
+                                                       (var_cvar > 1), \
+                                                       string, \
+                                                       typestring, \
+                                                       namestring, \
+                                                       stringname \
+                                               )) \
+                                       );
+
+                               if(GENTLE)
+                               {
+                                       if(gentle != "") { SET_NOTIF_STRING(gentle, "GENTLE") }
+                                       else if(normal != "") { SET_NOTIF_STRING(normal, "NORMAL") }
+                               }
+                               else if(normal != "") { SET_NOTIF_STRING(normal, "NORMAL") }
+                               
+                               #undef SET_NOTIF_STRING
+
+                               // Check to make sure a string was chosen
+                               if(notif.nent_string == "")
                                {
                                        print(sprintf(
                                                strcat(
-                                                       "^1NOTIFICATION HAS DURCNT BUT NO CPID: ",
+                                                       "^1EMPTY NOTIFICATION: ",
                                                        "^7net_type = %s, net_name = %s.\n"
                                                ),
                                                typestring,
@@ -603,41 +624,19 @@ void Create_Notification_Entity(
                                        ));
                                        notif_error = TRUE;
                                }
-                       } 
-                       else if(cpid != NO_MSG) { notif.nent_cpid = cpid; }
-                       #endif
-
-
-                       // ======================
-                       //  Process Notif String
-                       // ======================
-                       #define SET_NOTIF_STRING(string,stringname) \
-                               notif.nent_string = strzone(CCR( \
-                                       Process_Notif_Line( \
-                                               msg_is_info, \
-                                               (var_cvar > 1), \
-                                               string, \
-                                               typestring, \
-                                               namestring, \
-                                               stringname \
-                                       )) \
-                               );
-
-                       if(GENTLE)
-                       {
-                               if(gentle != "") { SET_NOTIF_STRING(gentle, "GENTLE") }
-                               else if(normal != "") { SET_NOTIF_STRING(normal, "NORMAL") }
                        }
-                       else if(normal != "") { SET_NOTIF_STRING(normal, "NORMAL") }
-                       
-                       #undef SET_NOTIF_STRING
 
-                       // Check to make sure a string was chosen
-                       if(notif.nent_string == "")
+                       break;
+               }
+
+               case MSG_MULTI:
+               {
+                       // Set MSG_MULTI string/float counts
+                       if((anncename == NO_MSG) && (infoname == NO_MSG) && (centername == NO_MSG))
                        {
                                print(sprintf(
                                        strcat(
-                                               "^1EMPTY NOTIFICATION: ",
+                                               "^1NOTIFICATION WITH NO SUBCALLS: ",
                                                "^7net_type = %s, net_name = %s.\n"
                                        ),
                                        typestring,
@@ -645,7 +644,42 @@ void Create_Notification_Entity(
                                ));
                                notif_error = TRUE;
                        }
+                       else
+                       {
+                               // announcements don't actually need any arguments, so lets not even count them.
+                               if(anncename != NO_MSG) { notif.nent_msgannce = msg_annce_notifs[anncename - 1]; }
+                               
+                               float infoname_stringcount = 0, infoname_floatcount = 0;
+                               float 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;
+                               }
+                               
+                               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;
+                               }
+                               
+                               // set the requirements of THIS notification to the totals of its subcalls
+                               notif.nent_stringcount = max(infoname_stringcount, centername_stringcount);
+                               notif.nent_floatcount = max(infoname_floatcount, centername_floatcount);
+                       }
+                       
+                       break;
                }
+
+               case MSG_CHOICE:
+               {
+                       break;
+               }
+               
+               default: print("DAFUQ?\n"); notif_error = TRUE; break;
        }
 
        // now check to see if any errors happened 
index e4a8f69a08d9e365fa7ec1519d898c1ed97ea0a0..9e3b007d543ed7225f08f798d6a2efb9bfea23d2 100644 (file)
@@ -62,8 +62,9 @@ void Create_Notification_Entity(
        string durcnt,
        string normal,
        string gentle,
-       float msg_is_info,
-       float msg_is_multi);
+       float chtype,
+       float optiona,
+       float optionb);
 
 void Dump_Notifications(float fh, float alsoprint);
 
@@ -572,7 +573,6 @@ void Send_Notification_WOVA(
        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"), "")
 
-
 #define MULTITEAM_MULTI(default,prefix,teams,anncepre,infopre,centerpre) \
        MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \
        MSG_MULTI_NOTIF(default, prefix##BLUE, anncepre##BLUE, infopre##BLUE, centerpre##BLUE) \
@@ -705,21 +705,21 @@ void Send_Notification_WOVA(
        MSG_MULTI_NOTIF(1, WEAPON_UZI_MURDER_SNIPE,              NO_MSG,        INFO_WEAPON_UZI_MURDER_SNIPE,              NO_MSG) \
        MSG_MULTI_NOTIF(1, WEAPON_UZI_MURDER_SPRAY,              NO_MSG,        INFO_WEAPON_UZI_MURDER_SPRAY,              NO_MSG)
 
-#define MULTITEAM_CHOICE(default,prefix,teams,type,opa,opb) \
-       MSG_CHOICE_NOTIF(default, prefix##RED, type, opa##RED, opb##RED) \
-       MSG_CHOICE_NOTIF(default, prefix##BLUE, type, opa##BLUE, opb##BLUE) \
+#define MULTITEAM_CHOICE(default,prefix,teams,chtype,optiona,optionb) \
+       MSG_CHOICE_NOTIF(default, prefix##RED, chtype, optiona##RED, optionb##RED) \
+       MSG_CHOICE_NOTIF(default, prefix##BLUE, chtype, optiona##BLUE, optionb##BLUE) \
        #if teams >= 3 \
-               MSG_CHOICE_NOTIF(default, prefix##YELLOW, type, opa##YELLOW, opb##YELLOW) \
+               MSG_CHOICE_NOTIF(default, prefix##YELLOW, chtype, optiona##YELLOW, optionb##YELLOW) \
        #endif \
        #if teams >= 4 \
-               MSG_CHOICE_NOTIF(default, prefix##PINK, type, opa##PINK, opb##PINK) \
+               MSG_CHOICE_NOTIF(default, prefix##PINK, chtype, optiona##PINK, optionb##PINK) \
        #endif
 #define MSG_CHOICE_NOTIFICATIONS \
        MSG_CHOICE_NOTIF(1, CHOICE_FRAG,          MSG_CENTER,  CENTER_DEATH_MURDER_FRAG,         CENTER_DEATH_MURDER_FRAG_VERBOSE) \
        MSG_CHOICE_NOTIF(1, CHOICE_FRAGGED,       MSG_CENTER,  CENTER_DEATH_MURDER_FRAGGED,      CENTER_DEATH_MURDER_FRAGGED_VERBOSE) \
        MSG_CHOICE_NOTIF(1, CHOICE_TYPEFRAG,      MSG_CENTER,  CENTER_DEATH_MURDER_TYPEFRAG,     CENTER_DEATH_MURDER_TYPEFRAG_VERBOSE) \
-       MSG_CHOICE_NOTIF(1, CHOICE_TYPERFRAGGED,  MSG_CENTER,  CENTER_DEATH_MURDER_TYPEFRAGGED,  CENTER_DEATH_MURDER_TYPEFRAGGED_VERBOSE) \
-       MSG_CHOICE_NOTIF(2, CHOICE_)
+       MSG_CHOICE_NOTIF(1, CHOICE_TYPERFRAGGED,  MSG_CENTER,  CENTER_DEATH_MURDER_TYPEFRAGGED,  CENTER_DEATH_MURDER_TYPEFRAGGED_VERBOSE)
+       //MSG_CHOICE_NOTIF(2, CHOICE_)
 
 
 // ===========================
@@ -1076,12 +1076,14 @@ entity msg_annce_notifs[NOTIF_MAX];
 entity msg_info_notifs[NOTIF_MAX];
 entity msg_center_notifs[NOTIF_MAX];
 entity msg_multi_notifs[NOTIF_MAX];
+entity msg_choice_notifs[NOTIF_MAX];
 
 // notification counts
 float NOTIF_ANNCE_COUNT;
 float NOTIF_INFO_COUNT;
 float NOTIF_CENTER_COUNT;
 float NOTIF_MULTI_COUNT;
+float NOTIF_CHOICE_COUNT;
 float NOTIF_CPID_COUNT;
 
 // notification entity values
@@ -1105,6 +1107,9 @@ float NOTIF_CPID_COUNT;
 .string nent_durcnt;
 .string nent_string;
 
+.string nent_msgopa;
+.string nent_msgopb;
+
 // networked notification values
 .float nent_broadcast;
 .entity nent_client;
@@ -1142,8 +1147,9 @@ float NOTIF_CPID_COUNT;
                        "",                            /* durcnt */ \
                        "",                            /* normal */ \
                        "",                            /* gentle */ \
-                       FALSE,                         /* msg_is_info */ \
-                       FALSE);                        /* msg_is_multi */ \
+                       NO_MSG,                        /* chtype */ \
+                       NO_MSG,                        /* optiona */ \
+                       NO_MSG);                       /* optionb */ \
        } \
        ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name)
 
@@ -1176,8 +1182,9 @@ float NOTIF_CPID_COUNT;
                        "",                            /* durcnt */ \
                        normal,                        /* normal */ \
                        gentle,                        /* gentle */ \
-                       TRUE,                          /* msg_is_info */ \
-                       FALSE);                        /* msg_is_multi */ \
+                       NO_MSG,                        /* chtype */ \
+                       NO_MSG,                        /* optiona */ \
+                       NO_MSG);                       /* optionb */ \
        } \
        ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name)
 
@@ -1212,8 +1219,9 @@ float NOTIF_CPID_COUNT;
                        durcnt,                        /* durcnt */ \
                        normal,                        /* normal */ \
                        gentle,                        /* gentle */ \
-                       FALSE,                         /* msg_is_info */ \
-                       FALSE);                        /* msg_is_multi */ \
+                       NO_MSG,                        /* chtype */ \
+                       NO_MSG,                        /* optiona */ \
+                       NO_MSG);                       /* optionb */ \
        } \
        ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name)
 
@@ -1246,8 +1254,44 @@ float NOTIF_CPID_COUNT;
                        "",                            /* durcnt */ \
                        "",                            /* normal */ \
                        "",                            /* gentle */ \
-                       FALSE,                         /* msg_is_info */ \
-                       TRUE);                         /* msg_is_multi */ \
+                       NO_MSG,                        /* chtype */ \
+                       NO_MSG,                        /* optiona */ \
+                       NO_MSG);                       /* optionb */ \
+       } \
+       ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name)
+
+#define MSG_CHOICE_NOTIF(default,name,chtype,optiona,optionb) \
+       NOTIF_ADD_AUTOCVAR(name, default) \
+       float name; \
+       void RegisterNotification_##name() \
+       { \
+               SET_FIELD_COUNT(name, NOTIF_FIRST, NOTIF_CHOICE_COUNT) \
+               CHECK_MAX_COUNT(name, NOTIF_MAX, NOTIF_CHOICE_COUNT, "notifications") \
+               Create_Notification_Entity( \
+                       default,                       /* var_default */ \
+                       autocvar_notification_##name,  /* var_cvar */ \
+                       MSG_CHOICE,                    /* typeid */ \
+                       name,                          /* nameid */ \
+                       strtoupper(#name),             /* namestring */ \
+                       NO_MSG,                        /* anncename */ \
+                       NO_MSG,                        /* infoname */ \
+                       NO_MSG,                        /* centername */ \
+                       NO_MSG,                        /* channel */ \
+                       "",                            /* snd */ \
+                       NO_MSG,                        /* vol */ \
+                       NO_MSG,                        /* position */ \
+                       NO_MSG,                        /* strnum */ \
+                       NO_MSG,                        /* flnum */ \
+                       "",                            /* args */ \
+                       "",                            /* hudargs */ \
+                       "",                            /* icon */ \
+                       NO_MSG,                        /* cpid */ \
+                       "",                            /* durcnt */ \
+                       "",                            /* normal */ \
+                       "",                            /* gentle */ \
+                       chtype,                        /* chtype */ \
+                       optiona,                       /* optiona */ \
+                       optionb);                      /* optionb */ \
        } \
        ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name)
 
@@ -1297,10 +1341,12 @@ MSG_ANNCE_NOTIFICATIONS
 MSG_INFO_NOTIFICATIONS
 MSG_CENTER_NOTIFICATIONS
 MSG_MULTI_NOTIFICATIONS
+MSG_CHOICE_NOTIFICATIONS
 ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotifications_Done)
 #undef MSG_ANNCE_NOTIF
 #undef MSG_INFO_NOTIF
 #undef MSG_CENTER_NOTIF
 #undef MSG_MULTI_NOTIF
+#undef MSG_CHOICE_NOTIF
 
 #undef NOTIF_ADD_AUTOCVAR