diff options
Diffstat (limited to 'engines/mohawk/riven.cpp')
-rw-r--r-- | engines/mohawk/riven.cpp | 55 |
1 files changed, 38 insertions, 17 deletions
diff --git a/engines/mohawk/riven.cpp b/engines/mohawk/riven.cpp index eaf079446d..69a06ac228 100644 --- a/engines/mohawk/riven.cpp +++ b/engines/mohawk/riven.cpp @@ -279,23 +279,9 @@ void MohawkEngine_Riven::doFrame() { if (!_scriptMan->hasQueuedScripts()) { // Check if we haven't jumped to menu if (_prevStack == -1) { - _prevStack = _stack->getId(); - _prevCard = _card->getId(); - - // If we are already in menu, do not call again - if (_prevStack == kStackAspit && _prevCard == 1) { - _prevStack = -1; - _prevCard = -1; - break; - } - - changeToStack(kStackAspit); - changeToCard(1); + goToMainMenu(); } else { - changeToStack(_prevStack); - changeToCard(_prevCard); - _prevStack = -1; - _prevCard = -1; + resumeFromMainMenu(); } } else { _stack->onKeyPressed(event.kbd); @@ -340,6 +326,34 @@ void MohawkEngine_Riven::doFrame() { _system->delayMillis(10); } +void MohawkEngine_Riven::goToMainMenu() { + _prevStack = _stack->getId(); + _prevCard = _card->getId(); + + // If we are already in menu, do not call again + if (_prevStack == kStackAspit && _prevCard == 1) { + _prevStack = -1; + _prevCard = -1; + return; + } + + changeToStack(kStackAspit); + changeToCard(1); +} + +void MohawkEngine_Riven::resumeFromMainMenu() { + assert(_prevStack != -1); + + changeToStack(_prevStack); + changeToCard(_prevCard); + _prevStack = -1; + _prevCard = -1; +} + +bool MohawkEngine_Riven::isGameStarted() const { + return _stack->getId() != kStackAspit || _prevStack != -1; +} + void MohawkEngine_Riven::pauseEngineIntern(bool pause) { MohawkEngine::pauseEngineIntern(pause); @@ -597,7 +611,14 @@ void MohawkEngine_Riven::runSaveDialog() { } Common::Error MohawkEngine_Riven::loadGameState(int slot) { - return _saveLoad->loadGame(slot); + Common::Error loadError = _saveLoad->loadGame(slot); + + if (loadError.getCode() == Common::kNoError) { + _prevStack = -1; + _prevCard = -1; + } + + return loadError; } void MohawkEngine_Riven::loadGameStateAndDisplayError(int slot) { |