diff options
Diffstat (limited to 'engines/bladerunner/script/ai')
-rw-r--r-- | engines/bladerunner/script/ai/desk_clerk.cpp | 166 | ||||
-rw-r--r-- | engines/bladerunner/script/ai/leon.cpp | 344 |
2 files changed, 257 insertions, 253 deletions
diff --git a/engines/bladerunner/script/ai/desk_clerk.cpp b/engines/bladerunner/script/ai/desk_clerk.cpp index 6af7d5d4ca..f723b3335b 100644 --- a/engines/bladerunner/script/ai/desk_clerk.cpp +++ b/engines/bladerunner/script/ai/desk_clerk.cpp @@ -25,8 +25,8 @@ namespace BladeRunner { AIScriptDeskClerk::AIScriptDeskClerk(BladeRunnerEngine *vm) : AIScriptBase(vm) { - _var1 = 0; - _var2 = 0; + _flag1 = false; + _flag2 = false; _var3 = 75; } @@ -36,29 +36,32 @@ void AIScriptDeskClerk::Initialize() { _animationStateNext = 0; _animationNext = 0; - _var1 = 0; - _var2 = 0; + _flag1 = false; + _flag2 = false; _var3 = 75; - Actor_Set_Goal_Number(kActorDeskClerk, 0); + Actor_Set_Goal_Number(kActorDeskClerk, kGoalDeskClerkDefault); } bool AIScriptDeskClerk::Update() { - if (Actor_Query_Goal_Number(kActorDeskClerk) == 1 - && Player_Query_Current_Set() != kSetCT01_CT12 - && Player_Query_Current_Set() != kSetCT03_CT04 - && Player_Query_Current_Set() != kSetCT08_CT51_UG12 - && Player_Query_Current_Set() != kSetCT02 - && Player_Query_Current_Set() != kSetCT05 - && Player_Query_Current_Set() != kSetCT06 - && Player_Query_Current_Set() != kSetCT07 - && Player_Query_Current_Set() != kSetCT09 - && Player_Query_Current_Set() != kSetCT10 - && Player_Query_Current_Set() != kSetCT11) { - Actor_Set_Goal_Number(kActorDeskClerk, 2); + if (Actor_Query_Goal_Number(kActorDeskClerk) == kGoalDeskClerkKnockedOut + && Player_Query_Current_Set() != kSetCT01_CT12 + && Player_Query_Current_Set() != kSetCT03_CT04 + && Player_Query_Current_Set() != kSetCT08_CT51_UG12 + && Player_Query_Current_Set() != kSetCT02 + && Player_Query_Current_Set() != kSetCT05 + && Player_Query_Current_Set() != kSetCT06 + && Player_Query_Current_Set() != kSetCT07 + && Player_Query_Current_Set() != kSetCT09 + && Player_Query_Current_Set() != kSetCT10 + && Player_Query_Current_Set() != kSetCT11 + ) { + Actor_Set_Goal_Number(kActorDeskClerk, kGoalDeskClerkRecovered); } - if (Global_Variable_Query(kVariableChapter) == 5 && Actor_Query_Goal_Number(kActorDeskClerk) < 400) { - Actor_Set_Goal_Number(kActorDeskClerk, 400); + if (Global_Variable_Query(kVariableChapter) == 5 + && Actor_Query_Goal_Number(kActorDeskClerk) < kGoalDeskClerkGone + ) { + Actor_Set_Goal_Number(kActorDeskClerk, kGoalDeskClerkGone); } return false; @@ -114,13 +117,13 @@ int AIScriptDeskClerk::GetFriendlinessModifierIfGetsClue(int otherActorId, int c bool AIScriptDeskClerk::GoalChanged(int currentGoalNumber, int newGoalNumber) { switch (newGoalNumber) { - case 0: - case 2: + case kGoalDeskClerkDefault: + case kGoalDeskClerkRecovered: Actor_Put_In_Set(kActorDeskClerk, kSetCT09); Actor_Set_At_XYZ(kActorDeskClerk, 282.0f, 360.52f, 743.0f, 513); break; - case 1: - case 400: + case kGoalDeskClerkKnockedOut: + case kGoalDeskClerkGone: Actor_Put_In_Set(kActorDeskClerk, kSetFreeSlotH); Actor_Set_At_Waypoint(kActorDeskClerk, 40, 0); break; @@ -129,61 +132,49 @@ bool AIScriptDeskClerk::GoalChanged(int currentGoalNumber, int newGoalNumber) { } bool AIScriptDeskClerk::UpdateAnimation(int *animation, int *frame) { - int frameRes; switch (_animationState) { case 0: - if (_var1 > 1) { - frameRes = _animationFrame; - } else if (_var1) { + if (_flag1) { *animation = 662; _animationFrame++; - if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(662)) { _animationFrame = 0; - _var1 = 0; + _flag1 = false; *animation = 661; _var3 = Random_Query(50, 100); } - frameRes = _animationFrame; } else { - if (_var3) + if (_var3 != 0) { --_var3; + } *animation = 661; _animationFrame++; - - if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(661)) { - frameRes = _animationFrame; - } else { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(661)) { _animationFrame = 0; - if (!_var3) { + if (_var3 == 0) { *animation = 662; - _var1 = 1; + _flag1 = true; } - - frameRes = _animationFrame; } } break; case 1: - frameRes = _animationFrame; *animation = 663; - if (!frameRes && _var2) { + if (_animationFrame == 0 + && _flag2 + ) { *animation = 661; _animationState = 0; - _var1 = 0; + _flag1 = false; } else { _animationFrame++; - - if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(*animation)) { - frameRes = _animationFrame; - } else { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(*animation)) { _animationFrame = 0; - frameRes = 0; } } break; @@ -191,12 +182,8 @@ bool AIScriptDeskClerk::UpdateAnimation(int *animation, int *frame) { case 2: *animation = 664; _animationFrame++; - - if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(664)) { - frameRes = _animationFrame; - } else { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(664)) { _animationFrame = 0; - frameRes = 0; _animationState = 1; *animation = 663; } @@ -205,12 +192,8 @@ bool AIScriptDeskClerk::UpdateAnimation(int *animation, int *frame) { case 3: *animation = 665; _animationFrame++; - - if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(665)) { - frameRes = _animationFrame; - } else { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(665)) { _animationFrame = 0; - frameRes = 0; _animationState = 1; *animation = 663; } @@ -219,12 +202,8 @@ bool AIScriptDeskClerk::UpdateAnimation(int *animation, int *frame) { case 4: *animation = 666; _animationFrame++; - - if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(666)) { - frameRes = _animationFrame; - } else { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(666)) { _animationFrame = 0; - frameRes = 0; _animationState = 1; *animation = 663; } @@ -233,12 +212,8 @@ bool AIScriptDeskClerk::UpdateAnimation(int *animation, int *frame) { case 5: *animation = 667; _animationFrame++; - - if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(667)) { - frameRes = _animationFrame; - } else { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(667)) { _animationFrame = 0; - frameRes = 0; _animationState = 1; *animation = 663; } @@ -247,31 +222,24 @@ bool AIScriptDeskClerk::UpdateAnimation(int *animation, int *frame) { case 6: *animation = 668; _animationFrame++; - - if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(668)) { - frameRes = _animationFrame; - } else { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(668)) { _animationFrame = 0; - frameRes = 0; } break; case 7: *animation = 669; - if (!_animationFrame && _var2) { + if (_animationFrame == 0 + && _flag2 + ) { Actor_Change_Animation_Mode(kActorDeskClerk, 72); *animation = 668; _animationState = 6; - frameRes = _animationFrame; } else { _animationFrame++; - - if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(*animation)) { - frameRes = _animationFrame; - } else { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(*animation)) { _animationFrame = 0; - frameRes = 0; } } break; @@ -279,33 +247,24 @@ bool AIScriptDeskClerk::UpdateAnimation(int *animation, int *frame) { case 8: *animation = 670; _animationFrame++; - - if (_animationFrame <= Slice_Animation_Query_Number_Of_Frames(670) - 2) { - frameRes = _animationFrame; - } else { + if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(670) - 2) { Ambient_Sounds_Play_Sound(206, 40, 30, 30, 99); - Actor_Set_Goal_Number(kActorDeskClerk, 1); - Actor_Change_Animation_Mode(kActorDeskClerk, 0); + Actor_Set_Goal_Number(kActorDeskClerk, kGoalDeskClerkKnockedOut); + Actor_Change_Animation_Mode(kActorDeskClerk, kAnimationModeIdle); *animation = 661; _animationFrame = 0; - frameRes = 0; _animationState = 0; } break; - - default: - frameRes = _animationFrame; - break; } - *frame = frameRes; - + *frame = _animationFrame; return true; } bool AIScriptDeskClerk::ChangeAnimationMode(int mode) { switch (mode) { - case 0: + case kAnimationModeIdle: switch (_animationState) { case 0: _animationState = 8; @@ -317,7 +276,7 @@ bool AIScriptDeskClerk::ChangeAnimationMode(int mode) { case 3: case 4: case 5: - _var2 = 1; + _flag2 = true; break; case 6: @@ -327,40 +286,40 @@ bool AIScriptDeskClerk::ChangeAnimationMode(int mode) { default: _animationState = 0; _animationFrame = 0; - _var1 = 0; + _flag1 = false; _var3 = Random_Query(70, 140); break; } break; - case 3: + case kAnimationModeTalk: _animationState = 1; _animationFrame = 0; - _var2 = 0; + _flag2 = false; break; case 12: _animationState = 2; _animationFrame = 0; - _var2 = 0; + _flag2 = false; break; case 13: _animationState = 3; _animationFrame = 0; - _var2 = 0; + _flag2 = false; break; case 14: _animationState = 4; _animationFrame = 0; - _var2 = 0; + _flag2 = false; break; case 15: _animationState = 5; _animationFrame = 0; - _var2 = 0; + _flag2 = false; break; case 26: @@ -371,7 +330,7 @@ bool AIScriptDeskClerk::ChangeAnimationMode(int mode) { case 58: _animationState = 7; _animationFrame = 0; - _var2 = 0; + _flag2 = false; break; case 72: @@ -380,9 +339,6 @@ bool AIScriptDeskClerk::ChangeAnimationMode(int mode) { _animationFrame = 0; } break; - - default: - break; } return true; diff --git a/engines/bladerunner/script/ai/leon.cpp b/engines/bladerunner/script/ai/leon.cpp index bbb940eea9..0e1a1156ce 100644 --- a/engines/bladerunner/script/ai/leon.cpp +++ b/engines/bladerunner/script/ai/leon.cpp @@ -25,17 +25,17 @@ namespace BladeRunner { AIScriptLeon::AIScriptLeon(BladeRunnerEngine *vm) : AIScriptBase(vm) { - var_45EDA0_z = 0.0f; - var_45EDA4_y = 0.0f; - var_45EDA8_x = 0.0f; - var_45EDAC = 0; + _mcCoyPositionX = 0.0f; + _mcCoyPositionY = 0.0f; + _mcCoyPositionZ = 0.0f; + _flag = false; } void AIScriptLeon::Initialize() { - var_45EDA0_z = 0.0f; - var_45EDA4_y = 0.0f; - var_45EDA8_x = 0.0f; - var_45EDAC = 0; + _mcCoyPositionX = 0.0f; + _mcCoyPositionY = 0.0f; + _mcCoyPositionZ = 0.0f; + _flag = false; _animationStateNext = 0; _animationNext = 0; _animationFrame = 0; @@ -44,22 +44,28 @@ void AIScriptLeon::Initialize() { bool AIScriptLeon::Update() { int goalNumber = Actor_Query_Goal_Number(kActorLeon); - if (goalNumber == 3) { - Actor_Set_Goal_Number(kActorLeon, 4); + + if (goalNumber == kGoalLeonPrepareTalkToMcCoy) { + Actor_Set_Goal_Number(kActorLeon, kGoalLeonTalkToMcCoy); return true; } - if (goalNumber == 5) { - if (Player_Query_Combat_Mode() == 1) { - Actor_Set_Goal_Number(kActorLeon, 7); + + if (goalNumber == kGoalLeonApproachMcCoy) { + if (Player_Query_Combat_Mode()) { + Actor_Set_Goal_Number(kActorLeon, kGoalLeonLeave); return true; } - if (Actor_Query_Inch_Distance_From_Actor(kActorLeon, 0) <= 36 && !Player_Query_Combat_Mode()) { - Actor_Set_Goal_Number(kActorLeon, 6); + + if ( Actor_Query_Inch_Distance_From_Actor(kActorLeon, kActorMcCoy) <= 36 + && !Player_Query_Combat_Mode() + ) { + Actor_Set_Goal_Number(kActorLeon, kGoalLeonPunchMcCoy); return true; } - if (sub_446700(kActorLeon, var_45EDA8_x, var_45EDA4_y, var_45EDA0_z) > 12.0f) { - Actor_Query_XYZ(kActorMcCoy, &var_45EDA8_x, &var_45EDA4_y, &var_45EDA0_z); - Async_Actor_Walk_To_XYZ(kActorLeon, var_45EDA8_x, var_45EDA4_y, var_45EDA0_z, 24, false); + + if (distanceTo(kActorLeon, _mcCoyPositionX, _mcCoyPositionY, _mcCoyPositionZ) > 12.0f) { + Actor_Query_XYZ(kActorMcCoy, &_mcCoyPositionX, &_mcCoyPositionY, &_mcCoyPositionZ); + Async_Actor_Walk_To_XYZ(kActorLeon, _mcCoyPositionX, _mcCoyPositionY, _mcCoyPositionZ, 24, false); } return true; } @@ -67,14 +73,16 @@ bool AIScriptLeon::Update() { } void AIScriptLeon::TimerExpired(int timer) { - if (timer == 0 && Actor_Query_Goal_Number(kActorLeon) == 7) { + if (timer == 0 + && Actor_Query_Goal_Number(kActorLeon) == kGoalLeonLeave + ) { AI_Countdown_Timer_Reset(kActorLeon, 0); - Actor_Set_Goal_Number(kActorLeon, 8); + Actor_Set_Goal_Number(kActorLeon, kGoalLeonGone); } } void AIScriptLeon::CompletedMovementTrack() { - if (Actor_Query_Goal_Number(kActorLeon) == 7) { + if (Actor_Query_Goal_Number(kActorLeon) == kGoalLeonLeave) { AI_Countdown_Timer_Reset(kActorLeon, 0); AI_Countdown_Timer_Start(kActorLeon, 0, 8); //return true; @@ -85,13 +93,13 @@ void AIScriptLeon::CompletedMovementTrack() { void AIScriptLeon::ReceivedClue(int clueId, int fromActorId) {} void AIScriptLeon::ClickedByPlayer() { - if (Actor_Query_Goal_Number(kActorLeon) == 1) { - Game_Flag_Set(539); + if (Actor_Query_Goal_Number(kActorLeon) == kGoalLeonHoldingDeskClerk) { + Game_Flag_Set(kFlagCT09LeonInterrupted); Player_Loses_Control(); Actor_Face_Actor(kActorMcCoy, kActorLeon, true); ADQ_Flush(); - Actor_Says(kActorMcCoy, 495, 3); - Actor_Set_Goal_Number(kActorLeon, 2); + Actor_Says(kActorMcCoy, 495, kAnimationModeTalk); + Actor_Set_Goal_Number(kActorLeon, kGoalLeonReleaseDeskClerk); //return true; } //return false; @@ -100,7 +108,9 @@ void AIScriptLeon::ClickedByPlayer() { void AIScriptLeon::EnteredScene(int sceneId) {} void AIScriptLeon::OtherAgentEnteredThisScene(int otherActorId) { - if (otherActorId == kActorMcCoy && Actor_Query_Goal_Number(kActorLeon) == 7) { + if (otherActorId == kActorMcCoy + && Actor_Query_Goal_Number(kActorLeon) == kGoalLeonLeave + ) { AI_Countdown_Timer_Reset(kActorLeon, 0); AI_Movement_Track_Flush(kActorLeon); AI_Movement_Track_Append(kActorLeon, 353, 0); @@ -111,23 +121,28 @@ void AIScriptLeon::OtherAgentEnteredThisScene(int otherActorId) { } void AIScriptLeon::OtherAgentExitedThisScene(int otherActorId) { - if (otherActorId == kActorMcCoy && Actor_Query_Which_Set_In(kActorLeon) == 33) { + if (otherActorId == kActorMcCoy + && Actor_Query_Which_Set_In(kActorLeon) == kSetCT11 + ) { AI_Movement_Track_Flush(kActorLeon); ADQ_Flush(); - Actor_Set_Goal_Number(kActorLeon, 8); - Actor_Set_Goal_Number(kActorDeskClerk, 1); + Actor_Set_Goal_Number(kActorLeon, kGoalLeonGone); + Actor_Set_Goal_Number(kActorDeskClerk, kGoalDeskClerkKnockedOut); //return true; } ///return false; } void AIScriptLeon::OtherAgentEnteredCombatMode(int otherActorId, int combatMode) { - if (otherActorId == kActorMcCoy && combatMode == 1 && Actor_Query_Goal_Number(kActorLeon) == 1) { - Game_Flag_Set(539); + if (otherActorId == kActorMcCoy + && combatMode == 1 + && Actor_Query_Goal_Number(kActorLeon) == kGoalLeonHoldingDeskClerk + ) { + Game_Flag_Set(kFlagCT09LeonInterrupted); Player_Loses_Control(); Actor_Face_Actor(kActorMcCoy, kActorLeon, true); - Actor_Says(kActorMcCoy, 500, 5); - Actor_Set_Goal_Number(kActorLeon, 2); + Actor_Says(kActorMcCoy, 500, kAnimationModeCombatAim); + Actor_Set_Goal_Number(kActorLeon, kGoalLeonReleaseDeskClerk); //return true; } //return false; @@ -136,8 +151,8 @@ void AIScriptLeon::OtherAgentEnteredCombatMode(int otherActorId, int combatMode) void AIScriptLeon::ShotAtAndMissed() {} bool AIScriptLeon::ShotAtAndHit() { - if (Actor_Query_Goal_Number(kActorLeon) != 7) { - Actor_Set_Goal_Number(kActorLeon, 7); + if (Actor_Query_Goal_Number(kActorLeon) != kGoalLeonLeave) { + Actor_Set_Goal_Number(kActorLeon, kGoalLeonLeave); } return false; } @@ -150,94 +165,101 @@ int AIScriptLeon::GetFriendlinessModifierIfGetsClue(int otherActorId, int clueId bool AIScriptLeon::GoalChanged(int currentGoalNumber, int newGoalNumber) { switch (newGoalNumber) { - case 8: + case kGoalLeonDefault: Actor_Put_In_Set(kActorLeon, kSetFreeSlotA); - AI_Movement_Track_Flush(kActorLeon); + Actor_Change_Animation_Mode(kActorLeon, kAnimationModeIdle); return true; - case 7: - Actor_Force_Stop_Walking(kActorLeon); - AI_Movement_Track_Flush(kActorLeon); - AI_Movement_Track_Append(kActorLeon, 351, 0); - AI_Movement_Track_Append(kActorLeon, 352, 0); - AI_Movement_Track_Repeat(kActorLeon); + + case kGoalLeonHoldingDeskClerk: + Actor_Change_Animation_Mode(kActorDeskClerk, 72); + Actor_Change_Animation_Mode(kActorLeon, 72); + Actor_Put_In_Set(kActorLeon, kSetCT09); + Actor_Set_At_XYZ(kActorLeon, 264.0f, 348.52f, 827.0f, 0); + Actor_Face_Actor(kActorDeskClerk, kActorLeon, true); + ADQ_Add(kActorLeon, 0, 16); + ADQ_Add(kActorDeskClerk, 0, 58); + ADQ_Add(kActorLeon, 10, 15); + ADQ_Add(kActorDeskClerk, 10, 58); + ADQ_Add(kActorLeon, 20, 16); return true; - case 6: - Player_Loses_Control(); - Actor_Says(kActorLeon, 40, 3); - Actor_Says(kActorMcCoy, 510, 3); - Actor_Says(kActorLeon, 50, 3); - Actor_Change_Animation_Mode(kActorLeon, 6); - return false; - case 5: + + case kGoalLeonReleaseDeskClerk: + Actor_Change_Animation_Mode(kActorLeon, 26); + Actor_Change_Animation_Mode(kActorDeskClerk, 26); return true; - case 4: + + case kGoalLeonTalkToMcCoy: Actor_Face_Actor(kActorLeon, kActorMcCoy, true); Player_Set_Combat_Mode(false); Actor_Says(kActorLeon, 30, 12); Actor_Face_Actor(kActorMcCoy, kActorLeon, true); - if (Player_Query_Combat_Mode() == 1) { + if (Player_Query_Combat_Mode()) { Player_Set_Combat_Mode(false); } Actor_Says(kActorMcCoy, 505, 23); Actor_Says(kActorLeon, 60, 13); Player_Gains_Control(); - Loop_Actor_Walk_To_XYZ(kActorLeon, 233.0f, 349.0f, 849.0f, 0, 0, false, 0); - Actor_Face_Actor(kActorLeon, 0, true); + Loop_Actor_Walk_To_XYZ(kActorLeon, 233.0f, 349.0f, 849.0f, 0, false, false, 0); + Actor_Face_Actor(kActorLeon, kActorMcCoy, true); Actor_Face_Actor(kActorMcCoy, kActorLeon, true); Actor_Says(kActorMcCoy, 515, 18); Actor_Says_With_Pause(kActorLeon, 70, 0.3f, 12); Actor_Says(kActorMcCoy, 520, 15); Actor_Says(kActorLeon, 80, 12); - Loop_Actor_Walk_To_XYZ(kActorLeon, 198.0f, 349.0f, 865.0f, 0, 0, false, 0); - Actor_Face_Actor(kActorLeon, 0, true); + Loop_Actor_Walk_To_XYZ(kActorLeon, 198.0f, 349.0f, 865.0f, 0, false, false, 0); + Actor_Face_Actor(kActorLeon, kActorMcCoy, true); Actor_Face_Actor(kActorMcCoy, kActorLeon, true); - if (Actor_Clue_Query(kActorMcCoy, kClueWantedPoster)) { + if (Actor_Clue_Query(kActorMcCoy, kClueWantedPoster)) { // there is no way how to obtain this poster Actor_Says_With_Pause(kActorMcCoy, 525, 0.2f, 14); Actor_Says(kActorLeon, 90, 13); Actor_Says(kActorMcCoy, 530, 16); - Actor_Set_Goal_Number(kActorLeon, 5); + Actor_Set_Goal_Number(kActorLeon, kGoalLeonApproachMcCoy); } else { Actor_Says_With_Pause(kActorMcCoy, 535, 0.8f, 17); Actor_Says(kActorLeon, 100, 13); Actor_Says_With_Pause(kActorMcCoy, 540, 0.0f, 19); - Actor_Says(kActorLeon, 110, 3); + Actor_Says(kActorLeon, 110, kAnimationModeTalk); Actor_Says(kActorMcCoy, 550, 17); Actor_Says(kActorMcCoy, 555, 18); Actor_Says(kActorLeon, 120, 13); - Actor_Says(kActorMcCoy, 560, 3); - Actor_Says_With_Pause(kActorLeon, 130, 0.8f, 3); + Actor_Says(kActorMcCoy, 560, kAnimationModeTalk); + Actor_Says_With_Pause(kActorLeon, 130, 0.8f, kAnimationModeTalk); Actor_Face_Current_Camera(kActorMcCoy, true); Actor_Says(kActorMcCoy, 565, 18); Actor_Face_Actor(kActorMcCoy, kActorLeon, true); Actor_Says(kActorLeon, 140, 12); Actor_Says_With_Pause(kActorMcCoy, 570, 0.0f, 17); Actor_Says_With_Pause(kActorMcCoy, 575, 1.2f, 13); - Actor_Says(kActorLeon, 150, 3); - Actor_Says(kActorMcCoy, 580, 3); + Actor_Says(kActorLeon, 150, kAnimationModeTalk); + Actor_Says(kActorMcCoy, 580, kAnimationModeTalk); Actor_Says(kActorLeon, 160, 13); Actor_Says(kActorLeon, 170, 12); - Actor_Set_Goal_Number(kActorLeon, 7); + Actor_Set_Goal_Number(kActorLeon, kGoalLeonLeave); } return true; - case 2: - Actor_Change_Animation_Mode(kActorLeon, 26); - Actor_Change_Animation_Mode(kActorDeskClerk, 26); + + case kGoalLeonApproachMcCoy: return true; - case 1: - Actor_Change_Animation_Mode(kActorDeskClerk, 72); - Actor_Change_Animation_Mode(kActorLeon, 72); - Actor_Put_In_Set(kActorLeon, kSetCT09); - Actor_Set_At_XYZ(kActorLeon, 264.0f, 348.52f, 827.0f, 0); - Actor_Face_Actor(kActorDeskClerk, kActorLeon, true); - ADQ_Add(kActorLeon, 0, 16); - ADQ_Add(kActorDeskClerk, 0, 58); - ADQ_Add(kActorLeon, 10, 15); - ADQ_Add(kActorDeskClerk, 10, 58); - ADQ_Add(kActorLeon, 20, 16); + + case kGoalLeonPunchMcCoy: + Player_Loses_Control(); + Actor_Says(kActorLeon, 40, kAnimationModeTalk); + Actor_Says(kActorMcCoy, 510, kAnimationModeTalk); + Actor_Says(kActorLeon, 50, kAnimationModeTalk); + Actor_Change_Animation_Mode(kActorLeon, kAnimationModeCombatAttack); + return false; + + case kGoalLeonLeave: + Actor_Force_Stop_Walking(kActorLeon); + AI_Movement_Track_Flush(kActorLeon); + AI_Movement_Track_Append(kActorLeon, 351, 0); + AI_Movement_Track_Append(kActorLeon, 352, 0); + AI_Movement_Track_Repeat(kActorLeon); return true; - case 0: + + case kGoalLeonGone: Actor_Put_In_Set(kActorLeon, kSetFreeSlotA); - Actor_Change_Animation_Mode(kActorLeon, 0); + AI_Movement_Track_Flush(kActorLeon); return true; } return false; @@ -245,110 +267,126 @@ bool AIScriptLeon::GoalChanged(int currentGoalNumber, int newGoalNumber) { bool AIScriptLeon::UpdateAnimation(int *animation, int *frame) { switch (_animationState) { - case 10: - *animation = 856; - if (_animationFrame++ == 7) { - Actor_Change_Animation_Mode(kActorMcCoy, 48); - Actor_Retired_Here(kActorMcCoy, 12, 12, 1, -1); - } - if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(*animation) - 1) { - *animation = 847; - _animationFrame = 0; - Actor_Change_Animation_Mode(kActorLeon, 0); - } - break; - case 9: - *animation = 849; - _animationFrame++; - if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(849) - 1) { - Actor_Change_Animation_Mode(kActorLeon, 0); - *animation = 847; - _animationFrame = 0; - _animationState = 0; - if (Actor_Query_Goal_Number(kActorLeon) == 2) { - Actor_Set_Goal_Number(kActorLeon, 3); - } - } - break; - case 8: - *animation = 854; + case 0: + *animation = 847; _animationFrame++; - if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(854) - 1) { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(847)) { _animationFrame = 0; } break; - case 7: - *animation = 855; + + case 1: + *animation = 846; _animationFrame++; - if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(855) - 1) { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(846)) { _animationFrame = 0; - _animationState = 6; - *animation = 854; } break; - case 6: - if (_animationFrame == 0 && var_45EDAC != 0) { - Actor_Change_Animation_Mode(kActorLeon, 72); - *animation = 848; + + case 2: + if (_animationFrame == 0 + && _flag + ) { + *animation = 847; + _animationState = 0; } else { - *animation = 854; + *animation = 850; _animationFrame++; - if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(854) - 1) { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(850)) { _animationFrame = 0; } } break; - case 5: - *animation = 853; + + case 3: + *animation = 851; _animationFrame++; - if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(853) - 1) { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(851)) { _animationFrame = 0; _animationState = 2; *animation = 850; } break; + case 4: *animation = 852; _animationFrame++; - if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(852) - 1) { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(852)) { _animationFrame = 0; _animationState = 2; *animation = 850; } break; - case 3: - *animation = 851; + + case 5: + *animation = 853; _animationFrame++; - if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(851) - 1) { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(853)) { _animationFrame = 0; _animationState = 2; *animation = 850; } break; - case 2: - if (!_animationFrame && var_45EDAC) { - *animation = 847; - _animationState = 0; + + case 6: + if (_animationFrame == 0 + && _flag + ) { + Actor_Change_Animation_Mode(kActorLeon, 72); + *animation = 848; } else { - *animation = 850; + *animation = 854; _animationFrame++; - if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(850) - 1) { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(854)) { _animationFrame = 0; } } break; - case 1: - *animation = 846; + + case 7: + *animation = 855; _animationFrame++; - if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(846) - 1) { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(855)) { _animationFrame = 0; + _animationState = 6; + *animation = 854; } break; - case 0: - *animation = 847; + + case 8: + *animation = 854; + _animationFrame++; + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(854)) { + _animationFrame = 0; + } + break; + + case 9: + *animation = 849; _animationFrame++; - if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(847) - 1) { + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(849)) { + Actor_Change_Animation_Mode(kActorLeon, kAnimationModeIdle); + *animation = 847; _animationFrame = 0; + _animationState = 0; + if (Actor_Query_Goal_Number(kActorLeon) == kGoalLeonReleaseDeskClerk) { + Actor_Set_Goal_Number(kActorLeon, kGoalLeonPrepareTalkToMcCoy); + } + } + break; + + case 10: + *animation = 856; + _animationFrame++; + if (_animationFrame == 6) { + Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeDie); + Actor_Retired_Here(kActorMcCoy, 12, 12, true, -1); + } + + if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(*animation)) { + *animation = 847; + _animationFrame = 0; + Actor_Change_Animation_Mode(kActorLeon, kAnimationModeIdle); } break; } @@ -366,7 +404,7 @@ bool AIScriptLeon::ChangeAnimationMode(int mode) { case 5: case 6: case 7: - var_45EDAC = 1; + _flag = true; break; case 8: Actor_Change_Animation_Mode(kActorLeon, 72); @@ -377,48 +415,58 @@ bool AIScriptLeon::ChangeAnimationMode(int mode) { break; } break; + case kAnimationModeWalk: _animationState = 1; _animationFrame = 0; break; + case kAnimationModeTalk: _animationState = 2; _animationFrame = 0; - var_45EDAC = 0; + _flag = false; break; + case kAnimationModeCombatAttack: _animationState = 10; _animationFrame = 0; break; + case 12: _animationState = 3; _animationFrame = 0; - var_45EDAC = 0; + _flag = false; break; + case 13: _animationState = 4; _animationFrame = 0; - var_45EDAC = 0; + _flag = false; break; + case 14: _animationState = 5; _animationFrame = 0; - var_45EDAC = 0; + _flag = false; break; + case 15: _animationState = 6; _animationFrame = 0; - var_45EDAC = 0; + _flag = false; break; + case 16: _animationState = 7; _animationFrame = 0; - var_45EDAC = 0; + _flag = false; break; + case 26: _animationState = 9; _animationFrame = 0; break; + case 72: if (_animationState != 8) { _animationState = 8; @@ -445,14 +493,14 @@ void AIScriptLeon::SetAnimationState(int animationState, int animationFrame, int bool AIScriptLeon::ReachedMovementTrackWaypoint(int waypointId) { if (waypointId == 353) { - Actor_Set_Goal_Number(kActorLeon, 8); + Actor_Set_Goal_Number(kActorLeon, kGoalLeonGone); } return true; } void AIScriptLeon::FledCombat() {} -float AIScriptLeon::sub_446700(int actorId, float x, float y, float z) { +float AIScriptLeon::distanceTo(int actorId, float x, float y, float z) { float actorX, actorY, actorZ; Actor_Query_XYZ(actorId, &actorX, &actorY, &actorZ); return sqrt(static_cast<float>((z - actorZ) * (z - actorZ) + (y - actorY) * (y - actorY) + (x - actorX) * (x - actorX))); |