X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=console.c;h=c244706d25aee8feb25c56f76c08c16fa3cda3f4;hb=a1e3a43baf6db0fd8b58fbfeddd05a6c9a50ba12;hp=80e144622213c4689495f79d3b20e6da920baf90;hpb=986e2df5ca730f3984b37805aa48c6359d09f042;p=xonotic%2Fdarkplaces.git diff --git a/console.c b/console.c index 80e14462..c244706d 100644 --- a/console.c +++ b/console.c @@ -582,23 +582,13 @@ void Con_Print(const char *msg) line[index++] = STRING_COLOR_DEFAULT + '0'; // special color codes for chat messages must always come first // for Con_PrintToHistory to work properly - if (*msg <= 2) + if (*msg == 1 || *msg == 2) { + // play talk wav if (*msg == 1) - { - // play talk wav S_LocalSound ("sound/misc/talk.wav"); - } - //if (gamemode == GAME_NEXUIZ) - //{ - line[index++] = STRING_COLOR_TAG; - line[index++] = '3'; - //} - //else - //{ - // // go to colored text - // mask = 128; - //} + line[index++] = STRING_COLOR_TAG; + line[index++] = '3'; msg++; } // store timestamp @@ -757,7 +747,7 @@ void Con_DrawNotify (void) { float x, v; char *text; - int i; + int i, stop; float time; char temptext[MAX_INPUTLINE]; int colorindex = -1; //-1 for default @@ -770,7 +760,9 @@ void Con_DrawNotify (void) v = 8; else v = 0; - for (i= con_current-con_notify.integer+1 ; i<=con_current ; i++) + // make a copy of con_current here so that we can't get in a runaway loop printing new messages while drawing the notify text + stop = con_current; + for (i= stop-con_notify.integer+1 ; i<=stop ; i++) { if (i < 0) @@ -784,10 +776,25 @@ void Con_DrawNotify (void) text = con_text + (i % con_totallines)*con_linewidth; if (gamemode == GAME_NEXUIZ) { - int linewidth; + int chars = 0; + int finalchars = 0; + int j; - for (linewidth = con_linewidth; linewidth && text[linewidth-1] == ' '; linewidth--); - x = (vid_conwidth.integer - linewidth * con_textsize.value) * 0.5; + // count up to the last non-whitespace, and ignore color codes + for (j = 0;j < con_linewidth && text[j];j++) + { + if (text[j] == '^' && (text[j+1] >= '0' && text[j+1] <= '9')) + { + j++; + continue; + } + chars++; + if (text[j] == ' ') + continue; + finalchars = chars; + } + // center the line using the calculated width + x = (vid_conwidth.integer - finalchars * con_textsize.value) * 0.5; } else x = 0; @@ -832,7 +839,7 @@ The typing input line at the bottom should only be drawn if typing is allowed */ void Con_DrawConsole (int lines) { - int i, rows, j; + int i, rows, j, stop; float y; char *text; int colorindex = -1; @@ -850,7 +857,9 @@ void Con_DrawConsole (int lines) rows = (int)ceil((lines/con_textsize.value)-2); // rows of text to draw y = lines - (rows+2)*con_textsize.value; // may start slightly negative - for (i = con_current - rows + 1;i <= con_current;i++, y += con_textsize.value) + // make a copy of con_current here so that we can't get in a runaway loop printing new messages while drawing the notify text + stop = con_current; + for (i = stop - rows + 1;i <= stop;i++, y += con_textsize.value) { j = max(i - con_backscroll, 0); text = con_text + (j % con_totallines)*con_linewidth; @@ -968,7 +977,7 @@ qboolean GetMapList (const char *s, char *completedname, int completednamebuffer for (;;) { int l; - if (!COM_ParseToken(&data, false)) + if (!COM_ParseTokenConsole(&data)) break; if (com_token[0] == '{') continue; @@ -979,7 +988,7 @@ qboolean GetMapList (const char *s, char *completedname, int completednamebuffer for (l = 0;l < (int)sizeof(keyname) - 1 && com_token[k+l] && com_token[k+l] > ' ';l++) keyname[l] = com_token[k+l]; keyname[l] = 0; - if (!COM_ParseToken(&data, false)) + if (!COM_ParseTokenConsole(&data)) break; if (developer.integer >= 100) Con_Printf("key: %s %s\n", keyname, com_token);