diff options
Diffstat (limited to 'engines/bladerunner/script')
| -rw-r--r-- | engines/bladerunner/script/ai/steele.cpp | 1796 | ||||
| -rw-r--r-- | engines/bladerunner/script/ai_script.cpp | 1 | ||||
| -rw-r--r-- | engines/bladerunner/script/ai_script.h | 8 | ||||
| -rw-r--r-- | engines/bladerunner/script/script.cpp | 7 | ||||
| -rw-r--r-- | engines/bladerunner/script/script.h | 2 | 
5 files changed, 1812 insertions, 2 deletions
diff --git a/engines/bladerunner/script/ai/steele.cpp b/engines/bladerunner/script/ai/steele.cpp new file mode 100644 index 0000000000..5576e78fe6 --- /dev/null +++ b/engines/bladerunner/script/ai/steele.cpp @@ -0,0 +1,1796 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "bladerunner/script/ai_script.h" + +namespace BladeRunner { + +AIScriptSteele::AIScriptSteele(BladeRunnerEngine *vm) : AIScriptBase(vm) { +	_flag = false; +	_var1 = 0; +	_var2 = 0; +} + +void AIScriptSteele::Initialize() { +	_animationFrame = 0; +	_animationState = 0; +	_animationStateNext = 0; +	_animationNext = 0; + +	_flag = false; +	_var1 = 0; +	_var2 = 0; + +	Actor_Put_In_Set(kActorSteele, kSetFreeSlotG); +	Actor_Set_At_Waypoint(kActorSteele, 39, 0); +	Actor_Set_Goal_Number(kActorSteele, 0); +	Actor_Clue_Acquire(kActorSteele, 178, 1, -1); +} + +bool AIScriptSteele::Update() { +	if (Global_Variable_Query(14) <= 5 || Actor_Clue_Query(kActorSteele, 239)) { +		switch (Global_Variable_Query(kVariableChapter)) { +		case 1: +			if (Game_Flag_Query(182) == 1 && Game_Flag_Query(183) == 1) { +				Actor_Set_Goal_Number(kActorSteele, 3); +				return true; +			} else if (Game_Flag_Query(176) == 1 && Game_Flag_Query(184) == 1) { +				Actor_Set_Goal_Number(kActorSteele, 6); +				return true; +			} else if (Game_Flag_Query(178) == 1 && Game_Flag_Query(185) == 1) { +				Actor_Set_Goal_Number(kActorSteele, 10); +				return true; +			} else if (Actor_Query_Goal_Number(kActorSteele) +						|| Game_Flag_Query(182) +						|| Player_Query_Current_Scene() == kSceneRC01) { +				if (Actor_Query_Goal_Number(kActorSteele) != 11) { +					break; // go to after switch +				} +				Actor_Set_Goal_Number(kActorSteele, 0); +				return true; +			} else { +				Actor_Set_Goal_Number(kActorSteele, 1); +				Game_Flag_Set(183); +				return true; +			} + +		case 2: +			if (Game_Flag_Query(451) != 1 || Game_Flag_Query(457)) { +				if (Actor_Query_Goal_Number(kActorSteele) == 110 && Game_Flag_Query(456) == 1) { +					Actor_Set_Goal_Number(kActorSteele, 111); +					return true; +				} else if (Game_Flag_Query(460) || Actor_Query_Goal_Number(kActorSteele) != 112) { +					if (Actor_Query_Goal_Number(kActorSteele) != 190) { +						break; // go to after switch +					} +					Game_Flag_Reset(460); +					Actor_Set_Goal_Number(kActorSteele, 112); +					return true; +				} else { +					Actor_Set_Goal_Number(kActorSteele, 113); +					Game_Flag_Set(460); +					return true; +				} +			} else { +				Actor_Set_Goal_Number(kActorSteele, 110); +				Game_Flag_Set(457); +				return true; +			} + +		case 3: +			if (Global_Variable_Query(kVariableChapter) != 3) { +				break; // go to after switch +			} +			if (Actor_Query_Goal_Number(kActorSteele) < 205) +				Actor_Set_Goal_Number(kActorSteele, 205); + +			if (Actor_Query_Goal_Number(kActorSteele) == 251 +					&& Player_Query_Current_Scene() == kSceneNR01 +					&& Actor_Query_In_Between_Two_Actors(0, 1, 2)) { +				Actor_Set_Goal_Number(kActorSteele, 255); +			} +			if (Actor_Query_Goal_Number(kActorSteele) == 213) { +				Actor_Set_Goal_Number(kActorSteele, 214); +				return true; +			} else if (Actor_Query_Goal_Number(kActorSteele) == 261) { +				Actor_Set_Goal_Number(kActorSteele, 262); +				return true; +			} else { +				if (Actor_Query_Goal_Number(kActorSteele) != 271) { +					break; // go to after switch +				} +				Actor_Set_Goal_Number(kActorSteele, 270); +				return true; +			} + +		case 4: +			if (Actor_Query_Goal_Number(kActorSteele) < 300) { +				Actor_Set_Goal_Number(kActorSteele, 300); +			} +			break; // go to after switch + +		case 5: +			if (Game_Flag_Query(653) != 1 || Actor_Query_Goal_Number(kActorSteele) >= 400) { +				break; // go to after switch +			} +			Actor_Set_Goal_Number(kActorSteele, 400); +			return true; + +		default: +			break; // go to after switch +		} + +		if (Actor_Query_Goal_Number(kActorSteele) == 599 && !Actor_Query_In_Set(kActorSteele, kSetFreeSlotI)) { +			if (Actor_Query_Which_Set_In(kActorMcCoy) != Actor_Query_Which_Set_In(kActorSteele)) { +				AI_Movement_Track_Flush(kActorSteele); +				AI_Movement_Track_Append(kActorSteele, 41, 100); +				AI_Movement_Track_Repeat(kActorSteele); +			} +		} +		return false; +	} else { +		Actor_Clue_Acquire(kActorSteele, 239, 1, -1); +		return true; +	} +} + +void AIScriptSteele::TimerExpired(int timer) { +	if (Actor_Query_Goal_Number(kActorSteele) != 210 || timer || Player_Query_Current_Scene() != kSceneNR11) { +		if (Actor_Query_Goal_Number(kActorSteele) != 210 || timer) { +			if (timer == 1) { +				int goal = Actor_Query_Goal_Number(kActorSteele); + +				AI_Countdown_Timer_Reset(kActorSteele, 1); + +				if (goal == 415) { +					Actor_Set_Goal_Number(kActorSteele, 416); +				} else if (goal == 416) { +					Actor_Set_Goal_Number(kActorSteele, 419); +				} +			} +			return; // false; +		} else { +			Actor_Set_Goal_Number(kActorSteele, 211); +			return; // true; +		} +	} else { +		Actor_Set_Goal_Number(kActorSteele, 212); +		return; // true; +	} +} + +void AIScriptSteele::CompletedMovementTrack() { +	switch (Actor_Query_Goal_Number(kActorSteele)) { +	case 1: +		Actor_Set_Goal_Number(kActorSteele, 2); +		break; + +	case 2: +		Actor_Set_Goal_Number(kActorSteele, 3); +		break; + +	case 3: +		if (Random_Query(1, 3) == 1) { +			Actor_Clues_Transfer_New_To_Mainframe(kActorSteele); +			Actor_Clues_Transfer_New_From_Mainframe(kActorSteele); +		} + +		if (Query_Score(kActorMcCoy) > Query_Score(kActorSteele) && Query_Score(kActorMcCoy) < 75) +			Set_Score(kActorSteele, Random_Query(2, 5) + Query_Score(kActorMcCoy)); + +		Actor_Set_Goal_Number(kActorSteele, 4); +		break; + +	case 4: +		Actor_Set_Goal_Number(kActorSteele, 5); +		break; + +	case 5: +		Actor_Set_Goal_Number(kActorSteele, 6); +		break; + +	case 6: +		if (Random_Query(1, 3) == 1) { +			Actor_Clues_Transfer_New_To_Mainframe(kActorSteele); +			Actor_Clues_Transfer_New_From_Mainframe(kActorSteele); +		} + +		if (Query_Score(kActorMcCoy) > Query_Score(kActorSteele) && Query_Score(kActorMcCoy) < 75) +			Set_Score(kActorSteele, Random_Query(2, 5) + Query_Score(kActorMcCoy)); + +		Actor_Set_Goal_Number(kActorSteele, 7); +		break; + +	case 7: +		Actor_Set_Goal_Number(kActorSteele, 8); +		break; + +	case 8: +		Actor_Set_Goal_Number(kActorSteele, 9); +		break; + +	case 9: +		Actor_Set_Goal_Number(kActorSteele, 10); +		break; + +	case 10: +		Actor_Set_Goal_Number(kActorSteele, 11); +		break; + +	case 100: +		if (Actor_Query_Goal_Number(kActorSteele) == 100) { +			Player_Set_Combat_Mode(kActorMcCoy); + +			if (Actor_Query_Goal_Number(kActorIzo) != 199) { +				if (Actor_Query_In_Between_Two_Actors(kActorMcCoy, kActorSteele, kActorIzo)) { +					Actor_Set_Goal_Number(kActorSteele, 125); +				} else if (Game_Flag_Query(44)) { +					Actor_Set_Goal_Number(kActorSteele, 120); +				} else { +					Actor_Set_Goal_Number(kActorSteele, 121); +				} +			} +		} +		break; + +	case 111: +		Actor_Set_Goal_Number(kActorSteele, 112); +		break; + +	case 113: +		Actor_Set_Goal_Number(kActorSteele, 190); +		break; + +	case 241: +		Actor_Set_Goal_Number(kActorSteele, 242); +		break; + +	case 423: +	case 424: +	case 425: +	case 426: +	case 427: +	case 428: +	case 429: +	case 430: +	case 431: +		Actor_Set_Goal_Number(kActorSteele, 423); +		break; + +	case 432: +		Player_Set_Combat_Mode(kActorMcCoy); +		Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +		Actor_Says(kActorMcCoy, 2265, 11); +		Actor_Says(kActorSteele, 640, 58); +		Actor_Says(kActorMcCoy, 2270, 12); +		Actor_Says(kActorSteele, 650, 59); +		Actor_Says(kActorMcCoy, 2275, 16); +		Actor_Says(kActorMcCoy, 2280, 15); +		Actor_Says(kActorSteele, 660, 60); +		Actor_Says(kActorSteele, 670, 59); +		Actor_Set_Goal_Number(kActorSteele, 433); +		Player_Set_Combat_Mode(kActorSteele); +		Loop_Actor_Walk_To_XYZ(kActorMcCoy, -731.0f, 8.26f, -657.0f, 0, 0, 0, 0); +		Ambient_Sounds_Remove_All_Non_Looping_Sounds(1); +		Ambient_Sounds_Remove_All_Looping_Sounds(1); +		Game_Flag_Set(578); +		Set_Enter(kSetKP07, kSetKP04); +		break; + +	default: +		break; +	} +	return; //true; +} + +void AIScriptSteele::ReceivedClue(int clueId, int fromActorId) { +	//return false; +} + +void AIScriptSteele::ClickedByPlayer() { +	int goal = Actor_Query_Goal_Number(kActorSteele); + +	if (goal == 599) { +		Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +		Actor_Says(kActorMcCoy, 8630, 14); +		return; //true; +	} + +	if (goal > 399 || Global_Variable_Query(kVariableChapter) > 2) { +		return; //true; +	} + +	if (goal - 241 <= 9) { +		if (goal == 241) { +			Actor_Set_Goal_Number(kActorSteele, 242); +			return; //true; +		} + +		if (goal == 250) { +			return; //true; +		} +	} + +	AI_Movement_Track_Pause(1); +	Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +	Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); + +	switch (Random_Query(1, 3)) { +	case 1: +		Actor_Says(kActorMcCoy, 3970, 15); +		Actor_Says(kActorSteele, 2700, 15); +		break; + +	case 2: +		Actor_Says(kActorMcCoy, 3970, 15); +		Actor_Says(kActorSteele, 2060, 15); +		break; + +	case 3: +		Actor_Says(kActorMcCoy, 3970, 15); +		Actor_Says(kActorSteele, 1750, 15); +		break; +	} +	AI_Movement_Track_Unpause(1); + +	return; //false; +} + +void AIScriptSteele::EnteredScene(int sceneId) { +	if (Actor_Query_Goal_Number(kActorSteele) == 2) { +		if (Game_Flag_Query(147) || Random_Query(1, 3) != 1) { +			if (Game_Flag_Query(148) || Random_Query(1, 3) != 1) { +				if (!Game_Flag_Query(149) && Random_Query(1, 20) == 1) { +					Actor_Clue_Acquire(kActorSteele, 7, 1, -1); +					Game_Flag_Set(149); + +					if (Game_Flag_Query(709)) +						Item_Remove_From_World(98); +				} +			} else { +				Actor_Clue_Acquire(kActorSteele, 6, 1, -1); +				Game_Flag_Set(148); + +				if (Game_Flag_Query(709)) +					Item_Remove_From_World(79); +			} +		} else { +			Actor_Clue_Acquire(kActorSteele, 8, 1, -1); +			Game_Flag_Set(147); + +			if (Game_Flag_Query(709)) +				Item_Remove_From_World(82); + +			Global_Variable_Increment(14, 1); +		} +	} + +	if (Actor_Query_Goal_Number(kActorSteele) != 5 +			|| !Actor_Query_In_Set(kActorSteele, kSetCT03_CT04) +			|| Game_Flag_Query(169) != 1 +			|| Game_Flag_Query(170) +			|| Game_Flag_Query(171)) { +		return; //false; +	} + +	Game_Flag_Set(171); + +	return; //true; +} + +void AIScriptSteele::OtherAgentEnteredThisScene(int otherActorId) { +	// return false; +} + +void AIScriptSteele::OtherAgentExitedThisScene(int otherActorId) { +	// return false; +} + +void AIScriptSteele::OtherAgentEnteredCombatMode(int otherActorId, int combatMode) { +	if (!otherActorId && Actor_Query_Goal_Number(kActorSteele) == 410) +		Actor_Set_Goal_Number(kActorSteele, 418); +} + +void AIScriptSteele::ShotAtAndMissed() { +	// return false; +} + +bool AIScriptSteele::ShotAtAndHit() { +	if (Actor_Query_Goal_Number(kActorSteele) == 251) +		Actor_Set_Goal_Number(kActorSteele, 271); + +	if (/* !a1 && */ Actor_Query_In_Set(kActorSteele, kSetHF06)) +		Non_Player_Actor_Combat_Mode_On(1, 3, 1, 0, 15, 4, 7, 8, 0, 0, 100, 25, 300, 0); + +	return false; +} + +void AIScriptSteele::Retired(int byActorId) { +	Game_Flag_Set(646); + +	if (Actor_Query_Goal_Number(kActorSteele) == 450) { +		Scene_Exits_Enable(); +		Game_Flag_Set(484); +	} + +	if (Actor_Query_Goal_Number(kActorSteele) != 599) { +		Actor_Change_Animation_Mode(kActorSteele, 49); +		Actor_Set_Goal_Number(kActorSteele, 599); +	} +} + +int AIScriptSteele::GetFriendlinessModifierIfGetsClue(int otherActorId, int clueId) { +	if (otherActorId != kActorMcCoy) +		return 0; + +	switch (clueId) { +	case 202: +	case 223: +	case 224: +	case 226: +	case 227: +	case 228: +	case 231: +	case 241: +	case 242: +		return 5; + +	case 212: +	case 221: +	case 230: +		return 0; + +	case 215: +		return -4; + +	case 216: +	case 217: +	case 218: +	case 219: +	case 220: +		return -5; + +	case 222: +		return 4; + +	case 239: +		return -3; + +	case 240: +		return -2; +	} + +	return 0; +} + +double AIScriptSteele::comp_distance(int actorId, float a5, float a6, int a1, float a2, float a3, float a4) { +	float actorZ; +	float actorX; +	float actorY; + +	Actor_Query_XYZ(actorId, &actorX, &actorY, &actorZ); +	return sqrt((a4 - actorZ) * (a4 - actorZ) + (a2 - actorX) * (a2 - actorX) + (a3 - actorY) * (a3 - actorY)); +} + +bool AIScriptSteele::GoalChanged(int currentGoalNumber, int newGoalNumber) { +	if (currentGoalNumber == 599) +		return false; + +	switch (newGoalNumber) { +	case 1: +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Append(kActorSteele, 12, 5); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 2: +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Append(kActorSteele, 61, 30); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 3: +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Append(kActorSteele, 35, 45); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 4: +		AI_Movement_Track_Flush(kActorSteele); +		Game_Flag_Set(184); +		Game_Flag_Reset(183); +		AI_Movement_Track_Append(kActorSteele, 39, 45); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 5: +		AI_Movement_Track_Flush(kActorSteele); +		if (Random_Query(1, 10) == 1) { +			AI_Movement_Track_Append(kActorSteele, 63, 20); +		} else { +			AI_Movement_Track_Append(kActorSteele, 64, 10); +		} +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 6: +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Append(kActorSteele, 35, 45); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 7: +		AI_Movement_Track_Flush(kActorSteele); +		Game_Flag_Set(185); +		Game_Flag_Reset(184); +		AI_Movement_Track_Append(kActorSteele, 39, 45); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 8: +		AI_Movement_Track_Flush(kActorSteele); +		if (Random_Query(1, 2) == 1) { +			AI_Movement_Track_Append(kActorSteele, 19, 10); +		} else { +			AI_Movement_Track_Append(kActorSteele, 35, 30); +		} +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 9: +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Append(kActorSteele, 62, 1); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 10: +		AI_Movement_Track_Flush(kActorSteele); +		Game_Flag_Reset(185); +		AI_Movement_Track_Append(kActorSteele, 39, 30); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 11: +		Actor_Clue_Acquire(kActorSteele, kClueGrigorianInterviewA, 1, kActorGrigorian); +		if (Game_Flag_Query(44)) { +			Actor_Clue_Acquire(kActorSteele, kClueGrigorianInterviewB1, 1, kActorGrigorian); +		} else { +			Actor_Clue_Acquire(kActorSteele, kClueGrigorianInterviewB2, 1, kActorGrigorian); +		} +		Actor_Set_Goal_Number(kActorSteele, 0); +		return true; +	case 100: +		AI_Movement_Track_Flush(kActorSteele); +		if (Game_Flag_Query(44)) { +			AI_Movement_Track_Append_Run(kActorSteele, 202, 0); +			AI_Movement_Track_Append_Run(kActorSteele, 203, 0); +		} else { +			AI_Movement_Track_Append(kActorSteele, 174, 0); +			AI_Movement_Track_Append_Run(kActorSteele, 175, 0); +		} +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 110: +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Append(kActorSteele, 192, 0); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 111: +		Loop_Actor_Walk_To_XYZ(kActorSteele, -187.82f, 0.08f, 1460.74f, 0, 0, 0, 0); +		Actor_Face_Heading(kActorSteele, 802, 0); +		Loop_Actor_Travel_Stairs(kActorSteele, 10, 0, 0); +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Append(kActorSteele, 35, 0); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 112: +		if (Random_Query(1, 2) == 1) { +			Actor_Clues_Transfer_New_To_Mainframe(kActorSteele); +			Actor_Clues_Transfer_New_From_Mainframe(kActorSteele); +		} +		if (Query_Score(kActorMcCoy) > Query_Score(kActorSteele) && Query_Score(kActorMcCoy) < 75) { +			Set_Score(kActorSteele, Random_Query(2, 5) + Query_Score(kActorMcCoy)); +		} +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Append(kActorSteele, 35, Random_Query(45, 120)); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 113: +		AI_Movement_Track_Flush(kActorSteele); +		if (Random_Query(1, 5) == 1) { +			AI_Movement_Track_Append(kActorSteele, 222, 0); +			AI_Movement_Track_Append_With_Facing(kActorSteele, 223, 3, 973); +			AI_Movement_Track_Append(kActorSteele, 224, 5); +			AI_Movement_Track_Append(kActorSteele, 216, 5); +			AI_Movement_Track_Append(kActorSteele, 217, 0); +			AI_Movement_Track_Append(kActorSteele, 218, 0); +			AI_Movement_Track_Append(kActorSteele, 210, 0); +			AI_Movement_Track_Append(kActorSteele, 211, 0); +			AI_Movement_Track_Append(kActorSteele, 204, 0); +			AI_Movement_Track_Append(kActorSteele, 205, 0); +			AI_Movement_Track_Append(kActorSteele, 206, 0); +			AI_Movement_Track_Append(kActorSteele, 39, 20); +			AI_Movement_Track_Append(kActorSteele, 35, 60); +			AI_Movement_Track_Append(kActorSteele, 39, 20); +			AI_Movement_Track_Append(kActorSteele, 228, 0); +			AI_Movement_Track_Append(kActorSteele, 229, 10); +			AI_Movement_Track_Repeat(kActorSteele); +		} else { +			if (Random_Query(1, 3) == 1) { +				AI_Movement_Track_Append(kActorSteele, 232, 0); +				AI_Movement_Track_Append(kActorSteele, 233, 0); +				AI_Movement_Track_Append(kActorSteele, 234, 3); +				AI_Movement_Track_Append(kActorSteele, 237, 0); +				AI_Movement_Track_Append(kActorSteele, 238, 0); +				AI_Movement_Track_Append(kActorSteele, 239, 0); +				AI_Movement_Track_Append(kActorSteele, 240, 10); +				AI_Movement_Track_Append(kActorSteele, 39, 120); +				AI_Movement_Track_Append(kActorSteele, 243, 0); +				AI_Movement_Track_Append(kActorSteele, 244, 10); +			} else { +				AI_Movement_Track_Append(kActorSteele, 248, 0); +				AI_Movement_Track_Append(kActorSteele, 249, 0); +				AI_Movement_Track_Append(kActorSteele, 250, 10); +				AI_Movement_Track_Append(kActorSteele, 253, 0); +				AI_Movement_Track_Append_With_Facing(kActorSteele, 254, 3, 1015); +				AI_Movement_Track_Append_With_Facing(kActorSteele, 255, 2, 1015); +				AI_Movement_Track_Append_With_Facing(kActorSteele, 256, 3, 1015); +				AI_Movement_Track_Append(kActorSteele, 257, 0); +				AI_Movement_Track_Append(kActorSteele, 39, 30); +				AI_Movement_Track_Append(kActorSteele, 35, 120); +				AI_Movement_Track_Append(kActorSteele, 39, 30); +			} +			AI_Movement_Track_Repeat(kActorSteele); +		} +		return true; +	case 120: +		Actor_Force_Stop_Walking(kActorMcCoy); +		Sound_Play(27, 100, 0, 0, 50); +		Actor_Set_Goal_Number(kActorIzo, 199); +		Actor_Change_Animation_Mode(kActorMcCoy, 0); +		Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +		Loop_Actor_Walk_To_Actor(kActorSteele, 0, 48, 0, 1); +		Actor_Says(kActorSteele, 1860, 3); +		Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +		Actor_Says(kActorMcCoy, 4825, 18); +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Says(kActorSteele, 1870, 3); +		Actor_Says(kActorSteele, 1880, 3); +		Actor_Says(kActorMcCoy, 4830, 13); +		Actor_Says(kActorSteele, 1890, 3); +		Actor_Says(kActorSteele, 1900, 3); +		Actor_Face_Actor(kActorSteele, kActorIzo, 1); +		Actor_Says(kActorSteele, 1910, 3); +		Actor_Says(kActorSteele, 1920, 3); +		Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Says(kActorSteele, 1930, 3); +		Actor_Set_Goal_Number(kActorSteele, 130); +		Player_Gains_Control(); +		return true; +	case 121: +		Actor_Force_Stop_Walking(kActorMcCoy); +		Actor_Face_Actor(kActorSteele, kActorIzo, 1); +		Actor_Change_Animation_Mode(kActorIzo, 0); +		Actor_Face_Actor(kActorIzo, kActorSteele, 1); +		Actor_Says_With_Pause(kActorSteele, 2010, 0.0, 4); +		Actor_Change_Animation_Mode(kActorSteele, 4); +		Loop_Actor_Walk_To_Actor(kActorSteele, kActorIzo, 60, 0, 0); +		Actor_Change_Animation_Mode(kActorSteele, 4); +		_animationState = 23; +		_animationFrame = 0; +		Actor_Says(kActorIzo, 660, 3); +		Actor_Says_With_Pause(kActorSteele, 2020, 0.0f, 4); +		Actor_Says_With_Pause(kActorSteele, 2030, 0.0f, 4); +		Actor_Change_Animation_Mode(kActorSteele, 4); +		Actor_Says(kActorIzo, 670, 3); +		Actor_Says(kActorSteele, 2040, 4); +		Actor_Says(kActorIzo, 680, 3); +		Actor_Says(kActorSteele, 2050, 3); +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Says(kActorSteele, 2060, 3); +		Actor_Says(kActorMcCoy, 4845, 3); +		Actor_Says(kActorSteele, 2070, 3); +		Actor_Says(kActorSteele, 2080, 3); +		Actor_Face_Actor(kActorSteele, kActorIzo, 1); +		Actor_Says(kActorSteele, 2090, 3); +		Actor_Says_With_Pause(kActorSteele, 2100, 1.0f, 3); +		Actor_Says(kActorIzo, 690, 3); +		Actor_Says(kActorSteele, 2110, 3); +		Actor_Says(kActorSteele, 2120, 3); +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Says(kActorSteele, 2140, 3); +		Actor_Says(kActorMcCoy, 4850, 3); +		Actor_Says(kActorSteele, 2150, 3); +		Actor_Set_Goal_Number(kActorIzo, 120); +		Actor_Set_Goal_Number(kActorSteele, 130); +		Actor_Set_Goal_Number(kActorSteele, 0); +		return true; +	case 125: +		Actor_Force_Stop_Walking(kActorMcCoy); +		Actor_Set_Goal_Number(kActorIzo, 114); +		Actor_Says(kActorSteele, 1940, 3); +		Loop_Actor_Walk_To_Actor(kActorSteele, 0, 60, 0, 1); +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +		Actor_Says(kActorSteele, 1950, 3); +		Actor_Says(kActorMcCoy, 4835, 14); +		Actor_Says(kActorSteele, 1980, 3); +		Actor_Says(kActorMcCoy, 4840, 15); +		Actor_Says(kActorSteele, 1990, 3); +		Actor_Says(kActorSteele, 2000, 3); +		Actor_Set_Goal_Number(kActorSteele, 130); +		Scene_Exits_Enable(); +		return true; +	case 126: +		return true; +	case 130: +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Append(kActorSteele, 174, 0); +		AI_Movement_Track_Append(kActorSteele, 35, 0); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 200: +		AI_Movement_Track_Flush(kActorSteele); +		return true; +	case 205: +		if (Query_Score(kActorMcCoy) > Query_Score(kActorSteele) && Query_Score(kActorMcCoy) < 75) { +			Set_Score(kActorSteele, Random_Query(2, 5) + Query_Score(kActorMcCoy)); +		} +		if (Game_Flag_Query(702)) { +			Game_Flag_Set(643); +		} +		AI_Movement_Track_Flush(kActorSteele); +		Actor_Put_In_Set(kActorSteele, kSetFreeSlotC); +		Actor_Set_At_Waypoint(kActorSteele, 35, 0); +		return true; +	case 210: +		AI_Countdown_Timer_Reset(kActorSteele, 0); +		AI_Countdown_Timer_Start(kActorSteele, 0, 15); +		return true; +	case 211: +		AI_Countdown_Timer_Reset(kActorSteele, 0); +		return true; +	case 212: +		if (comp_distance(kActorMcCoy, -4.0, 0.33f, 0.0f, 100.0f, 0.33f, -4.0f) < 48.0f) { +			Loop_Actor_Walk_To_XYZ(0, 32.0f, 0.33f, 17.0f, 0, 0, 0, 0); +		} +		AI_Countdown_Timer_Reset(kActorSteele, 0); +		Player_Loses_Control(); +		if (Actor_Query_Goal_Number(kActorDektora) == 250) { +			Async_Actor_Walk_To_XYZ(kActorMcCoy, -15.53f, 0.33f, 73.49f, 0, 0); +		} +		Actor_Put_In_Set(kActorSteele, kSetNR11); +		Actor_Set_At_XYZ(kActorSteele, 100.0f, -51.56f, 0.0, 0); +		_animationState = 10; +		_animationFrame = 0; +		return true; +	case 213: +	case 216: +	case 271: +		return true; +	case 214: +		Player_Gains_Control(); +		switch (Actor_Query_Goal_Number(kActorDektora)) { +		case 250: +			Actor_Face_Heading(kActorMcCoy, 954, 0); +			Actor_Change_Animation_Mode(kActorSteele, 4); +			Delay(2000); +			Actor_Says(kActorSteele, 1700, 58); +			Actor_Says(kActorMcCoy, 3800, 3); +			Actor_Says(kActorSteele, 1710, 59); +			Actor_Set_Goal_Number(kActorSteele, 215); +			break; +		case 260: +			Actor_Face_Actor(kActorSteele, kActorDektora, 1); +			Actor_Says(kActorSteele, 1790, 3); +			Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +			Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +			Actor_Says(kActorMcCoy, 3830, 17); +			Actor_Says(kActorSteele, 1800, 17); +			Actor_Says(kActorMcCoy, 3835, 18); +			Actor_Says(kActorSteele, 1810, 16); +			Game_Flag_Set(591); +			Actor_Set_Goal_Number(kActorDektora, 599); +			Actor_Set_Goal_Number(kActorSteele, 275); +			break; +		case 274: +			Actor_Modify_Friendliness_To_Other(kActorSteele, kActorMcCoy, 6); +			Actor_Says(kActorSteele, 1750, 12); +			Actor_Says(kActorMcCoy, 3815, 19); +			Actor_Says(kActorSteele, 1760, 13); +			Actor_Says(kActorMcCoy, 3820, 18); +			Actor_Says(kActorSteele, 1770, 14); +			Actor_Says(kActorSteele, 1780, 15); +			Actor_Says(kActorMcCoy, 3825, 14); +			Game_Flag_Set(591); +			Actor_Set_Goal_Number(kActorDektora, 599); +			Actor_Set_Goal_Number(kActorSteele, 275); +		} +		return true; +	case 215: +		Game_Flag_Set(635); +		Actor_Change_Animation_Mode(kActorSteele, 6); +		Scene_Exits_Disable(); +		return true; +	case 230: +		AI_Movement_Track_Flush(kActorSteele); +		Actor_Put_In_Set(kActorSteele, kSetNR01); +		Actor_Set_At_XYZ(kActorSteele, 94.03f, 23.88f, -794.46f, 685); +		return true; +	case 231: +		AI_Movement_Track_Flush(kActorSteele); +		Actor_Put_In_Set(kActorSteele, kSetNR05_NR08); +		Actor_Set_At_XYZ(kActorSteele, -1034.09f, 0.32f, 224.77f, 440); +		Game_Flag_Set(722); +		Set_Enter(kSetNR05_NR08, kSetPS01); +		return true; +	case 232: +		Game_Flag_Set(532); +		Set_Enter(kSetNR02, kSetNR03); +		return true; +	case 233: +		Game_Flag_Set(310); +		Game_Flag_Reset(181); +		Game_Flag_Set(257); +		Actor_Put_In_Set(kActorSteele, kSetHF03); +		Actor_Set_At_XYZ(kActorSteele, 291.0f, 47.76f, -892.0f, 453); +		Set_Enter(kSetHF03, kSetDR06); +		return true; +	case 234: +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Append_Run(kActorSteele, 372, 0); +		AI_Movement_Track_Append(kActorSteele, 35, 0); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 235: +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Append_Run(kActorSteele, 467, 0); +		AI_Movement_Track_Append(kActorSteele, 35, 0); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 236: +		Actor_Put_In_Set(kActorSteele, kSetNR10); +		Actor_Set_At_XYZ(kActorSteele, -118.13f, 2.84f, -197.90f, 305); +		return true; +	case 240: +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Flush(kActorLucy); +		Actor_Put_In_Set(kActorSteele, kSetHF02); +		Actor_Set_At_XYZ(kActorSteele, 254.94f, 47.76f, -262.58f, 210); +		Actor_Put_In_Set(kActorLucy, kSetHF02); +		Actor_Set_At_XYZ(kActorLucy, 596.49f, 47.76f, -260.04f, 731); +		return true; +	case 241: +		Actor_Change_Animation_Mode(kActorSteele, 6); +		Delay(500); +		Actor_Change_Animation_Mode(kActorLucy, 48); +		Actor_Set_Targetable(kActorLucy, 0); +		Actor_Retired_Here(kActorLucy, 36, 18, 1, -1); +		Delay(1000); +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Append_Run(kActorSteele, 380, 0); +		AI_Movement_Track_Repeat(kActorSteele); +		Delay(500); +		ADQ_Add(6, 340, 48); +		return true; +	case 242: +		AI_Movement_Track_Flush(kActorSteele); +		Player_Loses_Control(); +		Delay(500); +		Actor_Says(kActorSteele, 0, 14); +		Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +		Actor_Says(kActorMcCoy, 1540, 16); +		Actor_Says(kActorSteele, 10, 13); +		Actor_Says(kActorSteele, 20, 18); +		Actor_Says(kActorMcCoy, 1545, 13); +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Says(kActorSteele, 30, 18); +		Actor_Says(kActorSteele, 40, 18); +		Actor_Says(kActorMcCoy, 1550, 13); +		Actor_Face_Actor(kActorSteele, kActorLucy, 1); +		Actor_Says(kActorSteele, 50, 12); +		Actor_Says(kActorMcCoy, 1555, 13); +		Actor_Says(kActorSteele, 60, 12); +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Says(kActorSteele, 80, 16); +		Actor_Says(kActorMcCoy, 1560, 13); +		Delay(500); +		Game_Flag_Set(617); +		Player_Gains_Control(); +		if (Game_Flag_Query(255)) { +			Actor_Put_In_Set(kActorSteele, kSetNR01); +			Actor_Set_At_XYZ(kActorSteele, 12.17f, 23.88f, -533.37f, 674); +			Game_Flag_Reset(255); +			Game_Flag_Reset(256); +			Set_Enter(kSetNR01, kSetNR01); +		} else { +			Actor_Put_In_Set(kActorSteele, kSetHF01); +			Actor_Set_At_XYZ(kActorSteele, 324.32f, 8.0f, -465.87f, 674); +			Game_Flag_Reset(255); +			Game_Flag_Reset(256); +			Set_Enter(kSetHF01, kSetDR03); +		} +		return true; +	case 243: +		Player_Loses_Control(); +		Delay(500); +		Actor_Put_In_Set(kActorSteele, kSetHF02); +		Actor_Set_At_XYZ(kActorSteele, 254.94f, 47.76f, -262.58f, 210); +		return true; +	case 244: +		Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +		Actor_Says(kActorMcCoy, 1560, 14); +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Says(kActorSteele, 100, 13); +		Actor_Says(kActorMcCoy, 1575, 13); +		Actor_Says(kActorSteele, 120, 15); +		Actor_Set_Goal_Number(kActorSteele, 246); +		return true; +	case 245: +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Says(kActorSteele, 150, 13); +		Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +		Actor_Says(kActorMcCoy, 1580, 13); +		Actor_Says(kActorSteele, 160, 14); +		Actor_Says(kActorMcCoy, 1585, 16); +		Actor_Says(kActorSteele, 170, 16); +		Actor_Says(kActorSteele, 180, 17); +		Actor_Says(kActorMcCoy, 1590, 17); +		Actor_Says(kActorSteele, 200, 15); +		Actor_Set_Goal_Number(kActorSteele, 246); +		return true; +	case 246: +		Actor_Says(kActorSteele, 130, 13); +		Actor_Says(kActorSteele, 140, 13); +		Delay(500); +		Game_Flag_Set(617); +		Player_Gains_Control(); +		if (Game_Flag_Query(255)) { +			Actor_Put_In_Set(kActorSteele, kSetNR01); +			Actor_Set_At_XYZ(kActorSteele, 12.17f, 23.88f, -533.37f, 674); +			Game_Flag_Reset(255); +			Game_Flag_Reset(256); +			Set_Enter(kSetNR01, kSetNR01); +		} else { +			Actor_Put_In_Set(kActorSteele, kSetHF01); +			Actor_Set_At_XYZ(kActorSteele, 324.32f, 8.0f, -465.87f, 674); +			Game_Flag_Reset(255); +			Game_Flag_Reset(256); +			Set_Enter(kSetHF01, kSetDR03); +		} +		return true; +	case 250: +		AI_Movement_Track_Flush(kActorSteele); +		Actor_Put_In_Set(kActorSteele, kSetNR01); +		Actor_Set_At_XYZ(kActorSteele, 94.03f, 23.88f, -794.46f, 685); +		if (Game_Flag_Query(255)) { +			Game_Flag_Reset(255); +			Game_Flag_Reset(256); +		} +		Game_Flag_Set(603); +		Actor_Change_Animation_Mode(kActorSteele, 0); +		_var1 = 3; +		return true; +	case 251: +		Actor_Set_Targetable(kActorSteele, 1); +		return true; +	case 252: +		Player_Loses_Control(); +		Actor_Change_Animation_Mode(kActorSteele, 6); +		Sound_Play(27, 100, 0, 0, 50); +		Game_Flag_Reset(603); +		Actor_Set_Targetable(kActorSteele, 0); +		Actor_Set_Goal_Number(kActorGordo, 299); +		Delay(1500); +		Player_Set_Combat_Mode(0); +		Actor_Says(kActorSteele, 1070, 14); +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Says(kActorSteele, 1260, 16); +		Actor_Says(kActorSteele, 1270, 13); +		Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +		Actor_Says(kActorMcCoy, 3065, 18); +		Actor_Says(kActorSteele, 1280, 13); +		Actor_Says(kActorSteele, 1290, 13); +		Game_Flag_Set(592); +		Player_Gains_Control(); +		if (Game_Flag_Query(256)) { +			Actor_Put_In_Set(kActorSteele, kSetHF01); +			Actor_Set_At_XYZ(kActorSteele, 324.32f, 8.0f, -465.87f, 674); +			Game_Flag_Set(617); +			Game_Flag_Reset(255); +			Game_Flag_Reset(256); +			Set_Enter(kSetHF01, kSetDR03); +		} else { +			Actor_Set_Goal_Number(kActorSteele, 280); +		} +		return true; +	case 255: +		ADQ_Flush(); +		Actor_Change_Animation_Mode(kActorSteele, 6); +		Sound_Play(27, 100, 0, 0, 50); +		Actor_Force_Stop_Walking(kActorMcCoy); +		Actor_Change_Animation_Mode(kActorMcCoy, 48); +		Actor_Retired_Here(kActorMcCoy, 12, 12, 1, -1); +		Actor_Set_Goal_Number(kActorGordo, 251); +		Actor_Says(kActorSteele, 1250, 3); +		return true; +	case 258: +		Game_Flag_Reset(603); +		ADQ_Flush(); +		Game_Flag_Set(592); +		Actor_Set_Targetable(kActorSteele, 0); +		Delay(1000); +		Player_Set_Combat_Mode(0); +		Player_Loses_Control(); +		_animationState = 40; +		_animationFrame = 0; +		Delay(2000); +		Actor_Change_Animation_Mode(kActorSteele, 0); +		Actor_Change_Animation_Mode(kActorMcCoy, 0); +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Says(kActorSteele, 1080, 17); +		Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +		Actor_Says(kActorMcCoy, 3025, 14); +		Actor_Says(kActorSteele, 1090, 16); +		Actor_Face_Actor(kActorSteele, kActorGordo, 1); +		Actor_Says(kActorSteele, 1100, 13); +		Actor_Says(kActorSteele, 1110, 17); +		Actor_Says(kActorMcCoy, 3030, 19); +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Says(kActorSteele, 1130, 15); +		Actor_Says(kActorSteele, 1140, 12); +		Player_Gains_Control(); +		Actor_Set_Goal_Number(kActorSteele, 280); +		return true; +	case 260: +		ADQ_Flush(); +		Actor_Change_Animation_Mode(kActorMcCoy, 6); +		Sound_Play(27, 100, 0, 0, 50); +		_animationState = 38; +		_animationFrame = 0; +		Actor_Set_Goal_Number(kActorGordo, 251); +		Game_Flag_Reset(603); +		Game_Flag_Set(592); +		Actor_Set_Targetable(kActorSteele, 0); +		Player_Loses_Control(); +		return true; +	case 262: +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Says(kActorSteele, 1160, 15); +		Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +		Actor_Says(kActorMcCoy, 3035, 14); +		Actor_Says(kActorSteele, 1170, 16); +		Actor_Says(kActorMcCoy, 3040, 15); +		Actor_Says(kActorSteele, 1180, 16); +		Actor_Says(kActorMcCoy, 3045, 15); +		Actor_Says(kActorMcCoy, 3055, 15); +		Actor_Says(kActorSteele, 1190, 16); +		Actor_Says(kActorMcCoy, 3060, 15); +		Actor_Says(kActorSteele, 1200, 16); +		Actor_Says(kActorSteele, 1210, 14); +		Actor_Modify_Friendliness_To_Other(kActorSteele, kActorMcCoy, -5); +		Actor_Modify_Friendliness_To_Other(kActorClovis, kActorMcCoy, 2); +		Player_Set_Combat_Mode(0); +		Music_Stop(2); +		Player_Gains_Control(); +		Actor_Set_Goal_Number(kActorSteele, 280); +		return true; +	case 270: +		ADQ_Flush(); +		Player_Loses_Control(); +		Game_Flag_Reset(603); +		Actor_Set_Targetable(kActorSteele, 0); +		Actor_Set_Goal_Number(kActorGordo, 251); +		Actor_Start_Speech_Sample(kActorSteele, 1150); +		Actor_Change_Animation_Mode(kActorSteele, 49); +		Delay(5000); +		Actor_Set_Goal_Number(kActorMcCoy, 500); +		return true; +	case 275: +		Delay(500); +		Game_Flag_Set(617); +		Player_Gains_Control(); +		if (Game_Flag_Query(255)) { +			Actor_Put_In_Set(kActorSteele, kSetNR01); +			Actor_Set_At_XYZ(kActorSteele, 12.17f, 23.88f, -533.37f, 674); +			Game_Flag_Reset(255); +			Game_Flag_Reset(256); +			Set_Enter(kSetNR01, kSetNR01); +		} else { +			Actor_Put_In_Set(kActorSteele, kSetHF01); +			Actor_Set_At_XYZ(kActorSteele, 324.32f, 8.0f, -465.87f, 674); +			Game_Flag_Reset(255); +			Game_Flag_Reset(256); +			Set_Enter(kSetHF01, kSetDR03); +		} +		return true; +	case 280: +		Actor_Says(kActorMcCoy, 2970, 15); +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Says(kActorSteele, 840, 16); +		Actor_Says(kActorMcCoy, 2975, 15); +		Actor_Says(kActorSteele, 850, 16); +		Actor_Says(kActorDispatcher, 0, 3); +		Actor_Says(kActorDispatcher, 10, 3); +		Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +		Actor_Says(kActorMcCoy, 2980, 12); +		Actor_Says(kActorSteele, 860, 14); +		Actor_Says(kActorMcCoy, 2985, 13); +		Actor_Says(kActorSteele, 870, 15); +		Actor_Says(kActorMcCoy, 2990, 16); +		Actor_Says(kActorSteele, 880, 17); +		Actor_Says(kActorSteele, 890, 18); +		Actor_Says(kActorMcCoy, 2995, 12); +		Actor_Says(kActorSteele, 900, 13); +		Actor_Says(kActorMcCoy, 3000, 13); +		Actor_Says(kActorSteele, 920, 12); +		Actor_Says(kActorDispatcher, 30, 3); +		Actor_Says(kActorMcCoy, 3005, 14); +		Actor_Says(kActorSteele, 930, 16); +		Actor_Says(kActorSteele, 950, 13); +		Actor_Says(kActorMcCoy, 3010, 15); +		Actor_Says(kActorSteele, 960, 15); +		Actor_Says(kActorSteele, 970, 13); +		Actor_Says(kActorMcCoy, 3015, 12); +		Actor_Says(kActorSteele, 980, 17); +		if (Player_Query_Current_Scene() == 54) { +			Actor_Set_Goal_Number(kActorSteele, 290); +		} else { +			Actor_Set_Goal_Number(kActorSteele, 291); +		} +		return true; +	case 285: +		Actor_Set_Goal_Number(kActorSteele, 290); +		return true; +	case 290: +		Loop_Actor_Walk_To_XYZ(kActorMcCoy, -281.0f, 31.93f, -1061.0f, 0, 0, 1, 0); +		Actor_Face_Heading(kActorMcCoy, 45, 0); +		Loop_Actor_Travel_Stairs(kActorMcCoy, 3, 0, 0); +		Global_Variable_Set(1, 4); +		Scene_Exits_Enable(); +		Actor_Set_Health(kActorMcCoy, 50, 50); +		Game_Flag_Set(523); +		Game_Flag_Set(343); +		Game_Flag_Set(680); +		Chapter_Enter(4, 79, 91); +		return true; +	case 291: +		Game_Flag_Set(722); +		Global_Variable_Set(1, 4); +		Scene_Exits_Enable(); +		Game_Flag_Set(523); +		Game_Flag_Set(680); +		Chapter_Enter(4, 79, 91); +		return true; +	case 300: +		if (Query_Score(kActorMcCoy) > Query_Score(kActorSteele) && Query_Score(kActorMcCoy) < 75) { +			Set_Score(kActorSteele, Random_Query(2, 5) + Query_Score(kActorMcCoy)); +		} +		if (Query_Score(kActorMcCoy) > Query_Score(kActorSteele) && Query_Score(kActorMcCoy) > 74) { +			Actor_Modify_Friendliness_To_Other(kActorSteele, kActorMcCoy, 3); +		} +		Actor_Set_Goal_Number(kActorSteele, 305); +		return true; +	case 305: +		Actor_Put_In_Set(kActorSteele, kSetFreeSlotC); +		Actor_Set_At_Waypoint(kActorSteele, 35, 0); +		return true; +	case 400: +	case 401: +	case 423: +		return true; +	case 410: +		Actor_Set_Targetable(kActorSteele, 1); +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Start_Speech_Sample(kActorSteele, 2510); +		Actor_Change_Animation_Mode(kActorSteele, 4); +		Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +		Delay(3000); +		Async_Actor_Walk_To_XYZ(kActorSteele, -109.0f, -36.55f, 26.0f, 0, 0); +		return true; +	case 411: +		Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +		Actor_Says(kActorSteele, 430, 14); +		Actor_Change_Animation_Mode(kActorSteele, 4); +		Delay(4000); +		Async_Actor_Walk_To_XYZ(kActorSteele, -109.0f, -36.55f, 26.0f, 0, 0); +		return true; +	case 412: +		Actor_Force_Stop_Walking(kActorSteele); +		return true; +	case 413: +		Async_Actor_Walk_To_XYZ(kActorSteele, 1.0, -36.55f, 111.0f, 0, 0); +		return true; +	case 415: +		Actor_Force_Stop_Walking(kActorSteele); +		Actor_Change_Animation_Mode(kActorSteele, 51); +		AI_Countdown_Timer_Start(kActorSteele, 1, 2); +		return true; +	case 416: +		Actor_Set_At_XYZ(kActorSteele, -48.83f, -36.55f, 69.98f, 280); +		Loop_Actor_Walk_To_Actor(kActorMcCoy, kActorSteele, 36, 0, 1); +		Actor_Face_Actor(kActorMcCoy, kActorSteele, 1); +		if (Game_Flag_Query(653) == 1) { +			Actor_Says(kActorSteele, 400, 3); +			Actor_Says(kActorMcCoy, 2165, 14); +			Actor_Says(kActorSteele, 410, 3); +			Actor_Says(kActorMcCoy, 2170, 14); +			Actor_Says(kActorSteele, 420, 3); +		} else { +			Actor_Says(kActorSteele, 440, 3); +			Actor_Says(kActorMcCoy, 2175, 14); +			Actor_Says(kActorSteele, 450, 3); +			Actor_Says(kActorSteele, 460, 3); +			Actor_Says(kActorSteele, 470, 3); +		} +		AI_Countdown_Timer_Start(kActorSteele, 1, 3); +		return true; +	case 418: +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Change_Animation_Mode(kActorSteele, 6); +		Actor_Change_Animation_Mode(kActorMcCoy, 48); +		Actor_Retired_Here(kActorMcCoy, 72, 18, 1, -1); +		return true; +	case 419: +		Actor_Set_Targetable(kActorSteele, 0); +		Game_Flag_Set(646); +		Actor_Set_Goal_Number(kActorSteele, 599); +		Actor_Retired_Here(kActorSteele, 60, 12, 1, -1); +		return true; +	case 420: +		Actor_Put_In_Set(kActorSteele, kSetKP01); +		Actor_Set_At_XYZ(kActorSteele, 20.0f, -12.2f, -97.0f, 907); +		Actor_Change_Animation_Mode(kActorSteele, 43); +		return true; +	case 421: +		Game_Flag_Reset(482); +		Delay(2000); +		Actor_Face_Actor(kActorSteele, kActorMcCoy, 1); +		Actor_Says(kActorSteele, 360, -1); +		Loop_Actor_Walk_To_Actor(kActorMcCoy, kActorSteele, 48, 0, 0); +		Actor_Says(kActorMcCoy, 2150, 14); +		Actor_Says(kActorSteele, 370, 15); +		Actor_Says(kActorMcCoy, 2155, 12); +		Actor_Says(kActorSteele, 380, 16); +		Actor_Says(kActorMcCoy, 2160, 18); +		Actor_Says(kActorSteele, 390, 13); +		Actor_Set_Goal_Number(kActorSteele, 422); +		return true; +	case 422: +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Append(kActorSteele, 530, 0); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 430: +		Actor_Put_In_Set(kActorSteele, kSetKP05_KP06); +		Actor_Set_At_XYZ(kActorSteele, -1110.0f, 0.0f, 952.0f, 155); +		Actor_Change_Animation_Mode(kActorSteele, 4); +		return true; +	case 431: +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Append_Run(kActorSteele, 541, 0); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 432: +		Actor_Set_At_Waypoint(kActorSteele, 542, 0); +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Append_Run(kActorSteele, 543, 0); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 433: +		AI_Movement_Track_Flush(kActorSteele); +		AI_Movement_Track_Append_Run(kActorSteele, 542, 0); +		AI_Movement_Track_Repeat(kActorSteele); +		return true; +	case 450: +		Actor_Put_In_Set(kActorSteele, kSetKP05_KP06); +		Actor_Set_At_XYZ(kActorSteele, -947.39f, 0.0f, 728.89f, 0); +		return true; +	case 499: +		AI_Movement_Track_Flush(kActorSteele); +		Actor_Put_In_Set(kActorSteele, kSetKP05_KP06); +		Actor_Set_At_XYZ(kActorSteele, -782.15f, 8.26f, -263.64f, 52); +		return true; +	default: +		return false; +	} +} + +bool AIScriptSteele::UpdateAnimation(int *animation, int *frame) { +	switch (_animationState) { +	case 0: +		if (_var1 <= 3) { +			if (_var1) { +				if (_var1 == 1) { +					Game_Flag_Set(482); +					_animationState = 41; +					_var1 = 1; +					_var2 = 0; +				} else if (_var1 == 3) { +					*animation = 88; +					_animationFrame++; +					if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(88) - 1) +						_animationFrame = 0; +				} +			} else { +				*animation = 74; +				_animationFrame++; +				if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(74)) { +					_animationFrame = 0; +					if (Game_Flag_Query(482) == 1) { +						_animationState = 41; +						_var1 = 1; +						_var2 = 0; +					} +				} +			} +		} +		break; +	case 1: +		_animationFrame = 0; +		*animation = _animationNext; +		_animationState = _animationStateNext; +		break; +	case 2: +		*animation = 67; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(67)) +			_animationFrame = 0; +		break; +	case 3: +		*animation = 68; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(68)) +			_animationFrame = 0; +		break; +	case 4: +		*animation = 59; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(59)) { +			_animationFrame = 0; +		} +		break; +	case 5: +		*animation = 60; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(60)) { +			_animationFrame = 0; +		} +		break; +	case 6: +		*animation = 69; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(69)) { +			_animationFrame = 0; +		} +		break; +	case 7: +		*animation = 70; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(70)) { +			_animationFrame = 0; +		} +		break; +	case 8: +		*animation = 62; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(62)) { +			_animationFrame = 0; +		} +		break; +	case 9: +		*animation = 63; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(63)) { +			_animationFrame = 0; +		} +		break; +	case 10: +		*animation = 83; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(83)) { +			Actor_Change_Animation_Mode(kActorSteele, 0); +			*animation = 74; +			_animationFrame = 0; +			_animationState = 0; +			if (Actor_Query_Goal_Number(kActorSteele) == 212) { +				Actor_Set_Goal_Number(kActorSteele, 213); +			} +		} +		break; +	case 11: +		*animation = 84; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(84)) { +			_animationFrame = 0; +		} +		break; +	case 12: +		*animation = 85; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(85)) { +			_animationFrame = 0; +		} +		break; +	case 13: +		*animation = 86; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(86)) { +			_animationFrame = 0; +			_animationState = 0; +		} +		break; +	case 14: +		*animation = 77; +		if (!_animationFrame && _flag) { +			*animation = 74; +			_animationFrame = 0; +			_animationState = 0; +			_flag = 0; +		} else { +			_animationFrame++; +			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(77) - 1) { +				_animationFrame = 0; +			} +		} +		break; +	case 15: +		*animation = 78; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(78) - 1) { +			_animationFrame = 0; +			_animationState = 14; +			*animation = 77; +		} +		break; +	case 16: +		*animation = 79; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(79) - 1) { +			_animationFrame = 0; +			_animationState = 14; +			*animation = 77; +		} +		break; +	case 17: +		*animation = 80; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(80) - 1) { +			_animationFrame = 0; +			_animationState = 14; +			*animation = 77; +		} +		break; +	case 18: +		*animation = 81; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(81) - 1) { +			_animationFrame = 0; +			_animationState = 14; +			*animation = 77; +		} +		break; +	case 19: +		*animation = 81; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(81) - 1) { +			_animationFrame = 0; +			_animationState = 14; +			*animation = 77; +		} +		break; +	case 20: +		*animation = 82; +		if (!_animationFrame && _flag) { +			_animationFrame = 0; +			_animationState = 23; +			*animation = 66; +			Actor_Change_Animation_Mode(kActorSteele, 4); +			_flag = 0; +		} else { +			_animationFrame++; +			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(82) - 1) { +				_animationFrame = 0; +			} +		} +		break; +	case 21: +		*animation = 82; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(82) - 1) { +			_animationFrame = 0; +			_animationState = 20; +			*animation = 82; +		} +		break; +	case 22: +		*animation = 82; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(82) - 1) { +			_animationFrame = 0; +			_animationState = 20; +			*animation = 82; +		} +		break; +	case 23: +		*animation = 54; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(54) - 1) { +			_animationFrame = 0; +		} +		break; +	case 24: +		*animation = 65; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(65) - 1) { +			*animation = 74; +			_animationFrame = 0; +			_animationState = 0; +		} +		break; +	case 25: +		*animation = 64; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(64) - 1) { +			_animationFrame = 0; +			_animationState = 23; +			*animation = 54; +		} +		break; +	case 26: +		*animation = 66; +		_animationFrame++; +		if (_animationFrame == 3) { +			int snd; +			if (Random_Query(1, 2) == 1) { +				snd = 9010; +			} else { +				snd = 9015; +			} +			Sound_Play_Speech_Line(1, snd, 75, 0, 99); +		} + +		if (_animationFrame == 4) +			Actor_Combat_AI_Hit_Attempt(1); + +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(66) - 1) { +			_animationFrame = 0; +			_animationState = 23; +			*animation = 54; +			Actor_Change_Animation_Mode(kActorSteele, 4); +			if (Actor_Query_Goal_Number(kActorSteele) == 215) { +				Actor_Change_Animation_Mode(kActorSteele, 6); +				_animationState = 26; +				_animationFrame = 0; +				*animation = 66; +			} +		} +		break; +	case 27: +		*animation = 55; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(55) - 1) { +			_animationFrame = 0; +			_animationState = 23; +			*animation = 54; +			Actor_Change_Animation_Mode(kActorSteele, 4); +		} +		break; +	case 28: +		*animation = 56; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(56) - 1) { +			_animationFrame = 0; +			_animationState = 23; +			*animation = 54; +			Actor_Change_Animation_Mode(kActorSteele, 4); +		} +		break; +	case 29: +		*animation = 57; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(57) - 1) { +			_animationFrame = 0; +			_animationState = 23; +			*animation = 54; +			Actor_Change_Animation_Mode(kActorSteele, 4); +		} +		break; +	case 30: +		*animation = 58; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(58) - 1) { +			_animationFrame = 0; +			_animationState = 23; +			*animation = 54; +			Actor_Change_Animation_Mode(kActorSteele, 4); +		} +		break; +	case 31: +		*animation = 71; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(71) - 1) { +			*animation = 74; +			_animationFrame = 0; +			_animationState = 0; +			Actor_Change_Animation_Mode(kActorSteele, 0); +		} +		break; +	case 32: +		*animation = 72; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(72) - 1) { +			*animation = 74; +			_animationFrame = 0; +			_animationState = 0; +			Actor_Change_Animation_Mode(kActorSteele, 0); +		} +		break; +	case 33: +		*animation = 61; +		if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(61) - 1) +			_animationFrame++; +		break; +	case 34: +		*animation = 73; +		if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(73) - 1) +			_animationFrame++; +		break; +	case 35: +		*animation = 61; +		if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(61) - 1) +			_animationFrame++; +		break; +	case 36: +		*animation = 88; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(88) - 1) { +			_animationFrame = 0; +		} +		break; +	case 37: +		if (!_animationFrame && _flag) { +			_animationFrame = 0; +			_animationState = 0; +			_var1 = 3; +			_flag = 0; +			*animation = 89; +		} else { +			*animation = 89; +			_animationFrame++; +			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(89) - 1) { +				_animationFrame = 0; +			} +		} +		break; +	case 38: +		*animation = 90; +		_animationFrame++; +		if (_animationFrame > 5) { +			Actor_Change_Animation_Mode(kActorSteele, 0); +			_animationState = 0; +			_animationFrame = 0; +			*animation = 74; +			Actor_Set_Goal_Number(kActorSteele, 261); +		} +		break; +	case 39: +		*animation = 92; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(92) - 1) { +			_animationFrame = 0; +			_animationState = 36; +			*animation = 88; +		} +		break; +	case 40: +		*animation = 91; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(91) - 1) { +			*animation = 74; +			_animationFrame = 0; +			_animationState = 0; +			_var1 = 0; +		} +		break; +	case 41: +		if (_var1 > 3) { +			break; +		} +		if (_var1) { +			if (_var1 == 1) { +				*animation = 75; +				if (_var2) { +					_var2--; +				} else { +					if (++_animationFrame >= 6) { +						if (_animationFrame <= 9) { +							_var2 = Random_Query(1, 3); +							break; +						} +					} +					if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(75)) { +						_animationFrame = 0; +						if (Game_Flag_Query(482) == 1) { +							_var1 = 0; +						} else { +							_var1 = 3; +						} +					} +				} +			} else if (_var1 == 3) { +				*animation = 76; +				_animationFrame++; +				if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(76) - 1) { +					_animationState = 0; +					_animationFrame = 0; +					_var1 = 0; +					Game_Flag_Reset(482); +				} +			} +		} else { +			*animation = 74; +			_animationFrame++; +			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(74)) { +				_animationFrame = 0; +				if (Game_Flag_Query(482) == 1) { +					if (Random_Query(1, 3) == 1) { +						_var1 = 1; +					} +				} else { +					_var1 = 3; +				} +			} +		} +		break; +	default: +		*animation = 406; +		_animationFrame = 0; +		break; +	} +	*frame = _animationFrame; + +	return true; +} + +bool AIScriptSteele::ChangeAnimationMode(int mode) { +	warning("Steele: ChangeAnimationMode: TODO"); +	return true; +} + +void AIScriptSteele::QueryAnimationState(int *animationState, int *animationFrame, int *animationStateNext, int *animationNext) { +	*animationState     = _animationState; +	*animationFrame     = _animationFrame; +	*animationStateNext = _animationStateNext; +	*animationNext      = _animationNext; +} + +void AIScriptSteele::SetAnimationState(int animationState, int animationFrame, int animationStateNext, int animationNext) { +	_animationState     = animationState; +	_animationFrame     = animationFrame; +	_animationStateNext = animationStateNext; +	_animationNext      = animationNext; +} + +bool AIScriptSteele::ReachedMovementTrackWaypoint(int waypointId) { +	if (waypointId == 174 && Actor_Query_Goal_Number(kActorSteele) == 130) +		Actor_Set_Goal_Number(kActorSteele, 112); + +	return true; +} + +void AIScriptSteele::FledCombat() { +	// return false; +} + +} // End of namespace BladeRunner diff --git a/engines/bladerunner/script/ai_script.cpp b/engines/bladerunner/script/ai_script.cpp index 9322dd2e3b..b364bcee44 100644 --- a/engines/bladerunner/script/ai_script.cpp +++ b/engines/bladerunner/script/ai_script.cpp @@ -40,6 +40,7 @@ AIScripts::AIScripts(BladeRunnerEngine *vm, int actorCount) {  	}  	_AIScripts[kActorMcCoy] = new AIScriptMcCoy(_vm);                     //  0 +	_AIScripts[kActorSteele] = new AIScriptSteele(_vm);                   //  1  	_AIScripts[kActorGordo] = new AIScriptGordo(_vm);                     //  2  	_AIScripts[kActorGuzza] = new AIScriptGuzza(_vm);                     //  4  	_AIScripts[kActorGrigorian] = new AIScriptGrigorian(_vm);             // 11 diff --git a/engines/bladerunner/script/ai_script.h b/engines/bladerunner/script/ai_script.h index 46bdf8a472..6329c17ef8 100644 --- a/engines/bladerunner/script/ai_script.h +++ b/engines/bladerunner/script/ai_script.h @@ -120,6 +120,14 @@ DECLARE_SCRIPT(McCoy)  	void sub_4059D0(float a1);  END_SCRIPT +DECLARE_SCRIPT(Steele) +	bool _flag; +	int _var1; +	int _var2; + +	double comp_distance(int actorId, float a5, float a6, int a1, float a2, float a3, float a4); +END_SCRIPT +  DECLARE_SCRIPT(Gordo)  	int var_45B078;  	int _counter; diff --git a/engines/bladerunner/script/script.cpp b/engines/bladerunner/script/script.cpp index 7f36eaa607..76526b52e6 100644 --- a/engines/bladerunner/script/script.cpp +++ b/engines/bladerunner/script/script.cpp @@ -1182,7 +1182,12 @@ void ScriptBase::View_Score_Board() {  	//TODO  	warning("View_Score_Board()");  } -// ScriptBase::Query_Score + +int ScriptBase::Query_Score(int a0) { +	warning("Query_Score(%d)", a0); + +	return 0; +}  void ScriptBase::Set_Score(int a0, int a1) {  	warning("Set_Score(%d, %d)", a0, a1); diff --git a/engines/bladerunner/script/script.h b/engines/bladerunner/script/script.h index edfbacdcae..90266df764 100644 --- a/engines/bladerunner/script/script.h +++ b/engines/bladerunner/script/script.h @@ -233,7 +233,7 @@ protected:  	void Voight_Kampff_Activate(int actorId, int calibrationRatio);  	int Elevator_Activate(int elevatorId);  	void View_Score_Board(); -	// Query_Score +	int Query_Score(int a0);  	void Set_Score(int a0, int a1);  	void Give_McCoy_Ammo(int ammoType, int ammo);  	void Assign_Player_Gun_Hit_Sounds(int ammoType, int soundId1, int soundId2, int soundId3);  | 
