]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/hud/hud_config.qc
Merge branch 'master' into Mario/cts_respawn_clear
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / hud / hud_config.qc
index 6b05078d51e0800eb0a359e04603c46f1ef67aab..4897ba55176d6e4e47fa8ec5b9e508467c0199d3 100644 (file)
@@ -1,13 +1,11 @@
 #include "hud_config.qh"
 
 #include "hud.qh"
+#include "panel/scoreboard.qh"
 
 #define HUD_Write(s) fputs(fh, s)
-// q: quoted, n: not quoted
-#define HUD_Write_Cvar_n(cvar) HUD_Write(strcat("seta ", cvar, " ", cvar_string(cvar), "\n"))
-#define HUD_Write_Cvar_q(cvar) HUD_Write(strcat("seta ", cvar, " \"", cvar_string(cvar), "\"\n"))
-#define HUD_Write_PanelCvar_n(cvar_suf) HUD_Write_Cvar_n(strcat("hud_panel_", panel.panel_name, cvar_suf))
-#define HUD_Write_PanelCvar_q(cvar_suf) HUD_Write_Cvar_q(strcat("hud_panel_", panel.panel_name, cvar_suf))
+#define HUD_Write_Cvar(cvar) HUD_Write(strcat("seta ", cvar, " \"", cvar_string(cvar), "\"\n"))
+#define HUD_Write_PanelCvar(cvar_suf) HUD_Write_Cvar(strcat("hud_panel_", panel.panel_name, cvar_suf))
 // Save the config
 void HUD_Panel_ExportCfg(string cfgname)
 {
@@ -16,40 +14,46 @@ void HUD_Panel_ExportCfg(string cfgname)
        fh = fopen(filename, FILE_WRITE);
        if(fh >= 0)
        {
-               HUD_Write_Cvar_q("hud_skin");
-               HUD_Write_Cvar_q("hud_panel_bg");
-               HUD_Write_Cvar_q("hud_panel_bg_color");
-               HUD_Write_Cvar_q("hud_panel_bg_color_team");
-               HUD_Write_Cvar_q("hud_panel_bg_alpha");
-               HUD_Write_Cvar_q("hud_panel_bg_border");
-               HUD_Write_Cvar_q("hud_panel_bg_padding");
-               HUD_Write_Cvar_q("hud_panel_fg_alpha");
+               HUD_Write("//title \n");
+               HUD_Write("//author \n");
+               HUD_Write("\n");
+               HUD_Write_Cvar("hud_skin");
+               HUD_Write_Cvar("hud_panel_bg");
+               HUD_Write_Cvar("hud_panel_bg_color");
+               HUD_Write_Cvar("hud_panel_bg_color_team");
+               HUD_Write_Cvar("hud_panel_bg_alpha");
+               HUD_Write_Cvar("hud_panel_bg_border");
+               HUD_Write_Cvar("hud_panel_bg_padding");
+               HUD_Write_Cvar("hud_panel_fg_alpha");
                HUD_Write("\n");
 
-               HUD_Write_Cvar_q("hud_dock");
-               HUD_Write_Cvar_q("hud_dock_color");
-               HUD_Write_Cvar_q("hud_dock_color_team");
-               HUD_Write_Cvar_q("hud_dock_alpha");
+               HUD_Write_Cvar("hud_dock");
+               HUD_Write_Cvar("hud_dock_color");
+               HUD_Write_Cvar("hud_dock_color_team");
+               HUD_Write_Cvar("hud_dock_alpha");
                HUD_Write("\n");
 
-               HUD_Write_Cvar_q("hud_progressbar_alpha");
-               HUD_Write_Cvar_q("hud_progressbar_strength_color");
-               HUD_Write_Cvar_q("hud_progressbar_shield_color");
-               HUD_Write_Cvar_q("hud_progressbar_health_color");
-               HUD_Write_Cvar_q("hud_progressbar_armor_color");
-               HUD_Write_Cvar_q("hud_progressbar_fuel_color");
-               HUD_Write_Cvar_q("hud_progressbar_nexball_color");
-               HUD_Write_Cvar_q("hud_progressbar_speed_color");
-               HUD_Write_Cvar_q("hud_progressbar_acceleration_color");
-               HUD_Write_Cvar_q("hud_progressbar_acceleration_neg_color");
+               HUD_Write_Cvar("hud_progressbar_alpha");
+               HUD_Write_Cvar("hud_progressbar_strength_color");
+               HUD_Write_Cvar("hud_progressbar_superweapons_color");
+               HUD_Write_Cvar("hud_progressbar_shield_color");
+               HUD_Write_Cvar("hud_progressbar_health_color");
+               HUD_Write_Cvar("hud_progressbar_armor_color");
+               HUD_Write_Cvar("hud_progressbar_fuel_color");
+               HUD_Write_Cvar("hud_progressbar_nexball_color");
+               HUD_Write_Cvar("hud_progressbar_speed_color");
+               HUD_Write_Cvar("hud_progressbar_acceleration_color");
+               HUD_Write_Cvar("hud_progressbar_acceleration_neg_color");
+               HUD_Write_Cvar("hud_progressbar_vehicles_ammo1_color");
+               HUD_Write_Cvar("hud_progressbar_vehicles_ammo2_color");
                HUD_Write("\n");
 
-               HUD_Write_Cvar_q("_hud_panelorder");
+               HUD_Write_Cvar("_hud_panelorder");
                HUD_Write("\n");
 
-               HUD_Write_Cvar_q("hud_configure_grid");
-               HUD_Write_Cvar_q("hud_configure_grid_xsize");
-               HUD_Write_Cvar_q("hud_configure_grid_ysize");
+               HUD_Write_Cvar("hud_configure_grid");
+               HUD_Write_Cvar("hud_configure_grid_xsize");
+               HUD_Write_Cvar("hud_configure_grid_ysize");
                HUD_Write("\n");
 
                // common cvars for all panels
@@ -57,157 +61,173 @@ void HUD_Panel_ExportCfg(string cfgname)
                {
                        panel = hud_panels_from(i);
 
-                       HUD_Write_PanelCvar_n("");
-                       HUD_Write_PanelCvar_q("_pos");
-                       HUD_Write_PanelCvar_q("_size");
-                       HUD_Write_PanelCvar_q("_bg");
-                       HUD_Write_PanelCvar_q("_bg_color");
-                       HUD_Write_PanelCvar_q("_bg_color_team");
-                       HUD_Write_PanelCvar_q("_bg_alpha");
-                       HUD_Write_PanelCvar_q("_bg_border");
-                       HUD_Write_PanelCvar_q("_bg_padding");
+                       HUD_Write_PanelCvar("_pos");
+                       HUD_Write_PanelCvar("_size");
+                       HUD_Write_PanelCvar("_bg");
+                       HUD_Write_PanelCvar("_bg_color");
+                       HUD_Write_PanelCvar("_bg_color_team");
+                       HUD_Write_PanelCvar("_bg_alpha");
+                       HUD_Write_PanelCvar("_bg_border");
+                       HUD_Write_PanelCvar("_bg_padding");
                        switch(panel) {
                                case HUD_PANEL_WEAPONS:
-                                       HUD_Write_PanelCvar_q("_accuracy");
-                                       HUD_Write_PanelCvar_q("_label");
-                                       HUD_Write_PanelCvar_q("_label_scale");
-                                       HUD_Write_PanelCvar_q("_complainbubble");
-                                       HUD_Write_PanelCvar_q("_complainbubble_padding");
-                                       HUD_Write_PanelCvar_q("_complainbubble_time");
-                                       HUD_Write_PanelCvar_q("_complainbubble_fadetime");
-                                       HUD_Write_PanelCvar_q("_complainbubble_color_outofammo");
-                                       HUD_Write_PanelCvar_q("_complainbubble_color_donthave");
-                                       HUD_Write_PanelCvar_q("_complainbubble_color_unavailable");
-                                       HUD_Write_PanelCvar_q("_ammo");
-                                       HUD_Write_PanelCvar_q("_ammo_color");
-                                       HUD_Write_PanelCvar_q("_ammo_alpha");
-                                       HUD_Write_PanelCvar_q("_aspect");
-                                       HUD_Write_PanelCvar_q("_timeout");
-                                       HUD_Write_PanelCvar_q("_timeout_effect");
-                                       HUD_Write_PanelCvar_q("_timeout_fadebgmin");
-                                       HUD_Write_PanelCvar_q("_timeout_fadefgmin");
-                                       HUD_Write_PanelCvar_q("_timeout_speed_in");
-                                       HUD_Write_PanelCvar_q("_timeout_speed_out");
-                                       HUD_Write_PanelCvar_q("_onlyowned");
-                                       HUD_Write_PanelCvar_q("_noncurrent_alpha");
-                                       HUD_Write_PanelCvar_q("_noncurrent_scale");
+                                       HUD_Write_PanelCvar("_accuracy");
+                                       HUD_Write_PanelCvar("_label");
+                                       HUD_Write_PanelCvar("_label_scale");
+                                       HUD_Write_PanelCvar("_complainbubble");
+                                       HUD_Write_PanelCvar("_complainbubble_padding");
+                                       HUD_Write_PanelCvar("_complainbubble_time");
+                                       HUD_Write_PanelCvar("_complainbubble_fadetime");
+                                       HUD_Write_PanelCvar("_complainbubble_color_outofammo");
+                                       HUD_Write_PanelCvar("_complainbubble_color_donthave");
+                                       HUD_Write_PanelCvar("_complainbubble_color_unavailable");
+                                       HUD_Write_PanelCvar("_ammo");
+                                       HUD_Write_PanelCvar("_ammo_color");
+                                       HUD_Write_PanelCvar("_ammo_alpha");
+                                       HUD_Write_PanelCvar("_aspect");
+                                       HUD_Write_PanelCvar("_timeout");
+                                       HUD_Write_PanelCvar("_timeout_effect");
+                                       HUD_Write_PanelCvar("_timeout_fadebgmin");
+                                       HUD_Write_PanelCvar("_timeout_fadefgmin");
+                                       HUD_Write_PanelCvar("_timeout_speed_in");
+                                       HUD_Write_PanelCvar("_timeout_speed_out");
+                                       HUD_Write_PanelCvar("_onlyowned");
+                                       HUD_Write_PanelCvar("_noncurrent_alpha");
+                                       HUD_Write_PanelCvar("_noncurrent_scale");
                                        break;
                                case HUD_PANEL_AMMO:
-                                       HUD_Write_PanelCvar_q("_onlycurrent");
-                                       HUD_Write_PanelCvar_q("_noncurrent_alpha");
-                                       HUD_Write_PanelCvar_q("_noncurrent_scale");
-                                       HUD_Write_PanelCvar_q("_iconalign");
-                                       HUD_Write_PanelCvar_q("_progressbar");
-                                       HUD_Write_PanelCvar_q("_progressbar_name");
-                                       HUD_Write_PanelCvar_q("_progressbar_xoffset");
-                                       HUD_Write_PanelCvar_q("_text");
+                                       HUD_Write_PanelCvar("_onlycurrent");
+                                       HUD_Write_PanelCvar("_noncurrent_alpha");
+                                       HUD_Write_PanelCvar("_noncurrent_scale");
+                                       HUD_Write_PanelCvar("_iconalign");
+                                       HUD_Write_PanelCvar("_progressbar");
+                                       HUD_Write_PanelCvar("_progressbar_name");
+                                       HUD_Write_PanelCvar("_progressbar_xoffset");
+                                       HUD_Write_PanelCvar("_text");
                                        break;
                                case HUD_PANEL_POWERUPS:
-                                       HUD_Write_PanelCvar_q("_iconalign");
-                                       HUD_Write_PanelCvar_q("_baralign");
-                                       HUD_Write_PanelCvar_q("_progressbar");
-                                       HUD_Write_PanelCvar_q("_text");
+                                       HUD_Write_PanelCvar("_iconalign");
+                                       HUD_Write_PanelCvar("_baralign");
+                                       HUD_Write_PanelCvar("_progressbar");
+                                       HUD_Write_PanelCvar("_text");
                                        break;
                                case HUD_PANEL_HEALTHARMOR:
-                                       HUD_Write_PanelCvar_q("_flip");
-                                       HUD_Write_PanelCvar_q("_iconalign");
-                                       HUD_Write_PanelCvar_q("_baralign");
-                                       HUD_Write_PanelCvar_q("_progressbar");
-                                       HUD_Write_PanelCvar_q("_progressbar_health");
-                                       HUD_Write_PanelCvar_q("_progressbar_armor");
-                                       HUD_Write_PanelCvar_q("_progressbar_gfx");
-                                       HUD_Write_PanelCvar_q("_progressbar_gfx_smooth");
-                                       HUD_Write_PanelCvar_q("_text");
+                                       HUD_Write_PanelCvar("_flip");
+                                       HUD_Write_PanelCvar("_iconalign");
+                                       HUD_Write_PanelCvar("_baralign");
+                                       HUD_Write_PanelCvar("_progressbar");
+                                       HUD_Write_PanelCvar("_progressbar_health");
+                                       HUD_Write_PanelCvar("_progressbar_armor");
+                                       HUD_Write_PanelCvar("_progressbar_gfx");
+                                       HUD_Write_PanelCvar("_progressbar_gfx_smooth");
+                                       HUD_Write_PanelCvar("_combined");
+                                       HUD_Write_PanelCvar("_text");
                                        break;
                                case HUD_PANEL_NOTIFY:
-                                       HUD_Write_PanelCvar_q("_flip");
-                                       HUD_Write_PanelCvar_q("_fontsize");
-                                       HUD_Write_PanelCvar_q("_time");
-                                       HUD_Write_PanelCvar_q("_fadetime");
-                                       HUD_Write_PanelCvar_q("_icon_aspect");
+                                       HUD_Write_PanelCvar("_flip");
+                                       HUD_Write_PanelCvar("_fontsize");
+                                       HUD_Write_PanelCvar("_time");
+                                       HUD_Write_PanelCvar("_fadetime");
+                                       HUD_Write_PanelCvar("_icon_aspect");
                                        break;
                                case HUD_PANEL_TIMER:
-                                       HUD_Write_PanelCvar_q("_increment");
                                        break;
                                case HUD_PANEL_RADAR:
-                                       HUD_Write_PanelCvar_q("_foreground_alpha");
-                                       HUD_Write_PanelCvar_q("_rotation");
-                                       HUD_Write_PanelCvar_q("_zoommode");
-                                       HUD_Write_PanelCvar_q("_scale");
-                                       HUD_Write_PanelCvar_q("_maximized_scale");
-                                       HUD_Write_PanelCvar_q("_maximized_size");
-                                       HUD_Write_PanelCvar_q("_maximized_rotation");
-                                       HUD_Write_PanelCvar_q("_maximized_zoommode");
+                                       HUD_Write_PanelCvar("_foreground_alpha");
+                                       HUD_Write_PanelCvar("_rotation");
+                                       HUD_Write_PanelCvar("_zoommode");
+                                       HUD_Write_PanelCvar("_scale");
+                                       HUD_Write_PanelCvar("_maximized_scale");
+                                       HUD_Write_PanelCvar("_maximized_size");
+                                       HUD_Write_PanelCvar("_maximized_rotation");
+                                       HUD_Write_PanelCvar("_maximized_zoommode");
                                        break;
                                case HUD_PANEL_SCORE:
-                                       HUD_Write_PanelCvar_q("_rankings");
+                                       HUD_Write_PanelCvar("_rankings");
                                        break;
                                case HUD_PANEL_VOTE:
-                                       HUD_Write_PanelCvar_q("_alreadyvoted_alpha");
+                                       HUD_Write_PanelCvar("_alreadyvoted_alpha");
                                        break;
                                case HUD_PANEL_MODICONS:
-                                       HUD_Write_PanelCvar_q("_ca_layout");
-                                       HUD_Write_PanelCvar_q("_dom_layout");
-                                       HUD_Write_PanelCvar_q("_freezetag_layout");
+                                       HUD_Write_PanelCvar("_ca_layout");
+                                       HUD_Write_PanelCvar("_dom_layout");
+                                       HUD_Write_PanelCvar("_freezetag_layout");
                                        break;
                                case HUD_PANEL_PRESSEDKEYS:
-                                       HUD_Write_PanelCvar_q("_aspect");
-                                       HUD_Write_PanelCvar_q("_attack");
+                                       HUD_Write_PanelCvar("_aspect");
+                                       HUD_Write_PanelCvar("_attack");
                                        break;
                                case HUD_PANEL_ENGINEINFO:
-                                       HUD_Write_PanelCvar_q("_framecounter_time");
-                                       HUD_Write_PanelCvar_q("_framecounter_decimals");
+                                       HUD_Write_PanelCvar("_framecounter_time");
+                                       HUD_Write_PanelCvar("_framecounter_decimals");
                                        break;
                                case HUD_PANEL_INFOMESSAGES:
-                                       HUD_Write_PanelCvar_q("_flip");
+                                       HUD_Write_PanelCvar("_flip");
                                        break;
                                case HUD_PANEL_PHYSICS:
-                                       HUD_Write_PanelCvar_q("_speed_unit");
-                                       HUD_Write_PanelCvar_q("_speed_unit_show");
-                                       HUD_Write_PanelCvar_q("_speed_max");
-                                       HUD_Write_PanelCvar_q("_speed_vertical");
-                                       HUD_Write_PanelCvar_q("_topspeed");
-                                       HUD_Write_PanelCvar_q("_topspeed_time");
-                                       HUD_Write_PanelCvar_q("_acceleration_max");
-                                       HUD_Write_PanelCvar_q("_acceleration_vertical");
-                                       HUD_Write_PanelCvar_q("_flip");
-                                       HUD_Write_PanelCvar_q("_baralign");
-                                       HUD_Write_PanelCvar_q("_progressbar");
-                                       HUD_Write_PanelCvar_q("_progressbar_acceleration_mode");
-                                       HUD_Write_PanelCvar_q("_progressbar_acceleration_scale");
-                                       HUD_Write_PanelCvar_q("_progressbar_acceleration_nonlinear");
-                                       HUD_Write_PanelCvar_q("_text");
-                                       HUD_Write_PanelCvar_q("_text_scale");
+                                       HUD_Write_PanelCvar("_speed_unit_show");
+                                       HUD_Write_PanelCvar("_speed_max");
+                                       HUD_Write_PanelCvar("_speed_vertical");
+                                       HUD_Write_PanelCvar("_topspeed");
+                                       HUD_Write_PanelCvar("_topspeed_time");
+                                       HUD_Write_PanelCvar("_acceleration_max");
+                                       HUD_Write_PanelCvar("_acceleration_vertical");
+                                       HUD_Write_PanelCvar("_flip");
+                                       HUD_Write_PanelCvar("_baralign");
+                                       HUD_Write_PanelCvar("_progressbar");
+                                       HUD_Write_PanelCvar("_acceleration_progressbar_mode");
+                                       HUD_Write_PanelCvar("_acceleration_progressbar_scale");
+                                       HUD_Write_PanelCvar("_acceleration_progressbar_nonlinear");
+                                       HUD_Write_PanelCvar("_text");
+                                       HUD_Write_PanelCvar("_text_scale");
                                        break;
                                case HUD_PANEL_CENTERPRINT:
-                                       HUD_Write_PanelCvar_q("_align");
-                                       HUD_Write_PanelCvar_q("_flip");
-                                       HUD_Write_PanelCvar_q("_fontscale");
-                                       HUD_Write_PanelCvar_q("_time");
-                                       HUD_Write_PanelCvar_q("_fade_in");
-                                       HUD_Write_PanelCvar_q("_fade_out");
-                                       HUD_Write_PanelCvar_q("_fade_subsequent");
-                                       HUD_Write_PanelCvar_q("_fade_subsequent_passone");
-                                       HUD_Write_PanelCvar_q("_fade_subsequent_passone_minalpha");
-                                       HUD_Write_PanelCvar_q("_fade_subsequent_passtwo");
-                                       HUD_Write_PanelCvar_q("_fade_subsequent_passtwo_minalpha");
-                                       HUD_Write_PanelCvar_q("_fade_subsequent_minfontsize");
-                                       HUD_Write_PanelCvar_q("_fade_minfontsize");
+                                       HUD_Write_PanelCvar("_align");
+                                       HUD_Write_PanelCvar("_flip");
+                                       HUD_Write_PanelCvar("_fontscale");
+                                       HUD_Write_PanelCvar("_time");
+                                       HUD_Write_PanelCvar("_fade_in");
+                                       HUD_Write_PanelCvar("_fade_out");
+                                       HUD_Write_PanelCvar("_fade_subsequent");
+                                       HUD_Write_PanelCvar("_fade_subsequent_passone");
+                                       HUD_Write_PanelCvar("_fade_subsequent_passone_minalpha");
+                                       HUD_Write_PanelCvar("_fade_subsequent_passtwo");
+                                       HUD_Write_PanelCvar("_fade_subsequent_passtwo_minalpha");
+                                       HUD_Write_PanelCvar("_fade_subsequent_minfontsize");
+                                       HUD_Write_PanelCvar("_fade_minfontsize");
                                        break;
                                case HUD_PANEL_ITEMSTIME:
-                                       HUD_Write_PanelCvar_q("_iconalign");
-                                       HUD_Write_PanelCvar_q("_progressbar");
-                                       HUD_Write_PanelCvar_q("_progressbar_name");
-                                       HUD_Write_PanelCvar_q("_progressbar_reduced");
-                                       HUD_Write_PanelCvar_q("_text");
-                                       HUD_Write_PanelCvar_q("_ratio");
-                                       HUD_Write_PanelCvar_q("_dynamicsize");
+                                       HUD_Write_PanelCvar("_iconalign");
+                                       HUD_Write_PanelCvar("_progressbar");
+                                       HUD_Write_PanelCvar("_progressbar_name");
+                                       HUD_Write_PanelCvar("_progressbar_reduced");
+                                       HUD_Write_PanelCvar("_text");
+                                       HUD_Write_PanelCvar("_ratio");
+                                       HUD_Write_PanelCvar("_dynamicsize");
+                                       break;
                                case HUD_PANEL_QUICKMENU:
-                                       HUD_Write_PanelCvar_q("_align");
+                                       HUD_Write_PanelCvar("_align");
+                                       break;
+                               case HUD_PANEL_SCOREBOARD:
+                                       HUD_Write_PanelCvar("_fadeinspeed");
+                                       HUD_Write_PanelCvar("_fadeoutspeed");
+                                       HUD_Write_PanelCvar("_respawntime_decimals");
+                                       HUD_Write_PanelCvar("_table_bg_alpha");
+                                       HUD_Write_PanelCvar("_table_bg_scale");
+                                       HUD_Write_PanelCvar("_table_fg_alpha");
+                                       HUD_Write_PanelCvar("_table_fg_alpha_self");
+                                       HUD_Write_PanelCvar("_table_highlight");
+                                       HUD_Write_PanelCvar("_table_highlight_alpha");
+                                       HUD_Write_PanelCvar("_table_highlight_alpha_self");
+                                       HUD_Write_PanelCvar("_bg_teams_color_team");
+                                       HUD_Write_PanelCvar("_accuracy_doublerows");
+                                       HUD_Write_PanelCvar("_accuracy_nocolors");
                                        break;
                        }
                        HUD_Write("\n");
                }
+               MUTATOR_CALLHOOK(HUD_WriteCvars, fh);
+
                HUD_Write("menu_sync\n"); // force the menu to reread the cvars, so that the dialogs are updated
 
                LOG_INFOF(_("^2Successfully exported to %s! (Note: It's saved in data/data/)\n"), filename);
@@ -219,9 +239,9 @@ void HUD_Panel_ExportCfg(string cfgname)
 
 void HUD_Configure_Exit_Force()
 {
-       if (menu_enabled)
+       if (hud_configure_menu_open)
        {
-               menu_enabled = 0;
+               hud_configure_menu_open = 0;
                localcmd("togglemenu\n");
        }
        cvar_set("_hud_configure", "0");
@@ -639,9 +659,8 @@ float tab_backward;
 void HUD_Panel_FirstInDrawQ(float id);
 void reset_tab_panels()
 {
-       int i;
-       for(i = 0; i < hud_panels_COUNT; ++i)
-               tab_panels[i] = world;
+       for (int i = 0; i < hud_panels_COUNT; ++i)
+               tab_panels[i] = NULL;
 }
 float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary)
 {
@@ -670,10 +689,8 @@ float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary)
        }
 
        // allow console bind to work
-       string con_keys;
-       float keys;
-       con_keys = findkeysforcommand("toggleconsole", 0);
-       keys = tokenize(con_keys); // findkeysforcommand returns data for this
+       string con_keys = findkeysforcommand("toggleconsole", 0);
+       int keys = tokenize(con_keys); // findkeysforcommand returns data for this
 
        bool hit_con_bind = false;
        int i;
@@ -705,7 +722,7 @@ float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary)
                                highlightedAction = 0;
                                HUD_Panel_FirstInDrawQ(highlightedPanel.panel_id);
                        }
-                       tab_panel = world;
+                       tab_panel = NULL;
                        reset_tab_panels();
                }
        }
@@ -728,14 +745,14 @@ float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary)
        {
                if (bInputType == 1)
                        return true;
-               menu_enabled = 1;
+               hud_configure_menu_open = 1;
                localcmd("menu_showhudexit\n");
        }
        else if(nPrimary == K_BACKSPACE && hudShiftState & S_CTRL)
        {
                if (bInputType == 1)
                        return true;
-               if (!menu_enabled)
+               if (!hud_configure_menu_open)
                        cvar_set("_hud_configure", "0");
        }
        else if(nPrimary == K_TAB && hudShiftState & S_CTRL) // switch panel
@@ -773,11 +790,11 @@ float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary)
                vector candidate_pos = '0 0 0';
                const float LEVELS_NUM = 4;
                float level_height = vid_conheight / LEVELS_NUM;
-:find_tab_panel
+LABEL(find_tab_panel)
                level = floor(tab_panel_pos.y / level_height) * level_height; //starting level
                candidate_pos.x = (!tab_backward) ? vid_conwidth : 0;
                start_posX = tab_panel_pos.x;
-               tab_panel = world;
+               tab_panel = NULL;
                k=0;
                while(++k)
                {
@@ -804,11 +821,11 @@ float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary)
                                reset_tab_panels();
                                if (!old_tab_panel)
                                {
-                                       tab_panel = world;
+                                       tab_panel = NULL;
                                        return true;
                                }
                                starting_panel = old_tab_panel;
-                               old_tab_panel = world;
+                               old_tab_panel = NULL;
                                goto find_tab_panel; //u must find tab_panel!
                        }
                        if (!tab_backward)
@@ -833,7 +850,10 @@ float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary)
                        return true;
 
                if (highlightedPanel)
-                       cvar_set(strcat("hud_panel_", highlightedPanel.panel_name), ftos(!cvar(strcat("hud_panel_", highlightedPanel.panel_name))));
+               {
+                       if(panel.panel_configflags & PANEL_CONFIG_CANBEOFF)
+                               cvar_set(strcat("hud_panel_", highlightedPanel.panel_name), ftos(!cvar(strcat("hud_panel_", highlightedPanel.panel_name))));
+               }
                else
                        cvar_set(strcat("hud_dock"), (autocvar_hud_dock == "") ? "dock" : "");
        }
@@ -889,7 +909,7 @@ float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary)
                        cvar_set(strcat("hud_panel_", highlightedPanel_backup.panel_name, "_pos"), s);
                        s = strcat(ftos(panel_size_backup.x/vid_conwidth), " ", ftos(panel_size_backup.y/vid_conheight));
                        cvar_set(strcat("hud_panel_", highlightedPanel_backup.panel_name, "_size"), s);
-                       highlightedPanel_backup = world;
+                       highlightedPanel_backup = NULL;
                }
        }
        else if(nPrimary == 's' && hudShiftState & S_CTRL) // save config
@@ -1077,13 +1097,13 @@ void HUD_Panel_Highlight(float allow_move)
                        return;
                }
        }
-       highlightedPanel = world;
+       highlightedPanel = NULL;
        highlightedAction = 0;
 }
 
 void HUD_Panel_EnableMenu()
 {
-       menu_enabled = 2;
+       hud_configure_menu_open = 2;
        localcmd("menu_showhudoptions ", highlightedPanel.panel_name, "\n");
 }
 float mouse_over_panel;
@@ -1093,12 +1113,7 @@ void HUD_Panel_Mouse()
                return;
 
        if (!autocvar_hud_cursormode)
-       {
-               mousepos = mousepos + getmousepos() * autocvar_menu_mouse_speed;
-
-               mousepos.x = bound(0, mousepos.x, vid_conwidth);
-               mousepos.y = bound(0, mousepos.y, vid_conheight);
-       }
+               update_mousepos();
 
        if(mouseClicked)
        {
@@ -1107,7 +1122,7 @@ void HUD_Panel_Mouse()
                        if (tab_panel)
                        {
                                //stop ctrl-tab selection
-                               tab_panel = world;
+                               tab_panel = NULL;
                                reset_tab_panels();
                        }
                        HUD_Panel_Highlight(mouseClicked & S_MOUSE1); // sets highlightedPanel, highlightedAction, panel_click_distance, panel_click_resizeorigin
@@ -1182,7 +1197,7 @@ void HUD_Panel_Mouse()
        {
                if(prevMouseClicked)
                        highlightedAction = 0;
-               if(menu_enabled == 2)
+               if(hud_configure_menu_open == 2)
                        mouse_over_panel = 0;
                else
                        mouse_over_panel = HUD_Panel_Check_Mouse_Pos(true);
@@ -1190,17 +1205,16 @@ void HUD_Panel_Mouse()
                        drawfill(panel_pos - '1 1 0' * panel_bg_border, panel_size + '2 2 0' * panel_bg_border, '1 1 1', .1, DRAWFLAG_NORMAL);
        }
        // draw cursor after performing move/resize to have the panel pos/size updated before mouse_over_panel
-       const vector cursorsize = '32 32 0';
        float cursor_alpha = 1 - autocvar__menu_alpha;
 
        if(!mouse_over_panel)
-               drawpic(mousepos, strcat("gfx/menu/", autocvar_menu_skin, "/cursor.tga"), cursorsize, '1 1 1', cursor_alpha, DRAWFLAG_NORMAL);
+               draw_cursor_normal(mousepos, '1 1 1', cursor_alpha);
        else if(mouse_over_panel == 1)
-               drawpic(mousepos - cursorsize * 0.5, strcat("gfx/menu/", autocvar_menu_skin, "/cursor_move.tga"), cursorsize, '1 1 1', cursor_alpha, DRAWFLAG_NORMAL);
+               draw_cursor(mousepos, '0.5 0.5 0', "/cursor_move", '1 1 1', cursor_alpha);
        else if(mouse_over_panel == 2)
-               drawpic(mousepos - cursorsize * 0.5, strcat("gfx/menu/", autocvar_menu_skin, "/cursor_resize.tga"), cursorsize, '1 1 1', cursor_alpha, DRAWFLAG_NORMAL);
+               draw_cursor(mousepos, '0.5 0.5 0', "/cursor_resize", '1 1 1', cursor_alpha);
        else
-               drawpic(mousepos - cursorsize * 0.5, strcat("gfx/menu/", autocvar_menu_skin, "/cursor_resize2.tga"), cursorsize, '1 1 1', cursor_alpha, DRAWFLAG_NORMAL);
+               draw_cursor(mousepos, '0.5 0.5 0', "/cursor_resize2", '1 1 1', cursor_alpha);
 
        prevMouseClicked = mouseClicked;
 }
@@ -1231,7 +1245,7 @@ void HUD_Configure_Frame()
        int i;
        if(autocvar__hud_configure)
        {
-               if(isdemo() || intermission == 2)
+               if(isdemo() || intermission == 2 || scoreboard_active)
                {
                        HUD_Configure_Exit_Force();
                        return;
@@ -1250,7 +1264,7 @@ void HUD_Configure_Frame()
                if(autocvar__menu_alpha != _menu_alpha_prev)
                {
                        if(autocvar__menu_alpha == 0)
-                               menu_enabled = 0;
+                               hud_configure_menu_open = 0;
                        _menu_alpha_prev = autocvar__menu_alpha;
                }
 
@@ -1258,10 +1272,11 @@ void HUD_Configure_Frame()
        }
        else if(hud_configure_prev)
        {
-               if(menu_enabled)
-                       menu_enabled = 0;
+               if(hud_configure_menu_open)
+                       hud_configure_menu_open = 0;
                if(autocvar_hud_cursormode)
                        setcursormode(0);
+               hud_dynamic_shake_factor = -1;
        }
 }