From db0020c55fa0078e1ff01156454f224df02dba6c Mon Sep 17 00:00:00 2001 From: Thanasis Antoniou Date: Wed, 8 May 2019 22:57:06 +0300 Subject: BLADERUNNER: Another fix for confess to Guzza --- engines/bladerunner/script/ai/dektora.cpp | 2 +- engines/bladerunner/script/scene/ps04.cpp | 19 +++++++++++++------ engines/bladerunner/script/scene/tb05.cpp | 2 +- engines/bladerunner/script/scene/ug13.cpp | 2 +- engines/bladerunner/script/script.cpp | 6 +++--- engines/bladerunner/script/script.h | 2 +- 6 files changed, 20 insertions(+), 13 deletions(-) (limited to 'engines/bladerunner') diff --git a/engines/bladerunner/script/ai/dektora.cpp b/engines/bladerunner/script/ai/dektora.cpp index 690c1e9916..0d76f10b2c 100644 --- a/engines/bladerunner/script/ai/dektora.cpp +++ b/engines/bladerunner/script/ai/dektora.cpp @@ -1057,7 +1057,7 @@ bool AIScriptDektora::UpdateAnimation(int *animation, int *frame) { if (_animationFrame == 8 && Actor_Query_In_Set(kActorDektora, kSetNR10) ) { - Scene_Loop_Start_Special(2, 4, 1); + Scene_Loop_Start_Special(kSceneLoopModeOnce, 4, true); } if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(157)) { diff --git a/engines/bladerunner/script/scene/ps04.cpp b/engines/bladerunner/script/scene/ps04.cpp index 11e45b73f6..120fde25e2 100644 --- a/engines/bladerunner/script/scene/ps04.cpp +++ b/engines/bladerunner/script/scene/ps04.cpp @@ -51,7 +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(kPS04LoopPanToPS04, 0, 0); + + Scene_Loop_Start_Special(kSceneLoopModeLoseControl, kPS04LoopPanToPS04, false); Scene_Loop_Set_Default(kPS04LoopMainLoop); } @@ -358,20 +359,26 @@ void SceneScriptPS04::dialogueWithGuzza() { Actor_Says(kActorGuzza, 620, 32); if (_vm->_cutContent) { // add a fade-out here while Guzza calls-in for favors - Scene_Loop_Start_Special(kPS04LoopPanToPS04, 0, 0); + Scene_Loop_Start_Special(kSceneLoopModeOnce, kPS04LoopPanToPS04, true); Scene_Loop_Set_Default(kPS04LoopMainLoop); - Delay(2000); + Delay(1000); + Actor_Face_Actor(kActorGuzza, kActorMcCoy, true); + Delay(1000); } - Actor_Face_Actor(kActorGuzza, kActorMcCoy, true); Actor_Says(kActorGuzza, 700, 34); Actor_Says(kActorMcCoy, 4100, 13); Actor_Says(kActorGuzza, 710, 31); Actor_Says(kActorGuzza, 720, 34); Actor_Says(kActorMcCoy, 4105, 18); - Loop_Actor_Walk_To_XYZ(kActorMcCoy, -668.0f, -350.85f, 962.0f, 0, false, false, 0); +#if BLADERUNNER_ORIGINAL_BUGS + Loop_Actor_Walk_To_XYZ(kActorMcCoy, -668.0f, -350.85f, 962.0f, 0, false, false, false); +#else + // enforce stop running (if was running) - McCoy running in Guzza's office in this scene looks bad + Loop_Actor_Walk_To_XYZ(kActorMcCoy, -668.0f, -350.85f, 962.0f, 0, false, false, true); +#endif // BLADERUNNER_ORIGINAL_BUGS Actor_Says(kActorGuzza, 730, 32); Actor_Face_Actor(kActorMcCoy, kActorGuzza, true); - Loop_Actor_Walk_To_XYZ(kActorMcCoy, -716.0f, -354.85f, 1042.0f, 0, false, false, 0); + Loop_Actor_Walk_To_XYZ(kActorMcCoy, -716.0f, -354.85f, 1042.0f, 0, false, false, false); Actor_Face_Actor(kActorGuzza, kActorMcCoy, true); Actor_Says(kActorGuzza, 740, 31); Actor_Says(kActorGuzza, 750, 32); diff --git a/engines/bladerunner/script/scene/tb05.cpp b/engines/bladerunner/script/scene/tb05.cpp index 896c3ffb73..f2eb62aea0 100644 --- a/engines/bladerunner/script/scene/tb05.cpp +++ b/engines/bladerunner/script/scene/tb05.cpp @@ -177,7 +177,7 @@ bool SceneScriptTB05::ClickedOnExit(int exitId) { if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, 23.0f, 151.53f, -205.0f, 12, true, false, 0)) { Game_Flag_Set(kFlagTB05toTB06); Set_Enter(kSetTB06, kSceneTB06); - Scene_Loop_Start_Special(kSceneLoopModeChangeSet, 2, 1); + Scene_Loop_Start_Special(kSceneLoopModeChangeSet, 2, true); } return true; } diff --git a/engines/bladerunner/script/scene/ug13.cpp b/engines/bladerunner/script/scene/ug13.cpp index ee1d364e4a..9b72fbdc78 100644 --- a/engines/bladerunner/script/scene/ug13.cpp +++ b/engines/bladerunner/script/scene/ug13.cpp @@ -66,7 +66,7 @@ void SceneScriptUG13::InitializeScene() { } if (Game_Flag_Query(kFlagUG08toUG13)) { - Scene_Loop_Start_Special(0, 0, 0); + Scene_Loop_Start_Special(kSceneLoopModeLoseControl, 0, false); Scene_Loop_Set_Default(1); } else if (Game_Flag_Query(kFlagUG08ElevatorUp)) { Scene_Loop_Set_Default(4); diff --git a/engines/bladerunner/script/script.cpp b/engines/bladerunner/script/script.cpp index 1b52d659ca..4ce5e893fe 100644 --- a/engines/bladerunner/script/script.cpp +++ b/engines/bladerunner/script/script.cpp @@ -577,12 +577,12 @@ bool ScriptBase::Loop_Actor_Walk_To_Waypoint(int actorId, int waypointId, int pr return result; } -bool ScriptBase::Loop_Actor_Walk_To_XYZ(int actorId, float x, float y, float z, int proximity, bool interruptible, bool run, bool a7) { - debugC(kDebugScript, "Loop_Actor_Walk_To_XYZ(%d, %f, %f, %f, %d, %d, %d, %d)", actorId, x, y, z, proximity, interruptible, run, a7); +bool ScriptBase::Loop_Actor_Walk_To_XYZ(int actorId, float x, float y, float z, int proximity, bool interruptible, bool run, bool force) { + debugC(kDebugScript, "Loop_Actor_Walk_To_XYZ(%d, %f, %f, %f, %d, %d, %d, %d)", actorId, x, y, z, proximity, interruptible, run, force); _vm->gameWaitForActive(); if (_vm->_runningActorId == actorId) { - if (a7) { + if (force) { _vm->_runningActorId = -1; } else { run = true; diff --git a/engines/bladerunner/script/script.h b/engines/bladerunner/script/script.h index fbd366f13a..7641b2279b 100644 --- a/engines/bladerunner/script/script.h +++ b/engines/bladerunner/script/script.h @@ -107,7 +107,7 @@ protected: bool Loop_Actor_Walk_To_Item(int actorId, int itemId, int proximity, bool interruptible, bool run); bool Loop_Actor_Walk_To_Scene_Object(int actorId, const char *objectName, int proximity, bool interruptible, bool run); bool Loop_Actor_Walk_To_Waypoint(int actorId, int waypointId, int proximity, bool interruptible, bool run); - bool Loop_Actor_Walk_To_XYZ(int actorId, float x, float y, float z, int proximity, bool interruptible, bool run, bool a7); + bool Loop_Actor_Walk_To_XYZ(int actorId, float x, float y, float z, int proximity, bool interruptible, bool run, bool force); void Async_Actor_Walk_To_Waypoint(int actorId, int waypointId, int proximity, bool run); void Async_Actor_Walk_To_XYZ(int actorId, float x, float y, float z, int proximity, bool run); void Actor_Force_Stop_Walking(int actorId); -- cgit v1.2.3