aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/bladerunner/debugger.cpp7
-rw-r--r--engines/bladerunner/script/ai/fish_dealer.cpp27
-rw-r--r--engines/bladerunner/script/ai/general_doll.cpp2
-rw-r--r--engines/bladerunner/script/ai/howie_lee.cpp7
-rw-r--r--engines/bladerunner/script/ai/officer_grayford.cpp2
-rw-r--r--engines/bladerunner/script/scene/ar01.cpp4
-rw-r--r--engines/bladerunner/script/scene/ar02.cpp2
-rw-r--r--engines/bladerunner/script/scene/ct01.cpp56
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)) {