aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Kohaut2019-06-25 00:26:52 +0200
committerPeter Kohaut2019-06-25 00:26:52 +0200
commit20cc2c42ba083c36e13cf20ed131bf154bb4017f (patch)
tree5a3b2bf68d0767af4f15116093113bcf41d29a38
parentdd0c0302782246d50290edd8681f03033078254c (diff)
downloadscummvm-rg350-20cc2c42ba083c36e13cf20ed131bf154bb4017f.tar.gz
scummvm-rg350-20cc2c42ba083c36e13cf20ed131bf154bb4017f.tar.bz2
scummvm-rg350-20cc2c42ba083c36e13cf20ed131bf154bb4017f.zip
BLADERUNNER: Fix Fish dealer in chapter 5
Fixes a wrong state for fish dealer which will end up showing her up in chapter 5, but her model is not included in CDFRAMES.DAT for chapter 5, that would lead to an error / engine crash.
-rw-r--r--engines/bladerunner/script/ai/fish_dealer.cpp49
1 files changed, 30 insertions, 19 deletions
diff --git a/engines/bladerunner/script/ai/fish_dealer.cpp b/engines/bladerunner/script/ai/fish_dealer.cpp
index d7f517c984..b7088a8e1a 100644
--- a/engines/bladerunner/script/ai/fish_dealer.cpp
+++ b/engines/bladerunner/script/ai/fish_dealer.cpp
@@ -41,37 +41,43 @@ void AIScriptFishDealer::Initialize() {
}
bool AIScriptFishDealer::Update() {
- if (Global_Variable_Query(kVariableChapter) == 5 && Actor_Query_Goal_Number(kActorFishDealer) < 400) {
+#if BLADERUNNER_ORIGINAL_BUGS
+ if (Global_Variable_Query(kVariableChapter) == 5
+ && Actor_Query_Goal_Number(kActorFishDealer) < 400
+ ) {
Actor_Set_Goal_Number(kActorFishDealer, 400);
-
return true;
- }
-#if BLADERUNNER_ORIGINAL_BUGS
- else if (Player_Query_Current_Scene()
- || Actor_Query_Goal_Number(kActorFishDealer) == 2
- || Actor_Query_Goal_Number(kActorFishDealer) == 1
- || Actor_Query_Goal_Number(kActorFishDealer) == 400) {
- return false;
- } else {
- Actor_Set_Goal_Number(kActorFishDealer, 1);
+ } else if (Player_Query_Current_Scene() == kSceneAR01
+ && Actor_Query_Goal_Number(kActorFishDealer) != 1
+ && Actor_Query_Goal_Number(kActorFishDealer) != 2
+ && Actor_Query_Goal_Number(kActorFishDealer) != 400
+ ) {
+ Actor_Set_Goal_Number(kActorFishDealer, 1);
return true;
}
+ return false;
#else
- // prevent Fish Dealer from blinking out while McCoy is flying out from Animoid
- else if (Actor_Query_Goal_Number(kActorFishDealer) == 400
- || ( Player_Query_Current_Scene() != kSceneAR01 )) {
- return false;
- }
- else {
+ if (Global_Variable_Query(kVariableChapter) < 5) {
+ // prevent Fish Dealer from blinking out while McCoy is flying out from Animoid
if (Player_Query_Current_Scene() == kSceneAR01
- && Actor_Query_Goal_Number(kActorFishDealer) == 3) {
+ && Actor_Query_Goal_Number(kActorFishDealer) == 3
+ ) {
Actor_Set_Goal_Number(kActorFishDealer, 1);
+ return true;
+ }
+ } else {
+ if (Actor_Query_Goal_Number(kActorFishDealer) < 400) {
+ Actor_Set_Goal_Number(kActorFishDealer, 400);
+ } else if (Actor_Query_In_Set(kActorFishDealer, kSetAR01_AR02)) {
+ // Remove the fish dealer from AR01 if she is still there in chapter 5,
+ // this can happen only with older save games.
+ GoalChanged(400, 400);
}
return true;
}
+ return false;
#endif // BLADERUNNER_ORIGINAL_BUGS
-
}
void AIScriptFishDealer::TimerExpired(int timer) {
@@ -168,6 +174,11 @@ bool AIScriptFishDealer::GoalChanged(int currentGoalNumber, int newGoalNumber) {
return true;
case 400:
+#if !BLADERUNNER_ORIGINAL_BUGS
+ // Movement truck is not reset and she might end-up showing up in AR01 after all.
+ // This will lead to a issue with CDFRAMES in chapter 5
+ AI_Movement_Track_Flush(kActorFishDealer);
+#endif
Actor_Put_In_Set(kActorFishDealer, kSetFreeSlotH);
Actor_Set_At_Waypoint(kActorFishDealer, 40, 0);
return true;