Navigation Menu

Skip to content

Commit

Permalink
SCI: Update ScummVM's game audio options for SCI1.1 CD games
Browse files Browse the repository at this point in the history
This ensures that ScummVM's game audio options for speech and subtitles
get updated when they are changed in the game GUI
  • Loading branch information
bluegr committed Oct 31, 2013
1 parent be8bc5f commit f9bbc2c
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 6 deletions.
17 changes: 12 additions & 5 deletions engines/sci/engine/vm.cpp
Expand Up @@ -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();
}
}
}
}
Expand Down
22 changes: 21 additions & 1 deletion engines/sci/sci.cpp
Expand Up @@ -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");
Expand Down Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions engines/sci/sci.h
Expand Up @@ -251,6 +251,7 @@ class SciEngine : public Engine {
* - King's Quest 6 CD
*/
void syncIngameAudioOptions();
void updateScummVMAudioOptions();

const SciGameId &getGameId() const { return _gameId; }
const char *getGameIdStr() const;
Expand Down

0 comments on commit f9bbc2c

Please sign in to comment.