aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2013-10-31 07:25:25 +0200
committerFilippos Karapetis2013-10-31 07:25:25 +0200
commitf9bbc2ca37f40692d555d3b355209a7f2538afda (patch)
treea45fbc76c1148a175a92b7ff245af44ca1decbff
parentbe8bc5f030ec98e470cdda8aa1e0564e16f28ff3 (diff)
downloadscummvm-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
-rw-r--r--engines/sci/engine/vm.cpp17
-rw-r--r--engines/sci/sci.cpp22
-rw-r--r--engines/sci/sci.h1
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;