diff options
author | antoniou79 | 2019-05-08 00:49:15 +0300 |
---|---|---|
committer | antoniou79 | 2019-05-08 00:52:21 +0300 |
commit | 74936020ec6171c9e098945a629f2a37e488399c (patch) | |
tree | be2277b700dc19dc47b67e315329d2eee8e310d5 /engines/bladerunner/script/scene | |
parent | 02ac7fbfd32bdc03efe9a3e95f4b3fd615bee46d (diff) | |
download | scummvm-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.cpp | 2 | ||||
-rw-r--r-- | engines/bladerunner/script/scene/ps01.cpp | 5 | ||||
-rw-r--r-- | engines/bladerunner/script/scene/ps03.cpp | 22 | ||||
-rw-r--r-- | engines/bladerunner/script/scene/ps04.cpp | 50 |
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); |