[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