aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorThanasis Antoniou2019-07-01 21:02:23 +0300
committerThanasis Antoniou2019-07-01 21:03:03 +0300
commitbfcd59571ee0e742cd74ec172301056a17c6c5ba (patch)
treed34b66485e6b8fe306cc101b4f3bbf40b1557f2d /engines
parentbc056feddde50fbefc8147f667f95524ce46b622 (diff)
downloadscummvm-rg350-bfcd59571ee0e742cd74ec172301056a17c6c5ba.tar.gz
scummvm-rg350-bfcd59571ee0e742cd74ec172301056a17c6c5ba.tar.bz2
scummvm-rg350-bfcd59571ee0e742cd74ec172301056a17c6c5ba.zip
BLADERUNNER: Rat AI bug fixes
Most prominent bugs fixed is behavior in KP02 and not attacking when near McCoy
Diffstat (limited to 'engines')
-rw-r--r--engines/bladerunner/game_constants.h16
-rw-r--r--engines/bladerunner/script/ai/clovis.cpp3
-rw-r--r--engines/bladerunner/script/ai/free_slot_a.cpp166
-rw-r--r--engines/bladerunner/script/ai/free_slot_b.cpp168
-rw-r--r--engines/bladerunner/script/ai_script.h2
-rw-r--r--engines/bladerunner/script/scene/kp02.cpp17
-rw-r--r--engines/bladerunner/script/scene/ug07.cpp10
-rw-r--r--engines/bladerunner/script/scene/ug15.cpp6
8 files changed, 269 insertions, 119 deletions
diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index 28eb244d53..2010a75318 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -2595,7 +2595,8 @@ enum GoalCrazyLegs {
kGoalCrazyLegsIsArrested = 699
};
-enum GoalFreeSlotA { // Rat
+enum GoalFreeSlotA { // Rat A
+ kGoalFreeSlotADefault = 0,
kGoalFreeSlotAUG15Wait = 300,
kGoalFreeSlotAUG15WalkOut = 301,
kGoalFreeSlotAUG15RunToOtherSide = 302,
@@ -2607,9 +2608,22 @@ enum GoalFreeSlotA { // Rat
kGoalFreeSlotAUG15Die = 305,
kGoalFreeSlotAUG15Fall = 309,
kGoalFreeSlotAUG15Prepare = 310,
+ kGoalFreeSlotAAct5Default = 400,
+ kGoalFreeSlotAAct5Prepare = 405,
+ kGoalFreeSlotAAct5KP02Attack = 406,
kGoalFreeSlotAGone = 599
};
+enum GoalFreeSlotB { // Rat B
+ kGoalFreeSlotBAct4Default = 300,
+ kGoalFreeSlotBAct4WalkAround = 301,
+ kGoalFreeSlotBAct4AttackMcCoy = 302,
+ kGoalFreeSlotBAct5Default = 400,
+ kGoalFreeSlotBAct5Prepare = 405,
+ kGoalFreeSlotBAct5KP02Attack = 406,
+ kGoalFreeSlotBGone = 599
+};
+
enum GoalMaggie {
kGoalMaggieMA02Default = 0,
kGoalMaggieMA02WalkToEntrance = 1,
diff --git a/engines/bladerunner/script/ai/clovis.cpp b/engines/bladerunner/script/ai/clovis.cpp
index f054ce3d50..3c63244f82 100644
--- a/engines/bladerunner/script/ai/clovis.cpp
+++ b/engines/bladerunner/script/ai/clovis.cpp
@@ -318,8 +318,11 @@ bool AIScriptClovis::GoalChanged(int currentGoalNumber, int newGoalNumber) {
return true;
case kGoalClovisUG18SadikWillShootGuzza:
+ // fall through
case kGoalClovisUG18SadikIsShootingGuzza:
+ // fall through
case kGoalClovisUG18GuzzaDied:
+ // fall through
case kGoalClovisUG18Leave:
return true;
diff --git a/engines/bladerunner/script/ai/free_slot_a.cpp b/engines/bladerunner/script/ai/free_slot_a.cpp
index 4f823dfe53..78f886e002 100644
--- a/engines/bladerunner/script/ai/free_slot_a.cpp
+++ b/engines/bladerunner/script/ai/free_slot_a.cpp
@@ -21,6 +21,7 @@
*/
#include "bladerunner/script/ai_script.h"
+//#include "common/debug.h"
namespace BladeRunner {
@@ -42,23 +43,24 @@ void AIScriptFreeSlotA::Initialize() {
_var2 = 1;
_fallSpeed = 0.0f;
_fallHeightCurrent = 0.0f; // not initialized in original
- _fallHeightTarget = 0.0f; // not initialized in original
+ _fallHeightTarget = 0.0f; // not initialized in original
World_Waypoint_Set(525, kSetKP02, -780.0f, -615.49f, 2611.0f);
+ // TODO: A bug? world waypoint 526 is unused
World_Waypoint_Set(526, kSetKP02, -780.0f, -615.49f, 2759.0f);
}
bool AIScriptFreeSlotA::Update() {
switch (Global_Variable_Query(kVariableChapter)) {
case 4:
+ // Act 4
if (Actor_Query_Which_Set_In(kActorMcCoy) == kSetUG15
&& Actor_Query_Which_Set_In(kActorFreeSlotA) == kSetUG15
) {
int goal = Actor_Query_Goal_Number(kActorFreeSlotA);
if ((goal == kGoalFreeSlotAUG15RunToOtherSide
- || goal == kGoalFreeSlotAUG15RunBack
- )
- && Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotA, kActorMcCoy) <= 48
+ || goal == kGoalFreeSlotAUG15RunBack)
+ && Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotA, kActorMcCoy) <= 48
) {
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAUG15Attack);
} else if (goal == kGoalFreeSlotAUG15Fall) {
@@ -70,21 +72,28 @@ bool AIScriptFreeSlotA::Update() {
_fallSpeed -= 0.2f;
} else {
_fallHeightCurrent = _fallHeightTarget;
- Actor_Set_Goal_Number(kActorFreeSlotA, 0);
+ Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotADefault);
}
Actor_Set_At_XYZ(kActorFreeSlotA, x, _fallHeightCurrent, z, Actor_Query_Facing_1024(kActorFreeSlotA));
}
-
return true;
}
switch (Actor_Query_Goal_Number(kActorFreeSlotA)) {
case kGoalFreeSlotAWalkAround:
+#if BLADERUNNER_ORIGINAL_BUGS
if (Actor_Query_Which_Set_In(kActorFreeSlotA) == Player_Query_Current_Set()
&& Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotA, kActorMcCoy) <= 48
) {
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAttackMcCoy);
}
+#else
+ if (Actor_Query_Which_Set_In(kActorFreeSlotA) == Player_Query_Current_Set()
+ && Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotA, kActorMcCoy) <= 54
+ ) {
+ Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAttackMcCoy);
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
break;
case kGoalFreeSlotAAttackMcCoy:
@@ -97,7 +106,7 @@ bool AIScriptFreeSlotA::Update() {
if (Actor_Query_Which_Set_In(kActorFreeSlotA) != Player_Query_Current_Set()) {
Game_Flag_Reset(kFlagRatWalkingAround);
Game_Flag_Reset(kFlagUG15BridgeWillBreak);
- Actor_Set_Goal_Number(kActorFreeSlotA, 0);
+ Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotADefault);
}
break;
@@ -112,14 +121,38 @@ bool AIScriptFreeSlotA::Update() {
return true;
case 5:
- if (Actor_Query_Goal_Number(kActorFreeSlotA) < 400) {
+ // Act 5
+ if (Actor_Query_Goal_Number(kActorFreeSlotA) < kGoalFreeSlotAAct5Default) {
AI_Movement_Track_Flush(kActorFreeSlotA);
- Actor_Set_Goal_Number(kActorFreeSlotA, 400);
- } else if (Actor_Query_Goal_Number(kActorFreeSlotA) == 405
- && Actor_Query_Which_Set_In(kActorMcCoy) == kSceneKP05
- ) {
+ Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Default);
+ } else {
+#if BLADERUNNER_ORIGINAL_BUGS
+ if (Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAAct5Prepare
+ && Actor_Query_Which_Set_In(kActorMcCoy) == kSetKP02
+ ) {
+ Actor_Set_Targetable(kActorFreeSlotA, true);
+ Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5KP02Attack);
+ }
+#else
+ // copying the behavior of Rat B (kActorFreeSlotB) because it works without the bug
+ // Fixes the bug where the Rat A is killed in KP02 but when McCoy re-enters it is there alive
+ // in idle mode and non-target-able
+ if (Actor_Query_Goal_Number(kActorFreeSlotA) != kGoalFreeSlotAAct5Prepare
+ || Actor_Query_Which_Set_In(kActorMcCoy) != kSetKP02
+ ) {
+ if (Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAGone) {
+ if (Actor_Query_Which_Set_In(kActorFreeSlotA) != Player_Query_Current_Set()) {
+ Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotA);
+ Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Default);
+ return true;
+ }
+ }
+ return false;
+ }
+ Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5KP02Attack);
Actor_Set_Targetable(kActorFreeSlotA, true);
- Actor_Set_Goal_Number(kActorFreeSlotA, 406);
+ return true;
+#endif // BLADERUNNER_ORIGINAL_BUGS
}
return true;
@@ -133,6 +166,7 @@ void AIScriptFreeSlotA::TimerExpired(int timer) {
}
void AIScriptFreeSlotA::CompletedMovementTrack() {
+// debug("Rat A completed move with Goal: %d", Actor_Query_Goal_Number(kActorFreeSlotA));
switch (Actor_Query_Goal_Number(kActorFreeSlotA)) {
case kGoalFreeSlotAUG15WalkOut:
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAUG15RunToOtherSide);
@@ -154,11 +188,11 @@ void AIScriptFreeSlotA::CompletedMovementTrack() {
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAWalkAround);
break;
- case 400:
- Actor_Set_Goal_Number(kActorFreeSlotA, 405);
+ case kGoalFreeSlotAAct5Default:
+ Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Prepare);
break;
- case 406:
+ case kGoalFreeSlotAAct5KP02Attack:
Non_Player_Actor_Combat_Mode_On(kActorFreeSlotA, kActorCombatStateIdle, false, kActorMcCoy, 8, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, 0, 0, 100, 5, 300, false);
break;
@@ -194,6 +228,18 @@ void AIScriptFreeSlotA::OtherAgentEnteredThisScene(int otherActorId) {
}
void AIScriptFreeSlotA::OtherAgentExitedThisScene(int otherActorId) {
+#if !BLADERUNNER_ORIGINAL_BUGS
+ if (otherActorId == kActorMcCoy && Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAGone) {
+ if (Global_Variable_Query(kVariableChapter == 4)) {
+ Game_Flag_Reset(kFlagRatWalkingAround);
+ Game_Flag_Reset(kFlagUG15BridgeWillBreak);
+ Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotADefault);
+ } else if (Global_Variable_Query(kVariableChapter == 5)) {
+ Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotA);
+ Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Default);
+ }
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
// return false;
}
@@ -225,6 +271,7 @@ int AIScriptFreeSlotA::GetFriendlinessModifierIfGetsClue(int otherActorId, int c
}
bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
+// debug("Rat A goal changed from %d to: %d", currentGoalNumber, newGoalNumber);
switch (newGoalNumber) {
case kGoalFreeSlotAUG15Wait:
AI_Movement_Track_Flush(kActorFreeSlotA);
@@ -233,6 +280,7 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
break;
case kGoalFreeSlotAUG15WalkOut:
+ // kSetUG15
Actor_Force_Stop_Walking(kActorMcCoy);
AI_Movement_Track_Flush(kActorFreeSlotA);
World_Waypoint_Set(444, kSetUG15, -48.75f, 44.66f, 87.57f);
@@ -241,6 +289,7 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
break;
case kGoalFreeSlotAUG15RunToOtherSide:
+ // kSetUG15
AI_Movement_Track_Flush(kActorFreeSlotA);
World_Waypoint_Set(444, kSetUG15, -237.0f, 48.07f, 208.0f);
AI_Movement_Track_Append(kActorFreeSlotA, 444, 1);
@@ -249,6 +298,7 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
break;
case kGoalFreeSlotAUG15RunBack:
+ // kSetUG15
AI_Movement_Track_Flush(kActorFreeSlotA);
World_Waypoint_Set(444, kSetUG15, 3.52f, 52.28f, 90.68f);
AI_Movement_Track_Append(kActorFreeSlotA, 444, 0);
@@ -279,6 +329,7 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
break;
case kGoalFreeSlotAWalkAroundRestart:
+ // kSetFreeSlotG
AI_Movement_Track_Flush(kActorFreeSlotA);
AI_Movement_Track_Append(kActorFreeSlotA, 39, 1);
AI_Movement_Track_Repeat(kActorFreeSlotA);
@@ -310,12 +361,14 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAUG15Wait);
break;
- case 400:
+ case kGoalFreeSlotAAct5Default:
+ // kSetFreeSlotG
AI_Movement_Track_Append(kActorFreeSlotA, 39, 0);
AI_Movement_Track_Repeat(kActorFreeSlotA);
break;
- case 406:
+ case kGoalFreeSlotAAct5KP02Attack:
+ // kSetKP02
AI_Movement_Track_Flush(kActorFreeSlotA);
AI_Movement_Track_Append(kActorFreeSlotA, 525, 0);
AI_Movement_Track_Repeat(kActorFreeSlotA);
@@ -529,7 +582,7 @@ bool AIScriptFreeSlotA::ReachedMovementTrackWaypoint(int waypointId) {
if (waypointId == 465) {
Actor_Change_Animation_Mode(kActorFreeSlotA, 43);
}
- } else if (Actor_Query_Goal_Number(kActorFreeSlotA) == 302) {
+ } else if (Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAUG15RunToOtherSide) {
Actor_Face_Actor(kActorFreeSlotA, kActorMcCoy, true);
}
@@ -556,15 +609,17 @@ void AIScriptFreeSlotA::checkIfOnBridge() {
void AIScriptFreeSlotA::goToRandomUGxx() {
switch (Random_Query(1, 14)) {
case 1:
+ // kSetUG01
AI_Movement_Track_Append(kActorFreeSlotA, 450, 1);
AI_Movement_Track_Append(kActorFreeSlotA, 451, 5);
AI_Movement_Track_Append(kActorFreeSlotA, 450, 0);
break;
case 2:
+ // kSetUG01
World_Waypoint_Set(463, kSetUG01, 144.98f, -50.13f, -175.75f);
- World_Waypoint_Set(464, kSetUG01, 105.6f, -50.13f, -578.46f);
- World_Waypoint_Set(465, kSetUG01, 62.0f, -50.13f, -574.0f);
+ World_Waypoint_Set(464, kSetUG01, 105.6f, -50.13f, -578.46f);
+ World_Waypoint_Set(465, kSetUG01, 62.0f, -50.13f, -574.0f);
AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
AI_Movement_Track_Append(kActorFreeSlotA, 465, 5);
@@ -572,85 +627,106 @@ void AIScriptFreeSlotA::goToRandomUGxx() {
break;
case 3:
+ // kSetUG04
AI_Movement_Track_Append(kActorFreeSlotA, 446, 15);
- AI_Movement_Track_Append(kActorFreeSlotA, 447, 1);
- AI_Movement_Track_Append(kActorFreeSlotA, 449, 1);
- AI_Movement_Track_Append(kActorFreeSlotA, 448, 2);
- AI_Movement_Track_Append(kActorFreeSlotA, 449, 0);
+ AI_Movement_Track_Append(kActorFreeSlotA, 447, 1);
+ AI_Movement_Track_Append(kActorFreeSlotA, 449, 1);
+ AI_Movement_Track_Append(kActorFreeSlotA, 448, 2);
+ AI_Movement_Track_Append(kActorFreeSlotA, 449, 0);
break;
case 4:
- World_Waypoint_Set(463, kSetUG04, -22.7f, 6.39f, 33.12f);
- World_Waypoint_Set(464, kSetUG04, -6.70f, -1.74f, -362.88f);
- World_Waypoint_Set(465, kSetUG04, 164.0f, 11.87f, -1013.0f);
+ // kSetUG04
+ World_Waypoint_Set(463, kSetUG04, -22.7f, 6.39f, 33.12f);
+ World_Waypoint_Set(464, kSetUG04, -6.70f, -1.74f, -362.88f);
+ World_Waypoint_Set(465, kSetUG04, 164.0f, 11.87f, -1013.0f);
AI_Movement_Track_Append(kActorFreeSlotA, 463, 2);
AI_Movement_Track_Append(kActorFreeSlotA, 464, 0);
AI_Movement_Track_Append(kActorFreeSlotA, 465, 0);
break;
case 5:
+ // kSetUG05
AI_Movement_Track_Append(kActorFreeSlotA, 457, 15);
- AI_Movement_Track_Append(kActorFreeSlotA, 458, 0);
+ AI_Movement_Track_Append(kActorFreeSlotA, 458, 0);
AI_Movement_Track_Append(kActorFreeSlotA, 459, 15);
break;
case 6:
+ // kSetUG06
AI_Movement_Track_Append(kActorFreeSlotA, 460, 15);
- AI_Movement_Track_Append(kActorFreeSlotA, 461, 5);
+ AI_Movement_Track_Append(kActorFreeSlotA, 461, 5);
AI_Movement_Track_Append(kActorFreeSlotA, 460, 15);
break;
case 7:
+ // kSetUG07 or kSetFreeSlotG
if (Actor_Query_In_Set(kActorClovis, kSetUG07)) {
- AI_Movement_Track_Append(kActorFreeSlotA, 39, 10);
+ AI_Movement_Track_Append(kActorFreeSlotA, 39, 10); // kSetFreeSlotG
} else {
- World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
- World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
+ World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
+ World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
World_Waypoint_Set(465, kSetUG07, -164.78f, -12.21f, -832.08f);
AI_Movement_Track_Append(kActorFreeSlotA, 463, 5);
AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
+ // TODO: A bug? the waypoint 465 is created but is unused
}
break;
case 8:
- World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
- World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
+ // kSetUG07
+ // TODO a bug? Maybe also check here if Clovis is in the set
+ // like in case 7
+ World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
+ World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
World_Waypoint_Set(465, kSetUG07, -164.78f, -12.21f, -832.08f);
AI_Movement_Track_Append(kActorFreeSlotA, 464, 5);
AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
+ // TODO: A bug? the waypoint 465 is created but is unused
break;
case 9:
- World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
- World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
+ // kSetUG07
+ // TODO a bug? Maybe also check here if Clovis is in the set
+ // like in case 7
+ World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
+ World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
World_Waypoint_Set(465, kSetUG07, -164.78f, -12.21f, -832.08f);
AI_Movement_Track_Append(kActorFreeSlotA, 464, 5);
AI_Movement_Track_Append(kActorFreeSlotA, 465, 1);
+ // TODO: A bug? the waypoint 463 is created but is unused
break;
case 10:
- World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
- World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
+ // kSetUG07
+ // TODO a bug? Maybe also check here if Clovis is in the set
+ // like in case 7
+ World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
+ World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
World_Waypoint_Set(465, kSetUG07, -164.78f, -12.21f, -832.08f);
AI_Movement_Track_Append(kActorFreeSlotA, 465, 5);
AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
+ // TODO: A bug? the waypoint 463 is created but is unused
break;
case 11:
- World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
+ // kSetUG09
+ World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
World_Waypoint_Set(464, kSetUG09, -149.0f, 156.94f, -498.0f);
AI_Movement_Track_Append(kActorFreeSlotA, 463, 5);
AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
break;
case 12:
- World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
+ // kSetUG09
+ World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
World_Waypoint_Set(464, kSetUG09, -149.0f, 156.94f, -498.0f);
AI_Movement_Track_Append(kActorFreeSlotA, 464, 5);
AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
break;
case 13:
+ // kSetUG09
#if BLADERUNNER_ORIGINAL_BUGS
// this makes the rat appear on the pipe (top left) but this is buggy
// since it appears floating there
@@ -661,7 +737,7 @@ void AIScriptFreeSlotA::goToRandomUGxx() {
AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
#else
// replacing with something more normal
- World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
+ World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
World_Waypoint_Set(464, kSetUG09, -29.60f, 156.94f, -498.0f);
AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
@@ -670,8 +746,9 @@ void AIScriptFreeSlotA::goToRandomUGxx() {
break;
case 14:
- World_Waypoint_Set(463, kSetUG12, -360.67f, 21.39f, 517.55f);
- World_Waypoint_Set(464, kSetUG12, -250.67f, 21.39f, 477.55f);
+ // kSetUG12
+ World_Waypoint_Set(463, kSetUG12, -360.67f, 21.39f, 517.55f);
+ World_Waypoint_Set(464, kSetUG12, -250.67f, 21.39f, 477.55f);
World_Waypoint_Set(465, kSetUG12, -248.67f, 21.39f, -1454.45f);
AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
AI_Movement_Track_Append(kActorFreeSlotA, 464, 8);
@@ -679,6 +756,7 @@ void AIScriptFreeSlotA::goToRandomUGxx() {
break;
default:
+ // kSetFreeSlotG
AI_Movement_Track_Append(kActorFreeSlotA, 39, Random_Query(1, 10));
break;
}
diff --git a/engines/bladerunner/script/ai/free_slot_b.cpp b/engines/bladerunner/script/ai/free_slot_b.cpp
index dd4ce552de..fa8d17f046 100644
--- a/engines/bladerunner/script/ai/free_slot_b.cpp
+++ b/engines/bladerunner/script/ai/free_slot_b.cpp
@@ -21,6 +21,7 @@
*/
#include "bladerunner/script/ai_script.h"
+//#include "common/debug.h"
namespace BladeRunner {
@@ -38,7 +39,8 @@ void AIScriptFreeSlotB::Initialize() {
_var1 = 0;
_var2 = 1;
- World_Waypoint_Set(527, kSetKP02, -468.46f, -616.58f, 2840.60f);
+ World_Waypoint_Set(527, kSetKP02, -468.46f, -616.58f, 2840.60f);
+ // TODO: A bug? world waypoints 528, 529 are unused
World_Waypoint_Set(528, kSetKP02, -1024.46f, -615.49f, 2928.60f);
World_Waypoint_Set(529, kSetKP02, -1024.46f, -615.49f, 2788.60f);
}
@@ -50,53 +52,65 @@ bool AIScriptFreeSlotB::Update() {
if (Global_Variable_Query(kVariableChapter) == 4) {
switch (Actor_Query_Goal_Number(kActorFreeSlotB)) {
- case 300:
- Actor_Set_Goal_Number(kActorFreeSlotB, 301);
+ case kGoalFreeSlotBAct4Default:
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4WalkAround);
Actor_Set_Targetable(kActorFreeSlotB, true);
break;
- case 301:
+ case kGoalFreeSlotBAct4WalkAround:
+#if BLADERUNNER_ORIGINAL_BUGS
if (Actor_Query_Which_Set_In(kActorFreeSlotB) == Player_Query_Current_Set()
- && Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotB, kActorMcCoy) <= 48) {
- Actor_Set_Goal_Number(kActorFreeSlotB, 302);
+ && Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotB, kActorMcCoy) <= 48
+ ) {
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4AttackMcCoy);
}
+#else
+ if (Actor_Query_Which_Set_In(kActorFreeSlotB) == Player_Query_Current_Set()
+ && Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotB, kActorMcCoy) <= 54
+ ) {
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4AttackMcCoy);
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
break;
- case 302:
+ case kGoalFreeSlotBAct4AttackMcCoy:
if (Actor_Query_Which_Set_In(kActorFreeSlotB) != Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorFreeSlotB, 301);
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4WalkAround);
}
break;
- case 599:
+ case kGoalFreeSlotBGone:
if (Actor_Query_Which_Set_In(kActorFreeSlotB) != Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorFreeSlotB, 300);
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4Default);
}
break;
default:
- Actor_Set_Goal_Number(kActorFreeSlotB, 300);
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4Default);
break;
}
return false;
}
- if (Actor_Query_Goal_Number(kActorFreeSlotB) < 400) {
+ // if in Act 5
+ if (Actor_Query_Goal_Number(kActorFreeSlotB) < kGoalFreeSlotBAct5Default) {
AI_Movement_Track_Flush(kActorFreeSlotB);
- Actor_Set_Goal_Number(kActorFreeSlotB, 400);
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Default);
return true;
} else {
- if (Actor_Query_Goal_Number(kActorFreeSlotB) != 405 || Actor_Query_Which_Set_In(kActorMcCoy) != kSetKP02) {
- if (Actor_Query_Goal_Number(kActorFreeSlotB) == 599) {
+ if (Actor_Query_Goal_Number(kActorFreeSlotB) != kGoalFreeSlotBAct5Prepare
+ || Actor_Query_Which_Set_In(kActorMcCoy) != kSetKP02
+ ) {
+ if (Actor_Query_Goal_Number(kActorFreeSlotB) == kGoalFreeSlotBGone) {
if (Actor_Query_Which_Set_In(kActorFreeSlotB) != Player_Query_Current_Set()) {
Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotB);
- Actor_Set_Goal_Number(kActorFreeSlotB, 400);
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Default);
return true;
}
}
return false;
}
- Actor_Set_Goal_Number(kActorFreeSlotB, 406);
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5KP02Attack);
Actor_Set_Targetable(kActorFreeSlotB, true);
return true;
}
@@ -107,20 +121,21 @@ void AIScriptFreeSlotB::TimerExpired(int timer) {
}
void AIScriptFreeSlotB::CompletedMovementTrack() {
+// debug("Rat B completed move with Goal: %d", Actor_Query_Goal_Number(kActorFreeSlotB));
switch (Actor_Query_Goal_Number(kActorFreeSlotB)) {
- case 300:
- Actor_Set_Goal_Number(kActorFreeSlotB, 301);
+ case kGoalFreeSlotBAct4Default:
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4WalkAround);
break;
- case 301:
- Actor_Set_Goal_Number(kActorFreeSlotB, 300);
+ case kGoalFreeSlotBAct4WalkAround:
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4Default);
break;
- case 400:
- Actor_Set_Goal_Number(kActorFreeSlotB, 405);
+ case kGoalFreeSlotBAct5Default:
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Prepare);
break;
- case 406:
+ case kGoalFreeSlotBAct5KP02Attack:
Non_Player_Actor_Combat_Mode_On(kActorFreeSlotB, kActorCombatStateIdle, false, kActorMcCoy, 8, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, 0, 0, 100, 5, 300, false);
break;
@@ -136,7 +151,7 @@ void AIScriptFreeSlotB::ReceivedClue(int clueId, int fromActorId) {
}
void AIScriptFreeSlotB::ClickedByPlayer() {
- if (Actor_Query_Goal_Number(kActorFreeSlotB) != 599)
+ if (Actor_Query_Goal_Number(kActorFreeSlotB) != kGoalFreeSlotBGone)
return; //false;
Actor_Face_Actor(kActorMcCoy, kActorFreeSlotB, true);
@@ -156,6 +171,17 @@ void AIScriptFreeSlotB::OtherAgentEnteredThisScene(int otherActorId) {
}
void AIScriptFreeSlotB::OtherAgentExitedThisScene(int otherActorId) {
+#if !BLADERUNNER_ORIGINAL_BUGS
+ if (otherActorId == kActorMcCoy && Actor_Query_Goal_Number(kActorFreeSlotB) == kGoalFreeSlotBGone) {
+ if (Global_Variable_Query(kVariableChapter == 4)) {
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4Default);
+ } else if (Global_Variable_Query(kVariableChapter == 5)) {
+ Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotB);
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Default);
+ }
+ }
+
+#endif // BLADERUNNER_ORIGINAL_BUGS
// return false;
}
@@ -172,7 +198,7 @@ bool AIScriptFreeSlotB::ShotAtAndHit() {
}
void AIScriptFreeSlotB::Retired(int byActorId) {
- Actor_Set_Goal_Number(kActorFreeSlotB, 599);
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBGone);
}
int AIScriptFreeSlotB::GetFriendlinessModifierIfGetsClue(int otherActorId, int clueId) {
@@ -180,36 +206,40 @@ int AIScriptFreeSlotB::GetFriendlinessModifierIfGetsClue(int otherActorId, int c
}
bool AIScriptFreeSlotB::GoalChanged(int currentGoalNumber, int newGoalNumber) {
+// debug("Rat B goal changed from %d to: %d", currentGoalNumber, newGoalNumber);
switch (newGoalNumber) {
- case 300:
+ case kGoalFreeSlotBAct4Default:
+ // kSetFreeSlotG
AI_Movement_Track_Flush(kActorFreeSlotB);
AI_Movement_Track_Append(kActorFreeSlotB, 39, 2);
AI_Movement_Track_Repeat(kActorFreeSlotB);
break;
- case 301:
+ case kGoalFreeSlotBAct4WalkAround:
AI_Movement_Track_Flush(kActorFreeSlotB);
- processGoal301();
+ goToRandomUGxx();
AI_Movement_Track_Repeat(kActorFreeSlotB);
break;
- case 302:
+ case kGoalFreeSlotBAct4AttackMcCoy:
Actor_Set_Targetable(kActorFreeSlotB, true);
Non_Player_Actor_Combat_Mode_On(kActorFreeSlotB, kActorCombatStateIdle, false, kActorMcCoy, 8, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, 25, 0, 75, 5, 300, false);
break;
- case 400:
+ case kGoalFreeSlotBAct5Default:
+ // kSetFreeSlotG
AI_Movement_Track_Append(kActorFreeSlotB, 39, 0);
AI_Movement_Track_Repeat(kActorFreeSlotB);
break;
- case 406:
+ case kGoalFreeSlotBAct5KP02Attack:
+ // kSetKP02
AI_Movement_Track_Flush(kActorFreeSlotB);
AI_Movement_Track_Append(kActorFreeSlotB, 527, 0);
AI_Movement_Track_Repeat(kActorFreeSlotB);
break;
- case 599:
+ case kGoalFreeSlotBGone:
Actor_Set_Health(kActorFreeSlotB, 20, 20);
break;
@@ -426,18 +456,20 @@ void AIScriptFreeSlotB::FledCombat() {
// return false;
}
-void AIScriptFreeSlotB::processGoal301() {
+void AIScriptFreeSlotB::goToRandomUGxx() {
switch (Random_Query(1, 14)) {
case 1:
+ // kSetUG01
AI_Movement_Track_Append(kActorFreeSlotB, 450, 1);
AI_Movement_Track_Append(kActorFreeSlotB, 451, 5);
AI_Movement_Track_Append(kActorFreeSlotB, 450, 0);
break;
case 2:
+ // kSetUG01
World_Waypoint_Set(466, kSetUG01, 144.98f, -50.13f, -175.75f);
- World_Waypoint_Set(547, kSetUG01, 105.6f, -50.13f, -578.46f);
- World_Waypoint_Set(548, kSetUG01, 62.0f, -50.13f, -574.0f);
+ World_Waypoint_Set(547, kSetUG01, 105.6f, -50.13f, -578.46f);
+ World_Waypoint_Set(548, kSetUG01, 62.0f, -50.13f, -574.0f);
AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
AI_Movement_Track_Append(kActorFreeSlotB, 548, 5);
@@ -445,40 +477,45 @@ void AIScriptFreeSlotB::processGoal301() {
break;
case 3:
+ // kSetUG04
AI_Movement_Track_Append(kActorFreeSlotB, 446, 15);
- AI_Movement_Track_Append(kActorFreeSlotB, 447, 1);
- AI_Movement_Track_Append(kActorFreeSlotB, 449, 1);
- AI_Movement_Track_Append(kActorFreeSlotB, 448, 2);
- AI_Movement_Track_Append(kActorFreeSlotB, 449, 0);
+ AI_Movement_Track_Append(kActorFreeSlotB, 447, 1);
+ AI_Movement_Track_Append(kActorFreeSlotB, 449, 1);
+ AI_Movement_Track_Append(kActorFreeSlotB, 448, 2);
+ AI_Movement_Track_Append(kActorFreeSlotB, 449, 0);
break;
case 4:
- World_Waypoint_Set(466, kSetUG04, -22.70f, 6.39f, 33.12f);
- World_Waypoint_Set(547, kSetUG04, -6.70f, -1.74f, -362.88f);
- World_Waypoint_Set(548, kSetUG04, 164.0f, 11.87f, -1013.0f);
+ // kSetUG04
+ World_Waypoint_Set(466, kSetUG04, -22.70f, 6.39f, 33.12f);
+ World_Waypoint_Set(547, kSetUG04, -6.70f, -1.74f, -362.88f);
+ World_Waypoint_Set(548, kSetUG04, 164.0f, 11.87f, -1013.0f);
AI_Movement_Track_Append(kActorFreeSlotB, 466, 2);
AI_Movement_Track_Append(kActorFreeSlotB, 547, 0);
AI_Movement_Track_Append(kActorFreeSlotB, 548, 0);
break;
case 5:
+ // kSetUG05
AI_Movement_Track_Append(kActorFreeSlotB, 457, 15);
- AI_Movement_Track_Append(kActorFreeSlotB, 458, 0);
+ AI_Movement_Track_Append(kActorFreeSlotB, 458, 0);
AI_Movement_Track_Append(kActorFreeSlotB, 459, 15);
break;
case 6:
+ // kSetUG06
AI_Movement_Track_Append(kActorFreeSlotB, 460, 15);
- AI_Movement_Track_Append(kActorFreeSlotB, 461, 5);
+ AI_Movement_Track_Append(kActorFreeSlotB, 461, 5);
AI_Movement_Track_Append(kActorFreeSlotB, 460, 15);
break;
case 7:
+ // kSetUG07 or kSetFreeSlotG
if (Actor_Query_In_Set(kActorClovis, kSetUG07)) {
AI_Movement_Track_Append(kActorFreeSlotB, 39, 10);
} else {
- World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
- World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
+ World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
+ World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
World_Waypoint_Set(548, kSetUG07, -164.78f, -12.21f, -832.08f);
AI_Movement_Track_Append(kActorFreeSlotB, 466, 5);
AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
@@ -486,44 +523,59 @@ void AIScriptFreeSlotB::processGoal301() {
break;
case 8:
- World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
- World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
+ // kSetUG07
+ // TODO a bug? Maybe also check here if Clovis is in the set
+ // like in case 7
+ World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
+ World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
World_Waypoint_Set(548, kSetUG07, -164.78f, -12.21f, -832.08f);
AI_Movement_Track_Append(kActorFreeSlotB, 547, 5);
AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
+ // TODO: A bug? the waypoint 548 is created but is unused
break;
case 9:
- World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
- World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
+ // kSetUG07
+ // TODO a bug? Maybe also check here if Clovis is in the set
+ // like in case 7
+ World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
+ World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
World_Waypoint_Set(548, kSetUG07, -164.78f, -12.21f, -832.08f);
AI_Movement_Track_Append(kActorFreeSlotB, 547, 5);
AI_Movement_Track_Append(kActorFreeSlotB, 548, 1);
+ // TODO: A bug? the waypoint 466 is created but is unused
break;
case 10:
- World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
- World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
+ // kSetUG07
+ // TODO a bug? Maybe also check here if Clovis is in the set
+ // like in case 7
+ World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
+ World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
World_Waypoint_Set(548, kSetUG07, -164.78f, -12.21f, -832.08f);
AI_Movement_Track_Append(kActorFreeSlotB, 548, 5);
AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
+ // TODO: A bug? the waypoint 466 is created but is unused
break;
case 11:
- World_Waypoint_Set(466, kSetUG09, 91.0f, 156.94f, -498.0f);
+ // kSetUG09
+ World_Waypoint_Set(466, kSetUG09, 91.0f, 156.94f, -498.0f);
World_Waypoint_Set(547, kSetUG09, -149.0f, 156.94f, -498.0f);
AI_Movement_Track_Append(kActorFreeSlotB, 466, 5);
AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
break;
case 12:
- World_Waypoint_Set(466, kSetUG09, 91.0f, 156.94f, -498.0f);
+ // kSetUG09
+ World_Waypoint_Set(466, kSetUG09, 91.0f, 156.94f, -498.0f);
World_Waypoint_Set(547, kSetUG09, -149.0f, 156.94f, -498.0f);
AI_Movement_Track_Append(kActorFreeSlotB, 547, 5);
AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
break;
case 13:
+ // kSetUG09
#if BLADERUNNER_ORIGINAL_BUGS
// this makes the rat appear on the pipe (top left)
// but this is buggy since it will appear floating there
@@ -543,8 +595,9 @@ void AIScriptFreeSlotB::processGoal301() {
break;
case 14:
- World_Waypoint_Set(466, kSetUG12, -360.67f, 21.39f, 517.55f);
- World_Waypoint_Set(547, kSetUG12, -250.67f, 21.39f, 477.55f);
+ // kSetUG12
+ World_Waypoint_Set(466, kSetUG12, -360.67f, 21.39f, 517.55f);
+ World_Waypoint_Set(547, kSetUG12, -250.67f, 21.39f, 477.55f);
World_Waypoint_Set(548, kSetUG12, -248.67f, 21.39f, -1454.45f);
AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
AI_Movement_Track_Append(kActorFreeSlotB, 547, 8);
@@ -552,6 +605,7 @@ void AIScriptFreeSlotB::processGoal301() {
break;
default:
+ // kSetFreeSlotG
AI_Movement_Track_Append(kActorFreeSlotB, 39, Random_Query(1, 10));
break;
}
diff --git a/engines/bladerunner/script/ai_script.h b/engines/bladerunner/script/ai_script.h
index 2fb282077a..894261342d 100644
--- a/engines/bladerunner/script/ai_script.h
+++ b/engines/bladerunner/script/ai_script.h
@@ -467,7 +467,7 @@ DECLARE_SCRIPT(FreeSlotB)
int _var1;
int _var2;
- void processGoal301();
+ void goToRandomUGxx();
END_SCRIPT
DECLARE_SCRIPT(Maggie)
diff --git a/engines/bladerunner/script/scene/kp02.cpp b/engines/bladerunner/script/scene/kp02.cpp
index 955a5132f8..0c238b31ef 100644
--- a/engines/bladerunner/script/scene/kp02.cpp
+++ b/engines/bladerunner/script/scene/kp02.cpp
@@ -79,14 +79,15 @@ bool SceneScriptKP02::ClickedOnItem(int itemId, bool a2) {
bool SceneScriptKP02::ClickedOnExit(int exitId) {
if (exitId == 0) {
+ // TODO - A bug? Exit 0 is not added in the original game so this will never be triggered
if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -1040.0f, -615.49f, 2903.0f, 0, true, false, false)) {
- if (Actor_Query_Goal_Number(kActorFreeSlotB) == 406
- || Actor_Query_Goal_Number(kActorFreeSlotA) == 406
+ if (Actor_Query_Goal_Number(kActorFreeSlotB) == kGoalFreeSlotBAct5KP02Attack
+ || Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAAct5KP02Attack
) {
Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotB);
Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotA);
- Actor_Set_Goal_Number(kActorFreeSlotB, 400);
- Actor_Set_Goal_Number(kActorFreeSlotA, 400);
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Default);
+ Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Default);
Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
Ambient_Sounds_Remove_All_Looping_Sounds(1);
Game_Flag_Set(kFlagKP02toUG12);
@@ -103,13 +104,13 @@ bool SceneScriptKP02::ClickedOnExit(int exitId) {
if (exitId == 1) {
if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -884.0f, -615.49f, 3065.0f, 0, true, false, false)) {
- if (Actor_Query_Goal_Number(kActorFreeSlotB) == 406
- || Actor_Query_Goal_Number(kActorFreeSlotA) == 406
+ if (Actor_Query_Goal_Number(kActorFreeSlotB) == kGoalFreeSlotBAct5KP02Attack
+ || Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAAct5KP02Attack
) {
Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotB);
Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotA);
- Actor_Set_Goal_Number(kActorFreeSlotB, 400);
- Actor_Set_Goal_Number(kActorFreeSlotA, 400);
+ Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Default);
+ Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Default);
Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
Ambient_Sounds_Remove_All_Looping_Sounds(1);
Game_Flag_Set(kFlagKP02toKP01);
diff --git a/engines/bladerunner/script/scene/ug07.cpp b/engines/bladerunner/script/scene/ug07.cpp
index e504413e76..7a4c1d8146 100644
--- a/engines/bladerunner/script/scene/ug07.cpp
+++ b/engines/bladerunner/script/scene/ug07.cpp
@@ -96,7 +96,7 @@ bool SceneScriptUG07::ClickedOnItem(int itemId, bool a2) {
bool SceneScriptUG07::ClickedOnExit(int exitId) {
if (exitId == 0) {
- if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -94.0f, -12.21f, -710.0f, 0, true, false, false) && Actor_Query_Goal_Number(kActorClovis) != 402) {
+ if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -94.0f, -12.21f, -710.0f, 0, true, false, false) && Actor_Query_Goal_Number(kActorClovis) != kGoalClovisUG07KillMcCoy) {
Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
Ambient_Sounds_Remove_All_Looping_Sounds(1);
Game_Flag_Set(kFlagUG07toUG09);
@@ -106,7 +106,7 @@ bool SceneScriptUG07::ClickedOnExit(int exitId) {
}
if (exitId == 1) {
- if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 110.0f, -12.21f, -274.0f, 0, true, false, false) && Actor_Query_Goal_Number(kActorClovis) != 402) {
+ if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 110.0f, -12.21f, -274.0f, 0, true, false, false) && Actor_Query_Goal_Number(kActorClovis) != kGoalClovisUG07KillMcCoy) {
Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
Ambient_Sounds_Remove_All_Looping_Sounds(1);
Game_Flag_Set(kFlagUG07toUG08);
@@ -147,11 +147,11 @@ bool SceneScriptUG07::ClickedOnExit(int exitId) {
}
Actor_Set_Goal_Number(kActorMcCoy, kGoalMcCoyUG07Released);
Delay(1000);
- Actor_Set_Goal_Number(kActorClovis, 401);
+ Actor_Set_Goal_Number(kActorClovis, kGoalClovisUG07ChaseMcCoy);
}
} else {
if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -10.0f, -21.47f, -58.0f, 0, true, false, false)
- && Actor_Query_Goal_Number(kActorClovis) != 402
+ && Actor_Query_Goal_Number(kActorClovis) != kGoalClovisUG07KillMcCoy
) {
Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
Ambient_Sounds_Remove_All_Looping_Sounds(1);
@@ -201,7 +201,7 @@ void SceneScriptUG07::PlayerWalkedOut() {
}
if (Actor_Query_In_Set(kActorClovis, kSetUG07)) {
- Actor_Set_Goal_Number(kActorClovis, 400);
+ Actor_Set_Goal_Number(kActorClovis, kGoalClovisStartChapter4);
}
}
diff --git a/engines/bladerunner/script/scene/ug15.cpp b/engines/bladerunner/script/scene/ug15.cpp
index 62fa14fc43..50f6e2e6b9 100644
--- a/engines/bladerunner/script/scene/ug15.cpp
+++ b/engines/bladerunner/script/scene/ug15.cpp
@@ -140,9 +140,9 @@ bool SceneScriptUG15::ClickedOnExit(int exitId) {
}
if (exitId == 2) {
- int v1 = Actor_Query_Goal_Number(kActorFreeSlotA);
- if (v1 >= 300
- && v1 <= 303
+ int ratGoal = Actor_Query_Goal_Number(kActorFreeSlotA);
+ if (ratGoal >= 300 // kGoalFreeSlotAUG15Wait
+ && ratGoal <= 303 // kGoalFreeSlotAUG15RunBack
) {
Loop_Actor_Walk_To_XYZ(kActorMcCoy, -137.61f, 48.07f, 147.12f, 0, true, false, false);
} else if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 18.0f, 52.28f, 46.0f, 0, true, false, false)) {