]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - menu.c
Fixed a bug in the menu.
[xonotic/darkplaces.git] / menu.c
diff --git a/menu.c b/menu.c
index a56f4365efe527a6779e73f249c6fdd30d79b644..f5b9d54484aea8c04b5c70e46096ee23b5f950ae 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -317,7 +317,7 @@ void M_Demo_Key (int k, char ascii)
                break;
 
        case K_ENTER:
-               S_LocalSound ("misc/menu2.wav");
+               S_LocalSound ("misc/menu2.wav", true);
                m_state = m_none;
                key_dest = key_game;
                Cbuf_AddText (va ("playdemo %s\n", NehahraDemos[demo_cursor].name));
@@ -325,7 +325,7 @@ void M_Demo_Key (int k, char ascii)
 
        case K_UPARROW:
        case K_LEFTARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                demo_cursor--;
                if (demo_cursor < 0)
                        demo_cursor = NumberOfNehahraDemos-1;
@@ -333,7 +333,7 @@ void M_Demo_Key (int k, char ascii)
 
        case K_DOWNARROW:
        case K_RIGHTARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                demo_cursor++;
                if (demo_cursor >= NumberOfNehahraDemos)
                        demo_cursor = 0;
@@ -417,13 +417,13 @@ void M_Main_Key (int key, char ascii)
                break;
 
        case K_DOWNARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                if (++m_main_cursor >= MAIN_ITEMS)
                        m_main_cursor = 0;
                break;
 
        case K_UPARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                if (--m_main_cursor < 0)
                        m_main_cursor = MAIN_ITEMS - 1;
                break;
@@ -616,13 +616,13 @@ void M_SinglePlayer_Key (int key, char ascii)
                break;
 
        case K_DOWNARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                if (++m_singleplayer_cursor >= SINGLEPLAYER_ITEMS)
                        m_singleplayer_cursor = 0;
                break;
 
        case K_UPARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                if (--m_singleplayer_cursor < 0)
                        m_singleplayer_cursor = SINGLEPLAYER_ITEMS - 1;
                break;
@@ -764,7 +764,7 @@ void M_Load_Key (int k, char ascii)
                break;
 
        case K_ENTER:
-               S_LocalSound ("misc/menu2.wav");
+               S_LocalSound ("misc/menu2.wav", true);
                if (!loadable[load_cursor])
                        return;
                m_state = m_none;
@@ -776,7 +776,7 @@ void M_Load_Key (int k, char ascii)
 
        case K_UPARROW:
        case K_LEFTARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                load_cursor--;
                if (load_cursor < 0)
                        load_cursor = MAX_SAVEGAMES-1;
@@ -784,7 +784,7 @@ void M_Load_Key (int k, char ascii)
 
        case K_DOWNARROW:
        case K_RIGHTARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                load_cursor++;
                if (load_cursor >= MAX_SAVEGAMES)
                        load_cursor = 0;
@@ -809,7 +809,7 @@ void M_Save_Key (int k, char ascii)
 
        case K_UPARROW:
        case K_LEFTARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                load_cursor--;
                if (load_cursor < 0)
                        load_cursor = MAX_SAVEGAMES-1;
@@ -817,7 +817,7 @@ void M_Save_Key (int k, char ascii)
 
        case K_DOWNARROW:
        case K_RIGHTARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                load_cursor++;
                if (load_cursor >= MAX_SAVEGAMES)
                        load_cursor = 0;
@@ -867,13 +867,13 @@ void M_MultiPlayer_Key (int key, char ascii)
                break;
 
        case K_DOWNARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                if (++m_multiplayer_cursor >= MULTIPLAYER_ITEMS)
                        m_multiplayer_cursor = 0;
                break;
 
        case K_UPARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                if (--m_multiplayer_cursor < 0)
                        m_multiplayer_cursor = MULTIPLAYER_ITEMS - 1;
                break;
@@ -906,6 +906,7 @@ int         setup_oldbottom;
 int            setup_top;
 int            setup_bottom;
 int            setup_rate;
+int            setup_oldrate;
 
 #define        NUM_SETUP_CMDS  5
 
@@ -991,7 +992,7 @@ void M_Setup_Draw (void)
                menuplyr_load = false;
                menuplyr_top = -1;
                menuplyr_bottom = -1;
-               if ((f = FS_LoadFile("gfx/menuplyr.lmp", true)))
+               if ((f = FS_LoadFile("gfx/menuplyr.lmp", tempmempool, true)))
                {
                        data = LoadLMPAs8Bit (f, 0, 0);
                        menuplyr_width = image_width;
@@ -1037,14 +1038,14 @@ void M_Setup_Key (int k, char ascii)
                break;
 
        case K_UPARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                setup_cursor--;
                if (setup_cursor < 0)
                        setup_cursor = NUM_SETUP_CMDS-1;
                break;
 
        case K_DOWNARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                setup_cursor++;
                if (setup_cursor >= NUM_SETUP_CMDS)
                        setup_cursor = 0;
@@ -1053,7 +1054,7 @@ void M_Setup_Key (int k, char ascii)
        case K_LEFTARROW:
                if (setup_cursor < 1)
                        return;
-               S_LocalSound ("misc/menu3.wav");
+               S_LocalSound ("misc/menu3.wav", true);
                if (setup_cursor == 1)
                        setup_top = setup_top - 1;
                if (setup_cursor == 2)
@@ -1070,7 +1071,7 @@ void M_Setup_Key (int k, char ascii)
                if (setup_cursor < 1)
                        return;
 forward:
-               S_LocalSound ("misc/menu3.wav");
+               S_LocalSound ("misc/menu3.wav", true);
                if (setup_cursor == 1)
                        setup_top = setup_top + 1;
                if (setup_cursor == 2)
@@ -1096,6 +1097,9 @@ forward:
                        Cbuf_AddText ( va ("name \"%s\"\n", setup_myname) );
                if (setup_top != setup_oldtop || setup_bottom != setup_oldbottom)
                        Cbuf_AddText( va ("color %i %i\n", setup_top, setup_bottom) );
+               if (setup_rate != setup_oldrate)
+                       Cbuf_AddText(va("rate %i\n", setup_rate));
+
                m_entersound = true;
                M_Menu_MultiPlayer_f ();
                break;
@@ -1164,7 +1168,7 @@ void M_DrawCheckbox (int x, int y, int on)
 }
 
 
-#define OPTIONS_ITEMS 34
+#define OPTIONS_ITEMS 37
 
 int options_cursor;
 
@@ -1184,7 +1188,7 @@ extern cvar_t gl_texture_anisotropy;
 void M_Menu_Options_AdjustSliders (int dir)
 {
        int optnum;
-       S_LocalSound ("misc/menu3.wav");
+       S_LocalSound ("misc/menu3.wav", true);
 
        optnum = 6;
        if (options_cursor == optnum++)
@@ -1199,6 +1203,8 @@ void M_Menu_Options_AdjustSliders (int dir)
                Cvar_SetValueQuick (&scr_conbrightness, bound(0, scr_conbrightness.value + dir * 0.2, 1));
        else if (options_cursor == optnum++)
                Cvar_SetValueQuick (&scr_viewsize, bound(30, scr_viewsize.value + dir * 10, 120));
+       else if (options_cursor == optnum++)
+               Cvar_SetValueQuick (&scr_fov, bound(1, scr_fov.integer + dir * 1, 170));
        else if (options_cursor == optnum++)
                Cvar_SetValueQuick (&scr_screenshot_jpeg, !scr_screenshot_jpeg.integer);
        else if (options_cursor == optnum++)
@@ -1212,15 +1218,11 @@ void M_Menu_Options_AdjustSliders (int dir)
        else if (options_cursor == optnum++)
                Cvar_SetValueQuick (&gl_delayfinish, !gl_delayfinish.integer);
        else if (options_cursor == optnum++)
-               Cvar_SetValueQuick (&gl_texture_anisotropy, bound(0, gl_texture_anisotropy.value + dir, 8));
+               Cvar_SetValueQuick (&gl_texture_anisotropy, bound(1, gl_texture_anisotropy.integer + dir, gl_max_anisotropy));
        else if (options_cursor == optnum++)
                Cvar_SetValueQuick (&slowmo, bound(0, slowmo.value + dir * 0.25, 5));
        else if (options_cursor == optnum++)
-#ifdef _WIN32
-               Cvar_SetValueQuick (&bgmvolume, bound(0, bgmvolume.value + dir * 1.0, 1));
-#else
                Cvar_SetValueQuick (&bgmvolume, bound(0, bgmvolume.value + dir * 0.1, 1));
-#endif
        else if (options_cursor == optnum++)
                Cvar_SetValueQuick (&volume, bound(0, volume.value + dir * 0.1, 1));
        else if (options_cursor == optnum++)
@@ -1233,6 +1235,10 @@ void M_Menu_Options_AdjustSliders (int dir)
                Cvar_SetValueQuick (&crosshair_static, !crosshair_static.integer);
        else if (options_cursor == optnum++)
                Cvar_SetValueQuick (&showfps, !showfps.integer);
+       else if (options_cursor == optnum++)
+               Cvar_SetValueQuick (&showtime, !showtime.integer);
+       else if (options_cursor == optnum++)
+               Cvar_SetValueQuick (&showdate, !showdate.integer);
        else if (options_cursor == optnum++)
        {
                if (cl_forwardspeed.value > 200)
@@ -1327,13 +1333,14 @@ void M_Options_Draw (void)
        M_Options_PrintSlider(  "     Console Alpha", true, scr_conalpha.value, 0, 1);
        M_Options_PrintSlider(  "Conback Brightness", true, scr_conbrightness.value, 0, 1);
        M_Options_PrintSlider(  "       Screen size", true, scr_viewsize.value, 30, 120);
+       M_Options_PrintSlider(  "     Field of View", true, scr_fov.integer, 1, 170);
        M_Options_PrintCheckbox("  JPEG screenshots", jpeg_dll != NULL, scr_screenshot_jpeg.integer);
        M_Options_PrintSlider(  "      JPEG quality", jpeg_dll != NULL, scr_screenshot_jpeg_quality.value, 0, 1);
        M_Options_PrintCheckbox("               Sky", true, r_sky.integer);
        M_Options_PrintCheckbox("   Texture Combine", true, gl_combine.integer);
        M_Options_PrintCheckbox("         Dithering", true, gl_dither.integer);
        M_Options_PrintCheckbox("Delay gfx (faster)", true, gl_delayfinish.integer);
-       M_Options_PrintSlider(  "Anisotropic Filter", gl_support_anisotropy, gl_texture_anisotropy.value, 0, 8);
+       M_Options_PrintSlider(  "Anisotropic Filter", gl_support_anisotropy, gl_texture_anisotropy.integer, 1, gl_max_anisotropy);
        M_Options_PrintSlider(  "        Game Speed", sv.active, slowmo.value, 0, 5);
        M_Options_PrintSlider(  "   CD Music Volume", cdaudioinitialized.integer, bgmvolume.value, 0, 1);
        M_Options_PrintSlider(  "      Sound Volume", snd_initialized.integer, volume.value, 0, 1);
@@ -1342,6 +1349,8 @@ void M_Options_Draw (void)
        M_Options_PrintSlider(  "    Crosshair Size", true, crosshair_size.value, 1, 5);
        M_Options_PrintCheckbox("  Static Crosshair", true, crosshair_static.integer);
        M_Options_PrintCheckbox("    Show Framerate", true, showfps.integer);
+       M_Options_PrintCheckbox("         Show Time", true, showtime.integer);
+       M_Options_PrintCheckbox("         Show Date", true, showdate.integer);
        M_Options_PrintCheckbox("        Always Run", true, cl_forwardspeed.value > 200);
        M_Options_PrintCheckbox("        Lookspring", true, lookspring.integer);
        M_Options_PrintCheckbox("        Lookstrafe", true, lookstrafe.integer);
@@ -1391,14 +1400,14 @@ void M_Options_Key (int k, char ascii)
                return;
 
        case K_UPARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                options_cursor--;
                if (options_cursor < 0)
                        options_cursor = OPTIONS_ITEMS-1;
                break;
 
        case K_DOWNARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                options_cursor++;
                if (options_cursor >= OPTIONS_ITEMS)
                        options_cursor = 0;
@@ -1414,7 +1423,7 @@ void M_Options_Key (int k, char ascii)
        }
 }
 
-#define        OPTIONS_EFFECTS_ITEMS   22
+#define        OPTIONS_EFFECTS_ITEMS   33
 
 int options_effects_cursor;
 
@@ -1443,11 +1452,18 @@ extern cvar_t cl_particles_bubbles;
 extern cvar_t cl_particles_blood;
 extern cvar_t cl_particles_blood_alpha;
 extern cvar_t cl_particles_blood_bloodhack;
+extern cvar_t r_lightningbeam_thickness;
+extern cvar_t r_lightningbeam_scroll;
+extern cvar_t r_lightningbeam_repeatdistance;
+extern cvar_t r_lightningbeam_color_red;
+extern cvar_t r_lightningbeam_color_green;
+extern cvar_t r_lightningbeam_color_blue;
+extern cvar_t r_lightningbeam_qmbtexture;
 
 void M_Menu_Options_Effects_AdjustSliders (int dir)
 {
        int optnum;
-       S_LocalSound ("misc/menu3.wav");
+       S_LocalSound ("misc/menu3.wav", true);
 
        optnum = 0;
             if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_modellights, bound(0, r_modellights.value + dir, 8));
@@ -1467,8 +1483,19 @@ void M_Menu_Options_Effects_AdjustSliders (int dir)
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&cl_particles_blood, !cl_particles_blood.integer);
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&cl_particles_blood_alpha, bound(0.2, cl_particles_blood_alpha.value + dir * 0.1, 1));
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&cl_particles_blood_bloodhack, !cl_particles_blood_bloodhack.integer);
+       else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_lightningbeam_thickness, bound(1, r_lightningbeam_thickness.integer + dir, 10));
+       else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_lightningbeam_scroll, bound(0, r_lightningbeam_scroll.integer + dir, 10));
+       else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_lightningbeam_repeatdistance, bound(64, r_lightningbeam_repeatdistance.integer + dir * 64, 1024));
+       else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_lightningbeam_color_red, bound(0, r_lightningbeam_color_red.value + dir * 0.1, 1));
+       else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_lightningbeam_color_green, bound(0, r_lightningbeam_color_green.value + dir * 0.1, 1));
+       else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_lightningbeam_color_blue, bound(0, r_lightningbeam_color_blue.value + dir * 0.1, 1));
+       else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_lightningbeam_qmbtexture, !r_lightningbeam_qmbtexture.integer);
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_lerpmodels, !r_lerpmodels.integer);
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_lerpsprites, !r_lerpsprites.integer);
+       else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&gl_polyblend, bound(0, gl_polyblend.value + dir * 0.1, 1));
+       else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_skyscroll1, bound(-8, r_skyscroll1.value + dir * 0.1, 8));
+       else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_skyscroll2, bound(-8, r_skyscroll2.value + dir * 0.1, 8));
+       else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_waterwarp, bound(0, r_waterwarp.value + dir * 0.1, 1));
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_wateralpha, bound(0, r_wateralpha.value + dir * 0.1, 1));
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_waterscroll, bound(0, r_waterscroll.value + dir * 0.5, 10));
        else if (options_effects_cursor == optnum++) Cvar_SetValueQuick (&r_watershader, bound(0, r_watershader.value + dir * 0.25, 10));
@@ -1507,8 +1534,19 @@ void M_Options_Effects_Draw (void)
        M_Options_PrintCheckbox("                 Blood", true, cl_particles_blood.integer);
        M_Options_PrintSlider(  "         Blood Opacity", true, cl_particles_blood_alpha.value, 0.2, 1);
        M_Options_PrintCheckbox("Force New Blood Effect", true, cl_particles_blood_bloodhack.integer);
+       M_Options_PrintSlider(  "   Lightning Thickness", true, r_lightningbeam_thickness.integer, 1, 10);
+       M_Options_PrintSlider(  "      Lightning Scroll", true, r_lightningbeam_scroll.integer, 0, 10);
+       M_Options_PrintSlider(  " Lightning Repeat Dist", true, r_lightningbeam_repeatdistance.integer, 64, 1024);
+       M_Options_PrintSlider(  "   Lightning Color Red", true, r_lightningbeam_color_red.value, 0, 1);
+       M_Options_PrintSlider(  " Lightning Color Green", true, r_lightningbeam_color_green.value, 0, 1);
+       M_Options_PrintSlider(  "  Lightning Color Blue", true, r_lightningbeam_color_blue.value, 0, 1);
+       M_Options_PrintCheckbox(" Lightning QMB Texture", true, r_lightningbeam_qmbtexture.integer);
        M_Options_PrintCheckbox("   Model Interpolation", true, r_lerpmodels.integer);
        M_Options_PrintCheckbox("  Sprite Interpolation", true, r_lerpsprites.integer);
+       M_Options_PrintSlider(  "            View Blend", true, gl_polyblend.value, 0, 1);
+       M_Options_PrintSlider(  "Upper Sky Scroll Speed", true, r_skyscroll1.value, -8, 8);
+       M_Options_PrintSlider(  "Lower Sky Scroll Speed", true, r_skyscroll2.value, -8, 8);
+       M_Options_PrintSlider(  "  Underwater View Warp", true, r_waterwarp.value, 0, 1);
        M_Options_PrintSlider(  " Water Alpha (opacity)", true, r_wateralpha.value, 0, 1);
        M_Options_PrintSlider(  "        Water Movement", true, r_waterscroll.value, 0, 10);
        M_Options_PrintSlider(  " GeForce3 Water Shader", true, r_watershader.value, 0, 10);
@@ -1528,14 +1566,14 @@ void M_Options_Effects_Key (int k, char ascii)
                break;
 
        case K_UPARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                options_effects_cursor--;
                if (options_effects_cursor < 0)
                        options_effects_cursor = OPTIONS_EFFECTS_ITEMS-1;
                break;
 
        case K_DOWNARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                options_effects_cursor++;
                if (options_effects_cursor >= OPTIONS_EFFECTS_ITEMS)
                        options_effects_cursor = 0;
@@ -1574,7 +1612,7 @@ void M_Menu_Options_ColorControl_AdjustSliders (int dir)
 {
        int optnum;
        float f;
-       S_LocalSound ("misc/menu3.wav");
+       S_LocalSound ("misc/menu3.wav", true);
 
        optnum = 1;
        if (options_colorcontrol_cursor == optnum++)
@@ -1778,14 +1816,14 @@ void M_Options_ColorControl_Key (int k, char ascii)
                return;
 
        case K_UPARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                options_colorcontrol_cursor--;
                if (options_colorcontrol_cursor < 0)
                        options_colorcontrol_cursor = OPTIONS_COLORCONTROL_ITEMS-1;
                break;
 
        case K_DOWNARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                options_colorcontrol_cursor++;
                if (options_colorcontrol_cursor >= OPTIONS_COLORCONTROL_ITEMS)
                        options_colorcontrol_cursor = 0;
@@ -1872,7 +1910,18 @@ char *transfusionbindnames[][2] =
 {"impulse 26",         "next armor type"},
 {"impulse 27",         "identify player"},
 {"impulse 55",         "voting menu"},
-{"impulse 56",         "observer mode"}
+{"impulse 56",         "observer mode"},
+{"",                           "Taunts"},            // Taunts
+{"impulse 70",         "taunt 0"},
+{"impulse 71",         "taunt 1"},
+{"impulse 72",         "taunt 2"},
+{"impulse 73",         "taunt 3"},
+{"impulse 74",         "taunt 4"},
+{"impulse 75",         "taunt 5"},
+{"impulse 76",         "taunt 6"},
+{"impulse 77",         "taunt 7"},
+{"impulse 78",         "taunt 8"},
+{"impulse 79",         "taunt 9"}
 };
 
 char *goodvsbad2bindnames[][2] =
@@ -2113,7 +2162,7 @@ void M_Keys_Key (int k, char ascii)
 
        if (bind_grab)
        {       // defining a key
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                if (k == K_ESCAPE)
                {
                        bind_grab = false;
@@ -2136,7 +2185,7 @@ void M_Keys_Key (int k, char ascii)
 
        case K_LEFTARROW:
        case K_UPARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                do
                {
                        keys_cursor--;
@@ -2148,7 +2197,7 @@ void M_Keys_Key (int k, char ascii)
 
        case K_DOWNARROW:
        case K_RIGHTARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                do
                {
                        keys_cursor++;
@@ -2160,7 +2209,7 @@ void M_Keys_Key (int k, char ascii)
 
        case K_ENTER:           // go into bind mode
                M_FindKeysForCommand (bindnames[keys_cursor][0], keys);
-               S_LocalSound ("misc/menu2.wav");
+               S_LocalSound ("misc/menu2.wav", true);
                if (keys[NUMKEYS - 1] != -1)
                        M_UnbindCommand (bindnames[keys_cursor][0]);
                bind_grab = true;
@@ -2168,7 +2217,7 @@ void M_Keys_Key (int k, char ascii)
 
        case K_BACKSPACE:               // delete bindings
        case K_DEL:                             // delete bindings
-               S_LocalSound ("misc/menu2.wav");
+               S_LocalSound ("misc/menu2.wav", true);
                M_UnbindCommand (bindnames[keys_cursor][0]);
                break;
        }
@@ -2254,7 +2303,7 @@ void M_Video_Draw (void)
 
 void M_Menu_Video_AdjustSliders (int dir)
 {
-       S_LocalSound ("misc/menu3.wav");
+       S_LocalSound ("misc/menu3.wav", true);
 
        switch (video_cursor)
        {
@@ -2296,7 +2345,7 @@ void M_Video_Key (int key, char ascii)
                        Cvar_SetValueQuick(&vid_height, current_vid_height);
                        Cvar_SetValueQuick(&vid_bitsperpixel, current_vid_bitsperpixel);
 
-                       S_LocalSound ("misc/menu1.wav");
+                       S_LocalSound ("misc/menu1.wav", true);
                        M_Menu_Options_f ();
                        break;
 
@@ -2314,14 +2363,14 @@ void M_Video_Key (int key, char ascii)
                        break;
 
                case K_UPARROW:
-                       S_LocalSound ("misc/menu1.wav");
+                       S_LocalSound ("misc/menu1.wav", true);
                        video_cursor--;
                        if (video_cursor < 0)
                                video_cursor = VIDEO_ITEMS-1;
                        break;
 
                case K_DOWNARROW:
-                       S_LocalSound ("misc/menu1.wav");
+                       S_LocalSound ("misc/menu1.wav", true);
                        video_cursor++;
                        if (video_cursor >= VIDEO_ITEMS)
                                video_cursor = 0;
@@ -2619,14 +2668,14 @@ void M_LanConfig_Key (int key, char ascii)
                break;
 
        case K_UPARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                lanConfig_cursor--;
                if (lanConfig_cursor < 0)
                        lanConfig_cursor = NUM_LANCONFIG_CMDS-1;
                break;
 
        case K_DOWNARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                lanConfig_cursor++;
                if (lanConfig_cursor >= NUM_LANCONFIG_CMDS)
                        lanConfig_cursor = 0;
@@ -3351,14 +3400,14 @@ void M_GameOptions_Key (int key, char ascii)
                break;
 
        case K_UPARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                gameoptions_cursor--;
                if (gameoptions_cursor < 0)
                        gameoptions_cursor = NUM_GAMEOPTIONS-1;
                break;
 
        case K_DOWNARROW:
-               S_LocalSound ("misc/menu1.wav");
+               S_LocalSound ("misc/menu1.wav", true);
                gameoptions_cursor++;
                if (gameoptions_cursor >= NUM_GAMEOPTIONS)
                        gameoptions_cursor = 0;
@@ -3367,19 +3416,19 @@ void M_GameOptions_Key (int key, char ascii)
        case K_LEFTARROW:
                if (gameoptions_cursor == 0)
                        break;
-               S_LocalSound ("misc/menu3.wav");
+               S_LocalSound ("misc/menu3.wav", true);
                M_NetStart_Change (-1);
                break;
 
        case K_RIGHTARROW:
                if (gameoptions_cursor == 0)
                        break;
-               S_LocalSound ("misc/menu3.wav");
+               S_LocalSound ("misc/menu3.wav", true);
                M_NetStart_Change (1);
                break;
 
        case K_ENTER:
-               S_LocalSound ("misc/menu2.wav");
+               S_LocalSound ("misc/menu2.wav", true);
                if (gameoptions_cursor == 0)
                {
                        if (sv.active)
@@ -3494,7 +3543,7 @@ void M_ServerList_Key(int k, char ascii)
 
        case K_UPARROW:
        case K_LEFTARROW:
-               S_LocalSound("misc/menu1.wav");
+               S_LocalSound("misc/menu1.wav", true);
                slist_cursor--;
                if (slist_cursor < 0)
                        slist_cursor = hostCacheCount - 1;
@@ -3502,14 +3551,14 @@ void M_ServerList_Key(int k, char ascii)
 
        case K_DOWNARROW:
        case K_RIGHTARROW:
-               S_LocalSound("misc/menu1.wav");
+               S_LocalSound("misc/menu1.wav", true);
                slist_cursor++;
                if (slist_cursor >= hostCacheCount)
                        slist_cursor = 0;
                break;
 
        case K_ENTER:
-               S_LocalSound("misc/menu2.wav");
+               S_LocalSound("misc/menu2.wav", true);
                Cbuf_AddText(va("connect \"%s\"\n", hostcache[slist_cursor].cname));
                break;
 
@@ -3691,7 +3740,7 @@ void M_Draw (void)
 
        if (m_entersound)
        {
-               S_LocalSound ("misc/menu2.wav");
+               S_LocalSound ("misc/menu2.wav", true);
                m_entersound = false;
        }
 
@@ -3793,6 +3842,10 @@ mfunction_t *PRVM_ED_FindFunction(const char *);
 #define M_F_INIT               "m_init"
 #define M_F_KEYDOWN            "m_keydown"
 #define M_F_DRAW               "m_draw"
+// ng_menu function names
+#define        M_F_DISPLAY             "m_display"
+#define        M_F_HIDE                "m_hide"
+// normal menu names (rest)
 #define M_F_TOGGLE             "m_toggle"
 #define M_F_SHUTDOWN   "m_shutdown"
 
@@ -3800,13 +3853,22 @@ static char *m_required_func[] = {
 M_F_INIT,
 M_F_KEYDOWN,
 M_F_DRAW,
+#ifdef NG_MENU
+M_F_DISPLAY,
+M_F_HIDE,
+#else
 M_F_TOGGLE,
+#endif
 M_F_SHUTDOWN,
 };
 
+#ifdef NG_MENU
+qboolean m_displayed;
+#endif
+
 static int m_numrequiredfunc = sizeof(m_required_func) / sizeof(char*);
 
-static func_t m_draw,m_keydown;
+static func_t m_draw, m_keydown;
 
 void MR_SetRouting (qboolean forceold);
 
@@ -3862,7 +3924,15 @@ void MP_ToggleMenu_f (void)
        // set time
        *prog->time = realtime;
 
+#ifdef NG_MENU
+       m_displayed = !m_displayed;
+       if( m_displayed )
+               PRVM_ExecuteProgram((func_t) (PRVM_ED_FindFunction(M_F_DISPLAY) - prog->functions),"");
+       else
+               PRVM_ExecuteProgram((func_t) (PRVM_ED_FindFunction(M_F_HIDE) - prog->functions),"");
+#else
        PRVM_ExecuteProgram((func_t) (PRVM_ED_FindFunction(M_F_TOGGLE) - prog->functions),"");
+#endif
 
        PRVM_End;
 }
@@ -3913,6 +3983,10 @@ void MP_Init (void)
        m_draw = (func_t) (PRVM_ED_FindFunction(M_F_DRAW) - prog->functions);
        m_keydown = (func_t) (PRVM_ED_FindFunction(M_F_KEYDOWN) - prog->functions);
 
+#ifdef NG_MENU
+       m_displayed = false;
+#endif
+
        // set time
        *prog->time = realtime;
 
@@ -3999,8 +4073,8 @@ void MR_Init()
        // the normal quake menu only the first time
        else if(COM_CheckParm("-useqmenu"))
                MR_SetRouting (TRUE);
-       else
-               MR_SetRouting (FALSE);
+       
+       MR_SetRouting (FALSE);
 }