diff options
author | Filippos Karapetis | 2013-10-31 07:25:25 +0200 |
---|---|---|
committer | Filippos Karapetis | 2013-10-31 07:25:25 +0200 |
commit | f9bbc2ca37f40692d555d3b355209a7f2538afda (patch) | |
tree | a45fbc76c1148a175a92b7ff245af44ca1decbff /engines/sci | |
parent | be8bc5f030ec98e470cdda8aa1e0564e16f28ff3 (diff) | |
download | scummvm-rg350-f9bbc2ca37f40692d555d3b355209a7f2538afda.tar.gz scummvm-rg350-f9bbc2ca37f40692d555d3b355209a7f2538afda.tar.bz2 scummvm-rg350-f9bbc2ca37f40692d555d3b355209a7f2538afda.zip |
SCI: Update ScummVM's game audio options for SCI1.1 CD games
This ensures that ScummVM's game audio options for speech and subtitles
get updated when they are changed in the game GUI
Diffstat (limited to 'engines/sci')
-rw-r--r-- | engines/sci/engine/vm.cpp | 17 | ||||
-rw-r--r-- | engines/sci/sci.cpp | 22 | ||||
-rw-r--r-- | engines/sci/sci.h | 1 |
3 files changed, 34 insertions, 6 deletions
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp index ef8f165084..d7c2fdc0eb 100644 --- a/engines/sci/engine/vm.cpp +++ b/engines/sci/engine/vm.cpp @@ -200,11 +200,18 @@ static void write_var(EngineState *s, int type, int index, reg_t value) { s->variables[type][index] = value; - // If the game is trying to change its speech/subtitle settings, apply the ScummVM audio - // options first, if they haven't been applied yet - if (type == VAR_GLOBAL && index == 90 && !g_sci->getEngineState()->_syncedAudioOptions) { - g_sci->syncIngameAudioOptions(); - g_sci->getEngineState()->_syncedAudioOptions = true; + if (type == VAR_GLOBAL && index == 90) { + // The game is trying to change its speech/subtitle settings + if (!g_sci->getEngineState()->_syncedAudioOptions || s->variables[VAR_GLOBAL][4] == TRUE_REG) { + // ScummVM audio options haven't been applied yet, so apply them. + // We also force the ScummVM audio options when loading a game from + // the launcher. + g_sci->syncIngameAudioOptions(); + g_sci->getEngineState()->_syncedAudioOptions = true; + } else { + // Update ScummVM's audio options + g_sci->updateScummVMAudioOptions(); + } } } } diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp index c1aadc3622..f484b12865 100644 --- a/engines/sci/sci.cpp +++ b/engines/sci/sci.cpp @@ -882,7 +882,7 @@ void SciEngine::syncSoundSettings() { } void SciEngine::syncIngameAudioOptions() { - // Now, sync the in-game speech/subtitles settings for SCI1.1 CD games + // Sync the in-game speech/subtitles settings for SCI1.1 CD games if (isCD() && getSciVersion() == SCI_VERSION_1_1) { bool subtitlesOn = ConfMan.getBool("subtitles"); bool speechOn = !ConfMan.getBool("speech_mute"); @@ -910,6 +910,26 @@ void SciEngine::syncIngameAudioOptions() { } } +void SciEngine::updateScummVMAudioOptions() { + // Update ScummVM's speech/subtitles settings for SCI1.1 CD games, + // depending on the in-game settings + if (isCD() && getSciVersion() == SCI_VERSION_1_1) { + if (_gamestate->variables[VAR_GLOBAL][90] == make_reg(0, 1)) { + // subtitles + ConfMan.setBool("subtitles", true); + ConfMan.setBool("speech_mute", true); + } else if (_gamestate->variables[VAR_GLOBAL][90] == make_reg(0, 2)) { + // speech + ConfMan.setBool("subtitles", false); + ConfMan.setBool("speech_mute", false); + } else if (_gamestate->variables[VAR_GLOBAL][90] == make_reg(0, 3)) { + // speech + subtitles + ConfMan.setBool("subtitles", true); + ConfMan.setBool("speech_mute", false); + } + } +} + void SciEngine::loadMacExecutable() { if (getPlatform() != Common::kPlatformMacintosh || getSciVersion() < SCI_VERSION_1_EARLY || getSciVersion() > SCI_VERSION_1_1) return; diff --git a/engines/sci/sci.h b/engines/sci/sci.h index 0a75e115fd..5f11d119bc 100644 --- a/engines/sci/sci.h +++ b/engines/sci/sci.h @@ -251,6 +251,7 @@ public: * - King's Quest 6 CD */ void syncIngameAudioOptions(); + void updateScummVMAudioOptions(); const SciGameId &getGameId() const { return _gameId; } const char *getGameIdStr() const; |