diff --git a/Source/diablo.cpp b/Source/diablo.cpp index ab5dff3ba..312f3f7e0 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -789,7 +789,7 @@ void RunGameLoop(interface_mode uMsg) EventHandler previousHandler = SetEventHandler(GameEventHandler); run_delta_info(); gbRunGame = true; - gbProcessPlayers = true; + gbProcessPlayers = IsDiabloAlive(true); gbRunGameResult = true; RedrawEverything(); @@ -2980,4 +2980,15 @@ void diablo_color_cyc_logic() } } +bool IsDiabloAlive(bool playSFX) +{ + if (Quests[Q_DIABLO]._qactive == QUEST_DONE && !gbIsMultiplayer) { + if (playSFX) + PlaySFX(USFX_DIABLOD); + return false; + } + + return true; +} + } // namespace devilution diff --git a/Source/diablo.h b/Source/diablo.h index c1d1d130d..f5b617602 100644 --- a/Source/diablo.h +++ b/Source/diablo.h @@ -94,6 +94,7 @@ void diablo_focus_unpause(); bool PressEscKey(); void DisableInputEventHandler(const SDL_Event &event, uint16_t modState); void LoadGameLevel(bool firstflag, lvl_entry lvldir); +bool IsDiabloAlive(bool playSFX); /** * @param bStartup Process additional ticks before returning diff --git a/Source/loadsave.cpp b/Source/loadsave.cpp index 1dd22829a..8fb824dc5 100644 --- a/Source/loadsave.cpp +++ b/Source/loadsave.cpp @@ -2212,7 +2212,7 @@ void LoadGame(bool firstflag) missiles_process_charge(); RedoMissileFlags(); NewCursor(CURSOR_HAND); - gbProcessPlayers = true; + gbProcessPlayers = IsDiabloAlive(!firstflag); if (gbIsHellfireSaveGame != gbIsHellfire) { SaveGame();