]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/hud.qc
more gettext marks
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / hud.qc
index 6cb1e4470f8324274c89e250c268c0132ac4b17d..412900d164a75a8b4274a22b287d92ba9d1c9bd2 100644 (file)
@@ -297,7 +297,6 @@ void HUD_DrawCenterPrint (void)
        {
                ts = centerprint_messages[i];
                drawfontscale = sz * '1 1 0';
-               drawfont = hud_bigfont;
                pos_x = (vid_conwidth - stringwidth(ts, TRUE, centerprint_fontsize)) * 0.5;
                if (ts != "")
                {
@@ -308,7 +307,6 @@ void HUD_DrawCenterPrint (void)
                        // half height for empty lines looks better
                        pos_y = pos_y + sz * centerprint_fontsize_y * 0.5;
                drawfontscale = '1 1 0';
-               drawfont = hud_font;
        }
 }
 
@@ -327,13 +325,13 @@ void drawstringcenter(vector position, string text, vector scale, vector rgb, fl
 // return the string of the given race place
 string race_PlaceName(float pos) {
        if(pos == 1)
-               return "1st";
+               return _("1st");
        else if(pos == 2)
-               return "2nd";
+               return _("2nd");
        else if(pos == 3)
-               return "3rd";
+               return _("3rd");
        else
-               return strcat(ftos(pos), "th");
+               return sprintf(_("%dth"), pos);
 }
 
 // return the string of the onscreen race timer
@@ -365,12 +363,12 @@ string MakeRaceString(float cp, float mytime, float histime, float lapdelta, str
 
                if(lapdelta > 0)
                {
-                       lapstr = strcat(" (-", ftos(lapdelta), "L)");
+                       lapstr = sprintf(_(" (-%dL)"), lapdelta);
                        col = "^2";
                }
                else if(lapdelta < 0)
                {
-                       lapstr = strcat(" (+", ftos(-lapdelta), "L)");
+                       lapstr = sprintf(_(" (+%dL)"), -lapdelta);
                        col = "^1";
                }
        }
@@ -386,20 +384,20 @@ string MakeRaceString(float cp, float mytime, float histime, float lapdelta, str
                col = "^7";
 
        if(cp == 254)
-               cpname = "Start line";
+               cpname = _("Start line");
        else if(cp == 255)
-               cpname = "Finish line";
+               cpname = _("Finish line");
        else if(cp)
-               cpname = strcat("Intermediate ", ftos(cp));
+               cpname = sprintf(_("Intermediate %d"), cp);
        else
-               cpname = "Finish line";
+               cpname = _("Finish line");
 
        if(histime < 0)
                return strcat(col, cpname);
        else if(hisname == "")
-               return strcat(col, cpname, " (", timestr, ")");
+               return strcat(col, sprintf(_("%s (%s)")), cpname, timestr);
        else
-               return strcat(col, cpname, " (", timestr, " ", strcat(hisname, col, lapstr), ")");
+               return strcat(col, sprintf(_("%s (%s %s)")), cpname, timestr, strcat(hisname, col, lapstr));
 }
 
 // Check if the given name already exist in race rankings? In that case, where? (otherwise return 0)
@@ -492,12 +490,15 @@ void HUD_Panel_ExportCfg(string cfgname)
                                        HUD_Write_PanelCvar_q("_ammo_color");
                                        HUD_Write_PanelCvar_q("_ammo_alpha");
                                        HUD_Write_PanelCvar_q("_aspect");
+                                       HUD_Write_PanelCvar_q("_timeout");
+                                       HUD_Write_PanelCvar_q("_timeout_effect");
                                        break;
                                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("_progressbar_xoffset");
                                        HUD_Write_PanelCvar_q("_text");
                                        break;
                                case HUD_PANEL_POWERUPS:
@@ -538,11 +539,11 @@ void HUD_Panel_ExportCfg(string cfgname)
                }
                HUD_Write("menu_sync\n"); // force the menu to reread the cvars, so that the dialogs are updated
 
-               print("^2Successfully exported to ", filename, "! (Note: It's saved in data/data/)\n");
+               print(sprintf(_("^2Successfully exported to %s! (Note: It's saved in data/data/)\n"), filename));
                fclose(fh);
        }
        else
-               print("^1Couldn't write to ", filename, "\n");
+               print(sprintf(_("^1Couldn't write to \n"), filename));
 }
 
 const float hlBorderSize = 4;
@@ -1505,7 +1506,7 @@ float GetAmmoTypeForWep(float i)
                case WEP_HLAC: return 3;
                case WEP_MINSTANEX: return 3;
                case WEP_NEX: return 3;
-               case WEP_CAMPINGRIFLE: return 1;
+               case WEP_SNIPERRIFLE: return 1;
                case WEP_HAGAR: return 2;
                case WEP_ROCKET_LAUNCHER: return 2;
                case WEP_SEEKER: return 2;
@@ -1767,10 +1768,10 @@ void HUD_Weapons(void)
                                drawstring(wpnpos, getcommandkey(ftos(weapid), strcat("impulse ", ftos(weapid))), '1 1 0' * 0.5 * wpnsize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
 
                        // draw ammo status bar
-                       if(show_ammo && weapid != WEP_TUBA && weapid != WEP_LASER && weapid != WEP_PORTO)
+                       if(show_ammo && self.weapon != WEP_TUBA && self.weapon != WEP_LASER && self.weapon != WEP_PORTO)
                        {
                                a = 0;
-                               type = GetAmmoTypeForWep(weapid);
+                               type = GetAmmoTypeForWep(self.weapon);
                                if(type != -1)
                                        a = getstati(GetAmmoStat(type)); // how much ammo do we have?
 
@@ -1826,11 +1827,11 @@ void HUD_Weapons(void)
                                color = stov(autocvar_hud_panel_weapons_complainbubble_color_outofammo);
                        }
                        else if(complain_weapon_type == 1) {
-                               s = "Don't have";
+                               s = _("Don't have");
                                color = stov(autocvar_hud_panel_weapons_complainbubble_color_donthave);
                        }
                        else {
-                               s = "Unavailable";
+                               s = _("Unavailable");
                                color = stov(autocvar_hud_panel_weapons_complainbubble_color_unavailable);
                        }
                        float padding = autocvar_hud_panel_weapons_complainbubble_padding;
@@ -1981,7 +1982,6 @@ void HUD_Ammo(void)
                ammo_size_y = newSize;
        }
 
-       drawfont = hud_bigfont;
        float i, stat_items, currently_selected;
        if (autocvar_hud_panel_ammo_onlycurrent)
        {
@@ -2013,7 +2013,6 @@ void HUD_Ammo(void)
                        column = column + 1;
                }
        }
-       drawfont = hud_font;
 }
 
 void DrawNumIcon(float iconalign, vector myPos, vector mySize, float x, string icon, float left, vector color, float alpha)
@@ -2065,9 +2064,7 @@ void DrawNumIcon(float iconalign, vector myPos, vector mySize, float x, string i
                }
        }
 
-       drawfont = hud_bigfont;
        drawstring_aspect(numpos, ftos(x), eX * (2/3) * newSize_x + eY * newSize_y, color, panel_fg_alpha * alpha, DRAWFLAG_NORMAL);
-       drawfont = hud_font;
        drawpic_aspect_skin(picpos, icon, '1 1 0' * newSize_y, '1 1 1', panel_fg_alpha * alpha, DRAWFLAG_NORMAL);
 }
 
@@ -2150,7 +2147,6 @@ void HUD_Powerups(void) {
                rightexact = strength_time;
        }
 
-       drawfont = hud_bigfont;
        float baralign = autocvar_hud_panel_powerups_baralign;
     float barflip;
        float iconalign = autocvar_hud_panel_powerups_iconalign;
@@ -2322,7 +2318,6 @@ void HUD_Powerups(void) {
             }
                }
        }
-       drawfont = hud_font;
 }
 
 // Health/armor (#3)
@@ -2364,7 +2359,6 @@ void HUD_HealthArmor(void)
        vector picpos;
        vector numpos;
 
-       drawfont = hud_bigfont;
        float baralign = autocvar_hud_panel_healtharmor_baralign;
        float iconalign = autocvar_hud_panel_healtharmor_iconalign;
        float progressbar = autocvar_hud_panel_healtharmor_progressbar;
@@ -2627,7 +2621,6 @@ void HUD_HealthArmor(void)
                        }
                }
        }
-       drawfont = hud_font;
 }
 
 // Notification area (#4)
@@ -2689,43 +2682,43 @@ void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s
                } else if (type == DEATH_KILL) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_KILL);
                        if (alsoprint)
-                               print ("^1",s1, "^1 couldn't take it anymore\n");
+                               print (sprintf(_("^1%s^1 couldn't take it anymore\n"), s1));
                } else if (type == DEATH_ROT) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
                        if (alsoprint)
-                               print ("^1",s1, "^1 died\n");
+                               print (sprintf(_("^1%s^1 died\n"), s1));
                } else if (type == DEATH_NOAMMO) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_NOAMMO);
                        if (alsoprint)
-                               print ("^7",s1, "^7 committed suicide. What's the point of living without ammo?\n");
+                               print (sprintf(_("^7%s^7 committed suicide. What's the point of living without ammo?\n"), s1));
                } else if (type == DEATH_CAMP) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_CAMP);
                        if (alsoprint)
-                               print ("^1",s1, "^1 thought they found a nice camping ground\n");
+                               print (sprintf(_("^1%s^1 thought they found a nice camping ground\n"), s1));
                } else if (type == KILL_TEAM_RED || type == KILL_TEAM_BLUE) {
                        HUD_KillNotify_Push(s1, "", 0, type);
                        if (alsoprint)
-                               print ("^1",s1, "^1 didn't become friends with the Lord of Teamplay\n");
+                               print (sprintf(_("^1%s^1 didn't become friends with the Lord of Teamplay\n"), s1));
                } else if (type == DEATH_CHEAT) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
                        if (alsoprint)
-                               print ("^1",s1, "^1 unfairly eliminated themself\n");
+                               print (sprintf(_("^1%s^1 unfairly eliminated themself\n"), s1));
                } else if (type == DEATH_FIRE) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
                        if (alsoprint)
-                               print ("^1",s1, "^1 burned to death\n");
+                               print (sprintf(_("^1%s^1 burned to death\n"), s1));
                } else if (type != DEATH_TEAMCHANGE && type != DEATH_QUIET) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
                        if (alsoprint)
-                               print ("^1",s1, "^1 couldn't resist the urge to self-destruct\n");
+                               print (sprintf(_("^1%s^1 couldn't resist the urge to self-destruct\n"), s1));
                } 
                
                if (stof(s2) > 2) // killcount > 2
-                       print ("^1",s1,"^1 ended it all after a ",s2," kill spree\n");
+                       print (sprintf(_("^1%s^1 ended it all after a %d kill spree\n"), s1, stof(s2)));
        } else if(msg == MSG_KILL) {
                w = DEATH_WEAPONOF(type);
                if(WEP_VALID(w)) {
-                       if((w == WEP_CAMPINGRIFLE || w == WEP_MINSTANEX) && type & HITTYPE_HEADSHOT) // all headshot weapons go here
+                       if((w == WEP_SNIPERRIFLE || w == WEP_MINSTANEX) && type & HITTYPE_HEADSHOT) // all headshot weapons go here
                                HUD_KillNotify_Push(s1, s2, 1, DEATH_HEADSHOT);
                        else
                                HUD_KillNotify_Push(s1, s2, 1, type);
@@ -2738,112 +2731,112 @@ void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s
                        if(alsoprint)
                        {
                                if(gentle) {
-                                       print ("^1", s1, "^1 took action against a team mate\n");
+                                       print (sprintf(_("^1%s^1 took action against a team mate\n"), s1));
                                } else {
-                                       print ("^1", s1, "^1 mows down a team mate\n");
+                                       print (sprintf(_("^1%s^1 mows down a team mate\n"), s1));
                                }
                        }
                        if (stof(s2) > 2 && type == KILL_TEAM_SPREE) {
                                if(gentle)
-                                       print ("^1",s1,"^1 ended a ",s3," scoring spree by going against a team mate\n");
+                                       print (sprintf(_("^1%s^1 ended a %d scoring spree by going against a team mate\n"), s1, stof(s3)));
                                else
-                                       print ("^1",s1,"^1 ended a ",s3," kill spree by killing a team mate\n");
+                                       print (sprintf(_("^1%s^1 ended a %d kill spree by killing a team mate\n"), s1, stof(s3)));
                        }
                        else if (stof(s2) > 2) {
                                if(gentle)
-                                       print ("^1",s1,"'s ^1",s3," scoring spree was ended by a team mate!\n");
+                                       print (sprintf(_("^1%s's ^1%s scoring spree was ended by a team mate!\n"), s1, stof(s3)));
                                else
-                                       print ("^1",s1,"'s ^1",s3," kill spree was ended by a team mate!\n");
+                                       print (sprintf(_("^1%s's ^1%s kill spree was ended by a team mate!\n"), s1, stof(s3)));
                        }
                }
                else if(type == KILL_FIRST_BLOOD)
-                       print("^1",s1, "^1 drew first blood", "\n");
+                       print(sprintf("^1%s^1 drew first blood\n", s1));
                else if (type == DEATH_TELEFRAG) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_TELEFRAG);
                        if(gentle)
-                               print ("^1",s2, "^1 tried to occupy ", s1, "^1's teleport destination space\n");
+                               print (sprintf(_("^1%s^1 tried to occupy %s^1's teleport destination space\n"), s2, s1));
                        else
-                               print ("^1",s2, "^1 was telefragged by ", s1, "\n");
+                               print (sprintf(_("^1%s^1 was telefragged by %s\n"), s2, s1));
                }
                else if (type == DEATH_DROWN) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_DROWN);
                        if(alsoprint)
-                               print ("^1",s2, "^1 was drowned by ", s1, "\n");
+                               print (sprintf(_("^1%s^1 was drowned by %s\n"), s2, s1));
                }
                else if (type == DEATH_SLIME) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_SLIME);
                        if(alsoprint)
-                               print ("^1",s2, "^1 was slimed by ", s1, "\n");
+                               print (sprintf(_("^1%s^1 was slimed by %s\n"), s2, s1));
                }
                else if (type == DEATH_LAVA) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_LAVA);
                        if(alsoprint)
-                               print ("^1",s2, "^1 was cooked by ", s1, "\n");
+                               print (sprintf(_("^1%s^1 was cooked by %s\n"), s2, s1));
                }
                else if (type == DEATH_FALL) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_FALL);
                        if(alsoprint)
-                               print ("^1",s2, "^1 was grounded by ", s1, "\n");
+                               print (sprintf(_("^1%s^1 was grounded by %s\n"), s2, s1));
                }
                else if (type == DEATH_SHOOTING_STAR) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_SHOOTING_STAR);
                        if(alsoprint)
-                               print ("^1",s2, "^1 was shot into space by ", s1, "\n");
+                               print (sprintf(_("^1%s^1 was shot into space by %s\n"), s2, s1));
                }
                else if (type == DEATH_SWAMP) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
                        if(alsoprint)
-                               print ("^1",s2, "^1 was conserved by ", s1, "\n");
+                               print (sprintf(_("^1%s^1 was conserved by %s\n"), s2, s1));
                }
                else if (type == DEATH_HURTTRIGGER)
                {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_HURTTRIGGER);
                        if(alsoprint)
-                               print("^1",s2, "^1 was thrown into a world of hurt by ", s1, "\n");
+                               print(sprintf(_("^1%s^1 was thrown into a world of hurt by %s\n"), s2, s1));
                } else if(type == DEATH_SBCRUSH) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
                        if(alsoprint)
-                               print ("^1",s2, "^1 was crushed by ^1", s1, "\n");
+                               print (sprintf(_("^1%s^1 was crushed by ^1%s\n"), s2, s1));
                } else if(type == DEATH_SBMINIGUN) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
                        if(alsoprint)
-                               print ("^1",s2, "^1 got shredded by ^1", s1, "\n");
+                               print (sprintf(_("^1%s^1 got shredded by ^1%s\n"), s2, s1));
                } else if(type == DEATH_SBROCKET) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
                        if(alsoprint)
-                               print ("^1",s2, "^1 was blased to bits by ^1", s1, "\n");
+                               print (sprintf(_("^1%s^1 was blased to bits by ^1%s\n"), s2, s1));
                } else if(type == DEATH_SBBLOWUP) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
                        if(alsoprint)
-                               print ("^1",s2, "^1 got caught in the destruction of ^1", s1, "'s vehicle\n");
+                               print (sprintf(_("^1%s^1 got caught in the destruction of ^1%s's vehicle\n"), s2, s1));
                } else if(type == DEATH_WAKIGUN) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
                        if(alsoprint)
-                               print ("^1",s2, "^1 was bolted down by ^1", s1, "\n");
+                               print (sprintf(_("^1%s^1 was bolted down by ^1%s\n"), s2, s1));
                } else if(type == DEATH_WAKIROCKET) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
                        if(alsoprint)
-                               print ("^1",s2, "^1 could find no shelter from ^1", s1, "'s rockets\n");
+                               print (sprintf(_("^1%s^1 could find no shelter from ^1%s's rockets\n"), s2, s1));
                } else if(type == DEATH_WAKIBLOWUP) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
                        if(alsoprint)
-                               print ("^1",s2, "^1 dies when ^1", s1, "'s wakizashi dies.\n");
+                               print (sprintf(_("^1%s^1 dies when ^1%s's wakizashi dies.\n"), s2, s1));
                } else if(type == DEATH_TURRET) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
                        if(alsoprint)
-                               print ("^1",s2, "^1 was pushed into the line of fire by ^1", s1, "\n");
+                               print (sprintf(_("^1%s^1 was pushed into the line of fire by ^1%s\n"), s2, s1));
                } else if(type == DEATH_TOUCHEXPLODE) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
                        if(alsoprint)
-                               print ("^1",s2, "^1 was pushed into an accident by ^1", s1, "\n");
+                               print (sprintf(_("^1%s^1 was pushed into an accident by ^1%s\n"), s2, s1));
                } else if(type == DEATH_CHEAT) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
                        if(alsoprint)
-                               print ("^1",s2, "^1 was unfairly eliminated by ^1", s1, "\n");
+                               print (sprintf(_("^1%s^1 was unfairly eliminated by ^1%s\n"), s2, s1));
                } else if (type == DEATH_FIRE) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
                        if(alsoprint)
-                               print ("^1",s2, "^1 was burnt to death by ^1", s1, "\n");
+                               print (sprintf(_("^1%s^1 was burnt to death by ^1%s\n"), s2, s1));
                } else if (type == DEATH_CUSTOM) {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_CUSTOM);
                        if(alsoprint)
@@ -2855,54 +2848,54 @@ void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s
                } else {
                        HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC);
                        if(alsoprint)
-                               print ("^1",s2, "^1 was fragged by ", s1, "\n");
+                               print (sprintf(_("^1%s^1 was fragged by %s\n"), s2, s1));
                }
        } else if(msg == MSG_SPREE) {
                if(type == KILL_END_SPREE) {
                        if(gentle)
-                               print ("^1",s1,"'s ^1", s2, " scoring spree was ended by ", s3, "\n");
+                               print (sprintf(_("^1%s's ^1%s scoring spree was ended by %s\n"), s1, s2, s3));
                        else
-                               print ("^1",s1,"'s ^1", s2, " kill spree was ended by ", s3, "\n");
+                               print (sprintf(_("^1%s's ^1%s kill spree was ended by %s\n"), s1, s2, s3));
                } else if(type == KILL_SPREE) {
                        if(gentle)
-                               print ("^1",s1,"^1 made ",s2," scores in a row\n");
+                               print (sprintf(_("^1%s^1 made %s scores in a row\n"), s1, s2));
                        else
-                               print ("^1",s1,"^1 has ",s2," frags in a row\n");
+                               print (sprintf(_("^1%s^1 has %s frags in a row\n"), s1, s2));
                } else if(type == KILL_SPREE_3) {
                        if(gentle)
-                               print (s1,"^7 made a ^1TRIPLE SCORE\n");
+                               print (sprintf(_("%s^7 made a ^1TRIPLE SCORE\n"), s1));
                        else
-                               print (s1,"^7 made a ^1TRIPLE FRAG\n");
+                               print (sprintf(_("%s^7 made a ^1TRIPLE FRAG\n"), s1));
                } else if(type == KILL_SPREE_5) {
                        if(gentle)
-                               print (s1,"^7 unleashes ^1SCORING RAGE\n");
+                               print (sprintf(_("%s^7 unleashes ^1SCORING RAGE\n"), s1));
                        else
-                               print (s1,"^7 unleashes ^1RAGE\n");
+                               print (sprintf(_("%s^7 unleashes ^1RAGE\n"), s1));
                } else if(type == KILL_SPREE_10) {
                        if(gentle)
-                               print (s1,"^7 made ^1TEN SCORES IN A ROW!\n");
+                               print (sprintf(_("%s^7 made ^1TEN SCORES IN A ROW!\n"), s1));
                        else
-                               print (s1,"^7 starts the ^1MASSACRE!\n");
+                               print (sprintf(_("%s^7 starts the ^1MASSACRE!\n"), s1));
                } else if(type == KILL_SPREE_15) {
                        if(gentle)
-                               print (s1,"^7 made ^1FIFTEEN SCORES IN A ROW!\n");
+                               print (sprintf(_("%s^7 made ^1FIFTEEN SCORES IN A ROW!\n"), s1));
                        else
-                               print (s1,"^7 executes ^1MAYHEM!\n");
+                               print (sprintf(_("%s^7 executes ^1MAYHEM!\n"), s1));
                } else if(type == KILL_SPREE_20) {
                        if(gentle)
-                               print (s1,"^7 made ^1TWENTY SCORES IN A ROW!\n");
+                               print (sprintf(_("%s^7 made ^1TWENTY SCORES IN A ROW!\n"), s1));
                        else
-                               print (s1,"^7 is a ^1BERSERKER!\n");
+                               print (sprintf(_("%s^7 is a ^1BERSERKER!\n"), s1));
                } else if(type == KILL_SPREE_25) {
                        if(gentle)
-                               print (s1,"^7 made ^1TWENTY FIFE SCORES IN A ROW!\n");
+                               print (sprintf(_("%s^7 made ^1TWENTY FIFE SCORES IN A ROW!\n"), s1));
                        else
-                               print (s1,"^7 inflicts ^1CARNAGE!\n");
+                               print (sprintf(_("%s^7 inflicts ^1CARNAGE!\n"), s1));
                } else if(type == KILL_SPREE_30) {
                        if(gentle)
-                               print (s1,"^7 made ^1THIRTY SCORES IN A ROW!\n");
+                               print (sprintf(_("%s^7 made ^1THIRTY SCORES IN A ROW!\n"), s1));
                        else
-                               print (s1,"^7 unleashes ^1ARMAGEDDON!\n");
+                               print (sprintf(_("%s^7 unleashes ^1ARMAGEDDON!\n"), s1));
                }
        } else if(msg == MSG_KILL_ACTION) { // wtf is this? isnt it basically the same as MSG_SUICIDE?
                if (type == DEATH_DROWN) {
@@ -2910,49 +2903,49 @@ void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s
                        if(alsoprint)
                        {
                                if(gentle)
-                                       print ("^1",s1, "^1 was in the water for too long\n");
+                                       print (sprintf(_("^1%s^1 was in the water for too long\n"), s1));
                                else
-                                       print ("^1",s1, "^1 drowned\n");
+                                       print (sprintf(_("^1%s^1 drowned\n"), s1));
                        }
                } else if (type == DEATH_SLIME) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_SLIME);
                        if(alsoprint)
-                               print ("^1",s1, "^1 was slimed\n");
+                               print (sprintf("^1%s^1 was slimed\n", s1));
                } else if (type == DEATH_LAVA) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_LAVA);
                        if(alsoprint)
                        {
                                if(gentle)
-                                       print ("^1",s1, "^1 found a hot place\n");
+                                       print (sprintf(_("^1%s^1 found a hot place\n"), s1));
                                else
-                                       print ("^1",s1, "^1 turned into hot slag\n");
+                                       print (sprintf(_("^1%s^1 turned into hot slag\n"), s1));
                        }
                } else if (type == DEATH_FALL) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
                        if(alsoprint)
                        {
                                if(gentle)
-                                       print ("^1",s1, "^1 tested gravity (and it worked)\n");
+                                       print (sprintf(_("^1%s^1 tested gravity (and it worked)\n"), s1));
                                else
-                                       print ("^1",s1, "^1 hit the ground with a crunch\n");
+                                       print (sprintf(_("^1%s^1 hit the ground with a crunch\n"), s1));
                        }
                } else if (type == DEATH_SHOOTING_STAR) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_SHOOTING_STAR);
                        if(alsoprint)
-                               print ("^1",s1, "^1 became a shooting star\n");
+                               print (sprintf(_("^1%s^1 became a shooting star\n"), s1));
                } else if (type == DEATH_SWAMP) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
                        if(alsoprint)
                        {
                                if(gentle)
-                                       print ("^1",s1, "^1 discovered a swamp\n");
+                                       print (sprintf(_("^1%s^1 discovered a swamp\n"), s1));
                                else
-                                       print ("^1",s1, "^1 is now conserved for centuries to come\n");
+                                       print (sprintf(_("^1%s^1 is now conserved for centuries to come\n"), s1));
                        }
                } else if(type == DEATH_TURRET) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
                        if(alsoprint)
-                               print ("^1",s1, "^1 was mowed down by a turret \n");
+                               print (sprintf(_("^1%s^1 was mowed down by a turret \n"), s1));
                } else if (type == DEATH_CUSTOM) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_CUSTOM);
                        if(alsoprint)
@@ -2964,51 +2957,51 @@ void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s
                } else if(type == DEATH_TOUCHEXPLODE) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
                        if(alsoprint)
-                               print ("^1",s1, "^1 died in an accident\n");
+                               print (sprintf(_("^1%s^1 died in an accident\n"), s1));
                } else if(type == DEATH_CHEAT) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
                        if(alsoprint)
-                               print ("^1",s1, "^1 was unfairly eliminated\n");
+                               print (sprintf(_("^1%s^1 was unfairly eliminated\n"), s1));
                } else if(type == DEATH_FIRE) {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
                        if(alsoprint)
                        {
                                if(gentle)
-                                       print ("^1",s1, "^1 felt a little hot\n");
+                                       print (sprintf(_("^1%s^1 felt a little hot\n"), s1));
                                else
-                                       print ("^1",s1, "^1 burnt to death\n");
+                                       print (sprintf(_("^1%s^1 burnt to death\n"), s1));
                                }
                } else {
                        HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC);
                        if(alsoprint)
                        {
                                if(gentle)
-                                       print ("^1",s1, "^1 needs a restart\n");
+                                       print (sprintf(_("^1%s^1 needs a restart\n"), s1));
                                else
-                                       print ("^1",s1, "^1 died\n");
+                                       print (sprintf(_("^1%s^1 died\n"), s1));
                        }
                }
        } else if(msg == MSG_KILL_ACTION_SPREE) {
                if(gentle)
-                       print ("^1",s1,"^1 needs a restart after a ",s2," scoring spree\n");
+                       print (sprintf(_("^1%s^1 needs a restart after a %d scoring spree\n"), s1, stof(s2)));
                else
-                       print ("^1",s1,"^1 died with a ",s2," kill spree\n");
+                       print (sprintf(_("^1%s^1 died with a %d kill spree\n"), s1, stof(s2)));
        } else if(msg == MSG_INFO) {
                if(type == INFO_GOTFLAG) { // here, s2 is the flag name
                        HUD_KillNotify_Push(s1, s2, 0, INFO_GOTFLAG);
-                       print(s1, "^7 got the ", s2, "\n");
+                       print(sprintf(_("%s^7 got the %s\n"), s1, s2));
                } else if(type == INFO_LOSTFLAG) {
                        HUD_KillNotify_Push(s1, s2, 0, INFO_LOSTFLAG);
-                       print(s1, "^7 lost the ", s2, "\n");
+                       print(sprintf(_("%s^7 lost the %s\n"), s1, s2));
                } else if(type == INFO_PICKUPFLAG) {
                        HUD_KillNotify_Push(s1, s2, 0, INFO_GOTFLAG);
-                       print(s1, "^7 picked up the ", s2, "\n");
+                       print(sprintf(_("%s^7 picked up the %s\n"), s1, s2));
                } else if(type == INFO_RETURNFLAG) {
                        HUD_KillNotify_Push(s1, s2, 0, INFO_RETURNFLAG);
-                       print(s1, "^7 returned the ", s2, "\n");
+                       print(sprintf(_("%s^7 returned the %s\n"), s1, s2));
                } else if(type == INFO_CAPTUREFLAG) {
                        HUD_KillNotify_Push(s1, s2, 0, INFO_CAPTUREFLAG);
-                       print(s1, "^7 captured the ", s2, s3, "\n");
+                       print(sprintf(_("%1^7 captured the %s%s\n"), s1, s2, s3));
                }
        } else if(msg == MSG_RACE) {
                if(type == RACE_SERVER_RECORD) {
@@ -3027,18 +3020,19 @@ void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s
                if(type == KA_PICKUPBALL) {
                        HUD_KillNotify_Push(s1, s2, 0, KA_PICKUPBALL);
                        if(alsoprint)
-                               print (s1, "^7 has picked up the ball!\n");
+                               print (sprintf(_("%s^7 has picked up the ball!\n"), s1));
                }
                else if(type == KA_DROPBALL) {
                        HUD_KillNotify_Push(s1, s2, 0, KA_DROPBALL);
                        if(alsoprint)
-                               print(s1, "^7 has dropped the ball!\n");
+                               print(sprintf(_("%s^7 has dropped the ball!\n"), s1));
                }
        }
 }
 
 #define DAMAGE_CENTERPRINT_SPACER NEWLINES
 
+//FIXME gettext marked till here
 void HUD_Centerprint(string s1, string s2, float type, float msg)
 {
        float gentle;
@@ -3487,9 +3481,7 @@ void HUD_Timer(void)
                timer = seconds_tostring(timeleft);
        }
 
-       drawfont = hud_bigfont;
        drawstring_aspect(pos, timer, mySize, timer_color, panel_fg_alpha, DRAWFLAG_NORMAL);
-       drawfont = hud_font;
 }
 
 // Radar (#6)
@@ -3678,9 +3670,7 @@ void HUD_Score(void)
                // race record display
                if (distribution <= 0)
                        HUD_Panel_DrawHighlight(pos, eX * 0.75 * mySize_x + eY * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
-               drawfont = hud_bigfont;
                drawstring_aspect(pos, timer, eX * 0.75 * mySize_x + eY * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
-               drawfont = hud_font;
        } else if (!teamplay) { // non-teamgames
                // me vector := [team/connected frags id]
                pl = players.sort_next;
@@ -3712,9 +3702,7 @@ void HUD_Score(void)
                drawstring_aspect(pos + eX * 0.75 * mySize_x, ftos(distribution), eX * 0.25 * mySize_x + eY * (1/3) * mySize_y, distribution_color, panel_fg_alpha, DRAWFLAG_NORMAL);
                if (leader)
                        HUD_Panel_DrawHighlight(pos, eX * 0.75 * mySize_x + eY * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
-               drawfont = hud_bigfont;
                drawstring_aspect(pos, ftos(score), eX * 0.75 * mySize_x + eY * mySize_y, distribution_color, panel_fg_alpha, DRAWFLAG_NORMAL);
-               drawfont = hud_font;
        } else { // teamgames
                float max_fragcount;
                max_fragcount = -99;
@@ -3736,9 +3724,7 @@ void HUD_Score(void)
                                        leader = 1;
                                if (leader)
                                        HUD_Panel_DrawHighlight(pos, eX * 0.75 * mySize_x + eY * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
-                               drawfont = hud_bigfont;
                                drawstring_aspect(pos, ftos(score), eX * 0.75 * mySize_x + eY * mySize_y, GetTeamRGB(tm.team) * 0.8, panel_fg_alpha, DRAWFLAG_NORMAL);
-                               drawfont = hud_font;
                        } else {
                                if (max_fragcount == score)
                                        leader = 1;
@@ -3788,7 +3774,6 @@ void HUD_RaceTimer (void) {
        }
        mySize = newSize;
 
-       drawfont = hud_bigfont;
        float a, t;
        string s, forcetime;
 
@@ -3888,8 +3873,6 @@ void HUD_RaceTimer (void) {
                        }
                }
        }
-
-       drawfont = hud_font;
 }
 
 // Vote window (#9)
@@ -4053,7 +4036,6 @@ void HUD_Mod_CA(vector pos, vector mySize)
        redalive = getstati(STAT_REDALIVE);
        bluealive = getstati(STAT_BLUEALIVE);
 
-       drawfont = hud_bigfont;
        vector redpos, bluepos;
        if(mySize_x > mySize_y)
        {
@@ -4073,7 +4055,6 @@ void HUD_Mod_CA(vector pos, vector mySize)
                drawpic_aspect_skin(bluepos, "player_blue.tga", eX * mySize_x + eY * 0.3 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
                drawstring_aspect(bluepos + eY * 0.3 * mySize_y, ftos(bluealive), eX * mySize_x + eY * 0.2 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
        }
-       drawfont = hud_font;
 }
 
 // CTF HUD modicon section
@@ -4397,13 +4378,21 @@ void HUD_Mod_Keepaway(vector pos, vector mySize)
                kaball_prevstatus = kaball;
        }
        
-       // todo: Fix the sizing with the expanding image
+       vector kaball_pos, kaball_size;
+       
+       if(mySize_x > mySize_y) {
+               kaball_pos = pos + eX * 0.25 * mySize_x;
+               kaball_size = eX * 0.5 * mySize_x + eY * mySize_y;
+       } else {
+               kaball_pos = pos + eY * 0.25 * mySize_y;
+               kaball_size = eY * 0.5 * mySize_y + eX * mySize_x;
+       }
        
        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);
+               drawpic_aspect_skin_expanding(kaball_pos, "keepawayball_carrying", kaball_size, '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);
@@ -4471,8 +4460,6 @@ void HUD_Mod_Race(vector pos, vector mySize)
        if not((scores_flags[ps_primary] & SFL_TIME) && !teamplay) // race/cts record display on HUD
                return; // no records in the actual race
 
-       drawfont = hud_bigfont;
-
        // clientside personal record
        string rr;
        if(gametype == GAME_CTS)
@@ -4595,7 +4582,6 @@ void HUD_Mod_Race(vector pos, vector mySize)
                        strunzone(race_status_name_prev);
                race_status_name_prev = string_null;
        }
-       drawfont = hud_font;
 }
 
 float mod_prev; // previous state of mod_active to check for a change
@@ -4832,9 +4818,7 @@ void HUD_EngineInfo(void)
 
        vector color;
        color = HUD_Get_Num_Color (prevfps, 100);
-       drawfont = hud_bigfont;
        drawstring_aspect(pos, strcat("FPS: ", ftos_decimals(prevfps, autocvar_hud_panel_engineinfo_framecounter_decimals)), mySize, color, panel_fg_alpha, DRAWFLAG_NORMAL);
-       drawfont = hud_font;
 }
 
 // Info messages panel (#14)
@@ -5069,15 +5053,12 @@ void HUD_ShowSpeed(void)
        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 (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);
        }
-
-       drawfont = hud_font;
 }
 
 vector acc_prevspeed;
@@ -5213,6 +5194,8 @@ void HUD_Main (void)
                }
        }
 
+    current_player = (spectatee_status > 0) ? spectatee_status : player_localentnum;
+
        // draw the dock
        if(autocvar_hud_dock != "" && autocvar_hud_dock != "0")
        {
@@ -5220,7 +5203,7 @@ void HUD_Main (void)
                vector color;
                float hud_dock_color_team = autocvar_hud_dock_color_team;
                if((teamplay) && hud_dock_color_team) {
-                       f = stof(getplayerkey(player_localentnum - 1, "colors"));
+                       f = stof(getplayerkey(current_player - 1, "colors"));
                        color = colormapPaletteColor(mod(f, 16), 1) * hud_dock_color_team;
                }
                else if(autocvar_hud_configure_teamcolorforced && autocvar__hud_configure && hud_dock_color_team) {
@@ -5230,11 +5213,11 @@ void HUD_Main (void)
                {
                        string hud_dock_color = autocvar_hud_dock_color;
                        if(hud_dock_color == "shirt") {
-                               f = stof(getplayerkey(player_localentnum - 1, "colors"));
+                               f = stof(getplayerkey(current_player - 1, "colors"));
                                color = colormapPaletteColor(floor(f / 16), 0);
                        }
                        else if(hud_dock_color == "pants") {
-                               f = stof(getplayerkey(player_localentnum - 1, "colors"));
+                               f = stof(getplayerkey(current_player - 1, "colors"));
                                color = colormapPaletteColor(mod(f, 16), 1);
                        }
                        else