aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/script
diff options
context:
space:
mode:
authorThanasis Antoniou2019-08-13 21:02:23 +0300
committerThanasis Antoniou2019-08-13 21:04:18 +0300
commit67fd0ca34a4fe87cd85a09562ab938853adf314f (patch)
treeaaa133d9c73bf6fad8927f59dc92c6432ecbd59a /engines/bladerunner/script
parente609d0247cfb1250f86072b53138d681cc11c6c0 (diff)
downloadscummvm-rg350-67fd0ca34a4fe87cd85a09562ab938853adf314f.tar.gz
scummvm-rg350-67fd0ca34a4fe87cd85a09562ab938853adf314f.tar.bz2
scummvm-rg350-67fd0ca34a4fe87cd85a09562ab938853adf314f.zip
BLADERUNNER: Prevent Replicants from despawning from the moonbus
All Replicants get a new goal now inside the moonbus, and movement flush This is to prevent earlier scripts that had them "walking around" from kicking in (this was mainly a bug for the twins) but is applied to everyone (except Clovis and Sadik) for conformance
Diffstat (limited to 'engines/bladerunner/script')
-rw-r--r--engines/bladerunner/script/ai/luther.cpp2
-rw-r--r--engines/bladerunner/script/scene/kp07.cpp35
-rw-r--r--engines/bladerunner/script/scene/ug01.cpp2
3 files changed, 37 insertions, 2 deletions
diff --git a/engines/bladerunner/script/ai/luther.cpp b/engines/bladerunner/script/ai/luther.cpp
index 694dc6d2b2..2957dcc763 100644
--- a/engines/bladerunner/script/ai/luther.cpp
+++ b/engines/bladerunner/script/ai/luther.cpp
@@ -57,7 +57,7 @@ bool AIScriptLuther::Update() {
}
if (Actor_Query_Goal_Number(kActorLuther) == kGoalLutherDefault
- && Actor_Query_Goal_Number(kActorLuther) != kGoalLutherDead
+ && Actor_Query_Goal_Number(kActorLuther) != kGoalLutherDead // A bug? this is redundant
) {
Actor_Set_Goal_Number(kActorLuther, kGoalLutherMoveAround);
return false;
diff --git a/engines/bladerunner/script/scene/kp07.cpp b/engines/bladerunner/script/scene/kp07.cpp
index 0643428644..880c3f2682 100644
--- a/engines/bladerunner/script/scene/kp07.cpp
+++ b/engines/bladerunner/script/scene/kp07.cpp
@@ -35,6 +35,16 @@ void SceneScriptKP07::InitializeScene() {
if (Game_Flag_Query(kFlagDektoraIsReplicant)
&& Actor_Query_Goal_Number(kActorDektora) < kGoalDektoraGone
) {
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ if (Game_Flag_Query(kFlagNR11DektoraBurning)) {
+ Game_Flag_Reset(kFlagNR11DektoraBurning); // resolves a bug of an original game, where Dektora would default to burning state
+ Actor_Change_Animation_Mode(kActorDektora, kAnimationModeTalk); // dummy animation change to ensure that the next will trigger the mode change case
+ Actor_Change_Animation_Mode(kActorDektora, kAnimationModeIdle);
+ }
+ AI_Movement_Track_Flush(kActorDektora);
+ Actor_Set_Goal_Number(kActorDektora, kGoalDektoraKP07Wait); // new clear goal
+#endif // BLADERUNNER_ORIGINAL_BUGS
Actor_Set_Targetable(kActorDektora, true);
Global_Variable_Increment(kVariableReplicantsSurvivorsAtMoonbus, 1);
Actor_Put_In_Set(kActorDektora, kSetKP07);
@@ -42,6 +52,11 @@ void SceneScriptKP07::InitializeScene() {
}
if (Actor_Query_Goal_Number(kActorZuben) < kGoalZubenGone) {
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ AI_Movement_Track_Flush(kActorZuben);
+ Actor_Set_Goal_Number(kActorZuben, kGoalZubenKP07Wait); // new clear goal
+#endif // BLADERUNNER_ORIGINAL_BUGS
Global_Variable_Increment(kVariableReplicantsSurvivorsAtMoonbus, 1);
Actor_Set_Targetable(kActorZuben, true);
Actor_Put_In_Set(kActorZuben, kSetKP07);
@@ -51,6 +66,11 @@ void SceneScriptKP07::InitializeScene() {
if (Game_Flag_Query(kFlagIzoIsReplicant)
&& Actor_Query_Goal_Number(kActorIzo) < 599
) {
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ AI_Movement_Track_Flush(kActorIzo);
+ Actor_Set_Goal_Number(kActorIzo, kGoalIzoKP07Wait); // new clear goal
+#endif // BLADERUNNER_ORIGINAL_BUGS
Global_Variable_Increment(kVariableReplicantsSurvivorsAtMoonbus, 1);
Actor_Set_Targetable(kActorIzo, true);
Actor_Put_In_Set(kActorIzo, kSetKP07);
@@ -60,6 +80,11 @@ void SceneScriptKP07::InitializeScene() {
if (Game_Flag_Query(kFlagGordoIsReplicant)
&& Actor_Query_Goal_Number(kActorGordo) < kGoalGordoGone
) {
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ AI_Movement_Track_Flush(kActorGordo);
+ Actor_Set_Goal_Number(kActorGordo, kGoalGordoKP07Wait); // new clear goal
+#endif // BLADERUNNER_ORIGINAL_BUGS
Global_Variable_Increment(kVariableReplicantsSurvivorsAtMoonbus, 1);
Actor_Set_Targetable(kActorGordo, true);
Actor_Put_In_Set(kActorGordo, kSetKP07);
@@ -69,12 +94,22 @@ void SceneScriptKP07::InitializeScene() {
if (Game_Flag_Query(kFlagLucyIsReplicant)
&& Actor_Query_Goal_Number(kActorLucy) < kGoalLucyGone
) {
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ AI_Movement_Track_Flush(kActorLucy);
+ Actor_Set_Goal_Number(kActorLucy, kGoalLucyKP07Wait); // new clear goal
+#endif // BLADERUNNER_ORIGINAL_BUGS
Global_Variable_Increment(kVariableReplicantsSurvivorsAtMoonbus, 1);
Actor_Put_In_Set(kActorLucy, kSetKP07);
Actor_Set_At_XYZ(kActorLucy, 78.0f, -41.52f, -119.0f, 659);
}
if (Actor_Query_Goal_Number(kActorLuther) < kGoalLutherGone) {
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ AI_Movement_Track_Flush(kActorLuther);
+ Actor_Set_Goal_Number(kActorLuther, kGoalLutherKP07Wait); // new goal to avoid resuming his walking around routine
+#endif // BLADERUNNER_ORIGINAL_BUGS
Global_Variable_Increment(kVariableReplicantsSurvivorsAtMoonbus, 1);
Actor_Put_In_Set(kActorLuther, kSetKP07);
Actor_Set_At_XYZ(kActorLuther, -47.0f, 0.0f, 151.0f, 531);
diff --git a/engines/bladerunner/script/scene/ug01.cpp b/engines/bladerunner/script/scene/ug01.cpp
index 365463172a..b2fbc51f4c 100644
--- a/engines/bladerunner/script/scene/ug01.cpp
+++ b/engines/bladerunner/script/scene/ug01.cpp
@@ -199,7 +199,7 @@ void SceneScriptUG01::PlayerWalkedIn() {
if (Actor_Query_Goal_Number(kActorLucy) == kGoalLucyUG01Wait) {
Music_Play(kMusicLoveSong, 35, 0, 3, -1, 0, 0);
- Actor_Set_Goal_Number(kActorLucy, 311);
+ Actor_Set_Goal_Number(kActorLucy, kGoalLucyUG01VoightKampff);
}
//return false;
}