]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'sev/hud_nades' into 'master'
authorMario <zacjardine@y7mail.com>
Sun, 2 Aug 2015 02:38:11 +0000 (02:38 +0000)
committerMario <zacjardine@y7mail.com>
Sun, 2 Aug 2015 02:38:11 +0000 (02:38 +0000)
Nade HUD icons

Currently, the bonus nade is drawn in an unusual way in the ammo panel.
It is split up into different layers, with the top layer being multiplied the
color of the current nade type, which does not work well for Luma.
At the same time, there are separate nade icons for the notification panel.

**New solution**
Have one icon per nade type, use them for both panels.

See merge request !153

35 files changed:
gfx/menu/luma/skinvalues.txt
gfx/menu/luminos/icon_ipv4.tga
gfx/menu/luminos/icon_ipv6.tga
gfx/menu/luminos/icon_mod_.tga
gfx/menu/luminos/icon_mod_MinstaGib.tga
gfx/menu/luminos/icon_mod_NewToys.tga
gfx/menu/luminos/icon_mod_Overkill.tga
gfx/menu/luminos/icon_mod_instagib.tga
gfx/menu/luminos/icon_pure1.tga
gfx/menu/luminos/skinvalues.txt
gfx/menu/wickedx/icon_ipv4.tga
gfx/menu/wickedx/icon_ipv6.tga
gfx/menu/wickedx/icon_mod_.tga
gfx/menu/wickedx/icon_mod_MinstaGib.tga
gfx/menu/wickedx/icon_mod_NewToys.tga
gfx/menu/wickedx/icon_mod_Overkill.tga
gfx/menu/wickedx/icon_mod_instagib.tga
gfx/menu/wickedx/icon_pure1.tga
gfx/menu/wickedx/skinvalues.txt
gfx/menu/xaw/icon_ipv4.tga
gfx/menu/xaw/icon_ipv6.tga
gfx/menu/xaw/icon_mod_.tga
gfx/menu/xaw/icon_mod_MinstaGib.tga
gfx/menu/xaw/icon_mod_NewToys.tga
gfx/menu/xaw/icon_mod_Overkill.tga
gfx/menu/xaw/icon_mod_instagib.tga
gfx/menu/xaw/icon_pure1.tga
gfx/menu/xaw/skinvalues.txt
qcsrc/client/hud.qc
qcsrc/client/hud.qh
qcsrc/client/scoreboard.qc
qcsrc/client/view.qc
qcsrc/menu/skin-customizables.inc
qcsrc/menu/xonotic/gametypelist.qc
qcsrc/menu/xonotic/serverlist.qc

index ed335aa1497156725ac413a9466389917556f0a4..c997fea25772cd797dc361c60304db04e7cc3b5b 100644 (file)
@@ -126,6 +126,9 @@ HEIGHT_NORMAL                 1.45
 HEIGHT_TITLE                  1.45
 HEIGHT_ZOOMEDTITLE            -1
 
+// gametypelist
+BOOL_GAMETYPELIST_ICON_BLUR   0
+
 // inputbox
 COLOR_INPUTBOX_F              '1 1 1'
 COLOR_INPUTBOX_N              '1 1 1'
index a0484f4e37eeb9aba750de55cf2e203b654cdb7e..74b44139950cf7e46d00997d4f0a34d7435aa7bb 100644 (file)
Binary files a/gfx/menu/luminos/icon_ipv4.tga and b/gfx/menu/luminos/icon_ipv4.tga differ
index d3fdc03ee3e1cd4e6951e1b44beebd0d34b2111a..fe1227cb03383059c108918537888312707080f6 100644 (file)
Binary files a/gfx/menu/luminos/icon_ipv6.tga and b/gfx/menu/luminos/icon_ipv6.tga differ
index 0b31a343dc10305cf3829733ef92106b9a679854..63738cbcfa16f218b111ecde8b05fa2ba4279408 100644 (file)
Binary files a/gfx/menu/luminos/icon_mod_.tga and b/gfx/menu/luminos/icon_mod_.tga differ
index 518fd79649f966c692ca4e3562c9d774a94817df..065b84424651647058a56cb04d780e583f670465 100644 (file)
Binary files a/gfx/menu/luminos/icon_mod_MinstaGib.tga and b/gfx/menu/luminos/icon_mod_MinstaGib.tga differ
index cf88f77032e403a405b64007125995079d8a2b34..00acb711750154ab87ec26b7b693592cd8bd8343 100644 (file)
Binary files a/gfx/menu/luminos/icon_mod_NewToys.tga and b/gfx/menu/luminos/icon_mod_NewToys.tga differ
index 743722ea1817a237201c552a13aae63772c3defd..42e92c68ce0407b23e3a9171668210bdc9a758e0 100644 (file)
Binary files a/gfx/menu/luminos/icon_mod_Overkill.tga and b/gfx/menu/luminos/icon_mod_Overkill.tga differ
index 518fd79649f966c692ca4e3562c9d774a94817df..065b84424651647058a56cb04d780e583f670465 100644 (file)
Binary files a/gfx/menu/luminos/icon_mod_instagib.tga and b/gfx/menu/luminos/icon_mod_instagib.tga differ
index 62980d257acf7c009589f7d256612dd106cf70a8..7f7a1302946720c94e4990b3e3b5e9d1a7d1b676 100644 (file)
Binary files a/gfx/menu/luminos/icon_pure1.tga and b/gfx/menu/luminos/icon_pure1.tga differ
index d465f13c3661bc36bcc173160328d2390c9bebfe..ca0384fb554135f88ed4bf13a41c3b3e849497f9 100755 (executable)
@@ -196,6 +196,9 @@ COLOR_DIALOG_SCREENSHOTVIEWER   '1 1 1'
 COLOR_DIALOG_CVARS              '1 0 0'
 COLOR_DIALOG_HUDCONFIRM         '1 0 0'
 
+// gametypelist
+BOOL_GAMETYPELIST_ICON_BLUR     1
+
 // item: input box
 //   uses "inputbox" images
 COLOR_INPUTBOX_N                '1 1 1'
index a0484f4e37eeb9aba750de55cf2e203b654cdb7e..74b44139950cf7e46d00997d4f0a34d7435aa7bb 100644 (file)
Binary files a/gfx/menu/wickedx/icon_ipv4.tga and b/gfx/menu/wickedx/icon_ipv4.tga differ
index d3fdc03ee3e1cd4e6951e1b44beebd0d34b2111a..fe1227cb03383059c108918537888312707080f6 100644 (file)
Binary files a/gfx/menu/wickedx/icon_ipv6.tga and b/gfx/menu/wickedx/icon_ipv6.tga differ
index 0b31a343dc10305cf3829733ef92106b9a679854..63738cbcfa16f218b111ecde8b05fa2ba4279408 100644 (file)
Binary files a/gfx/menu/wickedx/icon_mod_.tga and b/gfx/menu/wickedx/icon_mod_.tga differ
index 518fd79649f966c692ca4e3562c9d774a94817df..065b84424651647058a56cb04d780e583f670465 100644 (file)
Binary files a/gfx/menu/wickedx/icon_mod_MinstaGib.tga and b/gfx/menu/wickedx/icon_mod_MinstaGib.tga differ
index cf88f77032e403a405b64007125995079d8a2b34..00acb711750154ab87ec26b7b693592cd8bd8343 100644 (file)
Binary files a/gfx/menu/wickedx/icon_mod_NewToys.tga and b/gfx/menu/wickedx/icon_mod_NewToys.tga differ
index 743722ea1817a237201c552a13aae63772c3defd..42e92c68ce0407b23e3a9171668210bdc9a758e0 100644 (file)
Binary files a/gfx/menu/wickedx/icon_mod_Overkill.tga and b/gfx/menu/wickedx/icon_mod_Overkill.tga differ
index 518fd79649f966c692ca4e3562c9d774a94817df..065b84424651647058a56cb04d780e583f670465 100644 (file)
Binary files a/gfx/menu/wickedx/icon_mod_instagib.tga and b/gfx/menu/wickedx/icon_mod_instagib.tga differ
index 62980d257acf7c009589f7d256612dd106cf70a8..7f7a1302946720c94e4990b3e3b5e9d1a7d1b676 100644 (file)
Binary files a/gfx/menu/wickedx/icon_pure1.tga and b/gfx/menu/wickedx/icon_pure1.tga differ
index 09ded4b087c356d741a823ab25293da71bae7dcb..b7011a0b0e18369246a573e86f52dd0d22174bb4 100644 (file)
@@ -196,6 +196,9 @@ COLOR_DIALOG_SCREENSHOTVIEWER   '1 1 1'
 COLOR_DIALOG_CVARS              '1 0 0'
 COLOR_DIALOG_HUDCONFIRM         '1 0 0'
 
+// gametypelist
+BOOL_GAMETYPELIST_ICON_BLUR     1
+
 // item: input box
 //   uses "inputbox" images
 COLOR_INPUTBOX_N                '1 1 1'
index a0484f4e37eeb9aba750de55cf2e203b654cdb7e..74b44139950cf7e46d00997d4f0a34d7435aa7bb 100644 (file)
Binary files a/gfx/menu/xaw/icon_ipv4.tga and b/gfx/menu/xaw/icon_ipv4.tga differ
index d3fdc03ee3e1cd4e6951e1b44beebd0d34b2111a..fe1227cb03383059c108918537888312707080f6 100644 (file)
Binary files a/gfx/menu/xaw/icon_ipv6.tga and b/gfx/menu/xaw/icon_ipv6.tga differ
index 0b31a343dc10305cf3829733ef92106b9a679854..63738cbcfa16f218b111ecde8b05fa2ba4279408 100644 (file)
Binary files a/gfx/menu/xaw/icon_mod_.tga and b/gfx/menu/xaw/icon_mod_.tga differ
index 518fd79649f966c692ca4e3562c9d774a94817df..065b84424651647058a56cb04d780e583f670465 100644 (file)
Binary files a/gfx/menu/xaw/icon_mod_MinstaGib.tga and b/gfx/menu/xaw/icon_mod_MinstaGib.tga differ
index cf88f77032e403a405b64007125995079d8a2b34..00acb711750154ab87ec26b7b693592cd8bd8343 100644 (file)
Binary files a/gfx/menu/xaw/icon_mod_NewToys.tga and b/gfx/menu/xaw/icon_mod_NewToys.tga differ
index 743722ea1817a237201c552a13aae63772c3defd..42e92c68ce0407b23e3a9171668210bdc9a758e0 100644 (file)
Binary files a/gfx/menu/xaw/icon_mod_Overkill.tga and b/gfx/menu/xaw/icon_mod_Overkill.tga differ
index 518fd79649f966c692ca4e3562c9d774a94817df..065b84424651647058a56cb04d780e583f670465 100644 (file)
Binary files a/gfx/menu/xaw/icon_mod_instagib.tga and b/gfx/menu/xaw/icon_mod_instagib.tga differ
index 62980d257acf7c009589f7d256612dd106cf70a8..7f7a1302946720c94e4990b3e3b5e9d1a7d1b676 100644 (file)
Binary files a/gfx/menu/xaw/icon_pure1.tga and b/gfx/menu/xaw/icon_pure1.tga differ
index 00df32498ebdfdb623c9e42d3c9c0348db648a94..5f4bbaad40211135e157b03f89e82e99ef337475 100644 (file)
@@ -114,6 +114,9 @@ COLOR_CVARLIST_CHANGED          '1 0 0'
 COLOR_CVARLIST_UNCHANGED        '1 1 1'
 COLOR_CVARLIST_CONTROLS         '1 0 0'
 
+// gametypelist
+BOOL_GAMETYPELIST_ICON_BLUR     1
+
 // item: dialog
 //   uses "border" images
 //   uses "closebutton" images
index d8995c656fee4e97008aa3cabcdcaa79ae464add..e0dc1d91b7c93babe7324ae3cdc585163643006e 100644 (file)
@@ -521,8 +521,6 @@ void HUD_Weapons(void)
        // update generic hud functions
        HUD_Panel_UpdateCvars();
 
-       draw_beginBoldFont();
-
        // figure out weapon order (how the weapons are sorted) // TODO make this configurable
        if(weaponorder_bypriority != autocvar_cl_weaponpriority || !weaponorder[0])
        {
@@ -592,10 +590,7 @@ void HUD_Weapons(void)
 
                // might as well commit suicide now, no reason to live ;)
                if (weapon_count == 0)
-               {
-                       draw_endBoldFont();
                        return;
-               }
 
                vector old_panel_size = panel_size;
                vector padded_panel_size = panel_size - '2 2 0' * panel_bg_padding;
@@ -749,10 +744,7 @@ void HUD_Weapons(void)
        HUD_Panel_DrawBg(1);
 
        if(center.x == -1)
-       {
-               draw_endBoldFont();
                return;
-       }
 
        if(panel_bg_padding)
        {
@@ -955,8 +947,6 @@ void HUD_Weapons(void)
                        }
                }
        }
-
-       draw_endBoldFont();
 }
 
 // Ammo (#1)
@@ -1548,6 +1538,9 @@ void HUD_HealthArmor(void)
        }
 
        HUD_Panel_UpdateCvars();
+
+       draw_beginBoldFont();
+
        vector pos, mySize;
        pos = panel_pos;
        mySize = panel_size;
@@ -1753,6 +1746,8 @@ void HUD_HealthArmor(void)
                        HUD_Panel_DrawProgressBar(pos, mySize, "progressbar", fuel/100, is_vertical, fuel_baralign, autocvar_hud_progressbar_fuel_color, panel_fg_alpha * 0.8, DRAWFLAG_NORMAL);
                }
        }
+
+       draw_endBoldFont();
 }
 
 // Notification area (#4)
@@ -2318,7 +2313,7 @@ void HUD_Score(void)
        vector distribution_color;
        entity tm, pl, me;
 
-       me = playerslots[player_localentnum - 1];
+       me = playerslots[current_player];
 
        if((scores_flags[ps_primary] & SFL_TIME) && !teamplay) { // race/cts record display on HUD
                string timer, distrtimer;
@@ -2487,8 +2482,6 @@ void HUD_RaceTimer (void)
 
        HUD_Panel_UpdateCvars();
 
-       draw_beginBoldFont();
-
        vector pos, mySize;
        pos = panel_pos;
        mySize = panel_size;
@@ -2524,7 +2517,9 @@ void HUD_RaceTimer (void)
        if(autocvar__hud_configure)
        {
                s = "0:13:37";
+               draw_beginBoldFont();
                drawstring(pos + eX * 0.5 * mySize.x - '0.5 0 0' * stringwidth(s, false, '0.60 0.60 0' * mySize.y), s, '0.60 0.60 0' * mySize.y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+               draw_endBoldFont();
                s = _("^1Intermediate 1 (+15.42)");
                drawcolorcodedstring(pos + eX * 0.5 * mySize.x - '0.5 0 0' * stringwidth(s, true, '1 1 0' * 0.20 * mySize.y) + eY * 0.60 * mySize.y, s, '1 1 0' * 0.20 * mySize.y, panel_fg_alpha, DRAWFLAG_NORMAL);
                s = sprintf(_("^1PENALTY: %.1f (%s)"), 2, "missing a checkpoint");
@@ -2574,6 +2569,8 @@ void HUD_RaceTimer (void)
                        }
                }
 
+               draw_beginBoldFont();
+
                if(forcetime != "")
                {
                        a = bound(0, (time - race_checkpointtime) / 0.5, 1);
@@ -2587,6 +2584,8 @@ void HUD_RaceTimer (void)
                        s = TIME_ENCODED_TOSTRING(TIME_ENCODE(time + TIME_DECODE(race_penaltyaccumulator) - race_laptime));
                        drawstring(pos + eX * 0.5 * mySize.x - '0.5 0 0' * stringwidth(s, false, '0.6 0.6 0' * mySize.y), s, '0.6 0.6 0' * mySize.y, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
                }
+
+               draw_endBoldFont();
        }
        else
        {
@@ -2617,8 +2616,6 @@ void HUD_RaceTimer (void)
                        }
                }
        }
-
-       draw_endBoldFont();
 }
 
 // Vote window (#9)
@@ -3782,7 +3779,7 @@ void HUD_InfoMessages(void)
                        if(spectatee_status == -1)
                                s = _("^1Observing");
                        else
-                               s = sprintf(_("^1Spectating: ^7%s"), GetPlayerName(player_localentnum - 1));
+                               s = sprintf(_("^1Spectating: ^7%s"), GetPlayerName(current_player));
                        drawInfoMessage(s);
 
                        if(spectatee_status == -1)
@@ -4630,8 +4627,6 @@ void HUD_Main (void)
                hud_skin_prev = strzone(autocvar_hud_skin);
        }
 
-    current_player = player_localentnum;
-
        // draw the dock
        if(autocvar_hud_dock != "" && autocvar_hud_dock != "0")
        {
@@ -4651,11 +4646,11 @@ void HUD_Main (void)
                {
                        string hud_dock_color = autocvar_hud_dock_color;
                        if(hud_dock_color == "shirt") {
-                               f = stof(getplayerkeyvalue(current_player - 1, "colors"));
+                               f = stof(getplayerkeyvalue(current_player, "colors"));
                                color = colormapPaletteColor(floor(f / 16), 0);
                        }
                        else if(hud_dock_color == "pants") {
-                               f = stof(getplayerkeyvalue(current_player - 1, "colors"));
+                               f = stof(getplayerkeyvalue(current_player, "colors"));
                                color = colormapPaletteColor(f % 16, 1);
                        }
                        else
index 3b61cb4539643c06b1e66dcc89b9fccbee6546f0..5bc2ca4a736c1529b6b91a2bac7478a6291f5e51 100644 (file)
@@ -227,9 +227,9 @@ HUD_PANELS(HUD_PANEL)
                        panel_bg_color = autocvar_hud_panel_bg_color;                                                           \
                } else {                                                                                                    \
                        if (panel_bg_color_str == "shirt") {                                                                    \
-                               panel_bg_color = colormapPaletteColor(floor(stof(getplayerkeyvalue(current_player - 1, "colors")) / 16), 0);\
+                               panel_bg_color = colormapPaletteColor(floor(stof(getplayerkeyvalue(current_player, "colors")) / 16), 0); \
                        } else if (panel_bg_color_str == "pants") {                                                             \
-                               panel_bg_color = colormapPaletteColor(stof(getplayerkeyvalue(current_player - 1, "colors")) % 16, 1);\
+                               panel_bg_color = colormapPaletteColor(stof(getplayerkeyvalue(current_player, "colors")) % 16, 1); \
                        } else {                                                                                                \
                                panel_bg_color = stov(panel_bg_color_str);                                                          \
                        }                                                                                                       \
index 905c66c3cc13895b3500915a8631560e747ff4aa..418e1db08b2697239e7d81194fe91e82279d8ff6 100644 (file)
@@ -360,7 +360,6 @@ void Cmd_HUD_SetFields(float argc)
 
        hud_fontsize = HUD_GetFontsize("hud_fontsize");
 
-       draw_beginBoldFont();
        for(i = 1; i < argc - 1; ++i)
        {
                float nocomplain;
@@ -499,7 +498,6 @@ void Cmd_HUD_SetFields(float argc)
        }
 
        hud_field[hud_num_fields] = SP_END;
-       draw_endBoldFont();
 }
 
 // MOVEUP::
@@ -879,7 +877,6 @@ vector HUD_Scoreboard_MakeTable(vector pos, entity tm, vector rgb, vector bg_siz
        }
 
        // print the strings of the columns headers and draw the columns
-       draw_beginBoldFont();
        int i;
        for(i = 0; i < hud_num_fields; ++i)
        {
@@ -923,7 +920,6 @@ vector HUD_Scoreboard_MakeTable(vector pos, entity tm, vector rgb, vector bg_siz
                        pos.x -= hud_fontsize.x;
                }
        }
-       draw_endBoldFont();
 
        pos.x = xmin;
        pos.y += 1.25 * hud_fontsize.y; // skip the header
index ffdde41a9e6094e01311cf3613f101675aa5a4b6..35793364fafd3c60c9853065064f39a32f6bc840 100644 (file)
@@ -1054,7 +1054,11 @@ void CSQC_UpdateView(float w, float h)
 
        CSQCPlayer_SetCamera();
 
-       myteam = GetPlayerColor(player_localentnum - 1);
+       if(player_localentnum <= maxclients) // is it a client?
+               current_player = player_localentnum - 1;
+       else // then player_localentnum is the vehicle I'm driving
+               current_player = player_localnum;
+       myteam = GetPlayerColor(current_player);
 
        if(myteam != prev_myteam)
        {
index bf29683f6302b1bc889e68f09017a690ab0e55cd..d5e1f82eba4ab0ece3d7fb7995ec4b7838c455a3 100644 (file)
@@ -175,6 +175,9 @@ SKINBEGIN
        SKINVECTOR(COLOR_CLEARBUTTON_F, '1 1 1');
        SKINVECTOR(COLOR_CLEARBUTTON_C, '1 1 1');
 
+       // item: gametype list
+       SKINFLOAT(BOOL_GAMETYPELIST_ICON_BLUR, 1);
+
        // item: key grabber
        SKINVECTOR(COLOR_KEYGRABBER_TITLES, '1 1 1');
        SKINFLOAT(ALPHA_KEYGRABBER_TITLES, 1);
@@ -247,7 +250,6 @@ SKINBEGIN
        SKINVECTOR(COLOR_SERVERLIST_FAVORITE, '1 1 1');
        SKINFLOAT(ALPHA_SERVERLIST_IMPOSSIBLE, 0.7);
        SKINVECTOR(COLOR_SERVERLIST_IMPOSSIBLE, '0.3 0.3 0.3');
-       SKINSTRING(GFX_SERVERLIST_ICON, "icon");
        SKINFLOAT(ALPHA_SERVERLIST_ICON_NONPURE, 0.5);
 
        // item: server info
index 26845f0946430469120b374d59bfc0f0d785f7a3..030af6715339257b23ddb7d4a07531f1a489635c 100644 (file)
@@ -36,9 +36,11 @@ void XonoticGametypeList_configureXonoticGametypeList(entity me)
        me.configureXonoticListBox(me);
        me.nItems = GameType_GetCount();
 
-       // we want the pics mipmapped
-       for(int i = 0; i < GameType_GetCount(); ++i)
-               draw_PreloadPictureWithFlags(GameType_GetIcon(i), PRECACHE_PIC_MIPMAP);
+       if(SKINBOOL_GAMETYPELIST_ICON_BLUR)
+       {
+               for(int i = 0; i < GameType_GetCount(); ++i)
+                       draw_PreloadPictureWithFlags(GameType_GetIcon(i), PRECACHE_PIC_MIPMAP);
+       }
 
        me.loadCvars(me);
 }
index 8bf70cc33307d06fe1ae5130649d602a8ef164fc..33203c52b9dc72c10f80ad23183b609494d3310a 100644 (file)
@@ -1160,57 +1160,46 @@ void XonoticServerList_drawListBoxItem(entity me, int i, vector absSize, bool is
        iconPos_x = (me.columnIconsSize - 3 * iconSize.x) * 0.5;
        iconPos_y = (1 - iconSize.y) * 0.5;
 
-       string n;
-
-       if (!(me.seenIPv4 && me.seenIPv6))
-       {
-               iconPos.x += iconSize.x * 0.5;
-       }
-       else if(me.seenIPv4 && me.seenIPv6)
+       // IP
+       if(me.seenIPv4 && me.seenIPv6)
        {
-               n = string_null;
                if(isv6)
-                       draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_ipv6"), 0); // PRECACHE_PIC_MIPMAP
+                       draw_Picture(iconPos, "icon_ipv6", iconSize, '1 1 1', 1);
                else if(isv4)
-                       draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_ipv4"), 0); // PRECACHE_PIC_MIPMAP
-               if(n)
-                       draw_Picture(iconPos, n, iconSize, '1 1 1', 1);
-               iconPos.x += iconSize.x;
+                       draw_Picture(iconPos, "icon_ipv4", iconSize, '1 1 1', 1);
        }
 
+       iconPos.x += iconSize.x;
+
+       // AES
        if(q > 0)
-       {
-               draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_aeslevel", ftos(q)), 0); // PRECACHE_PIC_MIPMAP
-               draw_Picture(iconPos, n, iconSize, '1 1 1', 1);
-       }
+               draw_Picture(iconPos, strcat("icon_aeslevel", ftos(q)), iconSize, '1 1 1', 1);
+
        iconPos.x += iconSize.x;
 
+       // Mod
        if(modname == "Xonotic")
        {
                if(pure == 0)
-               {
-                       draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_pure1"), PRECACHE_PIC_MIPMAP);
-                       draw_Picture(iconPos, n, iconSize, '1 1 1', 1);
-               }
+                       draw_Picture(iconPos, "icon_pure1", iconSize, '1 1 1', 1);
        }
        else
        {
-               draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_mod_", modname), PRECACHE_PIC_MIPMAP);
-               if(draw_PictureSize(n) == '0 0 0')
-                       draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_mod_"), PRECACHE_PIC_MIPMAP);
+               string icon = strcat("icon_mod_", modname);
+               if(draw_PictureSize(icon) == '0 0 0')
+                       icon = "icon_mod_";
+
                if(pure == 0)
-                       draw_Picture(iconPos, n, iconSize, '1 1 1', 1);
+                       draw_Picture(iconPos, icon, iconSize, '1 1 1', 1);
                else
-                       draw_Picture(iconPos, n, iconSize, '1 1 1', SKINALPHA_SERVERLIST_ICON_NONPURE);
+                       draw_Picture(iconPos, icon, iconSize, '1 1 1', SKINALPHA_SERVERLIST_ICON_NONPURE);
        }
+
        iconPos.x += iconSize.x;
 
+       // Stats
        if(sflags >= 0 && (sflags & SERVERFLAG_PLAYERSTATS))
-       {
-               draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_stats1"), 0); // PRECACHE_PIC_MIPMAP
-               draw_Picture(iconPos, n, iconSize, '1 1 1', 1);
-       }
-       iconPos.x += iconSize.x;
+               draw_Picture(iconPos, "icon_stats1", iconSize, '1 1 1', 1);
 
        // --------------
        //  RENDER TEXT