diff --git a/engines/sci/sound/music.h b/engines/sci/sound/music.h index f30d7d5cd3b..3fd988d69da 100644 --- a/engines/sci/sound/music.h +++ b/engines/sci/sound/music.h @@ -193,6 +193,7 @@ private: public: void clearPlayList(); void pauseAll(bool pause); + bool isAllPaused() const { return (_globalPause > 0); } void resetGlobalPauseCounter(); void stopAll(); void stopAllSamples(); diff --git a/engines/sci/sound/soundcmd.cpp b/engines/sci/sound/soundcmd.cpp index 12cc153d9c9..1a8d9b35119 100644 --- a/engines/sci/sound/soundcmd.cpp +++ b/engines/sci/sound/soundcmd.cpp @@ -369,7 +369,11 @@ reg_t SoundCommandParser::kDoSoundPause(EngineState *s, int argc, reg_t *argv) { (_soundVersion < SCI_VERSION_2 && !obj.getSegment()) || (_soundVersion >= SCI_VERSION_2 && obj.isNull()) ) { - _music->pauseAll(shouldPause); + // Don't unpause here, if the sound is already unpaused. The negative global pause counter + // that we introduced to accomodate our special needs during GMM save/load and autosave + // operations is not meant to be used here and will cause glitches. + if (_music->isAllPaused() || shouldPause) + _music->pauseAll(shouldPause); #ifdef ENABLE_SCI32 if (_soundVersion >= SCI_VERSION_2_1_EARLY) { if (shouldPause) {