[Scummvm-git-logs] scummvm master -> 9bfca34497786bcaa05d01f13e8f97f500a3ef45
antoniou79
antoniou at cti.gr
Sat May 25 02:51:29 CEST 2019
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
debccbb8f3 BLADERUNNER: UG18 restored trains and Guzza overlays
cde63356f1 BLADERUNNER: Fix path glitches in UG18 and UG13
9bfca34497 BLADERUNNER: Fixes for UG18 Guzza scene cases
Commit: debccbb8f3edadeef4607a43fca09d06a2e959d0
https://github.com/scummvm/scummvm/commit/debccbb8f3edadeef4607a43fca09d06a2e959d0
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-05-25T03:39:57+03:00
Commit Message:
BLADERUNNER: UG18 restored trains and Guzza overlays
Changed paths:
engines/bladerunner/game_constants.h
engines/bladerunner/script/scene/ug18.cpp
diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index 490c04d..a046c06 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -1175,7 +1175,10 @@ enum Variables {
kVariableChapter = 1,
kVariableChinyen = 2,
kVariableGameVersion = 3, // re-purposed, original: not used, so it would have value of 0 in the classic version
- // variables 4 - 8 are not used
+ kVariableUG18CountUpForNextTrainAction = 4, // re-purposed, original: not used
+ kVariableUG18StateOfTrains = 5, // re-purposed, original: not used
+ kVariableUG18StateOfGuzzaCorpse = 6, // re-purposed, original: not used
+ // variables 7 - 8 are not used
kVariablePoliceMazeScore = 9,
kVariablePoliceMazePS10TargetCounter = 10,
kVariablePoliceMazePS11TargetCounter = 11,
diff --git a/engines/bladerunner/script/scene/ug18.cpp b/engines/bladerunner/script/scene/ug18.cpp
index 1ca7d70..eda2099 100644
--- a/engines/bladerunner/script/scene/ug18.cpp
+++ b/engines/bladerunner/script/scene/ug18.cpp
@@ -24,11 +24,46 @@
namespace BladeRunner {
+enum kUG18Loops {
+ kUG18LoopTrainsArriving = 0, // 0 - 59
+ kUG18LoopMainLoop = 1, // 60 - 120 (4 seconds in 15 fps)
+ kUG18LoopTrainsLeaving = 3, // 121 - 180
+ kUG18LoopMainLoopNoTrains = 4 // 181 - 241 (4 seconds in 15 fps)
+};
+
+static const int kUG18TrainsSecondsOfLoopNoTrains = 4;
+static const int kUG18TrainsSecondsOfLoopWithTrains = 4;
+static const int kUG18TrainsCountUpMaxMarginWalkedIn = 12;
+static const int kUG18TrainsCountUpMinMarginWalkedIn = 4;
+static const int kUG18TrainsCountUpTargetRegular = 600;
+static const int kUG18TrainsCountUpMinMarginRegular = 65;
+
+// values for re-purposed global variable kVariableUG18StateOfTrains
+enum kUG18TrainsState {
+ kUG18NoTrains = 0,
+ kUG18TrainsUnloading = 1
+};
+
+// values for re-purposed global variable kVariableUG18StateOfGuzzaCorpse
+enum kUG18StateOfGuzzaCorpse {
+ kUG18GuzzaNoCorpse = 0,
+ kUG18GuzzaCorpseFloatsDown = 1,
+ kUG18GuzzaCorpseStuckInPipes = 2,
+ kUG18GuzzaCorpseDissolves = 3
+};
+
void SceneScriptUG18::InitializeScene() {
Setup_Scene_Information(-684.71f, 0.0f, 171.59f, 0);
Game_Flag_Reset(kFlagUG13toUG18);
Scene_Exit_Add_2D_Exit(0, 0, 158, 100, 340, 3);
+ if (_vm->_cutContent) {
+ if (!Game_Flag_Query(kFlagUG18GuzzaScene)) {
+ Overlay_Play("UG18OVER", 0, true, false, 0); // Railing in center platform is intact
+ } else {
+ Overlay_Play("UG18OVER", 2, true, false, 0); // Railing has broken outwards (state after Guzza fell)
+ }
+ }
Ambient_Sounds_Add_Looping_Sound(kSfxCTRUNOFF, 71, 0, 1);
Ambient_Sounds_Add_Looping_Sound(kSfxBOILPOT2, 45, 0, 1);
@@ -57,7 +92,23 @@ void SceneScriptUG18::InitializeScene() {
Ambient_Sounds_Add_Sound(kSfxZUBWLK3, 5, 50, 27, 37, -100, 100, -101, -101, 0, 0);
Ambient_Sounds_Add_Sound(kSfxZUBWLK4, 5, 50, 27, 37, -100, 100, -101, -101, 0, 0);
- Scene_Loop_Set_Default(4);
+ if (_vm->_cutContent) {
+ if (Global_Variable_Query(kVariableUG18StateOfTrains) == kUG18NoTrains) {
+ Scene_Loop_Set_Default(kUG18LoopMainLoopNoTrains);
+ Global_Variable_Set(kVariableUG18CountUpForNextTrainAction, Random_Query(kUG18TrainsCountUpTargetRegular - kUG18TrainsCountUpMaxMarginWalkedIn, kUG18TrainsCountUpTargetRegular - kUG18TrainsCountUpMinMarginWalkedIn));
+ } else {
+ if (Random_Query(0, 1)) {
+ Scene_Loop_Set_Default(kUG18LoopMainLoop);
+ // don't set the kVariableUG18CountUpForNextTrainAction here, we only want this to play once before transitioning to trains leaving
+ } else {
+ Global_Variable_Set(kVariableUG18StateOfTrains, kUG18NoTrains);
+ Scene_Loop_Set_Default(kUG18LoopMainLoopNoTrains);
+ Global_Variable_Set(kVariableUG18CountUpForNextTrainAction, Random_Query(0, kUG18TrainsCountUpTargetRegular - kUG18TrainsCountUpMinMarginRegular));
+ }
+ }
+ } else {
+ Scene_Loop_Set_Default(kUG18LoopMainLoopNoTrains);
+ }
if ( Game_Flag_Query(kFlagCallWithGuzza)
&& !Game_Flag_Query(kFlagUG18GuzzaScene)
@@ -138,6 +189,69 @@ bool SceneScriptUG18::ClickedOn2DRegion(int region) {
}
void SceneScriptUG18::SceneFrameAdvanced(int frame) {
+// kUG18LoopTrainsArriving = 0, // 0 - 59
+// kUG18LoopMainLoop = 1, // 60 - 120
+// kUG18LoopTrainsLeaving = 3, // 121 - 180
+// kUG18LoopMainLoopNoTrains = 4 // 181 - 241
+ if (_vm->_cutContent) {
+ if (frame == 0) {
+ Ambient_Sounds_Play_Sound(Random_Query(kSfxBBGRN1, kSfxBBGRN3), 35, 0, 30, 50);
+ Ambient_Sounds_Play_Sound(kSfxLIGHTON, 25, 0, 30, 50);
+ }
+
+ if (frame == 2) {
+ Ambient_Sounds_Play_Sound(kSfxSUBWAY1, 24, 0, 30, 50);
+ }
+
+ if (frame == 60) {
+ Ambient_Sounds_Play_Sound(kSfxPIPER1, 25, 30, 30, 0);
+ if (Random_Query(1, 3)) {
+ Ambient_Sounds_Play_Sound(kSfxSQUEAK2, 32, 30, 30, 50);
+ } else {
+ Ambient_Sounds_Play_Sound(kSfxSQUEAK4, 34, 30, 30, 50);
+ }
+ }
+
+ if (frame == 68) {
+ Ambient_Sounds_Play_Sound(kSfxSTEAM3, 66, 30, 30, 50);
+ }
+
+ if (frame == 70) {
+ Ambient_Sounds_Play_Sound(kSfxSTEAM6A, 66, 30, 30, 50);
+ }
+
+ if (frame == 115) {
+ Ambient_Sounds_Play_Sound(kSfxMTLDOOR2, 40, 30, 30, 50);
+ }
+
+ if (frame == 128) {
+ Ambient_Sounds_Play_Sound(kSfxSUBWAY1, 24, 30, 0, 50);
+ }
+
+ if (frame == 119 // end of main loop unloading // works better the using the 120 value
+ || frame == 240 // end of main loop no trains
+ ) {
+ if (Global_Variable_Query(kVariableUG18CountUpForNextTrainAction) < kUG18TrainsCountUpTargetRegular) {
+ if (Global_Variable_Query(kVariableUG18StateOfTrains) == kUG18NoTrains) {
+ Global_Variable_Increment(kVariableUG18CountUpForNextTrainAction, kUG18TrainsSecondsOfLoopNoTrains); // add seconds
+ } else {
+ Global_Variable_Increment(kVariableUG18CountUpForNextTrainAction, kUG18TrainsSecondsOfLoopWithTrains); // add seconds
+ }
+ } else {
+ if (Global_Variable_Query(kVariableUG18StateOfTrains) == kUG18NoTrains) {
+ Global_Variable_Set(kVariableUG18StateOfTrains, kUG18TrainsUnloading);
+ Scene_Loop_Set_Default(kUG18LoopMainLoop);
+ Scene_Loop_Start_Special(kSceneLoopModeOnce, kUG18LoopTrainsArriving, false);
+ // don't set the kVariableUG18CountUpForNextTrainAction here, we only want this to play once before transitioning to trains leaving
+ } else {
+ Global_Variable_Set(kVariableUG18StateOfTrains, kUG18NoTrains);
+ Scene_Loop_Set_Default(kUG18LoopMainLoopNoTrains);
+ Scene_Loop_Start_Special(kSceneLoopModeOnce, kUG18LoopTrainsLeaving, true);
+ Global_Variable_Set(kVariableUG18CountUpForNextTrainAction, Random_Query(0, kUG18TrainsCountUpTargetRegular - kUG18TrainsCountUpMinMarginRegular));
+ }
+ }
+ }
+ }
}
void SceneScriptUG18::ActorChangedGoal(int actorId, int newGoal, int oldGoal, bool currentSet) {
@@ -210,6 +324,30 @@ void SceneScriptUG18::ActorChangedGoal(int actorId, int newGoal, int oldGoal, bo
}
void SceneScriptUG18::PlayerWalkedIn() {
+ if (_vm->_cutContent) {
+ if (Game_Flag_Query(kFlagUG18GuzzaScene)) {
+ switch (Global_Variable_Query(kVariableUG18StateOfGuzzaCorpse)) {
+ case kUG18GuzzaCorpseFloatsDown:
+ Global_Variable_Set(kVariableUG18StateOfGuzzaCorpse, kUG18GuzzaCorpseStuckInPipes);
+ // same logic as using the BB06OVER for doll explosion case in BB06
+ Overlay_Play("UG18OVR2", 0, true, true, 0);
+ Overlay_Play("UG18OVR2", 1, true, false, 0);
+ break;
+ case kUG18GuzzaCorpseStuckInPipes:
+ Global_Variable_Set(kVariableUG18StateOfGuzzaCorpse, kUG18GuzzaCorpseDissolves);
+ Overlay_Play("UG18OVR2", 1, true, true, 0);
+ Overlay_Play("UG18OVR2", 2, false, false, 0);
+ break;
+ case kUG18GuzzaCorpseDissolves:
+ Global_Variable_Set(kVariableUG18StateOfGuzzaCorpse, kUG18GuzzaNoCorpse);
+ Overlay_Remove("UG18OVR2");
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
Loop_Actor_Walk_To_XYZ(kActorMcCoy, -488.71f, 0.0f, 123.59f, 0, false, false, false);
if ( Game_Flag_Query(kFlagCallWithGuzza)
@@ -224,6 +362,9 @@ void SceneScriptUG18::PlayerWalkedIn() {
}
void SceneScriptUG18::PlayerWalkedOut() {
+ if (_vm->_cutContent) {
+ Overlay_Remove("UG18OVER");
+ }
}
void SceneScriptUG18::DialogueQueueFlushed(int a1) {
@@ -254,7 +395,14 @@ void SceneScriptUG18::DialogueQueueFlushed(int a1) {
Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAttack);
Sound_Play(kSfxLGCAL3, 100, 0, 0, 50);
Actor_Change_Animation_Mode(kActorGuzza, 61);
- Overlay_Play("UG18over", 1, false, true, 0);
+ if (_vm->_cutContent) {
+ // same logic as using the BB06OVER for doll explosion case in BB06
+ Overlay_Play("UG18OVER", 1, true, true, 0);
+ Overlay_Play("UG18OVER", 2, true, false, 0);
+ Global_Variable_Set(kVariableUG18StateOfGuzzaCorpse, kUG18GuzzaCorpseFloatsDown);
+ } else {
+ Overlay_Play("UG18OVER", 1, false, true, 0);
+ }
Actor_Set_Goal_Number(kActorGuzza, kGoalGuzzaUG18FallDown);
Player_Gains_Control();
ADQ_Add_Pause(2000);
Commit: cde63356f11d6b7a7bc744e0ee98e139ad06a4ad
https://github.com/scummvm/scummvm/commit/cde63356f11d6b7a7bc744e0ee98e139ad06a4ad
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-05-25T03:39:57+03:00
Commit Message:
BLADERUNNER: Fix path glitches in UG18 and UG13
Changed paths:
engines/bladerunner/script/scene/ug13.cpp
engines/bladerunner/script/scene/ug18.cpp
engines/bladerunner/set.cpp
diff --git a/engines/bladerunner/script/scene/ug13.cpp b/engines/bladerunner/script/scene/ug13.cpp
index 1ec25ea..ea4e4f5 100644
--- a/engines/bladerunner/script/scene/ug13.cpp
+++ b/engines/bladerunner/script/scene/ug13.cpp
@@ -304,7 +304,11 @@ void SceneScriptUG13::ActorChangedGoal(int actorId, int newGoal, int oldGoal, bo
void SceneScriptUG13::PlayerWalkedIn() {
if (Game_Flag_Query(kFlagUG18toUG13)) {
+#if BLADERUNNER_ORIGINAL_BUGS
Loop_Actor_Walk_To_XYZ(kActorMcCoy, -389.0f, 143.0f, -844.0f, 0, false, false, false);
+#else
+ Actor_Set_At_XYZ(kActorMcCoy, -389.0f, 143.0f, -844.0f, 325);
+#endif // BLADERUNNER_ORIGINAL_BUGS
Actor_Face_Heading(kActorMcCoy, 325, false);
Footstep_Sound_Override_On(3);
Loop_Actor_Travel_Stairs(kActorMcCoy, 11, false, kAnimationModeIdle);
diff --git a/engines/bladerunner/script/scene/ug18.cpp b/engines/bladerunner/script/scene/ug18.cpp
index eda2099..1c14c06 100644
--- a/engines/bladerunner/script/scene/ug18.cpp
+++ b/engines/bladerunner/script/scene/ug18.cpp
@@ -122,9 +122,11 @@ void SceneScriptUG18::InitializeScene() {
void SceneScriptUG18::SceneLoaded() {
Obstacle_Object("MACHINE_01", true);
+#if BLADERUNNER_ORIGINAL_BUGS
Unobstacle_Object("PLATFM_RAIL 01", true);
Unobstacle_Object("PLATFM_RAIL 02", true);
Unobstacle_Object("OBSTACLE1", true);
+#endif // BLADERUNNER_ORIGINAL_BUGS
Clickable_Object("MACHINE_01");
Unclickable_Object("MACHINE_01");
diff --git a/engines/bladerunner/set.cpp b/engines/bladerunner/set.cpp
index 1b21508..92798d6 100644
--- a/engines/bladerunner/set.cpp
+++ b/engines/bladerunner/set.cpp
@@ -477,6 +477,29 @@ void Set::overrideSceneObjectInfo(int objectId) const {
_objects[objectId].bbox.setXYZ(-168.99f, 151.38f, -139.10f, -105.95f, 239.59f, 362.70f);
}
break;
+
+ case kSceneUG13:
+ // fix obstacles map / stairs glitch
+ if (objectId == 31 && _objects[objectId].name == "BOX FOR ELEVATR WAL") {
+ _objects[objectId].bbox.setXYZ(-337.79f, 35.78f, -918.73f, -282.79f, 364.36f, -804.54f);
+ } else if (objectId == 32 && _objects[objectId].name == "BOX FOR ELEVATR WAL") {
+ _objects[objectId].bbox.setXYZ(-455.47f, 35.78f, -1071.24f, -335.98f, 364.36f, -824.54f);
+ }
+ break;
+
+ case kSceneUG18:
+ // fix obstacles map
+ if (objectId == 1 && _objects[objectId].name == "PIT_RAIL 03") {
+ _objects[objectId].bbox.setXYZ(-615.83f, 0.0f, -1237.04f, -602.30f, 37.66f, -13.48f);
+ } else if (objectId == 4 && _objects[objectId].name == "WALL_LEFT") {
+ _objects[objectId].bbox.setXYZ(-1310.70f, 0.0f, -2105.59f, -910.95f, 840.0f, -111.55f);
+ } else if (objectId == 5 && _objects[objectId].name == "OBSTACLE1") {
+ _objects[objectId].bbox.setXYZ(91.00f, -1.87f, 375.75f, 476.37f, 61.18f, 955.24f);
+ } else if (objectId == 6 && _objects[objectId].name == "OBSTACLE02") {
+ _objects[objectId].bbox.setXYZ(-1191.22f, -1.87f, -2105.59f, -606.15f, 61.18f, -937.04f);
+ }
+ break;
+
default:
return;
}
Commit: 9bfca34497786bcaa05d01f13e8f97f500a3ef45
https://github.com/scummvm/scummvm/commit/9bfca34497786bcaa05d01f13e8f97f500a3ef45
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-05-25T03:39:57+03:00
Commit Message:
BLADERUNNER: Fixes for UG18 Guzza scene cases
Changed paths:
engines/bladerunner/game_constants.h
engines/bladerunner/savefile.cpp
engines/bladerunner/script/ai/sadik.cpp
engines/bladerunner/script/scene/kp06.cpp
engines/bladerunner/script/scene/kp07.cpp
engines/bladerunner/script/scene/ug18.cpp
diff --git a/engines/bladerunner/game_constants.h b/engines/bladerunner/game_constants.h
index a046c06..6e8e1c7 100644
--- a/engines/bladerunner/game_constants.h
+++ b/engines/bladerunner/game_constants.h
@@ -2302,7 +2302,7 @@ enum GoalSadik {
kGoalSadikUG18PrepareShootMcCoy = 307,
kGoalSadikUG18ShootMcCoy = 308,
kGoalSadikUG18Leave = 310,
- kGoalSadikUG18NeedsReactorCoreFromMcCoy = 416,
+ kGoalSadikKP06NeedsReactorCoreFromMcCoy = 416,
kGoalSadikGone = 599
};
diff --git a/engines/bladerunner/savefile.cpp b/engines/bladerunner/savefile.cpp
index 86e2fe7..6cc4bdd 100644
--- a/engines/bladerunner/savefile.cpp
+++ b/engines/bladerunner/savefile.cpp
@@ -124,7 +124,7 @@ bool SaveFileManager::readHeader(Common::SeekableReadStream &in, SaveFileHeader
int32 pos = s.pos();
int32 sizeOfSaveFile = s.size();
if (sizeOfSaveFile > 0 && sizeOfSaveFile < (int32) (pos + 4 + kThumbnailSize)) {
- warning("Unexpected end of save file %s (%02d:%02d %02d/%02d/%04d) reached. Size of file was: %d bytes",
+ warning("Unexpected end of save file \"%s\" (%02d:%02d %02d/%02d/%04d) reached. Size of file was: %d bytes",
header._name.c_str(),
header._hour,
header._minute,
diff --git a/engines/bladerunner/script/ai/sadik.cpp b/engines/bladerunner/script/ai/sadik.cpp
index 0523e9f..a6de93a 100644
--- a/engines/bladerunner/script/ai/sadik.cpp
+++ b/engines/bladerunner/script/ai/sadik.cpp
@@ -161,7 +161,7 @@ void AIScriptSadik::OtherAgentEnteredCombatMode(int otherActorId, int combatMode
void AIScriptSadik::ShotAtAndMissed() {
if (Actor_Query_Goal_Number(kActorSadik) == 414
- || Actor_Query_Goal_Number(kActorSadik) == kGoalSadikUG18NeedsReactorCoreFromMcCoy
+ || Actor_Query_Goal_Number(kActorSadik) == kGoalSadikKP06NeedsReactorCoreFromMcCoy
) {
Game_Flag_Set(kFlagMcCoyAttackedReplicants);
if (Actor_Query_Which_Set_In(kActorSadik) != kSetKP07) {
@@ -215,7 +215,7 @@ bool AIScriptSadik::ShotAtAndHit() {
}
if (Actor_Query_Goal_Number(kActorSadik) == 414
- || Actor_Query_Goal_Number(kActorSadik) == kGoalSadikUG18NeedsReactorCoreFromMcCoy
+ || Actor_Query_Goal_Number(kActorSadik) == kGoalSadikKP06NeedsReactorCoreFromMcCoy
) {
Game_Flag_Set(kFlagMcCoyAttackedReplicants);
if (Actor_Query_Which_Set_In(kActorSadik) != kSetKP07) {
@@ -337,6 +337,7 @@ bool AIScriptSadik::GoalChanged(int currentGoalNumber, int newGoalNumber) {
return true;
case kGoalSadikUG18Decide:
+ // This is called first and then the scene script SceneScriptUG18::ActorChangedGoal
Actor_Set_Targetable(kActorSadik, false);
return true;
@@ -363,11 +364,20 @@ bool AIScriptSadik::GoalChanged(int currentGoalNumber, int newGoalNumber) {
case kGoalSadikUG18ShootMcCoy:
if (Player_Query_Current_Scene() == kSceneUG18) {
+#if BLADERUNNER_ORIGINAL_BUGS
Actor_Force_Stop_Walking(kActorMcCoy);
Actor_Change_Animation_Mode(kActorSadik, kAnimationModeCombatAttack);
Sound_Play(kSfxLGCAL1, 100, 0, 0, 50);
Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeDie);
Actor_Retired_Here(kActorMcCoy, 6, 6, true, -1);
+#else
+ Actor_Change_Animation_Mode(kActorSadik, kAnimationModeCombatAttack);
+ Sound_Play(kSfxLGCAL1, 100, 0, 0, 50);
+ Player_Loses_Control();
+ Actor_Force_Stop_Walking(kActorMcCoy);
+ Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeDie);
+ Actor_Retired_Here(kActorMcCoy, 6, 6, true, kActorSadik);
+#endif // BLADERUNNER_ORIGINAL_BUGS
}
return true;
@@ -443,10 +453,10 @@ bool AIScriptSadik::GoalChanged(int currentGoalNumber, int newGoalNumber) {
Actor_Says(kActorSadik, 240, kAnimationModeTalk);
Actor_Says(kActorSadik, 250, kAnimationModeTalk);
Actor_Says(kActorSadik, 260, kAnimationModeTalk);
- Actor_Set_Goal_Number(kActorSadik, kGoalSadikUG18NeedsReactorCoreFromMcCoy);
+ Actor_Set_Goal_Number(kActorSadik, kGoalSadikKP06NeedsReactorCoreFromMcCoy);
return true;
- case kGoalSadikUG18NeedsReactorCoreFromMcCoy:
+ case kGoalSadikKP06NeedsReactorCoreFromMcCoy:
Loop_Actor_Walk_To_XYZ(kActorSadik, -961.0f, 0.0f, -778.0f, 0, false, false, false);
Actor_Face_Heading(kActorSadik, 150, false);
return true;
@@ -459,7 +469,7 @@ bool AIScriptSadik::GoalChanged(int currentGoalNumber, int newGoalNumber) {
Actor_Says(kActorSadik, 330, kAnimationModeTalk);
Actor_Says(kActorMcCoy, 2335, kAnimationModeTalk);
Actor_Says(kActorSadik, 340, kAnimationModeTalk);
- Actor_Set_Goal_Number(kActorSadik, kGoalSadikUG18NeedsReactorCoreFromMcCoy);
+ Actor_Set_Goal_Number(kActorSadik, kGoalSadikKP06NeedsReactorCoreFromMcCoy);
return true;
case 418:
diff --git a/engines/bladerunner/script/scene/kp06.cpp b/engines/bladerunner/script/scene/kp06.cpp
index 0ec9d88..d8e7299 100644
--- a/engines/bladerunner/script/scene/kp06.cpp
+++ b/engines/bladerunner/script/scene/kp06.cpp
@@ -113,7 +113,7 @@ bool SceneScriptKP06::ClickedOnExit(int exitId) {
if (exitId == 1) {
if (Actor_Clue_Query(kActorSadik, kCluePowerSource)
- || Actor_Query_Goal_Number(kActorSadik) != kGoalSadikUG18NeedsReactorCoreFromMcCoy
+ || Actor_Query_Goal_Number(kActorSadik) != kGoalSadikKP06NeedsReactorCoreFromMcCoy
) {
if (!Loop_Actor_Walk_To_XYZ(kActorMcCoy, -731.0f, 8.26f, -657.0f, 0, true, false, false)) {
if (Game_Flag_Query(kFlagMcCoyIsHelpingReplicants)) {
diff --git a/engines/bladerunner/script/scene/kp07.cpp b/engines/bladerunner/script/scene/kp07.cpp
index fc7e608..4d3ed45 100644
--- a/engines/bladerunner/script/scene/kp07.cpp
+++ b/engines/bladerunner/script/scene/kp07.cpp
@@ -178,7 +178,7 @@ void SceneScriptKP07::PlayerWalkedIn() {
Actor_Says(kActorClovis, 1240, 3);
Actor_Says(kActorMcCoy, 8500, 3);
Actor_Says(kActorClovis, 1250, 3);
- if (Actor_Query_Goal_Number(kActorSadik) == kGoalSadikUG18NeedsReactorCoreFromMcCoy) {
+ if (Actor_Query_Goal_Number(kActorSadik) == kGoalSadikKP06NeedsReactorCoreFromMcCoy) {
Actor_Put_In_Set(kActorSadik, kSetKP07);
Global_Variable_Increment(kVariableReplicantsSurvivorsAtMoonbus, 1);
Actor_Set_At_XYZ(kActorSadik, -12.0f, -41.58f, 72.0f, 0);
diff --git a/engines/bladerunner/script/scene/ug18.cpp b/engines/bladerunner/script/scene/ug18.cpp
index 1c14c06..8b6c1da 100644
--- a/engines/bladerunner/script/scene/ug18.cpp
+++ b/engines/bladerunner/script/scene/ug18.cpp
@@ -21,7 +21,6 @@
*/
#include "bladerunner/script/scene_script.h"
-
namespace BladeRunner {
enum kUG18Loops {
@@ -291,7 +290,7 @@ void SceneScriptUG18::ActorChangedGoal(int actorId, int newGoal, int oldGoal, bo
if (Actor_Query_Friendliness_To_Other(kActorClovis, kActorMcCoy) > 55
&& Game_Flag_Query(kFlagMcCoyRetiredHuman)
) {
- Actor_Says(kActorClovis, 660, 13);
+ Actor_Says(kActorClovis, 660, 13); // Brother, you killed a human...
Actor_Says(kActorMcCoy, 5995, 13);
Actor_Says(kActorClovis, 670, 13);
Actor_Says(kActorMcCoy, 6000, 13);
@@ -314,6 +313,7 @@ void SceneScriptUG18::ActorChangedGoal(int actorId, int newGoal, int oldGoal, bo
break;
case 305:
+ // never triggered
Actor_Change_Animation_Mode(kActorSadik, kAnimationModeCombatAttack);
Sound_Play(kSfxLGCAL1, 100, 0, 0, 50);
Actor_Force_Stop_Walking(kActorMcCoy);
@@ -376,24 +376,40 @@ void SceneScriptUG18::DialogueQueueFlushed(int a1) {
Actor_Change_Animation_Mode(kActorSadik, kAnimationModeCombatAttack);
Sound_Play(kSfxLGCAL3, 100, 0, 0, 50);
Actor_Change_Animation_Mode(kActorGuzza, kAnimationModeCombatHit);
- ADQ_Add(kActorClovis, 630, 13);
+ ADQ_Add(kActorClovis, 630, 13); // "Whatever is born of mortal birth, must be consumed with the earth."
Actor_Set_Goal_Number(kActorClovis, kGoalClovisUG18SadikWillShootGuzza);
break;
case kGoalGuzzaUG18ShotByMcCoy:
// Bug in the game, shot animation is not reset so McCoy looks still while he is shooting
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAim);
+#endif // BLADERUNNER_ORIGINAL_BUGS
Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAttack);
Sound_Play(kSfxLGCAL2, 100, 0, 0, 50);
Actor_Change_Animation_Mode(kActorGuzza, kAnimationModeCombatHit);
Delay(900);
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAim);
+#endif // BLADERUNNER_ORIGINAL_BUGS
Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAttack);
Sound_Play(kSfxLGCAL3, 100, 0, 0, 50);
Actor_Change_Animation_Mode(kActorGuzza, kAnimationModeCombatHit);
Delay(1100);
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAim);
+#endif // BLADERUNNER_ORIGINAL_BUGS
Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAttack);
Sound_Play(kSfxLGCAL1, 100, 0, 0, 50);
Actor_Change_Animation_Mode(kActorGuzza, kAnimationModeCombatHit);
Delay(900);
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAim);
+#endif // BLADERUNNER_ORIGINAL_BUGS
Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeCombatAttack);
Sound_Play(kSfxLGCAL3, 100, 0, 0, 50);
Actor_Change_Animation_Mode(kActorGuzza, 61);
@@ -408,11 +424,15 @@ void SceneScriptUG18::DialogueQueueFlushed(int a1) {
Actor_Set_Goal_Number(kActorGuzza, kGoalGuzzaUG18FallDown);
Player_Gains_Control();
ADQ_Add_Pause(2000);
- ADQ_Add(kActorSadik, 360, -1);
+ ADQ_Add(kActorSadik, 360, -1); // The Hunter, he do us a favor...
ADQ_Add_Pause(2000);
- ADQ_Add(kActorClovis, 650, 14);
+ ADQ_Add(kActorClovis, 650, 14); // So, what should we do with this detective.
ADQ_Add(kActorSadik, 370, 14);
- ADQ_Add(kActorClovis, 1320, 14);
+ ADQ_Add(kActorClovis, 1320, 14); // Perhaps you're right
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ Actor_Retired_Here(kActorGuzza, 72, 32, true, kActorMcCoy);
+#endif // BLADERUNNER_ORIGINAL_BUGS
Actor_Set_Goal_Number(kActorClovis, kGoalClovisUG18GuzzaDied);
break;
@@ -441,6 +461,19 @@ void SceneScriptUG18::DialogueQueueFlushed(int a1) {
Actor_Change_Animation_Mode(kActorSadik, kAnimationModeCombatAttack);
Sound_Play(kSfxLGCAL3, 100, 0, 0, 50);
Actor_Change_Animation_Mode(kActorGuzza, 61);
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ // don't allow code to reach the overlay animation if the dialogue queue is not flushed
+ // otherwise this animation is stored and if the player saves the game during the queued dialogue
+ // then upon re-load it would play immediately (before Guzza falls)
+ ADQ_Wait_For_All_Queued_Dialogue();
+#endif // BLADERUNNER_ORIGINAL_BUGS
+ if (_vm->_cutContent) {
+ // same logic as using the BB06OVER for doll explosion case in BB06
+ Overlay_Play("UG18OVER", 1, true, true, 0);
+ Overlay_Play("UG18OVER", 2, true, false, 0);
+ Global_Variable_Set(kVariableUG18StateOfGuzzaCorpse, kUG18GuzzaCorpseFloatsDown);
+ }
ADQ_Add_Pause(2000);
ADQ_Add(kActorClovis, 650, 14);
ADQ_Add(kActorSadik, 370, 14);
@@ -452,11 +485,20 @@ void SceneScriptUG18::DialogueQueueFlushed(int a1) {
break;
case kGoalClovisUG18GuzzaDied:
+#if BLADERUNNER_ORIGINAL_BUGS
Actor_Set_Goal_Number(kActorSadik, kGoalSadikUG18Move);
+#else
+ // otherwise this gets repeated whenever dialogue queue re-empties
+ if (Actor_Query_Goal_Number(kActorSadik) == kGoalSadikUG18Wait) {
+ Actor_Set_Goal_Number(kActorSadik, kGoalSadikUG18Move);
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
break;
}
if (Actor_Query_Goal_Number(kActorSadik) == kGoalSadikUG18WillShootMcCoy) {
+ // Bug in the original game - Why is Sadik set to die animation here?
+ // never triggered
Actor_Change_Animation_Mode(kActorSadik, kAnimationModeDie);
Actor_Set_Goal_Number(kActorSadik, kGoalSadikUG18PrepareShootMcCoy);
Actor_Set_Goal_Number(kActorClovis, kGoalClovisUG18Leave);
@@ -574,7 +616,7 @@ void SceneScriptUG18::talkWithClovis() {
ADQ_Add(kActorGuzza, 1180, 58);
ADQ_Add(kActorClovis, 610, 13);
ADQ_Add(kActorGuzza, 1190, 60);
- ADQ_Add(kActorClovis, 620, 13);
+ ADQ_Add(kActorClovis, 620, 13); // Lieutenant, we have everything we need...
ADQ_Add(kActorGuzza, 1200, 59);
}
More information about the Scummvm-git-logs
mailing list