From e4267c942b513e968ab8981e2eb7b7a15cf02099 Mon Sep 17 00:00:00 2001 From: fruitiex Date: Sat, 5 Sep 2009 11:27:46 +0000 Subject: [PATCH] [NOT FOR 2.5.2] huge sbar.qc cleanup git-svn-id: svn://svn.icculus.org/nexuiz/trunk@7642 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/client/sbar.qc | 631 ++++++++++++++++++-------------------- 1 file changed, 292 insertions(+), 339 deletions(-) diff --git a/data/qcsrc/client/sbar.qc b/data/qcsrc/client/sbar.qc index d06157077..f196830d8 100644 --- a/data/qcsrc/client/sbar.qc +++ b/data/qcsrc/client/sbar.qc @@ -1,5 +1,6 @@ void drawstringright(vector, string, vector, vector, float, float); void drawstringcenter(vector, string, vector, vector, float, float); + float weapon_hits[WEP_COUNT]; float weapon_fired[WEP_COUNT]; float weapon_number; @@ -19,8 +20,7 @@ float sbar_hud_accuracy; float ps_primary, ps_secondary; float ts_primary, ts_secondary; -vector sbar, color; -vector element_offset = '0 6 0'; // global item offset from the bottom edge +vector color; float SCOREBOARD_OFFSET = 50; void CSQC_kh_hud(); @@ -117,20 +117,24 @@ void Sbar_DrawXNum (vector pos, float num, float digits, float showminusplus, fl vsize_x = vsize_y = lettersize; vsize_z = 0; - if(num < 0 || (showminusplus == 1 && num <= 0)) // showminusplus is used in the race timer, force showing minus sign if seconds <= 0 + // showminusplus 1: always prefix with minus sign (useful in race distribution display) + // showminusplus 2: always prefix with plus sign (useful in race distribution display) + // showminusplus 3: prefix with minus sign if negative, plus sign if positive (useful in score distribution display) + + if((showminusplus == 2 && num >= 0) || (num > 0 && showminusplus == 3)) { - minus = true; - num = -num; + plus = true; pos_x -= lettersize; } else - minus = false; + plus = false; - if(showminusplus == 2 && num >= 0) // showminusplus is used in the race timer, force showing plus sign + if(num < 0 || (num < 0 && showminusplus == 3) || (showminusplus == 1 && num <= 0)) { - plus = true; + minus = true; + num = -num; pos_x -= lettersize; } else - plus = false; + minus = false; if(digits < 0) { @@ -1035,10 +1039,8 @@ float lastpingstime; float scoreboard_bottom; void Sbar_DrawScoreboard() { - vector rgb, pos, tmp, sbar_save; + vector rgb, pos, tmp; entity pl, tm; - float specs; - float center_x; if(time > lastpingstime + 10) { @@ -1054,8 +1056,6 @@ void Sbar_DrawScoreboard() xmax = vid_conwidth - xmin; ymax = vid_conheight - 0.2*vid_conheight; - center_x = xmin + 0.5*sbwidth; - // Initializes position pos_x = xmin; pos_y = ymin; @@ -1069,16 +1069,13 @@ void Sbar_DrawScoreboard() pos_y += sbar_fontsize_y; drawfont = sbar_font; - - sbar_save = sbar; - sbar = '0 0 0'; - + + // Draw the scoreboard vector bg_size; bg_size = drawgetimagesize("gfx/hud/sb_scoreboard_bg"); if(teamplay) { - //for(tm = sortedTeams.sort_next; tm; tm = tm.sort_next) for(tm = teams.sort_next; tm; tm = tm.sort_next) { if(tm.team == COLOR_SPECTATOR) @@ -1086,10 +1083,10 @@ void Sbar_DrawScoreboard() rgb = GetTeamRGB(tm.team); - Sbar_DrawXNum(sbar + pos - '6.5 0 0' * sbar_fontsize_y + '0 1 0' * sbar_fontsize_y, tm.(teamscores[ts_primary]), 4, 0, sbar_fontsize_y * 1.5, rgb, 0, 1, 1, DRAWFLAG_NORMAL); + Sbar_DrawXNum(pos - '6.5 0 0' * sbar_fontsize_y + '0 1 0' * sbar_fontsize_y, tm.(teamscores[ts_primary]), 4, 0, sbar_fontsize_y * 1.5, rgb, 0, 1, 1, DRAWFLAG_NORMAL); if(ts_primary != ts_secondary) - Sbar_DrawXNum(sbar + pos - '4.5 0 0' * sbar_fontsize_y + '0 2.5 0' * sbar_fontsize_y, tm.(teamscores[ts_secondary]), 4, 0, sbar_fontsize_y * 1, rgb, 0, 1, 1, DRAWFLAG_NORMAL); + Sbar_DrawXNum(pos - '4.5 0 0' * sbar_fontsize_y + '0 2.5 0' * sbar_fontsize_y, tm.(teamscores[ts_secondary]), 4, 0, sbar_fontsize_y * 1, rgb, 0, 1, 1, DRAWFLAG_NORMAL); pos = Sbar_Scoreboard_MakeTable(pos, tm, rgb, bg_size); } @@ -1100,8 +1097,6 @@ void Sbar_DrawScoreboard() rgb_y = cvar("sbar_color_bg_g"); rgb_z = cvar("sbar_color_bg_b"); - tm = teams.sort_next; - for(tm = teams.sort_next; tm; tm = tm.sort_next) { if(tm.team == COLOR_SPECTATOR) @@ -1113,6 +1108,9 @@ void Sbar_DrawScoreboard() tmp = pos + '0 1.5 0' * sbar_fontsize_y; pos_y += 3 * sbar_fontsize_y; + + // List spectators + float specs; specs = 0; for(pl = players.sort_next; pl; pl = pl.sort_next) { @@ -1126,6 +1124,7 @@ void Sbar_DrawScoreboard() if(specs) drawstring(tmp, "Spectators", sbar_fontsize, '1 1 1', 1, DRAWFLAG_NORMAL); + // Print info string string str; float tl, fl, ll; str = strcat("playing on ^2", shortmapname, "^7"); @@ -1197,7 +1196,6 @@ void Sbar_DrawScoreboard() pos_y += 1.2 * sbar_fontsize_y; drawcolorcodedstring(pos + '0.5 0 0' * (sbwidth - sbar_fontsize_x * stringwidth(str, TRUE)), str, sbar_fontsize, 0.8, DRAWFLAG_NORMAL); - sbar = sbar_save; scoreboard_bottom = pos_y + 2 * sbar_fontsize_y; } @@ -1266,45 +1264,29 @@ string MakeRaceString(float cp, float mytime, float histime, float lapdelta, str return strcat(col, cpname, " (", timestr, " ", strcat(hisname, col, lapstr), ")"); } -void Sbar_Score(float margin) +void Sbar_Score() { - float timelimit, minutes, seconds, timeleft, minutesLeft, secondsLeft, distribution, score, desiredPlayerId; - float racemin, racesec, racemsec; - float distsec, distmsec, minusplus; - vector sbar_save, score_offset, timer_color, offset, distribution_color, minuspos; + float score, distribution, leader; + vector score_pos, secondary_score_pos, distribution_color; entity tm, pl, me; - sbar_save = sbar; - - vector bottomright; - bottomright_x = vid_conwidth; - bottomright_y = vid_conheight; - bottomright_z = 0; - - vector topright; - topright_x = vid_conwidth; - topright_y = 0; - topright_z = 0; - - //get the ID (could be "me", or the player I'm spectating) + //me = (spectatee_status > 0) ? playerslots[spectatee_status - 1] : playerslots[player_localentnum - 1]; + + float desiredPlayerId; if (spectatee_status > 0) desiredPlayerId = spectatee_status - 1; else desiredPlayerId = player_localentnum - 1; me = playerslots[desiredPlayerId]; - sbar_y = vid_conheight - (32+12); - sbar_x -= margin; - - offset = '0 0 0'; - - score_offset_x = 196; - score_offset_y = 36; - score_offset_z = 0; + vector bottomright; + bottomright_x = vid_conwidth; + bottomright_y = vid_conheight; + bottomright_z = 0; - if((scores_flags[ps_primary] & SFL_TIME) && !teamplay) - { - // me vector := [team/connected frags id] + score_pos = bottomright - '196 42 0'; + secondary_score_pos = score_pos + '132 -6 0'; + if((scores_flags[ps_primary] & SFL_TIME) && !teamplay) { // race/cts record display on HUD pl = players.sort_next; if(pl == me) pl = pl.sort_next; @@ -1314,14 +1296,16 @@ void Sbar_Score(float margin) score = me.(scores[ps_primary]); + float racemin, racesec, racemsec; + float distsec, distmsec, minusplus; + racemin = floor(score/(60 * TIME_FACTOR)); racesec = floor((score - racemin*(60 * TIME_FACTOR))/TIME_FACTOR); racemsec = score - racemin*60*TIME_FACTOR - racesec*TIME_FACTOR; if (pl && ((!(scores_flags[ps_primary] & SFL_ZERO_IS_WORST)) || score)) { // distribution display - distribution = me.(scores[ps_primary]); - distribution -= pl.(scores[ps_primary]); + distribution = me.(scores[ps_primary]) - pl.(scores[ps_primary]); if (distribution < TIME_FACTOR && distribution > -TIME_FACTOR) distmsec = fabs(distribution); @@ -1334,19 +1318,17 @@ void Sbar_Score(float margin) if (distribution <= 0) { distribution_color = '0 1 0'; - minusplus = 1; + minusplus = 1; // minusplus 1: always prefix with minus sign } else { distribution_color = '1 0 0'; - minusplus = 2; + minusplus = 2; // minusplus 1: always prefix with plus sign } - Sbar_DrawXNum(bottomright - '0 48 0' - '16 0 0' * TIME_DECIMALS, distmsec, -TIME_DECIMALS, 0, 16, distribution_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); Sbar_DrawXNum(bottomright - '68 48 0' - '16 0 0' * TIME_DECIMALS, distsec, 4, minusplus, 16, distribution_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); drawpic(bottomright - '10 48 0' - '16 0 0' * TIME_DECIMALS, "gfx/hud/num_dot", '16 16 0', distribution_color, sbar_alpha_fg, DRAWFLAG_ADDITIVE); } - - // big timer + // race record display if (distribution <= 0 || distribution == score) // draw the highlight background behind the timer if we have the lead drawpic(bottomright - '0 32 0' - '32 0 0' * (4 + TIME_DECIMALS), "gfx/hud/sb_highlight_4", '0 28 0' + '32 0 0' * (4 + TIME_DECIMALS), '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); @@ -1357,151 +1339,58 @@ void Sbar_Score(float margin) Sbar_DrawXNum(bottomright - '0 32 0' - TIME_DECIMALS * '30 0 0' - '132 0 0', racemin, -2, 0, 30, '1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); drawpic(bottomright - '0 32 0' - TIME_DECIMALS * '30 0 0' - '84 0 0', "gfx/hud/num_colon", '30 30 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE); - } - else { - if(teamplay) - { - // Layout: - // - // team1 team3 team4 - // - // TEAM2 - //for(i = 0; i < 4; ++i) - - float max_fragcount; - max_fragcount = -999; - - for(tm = teams.sort_next; tm; tm = tm.sort_next) - { - if(tm.team == COLOR_SPECTATOR || !tm.team_size) // no players? don't display - continue; - // -32*4 = -128 - score = tm.(teamscores[ts_primary]); - - if (score > max_fragcount) - max_fragcount = score; - - if(tm.team == myteam) { - if (max_fragcount == score) - Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 0, 34, GetTeamRGB(tm.team) * 0.8, 1, 1, sbar_alpha_fg, DRAWFLAG_NORMAL); - else - Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 0, 34, GetTeamRGB(tm.team) * 0.8, 0, 1, sbar_alpha_fg, DRAWFLAG_NORMAL); - } - else - { - if (max_fragcount == score) - Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0' - offset, score, 4, 0, 16, GetTeamRGB(tm.team) * 0.8, 1, 1, sbar_alpha_fg, DRAWFLAG_NORMAL); - else - Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0' - offset, score, 4, 0, 16, GetTeamRGB(tm.team) * 0.8, 0, 1, sbar_alpha_fg, DRAWFLAG_NORMAL); - offset_y -= 16; - } - } - } else { - // me vector := [team/connected frags id] - - pl = players.sort_next; - if(pl == me) - pl = pl.sort_next; - - if(pl) { - distribution = me.(scores[ps_primary]); - distribution -= pl.(scores[ps_primary]); - } else - distribution = 0; - - score = me.(scores[ps_primary]); - - if(distribution >= 0) - { - if (distribution != 0) { - // draw a + sign in front of the score - if (distribution < 10) { drawpic(bottomright - element_offset - score_offset + '132 -6 0' + '32 0 0', "gfx/hud/num_plus", '16 16 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE); } - else if (distribution < 100) { drawpic(bottomright - element_offset - score_offset + '132 -6 0' + '16 0 0', "gfx/hud/num_plus", '16 16 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE); } - else if (distribution < 1000) { drawpic(bottomright - element_offset - score_offset + '132 -6 0', "gfx/hud/num_plus", '16 16 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_ADDITIVE); } - } - - Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0', distribution, 4, 0, 16, ' 1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); - Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 0, 34, '1 1 1', 1, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); - } - else if(distribution >= -5) - { - Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0', distribution, 4, 0, 16, ' 1 1 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); - Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 0, 34, '1 1 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); - } - else { - Sbar_DrawXNum(bottomright - element_offset - score_offset + '132 -6 0', distribution, 4, 0, 16, ' 1 0 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); - Sbar_DrawXNum(bottomright - element_offset - score_offset, score, 4, 0, 34, '1 0 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); - } - } - } - - //draw the remaining or elapsed time - timelimit = getstatf(STAT_TIMELIMIT); - vector bgpos; - - timeleft = max(0, timelimit * 60 + getstatf(STAT_GAMESTARTTIME) - time); - timeleft = ceil(timeleft); - minutesLeft = floor(timeleft / 60); - secondsLeft = timeleft - minutesLeft*60; - - if(minutesLeft >= 5 || warmup_stage || timelimit == 0) //don't use red or yellow in warmup or when there is no timelimit - timer_color = '1 1 1'; //white - else if(minutesLeft >= 1) - timer_color = '1 1 0'; //yellow - else - timer_color = '1 0 0'; //red + } else if (!teamplay) { // non-teamgames, except race/cts + // me vector := [team/connected frags id] + pl = players.sort_next; + if(pl == me) + pl = pl.sort_next; - if (cvar("sbar_increment_maptime") || timelimit == 0 || warmup_stage) { - if (time < getstatf(STAT_GAMESTARTTIME)) { - //while restart is still active, show 00:00 - minutes = seconds = 0; - } else { - float elapsedTime; - elapsedTime = floor(time - getstatf(STAT_GAMESTARTTIME)); //127 - minutes = floor(elapsedTime / 60); - seconds = elapsedTime - minutes*60; - } - if (minutes < 10) - bgpos_x = topright_x - 54 - 17 - 12; - else if (minutes < 100) // nudge the timer background left if more digits are drawn - bgpos_x = topright_x - 72 - 17 - 12; + if(pl) + distribution = me.(scores[ps_primary]) - pl.(scores[ps_primary]); else - bgpos_x = topright_x - 90 - 17 - 12; - bgpos_y = 0; - bgpos_z = 0; - } else { - minutes = minutesLeft; - seconds = secondsLeft; - if (minutes == 0) - bgpos_x = topright_x - 36 - 7 - 12; - else if (minutes < 10) // nudge the timer background left if more digits are drawn - bgpos_x = topright_x - 54 - 17 - 12; - else if (minutes < 100) - bgpos_x = topright_x - 72 - 17 - 12; - else - bgpos_x = topright_x - 90 - 17 - 12; - bgpos_y = 0; - bgpos_z = 0; - } + distribution = 0; - if (cvar("viewsize") <= 100) { // draw timer background when viewsize <= 100 - if (teamplay) - drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', GetTeamRGB(myteam) * sbar_color_bg_team, sbar_alpha_bg, DRAWFLAG_NORMAL); // timer bg color = myteam color - else { - color_x = cvar("sbar_color_bg_r"); - color_y = cvar("sbar_color_bg_g"); - color_z = cvar("sbar_color_bg_b"); + score = me.(scores[ps_primary]); + + if(distribution >= 5) { + distribution_color = '0 1 0'; + leader = 1; + } else if(distribution >= 0) { + distribution_color = '1 1 1'; + leader = 1; + } else if(distribution >= -5) + distribution_color = '1 1 0'; + else + distribution_color = '1 0 0'; + + Sbar_DrawXNum(secondary_score_pos, distribution, 4, 3, 16, distribution_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); + Sbar_DrawXNum(score_pos, score, 4, 0, 34, distribution_color, leader, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); + } else { // teamgames + float max_fragcount; + max_fragcount = -999; + + for(tm = teams.sort_next; tm; tm = tm.sort_next) { + if(tm.team == COLOR_SPECTATOR || !tm.team_size) // no players? don't display + continue; + score = tm.(teamscores[ts_primary]); + leader = 0; - drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', color, sbar_alpha_bg, DRAWFLAG_NORMAL); + if (score > max_fragcount) + max_fragcount = score; + + if(tm.team == myteam) { + if (max_fragcount == score) + leader = 1; + Sbar_DrawXNum(score_pos, score, 4, 0, 34, GetTeamRGB(tm.team) * 0.8, leader, 1, sbar_alpha_fg, DRAWFLAG_NORMAL); + } else { + if (max_fragcount == score) + leader = 1; + Sbar_DrawXNum(secondary_score_pos, score, 4, 0, 16, GetTeamRGB(tm.team) * 0.8, leader, 1, sbar_alpha_fg, DRAWFLAG_NORMAL); + secondary_score_pos = secondary_score_pos + '0 16 0'; + } } } - if(minutesLeft >= 1 || cvar("sbar_increment_maptime") || timelimit == 0 || warmup_stage) { - Sbar_DrawXNum(topright - '103 0 0' + '0 2 0', minutes, 3, 0, 18, timer_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); - drawpic(topright - '53 0 0' + '0 1 0', "gfx/hud/num_colon", '18 18 0', timer_color, sbar_alpha_fg, DRAWFLAG_NORMAL); - } - Sbar_DrawXNum(topright - '36 0 0' - '3 0 0' + '0 2 0', seconds, -2, 0, 18, timer_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); - if(gametype == GAME_RACE || gametype == GAME_CTS) { drawfont = sbar_bigfont; @@ -1604,14 +1493,87 @@ void Sbar_Score(float margin) } } - drawfont = sbar_font; + drawfont = sbar_bigfont; } - - sbar = sbar_save; } -float Sbar_WouldDrawScoreboard () +void Sbar_Timer() { + float timelimit, elapsedTime, minutes, seconds, timeleft, minutesLeft, secondsLeft; + vector bgpos, timer_color; + bgpos = '0 0 0'; + + vector topright; + topright = '0 0 0'; + topright_x = vid_conwidth; + + timelimit = getstatf(STAT_TIMELIMIT); + + timeleft = max(0, timelimit * 60 + getstatf(STAT_GAMESTARTTIME) - time); + timeleft = ceil(timeleft); + minutesLeft = floor(timeleft / 60); + secondsLeft = timeleft - minutesLeft*60; + + if(minutesLeft >= 5 || warmup_stage || timelimit == 0) //don't use red or yellow in warmup or when there is no timelimit + timer_color = '1 1 1'; //white + else if(minutesLeft >= 1) + timer_color = '1 1 0'; //yellow + else + timer_color = '1 0 0'; //red + + if (cvar("sbar_increment_maptime") || timelimit == 0 || warmup_stage) { + if (time < getstatf(STAT_GAMESTARTTIME)) { + //while restart is still active, show 00:00 + minutes = seconds = 0; + } else { + float elapsedTime; + elapsedTime = floor(time - getstatf(STAT_GAMESTARTTIME)); //127 + minutes = floor(elapsedTime / 60); + seconds = elapsedTime - minutes*60; + } + if (minutes < 10) + bgpos_x = topright_x - 54 - 17 - 12; + else if (minutes < 100) // nudge the timer background left if more digits are drawn + bgpos_x = topright_x - 72 - 17 - 12; + else + bgpos_x = topright_x - 90 - 17 - 12; + bgpos_y = 0; + bgpos_z = 0; + } else { + minutes = minutesLeft; + seconds = secondsLeft; + if (minutes == 0) + bgpos_x = topright_x - 36 - 7 - 12; + else if (minutes < 10) // nudge the timer background left if more digits are drawn + bgpos_x = topright_x - 54 - 17 - 12; + else if (minutes < 100) + bgpos_x = topright_x - 72 - 17 - 12; + else + bgpos_x = topright_x - 90 - 17 - 12; + bgpos_y = 0; + bgpos_z = 0; + } + + if (cvar("viewsize") <= 100) { // draw timer background when viewsize <= 100 + if (teamplay) + drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', GetTeamRGB(myteam) * sbar_color_bg_team, sbar_alpha_bg, DRAWFLAG_NORMAL); // timer bg color = myteam color + else { + color_x = cvar("sbar_color_bg_r"); + color_y = cvar("sbar_color_bg_g"); + color_z = cvar("sbar_color_bg_b"); + + drawpic(bgpos, "gfx/hud/sb_timerbg", '120 30 0', color, sbar_alpha_bg, DRAWFLAG_NORMAL); + } + } + + if(minutesLeft >= 1 || cvar("sbar_increment_maptime") || timelimit == 0 || warmup_stage) { + Sbar_DrawXNum(topright - '103 0 0' + '0 2 0', minutes, 3, 0, 18, timer_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); + drawpic(topright - '53 0 0' + '0 1 0', "gfx/hud/num_colon", '18 18 0', timer_color, sbar_alpha_fg, DRAWFLAG_NORMAL); + } + Sbar_DrawXNum(topright - '36 0 0' - '3 0 0' + '0 2 0', seconds, -2, 0, 18, timer_color, 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); +} + +float Sbar_WouldDrawScoreboard() { if (sb_showscores) return 1; else if (intermission == 1) @@ -2003,109 +1965,108 @@ void Sbar_DrawAccuracyStats() self = get_weaponinfo(i); //if ((weapon_number != 42)) // print them all :) - if ((self.weapon_type == WEP_TYPE_SPLASH) && (weapon_damage)) - { - weapon_stats = bound(0, rint(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; - Sbar_DrawAccuracyStats_Description_Splash('1 0 0' * col_margin + '0 1 0' * (top_border_splash + row * (fill_size_y + row_margin))); - } + if (weapon_damage) { + if (self.weapon_type == WEP_TYPE_SPLASH) { + weapon_stats = bound(0, rint(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; + Sbar_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); + 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/hud/sb_accuracy", fill_size , fill_colour, sbar_alpha_bg, DRAWFLAG_NORMAL); - drawborderlines(sbar_border_thickness, pos, fill_size, '0 0 0', sbar_alpha_bg, DRAWFLAG_NORMAL); + // background + drawpic(pos, "gfx/hud/sb_accuracy", fill_size , fill_colour, sbar_alpha_bg, DRAWFLAG_NORMAL); + drawborderlines(sbar_border_thickness, pos, fill_size, '0 0 0', sbar_alpha_bg, DRAWFLAG_NORMAL); - // the weapon - drawpic(pos, strcat("gfx/hud/inv_weapon", ftos(i-1)), '1 0.5 0' * fill_size_x , '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + // the weapon + drawpic(pos, strcat("gfx/hud/inv_weapon", ftos(i-1)), '1 0.5 0' * fill_size_x , '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); - // the amount of shots fired or max damage - drawstringright(pos + '4.5 0 0' * sbar_fontsize_x + '0 3 0' * sbar_fontsize_y, ftos(weapon_damage), sbar_fontsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + // the amount of shots fired or max damage + drawstringright(pos + '4.5 0 0' * sbar_fontsize_x + '0 3 0' * sbar_fontsize_y, ftos(weapon_damage), sbar_fontsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); - // the amount of hits or actual damage - drawstringright(pos + '4.5 0 0' * sbar_fontsize_x + '0 5 0' * sbar_fontsize_y, ftos(weapon_hit), sbar_fontsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + // the amount of hits or actual damage + drawstringright(pos + '4.5 0 0' * sbar_fontsize_x + '0 5 0' * sbar_fontsize_y, ftos(weapon_hit), sbar_fontsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); - // the accuracy - drawstringright(pos + '4.5 0 0' * sbar_fontsize_x + '0 7 0' * sbar_fontsize_y, strcat(ftos(weapon_stats),"%"), sbar_fontsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + // the accuracy + drawstringright(pos + '4.5 0 0' * sbar_fontsize_x + '0 7 0' * sbar_fontsize_y, strcat(ftos(weapon_stats),"%"), sbar_fontsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); - // the amount of shots missed or damage wasted - drawstringright(pos + '4.5 0 0' * sbar_fontsize_x + '0 9 0' * sbar_fontsize_y, ftos(max(0, weapon_damage - weapon_hit)), sbar_fontsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + // the amount of shots missed or damage wasted + drawstringright(pos + '4.5 0 0' * sbar_fontsize_x + '0 9 0' * sbar_fontsize_y, ftos(max(0, weapon_damage - weapon_hit)), sbar_fontsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); - ++count_splash; - } - else if ((self.weapon_type == WEP_TYPE_HITSCAN) && (weapon_damage)) - { - weapon_stats = bound(0, rint(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_hitscan * (fill_size_x + col_margin) + fill_size_x + cvar("stats_right_margin")) >= vid_conwidth) - { - count_hitscan = 0; - ++row; - Sbar_DrawAccuracyStats_Description_Hitscan('1 0 0' * col_margin + '0 1 0' * (top_border_hitscan + row * (fill_size_y + row_margin))); - } + ++count_splash; + } else if ((self.weapon_type == WEP_TYPE_HITSCAN) && (weapon_damage)) { + weapon_stats = bound(0, rint(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 - pos_x = left_border + count_hitscan * (fill_size_x + col_margin); - pos_y = top_border_hitscan + row * (fill_size_y + row_margin); + if ((left_border + count_hitscan * (fill_size_x + col_margin) + fill_size_x + cvar("stats_right_margin")) >= vid_conwidth) + { + count_hitscan = 0; + ++row; + Sbar_DrawAccuracyStats_Description_Hitscan('1 0 0' * col_margin + '0 1 0' * (top_border_hitscan + row * (fill_size_y + row_margin))); + } - // background - drawpic(pos, "gfx/hud/sb_accuracy", fill_size , fill_colour, sbar_alpha_bg, DRAWFLAG_NORMAL); - drawborderlines(sbar_border_thickness, pos, fill_size, '0 0 0', sbar_alpha_bg, DRAWFLAG_NORMAL); + pos_x = left_border + count_hitscan * (fill_size_x + col_margin); + pos_y = top_border_hitscan + row * (fill_size_y + row_margin); - // the weapon - drawpic(pos, strcat("gfx/hud/inv_weapon", ftos(i-1)), '1 0.5 0' * fill_size_x , '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + // background + drawpic(pos, "gfx/hud/sb_accuracy", fill_size , fill_colour, sbar_alpha_bg, DRAWFLAG_NORMAL); + drawborderlines(sbar_border_thickness, pos, fill_size, '0 0 0', sbar_alpha_bg, DRAWFLAG_NORMAL); - // the amount of shots fired or max damage - drawstringright(pos + '4.5 0 0' * sbar_fontsize_x + '0 3 0' * sbar_fontsize_y, ftos(weapon_damage), sbar_fontsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + // the weapon + drawpic(pos, strcat("gfx/hud/inv_weapon", ftos(i-1)), '1 0.5 0' * fill_size_x , '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); - // the amount of hits or actual damage - drawstringright(pos + '4.5 0 0' * sbar_fontsize_x + '0 5 0' * sbar_fontsize_y, ftos(weapon_hit), sbar_fontsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + // the amount of shots fired or max damage + drawstringright(pos + '4.5 0 0' * sbar_fontsize_x + '0 3 0' * sbar_fontsize_y, ftos(weapon_damage), sbar_fontsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); - // the accuracy - drawstringright(pos + '4.5 0 0' * sbar_fontsize_x + '0 7 0' * sbar_fontsize_y, strcat(ftos(weapon_stats),"%"), sbar_fontsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + // the amount of hits or actual damage + drawstringright(pos + '4.5 0 0' * sbar_fontsize_x + '0 5 0' * sbar_fontsize_y, ftos(weapon_hit), sbar_fontsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); - // the amount of shots missed or damage wasted - drawstringright(pos + '4.5 0 0' * sbar_fontsize_x + '0 9 0' * sbar_fontsize_y, ftos(max(0, weapon_damage - weapon_hit)), sbar_fontsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + // the accuracy + drawstringright(pos + '4.5 0 0' * sbar_fontsize_x + '0 7 0' * sbar_fontsize_y, strcat(ftos(weapon_stats),"%"), sbar_fontsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); - ++count_hitscan; + // the amount of shots missed or damage wasted + drawstringright(pos + '4.5 0 0' * sbar_fontsize_x + '0 9 0' * sbar_fontsize_y, ftos(max(0, weapon_damage - weapon_hit)), sbar_fontsize, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + + ++count_hitscan; + } } } } @@ -2365,11 +2326,13 @@ void Sbar_Draw (void) { if(sb_showscores) { Sbar_DrawScoreboard(); - Sbar_Score(16); + Sbar_Score(); + Sbar_Timer(); } else if(sb_showaccuracy) { Sbar_DrawAccuracyStats(); - Sbar_Score(16); + Sbar_Score(); + Sbar_Timer(); } else Sbar_FinaleOverlay(); @@ -2380,7 +2343,8 @@ void Sbar_Draw (void) Sbar_DrawAccuracyStats(); else Sbar_DrawScoreboard(); - Sbar_Score(16); + Sbar_Score(); + Sbar_Timer(); } else { @@ -2400,9 +2364,7 @@ void Sbar_Draw (void) fade = bound(0.7, fade, 1); vector bg_size; // hud background size - bg_size_x = 1600; - bg_size_y = 58; - bg_size_z = 0; + bg_size = '1600 58 0'; if (cvar("viewsize") <= 100 && vid_conwidth <= 1600) { if (teamplay) @@ -2423,7 +2385,7 @@ void Sbar_Draw (void) v = healtharmor_maxdamage(health, armor, armorblockpercent); vector num_pos; - num_pos = bottom - element_offset - '0 22 0' + '-96 0 0'; + num_pos = bottom - '96 28 0'; x = floor(v_x + 1); @@ -2446,12 +2408,12 @@ void Sbar_Draw (void) vector health_pos, armor_pos; if (sbar_hudselector == 0) { // old style layout with armor left of health - health_pos = bottom - element_offset - '0 22 0' + '14 0 0'; - armor_pos = bottom - element_offset - '0 22 0' + '-96 0 0'; + armor_pos = bottom - '96 28 0'; + health_pos = bottom - '-14 28 0'; } else { - health_pos = bottom - element_offset - '0 22 0' + '-96 0 0'; - armor_pos = bottom - element_offset - '0 22 0' + '14 0 0'; + health_pos = bottom - '96 28 0'; + armor_pos = bottom - '-14 28 0'; } // armor @@ -2493,30 +2455,26 @@ void Sbar_Draw (void) for (i = 0; i < 4; ++i) { a = getstati(GetAmmoStat(i)); // how much ammo do we have of type i? - if(sbar_currentammo || vid_conwidth < 800) // force showing current ammo only with conwidths < 800 - { - if (stat_items & GetAmmoItemCode(i)) - { + if(sbar_currentammo || vid_conwidth < 800) { // force showing current ammo only with conwidths < 800 + if (stat_items & GetAmmoItemCode(i)) { if (vid_conwidth >= 800) { pos_x = 230; pos_y = 40; - } - else { + } else { pos_x = 206; pos_y = 33; } + pos = bottom - pos; if(vid_conwidth >= 800) - drawpic(bottom - pos + '0 1.5 0', "gfx/hud/sb_ammobg", '107 29 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); - drawpic(bottom - pos + '76 3 0', GetAmmoPicture(i), '24 24 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + drawpic(pos + '0 1.5 0', "gfx/hud/sb_ammobg", '107 29 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + drawpic(pos + '76 3 0', GetAmmoPicture(i), '24 24 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); if(a < 10) - Sbar_DrawXNum(bottom - pos + '5 5 0', a, 3, 0, 24, '0.7 0 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); + Sbar_DrawXNum(pos + '5 5 0', a, 3, 0, 24, '0.7 0 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); else - Sbar_DrawXNum(bottom - pos + '5 5 0', a, 3, 0, 24, '1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); + Sbar_DrawXNum(pos + '5 5 0', a, 3, 0, 24, '1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); } - } - else - { + } else { if (a > 0) { switch (i) { case 0: pos_x = 286; pos_y = 48; break; // shells @@ -2525,19 +2483,20 @@ void Sbar_Draw (void) case 3: pos_x = 200; pos_y = 26; break; // cells } + pos = bottom - pos; if (stat_items & GetAmmoItemCode(i)) - drawpic(bottom - pos + '0 1.5 0', "gfx/hud/sb_ammobg", '80 22 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); - drawpic(bottom - pos + '56 3 0', GetAmmoPicture(i), '18 18 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + drawpic(pos + '0 1.5 0', "gfx/hud/sb_ammobg", '80 22 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + drawpic(pos + '56 3 0', GetAmmoPicture(i), '18 18 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); if (a < 10) { if(stat_items & GetAmmoItemCode(i)) - Sbar_DrawXNum(bottom - pos + '6 4.5 0', a, 3, 0, 16, '0.7 0 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); + Sbar_DrawXNum(pos + '6 4.5 0', a, 3, 0, 16, '0.7 0 0', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); else - Sbar_DrawXNum(bottom - pos + '6 4.5 0', a, 3, 0, 16, '0.7 0 0', 0, 0, sbar_alpha_fg * 0.7, DRAWFLAG_NORMAL); + Sbar_DrawXNum(pos + '6 4.5 0', a, 3, 0, 16, '0.7 0 0', 0, 0, sbar_alpha_fg * 0.7, DRAWFLAG_NORMAL); } else { if(stat_items & GetAmmoItemCode(i)) - Sbar_DrawXNum(bottom - pos + '6 4.5 0', a, 3, 0, 16, '1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); + Sbar_DrawXNum(pos + '6 4.5 0', a, 3, 0, 16, '1 1 1', 0, 0, sbar_alpha_fg, DRAWFLAG_NORMAL); else - Sbar_DrawXNum(bottom - pos + '6 4.5 0', a, 3, 0, 16, '0.7 0.7 0.7', 0, 0, sbar_alpha_fg * 0.7, DRAWFLAG_NORMAL); + Sbar_DrawXNum(pos + '6 4.5 0', a, 3, 0, 16, '0.7 0.7 0.7', 0, 0, sbar_alpha_fg * 0.7, DRAWFLAG_NORMAL); } } } @@ -2572,21 +2531,19 @@ void Sbar_Draw (void) } // draw scores and timer - Sbar_Score(16); + Sbar_Score(); + Sbar_Timer(); - //show strength/invincibility ICON and timer: + // draw strength/invincibility icon and timer CSQC_Strength_Timer(); - + + // draw gametype specific icons if(gametype == GAME_KEYHUNT) - { CSQC_kh_hud(); - } else if(gametype == GAME_CTF) - { + else if(gametype == GAME_CTF) CSQC_ctf_hud(); - } else if(gametype == GAME_NEXBALL) - { + else if(gametype == GAME_NEXBALL) CSQC_nb_hud(); - } } } @@ -2606,17 +2563,14 @@ void CSQC_ctf_hud(void) blueflag = (stat_items/IT_BLUE_FLAG_TAKEN) & 3; if (myteam == COLOR_TEAM1) { // always draw own flag on left - redflag_pos = bottomleft - element_offset - '-4 36 0'; - blueflag_pos = bottomleft - element_offset - '-68 36 0'; - } - - else { - blueflag_pos = bottomleft - element_offset - '-4 36 0'; - redflag_pos = bottomleft - element_offset - '-68 36 0'; + redflag_pos = bottomleft - '-4 42 0'; + blueflag_pos = bottomleft - '-68 42 0'; + } else { + blueflag_pos = bottomleft - '-4 42 0'; + redflag_pos = bottomleft - '-68 42 0'; } - switch(redflag) - { + switch(redflag) { case 1: drawpic(redflag_pos, "gfx/hud/sb_flag_red_taken", '48 48 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); break; case 2: drawpic(redflag_pos, "gfx/hud/sb_flag_red_lost", '48 48 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); break; case 3: drawpic(redflag_pos, "gfx/hud/sb_flag_red_carrying", '48 48 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); break; @@ -2626,8 +2580,7 @@ void CSQC_ctf_hud(void) drawpic(redflag_pos, "gfx/hud/sb_flag_red_shielded", '48 48 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); break; } - switch(blueflag) - { + switch(blueflag) { case 1: drawpic(blueflag_pos, "gfx/hud/sb_flag_blue_taken", '48 48 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); break; case 2: drawpic(blueflag_pos, "gfx/hud/sb_flag_blue_lost", '48 48 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); break; case 3: drawpic(blueflag_pos, "gfx/hud/sb_flag_blue_carrying", '48 48 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); break; -- 2.39.2