diff --git a/engines/scumm/gfx_gui.cpp b/engines/scumm/gfx_gui.cpp index 1bbf967fac7..9bd759284db 100644 --- a/engines/scumm/gfx_gui.cpp +++ b/engines/scumm/gfx_gui.cpp @@ -1787,7 +1787,11 @@ void ScummEngine::showMainMenu() { if (VAR_PRE_SAVELOAD_SCRIPT != 0xFF) runScript(VAR(VAR_PRE_SAVELOAD_SCRIPT), 0, 0, nullptr); + bool oldSaveSound = _saveSound; + bool oldSaveTemporaryState = _saveTemporaryState; + _saveSound = 1; + _saveTemporaryState = false; _shakeTempSavedState = _shakeEnabled; setShake(0); @@ -1961,6 +1965,9 @@ void ScummEngine::showMainMenu() { } } + _saveSound = oldSaveSound; + _saveTemporaryState = oldSaveTemporaryState; + _mainMenuIsActive = false; if (_game.version > 6) diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp index 02fd0e8d77a..8cc7b505cb4 100644 --- a/engines/scumm/saveload.cpp +++ b/engines/scumm/saveload.cpp @@ -687,18 +687,18 @@ bool ScummEngine::loadState(int slot, bool compat, Common::String &filename) { // If we don't have iMUSE at all we may as well stop the sounds. The previous // default behavior here was to stopAllSounds on all state restores. - if (!_imuse || _saveSound || !_saveTemporaryState) + if (!_imuse || _saveSound || !_saveTemporaryState) { _sound->stopAllSounds(); #ifdef ENABLE_SCUMM_7_8 - if (_imuseDigital) { - _imuseDigital->stopAllSounds(); - } + if (_imuseDigital) { + _imuseDigital->stopAllSounds(); + } #endif - _sound->stopCD(); - - _sound->pauseSounds(true); + _sound->stopCD(); + _sound->pauseSounds(true); + } closeRoom(); @@ -866,9 +866,10 @@ bool ScummEngine::loadState(int slot, bool compat, Common::String &filename) { debug(1, "State loaded from '%s'", filename.c_str()); - _sound->pauseSounds(false); - - _sound->restoreAfterLoad(); + if (!_imuse || _saveSound || !_saveTemporaryState) { + _sound->pauseSounds(false); + _sound->restoreAfterLoad(); + } return true; }