aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/script/ai
diff options
context:
space:
mode:
authorThanasis Antoniou2019-05-19 14:33:12 +0300
committerThanasis Antoniou2019-05-19 14:34:01 +0300
commitea3a9f211da74ffd3aa35328147566160a73d680 (patch)
tree0dd73d3e45466cb420c3e8ace2e9ecbc9e76fa8e /engines/bladerunner/script/ai
parent10ac612b9019aa299f3182180745ba6d215e93e5 (diff)
downloadscummvm-rg350-ea3a9f211da74ffd3aa35328147566160a73d680.tar.gz
scummvm-rg350-ea3a9f211da74ffd3aa35328147566160a73d680.tar.bz2
scummvm-rg350-ea3a9f211da74ffd3aa35328147566160a73d680.zip
BLADERUNNER: Cleanup of police AI and fix for rat ai
Diffstat (limited to 'engines/bladerunner/script/ai')
-rw-r--r--engines/bladerunner/script/ai/free_slot_a.cpp2
-rw-r--r--engines/bladerunner/script/ai/free_slot_b.cpp6
-rw-r--r--engines/bladerunner/script/ai/moraji.cpp2
-rw-r--r--engines/bladerunner/script/ai/officer_grayford.cpp359
-rw-r--r--engines/bladerunner/script/ai/officer_leary.cpp216
5 files changed, 342 insertions, 243 deletions
diff --git a/engines/bladerunner/script/ai/free_slot_a.cpp b/engines/bladerunner/script/ai/free_slot_a.cpp
index 9281e3a32e..83ae547e48 100644
--- a/engines/bladerunner/script/ai/free_slot_a.cpp
+++ b/engines/bladerunner/script/ai/free_slot_a.cpp
@@ -659,7 +659,7 @@ void AIScriptFreeSlotA::goToRandomUGxx() {
// replacing with something more normal
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, 4);
+ AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
#endif
diff --git a/engines/bladerunner/script/ai/free_slot_b.cpp b/engines/bladerunner/script/ai/free_slot_b.cpp
index 79eeea3cb5..c3a87bff21 100644
--- a/engines/bladerunner/script/ai/free_slot_b.cpp
+++ b/engines/bladerunner/script/ai/free_slot_b.cpp
@@ -534,10 +534,10 @@ void AIScriptFreeSlotB::processGoal301() {
AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
#else
// replacing with something more normal
- World_Waypoint_Set(466, kSetUG09, -152.51f, 156.94f, -498.0f);
+ World_Waypoint_Set(466, kSetUG09, -149.0f, 156.94f, -498.0f);
World_Waypoint_Set(547, kSetUG09, -32.60f, 156.94f, -498.0f);
- AI_Movement_Track_Append(kActorFreeSlotB, 466, 4);
- AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
+ AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
+ AI_Movement_Track_Append(kActorFreeSlotB, 547, 2);
AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
#endif // BLADERUNNER_ORIGINAL_BUGS
break;
diff --git a/engines/bladerunner/script/ai/moraji.cpp b/engines/bladerunner/script/ai/moraji.cpp
index 7d5fe1dbeb..63998aa351 100644
--- a/engines/bladerunner/script/ai/moraji.cpp
+++ b/engines/bladerunner/script/ai/moraji.cpp
@@ -122,7 +122,7 @@ bool AIScriptMoraji::ShotAtAndHit() {
if (Actor_Query_Goal_Number(kActorMoraji) == kGoalMorajiLayDown) {
Game_Flag_Set(kFlagDR04McCoyShotMoraji);
Actor_Set_Goal_Number(kActorMoraji, kGoalMorajiDie);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 101);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordArrivesToDR04);
return true;
} else {
return false;
diff --git a/engines/bladerunner/script/ai/officer_grayford.cpp b/engines/bladerunner/script/ai/officer_grayford.cpp
index 3c54790335..af0bc3c65f 100644
--- a/engines/bladerunner/script/ai/officer_grayford.cpp
+++ b/engines/bladerunner/script/ai/officer_grayford.cpp
@@ -40,47 +40,47 @@ void AIScriptOfficerGrayford::Initialize() {
_var3 = 0;
Actor_Put_In_Set(kActorOfficerGrayford, kSetFreeSlotG);
- Actor_Set_At_Waypoint(kActorOfficerGrayford, 39, 0);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 0);
+ Actor_Set_At_Waypoint(kActorOfficerGrayford, 39, 0); // kSetFreeSlotG
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordDefault);
}
bool AIScriptOfficerGrayford::Update() {
if (Global_Variable_Query(kVariableChapter) == 4
- && Actor_Query_Goal_Number(kActorOfficerGrayford) < 300) {
+ && Actor_Query_Goal_Number(kActorOfficerGrayford) < kGoalOfficerGrayfordStartOfAct4) {
AI_Movement_Track_Flush(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 300);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordStartOfAct4);
return false;
}
if (Global_Variable_Query(kVariableChapter) == 5
- && Actor_Query_Goal_Number(kActorOfficerGrayford) < 400
+ && Actor_Query_Goal_Number(kActorOfficerGrayford) < kGoalOfficerGrayfordStartOfAct5
) {
AI_Movement_Track_Flush(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 400);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordStartOfAct5);
return false;
}
if (!Game_Flag_Query(kFlagMcCoyInDNARow)
- && Actor_Query_Goal_Number(kActorOfficerGrayford) > 102
- && Actor_Query_Goal_Number(kActorOfficerGrayford) < 110
+ && Actor_Query_Goal_Number(kActorOfficerGrayford) > kGoalOfficerGrayfordArrivedAtDR04
+ && Actor_Query_Goal_Number(kActorOfficerGrayford) < kGoalOfficerGrayfordLeavesWithMorajiCorpseDR04
) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 110);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordLeavesWithMorajiCorpseDR04);
return false;
}
- if (Actor_Query_Goal_Number(kActorOfficerGrayford) == 0) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 1);
+ if (Actor_Query_Goal_Number(kActorOfficerGrayford) == kGoalOfficerGrayfordDefault) {
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordWalksInPS03a);
return false;
}
- if (Actor_Query_Goal_Number(kActorOfficerGrayford) == 10) {
+ if (Actor_Query_Goal_Number(kActorOfficerGrayford) == kGoalOfficerGrayfordPrepareToRestartWalkAround) {
AI_Movement_Track_Flush(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 0);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordDefault);
return false;
}
- if (Actor_Query_Goal_Number(kActorOfficerGrayford) == 102) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 103);
+ if (Actor_Query_Goal_Number(kActorOfficerGrayford) == kGoalOfficerGrayfordArrivedAtDR04) {
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordTalkToMcCoyAndReportAtDR04);
return false;
}
@@ -91,106 +91,110 @@ bool AIScriptOfficerGrayford::Update() {
return false;
}
- if (Actor_Query_Goal_Number(kActorOfficerGrayford) == 310
+ if (Actor_Query_Goal_Number(kActorOfficerGrayford) == kGoalOfficerGrayfordAttackMcCoyAct4
&& Actor_Query_Which_Set_In(kActorOfficerGrayford) != Player_Query_Current_Set()
) {
Non_Player_Actor_Combat_Mode_Off(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 305);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordHuntingAroundAct4);
return false;
}
- if (Actor_Query_Goal_Number(kActorOfficerGrayford) == 599
+ if (Actor_Query_Goal_Number(kActorOfficerGrayford) == kGoalOfficerGrayfordDead
&& Actor_Query_Which_Set_In(kActorOfficerGrayford) != Player_Query_Current_Set()
) {
+ // dead officer gets revived and re-used
Actor_Set_Health(kActorOfficerGrayford, 50, 50);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 305);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordHuntingAroundAct4);
return false;
}
- if (Actor_Query_Goal_Number(kActorOfficerGrayford) == 305) {
+ if (Actor_Query_Goal_Number(kActorOfficerGrayford) == kGoalOfficerGrayfordHuntingAroundAct4) {
switch (Actor_Query_Which_Set_In(kActorOfficerGrayford)) {
case kSetRC03:
if (Actor_Query_Which_Set_In(kActorOfficerGrayford) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 310);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerGrayford, kActorCombatStateIdle, true, kActorMcCoy, 18, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, -1, -1, -1, 10, 300, false);
}
break;
case kSetUG01:
if (Actor_Query_Which_Set_In(kActorOfficerGrayford) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 310);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerGrayford, kActorCombatStateIdle, true, kActorMcCoy, 11, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, -1, -1, -1, 10, 300, false);
}
break;
case kSetUG04:
+ // fall through
case kSetUG05:
+ // fall through
case kSetUG06:
if (Actor_Query_Which_Set_In(kActorOfficerGrayford) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 310);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerGrayford, kActorCombatStateIdle, true, kActorMcCoy, 10, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, -1, -1, -1, 10, 300, false);
}
break;
-
+// asdf UG07 whould be a type 10 combat, 12 flee?
case kSetUG08:
if (Actor_Query_Which_Set_In(kActorOfficerGrayford) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 310);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerGrayford, kActorCombatStateIdle, true, kActorMcCoy, 13, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, -1, -1, -1, 10, 300, false);
}
break;
+// asdf UG09 whould be a type ?? //
case kSetUG10:
if (Actor_Query_Which_Set_In(kActorOfficerGrayford) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 310);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerGrayford, kActorCombatStateIdle, true, kActorMcCoy, 14, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, -1, -1, -1, 10, 300, false);
}
break;
case kSetUG12:
if (Actor_Query_Which_Set_In(kActorOfficerGrayford) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 310);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerGrayford, kActorCombatStateIdle, true, kActorMcCoy, 16, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, -1, -1, -1, 10, 300, false);
}
break;
case kSetUG14:
if (Actor_Query_Which_Set_In(kActorOfficerGrayford) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 310);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerGrayford, kActorCombatStateIdle, true, kActorMcCoy, 17, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, -1, -1, -1, 10, 300, false);
}
break;
case kSetMA07:
if (Actor_Query_Which_Set_In(kActorOfficerGrayford) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 310);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerGrayford, kActorCombatStateIdle, true, kActorMcCoy, 7, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, -1, -1, -1, 10, 300, false);
}
break;
case kSetNR01:
if (Actor_Query_Which_Set_In(kActorOfficerGrayford) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 310);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerGrayford, kActorCombatStateIdle, true, kActorMcCoy, 3, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, -1, -1, -1, 10, 300, false);
}
break;
case kSetDR01_DR02_DR04:
if (Actor_Query_Which_Set_In(kActorOfficerGrayford) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 310);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerGrayford, kActorCombatStateIdle, true, kActorMcCoy, 0, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, -1, -1, -1, 10, 300, false);
}
break;
case kSetBB01:
if (Actor_Query_Which_Set_In(kActorOfficerGrayford) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 310);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerGrayford, kActorCombatStateIdle, true, kActorMcCoy, 1, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, -1, -1, -1, 10, 300, false);
}
break;
case kSetCT11:
if (Actor_Query_Which_Set_In(kActorOfficerGrayford) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 310);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerGrayford, kActorCombatStateIdle, true, kActorMcCoy, 5, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, -1, -1, -1, 10, 300, false);
}
break;
@@ -204,73 +208,75 @@ bool AIScriptOfficerGrayford::Update() {
void AIScriptOfficerGrayford::TimerExpired(int timer) {
if (timer == kActorTimerAIScriptCustomTask2) {
AI_Countdown_Timer_Reset(kActorOfficerGrayford, kActorTimerAIScriptCustomTask2);
- if (Actor_Query_Goal_Number(kActorOfficerGrayford) == 104) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 105);
- } else if (Actor_Query_Goal_Number(kActorOfficerGrayford) == 105) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 104);
+ if (Actor_Query_Goal_Number(kActorOfficerGrayford) == kGoalOfficerGrayfordPatrolsAtDR04a) {
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordPatrolsAtDR04b);
+ } else if (Actor_Query_Goal_Number(kActorOfficerGrayford) == kGoalOfficerGrayfordPatrolsAtDR04b) {
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordPatrolsAtDR04a);
}
}
}
void AIScriptOfficerGrayford::CompletedMovementTrack() {
switch (Actor_Query_Goal_Number(kActorOfficerGrayford)) {
- case 1:
- Actor_Set_Goal_Number(kActorOfficerGrayford, 2);
+ case kGoalOfficerGrayfordWalksInPS03a:
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordWalksInPS03b);
break;
- case 2:
- Actor_Set_Goal_Number(kActorOfficerGrayford, 3);
+ case kGoalOfficerGrayfordWalksInPS03b:
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordWalksInPS03c);
break;
- case 3:
- Actor_Set_Goal_Number(kActorOfficerGrayford, 4);
+ case kGoalOfficerGrayfordWalksInPS03c:
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordWalksInPS03d);
break;
- case 4:
- Actor_Set_Goal_Number(kActorOfficerGrayford, 5);
+ case kGoalOfficerGrayfordWalksInPS03d:
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordWalksInFreeSlotC);
break;
- case 5:
- Actor_Set_Goal_Number(kActorOfficerGrayford, 6);
+ case kGoalOfficerGrayfordWalksInFreeSlotC:
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordWalksInPS09a);
break;
- case 6:
- Actor_Set_Goal_Number(kActorOfficerGrayford, 7);
+ case kGoalOfficerGrayfordWalksInPS09a:
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordWalksInPS09b);
break;
- case 7:
- Actor_Set_Goal_Number(kActorOfficerGrayford, 8);
+ case kGoalOfficerGrayfordWalksInPS09b:
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordWalksInPS09c);
break;
- case 8:
- Actor_Set_Goal_Number(kActorOfficerGrayford, 9);
+ case kGoalOfficerGrayfordWalksInPS09c:
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordWalksInPS03e);
break;
- case 9:
- Actor_Set_Goal_Number(kActorOfficerGrayford, 10);
+ case kGoalOfficerGrayfordWalksInPS03e:
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordPrepareToRestartWalkAround);
break;
- case 104:
- case 105:
+ case kGoalOfficerGrayfordPatrolsAtDR04a:
+ // fall through
+ case kGoalOfficerGrayfordPatrolsAtDR04b:
if (Random_Query(0, 2)) {
Actor_Change_Animation_Mode(kActorOfficerGrayford, 43);
} else {
AI_Countdown_Timer_Reset(kActorOfficerGrayford, kActorTimerAIScriptCustomTask2);
AI_Countdown_Timer_Start(kActorOfficerGrayford, kActorTimerAIScriptCustomTask2, Random_Query(6, 12));
}
- Actor_Face_Waypoint(kActorOfficerGrayford, 97, true);
+ Actor_Face_Waypoint(kActorOfficerGrayford, 97, true); // kSetDR01_DR02_DR04
// return false;
break;
- case 305:
- Actor_Set_Goal_Number(kActorOfficerGrayford, 306);
+ case kGoalOfficerGrayfordHuntingAroundAct4:
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordPrepareToHuntAroundAct4);
break;
- case 307:
+ case kGoalOfficerGrayfordBlockingUG07:
+ // UG07 before McCoy visits his apartment in Act 4
Non_Player_Actor_Combat_Mode_On(kActorOfficerGrayford, kActorCombatStateIdle, true, kActorMcCoy, 12, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, 0, -1, -1, 15, 300, false);
break;
- case 308:
+ case kGoalOfficerGrayfordArrestsMcCoyAct4CT12:
Actor_Change_Animation_Mode(kActorOfficerGrayford, kAnimationModeCombatIdle);
Actor_Face_Actor(kActorOfficerGrayford, kActorMcCoy, true);
break;
@@ -288,7 +294,7 @@ void AIScriptOfficerGrayford::ClickedByPlayer() {
switch (Actor_Query_Goal_Number(kActorOfficerGrayford)) {
case 1:
AI_Movement_Track_Flush(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 99);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordStopAndTalk1);
Actor_Face_Actor(kActorMcCoy, kActorOfficerGrayford, true);
Actor_Face_Actor(kActorOfficerGrayford, kActorMcCoy, true);
if (Random_Query(1, 2) == 1) {
@@ -302,7 +308,7 @@ void AIScriptOfficerGrayford::ClickedByPlayer() {
case 2:
AI_Movement_Track_Flush(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 99);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordStopAndTalk1);
Actor_Face_Actor(kActorMcCoy, kActorOfficerGrayford, true);
Actor_Face_Actor(kActorOfficerGrayford, kActorMcCoy, true);
if (Random_Query(1, 2) == 1) {
@@ -316,7 +322,7 @@ void AIScriptOfficerGrayford::ClickedByPlayer() {
case 3:
AI_Movement_Track_Flush(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 99);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordStopAndTalk1);
Actor_Face_Actor(kActorMcCoy, kActorOfficerGrayford, true);
Actor_Face_Actor(kActorOfficerGrayford, kActorMcCoy, true);
if (Random_Query(1, 2) == 1) {
@@ -329,7 +335,7 @@ void AIScriptOfficerGrayford::ClickedByPlayer() {
case 4:
AI_Movement_Track_Flush(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 99);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordStopAndTalk1);
Actor_Face_Actor(kActorMcCoy, kActorOfficerGrayford, true);
Actor_Face_Actor(kActorOfficerGrayford, kActorMcCoy, true);
if (Random_Query(1, 2) == 1) {
@@ -344,7 +350,7 @@ void AIScriptOfficerGrayford::ClickedByPlayer() {
case 7:
AI_Movement_Track_Flush(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 99);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordStopAndTalk1);
Actor_Face_Actor(kActorMcCoy, kActorOfficerGrayford, true);
Actor_Says(kActorMcCoy, 4515, 14);
Actor_Says(kActorOfficerGrayford, 330, 13);
@@ -353,17 +359,17 @@ void AIScriptOfficerGrayford::ClickedByPlayer() {
case 8:
AI_Movement_Track_Flush(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 99);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordStopAndTalk1);
Actor_Face_Actor(kActorMcCoy, kActorOfficerGrayford, true);
Actor_Face_Actor(kActorOfficerGrayford, kActorMcCoy, true);
Actor_Says(kActorMcCoy, 5075, 13);
Actor_Set_Goal_Number(kActorOfficerGrayford, 8);
break;
- case 104:
- Actor_Set_Goal_Number(kActorOfficerGrayford, 199);
+ case kGoalOfficerGrayfordPatrolsAtDR04a:
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordStopAndTalkDR04);
Actor_Face_Actor(kActorMcCoy, kActorOfficerGrayford, true);
- Actor_Says(kActorMcCoy, 1005, kAnimationModeTalk);
+ Actor_Says(kActorMcCoy, 1005, kAnimationModeTalk); // Don't miss anything.
AI_Movement_Track_Flush(kActorOfficerGrayford);
AI_Countdown_Timer_Reset(kActorOfficerGrayford, kActorTimerAIScriptCustomTask2);
if (_animationState == 35 || _animationState == 34) {
@@ -372,13 +378,13 @@ void AIScriptOfficerGrayford::ClickedByPlayer() {
}
Actor_Face_Actor(kActorOfficerGrayford, kActorMcCoy, true);
Actor_Says(kActorOfficerGrayford, 190, 19);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 104);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordPatrolsAtDR04a);
break;
- case 105:
- Actor_Set_Goal_Number(kActorOfficerGrayford, 199);
+ case kGoalOfficerGrayfordPatrolsAtDR04b:
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordStopAndTalkDR04);
Actor_Face_Actor(kActorMcCoy, kActorOfficerGrayford, true);
- Actor_Says(kActorMcCoy, 1005, kAnimationModeTalk);
+ Actor_Says(kActorMcCoy, 1005, kAnimationModeTalk); // Don't miss anything.
AI_Movement_Track_Flush(kActorOfficerGrayford);
AI_Countdown_Timer_Reset(kActorOfficerGrayford, kActorTimerAIScriptCustomTask2);
if (_animationState == 35 || _animationState == 34) {
@@ -387,12 +393,12 @@ void AIScriptOfficerGrayford::ClickedByPlayer() {
}
Actor_Face_Actor(kActorOfficerGrayford, kActorMcCoy, true);
Actor_Says(kActorOfficerGrayford, 190, 19);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 105);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordPatrolsAtDR04b);
break;
default:
return; //false;
- break;
+// break; // redundant
}
return; //true;
@@ -419,14 +425,15 @@ void AIScriptOfficerGrayford::ShotAtAndMissed() {
}
bool AIScriptOfficerGrayford::ShotAtAndHit() {
- if (Actor_Query_Goal_Number(kActorOfficerGrayford) == 307)
+ // Grayford is invincible while blocking the UG07 (before McCoy visits his apartment in Act 4)
+ if (Actor_Query_Goal_Number(kActorOfficerGrayford) == kGoalOfficerGrayfordBlockingUG07) {
Actor_Set_Health(kActorOfficerGrayford, 50, 50);
-
+ }
return false;
}
void AIScriptOfficerGrayford::Retired(int byActorId) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 599);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordDead);
Game_Flag_Set(kFlagMcCoyRetiredHuman);
}
@@ -436,61 +443,71 @@ int AIScriptOfficerGrayford::GetFriendlinessModifierIfGetsClue(int otherActorId,
bool AIScriptOfficerGrayford::GoalChanged(int currentGoalNumber, int newGoalNumber) {
switch (newGoalNumber) {
- case 1:
+ case kGoalOfficerGrayfordWalksInPS03a:
+ // kSetPS03
AI_Movement_Track_Flush(kActorOfficerGrayford);
AI_Movement_Track_Append(kActorOfficerGrayford, 82, Random_Query(5, 20));
AI_Movement_Track_Repeat(kActorOfficerGrayford);
return true;
- case 2:
+ case kGoalOfficerGrayfordWalksInPS03b:
+ // kSetPS03
AI_Movement_Track_Flush(kActorOfficerGrayford);
AI_Movement_Track_Append(kActorOfficerGrayford, 76, Random_Query(10, 20));
AI_Movement_Track_Repeat(kActorOfficerGrayford);
return true;
- case 3:
+ case kGoalOfficerGrayfordWalksInPS03c:
+ // kSetPS03
AI_Movement_Track_Flush(kActorOfficerGrayford);
AI_Movement_Track_Append(kActorOfficerGrayford, 77, Random_Query(5, 15));
AI_Movement_Track_Repeat(kActorOfficerGrayford);
return true;
- case 4:
+ case kGoalOfficerGrayfordWalksInPS03d:
+ // kSetPS03
AI_Movement_Track_Flush(kActorOfficerGrayford);
AI_Movement_Track_Append(kActorOfficerGrayford, 78, Random_Query(5, 15));
AI_Movement_Track_Repeat(kActorOfficerGrayford);
return true;
- case 5:
+ case kGoalOfficerGrayfordWalksInFreeSlotC:
+ // kSetFreeSlotC
AI_Movement_Track_Flush(kActorOfficerGrayford);
- AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerGrayford);
return true;
- case 6:
+ case kGoalOfficerGrayfordWalksInPS09a:
+ // kSetPS09
AI_Movement_Track_Flush(kActorOfficerGrayford);
AI_Movement_Track_Append(kActorOfficerGrayford, 79, Random_Query(5, 15));
AI_Movement_Track_Repeat(kActorOfficerGrayford);
return true;
- case 7:
+ case kGoalOfficerGrayfordWalksInPS09b:
+ // kSetPS09
AI_Movement_Track_Flush(kActorOfficerGrayford);
AI_Movement_Track_Append(kActorOfficerGrayford, 80, 1);
AI_Movement_Track_Repeat(kActorOfficerGrayford);
return true;
- case 8:
+ case kGoalOfficerGrayfordWalksInPS09c:
+ // kSetPS09
AI_Movement_Track_Flush(kActorOfficerGrayford);
AI_Movement_Track_Append(kActorOfficerGrayford, 81, Random_Query(5, 15));
AI_Movement_Track_Repeat(kActorOfficerGrayford);
return true;
- case 9:
+ case kGoalOfficerGrayfordWalksInPS03e:
+ // kSetPS03
AI_Movement_Track_Flush(kActorOfficerGrayford);
AI_Movement_Track_Append(kActorOfficerGrayford, 82, Random_Query(5, 15));
AI_Movement_Track_Repeat(kActorOfficerGrayford);
return true;
- case 101:
+ case kGoalOfficerGrayfordArrivesToDR04:
+ // kSetDR01_DR02_DR04
Player_Loses_Control();
AI_Movement_Track_Flush(kActorOfficerGrayford);
Actor_Put_In_Set(kActorOfficerGrayford, kSetDR01_DR02_DR04);
@@ -513,13 +530,14 @@ bool AIScriptOfficerGrayford::GoalChanged(int currentGoalNumber, int newGoalNumb
}
return true;
- case 102:
+ case kGoalOfficerGrayfordArrivedAtDR04:
return true;
- case 103:
+ case kGoalOfficerGrayfordTalkToMcCoyAndReportAtDR04:
+ // kSetDR01_DR02_DR04
Actor_Says(kActorOfficerGrayford, 120, 19);
- Actor_Says_With_Pause(kActorMcCoy, 970, 0.2f, 13);
- Actor_Says(kActorMcCoy, 975, 12);
+ Actor_Says_With_Pause(kActorMcCoy, 970, 0.2f, 13); // Got a dead man here. Victim of an explosion.
+ Actor_Says(kActorMcCoy, 975, 12); // TODO - a bug? McCoy may not know Moraji's name here(?)
if (Actor_Clue_Query(kActorMcCoy, kClueMorajiInterview) == 1) {
Actor_Says(kActorMcCoy, 980, 16);
@@ -537,33 +555,35 @@ bool AIScriptOfficerGrayford::GoalChanged(int currentGoalNumber, int newGoalNumb
if (Actor_Query_Goal_Number(kActorMoraji) == kGoalMorajiDead) {
Actor_Face_Actor(kActorOfficerGrayford, kActorMoraji, true);
} else {
- Actor_Face_Waypoint(kActorOfficerGrayford, 97, 1);
+ Actor_Face_Waypoint(kActorOfficerGrayford, 97, true);
}
Actor_Change_Animation_Mode(kActorOfficerGrayford, 43);
if (Player_Query_Current_Scene() == kSceneDR04) {
- Actor_Says(kActorOfficerGrayford, 170, kAnimationModeTalk);
+ Actor_Says(kActorOfficerGrayford, 170, kAnimationModeTalk); // This is 32, Sector 3. Reporting a homicide. Possible act of terrorism.
}
return true;
- case 104:
+ case kGoalOfficerGrayfordPatrolsAtDR04a:
+ // kSetDR01_DR02_DR04
AI_Countdown_Timer_Reset(kActorOfficerGrayford, kActorTimerAIScriptCustomTask2);
AI_Movement_Track_Flush(kActorOfficerGrayford);
AI_Movement_Track_Append(kActorOfficerGrayford, 112, 0);
AI_Movement_Track_Repeat(kActorOfficerGrayford);
return true;
- case 105:
+ case kGoalOfficerGrayfordPatrolsAtDR04b:
+ // kSetDR01_DR02_DR04
AI_Countdown_Timer_Reset(kActorOfficerGrayford, kActorTimerAIScriptCustomTask2);
AI_Movement_Track_Flush(kActorOfficerGrayford);
AI_Movement_Track_Append(kActorOfficerGrayford, 113, 0);
AI_Movement_Track_Repeat(kActorOfficerGrayford);
return true;
- case 106:
+ case kGoalOfficerGrayfordStopPatrolToTalkToMcCoyAtDR04:
Actor_Face_Actor(kActorMcCoy, kActorOfficerGrayford, true);
- Actor_Says(kActorMcCoy, 1000, 14);
+ Actor_Says(kActorMcCoy, 1000, 14); // You got a sheet or something...?
AI_Movement_Track_Flush(kActorOfficerGrayford);
AI_Countdown_Timer_Reset(kActorOfficerGrayford, kActorTimerAIScriptCustomTask2);
@@ -579,23 +599,25 @@ bool AIScriptOfficerGrayford::GoalChanged(int currentGoalNumber, int newGoalNumb
Actor_Set_Goal_Number(kActorOfficerGrayford, currentGoalNumber);
return true; // possible bugfix: was break;
- case 110:
+ case kGoalOfficerGrayfordLeavesWithMorajiCorpseDR04:
+ // kSetFreeSlotC
AI_Movement_Track_Flush(kActorOfficerGrayford);
- AI_Movement_Track_Append(kActorOfficerGrayford, 35, 0);
+ AI_Movement_Track_Append(kActorOfficerGrayford, 35, 0); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerGrayford);
AI_Movement_Track_Flush(kActorMoraji);
- AI_Movement_Track_Append(kActorMoraji, 41, 0);
+ AI_Movement_Track_Append(kActorMoraji, 41, 0); // kSetFreeSlotI
AI_Movement_Track_Repeat(kActorMoraji);
return true;
- case 300:
- Actor_Set_Goal_Number(kActorOfficerGrayford, 305);
+ case kGoalOfficerGrayfordStartOfAct4:
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordHuntingAroundAct4);
return true;
- case 305:
+ case kGoalOfficerGrayfordHuntingAroundAct4:
AI_Movement_Track_Flush(kActorOfficerGrayford);
switch (Random_Query(1, 10)) {
case 1:
+ // kSetNR01
AI_Movement_Track_Append(kActorOfficerGrayford, 398, 15);
AI_Movement_Track_Append(kActorOfficerGrayford, 399, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 400, 0);
@@ -604,54 +626,59 @@ bool AIScriptOfficerGrayford::GoalChanged(int currentGoalNumber, int newGoalNumb
AI_Movement_Track_Append(kActorOfficerGrayford, 403, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 404, 15);
AI_Movement_Track_Repeat(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 305);
+ //Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordHuntingAroundAct4); // redundant
return true;
case 2:
+ // kSetCT11
AI_Movement_Track_Append(kActorOfficerGrayford, 385, 10);
AI_Movement_Track_Append(kActorOfficerGrayford, 242, 2);
AI_Movement_Track_Append(kActorOfficerGrayford, 386, 2);
AI_Movement_Track_Append(kActorOfficerGrayford, 387, 15);
AI_Movement_Track_Repeat(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 305);
+ //Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordHuntingAroundAct4); // redundant
return true;
case 3:
+ // kSetDR01_DR02_DR04
AI_Movement_Track_Append(kActorOfficerGrayford, 390, 10);
AI_Movement_Track_Append(kActorOfficerGrayford, 391, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 392, 5);
AI_Movement_Track_Append(kActorOfficerGrayford, 345, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 393, 15);
AI_Movement_Track_Repeat(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 305);
+ //Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordHuntingAroundAct4); // redundant
return true;
case 4:
+ // kSetRC03 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerGrayford, 381, 15);
AI_Movement_Track_Append(kActorOfficerGrayford, 382, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 383, 15);
AI_Movement_Track_Append(kActorOfficerGrayford, 382, 3);
AI_Movement_Track_Append(kActorOfficerGrayford, 384, 0);
- AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 305);
+ //Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordHuntingAroundAct4); // redundant
return true;
case 5:
+ // kSetBB01 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerGrayford, 388, 10);
AI_Movement_Track_Append(kActorOfficerGrayford, 389, 10);
- AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 305);
+ //Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordHuntingAroundAct4); // redundant
return true;
case 6:
+ // kSetCT11 - identical to case 2
AI_Movement_Track_Append(kActorOfficerGrayford, 385, 10);
AI_Movement_Track_Append(kActorOfficerGrayford, 242, 2);
AI_Movement_Track_Append(kActorOfficerGrayford, 386, 2);
AI_Movement_Track_Append(kActorOfficerGrayford, 387, 15);
AI_Movement_Track_Repeat(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 305);
+ //Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordHuntingAroundAct4); // redundant
return true;
#if BLADERUNNER_ORIGINAL_BUGS
@@ -659,6 +686,7 @@ bool AIScriptOfficerGrayford::GoalChanged(int currentGoalNumber, int newGoalNumb
// When the police officer is there as well he will kill McCoy because player cannot control him.
case 7:
+ // kSetMA07 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerGrayford, 394, 15);
AI_Movement_Track_Append(kActorOfficerGrayford, 395, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 396, 0);
@@ -666,141 +694,165 @@ bool AIScriptOfficerGrayford::GoalChanged(int currentGoalNumber, int newGoalNumb
AI_Movement_Track_Append(kActorOfficerGrayford, 396, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 395, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 430, 15);
- AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerGrayford);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 305);
+ //Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordHuntingAroundAct4); // redundant
return true;
#else
case 7:
- // fall through
-#endif
+ // just put him away for a few seconds
+ AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30); // kSetFreeSlotC
+ AI_Movement_Track_Repeat(kActorOfficerGrayford);
+ return true;
+#endif // BLADERUNNER_ORIGINAL_BUGS
case 8:
switch (Random_Query(1, 7)) {
case 1:
+ // kSetUG10 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerGrayford, 302, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 407, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 408, 0);
- AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerGrayford);
- break; // and go to case 9 below
+ break;
case 2:
+ // kSetUG14
AI_Movement_Track_Append(kActorOfficerGrayford, 536, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 537, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 538, 5);
AI_Movement_Track_Append(kActorOfficerGrayford, 537, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 536, 0);
AI_Movement_Track_Repeat(kActorOfficerGrayford);
- break; // and go to case 9 below
+ break;
case 3:
+ // kSetUG04 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerGrayford, 296, 10);
AI_Movement_Track_Append(kActorOfficerGrayford, 409, 2);
AI_Movement_Track_Append(kActorOfficerGrayford, 296, 10);
- AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerGrayford);
- break; // and go to case 9 below
+ break;
case 4:
+ // kSetUG05 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerGrayford, 411, 10);
AI_Movement_Track_Append(kActorOfficerGrayford, 412, 5);
AI_Movement_Track_Append(kActorOfficerGrayford, 411, 0);
- AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerGrayford);
- break; // and go to case 9 below
+ break;
case 5:
+ // kSetUG06 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerGrayford, 413, 10);
AI_Movement_Track_Append(kActorOfficerGrayford, 414, 0);
AI_Movement_Track_Append_With_Facing(kActorOfficerGrayford, 431, 0, 1017);
AI_Movement_Track_Append(kActorOfficerGrayford, 432, 10);
- AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerGrayford);
- break; // and go to case 9 below
+ break;
case 6:
+ // kSetUG07 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerGrayford, 415, 0);
AI_Movement_Track_Append_With_Facing(kActorOfficerGrayford, 416, 0, 620);
AI_Movement_Track_Append(kActorOfficerGrayford, 417, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 418, 0);
- AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerGrayford);
- break; // and go to case 9 below
+ break;
case 7:
+ // kSetUG01 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerGrayford, 405, 10);
AI_Movement_Track_Append(kActorOfficerGrayford, 406, 0);
- AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerGrayford);
return false;
}
+#if BLADERUNNER_ORIGINAL_BUGS
// fall through
- // TODO bug in the game? there should be nothing track related after AI_Movement_Track_Repeat
-
+ // bug in the game - there should be nothing track related after AI_Movement_Track_Repeat
+#else
+ return false; // does it matter if false or true? case 9 and 10 return false
+#endif // BLADERUNNER_ORIGINAL_BUGS
case 9:
if (Random_Query(0, 1)) {
+ // kSetUG09 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerGrayford, 433, 10);
AI_Movement_Track_Append(kActorOfficerGrayford, 434, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 435, 0);
- AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerGrayford);
} else {
+ // kSetUG08 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerGrayford, 420, 10);
AI_Movement_Track_Append(kActorOfficerGrayford, 422, 2);
AI_Movement_Track_Append(kActorOfficerGrayford, 421, 1);
AI_Movement_Track_Append_With_Facing(kActorOfficerGrayford, 422, 4, 182);
AI_Movement_Track_Append(kActorOfficerGrayford, 420, 10);
- AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerGrayford);
- // TODO bug in the game? Same code bellow looks like a case 10 and are from set 84 whereas upper one are from set 81
+#if BLADERUNNER_ORIGINAL_BUGS
+ // bug in the game? Same code bellow looks like a case 10 and are from set 84 whereas upper one are from set 81
AI_Movement_Track_Append(kActorOfficerGrayford, 310, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 307, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 309, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 310, 0);
- AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerGrayford);
+#endif
}
return false;
case 10:
+ // kSetUG12 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerGrayford, 310, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 307, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 309, 0);
AI_Movement_Track_Append(kActorOfficerGrayford, 310, 0);
- AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerGrayford, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerGrayford);
return false;
}
return false;
- case 306:
- Actor_Set_Goal_Number(kActorOfficerGrayford, 305);
+ case kGoalOfficerGrayfordPrepareToHuntAroundAct4:
+ // aux goal in order to immediately switch back to kGoalOfficerGrayfordHuntingAroundAct4 goal
+ // and run GoalChanged() for kGoalOfficerGrayfordHuntingAroundAct4 again
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordHuntingAroundAct4);
return true;
- case 307:
+ case kGoalOfficerGrayfordBlockingUG07:
+ // kSetUG07
AI_Movement_Track_Flush(kActorOfficerGrayford);
AI_Movement_Track_Append_With_Facing(kActorOfficerGrayford, 419, 0, 512);
AI_Movement_Track_Repeat(kActorOfficerGrayford);
return true;
- case 308:
+ case kGoalOfficerGrayfordArrestsMcCoyAct4CT12:
+ // kSetCT01_CT12
+ // never triggered in original game
AI_Movement_Track_Flush(kActorOfficerGrayford);
AI_Movement_Track_Append_Run(kActorOfficerGrayford, 440, 0);
AI_Movement_Track_Append_Run(kActorOfficerGrayford, 441, 0);
AI_Movement_Track_Repeat(kActorOfficerGrayford);
return true;
- case 399:
+ case kGoalOfficerGrayfordArrestMcCoyInTB03Act4:
+ // kSetTB02_TB03
AI_Movement_Track_Flush(kActorOfficerGrayford);
Actor_Put_In_Set(kActorOfficerGrayford, kSetTB02_TB03);
Actor_Set_At_XYZ(kActorOfficerGrayford, -173.89f, 0.0f, 2084.22f, 859);
Actor_Change_Animation_Mode(kActorOfficerGrayford, kAnimationModeCombatIdle);
return true;
- case 599:
+ case kGoalOfficerGrayfordDead:
_animationState = 32;
_animationFrame = Slice_Animation_Query_Number_Of_Frames(624) - 1;
return true;
@@ -988,8 +1040,8 @@ bool AIScriptOfficerGrayford::UpdateAnimation(int *animation, int *frame) {
_animationFrame = 0;
_animationState = 0;
_var1 = 0;
- if (Actor_Query_Goal_Number(kActorOfficerGrayford) == 101) {
- Actor_Set_Goal_Number(kActorOfficerGrayford, 102);
+ if (Actor_Query_Goal_Number(kActorOfficerGrayford) == kGoalOfficerGrayfordArrivesToDR04) {
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordArrivedAtDR04);
}
}
break;
@@ -1156,13 +1208,14 @@ bool AIScriptOfficerGrayford::UpdateAnimation(int *animation, int *frame) {
_animationFrame = 0;
switch (Actor_Query_Goal_Number(kActorOfficerGrayford)) {
- case 103:
- case 104:
- Actor_Set_Goal_Number(kActorOfficerGrayford, 105);
+ case kGoalOfficerGrayfordTalkToMcCoyAndReportAtDR04:
+ // fall through
+ case kGoalOfficerGrayfordPatrolsAtDR04a:
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordPatrolsAtDR04b);
break;
- case 105:
- Actor_Set_Goal_Number(kActorOfficerGrayford, 104);
+ case kGoalOfficerGrayfordPatrolsAtDR04b:
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordPatrolsAtDR04a);
break;
}
}
@@ -1223,7 +1276,7 @@ bool AIScriptOfficerGrayford::ChangeAnimationMode(int mode) {
break;
case kAnimationModeWalk:
- if (Actor_Query_Goal_Number(kActorOfficerGrayford) == 101) {
+ if (Actor_Query_Goal_Number(kActorOfficerGrayford) == kGoalOfficerGrayfordArrivesToDR04) {
_animationState = 6;
_animationFrame = 0;
} else if (_animationState != 1) {
@@ -1233,7 +1286,7 @@ bool AIScriptOfficerGrayford::ChangeAnimationMode(int mode) {
break;
case kAnimationModeRun:
- if (Actor_Query_Goal_Number(kActorOfficerGrayford) == 101) {
+ if (Actor_Query_Goal_Number(kActorOfficerGrayford) == kGoalOfficerGrayfordArrivesToDR04) {
_animationState = 5;
_animationFrame = 0;
} else if (_animationState != 2) {
diff --git a/engines/bladerunner/script/ai/officer_leary.cpp b/engines/bladerunner/script/ai/officer_leary.cpp
index 9b9fa3fabf..d803b06c31 100644
--- a/engines/bladerunner/script/ai/officer_leary.cpp
+++ b/engines/bladerunner/script/ai/officer_leary.cpp
@@ -45,18 +45,18 @@ void AIScriptOfficerLeary::Initialize() {
bool AIScriptOfficerLeary::Update() {
if (Global_Variable_Query(kVariableChapter) == 4
- && Actor_Query_Goal_Number(kActorOfficerLeary) < 300
+ && Actor_Query_Goal_Number(kActorOfficerLeary) < kGoalOfficerLearyStartOfAct4
) {
AI_Movement_Track_Flush(kActorOfficerLeary);
- Actor_Set_Goal_Number(kActorOfficerLeary, 300);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyStartOfAct4);
return false;
}
if (Global_Variable_Query(kVariableChapter) == 5
- && Actor_Query_Goal_Number(kActorOfficerLeary) < 400
+ && Actor_Query_Goal_Number(kActorOfficerLeary) < kGoalOfficerLearyStartOfAct5
) {
AI_Movement_Track_Flush(kActorOfficerLeary);
- Actor_Set_Goal_Number(kActorOfficerLeary, 400);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyStartOfAct5);
return false;
}
@@ -68,7 +68,7 @@ bool AIScriptOfficerLeary::Update() {
&& Global_Variable_Query(kVariableChapter) < 3
) {
Game_Flag_Set(kFlagRC01PoliceDone);
- Actor_Set_Goal_Number(kActorOfficerLeary, 3);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyPoliceDoneFromRC01);
return false;
}
@@ -96,67 +96,68 @@ bool AIScriptOfficerLeary::Update() {
&& !Game_Flag_Query(kFlagUG07PoliceLeave)
) {
Game_Flag_Set(kFlagUG07PoliceLeave);
- Actor_Set_Goal_Number(kActorOfficerLeary, 305);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyHuntingAroundAct4);
return false;
}
- if (Actor_Query_Goal_Number(kActorOfficerLeary) == 310
+ if (Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyAttackMcCoyAct4
&& Actor_Query_Which_Set_In(kActorOfficerLeary) != Player_Query_Current_Set()
) {
Non_Player_Actor_Combat_Mode_Off(kActorOfficerLeary);
- Actor_Set_Goal_Number(kActorOfficerLeary, 305);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyHuntingAroundAct4);
return false;
}
- if (Actor_Query_Goal_Number(kActorOfficerLeary) == 599
+ if (Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyDead
&& Actor_Query_Which_Set_In(kActorOfficerLeary) != Player_Query_Current_Set()
) {
+ // dead officer gets revived and re-used
Actor_Set_Health(kActorOfficerLeary, 40, 40);
- Actor_Set_Goal_Number(kActorOfficerLeary, 305);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyHuntingAroundAct4);
return false;
}
- if (Actor_Query_Goal_Number(kActorOfficerLeary) == 305) {
+ if (Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyHuntingAroundAct4) {
switch (Actor_Query_Which_Set_In(kActorOfficerLeary)) {
case kSetDR01_DR02_DR04:
if (Actor_Query_Which_Set_In(kActorOfficerLeary) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerLeary, 310);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerLeary, 0, 1, kActorMcCoy, 0, 4, 7, 8, -1, -1, -1, 10, 300, 0);
}
break;
case kSetBB01:
if (Actor_Query_Which_Set_In(kActorOfficerLeary) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerLeary, 310);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerLeary, 0, 1, kActorMcCoy, 1, 4, 7, 8, -1, -1, -1, 10, 300, 0);
}
break;
case kSetCT11:
if (Actor_Query_Which_Set_In(kActorOfficerLeary) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerLeary, 310);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerLeary, 0, 1, kActorMcCoy, 5, 4, 7, 8, -1, -1, -1, 10, 300, 0);
}
break;
case kSetMA07:
if (Actor_Query_Which_Set_In(kActorOfficerLeary) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerLeary, 310);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerLeary, 0, 1, kActorMcCoy, 7, 4, 7, 8, -1, -1, -1, 10, 300, 0);
}
break;
case kSetNR01:
if (Actor_Query_Which_Set_In(kActorOfficerLeary) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerLeary, 310);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerLeary, 0, 1, kActorMcCoy, 3, 4, 7, 8, -1, -1, -1, 10, 300, 0);
}
break;
case kSetRC03:
if (Actor_Query_Which_Set_In(kActorOfficerLeary) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerLeary, 310);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerLeary, 0, 1, kActorMcCoy, 18, 4, 7, 8, -1, -1, -1, 10, 300, 0);
}
break;
case kSetUG01:
if (Actor_Query_Which_Set_In(kActorOfficerLeary) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerLeary, 310);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerLeary, 0, 1, kActorMcCoy, 11, 4, 7, 8, -1, -1, -1, 10, 300, 0);
}
break;
@@ -164,31 +165,31 @@ bool AIScriptOfficerLeary::Update() {
case kSetUG05:
case kSetUG06:
if (Actor_Query_Which_Set_In(kActorOfficerLeary) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerLeary, 310);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerLeary, 0, 1, kActorMcCoy, 10, 4, 7, 8, -1, -1, -1, 10, 300, 0);
}
break;
case kSetUG08:
if (Actor_Query_Which_Set_In(kActorOfficerLeary) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerLeary, 310);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerLeary, 0, 1, kActorMcCoy, 13, 4, 7, 8, -1, -1, -1, 10, 300, 0);
}
break;
case kSetUG10:
if (Actor_Query_Which_Set_In(kActorOfficerLeary) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerLeary, 310);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerLeary, 0, 1, kActorMcCoy, 14, 4, 7, 8, -1, -1, -1, 10, 300, 0);
}
break;
case kSetUG12:
if (Actor_Query_Which_Set_In(kActorOfficerLeary) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerLeary, 310);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerLeary, 0, 1, kActorMcCoy, 16, 4, 7, 8, -1, -1, -1, 10, 300, 0);
}
break;
case kSetUG14:
if (Actor_Query_Which_Set_In(kActorOfficerLeary) == Player_Query_Current_Set()) {
- Actor_Set_Goal_Number(kActorOfficerLeary, 310);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyAttackMcCoyAct4);
Non_Player_Actor_Combat_Mode_On(kActorOfficerLeary, 0, 1, kActorMcCoy, 17, 4, 7, 8, -1, -1, -1, 10, 300, 0);
}
break;
@@ -201,8 +202,8 @@ void AIScriptOfficerLeary::TimerExpired(int timer) {
if (timer == kActorTimerAIScriptCustomTask1) {
AI_Countdown_Timer_Reset(kActorOfficerLeary, kActorTimerAIScriptCustomTask1);
if (Actor_Query_In_Set(kActorMcCoy, kSetHF05)) {
- Actor_Set_Goal_Number(kActorOfficerLeary, 430);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 430);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyPoliceAboutToAttackHF05);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordPoliceAboutToAttackHF05);
} else {
Game_Flag_Set(kFlagHF05PoliceAttacked);
}
@@ -231,14 +232,16 @@ void AIScriptOfficerLeary::CompletedMovementTrack() {
if (goal > 308) {
return;
}
- if (goal == 305) {
- Actor_Set_Goal_Number(kActorOfficerLeary, 306);
+ if (goal == kGoalOfficerLearyHuntingAroundAct4) {
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyPrepareToHuntAroundAct4);
return;
}
- if (goal == 307) {
+ if (goal == kGoalOfficerLearyBlockingUG07) {
+ // UG07 before McCoy visits his apartment in Act 4
Non_Player_Actor_Combat_Mode_On(kActorOfficerLeary, 0, 1, kActorMcCoy, 12, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, 0, -1, -1, 15, 300, 0);
}
if (goal == 308) {
+ // goal 308 (and 309) are never triggered in the original code
Actor_Change_Animation_Mode(kActorOfficerLeary, 4);
Actor_Face_Actor(kActorOfficerLeary, kActorMcCoy, true);
Actor_Set_Goal_Number(kActorOfficerLeary, 309);
@@ -246,10 +249,10 @@ void AIScriptOfficerLeary::CompletedMovementTrack() {
}
void AIScriptOfficerLeary::ReceivedClue(int clueId, int fromActorId) {
- if (clueId == 222) {
+ if (clueId == kClueMcCoyRetiredZuben) {
Actor_Modify_Friendliness_To_Other(kActorOfficerLeary, kActorMcCoy, 5);
}
- if (clueId == 215) {
+ if (clueId == kClueMcCoyLetZubenEscape) {
Actor_Modify_Friendliness_To_Other(kActorOfficerLeary, kActorMcCoy, -4);
}
}
@@ -267,14 +270,15 @@ void AIScriptOfficerLeary::OtherAgentEnteredCombatMode(int otherActorId, int com
void AIScriptOfficerLeary::ShotAtAndMissed() {}
bool AIScriptOfficerLeary::ShotAtAndHit() {
- if (Actor_Query_Goal_Number(kActorOfficerLeary) == 307) {
+ // Leary is invincible while blocking the UG07 (before McCoy visits his apartment in Act 4)
+ if (Actor_Query_Goal_Number(kActorOfficerLeary) == kGoalOfficerLearyBlockingUG07) {
Actor_Set_Health(kActorOfficerLeary, 50, 50);
}
return false;
}
void AIScriptOfficerLeary::Retired(int byActorId) {
- Actor_Set_Goal_Number(kActorOfficerLeary, 599);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyDead);
Game_Flag_Set(kFlagMcCoyRetiredHuman);
}
@@ -283,27 +287,27 @@ int AIScriptOfficerLeary::GetFriendlinessModifierIfGetsClue(int otherActorId, in
return 0;
}
switch (clueId) {
- case 242:
+ case kClueMcCoyIsInsane:
return -6;
- case 240:
+ case kClueMcCoyIsAnnoying:
return -2;
- case 239:
+ case kClueMcCoyIsStupid:
return -5;
- case 228:
+ case kClueMcCoyRetiredLutherLance:
return 2;
- case 227:
+ case kClueMcCoyShotZubenInTheBack:
return 4;
- case 226:
+ case kClueMcCoyRetiredSadik:
return 4;
- case 225:
+ case kClueMcCoyRetiredGordo:
return 3;
- case 224:
+ case kClueMcCoyRetiredDektora:
return 3;
- case 223:
+ case kClueMcCoyRetiredLucy:
return 2;
- case 222:
+ case kClueMcCoyRetiredZuben:
return 3;
- case 215:
+ case kClueMcCoyLetZubenEscape:
return -5;
}
return 0;
@@ -312,6 +316,7 @@ int AIScriptOfficerLeary::GetFriendlinessModifierIfGetsClue(int otherActorId, in
bool AIScriptOfficerLeary::GoalChanged(int currentGoalNumber, int newGoalNumber) {
switch (newGoalNumber) {
case kGoalOfficerLearyRC01WalkToCrowd:
+ // kSetRC01
AI_Movement_Track_Flush(kActorOfficerLeary);
if (Random_Query(1, 2) == 1) {
AI_Movement_Track_Append(kActorOfficerLeary, 57, 7);
@@ -344,10 +349,11 @@ bool AIScriptOfficerLeary::GoalChanged(int currentGoalNumber, int newGoalNumber)
Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyDefault);
}
return true;
- case 3:
+ case kGoalOfficerLearyPoliceDoneFromRC01:
+ // kSetFreeSlotG -> kSetFreeSlotC
AI_Movement_Track_Flush(kActorOfficerLeary);
- AI_Movement_Track_Append(kActorOfficerLeary, 39, Random_Query(120, 240));
- AI_Movement_Track_Append(kActorOfficerLeary, 35, 0);
+ AI_Movement_Track_Append(kActorOfficerLeary, 39, Random_Query(120, 240)); // kSetFreeSlotG
+ AI_Movement_Track_Append(kActorOfficerLeary, 35, 0); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerLeary);
return true;
#if BLADERUNNER_ORIGINAL_BUGS
@@ -357,22 +363,25 @@ bool AIScriptOfficerLeary::GoalChanged(int currentGoalNumber, int newGoalNumber)
AI_Countdown_Timer_Start(kActorOfficerLeary, kActorTimerAIScriptCustomTask0, 4); // wait a few seconds before starting taking notes again
return true;
#endif // BLADERUNNER_ORIGINAL_BUGS
- case 99:
+ case kGoalOfficerLearyEndOfAct1:
AI_Movement_Track_Flush(kActorOfficerLeary);
return false;
- case 102:
+ case kGoalOfficerLearyVisitsBulletBob:
+ // kSetRC04
+ // Leary visits Bullet Bob shop - un-triggered
AI_Movement_Track_Flush(kActorOfficerLeary);
AI_Movement_Track_Append(kActorOfficerLeary, 107, 0);
AI_Movement_Track_Append(kActorOfficerLeary, 108, 0);
AI_Movement_Track_Repeat(kActorOfficerLeary);
return true;
- case 300:
- Actor_Set_Goal_Number(kActorOfficerLeary, 305);
+ case kGoalOfficerLearyStartOfAct4:
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyHuntingAroundAct4);
return true;
- case 305:
+ case kGoalOfficerLearyHuntingAroundAct4:
AI_Movement_Track_Flush(kActorOfficerLeary);
switch (Random_Query(1, 10)) {
case 1:
+ // kSetNR01
AI_Movement_Track_Append(kActorOfficerLeary, 398, 15);
AI_Movement_Track_Append(kActorOfficerLeary, 399, 0);
AI_Movement_Track_Append(kActorOfficerLeary, 400, 0);
@@ -383,6 +392,7 @@ bool AIScriptOfficerLeary::GoalChanged(int currentGoalNumber, int newGoalNumber)
AI_Movement_Track_Repeat(kActorOfficerLeary);
break;
case 2:
+ // kSetCT11
AI_Movement_Track_Append(kActorOfficerLeary, 385, 10);
AI_Movement_Track_Append(kActorOfficerLeary, 242, 2);
AI_Movement_Track_Append(kActorOfficerLeary, 386, 2);
@@ -390,6 +400,7 @@ bool AIScriptOfficerLeary::GoalChanged(int currentGoalNumber, int newGoalNumber)
AI_Movement_Track_Repeat(kActorOfficerLeary);
break;
case 3:
+ // kSetDR01_DR02_DR04
AI_Movement_Track_Append(kActorOfficerLeary, 390, 10);
AI_Movement_Track_Append(kActorOfficerLeary, 391, 0);
AI_Movement_Track_Append(kActorOfficerLeary, 392, 5);
@@ -398,21 +409,24 @@ bool AIScriptOfficerLeary::GoalChanged(int currentGoalNumber, int newGoalNumber)
AI_Movement_Track_Repeat(kActorOfficerLeary);
break;
case 4:
+ // kSetRC03 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerLeary, 381, 15);
AI_Movement_Track_Append(kActorOfficerLeary, 382, 0);
AI_Movement_Track_Append(kActorOfficerLeary, 383, 15);
AI_Movement_Track_Append(kActorOfficerLeary, 382, 3);
AI_Movement_Track_Append(kActorOfficerLeary, 384, 0);
- AI_Movement_Track_Append(kActorOfficerLeary, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerLeary, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerLeary);
break;
case 5:
+ // kSetBB01 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerLeary, 388, 10);
AI_Movement_Track_Append(kActorOfficerLeary, 389, 10);
- AI_Movement_Track_Append(kActorOfficerLeary, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerLeary, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerLeary);
break;
case 6:
+ // kSetCT11 - identical to case 2
AI_Movement_Track_Append(kActorOfficerLeary, 385, 10);
AI_Movement_Track_Append(kActorOfficerLeary, 242, 2);
AI_Movement_Track_Append(kActorOfficerLeary, 386, 2);
@@ -424,6 +438,7 @@ bool AIScriptOfficerLeary::GoalChanged(int currentGoalNumber, int newGoalNumber)
// When the police officer is there as well he will kill McCoy because player cannot control him.
case 7:
+ // kSetMA07 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerLeary, 394, 15);
AI_Movement_Track_Append(kActorOfficerLeary, 395, 0);
AI_Movement_Track_Append(kActorOfficerLeary, 396, 0);
@@ -431,23 +446,29 @@ bool AIScriptOfficerLeary::GoalChanged(int currentGoalNumber, int newGoalNumber)
AI_Movement_Track_Append(kActorOfficerLeary, 396, 0);
AI_Movement_Track_Append(kActorOfficerLeary, 395, 0);
AI_Movement_Track_Append(kActorOfficerLeary, 430, 15);
- AI_Movement_Track_Append(kActorOfficerLeary, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerLeary, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerLeary);
break;
#else
case 7:
- // fall through
-#endif
+ // kSetFreeSlotC
+ // just put him away for a few seconds
+ AI_Movement_Track_Append(kActorOfficerLeary, 35, 30); // kSetFreeSlotC
+ AI_Movement_Track_Repeat(kActorOfficerLeary);
+ break;
+#endif // BLADERUNNER_ORIGINAL_BUGS
case 8:
switch (Random_Query(1, 7)) {
case 1:
+ // kSetUG10 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerLeary, 302, 0);
AI_Movement_Track_Append(kActorOfficerLeary, 407, 0);
AI_Movement_Track_Append(kActorOfficerLeary, 408, 0);
- AI_Movement_Track_Append(kActorOfficerLeary, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerLeary, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerLeary);
break;
case 2:
+ // kSetUG14
AI_Movement_Track_Append(kActorOfficerLeary, 536, 0);
AI_Movement_Track_Append(kActorOfficerLeary, 537, 0);
AI_Movement_Track_Append(kActorOfficerLeary, 538, 1);
@@ -456,110 +477,134 @@ bool AIScriptOfficerLeary::GoalChanged(int currentGoalNumber, int newGoalNumber)
AI_Movement_Track_Repeat(kActorOfficerLeary);
break;
case 3:
+ // kSetUG04 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerLeary, 296, 10);
AI_Movement_Track_Append(kActorOfficerLeary, 409, 2);
AI_Movement_Track_Append(kActorOfficerLeary, 296, 10);
- AI_Movement_Track_Append(kActorOfficerLeary, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerLeary, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerLeary);
break;
case 4:
+ // kSetUG05 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerLeary, 411, 10);
AI_Movement_Track_Append(kActorOfficerLeary, 412, 5);
AI_Movement_Track_Append(kActorOfficerLeary, 411, 0);
- AI_Movement_Track_Append(kActorOfficerLeary, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerLeary, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerLeary);
break;
case 5:
+ // kSetUG06 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerLeary, 413, 10);
AI_Movement_Track_Append(kActorOfficerLeary, 414, 0);
AI_Movement_Track_Append_With_Facing(kActorOfficerLeary, 431, 0, 1017);
AI_Movement_Track_Append(kActorOfficerLeary, 432, 10);
- AI_Movement_Track_Append(kActorOfficerLeary, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerLeary, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerLeary);
break;
case 6:
+ // kSetUG07 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerLeary, 415, 0);
AI_Movement_Track_Append_With_Facing(kActorOfficerLeary, 416, 0, 620);
AI_Movement_Track_Append(kActorOfficerLeary, 417, 0);
AI_Movement_Track_Append(kActorOfficerLeary, 418, 0);
- AI_Movement_Track_Append(kActorOfficerLeary, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerLeary, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerLeary);
break;
case 7:
+ // kSetUG01 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerLeary, 405, 10);
AI_Movement_Track_Append(kActorOfficerLeary, 406, 0);
- AI_Movement_Track_Append(kActorOfficerLeary, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerLeary, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerLeary);
return false;
default:
return false;
}
- // is falling through here - a bug in original game?
- // fall through
+#if BLADERUNNER_ORIGINAL_BUGS
+ // fall through - a bug in original game
+#else
+ break;
+#endif // BLADERUNNER_ORIGINAL_BUGS
case 9:
- if (Random_Query(1, 2) - 1 == 1) {
+ if (Random_Query(1, 2) == 2) {
+ // kSetUG09 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerLeary, 433, 10);
AI_Movement_Track_Append(kActorOfficerLeary, 434, 0);
AI_Movement_Track_Append(kActorOfficerLeary, 435, 0);
- AI_Movement_Track_Append(kActorOfficerLeary, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerLeary, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerLeary);
return false;
}
+ // kSetUG08 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerLeary, 420, 10);
AI_Movement_Track_Append(kActorOfficerLeary, 422, 2);
AI_Movement_Track_Append(kActorOfficerLeary, 421, 1);
AI_Movement_Track_Append_With_Facing(kActorOfficerLeary, 422, 4, 182);
AI_Movement_Track_Append(kActorOfficerLeary, 420, 10);
- AI_Movement_Track_Append(kActorOfficerLeary, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerLeary, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerLeary);
- // is falling through here - a bug in original game?
- // fall through
+#if BLADERUNNER_ORIGINAL_BUGS
+ // fall through - a bug in original game
+#else
+ return false;
+#endif // BLADERUNNER_ORIGINAL_BUGS
case 10:
+ // kSetUG12 -> kSetFreeSlotC
AI_Movement_Track_Append(kActorOfficerLeary, 310, 0);
AI_Movement_Track_Append(kActorOfficerLeary, 307, 0);
AI_Movement_Track_Append(kActorOfficerLeary, 309, 0);
AI_Movement_Track_Append(kActorOfficerLeary, 310, 0);
- AI_Movement_Track_Append(kActorOfficerLeary, 35, 30);
+ AI_Movement_Track_Append(kActorOfficerLeary, 35, 30); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerLeary);
return false;
default:
return false;
}
- // fall through
- case 306:
- Actor_Set_Goal_Number(kActorOfficerLeary, 305);
+#if BLADERUNNER_ORIGINAL_BUGS
+ // fall through - a bug in original game
+#else
+ return false;
+#endif // BLADERUNNER_ORIGINAL_BUGS
+ case kGoalOfficerLearyPrepareToHuntAroundAct4:
+ // aux goal in order to immediately switch back to kGoalOfficerLearyHuntingAroundAct4 goal
+ // and run GoalChanged() for kGoalOfficerLearyHuntingAroundAct4 again
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyHuntingAroundAct4);
return true;
- case 307:
+ case kGoalOfficerLearyBlockingUG07:
+ // kSetUG07
AI_Movement_Track_Flush(kActorOfficerLeary);
AI_Movement_Track_Append_With_Facing(kActorOfficerLeary, 416, 0, 556);
Actor_Change_Animation_Mode(kActorOfficerLeary, 4);
AI_Movement_Track_Repeat(kActorOfficerLeary);
return true;
case 308:
+ // kSetCT01_CT12
+ // never triggered - TODO a bug? Could be related to cut McCoy's arrest from Grayford
AI_Movement_Track_Flush(kActorOfficerLeary);
AI_Movement_Track_Append_Run_With_Facing(kActorOfficerLeary, 440, 2, 355);
AI_Movement_Track_Append_Run_With_Facing(kActorOfficerLeary, 441, 0, 825);
AI_Movement_Track_Repeat(kActorOfficerLeary);
return true;
- case 400:
+ case kGoalOfficerLearyStartOfAct5:
+ // kSetFreeSlotC
AI_Movement_Track_Flush(kActorOfficerLeary);
- AI_Movement_Track_Append(kActorOfficerLeary, 35, 0);
+ AI_Movement_Track_Append(kActorOfficerLeary, 35, 0); // kSetFreeSlotC
AI_Movement_Track_Repeat(kActorOfficerLeary);
- Actor_Set_Goal_Number(kActorOfficerLeary, 410);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyDummyGoalAct5);
return true;
- case 420:
+ case kGoalOfficerLearyPoliceWait120SecondsToAttackHF05:
AI_Countdown_Timer_Reset(kActorOfficerLeary, kActorTimerAIScriptCustomTask1);
AI_Countdown_Timer_Start(kActorOfficerLeary, kActorTimerAIScriptCustomTask1, 120);
- Actor_Set_Goal_Number(kActorOfficerLeary, 410);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyDummyGoalAct5);
return true;
- case 425:
+ case kGoalOfficerLearyPoliceWait60SecondsToAttackHF05:
AI_Countdown_Timer_Reset(kActorOfficerLeary, kActorTimerAIScriptCustomTask1);
AI_Countdown_Timer_Start(kActorOfficerLeary, kActorTimerAIScriptCustomTask1, 60);
- Actor_Set_Goal_Number(kActorOfficerLeary, 410);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyDummyGoalAct5);
return true;
- case 430:
- Actor_Set_Goal_Number(kActorOfficerLeary, 410);
- Actor_Set_Goal_Number(kActorOfficerGrayford, 410);
+ case kGoalOfficerLearyPoliceAboutToAttackHF05:
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyDummyGoalAct5);
+ Actor_Set_Goal_Number(kActorOfficerGrayford, kGoalOfficerGrayfordDummyGoalAct5);
return false;
default:
return false;
@@ -1252,6 +1297,7 @@ void AIScriptOfficerLeary::SetAnimationState(int animationState, int animationFr
bool AIScriptOfficerLeary::ReachedMovementTrackWaypoint(int waypointId) {
if (waypointId == 57 || waypointId == 58) {
+ // Interrogating crowd in kSetRC01
Game_Flag_Set(kFlagOfficerLearyTakingNotes);
AI_Countdown_Timer_Reset(kActorOfficerLeary, kActorTimerAIScriptCustomTask2);
AI_Countdown_Timer_Start(kActorOfficerLeary, kActorTimerAIScriptCustomTask2, 6);
@@ -1260,7 +1306,7 @@ bool AIScriptOfficerLeary::ReachedMovementTrackWaypoint(int waypointId) {
}
void AIScriptOfficerLeary::FledCombat() {
- Actor_Set_Goal_Number(kActorOfficerLeary, 300);
+ Actor_Set_Goal_Number(kActorOfficerLeary, kGoalOfficerLearyStartOfAct4);
}
} // End of namespace BladeRunner