diff options
author | Thanasis Antoniou | 2019-05-17 14:26:03 +0300 |
---|---|---|
committer | Thanasis Antoniou | 2019-05-17 14:26:49 +0300 |
commit | 674e44f55b8ce29e51e1eb5cdb9c316fd5b6ddaa (patch) | |
tree | ff3d94dc4df292c72c06abaf14bc9004729ab6b8 /engines/bladerunner/script | |
parent | 1e412ec97739c5342178810b888e0c046f6831e3 (diff) | |
download | scummvm-rg350-674e44f55b8ce29e51e1eb5cdb9c316fd5b6ddaa.tar.gz scummvm-rg350-674e44f55b8ce29e51e1eb5cdb9c316fd5b6ddaa.tar.bz2 scummvm-rg350-674e44f55b8ce29e51e1eb5cdb9c316fd5b6ddaa.zip |
BLADERUNNER: Howie Lee AI and Leary overlap fixes
Diffstat (limited to 'engines/bladerunner/script')
-rw-r--r-- | engines/bladerunner/script/ai/howie_lee.cpp | 11 | ||||
-rw-r--r-- | engines/bladerunner/script/scene/ct01.cpp | 3 | ||||
-rw-r--r-- | engines/bladerunner/script/scene/ct12.cpp | 3 | ||||
-rw-r--r-- | engines/bladerunner/script/scene/dr05.cpp | 2 | ||||
-rw-r--r-- | engines/bladerunner/script/scene/ps04.cpp | 5 | ||||
-rw-r--r-- | engines/bladerunner/script/scene/rc01.cpp | 9 |
6 files changed, 21 insertions, 12 deletions
diff --git a/engines/bladerunner/script/ai/howie_lee.cpp b/engines/bladerunner/script/ai/howie_lee.cpp index fb70160b8e..87fed51786 100644 --- a/engines/bladerunner/script/ai/howie_lee.cpp +++ b/engines/bladerunner/script/ai/howie_lee.cpp @@ -76,10 +76,8 @@ bool AIScriptHowieLee::Update() { // It might cause a blink-in issue, depending when update() will be called for Howie // This is kept as a backup while similar code is placed in the CT01 and CT02 scenes InitializeScene() // that will handle Howie appearing there immediately (fix for blink in) - if ( Game_Flag_Query(kFlagMcCoyInChinaTown) - && !Actor_Query_In_Set(kActorHowieLee, kSetCT01_CT12) - && Global_Variable_Query(kVariableChapter) == 1 // added condition - in cut content don't force Howie to return to CT01 here after Act 1 - ) { + if (Game_Flag_Query(kFlagMcCoyInChinaTown) + && !Actor_Query_In_Set(kActorHowieLee, kSetCT01_CT12)) { AI_Movement_Track_Flush(kActorHowieLee); AI_Movement_Track_Append(kActorHowieLee, 67, 0); // in kSetCT01_CT12 Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault); @@ -131,15 +129,14 @@ void AIScriptHowieLee::CompletedMovementTrack() { if (Actor_Query_Goal_Number(kActorHowieLee) == kGoalHowieLeeMovesInDiner03) { if (_vm->_cutContent) { // - // *after Act 1* Howie will be going to the Garbage Bin "regularly" + // *after Act 1* Howie will be going to the Garbage Bin "semi-regularly" // if McCoy is not in scenes CT01 and CT12 (where Howie is visible working at the diner) // otherwise he'll do the short cycle (goals 0, 1, 2, 3) - // This will result in Howie not being at the Diner sometimes even when McCoy is in Chinatown area - // This won't happen in Act 1, since he is most useful during that Act if (Global_Variable_Query(kVariableChapter) > 1 && Player_Query_Current_Scene() != kSceneCT01 && Player_Query_Current_Scene() != kSceneCT12 && Player_Query_Current_Scene() != kSceneCT04 + && Random_Query(1, 5) == 1 ) { Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeGoesToCT04GarbageBin); return; // true; diff --git a/engines/bladerunner/script/scene/ct01.cpp b/engines/bladerunner/script/scene/ct01.cpp index 3eb06e2160..754d939cba 100644 --- a/engines/bladerunner/script/scene/ct01.cpp +++ b/engines/bladerunner/script/scene/ct01.cpp @@ -118,8 +118,7 @@ void SceneScriptCT01::InitializeScene() { #if BLADERUNNER_ORIGINAL_BUGS #else if (!Actor_Query_In_Set(kActorHowieLee, kSetCT01_CT12) - && Global_Variable_Query(kVariableChapter) == 1 - ) { + && Global_Variable_Query(kVariableChapter) < 4) { AI_Movement_Track_Flush(kActorHowieLee); AI_Movement_Track_Append(kActorHowieLee, 67, 0); // in kSetCT01_CT12 Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault); diff --git a/engines/bladerunner/script/scene/ct12.cpp b/engines/bladerunner/script/scene/ct12.cpp index 5eb48765bc..27995a8645 100644 --- a/engines/bladerunner/script/scene/ct12.cpp +++ b/engines/bladerunner/script/scene/ct12.cpp @@ -73,8 +73,7 @@ void SceneScriptCT12::InitializeScene() { #if BLADERUNNER_ORIGINAL_BUGS #else if (!Actor_Query_In_Set(kActorHowieLee, kSetCT01_CT12) - && Global_Variable_Query(kVariableChapter) == 1 - ) { + && Global_Variable_Query(kVariableChapter) < 4) { AI_Movement_Track_Flush(kActorHowieLee); AI_Movement_Track_Append(kActorHowieLee, 67, 0); // in kSetCT01_CT12 Actor_Set_Goal_Number(kActorHowieLee, kGoalHowieLeeDefault); diff --git a/engines/bladerunner/script/scene/dr05.cpp b/engines/bladerunner/script/scene/dr05.cpp index df43d2c899..0ae0f28999 100644 --- a/engines/bladerunner/script/scene/dr05.cpp +++ b/engines/bladerunner/script/scene/dr05.cpp @@ -111,7 +111,7 @@ bool SceneScriptDR05::ClickedOnItem(int itemId, bool a2) { if (itemId == kItemChain && Player_Query_Combat_Mode() - && Actor_Query_Goal_Number(kActorMoraji) == kGoalOfficerLearyDefault + && Actor_Query_Goal_Number(kActorMoraji) == kGoalMorajiDefault ) { Overlay_Play("DR05OVER", 1, false, true, 0); Item_Remove_From_World(kItemChain); diff --git a/engines/bladerunner/script/scene/ps04.cpp b/engines/bladerunner/script/scene/ps04.cpp index 108d8a763d..c856496016 100644 --- a/engines/bladerunner/script/scene/ps04.cpp +++ b/engines/bladerunner/script/scene/ps04.cpp @@ -364,6 +364,11 @@ void SceneScriptPS04::dialogueWithGuzza() { Delay(1000); Actor_Face_Actor(kActorGuzza, kActorMcCoy, true); Delay(1000); + // if McCoy confesses before the body is dumped, then the body should be found (even if in dumpster) + if (!Game_Flag_Query(kFlagCT04HomelessBodyThrownAway)) { + Game_Flag_Set(kFlagCT04HomelessBodyFound); + // return false; + } } Actor_Says(kActorGuzza, 700, 34); Actor_Says(kActorMcCoy, 4100, 13); diff --git a/engines/bladerunner/script/scene/rc01.cpp b/engines/bladerunner/script/scene/rc01.cpp index c07ff463f2..93bbc0b5af 100644 --- a/engines/bladerunner/script/scene/rc01.cpp +++ b/engines/bladerunner/script/scene/rc01.cpp @@ -113,6 +113,15 @@ void SceneScriptRC01::InitializeScene() { } } else { if (!Game_Flag_Query(kFlagRC02toRC01) && !Game_Flag_Query(kFlagRC03toRC01)) { +#if BLADERUNNER_ORIGINAL_BUGS +#else + // set leary at his original position since otherwise he may overlap badly + // with scenery during the video loop of the spinner landing + // This only applies in Act 1, before the flag kFlagRC01PoliceDone is set + if (Actor_Query_Is_In_Current_Set(kActorOfficerLeary)) { + Actor_Set_At_XYZ(kActorOfficerLeary, -261.80f, 6.00f, 79.58f, 512); + } +#endif // BLADERUNNER_ORIGINAL_BUGS Scene_Loop_Start_Special(kSceneLoopModeLoseControl, kRC01LoopInshotWithCrowd, false); } Scene_Loop_Set_Default(kRC01LoopWithCrowd); |