diff options
Diffstat (limited to 'engines/touche')
-rw-r--r-- | engines/touche/menu.cpp | 8 | ||||
-rw-r--r-- | engines/touche/opcodes.cpp | 4 | ||||
-rw-r--r-- | engines/touche/saveload.cpp | 2 | ||||
-rw-r--r-- | engines/touche/touche.cpp | 41 | ||||
-rw-r--r-- | engines/touche/touche.h | 1 |
5 files changed, 33 insertions, 23 deletions
diff --git a/engines/touche/menu.cpp b/engines/touche/menu.cpp index 6d2d90a572..c3c14c61d3 100644 --- a/engines/touche/menu.cpp +++ b/engines/touche/menu.cpp @@ -297,7 +297,7 @@ void ToucheEngine::handleMenuAction(void *menu, int actionId) { menuData->quit = true; break; case kActionQuitGame: - _flagsTable[611] = 1; + quitGame(); menuData->quit = true; break; case kActionTextOnly: @@ -398,7 +398,6 @@ void ToucheEngine::handleOptions(int forceDisplay) { case Common::EVENT_QUIT: menuData.quit = true; menuData.exit = true; - _flagsTable[611] = 1; break; case Common::EVENT_LBUTTONDOWN: button = menuData.findButtonUnderCursor(event.mouse.x, event.mouse.y); @@ -433,8 +432,9 @@ void ToucheEngine::handleOptions(int forceDisplay) { _system->delayMillis(10); } _fullRedrawCounter = 2; - if (!menuData.exit && _flagsTable[611] != 0) { - _flagsTable[611] = displayQuitDialog(); + if (!menuData.exit && quit()) { + if (displayQuitDialog()) + quitGame(); } } } diff --git a/engines/touche/opcodes.cpp b/engines/touche/opcodes.cpp index 4405c614ac..b2b16eb29d 100644 --- a/engines/touche/opcodes.cpp +++ b/engines/touche/opcodes.cpp @@ -408,6 +408,10 @@ void ToucheEngine::op_setFlag() { case 104: _currentKeyCharNum = val; break; + case 611: + if (val != 0) + quitGame(); + break; case 612: _flagsTable[613] = getRandomNumber(val); break; diff --git a/engines/touche/saveload.cpp b/engines/touche/saveload.cpp index 4fcf6e114d..c96a28bc8e 100644 --- a/engines/touche/saveload.cpp +++ b/engines/touche/saveload.cpp @@ -292,7 +292,7 @@ void ToucheEngine::loadGameStateData(Common::ReadStream *stream) { if (stream->readUint32LE() != saveLoadEndMarker) { warning("Corrupted gamestate data"); // if that ever happens, exit the game - _flagsTable[611] = 1; + quitGame(); } _flagsTable[614] = roomOffsX; _flagsTable[615] = roomOffsY; diff --git a/engines/touche/touche.cpp b/engines/touche/touche.cpp index ac8e8a786a..a4a9b7df92 100644 --- a/engines/touche/touche.cpp +++ b/engines/touche/touche.cpp @@ -95,7 +95,7 @@ int ToucheEngine::init() { _mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, ConfMan.getInt("sfx_volume")); _mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, ConfMan.getInt("speech_volume")); - _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, Audio::Mixer::kMaxMixerVolume); + _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, ConfMan.getInt("music_volume")); return 0; } @@ -111,7 +111,7 @@ int ToucheEngine::go() { res_deallocateTables(); res_closeDataFile(); - return 0; + return _eventMan->shouldRTL(); } void ToucheEngine::restart() { @@ -234,6 +234,13 @@ Common::Point ToucheEngine::getMousePos() const { return _eventMan->getMousePos(); } +void ToucheEngine::syncSoundSettings() { + readConfigurationSettings(); + _mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, ConfMan.getInt("sfx_volume")); + _mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, ConfMan.getInt("speech_volume")); + _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, ConfMan.getInt("music_volume")); +} + void ToucheEngine::mainLoop() { restart(); @@ -258,7 +265,7 @@ void ToucheEngine::mainLoop() { } uint32 frameTimeStamp = _system->getMillis(); - for (uint32 cycleCounter = 0; _flagsTable[611] == 0; ++cycleCounter) { + for (uint32 cycleCounter = 0; !quit(); ++cycleCounter) { if ((cycleCounter % 3) == 0) { runCycle(); } @@ -287,9 +294,6 @@ void ToucheEngine::processEvents(bool handleKeyEvents) { Common::Event event; while (_eventMan->pollEvent(event)) { switch (event.type) { - case Common::EVENT_QUIT: - _flagsTable[611] = 1; - break; case Common::EVENT_KEYDOWN: if (!handleKeyEvents) { break; @@ -297,7 +301,8 @@ void ToucheEngine::processEvents(bool handleKeyEvents) { _flagsTable[600] = event.kbd.keycode; if (event.kbd.keycode == Common::KEYCODE_ESCAPE) { if (_displayQuitDialog) { - _flagsTable[611] = displayQuitDialog(); + if (displayQuitDialog()) + quitGame(); } } else if (event.kbd.keycode == Common::KEYCODE_F5) { if (_flagsTable[618] == 0 && !_hideInventoryTexts) { @@ -1828,7 +1833,7 @@ int ToucheEngine::handleActionMenuUnderCursor(const int16 *actions, int offs, in _menuRedrawCounter = 2; Common::Rect rect(0, y, kScreenWidth, y + h); i = -1; - while (_inp_rightMouseButtonPressed && _flagsTable[611] == 0) { + while (_inp_rightMouseButtonPressed && !quit()) { Common::Point mousePos = getMousePos(); if (rect.contains(mousePos)) { int c = (mousePos.y - y) / kTextHeight; @@ -2691,10 +2696,10 @@ bool ToucheEngine::sortPointsData(int num1, int num2) { const int md2 = _programWalkTable[num1].point2; _programPointsTable[md2].order = 0; } - bool quit = false; + bool quitLoop = false; int order = 1; - while (!quit) { - quit = true; + while (!quitLoop) { + quitLoop = true; for (uint i = 0; i < _programWalkTable.size(); ++i) { const int md1 = _programWalkTable[i].point1; const int md2 = _programWalkTable[i].point2; @@ -2702,11 +2707,11 @@ bool ToucheEngine::sortPointsData(int num1, int num2) { assert((md2 & 0x4000) == 0); if (_programPointsTable[md1].order == order - 1 && _programPointsTable[md2].order > order) { _programPointsTable[md2].order = order; - quit = false; + quitLoop = false; } if (_programPointsTable[md2].order == order - 1 && _programPointsTable[md1].order > order) { _programPointsTable[md1].order = order; - quit = false; + quitLoop = false; } } } @@ -2938,9 +2943,9 @@ void ToucheEngine::markWalkPoints(int keyChar) { resetPointsData(0); if (pointsDataNum != -1) { _programPointsTable[pointsDataNum].order = 1; - bool quit = false; - while (!quit) { - quit = true; + bool quitLoop = false; + while (!quitLoop) { + quitLoop = true; for (uint i = 0; i < _programWalkTable.size(); ++i) { int16 md1 = _programWalkTable[i].point1; int16 md2 = _programWalkTable[i].point2; @@ -2948,11 +2953,11 @@ void ToucheEngine::markWalkPoints(int keyChar) { assert((md2 & 0x4000) == 0); if (_programPointsTable[md1].order != 0 && _programPointsTable[md2].order == 0) { _programPointsTable[md2].order = 1; - quit = false; + quitLoop = false; } if (_programPointsTable[md2].order != 0 && _programPointsTable[md1].order == 0) { _programPointsTable[md1].order = 1; - quit = false; + quitLoop = false; } } } diff --git a/engines/touche/touche.h b/engines/touche/touche.h index c1bc12655f..f5ac492550 100644 --- a/engines/touche/touche.h +++ b/engines/touche/touche.h @@ -356,6 +356,7 @@ public: virtual int init(); virtual int go(); + virtual void syncSoundSettings(); protected: |