aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Bouclet2018-05-20 10:05:12 +0200
committerBastien Bouclet2018-05-20 10:05:12 +0200
commit5ee24f3970d7c2d5868e44dd1a2eece83e013cb7 (patch)
tree69ec35c97ad36827c0e045f76f4978b2b7aeaab4
parent98067b0fe6cdccd6a1cbc6abda8fa36a39bb7fd7 (diff)
downloadscummvm-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.
-rw-r--r--engines/mohawk/myst.cpp29
-rw-r--r--engines/mohawk/myst.h2
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: