From 438a6223cbb5a822aa3506352e743e20f4d2da6e Mon Sep 17 00:00:00 2001 From: Thanasis Antoniou Date: Sat, 1 Jun 2019 21:36:46 +0300 Subject: BLADERUNNER: Fix photographer bug and awry clickables --- engines/bladerunner/obstacles.cpp | 2 +- engines/bladerunner/script/scene/bb05.cpp | 4 ++++ engines/bladerunner/script/scene/hc04.cpp | 4 ++++ engines/bladerunner/script/scene/ma06.cpp | 4 ++++ engines/bladerunner/script/scene/ps02.cpp | 9 +++++++++ engines/bladerunner/script/scene/ps04.cpp | 4 ++++ engines/bladerunner/script/scene/rc03.cpp | 4 ++++ engines/bladerunner/script/scene/tb06.cpp | 31 +++++++++++++++++++++++-------- engines/bladerunner/script/scene/tb07.cpp | 4 ++++ engines/bladerunner/script/scene/ug03.cpp | 23 +++++++++++++++++++++++ 10 files changed, 80 insertions(+), 9 deletions(-) diff --git a/engines/bladerunner/obstacles.cpp b/engines/bladerunner/obstacles.cpp index 9bdf4ffe9c..c94f271e2d 100644 --- a/engines/bladerunner/obstacles.cpp +++ b/engines/bladerunner/obstacles.cpp @@ -33,7 +33,7 @@ #include "common/debug.h" #define DISABLE_PATHFINDING 0 -#define USE_PATHFINDING_EXPERIMENTAL_FIX_2 1 // Alternate Fix: Allows polygons merged on one point +#define USE_PATHFINDING_EXPERIMENTAL_FIX_2 0 // Alternate Fix: Allows polygons merged on one point #define WITHIN_TOLERANCE(a, b) (((a) - 0.009) < (b) && ((a) + 0.009) > (b)) diff --git a/engines/bladerunner/script/scene/bb05.cpp b/engines/bladerunner/script/scene/bb05.cpp index 9ef70cbab3..ecf6897497 100644 --- a/engines/bladerunner/script/scene/bb05.cpp +++ b/engines/bladerunner/script/scene/bb05.cpp @@ -75,6 +75,10 @@ void SceneScriptBB05::SceneLoaded() { Clickable_Object("BOX06"); Unclickable_Object("BOX06"); Unclickable_Object("BOX14"); +#if BLADERUNNER_ORIGINAL_BUGS +#else + Unclickable_Object("PINHEAD"); +#endif // BLADERUNNER_ORIGINAL_BUGS if (Actor_Query_Goal_Number(kActorSebastian) == 200) { Actor_Set_Goal_Number(kActorGeneralDoll, 299); Actor_Put_In_Set(kActorGeneralDoll, kSetFreeSlotG); diff --git a/engines/bladerunner/script/scene/hc04.cpp b/engines/bladerunner/script/scene/hc04.cpp index 4e1972c9ff..584c3ceac4 100644 --- a/engines/bladerunner/script/scene/hc04.cpp +++ b/engines/bladerunner/script/scene/hc04.cpp @@ -78,6 +78,10 @@ void SceneScriptHC04::SceneLoaded() { Obstacle_Object("CAN FIRE", true); Unobstacle_Object("ASIANMALE01", true); Clickable_Object("CAN FIRE"); +#if BLADERUNNER_ORIGINAL_BUGS +#else + Unclickable_Object("CAN FIRE"); +#endif // BLADERUNNER_ORIGINAL_BUGS } bool SceneScriptHC04::MouseClick(int x, int y) { diff --git a/engines/bladerunner/script/scene/ma06.cpp b/engines/bladerunner/script/scene/ma06.cpp index 7e1e5303a3..319e30429d 100644 --- a/engines/bladerunner/script/scene/ma06.cpp +++ b/engines/bladerunner/script/scene/ma06.cpp @@ -53,6 +53,10 @@ void SceneScriptMA06::InitializeScene() { void SceneScriptMA06::SceneLoaded() { Obstacle_Object("PANEL", true); Clickable_Object("PANEL"); +#if BLADERUNNER_ORIGINAL_BUGS +#else + Unclickable_Object("PANEL"); +#endif // BLADERUNNER_ORIGINAL_BUGS if (_vm->_cutContent) { if (Actor_Query_Goal_Number(kActorRachael) == kGoalRachaelShouldBeInElevatorMcCoysAct3) { // Put Rachael in set for her first cut scene (Act 3) when it plays out in the elevator diff --git a/engines/bladerunner/script/scene/ps02.cpp b/engines/bladerunner/script/scene/ps02.cpp index a3bbe7bb27..c8ff284f0d 100644 --- a/engines/bladerunner/script/scene/ps02.cpp +++ b/engines/bladerunner/script/scene/ps02.cpp @@ -44,6 +44,11 @@ void SceneScriptPS02::SceneLoaded() { Obstacle_Object("E.DOOR02", true); Clickable_Object("E.DOOR01"); Clickable_Object("E.DOOR02"); +#if BLADERUNNER_ORIGINAL_BUGS +#else + Unclickable_Object("E.DOOR01"); + Unclickable_Object("E.DOOR02"); +#endif // BLADERUNNER_ORIGINAL_BUGS } bool SceneScriptPS02::MouseClick(int x, int y) { @@ -51,6 +56,9 @@ bool SceneScriptPS02::MouseClick(int x, int y) { } bool SceneScriptPS02::ClickedOn3DObject(const char *objectName, bool a2) { +#if BLADERUNNER_ORIGINAL_BUGS + // McCoy never clicks on the door + // This stuff is never called if (Object_Query_Click("E.DOOR01", objectName) || Object_Query_Click("E.D00R02", objectName) ) { @@ -91,6 +99,7 @@ bool SceneScriptPS02::ClickedOn3DObject(const char *objectName, bool a2) { } } } +#endif // BLADERUNNER_ORIGINAL_BUGS return false; } diff --git a/engines/bladerunner/script/scene/ps04.cpp b/engines/bladerunner/script/scene/ps04.cpp index c856496016..e114ecbfd7 100644 --- a/engines/bladerunner/script/scene/ps04.cpp +++ b/engines/bladerunner/script/scene/ps04.cpp @@ -62,6 +62,10 @@ void SceneScriptPS04::SceneLoaded() { Unobstacle_Object("B.DOOR", true); Unobstacle_Object("B.CHAIR01", true); Unclickable_Object("CHAIR07"); +#if BLADERUNNER_ORIGINAL_BUGS +#else + Unclickable_Object("FLOOR"); +#endif // BLADERUNNER_ORIGINAL_BUGS if ( Global_Variable_Query(kVariableChapter) == 2 && !Actor_Clue_Query(kActorMcCoy, kClueWeaponsOrderForm) diff --git a/engines/bladerunner/script/scene/rc03.cpp b/engines/bladerunner/script/scene/rc03.cpp index 8f70222ad0..bb6168a0a9 100644 --- a/engines/bladerunner/script/scene/rc03.cpp +++ b/engines/bladerunner/script/scene/rc03.cpp @@ -124,6 +124,10 @@ void SceneScriptRC03::SceneLoaded() { Unclickable_Object("BOX-BBCOLUMN02"); Unclickable_Object("BOX-BBCOLUMN03"); Unclickable_Object("BOX-BBCOLUMN04"); +#if BLADERUNNER_ORIGINAL_BUGS +#else + Unclickable_Object("PARKING METER 01"); +#endif // BLADERUNNER_ORIGINAL_BUGS Unclickable_Object("PARKING METER 02"); Unclickable_Object("PARKING METER 03"); Unclickable_Object("TRASH CAN WITH FIRE"); diff --git a/engines/bladerunner/script/scene/tb06.cpp b/engines/bladerunner/script/scene/tb06.cpp index 4720989fad..68f5bbd39f 100644 --- a/engines/bladerunner/script/scene/tb06.cpp +++ b/engines/bladerunner/script/scene/tb06.cpp @@ -177,14 +177,29 @@ void SceneScriptTB06::PlayerWalkedIn() { Actor_Face_Actor(kActorMcCoy, kActorMarcus, true); Actor_Says(kActorMcCoy, 5290, kAnimationModeTalk); Loop_Actor_Walk_To_XYZ(kActorMcCoy, -10.0f, 149.0f, -631.0f, 0, false, false, false); - AI_Movement_Track_Pause(kActorPhotographer); - Actor_Face_Actor(kActorMcCoy, kActorPhotographer, true); - Actor_Face_Actor(kActorPhotographer, kActorMcCoy, true); - Actor_Says(kActorPhotographer, 0, kAnimationModeTalk); - Actor_Says(kActorMcCoy, 5295, kAnimationModeTalk); - Actor_Face_Actor(kActorPhotographer, kActorMarcus, true); - Actor_Says(kActorPhotographer, 10, kAnimationModeTalk); - AI_Movement_Track_Unpause(kActorPhotographer); + + bool talkWithPhotographer = false; +#if BLADERUNNER_ORIGINAL_BUGS + talkWithPhotographer = true; +#else + // It's possible for McCoy to go to AR01 (so the kActorPhotographer will go away from TB06) + // without ever going into this scene (TB06) + // so later on in the Act, if McCoy visits this scene the Photographer would be gone + // but the dialogue would play as if he was there. This fixes that bug. + if (Actor_Query_Is_In_Current_Set(kActorPhotographer)) { + talkWithPhotographer = true; + } +#endif // BLADERUNNER_ORIGINAL_BUGS + if (talkWithPhotographer) { + AI_Movement_Track_Pause(kActorPhotographer); + Actor_Face_Actor(kActorMcCoy, kActorPhotographer, true); + Actor_Face_Actor(kActorPhotographer, kActorMcCoy, true); + Actor_Says(kActorPhotographer, 0, kAnimationModeTalk); + Actor_Says(kActorMcCoy, 5295, kAnimationModeTalk); + Actor_Face_Actor(kActorPhotographer, kActorMarcus, true); + Actor_Says(kActorPhotographer, 10, kAnimationModeTalk); + AI_Movement_Track_Unpause(kActorPhotographer); + } Game_Flag_Set(kFlagTB06Introduction); //return true; return; diff --git a/engines/bladerunner/script/scene/tb07.cpp b/engines/bladerunner/script/scene/tb07.cpp index 389ee9ee98..cde6e5f6b8 100644 --- a/engines/bladerunner/script/scene/tb07.cpp +++ b/engines/bladerunner/script/scene/tb07.cpp @@ -61,6 +61,10 @@ void SceneScriptTB07::InitializeScene() { void SceneScriptTB07::SceneLoaded() { Obstacle_Object("EAGLE01", true); Clickable_Object("EAGLE01"); +#if BLADERUNNER_ORIGINAL_BUGS +#else + Unclickable_Object("EAGLE01"); +#endif // BLADERUNNER_ORIGINAL_BUGS } bool SceneScriptTB07::MouseClick(int x, int y) { diff --git a/engines/bladerunner/script/scene/ug03.cpp b/engines/bladerunner/script/scene/ug03.cpp index daeab009e2..ed3c0d5699 100644 --- a/engines/bladerunner/script/scene/ug03.cpp +++ b/engines/bladerunner/script/scene/ug03.cpp @@ -69,6 +69,16 @@ void SceneScriptUG03::SceneLoaded() { Clickable_Object("CHAIR_SEAT"); Clickable_Object("CHAIR_STRAPLEGLEFT"); Clickable_Object("CHAIR_STRAPLEGRIGHT"); +#if BLADERUNNER_ORIGINAL_BUGS +#else + if (Actor_Clue_Query(kActorMcCoy, kClueScaryChair)) { + Unclickable_Object("CHAIR_HEADZAPPER"); + Unclickable_Object("CHAIR_BACK"); + Unclickable_Object("CHAIR_SEAT"); + Unclickable_Object("CHAIR_STRAPLEGLEFT"); + Unclickable_Object("CHAIR_STRAPLEGRIGHT"); + } +#endif // BLADERUNNER_ORIGINAL_BUGS } bool SceneScriptUG03::MouseClick(int x, int y) { @@ -79,6 +89,11 @@ bool SceneScriptUG03::ClickedOn3DObject(const char *objectName, bool a2) { if (Object_Query_Click("CHAIR_BACK", objectName) || Object_Query_Click("CHAIR_SEAT", objectName) || Object_Query_Click("CHAIR_HEADZAPPER", objectName) +#if BLADERUNNER_ORIGINAL_BUGS +#else + || Object_Query_Click("CHAIR_STRAPLEGLEFT", objectName) + || Object_Query_Click("CHAIR_STRAPLEGRIGHT", objectName) +#endif // BLADERUNNER_ORIGINAL_BUGS ) { if (!Loop_Actor_Walk_To_Scene_Object(kActorMcCoy, "CHAIR_BACK", 36, true, false)) { Actor_Face_Object(kActorMcCoy, "CHAIR_BACK", true); @@ -89,6 +104,14 @@ bool SceneScriptUG03::ClickedOn3DObject(const char *objectName, bool a2) { Actor_Voice_Over(2580, kActorVoiceOver); Actor_Voice_Over(2590, kActorVoiceOver); Actor_Clue_Acquire(kActorMcCoy, kClueScaryChair, true, -1); +#if BLADERUNNER_ORIGINAL_BUGS +#else + Unclickable_Object("CHAIR_HEADZAPPER"); + Unclickable_Object("CHAIR_BACK"); + Unclickable_Object("CHAIR_SEAT"); + Unclickable_Object("CHAIR_STRAPLEGLEFT"); + Unclickable_Object("CHAIR_STRAPLEGRIGHT"); +#endif // BLADERUNNER_ORIGINAL_BUGS } } } -- cgit v1.2.3