From 831072d809016a9e6d3c85c8fc9ce6751125b8e6 Mon Sep 17 00:00:00 2001 From: Thanasis Antoniou Date: Tue, 26 Mar 2019 16:27:18 +0200 Subject: BLADERUNNER: Fix Dektora showing up dead at moonbus --- engines/bladerunner/script/ai/dektora.cpp | 4 ++-- engines/bladerunner/script/scene/rc03.cpp | 38 ++++++++++++++++++++++++++----- engines/bladerunner/script/scene/ug04.cpp | 6 ++++- 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/engines/bladerunner/script/ai/dektora.cpp b/engines/bladerunner/script/ai/dektora.cpp index 7da4b97200..9d721e31cc 100644 --- a/engines/bladerunner/script/ai/dektora.cpp +++ b/engines/bladerunner/script/ai/dektora.cpp @@ -194,14 +194,14 @@ void AIScriptDektora::ReceivedClue(int clueId, int fromActorId) { void AIScriptDektora::ClickedByPlayer() { if (Actor_Query_Goal_Number(kActorDektora) == kGoalDektoraGone) { Actor_Face_Actor(0, kActorDektora, true); - Actor_Says(kActorMcCoy, 8630, 12); + Actor_Says(kActorMcCoy, 8630, 12); // What a waste return; //true; } if (Actor_Query_Goal_Number(kActorDektora) < kGoalDektoraStartChapter3) { Actor_Face_Actor(kActorMcCoy, kActorDektora, true); - Actor_Says(kActorMcCoy, 8590, 13); + Actor_Says(kActorMcCoy, 8590, 13); // Not the talkative type } if (Actor_Query_Goal_Number(kActorDektora) == kGoalDektoraNR08Dance) { diff --git a/engines/bladerunner/script/scene/rc03.cpp b/engines/bladerunner/script/scene/rc03.cpp index fd18b8a460..c37edd586b 100644 --- a/engines/bladerunner/script/scene/rc03.cpp +++ b/engines/bladerunner/script/scene/rc03.cpp @@ -82,7 +82,9 @@ void SceneScriptRC03::InitializeScene() { if (Game_Flag_Query(kFlagHC04toRC03) && Actor_Query_Goal_Number(kActorIzo) != kGoalIzoWaitingAtRC03 ) { - Scene_Loop_Start_Special(kSceneLoopModeLoseControl, 0, false); + if (Random_Query(1, 3) == 1) { // enhancement: don't always play this scene when exiting Hawker's Circle + Scene_Loop_Start_Special(kSceneLoopModeLoseControl, 0, false); + } } Scene_Loop_Set_Default(1); } @@ -140,18 +142,26 @@ bool SceneScriptRC03::ClickedOnItem(int itemId, bool a2) { } bool SceneScriptRC03::ClickedOnExit(int exitId) { - if (exitId == 0) { + if (exitId == 0) { // To Runciter's shop if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 298.0f, -4.0f, 405.0f, 0, true, false, 0)) { if (Game_Flag_Query(kFlagRC04McCoyShotBob)) { Game_Flag_Set(kFlagBulletBobDead); } Game_Flag_Set(kFlagRC03toRC01); Set_Enter(kSetRC01, kSceneRC01); +#if BLADERUNNER_ORIGINAL_BUGS Actor_Set_Goal_Number(kActorDektora, kGoalDektoraStartWalkingAround); +#else + // Restrict Dektora's "walking around" goal only in Chapter 2 + // this is a bug fix for the case where Dektora's goal gets reset from kGoalDektoraGone in Chapter 4/5 + if (Global_Variable_Query(kVariableChapter) == 2 ) { + Actor_Set_Goal_Number(kActorDektora, kGoalDektoraStartWalkingAround); + } +#endif // BLADERUNNER_ORIGINAL_BUGS } return true; } - if (exitId == 1) { + if (exitId == 1) { // to Animoid Row (Scorpion/Insect Lady) if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -469.0f, -4.0f, 279.0f, 0, true, false, 0)) { if (Game_Flag_Query(kFlagRC04McCoyShotBob)) { Game_Flag_Set(kFlagBulletBobDead); @@ -163,7 +173,7 @@ bool SceneScriptRC03::ClickedOnExit(int exitId) { } return true; } - if (exitId == 2) { + if (exitId == 2) { // to sewers if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 147.51f, -4.0f, 166.48f, 0, true, false, 0)) { Game_Flag_Set(kFlagRC03toUG01); Game_Flag_Reset(kFlagMcCoyInRunciters); @@ -172,11 +182,19 @@ bool SceneScriptRC03::ClickedOnExit(int exitId) { Game_Flag_Set(kFlagBulletBobDead); } Set_Enter(kSetUG01, kSceneUG01); +#if BLADERUNNER_ORIGINAL_BUGS Actor_Set_Goal_Number(kActorDektora, kGoalDektoraStartWalkingAround); +#else + // Restrict Dektora's "walking around" goal only in Chapter 2 + // this is a bug fix for the case where Dektora's goal gets reset from kGoalDektoraGone in Chapter 4/5 + if (Global_Variable_Query(kVariableChapter) == 2 ) { + Actor_Set_Goal_Number(kActorDektora, kGoalDektoraStartWalkingAround); + } +#endif // BLADERUNNER_ORIGINAL_BUGS } return true; } - if (exitId == 3) { + if (exitId == 3) { // to Hawker's Circle (Mama Izabella's Kingston Kitchen) if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -487.0f, 1.0f, 116.0f, 0, true, false, 0)) { Game_Flag_Set(kFlagRC03toHC04); Game_Flag_Reset(kFlagMcCoyInRunciters); @@ -185,11 +203,19 @@ bool SceneScriptRC03::ClickedOnExit(int exitId) { Game_Flag_Set(kFlagBulletBobDead); } Set_Enter(kSetHC01_HC02_HC03_HC04, kSceneHC04); +#if BLADERUNNER_ORIGINAL_BUGS Actor_Set_Goal_Number(kActorDektora, kGoalDektoraStartWalkingAround); +#else + // Restrict Dektora's "walking around" goal only in Chapter 2 + // this is a bug fix for the case where Dektora's goal gets reset from kGoalDektoraGone in Chapter 4/5 + if (Global_Variable_Query(kVariableChapter) == 2 ) { + Actor_Set_Goal_Number(kActorDektora, kGoalDektoraStartWalkingAround); + } +#endif // BLADERUNNER_ORIGINAL_BUGS } return true; } - if (exitId == 4) { + if (exitId == 4) { // To Bullet Bob's if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -22.0f, 1.0f, -63.0f, 0, true, false, 0)) { if (Global_Variable_Query(kVariableChapter) == 3 || Global_Variable_Query(kVariableChapter) == 5 diff --git a/engines/bladerunner/script/scene/ug04.cpp b/engines/bladerunner/script/scene/ug04.cpp index 2f71899023..83234fb745 100644 --- a/engines/bladerunner/script/scene/ug04.cpp +++ b/engines/bladerunner/script/scene/ug04.cpp @@ -59,7 +59,11 @@ void SceneScriptUG04::InitializeScene() { Ambient_Sounds_Add_Sound(304, 5, 50, 17, 37, -100, 100, -101, -101, 0, 0); Ambient_Sounds_Add_Sound(305, 5, 50, 17, 37, -100, 100, -101, -101, 0, 0); - Scene_Loop_Start_Special(kSceneLoopModeLoseControl, 0, false); + if ((Global_Variable_Query(kVariableChapter) == 3) + || (Global_Variable_Query(kVariableChapter) > 3 && Random_Query(1, 5) == 1) + ){ // enhancement: don't always play the passing train after chapter 3 + Scene_Loop_Start_Special(kSceneLoopModeLoseControl, 0, false); + } Scene_Loop_Set_Default(1); } -- cgit v1.2.3