aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/script
diff options
context:
space:
mode:
authorThanasis Antoniou2019-06-30 15:27:11 +0300
committerThanasis Antoniou2019-06-30 15:27:51 +0300
commitb64e66a6b5a4c10a38c34bfaa1b07d5cb5fac41f (patch)
treeaed8dfcea0929a44f2c47945350265a2a6623766 /engines/bladerunner/script
parent9fa862c0f40f5d04ae7c520ae6fdd6797bc79b6a (diff)
downloadscummvm-rg350-b64e66a6b5a4c10a38c34bfaa1b07d5cb5fac41f.tar.gz
scummvm-rg350-b64e66a6b5a4c10a38c34bfaa1b07d5cb5fac41f.tar.bz2
scummvm-rg350-b64e66a6b5a4c10a38c34bfaa1b07d5cb5fac41f.zip
BLADERUNNER: Fix Steele re-arresting Izo at RC03
Diffstat (limited to 'engines/bladerunner/script')
-rw-r--r--engines/bladerunner/script/ai/izo.cpp1
-rw-r--r--engines/bladerunner/script/ai/steele.cpp6
-rw-r--r--engines/bladerunner/script/scene/rc03.cpp17
3 files changed, 22 insertions, 2 deletions
diff --git a/engines/bladerunner/script/ai/izo.cpp b/engines/bladerunner/script/ai/izo.cpp
index 9191ef18f5..2861e76554 100644
--- a/engines/bladerunner/script/ai/izo.cpp
+++ b/engines/bladerunner/script/ai/izo.cpp
@@ -106,6 +106,7 @@ void AIScriptIzo::CompletedMovementTrack() {
return; //true;
case kGoalIzoRC03Walk:
+ // fall through
case kGoalIzoRC03Run:
Actor_Set_Goal_Number(kActorIzo, kGoalIzoRC03RunAway);
Actor_Set_Goal_Number(kActorSteele, kGoalSteeleApprehendIzo);
diff --git a/engines/bladerunner/script/ai/steele.cpp b/engines/bladerunner/script/ai/steele.cpp
index b10ca1f002..10dd1d9b73 100644
--- a/engines/bladerunner/script/ai/steele.cpp
+++ b/engines/bladerunner/script/ai/steele.cpp
@@ -822,7 +822,9 @@ bool AIScriptSteele::GoalChanged(int currentGoalNumber, int newGoalNumber) {
// Scene_Exits_Enable() is done in Izo's kGoalIzoGetArrested - CompletedMovementTrack() case
Actor_Set_Goal_Number(kActorIzo, kGoalIzoGetArrested);
Actor_Set_Goal_Number(kActorSteele, kGoalSteeleLeaveRC03);
+#if BLADERUNNER_ORIGINAL_BUGS
Actor_Set_Goal_Number(kActorSteele, kGoalSteeleDefault); // TODO - a bug? why set to default here?
+#endif // BLADERUNNER_ORIGINAL_BUGS
return true;
case kGoalSteeleIzoBlockedByMcCoy:
@@ -2333,9 +2335,9 @@ void AIScriptSteele::SetAnimationState(int animationState, int animationFrame, i
bool AIScriptSteele::ReachedMovementTrackWaypoint(int waypointId) {
if (waypointId == 174
&& Actor_Query_Goal_Number(kActorSteele) == kGoalSteeleLeaveRC03
- )
+ ) {
Actor_Set_Goal_Number(kActorSteele, kGoalSteeleGoToPoliceStation);
-
+ }
return true;
}
diff --git a/engines/bladerunner/script/scene/rc03.cpp b/engines/bladerunner/script/scene/rc03.cpp
index 49b8b9476d..b9a022567d 100644
--- a/engines/bladerunner/script/scene/rc03.cpp
+++ b/engines/bladerunner/script/scene/rc03.cpp
@@ -51,7 +51,12 @@ void SceneScriptRC03::InitializeScene() {
Scene_Exit_Add_2D_Exit(0, 610, 0, 639, 479, 1);
Scene_Exit_Add_2D_Exit(1, 0, 0, 30, 479, 3);
if (Game_Flag_Query(kFlagRC03UnlockedToUG01)) {
+#if BLADERUNNER_ORIGINAL_BUGS
Scene_Exit_Add_2D_Exit(2, 524, 350, 573, 359, 2);
+#else
+ // prevent Izo's corpse from blocking the exit hot-spot area
+ Scene_Exit_Add_2D_Exit(2, 524, 340, 573, 359, 2);
+#endif // BLADERUNNER_ORIGINAL_BUGS
}
Scene_Exit_Add_2D_Exit(3, 85, 255, 112, 315, 0);
Scene_Exit_Add_2D_Exit(4, 428, 260, 453, 324, 0);
@@ -316,7 +321,19 @@ void SceneScriptRC03::PlayerWalkedIn() {
Loop_Actor_Walk_To_XYZ(kActorIzo, 180.0f, -4.0f, 184.0f, 0, false, false, false);
Actor_Change_Animation_Mode(kActorIzo, 6);
if (!Game_Flag_Query(kFlagIzoIsReplicant)) {
+#if BLADERUNNER_ORIGINAL_BUGS
Actor_Set_Goal_Number(kActorSteele, kGoalSteeleApprehendIzo);
+#else
+ if (Actor_Query_Goal_Number(kActorIzo) != kGoalIzoGetArrested
+ && Actor_Query_Goal_Number(kActorIzo) != kGoalIzoGotArrested
+ && Actor_Query_Goal_Number(kActorSteele) != kGoalSteeleApprehendIzo
+ && Actor_Query_Goal_Number(kActorSteele) != kGoalSteeleArrestIzo
+ && Actor_Query_Goal_Number(kActorSteele) != kGoalSteeleLeaveRC03
+ && Actor_Query_Goal_Number(kActorSteele) != kGoalSteeleGoToPoliceStation
+ ) {
+ Actor_Set_Goal_Number(kActorSteele, kGoalSteeleApprehendIzo);
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
}
Player_Gains_Control();
} else {