[Scummvm-git-logs] scummvm master -> 717705f7c947285773b12d055b4014a79453551c

antoniou79 antoniou at cti.gr
Mon Mar 18 16:15:52 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:
717705f7c9 BLADERUNNER: Fixes and cleanup for Police Maze A


Commit: 717705f7c947285773b12d055b4014a79453551c
    https://github.com/scummvm/scummvm/commit/717705f7c947285773b12d055b4014a79453551c
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-03-18T17:07:10+02:00

Commit Message:
BLADERUNNER: Fixes and cleanup for Police Maze A

Only fixes for rooms PS10, PS11. A few cases may need revising.

There are a few cases that a target may reset after being shot and they seem buggy but they could also be intended. So, that's for a second pass to decide.

Changed paths:
    engines/bladerunner/item.cpp
    engines/bladerunner/items.cpp
    engines/bladerunner/script/police_maze.cpp
    engines/bladerunner/script/police_maze.h
    engines/bladerunner/script/scene/ps10.cpp
    engines/bladerunner/script/scene/ps11.cpp
    engines/bladerunner/script/scene/ps12.cpp
    engines/bladerunner/script/scene/ps13.cpp
    engines/bladerunner/script/scene_script.cpp
    engines/bladerunner/script/scene_script.h
    engines/bladerunner/script/script.cpp
    engines/bladerunner/script/script.h


diff --git a/engines/bladerunner/item.cpp b/engines/bladerunner/item.cpp
index d9d8345..0508dbc 100644
--- a/engines/bladerunner/item.cpp
+++ b/engines/bladerunner/item.cpp
@@ -52,7 +52,7 @@ Item::Item(BladeRunnerEngine *vm) {
 	_isSpinning = false;
 	_facingChange = 0;
 	_isVisible = true;
-	_isPoliceMazeEnemy = true;
+	_isPoliceMazeEnemy = false;
 	_screenRectangle.bottom = -1;
 	_screenRectangle.right = -1;
 	_screenRectangle.top = -1;
diff --git a/engines/bladerunner/items.cpp b/engines/bladerunner/items.cpp
index 3259451..9192b38 100644
--- a/engines/bladerunner/items.cpp
+++ b/engines/bladerunner/items.cpp
@@ -168,7 +168,7 @@ bool Items::isPoliceMazeEnemy(int itemId) const {
 	if (itemIndex == -1) {
 		return false;
 	}
-	return _items[itemIndex]->isTarget();
+	return _items[itemIndex]->isPoliceMazeEnemy();
 }
 
 void Items::setPoliceMazeEnemy(int itemId, bool val) {
diff --git a/engines/bladerunner/script/police_maze.cpp b/engines/bladerunner/script/police_maze.cpp
index a032c89..cd91eb4 100644
--- a/engines/bladerunner/script/police_maze.cpp
+++ b/engines/bladerunner/script/police_maze.cpp
@@ -30,6 +30,8 @@
 #include "bladerunner/script/police_maze.h"
 #include "bladerunner/script/scene_script.h"
 #include "bladerunner/time.h"
+#include "bladerunner/subtitles.h"           // TODO Remove if no longer need to display score and debug info on-screen
+
 
 namespace BladeRunner {
 
@@ -95,14 +97,71 @@ void PoliceMaze::tick() {
 		_tracks[i]->tick();
 	}
 
+//	int remainingActiveTargets = 0;            // TODO Un-comment this line while debugging the maze
+//	int targetIdsActive[kNumMazeTracks] = {0}; // TODO Un-comment this line while debugging the maze
+//	int j = 0;                                 // TODO Un-comment this line while debugging the maze
 	bool notFound = true;
 	for (int i = 0; i < kNumMazeTracks; i++) {
 		if (!_tracks[i]->isPaused()) {
 			notFound = false;
-			break;
+//			targetIdsActive[j++] = i;          // TODO Un-comment this line while debugging the maze
+//			remainingActiveTargets++;          // TODO Un-comment this line while debugging the maze
+			break;                             // TODO Comment-out this break while debugging the maze (debug messages on screen about all active targets)
 		}
 	}
 
+	Common::String scoreString;
+//	TODO un-comment this segment of updating activeTargetsString while debugging the maze
+//	Common::String activeTargetsString;
+//	for (int i = 0; i < kNumMazeTracks; ++i) {
+//		if (_vm->_items->isTarget(i)) {
+//			activeTargetsString += Common::String::format(" %d", (i+1));
+//		}
+//	}
+//	activeTargetsString += Common::String::format("] \n");
+//	for (int i = 0; i < remainingActiveTargets; ++i) {
+//		j = targetIdsActive[i];
+//		activeTargetsString += Common::String::format(" %d{%s:%s:%s:%s:%s}",
+//		                                               (j+1),
+//		                                               _tracks[j]->_isPaused?"P":"X",
+//		                                               _tracks[j]->_isWaiting?"W":"X",
+//		                                               _vm->_items->isSpinning(j)?"S":"X",
+//		                                               _vm->_items->isTarget(j)?"T":"X",
+//		                                               _vm->_items->isVisible(j)?"V":"X" );
+//	}
+//	int allTargetsNum = SceneScriptPS10::getPoliceMazePS10TargetCount()
+//						+ SceneScriptPS11::getPoliceMazePS11TargetCount()
+//						+ SceneScriptPS12::getPoliceMazePS12TargetCount()
+//						+ SceneScriptPS13::getPoliceMazePS13TargetCount();
+	int totalTargetsNumInScene = 0;
+	int currTargetsCounUpForRoom = 0;
+//	const int initActivatedTargetsPS10 = 4;
+//	const int initActivatedTargetsPS11 = 4;
+//	const int initActivatedTargetsPS12 = 5;
+//	const int initActivatedTargetsPS13 = 4;
+
+	int currMazeScore = Global_Variable_Query(kVariablePoliceMazeScore);
+	if (_vm->_scene->getSceneId() == kScenePS10) {
+		totalTargetsNumInScene = SceneScriptPS10::getPoliceMazePS10TargetCount();
+		currTargetsCounUpForRoom = Global_Variable_Query(kVariablePoliceMazePS10TargetCounter);
+	} else if (_vm->_scene->getSceneId() == kScenePS11) {
+		totalTargetsNumInScene = SceneScriptPS11::getPoliceMazePS11TargetCount();
+		currTargetsCounUpForRoom = Global_Variable_Query(kVariablePoliceMazePS11TargetCounter);
+	} else if (_vm->_scene->getSceneId() == kScenePS12) {
+		totalTargetsNumInScene = SceneScriptPS12::getPoliceMazePS12TargetCount();
+		currTargetsCounUpForRoom = Global_Variable_Query(kVariablePoliceMazePS12TargetCounter);
+	} else if (_vm->_scene->getSceneId() == kScenePS13) {
+		totalTargetsNumInScene = SceneScriptPS13::getPoliceMazePS13TargetCount();
+		currTargetsCounUpForRoom = Global_Variable_Query(kVariablePoliceMazePS13TargetCounter);
+	}
+//	scoreString = Common::String::format("Score: %02d (%02d), [%s]",
+//	                                      currMazeScore - (totalTargetsNumInScene - currTargetsCounUpForRoom),
+//	                                      totalTargetsNumInScene - currTargetsCounUpForRoom,
+//	                                      activeTargetsString.c_str());
+	scoreString = Common::String::format("Score: %02d", currMazeScore - (totalTargetsNumInScene - currTargetsCounUpForRoom));
+	_vm->_subtitles->setGameSubsText(scoreString, true);
+	_vm->_subtitles->show();
+
 	if (notFound && _isActive && !_isEnding) {
 		_isActive = false;
 		_isEnding = true;
@@ -113,6 +172,7 @@ void PoliceMaze::tick() {
 			Actor_Voice_Over(310, kActorAnsweringMachine);
 		}
 	}
+
 }
 
 void PoliceMaze::save(SaveFileWriteStream &f) {
@@ -247,8 +307,9 @@ bool PoliceMazeTargetTrack::tick() {
 
 		_vm->_items->setFacing(_itemId, angle);
 
-		if (_isRotating)
-			return false;
+		if (_isRotating) {
+			return true;
+		}
 	}
 
 	bool advancePoint = false;
diff --git a/engines/bladerunner/script/police_maze.h b/engines/bladerunner/script/police_maze.h
index 9e79497..31b46d3 100644
--- a/engines/bladerunner/script/police_maze.h
+++ b/engines/bladerunner/script/police_maze.h
@@ -38,6 +38,7 @@ class SaveFileReadStream;
 class SaveFileWriteStream;
 
 class PoliceMazeTargetTrack : ScriptBase {
+	friend class PoliceMaze;
 	uint32     _time;
 	bool       _isPresent;
 	int        _itemId;
diff --git a/engines/bladerunner/script/scene/ps10.cpp b/engines/bladerunner/script/scene/ps10.cpp
index f3ab121..b8923ac 100644
--- a/engines/bladerunner/script/scene/ps10.cpp
+++ b/engines/bladerunner/script/scene/ps10.cpp
@@ -25,11 +25,19 @@
 namespace BladeRunner {
 
 static int kPoliceMazePS10TargetCount = 20;
+int SceneScriptPS10::getPoliceMazePS10TargetCount() {
+	return kPoliceMazePS10TargetCount;
+}
 
-static const int *getPoliceMazePS10TrackData1() {
+static const int *getPoliceMazePS10TrackData1() { // Enemy (kItemPS10Target1, kItemPS10Target2)
 	static int trackData[] = {
 		kPMTIActivate,      kVariablePoliceMazePS10TargetCounter, kPoliceMazePS10TargetCount,
 		kPMTIVariableInc,   kVariablePoliceMazePS10TargetCounter, kPoliceMazePS10TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS10Target1, 0, // remove target-able here
+		kPMTITargetSet,     kItemPS10Target2, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset, kItemPS10Target1,
 		kPMTIObstacleReset, kItemPS10Target2,
 		kPMTIFacing,        989,
@@ -37,22 +45,34 @@ static const int *getPoliceMazePS10TrackData1() {
 		kPMTITargetSet,     kItemPS10Target1, 1,
 		kPMTITargetSet,     kItemPS10Target2, 1,
 		kPMTIEnemyReset,    kItemPS10Target1,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTIEnemyReset,    kItemPS10Target2,   // both targets should clear their enemy flag here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIWaitRandom,    3000, 5000,
 		kPMTIObstacleSet,   kItemPS10Target1,
-		kPMTIPlaySound,     159, 100,
+		kPMTIPlaySound,     159, 100,           // UPTARG3
 		kPMTIMove,          14,
 		kPMTIWait,          1000,
 		kPMTIRotate,        740, 80,
-		kPMTIEnemySet,      kItemPS10Target1,
+		kPMTIEnemySet,      kItemPS10Target1, 	// Target becomes enemy after rotating
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTIEnemySet,      kItemPS10Target2,   // both targets should set their enemy flag here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIWait,          0,
 		kPMTIRotate,        488, 80,
 		kPMTIWait,          1000,
 		kPMTIShoot,         27, 33,
 		kPMTIWait,          0,
 		kPMTIRotate,        740, 80,
-		kPMTIPausedReset,   kItemPS10Target2,
-		kPMTIObstacleReset, kItemPS10Target1,
-		kPMTIObstacleSet,   kItemPS10Target2,
+		kPMTIPausedReset,   kItemPS10Target2,	// kItemPS10Target2 continues the route of this item
+		kPMTIObstacleReset, kItemPS10Target1,	// kItemPS10Target1 becomes invisible
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS10Target1, 0, // remove target-able here - only for Target1 item
+#endif // BLADERUNNER_ORIGINAL_BUGS
+		kPMTIObstacleSet,   kItemPS10Target2,	// kItemPS10Target2 becomes visible in kItemPS10Target1's place
 		kPMTIPausedSet,     kItemPS10Target1,
 		kPMTIPosition,      0,
 		kPMTIRestart
@@ -60,32 +80,41 @@ static const int *getPoliceMazePS10TrackData1() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS10TrackData2() {
+static const int *getPoliceMazePS10TrackData2() { // Enemy (kItemPS10Target1, kItemPS10Target2)
 	static int trackData[] = {
-		kPMTIFacing,        740,
-		kPMTIPosition,      0,
-		kPMTIEnemySet,      kItemPS10Target2,
-		kPMTIMove,          69,
-		kPMTIWait,          500,
-		kPMTIObstacleReset, kItemPS10Target2,
-		kPMTIPausedReset,   kItemPS10Target5,
-		kPMTIPausedSet,     kItemPS10Target2,
-		kPMTIPosition,      0,
+		kPMTIFacing,          740,
+		kPMTIPosition,        0,
+		kPMTIEnemySet,        kItemPS10Target2,
+		kPMTIMove,            69,
+		kPMTIWait,            500,
+		kPMTIObstacleReset,   kItemPS10Target2,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS10Target2, 0,				// remove target-able here - only for Target1 item
+//		kPMTIPausedReset1of2, kItemPS10Target3, kItemPS10Target6,	// re-use track 3 or 6
+#endif // BLADERUNNER_ORIGINAL_BUGS
+		kPMTIPausedReset,     kItemPS10Target5,
+		kPMTIPausedSet,       kItemPS10Target2,
+		kPMTIPosition,        0,
 		kPMTIRestart
 	};
 	return trackData;
 }
 
-static const int *getPoliceMazePS10TrackData3() {
+static const int *getPoliceMazePS10TrackData3() { // Enemy (kItemPS10Target3)
 	static int trackData[] = {
 		kPMTIActivate,      kVariablePoliceMazePS10TargetCounter, kPoliceMazePS10TargetCount,
 		kPMTIVariableInc,   kVariablePoliceMazePS10TargetCounter, kPoliceMazePS10TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS10Target3, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset, kItemPS10Target3,
 		kPMTIFacing,        993,
 		kPMTIPosition,      0,
 		kPMTIWaitRandom,    3000, 5000,
 		kPMTIObstacleSet,   kItemPS10Target3,
-		kPMTIPlaySound,     159, 100,
+		kPMTIPlaySound,     159, 100,            // UPTARG3
 		kPMTITargetSet,     kItemPS10Target3, 1,
 		kPMTIEnemyReset,    kItemPS10Target3,
 		kPMTIMove,          5,
@@ -100,24 +129,33 @@ static const int *getPoliceMazePS10TrackData3() {
 		kPMTIRotate,        233, 80,
 		kPMTIWait,          0,
 		kPMTIRotate,        993, 80,
-		kPMTIPlaySound,     34, 33,
+		kPMTIPlaySound,     34, 33,              // TARGUP6
 		kPMTIMove,          0,
 		kPMTIObstacleReset, kItemPS10Target3,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS10Target3, 0, // remove target-able here
+		kPMTIPausedSet,     kItemPS10Target3,
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIRestart
 	};
 	return trackData;
 }
 
-static const int *getPoliceMazePS10TrackData4() {
+static const int *getPoliceMazePS10TrackData4() { // Innocent (kItemPS10Target4)
 	static int trackData[] = {
 		kPMTIActivate,      kVariablePoliceMazePS10TargetCounter, kPoliceMazePS10TargetCount,
 		kPMTIVariableInc,   kVariablePoliceMazePS10TargetCounter, kPoliceMazePS10TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS10Target4, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset, kItemPS10Target4,
 		kPMTIFacing,        993,
 		kPMTIPosition,      0,
 		kPMTIWaitRandom,    3000, 6000,
 		kPMTIObstacleSet,   kItemPS10Target4,
-		kPMTIPlaySound,     159, 100,
+		kPMTIPlaySound,     159, 100,            // UPTARG3
 		kPMTITargetSet,     kItemPS10Target4, 1,
 		kPMTIEnemyReset,    kItemPS10Target4,
 		kPMTIMove,          34,
@@ -126,6 +164,10 @@ static const int *getPoliceMazePS10TrackData4() {
 		kPMTIMove,          0,
 		kPMTILeave,
 		kPMTIObstacleReset, kItemPS10Target4,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS10Target4, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPausedReset,   kItemPS10Target8,
 		kPMTIPausedSet,     kItemPS10Target4,
 		kPMTIRestart
@@ -133,16 +175,20 @@ static const int *getPoliceMazePS10TrackData4() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS10TrackData5() {
+static const int *getPoliceMazePS10TrackData5() { // Innocent (kItemPS10Target5)
 	static int trackData[] = {
 		kPMTIActivate,      kVariablePoliceMazePS10TargetCounter, kPoliceMazePS10TargetCount,
 		kPMTIVariableInc,   kVariablePoliceMazePS10TargetCounter, kPoliceMazePS10TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS10Target5, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset, kItemPS10Target5,
 		kPMTIFacing,        0,
 		kPMTIPosition,      0,
 		kPMTIWaitRandom,    4000, 6000,
 		kPMTIObstacleSet,   kItemPS10Target5,
-		kPMTIPlaySound,     159, 100,
+		kPMTIPlaySound,     159, 100,            // UPTARG3
 		kPMTITargetSet,     kItemPS10Target5, 1,
 		kPMTIEnemyReset,    kItemPS10Target5,
 		kPMTIMove,          5,
@@ -150,10 +196,14 @@ static const int *getPoliceMazePS10TrackData5() {
 		kPMTIRotate,        512, 100,
 		kPMTIWait,          2000,
 		kPMTIRotate,        0, -100,
-		kPMTIPlaySound,     34, 33,
+		kPMTIPlaySound,     34, 33,              // TARGUP6
 		kPMTIMove,          0,
 		kPMTILeave,
 		kPMTIObstacleReset, kItemPS10Target5,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS10Target5, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPausedReset,   kItemPS10Target1,
 		kPMTIPausedSet,     kItemPS10Target5,
 		kPMTIRestart
@@ -161,16 +211,20 @@ static const int *getPoliceMazePS10TrackData5() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS10TrackData6() {
+static const int *getPoliceMazePS10TrackData6() { // Enemy (kItemPS10Target6)
 	static int trackData[] = {
 		kPMTIActivate,      kVariablePoliceMazePS10TargetCounter, kPoliceMazePS10TargetCount,
 		kPMTIVariableInc,   kVariablePoliceMazePS10TargetCounter, kPoliceMazePS10TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS10Target6, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset, kItemPS10Target6,
 		kPMTIFacing,        999,
 		kPMTIPosition,      0,
 		kPMTIWaitRandom,    4000, 6000,
 		kPMTIObstacleSet,   kItemPS10Target6,
-		kPMTIPlaySound,     159, 100,
+		kPMTIPlaySound,     159, 100,            // UPTARG3
 		kPMTITargetSet,     kItemPS10Target6, 1,
 		kPMTIEnemyReset,    kItemPS10Target6,
 		kPMTIMove,          7,
@@ -180,14 +234,18 @@ static const int *getPoliceMazePS10TrackData6() {
 		kPMTIWait,          0,
 		kPMTIRotate,        500, 80,
 		kPMTIWait,          1000,
-		kPMTIShoot,         27, 33,
+		kPMTIShoot,         27, 33,              // SMCAL3
 		kPMTIWait,          0,
 		kPMTIRotate,        750, 80,
 		kPMTIWait,          0,
 		kPMTIRotate,        999, 80,
-		kPMTIPlaySound,     34, 33,
+		kPMTIPlaySound,     34, 33,              // TARGUP6
 		kPMTIMove,          0,
 		kPMTIObstacleReset, kItemPS10Target6,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS10Target6, 0,  // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPausedReset,   kItemPS10Target7,
 		kPMTIPausedReset,   kItemPS10Target9,
 		kPMTIPausedSet,     kItemPS10Target6,
@@ -196,10 +254,14 @@ static const int *getPoliceMazePS10TrackData6() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS10TrackData7() {
+static const int *getPoliceMazePS10TrackData7() { // Innocent (kItemPS10Target7)
 	static int trackData[] = {
 		kPMTIActivate,      kVariablePoliceMazePS10TargetCounter, kPoliceMazePS10TargetCount,
 		kPMTIVariableInc,   kVariablePoliceMazePS10TargetCounter, kPoliceMazePS10TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS10Target7, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset, kItemPS10Target7,
 		kPMTIFacing,        264,
 		kPMTIPosition,      0,
@@ -213,22 +275,30 @@ static const int *getPoliceMazePS10TrackData7() {
 		kPMTIMove,          0,
 		kPMTILeave,
 		kPMTIObstacleReset, kItemPS10Target7,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS10Target7, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPausedSet,     kItemPS10Target7,
 		kPMTIRestart
 	};
 	return trackData;
 }
 
-static const int *getPoliceMazePS10TrackData8() {
+static const int *getPoliceMazePS10TrackData8() { // Enemy (kItemPS10Target8)
 	static int trackData[] = {
 		kPMTIActivate,      kVariablePoliceMazePS10TargetCounter, kPoliceMazePS10TargetCount,
 		kPMTIVariableInc,   kVariablePoliceMazePS10TargetCounter, kPoliceMazePS10TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS10Target8, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset, kItemPS10Target8,
 		kPMTIFacing,        993,
 		kPMTIPosition,      0,
 		kPMTIWaitRandom,    4000, 6000,
 		kPMTIObstacleSet,   kItemPS10Target8,
-		kPMTIPlaySound,     159, 100,
+		kPMTIPlaySound,     159, 100,            // UPTARG3
 		kPMTITargetSet,     kItemPS10Target8, 1,
 		kPMTIEnemyReset,    kItemPS10Target8,
 		kPMTIMove,          34,
@@ -240,6 +310,10 @@ static const int *getPoliceMazePS10TrackData8() {
 		kPMTIShoot,         27, 33,
 		kPMTIMove,          0,
 		kPMTIObstacleReset, kItemPS10Target8,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS10Target8, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPausedReset,   kItemPS10Target4,
 		kPMTIPausedSet,     kItemPS10Target8,
 		kPMTIRestart
@@ -247,7 +321,7 @@ static const int *getPoliceMazePS10TrackData8() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS10TrackData9() {
+static const int *getPoliceMazePS10TrackData9() { // Enemy (kItemPS10Target9)
 	static int trackData[] = {
 		kPMTIActivate,      kVariablePoliceMazePS10TargetCounter, kPoliceMazePS10TargetCount,
 		kPMTIVariableInc,   kVariablePoliceMazePS10TargetCounter, kPoliceMazePS10TargetCount,
@@ -258,44 +332,46 @@ static const int *getPoliceMazePS10TrackData9() {
 		kPMTITargetSet,     kItemPS10Target9, 1,
 		kPMTIEnemySet,      kItemPS10Target9,
 		kPMTIObstacleSet,   kItemPS10Target9,
-		kPMTIPlaySound,     0, 33,
+		kPMTIPlaySound,     0, 33,                // CROSLOCK
 		kPMTIMove,          23,
-		kPMTIPlaySound,     0, 33,
+		kPMTIPlaySound,     0, 33,                // CROSLOCK
 		kPMTIWait,          200,
-		kPMTIPlaySound,     32, 33,
+		kPMTIPlaySound,     32, 33,               // TARGUP4
 		kPMTIRotate,        498, 100,
-		kPMTIPlaySound,     0, 33,
+		kPMTIPlaySound,     0, 33,                // CROSLOCK
 		kPMTIWait,          100,
 		kPMTIShoot,         27, 33,
-		kPMTIPlaySound,     32, 33,
+		kPMTIPlaySound,     32, 33,               // TARGUP4
 		kPMTIMove,          35,
-		kPMTIPlaySound,     32, 33,
+		kPMTIPlaySound,     32, 33,               // TARGUP4
 		kPMTIWait,          100,
 		kPMTIShoot,         27, 33,
-		kPMTIPlaySound,     0, 33,
+		kPMTIPlaySound,     0, 33,                // CROSLOCK
 		kPMTIMove,          23,
-		kPMTIPlaySound,     32, 33,
+		kPMTIPlaySound,     32, 33,               // TARGUP4
 		kPMTIWait,          100,
 		kPMTIShoot,         27, 33,
-		kPMTIPlaySound,     32, 33,
+		kPMTIPlaySound,     32, 33,               // TARGUP4
 		kPMTIRotate,        758, 100,
-		kPMTIPlaySound,     32, 33,
+		kPMTIPlaySound,     32, 33,               // TARGUP4
 		kPMTIMove,          89,
-		kPMTIPlaySound,     0, 33,
+		kPMTIPlaySound,     0, 33,                // CROSLOCK
 		kPMTIWaitRandom,    4000, 6000,
-		kPMTITargetSet,     kItemPS10Target9, 1,
+#if BLADERUNNER_ORIGINAL_BUGS
+		kPMTITargetSet,     kItemPS10Target9, 1,  // TODO MAZE A bug? intended? why reset the target-able status (even if shot) here? (would result to re-credit another point if shot again now)
 		kPMTIEnemySet,      kItemPS10Target9,
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIFacing,        216,
-		kPMTIPlaySound,     32, 33,
+		kPMTIPlaySound,     32, 33,               // TARGUP4
 		kPMTIMove,          69,
 		kPMTIWait,          100,
-		kPMTIPlaySound,     32, 33,
+		kPMTIPlaySound,     32, 33,               // TARGUP4
 		kPMTIRotate,        498, 100,
 		kPMTIWait,          100,
 		kPMTIShoot,         27, 33,
-		kPMTIPlaySound,     0, 33,
+		kPMTIPlaySound,     0, 33,                // CROSLOCK
 		kPMTIRotate,        216, 100,
-		kPMTIPlaySound,     32, 33,
+		kPMTIPlaySound,     32, 33,               // TARGUP4
 		kPMTIMove,          0,
 		kPMTIObstacleReset, kItemPS10Target9,
 		kPMTIPausedSet,     kItemPS10Target9,
@@ -359,15 +435,22 @@ void SceneScriptPS10::SceneLoaded() {
 	Unobstacle_Object("E.SM.WIRE01", true);
 
 	if (!Query_System_Currently_Loading_Game()) {
-		Item_Add_To_World(kItemPS10Target1, 443, kSetPS10_PS11_PS12_PS13,  -240.0f, -80.74f, 145.0f, 989, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS10Target2, 443, kSetPS10_PS11_PS12_PS13,  -240.0f,  -8.74f, 145.0f, 740, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS10Target3, 445, kSetPS10_PS11_PS12_PS13,  -165.0f, 111.53f, -10.0f, 993, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS10Target4, 447, kSetPS10_PS11_PS12_PS13,  -125.0f,  160.0f, -10.0f, 993, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS10Target5, 441, kSetPS10_PS11_PS12_PS13, -246.71f, 205.51f, -20.0f,   0, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS10Target6, 445, kSetPS10_PS11_PS12_PS13,  -27.69f, -86.92f, 434.0f, 999, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS10Target7, 441, kSetPS10_PS11_PS12_PS13, -347.15f,   7.68f, -20.0f, 264, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS10Target8, 449, kSetPS10_PS11_PS12_PS13,   -51.0f,  160.0f, -10.0f, 993, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS10Target9, 445, kSetPS10_PS11_PS12_PS13,    39.0f,   9.16f, -20.0f, 738, 72, 36, true, false, false, true);
+		bool targetStateMZ = true;
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+// every maze target begins as NON-targetable
+		targetStateMZ = false;
+#endif // BLADERUNNER_ORIGINAL_BUGS
+		Item_Add_To_World(kItemPS10Target1, 443, kSetPS10_PS11_PS12_PS13,  -240.0f, -80.74f, 145.0f, 989, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS10Target2, 443, kSetPS10_PS11_PS12_PS13,  -240.0f,  -8.74f, 145.0f, 740, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS10Target3, 445, kSetPS10_PS11_PS12_PS13,  -165.0f, 111.53f, -10.0f, 993, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS10Target4, 447, kSetPS10_PS11_PS12_PS13,  -125.0f,  160.0f, -10.0f, 993, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS10Target5, 441, kSetPS10_PS11_PS12_PS13, -246.71f, 205.51f, -20.0f,   0, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS10Target6, 445, kSetPS10_PS11_PS12_PS13,  -27.69f, -86.92f, 434.0f, 999, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS10Target7, 441, kSetPS10_PS11_PS12_PS13, -347.15f,   7.68f, -20.0f, 264, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS10Target8, 449, kSetPS10_PS11_PS12_PS13,   -51.0f,  160.0f, -10.0f, 993, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS10Target9, 445, kSetPS10_PS11_PS12_PS13,    39.0f,   9.16f, -20.0f, 738, 72, 36, targetStateMZ, false, false, true);
+
 	}
 
 	Police_Maze_Target_Track_Add(kItemPS10Target1,  -240.0f, -80.74f, 145.0f,  -240.0f,  -8.74f, 145.0f, 15, getPoliceMazePS10TrackData1(), false);
@@ -407,49 +490,48 @@ bool SceneScriptPS10::ClickedOnItem(int itemId, bool combatMode) {
 	if (Player_Query_Combat_Mode()) {
 		switch (itemId) {
 		case kItemPS10Target4:
-			Sound_Play(4, 50, 0, 0, 50);
-			break;
-		case kItemPS10Target5:
-			Sound_Play(555, 50, 0, 0, 50);
+			Sound_Play(4, 50, 0, 0, 50);    // FEMHURT2
 			break;
+		case kItemPS10Target5:              // fall-through
 		case kItemPS10Target7:
-			Sound_Play(555, 50, 0, 0, 50);
+			Sound_Play(555, 50, 0, 0, 50);  // MALEHURT
 			break;
 		default:
-			Sound_Play(2, 12, 0, 0, 50);
+			Sound_Play(2, 12, 0, 0, 50);    // SPINNY1
 			break;
 		}
+
+#if BLADERUNNER_ORIGINAL_BUGS
 		Item_Spin_In_World(itemId);
-		if (itemId == kItemPS10Target1) {
-			Item_Flag_As_Non_Target(kItemPS10Target1);
-			Item_Flag_As_Non_Target(kItemPS10Target2);
-		}
-		if (itemId == kItemPS10Target2) {
+#endif // BLADERUNNER_ORIGINAL_BUGS
+		switch (itemId) {
+		case kItemPS10Target1:              // fall through // treated the same as kItemPS10Target2 (In the original code they are the same target in different tracks)
+		case kItemPS10Target2:
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+			if (Item_Query_Visible(kItemPS10Target1)) { // without this check, target2 seems to get the spinning while the visible target1 stays put
+				Item_Spin_In_World(kItemPS10Target1);
+			} else {
+				Item_Spin_In_World(kItemPS10Target2);
+			}
+#endif // BLADERUNNER_ORIGINAL_BUGS
 			Item_Flag_As_Non_Target(kItemPS10Target1);
 			Item_Flag_As_Non_Target(kItemPS10Target2);
-		}
-		if (itemId == kItemPS10Target3) {
-			Item_Flag_As_Non_Target(kItemPS10Target3);
-		}
-		if (itemId == kItemPS10Target4) {
-			Item_Flag_As_Non_Target(kItemPS10Target4);
-		}
-		if (itemId == kItemPS10Target5) {
-			Item_Flag_As_Non_Target(kItemPS10Target5);
-		}
-		if (itemId == kItemPS10Target6) {
-			Item_Flag_As_Non_Target(kItemPS10Target6);
-		}
-		if (itemId == kItemPS10Target7) {
-			Item_Flag_As_Non_Target(kItemPS10Target7);
-		}
-		if (itemId == kItemPS10Target8) {
-			Item_Flag_As_Non_Target(kItemPS10Target8);
-		}
-		if (itemId == kItemPS10Target9) {
-			Item_Flag_As_Non_Target(kItemPS10Target9);
-		} else {
+			break;
+		case kItemPS10Target3:              // fall through
+		case kItemPS10Target4:              // fall through
+		case kItemPS10Target5:              // fall through
+		case kItemPS10Target6:              // fall through
+		case kItemPS10Target7:              // fall through
+		case kItemPS10Target8:              // fall through
+		case kItemPS10Target9:              // fall through
+		default:
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+			Item_Spin_In_World(itemId);
+#endif // BLADERUNNER_ORIGINAL_BUGS
 			Item_Flag_As_Non_Target(itemId);
+			break;
 		}
 		return true;
 	}
diff --git a/engines/bladerunner/script/scene/ps11.cpp b/engines/bladerunner/script/scene/ps11.cpp
index 5d70167..a8a9a39 100644
--- a/engines/bladerunner/script/scene/ps11.cpp
+++ b/engines/bladerunner/script/scene/ps11.cpp
@@ -25,6 +25,10 @@
 namespace BladeRunner {
 
 static int kPoliceMazePS11TargetCount = 20;
+int SceneScriptPS11::getPoliceMazePS11TargetCount() {
+	return kPoliceMazePS11TargetCount;
+}
+
 
 void SceneScriptPS11::InitializeScene() {
 	if (Game_Flag_Query(kFlagPS10toPS11)) {
@@ -40,10 +44,15 @@ void SceneScriptPS11::InitializeScene() {
 	Scene_Exit_Add_2D_Exit(1, 0,   0,  20, 479, 3);
 }
 
-static const int *getPoliceMazePS11TrackData9() {
+static const int *getPoliceMazePS11TrackData9() {   // Enemy (kItemPS11Target1)
 	static int trackData[] = {
 		kPMTIActivate,        kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
 		kPMTIVariableInc,     kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target1, 0,  // remove target-able here
+		kPMTIEnemyReset,      kItemPS11Target1,
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset,   kItemPS11Target1,
 		kPMTIFacing,          50,
 		kPMTIPosition,        0,
@@ -59,6 +68,10 @@ static const int *getPoliceMazePS11TrackData9() {
 		kPMTIMove,            0,
 		kPMTIWait,            500,
 		kPMTIObstacleReset,   kItemPS11Target1,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target1, 0,  // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPausedReset1of2, kItemPS11Target7, kItemPS11Target2,
 		kPMTIPausedSet,       kItemPS11Target1,
 		kPMTIRestart
@@ -66,10 +79,15 @@ static const int *getPoliceMazePS11TrackData9() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS11TrackData10() {
+static const int *getPoliceMazePS11TrackData10() {  // Enemy (kItemPS11Target2, kItemPS11Target3)
 	static int trackData[] = {
 		kPMTIActivate,      kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
 		kPMTIVariableInc,   kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS11Target2, 0,    // remove target-able here
+		kPMTITargetSet,     kItemPS11Target3, 0,    // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset, kItemPS11Target2,
 		kPMTIObstacleReset, kItemPS11Target3,
 		kPMTITargetSet,     kItemPS11Target2, 1,
@@ -78,12 +96,20 @@ static const int *getPoliceMazePS11TrackData10() {
 		kPMTIPosition,      0,
 		kPMTIWaitRandom,    3000, 6000,
 		kPMTIEnemyReset,    kItemPS11Target2,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTIEnemyReset,    kItemPS11Target3,       // both targets should clear their enemy flag here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleSet,   kItemPS11Target2,
 		kPMTIPlaySound,     33, 33,
 		kPMTIMove,          14,
 		kPMTIWait,          500,
 		kPMTIPausedReset,   kItemPS11Target3,
 		kPMTIObstacleReset, kItemPS11Target2,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS11Target2, 0,    // remove target-able here - only for kItemPS11Target2 item
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleSet,   kItemPS11Target3,
 		kPMTIPausedSet,     kItemPS11Target2,
 		kPMTIPosition,      0,
@@ -92,15 +118,15 @@ static const int *getPoliceMazePS11TrackData10() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS11TrackData11() {
+// TODO - into look possible bug
+static const int *getPoliceMazePS11TrackData11() {  // Innocent (kItemPS11Target2, kItemPS11Target3)
 	static int trackData[] = {
 		kPMTIFacing,          860,
 		kPMTIPosition,        0,
-		kPMTIEnemyReset,      kItemPS11Target3,
-		kPMTIObstacleSet,     kItemPS11Target3,
+		kPMTIEnemyReset,      kItemPS11Target3,		// [redundant after bug fix] target 2-3 still is not revealed as enemy
 		kPMTIMove,            25,
 		kPMTIWait,            500,
-		kPMTIEnemySet,        kItemPS11Target3,
+		kPMTIEnemySet,        kItemPS11Target3,		// no need to set target 2 as enemy too, since it's gone
 		kPMTIPlaySound,       32, 33,
 		kPMTIRotate,          644, 80,
 		kPMTIWait,            0,
@@ -109,7 +135,11 @@ static const int *getPoliceMazePS11TrackData11() {
 		kPMTIShoot,           12, 33,
 		kPMTIMove,            79,
 		kPMTIObstacleReset,   kItemPS11Target3,
-		kPMTIPausedReset1of2, kItemPS11Target7, kItemPS10Target9,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target3, 0,  // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
+		kPMTIPausedReset1of2, kItemPS11Target7, kItemPS11Target1,
 		kPMTIPausedSet,       kItemPS11Target3,
 		kPMTIPosition,        0,
 		kPMTIFacing,          860,
@@ -118,10 +148,14 @@ static const int *getPoliceMazePS11TrackData11() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS11TrackData12() {
+static const int *getPoliceMazePS11TrackData12() {  // Innocent (kItemPS11Target4)
 	static int trackData[] = {
 		kPMTIActivate,      kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
 		kPMTIVariableInc,   kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS11Target4, 0,    // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset, kItemPS11Target4,
 		kPMTIFacing,        725,
 		kPMTIPosition,      0,
@@ -130,7 +164,9 @@ static const int *getPoliceMazePS11TrackData12() {
 		kPMTIEnemyReset,    kItemPS11Target4,
 		kPMTIObstacleSet,   kItemPS11Target4,
 		kPMTIMove,          82,
+#if BLADERUNNER_ORIGINAL_BUGS
 		kPMTILeave,
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIWait,          1000,
 		kPMTIRotate,        570, 80,
 		kPMTIWait,          0,
@@ -142,7 +178,12 @@ static const int *getPoliceMazePS11TrackData12() {
 		kPMTIRotate,        725, 80,
 		kPMTIMove,          99,
 		kPMTIObstacleReset, kItemPS11Target4,
-		kPMTIPausedReset,   27,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTILeave,                                 // Do the leave instruction here, before becoming un-target-able
+		kPMTITargetSet,     kItemPS11Target4, 0,    // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
+		kPMTIPausedReset,   kItemPS11Target16,
 		kPMTIPausedSet,     kItemPS11Target4,
 		kPMTIPosition,      0,
 		kPMTIRestart
@@ -150,10 +191,15 @@ static const int *getPoliceMazePS11TrackData12() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS11TrackData13() {
+static const int *getPoliceMazePS11TrackData13() {  // Enemy (kItemPS11Target5)
 	static int trackData[] = {
 		kPMTIActivate,        kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
 		kPMTIVariableInc,     kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target5, 0,  // remove target-able here
+		kPMTIEnemyReset,      kItemPS11Target5,
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset,   kItemPS11Target5,
 		kPMTIFacing,          340,
 		kPMTIPosition,        0,
@@ -184,6 +230,10 @@ static const int *getPoliceMazePS11TrackData13() {
 		kPMTIPlaySound,       34, 33,
 		kPMTIMove,            0,
 		kPMTIObstacleReset,   kItemPS11Target5,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target5, 0,  // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPausedReset1of2, kItemPS11Target6, kItemPS11Target10,
 		kPMTIPausedSet,       kItemPS11Target5,
 		kPMTIRestart
@@ -191,10 +241,14 @@ static const int *getPoliceMazePS11TrackData13() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS11TrackData14() {
+static const int *getPoliceMazePS11TrackData14() {  // Enemy (kItemPS11Target6)
 	static int trackData[] = {
 		kPMTIActivate,        kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
 		kPMTIVariableInc,     kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target6, 0,  // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset,   kItemPS11Target6,
 		kPMTITargetSet,       kItemPS11Target6, 1,
 		kPMTIEnemyReset,      kItemPS11Target6,
@@ -214,6 +268,10 @@ static const int *getPoliceMazePS11TrackData14() {
 		kPMTIPlaySound,       34, 33,
 		kPMTIMove,            0,
 		kPMTIObstacleReset,   kItemPS11Target6,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target6, 0,  // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPausedReset1of2, kItemPS11Target10, kItemPS11Target5,
 		kPMTIPausedSet,       kItemPS11Target6,
 		kPMTIRestart
@@ -221,10 +279,15 @@ static const int *getPoliceMazePS11TrackData14() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS11TrackData15() {
+static const int *getPoliceMazePS11TrackData15() {  // Innocent (kItemPS11Target7, kItemPS11Target8)
 	static int trackData[] = {
 		kPMTIActivate,      kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
 		kPMTIVariableInc,   kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS11Target7, 0,    // remove target-able here
+		kPMTITargetSet,     kItemPS11Target8, 0,    // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset, kItemPS11Target7,
 		kPMTIObstacleReset, kItemPS11Target8,
 		kPMTITargetSet,     kItemPS11Target7, 1,
@@ -233,13 +296,24 @@ static const int *getPoliceMazePS11TrackData15() {
 		kPMTIPosition,      0,
 		kPMTIWaitRandom,    3000, 7000,
 		kPMTIObstacleSet,   kItemPS11Target7,
-		kPMTIPlaySound,     29, 33,
+		kPMTIPlaySound,     29, 33,                 // TARGUP1
 		kPMTIEnemyReset,    kItemPS11Target7,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTIEnemyReset,    kItemPS11Target8,       // both targets should clear their enemy flag here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIMove,          14,
-		kPMTILeave,
+
+#if BLADERUNNER_ORIGINAL_BUGS
+		kPMTILeave,                                 // TODO MAZE A bug? intended? - Why do a LEAVE here is its track is continued with kItemPS11Target8? (would result to re-credit another point with the later leave instruction for kItemPS11Target8)
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIWait,          1000,
 		kPMTIPausedReset,   kItemPS11Target8,
 		kPMTIObstacleReset, kItemPS11Target7,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS11Target7, 0,    // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleSet,   kItemPS11Target8,
 		kPMTIPausedSet,     kItemPS11Target7,
 		kPMTIPosition,      0,
@@ -248,7 +322,7 @@ static const int *getPoliceMazePS11TrackData15() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS11TrackData16() {
+static const int *getPoliceMazePS11TrackData16() {  // Innocent (kItemPS11Target7, kItemPS11Target8)
 	static int trackData[] = {
 		kPMTIFacing,          860,
 		kPMTIPosition,        0,
@@ -264,6 +338,10 @@ static const int *getPoliceMazePS11TrackData16() {
 		kPMTIMove,            79,
 		kPMTILeave,
 		kPMTIObstacleReset,   kItemPS11Target8,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target8, 0,  // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPausedReset1of2, kItemPS11Target2, kItemPS11Target1,
 		kPMTIPausedSet,       kItemPS11Target8,
 		kPMTIPosition,        0,
@@ -273,32 +351,53 @@ static const int *getPoliceMazePS11TrackData16() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS11TrackData17() {
+static const int *getPoliceMazePS11TrackData17() {  // Enemy (kItemPS11Target9)
 	static int trackData[] = {
 		kPMTIActivate,        kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
 		kPMTIVariableInc,     kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target9, 0,  // remove target-able here
+		kPMTIObstacleReset,   kItemPS11Target9,
+		kPMTIEnemyReset,      kItemPS11Target9,
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIFacing,          310,
 		kPMTIPosition,        0,
+#if BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleSet,     kItemPS11Target9,
 		kPMTITargetSet,       kItemPS11Target9, 1,
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIEnemySet,        kItemPS11Target9,
 		kPMTIWaitRandom,      4000, 8000,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTIObstacleSet,     kItemPS11Target9,
+		kPMTITargetSet,       kItemPS11Target9, 1,
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPlaySound,       32, 33,
 		kPMTIMove,            10,
 		kPMTIWait,            0,
 		kPMTIShoot,           27, 33,
 		kPMTIMove,            0,
-		kPMTITargetSet,       kItemPS11Target9, 1,
+#if BLADERUNNER_ORIGINAL_BUGS
+		kPMTITargetSet,       kItemPS11Target9, 1,  // TODO MAZE A bug? intended? Reseting the target-able status would result in multiple credits same target
 		kPMTIEnemySet,        kItemPS11Target9,
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIMove,            24,
-		kPMTITargetSet,       kItemPS11Target9, 1,
+#if BLADERUNNER_ORIGINAL_BUGS
+		kPMTITargetSet,       kItemPS11Target9, 1,  // TODO MAZE A bug? intended? Reseting the target-able status would result in multiple credits same target
 		kPMTIEnemySet,        kItemPS11Target9,
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIMove,            10,
 		kPMTIWait,            0,
 		kPMTIShoot,           27, 33,
 		kPMTIMove,            24,
 		kPMTIWait,            1000,
 		kPMTIObstacleReset,   kItemPS11Target9,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target9, 0,  // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPausedReset1of2, kItemPS11Target15, kItemPS11Target14,
 		kPMTIPausedSet,       kItemPS11Target9,
 		kPMTIPosition,        0,
@@ -307,10 +406,15 @@ static const int *getPoliceMazePS11TrackData17() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS11TrackData18() {
+static const int *getPoliceMazePS11TrackData18() {  // Enemy (kItemPS11Target10, kItemPS11Target11)
 	static int trackData[] = {
 		kPMTIActivate,      kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
 		kPMTIVariableInc,   kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS11Target10, 0,   // remove target-able here
+		kPMTITargetSet,     kItemPS11Target11, 0,   // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset, kItemPS11Target10,
 		kPMTIObstacleReset, kItemPS11Target11,
 		kPMTIFacing,        900,
@@ -318,21 +422,37 @@ static const int *getPoliceMazePS11TrackData18() {
 		kPMTITargetSet,     kItemPS11Target10, 1,
 		kPMTITargetSet,     kItemPS11Target11, 1,
 		kPMTIEnemyReset,    kItemPS11Target10,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTIEnemyReset,    kItemPS11Target11,      // both targets should clear their enemy flag here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIWaitRandom,    4000, 6000,
 		kPMTIObstacleSet,   kItemPS11Target10,
 		kPMTIMove,          5,
-		kPMTIPlaySound,     kItemPS11Target11, 33,
-		kPMTIPlaySound,     3, 33,
+		kPMTIPlaySound,     19, 33,                 // RICO3
+#if BLADERUNNER_ORIGINAL_BUGS
+		kPMTIPlaySound,     3, 33,                  // FEMHURT1
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIWait,          1000,
-		kPMTILeave,
+#if BLADERUNNER_ORIGINAL_BUGS
+		kPMTILeave,                                 // TODO MAZE A bug? intended?  this target track is not for an innocent target, why credit a point here while the target is not revealed?
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIRotate,        700, 80,
 		kPMTIEnemySet,      kItemPS11Target10,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTIEnemySet,      kItemPS11Target11,      // both targets should set their enemy flag here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIWait,          0,
 		kPMTIRotate,        512, 200,
 		kPMTIWait,          1000,
 		kPMTIShoot,         12, 33,
 		kPMTIPausedReset,   kItemPS11Target11,
 		kPMTIObstacleReset, kItemPS11Target10,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,     kItemPS11Target10, 0,   // remove target-able here only for kItemPS11Target10
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleSet,   kItemPS11Target11,
 		kPMTIPausedSet,     kItemPS11Target10,
 		kPMTIPosition,      0,
@@ -341,15 +461,17 @@ static const int *getPoliceMazePS11TrackData18() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS11TrackData19() {
+static const int *getPoliceMazePS11TrackData19() {  // Enemy (kItemPS11Target10, kItemPS11Target11)
 	static int trackData[] = {
 		kPMTIFacing,          512,
 		kPMTIPosition,        0,
 		kPMTIEnemySet,        kItemPS11Target11,
 		kPMTIMove,            8,
 		kPMTIWait,            4000,
-		kPMTITargetSet,       kItemPS11Target11, 1,
+#if BLADERUNNER_ORIGINAL_BUGS
+		kPMTITargetSet,       kItemPS11Target11, 1, // TODO MAZE A bug? intended?
 		kPMTIEnemySet,        kItemPS11Target11,
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIMove,            2,
 		kPMTIPlaySound,       32, 33,
 		kPMTIWait,            1000,
@@ -357,6 +479,10 @@ static const int *getPoliceMazePS11TrackData19() {
 		kPMTIMove,            kItemPS11Target11,
 		kPMTIWait,            500,
 		kPMTIObstacleReset,   kItemPS11Target11,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target11, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPausedReset1of2, kItemPS11Target5, kItemPS11Target6,
 		kPMTIPausedSet,       kItemPS11Target11,
 		kPMTIPosition,        0,
@@ -365,10 +491,14 @@ static const int *getPoliceMazePS11TrackData19() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS11TrackData20() {
+static const int *getPoliceMazePS11TrackData20() {  // Enemy (kItemPS11Target12)
 	static int trackData[] = {
 		kPMTIActivate,        kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
 		kPMTIVariableInc,     kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target12, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset,   kItemPS11Target12,
 		kPMTIFacing,          280,
 		kPMTIPosition,        0,
@@ -382,6 +512,10 @@ static const int *getPoliceMazePS11TrackData20() {
 		kPMTIShoot,           27, 33,
 		kPMTIMove,            0,
 		kPMTIObstacleReset,   kItemPS11Target12,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target12, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPausedReset1of2, kItemPS11Target13, kItemPS11Target4,
 		kPMTIPausedSet,       kItemPS11Target12,
 		kPMTIPosition,        0,
@@ -390,10 +524,14 @@ static const int *getPoliceMazePS11TrackData20() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS11TrackData21() {
+static const int *getPoliceMazePS11TrackData21() {  // Innocent (kItemPS11Target13)
 	static int trackData[] = {
 		kPMTIActivate,        kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
 		kPMTIVariableInc,     kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target13, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset,   kItemPS11Target13,
 		kPMTIFacing,          280,
 		kPMTIPosition,        0,
@@ -402,10 +540,17 @@ static const int *getPoliceMazePS11TrackData21() {
 		kPMTIEnemyReset,      kItemPS11Target13,
 		kPMTIObstacleSet,     kItemPS11Target13,
 		kPMTIMove,            5,
+#if BLADERUNNER_ORIGINAL_BUGS
 		kPMTILeave,
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIWait,            1000,
 		kPMTIMove,            0,
 		kPMTIObstacleReset,   kItemPS11Target13,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTILeave,                                 // Do the leave instruction here instead
+		kPMTITargetSet,       kItemPS11Target13, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPausedReset1of2, kItemPS11Target12, kItemPS11Target4,
 		kPMTIPausedSet,       kItemPS11Target13,
 		kPMTIPosition,        0,
@@ -414,10 +559,14 @@ static const int *getPoliceMazePS11TrackData21() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS11TrackData22() {
+static const int *getPoliceMazePS11TrackData22() {  // Enemy (kItemPS11Target14)
 	static int trackData[] = {
 		kPMTIActivate,        kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
 		kPMTIVariableInc,     kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target14, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset,   kItemPS11Target14,
 		kPMTIFacing,          255,
 		kPMTIPosition,        0,
@@ -431,6 +580,10 @@ static const int *getPoliceMazePS11TrackData22() {
 		kPMTIShoot,           12, 33,
 		kPMTIMove,            0,
 		kPMTIObstacleReset,   kItemPS11Target14,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target14, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPausedReset1of2, 23, kItemPS11Target9,
 		kPMTIPausedSet,       kItemPS11Target14,
 		kPMTIPosition,        0,
@@ -439,10 +592,14 @@ static const int *getPoliceMazePS11TrackData22() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS11TrackData23() {
+static const int *getPoliceMazePS11TrackData23() {  // Innocent (kItemPS11Target15)
 	static int trackData[] = {
 		kPMTIActivate,        kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
 		kPMTIVariableInc,     kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target15, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset,   kItemPS11Target15,
 		kPMTIFacing,          310,
 		kPMTIPosition,        0,
@@ -456,6 +613,10 @@ static const int *getPoliceMazePS11TrackData23() {
 		kPMTIMove,            0,
 		kPMTILeave,
 		kPMTIObstacleReset,   kItemPS11Target15,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target15, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPausedReset1of2, kItemPS11Target14, kItemPS11Target9,
 		kPMTIPausedSet,       kItemPS11Target15,
 		kPMTIPosition,        0,
@@ -464,10 +625,14 @@ static const int *getPoliceMazePS11TrackData23() {
 	return trackData;
 }
 
-static const int *getPoliceMazePS11TrackData27() {
+static const int *getPoliceMazePS11TrackData27() {  // Enemy (kItemPS11Target16)
 	static int trackData[] = {
 		kPMTIActivate,        kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
 		kPMTIVariableInc,     kVariablePoliceMazePS11TargetCounter, kPoliceMazePS11TargetCount,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target16, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIObstacleReset,   kItemPS11Target16,
 		kPMTIFacing,          346,
 		kPMTIPosition,        0,
@@ -480,6 +645,10 @@ static const int *getPoliceMazePS11TrackData27() {
 		kPMTIShoot,           12, 33,
 		kPMTIMove,            0,
 		kPMTIObstacleReset,   kItemPS11Target16,
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+		kPMTITargetSet,       kItemPS11Target16, 0, // remove target-able here
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		kPMTIPausedReset1of2, kItemPS11Target13, kItemPS11Target12,
 		kPMTIPausedSet,       kItemPS11Target16,
 		kPMTIPosition,        0,
@@ -509,22 +678,28 @@ void SceneScriptPS11::SceneLoaded() {
 	Unclickable_Object("PARKMETR16");
 
 	if (!Query_System_Currently_Loading_Game()) {
-		Item_Add_To_World(kItemPS11Target1,  449, kSetPS10_PS11_PS12_PS13,  -450.0f,  -7.5f, 335.0f,  50, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS11Target2,  449, kSetPS10_PS11_PS12_PS13,  -740.0f,  27.0f, -30.0f, 860, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS11Target3,  449, kSetPS10_PS11_PS12_PS13,  -740.0f,  99.0f, -30.0f, 860, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS11Target4,  441, kSetPS10_PS11_PS12_PS13,  -400.0f, -9.23f, -75.0f, 725, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS11Target5,  443, kSetPS10_PS11_PS12_PS13, -803.72f, -72.7f, 60.22f, 340, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS11Target6,  443, kSetPS10_PS11_PS12_PS13,  -853.0f, -70.0f, 195.0f, 900, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS11Target7,  447, kSetPS10_PS11_PS12_PS13,  -740.0f,  27.0f, -30.0f, 860, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS11Target8,  447, kSetPS10_PS11_PS12_PS13,  -740.0f,  99.0f, -30.0f, 860, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS11Target9,  445, kSetPS10_PS11_PS12_PS13,  -888.0f, 155.0f, 100.0f, 310, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS11Target10, 443, kSetPS10_PS11_PS12_PS13,  -430.0f, 164.0f,  11.0f, 900, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS11Target11, 443, kSetPS10_PS11_PS12_PS13,  -430.0f, -0.86f,  11.0f, 512, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS11Target12, 443, kSetPS10_PS11_PS12_PS13,  -891.0f,   3.1f,  90.0f, 280, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS11Target13, 447, kSetPS10_PS11_PS12_PS13,  -891.0f,   3.1f,  90.0f, 280, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS11Target14, 445, kSetPS10_PS11_PS12_PS13,  -891.0f, 171.0f, 190.0f, 255, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS11Target15, 441, kSetPS10_PS11_PS12_PS13,  -888.0f, 155.0f,  30.0f, 310, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS11Target16, 445, kSetPS10_PS11_PS12_PS13,  -800.0f, -9.23f, -75.0f, 346, 72, 36, true, false, false, true);
+		bool targetStateMZ = true;
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+// every maze target begins as NON-targetable
+		targetStateMZ = false;
+#endif // BLADERUNNER_ORIGINAL_BUGS
+		Item_Add_To_World(kItemPS11Target1,  449, kSetPS10_PS11_PS12_PS13,  -450.0f,  -7.5f, 335.0f,  50, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS11Target2,  449, kSetPS10_PS11_PS12_PS13,  -740.0f,  27.0f, -30.0f, 860, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS11Target3,  449, kSetPS10_PS11_PS12_PS13,  -740.0f,  99.0f, -30.0f, 860, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS11Target4,  441, kSetPS10_PS11_PS12_PS13,  -400.0f, -9.23f, -75.0f, 725, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS11Target5,  443, kSetPS10_PS11_PS12_PS13, -803.72f, -72.7f, 60.22f, 340, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS11Target6,  443, kSetPS10_PS11_PS12_PS13,  -853.0f, -70.0f, 195.0f, 900, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS11Target7,  447, kSetPS10_PS11_PS12_PS13,  -740.0f,  27.0f, -30.0f, 860, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS11Target8,  447, kSetPS10_PS11_PS12_PS13,  -740.0f,  99.0f, -30.0f, 860, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS11Target9,  445, kSetPS10_PS11_PS12_PS13,  -888.0f, 155.0f, 100.0f, 310, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS11Target10, 443, kSetPS10_PS11_PS12_PS13,  -430.0f, 164.0f,  11.0f, 900, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS11Target11, 443, kSetPS10_PS11_PS12_PS13,  -430.0f, -0.86f,  11.0f, 512, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS11Target12, 443, kSetPS10_PS11_PS12_PS13,  -891.0f,   3.1f,  90.0f, 280, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS11Target13, 447, kSetPS10_PS11_PS12_PS13,  -891.0f,   3.1f,  90.0f, 280, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS11Target14, 445, kSetPS10_PS11_PS12_PS13,  -891.0f, 171.0f, 190.0f, 255, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS11Target15, 441, kSetPS10_PS11_PS12_PS13,  -888.0f, 155.0f,  30.0f, 310, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS11Target16, 445, kSetPS10_PS11_PS12_PS13,  -800.0f, -9.23f, -75.0f, 346, 72, 36, targetStateMZ, false, false, true);
 	}
 
 	Police_Maze_Target_Track_Add(kItemPS11Target1,   -450.0f,  -7.5f, 335.0f,  -450.0f,  -7.5f, 295.0f,   8, getPoliceMazePS11TrackData9(),   true);
@@ -577,79 +752,80 @@ bool SceneScriptPS11::ClickedOnActor(int actorId) {
 bool SceneScriptPS11::ClickedOnItem(int itemId, bool combatMode) {
 	if (Player_Query_Combat_Mode()) {
 		switch (itemId) {
-		case kItemPS11Target4:
-			Sound_Play(555, 50, 0, 0, 50);
-			break;
-		case kItemPS11Target7:
-			Sound_Play(4, 50, 0, 0, 50);
-			break;
-		case kItemPS11Target8:
-			Sound_Play(4, 50, 0, 0, 50);
+		case kItemPS11Target4:              // fall-through
+		case kItemPS11Target15:
+			Sound_Play(555, 50, 0, 0, 50);  // MALEHURT
 			break;
+		case kItemPS11Target7:              // fall-through
+		case kItemPS11Target8:              // fall-through
 		case kItemPS11Target13:
-			Sound_Play(4, 50, 0, 0, 50);
-			break;
-		case kItemPS11Target15:
-			Sound_Play(555, 50, 0, 0, 50);
+			Sound_Play(4, 50, 0, 0, 50);    // FEMHURT2
 			break;
 		default:
-			Sound_Play(2, 12, 0, 0, 50);
+			Sound_Play(2, 12, 0, 0, 50);    // SPINNY1
 			break;
 		}
+
+#if BLADERUNNER_ORIGINAL_BUGS
 		Item_Spin_In_World(itemId);
-		if (itemId == kItemPS11Target1) {
-			Item_Flag_As_Non_Target(kItemPS11Target1);
-		}
-		if (itemId == kItemPS11Target2) {
-			Item_Flag_As_Non_Target(kItemPS11Target2);
-			Item_Flag_As_Non_Target(kItemPS11Target3);
-		}
-		if (itemId == kItemPS11Target3) {
+#endif
+		switch (itemId) {
+		case kItemPS11Target2:  // fall through
+		case kItemPS11Target3:
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+			if (Item_Query_Visible(kItemPS11Target2)) { // without this check, target2 seems to get the spinning while the visible target1 stays put
+				Item_Spin_In_World(kItemPS11Target2);
+			} else {
+				Item_Spin_In_World(kItemPS11Target3);
+			}
+#endif // BLADERUNNER_ORIGINAL_BUGS
 			Item_Flag_As_Non_Target(kItemPS11Target2);
 			Item_Flag_As_Non_Target(kItemPS11Target3);
-		}
-		if (itemId == kItemPS11Target4) {
-			Item_Flag_As_Non_Target(kItemPS11Target4);
-		}
-		if (itemId == kItemPS11Target5) {
-			Item_Flag_As_Non_Target(kItemPS11Target5);
-		}
-		if (itemId == kItemPS11Target6) {
-			Item_Flag_As_Non_Target(kItemPS11Target6);
-		}
-		if (itemId == kItemPS11Target7) {
-			Item_Flag_As_Non_Target(kItemPS11Target7);
-			Item_Flag_As_Non_Target(kItemPS11Target8);
-		}
-		if (itemId == kItemPS11Target8) {
+			break;
+		case kItemPS11Target7:  // fall through
+		case kItemPS11Target8:
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+			if (Item_Query_Visible(kItemPS11Target7)) { // without this check, target2 seems to get the spinning while the visible target1 stays put
+				Item_Spin_In_World(kItemPS11Target7);
+			} else {
+				Item_Spin_In_World(kItemPS11Target8);
+			}
+#endif // BLADERUNNER_ORIGINAL_BUGS
 			Item_Flag_As_Non_Target(kItemPS11Target7);
 			Item_Flag_As_Non_Target(kItemPS11Target8);
-		}
-		if (itemId == kItemPS11Target9) {
-			Item_Flag_As_Non_Target(kItemPS11Target9);
-		}
-		if (itemId == kItemPS11Target10) {
-			Item_Flag_As_Non_Target(kItemPS11Target10);
-			Item_Flag_As_Non_Target(kItemPS11Target11);
-		}
-		if (itemId == kItemPS11Target11) {
+			break;
+		case kItemPS11Target10: // fall through
+		case kItemPS11Target11:
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+			if (Item_Query_Visible(kItemPS11Target10)) { // without this check, target2 seems to get the spinning while the visible target1 stays put
+				Item_Spin_In_World(kItemPS11Target10);
+			} else {
+				Item_Spin_In_World(kItemPS11Target11);
+			}
+#endif // BLADERUNNER_ORIGINAL_BUGS
 			Item_Flag_As_Non_Target(kItemPS11Target10);
 			Item_Flag_As_Non_Target(kItemPS11Target11);
-		}
-		if (itemId == kItemPS11Target12) {
-			Item_Flag_As_Non_Target(kItemPS11Target12);
-		}
-		if (itemId == kItemPS11Target13) {
-			Item_Flag_As_Non_Target(kItemPS11Target13);
-		}
-		if (itemId == kItemPS11Target14) {
-			Item_Flag_As_Non_Target(kItemPS11Target14);
-		}
-		if (itemId == kItemPS11Target15) {
-			Item_Flag_As_Non_Target(kItemPS11Target15);
-		}
-		if (itemId == kItemPS11Target16) {
-			Item_Flag_As_Non_Target(kItemPS11Target16);
+			break;
+		case kItemPS11Target1:  // fall through
+		case kItemPS11Target4:  // fall through
+		case kItemPS11Target5:  // fall through
+		case kItemPS11Target6:  // fall through
+		case kItemPS11Target9:  // fall through
+		case kItemPS11Target12: // fall through
+		case kItemPS11Target13: // fall through
+		case kItemPS11Target14: // fall through
+		case kItemPS11Target15: // fall through
+		case kItemPS11Target16: // fall through
+		default:
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+			Item_Spin_In_World(itemId);
+#endif
+			Item_Flag_As_Non_Target(itemId);
+			break;
 		}
 		return true;
 	}
diff --git a/engines/bladerunner/script/scene/ps12.cpp b/engines/bladerunner/script/scene/ps12.cpp
index a576de2..bb91275 100644
--- a/engines/bladerunner/script/scene/ps12.cpp
+++ b/engines/bladerunner/script/scene/ps12.cpp
@@ -25,6 +25,10 @@
 namespace BladeRunner {
 
 static int kPoliceMazePS12TargetCount = 20;
+int SceneScriptPS12::getPoliceMazePS12TargetCount() {
+	return kPoliceMazePS12TargetCount;
+}
+
 
 void SceneScriptPS12::InitializeScene() {
 	Police_Maze_Set_Pause_State(true);
@@ -555,23 +559,29 @@ void SceneScriptPS12::SceneLoaded() {
 	Unclickable_Object("PARKMETR16");
 
 	if (!Query_System_Currently_Loading_Game()) {
-		Item_Add_To_World(kItemPS12Target1,  449, kSetPS10_PS11_PS12_PS13,  -691.8f, -9.06f, 587.67f,  200, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS12Target2,  445, kSetPS10_PS11_PS12_PS13,  -679.6f, -45.4f, 721.05f,   67, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS12Target3,  447, kSetPS10_PS11_PS12_PS13, -414.04f, -8.98f, 711.91f,  480, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS12Target4,  443, kSetPS10_PS11_PS12_PS13,  -440.0f, -8.97f, 1137.0f, 1010, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS12Target5,  441, kSetPS10_PS11_PS12_PS13, -764.92f, -0.84f, 950.22f,  540, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS12Target6,  449, kSetPS10_PS11_PS12_PS13,  -696.0f,  -5.7f, 1185.0f,  469, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS12Target7,  449, kSetPS10_PS11_PS12_PS13,  -635.0f,  -5.7f, 1165.0f,  198, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS12Target8,  449, kSetPS10_PS11_PS12_PS13,  -620.0f, -8.63f, 1366.0f,  469, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS12Target9,  447, kSetPS10_PS11_PS12_PS13,  -584.0f, -79.4f,  775.0f, 1010, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS12Target10, 445, kSetPS10_PS11_PS12_PS13,  -578.0f, -79.4f,  810.0f,  990, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS12Target11, 443, kSetPS10_PS11_PS12_PS13,  -400.0f, -12.0f, 1110.0f,  513, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS12Target12, 449, kSetPS10_PS11_PS12_PS13, -414.04f, -8.98f, 711.91f,  480, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS12Target13, 447, kSetPS10_PS11_PS12_PS13,  -400.0f, -12.0f, 1110.0f,  513, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS12Target14, 449, kSetPS10_PS11_PS12_PS13,  -731.0f, 93.66f,  788.0f,  109, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS12Target15, 441, kSetPS10_PS11_PS12_PS13,  -580.0f, -80.0f,  925.0f,  540, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS12Target16, 441, kSetPS10_PS11_PS12_PS13,  -731.0f, 93.66f,  788.0f,  109, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS12Target17, 443, kSetPS10_PS11_PS12_PS13,  -580.0f, -80.0f,  925.0f,  540, 72, 36, true, false, false, true);
+		bool targetStateMZ = true;
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+// every maze target begins as NON-targetable
+		targetStateMZ = false;
+#endif // BLADERUNNER_ORIGINAL_BUGS
+		Item_Add_To_World(kItemPS12Target1,  449, kSetPS10_PS11_PS12_PS13,  -691.8f, -9.06f, 587.67f,  200, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS12Target2,  445, kSetPS10_PS11_PS12_PS13,  -679.6f, -45.4f, 721.05f,   67, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS12Target3,  447, kSetPS10_PS11_PS12_PS13, -414.04f, -8.98f, 711.91f,  480, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS12Target4,  443, kSetPS10_PS11_PS12_PS13,  -440.0f, -8.97f, 1137.0f, 1010, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS12Target5,  441, kSetPS10_PS11_PS12_PS13, -764.92f, -0.84f, 950.22f,  540, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS12Target6,  449, kSetPS10_PS11_PS12_PS13,  -696.0f,  -5.7f, 1185.0f,  469, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS12Target7,  449, kSetPS10_PS11_PS12_PS13,  -635.0f,  -5.7f, 1165.0f,  198, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS12Target8,  449, kSetPS10_PS11_PS12_PS13,  -620.0f, -8.63f, 1366.0f,  469, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS12Target9,  447, kSetPS10_PS11_PS12_PS13,  -584.0f, -79.4f,  775.0f, 1010, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS12Target10, 445, kSetPS10_PS11_PS12_PS13,  -578.0f, -79.4f,  810.0f,  990, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS12Target11, 443, kSetPS10_PS11_PS12_PS13,  -400.0f, -12.0f, 1110.0f,  513, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS12Target12, 449, kSetPS10_PS11_PS12_PS13, -414.04f, -8.98f, 711.91f,  480, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS12Target13, 447, kSetPS10_PS11_PS12_PS13,  -400.0f, -12.0f, 1110.0f,  513, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS12Target14, 449, kSetPS10_PS11_PS12_PS13,  -731.0f, 93.66f,  788.0f,  109, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS12Target15, 441, kSetPS10_PS11_PS12_PS13,  -580.0f, -80.0f,  925.0f,  540, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS12Target16, 441, kSetPS10_PS11_PS12_PS13,  -731.0f, 93.66f,  788.0f,  109, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS12Target17, 443, kSetPS10_PS11_PS12_PS13,  -580.0f, -80.0f,  925.0f,  540, 72, 36, targetStateMZ, false, false, true);
 	}
 	Police_Maze_Target_Track_Add(kItemPS12Target1,   -691.8f, -9.06f, 587.67f, -649.11f, -9.06f, 587.71f,  6, getPoliceMazePS12TrackData29(),  true);
 	Police_Maze_Target_Track_Add(kItemPS12Target2,   -679.6f, -45.4f, 721.05f,  -679.6f,  -1.4f, 721.05f,  6, getPoliceMazePS12TrackData30(),  true);
@@ -624,86 +634,46 @@ bool SceneScriptPS12::ClickedOnActor(int actorId) {
 bool SceneScriptPS12::ClickedOnItem(int itemId, bool a2) {
 	if (Player_Query_Combat_Mode()) {
 		switch (itemId) {
-		case kItemPS12Target3:
-			Sound_Play(4, 50, 0, 0, 50);
-			break;
-		case kItemPS12Target5:
-			Sound_Play(555, 50, 0, 0, 50);
-			break;
-		case kItemPS12Target9:
-			Sound_Play(4, 50, 0, 0, 50);
+		case kItemPS12Target3:              // fall through
+		case kItemPS12Target9:              // fall through
+		case kItemPS12Target13:             // fall through
+			Sound_Play(4, 50, 0, 0, 50);    // FEMHURT2
 			break;
-		case kItemPS12Target13:
-			Sound_Play(4, 50, 0, 0, 50);
-			break;
-		case kItemPS12Target15:
-			Sound_Play(555, 50, 0, 0, 50);
-			break;
-		case kItemPS12Target16:
-			Sound_Play(555, 50, 0, 0, 50);
+		case kItemPS12Target5:              // fall through
+		case kItemPS12Target15:             // fall through
+		case kItemPS12Target16:             // fall through
+			Sound_Play(555, 50, 0, 0, 50);  // MALEHURT
 			break;
 		default:
-			Sound_Play(2, 12, 0, 0, 50);
+			Sound_Play(2, 12, 0, 0, 50);    // SPINNY1
 			break;
 		}
 		Item_Spin_In_World(itemId);
-		Item_Flag_As_Non_Target(itemId);
-		if (itemId == kItemPS12Target1) {
-			Item_Flag_As_Non_Target(kItemPS12Target1);
-		}
-		if (itemId == kItemPS12Target2) {
-			Item_Flag_As_Non_Target(kItemPS12Target2);
-		}
-		if (itemId == kItemPS12Target3) {
-			Item_Flag_As_Non_Target(kItemPS12Target3);
-		}
-		if (itemId == kItemPS12Target4) {
-			Item_Flag_As_Non_Target(kItemPS12Target4);
-		}
-		if (itemId == kItemPS12Target5) {
-			Item_Flag_As_Non_Target(kItemPS12Target5);
-		}
-		if (itemId == kItemPS12Target6) {
-			Item_Flag_As_Non_Target(kItemPS12Target6);
-			Item_Flag_As_Non_Target(kItemPS12Target7);
-			Item_Flag_As_Non_Target(kItemPS12Target8);
-		}
-		if (itemId == kItemPS12Target7) {
-			Item_Flag_As_Non_Target(kItemPS12Target6);
-			Item_Flag_As_Non_Target(kItemPS12Target7);
-			Item_Flag_As_Non_Target(kItemPS12Target8);
-		}
-		if (itemId == kItemPS12Target8) {
+		switch (itemId) {
+		case kItemPS12Target6:              // fall-through
+		case kItemPS12Target7:              // fall-through
+		case kItemPS12Target8:
 			Item_Flag_As_Non_Target(kItemPS12Target6);
 			Item_Flag_As_Non_Target(kItemPS12Target7);
 			Item_Flag_As_Non_Target(kItemPS12Target8);
-		}
-		if (itemId == kItemPS12Target9) {
-			Item_Flag_As_Non_Target(kItemPS12Target9);
-		}
-		if (itemId == kItemPS12Target10) {
-			Item_Flag_As_Non_Target(kItemPS12Target10);
-		}
-		if (itemId == kItemPS12Target11) {
-			Item_Flag_As_Non_Target(kItemPS12Target11);
-		}
-		if (itemId == kItemPS12Target12) {
-			Item_Flag_As_Non_Target(kItemPS12Target12);
-		}
-		if (itemId == kItemPS12Target13) {
-			Item_Flag_As_Non_Target(kItemPS12Target13);
-		}
-		if (itemId == kItemPS12Target14) {
-			Item_Flag_As_Non_Target(kItemPS12Target14);
-		}
-		if (itemId == kItemPS12Target15) {
-			Item_Flag_As_Non_Target(kItemPS12Target15);
-		}
-		if (itemId == kItemPS12Target16) {
-			Item_Flag_As_Non_Target(kItemPS12Target16);
-		}
-		if (itemId == kItemPS12Target17) {
-			Item_Flag_As_Non_Target(kItemPS12Target17);
+			break;
+		case kItemPS12Target1:              // fall-through
+		case kItemPS12Target2:              // fall-through
+		case kItemPS12Target3:              // fall-through
+		case kItemPS12Target4:              // fall-through
+		case kItemPS12Target5:              // fall-through
+		case kItemPS12Target9:              // fall-through
+		case kItemPS12Target10:             // fall-through
+		case kItemPS12Target11:             // fall-through
+		case kItemPS12Target12:             // fall-through
+		case kItemPS12Target13:             // fall-through
+		case kItemPS12Target14:             // fall-through
+		case kItemPS12Target15:             // fall-through
+		case kItemPS12Target16:             // fall-through
+		case kItemPS12Target17:             // fall-through
+		default:
+			Item_Flag_As_Non_Target(itemId);
+			break;
 		}
 		return true;
 	}
diff --git a/engines/bladerunner/script/scene/ps13.cpp b/engines/bladerunner/script/scene/ps13.cpp
index 26cf31b..7454d42 100644
--- a/engines/bladerunner/script/scene/ps13.cpp
+++ b/engines/bladerunner/script/scene/ps13.cpp
@@ -26,6 +26,10 @@ namespace BladeRunner {
 
 static int kPoliceMazePS13TargetCount = 20;
 
+int SceneScriptPS13::getPoliceMazePS13TargetCount() {
+	return kPoliceMazePS13TargetCount;
+}
+
 void SceneScriptPS13::InitializeScene() {
 	Police_Maze_Set_Pause_State(true);
 	if (Game_Flag_Query(kFlagPS12toPS13)) {
@@ -479,21 +483,27 @@ void SceneScriptPS13::SceneLoaded() {
 	Unclickable_Object("PARKMETR16");
 
 	if (!Query_System_Currently_Loading_Game()) {
-		Item_Add_To_World(kItemPS13Target1,  443, kSetPS10_PS11_PS12_PS13, -372.0f,   -9.0f,  1509.0f, 960, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS13Target2,  443, kSetPS10_PS11_PS12_PS13, 291.61f,  -0.66f,  1610.3f, 823, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS13Target3,  447, kSetPS10_PS11_PS12_PS13,  -25.0f,  102.0f,  1625.0f, 823, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS13Target4,  449, kSetPS10_PS11_PS12_PS13, -45.51f,   -8.8f,  1676.0f, 922, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS13Target5,  447, kSetPS10_PS11_PS12_PS13, 291.61f,  -0.66f,  1610.3f, 823, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS13Target6,  443, kSetPS10_PS11_PS12_PS13,  -24.0f,  102.0f,  1625.0f, 823, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS13Target7,  449, kSetPS10_PS11_PS12_PS13,  180.0f,  -72.7f,  1605.0f, 305, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS13Target8,  443, kSetPS10_PS11_PS12_PS13, 127.79f,  14.56f, 1703.03f, 356, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS13Target9,  443, kSetPS10_PS11_PS12_PS13, 136.37f,  -6.84f, 1425.43f, 512, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS13Target10, 441, kSetPS10_PS11_PS12_PS13,  77.83f,  -79.8f,  1520.5f, 327, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS13Target11, 441, kSetPS10_PS11_PS12_PS13,  77.83f,   -7.8f,  1520.5f, 327, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS13Target12, 443, kSetPS10_PS11_PS12_PS13,  -88.0f,   -8.8f,  1520.5f, 327, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS13Target13, 447, kSetPS10_PS11_PS12_PS13, -45.51f,   -8.8f,  1676.0f, 922, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS13Target14, 445, kSetPS10_PS11_PS12_PS13, -300.0f, -79.75f,  1543.0f, 465, 72, 36, true, false, false, true);
-		Item_Add_To_World(kItemPS13Target15, 449, kSetPS10_PS11_PS12_PS13, -325.0f,  -7.75f,  1543.0f, 465, 72, 36, true, false, false, true);
+		bool targetStateMZ = true;
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+// every maze target begins as NON-targetable
+		targetStateMZ = false;
+#endif // BLADERUNNER_ORIGINAL_BUGS
+		Item_Add_To_World(kItemPS13Target1,  443, kSetPS10_PS11_PS12_PS13, -372.0f,   -9.0f,  1509.0f, 960, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS13Target2,  443, kSetPS10_PS11_PS12_PS13, 291.61f,  -0.66f,  1610.3f, 823, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS13Target3,  447, kSetPS10_PS11_PS12_PS13,  -25.0f,  102.0f,  1625.0f, 823, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS13Target4,  449, kSetPS10_PS11_PS12_PS13, -45.51f,   -8.8f,  1676.0f, 922, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS13Target5,  447, kSetPS10_PS11_PS12_PS13, 291.61f,  -0.66f,  1610.3f, 823, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS13Target6,  443, kSetPS10_PS11_PS12_PS13,  -24.0f,  102.0f,  1625.0f, 823, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS13Target7,  449, kSetPS10_PS11_PS12_PS13,  180.0f,  -72.7f,  1605.0f, 305, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS13Target8,  443, kSetPS10_PS11_PS12_PS13, 127.79f,  14.56f, 1703.03f, 356, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS13Target9,  443, kSetPS10_PS11_PS12_PS13, 136.37f,  -6.84f, 1425.43f, 512, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS13Target10, 441, kSetPS10_PS11_PS12_PS13,  77.83f,  -79.8f,  1520.5f, 327, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS13Target11, 441, kSetPS10_PS11_PS12_PS13,  77.83f,   -7.8f,  1520.5f, 327, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS13Target12, 443, kSetPS10_PS11_PS12_PS13,  -88.0f,   -8.8f,  1520.5f, 327, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS13Target13, 447, kSetPS10_PS11_PS12_PS13, -45.51f,   -8.8f,  1676.0f, 922, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS13Target14, 445, kSetPS10_PS11_PS12_PS13, -300.0f, -79.75f,  1543.0f, 465, 72, 36, targetStateMZ, false, false, true);
+		Item_Add_To_World(kItemPS13Target15, 449, kSetPS10_PS11_PS12_PS13, -325.0f,  -7.75f,  1543.0f, 465, 72, 36, targetStateMZ, false, false, true);
 	}
 
 	Police_Maze_Target_Track_Add(kItemPS13Target1,  -372.0f,   -9.0f,  1509.0f, -345.0f,   -9.0f,  1509.0f,  6, getPoliceMazePS13TrackData46(),  true);
@@ -528,74 +538,42 @@ bool SceneScriptPS13::ClickedOnActor(int actorId) {
 bool SceneScriptPS13::ClickedOnItem(int itemId, bool a2) {
 	if (Player_Query_Combat_Mode()) {
 		switch (itemId) {
-		case kItemPS13Target3:
-			Sound_Play(4, 50, 0, 0, 50);
-			break;
+		case kItemPS13Target3:             // fall-through
 		case kItemPS13Target5:
-			Sound_Play(4, 50, 0, 0, 50);
-			break;
-		case kItemPS13Target10:
-			Sound_Play(555, 50, 0, 0, 50);
+			Sound_Play(4, 50, 0, 0, 50);   // FEMHURT2
 			break;
+		case kItemPS13Target10:            // fall-through
 		case kItemPS13Target11:
-			Sound_Play(555, 50, 0, 0, 50);
+			Sound_Play(555, 50, 0, 0, 50); // MALEHURT
 			break;
 		default:
-			Sound_Play(2, 12, 0, 0, 50);
+			Sound_Play(2, 12, 0, 0, 50);   // SPINNY1
 			break;
 		}
 		Item_Spin_In_World(itemId);
-		Item_Flag_As_Non_Target(itemId);
-		if (itemId == kItemPS13Target1) {
-			Item_Flag_As_Non_Target(kItemPS13Target1);
-		}
-		if (itemId == kItemPS13Target2) {
-			Item_Flag_As_Non_Target(kItemPS13Target2);
-		}
-		if (itemId == kItemPS13Target3) {
-			Item_Flag_As_Non_Target(kItemPS13Target3);
-		}
-		if (itemId == kItemPS13Target4) {
-			Item_Flag_As_Non_Target(kItemPS13Target4);
-		}
-		if (itemId == kItemPS13Target5) {
-			Item_Flag_As_Non_Target(kItemPS13Target5);
-		}
-		if (itemId == kItemPS13Target6) {
-			Item_Flag_As_Non_Target(kItemPS13Target6);
-		}
-		if (itemId == kItemPS13Target7) {
-			Item_Flag_As_Non_Target(kItemPS13Target7);
-		}
-		if (itemId == kItemPS13Target8) {
-			Item_Flag_As_Non_Target(kItemPS13Target8);
-		}
-		if (itemId == kItemPS13Target9) {
-			Item_Flag_As_Non_Target(kItemPS13Target9);
-		}
-		if (itemId == kItemPS13Target10) {
-			Item_Flag_As_Non_Target(kItemPS13Target10);
-			Item_Flag_As_Non_Target(kItemPS13Target11);
-			Item_Flag_As_Non_Target(kItemPS13Target12);
-		}
-		if (itemId == kItemPS13Target11) {
-			Item_Flag_As_Non_Target(kItemPS13Target10);
-			Item_Flag_As_Non_Target(kItemPS13Target11);
-			Item_Flag_As_Non_Target(kItemPS13Target12);
-		}
-		if (itemId == kItemPS13Target12) {
+		switch (itemId) {
+		case kItemPS13Target10:            // fall-through
+		case kItemPS13Target11:            // fall-through
+		case kItemPS13Target12:
 			Item_Flag_As_Non_Target(kItemPS13Target10);
 			Item_Flag_As_Non_Target(kItemPS13Target11);
 			Item_Flag_As_Non_Target(kItemPS13Target12);
-		}
-		if (itemId == kItemPS13Target13) {
-			Item_Flag_As_Non_Target(kItemPS13Target13);
-		}
-		if (itemId == kItemPS13Target14) {
-			Item_Flag_As_Non_Target(kItemPS13Target14);
-		}
-		if (itemId == kItemPS13Target15) {
-			Item_Flag_As_Non_Target(kItemPS13Target15);
+			break;
+		case kItemPS13Target1:             // fall-through
+		case kItemPS13Target2:             // fall-through
+		case kItemPS13Target3:             // fall-through
+		case kItemPS13Target4:             // fall-through
+		case kItemPS13Target5:             // fall-through
+		case kItemPS13Target6:             // fall-through
+		case kItemPS13Target7:             // fall-through
+		case kItemPS13Target8:             // fall-through
+		case kItemPS13Target9:             // fall-through
+		case kItemPS13Target13:            // fall-through
+		case kItemPS13Target14:            // fall-through
+		case kItemPS13Target15:            // fall-through
+		default:
+			Item_Flag_As_Non_Target(itemId);
+			break;
 		}
 		return true;
 	}
@@ -621,6 +599,8 @@ bool SceneScriptPS13::ClickedOnExit(int exitId) {
 			removeTargets();
 			Global_Variable_Decrement(kVariablePoliceMazeScore, kPoliceMazePS13TargetCount - Global_Variable_Query(kVariablePoliceMazePS13TargetCounter));
 			Set_Score(kActorMcCoy, Global_Variable_Query(kVariablePoliceMazeScore));
+//			Common::String scoreString = Common::String::format("Final: %03d", Global_Variable_Query(kVariablePoliceMazeScore));
+//			Set_Subtitle_Text_On_Screen(scoreString);
 			Global_Variable_Reset(kVariablePoliceMazePS10TargetCounter);
 			Global_Variable_Reset(kVariablePoliceMazePS11TargetCounter);
 			Global_Variable_Reset(kVariablePoliceMazePS12TargetCounter);
diff --git a/engines/bladerunner/script/scene_script.cpp b/engines/bladerunner/script/scene_script.cpp
index dd68595..521566e 100644
--- a/engines/bladerunner/script/scene_script.cpp
+++ b/engines/bladerunner/script/scene_script.cpp
@@ -21,6 +21,10 @@
  */
 
 #include "bladerunner/script/scene_script.h"
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+#include "bladerunner/items.h"
+#endif // BLADERUNNER_ORIGINAL_BUGS
 
 namespace BladeRunner {
 
@@ -214,6 +218,13 @@ bool SceneScript::clickedOnItem(int itemId, bool combatMode) {
 	if (_inScriptCounter > 0) {
 		return true;
 	}
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+	if (combatMode
+	     && (!_vm->_items->isTarget(itemId) )) { // bugfix for overlapping items, "shooting" the wrong one (untargetable) because the correct one is near enough
+		return true;
+	}
+#endif // BLADERUNNER_ORIGINAL_BUGS
 
 	_inScriptCounter++;
 	bool result = _currentScript->ClickedOnItem(itemId, combatMode);
diff --git a/engines/bladerunner/script/scene_script.h b/engines/bladerunner/script/scene_script.h
index efe31b3..f5abd45 100644
--- a/engines/bladerunner/script/scene_script.h
+++ b/engines/bladerunner/script/scene_script.h
@@ -386,18 +386,26 @@ END_SCRIPT
 
 DECLARE_SCRIPT(PS10)
 	void removeTargets();
+	public:
+	static int getPoliceMazePS10TargetCount();
 END_SCRIPT
 
 DECLARE_SCRIPT(PS11)
 	void removeTargets();
+	public:
+	static int getPoliceMazePS11TargetCount();
 END_SCRIPT
 
 DECLARE_SCRIPT(PS12)
 	void removeTargets();
+	public:
+	static int getPoliceMazePS12TargetCount();
 END_SCRIPT
 
 DECLARE_SCRIPT(PS13)
 	void removeTargets();
+	public:
+	static int getPoliceMazePS13TargetCount();
 END_SCRIPT
 
 DECLARE_SCRIPT(PS14)
diff --git a/engines/bladerunner/script/script.cpp b/engines/bladerunner/script/script.cpp
index aa7308b..63bfa43 100644
--- a/engines/bladerunner/script/script.cpp
+++ b/engines/bladerunner/script/script.cpp
@@ -60,6 +60,7 @@
 #include "bladerunner/ui/vk.h"
 #include "bladerunner/vector.h"
 #include "bladerunner/waypoints.h"
+#include "bladerunner/subtitles.h"
 
 #include "common/debug-channels.h"
 
@@ -768,6 +769,15 @@ void ScriptBase::Item_Remove_From_World(int itemId) {
 	_vm->_items->remove(itemId);
 }
 
+// Show text as subtitles mainly for debugging purposes
+// eg. display debug data on screen as subtitles
+void ScriptBase::Set_Subtitle_Text_On_Screen(Common::String displayText) {
+	debugC(kDebugScript, "Set_Subtitle_Text_On_Screen(%s)", displayText.c_str());
+	_vm->_subtitles->setGameSubsText(displayText, true);
+	_vm->_subtitles->show();
+}
+
+
 void ScriptBase::Item_Spin_In_World(int itemId) {
 	debugC(kDebugScript, "Item_Spin_In_World(%d)", itemId);
 	_vm->_items->spinInWorld(itemId);
@@ -793,6 +803,11 @@ void ScriptBase::Item_Pickup_Spin_Effect(int animationId, int x, int y) {
 	_vm->_itemPickup->setup(animationId, x, y);
 }
 
+bool ScriptBase::Item_Query_Visible(int itemId) {
+	debugC(kDebugScript, "Item_Query_Visible(%d)", itemId);
+	return _vm->_items->isVisible(itemId);
+}
+
 int ScriptBase::Animation_Open() {
 	//This is not implemented in game
 	return -1;
diff --git a/engines/bladerunner/script/script.h b/engines/bladerunner/script/script.h
index 3511461..f52fc52 100644
--- a/engines/bladerunner/script/script.h
+++ b/engines/bladerunner/script/script.h
@@ -123,10 +123,12 @@ protected:
 	void Actor_Set_Immunity_To_Obstacles(int actorId, bool isImmune);
 	void Item_Add_To_World(int itemId, int animationId, int setId, float x, float y, float z, signed int facing, int height, int width, bool isTargetable, bool isObstacle, bool isPoliceMazeEnemy, bool updateOnly);
 	void Item_Remove_From_World(int itemId);
+	void Set_Subtitle_Text_On_Screen(Common::String displayText);
 	void Item_Spin_In_World(int itemId);
 	void Item_Flag_As_Target(int itemId);
 	void Item_Flag_As_Non_Target(int itemId);
 	void Item_Pickup_Spin_Effect(int a1, int a2, int a3);
+	bool Item_Query_Visible(int itemId);
 	int Animation_Open();
 	int Animation_Close();
 	int Animation_Start();





More information about the Scummvm-git-logs mailing list