diff options
author | Bastien Bouclet | 2018-05-20 10:05:12 +0200 |
---|---|---|
committer | Bastien Bouclet | 2018-05-20 10:05:12 +0200 |
commit | 5ee24f3970d7c2d5868e44dd1a2eece83e013cb7 (patch) | |
tree | 69ec35c97ad36827c0e045f76f4978b2b7aeaab4 /engines/mohawk | |
parent | 98067b0fe6cdccd6a1cbc6abda8fa36a39bb7fd7 (diff) | |
download | scummvm-rg350-5ee24f3970d7c2d5868e44dd1a2eece83e013cb7.tar.gz scummvm-rg350-5ee24f3970d7c2d5868e44dd1a2eece83e013cb7.tar.bz2 scummvm-rg350-5ee24f3970d7c2d5868e44dd1a2eece83e013cb7.zip |
MOHAWK: MYST: Fix repeatedly trying to autosave when not allowed
Fixes trying to open the save on slot 0 on each frame when it is not an
autosave.
Diffstat (limited to 'engines/mohawk')
-rw-r--r-- | engines/mohawk/myst.cpp | 29 | ||||
-rw-r--r-- | engines/mohawk/myst.h | 2 |
2 files changed, 18 insertions, 13 deletions
diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp index 1355b86069..a01cfdd343 100644 --- a/engines/mohawk/myst.cpp +++ b/engines/mohawk/myst.cpp @@ -398,9 +398,8 @@ void MohawkEngine_Myst::doFrame() { _waitingOnBlockingOperation = false; } - if (shouldPerformAutoSave(_lastSaveTime) && canSaveGameStateCurrently() && _gameState->isAutoSaveAllowed()) { - autoSave(); - _lastSaveTime = _system->getMillis(); + if (shouldPerformAutoSave(_lastSaveTime)) { + tryAutoSaving(); } Common::Event event; @@ -455,10 +454,8 @@ void MohawkEngine_Myst::doFrame() { if (_needsShowCredits) { if (isInteractive()) { - if (canSaveGameStateCurrently() && _gameState->isAutoSaveAllowed()) { - // Attempt to autosave before exiting - autoSave(); - } + // Attempt to autosave before exiting + tryAutoSaving(); _cursor->hideCursor(); changeToStack(kCreditsStack, 10000, 0, 0); @@ -489,10 +486,8 @@ void MohawkEngine_Myst::doFrame() { break; case Common::EVENT_QUIT: case Common::EVENT_RTL: - if (canSaveGameStateCurrently() && _gameState->isAutoSaveAllowed()) { - // Attempt to autosave before exiting - autoSave(); - } + // Attempt to autosave before exiting + tryAutoSaving(); break; default: break; @@ -1181,7 +1176,17 @@ Common::Error MohawkEngine_Myst::saveGameState(int slot, const Common::String &d return _gameState->save(slot, desc, false) ? Common::kNoError : Common::kUnknownError; } -void MohawkEngine_Myst::autoSave() { +void MohawkEngine_Myst::tryAutoSaving() { + if (!canSaveGameStateCurrently()) { + return; // Can't save right now, try again on the next frame + } + + _lastSaveTime = _system->getMillis(); + + if (!_gameState->isAutoSaveAllowed()) { + return; // Can't autosave ever, try again after the next autosave delay + } + if (!_gameState->save(MystGameState::kAutoSaveSlot, "Autosave", true)) warning("Attempt to autosave has failed."); } diff --git a/engines/mohawk/myst.h b/engines/mohawk/myst.h index 5c238701d0..64fee10fde 100644 --- a/engines/mohawk/myst.h +++ b/engines/mohawk/myst.h @@ -245,7 +245,7 @@ public: bool canSaveGameStateCurrently() override; Common::Error loadGameState(int slot) override; Common::Error saveGameState(int slot, const Common::String &desc) override; - void autoSave(); + void tryAutoSaving(); bool hasFeature(EngineFeature f) const override; private: |