diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/bladerunner/debugger.cpp | 7 | ||||
-rw-r--r-- | engines/bladerunner/script/ai/fish_dealer.cpp | 27 | ||||
-rw-r--r-- | engines/bladerunner/script/ai/general_doll.cpp | 2 | ||||
-rw-r--r-- | engines/bladerunner/script/ai/howie_lee.cpp | 7 | ||||
-rw-r--r-- | engines/bladerunner/script/ai/officer_grayford.cpp | 2 | ||||
-rw-r--r-- | engines/bladerunner/script/scene/ar01.cpp | 4 | ||||
-rw-r--r-- | engines/bladerunner/script/scene/ar02.cpp | 2 | ||||
-rw-r--r-- | engines/bladerunner/script/scene/ct01.cpp | 56 |
8 files changed, 87 insertions, 20 deletions
diff --git a/engines/bladerunner/debugger.cpp b/engines/bladerunner/debugger.cpp index 5dc59b3d05..5a3aa245c8 100644 --- a/engines/bladerunner/debugger.cpp +++ b/engines/bladerunner/debugger.cpp @@ -840,7 +840,7 @@ bool Debugger::cmdOverlay(int argc, const char **argv) { } if (_vm->_chapters->hasOpenResources()) { - chapterIdOverlaysAvailableInt = _vm->_chapters->currentResourceId(); + chapterIdOverlaysAvailableInt = MIN(_vm->_chapters->currentResourceId(), 3); } if (chapterIdOverlaysAvailableInt == -1) { debugPrintf("No available open resources to load VQAs from.\n Giving up.\n"); @@ -891,11 +891,10 @@ bool Debugger::cmdOverlay(int argc, const char **argv) { const Common::String origSceneName = _vm->_gameInfo->getSceneName(_vm->_scene->_sceneId); Common::String origVqaName; - int currentResourceId = _vm->_chapters->currentResourceId(); - if (currentResourceId == 1) { + if (chapterIdOverlaysAvailableInt == 1) { origVqaName = Common::String::format("%s.VQA", origSceneName.c_str()); } else { - origVqaName = Common::String::format("%s_%d.VQA", origSceneName.c_str(), MIN(currentResourceId, 3)); + origVqaName = Common::String::format("%s_%d.VQA", origSceneName.c_str(), chapterIdOverlaysAvailableInt); } if (_vm->_scene->_vqaPlayer != nullptr) { diff --git a/engines/bladerunner/script/ai/fish_dealer.cpp b/engines/bladerunner/script/ai/fish_dealer.cpp index 5297ae43dd..d7f517c984 100644 --- a/engines/bladerunner/script/ai/fish_dealer.cpp +++ b/engines/bladerunner/script/ai/fish_dealer.cpp @@ -45,16 +45,33 @@ bool AIScriptFishDealer::Update() { Actor_Set_Goal_Number(kActorFishDealer, 400); return true; - } else if (Player_Query_Current_Scene() - || Actor_Query_Goal_Number(kActorFishDealer) == 2 - || Actor_Query_Goal_Number(kActorFishDealer) == 1 - || Actor_Query_Goal_Number(kActorFishDealer) == 400) { + } +#if BLADERUNNER_ORIGINAL_BUGS + else if (Player_Query_Current_Scene() + || Actor_Query_Goal_Number(kActorFishDealer) == 2 + || Actor_Query_Goal_Number(kActorFishDealer) == 1 + || Actor_Query_Goal_Number(kActorFishDealer) == 400) { return false; } else { Actor_Set_Goal_Number(kActorFishDealer, 1); return true; } +#else + // prevent Fish Dealer from blinking out while McCoy is flying out from Animoid + else if (Actor_Query_Goal_Number(kActorFishDealer) == 400 + || ( Player_Query_Current_Scene() != kSceneAR01 )) { + return false; + } + else { + if (Player_Query_Current_Scene() == kSceneAR01 + && Actor_Query_Goal_Number(kActorFishDealer) == 3) { + Actor_Set_Goal_Number(kActorFishDealer, 1); + } + return true; + } +#endif // BLADERUNNER_ORIGINAL_BUGS + } void AIScriptFishDealer::TimerExpired(int timer) { @@ -65,7 +82,7 @@ void AIScriptFishDealer::CompletedMovementTrack() { if (Actor_Query_Goal_Number(kActorFishDealer) != 1) return; // false - Actor_Set_Goal_Number(kActorFishDealer, 99); + Actor_Set_Goal_Number(kActorFishDealer, 99); // A bug? Actor_Set_Goal_Number(kActorFishDealer, 1); //return true; diff --git a/engines/bladerunner/script/ai/general_doll.cpp b/engines/bladerunner/script/ai/general_doll.cpp index 7a62320153..ee531d0d44 100644 --- a/engines/bladerunner/script/ai/general_doll.cpp +++ b/engines/bladerunner/script/ai/general_doll.cpp @@ -73,7 +73,7 @@ void AIScriptGeneralDoll::TimerExpired(int timer) { void AIScriptGeneralDoll::CompletedMovementTrack() { switch (Actor_Query_Goal_Number(kActorGeneralDoll)) { case 101: - if (Player_Query_Current_Scene() == 6) { + if (Player_Query_Current_Scene() == kSceneBB05) { switch (Random_Query(0, 5)) { case 0: Ambient_Sounds_Play_Speech_Sound(kActorGeneralDoll, 0, 80, 0, 0, 0); diff --git a/engines/bladerunner/script/ai/howie_lee.cpp b/engines/bladerunner/script/ai/howie_lee.cpp index 93f08672db..3675fc1b60 100644 --- a/engines/bladerunner/script/ai/howie_lee.cpp +++ b/engines/bladerunner/script/ai/howie_lee.cpp @@ -66,6 +66,13 @@ bool AIScriptHowieLee::Update() { if ( Actor_Query_Goal_Number(kActorHowieLee) == 1 && Game_Flag_Query(kFlagCT01BoughtHowieLeeFood) && !Game_Flag_Query(kFlagMcCoyInChinaTown) +#if BLADERUNNER_ORIGINAL_BUGS +#else + // Prevents possibility of Howie Lee from blinking in/out of existence + // when the flyout loop is playing + // and when McCoy enters and exits the Spinner with the spinner doors animation restored + && Player_Query_Current_Scene() != kSceneCT01 +#endif // BLADERUNNER_ORIGINAL_BUGS ) { Actor_Set_Goal_Number(kActorHowieLee, 4); return true; diff --git a/engines/bladerunner/script/ai/officer_grayford.cpp b/engines/bladerunner/script/ai/officer_grayford.cpp index 0e82ded8c0..66f05e56ba 100644 --- a/engines/bladerunner/script/ai/officer_grayford.cpp +++ b/engines/bladerunner/script/ai/officer_grayford.cpp @@ -542,7 +542,7 @@ bool AIScriptOfficerGrayford::GoalChanged(int currentGoalNumber, int newGoalNumb Actor_Change_Animation_Mode(kActorOfficerGrayford, 43); - if (Player_Query_Current_Scene() == 28) { + if (Player_Query_Current_Scene() == kSceneDR04) { Actor_Says(kActorOfficerGrayford, 170, kAnimationModeTalk); } return true; diff --git a/engines/bladerunner/script/scene/ar01.cpp b/engines/bladerunner/script/scene/ar01.cpp index f741a28e58..cce057a996 100644 --- a/engines/bladerunner/script/scene/ar01.cpp +++ b/engines/bladerunner/script/scene/ar01.cpp @@ -215,7 +215,11 @@ bool SceneScriptAR01::ClickedOnExit(int exitId) { Game_Flag_Set(kFlagAR01toAR02); Async_Actor_Walk_To_XYZ(kActorMcCoy, -222.0, 0.0, -690.0, 0, false); Set_Enter(kSetAR01_AR02, kSceneAR02); +#if BLADERUNNER_ORIGINAL_BUGS + // Causes the fish dealer to blink out of existence + // during the transition to AR02 Actor_Set_Goal_Number(kActorFishDealer, 3); +#endif // BLADERUNNER_ORIGINAL_BUGS } return true; } diff --git a/engines/bladerunner/script/scene/ar02.cpp b/engines/bladerunner/script/scene/ar02.cpp index 15bbe45b15..1a2eecb586 100644 --- a/engines/bladerunner/script/scene/ar02.cpp +++ b/engines/bladerunner/script/scene/ar02.cpp @@ -25,7 +25,7 @@ namespace BladeRunner { void SceneScriptAR02::InitializeScene() { - Music_Play(kMusicBatl226M, 22, 0, 2, -1, 1, 2); + Music_Play(kMusicArabLoop, 22, 0, 2, -1, 1, 2); if (Game_Flag_Query(kFlagRC03toAR02)) { Setup_Scene_Information(-560.0f, 0.0f, -799.0f, 333); } else { diff --git a/engines/bladerunner/script/scene/ct01.cpp b/engines/bladerunner/script/scene/ct01.cpp index 1c57ee2e47..80865ee448 100644 --- a/engines/bladerunner/script/scene/ct01.cpp +++ b/engines/bladerunner/script/scene/ct01.cpp @@ -25,13 +25,13 @@ namespace BladeRunner { enum kCT01Loops { - kCT01LoopInshotFromCT12WithSpinner = 0, - kCT01LoopInshot = 1, - kCT01LoopMain = 2, - kCT01LoopDoorAnim = 4, - kCT01LoopOutshot = 5, - kCT01LoopInshotFromCT12NoSpinner = 6, - kCT01LoopMainLoopNoSpinner = 7 + kCT01LoopInshotFromCT12WithSpinner = 0, // 0 - 14 + kCT01LoopInshot = 1, // 15 - 194 + kCT01LoopMain = 2, // 195 - 255 + kCT01LoopDoorAnim = 4, // 256 - 315 + kCT01LoopOutshot = 5, // 316 - 435 + kCT01LoopInshotFromCT12NoSpinner = 6, // 436 - 450 + kCT01LoopMainLoopNoSpinner = 7 // 451 - 511 }; enum kCT01Exits { @@ -63,6 +63,21 @@ void SceneScriptCT01::InitializeScene() { } } } else if (Game_Flag_Query(kFlagSpinnerAtCT01)) { +#if BLADERUNNER_RESTORED_CUT_CONTENT + // 0. This scene is not available in chapters 4 and 5 + // 1. Don't always show the scene; but show it the first time (when kFlagCT01Visited is clear) + // 2. Add open/close spinner door animation and sound + // 3. Keep walkers from messing about with the scene (popping up or overlapping with landing) until spinner has landed + // Note: kFlagSpinnerAtCT01 reset (original) is not handled the same was as in NR01 but it still works + if ( Global_Variable_Query(kVariableChapter) < 4 + && (!Game_Flag_Query(kFlagCT01Visited) || Random_Query(1, 5) == 1 ) + ){ + Scene_Loop_Start_Special(kSceneLoopModeLoseControl, kCT01LoopInshot, false); + // There's also another flag called kFlagUnpauseGenWalkers + // but the usage of that flag seems more obscure and dubious for this purpose + Game_Flag_Set(kFlagGenericWalkerWaiting); + } +#endif // BLADERUNNER_RESTORED_CUT_CONTENT Setup_Scene_Information(-530.0f, -6.5f, 241.0f, 506); Game_Flag_Set(kFlagArrivedFromSpinner1); } else { @@ -94,6 +109,7 @@ void SceneScriptCT01::InitializeScene() { Ambient_Sounds_Add_Sound(kSfxTHNDER2, 20, 40, 33, 50, -100, 100, -101, -101, 0, 0); Ambient_Sounds_Add_Sound(kSfxTHNDER3, 20, 40, 33, 50, -100, 100, -101, -101, 0, 0); Ambient_Sounds_Add_Sound(kSfxTHNDER4, 20, 40, 33, 50, -100, 100, -101, -101, 0, 0); + if (Game_Flag_Query(kFlagSpinnerAtCT01)) { Scene_Loop_Set_Default(kCT01LoopMain); } else { @@ -272,7 +288,13 @@ bool SceneScriptCT01::ClickedOnExit(int exitId) { Game_Flag_Reset(kFlagMcCoyInTyrellBuilding); Game_Flag_Reset(kFlagMcCoyInDNARow); Game_Flag_Reset(kFlagMcCoyInBradburyBuilding); +#if BLADERUNNER_RESTORED_CUT_CONTENT + // Restored spinner door opens/ closes, so we disable this for now + // TODO This might be annoying since it slows down the pacing... + int spinnerDest = Spinner_Interface_Choose_Dest(kCT01LoopDoorAnim, false); +#else int spinnerDest = Spinner_Interface_Choose_Dest(-1, false); +#endif // BLADERUNNER_RESTORED_CUT_CONTENT switch (spinnerDest) { case kSpinnerDestinationPoliceStation: @@ -380,6 +402,16 @@ void SceneScriptCT01::SceneFrameAdvanced(int frame) { Ambient_Sounds_Play_Sound(kSfxCARDOWN3, 40, 99, 0, 0); } +#if BLADERUNNER_RESTORED_CUT_CONTENT + if (frame == 136 || frame == 258) { + Sound_Play(kSfxSPINOPN4, 100, 80, 80, 50); + } + + if (frame == 183 || frame == 303) { + Sound_Play(kSfxSPINCLS1, 100, 80, 80, 50); + } +#endif // BLADERUNNER_RESTORED_CUT_CONTENT + if (frame == 316) { Ambient_Sounds_Play_Sound(kSfxCARUP3B, 50, -50, 100, 99); } @@ -415,11 +447,19 @@ void SceneScriptCT01::PlayerWalkedIn() { Game_Flag_Reset(kFlagCT02toCT01walk); } else { if (!Game_Flag_Query(kFlagArrivedFromSpinner1)) { - Game_Flag_Reset(kFlagArrivedFromSpinner1); + Game_Flag_Reset(kFlagArrivedFromSpinner1); // a bug? why reset a flag that is already cleared? return; } Loop_Actor_Walk_To_XYZ(kActorMcCoy, -330.0f, -6.5f, 221.0f, 0, false, false, 0); +#if BLADERUNNER_RESTORED_CUT_CONTENT + if( Game_Flag_Query(kFlagArrivedFromSpinner1) + && Game_Flag_Query(kFlagGenericWalkerWaiting) + ) { + Game_Flag_Reset(kFlagGenericWalkerWaiting); + } +#endif // BLADERUNNER_RESTORED_CUT_CONTENT Loop_Actor_Walk_To_XYZ(kActorMcCoy, -314.0f, -6.5f, 326.0f, 0, false, false, 0); + if (!Game_Flag_Query(kFlagCT01Visited)) { Game_Flag_Set(kFlagCT01Visited); if (!Game_Flag_Query(kFlagDirectorsCut)) { |