]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote branch 'origin/terencehill/small_cleanup'
authorRudolf Polzer <divverent@alientrap.org>
Thu, 9 Dec 2010 20:04:43 +0000 (21:04 +0100)
committerRudolf Polzer <divverent@alientrap.org>
Thu, 9 Dec 2010 20:04:43 +0000 (21:04 +0100)
Conflicts:
qcsrc/client/waypointsprites.qc

1  2 
qcsrc/client/hud.qc
qcsrc/client/waypointsprites.qc

diff --combined qcsrc/client/hud.qc
index 5536cec21eb71663b621e0cce499372c3e9624a9,3090485197a50646fad77db9a37038a42b17a83a..6cb1e4470f8324274c89e250c268c0132ac4b17d
@@@ -14,12 -14,7 +14,12 @@@ Misc HUD function
  //   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) // no border
 +    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);
@@@ -151,7 -146,7 +151,7 @@@ void centerprint(string strMessage
  
        centerprint_expire = min(centerprint_expire, time); // if any of the returns happens, this message will fade out
  
 -      if(cvar("scr_centertime") <= 0)
 +      if(autocvar_scr_centertime <= 0)
                return;
  
        if(strMessage == "")
        h = centerprint_fontsize_y*hcount;
  
        havail = vid_conheight;
 -      if(cvar("con_chatpos") < 0)
 -              havail -= (-cvar("con_chatpos") + cvar("con_chat")) * cvar("con_chatsize"); // avoid overlapping chat
 +      if(autocvar_con_chatpos < 0)
 +              havail -= (-autocvar_con_chatpos + autocvar_con_chat) * autocvar_con_chatsize; // avoid overlapping chat
        if(havail > vid_conheight - 70)
                havail = vid_conheight - 70; // avoid overlapping HUD
  
  
        centerprint_num = i;
  
 -      centerprint_expire = time + cvar("scr_centertime");
 +      centerprint_expire = time + autocvar_scr_centertime;
  }
  
  void HUD_DrawCenterPrint (void)
  
        sz = 0.8 + (a / 5);
  
 -      if(centerprint_num * cvar("scr_centersize") > 24 && scoreboard_active) // 24 = height of Scoreboard text
 +      if(centerprint_num * autocvar_scr_centersize > 24 && scoreboard_active) // 24 = height of Scoreboard text
                centerprint_start_y = scoreboard_bottom + centerprint_fontsize_y;
  
        pos = centerprint_start;
@@@ -427,7 -422,7 +427,7 @@@ HUD panel
  void HUD_Panel_ExportCfg(string cfgname)
  {
        float fh;
 -      string filename = strcat("hud_", cvar_string("hud_skin"), "_", cfgname, ".cfg");
 +      string filename = strcat("hud_", autocvar_hud_skin, "_", cfgname, ".cfg");
        fh = fopen(filename, FILE_WRITE);
        if(fh >= 0)
        {
                                case HUD_PANEL_AMMO:
                                        HUD_Write_PanelCvar_q("_onlycurrent");
                                        HUD_Write_PanelCvar_q("_iconalign");
 +                                      HUD_Write_PanelCvar_q("_progressbar");
 +                                      HUD_Write_PanelCvar_q("_progressbar_name");
 +                                      HUD_Write_PanelCvar_q("_text");
                                        break;
                                case HUD_PANEL_POWERUPS:
                                        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_strength");
 +                                      HUD_Write_PanelCvar_q("_progressbar_shield");
                                        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("_text");
                                        break;
                                case HUD_PANEL_NOTIFY:
                                        HUD_Write_PanelCvar_q("_flip");
@@@ -566,37 -553,31 +566,37 @@@ if(highlightedPanel_prev == active_pane
        HUD_Panel_HlBorder(panel_bg_border + 1.5 * hlBorderSize, '0 0.5 1', 0.25 * (1 - autocvar__menu_alpha) * alpha);\
  } ENDS_WITH_CURLY_BRACE
  
 -void HUD_Panel_DrawProgressBar(vector pos, float vertical, vector mySize, vector color, float alpha, float drawflag)
 +void HUD_Panel_DrawProgressBar(vector pos, vector mySize, string pic, float vertical, float barflip, float x, vector color, float alpha, float drawflag)
  {
 -      if(!alpha)
 +      if(!alpha || x == 0)
                return;
  
 -      string pic;
 +    x = bound(0, x, 1);
 +
        if(vertical) {
 -              pic = strcat(hud_skin_path, "/statusbar_vertical");
 +              pic = strcat(hud_skin_path, "/", pic, "_vertical");
                if(precache_pic(pic) == "") {
                        pic = "gfx/hud/default/statusbar_vertical";
                }
 -              drawsubpic(pos, eY * min(mySize_y * 0.5, mySize_x) + eX * mySize_x, pic, '0 0 0', '1 0.25 0', color, alpha, drawflag);
 -              if(mySize_y/mySize_x > 2)
 -                      drawsubpic(pos + eY * mySize_x, eY * (mySize_y - 2 * mySize_x) + eX * mySize_x, pic, '0 0.25 0', '1 0.5 0', color, alpha, drawflag);
 -              drawsubpic(pos + eY * mySize_y - eY * min(mySize_y * 0.5, mySize_x), eY * min(mySize_y * 0.5, mySize_x) + eX * mySize_x, pic, '0 0.75 0', '1 0.25 0', color, alpha, drawflag);
 +
 +        if(barflip)
 +            drawsetcliparea(pos_x, pos_y + mySize_y * (1 - x), mySize_x, mySize_y * x);
 +        else
 +            drawsetcliparea(pos_x, pos_y, mySize_x, mySize_y * x);
        } else {
 -              pic = strcat(hud_skin_path, "/statusbar");
 +              pic = strcat(hud_skin_path, "/", pic);
                if(precache_pic(pic) == "") {
                        pic = "gfx/hud/default/statusbar";
                }
 -              drawsubpic(pos, eX * min(mySize_x * 0.5, mySize_y) + eY * mySize_y, pic, '0 0 0', '0.25 1 0', color, alpha, drawflag);
 -              if(mySize_x/mySize_y > 2)
 -                      drawsubpic(pos + eX * mySize_y, eX * (mySize_x - 2 * mySize_y) + eY * mySize_y, pic, '0.25 0 0', '0.5 1 0', color, alpha, drawflag);
 -              drawsubpic(pos + eX * mySize_x - eX * min(mySize_x * 0.5, mySize_y), eX * min(mySize_x * 0.5, mySize_y) + eY * mySize_y, pic, '0.75 0 0', '0.25 1 0', color, alpha, drawflag);
 +
 +        if(barflip)
 +            drawsetcliparea(pos_x + mySize_x * (1 - x), pos_y, mySize_x * x, mySize_y);
 +        else
 +            drawsetcliparea(pos_x, pos_y, mySize_x * x, mySize_y);
        }
 +
 +    drawpic(pos, pic, mySize, color, alpha, drawflag);
 +    drawresetcliparea();
  }
  
  void HUD_Panel_DrawHighlight(vector pos, vector mySize, vector color, float alpha, float drawflag)
@@@ -843,8 -824,8 +843,8 @@@ void HUD_Panel_SetPosSize(vector mySize
  
        if(highlightedPanel == HUD_PANEL_CHAT) // some panels have their own restrictions, like the chat panel (which actually only moves the engine chat print around). Looks bad if it's too small.
        {
 -              mySize_x = max(17 * cvar("con_chatsize"), mySize_x);
 -              mySize_y = max(2 * cvar("con_chatsize") + 2 * panel_bg_padding, mySize_y);
 +              mySize_x = max(17 * autocvar_con_chatsize, mySize_x);
 +              mySize_y = max(2 * autocvar_con_chatsize + 2 * panel_bg_padding, mySize_y);
        }
  
        // collision testing|
@@@ -932,7 -913,7 +932,7 @@@ void HUD_Panel_Arrow_Action(float nPrim
        if (highlightedPanel_prev == -1 || mouseClicked)
                return;
  
 -      hud_configure_checkcollisions = (!(hudShiftState & S_CTRL) && cvar("hud_configure_checkcollisions"));
 +      hud_configure_checkcollisions = (!(hudShiftState & S_CTRL) && autocvar_hud_configure_checkcollisions);
  
        float step;
        if(autocvar_hud_configure_grid)
@@@ -1349,7 -1330,7 +1349,7 @@@ void HUD_Panel_Mouse(
        /*
        print("menu_enabled: ", ftos(menu_enabled), "\n");
        print("Highlighted: ", ftos(highlightedPanel), "\n");
 -      print("Menu alpha: ", cvar_string("_menu_alpha"), "\n");
 +      print("Menu alpha: ", ftos(autocvar__menu_alpha), "\n");
        */
  
        // instantly hide the editor cursor if we open the HUDExit dialog
        if(highlightedPanel != -1)
                highlightedPanel_prev = highlightedPanel;
  
 -      mousepos = mousepos + getmousepos() * cvar("menu_mouse_speed");
 +      mousepos = mousepos + getmousepos() * autocvar_menu_mouse_speed;
  
        mousepos_x = bound(0, mousepos_x, vid_conwidth);
        mousepos_y = bound(0, mousepos_y, vid_conheight);
  
                if (prev_pos != panel_pos || prev_size != panel_size)
                {
 -                      hud_configure_checkcollisions = (!(hudShiftState & S_CTRL) && cvar("hud_configure_checkcollisions"));
 +                      hud_configure_checkcollisions = (!(hudShiftState & S_CTRL) && autocvar_hud_configure_checkcollisions);
                        // backup!
                        panel_pos_backup = prev_pos;
                        panel_size_backup = prev_size;
        cursorsize = '32 32 0';
  
        if(highlightcheck == 0)
 -              drawpic(mousepos, strcat("gfx/menu/", cvar_string("menu_skin"), "/cursor.tga"), '32 32 0', '1 1 1', hud_fade_alpha, DRAWFLAG_NORMAL);
 +              drawpic(mousepos, strcat("gfx/menu/", autocvar_menu_skin, "/cursor.tga"), '32 32 0', '1 1 1', hud_fade_alpha, DRAWFLAG_NORMAL);
        else if(highlightcheck == 1)
 -              drawpic(mousepos - cursorsize * 0.5, strcat("gfx/menu/", cvar_string("menu_skin"), "/cursor_move.tga"), '32 32 0', '1 1 1', hud_fade_alpha, DRAWFLAG_NORMAL);
 +              drawpic(mousepos - cursorsize * 0.5, strcat("gfx/menu/", autocvar_menu_skin, "/cursor_move.tga"), '32 32 0', '1 1 1', hud_fade_alpha, DRAWFLAG_NORMAL);
        else if(highlightcheck == 2)
 -              drawpic(mousepos - cursorsize * 0.5, strcat("gfx/menu/", cvar_string("menu_skin"), "/cursor_resize.tga"), '32 32 0', '1 1 1', hud_fade_alpha, DRAWFLAG_NORMAL);
 +              drawpic(mousepos - cursorsize * 0.5, strcat("gfx/menu/", autocvar_menu_skin, "/cursor_resize.tga"), '32 32 0', '1 1 1', hud_fade_alpha, DRAWFLAG_NORMAL);
        else
 -              drawpic(mousepos - cursorsize * 0.5, strcat("gfx/menu/", cvar_string("menu_skin"), "/cursor_resize2.tga"), '32 32 0', '1 1 1', hud_fade_alpha, DRAWFLAG_NORMAL);
 +              drawpic(mousepos - cursorsize * 0.5, strcat("gfx/menu/", autocvar_menu_skin, "/cursor_resize2.tga"), '32 32 0', '1 1 1', hud_fade_alpha, DRAWFLAG_NORMAL);
  
        prevMouseClicked = mouseClicked;
  }
@@@ -1523,9 -1504,9 +1523,9 @@@ void HUD_Weapons(void
        if(!autocvar_hud_panel_weapons && !autocvar__hud_configure)
                return;
  
 -      float timeout = cvar("hud_panel_weapons_timeout");
 +      float timeout = autocvar_hud_panel_weapons_timeout;
        float timeout_effect_length, timein_effect_length;
 -      if (cvar("hud_panel_weapons_timeout_effect") == 0)
 +      if (autocvar_hud_panel_weapons_timeout_effect == 0)
        {
                timeout_effect_length = 0;
                timein_effect_length = 0;
        if (timeout && time >= weapontime + timeout && !autocvar__hud_configure)
        {
                f = (time - (weapontime + timeout)) / timeout_effect_length;
 -              if (cvar("hud_panel_weapons_timeout_effect"))
 +              if (autocvar_hud_panel_weapons_timeout_effect)
                {
                        panel_bg_alpha *= (1 - f);
                        panel_fg_alpha *= (1 - f);
                }
 -              if (cvar("hud_panel_weapons_timeout_effect") == 1)
 +              if (autocvar_hud_panel_weapons_timeout_effect == 1)
                {
                        f *= f; // for a cooler movement
                        center_x = panel_pos_x + panel_size_x/2;
        else if (timeout && time < weaponprevtime + timein_effect_length && !autocvar__hud_configure)
        {
                f = (time - weaponprevtime) / timein_effect_length;
 -              if (cvar("hud_panel_weapons_timeout_effect"))
 +              if (autocvar_hud_panel_weapons_timeout_effect)
                {
                        panel_bg_alpha *= (f);
                        panel_fg_alpha *= (f);
                }
 -              if (cvar("hud_panel_weapons_timeout_effect") == 1)
 +              if (autocvar_hud_panel_weapons_timeout_effect == 1)
                {
                        f *= f; // for a cooler movement
                        f = 1 - f;
        }
  
        // TODO make this configurable
 -      if(weaponorder_bypriority != cvar_string("cl_weaponpriority"))
 +      if(weaponorder_bypriority != autocvar_cl_weaponpriority)
        {
                if(weaponorder_bypriority)
                        strunzone(weaponorder_bypriority);
                if(weaponorder_byimpulse)
                        strunzone(weaponorder_byimpulse);
  
 -              weaponorder_bypriority = strzone(cvar_string("cl_weaponpriority"));
 +              weaponorder_bypriority = strzone(autocvar_cl_weaponpriority);
                weaponorder_byimpulse = strzone(W_FixWeaponOrder_BuildImpulseList(W_FixWeaponOrder_ForceComplete(W_NumberWeaponOrder(weaponorder_bypriority))));
                weaponorder_cmp_str = strcat(" ", weaponorder_byimpulse, " ");
  
                panel_size -= '2 2 0' * panel_bg_padding;
        }
  
 -      if(cvar_or("hud_panel_weapons_fade", 1))
 +      if(autocvar_hud_panel_weapons_fade)
        {
                wpnalpha = 3.2 - 2 * (time - weapontime);
                wpnalpha = bound(0.7, wpnalpha, 1) * panel_fg_alpha;
        HUD_Weapons_Clear();
  
        float rows, columns;
 -      float aspect = cvar("hud_panel_weapons_aspect");
 +      float aspect = autocvar_hud_panel_weapons_aspect;
        rows = panel_size_y/panel_size_x;
        rows = bound(1, floor((sqrt(4 * aspect * rows * WEP_COUNT + rows * rows) + rows + 0.5) / 2), WEP_COUNT);
  
  
        float a, type, fullammo;
        float when;
 -      when = cvar("hud_panel_weapons_complainbubble_time");
 +      when = autocvar_hud_panel_weapons_complainbubble_time;
        float fadetime;
 -      fadetime = cvar("hud_panel_weapons_complainbubble_fadetime");
 +      fadetime = autocvar_hud_panel_weapons_complainbubble_fadetime;
  
        vector color;
        vector wpnpos;
        float ammo_alpha;
        wpnsize = eX * panel_size_x*(1/columns) + eY * panel_size_y*(1/rows);
        float barsize_x, barsize_y, baroffset_x, baroffset_y;
 -      float show_ammo = cvar("hud_panel_weapons_ammo");
 +      float show_ammo = autocvar_hud_panel_weapons_ammo;
        if (show_ammo)
        {
 -              fullammo_shells = cvar("hud_panel_weapons_ammo_full_shells");
 -              fullammo_nails = cvar("hud_panel_weapons_ammo_full_nails");
 -              fullammo_rockets = cvar("hud_panel_weapons_ammo_full_rockets");
 -              fullammo_cells = cvar("hud_panel_weapons_ammo_full_cells");
 -              fullammo_fuel = cvar("hud_panel_weapons_ammo_full_fuel");
 -              ammo_color = stov(cvar_string("hud_panel_weapons_ammo_color"));
 -              ammo_alpha = panel_fg_alpha * cvar("hud_panel_weapons_ammo_alpha");
 +              fullammo_shells = autocvar_hud_panel_weapons_ammo_full_shells;
 +              fullammo_nails = autocvar_hud_panel_weapons_ammo_full_nails;
 +              fullammo_rockets = autocvar_hud_panel_weapons_ammo_full_rockets;
 +              fullammo_cells = autocvar_hud_panel_weapons_ammo_full_cells;
 +              fullammo_fuel = autocvar_hud_panel_weapons_ammo_full_fuel;
 +              ammo_color = stov(autocvar_hud_panel_weapons_ammo_color);
 +              ammo_alpha = panel_fg_alpha * autocvar_hud_panel_weapons_ammo_alpha;
  
  
                if(wpnsize_x/wpnsize_y > aspect)
        }
  
        float show_accuracy;
 -      float weapon_stats, weapon_number;
 -      if(cvar("hud_panel_weapons_accuracy") && acc_levels)
 +      float weapon_stats;
 +      if(autocvar_hud_panel_weapons_accuracy && acc_levels)
        {
                show_accuracy = true;
 -              // hits
 -              weapon_stats = getstati(STAT_DAMAGE_HITS);
 -              weapon_number = weapon_stats & 63;
 -              weapon_hits[weapon_number-WEP_FIRST] = floor(weapon_stats / 64);
 -              // fired
 -              weapon_stats = getstati(STAT_DAMAGE_FIRED);
 -              weapon_number = weapon_stats & 63;
 -              weapon_fired[weapon_number-WEP_FIRST] = floor(weapon_stats / 64);
                if (acc_col_x[0] == -1)
                        for (i = 0; i < acc_levels; ++i)
                                acc_col[i] = stov(cvar_string(strcat("accuracy_color", ftos(i))));
        }
  
        float weapons_st = getstati(STAT_WEAPONS);
 -      float label = cvar("hud_panel_weapons_label");
 +      float label = autocvar_hud_panel_weapons_label;
  
        for(i = 0; i < weapon_cnt; ++i)
        {
                // draw the weapon accuracy
                if(show_accuracy)
                {
 -                      float weapon_hit, weapon_damage;
 -                      weapon_damage = weapon_fired[self.weapon-WEP_FIRST];
 -                      if(weapon_damage)
 +                      weapon_stats = weapon_accuracy[self.weapon-WEP_FIRST];
 +                      if(weapon_stats >= 0)
                        {
 -                              weapon_hit = weapon_hits[self.weapon-WEP_FIRST];
 -                              weapon_stats = floor(100 * weapon_hit / weapon_damage);
 -
                                // find the max level lower than weapon_stats
                                float j;
                                j = acc_levels-1;
                }
  
                // draw the complain message
 -              if(time - complain_weapon_time < when + fadetime && self.weapon == complain_weapon && cvar("hud_panel_weapons_complainbubble"))
 +              if(time - complain_weapon_time < when + fadetime && self.weapon == complain_weapon && autocvar_hud_panel_weapons_complainbubble)
                {
                        if(fadetime)
                        {
                        string s;
                        if(complain_weapon_type == 0) {
                                s = "Out of ammo";
 -                              color = stov(cvar_string("hud_panel_weapons_complainbubble_color_outofammo"));
 +                              color = stov(autocvar_hud_panel_weapons_complainbubble_color_outofammo);
                        }
                        else if(complain_weapon_type == 1) {
                                s = "Don't have";
 -                              color = stov(cvar_string("hud_panel_weapons_complainbubble_color_donthave"));
 +                              color = stov(autocvar_hud_panel_weapons_complainbubble_color_donthave);
                        }
                        else {
                                s = "Unavailable";
 -                              color = stov(cvar_string("hud_panel_weapons_complainbubble_color_unavailable"));
 +                              color = stov(autocvar_hud_panel_weapons_complainbubble_color_unavailable);
                        }
 -                      float padding = cvar("hud_panel_weapons_complainbubble_padding");
 +                      float padding = autocvar_hud_panel_weapons_complainbubble_padding;
                        drawpic_aspect_skin(wpnpos + '1 1 0' * padding, "weapon_complainbubble", wpnsize - '2 2 0' * padding, color, a * panel_fg_alpha, DRAWFLAG_NORMAL);
                        drawstring_aspect(wpnpos + '1 1 0' * padding, s, wpnsize - '2 2 0' * padding, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
                }
@@@ -1915,16 -1908,10 +1915,16 @@@ void DrawAmmoItem(vector myPos, vector 
        if (currently_selected)
                drawpic_aspect_skin(myPos, "ammo_current_bg", mySize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
  
 -      if(a > 0)
 -              drawstring_aspect(numpos, ftos(a), eX * (2/3) * mySize_x + eY * mySize_y, color, panel_fg_alpha * alpha, DRAWFLAG_NORMAL);
 -      else // "ghost" ammo count
 -              drawstring_aspect(numpos, ftos(a), eX * (2/3) * mySize_x + eY * mySize_y, '0 0 0', panel_fg_alpha * alpha * 0.5, DRAWFLAG_NORMAL);
 +    if(a > 0 && autocvar_hud_panel_ammo_progressbar)
 +        HUD_Panel_DrawProgressBar(myPos + eX * autocvar_hud_panel_ammo_progressbar_xoffset * mySize_x, mySize - eX * autocvar_hud_panel_ammo_progressbar_xoffset * mySize_x, autocvar_hud_panel_ammo_progressbar_name, 0, 0, min(1, a/autocvar_hud_panel_ammo_maxammo), color, autocvar_hud_progressbar_alpha * panel_fg_alpha * alpha, DRAWFLAG_NORMAL);
 +
 +    if(autocvar_hud_panel_ammo_text)
 +    {
 +        if(a > 0)
 +            drawstring_aspect(numpos, ftos(a), eX * (2/3) * mySize_x + eY * mySize_y, color, panel_fg_alpha * alpha, DRAWFLAG_NORMAL);
 +        else // "ghost" ammo count
 +            drawstring_aspect(numpos, ftos(a), eX * (2/3) * mySize_x + eY * mySize_y, '0 0 0', panel_fg_alpha * alpha * 0.5, DRAWFLAG_NORMAL);
 +    }
        if(a > 0)
                drawpic_aspect_skin(picpos, GetAmmoPicture(itemcode), '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * alpha, DRAWFLAG_NORMAL);
        else // "ghost" ammo icon
@@@ -2124,147 -2111,129 +2124,147 @@@ void HUD_Powerups(void) 
        vector numpos;
  
        string leftname, rightname;
 +    string leftprogressname, rightprogressname;
        float leftcnt, rightcnt;
        float leftexact, rightexact;
 -      float flip = cvar("hud_panel_powerups_flip");
 +      float flip = autocvar_hud_panel_powerups_flip;
        if (flip) {
                leftname = "strength";
 +        leftprogressname = autocvar_hud_panel_powerups_progressbar_strength;
                leftcnt = ceil(strength_time);
                leftexact = strength_time;
  
                rightname = "shield";
 +        rightprogressname = autocvar_hud_panel_powerups_progressbar_shield;
                rightcnt = ceil(shield_time);
                rightexact = shield_time;
        } else {
                leftname = "shield";
 +        leftprogressname = autocvar_hud_panel_powerups_progressbar_shield;
                leftcnt = ceil(shield_time);
                leftexact = shield_time;
  
                rightname = "strength";
 +        rightprogressname = autocvar_hud_panel_powerups_progressbar_strength;
                rightcnt = ceil(strength_time);
                rightexact = strength_time;
        }
  
        drawfont = hud_bigfont;
 -      float baralign = cvar("hud_panel_powerups_baralign");
 -      float iconalign = cvar("hud_panel_powerups_iconalign");
 -      float progressbar = cvar("hud_panel_powerups_progressbar");
 +      float baralign = autocvar_hud_panel_powerups_baralign;
 +    float barflip;
 +      float iconalign = autocvar_hud_panel_powerups_iconalign;
 +      float progressbar = autocvar_hud_panel_powerups_progressbar;
        if (mySize_x/mySize_y > 4)
        {
 +        barsize = eX * 0.5 * mySize_x + eY * mySize_y;
                if(leftcnt)
                {
                        if(baralign == 1 || baralign == 3) { // right align
 -                              barpos = pos + eX * 0.5 * mySize_x - eX * 0.5 * mySize_x * min(1, leftcnt/30);
 -                              barsize = eX * 0.5 * mySize_x * min(1, leftcnt/30) + eY * mySize_y;
 +                barpos = pos + eX * 0.5 * mySize_x;
 +                barflip = 1;
                        } else { // left align
 -                              barpos = pos;
 -                              barsize = eX * 0.5 * mySize_x * min(1, leftcnt/30) + eY * mySize_y;
 +                barpos = pos;
 +                barflip = 0;
                        }
  
                        if(progressbar)
                        {
                                HUD_Panel_GetProgressBarColorForString(leftname);
 -                              HUD_Panel_DrawProgressBar(barpos, 0, barsize, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * bound(0, max(strength_time, shield_time), 1), DRAWFLAG_NORMAL);
 +                              HUD_Panel_DrawProgressBar(barpos, barsize, leftprogressname, 0, barflip, min(1, leftcnt/30), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * bound(0, max(strength_time, shield_time), 1), DRAWFLAG_NORMAL);
                        }
 -                      if(leftcnt > 1)
 -                              DrawNumIcon(iconalign, pos, eX * 0.5 * mySize_x + eY * mySize_y, leftcnt, leftname, 1, '1 1 1', 1);
 -                      if(leftcnt <= 5)
 -                              DrawNumIcon_expanding(iconalign, pos, eX * 0.5 * mySize_x + eY * mySize_y, leftcnt, leftname, 1, '1 1 1', bound(0, (leftcnt - leftexact) / 0.5, 1));
 +            if(autocvar_hud_panel_powerups_text)
 +            {
 +                if(leftcnt > 1)
 +                    DrawNumIcon(iconalign, pos, eX * 0.5 * mySize_x + eY * mySize_y, leftcnt, leftname, 1, '1 1 1', 1);
 +                if(leftcnt <= 5)
 +                    DrawNumIcon_expanding(iconalign, pos, eX * 0.5 * mySize_x + eY * mySize_y, leftcnt, leftname, 1, '1 1 1', bound(0, (leftcnt - leftexact) / 0.5, 1));
 +            }
                }
  
                if(rightcnt)
                {
                        if(baralign == 0 || baralign == 3) { // left align
 -                              barpos = pos + eX * 0.5 * mySize_x;
 -                              barsize = eX * 0.5 * mySize_x * min(1, rightcnt/30) + eY * mySize_y;
 +                barpos = pos;
 +                barflip = 0;
                        } else { // right align
 -                              barpos = pos + eX * mySize_x - eX * 0.5 * mySize_x * min(1, rightcnt/30);
 -                              barsize = eX * 0.5 * mySize_x * min(1, rightcnt/30) + eY * mySize_y;
 +                barpos = pos + eX * 0.5 * mySize_x;
 +                barflip = 1;
                        }
  
                        if(progressbar)
                        {
                                HUD_Panel_GetProgressBarColorForString(rightname);
 -                              HUD_Panel_DrawProgressBar(barpos, 0, barsize, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * bound(0, max(strength_time, shield_time), 1), DRAWFLAG_NORMAL);
 +                              HUD_Panel_DrawProgressBar(barpos, barsize, rightprogressname, 0, barflip, min(1, rightcnt/30), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * bound(0, max(strength_time, shield_time), 1), DRAWFLAG_NORMAL);
                        }
 -                      if(rightcnt > 1)
 -                              DrawNumIcon(iconalign, pos + eX * 0.5 * mySize_x, eX * 0.5 * mySize_x + eY * mySize_y, rightcnt, rightname, 0, '1 1 1', 1);
 -                      if(rightcnt <= 5)
 -                              DrawNumIcon_expanding(iconalign, pos + eX * 0.5 * mySize_x, eX * 0.5 * mySize_x + eY * mySize_y, rightcnt, rightname, 0, '1 1 1', bound(0, (rightcnt - rightexact) / 0.5, 1));
 +            if(autocvar_hud_panel_powerups_text)
 +            {
 +                if(rightcnt > 1)
 +                    DrawNumIcon(iconalign, pos + eX * 0.5 * mySize_x, eX * 0.5 * mySize_x + eY * mySize_y, rightcnt, rightname, 0, '1 1 1', 1);
 +                if(rightcnt <= 5)
 +                    DrawNumIcon_expanding(iconalign, pos + eX * 0.5 * mySize_x, eX * 0.5 * mySize_x + eY * mySize_y, rightcnt, rightname, 0, '1 1 1', bound(0, (rightcnt - rightexact) / 0.5, 1));
 +            }
                }
        }
        else if (mySize_x/mySize_y > 1.5)
        {
 +        barsize = eX * mySize_x + eY * 0.5 * mySize_y;
                if(leftcnt)
                {
 -                      if(baralign == 1 || baralign == 3) { // right align
 -                              barpos = pos + eX * mySize_x - eX * mySize_x * min(1, leftcnt/30);
 -                              barsize = eX * mySize_x * min(1, leftcnt/30) + eY * 0.5 * mySize_y;
 -                      } else { // left align
 -                              barpos = pos;
 -                              barsize = eX * mySize_x * min(1, leftcnt/30) + eY * 0.5 * mySize_y;
 +            barpos = pos;
 +                      if(baralign == 1 || baralign == 3) { // right/down align
 +                barflip = 1;
 +                      } else { // left/up align
 +                barflip = 0;
                        }
  
                        if(progressbar)
                        {
                                HUD_Panel_GetProgressBarColorForString(leftname);
 -                              HUD_Panel_DrawProgressBar(barpos, 0, barsize, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * bound(0, max(strength_time, shield_time), 1), DRAWFLAG_NORMAL);
 +                              HUD_Panel_DrawProgressBar(barpos, barsize, leftprogressname, 0, barflip, min(1, leftcnt/30), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * bound(0, max(strength_time, shield_time), 1), DRAWFLAG_NORMAL);
                        }
 -                      if(leftcnt > 1)
 -                              DrawNumIcon(iconalign, pos, eX * mySize_x + eY * 0.5 * mySize_y, leftcnt, leftname, 1, '1 1 1', 1);
 -                      if(leftcnt <= 5)
 -                              DrawNumIcon_expanding(iconalign, pos, eX * mySize_x + eY * 0.5 * mySize_y, leftcnt, leftname, 1, '1 1 1', bound(0, (leftcnt - leftexact) / 0.5, 1));
 +            if(autocvar_hud_panel_powerups_text)
 +            {
 +                if(leftcnt > 1)
 +                    DrawNumIcon(iconalign, pos, eX * mySize_x + eY * 0.5 * mySize_y, leftcnt, leftname, 1, '1 1 1', 1);
 +                if(leftcnt <= 5)
 +                    DrawNumIcon_expanding(iconalign, pos, eX * mySize_x + eY * 0.5 * mySize_y, leftcnt, leftname, 1, '1 1 1', bound(0, (leftcnt - leftexact) / 0.5, 1));
 +            }
                }
  
                if(rightcnt)
                {
 +            barpos = pos + eY * 0.5 * mySize_y;
                        if(baralign == 0 || baralign == 3) { // left align
 -                              barpos = pos + eY * 0.5 * mySize_y;
 -                              barsize = eX * mySize_x * min(1, rightcnt/30) + eY * 0.5 * mySize_y;
 +                barflip = 0;
                        } else { // right align
 -                              barpos = pos + eX * mySize_x - eX * mySize_x * min(1, rightcnt/30) + eY * 0.5 * mySize_y;
 -                              barsize = eX * mySize_x * min(1, rightcnt/30) + eY * 0.5 * mySize_y;
 +                barflip = 1;
                        }
  
                        if(progressbar)
                        {
                                HUD_Panel_GetProgressBarColorForString(rightname);
 -                              HUD_Panel_DrawProgressBar(barpos, 0, barsize, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * bound(0, max(strength_time, shield_time), 1), DRAWFLAG_NORMAL);
 +                              HUD_Panel_DrawProgressBar(barpos, barsize, rightprogressname, 0, barflip, min(1, rightcnt/30), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * bound(0, max(strength_time, shield_time), 1), DRAWFLAG_NORMAL);
                        }
 -                      if(rightcnt > 1)
 -                              DrawNumIcon(iconalign, pos + eY * 0.5 * mySize_y, eX * mySize_x + eY * 0.5 * mySize_y, rightcnt, rightname, 0, '1 1 1', 1);
 -                      if(rightcnt <= 5)
 -                              DrawNumIcon_expanding(iconalign, pos + eY * 0.5 * mySize_y, eX * mySize_x + eY * 0.5 * mySize_y, rightcnt, rightname, 0, '1 1 1', bound(0, (rightcnt - rightexact) / 0.5, 1));
 +            if(autocvar_hud_panel_powerups_text)
 +            {
 +                if(rightcnt > 1)
 +                    DrawNumIcon(iconalign, pos + eY * 0.5 * mySize_y, eX * mySize_x + eY * 0.5 * mySize_y, rightcnt, rightname, 0, '1 1 1', 1);
 +                if(rightcnt <= 5)
 +                    DrawNumIcon_expanding(iconalign, pos + eY * 0.5 * mySize_y, eX * mySize_x + eY * 0.5 * mySize_y, rightcnt, rightname, 0, '1 1 1', bound(0, (rightcnt - rightexact) / 0.5, 1));
 +            }
                }
        }
        else
        {
 +        barsize = eX * 0.5 * mySize_x + eY * mySize_y;
                if(leftcnt)
                {
 +            barpos = pos;
                        if(baralign == 1 || baralign == 3) { // down align
 -                              barpos = pos + eY * mySize_y - eY * mySize_y * min(1, leftcnt/30);
 -                              barsize = eX * 0.5 * mySize_x + eY * mySize_y * min(1, leftcnt/30);
 +                barflip = 1;
                        } else { // up align
 -                              barpos = pos;
 -                              barsize = eX * 0.5 * mySize_x + eY * mySize_y * min(1, leftcnt/30);
 +                barflip = 0;
                        }
  
                        if(iconalign == 1 || iconalign == 3) { // down align
                        if(progressbar)
                        {
                                HUD_Panel_GetProgressBarColorForString(leftname);
 -                              HUD_Panel_DrawProgressBar(barpos, 1, barsize, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * bound(0, max(strength_time, shield_time), 1), DRAWFLAG_NORMAL);
 +                              HUD_Panel_DrawProgressBar(barpos, barsize, leftprogressname, 1, barflip, min(1, leftcnt/30), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * bound(0, max(strength_time, shield_time), 1), DRAWFLAG_NORMAL);
                        }
 -                      if(leftcnt <= 5)
 -                              drawpic_aspect_skin_expanding(picpos, leftname, '0.4 0.4 0' * mySize_x, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, bound(0, (leftcnt - leftexact) / 0.5, 1));
 -                      if(leftcnt > 1)
 -                              drawpic_aspect_skin(picpos, leftname, '0.4 0.4 0' * mySize_x, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
 -                      drawstring_aspect(numpos, ftos(leftcnt), eX * 0.5 * mySize_x + eY * 0.25 * mySize_x, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
 +            if(autocvar_hud_panel_powerups_text)
 +            {
 +                if(leftcnt <= 5)
 +                    drawpic_aspect_skin_expanding(picpos, leftname, '0.4 0.4 0' * mySize_x, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, bound(0, (leftcnt - leftexact) / 0.5, 1));
 +                if(leftcnt > 1)
 +                    drawpic_aspect_skin(picpos, leftname, '0.4 0.4 0' * mySize_x, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
 +                drawstring_aspect(numpos, ftos(leftcnt), eX * 0.5 * mySize_x + eY * 0.25 * mySize_x, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
 +            }
                }
  
                if(rightcnt)
                {
 -                      if(baralign == 0 || baralign == 3) { // up align
 -                              barpos = pos + eX * 0.5 * mySize_x;
 -                              barsize = eX * 0.5 * mySize_x + eY * mySize_y * min(1, rightcnt/30);
 -                      } else { // down align
 -                              barpos = pos + eY * mySize_y - eY * mySize_y * min(1, rightcnt/30) + eX * 0.5 * mySize_x;
 -                              barsize = eX * 0.5 * mySize_x + eY * mySize_y * min(1, rightcnt/30);
 +            barpos = pos + eX * 0.5 * mySize_x;
 +                      if(baralign == 0 || baralign == 3) { // down align
 +                barflip = 1;
 +                      } else { // up align
 +                barflip = 0;
                        }
  
                        if(iconalign == 0 || iconalign == 3) { // up align
                        if(progressbar)
                        {
                                HUD_Panel_GetProgressBarColorForString(rightname);
 -                              HUD_Panel_DrawProgressBar(barpos, 1, barsize, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * bound(0, max(strength_time, shield_time), 1), DRAWFLAG_NORMAL);
 +                              HUD_Panel_DrawProgressBar(barpos, barsize, rightprogressname, 1, barflip, min(1, rightcnt/30), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * bound(0, max(strength_time, shield_time), 1), DRAWFLAG_NORMAL);
                        }
 -                      if(rightcnt <= 5)
 -                              drawpic_aspect_skin_expanding(picpos, rightname, '0.4 0.4 0' * mySize_x, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, bound(0, (rightcnt - rightexact) / 0.5, 1));
 -                      if(rightcnt > 1)
 -                              drawpic_aspect_skin(picpos, rightname, '0.4 0.4 0' * mySize_x, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
 -                      drawstring_aspect(numpos, ftos(rightcnt), eX * 0.5 * mySize_x + eY * 0.25 * mySize_x, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
 +            if(autocvar_hud_panel_powerups_text)
 +            {
 +                if(rightcnt <= 5)
 +                    drawpic_aspect_skin_expanding(picpos, rightname, '0.4 0.4 0' * mySize_x, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, bound(0, (rightcnt - rightexact) / 0.5, 1));
 +                if(rightcnt > 1)
 +                    drawpic_aspect_skin(picpos, rightname, '0.4 0.4 0' * mySize_x, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
 +                drawstring_aspect(numpos, ftos(rightcnt), eX * 0.5 * mySize_x + eY * 0.25 * mySize_x, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
 +            }
                }
        }
        drawfont = hud_font;
@@@ -2352,9 -2316,9 +2352,9 @@@ void HUD_HealthArmor(void
  
        if(autocvar__hud_configure)
        {
 -              armor = 150;
 -              health = 100;
 -              fuel = 70;
 +              armor = 75;
 +              health = 150;
 +              fuel = 20;
        }
  
        if(health <= 0)
        vector numpos;
  
        drawfont = hud_bigfont;
 -      float baralign = cvar("hud_panel_healtharmor_baralign");
 -      float iconalign = cvar("hud_panel_healtharmor_iconalign");
 -      float progressbar = cvar("hud_panel_healtharmor_progressbar");
 +      float baralign = autocvar_hud_panel_healtharmor_baralign;
 +      float iconalign = autocvar_hud_panel_healtharmor_iconalign;
 +      float progressbar = autocvar_hud_panel_healtharmor_progressbar;
 +
 +    float maxhealth = autocvar_hud_panel_healtharmor_maxhealth;
 +    float maxarmor = autocvar_hud_panel_healtharmor_maxarmor;
        if(autocvar_hud_panel_healtharmor == 2) // combined health and armor display
        {
                vector v;
                float x;
                x = floor(v_x + 1);
  
 -              if(baralign == 1 || baralign == 3) { // right align
 -                      barpos = pos + eX * mySize_x - eX * mySize_x * min(1, x/400);
 -                      barsize = eX * mySize_x * min(1, x/400) + eY * mySize_y;
 -              } else { // left align
 -                      barpos = pos;
 -                      barsize = eX * mySize_x * min(1, x/400) + eY * mySize_y;
 -              }
 +        float maxtotal = maxhealth + maxarmor;
 +
 +        barpos = pos;
 +        barsize = mySize;
  
                string biggercount;
                if(v_z) // NOT fully armored
                        if(progressbar)
                        {
                                HUD_Panel_GetProgressBarColor(health);
 -                              HUD_Panel_DrawProgressBar(barpos, 0, barsize, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
 +                              HUD_Panel_DrawProgressBar(barpos, barsize, autocvar_hud_panel_healtharmor_progressbar_health, 0, mod(baralign, 2), x/maxtotal, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                        }
                        if(armor)
 +            if(autocvar_hud_panel_healtharmor_text)
                                drawpic_aspect_skin(pos + eX * mySize_x - eX * 0.5 * mySize_y, "armor", '0.5 0.5 0' * mySize_y, '1 1 1', panel_fg_alpha * armor / health, DRAWFLAG_NORMAL);
                }
                else
                        if(progressbar)
                        {
                                HUD_Panel_GetProgressBarColor(armor);
 -                              HUD_Panel_DrawProgressBar(barpos, 0, barsize, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
 +                              HUD_Panel_DrawProgressBar(barpos, barsize, autocvar_hud_panel_healtharmor_progressbar_armor, 0, mod(baralign, 2), x/maxtotal, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                        }
                        if(health)
 +            if(autocvar_hud_panel_healtharmor_text)
                                drawpic_aspect_skin(pos + eX * mySize_x - eX * 0.5 * mySize_y, "health", '0.5 0.5 0' * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
                }
 -              DrawNumIcon(iconalign, pos, mySize, x, biggercount, 1, HUD_Get_Num_Color(x, 2 * 200), 1);
 +        if(autocvar_hud_panel_healtharmor_text)
 +            DrawNumIcon(iconalign, pos, mySize, x, biggercount, 1, HUD_Get_Num_Color(x, maxtotal), 1);
  
                // fuel
                if(fuel)
                {
 -                      if(baralign == 0 || baralign == 3) { // left align
 -                              barpos = pos + eX * mySize_x - eX * mySize_x * min(1, fuel/100);
 -                              barsize = eX * mySize_x * min(1, fuel/100) + eY * 0.2 * mySize_y;
 -                      } else {
 -                              barpos = pos;
 -                              barsize = eX * mySize_x * min(1, fuel/100) + eY * 0.2 * mySize_y;
 -                      }
 +            barpos = pos;
 +            barsize = eX * mySize_x + eY * 0.2 * mySize_y;
                        HUD_Panel_GetProgressBarColor(fuel);
 -                      HUD_Panel_DrawProgressBar(barpos, 0, barsize, progressbar_color, panel_fg_alpha * 0.8, DRAWFLAG_NORMAL);
 +            HUD_Panel_DrawProgressBar(barpos, barsize, "progressbar", 0, mod(baralign, 2), min(1, fuel/100), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * 0.8, DRAWFLAG_NORMAL);
                }
        }
        else
        {
                string leftname, rightname;
 +        string leftprogressname, rightprogressname;
                float leftcnt, rightcnt;
 +              float leftmax, rightmax;
                float leftactive, rightactive;
                float leftalpha, rightalpha;
 -              float flip = cvar("hud_panel_healtharmor_flip");
 +              float flip = autocvar_hud_panel_healtharmor_flip;
 +        float barflip;
                if (flip) { // old style layout with armor left/top of health
                        leftname = "armor";
 +            leftprogressname = autocvar_hud_panel_healtharmor_progressbar_armor;
                        leftcnt = armor;
                        if(leftcnt)
                                leftactive = 1;
                        leftalpha = min((armor+10)/55, 1);
 +            leftmax = maxarmor;
  
                        rightname = "health";
 +            rightprogressname = autocvar_hud_panel_healtharmor_progressbar_health;
                        rightcnt = health;
                        rightactive = 1;
                        rightalpha = 1;
 +            rightmax = maxhealth;
                } else {
                        leftname = "health";
 +            leftprogressname = autocvar_hud_panel_healtharmor_progressbar_health;
                        leftcnt = health;
                        leftactive = 1;
                        leftalpha = 1;
 +            leftmax = maxhealth;
  
                        rightname = "armor";
 +            rightprogressname = autocvar_hud_panel_healtharmor_progressbar_armor;
                        rightcnt = armor;
                        if(rightcnt)
                                rightactive = 1;
                        rightalpha = min((armor+10)/55, 1);
 +            rightmax = maxarmor;
                }
  
                if (mySize_x/mySize_y > 4)
                {
 +            barsize = eX * 0.5 * mySize_x + eY * mySize_y;
                        if(leftactive)
                        {
 +                barpos = pos;
                                if(baralign == 1 || baralign == 3) { // right align
 -                                      barpos = pos + eX * 0.5 * mySize_x - eX * 0.5 * mySize_x * min(1, leftcnt/200);
 -                                      barsize = eX * 0.5 * mySize_x * min(1, leftcnt/200) + eY * mySize_y;
 +                    barflip = 1;
                                } else { // left align
 -                                      barpos = pos;
 -                                      barsize = eX * 0.5 * mySize_x * min(1, leftcnt/200) + eY * mySize_y;
 +                    barflip = 0;
                                }
  
                                if(progressbar)
                                {
                                        HUD_Panel_GetProgressBarColorForString(leftname);
 -                                      HUD_Panel_DrawProgressBar(barpos, 0, barsize, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
 +                    HUD_Panel_DrawProgressBar(barpos, barsize, leftprogressname, 0, barflip, min(1, leftcnt/leftmax), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                                }
 -                              DrawNumIcon(iconalign, pos, eX * 0.5 * mySize_x + eY * mySize_y, leftcnt, leftname, 1, HUD_Get_Num_Color(leftcnt, 200), 1);
 +                if(autocvar_hud_panel_healtharmor_text)
 +                    DrawNumIcon(iconalign, pos, eX * 0.5 * mySize_x + eY * mySize_y, leftcnt, leftname, 1, HUD_Get_Num_Color(leftcnt, leftmax), 1);
                        }
  
                        if(rightactive)
                        {
 +                barpos = pos + eX * 0.5 * mySize_x;
                                if(baralign == 0 || baralign == 3) { // left align
 -                                      barpos = pos + eX * 0.5 * mySize_x;
 -                                      barsize = eX * 0.5 * mySize_x * min(1, rightcnt/200) + eY * mySize_y;
 +                    barflip = 0;
                                } else { // right align
 -                                      barpos = pos + eX * mySize_x - eX * 0.5 * mySize_x * min(1, rightcnt/200);
 -                                      barsize = eX * 0.5 * mySize_x * min(1, rightcnt/200) + eY * mySize_y;
 +                    barflip = 1;
                                }
  
                                if(progressbar)
                                {
                                        HUD_Panel_GetProgressBarColorForString(rightname);
 -                                      HUD_Panel_DrawProgressBar(barpos, 0, barsize, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
 +                    HUD_Panel_DrawProgressBar(barpos, barsize, rightprogressname, 0, barflip, min(1, rightcnt/rightmax), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                                }
 -                              DrawNumIcon(iconalign, pos + eX * 0.5 * mySize_x, eX * 0.5 * mySize_x + eY * mySize_y, rightcnt, rightname, 0, HUD_Get_Num_Color(rightcnt, 200), 1);
 +                if(autocvar_hud_panel_healtharmor_text)
 +                    DrawNumIcon(iconalign, pos + eX * 0.5 * mySize_x, eX * 0.5 * mySize_x + eY * mySize_y, rightcnt, rightname, 0, HUD_Get_Num_Color(rightcnt, rightmax), 1);
                        }
  
                        if(fuel)
                        {
 -                              if(baralign == 0 || baralign == 3) { // left align
 -                                      barpos = pos + eX * mySize_x - eX * mySize_x * min(1, fuel/100);
 -                                      barsize = eX * mySize_x * min(1, fuel/100) + eY * 0.2 * mySize_y;
 -                              } else {
 -                                      barpos = pos;
 -                                      barsize = eX * mySize_x * min(1, fuel/100) + eY * 0.2 * mySize_y;
 -                              }
 -                              HUD_Panel_GetProgressBarColor(fuel);
 -                              HUD_Panel_DrawProgressBar(barpos, 0, barsize, progressbar_color, panel_fg_alpha * 0.8, DRAWFLAG_NORMAL);
 +                barpos = pos;
 +                barsize = eX * mySize_x + eY * 0.2 * mySize_y;
 +                HUD_Panel_GetProgressBarColor(fuel);
 +                HUD_Panel_DrawProgressBar(barpos, barsize, "progressbar", 0, mod(baralign, 2), min(1, fuel/100), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * 0.8, DRAWFLAG_NORMAL);
                        }
                }
                else if (mySize_x/mySize_y > 1.5)
                {
 +            barsize = eX * mySize_x + eY * 0.5 * mySize_y;
                        if(leftactive)
                        {
 +                barpos = pos;
                                if(baralign == 1 || baralign == 3) { // right align
 -                                      barpos = pos + eX * mySize_x - eX * mySize_x * min(1, leftcnt/200);
 -                                      barsize = eX * mySize_x * min(1, leftcnt/200) + eY * 0.5 * mySize_y;
 +                    barflip = 1;
                                } else { // left align
 -                                      barpos = pos;
 -                                      barsize = eX * mySize_x * min(1, leftcnt/200) + eY * 0.5 * mySize_y;
 +                    barflip = 0;
                                }
  
                                if(progressbar)
                                {
                                        HUD_Panel_GetProgressBarColorForString(leftname);
 -                                      HUD_Panel_DrawProgressBar(barpos, 0, barsize, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
 +                    HUD_Panel_DrawProgressBar(barpos, barsize, leftprogressname, 0, barflip, min(1, leftcnt/leftmax), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                                }
 -                              DrawNumIcon(iconalign, pos, eX * mySize_x + eY * 0.5 * mySize_y, leftcnt, leftname, 1, HUD_Get_Num_Color(leftcnt, 200), 1);
 +                if(autocvar_hud_panel_healtharmor_text)
 +                    DrawNumIcon(iconalign, pos, eX * mySize_x + eY * 0.5 * mySize_y, leftcnt, leftname, 1, HUD_Get_Num_Color(leftcnt, leftmax), 1);
                        }
  
                        if(rightactive)
                        {
 +                barpos = pos + eY * 0.5 * mySize_y;
                                if(baralign == 0 || baralign == 3) { // left align
 -                                      barpos = pos + eY * 0.5 * mySize_y;
 -                                      barsize = eX * mySize_x * min(1, rightcnt/200) + eY * 0.5 * mySize_y;
 +                    barflip = 0;
                                } else { // right align
 -                                      barpos = pos + eX * mySize_x - eX * mySize_x * min(1, rightcnt/200) + eY * 0.5 * mySize_y;
 -                                      barsize = eX * mySize_x * min(1, rightcnt/200) + eY * 0.5 * mySize_y;
 +                    barflip = 1;
                                }
  
                                if(progressbar)
                                {
                                        HUD_Panel_GetProgressBarColorForString(rightname);
 -                                      HUD_Panel_DrawProgressBar(barpos, 0, barsize, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
 +                    HUD_Panel_DrawProgressBar(barpos, barsize, rightprogressname, 0, barflip, min(1, rightcnt/rightmax), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                                }
 -                              DrawNumIcon(iconalign, pos + eY * 0.5 * mySize_y, eX * mySize_x + eY * 0.5 * mySize_y, rightcnt, rightname, 0, HUD_Get_Num_Color(rightcnt, 200), 1);
 +                if(autocvar_hud_panel_healtharmor_text)
 +                    DrawNumIcon(iconalign, pos + eY * 0.5 * mySize_y, eX * mySize_x + eY * 0.5 * mySize_y, rightcnt, rightname, 0, HUD_Get_Num_Color(rightcnt, rightmax), 1);
                        }
  
                        if(fuel)
                        {
 -                              if(baralign == 0 || baralign == 3) { // left align
 -                                      barpos = pos + eX * mySize_x - eX * mySize_x * min(1, fuel/100);
 -                                      barsize = eX * mySize_x * min(1, fuel/100) + eY * 0.1 * mySize_y;
 -                              } else {
 -                                      barpos = pos;
 -                                      barsize = eX * mySize_x * min(1, fuel/100) + eY * 0.1 * mySize_y;
 -                              }
 -                              HUD_Panel_GetProgressBarColor(fuel);
 -                              HUD_Panel_DrawProgressBar(barpos, 0, barsize, progressbar_color, panel_fg_alpha * 0.8, DRAWFLAG_NORMAL);
 +                barpos = pos;
 +                barsize = eX * mySize_x + eY * 0.2 * mySize_y;
 +                HUD_Panel_GetProgressBarColor(fuel);
 +                HUD_Panel_DrawProgressBar(barpos, barsize, "progressbar", 0, mod(baralign, 2), min(1, fuel/100), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * 0.8, DRAWFLAG_NORMAL);
                        }
                }
                else
                {
 +            barsize = eX * 0.5 * mySize_x + eY * mySize_y;
                        if(leftactive)
                        {
 -                              if(baralign == 1 || baralign == 3) { // down align
 -                                      barpos = pos + eY * mySize_y - eY * mySize_y * min(1, leftcnt/200);
 -                                      barsize = eX * 0.5 * mySize_x + eY * mySize_y * min(1, leftcnt/200);
 -                              } else { // up align
 -                                      barpos = pos;
 -                                      barsize = eX * 0.5 * mySize_x + eY * mySize_y * min(1, leftcnt/200);
 +                barpos = pos;
 +                              if(baralign == 1 || baralign == 3) { // right align
 +                    barflip = 1;
 +                              } else { // left align
 +                    barflip = 0;
                                }
  
                                if(iconalign == 1 || iconalign == 3) { // down align
                                if(progressbar)
                                {
                                        HUD_Panel_GetProgressBarColorForString(leftname);
 -                                      HUD_Panel_DrawProgressBar(barpos, 1, barsize, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
 +                    HUD_Panel_DrawProgressBar(barpos, barsize, leftprogressname, 1, barflip, min(1, leftcnt/leftmax), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                                }
 -                              drawpic_aspect_skin(picpos, leftname, '0.4 0.4 0' * mySize_x, '1 1 1', leftalpha * panel_fg_alpha, DRAWFLAG_NORMAL);
 -                              drawstring_aspect(numpos, ftos(leftcnt), eX * 0.5 * mySize_x + eY * 0.25 * mySize_x, HUD_Get_Num_Color(leftcnt, 200), panel_fg_alpha, DRAWFLAG_NORMAL);
 +                if(autocvar_hud_panel_healtharmor_text)
 +                {
 +                    drawpic_aspect_skin(picpos, leftname, '0.4 0.4 0' * mySize_x, '1 1 1', leftalpha * panel_fg_alpha, DRAWFLAG_NORMAL);
 +                    drawstring_aspect(numpos, ftos(leftcnt), eX * 0.5 * mySize_x + eY * 0.25 * mySize_x, HUD_Get_Num_Color(leftcnt, leftmax), panel_fg_alpha, DRAWFLAG_NORMAL);
 +                }
                        }
  
                        if(rightactive)
                        {
 -                              if(baralign == 0 || baralign == 3) { // up align
 -                                      barpos = pos + eX * 0.5 * mySize_x;
 -                                      barsize = eX * 0.5 * mySize_x + eY * mySize_y * min(1, rightcnt/200);
 -                              } else { // down align
 -                                      barpos = pos + eY * mySize_y - eY * mySize_y * min(1, rightcnt/200) + eX * 0.5 * mySize_x;
 -                                      barsize = eX * 0.5 * mySize_x + eY * mySize_y * min(1, rightcnt/200);
 +                barpos = pos + eX * 0.5 * mySize_x;
 +                              if(baralign == 0 || baralign == 3) { // left align
 +                    barflip = 0;
 +                              } else { // right align
 +                    barflip = 1;
                                }
  
                                if(iconalign == 0 || iconalign == 3) { // up align
                                if(progressbar)
                                {
                                        HUD_Panel_GetProgressBarColorForString(rightname);
 -                                      HUD_Panel_DrawProgressBar(barpos, 1, barsize, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
 +                    HUD_Panel_DrawProgressBar(barpos, barsize, rightprogressname, 1, barflip, min(1, rightcnt/rightmax), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
                                }
 -                              drawpic_aspect_skin(picpos, rightname, '0.4 0.4 0' * mySize_x, '1 1 1', rightalpha * panel_fg_alpha, DRAWFLAG_NORMAL);
 -                              drawstring_aspect(numpos, ftos(rightcnt), eX * 0.5 * mySize_x + eY * 0.25 * mySize_x, HUD_Get_Num_Color(rightcnt, 200), panel_fg_alpha, DRAWFLAG_NORMAL);
 +                if(autocvar_hud_panel_healtharmor_text)
 +                {
 +                    drawpic_aspect_skin(picpos, rightname, '0.4 0.4 0' * mySize_x, '1 1 1', rightalpha * panel_fg_alpha, DRAWFLAG_NORMAL);
 +                    drawstring_aspect(numpos, ftos(rightcnt), eX * 0.5 * mySize_x + eY * 0.25 * mySize_x, HUD_Get_Num_Color(rightcnt, rightmax), panel_fg_alpha, DRAWFLAG_NORMAL);
 +                }
                        }
  
                        if(fuel)
                        {
 -                              if(baralign == 0 || baralign == 3) { // left align
 -                                      barpos = pos;
 -                                      barsize = eX * 0.05 * mySize_x + eY * mySize_y * min(1, fuel/100);
 -                              } else {
 -                                      barpos = pos + eY * mySize_y - eY * mySize_y * min(1, fuel/100);
 -                                      barsize = eX * 0.05 * mySize_x + eY * mySize_y * min(1, fuel/100);
 -                              }
 -                              HUD_Panel_GetProgressBarColor(fuel);
 -                              HUD_Panel_DrawProgressBar(barpos, 1, barsize, progressbar_color, panel_fg_alpha * 0.8, DRAWFLAG_NORMAL);
 +                barpos = pos;
 +                barsize = eX * 0.05 * mySize_x + eY * mySize_y;
 +                HUD_Panel_GetProgressBarColor(fuel);
 +                HUD_Panel_DrawProgressBar(barpos, barsize, "progressbar", 1, mod(baralign, 2), min(1, fuel/100), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * 0.8, DRAWFLAG_NORMAL);
                        }
                }
        }
@@@ -2674,8 -2637,8 +2674,8 @@@ void HUD_KillNotify(string s1, string s
  {
        float w;
        float alsoprint, gentle;
 -      alsoprint = (cvar("hud_panel_notify_print") || !panel_enabled); // print message to console if: notify panel disabled, or cvar to do so enabled
 -      gentle = (cvar("cl_gentle") || cvar("cl_gentle_messages"));
 +      alsoprint = (autocvar_hud_panel_notify_print || !panel_enabled); // print message to console if: notify panel disabled, or cvar to do so enabled
 +      gentle = (autocvar_cl_gentle || autocvar_cl_gentle_messages);
        
        if ((msg == MSG_SUICIDE || msg == MSG_KILL || msg == MSG_KILL_ACTION) && gametype == GAME_CTS) // selfkill isn't interesting in CTS and only spams up the notify panel
                return;
                else if(type == RACE_FAIL) {
                        HUD_KillNotify_Push(s1, s2, 1, RACE_FAIL);
                }
 +      } else if(msg == MSG_KA) {
 +              if(type == KA_PICKUPBALL) {
 +                      HUD_KillNotify_Push(s1, s2, 0, KA_PICKUPBALL);
 +                      if(alsoprint)
 +                              print (s1, "^7 has picked up the ball!\n");
 +              }
 +              else if(type == KA_DROPBALL) {
 +                      HUD_KillNotify_Push(s1, s2, 0, KA_DROPBALL);
 +                      if(alsoprint)
 +                              print(s1, "^7 has dropped the ball!\n");
 +              }
        }
  }
  
  void HUD_Centerprint(string s1, string s2, float type, float msg)
  {
        float gentle;
 -      gentle = (cvar("cl_gentle") || cvar("cl_gentle_messages"));
 +      gentle = (autocvar_cl_gentle || autocvar_cl_gentle_messages);
        if(msg == MSG_SUICIDE) {
                if (type == DEATH_TEAMCHANGE) {
                        centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "You are now on: ", s1));
@@@ -3153,9 -3105,9 +3153,9 @@@ void HUD_Notify (void
  
        float a;
        float when;
 -      when = cvar("hud_panel_notify_time");
 +      when = autocvar_hud_panel_notify_time;
        float fadetime;
 -      fadetime = cvar("hud_panel_notify_fadetime");
 +      fadetime = autocvar_hud_panel_notify_fadetime;
  
        string s;
  
        string attacker, victim;
  
        float i, j, w, step, limit;
 -      if(cvar("hud_panel_notify_flip")) //order items from the top down
 +      if(autocvar_hud_panel_notify_flip) //order items from the top down
        {
                i = 0;
                step = +1;
                                        s = "notify_blue_captured";
                                }
                        }
 +                      else if(killnotify_deathtype[j] == KA_DROPBALL)
 +                      {
 +                              s = "notify_balldropped";
 +                      }
 +                      else if(killnotify_deathtype[j] == KA_PICKUPBALL)
 +                      {
 +                              s = "notify_ballpickedup";
 +                      }
 +                      
                        attacker = textShortenToWidth(killnotify_attackers[j], 0.48 * mySize_x - height, fontsize, stringwidth_colors);
                        pos_attacker = pos + eX * (0.52 * mySize_x + height) + eY * (0.5 * fontsize_y + i * height);
                        weap_pos = pos + eX * 0.5 * mySize_x - eX * height + eY * i * height;
@@@ -3562,7 -3505,7 +3562,7 @@@ void HUD_Radar(void
        if(hud_panel_radar_rotation == 0)
        {
                // max-min distance must fit the radar in any rotation
-               bigsize = vlen_minnorm2d(teamradar_size2d) * scale2d / (1.05 * vlen2d(mi_max - mi_min));
+               bigsize = vlen_minnorm2d(teamradar_size2d) * scale2d / (1.05 * vlen2d(mi_scale));
        }
        else
        {
                  f * bigsize
                + (1 - f) * normalsize;
        teamradar_origin3d_in_texcoord = teamradar_3dcoord_to_texcoord(
-                 f * (mi_min + mi_max) * 0.5
+                 f * mi_center
                + (1 - f) * view_origin);
  
        color1 = GetPlayerColor(player_localentnum-1);
@@@ -3906,12 -3849,10 +3906,12 @@@ float vote_change; // "time" when vote_
  
  void HUD_VoteWindow(void) 
  {
 +    uid2name_dialog = 0;
        if(autocvar_cl_allow_uid2name == -1 && (gametype == GAME_CTS || gametype == GAME_RACE))
        {
                vote_active = 1;
                vote_called_vote = strzone(strcat("^2Name ^7instead of \"^1Unregistered player\"", " ^7in stats"));
 +        uid2name_dialog = 1;
        }
  
        if(!autocvar_hud_panel_vote && !autocvar__hud_configure)
        if(!autocvar__hud_configure)
        {
                panel_fg_alpha = autocvar_hud_panel_fg_alpha;
 -              panel_bg_alpha_str = cvar_string("hud_panel_vote_bg_alpha");
 +              panel_bg_alpha_str = autocvar_hud_panel_vote_bg_alpha;
  
                if(panel_bg_alpha_str == "") {
                        panel_bg_alpha_str = ftos(autocvar_hud_panel_bg_alpha);
  
        active_panel = HUD_PANEL_VOTE;
        HUD_Panel_UpdateCvars(vote);
 -      vector pos, mySize;
 -      pos = panel_pos;
 -      mySize = panel_size;
  
 -      if(autocvar_cl_allow_uid2name == -1 && (gametype == GAME_CTS || gametype == GAME_RACE))
 +      if(uid2name_dialog)
        {
                panel_pos = eX * 0.3 * vid_conwidth + eY * 0.1 * vid_conheight;
                panel_size = eX * 0.4 * vid_conwidth + eY * 0.3 * vid_conheight;
        }
  
 -      a = vote_alpha * bound(cvar("hud_panel_vote_alreadyvoted_alpha"), 1 - vote_highlighted, 1);
 +    // these must be below above block
 +      vector pos, mySize;
 +      pos = panel_pos;
 +      mySize = panel_size;
 +
 +      a = vote_alpha * bound(autocvar_hud_panel_vote_alreadyvoted_alpha, 1 - vote_highlighted, 1);
        HUD_Panel_DrawBg(a);
        a = panel_fg_alpha * a;
  
        mySize = newSize;
  
        s = "A vote has been called for:";
 -      if(autocvar_cl_allow_uid2name == -1 && (gametype == GAME_CTS || gametype == GAME_RACE))
 +      if(uid2name_dialog)
                s = "Allow servers to store and display your name?";
        drawstring_aspect(pos, s, eX * mySize_x + eY * (2/8) * mySize_y, '1 1 1', a, DRAWFLAG_NORMAL);
        s = textShortenToWidth(vote_called_vote, mySize_x, '1 1 0' * mySize_y * (1/8), stringwidth_colors);
        drawcolorcodedstring_aspect(pos + eY * (2/8) * mySize_y, s, eX * mySize_x + eY * (1.75/8) * mySize_y, a, DRAWFLAG_NORMAL);
  
        // print the yes/no counts
 -      s = strcat("Yes (", getcommandkey("vyes", "vyes"), "): ", ftos(vote_yescount));
 -      if(autocvar_cl_allow_uid2name == -1 && (gametype == GAME_CTS || gametype == GAME_RACE))
 -              s = strcat("Yes: (press y)");
 +    s = strcat("Yes (", getcommandkey("vyes", "vyes"), "): ", ftos(vote_yescount));
        drawstring_aspect(pos + eY * (4/8) * mySize_y, s, eX * 0.5 * mySize_x + eY * (1.5/8) * mySize_y, '0 1 0', a, DRAWFLAG_NORMAL);
 -      s = strcat("No (", getcommandkey("vno", "vno"), "): ", ftos(vote_nocount));
 -      if(autocvar_cl_allow_uid2name == -1 && (gametype == GAME_CTS || gametype == GAME_RACE))
 -              s = strcat("No: (press n)");
 +    s = strcat("No (", getcommandkey("vno", "vno"), "): ", ftos(vote_nocount));
        drawstring_aspect(pos + eX * 0.5 * mySize_x + eY * (4/8) * mySize_y, s, eX * 0.5 * mySize_x + eY * (1.5/8) * mySize_y, '1 0 0', a, DRAWFLAG_NORMAL);
  
        // draw the progress bar backgrounds
@@@ -4372,44 -4315,6 +4372,44 @@@ void HUD_Mod_KH(vector pos, vector mySi
        }
  }
  
 +// Keepaway HUD mod icon
 +float kaball_prevstatus; // last remembered status
 +float kaball_statuschange_time; // time when the status changed
 +
 +// we don't need to reset for keepaway since it immediately 
 +// autocorrects prevstatus as to if the player has the ball or not
 +
 +void HUD_Mod_Keepaway(vector pos, vector mySize)
 +{
 +      mod_active = 1; // keepaway should always show the mod HUD
 +      
 +      float BLINK_FACTOR = 0.15;
 +      float BLINK_BASE = 0.85;
 +      float BLINK_FREQ = 5; 
 +      float kaball_alpha = BLINK_BASE + BLINK_FACTOR * cos(time * BLINK_FREQ);
 +      
 +      float stat_items = getstati(STAT_ITEMS);
 +      float kaball = (stat_items/IT_KEY1) & 1;
 +      
 +      if(kaball != kaball_prevstatus)
 +      {
 +              kaball_statuschange_time = time;
 +              kaball_prevstatus = kaball;
 +      }
 +      
 +      // todo: Fix the sizing with the expanding image
 +      
 +      float kaball_statuschange_elapsedtime = time - kaball_statuschange_time;
 +      float f = bound(0, kaball_statuschange_elapsedtime*2, 1);
 +      
 +      if(kaball_prevstatus && f < 1)
 +              drawpic_aspect_skin_expanding(pos + eY * 0.25 * mySize_y, "keepawayball_carrying", eX * mySize_x + eY * mySize_y * 0.5, '1 1 1', panel_fg_alpha * kaball_alpha, DRAWFLAG_NORMAL, f);
 +      
 +      if(kaball)
 +              drawpic_aspect_skin(pos, "keepawayball_carrying", eX * mySize_x + eY * mySize_y, '1 1 1', panel_fg_alpha * kaball_alpha * f, DRAWFLAG_NORMAL);
 +}
 +
 +
  // Nexball HUD mod icon
  void HUD_Mod_NexBall(vector pos, vector mySize)
  {
                        p = 2 - p;
  
                //Draw the filling
 -              vector barsize;
                float vertical;
                if(mySize_x > mySize_y)
                {
 -                      barsize = eX * p * mySize_x + eY * mySize_y;
                        vertical = 0;
                }
                else
                {
 -                      barsize = eX * mySize_x + eY * p * mySize_y;
                        vertical = 1;
                }
                HUD_Panel_GetProgressBarColor(nexball);
 -              HUD_Panel_DrawProgressBar(pos, vertical, barsize, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
 +        HUD_Panel_DrawProgressBar(pos, mySize, "statusbar", vertical, 0, p, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
        }
  
        if (stat_items & IT_KEY1)
@@@ -4483,9 -4391,9 +4483,9 @@@ void HUD_Mod_Race(vector pos, vector my
  
        if(score && (score < t || !t)) {
                db_put(ClientProgsDB, strcat(shortmapname, rr, "time"), ftos(score));
 -              if(cvar("cl_autodemo_delete_keeprecords"))
 +              if(autocvar_cl_autodemo_delete_keeprecords)
                {
 -                      f = cvar("cl_autodemo_delete");
 +                      f = autocvar_cl_autodemo_delete;
                        f &~= 1;
                        cvar_set("cl_autodemo_delete", ftos(f)); // don't delete demo with new record!
                }
@@@ -4607,7 -4515,7 +4607,7 @@@ void HUD_ModIcons(void
        if(!autocvar_hud_panel_modicons && !autocvar__hud_configure)
                return;
  
 -      if (gametype != GAME_KEYHUNT && gametype != GAME_CTF && gametype != GAME_NEXBALL && gametype != GAME_CTS && gametype != GAME_RACE && gametype != GAME_CA && !autocvar__hud_configure)
 +      if (gametype != GAME_KEYHUNT && gametype != GAME_CTF && gametype != GAME_NEXBALL && gametype != GAME_CTS && gametype != GAME_RACE && gametype != GAME_CA && gametype != GAME_FREEZETAG && gametype != GAME_KEEPAWAY && !autocvar__hud_configure)
                return;
  
        active_panel = HUD_PANEL_MODICONS;
                HUD_Mod_NexBall(pos, mySize);
        else if(gametype == GAME_CTS || gametype == GAME_RACE)
                HUD_Mod_Race(pos, mySize);
 -      else if(gametype == GAME_CA)
 +      else if(gametype == GAME_CA || gametype == GAME_FREEZETAG)
                HUD_Mod_CA(pos, mySize);
 +      else if(gametype == GAME_KEEPAWAY)
 +              HUD_Mod_Keepaway(pos, mySize);
  }
  
  // Draw pressed keys (#11)
@@@ -4674,7 -4580,7 +4674,7 @@@ void HUD_DrawPressedKeys(void
        }
  
        // force custom aspect
 -      float aspect = cvar("hud_panel_pressedkeys_aspect");
 +      float aspect = autocvar_hud_panel_pressedkeys_aspect;
        if(aspect)
        {
                vector newSize;
@@@ -4755,20 -4661,20 +4755,20 @@@ void HUD_Chat(void
        cvar_set("con_chatrect_y", ftos(pos_y/vid_conheight));
  
        cvar_set("con_chatwidth", ftos(mySize_x/vid_conwidth));
 -      cvar_set("con_chat", ftos(floor(mySize_y/cvar("con_chatsize") - 0.5)));
 +      cvar_set("con_chat", ftos(floor(mySize_y/autocvar_con_chatsize - 0.5)));
  
        if(autocvar__hud_configure)
        {
                float chatsize;
 -              chatsize = cvar("con_chatsize");
 +              chatsize = autocvar_con_chatsize;
                cvar_set("con_chatrect_x", "9001"); // over 9000, we'll fake it instead for more control over alpha and such
                float i, a;
 -              for(i = 0; i < cvar("con_chat"); ++i)
 +              for(i = 0; i < autocvar_con_chat; ++i)
                {
 -                      if(i == cvar("con_chat") - 1)
 +                      if(i == autocvar_con_chat - 1)
                                a = panel_fg_alpha;
                        else
 -                              a = panel_fg_alpha * floor(((i + 1) * 7 + cvar("con_chattime"))/45);
 +                              a = panel_fg_alpha * floor(((i + 1) * 7 + autocvar_con_chattime)/45);
                        drawcolorcodedstring(pos + eY * i * chatsize, textShortenToWidth("^3Player^7: This is the chat area.", mySize_x, '1 1 0' * chatsize, stringwidth_colors), '1 1 0' * chatsize, a, DRAWFLAG_NORMAL);
                }
        }
@@@ -4822,7 -4728,7 +4822,7 @@@ void HUD_EngineInfo(void
        else
        {
                framecounter += 1;
 -              if(currentTime - prevfps_time > cvar("hud_panel_engineinfo_framecounter_time"))
 +              if(currentTime - prevfps_time > autocvar_hud_panel_engineinfo_framecounter_time)
                {
                        prevfps = framecounter/(currentTime - prevfps_time);
                        framecounter = 0;
        vector color;
        color = HUD_Get_Num_Color (prevfps, 100);
        drawfont = hud_bigfont;
 -      drawstring_aspect(pos, strcat("FPS: ", ftos_decimals(prevfps, cvar("hud_panel_engineinfo_framecounter_decimals"))), mySize, color, panel_fg_alpha, DRAWFLAG_NORMAL);
 +      drawstring_aspect(pos, strcat("FPS: ", ftos_decimals(prevfps, autocvar_hud_panel_engineinfo_framecounter_decimals)), mySize, color, panel_fg_alpha, DRAWFLAG_NORMAL);
        drawfont = hud_font;
  }
  
@@@ -5035,7 -4941,7 +5035,7 @@@ void HUD_ShowSpeed(void
        float pos, conversion_factor;
        string speed, zspeed, unit;
  
 -      switch(cvar("cl_showspeed_unit"))
 +      switch(autocvar_cl_showspeed_unit)
        {
                default:
                case 0:
  
        speed = strcat(ftos(floor( vlen(pmove_vel - pmove_vel_z * '0 0 1') * conversion_factor + 0.5 )), unit);
  
 -      numsize_x = numsize_y = cvar("cl_showspeed_size");
 -      pos = (vid_conheight - numsize_y) * cvar("cl_showspeed_position");
 +      numsize_x = numsize_y = autocvar_cl_showspeed_size;
 +      pos = (vid_conheight - numsize_y) * autocvar_cl_showspeed_position;
  
        drawfont = hud_bigfont;
        drawstringcenter(eX + pos * eY, speed, numsize, '1 1 1', autocvar_hud_panel_fg_alpha * hud_fade_alpha, DRAWFLAG_NORMAL);
  
 -      if (cvar("cl_showspeed_z") == 1) {
 +      if (autocvar_cl_showspeed_z == 1) {
                zspeed = strcat(ftos(fabs(floor( pmove_vel_z * conversion_factor + 0.5 ))), unit);
                drawstringcenter(eX + pos * eY + numsize_y * eY, zspeed, numsize * 0.5, '1 1 1', autocvar_hud_panel_fg_alpha * hud_fade_alpha, DRAWFLAG_NORMAL);
        }
@@@ -5092,7 -4998,7 +5092,7 @@@ void HUD_ShowAcceleration(void
        top_y = 0;
  
        f = time - acc_prevtime;
 -      if(cvar("cl_showacceleration_z"))
 +      if(autocvar_cl_showacceleration_z)
                acceleration = (vlen(pmove_vel) - vlen(acc_prevspeed)) * (1 / f);
        else
                acceleration = (vlen(pmove_vel - '0 0 1' * pmove_vel_z) - vlen(acc_prevspeed - '0 0 1' * acc_prevspeed_z)) * (1 / f);
        if (acceleration == 0)
                return;
  
 -      pos = top - sz/2 * eY + (cvar("cl_showacceleration_position") * vid_conheight) * eY;
 +      pos = top - sz/2 * eY + (autocvar_cl_showacceleration_position * vid_conheight) * eY;
  
 -      sz = cvar("cl_showacceleration_size");
 -      scale = cvar("cl_showacceleration_scale");
 -      alpha = cvar("cl_showacceleration_alpha");
 -      if (cvar("cl_showacceleration_color_custom"))
 -              rgb = stov(cvar_string("cl_showacceleration_color"));
 +      sz = autocvar_cl_showacceleration_size;
 +      scale = autocvar_cl_showacceleration_scale;
 +      alpha = autocvar_cl_showacceleration_alpha;
 +      if (autocvar_cl_showacceleration_color_custom)
 +              rgb = stov(autocvar_cl_showacceleration_color);
        else {
                if (acceleration < 0)
                        rgb = '1 .5 .5' - '0 .5 .5' * bound(0, -acceleration * 0.2, 1);
        }
  
        if (acceleration > 0)
 -              HUD_Panel_DrawProgressBar(pos, 0, acceleration * scale * '40 0 0' + sz * eY, rgb, alpha * autocvar_hud_panel_fg_alpha * hud_fade_alpha, DRAWFLAG_NORMAL);
 +        HUD_Panel_DrawProgressBar(pos, eX * (vid_conwidth - pos_x) + eY * sz, "statusbar", 0, 0, acceleration * scale, rgb, alpha * autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
        else
 -              HUD_Panel_DrawProgressBar(pos + acceleration * scale * '40 0 0', 0, -acceleration * scale * '40 0 0' + sz * eY, rgb, alpha * autocvar_hud_panel_fg_alpha * hud_fade_alpha, DRAWFLAG_NORMAL);
 +        HUD_Panel_DrawProgressBar(eY * pos_y, eX * pos_x + eY * sz, "statusbar", 0, 1, -acceleration * scale, rgb, alpha * autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
  }
  
  void HUD_Reset (void)
@@@ -5191,11 -5097,11 +5191,11 @@@ void HUD_Main (void
                return;
  
        // Drawing stuff
 -      if (hud_skin_path != cvar_string("hud_skin"))
 +      if (hud_skin_path != autocvar_hud_skin)
        {
                if (hud_skin_path)
                        strunzone(hud_skin_path);
 -              hud_skin_path = strzone(strcat("gfx/hud/", cvar_string("hud_skin")));
 +              hud_skin_path = strzone(strcat("gfx/hud/", autocvar_hud_skin));
        }
  
        // HUD configure visible grid
        {
                float f;
                vector color;
 -              float hud_dock_color_team = cvar("hud_dock_color_team");
 +              float hud_dock_color_team = autocvar_hud_dock_color_team;
                if((teamplay) && hud_dock_color_team) {
                        f = stof(getplayerkey(player_localentnum - 1, "colors"));
                        color = colormapPaletteColor(mod(f, 16), 1) * hud_dock_color_team;
                }
                else
                {
 -                      string hud_dock_color = cvar_string("hud_dock_color");
 +                      string hud_dock_color = autocvar_hud_dock_color;
                        if(hud_dock_color == "shirt") {
                                f = stof(getplayerkey(player_localentnum - 1, "colors"));
                                color = colormapPaletteColor(floor(f / 16), 0);
                                pic = "gfx/hud/default/dock_medium";
                        }
                }
 -              drawpic('0 0 0', pic, eX * vid_conwidth + eY * vid_conheight, color, cvar("hud_dock_alpha") * hud_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
                HUD_Chat(); // HUD_DrawPanel(HUD_PANEL_CHAT);
  
        // TODO hud_'ify these
 -      if (cvar("cl_showspeed"))
 +      if (autocvar_cl_showspeed)
                HUD_ShowSpeed();
 -      if (cvar("cl_showacceleration"))
 +      if (autocvar_cl_showacceleration)
                HUD_ShowAcceleration();
  
        if (autocvar__hud_configure && spectatee_status && hud_configure_prev == -1) // try to join if we are in hud_configure mode, but still spectating, and in the first frame (in order to get rid of motd when launching a server via the menu "HUD Setup" button)
index 8584d24f2b26a52fad6a308b753bfdf3dcab4463,7df28a96bab6e13f82f7e5e1f9791a9962045fb3..fad229f6a914ca905ae2f0a02da164ad7c9d24f7
@@@ -119,11 -119,11 +119,11 @@@ void Draw_WaypointSprite(
        if(self.hideflags & 2)
                return; // radar only
  
 -      if(cvar("cl_hidewaypoints") >= 2)
 +      if(autocvar_cl_hidewaypoints >= 2)
                return;
  
        if(self.hideflags & 1)
 -              if(cvar("cl_hidewaypoints"))
 +              if(autocvar_cl_hidewaypoints)
                        return; // fixed waypoint
  
        InterpolateOrigin_Do();
                d = o - '0.5 0 0' * vid_conwidth - '0 0.5 0' * vid_conheight;
  
                /*
 -              if(cvar("v_flipped"))
 +              if(autocvar_v_flipped)
                        d_x = -d_x;
                */
  
@@@ -409,23 -409,23 +409,22 @@@ void Ent_WaypointSprite(
  
  void WaypointSprite_Load()
  {
-       waypointsprite_fadedistance = vlen(mi_max - mi_min);
+       waypointsprite_fadedistance = vlen(mi_scale);
 -      waypointsprite_normdistance = cvar("g_waypointsprite_normdistance");
 -      waypointsprite_minscale = cvar("g_waypointsprite_minscale");
 -      waypointsprite_minalpha = cvar("g_waypointsprite_minalpha");
 -      waypointsprite_distancealphaexponent = cvar("g_waypointsprite_distancealphaexponent");
 -      waypointsprite_timealphaexponent = cvar("g_waypointsprite_timealphaexponent");
 -      waypointsprite_scale = cvar_or("g_waypointsprite_scale", 1);
 -      waypointsprite_edgefadealpha = cvar_or("g_waypointsprite_edgefadealpha", 1);
 -      waypointsprite_edgefadescale = cvar_or("g_waypointsprite_edgefadescale", 1);
 -      waypointsprite_edgefadedistance = cvar("g_waypointsprite_edgefadedistance");
 -      waypointsprite_crosshairfadealpha = cvar_or("g_waypointsprite_crosshairfadealpha", 1);
 -      waypointsprite_crosshairfadescale = cvar_or("g_waypointsprite_crosshairfadescale", 1);
 -      waypointsprite_crosshairfadedistance = cvar("g_waypointsprite_crosshairfadedistance");
 -      waypointsprite_distancefadealpha = cvar_or("g_waypointsprite_distancefadealpha", 1);
 -      waypointsprite_distancefadescale = cvar_or("g_waypointsprite_distancefadescale", 1);
 -      waypointsprite_distancefadedistance = waypointsprite_fadedistance * cvar_or("g_waypointsprite_distancefadedistancemultiplier", 1);
 -      waypointsprite_alpha = cvar_or("g_waypointsprite_alpha", 1) * (1 - autocvar__menu_alpha);
 +      waypointsprite_normdistance = autocvar_g_waypointsprite_normdistance;
 +      waypointsprite_minscale = autocvar_g_waypointsprite_minscale;
 +      waypointsprite_minalpha = autocvar_g_waypointsprite_minalpha;
 +      waypointsprite_distancealphaexponent = autocvar_g_waypointsprite_distancealphaexponent;
 +      waypointsprite_timealphaexponent = autocvar_g_waypointsprite_timealphaexponent;
 +      waypointsprite_scale = autocvar_g_waypointsprite_scale;
 +      waypointsprite_edgefadealpha = autocvar_g_waypointsprite_edgefadealpha;
 +      waypointsprite_edgefadescale = autocvar_g_waypointsprite_edgefadescale;
 +      waypointsprite_edgefadedistance = autocvar_g_waypointsprite_edgefadedistance;
 +      waypointsprite_crosshairfadealpha = autocvar_g_waypointsprite_crosshairfadealpha;
 +      waypointsprite_crosshairfadescale = autocvar_g_waypointsprite_crosshairfadescale;
 +      waypointsprite_crosshairfadedistance = autocvar_g_waypointsprite_crosshairfadedistance;
 +      waypointsprite_distancefadealpha = autocvar_g_waypointsprite_distancefadealpha;
 +      waypointsprite_distancefadescale = autocvar_g_waypointsprite_distancefadescale;
-       waypointsprite_distancefadedistance = vlen(mi_max - mi_min) * autocvar_g_waypointsprite_distancefadedistancemultiplier;
-       waypointsprite_alpha = autocvar_g_waypointsprite_alpha * (1 - autocvar__menu_alpha);
++      waypointsprite_distancefadedistance = waypointsprite_fadedistance * autocvar_g_waypointsprite_distancefadedistancemultiplier;
  
        if(!waypointsprite_initialized)
        {
                        db_put(tempdb, sname, ftos(max(f, stof(db_get(tempdb, sname)))));
                }
                search_end(dh);
+               waypointsprite_initialized = true;
        }
-       waypointsprite_initialized = 1;
  }