From bfcd59571ee0e742cd74ec172301056a17c6c5ba Mon Sep 17 00:00:00 2001 From: Thanasis Antoniou Date: Mon, 1 Jul 2019 21:02:23 +0300 Subject: BLADERUNNER: Rat AI bug fixes Most prominent bugs fixed is behavior in KP02 and not attacking when near McCoy --- engines/bladerunner/game_constants.h | 16 ++- engines/bladerunner/script/ai/clovis.cpp | 3 + engines/bladerunner/script/ai/free_slot_a.cpp | 166 ++++++++++++++++++------- engines/bladerunner/script/ai/free_slot_b.cpp | 168 +++++++++++++++++--------- engines/bladerunner/script/ai_script.h | 2 +- engines/bladerunner/script/scene/kp02.cpp | 17 +-- engines/bladerunner/script/scene/ug07.cpp | 10 +- engines/bladerunner/script/scene/ug15.cpp | 6 +- 8 files changed, 269 insertions(+), 119 deletions(-) (limited to 'engines') 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)) { -- cgit v1.2.3