Fixed level data not being freed by conf state. This allowed OpenGL state to leak...
[neverball] / ball / st_pause.c
index 4fd038f..ea4c53d 100644 (file)
@@ -21,7 +21,7 @@
 #include "hud.h"
 
 #include "st_play.h"
-#include "st_start.h"
+#include "st_over.h"
 #include "st_shared.h"
 #include "st_pause.h"
 
@@ -60,35 +60,37 @@ static int pause_action(int i)
     switch(i)
     {
     case PAUSE_CONTINUE:
-        audio_music_fade_in(0.5f);
+        SDL_PauseAudio(0);
         config_set_grab(0);
         return goto_state(st_continue);
 
     case PAUSE_RESTART:
-        level_stop(GAME_NONE, 0, curr_clock(), curr_coins());
+        level_same();
         clear_pause();
-        level_play_go();
-        audio_music_fade_in (2.0f);
+        SDL_PauseAudio(0);
         config_set_grab(1);
-        return goto_state(&st_play_set);
+        return goto_state(&st_play_ready);
 
     case PAUSE_EXIT:
-        level_stop(GAME_NONE, 0, curr_clock(), curr_coins());
+        level_stat(GAME_NONE, curr_clock(), curr_coins());
+        level_stop();
         clear_pause();
-        return curr_lg()->mode == MODE_SINGLE ? 0 : goto_state(&st_start);
+        SDL_PauseAudio(0);
+        audio_music_stop();
+        return goto_state(&st_over);
     }
 
     return 1;
 }
 
+/*---------------------------------------------------------------------------*/
 
 static int pause_enter(void)
 {
     int id, jd, title_id;
 
     config_clr_grab();
-
-    audio_music_fade_out(0.2f);
+    SDL_PauseAudio(1);
 
     /* Build the pause GUI. */
 
@@ -122,15 +124,15 @@ static int pause_enter(void)
     return id;
 }
 
-void pause_paint(int id, float st)
+static void pause_paint(int id, float st)
 {
     shared_paint(id, st);
     hud_paint();
 }
 
-void pause_timer(int id, float dt)
+static void pause_timer(int id, float dt)
 {
-    shared_timer (id, dt);
+    gui_timer(id, dt);
     hud_timer (dt);
 }
 
@@ -157,7 +159,7 @@ static int pause_buttn(int b, int d)
 
         if (config_tst_d(CONFIG_JOYSTICK_BUTTON_EXIT, b))
         {
-            if (SDL_GetModState() & (KMOD_SHIFT | KMOD_CTRL | KMOD_ALT | KMOD_META))
+            if (SDL_GetModState() & KMOD_SHIFT)
                 return pause_action(PAUSE_EXIT);
             else
                 return pause_action(PAUSE_CONTINUE);