diff options
author | Thanasis Antoniou | 2019-05-22 12:13:09 +0300 |
---|---|---|
committer | Thanasis Antoniou | 2019-05-22 12:13:43 +0300 |
commit | 7407cbc7880989f4444daeb53ac60b93be4ced8c (patch) | |
tree | 8a9460f25b65347d6d3ae297dc8874081a0d342b | |
parent | 64087716736ae9ec26813b8a0d62c98694503504 (diff) | |
download | scummvm-rg350-7407cbc7880989f4444daeb53ac60b93be4ced8c.tar.gz scummvm-rg350-7407cbc7880989f4444daeb53ac60b93be4ced8c.tar.bz2 scummvm-rg350-7407cbc7880989f4444daeb53ac60b93be4ced8c.zip |
BLADERUNNER: Don't exit to desktop after end credits
-rw-r--r-- | engines/bladerunner/bladerunner.cpp | 74 | ||||
-rw-r--r-- | engines/bladerunner/mouse.cpp | 4 | ||||
-rw-r--r-- | engines/bladerunner/mouse.h | 2 | ||||
-rw-r--r-- | engines/bladerunner/script/ai/steele.cpp | 16 |
4 files changed, 62 insertions, 34 deletions
diff --git a/engines/bladerunner/bladerunner.cpp b/engines/bladerunner/bladerunner.cpp index 06d6e1c339..cd8cbbe298 100644 --- a/engines/bladerunner/bladerunner.cpp +++ b/engines/bladerunner/bladerunner.cpp @@ -317,36 +317,50 @@ Common::Error BladeRunnerEngine::run() { } if (warnUserAboutUnsupportedGame()) { - - if (ConfMan.hasKey("save_slot")) { - loadGameState(ConfMan.getInt("save_slot")); - } else if (hasSavegames) { - _kia->_forceOpen = true; - _kia->open(kKIASectionLoad); - } - // TODO: why is game starting new game here when everything is done in startup? - // else { - // newGame(kGameDifficultyMedium); - // } - - gameLoop(); - - _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, or maybe it was planned - // to be used for a sequel (?). We will never know. - // Disabling as in current state it will only fill-up save slots - // autoSaveGame(4, true); - _endCredits->show(); - } + // improvement: Use a do-while() loop to handle the normal end-game state + // so that the game won't exit abruptly after end credits + do { + // additional code for gracefully handling end-game after _endCredits->show() + _gameOver = false; + _gameIsRunning = true; + if (_mouse->isDisabled()) { + // force a mouse enable here since otherwise, after end-game, + // we need extra call(s) to mouse->enable to get the _disabledCounter to 0 + _mouse->enable(true); + } + // end of additional code for gracefully handling end-game + + if (ConfMan.hasKey("save_slot") && ConfMan.getInt("save_slot") != -1) { + loadGameState(ConfMan.getInt("save_slot")); + ConfMan.set("save_slot", "-1"); + } else if (hasSavegames) { + _kia->_forceOpen = true; + _kia->open(kKIASectionLoad); + } + // TODO: why is game starting new game here when everything is done in startup? + // else { + // newGame(kGameDifficultyMedium); + // } + + gameLoop(); + + _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, or maybe it was planned + // to be used for a sequel (?). We will never know. + // Disabling as in current state it will only fill-up save slots + // autoSaveGame(4, true); + _endCredits->show(); + } + } while (_gameOver); // if main game loop ended and _gameOver == false, then shutdown } shutdown(); diff --git a/engines/bladerunner/mouse.cpp b/engines/bladerunner/mouse.cpp index 59dcb41ac8..6a6f94f978 100644 --- a/engines/bladerunner/mouse.cpp +++ b/engines/bladerunner/mouse.cpp @@ -218,8 +218,8 @@ void Mouse::disable() { _randomCountdownY = 0; } -void Mouse::enable() { - if (--_disabledCounter <= 0) { +void Mouse::enable(bool force) { + if (force || --_disabledCounter <= 0) { _disabledCounter = 0; } } diff --git a/engines/bladerunner/mouse.h b/engines/bladerunner/mouse.h index 31ba17a6c3..75be57615a 100644 --- a/engines/bladerunner/mouse.h +++ b/engines/bladerunner/mouse.h @@ -62,7 +62,7 @@ public: void setMouseJitterDown(); void disable(); - void enable(); + void enable(bool force = false); bool isDisabled() const; void draw(Graphics::Surface &surface, int x, int y); diff --git a/engines/bladerunner/script/ai/steele.cpp b/engines/bladerunner/script/ai/steele.cpp index d6fdf22d4b..b10ca1f002 100644 --- a/engines/bladerunner/script/ai/steele.cpp +++ b/engines/bladerunner/script/ai/steele.cpp @@ -512,28 +512,42 @@ int AIScriptSteele::GetFriendlinessModifierIfGetsClue(int otherActorId, int clue switch (clueId) { case kClueMcCoyRecoveredHoldensBadge: + // fall through case kClueMcCoyRetiredLucy: + // fall through case kClueMcCoyRetiredDektora: + // fall through case kClueMcCoyRetiredSadik: + // fall through case kClueMcCoyShotZubenInTheBack: + // fall through case kClueMcCoyRetiredLutherLance: + // fall through case kClueClovisOrdersMcCoysDeath: + // fall through case kClueMcCoyIsKind: + // fall through case kClueMcCoyIsInsane: return 5; case kClueMcCoyKilledRunciter1: + // fall through case kClueMcCoyShotGuzza: + // fall through case kClueMcCoyKilledRunciter2: - return 0; + return 0; // TODO shouldn't this be a negative number? case kClueMcCoyLetZubenEscape: return -4; case kClueMcCoyWarnedIzo: + // fall through case kClueMcCoyHelpedIzoIzoIsAReplicant: + // fall through case kClueMcCoyHelpedDektora: + // fall through case kClueMcCoyHelpedLucy: + // fall through case kClueMcCoyHelpedGordo: return -5; |