]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - menu.c
extra required parameter for dp_water: alpha modifier
[xonotic/darkplaces.git] / menu.c
diff --git a/menu.c b/menu.c
index fb55bd75b00e7404812b70eb97a5d9d603a31593..c0e71be0eba11627dfb24a1438c2a572e6a56cb8 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -277,7 +277,7 @@ void M_ToggleMenu_f (void)
 {
        m_entersound = true;
 
-       if (key_dest != key_menu || m_state != m_main)
+       if ((key_dest != key_menu && key_dest != key_menu_grabbed) || m_state != m_main)
        {
                if(Cmd_Argc() == 2 && !strcmp(Cmd_Argv(1), "1"))
                        return;
@@ -3169,7 +3169,7 @@ void M_Menu_Quit_f (void)
        int n;
        if (m_state == m_quit)
                return;
-       wasInMenus = (key_dest == key_menu);
+       wasInMenus = (key_dest == key_menu || key_dest == key_menu_grabbed);
        key_dest = key_menu;
        m_quit_prevstate = m_state;
        m_state = m_quit;
@@ -4744,7 +4744,7 @@ void M_Init (void)
 
 void M_Draw (void)
 {
-       if (key_dest != key_menu)
+       if (key_dest != key_menu && key_dest != key_menu_grabbed)
                m_state = m_none;
 
        if (m_state == m_none)
@@ -5049,6 +5049,9 @@ void MP_Error(const char *format, ...)
        // init the normal menu now -> this will also correct the menu router pointers
        MR_SetRouting (TRUE);
 
+       // reset the active scene, too (to be on the safe side ;))
+   R_SelectScene( RST_CLIENT );
+
        Host_AbortCurrentFrame();
 }
 
@@ -5070,12 +5073,32 @@ void MP_KeyEvent (int key, char ascii, qboolean downevent)
 
 void MP_Draw (void)
 {
+       // declarations that are needed right now
+
+       float oldquality;
+
+       R_SelectScene( RST_MENU );
+
+       // reset the temp entities each frame
+       r_refdef.scene.numtempentities = 0;
+
+       // menu scenes do not use reduced rendering quality
+       oldquality = r_refdef.view.quality;
+       r_refdef.view.quality = 1;
+
        PRVM_Begin;
        PRVM_SetProg(PRVM_MENUPROG);
 
+       // FIXME: this really shouldnt error out lest we have a very broken refdef state...?
+       // or does it kill the server too?
        PRVM_ExecuteProgram(prog->funcoffsets.m_draw,"m_draw() required");
 
        PRVM_End;
+
+       // TODO: imo this should be moved into scene, too [1/27/2008 Andreas]
+       r_refdef.view.quality = oldquality;
+
+       R_SelectScene( RST_CLIENT );
 }
 
 void MP_ToggleMenu_f (void)
@@ -5104,16 +5127,6 @@ void MP_Shutdown (void)
        PRVM_End;
 }
 
-void MP_Fallback (void)
-{
-       MP_Shutdown();
-
-       key_dest = key_game;
-
-       // init the normal menu now -> this will also correct the menu router pointers
-       MR_SetRouting (TRUE);
-}
-
 void MP_Init (void)
 {
        PRVM_Begin;