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/officer_leary.cpp | |
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/officer_leary.cpp')
-rw-r--r-- | engines/bladerunner/script/ai/officer_leary.cpp | 216 |
1 files changed, 131 insertions, 85 deletions
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 |