BLADERUNNER: Rat AI bug fixes
Most prominent bugs fixed is behavior in KP02 and not attacking when near McCoy
This commit is contained in:
parent
bc056feddd
commit
bfcd59571e
8 changed files with 273 additions and 123 deletions
|
@ -2595,7 +2595,8 @@ enum GoalCrazyLegs {
|
|||
kGoalCrazyLegsIsArrested = 699
|
||||
};
|
||||
|
||||
enum GoalFreeSlotA { // Rat
|
||||
enum GoalFreeSlotA { // Rat A
|
||||
kGoalFreeSlotADefault = 0,
|
||||
kGoalFreeSlotAUG15Wait = 300,
|
||||
kGoalFreeSlotAUG15WalkOut = 301,
|
||||
kGoalFreeSlotAUG15RunToOtherSide = 302,
|
||||
|
@ -2607,9 +2608,22 @@ enum GoalFreeSlotA { // Rat
|
|||
kGoalFreeSlotAUG15Die = 305,
|
||||
kGoalFreeSlotAUG15Fall = 309,
|
||||
kGoalFreeSlotAUG15Prepare = 310,
|
||||
kGoalFreeSlotAAct5Default = 400,
|
||||
kGoalFreeSlotAAct5Prepare = 405,
|
||||
kGoalFreeSlotAAct5KP02Attack = 406,
|
||||
kGoalFreeSlotAGone = 599
|
||||
};
|
||||
|
||||
enum GoalFreeSlotB { // Rat B
|
||||
kGoalFreeSlotBAct4Default = 300,
|
||||
kGoalFreeSlotBAct4WalkAround = 301,
|
||||
kGoalFreeSlotBAct4AttackMcCoy = 302,
|
||||
kGoalFreeSlotBAct5Default = 400,
|
||||
kGoalFreeSlotBAct5Prepare = 405,
|
||||
kGoalFreeSlotBAct5KP02Attack = 406,
|
||||
kGoalFreeSlotBGone = 599
|
||||
};
|
||||
|
||||
enum GoalMaggie {
|
||||
kGoalMaggieMA02Default = 0,
|
||||
kGoalMaggieMA02WalkToEntrance = 1,
|
||||
|
|
|
@ -318,8 +318,11 @@ bool AIScriptClovis::GoalChanged(int currentGoalNumber, int newGoalNumber) {
|
|||
return true;
|
||||
|
||||
case kGoalClovisUG18SadikWillShootGuzza:
|
||||
// fall through
|
||||
case kGoalClovisUG18SadikIsShootingGuzza:
|
||||
// fall through
|
||||
case kGoalClovisUG18GuzzaDied:
|
||||
// fall through
|
||||
case kGoalClovisUG18Leave:
|
||||
return true;
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
*/
|
||||
|
||||
#include "bladerunner/script/ai_script.h"
|
||||
//#include "common/debug.h"
|
||||
|
||||
namespace BladeRunner {
|
||||
|
||||
|
@ -42,23 +43,24 @@ void AIScriptFreeSlotA::Initialize() {
|
|||
_var2 = 1;
|
||||
_fallSpeed = 0.0f;
|
||||
_fallHeightCurrent = 0.0f; // not initialized in original
|
||||
_fallHeightTarget = 0.0f; // not initialized in original
|
||||
_fallHeightTarget = 0.0f; // not initialized in original
|
||||
|
||||
World_Waypoint_Set(525, kSetKP02, -780.0f, -615.49f, 2611.0f);
|
||||
// TODO: A bug? world waypoint 526 is unused
|
||||
World_Waypoint_Set(526, kSetKP02, -780.0f, -615.49f, 2759.0f);
|
||||
}
|
||||
|
||||
bool AIScriptFreeSlotA::Update() {
|
||||
switch (Global_Variable_Query(kVariableChapter)) {
|
||||
case 4:
|
||||
// Act 4
|
||||
if (Actor_Query_Which_Set_In(kActorMcCoy) == kSetUG15
|
||||
&& Actor_Query_Which_Set_In(kActorFreeSlotA) == kSetUG15
|
||||
) {
|
||||
int goal = Actor_Query_Goal_Number(kActorFreeSlotA);
|
||||
if ((goal == kGoalFreeSlotAUG15RunToOtherSide
|
||||
|| goal == kGoalFreeSlotAUG15RunBack
|
||||
)
|
||||
&& Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotA, kActorMcCoy) <= 48
|
||||
|| goal == kGoalFreeSlotAUG15RunBack)
|
||||
&& Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotA, kActorMcCoy) <= 48
|
||||
) {
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAUG15Attack);
|
||||
} else if (goal == kGoalFreeSlotAUG15Fall) {
|
||||
|
@ -70,21 +72,28 @@ bool AIScriptFreeSlotA::Update() {
|
|||
_fallSpeed -= 0.2f;
|
||||
} else {
|
||||
_fallHeightCurrent = _fallHeightTarget;
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, 0);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotADefault);
|
||||
}
|
||||
Actor_Set_At_XYZ(kActorFreeSlotA, x, _fallHeightCurrent, z, Actor_Query_Facing_1024(kActorFreeSlotA));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
switch (Actor_Query_Goal_Number(kActorFreeSlotA)) {
|
||||
case kGoalFreeSlotAWalkAround:
|
||||
#if BLADERUNNER_ORIGINAL_BUGS
|
||||
if (Actor_Query_Which_Set_In(kActorFreeSlotA) == Player_Query_Current_Set()
|
||||
&& Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotA, kActorMcCoy) <= 48
|
||||
) {
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAttackMcCoy);
|
||||
}
|
||||
#else
|
||||
if (Actor_Query_Which_Set_In(kActorFreeSlotA) == Player_Query_Current_Set()
|
||||
&& Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotA, kActorMcCoy) <= 54
|
||||
) {
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAttackMcCoy);
|
||||
}
|
||||
#endif // BLADERUNNER_ORIGINAL_BUGS
|
||||
break;
|
||||
|
||||
case kGoalFreeSlotAAttackMcCoy:
|
||||
|
@ -97,7 +106,7 @@ bool AIScriptFreeSlotA::Update() {
|
|||
if (Actor_Query_Which_Set_In(kActorFreeSlotA) != Player_Query_Current_Set()) {
|
||||
Game_Flag_Reset(kFlagRatWalkingAround);
|
||||
Game_Flag_Reset(kFlagUG15BridgeWillBreak);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, 0);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotADefault);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -112,14 +121,38 @@ bool AIScriptFreeSlotA::Update() {
|
|||
return true;
|
||||
|
||||
case 5:
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotA) < 400) {
|
||||
// Act 5
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotA) < kGoalFreeSlotAAct5Default) {
|
||||
AI_Movement_Track_Flush(kActorFreeSlotA);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, 400);
|
||||
} else if (Actor_Query_Goal_Number(kActorFreeSlotA) == 405
|
||||
&& Actor_Query_Which_Set_In(kActorMcCoy) == kSceneKP05
|
||||
) {
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Default);
|
||||
} else {
|
||||
#if BLADERUNNER_ORIGINAL_BUGS
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAAct5Prepare
|
||||
&& Actor_Query_Which_Set_In(kActorMcCoy) == kSetKP02
|
||||
) {
|
||||
Actor_Set_Targetable(kActorFreeSlotA, true);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5KP02Attack);
|
||||
}
|
||||
#else
|
||||
// copying the behavior of Rat B (kActorFreeSlotB) because it works without the bug
|
||||
// Fixes the bug where the Rat A is killed in KP02 but when McCoy re-enters it is there alive
|
||||
// in idle mode and non-target-able
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotA) != kGoalFreeSlotAAct5Prepare
|
||||
|| Actor_Query_Which_Set_In(kActorMcCoy) != kSetKP02
|
||||
) {
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAGone) {
|
||||
if (Actor_Query_Which_Set_In(kActorFreeSlotA) != Player_Query_Current_Set()) {
|
||||
Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotA);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Default);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5KP02Attack);
|
||||
Actor_Set_Targetable(kActorFreeSlotA, true);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, 406);
|
||||
return true;
|
||||
#endif // BLADERUNNER_ORIGINAL_BUGS
|
||||
}
|
||||
return true;
|
||||
|
||||
|
@ -133,6 +166,7 @@ void AIScriptFreeSlotA::TimerExpired(int timer) {
|
|||
}
|
||||
|
||||
void AIScriptFreeSlotA::CompletedMovementTrack() {
|
||||
// debug("Rat A completed move with Goal: %d", Actor_Query_Goal_Number(kActorFreeSlotA));
|
||||
switch (Actor_Query_Goal_Number(kActorFreeSlotA)) {
|
||||
case kGoalFreeSlotAUG15WalkOut:
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAUG15RunToOtherSide);
|
||||
|
@ -154,11 +188,11 @@ void AIScriptFreeSlotA::CompletedMovementTrack() {
|
|||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAWalkAround);
|
||||
break;
|
||||
|
||||
case 400:
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, 405);
|
||||
case kGoalFreeSlotAAct5Default:
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Prepare);
|
||||
break;
|
||||
|
||||
case 406:
|
||||
case kGoalFreeSlotAAct5KP02Attack:
|
||||
Non_Player_Actor_Combat_Mode_On(kActorFreeSlotA, kActorCombatStateIdle, false, kActorMcCoy, 8, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, 0, 0, 100, 5, 300, false);
|
||||
break;
|
||||
|
||||
|
@ -194,6 +228,18 @@ void AIScriptFreeSlotA::OtherAgentEnteredThisScene(int otherActorId) {
|
|||
}
|
||||
|
||||
void AIScriptFreeSlotA::OtherAgentExitedThisScene(int otherActorId) {
|
||||
#if !BLADERUNNER_ORIGINAL_BUGS
|
||||
if (otherActorId == kActorMcCoy && Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAGone) {
|
||||
if (Global_Variable_Query(kVariableChapter == 4)) {
|
||||
Game_Flag_Reset(kFlagRatWalkingAround);
|
||||
Game_Flag_Reset(kFlagUG15BridgeWillBreak);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotADefault);
|
||||
} else if (Global_Variable_Query(kVariableChapter == 5)) {
|
||||
Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotA);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Default);
|
||||
}
|
||||
}
|
||||
#endif // BLADERUNNER_ORIGINAL_BUGS
|
||||
// return false;
|
||||
}
|
||||
|
||||
|
@ -225,6 +271,7 @@ int AIScriptFreeSlotA::GetFriendlinessModifierIfGetsClue(int otherActorId, int c
|
|||
}
|
||||
|
||||
bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
|
||||
// debug("Rat A goal changed from %d to: %d", currentGoalNumber, newGoalNumber);
|
||||
switch (newGoalNumber) {
|
||||
case kGoalFreeSlotAUG15Wait:
|
||||
AI_Movement_Track_Flush(kActorFreeSlotA);
|
||||
|
@ -233,6 +280,7 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
|
|||
break;
|
||||
|
||||
case kGoalFreeSlotAUG15WalkOut:
|
||||
// kSetUG15
|
||||
Actor_Force_Stop_Walking(kActorMcCoy);
|
||||
AI_Movement_Track_Flush(kActorFreeSlotA);
|
||||
World_Waypoint_Set(444, kSetUG15, -48.75f, 44.66f, 87.57f);
|
||||
|
@ -241,6 +289,7 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
|
|||
break;
|
||||
|
||||
case kGoalFreeSlotAUG15RunToOtherSide:
|
||||
// kSetUG15
|
||||
AI_Movement_Track_Flush(kActorFreeSlotA);
|
||||
World_Waypoint_Set(444, kSetUG15, -237.0f, 48.07f, 208.0f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 444, 1);
|
||||
|
@ -249,6 +298,7 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
|
|||
break;
|
||||
|
||||
case kGoalFreeSlotAUG15RunBack:
|
||||
// kSetUG15
|
||||
AI_Movement_Track_Flush(kActorFreeSlotA);
|
||||
World_Waypoint_Set(444, kSetUG15, 3.52f, 52.28f, 90.68f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 444, 0);
|
||||
|
@ -279,6 +329,7 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
|
|||
break;
|
||||
|
||||
case kGoalFreeSlotAWalkAroundRestart:
|
||||
// kSetFreeSlotG
|
||||
AI_Movement_Track_Flush(kActorFreeSlotA);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 39, 1);
|
||||
AI_Movement_Track_Repeat(kActorFreeSlotA);
|
||||
|
@ -310,12 +361,14 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
|
|||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAUG15Wait);
|
||||
break;
|
||||
|
||||
case 400:
|
||||
case kGoalFreeSlotAAct5Default:
|
||||
// kSetFreeSlotG
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 39, 0);
|
||||
AI_Movement_Track_Repeat(kActorFreeSlotA);
|
||||
break;
|
||||
|
||||
case 406:
|
||||
case kGoalFreeSlotAAct5KP02Attack:
|
||||
// kSetKP02
|
||||
AI_Movement_Track_Flush(kActorFreeSlotA);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 525, 0);
|
||||
AI_Movement_Track_Repeat(kActorFreeSlotA);
|
||||
|
@ -529,7 +582,7 @@ bool AIScriptFreeSlotA::ReachedMovementTrackWaypoint(int waypointId) {
|
|||
if (waypointId == 465) {
|
||||
Actor_Change_Animation_Mode(kActorFreeSlotA, 43);
|
||||
}
|
||||
} else if (Actor_Query_Goal_Number(kActorFreeSlotA) == 302) {
|
||||
} else if (Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAUG15RunToOtherSide) {
|
||||
Actor_Face_Actor(kActorFreeSlotA, kActorMcCoy, true);
|
||||
}
|
||||
|
||||
|
@ -556,15 +609,17 @@ void AIScriptFreeSlotA::checkIfOnBridge() {
|
|||
void AIScriptFreeSlotA::goToRandomUGxx() {
|
||||
switch (Random_Query(1, 14)) {
|
||||
case 1:
|
||||
// kSetUG01
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 450, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 451, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 450, 0);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
// kSetUG01
|
||||
World_Waypoint_Set(463, kSetUG01, 144.98f, -50.13f, -175.75f);
|
||||
World_Waypoint_Set(464, kSetUG01, 105.6f, -50.13f, -578.46f);
|
||||
World_Waypoint_Set(465, kSetUG01, 62.0f, -50.13f, -574.0f);
|
||||
World_Waypoint_Set(464, kSetUG01, 105.6f, -50.13f, -578.46f);
|
||||
World_Waypoint_Set(465, kSetUG01, 62.0f, -50.13f, -574.0f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 465, 5);
|
||||
|
@ -572,85 +627,106 @@ void AIScriptFreeSlotA::goToRandomUGxx() {
|
|||
break;
|
||||
|
||||
case 3:
|
||||
// kSetUG04
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 446, 15);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 447, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 449, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 448, 2);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 449, 0);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 447, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 449, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 448, 2);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 449, 0);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
World_Waypoint_Set(463, kSetUG04, -22.7f, 6.39f, 33.12f);
|
||||
World_Waypoint_Set(464, kSetUG04, -6.70f, -1.74f, -362.88f);
|
||||
World_Waypoint_Set(465, kSetUG04, 164.0f, 11.87f, -1013.0f);
|
||||
// kSetUG04
|
||||
World_Waypoint_Set(463, kSetUG04, -22.7f, 6.39f, 33.12f);
|
||||
World_Waypoint_Set(464, kSetUG04, -6.70f, -1.74f, -362.88f);
|
||||
World_Waypoint_Set(465, kSetUG04, 164.0f, 11.87f, -1013.0f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 463, 2);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 464, 0);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 465, 0);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
// kSetUG05
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 457, 15);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 458, 0);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 458, 0);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 459, 15);
|
||||
break;
|
||||
|
||||
case 6:
|
||||
// kSetUG06
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 460, 15);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 461, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 461, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 460, 15);
|
||||
break;
|
||||
|
||||
case 7:
|
||||
// kSetUG07 or kSetFreeSlotG
|
||||
if (Actor_Query_In_Set(kActorClovis, kSetUG07)) {
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 39, 10);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 39, 10); // kSetFreeSlotG
|
||||
} else {
|
||||
World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
|
||||
World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
|
||||
World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
|
||||
World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
|
||||
World_Waypoint_Set(465, kSetUG07, -164.78f, -12.21f, -832.08f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 463, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
|
||||
// TODO: A bug? the waypoint 465 is created but is unused
|
||||
}
|
||||
break;
|
||||
|
||||
case 8:
|
||||
World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
|
||||
World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
|
||||
// kSetUG07
|
||||
// TODO a bug? Maybe also check here if Clovis is in the set
|
||||
// like in case 7
|
||||
World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
|
||||
World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
|
||||
World_Waypoint_Set(465, kSetUG07, -164.78f, -12.21f, -832.08f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 464, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
|
||||
// TODO: A bug? the waypoint 465 is created but is unused
|
||||
break;
|
||||
|
||||
case 9:
|
||||
World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
|
||||
World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
|
||||
// kSetUG07
|
||||
// TODO a bug? Maybe also check here if Clovis is in the set
|
||||
// like in case 7
|
||||
World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
|
||||
World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
|
||||
World_Waypoint_Set(465, kSetUG07, -164.78f, -12.21f, -832.08f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 464, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 465, 1);
|
||||
// TODO: A bug? the waypoint 463 is created but is unused
|
||||
break;
|
||||
|
||||
case 10:
|
||||
World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
|
||||
World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
|
||||
// kSetUG07
|
||||
// TODO a bug? Maybe also check here if Clovis is in the set
|
||||
// like in case 7
|
||||
World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
|
||||
World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
|
||||
World_Waypoint_Set(465, kSetUG07, -164.78f, -12.21f, -832.08f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 465, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
|
||||
// TODO: A bug? the waypoint 463 is created but is unused
|
||||
break;
|
||||
|
||||
case 11:
|
||||
World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
|
||||
// kSetUG09
|
||||
World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
|
||||
World_Waypoint_Set(464, kSetUG09, -149.0f, 156.94f, -498.0f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 463, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
|
||||
break;
|
||||
|
||||
case 12:
|
||||
World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
|
||||
// kSetUG09
|
||||
World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
|
||||
World_Waypoint_Set(464, kSetUG09, -149.0f, 156.94f, -498.0f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 464, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
|
||||
break;
|
||||
|
||||
case 13:
|
||||
// kSetUG09
|
||||
#if BLADERUNNER_ORIGINAL_BUGS
|
||||
// this makes the rat appear on the pipe (top left) but this is buggy
|
||||
// since it appears floating there
|
||||
|
@ -661,7 +737,7 @@ void AIScriptFreeSlotA::goToRandomUGxx() {
|
|||
AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
|
||||
#else
|
||||
// replacing with something more normal
|
||||
World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
|
||||
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, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
|
||||
|
@ -670,8 +746,9 @@ void AIScriptFreeSlotA::goToRandomUGxx() {
|
|||
break;
|
||||
|
||||
case 14:
|
||||
World_Waypoint_Set(463, kSetUG12, -360.67f, 21.39f, 517.55f);
|
||||
World_Waypoint_Set(464, kSetUG12, -250.67f, 21.39f, 477.55f);
|
||||
// kSetUG12
|
||||
World_Waypoint_Set(463, kSetUG12, -360.67f, 21.39f, 517.55f);
|
||||
World_Waypoint_Set(464, kSetUG12, -250.67f, 21.39f, 477.55f);
|
||||
World_Waypoint_Set(465, kSetUG12, -248.67f, 21.39f, -1454.45f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 464, 8);
|
||||
|
@ -679,6 +756,7 @@ void AIScriptFreeSlotA::goToRandomUGxx() {
|
|||
break;
|
||||
|
||||
default:
|
||||
// kSetFreeSlotG
|
||||
AI_Movement_Track_Append(kActorFreeSlotA, 39, Random_Query(1, 10));
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
*/
|
||||
|
||||
#include "bladerunner/script/ai_script.h"
|
||||
//#include "common/debug.h"
|
||||
|
||||
namespace BladeRunner {
|
||||
|
||||
|
@ -38,7 +39,8 @@ void AIScriptFreeSlotB::Initialize() {
|
|||
_var1 = 0;
|
||||
_var2 = 1;
|
||||
|
||||
World_Waypoint_Set(527, kSetKP02, -468.46f, -616.58f, 2840.60f);
|
||||
World_Waypoint_Set(527, kSetKP02, -468.46f, -616.58f, 2840.60f);
|
||||
// TODO: A bug? world waypoints 528, 529 are unused
|
||||
World_Waypoint_Set(528, kSetKP02, -1024.46f, -615.49f, 2928.60f);
|
||||
World_Waypoint_Set(529, kSetKP02, -1024.46f, -615.49f, 2788.60f);
|
||||
}
|
||||
|
@ -50,53 +52,65 @@ bool AIScriptFreeSlotB::Update() {
|
|||
|
||||
if (Global_Variable_Query(kVariableChapter) == 4) {
|
||||
switch (Actor_Query_Goal_Number(kActorFreeSlotB)) {
|
||||
case 300:
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, 301);
|
||||
case kGoalFreeSlotBAct4Default:
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4WalkAround);
|
||||
Actor_Set_Targetable(kActorFreeSlotB, true);
|
||||
break;
|
||||
|
||||
case 301:
|
||||
case kGoalFreeSlotBAct4WalkAround:
|
||||
#if BLADERUNNER_ORIGINAL_BUGS
|
||||
if (Actor_Query_Which_Set_In(kActorFreeSlotB) == Player_Query_Current_Set()
|
||||
&& Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotB, kActorMcCoy) <= 48) {
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, 302);
|
||||
&& Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotB, kActorMcCoy) <= 48
|
||||
) {
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4AttackMcCoy);
|
||||
}
|
||||
#else
|
||||
if (Actor_Query_Which_Set_In(kActorFreeSlotB) == Player_Query_Current_Set()
|
||||
&& Actor_Query_Inch_Distance_From_Actor(kActorFreeSlotB, kActorMcCoy) <= 54
|
||||
) {
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4AttackMcCoy);
|
||||
}
|
||||
#endif // BLADERUNNER_ORIGINAL_BUGS
|
||||
break;
|
||||
|
||||
case kGoalFreeSlotBAct4AttackMcCoy:
|
||||
if (Actor_Query_Which_Set_In(kActorFreeSlotB) != Player_Query_Current_Set()) {
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4WalkAround);
|
||||
}
|
||||
break;
|
||||
|
||||
case 302:
|
||||
case kGoalFreeSlotBGone:
|
||||
if (Actor_Query_Which_Set_In(kActorFreeSlotB) != Player_Query_Current_Set()) {
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, 301);
|
||||
}
|
||||
break;
|
||||
|
||||
case 599:
|
||||
if (Actor_Query_Which_Set_In(kActorFreeSlotB) != Player_Query_Current_Set()) {
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, 300);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4Default);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, 300);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4Default);
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotB) < 400) {
|
||||
// if in Act 5
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotB) < kGoalFreeSlotBAct5Default) {
|
||||
AI_Movement_Track_Flush(kActorFreeSlotB);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, 400);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Default);
|
||||
return true;
|
||||
} else {
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotB) != 405 || Actor_Query_Which_Set_In(kActorMcCoy) != kSetKP02) {
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotB) == 599) {
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotB) != kGoalFreeSlotBAct5Prepare
|
||||
|| Actor_Query_Which_Set_In(kActorMcCoy) != kSetKP02
|
||||
) {
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotB) == kGoalFreeSlotBGone) {
|
||||
if (Actor_Query_Which_Set_In(kActorFreeSlotB) != Player_Query_Current_Set()) {
|
||||
Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotB);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, 400);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Default);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, 406);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5KP02Attack);
|
||||
Actor_Set_Targetable(kActorFreeSlotB, true);
|
||||
return true;
|
||||
}
|
||||
|
@ -107,20 +121,21 @@ void AIScriptFreeSlotB::TimerExpired(int timer) {
|
|||
}
|
||||
|
||||
void AIScriptFreeSlotB::CompletedMovementTrack() {
|
||||
// debug("Rat B completed move with Goal: %d", Actor_Query_Goal_Number(kActorFreeSlotB));
|
||||
switch (Actor_Query_Goal_Number(kActorFreeSlotB)) {
|
||||
case 300:
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, 301);
|
||||
case kGoalFreeSlotBAct4Default:
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4WalkAround);
|
||||
break;
|
||||
|
||||
case 301:
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, 300);
|
||||
case kGoalFreeSlotBAct4WalkAround:
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4Default);
|
||||
break;
|
||||
|
||||
case 400:
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, 405);
|
||||
case kGoalFreeSlotBAct5Default:
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Prepare);
|
||||
break;
|
||||
|
||||
case 406:
|
||||
case kGoalFreeSlotBAct5KP02Attack:
|
||||
Non_Player_Actor_Combat_Mode_On(kActorFreeSlotB, kActorCombatStateIdle, false, kActorMcCoy, 8, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, 0, 0, 100, 5, 300, false);
|
||||
break;
|
||||
|
||||
|
@ -136,7 +151,7 @@ void AIScriptFreeSlotB::ReceivedClue(int clueId, int fromActorId) {
|
|||
}
|
||||
|
||||
void AIScriptFreeSlotB::ClickedByPlayer() {
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotB) != 599)
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotB) != kGoalFreeSlotBGone)
|
||||
return; //false;
|
||||
|
||||
Actor_Face_Actor(kActorMcCoy, kActorFreeSlotB, true);
|
||||
|
@ -156,6 +171,17 @@ void AIScriptFreeSlotB::OtherAgentEnteredThisScene(int otherActorId) {
|
|||
}
|
||||
|
||||
void AIScriptFreeSlotB::OtherAgentExitedThisScene(int otherActorId) {
|
||||
#if !BLADERUNNER_ORIGINAL_BUGS
|
||||
if (otherActorId == kActorMcCoy && Actor_Query_Goal_Number(kActorFreeSlotB) == kGoalFreeSlotBGone) {
|
||||
if (Global_Variable_Query(kVariableChapter == 4)) {
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct4Default);
|
||||
} else if (Global_Variable_Query(kVariableChapter == 5)) {
|
||||
Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotB);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Default);
|
||||
}
|
||||
}
|
||||
|
||||
#endif // BLADERUNNER_ORIGINAL_BUGS
|
||||
// return false;
|
||||
}
|
||||
|
||||
|
@ -172,7 +198,7 @@ bool AIScriptFreeSlotB::ShotAtAndHit() {
|
|||
}
|
||||
|
||||
void AIScriptFreeSlotB::Retired(int byActorId) {
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, 599);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBGone);
|
||||
}
|
||||
|
||||
int AIScriptFreeSlotB::GetFriendlinessModifierIfGetsClue(int otherActorId, int clueId) {
|
||||
|
@ -180,36 +206,40 @@ int AIScriptFreeSlotB::GetFriendlinessModifierIfGetsClue(int otherActorId, int c
|
|||
}
|
||||
|
||||
bool AIScriptFreeSlotB::GoalChanged(int currentGoalNumber, int newGoalNumber) {
|
||||
// debug("Rat B goal changed from %d to: %d", currentGoalNumber, newGoalNumber);
|
||||
switch (newGoalNumber) {
|
||||
case 300:
|
||||
case kGoalFreeSlotBAct4Default:
|
||||
// kSetFreeSlotG
|
||||
AI_Movement_Track_Flush(kActorFreeSlotB);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 39, 2);
|
||||
AI_Movement_Track_Repeat(kActorFreeSlotB);
|
||||
break;
|
||||
|
||||
case 301:
|
||||
case kGoalFreeSlotBAct4WalkAround:
|
||||
AI_Movement_Track_Flush(kActorFreeSlotB);
|
||||
processGoal301();
|
||||
goToRandomUGxx();
|
||||
AI_Movement_Track_Repeat(kActorFreeSlotB);
|
||||
break;
|
||||
|
||||
case 302:
|
||||
case kGoalFreeSlotBAct4AttackMcCoy:
|
||||
Actor_Set_Targetable(kActorFreeSlotB, true);
|
||||
Non_Player_Actor_Combat_Mode_On(kActorFreeSlotB, kActorCombatStateIdle, false, kActorMcCoy, 8, kAnimationModeCombatIdle, kAnimationModeCombatWalk, kAnimationModeCombatRun, 25, 0, 75, 5, 300, false);
|
||||
break;
|
||||
|
||||
case 400:
|
||||
case kGoalFreeSlotBAct5Default:
|
||||
// kSetFreeSlotG
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 39, 0);
|
||||
AI_Movement_Track_Repeat(kActorFreeSlotB);
|
||||
break;
|
||||
|
||||
case 406:
|
||||
case kGoalFreeSlotBAct5KP02Attack:
|
||||
// kSetKP02
|
||||
AI_Movement_Track_Flush(kActorFreeSlotB);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 527, 0);
|
||||
AI_Movement_Track_Repeat(kActorFreeSlotB);
|
||||
break;
|
||||
|
||||
case 599:
|
||||
case kGoalFreeSlotBGone:
|
||||
Actor_Set_Health(kActorFreeSlotB, 20, 20);
|
||||
break;
|
||||
|
||||
|
@ -426,18 +456,20 @@ void AIScriptFreeSlotB::FledCombat() {
|
|||
// return false;
|
||||
}
|
||||
|
||||
void AIScriptFreeSlotB::processGoal301() {
|
||||
void AIScriptFreeSlotB::goToRandomUGxx() {
|
||||
switch (Random_Query(1, 14)) {
|
||||
case 1:
|
||||
// kSetUG01
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 450, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 451, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 450, 0);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
// kSetUG01
|
||||
World_Waypoint_Set(466, kSetUG01, 144.98f, -50.13f, -175.75f);
|
||||
World_Waypoint_Set(547, kSetUG01, 105.6f, -50.13f, -578.46f);
|
||||
World_Waypoint_Set(548, kSetUG01, 62.0f, -50.13f, -574.0f);
|
||||
World_Waypoint_Set(547, kSetUG01, 105.6f, -50.13f, -578.46f);
|
||||
World_Waypoint_Set(548, kSetUG01, 62.0f, -50.13f, -574.0f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 548, 5);
|
||||
|
@ -445,40 +477,45 @@ void AIScriptFreeSlotB::processGoal301() {
|
|||
break;
|
||||
|
||||
case 3:
|
||||
// kSetUG04
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 446, 15);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 447, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 449, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 448, 2);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 449, 0);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 447, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 449, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 448, 2);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 449, 0);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
World_Waypoint_Set(466, kSetUG04, -22.70f, 6.39f, 33.12f);
|
||||
World_Waypoint_Set(547, kSetUG04, -6.70f, -1.74f, -362.88f);
|
||||
World_Waypoint_Set(548, kSetUG04, 164.0f, 11.87f, -1013.0f);
|
||||
// kSetUG04
|
||||
World_Waypoint_Set(466, kSetUG04, -22.70f, 6.39f, 33.12f);
|
||||
World_Waypoint_Set(547, kSetUG04, -6.70f, -1.74f, -362.88f);
|
||||
World_Waypoint_Set(548, kSetUG04, 164.0f, 11.87f, -1013.0f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 466, 2);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 547, 0);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 548, 0);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
// kSetUG05
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 457, 15);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 458, 0);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 458, 0);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 459, 15);
|
||||
break;
|
||||
|
||||
case 6:
|
||||
// kSetUG06
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 460, 15);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 461, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 461, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 460, 15);
|
||||
break;
|
||||
|
||||
case 7:
|
||||
// kSetUG07 or kSetFreeSlotG
|
||||
if (Actor_Query_In_Set(kActorClovis, kSetUG07)) {
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 39, 10);
|
||||
} else {
|
||||
World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
|
||||
World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
|
||||
World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
|
||||
World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
|
||||
World_Waypoint_Set(548, kSetUG07, -164.78f, -12.21f, -832.08f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 466, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
|
||||
|
@ -486,44 +523,59 @@ void AIScriptFreeSlotB::processGoal301() {
|
|||
break;
|
||||
|
||||
case 8:
|
||||
World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
|
||||
World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
|
||||
// kSetUG07
|
||||
// TODO a bug? Maybe also check here if Clovis is in the set
|
||||
// like in case 7
|
||||
World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
|
||||
World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
|
||||
World_Waypoint_Set(548, kSetUG07, -164.78f, -12.21f, -832.08f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 547, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
|
||||
// TODO: A bug? the waypoint 548 is created but is unused
|
||||
break;
|
||||
|
||||
case 9:
|
||||
World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
|
||||
World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
|
||||
// kSetUG07
|
||||
// TODO a bug? Maybe also check here if Clovis is in the set
|
||||
// like in case 7
|
||||
World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
|
||||
World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
|
||||
World_Waypoint_Set(548, kSetUG07, -164.78f, -12.21f, -832.08f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 547, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 548, 1);
|
||||
// TODO: A bug? the waypoint 466 is created but is unused
|
||||
break;
|
||||
|
||||
case 10:
|
||||
World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
|
||||
World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
|
||||
// kSetUG07
|
||||
// TODO a bug? Maybe also check here if Clovis is in the set
|
||||
// like in case 7
|
||||
World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
|
||||
World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
|
||||
World_Waypoint_Set(548, kSetUG07, -164.78f, -12.21f, -832.08f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 548, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
|
||||
// TODO: A bug? the waypoint 466 is created but is unused
|
||||
break;
|
||||
|
||||
case 11:
|
||||
World_Waypoint_Set(466, kSetUG09, 91.0f, 156.94f, -498.0f);
|
||||
// kSetUG09
|
||||
World_Waypoint_Set(466, kSetUG09, 91.0f, 156.94f, -498.0f);
|
||||
World_Waypoint_Set(547, kSetUG09, -149.0f, 156.94f, -498.0f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 466, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
|
||||
break;
|
||||
|
||||
case 12:
|
||||
World_Waypoint_Set(466, kSetUG09, 91.0f, 156.94f, -498.0f);
|
||||
// kSetUG09
|
||||
World_Waypoint_Set(466, kSetUG09, 91.0f, 156.94f, -498.0f);
|
||||
World_Waypoint_Set(547, kSetUG09, -149.0f, 156.94f, -498.0f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 547, 5);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
|
||||
break;
|
||||
|
||||
case 13:
|
||||
// kSetUG09
|
||||
#if BLADERUNNER_ORIGINAL_BUGS
|
||||
// this makes the rat appear on the pipe (top left)
|
||||
// but this is buggy since it will appear floating there
|
||||
|
@ -543,8 +595,9 @@ void AIScriptFreeSlotB::processGoal301() {
|
|||
break;
|
||||
|
||||
case 14:
|
||||
World_Waypoint_Set(466, kSetUG12, -360.67f, 21.39f, 517.55f);
|
||||
World_Waypoint_Set(547, kSetUG12, -250.67f, 21.39f, 477.55f);
|
||||
// kSetUG12
|
||||
World_Waypoint_Set(466, kSetUG12, -360.67f, 21.39f, 517.55f);
|
||||
World_Waypoint_Set(547, kSetUG12, -250.67f, 21.39f, 477.55f);
|
||||
World_Waypoint_Set(548, kSetUG12, -248.67f, 21.39f, -1454.45f);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 547, 8);
|
||||
|
@ -552,6 +605,7 @@ void AIScriptFreeSlotB::processGoal301() {
|
|||
break;
|
||||
|
||||
default:
|
||||
// kSetFreeSlotG
|
||||
AI_Movement_Track_Append(kActorFreeSlotB, 39, Random_Query(1, 10));
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -467,7 +467,7 @@ DECLARE_SCRIPT(FreeSlotB)
|
|||
int _var1;
|
||||
int _var2;
|
||||
|
||||
void processGoal301();
|
||||
void goToRandomUGxx();
|
||||
END_SCRIPT
|
||||
|
||||
DECLARE_SCRIPT(Maggie)
|
||||
|
|
|
@ -79,14 +79,15 @@ bool SceneScriptKP02::ClickedOnItem(int itemId, bool a2) {
|
|||
|
||||
bool SceneScriptKP02::ClickedOnExit(int exitId) {
|
||||
if (exitId == 0) {
|
||||
// TODO - A bug? Exit 0 is not added in the original game so this will never be triggered
|
||||
if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -1040.0f, -615.49f, 2903.0f, 0, true, false, false)) {
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotB) == 406
|
||||
|| Actor_Query_Goal_Number(kActorFreeSlotA) == 406
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotB) == kGoalFreeSlotBAct5KP02Attack
|
||||
|| Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAAct5KP02Attack
|
||||
) {
|
||||
Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotB);
|
||||
Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotA);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, 400);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, 400);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Default);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Default);
|
||||
Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
|
||||
Ambient_Sounds_Remove_All_Looping_Sounds(1);
|
||||
Game_Flag_Set(kFlagKP02toUG12);
|
||||
|
@ -103,13 +104,13 @@ bool SceneScriptKP02::ClickedOnExit(int exitId) {
|
|||
|
||||
if (exitId == 1) {
|
||||
if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -884.0f, -615.49f, 3065.0f, 0, true, false, false)) {
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotB) == 406
|
||||
|| Actor_Query_Goal_Number(kActorFreeSlotA) == 406
|
||||
if (Actor_Query_Goal_Number(kActorFreeSlotB) == kGoalFreeSlotBAct5KP02Attack
|
||||
|| Actor_Query_Goal_Number(kActorFreeSlotA) == kGoalFreeSlotAAct5KP02Attack
|
||||
) {
|
||||
Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotB);
|
||||
Non_Player_Actor_Combat_Mode_Off(kActorFreeSlotA);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, 400);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, 400);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotB, kGoalFreeSlotBAct5Default);
|
||||
Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAAct5Default);
|
||||
Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
|
||||
Ambient_Sounds_Remove_All_Looping_Sounds(1);
|
||||
Game_Flag_Set(kFlagKP02toKP01);
|
||||
|
|
|
@ -96,7 +96,7 @@ bool SceneScriptUG07::ClickedOnItem(int itemId, bool a2) {
|
|||
|
||||
bool SceneScriptUG07::ClickedOnExit(int exitId) {
|
||||
if (exitId == 0) {
|
||||
if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -94.0f, -12.21f, -710.0f, 0, true, false, false) && Actor_Query_Goal_Number(kActorClovis) != 402) {
|
||||
if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -94.0f, -12.21f, -710.0f, 0, true, false, false) && Actor_Query_Goal_Number(kActorClovis) != kGoalClovisUG07KillMcCoy) {
|
||||
Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
|
||||
Ambient_Sounds_Remove_All_Looping_Sounds(1);
|
||||
Game_Flag_Set(kFlagUG07toUG09);
|
||||
|
@ -106,7 +106,7 @@ bool SceneScriptUG07::ClickedOnExit(int exitId) {
|
|||
}
|
||||
|
||||
if (exitId == 1) {
|
||||
if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 110.0f, -12.21f, -274.0f, 0, true, false, false) && Actor_Query_Goal_Number(kActorClovis) != 402) {
|
||||
if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 110.0f, -12.21f, -274.0f, 0, true, false, false) && Actor_Query_Goal_Number(kActorClovis) != kGoalClovisUG07KillMcCoy) {
|
||||
Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
|
||||
Ambient_Sounds_Remove_All_Looping_Sounds(1);
|
||||
Game_Flag_Set(kFlagUG07toUG08);
|
||||
|
@ -147,11 +147,11 @@ bool SceneScriptUG07::ClickedOnExit(int exitId) {
|
|||
}
|
||||
Actor_Set_Goal_Number(kActorMcCoy, kGoalMcCoyUG07Released);
|
||||
Delay(1000);
|
||||
Actor_Set_Goal_Number(kActorClovis, 401);
|
||||
Actor_Set_Goal_Number(kActorClovis, kGoalClovisUG07ChaseMcCoy);
|
||||
}
|
||||
} else {
|
||||
if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -10.0f, -21.47f, -58.0f, 0, true, false, false)
|
||||
&& Actor_Query_Goal_Number(kActorClovis) != 402
|
||||
&& Actor_Query_Goal_Number(kActorClovis) != kGoalClovisUG07KillMcCoy
|
||||
) {
|
||||
Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
|
||||
Ambient_Sounds_Remove_All_Looping_Sounds(1);
|
||||
|
@ -201,7 +201,7 @@ void SceneScriptUG07::PlayerWalkedOut() {
|
|||
}
|
||||
|
||||
if (Actor_Query_In_Set(kActorClovis, kSetUG07)) {
|
||||
Actor_Set_Goal_Number(kActorClovis, 400);
|
||||
Actor_Set_Goal_Number(kActorClovis, kGoalClovisStartChapter4);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -140,9 +140,9 @@ bool SceneScriptUG15::ClickedOnExit(int exitId) {
|
|||
}
|
||||
|
||||
if (exitId == 2) {
|
||||
int v1 = Actor_Query_Goal_Number(kActorFreeSlotA);
|
||||
if (v1 >= 300
|
||||
&& v1 <= 303
|
||||
int ratGoal = Actor_Query_Goal_Number(kActorFreeSlotA);
|
||||
if (ratGoal >= 300 // kGoalFreeSlotAUG15Wait
|
||||
&& ratGoal <= 303 // kGoalFreeSlotAUG15RunBack
|
||||
) {
|
||||
Loop_Actor_Walk_To_XYZ(kActorMcCoy, -137.61f, 48.07f, 147.12f, 0, true, false, false);
|
||||
} else if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 18.0f, 52.28f, 46.0f, 0, true, false, false)) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue