X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=console.c;h=c244706d25aee8feb25c56f76c08c16fa3cda3f4;hb=01aea1085c66285ce22fab58ba15e72fa7bb8806;hp=c3c2d667c860073f96eea53982475a678249ac19;hpb=c52bc263597e240f934d3948850a519e051e17e5;p=xonotic%2Fdarkplaces.git diff --git a/console.c b/console.c index c3c2d667..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; @@ -841,7 +848,7 @@ void Con_DrawConsole (int lines) return; // draw the background - DrawQ_Pic(0, lines - vid_conheight.integer, NULL, vid_conwidth.integer, vid_conheight.integer, 0, 0, 0, scr_conalpha.value, 0); + DrawQ_Pic(0, lines - vid_conheight.integer, scr_conbrightness.value >= 0.01f ? Draw_CachePic("gfx/conback", true) : NULL, vid_conwidth.integer, vid_conheight.integer, scr_conbrightness.value, scr_conbrightness.value, scr_conbrightness.value, scr_conalpha.value, 0); DrawQ_String(vid_conwidth.integer - strlen(engineversion) * con_textsize.value - con_textsize.value, lines - con_textsize.value, engineversion, 0, con_textsize.value, con_textsize.value, 1, 0, 0, 1, 0); // draw the text @@ -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);