diff options
Diffstat (limited to 'engines/bladerunner/script/scene/kp03.cpp')
-rw-r--r-- | engines/bladerunner/script/scene/kp03.cpp | 185 |
1 files changed, 99 insertions, 86 deletions
diff --git a/engines/bladerunner/script/scene/kp03.cpp b/engines/bladerunner/script/scene/kp03.cpp index 1888380fca..fe2746cda0 100644 --- a/engines/bladerunner/script/scene/kp03.cpp +++ b/engines/bladerunner/script/scene/kp03.cpp @@ -24,6 +24,14 @@ namespace BladeRunner { +enum KP03Loops { + kKP03MainLoopBombInactive = 0, + kKP03MainLoopBombActive = 2, + kKP03MainLoopBombExploding = 4, + kKP03MainLoopBombExploded = 5, + kKP03MainLoopBombNoWire = 7 +}; + void SceneScriptKP03::InitializeScene() { if (Game_Flag_Query(kFlagKP05toKP03)) { Setup_Scene_Information( 1.0f, -36.55f, 111.0f, 200); @@ -40,22 +48,23 @@ void SceneScriptKP03::InitializeScene() { Ambient_Sounds_Add_Sound(376, 50, 180, 50, 100, 0, 0, -101, -101, 0, 0); Ambient_Sounds_Add_Sound(377, 50, 180, 50, 100, 0, 0, -101, -101, 0, 0); - if (Game_Flag_Query(422)) { - Scene_Loop_Set_Default(5); - } else if (Game_Flag_Query(484)) { - Scene_Loop_Set_Default(7); + if (Game_Flag_Query(kFlagKP03BombExploded)) { + Scene_Loop_Set_Default(kKP03MainLoopBombExploded); + } else if (Game_Flag_Query(kFlagKP03BombDisarmed)) { + Scene_Loop_Set_Default(kKP03MainLoopBombNoWire); } else { - Scene_Loop_Set_Default(2); - Game_Flag_Set(421); + Scene_Loop_Set_Default(kKP03MainLoopBombActive); + Game_Flag_Set(kFlagKP03BombActive); } - if (( Actor_Query_Goal_Number(kActorSteele) != 599 - && !Game_Flag_Query(422) - && !Game_Flag_Query(484) + + if (( Actor_Query_Goal_Number(kActorSteele) != kGoalSteeleGone + && !Game_Flag_Query(kFlagKP03BombExploded) + && !Game_Flag_Query(kFlagKP03BombDisarmed) ) - && ((Game_Flag_Query(kFlagMcCoyIsNotHelpingReplicants) + && ((Game_Flag_Query(kFlagMcCoyIsHelpingReplicants) && Game_Flag_Query(kFlagKP05toKP03) ) - || (!Game_Flag_Query(kFlagMcCoyIsNotHelpingReplicants) + || (!Game_Flag_Query(kFlagMcCoyIsHelpingReplicants) && Game_Flag_Query(kFlagKP01toKP03) ) ) @@ -79,31 +88,35 @@ bool SceneScriptKP03::MouseClick(int x, int y) { bool SceneScriptKP03::ClickedOn3DObject(const char *objectName, bool combatMode) { Actor_Face_Object(kActorSteele, "BRACK MID", true); - if (Object_Query_Click("BRACK MID", objectName) && !Game_Flag_Query(422)) { + if ( Object_Query_Click("BRACK MID", objectName) + && !Game_Flag_Query(kFlagKP03BombExploded) + ) { if (combatMode) { - Scene_Loop_Set_Default(5); - Scene_Loop_Start_Special(kSceneLoopModeOnce, 4, true); + Scene_Loop_Set_Default(kKP03MainLoopBombExploded); + Scene_Loop_Start_Special(kSceneLoopModeOnce, kKP03MainLoopBombExploding, true); Actor_Change_Animation_Mode(kActorMcCoy, 39); Actor_Retired_Here(kActorMcCoy, 72, 18, 1, -1); - Game_Flag_Set(422); - Game_Flag_Reset(421); + Game_Flag_Set(kFlagKP03BombExploded); + Game_Flag_Reset(kFlagKP03BombActive); return false; } - if (Actor_Query_Goal_Number(kActorSteele) == 411) { + + if (Actor_Query_Goal_Number(kActorSteele) == kGoalSteeleKP03Walk) { Scene_Exits_Enable(); - sub_401E54(); + saveSteele(); } else { if (Game_Flag_Query(kFlagKP01toKP03)) { Loop_Actor_Walk_To_XYZ(kActorMcCoy, -137.0f, -36.55f, 26.0f, 0, 0, true, 0); } else if (Game_Flag_Query(kFlagKP05toKP03)) { Loop_Actor_Walk_To_XYZ(kActorMcCoy, -50.0f, -36.55f, 78.0f, 0, 0, true, 0); } - if (Game_Flag_Query(421)) { + + if (Game_Flag_Query(kFlagKP03BombActive)) { Actor_Face_Object(kActorMcCoy, "BRACK MID", true); - Game_Flag_Set(484); - Game_Flag_Reset(421); - Scene_Loop_Set_Default(7); - Scene_Loop_Start_Special(kSceneLoopModeOnce, 0, false); + Game_Flag_Set(kFlagKP03BombDisarmed); + Game_Flag_Reset(kFlagKP03BombActive); + Scene_Loop_Set_Default(kKP03MainLoopBombNoWire); + Scene_Loop_Start_Special(kSceneLoopModeOnce, kKP03MainLoopBombInactive, false); Actor_Voice_Over(1110, kActorVoiceOver); Actor_Voice_Over(1120, kActorVoiceOver); } else { @@ -118,10 +131,10 @@ bool SceneScriptKP03::ClickedOn3DObject(const char *objectName, bool combatMode) bool SceneScriptKP03::ClickedOnActor(int actorId) { if (actorId == kActorSteele - && Actor_Query_Goal_Number(kActorSteele) == 411 + && Actor_Query_Goal_Number(kActorSteele) == kGoalSteeleKP03Walk ) { Actor_Face_Object(kActorSteele, "BRACK MID", true); - sub_401E54(); + saveSteele(); } return false; } @@ -132,7 +145,7 @@ bool SceneScriptKP03::ClickedOnItem(int itemId, bool a2) { bool SceneScriptKP03::ClickedOnExit(int exitId) { if (Actor_Query_Goal_Number(kActorSteele) == 410) { - Actor_Set_Goal_Number(kActorSteele, 418); + Actor_Set_Goal_Number(kActorSteele, kGoalSteeleKP03ShootMcCoy); } else { if (exitId == 0) { if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 1.0f, -36.55f, 111.0f, 0, true, false, 0)) { @@ -168,73 +181,73 @@ bool SceneScriptKP03::ClickedOn2DRegion(int region) { } void SceneScriptKP03::SceneFrameAdvanced(int frame) { - int v1; - float x, y, z; - if (frame == 123) { Ambient_Sounds_Play_Sound(491, 99, -60, 100, 99); } - if ( Game_Flag_Query(421) - && !Game_Flag_Query(484) + if ( Game_Flag_Query(kFlagKP03BombActive) + && !Game_Flag_Query(kFlagKP03BombDisarmed) + && !Game_Flag_Query(kFlagKP03BombExploded) ) { - v1 = -1; - if (!Game_Flag_Query(422)) { - Actor_Query_XYZ(kActorMcCoy, &x, &y, &z); + float x, y, z; + int bombTriggeredByActor = -1; + + Actor_Query_XYZ(kActorMcCoy, &x, &y, &z); + if ((Game_Flag_Query(kFlagKP01toKP03) + && -130.0f < x + ) + || (Game_Flag_Query(kFlagKP05toKP03) + && -130.0f > x + ) + ) { + bombTriggeredByActor = kActorMcCoy; + } + + Actor_Query_XYZ(kActorSteele, &x, &y, &z); + if (Game_Flag_Query(kFlagMcCoyIsHelpingReplicants) + && Actor_Query_Which_Set_In(kActorSteele) == kSetKP03 + ) { if ((Game_Flag_Query(kFlagKP01toKP03) - && -130.0f < x + && -130.0f > x ) || (Game_Flag_Query(kFlagKP05toKP03) - && -130.0f > x + && -130.0f < x ) ) { - v1 = 0; - } - } - if (!Game_Flag_Query(422)) { //todo ? same condition as before - Actor_Query_XYZ(kActorSteele, &x, &y, &z); - if (Game_Flag_Query(kFlagMcCoyIsNotHelpingReplicants) - && Actor_Query_Which_Set_In(kActorSteele) == 46 - ) { - if ((Game_Flag_Query(kFlagKP01toKP03) - && -130.0f > x - ) - || (Game_Flag_Query(kFlagKP05toKP03) - && -130.0f < x - ) - ) { - v1 = 1; - } - } else if ((Game_Flag_Query(kFlagKP01toKP03) - && -130.0f < x - ) - || (Game_Flag_Query(kFlagKP05toKP03) - && -130.0f > x - ) - ) { - v1 = 1; + bombTriggeredByActor = kActorSteele; } + } else if ((Game_Flag_Query(kFlagKP01toKP03) + && -130.0f < x + ) + || (Game_Flag_Query(kFlagKP05toKP03) + && -130.0f > x + ) + ) { + bombTriggeredByActor = kActorSteele; } - if (v1 != -1) { - Scene_Loop_Set_Default(5); - Scene_Loop_Start_Special(kSceneLoopModeOnce, 4, true); - Game_Flag_Set(422); - Game_Flag_Reset(421); + + if (bombTriggeredByActor != -1) { + Scene_Loop_Set_Default(kKP03MainLoopBombExploded); + Scene_Loop_Start_Special(kSceneLoopModeOnce, kKP03MainLoopBombExploding, true); + Game_Flag_Set(kFlagKP03BombExploded); + Game_Flag_Reset(kFlagKP03BombActive); Unclickable_Object("BRACK MID"); Scene_Exits_Enable(); - if (v1 == 1) { - Actor_Set_Goal_Number(kActorSteele, 415); + + if (bombTriggeredByActor == kActorSteele) { + Actor_Set_Goal_Number(kActorSteele, kGoalSteeleKP03Exploded); Music_Play(12, 25, 0, 1, -1, 0, 0); if (Actor_Query_Inch_Distance_From_Actor(kActorMcCoy, kActorSteele) <= 120) { - v1 = 0; + bombTriggeredByActor = kActorMcCoy; } } - if (v1) { - Actor_Change_Animation_Mode(kActorMcCoy, 21); + + if (bombTriggeredByActor == kActorSteele) { + Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeHit); } else { Actor_Force_Stop_Walking(kActorMcCoy); - Actor_Change_Animation_Mode(kActorMcCoy, 48); - Actor_Retired_Here(kActorMcCoy, 72, 18, 1, -1); + Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeDie); + Actor_Retired_Here(kActorMcCoy, 72, 18, true, -1); } } } @@ -245,26 +258,26 @@ void SceneScriptKP03::ActorChangedGoal(int actorId, int newGoal, int oldGoal, bo void SceneScriptKP03::PlayerWalkedIn() { if (Game_Flag_Query(kFlagKP05toKP03)) { - Loop_Actor_Walk_To_XYZ(kActorMcCoy, 1.0f, -36.55f, 87.0f, 0, 0, false, 0); + Loop_Actor_Walk_To_XYZ(kActorMcCoy, 1.0f, -36.55f, 87.0f, 0, false, false, 0); } if (Actor_Query_Is_In_Current_Set(kActorSteele) - && Actor_Query_Goal_Number(kActorSteele) != 419 + && Actor_Query_Goal_Number(kActorSteele) != kGoalSteeleKP03Dead ) { - if (Game_Flag_Query(kFlagMcCoyIsNotHelpingReplicants)) { + if (Game_Flag_Query(kFlagMcCoyIsHelpingReplicants)) { if (Game_Flag_Query(kFlagKP05toKP03)) { Actor_Set_Goal_Number(kActorSteele, 410); } return; } - if (!Game_Flag_Query(422) - && !Game_Flag_Query(484) + if (!Game_Flag_Query(kFlagKP03BombExploded) + && !Game_Flag_Query(kFlagKP03BombDisarmed) && Game_Flag_Query(kFlagKP01toKP03) ) { Scene_Exits_Disable(); Delay(1000); - Actor_Set_Goal_Number(kActorSteele, 411); + Actor_Set_Goal_Number(kActorSteele, kGoalSteeleKP03Walk); } } } @@ -275,28 +288,28 @@ void SceneScriptKP03::PlayerWalkedOut() { void SceneScriptKP03::DialogueQueueFlushed(int a1) { } -void SceneScriptKP03::sub_401E54() { +void SceneScriptKP03::saveSteele() { Player_Loses_Control(); Actor_Says(kActorMcCoy, 2180, 14); Actor_Set_Goal_Number(kActorSteele, 412); Actor_Says(kActorSteele, 480, 60); Actor_Face_Object(kActorMcCoy, "BRACK MID", true); Actor_Says(kActorMcCoy, 2185, 14); - Loop_Actor_Walk_To_XYZ(kActorSteele, -137.0f, -36.55f, 26.0f, 0, 0, false, 0); + Loop_Actor_Walk_To_XYZ(kActorSteele, -137.0f, -36.55f, 26.0f, 0, false, false, 0); Actor_Face_Object(kActorSteele, "BRACK MID", true); Actor_Says(kActorSteele, 490, 58); Actor_Says(kActorMcCoy, 2190, 14); Actor_Says(kActorSteele, 500, 58); Actor_Says(kActorSteele, 510, 59); Actor_Says(kActorSteele, 520, 60); - Game_Flag_Set(484); - Game_Flag_Reset(421); - Scene_Loop_Set_Default(7); - Scene_Loop_Start_Special(kSceneLoopModeOnce, 7, false); + Game_Flag_Set(kFlagKP03BombDisarmed); + Game_Flag_Reset(kFlagKP03BombActive); + Scene_Loop_Set_Default(kKP03MainLoopBombNoWire); + Scene_Loop_Start_Special(kSceneLoopModeOnce, kKP03MainLoopBombNoWire, false); Actor_Set_Goal_Number(kActorSteele, 413); Actor_Says(kActorMcCoy, 2195, 14); Ambient_Sounds_Play_Sound(151, 40, -60, -60, 0); - Loop_Actor_Walk_To_XYZ(kActorMcCoy, 1.0f, -36.55f, 111.0f, 0, 0, false, 0); + Loop_Actor_Walk_To_XYZ(kActorMcCoy, 1.0f, -36.55f, 111.0f, 0, false, false, 0); Actor_Set_Goal_Number(kActorSteele, 430); Ambient_Sounds_Remove_All_Non_Looping_Sounds(true); Ambient_Sounds_Remove_All_Looping_Sounds(1); |