float SCOREBOARD_OFFSET = 50;
+// wrapper to put all possible scores titles through gettext
+string TranslateScoresLabel(string l)
+{
+ switch(l)
+ {
+ case "bckills": return CTX(_("SCO^bckills"));
+ case "bctime": return CTX(_("SCO^bctime"));
+ case "caps": return CTX(_("SCO^caps"));
+ case "deaths": return CTX(_("SCO^deaths"));
+ case "destroyed": return CTX(_("SCO^destroyed"));
+ case "drops": return CTX(_("SCO^drops"));
+ case "faults": return CTX(_("SCO^faults"));
+ case "fckills": return CTX(_("SCO^fckills"));
+ case "goals": return CTX(_("SCO^goals"));
+ case "kckills": return CTX(_("SCO^kckills"));
+ case "kdratio": return CTX(_("SCO^kdratio"));
+ case "k/d": return CTX(_("SCO^k/d"));
+ case "kd": return CTX(_("SCO^kd"));
+ case "kdr": return CTX(_("SCO^kdr"));
+ case "kills": return CTX(_("SCO^kills"));
+ case "laps": return CTX(_("SCO^laps"));
+ case "lives": return CTX(_("SCO^lives"));
+ case "losses": return CTX(_("SCO^losses"));
+ case "name": return CTX(_("SCO^name"));
+ case "nick": return CTX(_("SCO^nick"));
+ case "objectives": return CTX(_("SCO^objectives"));
+ case "pickups": return CTX(_("SCO^pickups"));
+ case "ping": return CTX(_("SCO^ping"));
+ case "pl": return CTX(_("SCO^pl"));
+ case "pushes": return CTX(_("SCO^pushes"));
+ case "rank": return CTX(_("SCO^rank"));
+ case "returns": return CTX(_("SCO^returns"));
+ case "revivals": return CTX(_("SCO^revivals"));
+ case "score": return CTX(_("SCO^score"));
+ case "suicides": return CTX(_("SCO^suicides"));
+ case "takes": return CTX(_("SCO^takes"));
+ case "ticks": return CTX(_("SCO^ticks"));
+ default: return l;
+ }
+}
+
void MapVote_Draw();
void HUD_FinaleOverlay()
{
void Cmd_HUD_Help(float argc)
{
- print("You can modify the scoreboard using the ^2scoreboard_columns_set command.\n");
- print("^3|---------------------------------------------------------------|\n");
- print("Usage:\n");
- print("^2scoreboard_columns_set default\n");
- print("^2scoreboard_columns_set ^7filed1 field2 ...\n");
- print("The following field names are recognized (case insensitive):\n");
- print("You can use a ^3|^7 to start the right-aligned fields.\n\n");
-
- print("^3name^7 or ^3nick^7 Name of a player\n");
- print("^3ping^7 Ping time\n");
- print("^3pl^7 Packet loss\n");
- print("^3kills^7 Number of kills\n");
- print("^3deaths^7 Number of deaths\n");
- print("^3suicides^7 Number of suicides\n");
- print("^3frags^7 kills - suicides\n");
- print("^3kd^7 The kill-death ratio\n");
- print("^3caps^7 How often a flag (CTF) or a key (KeyHunt) was captured\n");
- print("^3pickups^7 How often a flag (CTF) or a key (KeyHunt) was picked up\n");
- print("^3fckills^7 Number of flag carrier kills\n");
- print("^3returns^7 Number of flag returns\n");
- print("^3drops^7 Number of flag drops\n");
- print("^3lives^7 Number of lives (LMS)\n");
- print("^3rank^7 Player rank\n");
- print("^3pushes^7 Number of players pushed into void\n");
- print("^3destroyed^7 Number of keys destroyed by pushing them into void\n");
- print("^3kckills^7 Number of keys carrier kills\n");
- print("^3losses^7 Number of times a key was lost\n");
- print("^3laps^7 Number of laps finished (race/cts)\n");
- print("^3time^7 Total time raced (race/cts)\n");
- print("^3fastest^7 Time of fastest lap (race/cts)\n");
- print("^3ticks^7 Number of ticks (DOM)\n");
- print("^3takes^7 Number of domination points taken (DOM)\n");
- print("^3score^7 Total score\n\n");
-
- print("Before a field you can put a + or - sign, then a comma separated list\n");
- print("of game types, then a slash, to make the field show up only in these\n");
- print("or in all but these game types. You can also specify 'all' as a\n");
- print("field to show all fields available for the current game mode.\n\n");
-
- print("The special game type names 'teams' and 'noteams' can be used to\n");
- print("include/exclude ALL teams/noteams game modes.\n\n");
-
- print("Example: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4\n");
- print("will display name, ping and pl aligned to the left, and the fields\n");
- print("right of the vertical bar aligned to the right.\n");
- print("'field3' will only be shown in CTF, and 'field4' will be shown in all\n");
- print("other gamemodes except DM.\n");
+ print(_("You can modify the scoreboard using the ^2scoreboard_columns_set command.\n"));
+ print(_("^3|---------------------------------------------------------------|\n"));
+ print(_("Usage:\n"));
+ print(_("^2scoreboard_columns_set default\n"));
+ print(_("^2scoreboard_columns_set ^7field1 field2 ...\n"));
+ print(_("The following field names are recognized (case insensitive):\n"));
+ print(_("You can use a ^3|^7 to start the right-aligned fields.\n\n"));
+
+ print(_("^3name^7 or ^3nick^7 Name of a player\n"));
+ print(_("^3ping^7 Ping time\n"));
+ print(_("^3pl^7 Packet loss\n"));
+ print(_("^3kills^7 Number of kills\n"));
+ print(_("^3deaths^7 Number of deaths\n"));
+ print(_("^3suicides^7 Number of suicides\n"));
+ print(_("^3frags^7 kills - suicides\n"));
+ print(_("^3kd^7 The kill-death ratio\n"));
+ print(_("^3caps^7 How often a flag (CTF) or a key (KeyHunt) was captured\n"));
+ print(_("^3pickups^7 How often a flag (CTF) or a key (KeyHunt) or a ball (Keepaway) was picked up\n"));
+ print(_("^3fckills^7 Number of flag carrier kills\n"));
+ print(_("^3returns^7 Number of flag returns\n"));
+ print(_("^3drops^7 Number of flag drops\n"));
+ print(_("^3lives^7 Number of lives (LMS)\n"));
+ print(_("^3rank^7 Player rank\n"));
+ print(_("^3pushes^7 Number of players pushed into void\n"));
+ print(_("^3destroyed^7 Number of keys destroyed by pushing them into void\n"));
+ print(_("^3kckills^7 Number of keys carrier kills\n"));
+ print(_("^3losses^7 Number of times a key was lost\n"));
+ print(_("^3laps^7 Number of laps finished (race/cts)\n"));
+ print(_("^3time^7 Total time raced (race/cts)\n"));
+ print(_("^3fastest^7 Time of fastest lap (race/cts)\n"));
+ print(_("^3ticks^7 Number of ticks (DOM)\n"));
+ print(_("^3takes^7 Number of domination points taken (DOM)\n"));
+ print(_("^3bckills^7 Number of ball carrier kills\n"));
+ print(_("^3bctime^7 Total amount of time holding the ball in Keepaway\n"));
+ print(_("^3score^7 Total score\n\n"));
+
+ print(_("Before a field you can put a + or - sign, then a comma separated list\n"
+ "of game types, then a slash, to make the field show up only in these\n"
+ "or in all but these game types. You can also specify 'all' as a\n"
+ "field to show all fields available for the current game mode.\n\n"));
+
+ print(_("The special game type names 'teams' and 'noteams' can be used to\n"
+ "include/exclude ALL teams/noteams game modes.\n\n"));
+
+ print(_("Example: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4\n"));
+ print(_("will display name, ping and pl aligned to the left, and the fields\n"
+ "right of the vertical bar aligned to the right.\n"));
+ print(_("'field3' will only be shown in CTF, and 'field4' will be shown in all\n"
+ "other gamemodes except DM.\n"));
}
string HUD_DefaultColumnLayout()
{
return strcat( // fteqcc sucks
"ping pl name | ",
- "-teams,race,lms/kills -teams,lms/deaths -teams,lms,race,ka/suicides -race,dm,tdm,ka/frags ", // tdm already has this in "score"
+ "-teams,race,lms/kills +freezetag/kills -teams,lms/deaths +freezetag/deaths -teams,lms,race,ka/suicides +freezetag/suicides -race,dm,tdm,ka,freezetag/frags ", // tdm already has this in "score"
"+ctf/caps +ctf/pickups +ctf/fckills +ctf/returns ",
"+lms/lives +lms/rank ",
"+kh/caps +kh/pushes +kh/destroyed ",
"?+race/laps ?+race/time ?+race/fastest ",
- "+as/objectives +nexball/faults +nexball/goals +ka/drops +ka/pickups +ka/bckills ",
+ "+as/objectives +nexball/faults +nexball/goals +ka/pickups +ka/bckills +ka/bctime +freezetag/revivals ",
"-lms,race,nexball/score");
}
// TODO: re enable with gametype dependant cvars?
if(argc < 2) // no arguments provided
- argc = tokenizebyseparator(strcat("x ", cvar_string("scoreboard_columns")), " ");
+ argc = tokenizebyseparator(strcat("x ", autocvar_scoreboard_columns), " ");
if(argc < 2)
argc = tokenizebyseparator(strcat("x ", HUD_DefaultColumnLayout()), " ");
hud_num_fields = 0;
- drawfont = hud_font;
hud_fontsize = HUD_GetFontsize("hud_fontsize");
for(i = 0; i < argc - 1; ++i)
pattern = substring(str, 0, slash);
str = substring(str, slash + 1, strlen(str) - (slash + 1));
- if not(isGametypeInFilter(gametype, teamplay, pattern))
+ if not(isGametypeInFilter(gametype, teamplay, FALSE, pattern))
continue;
}
strunzone(hud_title[hud_num_fields]);
- hud_title[hud_num_fields] = strzone(str);
- hud_size[hud_num_fields] = stringwidth(str, FALSE, hud_fontsize);
+ hud_title[hud_num_fields] = strzone(TranslateScoresLabel(str));
+ hud_size[hud_num_fields] = stringwidth(hud_title[hud_num_fields], FALSE, hud_fontsize);
str = strtolower(str);
if(str == "ping") {
else
{
if not(nocomplain)
- print(strcat("^1Error:^7 Unknown score field: '", str, "'\n"));
+ print(sprintf("^1Error:^7 Unknown score field: '%s'\n", str));
continue;
}
:found
hud_size[i] = hud_size[i-1];
hud_field[i] = hud_field[i-1];
}
- hud_title[0] = strzone("name");
+ hud_title[0] = strzone(TranslateScoresLabel("name"));
hud_field[0] = SP_NAME;
++hud_num_fields;
- print("fixed missing field 'name'\n");
+ print(sprintf(_("fixed missing field '%s'\n"), "name"));
if(!have_separator)
{
hud_field[1] = SP_SEPARATOR;
hud_size[1] = stringwidth("|", FALSE, hud_fontsize);
++hud_num_fields;
- print("fixed missing field '|'\n");
+ print(sprintf(_("fixed missing field '%s'\n"), "|"));
}
}
else if(!have_separator)
hud_size[hud_num_fields] = stringwidth("|", FALSE, hud_fontsize);
hud_field[hud_num_fields] = SP_SEPARATOR;
++hud_num_fields;
- print("fixed missing field '|'\n");
+ print(sprintf(_("fixed missing field '%s'\n"), "|"));
}
if(!have_secondary)
{
strunzone(hud_title[hud_num_fields]);
- hud_title[hud_num_fields] = strzone(scores_label[ps_secondary]);
+ hud_title[hud_num_fields] = strzone(TranslateScoresLabel(scores_label[ps_secondary]));
hud_size[hud_num_fields] = stringwidth(hud_title[hud_num_fields], FALSE, hud_fontsize);
hud_field[hud_num_fields] = ps_secondary;
++hud_num_fields;
- print("fixed missing field '", scores_label[ps_secondary], "'\n");
+ print(sprintf(_("fixed missing field '%s'\n"), scores_label[ps_secondary]));
}
if(!have_primary)
{
strunzone(hud_title[hud_num_fields]);
- hud_title[hud_num_fields] = strzone(scores_label[ps_primary]);
+ hud_title[hud_num_fields] = strzone(TranslateScoresLabel(scores_label[ps_primary]));
hud_size[hud_num_fields] = stringwidth(hud_title[hud_num_fields], FALSE, hud_fontsize);
hud_field[hud_num_fields] = ps_primary;
++hud_num_fields;
- print("fixed missing field '", scores_label[ps_primary], "'\n");
+ print(sprintf(_("fixed missing field '%s'\n"), scores_label[ps_primary]));
}
}
{
case SP_PING:
if not(pl.gotscores)
- return "\x8D\x8D\x8D"; // >>> sign
- //str = getplayerkey(pl.sv_entnum, "ping");
+ return "\xEE\x82\x8D\xEE\x82\x8D\xEE\x82\x8D"; // >>> sign
+ //str = getplayerkeyvalue(pl.sv_entnum, "ping");
f = pl.ping;
if(f == 0)
- return "N/A";
+ return _("N/A");
tmp = max(0, min(220, f-80)) / 220;
hud_field_rgb = '1 1 1' - '0 1 1'*tmp;
return ftos(f);
case SP_PL:
if not(pl.gotscores)
- return "N/A";
+ return _("N/A");
f = pl.ping_packetloss;
tmp = pl.ping_movementloss;
if(f == 0 && tmp == 0)
}
else if(!teamplay)
{
- f = stof(getplayerkey(pl.sv_entnum, "colors"));
+ f = stof(getplayerkeyvalue(pl.sv_entnum, "colors"));
{
hud_field_icon0 = "gfx/scoreboard/playercolor_base";
hud_field_icon1 = "gfx/scoreboard/playercolor_shirt";
if(denom == 0) {
hud_field_rgb = '0 1 0';
- str = ftos(num);
+ str = sprintf("%d", num);
} else if(num <= 0) {
hud_field_rgb = '1 0 0';
- str = ftos(num/denom);
+ str = sprintf("%.1f", num/denom);
} else
- str = ftos(num/denom);
-
- tmp = strstrofs(str, ".", 0);
- if(tmp > 0)
- str = substring(str, 0, tmp+2);
+ str = sprintf("%.1f", num/denom);
return str;
default:
if(hud_field_icon0 != "")
{
- sz = drawgetimagesize(hud_field_icon0);
+ sz = draw_getimagesize(hud_field_icon0);
f = sz_x / sz_y;
if(hud_fixscoreboardcolumnwidth_iconlen < f)
hud_fixscoreboardcolumnwidth_iconlen = f;
if(hud_field_icon1 != "")
{
- sz = drawgetimagesize(hud_field_icon1);
+ sz = draw_getimagesize(hud_field_icon1);
f = sz_x / sz_y;
if(hud_fixscoreboardcolumnwidth_iconlen < f)
hud_fixscoreboardcolumnwidth_iconlen = f;
if(hud_field_icon2 != "")
{
- sz = drawgetimagesize(hud_field_icon2);
+ sz = draw_getimagesize(hud_field_icon2);
f = sz_x / sz_y;
if(hud_fixscoreboardcolumnwidth_iconlen < f)
hud_fixscoreboardcolumnwidth_iconlen = f;
is_spec = (GetPlayerColor(pl.sv_entnum) == COLOR_SPECTATOR);
if((rgb == '1 1 1') && (!is_spec)) {
- rgb_x = cvar("scoreboard_color_bg_r") + 0.5;
- rgb_y = cvar("scoreboard_color_bg_g") + 0.5;
- rgb_z = cvar("scoreboard_color_bg_b") + 0.5; }
+ rgb_x = autocvar_scoreboard_color_bg_r + 0.5;
+ rgb_y = autocvar_scoreboard_color_bg_g + 0.5;
+ rgb_z = autocvar_scoreboard_color_bg_b + 0.5; }
// Layout:
tmp_x = sbwidth;
body_table_height = 1.25 * hud_fontsize_y * max(1, tm.team_size); // no player? show 1 empty line
+ pos_y += autocvar_scoreboard_border_thickness;
pos -= '1 1 0';
tmp_x = sbwidth + 2;
return 1;
else if (intermission == 1)
return 1;
- else if (spectatee_status != -1 && getstati(STAT_HEALTH) <= 0 && cvar("cl_deathscoreboard"))
+ else if (intermission == 2)
+ return 0;
+ else if (spectatee_status != -1 && getstati(STAT_HEALTH) <= 0 && autocvar_cl_deathscoreboard && gametype != GAME_CTS)
return 1;
else if (scoreboard_showscores_force)
return 1;
float i;
float weapon_cnt = WEP_COUNT - 3; // either minstanex/nex are hidden, no port-o-launch, no tuba
float rows;
- if(cvar("scoreboard_accuracy_doublerows"))
+ if(autocvar_scoreboard_accuracy_doublerows)
rows = 2;
else
rows = 1;
float weapon_height = height * 2/3;
float weapon_width = sbwidth / weapon_cnt;
- drawstring(pos, strcat("Accuracy stats (average ", ftos(average_accuracy), "%)"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
- pos_y += 1.25 * hud_fontsize_y;
+ drawstring(pos, sprintf(_("Accuracy stats (average %d%%)"), average_accuracy), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
+ pos_y += 1.25 * hud_fontsize_y + autocvar_scoreboard_border_thickness;
vector tmp;
tmp_x = sbwidth;
tmp_y = height * rows;
drawfill(pos + '0 1 0' * weapon_height + '0 1 0' * height * i, '1 0 0' * sbwidth + '0 1 0' * fontsize, '1 1 1', scoreboard_highlight_alpha, DRAWFLAG_NORMAL);
}
- drawfont = hud_bigfont;
average_accuracy = 0;
float weapons_with_stats;
weapons_with_stats = 0;
if(rows == 2)
pos_x += weapon_width / 2;
- if(getstati(STAT_SWITCHWEAPON) == WEP_MINSTANEX)
+ if(switchweapon == WEP_MINSTANEX)
g_minstagib = 1; // TODO: real detection for minstagib?
- float weapon_stats, weapon_number;
+ float weapon_stats;
if (!acc_levels)
rgb = '1 1 1';
average_accuracy += weapon_stats; // store sum of all accuracies in average_accuracy
string s;
- s = sprintf("%d%%", weapon_stats*100);
+ s = sprintf(_("%d%%"), weapon_stats*100);
float padding;
padding = (weapon_width - stringwidth(s, FALSE, '1 0 0' * fontsize)) / 2; // center the accuracy value
pos_y += height;
}
}
- drawfont = hud_font;
if(weapons_with_stats)
average_accuracy = floor(average_accuracy / weapons_with_stats);
return pos;
}
+vector HUD_DrawKeyValue(vector pos, string key, string value) {
+ float px = pos_x;
+ pos_x += hud_fontsize_x * 0.25;
+ drawstring(pos, key, hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
+ pos_x = xmax - stringwidth(value, FALSE, hud_fontsize) - hud_fontsize_x * 0.25;
+ drawstring(pos, value, hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
+ pos_x = px;
+ pos_y+= hud_fontsize_y;
+
+ return pos;
+}
+
+vector HUD_DrawMapStats(vector pos, vector rgb, vector bg_size) {
+ float stat_secrets_found, stat_secrets_total;
+ float rows;
+ string val;
+
+ // get secrets stats
+ stat_secrets_found = getstatf(STAT_SECRETS_FOUND);
+ stat_secrets_total = getstatf(STAT_SECRETS_TOTAL);
+
+ // get number of rows
+ rows = (stat_secrets_total ? 1 : 0);
+
+ // if no rows, return
+ if not(rows)
+ return pos;
+
+ // draw table header
+ drawstring(pos, _("Map stats:"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
+ pos_y += 1.25 * hud_fontsize_y + autocvar_scoreboard_border_thickness;
+
+ // draw table
+ vector tmp;
+ tmp_x = sbwidth;
+ tmp_y = hud_fontsize_y * rows;
+
+ if (teamplay)
+ drawpic_tiled(pos, "gfx/scoreboard/scoreboard_bg", bg_size, tmp, rgb * autocvar_scoreboard_color_bg_team, scoreboard_alpha_bg, DRAWFLAG_NORMAL);
+ else
+ drawpic_tiled(pos, "gfx/scoreboard/scoreboard_bg", bg_size, tmp, rgb, scoreboard_alpha_bg, DRAWFLAG_NORMAL);
+ drawborderlines(autocvar_scoreboard_border_thickness, pos, tmp, '0 0 0', scoreboard_alpha_bg * 0.75, DRAWFLAG_NORMAL);
+
+ // draw secrets
+ val = sprintf("%d/%d", stat_secrets_found, stat_secrets_total);
+ pos = HUD_DrawKeyValue(pos, _("Secrets found:"), val);
+
+ // update position
+ pos_y += 1.25 * hud_fontsize_y;
+ return pos;
+}
+
+
vector HUD_DrawScoreboardRankings(vector pos, entity pl, vector rgb, vector bg_size)
{
float i;
float is_spec;
is_spec = (GetPlayerColor(pl.sv_entnum) == COLOR_SPECTATOR);
vector hl_rgb;
- hl_rgb_x = cvar("scoreboard_color_bg_r") + 0.5;
- hl_rgb_y = cvar("scoreboard_color_bg_g") + 0.5;
- hl_rgb_z = cvar("scoreboard_color_bg_b") + 0.5;
+ hl_rgb_x = autocvar_scoreboard_color_bg_r + 0.5;
+ hl_rgb_y = autocvar_scoreboard_color_bg_g + 0.5;
+ hl_rgb_z = autocvar_scoreboard_color_bg_b + 0.5;
pos_y += hud_fontsize_y;
- drawstring(pos, strcat("Rankings"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
- pos_y += hud_fontsize_y;
+ drawstring(pos, _("Rankings"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
+ pos_y += hud_fontsize_y + autocvar_scoreboard_border_thickness;
vector tmp;
tmp_x = sbwidth;
tmp_y = 1.25 * hud_fontsize_y * RANKINGS_RECEIVED_CNT;
drawcolorcodedstring(pos + '8 0 0' * hud_fontsize_y, n, '1 1 0' * hud_fontsize_y, scoreboard_alpha_fg, DRAWFLAG_NORMAL);
pos_y += 1.25 * hud_fontsize_y;
}
+ pos_y += autocvar_scoreboard_border_thickness;
return pos;
}
}
if(hud_woulddrawscoreboard) {
- float scoreboard_fadeinspeed = cvar_or("scoreboard_fadeinspeed", 10);
+ float scoreboard_fadeinspeed = autocvar_scoreboard_fadeinspeed;
if (scoreboard_fadeinspeed)
scoreboard_fade_alpha = bound (0, (time - hud_woulddrawscoreboard_change) * scoreboard_fadeinspeed, 1);
else
scoreboard_fade_alpha = 1;
}
else {
- float scoreboard_fadeoutspeed = cvar_or("scoreboard_fadeoutspeed", 5);
+ float scoreboard_fadeoutspeed = autocvar_scoreboard_fadeoutspeed;
if (scoreboard_fadeoutspeed)
scoreboard_fade_alpha = bound (0, (1/scoreboard_fadeoutspeed - (time - hud_woulddrawscoreboard_change)) * scoreboard_fadeoutspeed, 1);
else
HUD_UpdatePlayerTeams();
- scoreboard_alpha_bg = cvar("scoreboard_alpha_bg") * scoreboard_fade_alpha * (1 - autocvar__menu_alpha);
- scoreboard_alpha_fg = cvar_or("scoreboard_alpha_fg", 1.0) * scoreboard_fade_alpha * (1 - autocvar__menu_alpha);
- scoreboard_highlight = cvar("scoreboard_highlight");
- scoreboard_highlight_alpha = cvar_or("scoreboard_highlight_alpha", 0.10) * scoreboard_alpha_fg;
- scoreboard_highlight_alpha_self = cvar_or("scoreboard_highlight_alpha_self", 0.25) * scoreboard_alpha_fg;
- scoreboard_alpha_name = cvar_or("scoreboard_alpha_name", 0.9) * scoreboard_alpha_fg;
- scoreboard_alpha_name_self = cvar_or("scoreboard_alpha_name_self", 1) * scoreboard_alpha_fg;
+ scoreboard_alpha_bg = autocvar_scoreboard_alpha_bg * scoreboard_fade_alpha * (1 - autocvar__menu_alpha);
+ scoreboard_alpha_fg = autocvar_scoreboard_alpha_fg * scoreboard_fade_alpha * (1 - autocvar__menu_alpha);
+ scoreboard_highlight = autocvar_scoreboard_highlight;
+ scoreboard_highlight_alpha = autocvar_scoreboard_highlight_alpha * scoreboard_alpha_fg;
+ scoreboard_highlight_alpha_self = autocvar_scoreboard_highlight_alpha_self * scoreboard_alpha_fg;
+ scoreboard_alpha_name = autocvar_scoreboard_alpha_name * scoreboard_alpha_fg;
+ scoreboard_alpha_name_self = autocvar_scoreboard_alpha_name_self * scoreboard_alpha_fg;
vector rgb, pos, tmp;
entity pl, tm;
+ string str;
- xmin = cvar("scoreboard_offset_left") * vid_conwidth;
- ymin = cvar("con_notify") * cvar("con_notifysize");
+ xmin = (autocvar_scoreboard_offset_left * vid_conwidth);
+ ymin = max((autocvar_con_notify * autocvar_con_notifysize), (autocvar_scoreboard_offset_vertical * vid_conwidth));
- xmax = (1 - cvar("scoreboard_offset_right")) * vid_conwidth;
- ymax = vid_conheight - ymin;
+ xmax = ((1 - autocvar_scoreboard_offset_right) * vid_conwidth);
+ ymax = (vid_conheight - ymin);
sbwidth = xmax - xmin;
pos_z = 0;
// Heading
- drawfont = hud_bigfont;
- drawstring(pos, "Scoreboard", '24 24 0', '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
-
- centerprint_start_x = vid_conwidth - 0.5 * (pos_x + stringwidth("Scoreboard", FALSE, '24 24 0'));
- centerprint_start_y = pos_y;
+ vector sb_heading_fontsize;
+ sb_heading_fontsize = hud_fontsize * 2;
+ drawstring(pos, _("Scoreboard"), sb_heading_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
- pos_y += 24;
-
- drawfont = hud_font;
+ pos_y += sb_heading_fontsize_y + hud_fontsize_y * 0.25;
// Draw the scoreboard
- vector bg_size = drawgetimagesize("gfx/scoreboard/scoreboard_bg") * cvar("scoreboard_bg_scale");
+ vector bg_size = draw_getimagesize("gfx/scoreboard/scoreboard_bg") * autocvar_scoreboard_bg_scale;
if(teamplay)
{
+ vector team_score_baseoffset;
+ team_score_baseoffset = eY * (2 * autocvar_scoreboard_border_thickness + hud_fontsize_y) - eX * (autocvar_scoreboard_border_thickness + hud_fontsize_x * 0.25);
for(tm = teams.sort_next; tm; tm = tm.sort_next)
{
if(tm.team == COLOR_SPECTATOR)
continue;
rgb = GetTeamRGB(tm.team);
- drawstring(pos - '2 0 0' * hud_fontsize_x + '0 1 0' * hud_fontsize_y, ftos(tm.(teamscores[ts_primary])), '1 1 0' * hud_fontsize_y * 1.5, rgb, scoreboard_alpha_fg, DRAWFLAG_NORMAL);
+ str = ftos(tm.(teamscores[ts_primary]));
+ drawstring(pos + team_score_baseoffset - eX * stringwidth(str, FALSE, hud_fontsize * 1.5), str, hud_fontsize * 1.5, rgb, scoreboard_alpha_fg, DRAWFLAG_NORMAL);
if(ts_primary != ts_secondary)
- drawstring(pos - '2 0 0' * hud_fontsize_x + '0 2.5 0' * hud_fontsize_y, ftos(tm.(teamscores[ts_secondary])), '1 1 0' * hud_fontsize_y * 1, rgb, scoreboard_alpha_fg, DRAWFLAG_NORMAL);
-
+ {
+ str = ftos(tm.(teamscores[ts_secondary]));
+ drawstring(pos + team_score_baseoffset - eX * stringwidth(str, FALSE, hud_fontsize) + eY * hud_fontsize_y * 1.5, str, hud_fontsize, rgb, scoreboard_alpha_fg, DRAWFLAG_NORMAL);
+ }
pos = HUD_Scoreboard_MakeTable(pos, tm, rgb, bg_size);
}
}
else
{
- rgb_x = cvar("scoreboard_color_bg_r");
- rgb_y = cvar("scoreboard_color_bg_g");
- rgb_z = cvar("scoreboard_color_bg_b");
+ rgb_x = autocvar_scoreboard_color_bg_r;
+ rgb_y = autocvar_scoreboard_color_bg_g;
+ rgb_z = autocvar_scoreboard_color_bg_b;
for(tm = teams.sort_next; tm; tm = tm.sort_next)
{
if(gametype == GAME_CTS || gametype == GAME_RACE) {
if(race_speedaward) {
- drawcolorcodedstring(pos, strcat("Speed award: ", ftos(race_speedaward), " ^7(", race_speedaward_holder, "^7)"), hud_fontsize, scoreboard_alpha_fg, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos, sprintf(_("Speed award: %d ^7(%s^7)"), race_speedaward, race_speedaward_holder), hud_fontsize, scoreboard_alpha_fg, DRAWFLAG_NORMAL);
pos_y += 1.25 * hud_fontsize_y;
}
if(race_speedaward_alltimebest) {
- drawcolorcodedstring(pos, strcat("All-time fastest: ", ftos(race_speedaward_alltimebest), " ^7(", race_speedaward_alltimebest_holder, "^7)"), hud_fontsize, scoreboard_alpha_fg, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos, sprintf(_("All-time fastest: %d ^7(%s^7)"), race_speedaward_alltimebest, race_speedaward_alltimebest_holder), hud_fontsize, scoreboard_alpha_fg, DRAWFLAG_NORMAL);
pos_y += 1.25 * hud_fontsize_y;
}
pos = HUD_DrawScoreboardRankings(pos, pl, rgb, bg_size);
}
- else if(cvar("scoreboard_accuracy") && spectatee_status != -1 && !warmup_stage) {
+ else if(autocvar_scoreboard_accuracy && spectatee_status != -1 && !warmup_stage) {
if(teamplay)
pos = HUD_DrawScoreboardAccuracyStats(pos, GetTeamRGB(myteam), bg_size);
else
pos = HUD_DrawScoreboardAccuracyStats(pos, rgb, bg_size);
}
+
+ if(teamplay)
+ pos = HUD_DrawMapStats(pos, GetTeamRGB(myteam), bg_size);
+ else
+ pos = HUD_DrawMapStats(pos, rgb, bg_size);
+
// List spectators
float specs;
specs = 0;
if(specs)
{
- drawstring(tmp, "Spectators", hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
+ drawstring(tmp, _("Spectators"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
pos_y += 1.25 * hud_fontsize_y;
}
// Print info string
- string str;
float tl, fl, ll;
- str = strcat("playing on ^2", shortmapname, "^7");
+ str = sprintf(_("playing on ^2%s^7"), shortmapname);
tl = getstatf(STAT_TIMELIMIT);
fl = getstatf(STAT_FRAGLIMIT);
ll = getstatf(STAT_LEADLIMIT);
if(gametype == GAME_LMS)
{
if(tl > 0)
- str = strcat(str, " for up to ^1", ftos(tl), " minutes^7");
+ str = strcat(str, sprintf(_(" for up to ^1%1.0f minutes^7"), tl));
}
else
{
if(tl > 0)
- str = strcat(str, " for ^1", ftos(tl), " minutes^7");
+ str = strcat(str, sprintf(_(" for up to ^1%1.0f minutes^7"), tl));
if(fl > 0)
{
if(tl > 0)
- str = strcat(str, " or");
+ str = strcat(str, _(" or"));
if(teamplay)
{
- str = strcat(str, " until ^3", ScoreString(teamscores_flags[ts_primary], fl));
- if(teamscores_label[ts_primary] == "score")
- str = strcat(str, " points^7");
- else if(teamscores_label[ts_primary] == "fastest")
- str = strcat(str, " is beaten^7");
- else
- str = strcat(str, " ", teamscores_label[ts_primary]);
+ str = strcat(str, sprintf(_(" until ^3%s %s^7"), ScoreString(teamscores_flags[ts_primary], fl),
+ (teamscores_label[ts_primary] == "score") ? CTX(_("SCO^points")) :
+ (teamscores_label[ts_primary] == "fastest") ? CTX(_("SCO^is beaten")) :
+ TranslateScoresLabel(teamscores_label[ts_primary])));
}
else
{
- str = strcat(str, " until ^3", ScoreString(scores_flags[ps_primary], fl));
- if(scores_label[ps_primary] == "score")
- str = strcat(str, " points^7");
- else if(scores_label[ps_primary] == "fastest")
- str = strcat(str, " is beaten^7");
- else
- str = strcat(str, " ", scores_label[ps_primary]);
+ str = strcat(str, sprintf(_(" until ^3%s %s^7"), ScoreString(scores_flags[ps_primary], fl),
+ (scores_label[ps_primary] == "score") ? CTX(_("SCO^points")) :
+ (scores_label[ps_primary] == "fastest") ? CTX(_("SCO^is beaten")) :
+ TranslateScoresLabel(scores_label[ps_primary])));
}
}
if(ll > 0)
{
if(tl > 0 || fl > 0)
- str = strcat(str, " or");
+ str = strcat(str, _(" or"));
if(teamplay)
{
- str = strcat(str, " until a lead of ^3", ScoreString(teamscores_flags[ts_primary], ll));
- if(teamscores_label[ts_primary] == "score")
- str = strcat(str, " points^7");
- else if(teamscores_label[ts_primary] == "fastest")
- str = strcat(str, " is beaten^7");
- else
- str = strcat(str, " ", teamscores_label[ts_primary]);
+ str = strcat(str, sprintf(_(" until a lead of ^3%s %s^7"), ScoreString(teamscores_flags[ts_primary], ll),
+ (teamscores_label[ts_primary] == "score") ? CTX(_("SCO^points")) :
+ (teamscores_label[ts_primary] == "fastest") ? CTX(_("SCO^is beaten")) :
+ TranslateScoresLabel(teamscores_label[ts_primary])));
}
else
{
- str = strcat(str, " until a lead of ^3", ScoreString(scores_flags[ps_primary], ll));
- if(scores_label[ps_primary] == "score")
- str = strcat(str, " points^7");
- else if(scores_label[ps_primary] == "fastest")
- str = strcat(str, " is beaten^7");
- else
- str = strcat(str, " ", scores_label[ps_primary]);
+ str = strcat(str, sprintf(_(" until a lead of ^3%s %s^7"), ScoreString(scores_flags[ps_primary], ll),
+ (scores_label[ps_primary] == "score") ? CTX(_("SCO^points")) :
+ (scores_label[ps_primary] == "fastest") ? CTX(_("SCO^is beaten")) :
+ TranslateScoresLabel(scores_label[ps_primary])));
}
}
}