diff options
author | Thanasis Antoniou | 2019-04-02 15:42:26 +0300 |
---|---|---|
committer | Thanasis Antoniou | 2019-04-02 15:46:14 +0300 |
commit | 65166efb22b0fdd28c3b7845c4aef1f4342c5ded (patch) | |
tree | 943e5fa47f06370408103a1bfbbe6a119d443bc7 | |
parent | 43e04d19c4e398989a1ba7184d49657b7cedb1cf (diff) | |
download | scummvm-rg350-65166efb22b0fdd28c3b7845c4aef1f4342c5ded.tar.gz scummvm-rg350-65166efb22b0fdd28c3b7845c4aef1f4342c5ded.tar.bz2 scummvm-rg350-65166efb22b0fdd28c3b7845c4aef1f4342c5ded.zip |
BLADERUNNER: Fix for corrupt incomplete autosaves
Autosaving overrides other conditions that don't allow proper saving
-rw-r--r-- | engines/bladerunner/bladerunner.cpp | 31 | ||||
-rw-r--r-- | engines/bladerunner/bladerunner.h | 3 | ||||
-rw-r--r-- | engines/bladerunner/script/script.cpp | 2 |
3 files changed, 24 insertions, 12 deletions
diff --git a/engines/bladerunner/bladerunner.cpp b/engines/bladerunner/bladerunner.cpp index 5b858b53c0..ce96fe96cd 100644 --- a/engines/bladerunner/bladerunner.cpp +++ b/engines/bladerunner/bladerunner.cpp @@ -116,10 +116,11 @@ BladeRunnerEngine::BladeRunnerEngine(OSystem *syst, const ADGameDescription *des _playerActorIdle = false; _playerDead = false; - _gameOver = false; - _gameAutoSave = -1; - _gameIsLoading = false; - _sceneIsLoading = false; + _gameOver = false; + _gameAutoSaveTextId = -1; + _gameIsAutoSaving = false; + _gameIsLoading = false; + _sceneIsLoading = false; _runningActorId = -1; _isWalkingInterruptible = false; @@ -282,7 +283,6 @@ Common::Error BladeRunnerEngine::saveGameState(int slot, const Common::String &d header._name = desc; BladeRunner::SaveFileManager::writeHeader(*saveFile, header); - _time->pause(); saveGame(*saveFile, thumbnail); _time->resume(); @@ -331,6 +331,14 @@ Common::Error BladeRunnerEngine::run() { _mouse->disable(); if (_gameOver) { + // In the original game this created a single "END_GAME_STATE.END" + // which had the a valid format of a save game but was never accessed + // from the loading screen. (Due to the .END extension) + // It was also a single file that was overwritten each time the player + // finished the game. + // Maybe its purpose was debugging (?) by renaming it to .SAV and also + // for the game to "know" if the player has already finished the game at least once (?) + // although that latter one seems not to be used for anything. autoSaveGame(4, true); _endCredits->show(); } @@ -856,9 +864,9 @@ void BladeRunnerEngine::gameTick() { } } - if (_gameAutoSave >= 0) { - autoSaveGame(_gameAutoSave, false); - _gameAutoSave = -1; + if (_gameAutoSaveTextId >= 0) { + autoSaveGame(_gameAutoSaveTextId, false); + _gameAutoSaveTextId = -1; } //probably not needed, this version of tick is just loading data from buffer @@ -1811,7 +1819,9 @@ void BladeRunnerEngine::playerDied() { } bool BladeRunnerEngine::saveGame(Common::WriteStream &stream, const Graphics::Surface &thumbnail) { - if (!playerHasControl() || _sceneScript->isInsideScript() || _aiScripts->isInsideScript()) { + if ( !_gameIsAutoSaving + && ( !playerHasControl() || _sceneScript->isInsideScript() || _aiScripts->isInsideScript()) + ){ return false; } @@ -1977,6 +1987,7 @@ void BladeRunnerEngine::autoSaveGame(int textId, bool endgame) { if (!textAutoSave.open("AUTOSAVE")) { return; } + _gameIsAutoSaving = true; SaveStateList saveList = BladeRunner::SaveFileManager::list(getTargetName()); @@ -1999,7 +2010,7 @@ void BladeRunnerEngine::autoSaveGame(int textId, bool endgame) { } else { saveGameState(slot, textAutoSave.getText(textId)); } - + _gameIsAutoSaving = false; } void BladeRunnerEngine::ISez(const Common::String &str) { diff --git a/engines/bladerunner/bladerunner.h b/engines/bladerunner/bladerunner.h index 1df3c35cdc..a06daf2dd7 100644 --- a/engines/bladerunner/bladerunner.h +++ b/engines/bladerunner/bladerunner.h @@ -194,7 +194,8 @@ public: bool _actorIsSpeaking; bool _actorSpeakStopIsRequested; bool _gameOver; - int _gameAutoSave; + int _gameAutoSaveTextId; + bool _gameIsAutoSaving; bool _gameIsLoading; bool _sceneIsLoading; bool _vqaIsPlaying; diff --git a/engines/bladerunner/script/script.cpp b/engines/bladerunner/script/script.cpp index 63bfa43fb4..15b6067030 100644 --- a/engines/bladerunner/script/script.cpp +++ b/engines/bladerunner/script/script.cpp @@ -1560,7 +1560,7 @@ bool ScriptBase::Game_Over() { void ScriptBase::Autosave_Game(int textId) { debugC(kDebugScript, "Autosave_Game(%d)", textId); - _vm->_gameAutoSave = textId; + _vm->_gameAutoSaveTextId = textId; } void ScriptBase::I_Sez(const char *str) { |