X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2Fscoreboard.qc;h=673e3572b22f5cc96be1091e5853a8c1cda405d1;hp=ea5e7003f76060386eea572815ce804a2df45dfb;hb=f6353d6504cb5563ea8d0f1ce49a59f8eb7ead84;hpb=cc32d8e4288a70b77c61208820e93d3fad56fcdf diff --git a/qcsrc/client/scoreboard.qc b/qcsrc/client/scoreboard.qc index ea5e7003f7..673e3572b2 100644 --- a/qcsrc/client/scoreboard.qc +++ b/qcsrc/client/scoreboard.qc @@ -195,65 +195,65 @@ void HUD_UpdateTeamPos(entity Team) 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 ^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" + "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/suicides -race,dm,tdm/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 ", + "+as/objectives +nexball/faults +nexball/goals +ka/drops +ka/pickups +ka/bckills +ka/time +freezetag/revivals ", "-lms,race,nexball/score"); } @@ -266,7 +266,7 @@ void Cmd_HUD_SetFields(float argc) // 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()), " "); @@ -296,7 +296,6 @@ void Cmd_HUD_SetFields(float argc) hud_num_fields = 0; - drawfont = hud_font; hud_fontsize = HUD_GetFontsize("hud_fontsize"); for(i = 0; i < argc - 1; ++i) @@ -350,7 +349,7 @@ void Cmd_HUD_SetFields(float argc) 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 @@ -387,7 +386,7 @@ void Cmd_HUD_SetFields(float argc) hud_title[0] = strzone("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) { @@ -402,7 +401,7 @@ void Cmd_HUD_SetFields(float argc) 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) @@ -412,7 +411,7 @@ void Cmd_HUD_SetFields(float argc) 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) { @@ -421,7 +420,7 @@ void Cmd_HUD_SetFields(float argc) 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) { @@ -430,7 +429,7 @@ void Cmd_HUD_SetFields(float argc) 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])); } } @@ -466,18 +465,18 @@ string HUD_GetField(entity pl, float field) { case SP_PING: if not(pl.gotscores) - return "\x8D\x8D\x8D"; // >>> sign + return "\xEE\x82\x8D\xEE\x82\x8D\xEE\x82\x8D"; // >>> sign //str = getplayerkey(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) @@ -518,16 +517,12 @@ string HUD_GetField(entity pl, float field) 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: @@ -624,9 +619,9 @@ void HUD_PrintScoreboardItem(vector pos, entity pl, float is_self, float pl_numb 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; @@ -766,16 +761,16 @@ vector HUD_Scoreboard_MakeTable(vector pos, entity tm, vector rgb, vector bg_siz drawpic(pos, "gfx/scoreboard/scoreboard_tableheader", tmp, rgb + '0.5 0.5 0.5', scoreboard_alpha_bg, DRAWFLAG_NORMAL); // table border - tmp_y += hud_border_thickness; + tmp_y += autocvar_scoreboard_border_thickness; tmp_y += body_table_height; - drawborderlines(hud_border_thickness, pos, tmp, '0 0 0', scoreboard_alpha_bg, DRAWFLAG_NORMAL); // more transparency for the scoreboard + drawborderlines(autocvar_scoreboard_border_thickness, pos, tmp, '0 0 0', scoreboard_alpha_bg, DRAWFLAG_NORMAL); // more transparency for the scoreboard // separator header/table pos_y += 1.25 * hud_fontsize_y; - tmp_y = hud_border_thickness; + tmp_y = autocvar_scoreboard_border_thickness; drawfill(pos, tmp, '0 0 0', scoreboard_alpha_bg, DRAWFLAG_NORMAL); - pos_y += hud_border_thickness; + pos_y += autocvar_scoreboard_border_thickness; // table background tmp_y = body_table_height; @@ -789,14 +784,14 @@ vector HUD_Scoreboard_MakeTable(vector pos, entity tm, vector rgb, vector bg_siz // go back to the top to make alternated columns highlighting and to print the strings pos_y -= 1.25 * hud_fontsize_y; - pos_y -= hud_border_thickness; + pos_y -= autocvar_scoreboard_border_thickness; pos += '1 1 0'; if (scoreboard_highlight) { column_dim_y = 1.25 * hud_fontsize_y; // header - column_dim_y += hud_border_thickness; + column_dim_y += autocvar_scoreboard_border_thickness; column_dim_y += body_table_height; } @@ -846,7 +841,7 @@ vector HUD_Scoreboard_MakeTable(vector pos, entity tm, vector rgb, vector bg_siz pos_x = xmin; pos_y += 1.25 * hud_fontsize_y; // skip the header - pos_y += hud_border_thickness; + pos_y += autocvar_scoreboard_border_thickness; // fill the table and draw the rows i = 0; @@ -883,7 +878,11 @@ float HUD_WouldDrawScoreboard() { return 1; else if (intermission == 1) return 1; - else if (getstati(STAT_HEALTH) <= 0 && cvar("cl_deathscoreboard")) + else if (intermission == 2) + return 0; + else if (getstati(STAT_HEALTH) <= 0 && autocvar_cl_deathscoreboard && gametype != GAME_CTS) + return 1; + else if (spectatee_status == -1) return 1; else if (scoreboard_showscores_force) return 1; @@ -895,10 +894,9 @@ float average_accuracy; vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) { float i; - float weapon_hit, weapon_damage, weapon_stats; 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; @@ -907,7 +905,7 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) 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); + 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; vector tmp; tmp_x = sbwidth; @@ -917,7 +915,7 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) 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(hud_accuracy_border_thickness, pos, tmp, '0 0 0', scoreboard_alpha_bg * 0.75, DRAWFLAG_NORMAL); + drawborderlines(autocvar_scoreboard_border_thickness, pos, tmp, '0 0 0', scoreboard_alpha_bg * 0.75, DRAWFLAG_NORMAL); // column highlighting for(i = 0; i < weapon_cnt/rows; ++i) @@ -932,7 +930,6 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) 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; @@ -942,8 +939,13 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) if(getstati(STAT_SWITCHWEAPON) == WEP_MINSTANEX) g_minstagib = 1; // TODO: real detection for minstagib? + float weapon_stats, weapon_number; + if (!acc_levels) rgb = '1 1 1'; + else if (acc_col_x[0] == -1) + for (i = 0; i < acc_levels; ++i) + acc_col[i] = stov(cvar_string(strcat("accuracy_color", ftos(i)))); for(i = WEP_FIRST; i <= WEP_LAST; ++i) { @@ -952,13 +954,10 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) continue; if ((i == WEP_NEX && g_minstagib) || i == WEP_PORTO || (i == WEP_MINSTANEX && !g_minstagib) || i == WEP_TUBA) // skip port-o-launch, nex || minstanex and tuba continue; - weapon_hit = weapon_hits[i-WEP_FIRST]; - weapon_damage = weapon_fired[i-WEP_FIRST]; - if(weapon_damage) - weapon_stats = bound(0, floor(100 * weapon_hit / weapon_damage), 100); - float weapon_alpha; + weapon_stats = weapon_accuracy[i-WEP_FIRST]; - if(weapon_damage) + float weapon_alpha; + if(weapon_stats >= 0) weapon_alpha = scoreboard_alpha_fg; else weapon_alpha = 0.2 * scoreboard_alpha_fg; @@ -966,24 +965,16 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) // weapon icon drawpic_aspect_skin(pos, strcat("weapon", self.netname), '1 0 0' * weapon_width + '0 1 0' * weapon_height, '1 1 1', weapon_alpha, DRAWFLAG_NORMAL); // the accuracy - if(weapon_damage) { + if(weapon_stats >= 0) { weapons_with_stats += 1; average_accuracy += weapon_stats; // store sum of all accuracies in average_accuracy string s; - s = strcat(ftos(weapon_stats),"%"); + s = sprintf(_("%d%%"), weapon_stats*100); float padding; padding = (weapon_width - stringwidth(s, FALSE, '1 0 0' * fontsize)) / 2; // center the accuracy value - float weapon_hit, weapon_damage; - weapon_damage = weapon_fired[self.weapon-WEP_FIRST]; - if(weapon_damage) - { - weapon_hit = weapon_hits[self.weapon-WEP_FIRST]; - weapon_stats = floor(100 * weapon_hit / weapon_damage); - } - if (acc_levels) { // find the max level lower than weapon_stats @@ -995,8 +986,8 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) // inject color j+1 in color j, how much depending on how much weapon_stats is higher than level j float factor; factor = (weapon_stats - acc_lev[j]) / (acc_lev[j+1] - acc_lev[j]); - rgb = acc_color(j); - rgb = rgb + factor * (acc_color(j+1) - rgb); + rgb = acc_col[j]; + rgb = rgb + factor * (acc_col[j+1] - rgb); } drawstring(pos + '1 0 0' * padding + '0 1 0' * weapon_height, s, '1 1 0' * fontsize, rgb, scoreboard_alpha_fg, DRAWFLAG_NORMAL); @@ -1007,7 +998,6 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) pos_y += height; } } - drawfont = hud_font; if(weapons_with_stats) average_accuracy = floor(average_accuracy / weapons_with_stats); @@ -1035,22 +1025,22 @@ vector HUD_DrawScoreboardRankings(vector pos, entity pl, vector rgb, vector bg_ 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); + drawstring(pos, _("Rankings"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); pos_y += hud_fontsize_y; vector tmp; tmp_x = sbwidth; - tmp_y = hud_fontsize_y * RANKINGS_RECEIVED_CNT; + tmp_y = 1.25 * hud_fontsize_y * RANKINGS_RECEIVED_CNT; 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(hud_border_thickness, pos, tmp, '0 0 0', scoreboard_alpha_bg * 0.75, DRAWFLAG_NORMAL); + drawborderlines(autocvar_scoreboard_border_thickness, pos, tmp, '0 0 0', scoreboard_alpha_bg * 0.75, DRAWFLAG_NORMAL); // row highlighting for(i = 0; i= 0.4) - drawstringcenter(pos, "Stats are not tracked during warmup stage", hud_fontsize, '1 1 0', scoreboard_alpha_fg, DRAWFLAG_NORMAL); - - return; - } - - if(gametype == GAME_RACE || gametype == GAME_CTS) - { - pos_y += 40; - if(mod(time, 1) >= 0.4) - drawstringcenter(pos, "Stats are not tracked in Race/CTS", hud_fontsize, '1 1 0', scoreboard_alpha_fg, DRAWFLAG_NORMAL); - - return; - } - - float top_border_hitscan = SCOREBOARD_OFFSET + 55; // position where the hitscan row starts: pixels down the screen - HUD_DrawAccuracyStats_Description_Hitscan('1 0 0' * col_margin + '0 1 0' * top_border_hitscan); - - float top_border_splash = SCOREBOARD_OFFSET + 175; // position where the splash row starts: pixels down the screen - HUD_DrawAccuracyStats_Description_Splash('1 0 0' * col_margin + '0 1 0' * top_border_splash); - - for(i = WEP_FIRST; i <= WEP_LAST; ++i) - { - self = get_weaponinfo(i); - if not(self.weapons) - continue; - weapon_hit = weapon_hits[i-WEP_FIRST]; - weapon_damage = weapon_fired[i-WEP_FIRST]; - border_colour = (i == activeweapon) ? '1 1 1' : '0 0 0'; // white or black border - - if (weapon_damage) { - if (self.spawnflags & WEP_TYPE_SPLASH) { - weapon_stats = bound(0, floor(100 * weapon_hit / weapon_damage), 100); - - fill_colour_x = 1 - 0.015 * weapon_stats; - fill_colour_y = 1 - 0.015 * (100 - weapon_stats); - - // how the background colour is calculated - // % red green red_2 green_2 - // 0 1 0 1 - % * 0.015 1 - (100 - %) * 0.015 - // 10 0.85 0 1 - % * 0.015 1 - (100 - %) * 0.015 - // 20 0.70 0 1 - % * 0.015 1 - (100 - %) * 0.015 - // 30 0.55 0 1 - % * 0.015 1 - (100 - %) * 0.015 - // 40 0.40 0.10 1 - % * 0.015 1 - (100 - %) * 0.015 - // 50 0.25 0.25 1 - % * 0.015 1 - (100 - %) * 0.015 - // 60 0.10 0.40 1 - % * 0.015 1 - (100 - %) * 0.015 - // 70 0 0.55 1 - % * 0.015 1 - (100 - %) * 0.015 - // 80 0 0.70 1 - % * 0.015 1 - (100 - %) * 0.015 - // 90 0 0.85 1 - % * 0.015 1 - (100 - %) * 0.015 - // 100 0 1 1 - % * 0.015 1 - (100 - %) * 0.015 - - if ((left_border + count_splash * (fill_size_x + col_margin) + fill_size_x) >= vid_conwidth) - { - count_splash = 0; - ++row; - HUD_DrawAccuracyStats_Description_Splash('1 0 0' * col_margin + '0 1 0' * (top_border_splash + row * (fill_size_y + row_margin))); - } - - pos_x = left_border + count_splash * (fill_size_x + col_margin); - pos_y = top_border_splash + row * (fill_size_y + row_margin); - - // background - drawpic(pos, "gfx/scoreboard/accuracy_bg", fill_size , fill_colour, scoreboard_alpha_bg, DRAWFLAG_NORMAL); - drawborderlines(hud_border_thickness, pos, fill_size, border_colour, scoreboard_alpha_bg, DRAWFLAG_NORMAL); - - // the weapon - drawpic(pos, strcat("gfx/weapons/weapon", self.netname), '1 0.5 0' * fill_size_x , '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); - - // the amount of shots fired or max damage - drawstringright(pos + '4.5 0 0' * hud_fontsize_x + '0 3 0' * hud_fontsize_y, ftos(weapon_damage), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); - - // the amount of hits or actual damage - drawstringright(pos + '4.5 0 0' * hud_fontsize_x + '0 5 0' * hud_fontsize_y, ftos(weapon_hit), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); - - // the accuracy - drawstringright(pos + '4.5 0 0' * hud_fontsize_x + '0 7 0' * hud_fontsize_y, strcat(ftos(weapon_stats),"%"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); - - // the amount of shots missed or damage wasted - drawstringright(pos + '4.5 0 0' * hud_fontsize_x + '0 9 0' * hud_fontsize_y, ftos(max(0, weapon_damage - weapon_hit)), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); - - ++count_splash; - } else if (self.spawnflags & WEP_TYPE_HITSCAN) { - weapon_stats = bound(0, floor(100 * weapon_hit / weapon_damage), 100); - - fill_colour_x = 1 - 0.015 * weapon_stats; - fill_colour_y = 1 - 0.015 * (100 - weapon_stats); - - // how the background colour is calculated - // % red green red_2 green_2 - // 0 1 0 1 - % * 0.015 1 - (100 - %) * 0.015 - // 10 0.850 0 1 - % * 0.015 1 - (100 - %) * 0.015 - // 20 0.70 0 1 - % * 0.015 1 - (100 - %) * 0.015 - // 30 0.55 0 1 - % * 0.015 1 - (100 - %) * 0.015 - // 40 0.40 0.10 1 - % * 0.015 1 - (100 - %) * 0.015 - // 50 0.25 0.25 1 - % * 0.015 1 - (100 - %) * 0.015 - // 60 0.10 0.40 1 - % * 0.015 1 - (100 - %) * 0.015 - // 70 0 0.55 1 - % * 0.015 1 - (100 - %) * 0.015 - // 80 0 0.70 1 - % * 0.015 1 - (100 - %) * 0.015 - // 90 0 0.85 1 - % * 0.015 1 - (100 - %) * 0.015 - // 100 0 1 1 - % * 0.015 1 - (100 - %) * 0.015 - - if ((left_border + count_hitscan * (fill_size_x + col_margin) + fill_size_x + cvar("stats_right_margin")) >= vid_conwidth) - { - count_hitscan = 0; - ++row; - HUD_DrawAccuracyStats_Description_Hitscan('1 0 0' * col_margin + '0 1 0' * (top_border_hitscan + row * (fill_size_y + row_margin))); - } - - pos_x = left_border + count_hitscan * (fill_size_x + col_margin); - pos_y = top_border_hitscan + row * (fill_size_y + row_margin); - - // background - drawpic(pos, "gfx/scoreboard/accuracy_bg", fill_size , fill_colour, scoreboard_alpha_bg, DRAWFLAG_NORMAL); - drawborderlines(hud_border_thickness, pos, fill_size, border_colour, scoreboard_alpha_bg, DRAWFLAG_NORMAL); - - // the weapon - drawpic(pos, strcat("gfx/weapons/weapon", self.netname), '1 0.5 0' * fill_size_x , '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); - - // the amount of shots fired or max damage - drawstringright(pos + '4.5 0 0' * hud_fontsize_x + '0 3 0' * hud_fontsize_y, ftos(weapon_damage), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); - - // the amount of hits or actual damage - drawstringright(pos + '4.5 0 0' * hud_fontsize_x + '0 5 0' * hud_fontsize_y, ftos(weapon_hit), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); - - // the accuracy - drawstringright(pos + '4.5 0 0' * hud_fontsize_x + '0 7 0' * hud_fontsize_y, strcat(ftos(weapon_stats),"%"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); - - // the amount of shots missed or damage wasted - drawstringright(pos + '4.5 0 0' * hud_fontsize_x + '0 9 0' * hud_fontsize_y, ftos(max(0, weapon_damage - weapon_hit)), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); - - ++count_hitscan; - } - } - } -}