Skip to content
Permalink
Browse files

BLADERUNNER: Don't exit to desktop after end credits

  • Loading branch information...
antoniou79 committed May 22, 2019
1 parent 6408771 commit 7407cbc7880989f4444daeb53ac60b93be4ced8c
@@ -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();
@@ -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;
}
}
@@ -62,7 +62,7 @@ class Mouse {
void setMouseJitterDown();

void disable();
void enable();
void enable(bool force = false);
bool isDisabled() const;

void draw(Graphics::Surface &surface, int x, int y);
@@ -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;

0 comments on commit 7407cbc

Please sign in to comment.
You can’t perform that action at this time.