diff options
author | Thanasis Antoniou | 2019-05-19 14:33:12 +0300 |
---|---|---|
committer | Thanasis Antoniou | 2019-05-19 14:34:01 +0300 |
commit | ea3a9f211da74ffd3aa35328147566160a73d680 (patch) | |
tree | 0dd73d3e45466cb420c3e8ace2e9ecbc9e76fa8e /engines/bladerunner/script/ai | |
parent | 10ac612b9019aa299f3182180745ba6d215e93e5 (diff) | |
download | scummvm-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.cpp | 2 | ||||
-rw-r--r-- | engines/bladerunner/script/ai/free_slot_b.cpp | 6 | ||||
-rw-r--r-- | engines/bladerunner/script/ai/moraji.cpp | 2 | ||||
-rw-r--r-- | engines/bladerunner/script/ai/officer_grayford.cpp | 359 | ||||
-rw-r--r-- | engines/bladerunner/script/ai/officer_leary.cpp | 216 |
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 |