bool sbt_highlight;
float sbt_highlight_alpha;
float sbt_highlight_alpha_self;
-int sbt_team_size_position;
-int sbt_team_size_total;
// provide basic panel cvars to old clients
// TODO remove them after a future release (0.8.2+)
vector sbt_field_icon0_rgb;
vector sbt_field_icon1_rgb;
vector sbt_field_icon2_rgb;
-string sbt_font_self;
string Scoreboard_GetName(entity pl)
{
if(ready_waiting && pl.ready)
}
return entcs_GetName(pl.sv_entnum);
}
+
string Scoreboard_GetField(entity pl, PlayerScoreField field)
{
float tmp, num, denom;
{
case SP_PING:
if (!pl.gotscores)
- return "\xE2\x96\xB6\xE2\x96\xB6\xE2\x96\xB6"; // >>> sign using U+25B6
+ return "\xE2\x96\xB6\xE2\x96\xB6\xE2\x96\xB6"; // >>> sign using U+25B6 (Black Right-Pointing Triangle)
//str = getplayerkeyvalue(pl.sv_entnum, "ping");
f = pl.ping;
if(f == 0)
float fg_alpha = (is_self ? sbt_fg_alpha_self : sbt_fg_alpha);
vector pos = item_pos;
- // put a "self indicator" beside the self row
- sbt_font_self = "◀"; // unicode U+25C0 (black left-pointing triangle)
+ // put a "self indicator" beside the self row, unicode U+25C0 (black left-pointing triangle)
if (is_self)
- drawstring(pos+eX*(panel_size.x+.5*hud_fontsize.x)+eY, sbt_font_self, vec2(hud_fontsize.x, hud_fontsize.y), rgb, panel_fg_alpha, DRAWFLAG_NORMAL);
+ drawstring(pos+eX*(panel_size.x+.5*hud_fontsize.x)+eY, "\xE2\x97\x80", vec2(hud_fontsize.x, hud_fontsize.y), rgb, panel_fg_alpha, DRAWFLAG_NORMAL);
pos.x += hud_fontsize.x * 0.5;
pos.y += (1.25 - 1) / 2 * hud_fontsize.y; // center text vertically
return true;
else if (intermission == 2)
return false;
- else if (spectatee_status != -1 && STAT(HEALTH) <= 0 && autocvar_cl_deathscoreboard && !ISGAMETYPE(CTS) && !active_minigame)
+ else if (spectatee_status != -1 && STAT(HEALTH) <= 0 && autocvar_cl_deathscoreboard && !ISGAMETYPE(CTS)
+ && (!HUD_MinigameMenu_IsOpened() || !active_minigame))
+ {
return true;
+ }
else if (scoreboard_showscores_force)
return true;
return false;
}
if (weapon_stats < 0 && !((weapons_stat & set) || (weapons_inmap & set)))
{
- if (((it.spawnflags & WEP_FLAG_HIDDEN) || (it.spawnflags & WEP_FLAG_MUTATORBLOCKED)))
+ if (it.spawnflags & (WEP_FLAG_HIDDEN | WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_SPECIALATTACK))
++nHidden;
else
++disownedcnt;
sbt_highlight_alpha_self = autocvar_hud_panel_scoreboard_table_highlight_alpha_self * panel_fg_alpha;
sbt_fg_alpha = autocvar_hud_panel_scoreboard_table_fg_alpha * panel_fg_alpha;
sbt_fg_alpha_self = autocvar_hud_panel_scoreboard_table_fg_alpha_self * panel_fg_alpha;
- sbt_team_size_position = autocvar_hud_panel_scoreboard_team_size_position;
// don't overlap with con_notify
if(!autocvar__hud_configure)
draw_endBoldFont();
// Game Info: Game Detail
- float tl, fl, ll;
- str = ""; // optionally "^7Limits: "
- tl = STAT(TIMELIMIT);
- fl = STAT(FRAGLIMIT);
- ll = STAT(LEADLIMIT);
+ float tl = STAT(TIMELIMIT);
+ float fl = STAT(FRAGLIMIT);
+ float ll = STAT(LEADLIMIT);
+ float ll_and_fl = STAT(LEADLIMIT_AND_FRAGLIMIT);
+ str = "";
if(tl > 0)
str = strcat(str, sprintf(_("^3%1.0f minutes"), tl));
if(!ISGAMETYPE(LMS))
{
str = strcat(str, sprintf(_("^5%s %s"), ScoreString(teamscores_flags(ts_primary), fl),
(teamscores_label(ts_primary) == "score") ? CTX(_("SCO^points")) :
- (teamscores_label(ts_primary) == "fastest") ? CTX(_("SCO^is beaten")) :
+ (teamscores_label(ts_primary) == "fastest") ? "" :
TranslateScoresLabel(teamscores_label(ts_primary))));
}
else
{
str = strcat(str, sprintf(_("^5%s %s"), ScoreString(scores_flags(ps_primary), fl),
(scores_label(ps_primary) == "score") ? CTX(_("SCO^points")) :
- (scores_label(ps_primary) == "fastest") ? CTX(_("SCO^is beaten")) :
+ (scores_label(ps_primary) == "fastest") ? "" :
TranslateScoresLabel(scores_label(ps_primary))));
}
}
if(ll > 0)
{
if(tl > 0 || fl > 0)
- str = strcat(str, "^7 / "); // delimiter
+ {
+ // delimiter
+ if (ll_and_fl && fl > 0)
+ str = strcat(str, "^7 & ");
+ else
+ str = strcat(str, "^7 / ");
+ }
+
if(teamplay)
{
str = strcat(str, sprintf(_("^2+%s %s"), ScoreString(teamscores_flags(ts_primary), ll),
(teamscores_label(ts_primary) == "score") ? CTX(_("SCO^points")) :
- (teamscores_label(ts_primary) == "fastest") ? CTX(_("SCO^is beaten")) :
+ (teamscores_label(ts_primary) == "fastest") ? "" :
TranslateScoresLabel(teamscores_label(ts_primary))));
}
else
{
str = strcat(str, sprintf(_("^2+%s %s"), ScoreString(scores_flags(ps_primary), ll),
(scores_label(ps_primary) == "score") ? CTX(_("SCO^points")) :
- (scores_label(ps_primary) == "fastest") ? CTX(_("SCO^is beaten")) :
+ (scores_label(ps_primary) == "fastest") ? "" :
TranslateScoresLabel(scores_label(ps_primary))));
}
}
if(panel.current_panel_bg != "0")
pos.y += panel_bg_border;
- // calculate team size total (sum of all team sizes)
- sbt_team_size_total = 0;
- for(tm = teams.sort_next; tm; tm = tm.sort_next)
- sbt_team_size_total += tm.team_size;
-
// Draw the scoreboard
float scale = autocvar_hud_panel_scoreboard_table_bg_scale;
if(scale <= 0)
vector panel_bg_color_save = panel_bg_color;
vector team_score_baseoffset;
vector team_size_baseoffset;
- if (sbt_team_size_position != 1) // team size not on left
+ if (autocvar_hud_panel_scoreboard_team_size_position != 1) // team size not on left
{
// put team score to the left of scoreboard (and team size to the right)
team_score_baseoffset = eY * hud_fontsize.y - eX * hud_fontsize.x * 0.5;
}
}
+ int team_size_total = 0;
+ if (autocvar_hud_panel_scoreboard_team_size_position != 0) // team size not off
+ {
+ // calculate team size total (sum of all team sizes)
+ for(tm = teams.sort_next; tm; tm = tm.sort_next)
+ if(tm.team != NUM_SPECTATOR)
+ team_size_total += tm.team_size;
+ }
+
for(tm = teams.sort_next; tm; tm = tm.sort_next)
{
if(tm.team == NUM_SPECTATOR)
draw_beginBoldFont();
vector rgb = Team_ColorRGB(tm.team);
str = ftos(tm.(teamscores(ts_primary)));
- if (sbt_team_size_position != 1) // team size not on left
+ if (autocvar_hud_panel_scoreboard_team_size_position != 1) // team size not on left
{
// team score on the left (default)
str_pos = pos + team_score_baseoffset - eX * stringwidth(str, false, hud_fontsize * 1.5);
drawstring(str_pos, str, hud_fontsize * 1.5, rgb, panel_fg_alpha, DRAWFLAG_NORMAL);
// team size (if set to show on the side)
- if (sbt_team_size_position != 0) // team size not off
+ if (autocvar_hud_panel_scoreboard_team_size_position != 0) // team size not off
{
// calculate the starting position for the whole team size info string
- str = sprintf("%d/%d", tm.team_size, sbt_team_size_total);
- if (sbt_team_size_position == 1)
+ str = sprintf("%d/%d", tm.team_size, team_size_total);
+ if (autocvar_hud_panel_scoreboard_team_size_position == 1)
{
// team size on the left
str_pos = pos + team_size_baseoffset - eX * stringwidth(str, false, hud_fontsize * 1.5);
str = sprintf("%d", tm.team_size);
drawstring(str_pos, str, hud_fontsize * 1.5, rgb, panel_fg_alpha, DRAWFLAG_NORMAL);
str_pos += eX * stringwidth(str, true, hud_fontsize * 1.5) + eY * hud_fontsize.y * .5;
- str = sprintf("/%d", sbt_team_size_total);
+ str = sprintf("/%d", team_size_total);
drawstring(str_pos, str, hud_fontsize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
}
if(ts_primary != ts_secondary)
{
str = ftos(tm.(teamscores(ts_secondary)));
- if (sbt_team_size_position != 1) // team size not on left
+ if (autocvar_hud_panel_scoreboard_team_size_position != 1) // team size not on left
{
// left
str_pos = pos + team_score_baseoffset - vec2(stringwidth(str, false, hud_fontsize), hud_fontsize.y * -1.5);
for(tm = teams.sort_next; tm; tm = tm.sort_next)
if(tm.team != NUM_SPECTATOR)
break;
+
// display it anyway
pos = Scoreboard_MakeTable(pos, tm, panel_bg_color, bg_size);
}