X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2Fhud.qc;h=5ead970345f2b10a4d7152c1a86c822263cd9c6f;hp=7125739cff922cec08dad3f759463ca119b4f9d7;hb=21307f327df5609b82d90496c1c6156d636d1c8d;hpb=2718fac2d710f2c4e63a6de3cfe0ffc66dc7d6a3 diff --git a/qcsrc/client/hud.qc b/qcsrc/client/hud.qc index 7125739cff..5ead970345 100644 --- a/qcsrc/client/hud.qc +++ b/qcsrc/client/hud.qc @@ -1,30 +1,20 @@ #include "hud.qh" -#include "_all.qh" #include "hud_config.qh" #include "mapvoting.qh" #include "scoreboard.qh" -#include "sortlist.qh" #include "teamradar.qh" #include "t_items.qh" - -#include "../dpdefs/keycodes.qh" - -#include "../common/buffs.qh" -#include "../common/constants.qh" -#include "../common/counting.qh" -#include "../common/deathtypes.qh" +#include "../common/buffs/all.qh" +#include "../common/deathtypes/all.qh" #include "../common/items/all.qc" #include "../common/mapinfo.qh" -#include "../common/nades.qh" - -#include "../server/mutators/gamemode_ctf.qh" - +#include "../common/mutators/mutator/waypoints/all.qh" +#include "../common/nades/all.qh" #include "../common/stats.qh" +#include "../lib/csqcmodel/cl_player.qh" +#include "../server/mutators/gamemode_ctf.qh" -#include "../csqcmodellib/cl_player.qh" - -#include "../warpzonelib/mathlib.qh" /* ================== @@ -32,89 +22,6 @@ Misc HUD functions ================== */ -// a border picture is a texture containing nine parts: -// 1/4 width: left part -// 1/2 width: middle part (stretched) -// 1/4 width: right part -// divided into -// 1/4 height: top part -// 1/2 height: middle part (stretched) -// 1/4 height: bottom part -void draw_BorderPicture(vector theOrigin, string pic, vector theSize, vector theColor, float theAlpha, vector theBorderSize) -{ - if (theBorderSize.x < 0 && theBorderSize.y < 0) // draw whole image as it is - { - drawpic(theOrigin, pic, theSize, theColor, theAlpha, 0); - return; - } - if (theBorderSize.x == 0 && theBorderSize.y == 0) // no border - { - // draw only the central part - drawsubpic(theOrigin, theSize, pic, '0.25 0.25 0', '0.5 0.5 0', theColor, theAlpha, 0); - return; - } - - vector dX, dY; - vector width, height; - vector bW, bH; - //pic = draw_UseSkinFor(pic); - width = eX * theSize.x; - height = eY * theSize.y; - if(theSize.x <= theBorderSize.x * 2) - { - // not wide enough... draw just left and right then - bW = eX * (0.25 * theSize.x / (theBorderSize.x * 2)); - if(theSize.y <= theBorderSize.y * 2) - { - // not high enough... draw just corners - bH = eY * (0.25 * theSize.y / (theBorderSize.y * 2)); - drawsubpic(theOrigin, width * 0.5 + height * 0.5, pic, '0 0 0', bW + bH, theColor, theAlpha, 0); - drawsubpic(theOrigin + width * 0.5, width * 0.5 + height * 0.5, pic, eX - bW, bW + bH, theColor, theAlpha, 0); - drawsubpic(theOrigin + height * 0.5, width * 0.5 + height * 0.5, pic, eY - bH, bW + bH, theColor, theAlpha, 0); - drawsubpic(theOrigin + theSize * 0.5, width * 0.5 + height * 0.5, pic, eX + eY - bW - bH, bW + bH, theColor, theAlpha, 0); - } - else - { - dY = theBorderSize.x * eY; - drawsubpic(theOrigin, width * 0.5 + dY, pic, '0 0 0', '0 0.25 0' + bW, theColor, theAlpha, 0); - drawsubpic(theOrigin + width * 0.5, width * 0.5 + dY, pic, '0 0 0' + eX - bW, '0 0.25 0' + bW, theColor, theAlpha, 0); - drawsubpic(theOrigin + dY, width * 0.5 + height - 2 * dY, pic, '0 0.25 0', '0 0.5 0' + bW, theColor, theAlpha, 0); - drawsubpic(theOrigin + width * 0.5 + dY, width * 0.5 + height - 2 * dY, pic, '0 0.25 0' + eX - bW, '0 0.5 0' + bW, theColor, theAlpha, 0); - drawsubpic(theOrigin + height - dY, width * 0.5 + dY, pic, '0 0.75 0', '0 0.25 0' + bW, theColor, theAlpha, 0); - drawsubpic(theOrigin + width * 0.5 + height - dY, width * 0.5 + dY, pic, '0 0.75 0' + eX - bW, '0 0.25 0' + bW, theColor, theAlpha, 0); - } - } - else - { - if(theSize.y <= theBorderSize.y * 2) - { - // not high enough... draw just top and bottom then - bH = eY * (0.25 * theSize.y / (theBorderSize.y * 2)); - dX = theBorderSize.x * eX; - drawsubpic(theOrigin, dX + height * 0.5, pic, '0 0 0', '0.25 0 0' + bH, theColor, theAlpha, 0); - drawsubpic(theOrigin + dX, width - 2 * dX + height * 0.5, pic, '0.25 0 0', '0.5 0 0' + bH, theColor, theAlpha, 0); - drawsubpic(theOrigin + width - dX, dX + height * 0.5, pic, '0.75 0 0', '0.25 0 0' + bH, theColor, theAlpha, 0); - drawsubpic(theOrigin + height * 0.5, dX + height * 0.5, pic, '0 0 0' + eY - bH, '0.25 0 0' + bH, theColor, theAlpha, 0); - drawsubpic(theOrigin + dX + height * 0.5, width - 2 * dX + height * 0.5, pic, '0.25 0 0' + eY - bH, '0.5 0 0' + bH, theColor, theAlpha, 0); - drawsubpic(theOrigin + width - dX + height * 0.5, dX + height * 0.5, pic, '0.75 0 0' + eY - bH, '0.25 0 0' + bH, theColor, theAlpha, 0); - } - else - { - dX = theBorderSize.x * eX; - dY = theBorderSize.x * eY; - drawsubpic(theOrigin, dX + dY, pic, '0 0 0', '0.25 0.25 0', theColor, theAlpha, 0); - drawsubpic(theOrigin + dX, width - 2 * dX + dY, pic, '0.25 0 0', '0.5 0.25 0', theColor, theAlpha, 0); - drawsubpic(theOrigin + width - dX, dX + dY, pic, '0.75 0 0', '0.25 0.25 0', theColor, theAlpha, 0); - drawsubpic(theOrigin + dY, dX + height - 2 * dY, pic, '0 0.25 0', '0.25 0.5 0', theColor, theAlpha, 0); - drawsubpic(theOrigin + dY + dX, width - 2 * dX + height - 2 * dY, pic, '0.25 0.25 0', '0.5 0.5 0', theColor, theAlpha, 0); - drawsubpic(theOrigin + dY + width - dX, dX + height - 2 * dY, pic, '0.75 0.25 0', '0.25 0.5 0', theColor, theAlpha, 0); - drawsubpic(theOrigin + height - dY, dX + dY, pic, '0 0.75 0', '0.25 0.25 0', theColor, theAlpha, 0); - drawsubpic(theOrigin + height - dY + dX, width - 2 * dX + dY, pic, '0.25 0.75 0', '0.5 0.25 0', theColor, theAlpha, 0); - drawsubpic(theOrigin + height - dY + width - dX, dX + dY, pic, '0.75 0.75 0', '0.25 0.25 0', theColor, theAlpha, 0); - } - } -} - vector HUD_Get_Num_Color (float x, float maxvalue) { float blinkingamt; @@ -206,28 +113,6 @@ vector HUD_GetTableSize_BestItemAR(int item_count, vector psize, float item_aspe return eX * best_columns + eY * best_rows; } -float stringwidth_colors(string s, vector theSize) -{ - return stringwidth(s, true, theSize); -} - -float stringwidth_nocolors(string s, vector theSize) -{ - return stringwidth(s, false, theSize); -} - -void drawstringright(vector position, string text, vector theScale, vector rgb, float theAlpha, int flag) -{ - position.x -= 2 / 3 * strlen(text) * theScale.x; - drawstring(position, text, theScale, rgb, theAlpha, flag); -} - -void drawstringcenter(vector position, string text, vector theScale, vector rgb, float theAlpha, int flag) -{ - position.x = 0.5 * (vid_conwidth - 0.6025 * strlen(text) * theScale.x); - drawstring(position, text, theScale, rgb, theAlpha, flag); -} - // return the string of the onscreen race timer string MakeRaceString(int cp, float mytime, float theirtime, float lapdelta, string theirname) { @@ -307,42 +192,12 @@ int race_CheckName(string net_name) return 0; } -int GetPlayerColorForce(int i) -{ - if(!teamplay) - return 0; - else - return stof(getplayerkeyvalue(i, "colors")) & 15; -} - -int GetPlayerColor(int i) -{ - if(!playerslots[i].gotscores) // unconnected - return NUM_SPECTATOR; - else if(stof(getplayerkeyvalue(i, "frags")) == FRAGS_SPECTATOR) - return NUM_SPECTATOR; - else - return GetPlayerColorForce(i); -} - -string GetPlayerName(int i) -{ - return ColorTranslateRGB(getplayerkeyvalue(i, "name")); -} - - /* ================== HUD panels ================== */ -// draw the background/borders -#define HUD_Panel_DrawBg(theAlpha) do { \ - if(panel.current_panel_bg != "0" && panel.current_panel_bg != "") \ - draw_BorderPicture(panel_pos - '1 1 0' * panel_bg_border, panel.current_panel_bg, panel_size + '1 1 0' * 2 * panel_bg_border, panel_bg_color, panel_bg_alpha * theAlpha, '1 1 0' * (panel_bg_border/BORDER_MULTIPLIER));\ -} while(0) - //basically the same code of draw_ButtonPicture and draw_VertButtonPicture for the menu void HUD_Panel_DrawProgressBar(vector theOrigin, vector theSize, string pic, float length_ratio, bool vertical, float baralign, vector theColor, float theAlpha, int drawflag) { @@ -466,7 +321,7 @@ void HUD_Panel_DrawHighlight(vector pos, vector mySize, vector color, float theA // Weapon icons (#0) // -entity weaponorder[WEP_MAXCOUNT]; +entity weaponorder[Weapons_MAX]; void weaponorder_swap(int i, int j, entity pass) { entity h = weaponorder[i]; @@ -484,7 +339,7 @@ int weaponorder_cmp(int i, int j, entity pass) } void HUD_Weapons(void) -{ +{SELFPARAM(); // declarations WepSet weapons_stat = WepSet_GetFromStat(); int i; @@ -511,7 +366,6 @@ void HUD_Weapons(void) vector color; // check to see if we want to continue - if(intermission == 2) return; if(hud != HUD_NORMAL) return; if(!autocvar__hud_configure) @@ -545,14 +399,14 @@ void HUD_Weapons(void) weapon_cnt = 0; for(i = WEP_FIRST; i <= WEP_LAST; ++i) { - self = get_weaponinfo(i); + setself(get_weaponinfo(i)); if(self.impulse >= 0) { weaponorder[weapon_cnt] = self; ++weapon_cnt; } } - for(i = weapon_cnt; i < WEP_MAXCOUNT; ++i) + for(i = weapon_cnt; i < Weapons_MAX; ++i) weaponorder[i] = world; heapsort(weapon_cnt, weaponorder_swap, weaponorder_cmp, world); @@ -573,7 +427,7 @@ void HUD_Weapons(void) if(cvar("wep_add")) { weapons_stat = '0 0 0'; - float countw = 1 + floor((floor(time * cvar("wep_add"))) % WEP_COUNT); + float countw = 1 + floor((floor(time * cvar("wep_add"))) % (Weapons_COUNT - 1)); for(i = WEP_FIRST; i <= countw; ++i) weapons_stat |= WepSet_FromWeapon(i); } @@ -604,7 +458,15 @@ void HUD_Weapons(void) vector padded_panel_size = panel_size - '2 2 0' * panel_bg_padding; // get the all-weapons layout - vector table_size = HUD_GetTableSize_BestItemAR(WEP_COUNT, padded_panel_size, aspect); + int nHidden = 0; + WepSet weapons_stat = WepSet_GetFromStat(); + for (int i = WEP_FIRST; i <= WEP_LAST; ++i) { + WepSet weapons_wep = WepSet_FromWeapon(i); + if (weapons_stat & weapons_wep) continue; + Weapon w = get_weaponinfo(i); + if (w.spawnflags & WEP_FLAG_MUTATORBLOCKED) nHidden += 1; + } + vector table_size = HUD_GetTableSize_BestItemAR((Weapons_COUNT - 1) - nHidden, padded_panel_size, aspect); columns = table_size.x; rows = table_size.y; weapon_size.x = padded_panel_size.x / columns; @@ -659,7 +521,7 @@ void HUD_Weapons(void) panel_pos.y += (old_panel_size.y - panel_size.y) / 2; } else - weapon_count = WEP_COUNT; + weapon_count = (Weapons_COUNT - 1); // animation for fading in/out the panel respectively when not in use if(!autocvar__hud_configure) @@ -764,7 +626,7 @@ void HUD_Weapons(void) if(!rows) // if rows is > 0 onlyowned code has already updated these vars { - vector table_size = HUD_GetTableSize_BestItemAR(WEP_COUNT, panel_size, aspect); + vector table_size = HUD_GetTableSize_BestItemAR((Weapons_COUNT - 1), panel_size, aspect); columns = table_size.x; rows = table_size.y; weapon_size.x = panel_size.x / columns; @@ -805,7 +667,7 @@ void HUD_Weapons(void) for(i = 0; i <= WEP_LAST-WEP_FIRST; ++i) { // retrieve information about the current weapon to be drawn - self = weaponorder[i]; + setself(weaponorder[i]); weapon_id = self.impulse; isCurrent = (self.weapon == switchweapon); @@ -982,8 +844,8 @@ void DrawAmmoNades(vector myPos, vector mySize, bool draw_expanding, float expan float bonusNades = getstatf(STAT_NADE_BONUS); float bonusProgress = getstatf(STAT_NADE_BONUS_SCORE); float bonusType = getstati(STAT_NADE_BONUS_TYPE); - vector nadeColor = NADES[bonusType].m_color; - string nadeIcon = NADES[bonusType].m_icon; + vector nadeColor = Nades[bonusType].m_color; + string nadeIcon = Nades[bonusType].m_icon; vector iconPos, textPos; @@ -1089,7 +951,6 @@ int nade_prevframe; float nade_statuschange_time; void HUD_Ammo(void) { - if(intermission == 2) return; if(hud != HUD_NORMAL) return; if(!autocvar__hud_configure) { @@ -1364,8 +1225,6 @@ int getPowerupItemAlign(int align, int column, int row, int columns, int rows, b void HUD_Powerups() { - if(intermission == 2) return; - int allItems = getstati(STAT_ITEMS, 0, 24); int allBuffs = getstati(STAT_BUFFS, 0, 24); int strengthTime, shieldTime, superTime; @@ -1407,7 +1266,7 @@ void HUD_Powerups() if(superTime) addPowerupItem("Superweapons", "superweapons", autocvar_hud_progressbar_superweapons_color, superTime, 30); - FOREACH(BUFFS, it.m_itemid & allBuffs, LAMBDA( + FOREACH(Buffs, it.m_itemid & allBuffs, LAMBDA( addPowerupItem(it.m_prettyName, strcat("buff_", it.m_name), it.m_color, bound(0, getstatf(STAT_BUFF_TIME) - time, 99), 60); )); @@ -1529,7 +1388,6 @@ void HUD_Powerups() void HUD_HealthArmor(void) { int armor, health, fuel; - if(intermission == 2) return; if(!autocvar__hud_configure) { if(!autocvar_hud_panel_healtharmor) return; @@ -1601,7 +1459,7 @@ void HUD_HealthArmor(void) if(autocvar_hud_panel_healtharmor == 2) // combined health and armor display { vector v; - v = healtharmor_maxdamage(health, armor, armorblockpercent, DEATH_WEAPON); + v = healtharmor_maxdamage(health, armor, armorblockpercent, DEATH_WEAPON.m_id); float x; x = floor(v.x + 1); @@ -1836,7 +1694,6 @@ void HUD_Notify_Push(string icon, string attacker, string victim) void HUD_Notify(void) { - if(intermission == 2) return; if (!autocvar__hud_configure) if (!autocvar_hud_panel_notify) return; @@ -1948,21 +1805,8 @@ void HUD_Notify(void) notify_count = count; } -// Timer (#5) -// -// TODO: macro -string seconds_tostring(float sec) -{ - float minutes; - minutes = floor(sec / 60); - - sec -= minutes * 60; - return sprintf("%d:%02d", minutes, sec); -} - void HUD_Timer(void) { - if(intermission == 2) return; if(!autocvar__hud_configure) { if(!autocvar_hud_panel_timer) return; @@ -2183,7 +2027,6 @@ void HUD_Radar_Mouse() void HUD_Radar(void) { - if(intermission == 2) return; if (!autocvar__hud_configure) { if (hud_panel_radar_maximized) @@ -2376,8 +2219,8 @@ void HUD_Radar(void) drawpic(coord - '8 8 0', "gfx/teamradar_icon_glow", '16 16 0', brightcolor, panel_fg_alpha, 0); } } - - draw_teamradar_icon(tm.origin, tm.teamradar_icon, tm, tm.teamradar_color, panel_fg_alpha); + entity icon = RadarIcons[tm.teamradar_icon]; + draw_teamradar_icon(tm.origin, icon, tm, spritelookupcolor(tm, icon.netname, tm.teamradar_color), panel_fg_alpha); } for(tm = world; (tm = find(tm, classname, "entcs_receiver")); ) { @@ -2532,7 +2375,6 @@ void HUD_Score_Rankings(vector pos, vector mySize, entity me) void HUD_Score(void) { - if(intermission == 2) return; if(!autocvar__hud_configure) { if(!autocvar_hud_panel_score) return; @@ -2716,7 +2558,6 @@ void HUD_Score(void) // void HUD_RaceTimer (void) { - if(intermission == 2) return; if(!autocvar__hud_configure) { if(!autocvar_hud_panel_racetimer) return; @@ -2867,7 +2708,6 @@ void HUD_RaceTimer (void) void HUD_Vote(void) { - if(intermission == 2) return; if(autocvar_cl_allow_uid2name == -1 && (gametype == MAPINFO_TYPE_CTS || gametype == MAPINFO_TYPE_RACE || (serverflags & SERVERFLAG_PLAYERSTATS))) { vote_active = 1; @@ -2875,7 +2715,7 @@ void HUD_Vote(void) { vote_yescount = 0; vote_nocount = 0; - print(_("^1You must answer before entering hud configure mode\n")); + LOG_INFO(_("^1You must answer before entering hud configure mode\n")); cvar_set("_hud_configure", "0"); } if(vote_called_vote) @@ -3744,7 +3584,6 @@ float mod_change; // "time" when mod_active changed void HUD_ModIcons(void) { - if(intermission == 2) return; if(!autocvar__hud_configure) { if(!autocvar_hud_panel_modicons) return; @@ -3786,7 +3625,6 @@ void HUD_ModIcons(void) // void HUD_PressedKeys(void) { - if(intermission == 2) return; if(!autocvar__hud_configure) { if(!autocvar_hud_panel_pressedkeys) return; @@ -3950,7 +3788,6 @@ float frametimeavg1; // 1 frame ago float frametimeavg2; // 2 frames ago void HUD_EngineInfo(void) { - //if(intermission == 2) return; if(!autocvar__hud_configure) { if(!autocvar_hud_panel_engineinfo) return; @@ -4012,7 +3849,6 @@ void HUD_EngineInfo(void) } while(0) void HUD_InfoMessages(void) { - if(intermission == 2) return; if(!autocvar__hud_configure) { if(!autocvar_hud_panel_infomessages) return; @@ -4194,7 +4030,6 @@ float acc_prevtime, acc_avg, top_speed, top_speed_time; float physics_update_time, discrete_speed, discrete_acceleration; void HUD_Physics(void) { - if(intermission == 2) return; if(!autocvar__hud_configure) { if(!autocvar_hud_panel_physics) return; @@ -4586,7 +4421,6 @@ void reset_centerprint_messages(void) float hud_configure_cp_generation_time; void HUD_CenterPrint (void) { - if(intermission == 2) return; if(!autocvar__hud_configure) { if(!autocvar_hud_panel_centerprint) return; @@ -4600,7 +4434,7 @@ void HUD_CenterPrint (void) reset_centerprint_messages(); if (time > hud_configure_cp_generation_time) { - if(HUD_PANEL(CENTERPRINT) == highlightedPanel) + if(highlightedPanel == HUD_PANEL(CENTERPRINT)) { float r; r = random(); @@ -4818,34 +4652,60 @@ void HUD_CenterPrint (void) // #include "../common/minigames/cl_minigames_hud.qc" + +// QuickMenu (#23) +// +#include "quickmenu.qc" + + /* ================== Main HUD system ================== */ +void HUD_Vehicle() +{ + if(autocvar__hud_configure) return; + if(intermission == 2) return; + + if(hud == HUD_BUMBLEBEE_GUN) + CSQC_BUMBLE_GUN_HUD(); + else { + Vehicle info = get_vehicleinfo(hud); + info.vr_hud(info); + } +} + bool HUD_Panel_CheckFlags(int showflags) { if ( HUD_Minigame_Showpanels() ) return showflags & PANEL_SHOW_MINIGAME; + if(intermission == 2) + return showflags & PANEL_SHOW_MAPVOTE; return showflags & PANEL_SHOW_MAINGAME; } void HUD_Panel_Draw(entity panent) { panel = panent; - if ( HUD_Panel_CheckFlags(panel.panel_showflags) ) + if(autocvar__hud_configure) + { + if(panel.panel_configflags & PANEL_CONFIG_MAIN) + panel.panel_draw(); + } + else if(HUD_Panel_CheckFlags(panel.panel_showflags)) panel.panel_draw(); } -void HUD_Reset (void) +void HUD_Reset(void) { // reset gametype specific icons if(gametype == MAPINFO_TYPE_CTF) HUD_Mod_CTF_Reset(); } -void HUD_Main (void) +void HUD_Main(void) { int i; // global hud theAlpha fade @@ -4929,18 +4789,18 @@ void HUD_Main (void) // cache the panel order into the panel_order array if(autocvar__hud_panelorder != hud_panelorder_prev) { - for(i = 0; i < HUD_PANEL_NUM; ++i) + for(i = 0; i < hud_panels_COUNT; ++i) panel_order[i] = -1; string s = ""; int p_num; bool warning = false; int argc = tokenize_console(autocvar__hud_panelorder); - if (argc > HUD_PANEL_NUM) + if (argc > hud_panels_COUNT) warning = true; //first detect wrong/missing panel numbers - for(i = 0; i < HUD_PANEL_NUM; ++i) { + for(i = 0; i < hud_panels_COUNT; ++i) { p_num = stoi(argv(i)); - if (p_num >= 0 && p_num < HUD_PANEL_NUM) { //correct panel number? + if (p_num >= 0 && p_num < hud_panels_COUNT) { //correct panel number? if (panel_order[p_num] == -1) //found for the first time? s = strcat(s, ftos(p_num), " "); panel_order[p_num] = 1; //mark as found @@ -4948,14 +4808,14 @@ void HUD_Main (void) else warning = true; } - for(i = 0; i < HUD_PANEL_NUM; ++i) { + for(i = 0; i < hud_panels_COUNT; ++i) { if (panel_order[i] == -1) { warning = true; s = strcat(s, ftos(i), " "); //add missing panel number } } if (warning) - dprint("Automatically fixed wrong/missing panel numbers in _hud_panelorder\n"); + LOG_TRACE("Automatically fixed wrong/missing panel numbers in _hud_panelorder\n"); cvar_set("_hud_panelorder", s); if(hud_panelorder_prev) @@ -4964,15 +4824,17 @@ void HUD_Main (void) //now properly set panel_order tokenize_console(s); - for(i = 0; i < HUD_PANEL_NUM; ++i) { + for(i = 0; i < hud_panels_COUNT; ++i) { panel_order[i] = stof(argv(i)); } } hud_draw_maximized = 0; // draw panels in the order specified by panel_order array - for(i = HUD_PANEL_NUM - 1; i >= 0; --i) - HUD_Panel_Draw(hud_panel[panel_order[i]]); + for(i = hud_panels_COUNT - 1; i >= 0; --i) + HUD_Panel_Draw(hud_panels[panel_order[i]]); + + HUD_Vehicle(); hud_draw_maximized = 1; // panels that may be maximized must check this var // draw maximized panels on top @@ -4980,6 +4842,11 @@ void HUD_Main (void) HUD_Panel_Draw(HUD_PANEL(RADAR)); if(autocvar__con_chat_maximized) HUD_Panel_Draw(HUD_PANEL(CHAT)); + if(hud_panel_quickmenu) + HUD_Panel_Draw(HUD_PANEL(QUICKMENU)); + + if (scoreboard_active || intermission == 2) + HUD_Reset(); HUD_Configure_PostDraw();