37 HUD_Write_Cvar(
"hud_panel_scoreboard_table_highlight_alpha_eliminated");
117 cvar_set(
"hud_panel_scoreboard_scores_per_round",
"0");
126 #define SCO_LABEL(strlabel, label, padding, help) \
129 return CTX(strlabel); \
130 LOG_HELP("^3", label, padding, "^7", help); \
137 SCO_LABEL(_(
"SCO^bckills"),
"bckills",
" ", _(
"Number of ball carrier kills"));
138 SCO_LABEL(_(
"SCO^bctime"),
"bctime",
" ", _(
"Total amount of time holding the ball in Keepaway"));
139 SCO_LABEL(_(
"SCO^caps"),
"caps",
" ", _(
"How often a flag (CTF) or a key (Key Hunt) was captured"));
140 SCO_LABEL(_(
"SCO^captime"),
"captime",
" ", _(
"Time of fastest capture (CTF)"));
141 SCO_LABEL(_(
"SCO^deaths"),
"deaths",
" ", _(
"Number of deaths"));
142 SCO_LABEL(_(
"SCO^destructions"),
"destructions",
" ", _(
"Number of keys destroyed by pushing them into the void"));
143 SCO_LABEL(_(
"SCO^damage dealt"),
"dmg",
" ", _(
"The total damage dealt"));
144 SCO_LABEL(_(
"SCO^damage taken"),
"dmgtaken",
" ", _(
"The total damage taken"));
145 SCO_LABEL(_(
"SCO^drops"),
"drops",
" ", _(
"Number of flag drops"));
146 SCO_LABEL(_(
"SCO^fastest"),
"fastest",
" ", _(
"Time of fastest lap (Race/CTS)"));
147 SCO_LABEL(_(
"SCO^faults"),
"faults",
" ", _(
"Number of faults committed"));
148 SCO_LABEL(_(
"SCO^fckills"),
"fckills",
" ", _(
"Number of flag carrier kills"));
149 SCO_LABEL(_(
"SCO^fps"),
"fps",
" ", _(
"Frames per second"));
150 SCO_LABEL(_(
"SCO^frags"),
"frags",
" ", _(
"Number of kills minus suicides"));
151 SCO_LABEL(_(
"SCO^generators"),
"generators",
" ", _(
"Number of generators destroyed"));
152 SCO_LABEL(_(
"SCO^goals"),
"goals",
" ", _(
"Number of goals scored"));
153 SCO_LABEL(_(
"SCO^hunts"),
"hunts",
" ", _(
"Number of hunts (Survival)"));
154 SCO_LABEL(_(
"SCO^kckills"),
"kckills",
" ", _(
"Number of key carrier kills"));
155 SCO_LABEL(_(
"SCO^k/d"),
"kd",
" ", _(
"The kill-death ratio"));
156 SCO_LABEL(_(
"SCO^kdr"),
"kdr",
" ", _(
"The kill-death ratio"));
157 SCO_LABEL(_(
"SCO^kdratio"),
"kdratio",
" ", _(
"The kill-death ratio"));
158 SCO_LABEL(_(
"SCO^kills"),
"kills",
" ", _(
"Number of kills"));
159 SCO_LABEL(_(
"SCO^laps"),
"laps",
" ", _(
"Number of laps finished (Race/CTS)"));
160 SCO_LABEL(_(
"SCO^lives"),
"lives",
" ", _(
"Number of lives (LMS)"));
161 SCO_LABEL(_(
"SCO^losses"),
"losses",
" ", _(
"Number of times a key was lost"));
162 SCO_LABEL(_(
"SCO^name"),
"name",
" ", _(
"Player name"));
163 SCO_LABEL(_(
"SCO^nick"),
"nick",
" ", _(
"Player name"));
164 SCO_LABEL(_(
"SCO^objectives"),
"objectives",
" ", _(
"Number of objectives destroyed"));
165 SCO_LABEL(_(
"SCO^pickups"),
"pickups",
" ", _(
"How often a flag (CTF), a key (Key Hunt), or a ball (Keepaway) was picked up"));
166 SCO_LABEL(_(
"SCO^ping"),
"ping",
" ", _(
"Ping time"));
167 SCO_LABEL(_(
"SCO^pl"),
"pl",
" ", _(
"Packet loss"));
168 SCO_LABEL(_(
"SCO^pushes"),
"pushes",
" ", _(
"Number of players pushed into the void"));
169 SCO_LABEL(_(
"SCO^rank"),
"rank",
" ", _(
"Player rank"));
170 SCO_LABEL(_(
"SCO^returns"),
"returns",
" ", _(
"Number of flag returns"));
171 SCO_LABEL(_(
"SCO^revivals"),
"revivals",
" ", _(
"Number of revivals"));
172 SCO_LABEL(_(
"SCO^rounds won"),
"rounds",
" ", _(
"Number of rounds won"));
173 SCO_LABEL(_(
"SCO^rounds played"),
"rounds_pl",
" ", _(
"Number of rounds played"));
174 SCO_LABEL(_(
"SCO^score"),
"score",
" ", _(
"Total score"));
175 SCO_LABEL(_(
"SCO^skill"),
"skill",
" ", _(
"Player skill"));
176 SCO_LABEL(_(
"SCO^suicides"),
"suicides",
" ", _(
"Number of suicides"));
177 SCO_LABEL(_(
"SCO^sum"),
"sum",
" ", _(
"Number of kills minus deaths"));
178 SCO_LABEL(_(
"SCO^survivals"),
"survivals",
" ", _(
"Number of survivals"));
179 SCO_LABEL(_(
"SCO^takes"),
"takes",
" ", _(
"Number of domination points taken (Domination)"));
180 SCO_LABEL(_(
"SCO^teamkills"),
"teamkills",
" ", _(
"Number of teamkills"));
181 SCO_LABEL(_(
"SCO^ticks"),
"ticks",
" ", _(
"Number of ticks (Domination)"));
182 SCO_LABEL(_(
"SCO^time"),
"time",
" ", _(
"Total time raced (Race/CTS)"));
254 bool key_pressed = bInputType == 0;
273 string con_keys = findkeysforcommand(
"toggleconsole", 0);
276 bool hit_con_bind =
false;
277 for (
int i = 0; i < keys; ++i)
296 if (nPrimary ==
K_TAB)
305 goto downarrow_action;
331 LABEL(downarrow_action);
339 for (
entity tm =
teams.sort_next; tm; tm = tm.sort_next)
344 if (scoreboard_selected_team_found)
347 scoreboard_selected_team_found =
true;
359 for (
entity pl, tm =
teams.sort_next; tm; tm = tm.sort_next)
361 for (pl =
players.sort_next; pl; pl = pl.sort_next)
363 if (pl.team != tm.team)
366 if (scoreboard_selected_player_found)
369 scoreboard_selected_player_found =
true;
382 LABEL(uparrow_action);
388 for (
entity tm =
teams.sort_next; tm; tm = tm.sort_next)
402 for (
entity pl, tm =
teams.sort_next; tm; tm = tm.sort_next)
404 for (pl =
players.sort_next; pl; pl = pl.sort_next)
406 if (pl.team != tm.team)
464 localcmd(
"scoreboard_columns_set\n");
470 localcmd(
"scoreboard_columns_set default\n");
474 localcmd(
"scoreboard_columns_set all\n");
485 localcmd(
"toggle hud_panel_scoreboard_scores_per_round\n");
506 else if (hit_con_bind || nPrimary ==
K_PAUSE)
562 for (
entity tmp, pl =
players.sort_next; pl; pl = pl.sort_next)
590 for (
entity tm =
teams.sort_next; tm; tm = tm.sort_next)
595 if (
ts_min > tm.team_size)
597 if (
ts_max < tm.team_size)
605 TC(
int, vl);
TC(
int, vr);
TC(
int, f);
608 if (vl == 0 && vr != 0)
610 if (vl != 0 && vr == 0)
634 if (!left.gotscores && right.gotscores)
657 if (left.sv_entnum < right.sv_entnum)
703 if (left.team < right.team)
720 LOG_HELP(_(
"You can modify the scoreboard using the ^2scoreboard_columns_set command."));
722 LOG_HELP(
"^2scoreboard_columns_set ^3default");
723 LOG_HELP(_(
"^2scoreboard_columns_set ^3field1 field2 ..."));
724 LOG_HELP(_(
"^2scoreboard_columns_set ^7without arguments reads the arguments from the cvar scoreboard_columns"));
725 LOG_HELP(_(
" ^5Note: ^7scoreboard_columns_set without arguments is executed on every map start"));
726 LOG_HELP(_(
"^2scoreboard_columns_set ^3expand_default ^7loads default layout and expands it into the cvar scoreboard_columns so you can edit it"));
727 LOG_HELP(_(
"You can use a ^3|^7 to start the right-aligned fields."));
728 LOG_HELP(_(
"The following field names are recognized (case insensitive):"));
734 LOG_HELP(_(
"Before a field you can put a + or - sign, then a comma separated list\n"
735 "of gametypes, then a slash, to make the field show up only in these\n"
736 "or in all but these gametypes. You can also specify 'all' as a\n"
737 "field to show all fields available for the current gametype."));
740 LOG_HELP(_(
"The special gametype names 'teams' and 'noteams' can be used to\n"
741 "include/exclude ALL teams/noteams gametypes."));
744 LOG_HELP(_(
"Example: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4"));
745 LOG_HELP(_(
"will display name, ping and pl aligned to the left, and the fields\n"
746 "right of the vertical bar aligned to the right."));
747 LOG_HELP(_(
"'field3' will only be shown in CTF, and 'field4' will be shown in all\n"
748 "other gametypes except DM."));
755#define SCOREBOARD_DEFAULT_COLUMNS \
756"ping pl fps skill name |" \
757" -teams,rc,cts,surv,inv,lms/kills +ft,tdm,tmayhem/kills ?+rc,inv/kills" \
758" -teams,surv,lms/deaths +ft,tdm,tmayhem/deaths" \
760" -teams,lms,rc,cts,surv,inv,ka/suicides +ft,tdm,tmayhem/suicides ?+rc,inv/suicides" \
761" -cts,dm,tdm,surv,ka,ft,mayhem,tmayhem/frags" \
762" +tdm,ft,dom,ons,as,tmayhem/teamkills"\
763" -rc,cts,surv,nb/dmg -rc,cts,surv,nb/dmgtaken" \
764" +surv/survivals +surv/hunts" \
765" +ctf/pickups +ctf/fckills +ctf/returns +ctf/caps +ons/takes +ons/caps" \
766" +lms/lives +lms/rank" \
767" +kh/kckills +kh/losses +kh/caps" \
768" ?+rc/laps ?+rc/time +rc,cts/fastest" \
769" +as/objectives +nb/faults +nb/goals" \
770" +ka,tka/pickups +ka,tka/bckills +ka,tka/bctime +ft/revivals" \
771" +dom/ticks +dom/takes" \
772" -lms,rc,cts,inv,nb/score"
781 bool have_name =
false, have_primary =
false, have_secondary =
false, have_separator =
false;
797 if (
argv(2) ==
"default" ||
argv(2) ==
"expand_default")
799 if (
argv(2) ==
"expand_default")
803 else if (
argv(2) ==
"all" ||
argv(2) ==
"ALL")
805 string s =
"ping pl name |";
806 if (
argv(2) ==
"ALL")
809 s =
strcat(s,
" ",
"sum");
810 s =
strcat(s,
" ",
"kdratio");
811 s =
strcat(s,
" ",
"frags");
830 for (i = 1; i < argc - 1; ++i)
874 if (str ==
"damagetaken")
884 if (!nocomplain && str !=
"fps" && str !=
"skill")
885 LOG_INFOF(
"^1Error:^7 Unknown score field: '%s'", str);
895 have_secondary =
true;
907 have_secondary =
true;
909 have_secondary =
true;
910 int missing = (!have_primary) + (!have_secondary) + (!have_separator) + (!have_name);
925 LOG_INFO(
"fixed missing field 'name'");
938 LOG_INFO(
"fixed missing field '|'");
941 else if (!have_separator)
946 LOG_INFO(
"fixed missing field '|'");
967#undef SCOREBOARD_DEFAULT_COLUMNS
978const string sbt_field_icon_playercolor[3] = {
"gfx/scoreboard/playercolor_base",
"gfx/scoreboard/playercolor_shirt",
"gfx/scoreboard/playercolor_pants" };
1040 float tmp, num, denom;
1053 #define PING_LOW autocvar_hud_panel_scoreboard_ping_low
1054 #define PING_MED autocvar_hud_panel_scoreboard_ping_medium
1055 #define PING_HIGH autocvar_hud_panel_scoreboard_ping_high
1056 #define COLOR_LOW autocvar_hud_panel_scoreboard_ping_low_color
1057 #define COLOR_MED autocvar_hud_panel_scoreboard_ping_medium_color
1058 #define COLOR_HIGH autocvar_hud_panel_scoreboard_ping_high_color
1060 return "\xE2\x96\xB6\xE2\x96\xB6\xE2\x96\xB6";
1085 f = pl.ping_packetloss;
1086 tmp = pl.ping_movementloss;
1087 if (f == 0 && tmp == 0)
1092 tmp =
bound(0, f / 0.2 + tmp / 0.04, 1);
1103 f = pl.(scores(SP_KILLS)) - pl.(scores(SP_SUICIDES));
1109 num = pl.(scores(SP_KILLS));
1110 denom = pl.(scores(SP_DEATHS));
1118 str = sprintf(
"%d", num);
1126 str = sprintf(
"%.1f", num / denom);
1133 str = sprintf(
"%.1f", num / denom);
1138 f = pl.(scores(SP_KILLS)) - pl.(scores(SP_DEATHS));
1151 tmp = pl.(scores(SP_SKILL));
1154 case -1:
return "...";
1155 case -2:
return _(
"N/A");
1156 default:
return ftos(tmp);
1160 tmp = pl.(scores(SP_FPS));
1164 return ((pl.ping == 0) ? _(
"N/A") :
"...");
1175 return ftos(pl.(scores(field)));
1177 case SP_DMG:
case SP_DMGTAKEN:
1179 return sprintf(
"%.2f k", pl.(scores(field)) / (1000 *
rounds_played));
1180 return sprintf(
"%.1f k", pl.(scores(field)) / 1000);
1182 default:
case SP_SCORE:
1183 tmp = pl.(scores(field));
1243#define ADD_ICON_PADDING(val) \
1244 val += sbt_fixcolumnwidth_marginlen; \
1245 val += hud_fontsize.x * sbt_fixcolumnwidth_iconlen_playercolor; \
1246 for (j = 0; j < sbt_field_icon_extra_set; ++j) \
1247 val += hud_fontsize.x * sbt_fixcolumnwidth_iconlen_extra[j];
1251 float used_space = 0;
1253 if (j != i &&
sbt_field[i] != SP_SEPARATOR)
1279#undef ADD_ICON_PADDING
1355 pos.x += column_dim.x;
1361 vector prev_drawfontscale;
1406 TC(
bool, is_self);
TC(
int, pl_number);
1439 if (field == SP_SEPARATOR)
1442 if (is_spec && field != SP_NAME && field != SP_PING)
1452 if (field == SP_NAME)
1494 if (field == SP_SEPARATOR)
1497 if (is_spec && field != SP_NAME && field != SP_PING)
1506 if (field == SP_NAME)
1554 static float max_name_width = 0;
1556 float fieldsize = 0;
1557 float min_fieldsize = 0;
1566 for (i = 0; pl; pl = pl.sort_next)
1568 if (pl.team != this_team)
1570 if (pl == excluded_pl)
1594 if (column_width > max_name_width)
1595 max_name_width = column_width;
1596 column_width = max_name_width;
1601 column_width +=
hud_fontsize.x * 0.25 +
max(fieldsize, min_fieldsize) + 2 * fieldpadding;
1604 if (pos.x + column_width > width_limit)
1631 name_pos.x +=
max(fieldsize, min_fieldsize) + 2 * fieldpadding +
hud_fontsize.x * 0.25;
1635 name_pos.x += ignored_size;
1641 name_pos.x += queued_size;
1647 h_size.x =
max(fieldsize, min_fieldsize) + 2 * fieldpadding;
1651 field_pos.x += column_width - h_size.x;
1654 field_pos.x += fieldpadding + (
max(fieldsize, min_fieldsize) - fieldsize) * 0.5;
1663 pos.x += column_width;
1672 int max_players = 999;
1673 int tm_size = (tm ? tm.team_size : 0);
1690 if (max_players <= 1)
1692 if (max_players == tm_size)
1702 vector scoreboard_selected_hl_pos = pos;
1703 vector scoreboard_selected_hl_size =
'0 0 0';
1705 scoreboard_selected_hl_size.y =
panel_size.y;
1712 if (
panel.current_panel_bg !=
"0")
1743 bool is_self =
false;
1744 bool self_shown =
false;
1749 if (pl.team != tm.team)
1751 if (i == max_players - 2 && pl != me
1752 && !self_shown && me.team == tm.team)
1759 if (i >= max_players - 1)
1778 drawfill(scoreboard_selected_hl_pos, scoreboard_selected_hl_size,
'0.75 0.75 0.75' + 0.25 * rgb, hl_alpha,
DRAWFLAG_NORMAL);
1793 if (it.instanceOfArmor || it.instanceOfHealth)
1795 switch (
floor(mask) % 10)
1797 default:
return false;
1798 case 4:
if (it == ITEM_HealthMega || it == ITEM_ArmorMega)
return true;
1799 case 3:
if (it == ITEM_HealthBig || it == ITEM_ArmorBig)
return true;
1800 case 2:
if (it == ITEM_HealthMedium || it == ITEM_ArmorMedium)
return true;
1801 case 1:
if (it == ITEM_HealthSmall || it == ITEM_ArmorSmall)
return true;
1804 if (it.instanceOfAmmo)
1805 return (
floor(mask / 10) % 10) == 1;
1925 if (
panel.current_panel_bg !=
"0")
1942 if (
panel.current_panel_bg !=
"0")
1952 float item_width =
panel_size.x / item_columns;
1961 for (i = 0; i < item_columns; ++i)
1965 for (i = 0; i < item_rows; ++i)
1969 float padding, oldposx = pos.x;
1984 if (column == item_columns - 1)
1987 pos.y += item_height;
1992 pos.x += item_width;
2002vector Scoreboard_AccuracyStats_Draw(
vector pos,
vector rgb,
vector bg_size,
WepSet all_weps,
int wep_rows,
int wep_columns,
float wep_height,
float wep_height_just_weapon,
int item_rows,
float item_height,
bool merged)
2017 if (
panel.current_panel_bg !=
"0")
2024 if (
panel.current_panel_bg !=
"0")
2036 if (
panel.current_panel_bg !=
"0")
2040 panel_size.y = wep_height * wep_rows + item_height * (merged ? item_rows : 0);
2052 end_pos =
panel_pos +
eY * (wep_height * wep_rows);
2056 if (
panel.current_panel_bg !=
"0")
2067 float wep_width =
panel_size.x / wep_columns;
2076 for (i = 0; i < wep_columns; ++i)
2080 for (i = 0; i < wep_rows; ++i)
2084 vector wep_rgb =
'1 1 1';
2088 float wep_alpha, padding, oldposx = pos.x;
2092 int acc, weps_with_stats = 0;
2099 if (acc < 0 && !(all_weps & set))
2104 wep_alpha = (acc >= 0)
2124 if (column == wep_columns - 1)
2127 pos.y += wep_height;
2137 if (weps_with_stats)
2148 int disowned_cnt = 0;
2160 if (acc < 0 && !(all_weps & set))
2172 int uninteresting_cnt = 0;
2176 ++uninteresting_cnt;
2180 int items_cnt =
REGISTRY_COUNT(Items) - disowned_cnt - uninteresting_cnt;
2186 float item_height = item_height_just_item +
hud_fontsize.y;
2188 int item_rows = item_columns ?
ceil(items_cnt / item_columns) : 0;
2191 float wep_height = wep_height_just_weapon +
hud_fontsize.y;
2193 int wep_rows = wep_columns ?
ceil(wep_cnt / wep_columns) : 0;
2196 float items_posy = pos.y;
2202 items_posy += wep_height * wep_rows;
2203 if (
panel.current_panel_bg !=
"0")
2213 pos =
Scoreboard_AccuracyStats_Draw(pos, rgb, bg_size, all_weps, wep_rows, wep_columns, wep_height, wep_height_just_weapon, item_rows, item_height, merged);
2215 pos =
Scoreboard_ItemStats_Draw(pos, rgb, bg_size, item_rows, item_columns, item_height, item_height_just_item, merged);
2234 float stat_secrets_found, stat_secrets_total;
2235 float stat_monsters_killed, stat_monsters_total;
2240 stat_monsters_killed =
STAT(MONSTERS_KILLED);
2241 stat_monsters_total =
STAT(MONSTERS_TOTAL);
2244 stat_secrets_found =
STAT(SECRETS_FOUND);
2245 stat_secrets_total =
STAT(SECRETS_TOTAL);
2248 if (stat_secrets_total)
2250 if (stat_monsters_total)
2260 if (
panel.current_panel_bg !=
"0")
2269 if (
panel.current_panel_bg !=
"0")
2284 if (stat_monsters_total)
2286 val = sprintf(
"%d/%d", stat_monsters_killed, stat_monsters_total);
2291 if (stat_secrets_total)
2293 val = sprintf(
"%d/%d", stat_secrets_found, stat_secrets_total);
2312 vector hl_rgb = rgb +
'0.5 0.5 0.5';
2314 vector scoreboard_selected_hl_pos = pos;
2321 if (
panel.current_panel_bg !=
"0")
2324 vector scoreboard_selected_hl_size =
'0 0 0';
2326 scoreboard_selected_hl_size.y = pos.y - scoreboard_selected_hl_pos.y;
2359 namesize += available_space;
2360 columnsize.x += available_space;
2364 scoreboard_selected_hl_size.y +=
panel_size.y;
2369 if (
panel.current_panel_bg !=
"0")
2385 int column = 0, j = 0;
2388 for (i = start_item; i < start_item +
rankings_cnt; ++i)
2403 case 0: rank_color =
'0.933 0.733 0.200';
break;
2404 case 1: rank_color =
'0.667 0.667 0.667';
break;
2405 case 2: rank_color =
'0.800 0.467 0.267';
break;
2406 default: rank_color =
'1 1 1';
2441 for (
entity tm, pl =
players.sort_next; pl; pl = pl.sort_next)
2444 for (tm =
teams.sort_next; tm; tm = tm.sort_next)
2447 str =
strcat(_(
"Spectators"), sprintf(_(
" (%s)"),
itos(tm.team_size)));
2472 return strcat(
"^5", sprintf((is_leadlimit ? _(
"+%s %s") : _(
"%s %s")),
ScoreString(s_flags, limit, 0),
2473 (s_label ==
"score") ?
CTX(_(
"SCO^points")) :
2498 static string hud_fontsize_str;
2506 static float scoreboard_table_fieldtitle_maxwidth_prev;
2578 vector sb_gameinfo_type_fontsize, sb_gameinfo_detail_fontsize;
2595 str = _(
"Team Selection");
2604 pos.y += sb_gameinfo_type_fontsize.y;
2609 str = sprintf(_(
"^7Press ^3%s^7 to join the selected team"),
translate_key(
"SPACE"));
2611 str = sprintf(_(
"^7Press ^3%s^7 to auto-select a team and join"),
translate_key(
"SPACE"));
2614 pos.y += sb_gameinfo_detail_fontsize.y +
hud_fontsize.y * 0.3;
2615 str = sprintf(_(
"^7Press ^3%s ^7to select a specific team"),
translate_key(
"TAB"));
2620 float tl =
STAT(TIMELIMIT);
2621 float fl =
STAT(FRAGLIMIT);
2622 float ll =
STAT(LEADLIMIT);
2628 bool draw_ll = (ll > 0 && (ll < fl || fl <= 0));
2632 str =
strcat(str,
"^7 / ");
2637 if (tl > 0 || fl > 0)
2640 if (
STAT(LEADLIMIT_AND_FRAGLIMIT) && fl > 0)
2641 str =
strcat(str,
"^7 & ");
2643 str =
strcat(str,
"^7 / ");
2662 pos.y += sb_gameinfo_detail_fontsize.y +
hud_fontsize.y * 0.3;
2663 if (
panel.current_panel_bg !=
"0")
2670 vector bg_size = draw_getimagesize(
"gfx/scoreboard/scoreboard_bg") *
scale;
2676 vector team_score_baseoffset;
2677 vector team_size_baseoffset;
2684 if (
panel.current_panel_bg !=
"0")
2695 if (
panel.current_panel_bg !=
"0")
2702 int team_size_total = 0;
2706 for (tm =
teams.sort_next; tm; tm = tm.sort_next)
2708 team_size_total += tm.team_size;
2715 for (tm =
teams.sort_next; tm; tm = tm.sort_next)
2741 str = sprintf(
"%d/%d", tm.team_size, team_size_total);
2749 str = sprintf(
"%d", tm.team_size);
2752 str = sprintf(
"/%d", team_size_total);
2786 for (tm =
teams.sort_next; tm; tm = tm.sort_next)
2813 string ranktitle =
M_ARGV(1,
string);
2824 str = sprintf(_(
"Speed award: %d%s ^7(%s^7)"),
race_speedaward * conversion_factor, unit,
name);
2825 str =
strcat(str,
" / ");
2869 str = sprintf(_(
"You are dead, press ^2%s^7 to respawn"),
getcommandkey(_(
"jump"),
"+jump"));
#define MUTATOR_CALLHOOK(name,...)
#define M_ARGV(idx, type)
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
bool HUD_MinigameMenu_IsOpened()
void drawpic_tiled(vector pos, string pic, vector sz, vector area, vector color, float theAlpha, float drawflag)
#define drawcolorcodedstring(position, text, scale, alpha, flag)
#define drawstring(position, text, scale, rgb, alpha, flag)
#define drawpic_aspect_skin(pos, pic, sz, color, theAlpha, drawflag)
#define drawpic(position, pic, size, rgb, alpha, flag)
#define draw_beginBoldFont()
#define drawfill(position, size, rgb, alpha, flag)
#define draw_endBoldFont()
float autocvar_con_notifysize
float autocvar_con_notify
string GetSpeedUnit(int speed_unit)
void Release_Common_Keys()
bool SetTeam(entity o, int Team)
float GetSpeedUnitFactor(int speed_unit)
float grecordtime[RANKINGS_CNT]
float RANKINGS_RECEIVED_CNT
string gametype_custom_name
#define getcommandkey(cmd_name, command)
int spectatee_status
the -1 disables HUD panels before CSQC receives necessary data
string grecordholder[RANKINGS_CNT]
#define colormapPaletteColor(c, isPants)
#define scores_label(this)
#define teamscores_flags(i)
#define teamscores_label(i)
#define scores_flags(this)
const int SFL_ALLOW_HIDE
Allow a column to be hidden (do not automatically add it even if it is a sorting key).
const int SFL_NOT_SORTABLE
const int SFL_SORT_PRIO_MASK
const int SFL_SORT_PRIO_SECONDARY
Scoring priority (NOTE: PRIMARY is used for fraglimit) NOTE: SFL_SORT_PRIO_SECONDARY value must be lo...
#define SFL_ZERO_IS_WORST
const int SFL_SORT_PRIO_PRIMARY
float isGametypeInFilter(Gametype gt, float tp, float ts, string pattern)
string textShortenToWidth(string theText, float maxWidth, vector theFontSize, textLengthUpToWidth_widthFunction_t tw)
string ScoreString(int pFlags, float pValue, int rounds_played)
string translate_key(string key)
string strtolower(string s)
#define TIME_ENCODED_TOSTRING(n, compact)
#define count_seconds_decs(time, decs)
ERASEABLE string count_ordinal(int num)
#define count_seconds(time)
#define count_minutes(time)
const float DRAWFLAG_NORMAL
#define tokenizebyseparator
int entcs_GetHandicapLevel(int i)
string entcs_GetName(int i)
const int ENTCS_SPEC_PURE
real spectator
int entcs_GetScoreTeam(int i)
Same as entcs_GetTeam, but returns -1 for no team in teamplay.
entity CSQCModel_server2csqc(int i)
int entcs_GetWantsJoin(int i)
int entcs_GetClientColors(int i)
int entcs_GetSpecState(int i)
void HUD_Panel_LoadCvars()
vector HUD_GetFontsize(string cvarname)
float autocvar__menu_alpha
float panel_bg_color_team
bool QuickMenu_IsOpened()
int weapon_accuracy[REGISTRY_MAX(Weapons)]
int autocvar_hud_speed_unit
#define HUD_Panel_DrawBg()
PlayerScoreField ps_secondary
PlayerScoreField ps_primary
bool HUD_Radar_Clickable()
#define HUD_Write_Cvar(cvar)
bool autocvar__hud_configure
float hud_configure_menu_open
ERASEABLE string CTX(string s)
#define IL_EACH(this, cond, body)
IntrusiveList default_order_items
#define FOREACH(list, cond, body)
noref float vid_conheight
string MapInfo_Type_ToText(Gametype t)
strcat(_("^F4Countdown stopped!"), "\n^BG", _("Teams are too unbalanced."))
float race_speedaward_alltimebest
string race_speedaward_holder
string race_speedaward_alltimebest_holder
bool scoreboard_showscores_force
#define REGISTRY_COUNT(id)
void Scoreboard_Draw(bool should_draw)
int autocvar_hud_panel_scoreboard_ping_high
float sbt_fixcolumnwidth_iconlen_playercolor
string sbt_field_icon_extra[SBT_FIELD_ICON_EXTRA_MAX]
float autocvar_hud_panel_scoreboard_table_fg_alpha
bool autocvar_hud_panel_scoreboard_itemstats
float sbt_field_size[MAX_SBT_FIELDS+1]
float autocvar_hud_panel_scoreboard_table_fieldtitle_maxwidth
bool scoreboard_ui_disabling
bool Scoreboard_WouldDraw()
void Cmd_Scoreboard_Help()
float autocvar_hud_panel_scoreboard_bg_teams_color_team
string Scoreboard_FixColumnWidth(int i, string str, bool init)
float sbt_highlight_alpha_self
float sbt_fixcolumnwidth_marginlen
bool autocvar_hud_panel_scoreboard_playerid
int autocvar_hud_panel_scoreboard_itemstats_filter_mask
string TranslateScoresLabel(string label)
float autocvar_hud_panel_scoreboard_team_size_position
float sbt_highlight_alpha_eliminated
void Scoreboard_initFieldSizes(bool compress_more)
const int SBT_FIELD_ICON_EXTRA_MAX
bool autocvar_hud_panel_scoreboard_dynamichud
string Scoreboard_AddPlayerId(string pl_name, entity pl)
void Scoreboard_DrawItem(vector item_pos, vector rgb, entity pl, bool is_self, int pl_number)
bool autocvar_hud_panel_scoreboard_spectators_showping
string autocvar_hud_fontsize
bool autocvar_hud_panel_scoreboard_accuracy_nocolors
bool autocvar_hud_panel_scoreboard_others_showscore
string Label_getInfo(string label, bool log_all)
float autocvar_hud_panel_scoreboard_minwidth
vector autocvar_hud_panel_scoreboard_ping_low_color
vector Scoreboard_AccuracyStats_Draw(vector pos, vector rgb, vector bg_size, WepSet all_weps, int wep_rows, int wep_columns, float wep_height, float wep_height_just_weapon, int item_rows, float item_height, bool merged)
PlayerScoreField sbt_field[MAX_SBT_FIELDS+1]
bool autocvar_hud_panel_scoreboard_scores_per_round
int Scoreboard_CompareScore(int vl, int vr, int f)
int rankings_start_column
void Scoreboard_UpdatePlayerPos(entity player)
void Scoreboard_InitScores()
float HUD_Scoreboard_InputEvent(float bInputType, float nPrimary, float nSecondary)
float autocvar_hud_panel_scoreboard_spectators_position
const string sbt_field_icon_playercolor[3]
bool autocvar_hud_panel_scoreboard_table_highlight
float autocvar_hud_panel_scoreboard_itemstats_showdelay_minpos
bool autocvar_hud_panel_scoreboard_spectators_aligned
vector sbt_field_icon_extra_rgb[SBT_FIELD_ICON_EXTRA_MAX]
float autocvar_hud_panel_scoreboard_table_bg_alpha
void Scoreboard_UI_Enable(int mode)
string autocvar_hud_panel_scoreboard_playerid_prefix
void Cmd_Scoreboard_SetFields(int argc)
float Scoreboard_ComparePlayerScores(entity left, entity right)
float autocvar_hud_panel_scoreboard_table_highlight_alpha
float sbt_field_title_maxwidth_factor
void Scoreboard_UpdatePlayerTeams()
int autocvar_hud_panel_scoreboard_ping_low
vector Scoreboard_MakeTable(vector pos, entity tm, vector rgb, vector bg_size)
#define SCOREBOARD_DEFAULT_COLUMNS
float autocvar_hud_panel_scoreboard_respawntime_decimals
vector Scoreboard_MapStats_Draw(vector pos, vector rgb, vector bg_size)
int autocvar_hud_panel_scoreboard_itemstats_filter
vector sbt_field_icon_playercolor_rgb[3]
bool deathscoreboard
Whether the scoreboard is displaying because we're dead - hide accuracy & item stats & rankings.
float autocvar_hud_panel_scoreboard_table_bg_scale
vector MapStats_DrawKeyValue(vector pos, string key, string value)
string Scoreboard_Fraglimit_Draw(float limit, bool is_leadlimit, bool is_last)
float Scoreboard_CompareTeamScores(entity left, entity right)
float sbt_highlight_alpha
float autocvar_hud_panel_scoreboard_accuracy_min_aspect
float autocvar_hud_panel_scoreboard_fadeoutspeed
bool Scoreboard_ItemStats_WouldDraw(float ypos)
float sbt_field_title_condense_factor[MAX_SBT_FIELDS+1]
vector Scoreboard_Spectators_Draw(vector pos)
vector autocvar_hud_panel_scoreboard_ping_medium_color
void HUD_Scoreboard_UI_Disable()
float sbt_fixcolumnwidth_len
float autocvar_hud_panel_scoreboard_table_highlight_alpha_self
vector autocvar_hud_panel_scoreboard_ping_high_color
void Scoreboard_Draw_Export(int fh)
bool is_item_filtered(entity it)
void HUD_Scoreboard_UI_Disable_Instantly()
float autocvar_hud_panel_scoreboard_fadeinspeed
float autocvar_hud_panel_scoreboard_table_fg_alpha_self
bool autocvar_hud_panel_scoreboard_accuracy
float autocvar_hud_panel_scoreboard_accuracy_showdelay_minpos
void Scoreboard_UpdateTeamPos(entity Team)
vector Scoreboard_AccuracyAndItemStats_Draw(vector pos, vector rgb, vector bg_size)
float sbt_fixcolumnwidth_iconlen_extra[SBT_FIELD_ICON_EXTRA_MAX]
int sbt_field_icon_playercolor_set
#define SCO_LABEL(strlabel, label, padding, help)
float sbt_field_title_maxwidth
float autocvar_hud_panel_scoreboard_maxheight
string autocvar_hud_panel_scoreboard_playerid_suffix
#define ADD_ICON_PADDING(val)
int autocvar_hud_panel_scoreboard_ping_medium
float autocvar_hud_panel_scoreboard_table_highlight_alpha_eliminated
float sbt_field_title_width[MAX_SBT_FIELDS+1]
bool Scoreboard_AccuracyStats_WouldDraw(float ypos)
vector Scoreboard_ItemStats_Draw(vector pos, vector rgb, vector bg_size, int item_rows, int item_columns, float item_height, float item_height_just_item, bool merged)
string Scoreboard_GetField(entity pl, PlayerScoreField field, bool per_round)
string Scoreboard_GetName(entity pl)
string sbt_field_title[MAX_SBT_FIELDS+1]
float autocvar_hud_panel_scoreboard_accuracy_showdelay
vector Scoreboard_DrawOthers(vector item_pos, vector rgb, int this_team, entity excluded_pl, entity pl, int pl_number)
float autocvar_hud_panel_scoreboard_itemstats_min_aspect
vector Scoreboard_Rankings_Draw(vector pos, string ranktitle, entity pl, vector rgb, vector bg_size)
vector Scoreboard_DrawHeader(vector pos, vector rgb, bool other_players, bool draw_text)
bool autocvar_hud_panel_scoreboard_minimal
int sbt_field_icon_extra_set
float autocvar_hud_panel_scoreboard_itemstats_showdelay
int scoreboard_selected_panel
entity scoreboard_selected_player
float scoreboard_acc_fade_alpha
string autocvar_scoreboard_columns
bool autocvar_cl_deathscoreboard
int scoreboard_selected_columns_layout
int ts_min
minimum team size
int scoreboard_ui_enabled
const int SB_PANEL_SCOREBOARD
entity scoreboard_selected_team
float scoreboard_fade_alpha
bool sb_showscores
set by +showscores engine command
const int SB_PANEL_RANKINGS
float autocvar_hud_panel_scoreboard_namesize
float scoreboard_selected_panel_time
int ts_max
maximum team size
float scoreboard_itemstats_fade_alpha
float autocvar_cl_deathscoreboard_delay
#define SORT_SWAP(a, b)
Swap two neighbours in a sortlist.
#define SHUTDOWN(func)
before shutdown
ERASEABLE string ColorTranslateRGB(string s)
ERASEABLE string ftos_decimals_percentage(float number, int decimals)
Converts a percentage to a string with the indicated number of decimals.
float stringwidth_colors(string s, vector theSize)
string Static_Team_ColorName(int teamid)
vector Team_ColorRGB(int teamid)
int Team_IndexToTeam(int index)
Converts team index into team value.
WepSet WepSet_GetFromStat_InMap()
WepSet WepSet_GetFromStat()
const int WEP_FLAG_MUTATORBLOCKED
hides from impulse 99 etc. (mutators are allowed to clear this flag)
const int WEP_FLAG_HIDDEN
hides from menu
const int WEP_TYPE_OTHER
not for damaging people
vector Accuracy_GetColor(float accuracy)
void Accuracy_LoadColors()
float autocvar_hud_panel_weapons_aspect