aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/script/scene/kp03.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/bladerunner/script/scene/kp03.cpp')
-rw-r--r--engines/bladerunner/script/scene/kp03.cpp185
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);