diff --git a/Source/diablo.cpp b/Source/diablo.cpp index b0b3b71da..c19ef478e 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -1749,29 +1749,37 @@ bool MinimizePaused = false; void diablo_focus_pause() { - if (gbIsMultiplayer) { + if (gbIsMultiplayer || MinimizePaused) { return; } - if (!MinimizePaused) { - GameWasAlreadyPaused = PauseMode != 0; + GameWasAlreadyPaused = PauseMode != 0; - if (!GameWasAlreadyPaused) { - PauseMode = 2; - sound_stop(); - track_repeat_walk(false); - } + if (!GameWasAlreadyPaused) { + PauseMode = 2; + sound_stop(); + track_repeat_walk(false); + } - music_mute(); - } else { - if (!GameWasAlreadyPaused) { - PauseMode = 0; - } + music_mute(); + + MinimizePaused = true; +} - music_unmute(); +void diablo_focus_unpause() +{ + if (gbIsMultiplayer || !MinimizePaused) + { + return; } - MinimizePaused = !MinimizePaused; + if (!GameWasAlreadyPaused) { + PauseMode = 0; + } + + music_unmute(); + + MinimizePaused = false; } bool PressEscKey() @@ -2101,6 +2109,10 @@ void LoadGameLevel(bool firstflag, lvl_entry lvldir) else music_start(leveltype); + if (MinimizePaused) { + music_mute(); + } + while (!IncProgress()) ; diff --git a/Source/diablo.h b/Source/diablo.h index 6b590003b..538051d80 100644 --- a/Source/diablo.h +++ b/Source/diablo.h @@ -76,6 +76,7 @@ int DiabloMain(int argc, char **argv); bool TryIconCurs(); void diablo_pause_game(); void diablo_focus_pause(); +void diablo_focus_unpause(); bool PressEscKey(); void DisableInputWndProc(uint32_t uMsg, int32_t wParam, int32_t lParam); void LoadGameLevel(bool firstflag, lvl_entry lvldir); diff --git a/Source/miniwin/misc_msg.cpp b/Source/miniwin/misc_msg.cpp index 08b0820f1..3d5016ea3 100644 --- a/Source/miniwin/misc_msg.cpp +++ b/Source/miniwin/misc_msg.cpp @@ -567,10 +567,10 @@ bool FetchMessage(tagMSG *lpMsg) break; case SDL_WINDOWEVENT_FOCUS_LOST: + diablo_focus_pause(); + break; case SDL_WINDOWEVENT_FOCUS_GAINED: - if (gbRunGameResult) { - diablo_focus_pause(); - } + diablo_focus_unpause(); break; default: