aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThanasis Antoniou2019-05-08 23:56:38 +0300
committerThanasis Antoniou2019-05-08 23:56:38 +0300
commiteb5aafa90ce8ab8c2ed4a78ca5073b3b16716a5c (patch)
treee923c72f999a2be9f879c431b69e116f0f8072db
parentdb0020c55fa0078e1ff01156454f224df02dba6c (diff)
downloadscummvm-rg350-eb5aafa90ce8ab8c2ed4a78ca5073b3b16716a5c.tar.gz
scummvm-rg350-eb5aafa90ce8ab8c2ed4a78ca5073b3b16716a5c.tar.bz2
scummvm-rg350-eb5aafa90ce8ab8c2ed4a78ca5073b3b16716a5c.zip
BLADERUNNER: Fix scorpion cage blink in and out
Original bug occurs in transitions from AR01 to AR02
-rw-r--r--engines/bladerunner/game_constants.h2
-rw-r--r--engines/bladerunner/script/scene/ar01.cpp20
-rw-r--r--engines/bladerunner/script/scene/ar02.cpp19
3 files changed, 40 insertions, 1 deletions
diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index 59185a52a3..7140243053 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -552,7 +552,7 @@ enum Flags {
kFlagHC02toHC04 = 110,
kFlagPS07KleinTalkClues = 111,
// 112 is never used
- // 113 is never used
+ kFlagScorpionsInAR02 = 113, // // Re-purposed. Original: 113 is never used
kFlagRC03toRC01 = 114,
kFlagRC01toRC03 = 115,
kFlagRC03toAR02 = 116,
diff --git a/engines/bladerunner/script/scene/ar01.cpp b/engines/bladerunner/script/scene/ar01.cpp
index 465978376f..11b67945ce 100644
--- a/engines/bladerunner/script/scene/ar01.cpp
+++ b/engines/bladerunner/script/scene/ar01.cpp
@@ -119,6 +119,26 @@ void SceneScriptAR01::InitializeScene() {
void SceneScriptAR01::SceneLoaded() {
Obstacle_Object("DF_BOOTH", true);
Unobstacle_Object("SPINNER BODY", true);
+
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ if (Global_Variable_Query(kVariableChapter) < 4
+ && !Game_Flag_Query(kFlagAR02DektoraBoughtScorpions)
+ && !Game_Flag_Query(kFlagScorpionsInAR02)
+ ) {
+ // the kFlagScorpionsInAR02 flag helps keep track of the item in AR
+ // and make it not blink in and out of existence
+ // in the transition from AR01 to AR02
+ Game_Flag_Set(kFlagScorpionsInAR02);
+ Item_Add_To_World(kItemScorpions, kModelAnimationCageOfScorpions, kSetAR01_AR02, -442.84f, 36.77f, -1144.51f, 360, 36, 36, false, true, false, true);
+ } else if (Global_Variable_Query(kVariableChapter) >= 4
+ && !Game_Flag_Query(kFlagAR02DektoraBoughtScorpions)
+ && Game_Flag_Query(kFlagScorpionsInAR02)
+ ) {
+ Game_Flag_Reset(kFlagScorpionsInAR02);
+ Item_Remove_From_World(kItemScorpions);
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
}
bool SceneScriptAR01::MouseClick(int x, int y) {
diff --git a/engines/bladerunner/script/scene/ar02.cpp b/engines/bladerunner/script/scene/ar02.cpp
index f02e3e6b03..882a13aacf 100644
--- a/engines/bladerunner/script/scene/ar02.cpp
+++ b/engines/bladerunner/script/scene/ar02.cpp
@@ -79,6 +79,7 @@ void SceneScriptAR02::InitializeScene() {
void SceneScriptAR02::SceneLoaded() {
Obstacle_Object("DF_BOOTH", true);
+#if BLADERUNNER_ORIGINAL_BUGS
if (!Game_Flag_Query(kFlagAR02DektoraBoughtScorpions)) {
Item_Add_To_World(kItemScorpions, kModelAnimationCageOfScorpions, kSetAR01_AR02, -442.84f, 36.77f, -1144.51f, 360, 36, 36, false, true, false, true);
}
@@ -88,6 +89,24 @@ void SceneScriptAR02::SceneLoaded() {
Game_Flag_Set(kFlagNotUsed0);
Item_Remove_From_World(kItemScorpions);
}
+#else
+ if (Global_Variable_Query(kVariableChapter) < 4
+ && !Game_Flag_Query(kFlagAR02DektoraBoughtScorpions)
+ && !Game_Flag_Query(kFlagScorpionsInAR02)
+ ) {
+ // the kFlagScorpionsInAR02 flag helps keep track of the item in AR
+ // and make it not blink in and out of existence
+ // in the transition from AR01 to AR02
+ Game_Flag_Set(kFlagScorpionsInAR02);
+ Item_Add_To_World(kItemScorpions, kModelAnimationCageOfScorpions, kSetAR01_AR02, -442.84f, 36.77f, -1144.51f, 360, 36, 36, false, true, false, true);
+ } else if (Global_Variable_Query(kVariableChapter) >= 4
+ && !Game_Flag_Query(kFlagAR02DektoraBoughtScorpions)
+ && Game_Flag_Query(kFlagScorpionsInAR02)
+ ) {
+ Game_Flag_Reset(kFlagScorpionsInAR02);
+ Item_Remove_From_World(kItemScorpions);
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
}
bool SceneScriptAR02::MouseClick(int x, int y) {