]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - menu.c
split up net_slist into net_slist and net_slistqw, and modified menu accordingly...
[xonotic/darkplaces.git] / menu.c
diff --git a/menu.c b/menu.c
index fbf688950835927a2d9c35bb19939b384db6bd68..d121bbfc813046f42947098173451a81fd0074de 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -167,8 +167,8 @@ void M_Background(int width, int height)
        menu_height = bound(1, height, vid_conheight.integer);
        menu_x = (vid_conwidth.integer - menu_width) * 0.5;
        menu_y = (vid_conheight.integer - menu_height) * 0.5;
-       //DrawQ_Fill(menu_x, menu_y, menu_width, menu_height, 0, 0, 0, 0.5, 0);
-       DrawQ_Fill(0, 0, vid_conwidth.integer, vid_conheight.integer, 0, 0, 0, 0.5, 0);
+       //DrawQ_Pic(menu_x, menu_y, NULL, menu_width, menu_height, 0, 0, 0, 0.5, 0);
+       DrawQ_Pic(0, 0, NULL, vid_conwidth.integer, vid_conheight.integer, 0, 0, 0, 0.5, 0);
 }
 
 /*
@@ -211,7 +211,7 @@ void M_ItemPrint(float cx, float cy, const char *str, int unghosted)
 
 void M_DrawPic (float cx, float cy, const char *picname)
 {
-       DrawQ_Pic (menu_x + cx, menu_y + cy, picname, 0, 0, 1, 1, 1, 1, 0);
+       DrawQ_Pic (menu_x + cx, menu_y + cy, Draw_CachePic(picname, false), 0, 0, 1, 1, 1, 1, 0);
 }
 
 unsigned char identityTable[256];
@@ -394,6 +394,9 @@ void M_Menu_Main_f (void)
                else
                        MAIN_ITEMS = 7;
        }
+       else if (gamemode == GAME_NEXUIZ) {
+               MAIN_ITEMS = 2;
+       }
        else
                MAIN_ITEMS = 5;
 
@@ -418,25 +421,36 @@ void M_Main_Draw (void)
        if (gamemode == GAME_TRANSFUSION) {
                int y1, y2, y3;
                M_Background(640, 480);
-               p = Draw_CachePic ("gfx/tb-transfusion", false);
-               M_DrawPic (640/2 - p->width/2, 40, "gfx/tb-transfusion");
+               p = Draw_CachePic ("gfx/menu/tb-transfusion", false);
+               M_DrawPic (640/2 - p->width/2, 40, "gfx/menu/tb-transfusion");
                y2 = 120;
                // 8 rather than MAIN_ITEMS to skip a number and not miss the last option
                for (y1 = 1; y1 <= 8; y1++)
                {
                        if (MAIN_ITEMS == 7 && y1 == 4)
                                y1++;
-                       M_DrawPic (0, y2, va("gfx/mainmenu%i", y1));
+                       M_DrawPic (0, y2, va("gfx/menu/mainmenu%i", y1));
                        y2 += 40;
                }
                if (MAIN_ITEMS == 7 && m_main_cursor > 2)
                        y3 = m_main_cursor + 2;
                else
                        y3 = m_main_cursor + 1;
-               M_DrawPic (0, 120 + m_main_cursor * 40, va("gfx/mainmenu%iselected", y3));
+               M_DrawPic (0, 120 + m_main_cursor * 40, va("gfx/menu/mainmenu%iselected", y3));
+               return;
+       }
+       else if (gamemode == GAME_NEXUIZ)
+       {
+               M_Background(640, 480); //fall back is always to 640x480, this makes it most readable at that.
+               M_PrintRed (40, (480/3)-16, "You have reached this menu due to missing or unlocatable content/data");
+               M_Print ((640/2)-92, (480/3), "You may consider adding");
+               M_Print ((640/2)-136, (480/3)+8, "-basedir /path/to/nexuiz");
+               M_Print ((640/2)-76, (480/3)+16, "to your launch commandline");
+               M_Print (640/2 - 48, 480/2, "Open Console"); //The console usually better shows errors (failures)
+               M_Print (640/2 - 48, 480/2 + 8, "Quit");
+               M_DrawCharacter(640/2 - 56, 480/2 + (8 * m_main_cursor), 12+((int)(realtime*4)&1));
                return;
        }
-
        M_Background(320, 200);
        M_DrawPic (16, 4, "gfx/qplaque");
        p = Draw_CachePic ("gfx/ttl_main", false);
@@ -674,6 +688,22 @@ void M_Main_Key (int key, char ascii)
                                }
                        }
                }
+               else if (gamemode == GAME_NEXUIZ) {
+                       switch (m_main_cursor)
+                       {
+                       case 0:
+                               if (cls.state == ca_connected)
+                               {
+                                       m_state = m_none;
+                                       key_dest = key_game;
+                               }
+                               Con_ToggleConsole_f ();
+                               break;
+                       case 1:
+                               M_Menu_Quit_f ();
+                               break;
+                       }
+               }
                else
                {
                        switch (m_main_cursor)
@@ -727,14 +757,12 @@ void M_SinglePlayer_Draw (void)
        p = Draw_CachePic ("gfx/ttl_sgl", false);
 
        // Some mods don't have a single player mode
-       if (gamemode == GAME_NEXUIZ || gamemode == GAME_GOODVSBAD2 || gamemode == GAME_BATTLEMECH)
+       if (gamemode == GAME_GOODVSBAD2 || gamemode == GAME_BATTLEMECH)
        {
                M_DrawPic ((320 - p->width) / 2, 4, "gfx/ttl_sgl");
 
                M_DrawTextBox (60, 8 * 8, 23, 4);
-               if (gamemode == GAME_NEXUIZ)
-                       M_Print(95, 10 * 8, "Nexuiz is for");
-               else if (gamemode == GAME_GOODVSBAD2)
+               if (gamemode == GAME_GOODVSBAD2)
                        M_Print(95, 10 * 8, "Good Vs Bad 2 is for");
                else  // if (gamemode == GAME_BATTLEMECH)
                        M_Print(95, 10 * 8, "Battlemech is for");
@@ -756,7 +784,7 @@ void M_SinglePlayer_Draw (void)
 
 void M_SinglePlayer_Key (int key, char ascii)
 {
-       if (gamemode == GAME_NEXUIZ || gamemode == GAME_GOODVSBAD2 || gamemode == GAME_BATTLEMECH)
+       if (gamemode == GAME_GOODVSBAD2 || gamemode == GAME_BATTLEMECH)
        {
                if (key == K_ESCAPE || key == K_ENTER)
                        m_state = m_main;
@@ -1014,13 +1042,13 @@ void M_Transfusion_Episode_Draw (void)
        cachepic_t *p;
        M_Background(640, 480);
 
-       p = Draw_CachePic ("gfx/tb-episodes", false);
-       M_DrawPic (640/2 - p->width/2, 40, "gfx/tb-episodes");
+       p = Draw_CachePic ("gfx/menu/tb-episodes", false);
+       M_DrawPic (640/2 - p->width/2, 40, "gfx/menu/tb-episodes");
        for (y = 0; y < EPISODE_ITEMS; y++){
-               M_DrawPic (0, 160 + y * 40, va("gfx/episode%i", y+1));
+               M_DrawPic (0, 160 + y * 40, va("gfx/menu/episode%i", y+1));
        }
 
-       M_DrawPic (0, 120 + (m_episode_cursor + 1) * 40, va("gfx/episode%iselected", m_episode_cursor + 1));
+       M_DrawPic (0, 120 + (m_episode_cursor + 1) * 40, va("gfx/menu/episode%iselected", m_episode_cursor + 1));
 }
 
 void M_Transfusion_Episode_Key (int key, char ascii)
@@ -1071,14 +1099,14 @@ void M_Transfusion_Skill_Draw (void)
        cachepic_t      *p;
        M_Background(640, 480);
 
-       p = Draw_CachePic ("gfx/tb-difficulty", false);
-       M_DrawPic(640/2 - p->width/2, 40, "gfx/tb-difficulty");
+       p = Draw_CachePic ("gfx/menu/tb-difficulty", false);
+       M_DrawPic(640/2 - p->width/2, 40, "gfx/menu/tb-difficulty");
 
        for (y = 0; y < SKILL_ITEMS; y++)
        {
-               M_DrawPic (0, 180 + y * 40, va("gfx/difficulty%i", y+1));
+               M_DrawPic (0, 180 + y * 40, va("gfx/menu/difficulty%i", y+1));
        }
-       M_DrawPic (0, 140 + (m_skill_cursor + 1) *40, va("gfx/difficulty%iselected", m_skill_cursor + 1));
+       M_DrawPic (0, 140 + (m_skill_cursor + 1) *40, va("gfx/menu/difficulty%iselected", m_skill_cursor + 1));
 }
 
 void M_Transfusion_Skill_Key (int key, char ascii)
@@ -1175,11 +1203,11 @@ void M_MultiPlayer_Draw (void)
        if (gamemode == GAME_TRANSFUSION)
        {
                M_Background(640, 480);
-               p = Draw_CachePic ("gfx/tb-online", false);
-               M_DrawPic (640/2 - p->width/2, 140, "gfx/tb-online");
+               p = Draw_CachePic ("gfx/menu/tb-online", false);
+               M_DrawPic (640/2 - p->width/2, 140, "gfx/menu/tb-online");
                for (f = 1; f <= MULTIPLAYER_ITEMS; f++)
-                       M_DrawPic (0, 180 + f*40, va("gfx/online%i", f));
-               M_DrawPic (0, 220 + m_multiplayer_cursor * 40, va("gfx/online%iselected", m_multiplayer_cursor + 1));
+                       M_DrawPic (0, 180 + f*40, va("gfx/menu/online%i", f));
+               M_DrawPic (0, 220 + m_multiplayer_cursor * 40, va("gfx/menu/online%iselected", m_multiplayer_cursor + 1));
                return;
        }
        M_Background(320, 200);
@@ -1615,7 +1643,7 @@ void M_Options_PrintCommand(const char *s, int enabled)
 {
        if (opty >= 32)
        {
-               DrawQ_Fill(menu_x, menu_y + opty, 320, 8, optnum == optcursor ? (0.5 + 0.2 * sin(realtime * M_PI)) : 0, 0, 0, 0.5, 0);
+               DrawQ_Pic(menu_x, menu_y + opty, NULL, 320, 8, optnum == optcursor ? (0.5 + 0.2 * sin(realtime * M_PI)) : 0, 0, 0, 0.5, 0);
                M_ItemPrint(0, opty, s, enabled);
        }
        opty += 8;
@@ -1626,7 +1654,7 @@ void M_Options_PrintCheckbox(const char *s, int enabled, int yes)
 {
        if (opty >= 32)
        {
-               DrawQ_Fill(menu_x, menu_y + opty, 320, 8, optnum == optcursor ? (0.5 + 0.2 * sin(realtime * M_PI)) : 0, 0, 0, 0.5, 0);
+               DrawQ_Pic(menu_x, menu_y + opty, NULL, 320, 8, optnum == optcursor ? (0.5 + 0.2 * sin(realtime * M_PI)) : 0, 0, 0, 0.5, 0);
                M_ItemPrint(0, opty, s, enabled);
                M_DrawCheckbox(0 + (int)strlen(s) * 8 + 8, opty, yes);
        }
@@ -1638,7 +1666,7 @@ void M_Options_PrintSlider(const char *s, int enabled, float value, float minval
 {
        if (opty >= 32)
        {
-               DrawQ_Fill(menu_x, menu_y + opty, 320, 8, optnum == optcursor ? (0.5 + 0.2 * sin(realtime * M_PI)) : 0, 0, 0, 0.5, 0);
+               DrawQ_Pic(menu_x, menu_y + opty, NULL, 320, 8, optnum == optcursor ? (0.5 + 0.2 * sin(realtime * M_PI)) : 0, 0, 0, 0.5, 0);
                M_ItemPrint(0, opty, s, enabled);
                M_DrawSlider(0 + (int)strlen(s) * 8 + 8, opty, value, minvalue, maxvalue);
        }
@@ -2169,7 +2197,9 @@ void M_Options_ColorControl_Draw (void)
 {
        int visible;
        float x, c, s, t, u, v;
-       cachepic_t      *p;
+       cachepic_t      *p, *dither;
+
+       dither = Draw_CachePic("gfx/colorcontrol/ditherpattern", false);
 
        M_Background(320, 256);
 
@@ -2202,17 +2232,17 @@ void M_Options_ColorControl_Draw (void)
        M_Options_PrintSlider(  "          White: Grey ", v_color_enable.integer, (v_color_white_r.value + v_color_white_g.value + v_color_white_b.value) / 3, 1, 5);
 
        opty += 4;
-       DrawQ_Fill(menu_x, menu_y + opty, 320, 4 + 64 + 8 + 64 + 4, 0, 0, 0, 1, 0);opty += 4;
+       DrawQ_Pic(menu_x, menu_y + opty, NULL, 320, 4 + 64 + 8 + 64 + 4, 0, 0, 0, 1, 0);opty += 4;
        s = (float) 312 / 2 * vid.width / vid_conwidth.integer;
        t = (float) 4 / 2 * vid.height / vid_conheight.integer;
-       DrawQ_SuperPic(menu_x + 4, menu_y + opty, "gfx/colorcontrol/ditherpattern", 312, 4, 0,0, 1,0,0,1, s,0, 1,0,0,1, 0,t, 1,0,0,1, s,t, 1,0,0,1, 0);opty += 4;
-       DrawQ_SuperPic(menu_x + 4, menu_y + opty, NULL                                , 312, 4, 0,0, 0,0,0,1, 1,0, 1,0,0,1, 0,1, 0,0,0,1, 1,1, 1,0,0,1, 0);opty += 4;
-       DrawQ_SuperPic(menu_x + 4, menu_y + opty, "gfx/colorcontrol/ditherpattern", 312, 4, 0,0, 0,1,0,1, s,0, 0,1,0,1, 0,t, 0,1,0,1, s,t, 0,1,0,1, 0);opty += 4;
-       DrawQ_SuperPic(menu_x + 4, menu_y + opty, NULL                                , 312, 4, 0,0, 0,0,0,1, 1,0, 0,1,0,1, 0,1, 0,0,0,1, 1,1, 0,1,0,1, 0);opty += 4;
-       DrawQ_SuperPic(menu_x + 4, menu_y + opty, "gfx/colorcontrol/ditherpattern", 312, 4, 0,0, 0,0,1,1, s,0, 0,0,1,1, 0,t, 0,0,1,1, s,t, 0,0,1,1, 0);opty += 4;
-       DrawQ_SuperPic(menu_x + 4, menu_y + opty, NULL                                , 312, 4, 0,0, 0,0,0,1, 1,0, 0,0,1,1, 0,1, 0,0,0,1, 1,1, 0,0,1,1, 0);opty += 4;
-       DrawQ_SuperPic(menu_x + 4, menu_y + opty, "gfx/colorcontrol/ditherpattern", 312, 4, 0,0, 1,1,1,1, s,0, 1,1,1,1, 0,t, 1,1,1,1, s,t, 1,1,1,1, 0);opty += 4;
-       DrawQ_SuperPic(menu_x + 4, menu_y + opty, NULL                                , 312, 4, 0,0, 0,0,0,1, 1,0, 1,1,1,1, 0,1, 0,0,0,1, 1,1, 1,1,1,1, 0);opty += 4;
+       DrawQ_SuperPic(menu_x + 4, menu_y + opty, dither, 312, 4, 0,0, 1,0,0,1, s,0, 1,0,0,1, 0,t, 1,0,0,1, s,t, 1,0,0,1, 0);opty += 4;
+       DrawQ_SuperPic(menu_x + 4, menu_y + opty, NULL  , 312, 4, 0,0, 0,0,0,1, 1,0, 1,0,0,1, 0,1, 0,0,0,1, 1,1, 1,0,0,1, 0);opty += 4;
+       DrawQ_SuperPic(menu_x + 4, menu_y + opty, dither, 312, 4, 0,0, 0,1,0,1, s,0, 0,1,0,1, 0,t, 0,1,0,1, s,t, 0,1,0,1, 0);opty += 4;
+       DrawQ_SuperPic(menu_x + 4, menu_y + opty, NULL  , 312, 4, 0,0, 0,0,0,1, 1,0, 0,1,0,1, 0,1, 0,0,0,1, 1,1, 0,1,0,1, 0);opty += 4;
+       DrawQ_SuperPic(menu_x + 4, menu_y + opty, dither, 312, 4, 0,0, 0,0,1,1, s,0, 0,0,1,1, 0,t, 0,0,1,1, s,t, 0,0,1,1, 0);opty += 4;
+       DrawQ_SuperPic(menu_x + 4, menu_y + opty, NULL  , 312, 4, 0,0, 0,0,0,1, 1,0, 0,0,1,1, 0,1, 0,0,0,1, 1,1, 0,0,1,1, 0);opty += 4;
+       DrawQ_SuperPic(menu_x + 4, menu_y + opty, dither, 312, 4, 0,0, 1,1,1,1, s,0, 1,1,1,1, 0,t, 1,1,1,1, s,t, 1,1,1,1, 0);opty += 4;
+       DrawQ_SuperPic(menu_x + 4, menu_y + opty, NULL  , 312, 4, 0,0, 0,0,0,1, 1,0, 1,1,1,1, 0,1, 0,0,0,1, 1,1, 1,1,1,1, 0);opty += 4;
 
        c = menu_options_colorcontrol_correctionvalue.value; // intensity value that should be matched up to a 50% dither to 'correct' quake
        s = (float) 48 / 2 * vid.width / vid_conwidth.integer;
@@ -2221,21 +2251,21 @@ void M_Options_ColorControl_Draw (void)
        v = t * 0.5;
        opty += 8;
        x = 4;
-       DrawQ_Fill(menu_x + x, menu_y + opty, 64, 48, c, 0, 0, 1, 0);
-       DrawQ_SuperPic(menu_x + x + 16, menu_y + opty + 16, "gfx/colorcontrol/ditherpattern", 16, 16, 0,0, 1,0,0,1, s,0, 1,0,0,1, 0,t, 1,0,0,1, s,t, 1,0,0,1, 0);
-       DrawQ_SuperPic(menu_x + x + 32, menu_y + opty + 16, "gfx/colorcontrol/ditherpattern", 16, 16, 0,0, 1,0,0,1, u,0, 1,0,0,1, 0,v, 1,0,0,1, u,v, 1,0,0,1, 0);
+       DrawQ_Pic(menu_x + x, menu_y + opty, NULL, 64, 48, c, 0, 0, 1, 0);
+       DrawQ_SuperPic(menu_x + x + 16, menu_y + opty + 16, dither, 16, 16, 0,0, 1,0,0,1, s,0, 1,0,0,1, 0,t, 1,0,0,1, s,t, 1,0,0,1, 0);
+       DrawQ_SuperPic(menu_x + x + 32, menu_y + opty + 16, dither, 16, 16, 0,0, 1,0,0,1, u,0, 1,0,0,1, 0,v, 1,0,0,1, u,v, 1,0,0,1, 0);
        x += 80;
-       DrawQ_Fill(menu_x + x, menu_y + opty, 64, 48, 0, c, 0, 1, 0);
-       DrawQ_SuperPic(menu_x + x + 16, menu_y + opty + 16, "gfx/colorcontrol/ditherpattern", 16, 16, 0,0, 0,1,0,1, s,0, 0,1,0,1, 0,t, 0,1,0,1, s,t, 0,1,0,1, 0);
-       DrawQ_SuperPic(menu_x + x + 32, menu_y + opty + 16, "gfx/colorcontrol/ditherpattern", 16, 16, 0,0, 0,1,0,1, u,0, 0,1,0,1, 0,v, 0,1,0,1, u,v, 0,1,0,1, 0);
+       DrawQ_Pic(menu_x + x, menu_y + opty, NULL, 64, 48, 0, c, 0, 1, 0);
+       DrawQ_SuperPic(menu_x + x + 16, menu_y + opty + 16, dither, 16, 16, 0,0, 0,1,0,1, s,0, 0,1,0,1, 0,t, 0,1,0,1, s,t, 0,1,0,1, 0);
+       DrawQ_SuperPic(menu_x + x + 32, menu_y + opty + 16, dither, 16, 16, 0,0, 0,1,0,1, u,0, 0,1,0,1, 0,v, 0,1,0,1, u,v, 0,1,0,1, 0);
        x += 80;
-       DrawQ_Fill(menu_x + x, menu_y + opty, 64, 48, 0, 0, c, 1, 0);
-       DrawQ_SuperPic(menu_x + x + 16, menu_y + opty + 16, "gfx/colorcontrol/ditherpattern", 16, 16, 0,0, 0,0,1,1, s,0, 0,0,1,1, 0,t, 0,0,1,1, s,t, 0,0,1,1, 0);
-       DrawQ_SuperPic(menu_x + x + 32, menu_y + opty + 16, "gfx/colorcontrol/ditherpattern", 16, 16, 0,0, 0,0,1,1, u,0, 0,0,1,1, 0,v, 0,0,1,1, u,v, 0,0,1,1, 0);
+       DrawQ_Pic(menu_x + x, menu_y + opty, NULL, 64, 48, 0, 0, c, 1, 0);
+       DrawQ_SuperPic(menu_x + x + 16, menu_y + opty + 16, dither, 16, 16, 0,0, 0,0,1,1, s,0, 0,0,1,1, 0,t, 0,0,1,1, s,t, 0,0,1,1, 0);
+       DrawQ_SuperPic(menu_x + x + 32, menu_y + opty + 16, dither, 16, 16, 0,0, 0,0,1,1, u,0, 0,0,1,1, 0,v, 0,0,1,1, u,v, 0,0,1,1, 0);
        x += 80;
-       DrawQ_Fill(menu_x + x, menu_y + opty, 64, 48, c, c, c, 1, 0);
-       DrawQ_SuperPic(menu_x + x + 16, menu_y + opty + 16, "gfx/colorcontrol/ditherpattern", 16, 16, 0,0, 1,1,1,1, s,0, 1,1,1,1, 0,t, 1,1,1,1, s,t, 1,1,1,1, 0);
-       DrawQ_SuperPic(menu_x + x + 32, menu_y + opty + 16, "gfx/colorcontrol/ditherpattern", 16, 16, 0,0, 1,1,1,1, u,0, 1,1,1,1, 0,v, 1,1,1,1, u,v, 1,1,1,1, 0);
+       DrawQ_Pic(menu_x + x, menu_y + opty, NULL, 64, 48, c, c, c, 1, 0);
+       DrawQ_SuperPic(menu_x + x + 16, menu_y + opty + 16, dither, 16, 16, 0,0, 1,1,1,1, s,0, 1,1,1,1, 0,t, 1,1,1,1, s,t, 1,1,1,1, 0);
+       DrawQ_SuperPic(menu_x + x + 32, menu_y + opty + 16, dither, 16, 16, 0,0, 1,1,1,1, u,0, 1,1,1,1, 0,v, 1,1,1,1, u,v, 1,1,1,1, 0);
 }
 
 
@@ -2741,8 +2771,10 @@ video_resolution_t video_resolutions[] =
 {"Standard 4x3"              , 1024, 768, 640, 480, 1     },
 {"Standard 4x3"              , 1152, 864, 640, 480, 1     },
 {"Standard 4x3"              , 1280, 960, 640, 480, 1     },
+{"Standard 4x3"              , 1400,1050, 640, 480, 1     },
 {"Standard 4x3"              , 1600,1200, 640, 480, 1     },
 {"Standard 4x3"              , 1792,1344, 640, 480, 1     },
+{"Standard 4x3"              , 1856,1392, 640, 480, 1     },
 {"Standard 4x3"              , 1920,1440, 640, 480, 1     },
 {"Standard 4x3"              , 2048,1536, 640, 480, 1     },
 {"Short Pixel (CRT) 5x4"     ,  320, 256, 320, 256, 0.9375},
@@ -2783,7 +2815,7 @@ video_resolution_t video_resolutions[] =
 {"NTSC 3x2"                  ,  360, 240, 360, 240, 1.125 },
 {"NTSC 3x2"                  ,  720, 480, 720, 480, 1.125 },
 {"PAL 14x11"                 ,  360, 283, 360, 283, 0.9545},
-{"PAL 14x11"                 ,  720, 566, 360, 566, 0.9545},
+{"PAL 14x11"                 ,  720, 566, 720, 566, 0.9545},
 {"NES 8x7"                   ,  256, 224, 256, 224, 1.1667},
 {"SNES 8x7"                  ,  512, 448, 512, 448, 1.1667},
 {NULL, 0, 0, 0, 0, 0}
@@ -3048,10 +3080,10 @@ void M_Menu_Credits_f (void)
 void M_Credits_Draw (void)
 {
        M_Background(640, 480);
-       DrawQ_Pic (0, 0, "gfx/creditsmiddle", 0, 0, 1, 1, 1, 1, 0);
+       M_DrawPic (0, 0, "gfx/creditsmiddle");
        M_Print (640/2 - 14/2*8, 236, "Coming soon...");
-       DrawQ_Pic (0, 0, "gfx/creditstop", 0, 0, 1, 1, 1, 1, 0);
-       DrawQ_Pic (0, 433, "gfx/creditsbottom", 0, 0, 1, 1, 1, 1, 0);
+       M_DrawPic (0, 0, "gfx/creditstop");
+       M_DrawPic (0, 433, "gfx/creditsbottom");
 }
 
 
@@ -3129,6 +3161,9 @@ int M_ChooseQuitMessage(int request)
                if (request-- == 0) return M_QuitMessage("You prefer free beer over free speech?","Press Y to quit, N to stay",NULL,NULL,NULL,NULL,NULL,NULL);
                if (request-- == 0) return M_QuitMessage("Is OpenQuartz Propaganda?","Press Y to quit, N to stay",NULL,NULL,NULL,NULL,NULL,NULL);
                break;
+       case GAME_NEXUIZ: //frag related quit messages are pointless for a fallback menu!
+               if (request-- == 0) return M_QuitMessage("Are you sure you want to quit?","Press Y to quit, N to stay",NULL,NULL,NULL,NULL,NULL,NULL);
+               break;
        default:
                if (request-- == 0) return M_QuitMessage("Tired of fragging already?",NULL,NULL,NULL,NULL,NULL,NULL,NULL);
                if (request-- == 0) return M_QuitMessage("Quit now and forfeit your bodycount?",NULL,NULL,NULL,NULL,NULL,NULL,NULL);
@@ -3202,7 +3237,8 @@ void M_Quit_Draw (void)
        }
        lines = (lastline - firstline) + 1;
        M_Background(linelength * 8 + 16, lines * 8 + 16);
-       M_DrawTextBox(0, 0, linelength, lines);
+       if (gamemode != GAME_NEXUIZ) //since this is a fallback menu for Nexuiz (no graphics), it is very hard to read with the box
+               M_DrawTextBox(0, 0, linelength, lines); //this is less obtrusive than hacking up the M_DrawTextBox function for Nexuiz
        for (i = 0, l = firstline;i < lines;i++, l++)
                M_Print(8 + 4 * (linelength - strlen(m_quit_message[l])), 8 + 8 * i, m_quit_message[l]);
 }
@@ -3211,8 +3247,8 @@ void M_Quit_Draw (void)
 /* LAN CONFIG MENU */
 
 int            lanConfig_cursor = -1;
-int            lanConfig_cursor_table [] = {56, 76, 112};
-#define NUM_LANCONFIG_CMDS     3
+int            lanConfig_cursor_table [] = {56, 76, 84, 120};
+#define NUM_LANCONFIG_CMDS     4
 
 int    lanConfig_port;
 char   lanConfig_portname[6];
@@ -3265,10 +3301,11 @@ void M_LanConfig_Draw (void)
 
        if (JoiningGame)
        {
-               M_Print(basex, lanConfig_cursor_table[1], "Search for games...");
-               M_Print(basex, lanConfig_cursor_table[2]-16, "Join game at:");
-               M_DrawTextBox (basex+8, lanConfig_cursor_table[2]-8, 22, 1);
-               M_Print(basex+16, lanConfig_cursor_table[2], lanConfig_joinname);
+               M_Print(basex, lanConfig_cursor_table[1], "Search for DarkPlaces games...");
+               M_Print(basex, lanConfig_cursor_table[2], "Search for QuakeWorld games...");
+               M_Print(basex, lanConfig_cursor_table[3]-16, "Join game at:");
+               M_DrawTextBox (basex+8, lanConfig_cursor_table[3]-8, 22, 1);
+               M_Print(basex+16, lanConfig_cursor_table[3], lanConfig_joinname);
        }
        else
        {
@@ -3279,10 +3316,10 @@ void M_LanConfig_Draw (void)
        M_DrawCharacter (basex-8, lanConfig_cursor_table [lanConfig_cursor], 12+((int)(realtime*4)&1));
 
        if (lanConfig_cursor == 0)
-               M_DrawCharacter (basex+9*8 + 8*strlen(lanConfig_portname), lanConfig_cursor_table [0], 10+((int)(realtime*4)&1));
+               M_DrawCharacter (basex+9*8 + 8*strlen(lanConfig_portname), lanConfig_cursor_table [lanConfig_cursor], 10+((int)(realtime*4)&1));
 
-       if (lanConfig_cursor == 2)
-               M_DrawCharacter (basex+16 + 8*strlen(lanConfig_joinname), lanConfig_cursor_table [2], 10+((int)(realtime*4)&1));
+       if (lanConfig_cursor == 3)
+               M_DrawCharacter (basex+16 + 8*strlen(lanConfig_joinname), lanConfig_cursor_table [lanConfig_cursor], 10+((int)(realtime*4)&1));
 
        if (*m_return_reason)
                M_Print(basex, 168, m_return_reason);
@@ -3304,6 +3341,9 @@ void M_LanConfig_Key (int key, char ascii)
                lanConfig_cursor--;
                if (lanConfig_cursor < 0)
                        lanConfig_cursor = NUM_LANCONFIG_CMDS-1;
+               // when in start game menu, skip the unused search qw servers item
+               if (StartingGame && lanConfig_cursor == 2)
+                       lanConfig_cursor = 1;
                break;
 
        case K_DOWNARROW:
@@ -3311,6 +3351,9 @@ void M_LanConfig_Key (int key, char ascii)
                lanConfig_cursor++;
                if (lanConfig_cursor >= NUM_LANCONFIG_CMDS)
                        lanConfig_cursor = 0;
+               // when in start game menu, skip the unused search qw servers item
+               if (StartingGame && lanConfig_cursor == 1)
+                       lanConfig_cursor = 2;
                break;
 
        case K_ENTER:
@@ -3323,7 +3366,7 @@ void M_LanConfig_Key (int key, char ascii)
 
                Cvar_SetValue("port", lanConfig_port);
 
-               if (lanConfig_cursor == 1)
+               if (lanConfig_cursor == 1 || lanConfig_cursor == 2)
                {
                        if (StartingGame)
                        {
@@ -3334,7 +3377,7 @@ void M_LanConfig_Key (int key, char ascii)
                        break;
                }
 
-               if (lanConfig_cursor == 2)
+               if (lanConfig_cursor == 3)
                        Cbuf_AddText ( va ("connect \"%s\"\n", lanConfig_joinname) );
                break;
 
@@ -3345,7 +3388,7 @@ void M_LanConfig_Key (int key, char ascii)
                                lanConfig_portname[strlen(lanConfig_portname)-1] = 0;
                }
 
-               if (lanConfig_cursor == 2)
+               if (lanConfig_cursor == 3)
                {
                        if (strlen(lanConfig_joinname))
                                lanConfig_joinname[strlen(lanConfig_joinname)-1] = 0;
@@ -3356,7 +3399,7 @@ void M_LanConfig_Key (int key, char ascii)
                if (ascii < 32)
                        break;
 
-               if (lanConfig_cursor == 2)
+               if (lanConfig_cursor == 3)
                {
                        l = (int)strlen(lanConfig_joinname);
                        if (l < 21)
@@ -3379,7 +3422,7 @@ void M_LanConfig_Key (int key, char ascii)
                }
        }
 
-       if (StartingGame && lanConfig_cursor == 2)
+       if (StartingGame && lanConfig_cursor == 3)
        {
                if (key == K_UPARROW)
                        lanConfig_cursor = 1;
@@ -3994,10 +4037,10 @@ void M_GameOptions_Draw (void)
                        x = (320-26*8)/2;
                        M_DrawTextBox (x, 138, 24, 4);
                        x += 8;
-                       M_Print(x, 146, " More than 64 players?? ");
+                       M_Print(x, 146, " More than 255 players??");
                        M_Print(x, 154, "  First, question your  ");
                        M_Print(x, 162, "   sanity, then email   ");
-                       M_Print(x, 170, " havoc@telefragged.com  ");
+                       M_Print(x, 170, " lordhavoc@ghdigital.com");
                }
                else
                        m_serverInfoMessage = false;
@@ -4269,7 +4312,10 @@ void M_Menu_ServerList_f (void)
        m_entersound = true;
        slist_cursor = 0;
        M_Update_Return_Reason("");
-       Net_Slist_f();
+       if (lanConfig_cursor == 2)
+               Net_SlistQW_f();
+       else
+               Net_Slist_f();
 }
 
 
@@ -4300,18 +4346,25 @@ void M_ServerList_Draw (void)
        {
                for (n = start;n < end;n++)
                {
-                       DrawQ_Fill(menu_x, menu_y + y, 640, 16, n == slist_cursor ? (0.5 + 0.2 * sin(realtime * M_PI)) : 0, 0, 0, 0.5, 0);
+                       DrawQ_Pic(menu_x, menu_y + y, NULL, 640, 16, n == slist_cursor ? (0.5 + 0.2 * sin(realtime * M_PI)) : 0, 0, 0, 0.5, 0);
                        M_PrintColored(0, y, serverlist_viewlist[n]->line1);y += 8;
                        M_PrintColored(0, y, serverlist_viewlist[n]->line2);y += 8;
                }
        }
-       else if (realtime - masterquerytime < 3)
+       else if (realtime - masterquerytime > 10)
        {
                if (masterquerycount)
                        M_Print(0, y, "No servers found");
                else
                        M_Print(0, y, "No master servers found (network problem?)");
        }
+       else
+       {
+               if (serverquerycount)
+                       M_Print(0, y, "Querying servers");
+               else
+                       M_Print(0, y, "Querying master servers");
+       }
 }
 
 
@@ -4324,7 +4377,10 @@ void M_ServerList_Key(int k, char ascii)
                break;
 
        case K_SPACE:
-               Net_Slist_f();
+               if (lanConfig_cursor == 2)
+                       Net_SlistQW_f();
+               else
+                       Net_Slist_f();
                break;
 
        case K_UPARROW:
@@ -4550,29 +4606,32 @@ void M_Draw (void)
 
        if (gamemode == GAME_TRANSFUSION) {
                if (m_state != m_credits) {
-                       cachepic_t      *p;
+                       cachepic_t      *p, *drop1, *drop2, *drop3;
                        int g, scale_x, scale_y, scale_y_repeat, top_offset;
                        float scale_y_rate;
                        scale_y_repeat = vid_conheight.integer * 2;
                        g = (int)(realtime * 64)%96;
                        scale_y_rate = (float)(g+1) / 96;
                        top_offset = (g+12)/12;
-                       p = Draw_CachePic (va("gfx/blooddrip%i", top_offset), false);
+                       p = Draw_CachePic (va("gfx/menu/blooddrip%i", top_offset), false);
+                       drop1 = Draw_CachePic("gfx/menu/blooddrop1", false);
+                       drop2 = Draw_CachePic("gfx/menu/blooddrop2", false);
+                       drop3 = Draw_CachePic("gfx/menu/blooddrop3", false);
                        for (scale_x = 0; scale_x <= vid_conwidth.integer; scale_x += p->width) {
                                for (scale_y = -scale_y_repeat; scale_y <= vid_conheight.integer; scale_y += scale_y_repeat) {
-                                       DrawQ_Pic (scale_x + 21, scale_y_repeat * .5 + scale_y + scale_y_rate * scale_y_repeat, "gfx/blooddrop3", 0, 0, 1, 1, 1, 1, 0);
-                                       DrawQ_Pic (scale_x +  116, scale_y_repeat + scale_y + scale_y_rate * scale_y_repeat, "gfx/blooddrop1", 0, 0, 1, 1, 1, 1, 0);
-                                       DrawQ_Pic (scale_x + 180, scale_y_repeat * .275 + scale_y + scale_y_rate * scale_y_repeat, "gfx/blooddrop3", 0, 0, 1, 1, 1, 1, 0);
-                                       DrawQ_Pic (scale_x + 242, scale_y_repeat * .75 + scale_y + scale_y_rate * scale_y_repeat, "gfx/blooddrop3", 0, 0, 1, 1, 1, 1, 0);
-                                       DrawQ_Pic (scale_x + 304, scale_y_repeat * .25 + scale_y + scale_y_rate * scale_y_repeat, "gfx/blooddrop3", 0, 0, 1, 1, 1, 1, 0);
-                                       DrawQ_Pic (scale_x + 362, scale_y_repeat * .46125 + scale_y + scale_y_rate * scale_y_repeat, "gfx/blooddrop3", 0, 0, 1, 1, 1, 1, 0);
-                                       DrawQ_Pic (scale_x + 402, scale_y_repeat * .1725 + scale_y + scale_y_rate * scale_y_repeat, "gfx/blooddrop3", 0, 0, 1, 1, 1, 1, 0);
-                                       DrawQ_Pic (scale_x + 438, scale_y_repeat * .9 + scale_y + scale_y_rate * scale_y_repeat, "gfx/blooddrop1", 0, 0, 1, 1, 1, 1, 0);
-                                       DrawQ_Pic (scale_x + 484, scale_y_repeat * .5 + scale_y + scale_y_rate * scale_y_repeat, "gfx/blooddrop3", 0, 0, 1, 1, 1, 1, 0);
-                                       DrawQ_Pic (scale_x + 557, scale_y_repeat * .9425 + scale_y + scale_y_rate * scale_y_repeat, "gfx/blooddrop1", 0, 0, 1, 1, 1, 1, 0);
-                                       DrawQ_Pic (scale_x + 606, scale_y_repeat * .5 + scale_y + scale_y_rate * scale_y_repeat, "gfx/blooddrop2", 0, 0, 1, 1, 1, 1, 0);
+                                       DrawQ_Pic (scale_x + 21, scale_y_repeat * .5 + scale_y + scale_y_rate * scale_y_repeat, drop3, 0, 0, 1, 1, 1, 1, 0);
+                                       DrawQ_Pic (scale_x +  116, scale_y_repeat + scale_y + scale_y_rate * scale_y_repeat, drop1, 0, 0, 1, 1, 1, 1, 0);
+                                       DrawQ_Pic (scale_x + 180, scale_y_repeat * .275 + scale_y + scale_y_rate * scale_y_repeat, drop3, 0, 0, 1, 1, 1, 1, 0);
+                                       DrawQ_Pic (scale_x + 242, scale_y_repeat * .75 + scale_y + scale_y_rate * scale_y_repeat, drop3, 0, 0, 1, 1, 1, 1, 0);
+                                       DrawQ_Pic (scale_x + 304, scale_y_repeat * .25 + scale_y + scale_y_rate * scale_y_repeat, drop3, 0, 0, 1, 1, 1, 1, 0);
+                                       DrawQ_Pic (scale_x + 362, scale_y_repeat * .46125 + scale_y + scale_y_rate * scale_y_repeat, drop3, 0, 0, 1, 1, 1, 1, 0);
+                                       DrawQ_Pic (scale_x + 402, scale_y_repeat * .1725 + scale_y + scale_y_rate * scale_y_repeat, drop3, 0, 0, 1, 1, 1, 1, 0);
+                                       DrawQ_Pic (scale_x + 438, scale_y_repeat * .9 + scale_y + scale_y_rate * scale_y_repeat, drop1, 0, 0, 1, 1, 1, 1, 0);
+                                       DrawQ_Pic (scale_x + 484, scale_y_repeat * .5 + scale_y + scale_y_rate * scale_y_repeat, drop3, 0, 0, 1, 1, 1, 1, 0);
+                                       DrawQ_Pic (scale_x + 557, scale_y_repeat * .9425 + scale_y + scale_y_rate * scale_y_repeat, drop1, 0, 0, 1, 1, 1, 1, 0);
+                                       DrawQ_Pic (scale_x + 606, scale_y_repeat * .5 + scale_y + scale_y_rate * scale_y_repeat, drop2, 0, 0, 1, 1, 1, 1, 0);
                                }
-                               DrawQ_Pic (scale_x, -1, va("gfx/blooddrip%i", top_offset), 0, 0, 1, 1, 1, 1, 0);
+                               DrawQ_Pic (scale_x, -1, Draw_CachePic(va("gfx/menu/blooddrip%i", top_offset), false), 0, 0, 1, 1, 1, 1, 0);
                        }
                }
        }