diff --git a/libretro/libretro.c b/libretro/libretro.c index 4d4479e..d9402f0 100644 --- a/libretro/libretro.c +++ b/libretro/libretro.c @@ -163,10 +163,7 @@ void retro_reset(void) M_EndGame(0); } -void retro_shutdown_prboom(void) -{ - environ_cb(RETRO_ENVIRONMENT_SHUTDOWN, NULL); -} +extern boolean quit_pressed; static void update_variables(bool startup) { @@ -206,6 +203,11 @@ void retro_run(void) bool updated = false; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) update_variables(false); + if (quit_pressed) + { + environ_cb(RETRO_ENVIRONMENT_SHUTDOWN, NULL); + I_SafeExit(1); + } D_DoomLoop(); I_UpdateSound(); diff --git a/src/d_main.c b/src/d_main.c index 7705fa9..f9b80c1 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -299,8 +299,6 @@ void D_Display (void) int has_exited; -extern void retro_shutdown_prboom(void); - /* I_SafeExit * This function is called instead of exit() by functions that might be called * during the exit process (i.e. after exit() has already been called) @@ -312,7 +310,6 @@ void I_SafeExit(int rc) if (!has_exited) /* If it hasn't exited yet, exit now -- killough */ { has_exited=rc ? 2 : 1; - retro_shutdown_prboom(); } } diff --git a/src/m_menu.c b/src/m_menu.c index 1282bca..893d4fd 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1015,6 +1015,8 @@ int quitsounds2[8] = sfx_sgtatk }; +boolean quit_pressed = false; + static void M_QuitResponse(int ch) { if (ch != 'y') @@ -1040,7 +1042,8 @@ static void M_QuitResponse(int ch) } } #endif - I_SafeExit(1); + + quit_pressed = true; } void M_QuitDOOM(int choice)