static void WM_DrawClientScore( int x, int y, score_t *score, float *color, float fade ) { int maxchars, offset; int i, j; float tempx; vec4_t hcolor; clientInfo_t *ci; char buf[64]; if ( y + SMALLCHAR_HEIGHT >= 470 ) return; ci = &cgs.clientinfo[score->client]; if ( score->client == cg.snap->ps.clientNum ) { tempx = x; hcolor[3] = fade * 0.3; VectorSet( hcolor, .5f, .5f, .2f ); // DARK-RED CG_FillRect( tempx, y + 1, INFO_PLAYER_WIDTH - INFO_BORDER, SMALLCHAR_HEIGHT - 1, hcolor ); tempx += INFO_PLAYER_WIDTH; if ( ci->team == TEAM_SPECTATOR ) { int width; width = INFO_CLASS_WIDTH + INFO_SCORE_WIDTH + INFO_LATENCY_WIDTH; CG_FillRect( tempx, y + 1, width - INFO_BORDER, SMALLCHAR_HEIGHT - 1, hcolor ); tempx += width; } else { CG_FillRect( tempx, y + 1, INFO_CLASS_WIDTH - INFO_BORDER, SMALLCHAR_HEIGHT - 1, hcolor ); tempx += INFO_CLASS_WIDTH; if( cg_gameType.integer == GT_WOLF_LMS ) { CG_FillRect( tempx, y + 1, INFO_SCORE_WIDTH - INFO_BORDER, SMALLCHAR_HEIGHT - 1, hcolor ); tempx += INFO_SCORE_WIDTH; } else { CG_FillRect( tempx, y + 1, INFO_XP_WIDTH - INFO_BORDER, SMALLCHAR_HEIGHT - 1, hcolor ); tempx += INFO_XP_WIDTH; } CG_FillRect( tempx, y + 1, INFO_LATENCY_WIDTH - INFO_BORDER, SMALLCHAR_HEIGHT - 1, hcolor ); tempx += INFO_LATENCY_WIDTH; if( cg_gameType.integer != GT_WOLF_LMS ) { CG_FillRect( tempx, y + 1, INFO_LIVES_WIDTH - INFO_BORDER, SMALLCHAR_HEIGHT - 1, hcolor ); tempx += INFO_LIVES_WIDTH; } } } tempx = x; // DHM - Nerve VectorSet( hcolor, 1, 1, 1 ); hcolor[3] = fade; maxchars = 16; offset = 0; if ( ci->team != TEAM_SPECTATOR ) { if ( ci->powerups & ( (1 << PW_REDFLAG) | (1 << PW_BLUEFLAG) ) ) { CG_DrawPic( tempx-4, y, 16, 16, cgs.media.objectiveShader ); offset += 8; tempx += 12; maxchars -= 2; } // draw the skull icon if out of lives if( score->respawnsLeft == -2 || (cgs.clientinfo[cg.clientNum].team != TEAM_SPECTATOR && ci->team == cgs.clientinfo[cg.clientNum].team && cgs.clientinfo[score->client].health == -1 ) ) { CG_DrawPic( tempx, y, 18, 18, cgs.media.scoreEliminatedShader ); offset += 18; tempx += 18; maxchars -= 2; } else if( cgs.clientinfo[cg.clientNum].team != TEAM_SPECTATOR && ci->team == cgs.clientinfo[cg.clientNum].team && cgs.clientinfo[score->client].health == 0 ) { CG_DrawPic( tempx + 1, y + 1, 16, 16, cgs.media.medicIcon ); offset += 18; tempx += 18; maxchars -= 2; } } // draw name CG_DrawStringExt( tempx, y, ci->name, hcolor, qfalse, qfalse, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, maxchars ); maxchars -= CG_DrawStrlen( ci->name ); // draw medals buf[0] = '\0'; for( i = 0; i < SK_NUM_SKILLS; i++ ) { for( j = 0; j < ci->medals[i]; j++ ) Q_strcat( buf, sizeof(buf), va( "^%c%c", COLOR_RED + i, skillNames[i][0] ) ); } maxchars--; CG_DrawStringExt( tempx + (BG_drawStrlen(ci->name) * SMALLCHAR_WIDTH + SMALLCHAR_WIDTH), y, buf, hcolor, qfalse, qfalse, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, maxchars ); tempx += INFO_PLAYER_WIDTH - offset; if ( ci->team == TEAM_SPECTATOR ) { const char *s; int w, totalwidth; totalwidth = INFO_CLASS_WIDTH + INFO_SCORE_WIDTH + INFO_LATENCY_WIDTH - 8; s = CG_TranslateString( "^3SPECTATOR" ); w = CG_DrawStrlen( s ) * SMALLCHAR_WIDTH; CG_DrawSmallString( tempx + totalwidth - w, y, s, fade ); return; } // OSP - allow MV clients see the class of its merged client's on the scoreboard else if ( cg.snap->ps.persistant[PERS_TEAM] == ci->team || CG_mvMergedClientLocate(score->client) ) { CG_DrawSmallString( tempx, y, CG_TranslateString( BG_ShortClassnameForNumber( score->playerClass ) ), fade ); } tempx += INFO_CLASS_WIDTH; CG_DrawSmallString( tempx, y, va( "%3i", score->score ), fade ); if( cg_gameType.integer == GT_WOLF_LMS ) { tempx += INFO_SCORE_WIDTH; } else { tempx += INFO_XP_WIDTH; } CG_DrawSmallString( tempx, y, va( "%4i", score->ping ), fade ); tempx += INFO_LATENCY_WIDTH; if( cg_gameType.integer != GT_WOLF_LMS ) { if( score->respawnsLeft >= 0 ) { CG_DrawSmallString( tempx, y, va( "%2i", score->respawnsLeft ), fade ); } else { CG_DrawSmallString( tempx, y, va( " -", score->respawnsLeft ), fade ); } tempx += INFO_LIVES_WIDTH; } }
static void WM_DrawClientScore_Small(int x, int y, score_t * score, float *color, float fade) { int maxchars, offset; float tempx; vec4_t hcolor; clientInfo_t *ci; // CHRUKER: b033 - Added to draw medals int i, j; char buf[64]; if(y + MINICHAR_HEIGHT >= 470) { return; } ci = &cgs.clientinfo[score->client]; if(score->client == cg.snap->ps.clientNum) { hcolor[3] = fade * 0.3; VectorSet(hcolor, .5f, .5f, .2f); // DARK-RED // CHRUKER: b077 - Player highlighting was split into columns CG_FillRect( x-5, y, (INFO_PLAYER_WIDTH + INFO_CLASS_WIDTH + INFO_SCORE_WIDTH + INFO_LATENCY_WIDTH + 5), MINICHAR_HEIGHT - 1, hcolor ); } tempx = x; // DHM - Nerve VectorSet(hcolor, 1, 1, 1); hcolor[3] = fade; // CHRUKER: b033 - Corrected to draw medals maxchars = 16; offset = 0; if(ci->team != TEAM_SPECTATOR) { if(ci->powerups & ((1 << PW_REDFLAG) | (1 << PW_BLUEFLAG))) { // CHRUKER: b071 - Objective carrier icon missing on compact scoreboard // CHRUKER: b078 - Medic, death and objective icons on the scoreboard are drawn too big CG_DrawPic( tempx - 1, y + 1, 10, 10, cgs.media.objectiveShader ); offset += 10; tempx += 10; maxchars -= 2; } // draw the skull icon if out of lives if(score->respawnsLeft == -2 || (cgs.clientinfo[cg.clientNum].team != TEAM_SPECTATOR && ci->team == cgs.clientinfo[cg.clientNum].team && cgs.clientinfo[score->client].health == -1)) { // CHRUKER: b078 - Medic, death and objective icons on the scoreboard are drawn too big CG_DrawPic( tempx - 1, y + 1, 10, 10, cgs.media.scoreEliminatedShader ); offset += 10; tempx += 10; maxchars -= 2; } else if(cgs.clientinfo[cg.clientNum].team != TEAM_SPECTATOR && ci->team == cgs.clientinfo[cg.clientNum].team && cgs.clientinfo[score->client].health == 0) { // CHRUKER: b078 - Medic, death and objective icons on the scoreboard are drawn too big CG_DrawPic( tempx - 1, y + 1, 10, 10, cgs.media.medicIcon ); offset += 10; tempx += 10; maxchars -= 2; } } // draw name CG_DrawStringExt(tempx, y, ci->name, hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, maxchars); // CHRUKER: b033 - Added to draw medals maxchars -= CG_DrawStrlen( ci->name ); buf[0] = '\0'; for( i = 0; i < SK_NUM_SKILLS; i++ ) { for( j = 0; j < ci->medals[i]; j++ ) { Q_strcat( buf, sizeof(buf), va( "^%c%c", COLOR_RED + i, skillNames[i][0] ) ); } } maxchars--; if (maxchars > 0) CG_DrawStringExt( tempx + (BG_drawStrlen(ci->name) * MINICHAR_WIDTH + MINICHAR_WIDTH), y, buf, hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, maxchars ); // b033 tempx += INFO_PLAYER_WIDTH - offset; // dhm - nerve if(ci->team == TEAM_SPECTATOR) { const char *s; int w, totalwidth; totalwidth = INFO_CLASS_WIDTH + INFO_SCORE_WIDTH + INFO_LATENCY_WIDTH - 8; // CHRUKER: b031 - Show connecting people as connecting if (score->ping == -1) { s = CG_TranslateString( "^1CONNECTING" ); } else { s = CG_TranslateString( "^3SPECTATOR" ); } w = CG_DrawStrlen(s) * MINICHAR_WIDTH; // CHRUKER: b034 - Using the mini char height CG_DrawStringExt( tempx + totalwidth - w, y, s, hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, 0 ); return; } else if(cg.snap->ps.persistant[PERS_TEAM] == ci->team) { CG_DrawStringExt(tempx, y, CG_TranslateString(BG_ShortClassnameForNumber(score->playerClass)), hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, 0); // CG_DrawSmallString( tempx, y, CG_TranslateString( s ), fade ); } tempx += INFO_CLASS_WIDTH; CG_DrawStringExt(tempx, y, va("%3i", score->score), hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, 0); if(cg_gameType.integer == GT_WOLF_LMS) { tempx += INFO_SCORE_WIDTH; } else { tempx += INFO_XP_WIDTH; } CG_DrawStringExt(tempx, y, va("%4i", score->ping), hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, 0); tempx += INFO_LATENCY_WIDTH; if(cg_gameType.integer != GT_WOLF_LMS) { if(score->respawnsLeft >= 0) { CG_DrawStringExt(tempx, y, va("%2i", score->respawnsLeft), hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, 0); } else { CG_DrawStringExt(tempx, y, " -", hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, 0); } tempx += INFO_LIVES_WIDTH; } }
static void WM_DrawClientScore_Small(int x, int y, score_t *score, float *color, float fade) { int maxchars, offset; float tempx; vec4_t hcolor; clientInfo_t *ci; int i, j; // To draw medals char buf[64]; // To draw medals if (y + MINICHAR_HEIGHT >= 470) { return; } ci = &cgs.clientinfo[score->client]; if (score->client == cg.snap->ps.clientNum) { hcolor[3] = fade * 0.3; VectorSet(hcolor, .5f, .5f, .2f); // DARK-RED CG_FillRect(x - 5, y, (INFO_TOTAL_WIDTH + 5), MINICHAR_HEIGHT - 1, hcolor); } tempx = x; VectorSet(hcolor, 1, 1, 1); hcolor[3] = fade; maxchars = 16; offset = 0; if (ci->team != TEAM_SPECTATOR) { /* FIXME adjust x,y coordinates ... // draw ready icon if client is ready.. if ( score->scoreflags & 1 && ( cgs.gamestate == GS_WARMUP || cgs.gamestate == GS_INTERMISSION ) ) { CG_DrawPic( tempx-2 + 1, y + 1, 14, 14, cgs.media.readyIcon ); offset += 14; tempx += 14; maxchars -= 2; } */ if (ci->powerups & ((1 << PW_REDFLAG) | (1 << PW_BLUEFLAG))) { CG_DrawPic(tempx + 1, y + 1, 10, 10, cgs.media.objectiveShader); offset += 14; tempx += 14; maxchars -= 2; } // draw the skull icon if out of lives if (score->respawnsLeft == -2 || (cgs.clientinfo[cg.clientNum].team != TEAM_SPECTATOR && ci->team == cgs.clientinfo[cg.clientNum].team && cgs.clientinfo[score->client].health == -1)) { CG_DrawPic(tempx, y, 12, 12, cgs.media.scoreEliminatedShader); offset += 14; tempx += 14; maxchars -= 2; } else if (cgs.clientinfo[cg.clientNum].team != TEAM_SPECTATOR && ci->team == cgs.clientinfo[cg.clientNum].team && cgs.clientinfo[score->client].health == 0) { CG_DrawPic(tempx + 1, y + 1, 10, 10, cgs.media.medicIcon); offset += 14; tempx += 14; maxchars -= 2; } } // GeoIP - draw flag before name if (score->ping != -1 && score->ping != 999 && cg_countryflags.integer) { if (cf_draw(tempx - 11, y - 10, fade, ci->clientNum)) { offset += 14; tempx += 14; maxchars -= 2; } } // draw name CG_DrawStringExt(tempx, y, ci->name, hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, maxchars); // draw medals maxchars -= CG_DrawStrlen(ci->name); buf[0] = '\0'; for (i = 0; i < SK_NUM_SKILLS; i++) { for (j = 0; j < ci->medals[i]; j++) { Q_strcat(buf, sizeof(buf), va("^%c%c", COLOR_RED + i, skillNames[i][0])); } maxchars--; } if (maxchars > 0) { CG_DrawStringExt(tempx + (BG_drawStrlen(ci->name) * MINICHAR_WIDTH + MINICHAR_WIDTH), y, buf, hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, maxchars); } tempx += INFO_PLAYER_WIDTH - offset; if (ci->team == TEAM_SPECTATOR) { const char *s; int w, totalwidth = INFO_CLASS_WIDTH + INFO_SCORE_WIDTH + INFO_LATENCY_WIDTH - 8; // Show connecting people as CONNECTING if (score->ping == -1) { s = CG_TranslateString("^3CONNECTING"); } else { s = CG_TranslateString("^3SPECTATOR"); } w = CG_DrawStrlen(s) * MINICHAR_WIDTH; CG_DrawStringExt(tempx + totalwidth - w, y, s, hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, 0); return; } else if (cg.snap->ps.persistant[PERS_TEAM] == ci->team || cg.snap->ps.persistant[PERS_TEAM] == TEAM_SPECTATOR) { CG_DrawPic(tempx, y - 2, 12, 12, cgs.media.skillPics[SkillNumForClass(ci->cls)]); } tempx += INFO_CLASS_WIDTH; CG_DrawStringExt(tempx, y, va("%3i", score->score), hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, 0); if (cg_gameType.integer == GT_WOLF_LMS) { tempx += INFO_SCORE_WIDTH; } else { tempx += INFO_XP_WIDTH; } if (score->ping == -1) { CG_DrawStringExt(tempx, y, "^1CONN", hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, 0); } else if (score->scoreflags & 2) { CG_DrawStringExt(tempx, y, " ^4BOT", hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, 0); } else { CG_DrawStringExt(tempx, y, va("%4i", score->ping), hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, 0); } tempx += INFO_LATENCY_WIDTH; if (cg_gameType.integer != GT_WOLF_LMS) { if (score->respawnsLeft >= 0) { CG_DrawStringExt(tempx, y, va("%2i", score->respawnsLeft), hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, 0); } else { CG_DrawStringExt(tempx, y, " -", hcolor, qfalse, qfalse, MINICHAR_WIDTH, MINICHAR_HEIGHT, 0); } tempx += INFO_LIVES_WIDTH; } }
static void WM_DrawClientScore(int x, int y, score_t * score, float *color, float fade) { int maxchars, offset; int i, j; float tempx; vec4_t hcolor; clientInfo_t *ci; char buf[64]; // CHRUKER: b0?? - Was using the wrong char height for this calculation if(y + SMALLCHAR_HEIGHT >= 470) { return; } ci = &cgs.clientinfo[score->client]; if(score->client == cg.snap->ps.clientNum) { hcolor[3] = fade * 0.3; VectorSet(hcolor, .5f, .5f, .2f); // DARK-RED // CHRUKER: b077 - Player highlighting was split into columns CG_FillRect( x-5, y, (INFO_PLAYER_WIDTH + INFO_CLASS_WIDTH + INFO_SCORE_WIDTH + INFO_LATENCY_WIDTH + 5), SMALLCHAR_HEIGHT - 1, hcolor ); } tempx = x; // DHM - Nerve VectorSet(hcolor, 1, 1, 1); hcolor[3] = fade; maxchars = 16; offset = 0; if(ci->team != TEAM_SPECTATOR) { if(ci->powerups & ((1 << PW_REDFLAG) | (1 << PW_BLUEFLAG))) { // CHRUKER: b078 - Medic, death and objective icons on the scoreboard are drawn too big CG_DrawPic( tempx - 3, y + 1, 14, 14, cgs.media.objectiveShader ); offset += 14; // CHRUKER: b072 - Need to match tempx or else the other text gets offset tempx += 14; maxchars -= 2; } // draw the skull icon if out of lives if(score->respawnsLeft == -2 || (cgs.clientinfo[cg.clientNum].team != TEAM_SPECTATOR && ci->team == cgs.clientinfo[cg.clientNum].team && cgs.clientinfo[score->client].health == -1)) { // CHRUKER: b078 - Medic, death and objective icons on the scoreboard are drawn too big CG_DrawPic( tempx - 3, y + 1, 14, 14, cgs.media.scoreEliminatedShader ); offset += 14; tempx += 14; maxchars -= 2; } else if(cgs.clientinfo[cg.clientNum].team != TEAM_SPECTATOR && ci->team == cgs.clientinfo[cg.clientNum].team && cgs.clientinfo[score->client].health == 0) { // CHRUKER: b078 - Medic, death and objective icons on the scoreboard are drawn too big CG_DrawPic( tempx - 3, y + 1, 14, 14, cgs.media.medicIcon ); offset += 14; tempx += 14; maxchars -= 2; } } // draw name CG_DrawStringExt(tempx, y, ci->name, hcolor, qfalse, qfalse, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, maxchars); maxchars -= CG_DrawStrlen(ci->name); // draw medals buf[0] = '\0'; for(i = 0; i < SK_NUM_SKILLS; i++) { for(j = 0; j < ci->medals[i]; j++) Q_strcat(buf, sizeof(buf), va("^%c%c", COLOR_RED + i, skillNames[i][0])); } maxchars--; // CHRUKER: b032 - Medals clipped wrong in scoreboard when you're dead, because CG_DrawStringExt will draw // everything if maxchars <= 0 if (maxchars > 0) { CG_DrawStringExt(tempx + (BG_drawStrlen(ci->name) * SMALLCHAR_WIDTH + SMALLCHAR_WIDTH), y, buf, hcolor, qfalse, qfalse, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, maxchars); } tempx += INFO_PLAYER_WIDTH - offset; if(ci->team == TEAM_SPECTATOR) { const char *s; int w, totalwidth; totalwidth = INFO_CLASS_WIDTH + INFO_SCORE_WIDTH + INFO_LATENCY_WIDTH - 8; // CHRUKER: b031 - Show connecting people as connecting if (score->ping == -1) { s = CG_TranslateString( "^1CONNECTING" ); } else { s = CG_TranslateString( "^3SPECTATOR" ); } w = CG_DrawStrlen(s) * SMALLCHAR_WIDTH; CG_DrawSmallString(tempx + totalwidth - w, y, s, fade); return; } // OSP - allow MV clients see the class of its merged client's on the scoreboard else if(cg.snap->ps.persistant[PERS_TEAM] == ci->team || CG_mvMergedClientLocate(score->client)) { CG_DrawSmallString(tempx, y, CG_TranslateString(BG_ShortClassnameForNumber(score->playerClass)), fade); } tempx += INFO_CLASS_WIDTH; CG_DrawSmallString(tempx, y, va("%3i", score->score), fade); if(cg_gameType.integer == GT_WOLF_LMS) { tempx += INFO_SCORE_WIDTH; } else { tempx += INFO_XP_WIDTH; } CG_DrawSmallString(tempx, y, va("%4i", score->ping), fade); tempx += INFO_LATENCY_WIDTH; if(cg_gameType.integer != GT_WOLF_LMS) { if(score->respawnsLeft >= 0) { CG_DrawSmallString(tempx, y, va("%2i", score->respawnsLeft), fade); } else { CG_DrawSmallString(tempx, y, " -", fade); } tempx += INFO_LIVES_WIDTH; } }
static void WM_DrawClientScore(int x, int y, score_t *score, float *color, float fade) { int maxchars, offset; int i, j; float tempx; vec4_t hcolor; clientInfo_t *ci; char buf[64]; if (y + SMALLCHAR_HEIGHT >= 470) { return; } ci = &cgs.clientinfo[score->client]; if (score->client == cg.snap->ps.clientNum) { hcolor[3] = fade * 0.3; VectorSet(hcolor, .5f, .5f, .2f); // DARK-RED CG_FillRect(x - 5, y, (INFO_TOTAL_WIDTH + 5), SMALLCHAR_HEIGHT - 1, hcolor); } tempx = x; VectorSet(hcolor, 1, 1, 1); hcolor[3] = fade; maxchars = 16; offset = 0; if (ci->team != TEAM_SPECTATOR) { /* FIXME: adjust x,y coordinates ... // draw ready icon if client is ready.. if (score->scoreflags & 1 && cgs.gamestate != GS_PLAYING) { CG_DrawPic(tempx - 3, y + 1, 14, 14, cgs.media.readyIcon); offset += 14; tempx += 14; maxchars -= 2; } */ if (ci->powerups & ((1 << PW_REDFLAG) | (1 << PW_BLUEFLAG))) { CG_DrawPic(tempx - 1, y + 1, 14, 14, cgs.media.objectiveShader); offset += 14; tempx += 14; maxchars -= 2; } if (cgs.gametype == GT_WOLF_GOLDY && ci->team == cgs.clientinfo[cg.clientNum].team && ci->gold > 0 && ci->health != -1) { CG_DrawPic(tempx - 1, y + 1, 14, 14, cgs.media.goldIcon); offset += 14; tempx += 14; maxchars -= 2; } // draw the skull icon if out of lives if (score->respawnsLeft == -2 || (cgs.clientinfo[cg.clientNum].team != TEAM_SPECTATOR && ci->team == cgs.clientinfo[cg.clientNum].team && cgs.clientinfo[score->client].health == -1)) { CG_DrawPic(tempx - 1, y + 1, 14, 14, cgs.media.scoreEliminatedShader); offset += 14; tempx += 14; maxchars -= 2; } else if (cgs.clientinfo[cg.clientNum].team != TEAM_SPECTATOR && ci->team == cgs.clientinfo[cg.clientNum].team && cgs.clientinfo[score->client].health == 0) { CG_DrawPic(tempx - 1, y + 1, 14, 14, cgs.media.medicIcon); offset += 14; tempx += 14; maxchars -= 2; } } // GeoIP - draw flag before name if (score->ping != -1 && score->ping != 999 && cg_countryflags.integer) { if (cf_draw(tempx - 11, y - 8, fade, ci->clientNum)) { offset += 14; tempx += 14; maxchars -= 2; } } // draw name CG_DrawStringExt(tempx, y, ci->name, hcolor, qfalse, qfalse, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, maxchars); maxchars -= CG_DrawStrlen(ci->name); // draw medals buf[0] = '\0'; for (i = 0; i < SK_NUM_SKILLS; i++) { for (j = 0; j < ci->medals[i]; j++) { Q_strcat(buf, sizeof(buf), va("^%c%c", COLOR_RED + i, skillNames[i][0])); } } maxchars--; // CG_DrawStringExt will draw everything if maxchars <= 0 if (maxchars > 0) { CG_DrawStringExt(tempx + (BG_drawStrlen(ci->name) * SMALLCHAR_WIDTH + SMALLCHAR_WIDTH), y, buf, hcolor, qfalse, qfalse, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, maxchars); } tempx += INFO_PLAYER_WIDTH - offset; if (ci->team == TEAM_SPECTATOR) { const char *s; int w, totalwidth = INFO_CLASS_WIDTH + INFO_SCORE_WIDTH + INFO_LATENCY_WIDTH - 8; // Show connecting people as CONNECTING if (score->ping == -1) { s = CG_TranslateString("^3CONNECTING"); } else { s = CG_TranslateString("^3SPECTATOR"); } w = CG_DrawStrlen(s) * SMALLCHAR_WIDTH; CG_DrawSmallString(tempx + totalwidth - w, y, s, fade); return; } // allow MV clients see the class of its merged client's on the scoreboard else if (cg.snap->ps.persistant[PERS_TEAM] == ci->team || cg.snap->ps.persistant[PERS_TEAM] == TEAM_SPECTATOR || cg.snap->ps.pm_type == PM_INTERMISSION #if FEATURE_MULTIVIEW || CG_mvMergedClientLocate(score->client) #endif ) { CG_DrawPic(tempx - 3, y + 1, 14, 14, cgs.media.skillPics[SkillNumForClass(ci->cls)]); } tempx += INFO_CLASS_WIDTH; CG_DrawSmallString(tempx, y, va("^7%3i", score->score), fade); if (cg_gameType.integer == GT_WOLF_LMS) { tempx += INFO_SCORE_WIDTH; } else { tempx += INFO_XP_WIDTH; } if (score->ping == -1) { CG_DrawSmallString(tempx, y, "^1CONN^7", fade); } else if (score->scoreflags & 2) { CG_DrawSmallString(tempx, y, " BOT", fade); } else { CG_DrawSmallString(tempx, y, va("%4i", score->ping), fade); } tempx += INFO_LATENCY_WIDTH; if (cg_gameType.integer != GT_WOLF_LMS) { if (score->respawnsLeft >= 0) { CG_DrawSmallString(tempx, y, va("%2i", score->respawnsLeft), fade); } else { CG_DrawSmallString(tempx, y, " -", fade); } } }