Merge remote branch 'origin/master' into fruitiex/cl_vyes
authorFruitieX <fruitiex@gmail.com>
Tue, 30 Nov 2010 11:19:13 +0000 (13:19 +0200)
committerFruitieX <fruitiex@gmail.com>
Tue, 30 Nov 2010 11:19:13 +0000 (13:19 +0200)
1  2 
defaultXonotic.cfg
qcsrc/client/Main.qc
qcsrc/client/hud.qc

diff --combined defaultXonotic.cfg
@@@ -89,13 -89,14 +89,14 @@@ _cl_color 10
  _cl_name Player
  _cl_playermodel models/player/umbra.iqm
  _cl_playerskin 0
- seta crosshair 3
+ seta crosshair 16
  seta crosshair_color "0.6 0.8 1"
- seta crosshair_alpha 1
- seta crosshair_size 0.35
+ seta crosshair_alpha 0.3
+ seta crosshair_size 0.5
  seta crosshair_dot 1
  seta crosshair_dot_alpha 1
- seta crosshair_dot_size 1
+ seta crosshair_dot_size 0.6
+ seta crosshair_dot_color "1 0 0" "when != 0, use custom color for the crosshair dot"
  seta crosshair_pickup 0.25
  seta crosshair_pickup_speed 4
  seta crosshair_per_weapon 0   "when 1, each gun will display a different crosshair"
@@@ -1074,8 -1075,8 +1075,8 @@@ alias vdoend "vdo endmatch
  
  alias lsmaps "cmd lsmaps" // lists all maps on server (for vmap, suggestmap, vnextmap)
  alias lsnewmaps "cmd lsnewmaps" // lists all maps on server that do not yet have a record set (race/cts)
 -bind F1 vyes
 -bind F2 vno
 +bind F1 cl_cmd vyes
 +bind F2 cl_cmd vno
  
  //used for spectate/observer mode
  alias spec "cmd spectate"
@@@ -1348,6 -1349,11 +1349,11 @@@ seta hud_panel_weapons_ammo_full_fuel 1
  seta hud_panel_weapons_timeout "3" "panel disappears if you don't switch weapon for this amount of seconds"
  seta hud_panel_weapons_timeout_effect "1" "disappearance effect: 0) no effect; 1) panel moves out of screen; 2) panel fades out"
  
+ seta hud_panel_ammo_maxammo "40" "when you have this much ammo, the ammo status bar is full"
+ seta hud_panel_healtharmor_maxhealth "250" "when you have this much health, the health status bar is full"
+ seta hud_panel_healtharmor_maxarmor "150" "when you have this much armor, the armor status bar is full"
  seta hud_panel_notify_time 10 "time that a new entry stays until it fades out"
  seta hud_panel_notify_fadetime 3 "fade out time"
  
@@@ -1699,7 -1705,7 +1705,7 @@@ seta cl_showspeed_position 0.7 "Y-axis 
  seta cl_showacceleration 0 "show the XY acceleration of the player"
  seta cl_showacceleration_z 0 "include the speed on the Z-axis"
  seta cl_showacceleration_size 40 "height of the bar"
- seta cl_showacceleration_scale 5 "X-axis scale of the bar"
+ seta cl_showacceleration_scale 1 "X-axis scale of the bar"
  seta cl_showacceleration_alpha 0.5 "alpha of the bar"
  seta cl_showacceleration_color_custom 0 "0 = dynamic color depending on acceleration, 1 = use custom color"
  seta cl_showacceleration_color "1 0 0" "color of the bar, needs cl_showacceleration_color_custom to be 1"
@@@ -1997,6 -2003,9 +2003,9 @@@ set g_forced_team_yellow "" "list of pl
  set g_forced_team_pink "" "list of player IDs for pink team"
  set g_forced_team_otherwise "default" "action if a non listed player joins (can be default for default action, spectate for forcing to spectate, or red, blue, yellow, pink)"
  
+ // player statistics server URI
+ set g_playerstats_uri ""
  // other config files
  exec balanceXonotic.cfg
  exec ctfscoring-ai.cfg
diff --combined qcsrc/client/Main.qc
@@@ -608,35 -608,6 +608,35 @@@ void GameCommand(string msg
                e.draw = DrawDebugModel;
                e.classname = "debugmodel";
        }
 +    else if(cmd == "vyes")
 +    {
 +        if(uid2name_dialog)
 +        {
 +            vote_active = 0; // force the panel to disappear right as we have selected the value (to prevent it from fading out in the normal vote panel pos)
 +            vote_prev = 0;
 +            cvar_set("cl_allow_uid2name", "1");
 +            vote_change = -9999;
 +        }
 +        else
 +        {
 +            localcmd("vyes\n");
 +        }
 +    }
 +    else if(cmd == "vno")
 +    {
 +        if(uid2name_dialog)
 +        {
 +            vote_active = 0;
 +            vote_prev = 0;
 +            cvar_set("cl_allow_uid2name", "0");
 +            vote_change = -9999;
 +        }
 +        else
 +        {
 +            localcmd("vno\n");
 +        }
 +    }
 +
        else
        {
                print("Invalid command. For a list of supported commands, try cl_cmd help.\n");
@@@ -656,6 -627,56 +656,6 @@@ float CSQC_InputEvent(float bInputType
        local float bSkipKey;
        bSkipKey = false;
  
 -      if(autocvar_cl_allow_uid2name == -1 && (gametype == GAME_CTS || gametype == GAME_RACE) && panel_fg_alpha && !scoreboard_active) // don't lock keys before we actually see what's going on
 -      {
 -              /*
 -              string vyes_keys;
 -              float keys;
 -              vyes_keys = findkeysforcommand("vyes");
 -              keys = tokenize(vyes_keys);
 -
 -              float i;
 -              for (i = 0; i < keys; ++i)
 -              {
 -                      print(ftos(nPrimary), " ", argv(i), "\n"); 
 -                      if(nPrimary == stof(argv(i)))
 -                      {
 -                              vote_active = 0;
 -                              cvar_set("cl_allow_uid2name", "1");
 -                              return TRUE;
 -                      }
 -              }
 -
 -              string vno_keys;
 -              vno_keys = findkeysforcommand("vno");
 -              keys = tokenize(vno_keys);
 -
 -              float i;
 -              for (i = 0; i < keys; ++i)
 -              {
 -                      if(nPrimary == stof(argv(i)))
 -                      {
 -                              vote_active = 0;
 -                              cvar_set("cl_allow_uid2name", "0");
 -                              return TRUE;
 -                      }
 -              }
 -              */ // If only I could grab F1-F12 in CSQC... but no
 -
 -              if(nPrimary == 121) // ascii value for y
 -              {
 -                      vote_active = 0;
 -                      cvar_set("cl_allow_uid2name", "1");
 -                      return TRUE;
 -              }
 -              else if(nPrimary == 110) // ascii value for n
 -              {
 -                      vote_active = 0;
 -                      cvar_set("cl_allow_uid2name", "0");
 -                      return TRUE;
 -              }
 -      }
 -
        if (HUD_Panel_InputEvent(bInputType, nPrimary, nSecondary))
                return true;
  
@@@ -827,11 -848,6 +827,6 @@@ void Ent_ClientData(
        if(newspectatee_status != spectatee_status)
        {
                float i;
-               // clear the weapon accuracy stats
-               for(i = WEP_FIRST; i <= WEP_LAST; ++i) {
-                       weapon_hits[i] = 0;
-                       weapon_fired[i] = 0;
-               }
  
                // clear race stuff
                race_laptime = 0;
@@@ -883,6 -899,32 +878,32 @@@ void Ent_RandomSeed(
        psrandom(s);
  }
  
+ void Ent_ReadAccuracy(void)
+ {
+       float sf, f, w, b;
+       sf = ReadInt24_t();
+       if(sf == 0)
+       {
+               for(w = 0; w <= WEP_LAST - WEP_FIRST; ++w)
+                       weapon_accuracy[w] = -1;
+               return;
+       }
+       
+       for(w = 0, f = 1; w <= WEP_LAST - WEP_FIRST; ++w, f *= 2)
+       {
+               if(sf & f)
+               {
+                       b = ReadByte();
+                       if(b == 0)
+                               weapon_accuracy[w] = -1;
+                       else if(b == 255)
+                               weapon_accuracy[w] = 1.0; // no better error handling yet, sorry
+                       else
+                               weapon_accuracy[w] = (b - 1.0) / 100.0;
+               }
+       }
+ }
  // CSQC_Ent_Update : Called every frame that the server has indicated an update to the SSQC / CSQC entity has occured.
  // The only parameter reflects if the entity is "new" to the client, meaning it just came into the client's PVS.
  void Ent_RadarLink();
@@@ -946,6 -988,7 +967,7 @@@ void(float bIsNewEntity) CSQC_Ent_Updat
                case ENT_CLIENT_HOOK: Ent_ReadHook(bIsNewEntity, ENT_CLIENT_HOOK); break;
                case ENT_CLIENT_LGBEAM: Ent_ReadHook(bIsNewEntity, ENT_CLIENT_LGBEAM); break;
                case ENT_CLIENT_GAUNTLET: Ent_ReadHook(bIsNewEntity, ENT_CLIENT_GAUNTLET); break;
+               case ENT_CLIENT_ACCURACY: Ent_ReadAccuracy(); break;
                default:
                        error(strcat("unknown entity type in CSQC_Ent_Update: ", ftos(self.enttype), "\n"));
                        break;
diff --combined qcsrc/client/hud.qc
@@@ -14,7 -14,12 +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);
@@@ -491,18 -496,26 +496,26 @@@ void HUD_Panel_ExportCfg(string cfgname
                                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");
@@@ -553,31 -566,37 +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)
@@@ -1692,18 -1711,10 +1711,10 @@@ void HUD_Weapons(void
        }
  
        float show_accuracy;
-       float weapon_stats, weapon_number;
+       float weapon_stats;
        if(cvar("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))));
                // 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;
@@@ -1908,10 -1915,16 +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 && cvar("hud_panel_ammo_progressbar"))
+         HUD_Panel_DrawProgressBar(myPos + eX * cvar("hud_panel_ammo_progressbar_xoffset") * mySize_x, mySize - eX * cvar("hud_panel_ammo_progressbar_xoffset") * mySize_x, cvar_string("hud_panel_ammo_progressbar_name"), 0, 0, min(1, a/cvar("hud_panel_ammo_maxammo")), color, autocvar_hud_progressbar_alpha * panel_fg_alpha * alpha, DRAWFLAG_NORMAL);
+     if(cvar("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
@@@ -2111,129 -2124,147 +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");
        if (flip) {
                leftname = "strength";
+         leftprogressname = cvar_string("hud_panel_powerups_progressbar_strength");
                leftcnt = ceil(strength_time);
                leftexact = strength_time;
  
                rightname = "shield";
+         rightprogressname = cvar_string("hud_panel_powerups_progressbar_shield");
                rightcnt = ceil(shield_time);
                rightexact = shield_time;
        } else {
                leftname = "shield";
+         leftprogressname = cvar_string("hud_panel_powerups_progressbar_shield");
                leftcnt = ceil(shield_time);
                leftexact = shield_time;
  
                rightname = "strength";
+         rightprogressname = cvar_string("hud_panel_powerups_progressbar_strength");
                rightcnt = ceil(strength_time);
                rightexact = strength_time;
        }
  
        drawfont = hud_bigfont;
        float baralign = cvar("hud_panel_powerups_baralign");
+     float barflip;
        float iconalign = cvar("hud_panel_powerups_iconalign");
        float progressbar = cvar("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(cvar("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(cvar("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(cvar("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(cvar("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(cvar("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(cvar("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;
@@@ -2316,9 -2352,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)
        float baralign = cvar("hud_panel_healtharmor_baralign");
        float iconalign = cvar("hud_panel_healtharmor_iconalign");
        float progressbar = cvar("hud_panel_healtharmor_progressbar");
+     float maxhealth = cvar("hud_panel_healtharmor_maxhealth");
+     float maxarmor = cvar("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, cvar_string("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(cvar("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, cvar_string("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(cvar("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(cvar("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 barflip;
                if (flip) { // old style layout with armor left/top of health
                        leftname = "armor";
+             leftprogressname = cvar_string("hud_panel_healtharmor_progressbar_armor");
                        leftcnt = armor;
                        if(leftcnt)
                                leftactive = 1;
                        leftalpha = min((armor+10)/55, 1);
+             leftmax = maxarmor;
  
                        rightname = "health";
+             rightprogressname = cvar_string("hud_panel_healtharmor_progressbar_health");
                        rightcnt = health;
                        rightactive = 1;
                        rightalpha = 1;
+             rightmax = maxhealth;
                } else {
                        leftname = "health";
+             leftprogressname = cvar_string("hud_panel_healtharmor_progressbar_health");
                        leftcnt = health;
                        leftactive = 1;
                        leftalpha = 1;
+             leftmax = maxhealth;
  
                        rightname = "armor";
+             rightprogressname = cvar_string("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(cvar("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(cvar("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(cvar("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(cvar("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(cvar("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(cvar("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);
                        }
                }
        }
@@@ -3849,12 -3886,10 +3886,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)
  
        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;
        }
  
 +    // these must be below above block
 +      vector pos, mySize;
 +      pos = panel_pos;
 +      mySize = panel_size;
 +
        a = vote_alpha * bound(cvar("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("cl_cmd vyes", "cl_cmd 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("cl_cmd vno", "cl_cmd 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
@@@ -4338,20 -4375,17 +4375,17 @@@ void HUD_Mod_NexBall(vector pos, vecto
                        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)
@@@ -5026,9 -5060,9 +5060,9 @@@ void HUD_ShowAcceleration(void
        }
  
        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)