diff options
Diffstat (limited to 'engines/agos/agos.cpp')
-rw-r--r-- | engines/agos/agos.cpp | 55 |
1 files changed, 33 insertions, 22 deletions
diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp index 926b3a8972..670c701198 100644 --- a/engines/agos/agos.cpp +++ b/engines/agos/agos.cpp @@ -202,19 +202,19 @@ AGOSEngine::AGOSEngine(OSystem *syst) _scanFlag = false; _scriptVar2 = 0; - _runScriptReturn1 = 0; - _skipVgaWait = 0; - _noParentNotify = 0; - _beardLoaded = 0; - _litBoxFlag = 0; - _mortalFlag = 0; + _runScriptReturn1 = false; + _skipVgaWait = false; + _noParentNotify = false; + _beardLoaded = false; + _litBoxFlag = false; + _mortalFlag = false; _displayFlag = 0; - _syncFlag2 = 0; - _inCallBack = 0; - _cepeFlag = 0; - _fastMode = 0; + _syncFlag2 = false; + _inCallBack = false; + _cepeFlag = false; + _fastMode = false; - _backFlag = 0; + _backFlag = false; _debugMode = 0; _dumpScripts = false; @@ -557,10 +557,10 @@ Common::Error AGOSEngine::init() { (getPlatform() == Common::kPlatformPC)) { // Setup midi driver - MidiDriverType midiDriver = MidiDriver::detectMusicDriver(MDT_ADLIB | MDT_MIDI); - _nativeMT32 = ((midiDriver == MD_MT32) || ConfMan.getBool("native_mt32")); + MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_ADLIB | MDT_MIDI | (getGameType() == GType_SIMON1 ? MDT_PREFER_MT32 : MDT_PREFER_GM)); + _nativeMT32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32")); - _driver = MidiDriver::createMidi(midiDriver); + _driver = MidiDriver::createMidi(dev); if (_nativeMT32) { _driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); @@ -631,9 +631,11 @@ Common::Error AGOSEngine::init() { if (ConfMan.hasKey("sfx_mute") && ConfMan.getBool("sfx_mute") == 1) { if (getGameId() == GID_SIMON1DOS) - _midi._enable_sfx ^= 1; - else - _sound->effectsPause(_effectsPaused ^= 1); + _midi._enable_sfx = !_midi._enable_sfx; + else { + _effectsPaused = !_effectsPaused; + _sound->effectsPause(_effectsPaused); + } } _copyProtection = ConfMan.getBool("copy_protection"); @@ -648,7 +650,7 @@ Common::Error AGOSEngine::init() { if (getGameType() == GType_SIMON1) { // English and German versions don't have full subtitles - if (_language == Common::EN_ANY || _language == Common::DE_DEU) + if (_language == Common::EN_ANY || _language == Common::DE_DEU) _subtitles = false; // Other versions require speech to be enabled else @@ -1037,12 +1039,21 @@ uint32 AGOSEngine::getTime() const { } void AGOSEngine::syncSoundSettings() { - _mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, ConfMan.getInt("sfx_volume")); - _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, ConfMan.getInt("music_volume")); - _mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, ConfMan.getInt("speech_volume")); + // Sync the engine with the config manager + int soundVolumeMusic = ConfMan.getInt("music_volume"); + int soundVolumeSFX = ConfMan.getInt("sfx_volume"); + int soundVolumeSpeech = ConfMan.getInt("speech_volume"); + + bool mute = false; + if (ConfMan.hasKey("mute")) + mute = ConfMan.getBool("mute"); + + _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, (mute ? 0 : (_musicPaused ? 0 : soundVolumeMusic))); + _mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, (mute ? 0 : soundVolumeSFX)); + _mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, (mute ? 0 : soundVolumeSpeech)); if (_midiEnabled) - _midi.setVolume(ConfMan.getInt("music_volume"), ConfMan.getInt("sfx_volume")); + _midi.setVolume((mute ? 0 : soundVolumeMusic), (mute ? 0 : soundVolumeSFX)); } } // End of namespace AGOS |