seta hud_configure_grid_xsize "" "snap to X * vid_conwidth"
seta hud_configure_grid_ysize "" "snap to Y * vid_conheight"
+seta scr_centerpos "" "Y position of the centerprint"
+
seta hud_panel_weapons "" "enable/disable this panel"
seta hud_panel_weapons_pos "" "position of this panel"
seta hud_panel_weapons_size "" "size of this panel"
seta scoreboard_highlight 1 "enable highlighting for rows and columns in the scoreboard"
seta scoreboard_highlight_alpha 0.10 "highlight alpha value (depends on hud_scoreboard_highlight 1)"
seta scoreboard_highlight_alpha_self 0.25 "self highlight alpha value"
+seta scoreboard_offset_left 0.02 "how many pixels the scoreboard is offset from the left screen edge"
+seta scoreboard_offset_right 0.1 "how many pixels the scoreboard is offset from the right screen edge"
// for menu server list (eventually make them have engine support?)
seta menu_slist_showfull 1 "show servers even if they are full and have no slots to join"
seta hud_configure_grid_xsize "0.005000"
seta hud_configure_grid_ysize "0.005000"
+seta scr_centerpos 0.25
+
seta hud_panel_weapons 1
seta hud_panel_weapons_pos "0.915000 0.085000"
seta hud_panel_weapons_size "0.060000 0.635000"
seta hud_configure_grid_xsize "0.005000"
seta hud_configure_grid_ysize "0.005000"
+seta scr_centerpos 0.25
+
seta hud_panel_weapons 1
seta hud_panel_weapons_pos "0.915000 0.085000"
seta hud_panel_weapons_size "0.060000 0.635000"
seta hud_configure_grid_xsize "0.01"
seta hud_configure_grid_ysize "0.01"
+seta scr_centerpos 0.25
+
seta hud_panel_weapons 1
seta hud_panel_weapons_pos "0.370000 0.870000"
seta hud_panel_weapons_size "0.330000 0.060000"
self.draw2d();
self = e;
- // draw hud
- if(cvar("r_letterbox") == 0) {
- HUD_DrawCenterPrint(); // draw centerprint messages even if viewsize >= 120
- }
-
float hud;
hud = getstati(STAT_HUD);
if(hud == HUD_SPIDERBOT)
CSQC_common_hud();
// crosshair goes VERY LAST
- if(!scoreboard_active && !camera_active) {
+ if(!scoreboard_active && !camera_active && intermission != 2) {
// TrueAim check
float shottype;
float bullets, ring_scale;
acc_lev[i] = stof(argv(i));
}
- // hud first
- HUD_Main();
+ HUD_Main(); // always run these functions for alpha checks
+ HUD_DrawScoreboard();
- // scoreboard/accuracy
- if (intermission == 2 && !scoreboard_showaccuracy && !scoreboard_showscores) // map voting screen
+ if (scoreboard_showscores || scoreboard_showscores_force || getstati(STAT_HEALTH) <= 0 || intermission == 1) // scoreboard/accuracy
+ {
+ HUD_Reset();
+ // HUD_DrawScoreboard takes care of centerprint_start
+ }
+ else if (intermission == 2) // map voting screen
{
HUD_FinaleOverlay();
HUD_Reset();
- }
- else if(scoreboard_showaccuracy && spectatee_status != -1)
- HUD_DrawAccuracyStats();
- else
- HUD_DrawScoreboard();
- if (scoreboard_showscores || scoreboard_showaccuracy || scoreboard_showscores_force || getstati(STAT_HEALTH) <= 0 || intermission == 1)
- HUD_Reset();
+ centerprint_start_x = 0;
+ centerprint_start_y = cvar("scr_centerpos") * vid_conheight;
+ }
+ else // hud
+ {
+ centerprint_start_x = 0;
+ centerprint_start_y = cvar("scr_centerpos") * vid_conheight;
+ }
+ HUD_DrawCenterPrint();
break;
case HUD_SPIDERBOT:
#define CENTERPRINT_MAX_LINES 30
string centerprint_messages[CENTERPRINT_MAX_LINES];
float centerprint_width[CENTERPRINT_MAX_LINES];
-vector centerprint_start;
+float centerprint_time;
float centerprint_expire;
float centerprint_num;
float centerprint_offset_hint;
while(getWrappedLine_remaining)
{
s = getWrappedLine(vid_conwidth * 0.75, centerprint_fontsize, stringwidth_colors);
+ if(centerprint_messages[i] != s) // don't fade the same message in, looks stupid
+ centerprint_time = time;
if(centerprint_messages[i])
strunzone(centerprint_messages[i]);
centerprint_messages[i] = strzone(s);
if(havail > vid_conheight - 70)
havail = vid_conheight - 70; // avoid overlapping HUD
- centerprint_start_x = 0;
-
#if 0
float forbiddenmin, forbiddenmax, allowedmin, allowedmax, preferred;
centerprint_start_y = bound(forbiddenmax, preferred, allowedmax);
}
#else
- centerprint_start_y =
- min(
- max(
- max(scoreboard_bottom, vid_conheight * 0.5 + 16),
- (havail - h)/2
- ),
- havail - h
- );
#endif
centerprint_num = i;
float i;
vector pos;
string ts;
- float a;
-
- //if(time > centerprint_expire)
- // return;
+ float a, sz;
- //a = bound(0, 1 - 2 * (time - centerprint_expire), 1);
- a = bound(0, 1 - 4 * (time - centerprint_expire), 1);
- //sz = 1.2 / (a + 0.2);
+ if(time - centerprint_time < 0.25)
+ a = (time - centerprint_time) / 0.25;
+ else
+ a = bound(0, 1 - 4 * (time - centerprint_expire), 1);
if(a <= 0)
return;
+ sz = 0.8 + (a / 5);
+
pos = centerprint_start;
for (i=0; i<centerprint_num; i = i + 1)
{
- pos_x = (vid_conwidth - centerprint_width[i]) * 0.5;
ts = centerprint_messages[i];
+ drawfontscale = sz * '1 1 0';
+ drawfont = hud_bigfont;
+ pos_x = (vid_conwidth - stringwidth(ts, TRUE, centerprint_fontsize)) * 0.5;
if (ts != "")
{
- drawcolorcodedstring(pos, ts, centerprint_fontsize, a, DRAWFLAG_NORMAL);
- // - '0 0.5 0' * (sz - 1) * centerprint_fontsize_x - '0.5 0 0' * (sz - 1) * centerprint_width[i] * centerprint_fontsize_y, centerprint_fontsize * sz
+ drawcolorcodedstring(pos + '0 1 0' * (1 - sz) * 0.5 *centerprint_fontsize_y, ts, centerprint_fontsize, a, DRAWFLAG_NORMAL);
pos_y = pos_y + centerprint_fontsize_y;
}
else
// half height for empty lines looks better
- pos_y = pos_y + centerprint_fontsize_y * 0.5;
+ pos_y = pos_y + sz * centerprint_fontsize_y * 0.5;
+ drawfontscale = '1 1 0';
+ drawfont = hud_font;
}
}
fputs(fh, strcat("seta hud_configure_grid_ysize \"", cvar_string("hud_configure_grid_ysize"), "\"", "\n"));
fputs(fh, "\n");
+ fputs(fh, strcat("seta scr_centerpos \"", cvar_string("scr_centerpos"), "\"", "\n"));
+ fputs(fh, "\n");
+
// common cvars for all panels
float i;
for (i = 0; i < HUD_PANEL_NUM; ++i)
centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1Don't shoot your team mates!"));
} else if (type == DEATH_QUIET) {
// do nothing
- } else if (type == DEATH_KILL) {
+ } else { // generic message
if(gentle)
centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You need to be more careful!"));
else
} else {
centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^4You fragged ^7", s1, s2));
}
- } else if (type == KILL_FRAGGED) {
+ } else { // generic message
if(gentle) {
centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You were scored against by ^7", s1, s2));
} else {
{
hud_skin_path = strcat("gfx/hud/", autocvar_hud_skin);
+ // global hud alpha fade
if(disable_menu_alphacheck == 1)
- menu_fade_alpha = 1;
+ hud_fade_alpha = 1;
else
- menu_fade_alpha = (1 - autocvar__menu_alpha);
+ hud_fade_alpha = (1 - autocvar__menu_alpha);
+
+ if(scoreboard_fade_alpha)
+ hud_fade_alpha = (1 - scoreboard_fade_alpha);
+
+ if(intermission == 2) // no hud during mapvote
+ hud_fade_alpha = 0;
+ else if(autocvar__menu_alpha == 0 && scoreboard_fade_alpha == 0)
+ hud_fade_alpha = 1;
hud_border_thickness = bound(0, cvar("hud_border_thickness"), 5);
hud_accuracy_border_thickness = bound(0, cvar_or("hud_accuracy_border_thickness", 1), 5);
if(precache_pic(pic) == "") {
pic = "gfx/hud/default/dock";
}
- drawpic('0 0 0', pic, eX * vid_conwidth + eY * vid_conheight, color, autocvar_hud_dock_alpha * menu_fade_alpha, DRAWFLAG_NORMAL); // no aspect ratio forcing on dock...
+ drawpic('0 0 0', pic, eX * vid_conwidth + eY * vid_conheight, color, autocvar_hud_dock_alpha * hud_fade_alpha, DRAWFLAG_NORMAL); // no aspect ratio forcing on dock...
}
// cache the panel order into the panel_order array
float log(float f);
+vector centerprint_start;
+
float panel_order[HUD_PANEL_NUM];
string hud_panelorder_prev;
const float S_ALT = 4;
float disable_menu_alphacheck; // 0 = enable alpha check, 1 = disable for entire hud, 2 = disable for one panel
-float menu_fade_alpha;
+float hud_fade_alpha;
string hud_skin_path;
} if(autocvar__hud_configure && !panel_enabled) {\
panel_bg_alpha = 0.25;\
} if(!(disable_menu_alphacheck == 2 && highlightedPanel == active_panel)) {\
- panel_bg_alpha *= menu_fade_alpha;\
+ panel_bg_alpha *= hud_fade_alpha;\
}
// Get value for panel_fg_alpha. Also do various minalpha checks
if(autocvar__hud_configure && !panel_enabled)\
panel_fg_alpha = 0.25;\
if(!(disable_menu_alphacheck == 2 && highlightedPanel == active_panel))\
- panel_fg_alpha *= menu_fade_alpha;
+ panel_fg_alpha *= hud_fade_alpha;
// Get border. See comments above, it's similar.
#define HUD_Panel_GetBorder()\
return v;
}
-float HUD_GetWidth(float teamcolumnwidth)
-{
- float f;
- f = cvar("hud_width");
- if(f == 0)
- f = 640;
- if(f < 320)
- f = 320;
- if(f > vid_conwidth - 2 * teamcolumnwidth)
- f = vid_conwidth - 2 * teamcolumnwidth;
- return f;
-}
-
float PreviewExists(string name)
{
float f;
interpolate.qh
teamradar.qh
hud.qh
+scoreboard.qh
waypointsprites.qh
movetypes.qh
prandom.qh
return 1;
else if (intermission == 1)
return 1;
- else if (intermission == 2)
+ else if (intermission == 2 && scoreboard_showscores)
return 1;
else if (getstati(STAT_HEALTH) <= 0 && cvar("cl_deathscoreboard"))
return 1;
}
drawstring(pos, strcat("Accuracy stats (average ", ftos(average_accuracy), "%)"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
- pos_y += 18;
+ pos_y += 1.25 * hud_fontsize_y;
vector tmp;
tmp_x = sbwidth;
tmp_y = height * rows;
pos_x -= sbwidth/weapon_cnt / 2;
pos_x -= sbwidth;
pos_y += height;
+
+ pos_y += 1.25 * hud_fontsize_y;
return pos;
}
drawstring(pos, p, hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
drawstring(pos + '3 0 0' * hud_fontsize_x, TIME_ENCODED_TOSTRING(t), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
drawcolorcodedstring(pos + '8 0 0' * hud_fontsize_x, n, hud_fontsize, scoreboard_alpha_fg, DRAWFLAG_NORMAL);
- pos += '0 1 0' * hud_fontsize_y;
+ pos_y += 1.25 * hud_fontsize_y;
}
return pos;
}
-float scoreboard_fade_alpha;
float hud_woulddrawscoreboard_prev;
float hud_woulddrawscoreboard_change; // "time" at which HUD_WouldDrawScoreboard() changed
void HUD_DrawScoreboard()
vector rgb, pos, tmp;
entity pl, tm;
- sbwidth = HUD_GetWidth(6.5 * hud_fontsize_y);
+ xmin = cvar("scoreboard_offset_left") * vid_conwidth;
+ ymin = cvar("con_notify") * cvar("con_notifysize");
- xmin = 0.5 * (vid_conwidth - sbwidth);
- ymin = SCOREBOARD_OFFSET;
-
- xmax = vid_conwidth - xmin;
- ymax = vid_conheight - 0.2*vid_conheight;
+ sbwidth = xmax = vid_conwidth - xmin - cvar("scoreboard_offset_right") * vid_conwidth;
+ ymax = vid_conheight - ymin;
// Initializes position
pos_x = xmin;
// Heading
drawfont = hud_bigfont;
- drawstringcenter('0 1 0' * ymin, "Scoreboard", '24 24 0', '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
+ drawstring(pos, "Scoreboard", '24 24 0', '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
+
+ centerprint_start_x = vid_conwidth - 0.5 * (pos_x + stringwidth("Scoreboard", FALSE, '24 24 0'));
+ centerprint_start_y = pos_y;
- pos_y += 24 + 4;
- pos_y += hud_fontsize_y;
+ pos_y += 24;
drawfont = hud_font;
pos = HUD_DrawScoreboardAccuracyStats(pos, rgb, bg_size);
}
- tmp = pos + '0 1.5 0' * hud_fontsize_y;
- pos_y += 3 * hud_fontsize_y;
-
// List spectators
float specs;
specs = 0;
+ tmp = pos;
for(pl = players.sort_next; pl; pl = pl.sort_next)
{
if(pl.team != COLOR_SPECTATOR)
continue;
- HUD_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localentnum - 1), specs);
pos_y += 1.25 * hud_fontsize_y;
+ HUD_PrintScoreboardItem(pos, pl, (pl.sv_entnum == player_localentnum - 1), specs);
++specs;
}
if(specs)
+ {
drawstring(tmp, "Spectators", hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
+ pos_y += 1.25 * hud_fontsize_y;
+ }
// Print info string
string str;
--- /dev/null
+float scoreboard_fade_alpha;