]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into terencehill/hud_code_restructure
authorterencehill <piuntn@gmail.com>
Sun, 31 Mar 2013 22:16:26 +0000 (00:16 +0200)
committerterencehill <piuntn@gmail.com>
Sun, 31 Mar 2013 22:16:26 +0000 (00:16 +0200)
1  2 
qcsrc/client/Main.qc
qcsrc/client/autocvars.qh
qcsrc/client/hud.qc
qcsrc/client/hud.qh

diff --combined qcsrc/client/Main.qc
index 5b9429ebf070b2b2dcbbc59fff447897bcb04613,173a93194bcacf0a17d676f88ced5ee5eed1bab6..e482ce7a047f4c18e02f01b1578e419233317cf4
@@@ -156,8 -156,7 +156,8 @@@ void CSQC_Init(void
        CALL_ACCUMULATED_FUNCTION(RegisterGametypes);
        CALL_ACCUMULATED_FUNCTION(RegisterNotifications);
        CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes);
 -      
 +      CALL_ACCUMULATED_FUNCTION(RegisterHUD_Panels);
 +
        WaypointSprite_Load();
  
        // precaches
  
        hud_skin_path = strzone(strcat("gfx/hud/", autocvar_hud_skin));
        hud_configure_prev = -1;
 -      tab_panel = -1;
  
        draw_currentSkin = strzone(strcat("gfx/menu/", cvar_string("menu_skin")));
  }
@@@ -1106,6 -1106,12 +1106,12 @@@ void Net_ReadSpawn(
  {
        zoomin_effect = 1;
        current_viewzoom = (1 / bound(1, autocvar_cl_spawnzoom_factor, 16));
+       if(autocvar_cl_unpress_zoom_on_spawn)
+       {
+               localcmd("-zoom\n");
+               button_zoom = FALSE;
+       }
  }
  
  void Net_TeamNagger()
index 555994d73bd5871011a4861028f080a9cf930a4c,150efb1708ca705054fd00d2c30bbb20d6c18091..6243a00ecf5f64761d47ee94f280a8b691be5c58
@@@ -78,6 -78,10 +78,10 @@@ string autocvar_cl_weaponpriority
  float autocvar_cl_zoomfactor;
  float autocvar_cl_zoomsensitivity;
  float autocvar_cl_zoomspeed;
+ var float autocvar_cl_unpress_zoom_on_spawn = 1;
+ var float autocvar_cl_unpress_zoom_on_death = 1;
+ var float autocvar_cl_unpress_zoom_on_weapon_switch = 1;
+ var float autocvar_cl_unpress_attack_on_weapon_switch = 1;
  float autocvar_con_chat;
  float autocvar_con_chatpos;
  float autocvar_con_chatrect;
@@@ -298,7 -302,6 +302,7 @@@ float autocvar_hud_panel_score
  float autocvar_hud_panel_score_rankings;
  float autocvar_hud_panel_timer;
  float autocvar_hud_panel_timer_increment;
 +float autocvar_hud_panel_update_interval;
  float autocvar_hud_panel_vote;
  float autocvar_hud_panel_vote_alreadyvoted_alpha;
  string autocvar_hud_panel_vote_bg_alpha;
diff --combined qcsrc/client/hud.qc
index 03ba971781019141d466209ca994ed7c8d3945dc,bf72c2f467bd9b08551278e36b8eb799a47e7d4b..bb8a646de23752adf239ec488b70014226287771
@@@ -487,9 -487,11 +487,9 @@@ void HUD_Weapons(void
                        return;
                }
        }
 -      else
 -              hud_configure_active_panel = HUD_PANEL_WEAPONS;
  
        // update generic hud functions
 -      HUD_Panel_UpdateCvars(weapons);
 +      HUD_Panel_UpdateCvars();
        HUD_Panel_ApplyFadeAlpha();
  
        draw_beginBoldFont();
@@@ -948,8 -950,10 +948,8 @@@ void HUD_Ammo(void
                if(!autocvar_hud_panel_ammo) return;
                if(spectatee_status == -1) return;
        }
 -      else
 -              hud_configure_active_panel = HUD_PANEL_AMMO;
  
 -      HUD_Panel_UpdateCvars(ammo);
 +      HUD_Panel_UpdateCvars();
        HUD_Panel_ApplyFadeAlpha();
  
        draw_beginBoldFont();
@@@ -1150,12 -1154,14 +1150,12 @@@ void HUD_Powerups(void
        }
        else
        {
 -              hud_configure_active_panel = HUD_PANEL_POWERUPS;
 -
                strength_time = 15;
                shield_time = 27;
                superweapons_time = 13;
        }
  
 -      HUD_Panel_UpdateCvars(powerups);
 +      HUD_Panel_UpdateCvars();
        HUD_Panel_ApplyFadeAlpha();
  
        draw_beginBoldFont();
@@@ -1391,12 -1397,14 +1391,12 @@@ void HUD_HealthArmor(void
        }
        else
        {
 -              hud_configure_active_panel = HUD_PANEL_HEALTHARMOR;
 -
                health = 150;
                armor = 75;
                fuel = 20;
        }
  
 -      HUD_Panel_UpdateCvars(healtharmor);
 +      HUD_Panel_UpdateCvars();
        HUD_Panel_ApplyFadeAlpha();
        vector pos, mySize;
        pos = panel_pos;
@@@ -1648,8 -1656,10 +1648,8 @@@ void HUD_Notify(void
        {
                if(!autocvar_hud_panel_notify) return;
        }
 -      else
 -              hud_configure_active_panel = HUD_PANEL_NOTIFY;
  
 -      HUD_Panel_UpdateCvars(notify);
 +      HUD_Panel_UpdateCvars();
        HUD_Panel_ApplyFadeAlpha();
        vector pos, mySize;
        pos = panel_pos;
@@@ -1785,8 -1795,10 +1785,8 @@@ void HUD_Timer(void
        {
                if(!autocvar_hud_panel_timer) return;
        }
 -      else
 -              hud_configure_active_panel = HUD_PANEL_TIMER;
  
 -      HUD_Panel_UpdateCvars(timer);
 +      HUD_Panel_UpdateCvars();
        HUD_Panel_ApplyFadeAlpha();
  
        draw_beginBoldFont();
@@@ -1853,10 -1865,12 +1853,10 @@@ void HUD_Radar(void
                        if (autocvar_hud_panel_radar != 2 && !teamplay) return;
                }
        }
 -      else
 -              hud_configure_active_panel = HUD_PANEL_RADAR;
  
 -      HUD_Panel_UpdateCvars(radar);
 +      HUD_Panel_UpdateCvars();
        HUD_Panel_ApplyFadeAlpha();
 -      
 +
        float f = 0;
  
        if (hud_panel_radar_maximized && !autocvar__hud_configure)
@@@ -2145,8 -2159,10 +2145,8 @@@ void HUD_Score(void
                if(!autocvar_hud_panel_score) return;
                if(spectatee_status == -1 && (gametype == MAPINFO_TYPE_RACE || gametype == MAPINFO_TYPE_CTS)) return;
        }
 -      else
 -              hud_configure_active_panel = HUD_PANEL_SCORE;
  
 -      HUD_Panel_UpdateCvars(score);
 +      HUD_Panel_UpdateCvars();
        HUD_Panel_ApplyFadeAlpha();
        vector pos, mySize;
        pos = panel_pos;
@@@ -2340,8 -2356,10 +2340,8 @@@ void HUD_RaceTimer (void
                if(!(gametype == MAPINFO_TYPE_RACE || gametype == MAPINFO_TYPE_CTS)) return;
                if(spectatee_status == -1) return;
        }
 -      else
 -              hud_configure_active_panel = HUD_PANEL_RACETIMER;
  
 -      HUD_Panel_UpdateCvars(racetimer);
 +      HUD_Panel_UpdateCvars();
        HUD_Panel_ApplyFadeAlpha();
  
        draw_beginBoldFont();
@@@ -2490,7 -2508,7 +2490,7 @@@ float vote_prev; // previous state of v
  float vote_alpha;
  float vote_change; // "time" when vote_active changed
  
 -void HUD_VoteWindow(void) 
 +void HUD_Vote(void)
  {
        if(autocvar_cl_allow_uid2name == -1 && (gametype == MAPINFO_TYPE_CTS || gametype == MAPINFO_TYPE_RACE || (serverflags & SERVERFLAG_PLAYERSTATS)))
        {
        }
        else
        {
 -              hud_configure_active_panel = HUD_PANEL_VOTE;
 -
                vote_yescount = 3;
                vote_nocount = 2;
                vote_needed = 4;
        if(!vote_alpha)
                return;
  
 -      HUD_Panel_UpdateCvars(vote);
 +      HUD_Panel_UpdateCvars();
        HUD_Panel_ApplyFadeAlpha();
  
        if(uid2name_dialog)
@@@ -3300,8 -3320,10 +3300,8 @@@ void HUD_ModIcons(void
                if(!autocvar_hud_panel_modicons) return;
                if (gametype != MAPINFO_TYPE_CTF && gametype != MAPINFO_TYPE_KEYHUNT && gametype != MAPINFO_TYPE_NEXBALL && gametype != MAPINFO_TYPE_CTS && gametype != MAPINFO_TYPE_RACE && gametype != MAPINFO_TYPE_CA && gametype != MAPINFO_TYPE_FREEZETAG && gametype != MAPINFO_TYPE_KEEPAWAY && gametype != MAPINFO_TYPE_DOMINATION) return;
        }
 -      else
 -              hud_configure_active_panel = HUD_PANEL_MODICONS;
  
 -      HUD_Panel_UpdateCvars(modicons);
 +      HUD_Panel_UpdateCvars();
        HUD_Panel_ApplyFadeAlpha();
  
        draw_beginBoldFont();
  
  // Draw pressed keys (#11)
  //
 -void HUD_DrawPressedKeys(void)
 +void HUD_PressedKeys(void)
  {
        if(!autocvar__hud_configure)
        {
                if(!autocvar_hud_panel_pressedkeys) return;
                if(spectatee_status <= 0 && autocvar_hud_panel_pressedkeys < 2) return;
        }
 -      else
 -              hud_configure_active_panel = HUD_PANEL_PRESSEDKEYS;
  
 -
 -      HUD_Panel_UpdateCvars(pressedkeys);
 +      HUD_Panel_UpdateCvars();
        HUD_Panel_ApplyFadeAlpha();
        vector pos, mySize;
        pos = panel_pos;
@@@ -3429,8 -3454,10 +3429,8 @@@ void HUD_Chat(void
                if(autocvar__con_chat_maximized)
                        if(!hud_draw_maximized) return;
        }
 -      else
 -              hud_configure_active_panel = HUD_PANEL_CHAT;
  
 -      HUD_Panel_UpdateCvars(chat);
 +      HUD_Panel_UpdateCvars();
        HUD_Panel_ApplyFadeAlpha();
  
        if(autocvar__con_chat_maximized && !autocvar__hud_configure) // draw at full screen height if maximized
@@@ -3503,8 -3530,10 +3503,8 @@@ void HUD_EngineInfo(void
        {
                if(!autocvar_hud_panel_engineinfo) return;
        }
 -      else
 -              hud_configure_active_panel = HUD_PANEL_ENGINEINFO;
  
 -      HUD_Panel_UpdateCvars(engineinfo);
 +      HUD_Panel_UpdateCvars();
        HUD_Panel_ApplyFadeAlpha();
        vector pos, mySize;
        pos = panel_pos;
@@@ -3564,8 -3593,10 +3564,8 @@@ void HUD_InfoMessages(void
        {
                if(!autocvar_hud_panel_infomessages) return;
        }
 -      else
 -              hud_configure_active_panel = HUD_PANEL_INFOMESSAGES;
  
 -      HUD_Panel_UpdateCvars(infomessages);
 +      HUD_Panel_UpdateCvars();
        HUD_Panel_ApplyFadeAlpha();
        vector pos, mySize;
        pos = panel_pos;
@@@ -3753,8 -3784,10 +3753,8 @@@ void HUD_Physics(void
                if(spectatee_status == -1 && (autocvar_hud_panel_physics == 1 || autocvar_hud_panel_physics == 3)) return;
                if(autocvar_hud_panel_physics == 3 && !(gametype == MAPINFO_TYPE_RACE || gametype == MAPINFO_TYPE_CTS)) return;
        }
 -      else
 -              hud_configure_active_panel = HUD_PANEL_PHYSICS;
  
 -      HUD_Panel_UpdateCvars(physics);
 +      HUD_Panel_UpdateCvars();
        HUD_Panel_ApplyFadeAlpha();
  
        draw_beginBoldFont();
@@@ -4134,6 -4167,8 +4134,6 @@@ void HUD_CenterPrint (void
        }
        else
        {
 -              hud_configure_active_panel = HUD_PANEL_CENTERPRINT;
 -
                if (!hud_configure_prev)
                        reset_centerprint_messages();
                if (time > hud_configure_cp_generation_time)
                }
        }
  
 -      HUD_Panel_UpdateCvars(centerprint);
 +      HUD_Panel_UpdateCvars();
  
        // this panel doesn't fade when showing the scoreboard
        if(autocvar__menu_alpha)
@@@ -4338,6 -4373,44 +4338,6 @@@ void HUD_Reset (void
                HUD_Mod_CTF_Reset();
  }
  
 -#define HUD_DrawPanel(id)\
 -switch (id) {\
 -      case (HUD_PANEL_RADAR):\
 -              HUD_Radar(); break;\
 -      case (HUD_PANEL_WEAPONS):\
 -              HUD_Weapons(); break;\
 -      case (HUD_PANEL_AMMO):\
 -              HUD_Ammo(); break;\
 -      case (HUD_PANEL_POWERUPS):\
 -              HUD_Powerups(); break;\
 -      case (HUD_PANEL_HEALTHARMOR):\
 -              HUD_HealthArmor(); break;\
 -      case (HUD_PANEL_NOTIFY):\
 -              HUD_Notify(); break;\
 -      case (HUD_PANEL_TIMER):\
 -              HUD_Timer(); break;\
 -      case (HUD_PANEL_SCORE):\
 -              HUD_Score(); break;\
 -      case (HUD_PANEL_RACETIMER):\
 -              HUD_RaceTimer(); break;\
 -      case (HUD_PANEL_VOTE):\
 -              HUD_VoteWindow(); break;\
 -      case (HUD_PANEL_MODICONS):\
 -              HUD_ModIcons(); break;\
 -      case (HUD_PANEL_PRESSEDKEYS):\
 -              HUD_DrawPressedKeys(); break;\
 -      case (HUD_PANEL_CHAT):\
 -              HUD_Chat(); break;\
 -      case (HUD_PANEL_ENGINEINFO):\
 -              HUD_EngineInfo(); break;\
 -      case (HUD_PANEL_INFOMESSAGES):\
 -              HUD_InfoMessages(); break;\
 -      case (HUD_PANEL_PHYSICS):\
 -              HUD_Physics(); break;\
 -      case (HUD_PANEL_CENTERPRINT):\
 -              HUD_CenterPrint(); break;\
 -} ENDS_WITH_CURLY_BRACE
 -
  void HUD_Main (void)
  {
        float i;
        // they must call HUD_Panel_ApplyFadeAlpha(); only when showing the menu
        if(scoreboard_fade_alpha == 1)
        {
 -              HUD_CenterPrint();
 +              (panel = HUD_PANEL(CENTERPRINT)).panel_draw();
                return;
        }
  
                vector color;
                float hud_dock_color_team = autocvar_hud_dock_color_team;
                if((teamplay) && hud_dock_color_team) {
-                       f = stof(getplayerkeyvalue(current_player - 1, "colors"));
-                       color = colormapPaletteColor(mod(f, 16), 1) * hud_dock_color_team;
+                       color = colormapPaletteColor(myteam, 1) * hud_dock_color_team;
                }
                else if(autocvar_hud_configure_teamcolorforced && autocvar__hud_configure && hud_dock_color_team) {
                        color = '1 0 0' * hud_dock_color_team;
        hud_draw_maximized = 0;
        // draw panels in order specified by panel_order array
        for(i = HUD_PANEL_NUM - 1; i >= 0; --i)
 -              HUD_DrawPanel(panel_order[i]);
 +              (panel = hud_panel[panel_order[i]]).panel_draw();
  
        hud_draw_maximized = 1; // panels that may be maximized must check this var
        // draw maximized panels on top
        if(hud_panel_radar_maximized)
 -              HUD_Radar();
 +              (panel = HUD_PANEL(RADAR)).panel_draw();
        if(autocvar__con_chat_maximized)
 -              HUD_Chat();
 +              (panel = HUD_PANEL(CHAT)).panel_draw();
  
        if(autocvar__hud_configure)
        {
 -              if(tab_panel != -1)
 +              if(tab_panel)
                {
 -                      HUD_Panel_UpdatePosSizeForId(tab_panel)
 +                      panel = tab_panel;
 +                      HUD_Panel_UpdatePosSize()
                        drawfill(panel_pos - '1 1 0' * panel_bg_border, panel_size + '2 2 0' * panel_bg_border, '1 1 1', .2, DRAWFLAG_NORMAL);
                }
 -              if(highlightedPanel != -1)
 +              if(highlightedPanel)
                {
 -                      HUD_Panel_UpdatePosSizeForId(highlightedPanel);
 +                      panel = highlightedPanel;
 +                      HUD_Panel_UpdatePosSize()
                        HUD_Panel_HlBorder(panel_bg_border + 1.5 * hlBorderSize, '0 0.5 1', 0.25 * (1 - autocvar__menu_alpha));
                }
                if(!hud_configure_prev || hud_configure_prev == -1)
                {
                        if(autocvar_hud_cursormode) { setcursormode(1); }
                        hudShiftState = 0;
 +                      for(i = HUD_PANEL_NUM - 1; i >= 0; --i)
 +                              hud_panel[panel_order[i]].update_time = time;
                }
        }
        else if (hud_configure_prev && autocvar_hud_cursormode)
diff --combined qcsrc/client/hud.qh
index 62734abb7273a5018ac11e0142ba6ed21cf500d7,bef2079b31920637c695ce579b4835d40281dab7..4d52c28c630d31f91b279968196b2966b4c7837c
@@@ -1,10 -1,4 +1,10 @@@
 -float panel_order[HUD_PANEL_NUM];
 +#define HUD_PANEL_MAX 24
 +entity hud_panel[HUD_PANEL_MAX];
 +#define HUD_PANEL_FIRST 0
 +float HUD_PANEL_NUM;
 +float HUD_PANEL_LAST;
 +
 +float panel_order[HUD_PANEL_MAX];
  string hud_panelorder_prev;
  
  float hud_draw_maximized;
@@@ -14,7 -8,7 +14,7 @@@ vector mousepos
  vector panel_click_distance; // mouse cursor distance from the top left corner of the panel (saved only upon a click)
  vector panel_click_resizeorigin; // coordinates for opposite point when resizing
  float resizeCorner; // 1 = topleft, 2 = topright, 3 = bottomleft, 4 = bottomright
 -var float highlightedPanel = -1;
 +entity highlightedPanel;
  float highlightedAction; // 0 = nothing, 1 = move, 2 = resize
  
  const float BORDER_MULTIPLIER = 0.25;
@@@ -56,25 -50,15 +56,25 @@@ string hud_skin_prev
  
  var vector progressbar_color;
  
 -var float highlightedPanel_backup = -1;
 +entity highlightedPanel_backup;
  var vector panel_pos_backup;
  var vector panel_size_backup;
  
 -var float highlightedPanel_copied = -1; //this is good only to know if there is something copied
  var vector panel_size_copied;
  
 -var float hud_configure_active_panel; // this panel has recently referred the UpdateCvars macro
 -var string panel_name;
 +entity panel;
 +.string panel_name;
 +.float panel_id;
 +.vector current_panel_pos;
 +.vector current_panel_size;
 +.string current_panel_bg;
 +.float current_panel_bg_alpha;
 +.float current_panel_bg_border;
 +.vector current_panel_bg_color;
 +.float current_panel_bg_color_team;
 +.float current_panel_bg_padding;
 +.float current_panel_fg_alpha;
 +.float update_time;
  var float panel_enabled;
  var vector panel_pos;
  var vector panel_size;
@@@ -92,51 -76,8 +92,51 @@@ var string panel_bg_border_str
  var float panel_bg_padding;
  var string panel_bg_padding_str;
  
 +.void() panel_draw;
 +
  float current_player;
  
 +
 +#define HUD_PANELS \
 +      HUD_PANEL(WEAPONS      , HUD_Weapons      , weapons) \
 +      HUD_PANEL(AMMO         , HUD_Ammo         , ammo) \
 +      HUD_PANEL(POWERUPS     , HUD_Powerups     , powerups) \
 +      HUD_PANEL(HEALTHARMOR  , HUD_HealthArmor  , healtharmor) \
 +      HUD_PANEL(NOTIFY       , HUD_Notify       , notify) \
 +      HUD_PANEL(TIMER        , HUD_Timer        , timer) \
 +      HUD_PANEL(RADAR        , HUD_Radar        , radar) \
 +      HUD_PANEL(SCORE        , HUD_Score        , score) \
 +      HUD_PANEL(RACETIMER    , HUD_RaceTimer    , racetimer) \
 +      HUD_PANEL(VOTE         , HUD_Vote         , vote) \
 +      HUD_PANEL(MODICONS     , HUD_ModIcons     , modicons) \
 +      HUD_PANEL(PRESSEDKEYS  , HUD_PressedKeys  , pressedkeys) \
 +      HUD_PANEL(CHAT         , HUD_Chat         , chat) \
 +      HUD_PANEL(ENGINEINFO   , HUD_EngineInfo   , engineinfo) \
 +      HUD_PANEL(INFOMESSAGES , HUD_InfoMessages , infomessages) \
 +      HUD_PANEL(PHYSICS      , HUD_Physics      , physics) \
 +      HUD_PANEL(CENTERPRINT  , HUD_CenterPrint  , centerprint)
 +
 +#define HUD_PANEL(NAME,draw_func,name) \
 +      float HUD_PANEL_##NAME; \
 +      void ##draw_func(void); \
 +      void RegisterHUD_Panel_##NAME() \
 +      { \
 +              HUD_PANEL_LAST = HUD_PANEL_##NAME = HUD_PANEL_NUM; \
 +              entity hud_panelent = spawn(); \
 +              hud_panel[HUD_PANEL_##NAME] = hud_panelent; \
 +              hud_panelent.panel_name = #name; \
 +              hud_panelent.panel_id = HUD_PANEL_##NAME; \
 +              hud_panelent.panel_draw = ##draw_func; \
 +              ++HUD_PANEL_NUM; \
 +      } \
 +      ACCUMULATE_FUNCTION(RegisterHUD_Panels, RegisterHUD_Panel_##NAME)
 +
 +HUD_PANELS
 +#undef HUD_PANEL
 +
 +#define HUD_PANEL(NAME) hud_panel[HUD_PANEL_##NAME]
 +
 +
  // Because calling lots of functions in QC apparently cuts fps in half on many machines:
  // ----------------------
  // MACRO HELL STARTS HERE
@@@ -185,7 -126,7 +185,7 @@@ if(!autocvar__hud_configure && panel_bg
  // Get value for panel_bg_color: if "" fetch default, else use panel_bg_color. Convert pants, shirt or teamcolor into a vector.
  #define HUD_Panel_GetColor()\
  if((teamplay) && panel_bg_color_team) {\
-       panel_bg_color = colormapPaletteColor(mod(stof(getplayerkeyvalue(current_player - 1, "colors")), 16), 1) * panel_bg_color_team;\
+       panel_bg_color = colormapPaletteColor(myteam, 1) * panel_bg_color_team;\
  } else if (autocvar_hud_configure_teamcolorforced && autocvar__hud_configure && panel_bg_color_team) {\
        panel_bg_color = '1 0 0' * panel_bg_color_team;\
  } else {\
@@@ -212,7 -153,7 +212,7 @@@ if(panel_bg_color_team_str == "") {
  
  // the check doesn't allow to fade this panel when showing the panel-specific menu dialog
  #define HUD_Panel_ApplyFadeAlpha()\
 -if(!(menu_enabled == 2 && highlightedPanel == hud_configure_active_panel))\
 +if(!(menu_enabled == 2 && panel == highlightedPanel))\
  {\
        panel_bg_alpha *= hud_fade_alpha;\
        panel_fg_alpha *= hud_fade_alpha;\
@@@ -228,7 -169,7 +228,7 @@@ panel_bg_alpha = stof(panel_bg_alpha_st
  if(autocvar__hud_configure) {\
        if(!panel_enabled)\
                panel_bg_alpha = 0.25;\
 -      else if(menu_enabled == 2 && highlightedPanel == hud_configure_active_panel)\
 +      else if(menu_enabled == 2 && panel == highlightedPanel)\
                panel_bg_alpha = (1 - autocvar__menu_alpha) * max(cvar("hud_configure_bg_minalpha"), panel_bg_alpha) + autocvar__menu_alpha * panel_bg_alpha;\
        else\
                panel_bg_alpha = max(cvar("hud_configure_bg_minalpha"), panel_bg_alpha);\
@@@ -315,60 -256,90 +315,60 @@@ else
        }\
  }
  
 -// Update all common cvars of given panel name
 -#define HUD_Panel_UpdateCvars(name) \
 -panel_enabled = autocvar_hud_panel_##name; \
 -panel_pos = stov(cvar_string("hud_panel_" #name "_pos")); \
 -panel_size = stov(cvar_string("hud_panel_" #name "_size")); \
 -panel_bg_str = cvar_string("hud_panel_" #name "_bg"); \
 -panel_bg_color_str = cvar_string("hud_panel_" #name "_bg_color"); \
 -panel_bg_color_team_str = cvar_string("hud_panel_" #name "_bg_color_team"); \
 -panel_bg_alpha_str = cvar_string("hud_panel_" #name "_bg_alpha"); \
 -panel_bg_border_str = cvar_string("hud_panel_" #name "_bg_border"); \
 -panel_bg_padding_str = cvar_string("hud_panel_" #name "_bg_padding"); \
 -HUD_Panel_GetStringVars()\
 -if(menu_enabled == 2 && hud_configure_active_panel == highlightedPanel) {\
 -      HUD_Panel_GetMenuSize()\
 -      HUD_Panel_GetMenuPos()\
 +// NOTE: in hud_configure mode cvars must be reloaded every frame
 +#define HUD_Panel_UpdateCvars() \
 +if(panel.update_time < time) { \
 +      if(autocvar__hud_configure) panel_enabled = cvar(strcat("hud_panel_", panel.panel_name)); \
 +      panel_pos = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_pos"))); \
 +      panel_size = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_size"))); \
 +      panel_bg_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg")); \
 +      panel_bg_color_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_color")); \
 +      panel_bg_color_team_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_color_team")); \
 +      panel_bg_alpha_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_alpha")); \
 +      panel_bg_border_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_border")); \
 +      panel_bg_padding_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_padding")); \
 +      HUD_Panel_GetStringVars()\
 +      if(menu_enabled == 2 && panel == highlightedPanel) {\
 +              HUD_Panel_GetMenuSize()\
 +              HUD_Panel_GetMenuPos()\
 +      } \
 +      panel.current_panel_pos = panel_pos; \
 +      panel.current_panel_size = panel_size; \
 +      if(panel.current_panel_bg != "") \
 +              strunzone(panel.current_panel_bg); \
 +      panel.current_panel_bg = strzone(panel_bg); \
 +      panel.current_panel_bg_alpha = panel_bg_alpha; \
 +      panel.current_panel_bg_border = panel_bg_border; \
 +      panel.current_panel_bg_color = panel_bg_color; \
 +      panel.current_panel_bg_color_team = panel_bg_color_team; \
 +      panel.current_panel_bg_padding = panel_bg_padding; \
 +      panel.current_panel_fg_alpha = panel_fg_alpha; \
 +      panel.update_time = (autocvar__hud_configure) ? time : time + autocvar_hud_panel_update_interval; \
 +} else { \
 +      panel_pos = panel.current_panel_pos; \
 +      panel_size = panel.current_panel_size; \
 +      panel_bg = panel.current_panel_bg; \
 +      panel_bg_alpha = panel.current_panel_bg_alpha; \
 +      panel_bg_border = panel.current_panel_bg_border; \
 +      panel_bg_color = panel.current_panel_bg_color; \
 +      panel_bg_color_team = panel.current_panel_bg_color_team; \
 +      panel_bg_padding = panel.current_panel_bg_padding; \
 +      panel_fg_alpha = panel.current_panel_fg_alpha; \
  } ENDS_WITH_CURLY_BRACE
  
 -// FTEQCC I HATE YOU WHY DO YOU MAKE ME DO THIS??? :(
 -// max macro length is 1024 characters, I must split it up :(
 -
 -// Update all common cvars of given panel id
 -#define HUD_Panel_UpdateCvarsForId_Part2(id) \
 -switch(id) { \
 -      case HUD_PANEL_INFOMESSAGES: HUD_Panel_UpdateCvars(infomessages) break; \
 -      case HUD_PANEL_PHYSICS: HUD_Panel_UpdateCvars(physics); break;\
 -      case HUD_PANEL_CENTERPRINT: HUD_Panel_UpdateCvars(centerprint); break;\
 -}
 -
 -#define HUD_Panel_UpdateCvarsForId(id) \
 -switch(id) { \
 -      case HUD_PANEL_WEAPONS: HUD_Panel_UpdateCvars(weapons) break; \
 -      case HUD_PANEL_AMMO: HUD_Panel_UpdateCvars(ammo) break; \
 -      case HUD_PANEL_POWERUPS: HUD_Panel_UpdateCvars(powerups) break; \
 -      case HUD_PANEL_HEALTHARMOR: HUD_Panel_UpdateCvars(healtharmor) break; \
 -      case HUD_PANEL_NOTIFY: HUD_Panel_UpdateCvars(notify) break; \
 -      case HUD_PANEL_TIMER: HUD_Panel_UpdateCvars(timer) break; \
 -      case HUD_PANEL_RADAR: HUD_Panel_UpdateCvars(radar) break; \
 -      case HUD_PANEL_SCORE: HUD_Panel_UpdateCvars(score) break; \
 -      case HUD_PANEL_RACETIMER: HUD_Panel_UpdateCvars(racetimer) break; \
 -      case HUD_PANEL_VOTE: HUD_Panel_UpdateCvars(vote) break; \
 -      case HUD_PANEL_MODICONS: HUD_Panel_UpdateCvars(modicons) break; \
 -      case HUD_PANEL_PRESSEDKEYS: HUD_Panel_UpdateCvars(pressedkeys) break; \
 -      case HUD_PANEL_CHAT: HUD_Panel_UpdateCvars(chat) break; \
 -      case HUD_PANEL_ENGINEINFO: HUD_Panel_UpdateCvars(engineinfo) break; \
 -      default: HUD_Panel_UpdateCvarsForId_Part2(id)\
 -}
 -
 -#define HUD_Panel_UpdatePosSize(name) \
 -panel_pos = stov(cvar_string("hud_panel_" #name "_pos")); \
 -panel_size = stov(cvar_string("hud_panel_" #name "_size")); \
 +#define HUD_Panel_UpdatePosSize() {\
 +panel_enabled = cvar(strcat("hud_panel_", panel.panel_name)); \
 +panel_pos = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_pos"))); \
 +panel_size = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_size"))); \
  HUD_Panel_GetScaledVectors()\
 -if(menu_enabled == 2 && hud_configure_active_panel == highlightedPanel) {\
 +if(menu_enabled == 2 && panel == highlightedPanel) {\
        HUD_Panel_GetMenuSize()\
        HUD_Panel_GetMenuPos()\
  }\
 -panel_bg_border_str = cvar_string("hud_panel_" #name "_bg_border"); \
 -HUD_Panel_GetBorder()
 -
 -// Update pos and size of given panel id
 -#define HUD_Panel_UpdatePosSizeForId_Part2(id) \
 -switch(id) { \
 -      case HUD_PANEL_INFOMESSAGES: HUD_Panel_UpdatePosSize(infomessages) break;\
 -      case HUD_PANEL_PHYSICS: HUD_Panel_UpdatePosSize(physics); break;\
 -      case HUD_PANEL_CENTERPRINT: HUD_Panel_UpdatePosSize(centerprint); break;\
 -}
 +panel_bg_border_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_border")); \
 +HUD_Panel_GetBorder() \
 +} ENDS_WITH_CURLY_BRACE
  
 -#define HUD_Panel_UpdatePosSizeForId(id) \
 -switch(id) { \
 -      case HUD_PANEL_WEAPONS: HUD_Panel_UpdatePosSize(weapons) break;\
 -      case HUD_PANEL_AMMO: HUD_Panel_UpdatePosSize(ammo) break;\
 -      case HUD_PANEL_POWERUPS: HUD_Panel_UpdatePosSize(powerups) break;\
 -      case HUD_PANEL_HEALTHARMOR: HUD_Panel_UpdatePosSize(healtharmor) break;\
 -      case HUD_PANEL_NOTIFY: HUD_Panel_UpdatePosSize(notify) break;\
 -      case HUD_PANEL_TIMER: HUD_Panel_UpdatePosSize(timer) break;\
 -      case HUD_PANEL_RADAR: HUD_Panel_UpdatePosSize(radar) break;\
 -      case HUD_PANEL_SCORE: HUD_Panel_UpdatePosSize(score) break;\
 -      case HUD_PANEL_RACETIMER: HUD_Panel_UpdatePosSize(racetimer) break;\
 -      case HUD_PANEL_VOTE: HUD_Panel_UpdatePosSize(vote) break;\
 -      case HUD_PANEL_MODICONS: HUD_Panel_UpdatePosSize(modicons) break;\
 -      case HUD_PANEL_PRESSEDKEYS: HUD_Panel_UpdatePosSize(pressedkeys) break;\
 -      case HUD_PANEL_CHAT: HUD_Panel_UpdatePosSize(chat) break;\
 -      case HUD_PANEL_ENGINEINFO: HUD_Panel_UpdatePosSize(engineinfo) break;\
 -      default: HUD_Panel_UpdatePosSizeForId_Part2(id)\
 -}
  
  #define KN_MAX_ENTRIES 10