[Scummvm-git-logs] scummvm master -> 571ddf46cdc52a0abb35e1efbcd0f8800e3419fe

antoniou79 antoniou at cti.gr
Thu Feb 28 14:26:56 CET 2019


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
571ddf46cd BLADERUNNER: A better fix for Sebastian's doll


Commit: 571ddf46cdc52a0abb35e1efbcd0f8800e3419fe
    https://github.com/scummvm/scummvm/commit/571ddf46cdc52a0abb35e1efbcd0f8800e3419fe
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-02-28T15:26:35+02:00

Commit Message:
BLADERUNNER: A better fix for Sebastian's doll

Use just the existing box 31. Implement a way to override object placement.

Remove the item 77 (Holden's badge) completely.

Changed paths:
    engines/bladerunner/scene.cpp
    engines/bladerunner/script/scene/bb06.cpp
    engines/bladerunner/set.cpp
    engines/bladerunner/set.h


diff --git a/engines/bladerunner/scene.cpp b/engines/bladerunner/scene.cpp
index 78b1bb6..4ca5da4 100644
--- a/engines/bladerunner/scene.cpp
+++ b/engines/bladerunner/scene.cpp
@@ -170,7 +170,7 @@ bool Scene::open(int setId, int sceneId, bool isLoadingGame) {
 		}
 	}
 
-	_set->addObjectsToScene(_vm->_sceneObjects);
+	_set->addObjectsToScene(_vm->_sceneObjects, _sceneId);
 	_vm->_items->addToSet(setId);
 	_vm->_sceneObjects->updateObstacles();
 	// TODO: add all items to scene
diff --git a/engines/bladerunner/script/scene/bb06.cpp b/engines/bladerunner/script/scene/bb06.cpp
index cef2a5a..92fdefe 100644
--- a/engines/bladerunner/script/scene/bb06.cpp
+++ b/engines/bladerunner/script/scene/bb06.cpp
@@ -87,10 +87,8 @@ void SceneScriptBB06::SceneLoaded() {
 	// otherwise the doll item is not placed in the current set
 	Item_Add_To_World(kItemBB06ControlBox, 931, kSetBB06_BB07, -127.0f, 68.42f, 57.0f, 0, 8, 8, true, true, false, true);
 #else
-	// Add doll item based on which SET version of the "room" we are in
-	Item_Add_To_World(kItemBB06ControlBox, 931, Player_Query_Current_Set(), -117.24f, 46.41f, 76.66f, 256, 28, 16, true, true, false, true);
-	if (Game_Flag_Query(kFlagBB06AndroidDestroyed)) {
-		Item_Flag_As_Non_Target(kItemBB06ControlBox);
+	if (!Game_Flag_Query(kFlagBB06AndroidDestroyed)) {
+		Combat_Target_Object("BOX31"); //
 	}
 #endif // BLADERUNNER_ORIGINAL_BUGS
 }
@@ -101,6 +99,7 @@ bool SceneScriptBB06::MouseClick(int x, int y) {
 
 bool SceneScriptBB06::ClickedOn3DObject(const char *objectName, bool a2) {
 	if (Object_Query_Click("BOX31", objectName)) {
+#if BLADERUNNER_ORIGINAL_BUGS // Sebastian's Doll Fix
 		if (!Loop_Actor_Walk_To_Scene_Object(kActorMcCoy, "BOX31", 24, true, false)) {
 			Actor_Face_Object(kActorMcCoy, "BOX31", true);
 			if (Game_Flag_Query(kFlagBB06AndroidDestroyed)) {
@@ -110,6 +109,24 @@ bool SceneScriptBB06::ClickedOn3DObject(const char *objectName, bool a2) {
 				Actor_Voice_Over(50, kActorVoiceOver);
 			}
 		}
+#else
+		if (Player_Query_Combat_Mode()) {
+			Overlay_Play("BB06OVER", 0, false, true, 0); // explosion - don't loop
+			Game_Flag_Set(kFlagBB06AndroidDestroyed);
+			Un_Combat_Target_Object("BOX31");
+			return true;
+		} else {
+			if (!Loop_Actor_Walk_To_Scene_Object(kActorMcCoy, "BOX31", 24, true, false)) {
+				Actor_Face_Object(kActorMcCoy, "BOX31", true);
+				if (Game_Flag_Query(kFlagBB06AndroidDestroyed)) {
+					Actor_Voice_Over(60, kActorVoiceOver);
+					Actor_Voice_Over(70, kActorVoiceOver);
+				} else {
+					Actor_Voice_Over(50, kActorVoiceOver);
+				}
+			}
+		}
+#endif // BLADERUNNER_ORIGINAL_BUGS
 	}
 	return false;
 }
@@ -119,26 +136,16 @@ bool SceneScriptBB06::ClickedOnActor(int actorId) {
 }
 
 bool SceneScriptBB06::ClickedOnItem(int itemId, bool a2) {
-	if (itemId == kItemBB06ControlBox) {
 #if BLADERUNNER_ORIGINAL_BUGS // Sebastian's Doll Fix
+	if (itemId == kItemBB06ControlBox) {
 		if (Player_Query_Combat_Mode()) {
 			Overlay_Play("BB06OVER", 1, true, true, 0);
 			Game_Flag_Set(kFlagBB06AndroidDestroyed);
 			Item_Remove_From_World(kItemBB06ControlBox);
 			return true;
 		}
-#else
-		if (Player_Query_Combat_Mode()) {
-			Overlay_Play("BB06OVER", 0, false, true, 0); // explosion - don't loop
-			Game_Flag_Set(kFlagBB06AndroidDestroyed);
-			// flag item kItemBB06ControlBox as non-combat-target
-			Item_Flag_As_Non_Target(kItemBB06ControlBox);
-			return true;
-		} else {
-			ClickedOn3DObject("BOX31", false); // clone behavior of box31
-		}
-#endif // BLADERUNNER_ORIGINAL_BUGS
 	}
+#endif // BLADERUNNER_ORIGINAL_BUGS
 	return false;
 }
 
@@ -217,12 +224,6 @@ void SceneScriptBB06::PlayerWalkedIn() {
 }
 
 void SceneScriptBB06::PlayerWalkedOut() {
-#if BLADERUNNER_ORIGINAL_BUGS // Sebastian's Doll Fix
-#else
-	// this might be redundant -- the item is not visible in BB07 even if it was drawn in BB06
-	Item_Remove_From_World(kItemBB06ControlBox); // this removes the item from the set so it won't exist in the next scene
-												// mainly to remove it completely from BB07
-#endif // BLADERUNNER_ORIGINAL_BUGS
 }
 
 void SceneScriptBB06::DialogueQueueFlushed(int a1) {
diff --git a/engines/bladerunner/set.cpp b/engines/bladerunner/set.cpp
index f53a635..a257cee 100644
--- a/engines/bladerunner/set.cpp
+++ b/engines/bladerunner/set.cpp
@@ -127,8 +127,9 @@ bool Set::open(const Common::String &name) {
 	return true;
 }
 
-void Set::addObjectsToScene(SceneObjects *sceneObjects) const {
+void Set::addObjectsToScene(SceneObjects *sceneObjects, int sceneId) const {
 	for (int i = 0; i < _objectCount; i++) {
+		overrideSceneObjectInfo(sceneId, i); // For bugfixes with respect to clickable/targetable box positioning/bounding box
 		sceneObjects->addObject(i + kSceneObjectOffsetObjects, _objects[i].bbox, _objects[i].isClickable, _objects[i].isObstacle, _objects[i].unknown1, _objects[i].isTarget);
 	}
 }
@@ -396,4 +397,17 @@ void Set::load(SaveFileReadStream &f) {
 	_footstepSoundOverride = f.readInt();
 }
 
+/**
+* Used for bugfixes mainly with respect to bad box positioning / bounding box fixes
+* TODO If we have many such cases, perhaps we could use a lookup table
+*		using sceneId, objectId (or name) as keys
+*/
+void Set::overrideSceneObjectInfo(int sceneId, int objectId) const { // For bugfixes with respect to clickable/targetable box positioning/bounding box
+	if (sceneId == kSceneBB06) { /// Sebastian's room with doll
+		if (_objects[objectId].name == "BOX31") { // dollhouse box in BB06
+			_objects[objectId].bbox.setXYZ(-161.47f, 30.0f, 53.75f, -110.53f, 69.81f, 90.90f);
+		}
+	}
+}
+
 } // End of namespace BladeRunner
diff --git a/engines/bladerunner/set.h b/engines/bladerunner/set.h
index c6c1081..1097a53 100644
--- a/engines/bladerunner/set.h
+++ b/engines/bladerunner/set.h
@@ -78,7 +78,7 @@ public:
 
 	bool open(const Common::String &name);
 
-	void addObjectsToScene(SceneObjects *sceneObjects) const;
+	void addObjectsToScene(SceneObjects *sceneObjects, int sceneId) const;
 	uint32 getObjectCount() const { return _objectCount; }
 
 	float getAltitudeAtXZ(float x, float z, bool *inWalkbox) const;
@@ -107,6 +107,7 @@ public:
 
 private:
 	static bool isXZInWalkbox(float x, float z, const Walkbox &walkbox);
+	void overrideSceneObjectInfo(int sceneId, int objectId) const;
 };
 
 } // End of namespace BladeRunner





More information about the Scummvm-git-logs mailing list