]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/quickmenu.qc
#includes: cleanup
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / quickmenu.qc
index b2e1d5b1437c34d6edbaea99b3bec09e55d7a8d8..dd2ba0315485d7ab08fe28f828de4fbe3211ed23 100644 (file)
@@ -2,8 +2,6 @@
 
 #include "hud_config.qh"
 
-#include "../dpdefs/keycodes.qh"
-
 // QUICKMENU_MAXLINES must be <= 10
 const int QUICKMENU_MAXLINES = 10;
 // visible entries are loaded from QuickMenu_Buffer into QuickMenu_Page_* arrays
@@ -25,6 +23,16 @@ int QuickMenu_Buffer_Size;
 int QuickMenu_Buffer_Index;
 string QuickMenu_CurrentSubMenu;
 float QuickMenu_TimeOut;
+
+// QuickMenu_Buffer are labeled with these tags
+#define QM_TAG_TITLE "T"
+#define QM_TAG_SUBMENU "S"
+#define QM_TAG_COMMAND "C"
+#define QM_TAG_PLCOMMAND "P"
+
+#define QuickMenu_Buffer_Set(tag, string) bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat(tag, string))
+#define QuickMenu_Buffer_Get() bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index)
+
 // if s1 is not empty s will be displayed as command otherwise as submenu
 void QuickMenu_Page_LoadEntry(int i, string s, string s1)
 {
@@ -62,6 +70,20 @@ bool QuickMenu_Open(string mode, string submenu)
                        mode = "file";
        }
 
+       if(mode == "file")
+       {
+               if(autocvar_hud_panel_quickmenu_file == "" || autocvar_hud_panel_quickmenu_file == "0")
+                       printf("No file name is set in hud_panel_quickmenu_file, loading default quickmenu\n");
+               else
+               {
+                       fh = fopen(autocvar_hud_panel_quickmenu_file, FILE_READ);
+                       if(fh < 0)
+                               printf("Couldn't open file \"%s\", loading default quickmenu\n", autocvar_hud_panel_quickmenu_file);
+               }
+               if(fh < 0)
+                       mode = "default";
+       }
+
        if(mode == "default")
        {
                QuickMenu_Buffer = buf_create();
@@ -72,15 +94,6 @@ bool QuickMenu_Open(string mode, string submenu)
        }
        else if(mode == "file")
        {
-               if(autocvar_hud_panel_quickmenu_file != "")
-               if(autocvar_hud_panel_quickmenu_file != "0")
-                       fh = fopen(autocvar_hud_panel_quickmenu_file, FILE_READ);
-               if(fh < 0)
-               {
-                       printf("Couldn't open file \"%s\"\n", autocvar_hud_panel_quickmenu_file);
-                       return false;
-               }
-
                QuickMenu_Buffer = buf_create();
                if(QuickMenu_Buffer < 0)
                {
@@ -94,17 +107,17 @@ bool QuickMenu_Open(string mode, string submenu)
                        // first skip invalid entries, so we don't check them anymore
                        float argc;
                        argc = tokenize_console(s);
-                       if(argc == 0 || argv(0) == "" || substring(argv(0), 0, 2) == "////")
+                       if(argc == 0 || argv(0) == "")
                                continue;
                        if(argc == 1)
-                               bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("S", argv(0))); // Submenu
+                               QuickMenu_Buffer_Set(QM_TAG_SUBMENU, argv(0));
                        else if(argc == 2)
                        {
                                if(argv(1) == "")
                                        continue;
-                               bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("T", argv(0))); // command Title
+                               QuickMenu_Buffer_Set(QM_TAG_TITLE, argv(0));
                                ++QuickMenu_Buffer_Size;
-                               bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("C", argv(1))); // command
+                               QuickMenu_Buffer_Set(QM_TAG_COMMAND, argv(1));
                        }
                        else if(argc == 3)
                        {
@@ -112,9 +125,9 @@ bool QuickMenu_Open(string mode, string submenu)
                                float teamplayers = 0, without_me = 0;
                                switch(argv(2))
                                {
-                                       case "ALLPLAYERS_BUT_ME":               without_me = 1;
+                                       case "ALLPLAYERS_BUT_ME":               without_me = 1; // fall through
                                        case "ALLPLAYERS":                              teamplayers = 0; break;
-                                       case "OWNTEAMPLAYERS_BUT_ME":   without_me = 1;
+                                       case "OWNTEAMPLAYERS_BUT_ME":   without_me = 1; // fall through
                                        case "OWNTEAMPLAYERS":                  teamplayers = 1; break;
                                        case "ENEMYTEAMPLAYERS":                teamplayers = 2; break;
                                        default: continue;
@@ -122,13 +135,13 @@ bool QuickMenu_Open(string mode, string submenu)
 
                                if(QuickMenu_Buffer_Size + 3 < QUICKMENU_BUFFER_MAXENTRIES)
                                {
-                                       bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("S", argv(0))); // Submenu
+                                       QuickMenu_Buffer_Set(QM_TAG_SUBMENU, argv(0));
                                        ++QuickMenu_Buffer_Size;
-                                       bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("T", ftos(teamplayers), ftos(without_me))); // command arguments
+                                       QuickMenu_Buffer_Set(QM_TAG_TITLE, strcat(ftos(teamplayers), ftos(without_me))); // put PLCOMMAND arguments in the title string
                                        ++QuickMenu_Buffer_Size;
-                                       bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("P", argv(1))); // command for each player
+                                       QuickMenu_Buffer_Set(QM_TAG_PLCOMMAND, argv(1));
                                        ++QuickMenu_Buffer_Size;
-                                       bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("S", argv(0))); // Submenu
+                                       QuickMenu_Buffer_Set(QM_TAG_SUBMENU, argv(0));
                                }
                        }
                        ++QuickMenu_Buffer_Size;
@@ -158,7 +171,7 @@ bool QuickMenu_Open(string mode, string submenu)
                setcursormode(1);
        hudShiftState = 0;
 
-       QuickMenu_TimeOut = time + autocvar_hud_panel_quickmenu_time;
+       QuickMenu_TimeOut = ((autocvar_hud_panel_quickmenu_time > 0) ? time + autocvar_hud_panel_quickmenu_time : 0);
        return true;
 }
 
@@ -198,8 +211,8 @@ void QuickMenu_skip_submenu(string submenu)
        z_submenu = strzone(submenu);
        for(++QuickMenu_Buffer_Index ; QuickMenu_Buffer_Index < QuickMenu_Buffer_Size; ++QuickMenu_Buffer_Index)
        {
-               s = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index);
-               if(substring(s, 0, 1) != "S")
+               s = QuickMenu_Buffer_Get();
+               if(substring(s, 0, 1) != QM_TAG_SUBMENU)
                        continue;
                if(substring(s, 1, -1) == z_submenu) // submenu end
                        break;
@@ -261,8 +274,8 @@ bool QuickMenu_Page_Load(string target_submenu, int new_page)
                // skip everything until the submenu open tag is found
                for( ; QuickMenu_Buffer_Index < QuickMenu_Buffer_Size; ++QuickMenu_Buffer_Index)
                {
-                       s = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index);
-                       if(substring(s, 0, 1) == "S" && substring(s, 1, -1) == z_submenu)
+                       s = QuickMenu_Buffer_Get();
+                       if(substring(s, 0, 1) == QM_TAG_SUBMENU && substring(s, 1, -1) == z_submenu)
                        {
                                // printf("^3 beginning of %s\n", z_submenu);
                                ++QuickMenu_Buffer_Index;
@@ -281,7 +294,7 @@ bool QuickMenu_Page_Load(string target_submenu, int new_page)
        int entry_num = 0; // counts entries in target_submenu
        for( ; QuickMenu_Buffer_Index < QuickMenu_Buffer_Size; ++QuickMenu_Buffer_Index)
        {
-               s = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index);
+               s = QuickMenu_Buffer_Get();
 
                if(z_submenu != "" && substring(s, 1, -1) == z_submenu)
                {
@@ -304,20 +317,20 @@ bool QuickMenu_Page_Load(string target_submenu, int new_page)
                }
 
                // NOTE: entries are loaded starting from 1, not from 0
-               if(substring(s, 0, 1) == "S") // submenu
+               if(substring(s, 0, 1) == QM_TAG_SUBMENU)
                {
                        if(entry_num >= first_entry)
                                QuickMenu_Page_LoadEntry(QuickMenu_Page_Entries, substring(s, 1, -1), "");
                        QuickMenu_skip_submenu(substring(s, 1, -1));
                }
-               else if(entry_num >= first_entry && substring(s, 0, 1) == "T")
+               else if(entry_num >= first_entry && substring(s, 0, 1) == QM_TAG_TITLE)
                {
                        ++QuickMenu_Buffer_Index;
-                       cmd = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index);
+                       cmd = QuickMenu_Buffer_Get();
                        string command_code = substring(cmd, 0, 1);
-                       if(command_code == "C")
+                       if(command_code == QM_TAG_COMMAND)
                                cmd = substring(cmd, 1, -1);
-                       else if(command_code == "P")
+                       else if(command_code == QM_TAG_PLCOMMAND)
                        {
                                // throw away the current quickmenu buffer and load a new one
                                cmd = substring(cmd, 1, -1);
@@ -342,7 +355,7 @@ bool QuickMenu_Page_Load(string target_submenu, int new_page)
                QuickMenu_Close();
                return false;
        }
-       QuickMenu_TimeOut = time + autocvar_hud_panel_quickmenu_time;
+       QuickMenu_TimeOut = ((autocvar_hud_panel_quickmenu_time > 0) ? time + autocvar_hud_panel_quickmenu_time : 0);
        return true;
 }
 
@@ -365,7 +378,7 @@ bool QuickMenu_ActionForNumber(int num)
        if (QuickMenu_Page_Command[num] != "")
        {
                localcmd(strcat("\n", QuickMenu_Page_Command[num], "\n"));
-               QuickMenu_TimeOut = time + autocvar_hud_panel_quickmenu_time;
+               QuickMenu_TimeOut = ((autocvar_hud_panel_quickmenu_time > 0) ? time + autocvar_hud_panel_quickmenu_time : 0);
                return true;
        }
        if (QuickMenu_Page_Description[num] != "")
@@ -571,6 +584,7 @@ void HUD_QuickMenu(void)
                //if(!autocvar_hud_panel_quickmenu) return;
                if(!hud_panel_quickmenu) return;
 
+               if(QuickMenu_TimeOut)
                if(time > QuickMenu_TimeOut)
                {
                        QuickMenu_Close();
@@ -688,7 +702,7 @@ void HUD_QuickMenu(void)
        if(target_submenu == eng_submenu && target_submenu_found) \
                return; /* target_submenu entries are now loaded, exit */ \
        if(QuickMenu_Buffer_Size < QUICKMENU_BUFFER_MAXENTRIES) \
-               bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("S", submenu)); \
+               QuickMenu_Buffer_Set(QM_TAG_SUBMENU, submenu); \
        ++QuickMenu_Buffer_Size; \
        if(target_submenu == eng_submenu && !target_submenu_found) { \
                QuickMenu_Buffer_Size = 0; /* enable load of next entries */ \
@@ -699,9 +713,9 @@ void HUD_QuickMenu(void)
 #define QUICKMENU_ENTRY(title,command) { \
        if(QuickMenu_Buffer_Size + 1 < QUICKMENU_BUFFER_MAXENTRIES) \
        { \
-               bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("T", title)); \
+               QuickMenu_Buffer_Set(QM_TAG_TITLE, title); \
                ++QuickMenu_Buffer_Size; \
-               bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("C", command)); \
+               QuickMenu_Buffer_Set(QM_TAG_COMMAND, command); \
        } \
        ++QuickMenu_Buffer_Size; \
 }
@@ -709,9 +723,9 @@ void HUD_QuickMenu(void)
 #define QUICKMENU_SMENU_PL(submenu,eng_submenu,command,teamplayers,without_me) { \
        if(QuickMenu_Buffer_Size + 3 < QUICKMENU_BUFFER_MAXENTRIES) {\
                QUICKMENU_SMENU(submenu,eng_submenu) \
-               bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("T", ftos(teamplayers), ftos(without_me))); \
+               QuickMenu_Buffer_Set(QM_TAG_TITLE, strcat(ftos(teamplayers), ftos(without_me))); \
                ++QuickMenu_Buffer_Size; \
-               bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("P", command)); \
+               QuickMenu_Buffer_Set(QM_TAG_PLCOMMAND, command); \
                ++QuickMenu_Buffer_Size; \
                QUICKMENU_SMENU(submenu,eng_submenu) \
        } \
@@ -762,8 +776,6 @@ void QuickMenu_Default(string target_submenu)
                QuickMenu_Buffer_Size = QUICKMENU_BUFFER_MAXENTRIES; // forbids load of next entries until target_submenu
 
        QUICKMENU_SMENU(CTX(_("QMCMD^Chat")), "Chat")
-               if(prvm_language != "en")
-               QUICKMENU_ENTRY(CTX(_("QMCMD^Send untranslated")), "toggle hud_panel_quickmenu_translatecommands 0 1")
                QUICKMENU_ENTRY_TC(CTX(_("QMCMD^nice one")), "say %s", ":-) / nice one", CTX(_("QMCMD^:-) / nice one")))
                QUICKMENU_ENTRY_TC(CTX(_("QMCMD^good game")), "say %s", "good game", CTX(_("QMCMD^good game")))
                QUICKMENU_ENTRY_TC(CTX(_("QMCMD^hi / good luck")), "say %s", "hi / good luck and have fun", CTX(_("QMCMD^hi / good luck and have fun")))
@@ -786,7 +798,7 @@ void QuickMenu_Default(string target_submenu)
                QUICKMENU_ENTRY_TC(CTX(_("QMCMD^killed flag, icon")), "say_team %s; g_waypointsprite_team_here_p", "killed flagcarrier (l:%y^7)", CTX(_("QMCMD^killed flagcarrier (l:%y^7)")))
                QUICKMENU_ENTRY_TC(CTX(_("QMCMD^dropped flag, icon")), "say_team %s; g_waypointsprite_team_here_d", "dropped flag (l:%d^7)", CTX(_("QMCMD^dropped flag (l:%d^7)")))
                QUICKMENU_ENTRY_TC(CTX(_("QMCMD^drop gun, icon")), "say_team %s; g_waypointsprite_team_here; wait; dropweapon", "dropped gun %w^7 (l:%l^7)", CTX(_("QMCMD^dropped gun %w^7 (l:%l^7)")))
-               QUICKMENU_ENTRY_TC(CTX(_("QMCMD^drop flag/key, icon")), "say_team %s; g_waypointsprite_team_here; wait; +use", "dropped flag/key %w^7 (l:%l^7)", CTX(_("QMCMD^dropped flag/key %w^7 (l:%l^7)")))
+               QUICKMENU_ENTRY_TC(CTX(_("QMCMD^drop flag/key, icon")), "say_team %s; g_waypointsprite_team_here; wait; use", "dropped flag/key %w^7 (l:%l^7)", CTX(_("QMCMD^dropped flag/key %w^7 (l:%l^7)")))
        QUICKMENU_SMENU(CTX(_("QMCMD^Team chat")), "Team chat")
        }
 
@@ -804,7 +816,7 @@ void QuickMenu_Default(string target_submenu)
 
                QUICKMENU_SMENU(CTX(_("QMCMD^Sound settings")), "Sound settings")
                        QUICKMENU_ENTRY(CTX(_("QMCMD^Hit sound")), "toggle cl_hitsound")
-                       QUICKMENU_ENTRY(CTX(_("QMCMD^Chat sound")), "toggle cl_chatsound")
+                       QUICKMENU_ENTRY(CTX(_("QMCMD^Chat sound")), "toggle con_chatsound")
                QUICKMENU_SMENU(CTX(_("QMCMD^Sound settings")), "Sound settings")
 
                if(spectatee_status > 0)
@@ -827,6 +839,8 @@ void QuickMenu_Default(string target_submenu)
                }
 
                QUICKMENU_ENTRY(CTX(_("QMCMD^Fullscreen")), "toggle vid_fullscreen; vid_restart")
+               if(prvm_language != "en")
+               QUICKMENU_ENTRY(CTX(_("QMCMD^Translate chat messages")), "toggle hud_panel_quickmenu_translatecommands")
        QUICKMENU_SMENU(CTX(_("QMCMD^Settings")), "Settings")
 
        QUICKMENU_SMENU(CTX(_("QMCMD^Call a vote")), "Call a vote")