aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/script/scene
diff options
context:
space:
mode:
authorantoniou792019-05-08 00:49:15 +0300
committerantoniou792019-05-08 00:52:21 +0300
commit74936020ec6171c9e098945a629f2a37e488399c (patch)
treebe2277b700dc19dc47b67e315329d2eee8e310d5 /engines/bladerunner/script/scene
parent02ac7fbfd32bdc03efe9a3e95f4b3fd615bee46d (diff)
downloadscummvm-rg350-74936020ec6171c9e098945a629f2a37e488399c.tar.gz
scummvm-rg350-74936020ec6171c9e098945a629f2a37e488399c.tar.bz2
scummvm-rg350-74936020ec6171c9e098945a629f2a37e488399c.zip
BLADERUNNER: fix Guzza, PS03, PS04, PS01
Also, added a custom transition when Guzza calls in for favors Still pending: in PS03 some actors may blink out of existence (happened to officer Grayford)
Diffstat (limited to 'engines/bladerunner/script/scene')
-rw-r--r--engines/bladerunner/script/scene/nr03.cpp2
-rw-r--r--engines/bladerunner/script/scene/ps01.cpp5
-rw-r--r--engines/bladerunner/script/scene/ps03.cpp22
-rw-r--r--engines/bladerunner/script/scene/ps04.cpp50
4 files changed, 74 insertions, 5 deletions
diff --git a/engines/bladerunner/script/scene/nr03.cpp b/engines/bladerunner/script/scene/nr03.cpp
index f1fb89e295..22ef83dd97 100644
--- a/engines/bladerunner/script/scene/nr03.cpp
+++ b/engines/bladerunner/script/scene/nr03.cpp
@@ -265,7 +265,7 @@ void SceneScriptNR03::SceneFrameAdvanced(int frame) {
rotateActorOnTable(frame);
} else if (frame == 110) {
if (Actor_Query_Goal_Number(kActorGuzza) == kGoalGuzzaSitAtNR03) {
- Actor_Set_Goal_Number(kActorGuzza, 200);
+ Actor_Set_Goal_Number(kActorGuzza, kGoalGuzzaWasAtNR03);
} else if (!Game_Flag_Query(kFlagNR03toNR05)) {
Actor_Set_Goal_Number(kActorMcCoy, kGoalMcCoyNRxxSitAtTable);
Player_Gains_Control();
diff --git a/engines/bladerunner/script/scene/ps01.cpp b/engines/bladerunner/script/scene/ps01.cpp
index 56b9f7289a..3a68356b63 100644
--- a/engines/bladerunner/script/scene/ps01.cpp
+++ b/engines/bladerunner/script/scene/ps01.cpp
@@ -96,7 +96,12 @@ bool SceneScriptPS01::ClickedOnExit(int exitId) {
if (exitId == 1) {
if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 1877.9f, 16592.0f, -2975.0f, 0, true, false, 0)) {
+#if BLADERUNNER_ORIGINAL_BUGS
Actor_Set_At_XYZ(kActorMcCoy, 1872.0f, 16592.0f, -2975.0f, 870);
+#else
+ // reduce glitch with spinner door
+ Actor_Set_At_XYZ(kActorMcCoy, 1872.0f, 16592.0f, -2994.0f, 870);
+#endif // BLADERUNNER_ORIGINAL_BUGS
Game_Flag_Reset(kFlagMcCoyInChinaTown);
Game_Flag_Reset(kFlagMcCoyInRunciters);
Game_Flag_Reset(kFlagMcCoyInMcCoyApartment);
diff --git a/engines/bladerunner/script/scene/ps03.cpp b/engines/bladerunner/script/scene/ps03.cpp
index 064caed1c9..158b6211c9 100644
--- a/engines/bladerunner/script/scene/ps03.cpp
+++ b/engines/bladerunner/script/scene/ps03.cpp
@@ -75,12 +75,22 @@ bool SceneScriptPS03::ClickedOnItem(int itemId, bool a2) {
bool SceneScriptPS03::ClickedOnExit(int exitId) {
if (exitId == 0) {
+#if BLADERUNNER_ORIGINAL_BUGS
if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -674.0f, -354.0f, 550.0f, 0, 1, false, 0)) {
Game_Flag_Set(kFlagPS03toPS04);
Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
Ambient_Sounds_Remove_All_Looping_Sounds(1);
Set_Enter(kSetPS04, kScenePS04);
}
+#else
+ // Make McCoy move more forward till he reaches the exit to avoid blinking out at transition to PS03
+ if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -674.0f, -354.0f, 690.0f, 0, 1, false, 0)) {
+ Game_Flag_Set(kFlagPS03toPS04);
+ Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
+ Ambient_Sounds_Remove_All_Looping_Sounds(1);
+ Set_Enter(kSetPS04, kScenePS04);
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
return true;
}
if (exitId == 1) {
@@ -90,18 +100,28 @@ bool SceneScriptPS03::ClickedOnExit(int exitId) {
Set_Enter(kSetPS02, kScenePS02);
Game_Flag_Reset(kFlagMcCoyAtPS03);
if (Global_Variable_Query(kVariableChapter) < 4) {
- Actor_Set_Goal_Number(kActorGuzza, kGoalGuzzaLeaveOffice);
+ Actor_Set_Goal_Number(kActorGuzza, kGoalGuzzaLeftOffice);
}
}
return true;
}
if (exitId == 2) {
+#if BLADERUNNER_ORIGINAL_BUGS
if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -875.0f, -354.0f, -1241.0f, 0, 1, false, 0)) {
Game_Flag_Set(kFlagPS03toPS14);
Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
Ambient_Sounds_Remove_All_Looping_Sounds(1);
Set_Enter(kSetPS14, kScenePS14);
}
+#else
+ // exit Police Station earlier (lower z) to avoid some glitch of blending McCoy with background
+ if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -875.0f, -354.0f, -1231.0f, 0, 1, false, 0)) {
+ Game_Flag_Set(kFlagPS03toPS14);
+ Ambient_Sounds_Remove_All_Non_Looping_Sounds(true);
+ Ambient_Sounds_Remove_All_Looping_Sounds(1);
+ Set_Enter(kSetPS14, kScenePS14);
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
return true;
}
return false;
diff --git a/engines/bladerunner/script/scene/ps04.cpp b/engines/bladerunner/script/scene/ps04.cpp
index 6be812804c..a5b2f01060 100644
--- a/engines/bladerunner/script/scene/ps04.cpp
+++ b/engines/bladerunner/script/scene/ps04.cpp
@@ -24,6 +24,11 @@
namespace BladeRunner {
+enum kPS04Loops {
+ kPS04LoopPanToPS04 = 0, // 0 - 29
+ kPS04LoopMainLoop = 1, // 30 - 90 (actually 31-90)
+};
+
void SceneScriptPS04::InitializeScene() {
AI_Movement_Track_Pause(kActorGuzza);
if (Game_Flag_Query(kFlagPS03toPS04)) {
@@ -46,8 +51,8 @@ void SceneScriptPS04::InitializeScene() {
Ambient_Sounds_Add_Sound(kSfxSCANNER5, 9, 40, 20, 20, 0, 0, -101, -101, 0, 0);
Ambient_Sounds_Add_Sound(kSfxSCANNER6, 9, 40, 20, 20, 0, 0, -101, -101, 0, 0);
Ambient_Sounds_Add_Sound(kSfxSCANNER7, 9, 40, 20, 20, 0, 0, -101, -101, 0, 0);
- Scene_Loop_Start_Special(0, 0, 0);
- Scene_Loop_Set_Default(1);
+ Scene_Loop_Start_Special(kPS04LoopPanToPS04, 0, 0);
+ Scene_Loop_Set_Default(kPS04LoopMainLoop);
}
void SceneScriptPS04::SceneLoaded() {
@@ -126,13 +131,47 @@ bool SceneScriptPS04::ClickedOn2DRegion(int region) {
}
void SceneScriptPS04::SceneFrameAdvanced(int frame) {
+ if (_vm->_cutContent) {
+ // custom code added for fading out and back in when Guzza calls in favors
+ // TODO keep this?
+ Set_Fade_Color(0, 0, 0);
+ if (frame > 5 && frame < 30) {
+ // transition scene
+ if ( Actor_Query_Goal_Number(kActorGuzza) == kGoalGuzzaCalledFavorsForHobo) {
+ Set_Fade_Density(0.0f);
+ if (Global_Variable_Query(kVariableChapter) == 1) {
+ Actor_Set_Goal_Number(kActorGuzza, kGoalGuzzaDefault);
+ } else if (Global_Variable_Query(kVariableChapter) < 4) {
+ Actor_Set_Goal_Number(kActorGuzza, kGoalGuzzaAtOffice);
+ }
+ }
+ }
+ else if (frame >= 79 && frame < 90) {
+ if ( frame == 79 && Actor_Query_Goal_Number(kActorGuzza) == kGoalGuzzaCallFavorsForHoboShoot1) {
+ Actor_Set_Goal_Number(kActorGuzza, kGoalGuzzaCallFavorsForHoboShoot2);
+ }
+ if ( Actor_Query_Goal_Number(kActorGuzza) == kGoalGuzzaCallFavorsForHoboShoot2) {
+ // Fading out
+ Set_Fade_Density((frame - 79) / 10.0f);
+ }
+ } else if (frame == 90) {
+ if ( Actor_Query_Goal_Number(kActorGuzza) == kGoalGuzzaCallFavorsForHoboShoot2) {
+ // Faded out
+ Set_Fade_Density(1.0f);
+ Scene_Loop_Start_Special(kPS04LoopPanToPS04, 0, 0);
+ Scene_Loop_Set_Default(kPS04LoopMainLoop);
+ Actor_Set_Goal_Number(kActorGuzza, kGoalGuzzaCalledFavorsForHobo);
+ }
+ }
+ // end of: custom code added for fading out and back in when Guzza calls in favors
+ }
}
void SceneScriptPS04::ActorChangedGoal(int actorId, int newGoal, int oldGoal, bool currentSet) {
}
void SceneScriptPS04::PlayerWalkedIn() {
- if (Actor_Query_Which_Set_In(kActorGuzza) == 64) {
+ if (Actor_Query_Which_Set_In(kActorGuzza) == kSetPS04) {
Actor_Face_Actor(kActorMcCoy, kActorGuzza, true);
}
//return false;
@@ -351,6 +390,11 @@ void SceneScriptPS04::dialogueWithGuzza() {
Actor_Says(kActorGuzza, 610, 33);
Actor_Face_Heading(kActorGuzza, 400, false);
Actor_Says(kActorGuzza, 620, 32);
+ if (_vm->_cutContent) {
+ // add a fade-out here while Guzza calls-in for favors
+ Actor_Set_Goal_Number(kActorGuzza, kGoalGuzzaCallFavorsForHoboShoot1);
+ Delay(4000);
+ }
Actor_Face_Actor(kActorGuzza, kActorMcCoy, true);
Actor_Says(kActorGuzza, 700, 34);
Actor_Says(kActorMcCoy, 4100, 13);