]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - console.c
Fix playermodel fallback failing on Xonotic, allowing invisible playermodel
[xonotic/darkplaces.git] / console.c
index a2f850c0b0877a76f94b55b86d25b8353f93bbb8..5bbf112cf1f9b03dda66377204fa0543b1cec4db 100644 (file)
--- a/console.c
+++ b/console.c
@@ -57,7 +57,9 @@ cvar_t con_textsize = {CVAR_CLIENT | CVAR_SAVE, "con_textsize","8", "console tex
 cvar_t con_notifysize = {CVAR_CLIENT | CVAR_SAVE, "con_notifysize","8", "notify text size in virtual 2D pixels"};
 cvar_t con_chatsize = {CVAR_CLIENT | CVAR_SAVE, "con_chatsize","8", "chat text size in virtual 2D pixels (if con_chat is enabled)"};
 cvar_t con_chatsound = {CVAR_CLIENT | CVAR_SAVE, "con_chatsound","1", "enables chat sound to play on message"};
-
+cvar_t con_chatsound_file = {CVAR_CLIENT, "con_chatsound_file","sound/misc/talk.wav", "The sound to play for chat messages"};
+cvar_t con_chatsound_team_file = {CVAR_CLIENT, "con_chatsound_team_file","sound/misc/talk2.wav", "The sound to play for team chat messages"};
+cvar_t con_chatsound_team_mask = {CVAR_CLIENT, "con_chatsound_team_mask","40","Magic ASCII code that denotes a team chat message"};
 
 cvar_t sys_specialcharactertranslation = {CVAR_CLIENT | CVAR_SERVER, "sys_specialcharactertranslation", "1", "terminal console conchars to ASCII translation (set to 0 if your conchars.tga is for an 8bit character set or if you want raw output)"};
 #ifdef WIN32
@@ -807,7 +809,7 @@ static void Con_ConDump_f(cmd_state_t *cmd)
        file = FS_OpenRealFile(Cmd_Argv(cmd, 1), "w", false);
        if (!file)
        {
-               Con_Printf("condump: unable to write file \"%s\"\n", Cmd_Argv(cmd, 1));
+               Con_Printf(CON_ERROR "condump: unable to write file \"%s\"\n", Cmd_Argv(cmd, 1));
                return;
        }
        if (con_mutex) Thread_LockMutex(con_mutex);
@@ -884,6 +886,9 @@ void Con_Init (void)
        Cvar_RegisterVariable (&con_notifytime);
        Cvar_RegisterVariable (&con_textsize);
        Cvar_RegisterVariable (&con_chatsound);
+       Cvar_RegisterVariable (&con_chatsound_file);
+       Cvar_RegisterVariable (&con_chatsound_team_file);
+       Cvar_RegisterVariable (&con_chatsound_team_mask);
 
        // --blub
        Cvar_RegisterVariable (&con_nickcompletion);
@@ -896,18 +901,18 @@ void Con_Init (void)
        Cvar_RegisterVariable (&condump_stripcolors);
 
        // register our commands
-       Cmd_AddCommand(&cmd_client, "toggleconsole", Con_ToggleConsole_f, "opens or closes the console");
-       Cmd_AddCommand(&cmd_client, "messagemode", Con_MessageMode_f, "input a chat message to say to everyone");
-       Cmd_AddCommand(&cmd_client, "messagemode2", Con_MessageMode2_f, "input a chat message to say to only your team");
-       Cmd_AddCommand(&cmd_client, "commandmode", Con_CommandMode_f, "input a console command");
-       Cmd_AddCommand(&cmd_client, "clear", Con_Clear_f, "clear console history");
-       Cmd_AddCommand(&cmd_client, "maps", Con_Maps_f, "list information about available maps");
-       Cmd_AddCommand(&cmd_client, "condump", Con_ConDump_f, "output console history to a file (see also log_file)");
-
-       Cmd_AddCommand(&cmd_server, "maps", Con_Maps_f, "list information about available maps");
-       Cmd_AddCommand(&cmd_server, "condump", Con_ConDump_f, "output console history to a file (see also log_file)");
+       Cmd_AddCommand(CMD_CLIENT, "toggleconsole", Con_ToggleConsole_f, "opens or closes the console");
+       Cmd_AddCommand(CMD_CLIENT, "messagemode", Con_MessageMode_f, "input a chat message to say to everyone");
+       Cmd_AddCommand(CMD_CLIENT, "messagemode2", Con_MessageMode2_f, "input a chat message to say to only your team");
+       Cmd_AddCommand(CMD_CLIENT, "commandmode", Con_CommandMode_f, "input a console command");
+       Cmd_AddCommand(CMD_SHARED, "clear", Con_Clear_f, "clear console history");
+       Cmd_AddCommand(CMD_SHARED, "maps", Con_Maps_f, "list information about available maps");
+       Cmd_AddCommand(CMD_SHARED, "condump", Con_ConDump_f, "output console history to a file (see also log_file)");
 
        con_initialized = true;
+       // initialize console window (only used by sys_win.c)
+       Sys_InitConsole();
+       
        Con_DPrint("Console initialized.\n");
 }
 
@@ -1159,28 +1164,17 @@ void Con_MaskPrint(int additionalmask, const char *msg)
                                {
                                        if (con_chatsound.value)
                                        {
-                                               if(IS_NEXUIZ_DERIVED(gamemode))
-                                               {
-                                                       if(msg[1] == '\r' && cl.foundtalk2wav)
-                                                               S_LocalSound ("sound/misc/talk2.wav");
-                                                       else
-                                                               S_LocalSound ("sound/misc/talk.wav");
-                                               }
+                                               if(msg[1] == con_chatsound_team_mask.integer && cl.foundteamchatsound)
+                                                       S_LocalSound (con_chatsound_team_file.string);
                                                else
-                                               {
-                                                       if (msg[1] == '(' && cl.foundtalk2wav)
-                                                               S_LocalSound ("sound/misc/talk2.wav");
-                                                       else
-                                                               S_LocalSound ("sound/misc/talk.wav");
-                                               }
+                                                       S_LocalSound (con_chatsound_file.string);
                                        }
                                }
-                               
                                // Send to chatbox for say/tell (1) and messages (3)
                                // 3 is just so that a message can be sent to the chatbox without a sound.
                                if (*msg == 1 || *msg == 3)
                                        mask = CON_MASK_CHAT;
-                               
+
                                line[index++] = STRING_COLOR_TAG;
                                line[index++] = '3';
                                msg++;
@@ -1572,7 +1566,7 @@ static void Con_DrawInput (void)
        DrawQ_String(x, con_vislines - con_textsize.value*2, text, y + 3, con_textsize.value, con_textsize.value, 1.0, 1.0, 1.0, 1.0, 0, NULL, false, FONT_CONSOLE );
 
        // draw a cursor on top of this
-       if ((int)(realtime*con_cursorspeed) & 1)                // cursor is visible
+       if ((int)(host.realtime*con_cursorspeed) & 1)           // cursor is visible
        {
                if (!utf8_enable.integer)
                {
@@ -1826,7 +1820,7 @@ void Con_DrawNotify (void)
                int colorindex = -1;
                const char *cursor;
                char charbuf16[16];
-               cursor = u8_encodech(0xE00A + ((int)(realtime * con_cursorspeed)&1), NULL, charbuf16);
+               cursor = u8_encodech(0xE00A + ((int)(host.realtime * con_cursorspeed)&1), NULL, charbuf16);
 
                // LadyHavoc: speedup, and other improvements
                if (chat_mode < 0)
@@ -1956,6 +1950,7 @@ void Con_DrawConsole (int lines)
        int mask_must = 0;
        int mask_mustnot = (developer.integer>0) ? 0 : CON_MASK_DEVELOPER;
        cachepic_t *conbackpic;
+       unsigned int conbackflags;
 
        if (lines <= 0)
                return;
@@ -1975,8 +1970,11 @@ void Con_DrawConsole (int lines)
        {
                sx = scr_conscroll_x.value;
                sy = scr_conscroll_y.value;
-               conbackpic = scr_conbrightness.value >= 0.01f ? Draw_CachePic_Flags("gfx/conback", (sx != 0 || sy != 0) ? CACHEPICFLAG_NOCLAMP : 0) : NULL;
-               sx *= realtime; sy *= realtime;
+               conbackflags = CACHEPICFLAG_FAILONMISSING; // So console is readable when game content is missing
+               if (sx != 0 || sy != 0)
+                       conbackflags &= CACHEPICFLAG_NOCLAMP;
+               conbackpic = scr_conbrightness.value >= 0.01f ? Draw_CachePic_Flags("gfx/conback", conbackflags) : NULL;
+               sx *= host.realtime; sy *= host.realtime;
                sx -= floor(sx); sy -= floor(sy);
                if (Draw_IsPicLoaded(conbackpic))
                        DrawQ_SuperPic(0, lines - vid_conheight.integer, conbackpic, vid_conwidth.integer, vid_conheight.integer,
@@ -1993,7 +1991,7 @@ void Con_DrawConsole (int lines)
                sx = scr_conscroll2_x.value;
                sy = scr_conscroll2_y.value;
                conbackpic = Draw_CachePic_Flags("gfx/conback2", (sx != 0 || sy != 0) ? CACHEPICFLAG_NOCLAMP : 0);
-               sx *= realtime; sy *= realtime;
+               sx *= host.realtime; sy *= host.realtime;
                sx -= floor(sx); sy -= floor(sy);
                if(Draw_IsPicLoaded(conbackpic))
                        DrawQ_SuperPic(0, lines - vid_conheight.integer, conbackpic, vid_conwidth.integer, vid_conheight.integer,
@@ -2008,7 +2006,7 @@ void Con_DrawConsole (int lines)
                sx = scr_conscroll3_x.value;
                sy = scr_conscroll3_y.value;
                conbackpic = Draw_CachePic_Flags("gfx/conback3", (sx != 0 || sy != 0) ? CACHEPICFLAG_NOCLAMP : 0);
-               sx *= realtime; sy *= realtime;
+               sx *= host.realtime; sy *= host.realtime;
                sx -= floor(sx); sy -= floor(sy);
                if(Draw_IsPicLoaded(conbackpic))
                        DrawQ_SuperPic(0, lines - vid_conheight.integer, conbackpic, vid_conwidth.integer, vid_conheight.integer,
@@ -2374,7 +2372,7 @@ static int Nicks_strncasecmp(char *a, char *b, unsigned int a_len)
  */
 static int Nicks_CompleteCountPossible(char *line, int pos, char *s, qboolean isCon)
 {
-       char name[128];
+       char name[MAX_SCOREBOARDNAME];
        int i, p;
        int match;
        int spos;
@@ -2705,7 +2703,7 @@ int Nicks_CompleteChatLine(char *buffer, size_t size, unsigned int pos)
                msg = Nicks_list[0];
                len = min(size - Nicks_matchpos - 3, strlen(msg));
                memcpy(&buffer[Nicks_matchpos], msg, len);
-               if( len < (size - 7) ) // space for color (^[0-9] or ^xrgb) and space and \0
+               if(len < size - 7) // space for color code (^[0-9] or ^xrgb), space and \0
                        len = (int)Nicks_AddLastColor(buffer, Nicks_matchpos+(int)len);
                buffer[len++] = ' ';
                buffer[len] = 0;
@@ -3019,7 +3017,7 @@ done:
 
                                memcpy(&key_line[key_linepos] , Nicks_list[0], cmd_len);
                                key_linepos += cmd_len;
-                               if(key_linepos < (int)(sizeof(key_line)-4)) // space for ^, X and space and \0
+                               if(key_linepos < (int)(sizeof(key_line) - 7)) // space for color code (^[0-9] or ^xrgb), space and \0
                                        key_linepos = Nicks_AddLastColor(key_line, key_linepos);
                        }
                        key_line[key_linepos++] = ' ';