diff options
Diffstat (limited to 'engines/bladerunner/script/ai')
-rw-r--r-- | engines/bladerunner/script/ai/desk_clerk.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/engines/bladerunner/script/ai/desk_clerk.cpp b/engines/bladerunner/script/ai/desk_clerk.cpp index 8b1e91fd43..d7110bc54f 100644 --- a/engines/bladerunner/script/ai/desk_clerk.cpp +++ b/engines/bladerunner/script/ai/desk_clerk.cpp @@ -122,6 +122,12 @@ bool AIScriptDeskClerk::GoalChanged(int currentGoalNumber, int newGoalNumber) { case kGoalDeskClerkRecovered: Actor_Put_In_Set(kActorDeskClerk, kSetCT09); Actor_Set_At_XYZ(kActorDeskClerk, 282.0f, 360.52f, 743.0f, 513); +#if BLADERUNNER_ORIGINAL_BUGS +#else + Actor_Change_Animation_Mode(kActorDeskClerk, kAnimationModeIdle); + _animationFrame = 0; + _animationState = 0; +#endif // BLADERUNNER_ORIGINAL_BUGS break; case kGoalDeskClerkKnockedOut: // fall through @@ -135,6 +141,32 @@ bool AIScriptDeskClerk::GoalChanged(int currentGoalNumber, int newGoalNumber) { bool AIScriptDeskClerk::UpdateAnimation(int *animation, int *frame) { +#if BLADERUNNER_ORIGINAL_BUGS +#else + // Fixing a bug for when the Clerk gets stuck in animation id 668, after Act 3: + // - when using HDFRAMES, the clerk will briefly be in the choking animation when McCoy re-enters + // - when using CDFRAMES, the game would crash with a message "Unable to locate page 2214 for animation 668 frame 4!" + // This occurs when: + // The player walks out too fast from the scene where Leon is choking the clerk in Act 3. + // Hence, Leon's AI script's OtherAgentExitedThisScene() is triggered, Leon is gone, + // and DeskClerk goal is set to kGoalDeskClerkKnockedOut which puts him in kSetFreeSlotH without changing his animation id. + // Thus later on, when the player leaves Chinatown and returns, DeskClerk's (update()) will set his goal to kGoalDeskClerkRecovered + // In Act 4, the CDFRAMES#.DAT method loads a reduced number of animations for DeskClerk causing the crash when McCoy visits the Yukon lobby. + // + // The following fix will work with awry saved games too (even from the original game in theory), + // that have this buggy state stored. + // We also include the rest of the problematic states that are missing animations in Act 4 + // (ie. all _animationState >= 6) + if (Global_Variable_Query(kVariableChapter) > 3 + && _animationState >= 6 + ) { + Actor_Change_Animation_Mode(kActorDeskClerk, kAnimationModeIdle); + *animation = 661; + _animationFrame = 0; + _animationState = 0; + } +#endif // BLADERUNNER_ORIGINAL_BUGS + switch (_animationState) { case 0: if (_flag1) { |