[Scummvm-git-logs] scummvm master -> d666eb154a027b34302a34d090abbda2cf69ce58

antoniou79 antoniou at cti.gr
Sat May 4 16:27:51 CEST 2019


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

Summary:
a281d68d7b BLADERUNNER: fix legend for walkboxes in debugger
7d2777e1d7 BLADERUNNER: Debugger add box fix
d666eb154a BLADERUNNER: Fix rats re-spawn and UG09, UG13 bad paths


Commit: a281d68d7b6796583d0b3ce7fce1746c3c2321a3
    https://github.com/scummvm/scummvm/commit/a281d68d7b6796583d0b3ce7fce1746c3c2321a3
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-05-04T17:25:34+03:00

Commit Message:
BLADERUNNER: fix legend for walkboxes in debugger

Changed paths:
    engines/bladerunner/debugger.cpp


diff --git a/engines/bladerunner/debugger.cpp b/engines/bladerunner/debugger.cpp
index aa09469..5dde9d4 100644
--- a/engines/bladerunner/debugger.cpp
+++ b/engines/bladerunner/debugger.cpp
@@ -1952,7 +1952,7 @@ void Debugger::drawWalkboxes() {
 			Vector3 start = _vm->_view->calculateScreenPosition(walkbox->vertices[j]);
 			Vector3 end = _vm->_view->calculateScreenPosition(walkbox->vertices[(j + 1) % walkbox->vertexCount]);
 			_vm->_surfaceFront.drawLine(start.x, start.y, end.x, end.y, _vm->_surfaceFront.format.RGBToColor(255, 255, 0));
-			Vector3 pos = _vm->_view->calculateScreenPosition(0.5 * (start + end));
+			Vector3 pos = _vm->_view->calculateScreenPosition(0.5 * (walkbox->vertices[j] + walkbox->vertices[(j + 1) % walkbox->vertexCount]));
 			_vm->_mainFont->drawColor(walkbox->name, _vm->_surfaceFront, pos.x, pos.y, _vm->_surfaceFront.format.RGBToColor(255, 255, 0));
 		}
 	}


Commit: 7d2777e1d7f1abef54272ffb4287e26738a8a554
    https://github.com/scummvm/scummvm/commit/7d2777e1d7f1abef54272ffb4287e26738a8a554
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-05-04T17:25:34+03:00

Commit Message:
BLADERUNNER: Debugger add box fix

Changed paths:
    engines/bladerunner/debugger.cpp
    engines/bladerunner/set_effects.cpp


diff --git a/engines/bladerunner/debugger.cpp b/engines/bladerunner/debugger.cpp
index 5dde9d4..153d8fa 100644
--- a/engines/bladerunner/debugger.cpp
+++ b/engines/bladerunner/debugger.cpp
@@ -1155,8 +1155,8 @@ bool Debugger::cmdObject(int argc, const char **argv) {
 			if (_vm->_scene->_set->_objectCount > 85) { //85 is the size of the _objects array in set.cpp
 				debugPrintf("Unable to add more objects in the set\n");
 			} else {
-				_vm->_scene->_set->_objectCount++;
 				int objectId = _vm->_scene->_set->_objectCount;
+				_vm->_scene->_set->_objectCount++;
 				_vm->_scene->_set->_objects[objectId].name = custObjName.c_str();
 
 				float x0, y0, z0, x1, y1, z1;
diff --git a/engines/bladerunner/set_effects.cpp b/engines/bladerunner/set_effects.cpp
index d54fd2b..72809f9 100644
--- a/engines/bladerunner/set_effects.cpp
+++ b/engines/bladerunner/set_effects.cpp
@@ -67,7 +67,7 @@ void SetEffects::read(Common::ReadStream *stream, int frameCount) {
 			fog = new FogBox();
 			break;
 		default:
-			error("Uknown fog type %d", type);
+			error("Unknown fog type %d", type);
 		}
 		if (fog != nullptr) {
 			fog->read(stream, frameCount);


Commit: d666eb154a027b34302a34d090abbda2cf69ce58
    https://github.com/scummvm/scummvm/commit/d666eb154a027b34302a34d090abbda2cf69ce58
Author: Thanasis Antoniou (a.antoniou79 at gmail.com)
Date: 2019-05-04T17:25:34+03:00

Commit Message:
BLADERUNNER: Fix rats re-spawn and UG09, UG13 bad paths

UG09 bad path allowed McCoy to teleport to the pipe top left. UG13, when elevator was up McCoy could walk in the empty chute

Changed paths:
    engines/bladerunner/actor.cpp
    engines/bladerunner/actor.h
    engines/bladerunner/actor_combat.cpp
    engines/bladerunner/debugger.cpp
    engines/bladerunner/script/ai/bullet_bob.cpp
    engines/bladerunner/script/ai/chew.cpp
    engines/bladerunner/script/ai/crazylegs.cpp
    engines/bladerunner/script/ai/free_slot_a.cpp
    engines/bladerunner/script/ai/free_slot_b.cpp
    engines/bladerunner/script/ai/general_doll.cpp
    engines/bladerunner/script/ai/guzza.cpp
    engines/bladerunner/script/ai/izo.cpp
    engines/bladerunner/script/ai/lucy.cpp
    engines/bladerunner/script/ai/luther.cpp
    engines/bladerunner/script/ai/mccoy.cpp
    engines/bladerunner/script/ai/mutant1.cpp
    engines/bladerunner/script/ai/mutant2.cpp
    engines/bladerunner/script/ai/mutant3.cpp
    engines/bladerunner/script/ai/sadik.cpp
    engines/bladerunner/script/ai/taffy_patron.cpp
    engines/bladerunner/script/scene/ug13.cpp
    engines/bladerunner/set.cpp
    engines/bladerunner/set.h


diff --git a/engines/bladerunner/actor.cpp b/engines/bladerunner/actor.cpp
index fa8a5d9..f0153f8 100644
--- a/engines/bladerunner/actor.cpp
+++ b/engines/bladerunner/actor.cpp
@@ -1122,6 +1122,10 @@ int Actor::getAnimationMode() const {
 	return _animationMode;
 }
 
+int Actor::getAnimationId() const {
+	return _animationId;
+}
+
 void Actor::setGoal(int goalNumber) {
 	int oldGoalNumber = _goalNumber;
 	_goalNumber = goalNumber;
diff --git a/engines/bladerunner/actor.h b/engines/bladerunner/actor.h
index 1177e65..186468b 100644
--- a/engines/bladerunner/actor.h
+++ b/engines/bladerunner/actor.h
@@ -134,6 +134,7 @@ public:
 	Vector3 getXYZ() const;
 	int getFacing() const;
 	int getAnimationMode() const;
+	int getAnimationId() const;
 
 	Vector3 getPosition() const { return _position; }
 
diff --git a/engines/bladerunner/actor_combat.cpp b/engines/bladerunner/actor_combat.cpp
index 47c575f..400e3e7 100644
--- a/engines/bladerunner/actor_combat.cpp
+++ b/engines/bladerunner/actor_combat.cpp
@@ -273,6 +273,11 @@ void ActorCombat::hitAttempt() {
 
 		if (enemyHp <= 0) {
 			if (!enemy->isRetired()) {
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+				// make sure the dead enemy won't pick a pending movement track and re-spawn
+				enemy->_movementTrack->flush();
+#endif
 				if (enemy->inCombat()) {
 					enemy->changeAnimationMode(kAnimationModeCombatDie, false);
 				} else {
diff --git a/engines/bladerunner/debugger.cpp b/engines/bladerunner/debugger.cpp
index 153d8fa..3558659 100644
--- a/engines/bladerunner/debugger.cpp
+++ b/engines/bladerunner/debugger.cpp
@@ -1560,7 +1560,7 @@ bool Debugger::cmdList(int argc, const char **argv) {
 			SceneObjects::SceneObject *sceneObject = &_vm->_sceneObjects->_sceneObjects[_vm->_sceneObjects->_sceneObjectsSortedByDistance[i]];
 
 			if (sceneObject->type == kSceneObjectTypeActor) {
-				debugPrintf("%d: %s (Clk: %s, Trg: %s, Prs: %s, Obs: %s, Mvg: %s), Goal: %d, Pos(%02.2f,%02.2f,%02.2f)\n",
+				debugPrintf("%d: %s (Clk: %s, Trg: %s, Prs: %s, Obs: %s, Mvg: %s), Goal: %d, Animation: %d:%d\n    Pos(%02.2f,%02.2f,%02.2f)\n",
 				             sceneObject->id - kSceneObjectOffsetActors,
 				             _vm->_textActorNames->getText(sceneObject->id - kSceneObjectOffsetActors),
 				             sceneObject->isClickable? "T" : "F",
@@ -1569,6 +1569,8 @@ bool Debugger::cmdList(int argc, const char **argv) {
 				             sceneObject->isObstacle?  "T" : "F",
 				             sceneObject->isMoving?    "T" : "F",
 				             _vm->_actors[sceneObject->id - kSceneObjectOffsetActors]->getGoal(),
+				             _vm->_actors[sceneObject->id - kSceneObjectOffsetActors]->getAnimationMode(),
+				             _vm->_actors[sceneObject->id - kSceneObjectOffsetActors]->getAnimationId(),
 				             _vm->_actors[sceneObject->id - kSceneObjectOffsetActors]->getPosition().x,
 				             _vm->_actors[sceneObject->id - kSceneObjectOffsetActors]->getPosition().y,
 				             _vm->_actors[sceneObject->id - kSceneObjectOffsetActors]->getPosition().z);
diff --git a/engines/bladerunner/script/ai/bullet_bob.cpp b/engines/bladerunner/script/ai/bullet_bob.cpp
index f494624..ee5410a 100644
--- a/engines/bladerunner/script/ai/bullet_bob.cpp
+++ b/engines/bladerunner/script/ai/bullet_bob.cpp
@@ -531,7 +531,7 @@ bool AIScriptBulletBob::ChangeAnimationMode(int mode) {
 		}
 		break;
 
-	case 48:
+	case kAnimationModeDie:
 		_animationState = 4;
 		_animationFrame = 0;
 		break;
diff --git a/engines/bladerunner/script/ai/chew.cpp b/engines/bladerunner/script/ai/chew.cpp
index 6540392..fb60c36 100644
--- a/engines/bladerunner/script/ai/chew.cpp
+++ b/engines/bladerunner/script/ai/chew.cpp
@@ -457,7 +457,7 @@ bool AIScriptChew::ChangeAnimationMode(int mode) {
 		}
 		break;
 
-	case 48:
+	case kAnimationModeDie:
 		_animationFrame = 0;
 		_animationState = 11;
 		break;
diff --git a/engines/bladerunner/script/ai/crazylegs.cpp b/engines/bladerunner/script/ai/crazylegs.cpp
index c2031fc..b4ed739 100644
--- a/engines/bladerunner/script/ai/crazylegs.cpp
+++ b/engines/bladerunner/script/ai/crazylegs.cpp
@@ -36,7 +36,7 @@ void AIScriptCrazylegs::Initialize() {
 
 	_flag = false;
 
-	World_Waypoint_Set(360, 41, -103.0f, 40.63f, -53.0f);
+	World_Waypoint_Set(360, kSetHF05, -103.0f, 40.63f, -53.0f);
 	Actor_Put_In_Set(kActorCrazylegs, kSetHF05);
 	Actor_Set_At_XYZ(kActorCrazylegs, -33.0f, 40.63f, 16.0f, 845);
 }
diff --git a/engines/bladerunner/script/ai/free_slot_a.cpp b/engines/bladerunner/script/ai/free_slot_a.cpp
index 5491f2e..9281e3a 100644
--- a/engines/bladerunner/script/ai/free_slot_a.cpp
+++ b/engines/bladerunner/script/ai/free_slot_a.cpp
@@ -44,8 +44,8 @@ void AIScriptFreeSlotA::Initialize() {
 	_fallHeightCurrent = 0.0f; // not initialized in original
 	_fallHeightTarget = 0.0f; // not initialized in original
 
-	World_Waypoint_Set(525, 45, -780.0f, -615.49f, 2611.0f);
-	World_Waypoint_Set(526, 45, -780.0f, -615.49f, 2759.0f);
+	World_Waypoint_Set(525, kSetKP02, -780.0f, -615.49f, 2611.0f);
+	World_Waypoint_Set(526, kSetKP02, -780.0f, -615.49f, 2759.0f);
 }
 
 bool AIScriptFreeSlotA::Update() {
@@ -97,7 +97,7 @@ bool AIScriptFreeSlotA::Update() {
 			if (Actor_Query_Which_Set_In(kActorFreeSlotA) != Player_Query_Current_Set()) {
 				Game_Flag_Reset(kFlagRatWalkingAround);
 				Game_Flag_Reset(kFlagUG15BridgeWillBreak);
-				Actor_Set_Goal_Number(kActorFreeSlotA, false);
+				Actor_Set_Goal_Number(kActorFreeSlotA, 0);
 			}
 			break;
 
@@ -118,7 +118,7 @@ bool AIScriptFreeSlotA::Update() {
 		} else if (Actor_Query_Goal_Number(kActorFreeSlotA) == 405
 		        && Actor_Query_Which_Set_In(kActorMcCoy) == kSceneKP05
 		) {
-			Actor_Set_Targetable(kActorFreeSlotA, 1);
+			Actor_Set_Targetable(kActorFreeSlotA, true);
 			Actor_Set_Goal_Number(kActorFreeSlotA, 406);
 		}
 		return true;
@@ -213,7 +213,6 @@ bool AIScriptFreeSlotA::ShotAtAndHit() {
 		Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAUG15Die);
 		return true;
 	}
-
 	return false;
 }
 
@@ -236,14 +235,14 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 	case kGoalFreeSlotAUG15WalkOut:
 		Actor_Force_Stop_Walking(kActorMcCoy);
 		AI_Movement_Track_Flush(kActorFreeSlotA);
-		World_Waypoint_Set(444, 87, -48.75f, 44.66f, 87.57f);
+		World_Waypoint_Set(444, kSetUG15, -48.75f, 44.66f, 87.57f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 444, 1);
 		AI_Movement_Track_Repeat(kActorFreeSlotA);
 		break;
 
 	case kGoalFreeSlotAUG15RunToOtherSide:
 		AI_Movement_Track_Flush(kActorFreeSlotA);
-		World_Waypoint_Set(444, 87, -237.0f, 48.07f, 208.0f);
+		World_Waypoint_Set(444, kSetUG15, -237.0f, 48.07f, 208.0f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 444, 1);
 		AI_Movement_Track_Repeat(kActorFreeSlotA);
 		Actor_Set_Targetable(kActorFreeSlotA, true);
@@ -251,7 +250,7 @@ bool AIScriptFreeSlotA::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 
 	case kGoalFreeSlotAUG15RunBack:
 		AI_Movement_Track_Flush(kActorFreeSlotA);
-		World_Waypoint_Set(444, 87, 3.52f, 52.28f, 90.68f);
+		World_Waypoint_Set(444, kSetUG15, 3.52f, 52.28f, 90.68f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 444, 0);
 		AI_Movement_Track_Repeat(kActorFreeSlotA);
 		break;
@@ -407,9 +406,10 @@ bool AIScriptFreeSlotA::UpdateAnimation(int *animation, int *frame) {
 		break;
 
 	case 5:
+		// a bug? This is an animation for Maggie (exploding)
 		*animation = 874;
 		_animationFrame++;
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(874) - 1) { // bug? shuld not be '-1'
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(874) - 1) {
 			Actor_Change_Animation_Mode(kActorFreeSlotA, kAnimationModeIdle);
 		}
 		break;
@@ -430,10 +430,11 @@ bool AIScriptFreeSlotA::UpdateAnimation(int *animation, int *frame) {
 	case 7:
 		*animation = 859;
 		_animationFrame++;
-		if (_animationFrame == 0) {
+		if (_animationFrame == 1) {
 			Ambient_Sounds_Play_Sound(kSfxRATTY5, 99, 0, 0, 25);
 		}
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(859) - 1) { // bug? shuld not be '-1'
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(859) - 1) {
+			// -1 in the clause is ok here since the next _animationState is 8 which will maintain the last frame (Slice_Animation_Query_Number_Of_Frames(859) - 1)
 			_animationFrame = Slice_Animation_Query_Number_Of_Frames(859) - 1;
 			_animationState = 8;
 			Actor_Set_Goal_Number(kActorFreeSlotA, kGoalFreeSlotAGone);
@@ -444,7 +445,6 @@ bool AIScriptFreeSlotA::UpdateAnimation(int *animation, int *frame) {
 		*animation = 859;
 		_animationFrame = Slice_Animation_Query_Number_Of_Frames(859) - 1;
 		break;
-
 	default:
 		break;
 	}
@@ -502,7 +502,7 @@ bool AIScriptFreeSlotA::ChangeAnimationMode(int mode) {
 		_animationFrame = 0;
 		break;
 
-	case 48:
+	case kAnimationModeDie:
 		_animationState = 7;
 		_animationFrame = 0;
 		break;
@@ -558,9 +558,9 @@ void AIScriptFreeSlotA::goToRandomUGxx() {
 		break;
 
 	case 2:
-		World_Waypoint_Set(463, 74, 144.98f, -50.13f, -175.75f);
-		World_Waypoint_Set(464, 74, 105.6f, -50.13f, -578.46f);
-		World_Waypoint_Set(465, 74, 62.0f, -50.13f, -574.0f);
+		World_Waypoint_Set(463, kSetUG01, 144.98f, -50.13f, -175.75f);
+		World_Waypoint_Set(464, kSetUG01, 105.6f, -50.13f, -578.46f);
+		World_Waypoint_Set(465, kSetUG01, 62.0f, -50.13f, -574.0f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
 		AI_Movement_Track_Append(kActorFreeSlotA, 465, 5);
@@ -576,9 +576,9 @@ void AIScriptFreeSlotA::goToRandomUGxx() {
 		break;
 
 	case 4:
-		World_Waypoint_Set(463, 77, -22.7f, 6.39f, 33.12f);
-		World_Waypoint_Set(464, 77, -6.70f, -1.74f, -362.88f);
-		World_Waypoint_Set(465, 77, 164.0f, 11.87f, -1013.0f);
+		World_Waypoint_Set(463, kSetUG04, -22.7f, 6.39f, 33.12f);
+		World_Waypoint_Set(464, kSetUG04, -6.70f, -1.74f, -362.88f);
+		World_Waypoint_Set(465, kSetUG04, 164.0f, 11.87f, -1013.0f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 463, 2);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 0);
 		AI_Movement_Track_Append(kActorFreeSlotA, 465, 0);
@@ -600,64 +600,75 @@ void AIScriptFreeSlotA::goToRandomUGxx() {
 		if (Actor_Query_In_Set(kActorClovis, kSetUG07)) {
 			AI_Movement_Track_Append(kActorFreeSlotA, 39, 10);
 		} else {
-			World_Waypoint_Set(463, 80, -88.78f, -12.21f, -184.08f);
-			World_Waypoint_Set(464, 80, 250.0f, -12.21f, -342.0f);
-			World_Waypoint_Set(465, 80, -164.78f, -12.21f, -832.08f);
+			World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
+			World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
+			World_Waypoint_Set(465, kSetUG07, -164.78f, -12.21f, -832.08f);
 			AI_Movement_Track_Append(kActorFreeSlotA, 463, 5);
 			AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
 		}
 		break;
 
 	case 8:
-		World_Waypoint_Set(463, 80, -88.78f, -12.21f, -184.08f);
-		World_Waypoint_Set(464, 80, 250.0f, -12.21f, -342.0f);
-		World_Waypoint_Set(465, 80, -164.78f, -12.21f, -832.08f);
+		World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
+		World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
+		World_Waypoint_Set(465, kSetUG07, -164.78f, -12.21f, -832.08f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 5);
 		AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
 		break;
 
 	case 9:
-		World_Waypoint_Set(463, 80, -88.78f, -12.21f, -184.08f);
-		World_Waypoint_Set(464, 80, 250.0f, -12.21f, -342.0f);
-		World_Waypoint_Set(465, 80, -164.78f, -12.21f, -832.08f);
+		World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
+		World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
+		World_Waypoint_Set(465, kSetUG07, -164.78f, -12.21f, -832.08f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 5);
 		AI_Movement_Track_Append(kActorFreeSlotA, 465, 1);
 		break;
 
 	case 10:
-		World_Waypoint_Set(463, 80, -88.78f, -12.21f, -184.08f);
-		World_Waypoint_Set(464, 80, 250.0f, -12.21f, -342.0f);
-		World_Waypoint_Set(465, 80, -164.78f, -12.21f, -832.08f);
+		World_Waypoint_Set(463, kSetUG07, -88.78f, -12.21f, -184.08f);
+		World_Waypoint_Set(464, kSetUG07, 250.0f, -12.21f, -342.0f);
+		World_Waypoint_Set(465, kSetUG07, -164.78f, -12.21f, -832.08f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 465, 5);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
 		break;
 
 	case 11:
-		World_Waypoint_Set(463, 82, 91.0f, 156.94f, -498.0f);
-		World_Waypoint_Set(464, 82, -149.0f, 156.94f, -498.0f);
+		World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
+		World_Waypoint_Set(464, kSetUG09, -149.0f, 156.94f, -498.0f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 463, 5);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
 		break;
 
 	case 12:
-		World_Waypoint_Set(463, 82, 91.0f, 156.94f, -498.0f);
-		World_Waypoint_Set(464, 82, -149.0f, 156.94f, -498.0f);
+		World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
+		World_Waypoint_Set(464, kSetUG09, -149.0f, 156.94f, -498.0f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 5);
 		AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
 		break;
 
 	case 13:
-		World_Waypoint_Set(463, 82, -152.51f, 277.31f, 311.98f);
-		World_Waypoint_Set(464, 82, -124.51f, 275.08f, 319.98f);
+#if BLADERUNNER_ORIGINAL_BUGS
+		// this makes the rat appear on the pipe (top left) but this is buggy
+		// since it appears floating there
+		World_Waypoint_Set(463, kSetUG09, -152.51f, 277.31f, 311.98f);
+		World_Waypoint_Set(464, kSetUG09, -124.51f, 275.08f, 319.98f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 8);
 		AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
+#else
+		// replacing with something more normal
+		World_Waypoint_Set(463, kSetUG09, 91.0f, 156.94f, -498.0f);
+		World_Waypoint_Set(464, kSetUG09, -29.60f, 156.94f, -498.0f);
+		AI_Movement_Track_Append(kActorFreeSlotA, 463, 4);
+		AI_Movement_Track_Append(kActorFreeSlotA, 464, 1);
+		AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
+#endif
 		break;
 
 	case 14:
-		World_Waypoint_Set(463, 84, -360.67f, 21.39f, 517.55f);
-		World_Waypoint_Set(464, 84, -250.67f, 21.39f, 477.55f);
-		World_Waypoint_Set(465, 84, -248.67f, 21.39f, -1454.45f);
+		World_Waypoint_Set(463, kSetUG12, -360.67f, 21.39f, 517.55f);
+		World_Waypoint_Set(464, kSetUG12, -250.67f, 21.39f, 477.55f);
+		World_Waypoint_Set(465, kSetUG12, -248.67f, 21.39f, -1454.45f);
 		AI_Movement_Track_Append(kActorFreeSlotA, 463, 1);
 		AI_Movement_Track_Append(kActorFreeSlotA, 464, 8);
 		AI_Movement_Track_Append(kActorFreeSlotA, 465, 1);
diff --git a/engines/bladerunner/script/ai/free_slot_b.cpp b/engines/bladerunner/script/ai/free_slot_b.cpp
index e7bdfc7..cbaecb0 100644
--- a/engines/bladerunner/script/ai/free_slot_b.cpp
+++ b/engines/bladerunner/script/ai/free_slot_b.cpp
@@ -38,9 +38,9 @@ void AIScriptFreeSlotB::Initialize() {
 	_var1 = 0;
 	_var2 = 1;
 
-	World_Waypoint_Set(527, 45, -468.46f, -616.58f, 2840.60f);
-	World_Waypoint_Set(528, 45, -1024.46f, -615.49f, 2928.60f);
-	World_Waypoint_Set(529, 45, -1024.46f, -615.49f, 2788.60f);
+	World_Waypoint_Set(527, kSetKP02, -468.46f, -616.58f, 2840.60f);
+	World_Waypoint_Set(528, kSetKP02, -1024.46f, -615.49f, 2928.60f);
+	World_Waypoint_Set(529, kSetKP02, -1024.46f, -615.49f, 2788.60f);
 }
 
 bool AIScriptFreeSlotB::Update() {
@@ -52,7 +52,7 @@ bool AIScriptFreeSlotB::Update() {
 		switch (Actor_Query_Goal_Number(kActorFreeSlotB)) {
 		case 300:
 			Actor_Set_Goal_Number(kActorFreeSlotB, 301);
-			Actor_Set_Targetable(kActorFreeSlotB, 1);
+			Actor_Set_Targetable(kActorFreeSlotB, true);
 			break;
 
 		case 301:
@@ -97,7 +97,7 @@ bool AIScriptFreeSlotB::Update() {
 			return false;
 		}
 		Actor_Set_Goal_Number(kActorFreeSlotB, 406);
-		Actor_Set_Targetable(kActorFreeSlotB, 1);
+		Actor_Set_Targetable(kActorFreeSlotB, true);
 		return true;
 	}
 }
@@ -194,7 +194,7 @@ bool AIScriptFreeSlotB::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 		break;
 
 	case 302:
-		Actor_Set_Targetable(kActorFreeSlotB, 1);
+		Actor_Set_Targetable(kActorFreeSlotB, true);
 		Non_Player_Actor_Combat_Mode_On(kActorFreeSlotB, 0, 0, 0, 8, 4, 7, 8, 25, 0, 75, 5, 300, 0);
 		break;
 
@@ -292,6 +292,7 @@ bool AIScriptFreeSlotB::UpdateAnimation(int *animation, int *frame) {
 		break;
 
 	case 5:
+		// a bug? This is an animation for Maggie (exploding)
 		*animation = 874;
 		_animationFrame++;
 		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(874) - 1) {
@@ -319,10 +320,17 @@ bool AIScriptFreeSlotB::UpdateAnimation(int *animation, int *frame) {
 		if (_animationFrame == 1) {
 			Ambient_Sounds_Play_Sound(kSfxRATTY5, 99, 0, 0, 25);
 		}
-		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(859)) {
-			_animationFrame = Slice_Animation_Query_Number_Of_Frames(859);
+#if BLADERUNNER_ORIGINAL_BUGS
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(859) - 1) {
+			_animationFrame = Slice_Animation_Query_Number_Of_Frames(859) - 1;
 		}
 		_animationState = 8;
+#else
+		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(859) - 1) {
+			_animationFrame = Slice_Animation_Query_Number_Of_Frames(859) - 1;
+			_animationState = 8;
+		}
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		break;
 
 	case 8:
@@ -387,7 +395,7 @@ bool AIScriptFreeSlotB::ChangeAnimationMode(int mode) {
 		_animationFrame = 0;
 		break;
 
-	case 48:
+	case kAnimationModeDie:
 		_animationState = 7;
 		_animationFrame = 0;
 		break;
@@ -427,9 +435,9 @@ void AIScriptFreeSlotB::processGoal301() {
 		break;
 
 	case 2:
-		World_Waypoint_Set(466, 74, 144.98f, -50.13f, -175.75f);
-		World_Waypoint_Set(547, 74, 105.6f, -50.13f, -578.46f);
-		World_Waypoint_Set(548, 74, 62.0f, -50.13f, -574.0f);
+		World_Waypoint_Set(466, kSetUG01, 144.98f, -50.13f, -175.75f);
+		World_Waypoint_Set(547, kSetUG01, 105.6f, -50.13f, -578.46f);
+		World_Waypoint_Set(548, kSetUG01, 62.0f, -50.13f, -574.0f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
 		AI_Movement_Track_Append(kActorFreeSlotB, 548, 5);
@@ -445,9 +453,9 @@ void AIScriptFreeSlotB::processGoal301() {
 		break;
 
 	case 4:
-		World_Waypoint_Set(466, 77, -22.70f, 6.39f, 33.12f);
-		World_Waypoint_Set(547, 77, -6.70f, -1.74f, -362.88f);
-		World_Waypoint_Set(548, 77, 164.0f, 11.87f, -1013.0f);
+		World_Waypoint_Set(466, kSetUG04, -22.70f, 6.39f, 33.12f);
+		World_Waypoint_Set(547, kSetUG04, -6.70f, -1.74f, -362.88f);
+		World_Waypoint_Set(548, kSetUG04, 164.0f, 11.87f, -1013.0f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 466, 2);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 0);
 		AI_Movement_Track_Append(kActorFreeSlotB, 548, 0);
@@ -469,64 +477,75 @@ void AIScriptFreeSlotB::processGoal301() {
 		if (Actor_Query_In_Set(kActorClovis, kSetUG07)) {
 			AI_Movement_Track_Append(kActorFreeSlotB, 39, 10);
 		} else {
-			World_Waypoint_Set(466, 80, -88.78f, -12.21f, -184.08f);
-			World_Waypoint_Set(547, 80, 250.0f, -12.21f, -342.0f);
-			World_Waypoint_Set(548, 80, -164.78f, -12.21f, -832.08f);
+			World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
+			World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
+			World_Waypoint_Set(548, kSetUG07, -164.78f, -12.21f, -832.08f);
 			AI_Movement_Track_Append(kActorFreeSlotB, 466, 5);
 			AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
 		}
 		break;
 
 	case 8:
-		World_Waypoint_Set(466, 80, -88.78f, -12.21f, -184.08f);
-		World_Waypoint_Set(547, 80, 250.0f, -12.21f, -342.0f);
-		World_Waypoint_Set(548, 80, -164.78f, -12.21f, -832.08f);
+		World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
+		World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
+		World_Waypoint_Set(548, kSetUG07, -164.78f, -12.21f, -832.08f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 5);
 		AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
 		break;
 
 	case 9:
-		World_Waypoint_Set(466, 80, -88.78f, -12.21f, -184.08f);
-		World_Waypoint_Set(547, 80, 250.0f, -12.21f, -342.0f);
-		World_Waypoint_Set(548, 80, -164.78f, -12.21f, -832.08f);
+		World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
+		World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
+		World_Waypoint_Set(548, kSetUG07, -164.78f, -12.21f, -832.08f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 5);
 		AI_Movement_Track_Append(kActorFreeSlotB, 548, 1);
 		break;
 
 	case 10:
-		World_Waypoint_Set(466, 80, -88.78f, -12.21f, -184.08f);
-		World_Waypoint_Set(547, 80, 250.0f, -12.21f, -342.0f);
-		World_Waypoint_Set(548, 80, -164.78f, -12.21f, -832.08f);
+		World_Waypoint_Set(466, kSetUG07, -88.78f, -12.21f, -184.08f);
+		World_Waypoint_Set(547, kSetUG07, 250.0f, -12.21f, -342.0f);
+		World_Waypoint_Set(548, kSetUG07, -164.78f, -12.21f, -832.08f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 548, 5);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
 		break;
 
 	case 11:
-		World_Waypoint_Set(466, 82, 91.0f, 156.94f, -498.0f);
-		World_Waypoint_Set(547, 82, -149.0f, 156.94f, -498.0f);
+		World_Waypoint_Set(466, kSetUG09, 91.0f, 156.94f, -498.0f);
+		World_Waypoint_Set(547, kSetUG09, -149.0f, 156.94f, -498.0f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 466, 5);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
 		break;
 
 	case 12:
-		World_Waypoint_Set(466, 82, 91.0f, 156.94f, -498.0f);
-		World_Waypoint_Set(547, 82, -149.0f, 156.94f, -498.0f);
+		World_Waypoint_Set(466, kSetUG09, 91.0f, 156.94f, -498.0f);
+		World_Waypoint_Set(547, kSetUG09, -149.0f, 156.94f, -498.0f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 5);
 		AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
 		break;
 
 	case 13:
-		World_Waypoint_Set(466, 82, -152.51f, 277.31f, 311.98f);
-		World_Waypoint_Set(547, 82, -124.51f, 275.08f, 319.98f);
+#if BLADERUNNER_ORIGINAL_BUGS
+		// this makes the rat appear on the pipe (top left)
+		// but this is buggy since it will appear floating there
+		World_Waypoint_Set(466, kSetUG09, -152.51f, 277.31f, 311.98f);
+		World_Waypoint_Set(547, kSetUG09, -124.51f, 275.08f, 319.98f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 8);
 		AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
+#else
+		// replacing with something more normal
+		World_Waypoint_Set(466, kSetUG09, -152.51f, 156.94f, -498.0f);
+		World_Waypoint_Set(547, kSetUG09,  -32.60f, 156.94f, -498.0f);
+		AI_Movement_Track_Append(kActorFreeSlotB, 466, 4);
+		AI_Movement_Track_Append(kActorFreeSlotB, 547, 1);
+		AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
+#endif // BLADERUNNER_ORIGINAL_BUGS
 		break;
 
 	case 14:
-		World_Waypoint_Set(466, 84, -360.67f, 21.39f, 517.55f);
-		World_Waypoint_Set(547, 84, -250.67f, 21.39f, 477.55f);
-		World_Waypoint_Set(548, 84, -248.67f, 21.39f, -1454.45f);
+		World_Waypoint_Set(466, kSetUG12, -360.67f, 21.39f, 517.55f);
+		World_Waypoint_Set(547, kSetUG12, -250.67f, 21.39f, 477.55f);
+		World_Waypoint_Set(548, kSetUG12, -248.67f, 21.39f, -1454.45f);
 		AI_Movement_Track_Append(kActorFreeSlotB, 466, 1);
 		AI_Movement_Track_Append(kActorFreeSlotB, 547, 8);
 		AI_Movement_Track_Append(kActorFreeSlotB, 548, 1);
diff --git a/engines/bladerunner/script/ai/general_doll.cpp b/engines/bladerunner/script/ai/general_doll.cpp
index eb82c54..f5739fe 100644
--- a/engines/bladerunner/script/ai/general_doll.cpp
+++ b/engines/bladerunner/script/ai/general_doll.cpp
@@ -366,7 +366,7 @@ bool AIScriptGeneralDoll::ChangeAnimationMode(int mode) {
 		_animationFrame = 0;
 		break;
 
-	case 48:
+	case kAnimationModeDie:
 		_animationState = 4;
 		_animationFrame = 0;
 		break;
diff --git a/engines/bladerunner/script/ai/guzza.cpp b/engines/bladerunner/script/ai/guzza.cpp
index d76ee3e..5c36bee 100644
--- a/engines/bladerunner/script/ai/guzza.cpp
+++ b/engines/bladerunner/script/ai/guzza.cpp
@@ -953,7 +953,7 @@ bool AIScriptGuzza::ChangeAnimationMode(int mode) {
 		_animationFrame = 0;
 		break;
 
-	case 48:
+	case kAnimationModeDie:
 		_animationState = 28;
 		_animationFrame = 0;
 		break;
diff --git a/engines/bladerunner/script/ai/izo.cpp b/engines/bladerunner/script/ai/izo.cpp
index 13615d6..2fed274 100644
--- a/engines/bladerunner/script/ai/izo.cpp
+++ b/engines/bladerunner/script/ai/izo.cpp
@@ -47,7 +47,7 @@ void AIScriptIzo::Initialize() {
 	Actor_Set_Goal_Number(kActorIzo, 0);
 	Actor_Put_In_Set(kActorIzo, kSetHC01_HC02_HC03_HC04);
 	Actor_Set_At_XYZ(kActorIzo, 591.0f, 0.14f, 25.0f, 540);
-	World_Waypoint_Set(349, 70, -14.7f, -4.01f, 224.5f);
+	World_Waypoint_Set(349, kSetRC03, -14.7f, -4.01f, 224.5f);
 }
 
 bool AIScriptIzo::Update() {
@@ -984,7 +984,7 @@ bool AIScriptIzo::ChangeAnimationMode(int mode) {
 		_animationFrame = 0;
 		break;
 
-	case 48:
+	case kAnimationModeDie:
 		_animationState = 19;
 		_animationFrame = 0;
 		break;
@@ -1080,10 +1080,10 @@ void AIScriptIzo::dialogueWithIzo() {
 void AIScriptIzo::modifyWaypoints() {
 	switch (Random_Query(1, 10) - 1) {
 	case 0:
-		World_Waypoint_Set(484, 54, -212.58f, 23.38f, -1859.45f);
-		World_Waypoint_Set(485, 54, 355.49f, 31.66f, -859.81f);
-		World_Waypoint_Set(486, 11, -323.89f, -24.0f, 35.58f);
-		World_Waypoint_Set(487, 11, -211.89f, -24.0f, 35.58f);
+		World_Waypoint_Set(484, kSetNR01, -212.58f, 23.38f, -1859.45f);
+		World_Waypoint_Set(485, kSetNR01, 355.49f, 31.66f, -859.81f);
+		World_Waypoint_Set(486, kSetNR02, -323.89f, -24.0f, 35.58f);
+		World_Waypoint_Set(487, kSetNR02, -211.89f, -24.0f, 35.58f);
 		AI_Movement_Track_Append(kActorIzo, 484, 1);
 		AI_Movement_Track_Append(kActorIzo, 485, 10);
 		AI_Movement_Track_Append(kActorIzo, 486, 1);
@@ -1094,25 +1094,25 @@ void AIScriptIzo::modifyWaypoints() {
 		break;
 
 	case 1:
-		World_Waypoint_Set(484, 13, -1335.0f, 0.0f, -542.0f);
-		World_Waypoint_Set(485, 13, -1027.0f, 0.0f, -542.0f);
+		World_Waypoint_Set(484, kSetNR05_NR08, -1335.0f, 0.0f, -542.0f);
+		World_Waypoint_Set(485, kSetNR05_NR08, -1027.0f, 0.0f, -542.0f);
 		AI_Movement_Track_Append(kActorIzo, 484, 1);
 		AI_Movement_Track_Append(kActorIzo, 485, 20);
 		AI_Movement_Track_Append(kActorIzo, 484, 1);
 		break;
 
 	case 2:
-		World_Waypoint_Set(484, 37, -352.16f, 8.0f, -379.24f);
-		World_Waypoint_Set(485, 37, 108.2f, 8.0f, -934.80f);
+		World_Waypoint_Set(484, kSetHF01, -352.16f, 8.0f, -379.24f);
+		World_Waypoint_Set(485, kSetHF01, 108.2f, 8.0f, -934.80f);
 		AI_Movement_Track_Append(kActorIzo, 484, 1);
 		AI_Movement_Track_Append(kActorIzo, 485, 1);
 		break;
 
 	case 3:
-		World_Waypoint_Set(484, 39, 589.59f, 47.76f, -1153.76f);
-		World_Waypoint_Set(485, 39, 481.59f, 47.76f, -429.76f);
-		World_Waypoint_Set(486, 38, 524.0f, 47.76f, -562.0f);
-		World_Waypoint_Set(487, 38, -10.0f, 47.76f, -327.0f);
+		World_Waypoint_Set(484, kSetHF03, 589.59f, 47.76f, -1153.76f);
+		World_Waypoint_Set(485, kSetHF03, 481.59f, 47.76f, -429.76f);
+		World_Waypoint_Set(486, kSetHF02, 524.0f, 47.76f, -562.0f);
+		World_Waypoint_Set(487, kSetHF02, -10.0f, 47.76f, -327.0f);
 		AI_Movement_Track_Append(kActorIzo, 484, 1);
 		AI_Movement_Track_Append(kActorIzo, 485, 1);
 		AI_Movement_Track_Append(kActorIzo, 486, 1);
diff --git a/engines/bladerunner/script/ai/lucy.cpp b/engines/bladerunner/script/ai/lucy.cpp
index e4b92ab..c6b26a5 100644
--- a/engines/bladerunner/script/ai/lucy.cpp
+++ b/engines/bladerunner/script/ai/lucy.cpp
@@ -817,7 +817,7 @@ bool AIScriptLucy::ChangeAnimationMode(int mode) {
 		_animationFrame = 0;
 		break;
 
-	case 48:
+	case kAnimationModeDie:
 		_animationState = 7;
 		_animationFrame = 0;
 		break;
diff --git a/engines/bladerunner/script/ai/luther.cpp b/engines/bladerunner/script/ai/luther.cpp
index 4ad0e56..2298f40 100644
--- a/engines/bladerunner/script/ai/luther.cpp
+++ b/engines/bladerunner/script/ai/luther.cpp
@@ -447,7 +447,7 @@ bool AIScriptLuther::ChangeAnimationMode(int mode) {
 		_animationFrame = 0;
 		break;
 
-	case 48:
+	case kAnimationModeDie:
 		_animationState = 12;
 		_animationFrame = 0;
 		break;
diff --git a/engines/bladerunner/script/ai/mccoy.cpp b/engines/bladerunner/script/ai/mccoy.cpp
index cafca8a..432c75f 100644
--- a/engines/bladerunner/script/ai/mccoy.cpp
+++ b/engines/bladerunner/script/ai/mccoy.cpp
@@ -1092,7 +1092,7 @@ bool AIScriptMcCoy::UpdateAnimation(int *animation, int *frame) {
 		}
 		break;
 
-	case 48:
+	case kAnimationModeDie:
 		*animation = 33;
 		_animationFrame++;
 		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(*animation)) {
@@ -1102,7 +1102,7 @@ bool AIScriptMcCoy::UpdateAnimation(int *animation, int *frame) {
 		}
 		break;
 
-	case 49:
+	case kAnimationModeCombatDie:
 		*animation = 34;
 		_animationFrame++;
 		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(*animation)) {
diff --git a/engines/bladerunner/script/ai/mutant1.cpp b/engines/bladerunner/script/ai/mutant1.cpp
index 51c9c70..fcc46cd 100644
--- a/engines/bladerunner/script/ai/mutant1.cpp
+++ b/engines/bladerunner/script/ai/mutant1.cpp
@@ -580,7 +580,7 @@ bool AIScriptMutant1::ChangeAnimationMode(int mode) {
 		_animationFrame = 0;
 		break;
 
-	case 48:
+	case kAnimationModeDie:
 		_animationState = 8;
 		_animationFrame = 0;
 		break;
diff --git a/engines/bladerunner/script/ai/mutant2.cpp b/engines/bladerunner/script/ai/mutant2.cpp
index e1e851a..6f7f492 100644
--- a/engines/bladerunner/script/ai/mutant2.cpp
+++ b/engines/bladerunner/script/ai/mutant2.cpp
@@ -525,7 +525,7 @@ bool AIScriptMutant2::ChangeAnimationMode(int mode) {
 		_var1 = 1;
 		break;
 
-	case 48:
+	case kAnimationModeDie:
 		_animationState = 6;
 		_animationFrame = 0;
 		break;
diff --git a/engines/bladerunner/script/ai/mutant3.cpp b/engines/bladerunner/script/ai/mutant3.cpp
index b612cba..393cf01 100644
--- a/engines/bladerunner/script/ai/mutant3.cpp
+++ b/engines/bladerunner/script/ai/mutant3.cpp
@@ -586,7 +586,7 @@ bool AIScriptMutant3::ChangeAnimationMode(int mode) {
 		}
 		break;
 
-	case 48:
+	case kAnimationModeDie:
 		_animationState = 6;
 		_animationFrame = 0;
 		break;
diff --git a/engines/bladerunner/script/ai/sadik.cpp b/engines/bladerunner/script/ai/sadik.cpp
index c4a2b99..4dc36f8 100644
--- a/engines/bladerunner/script/ai/sadik.cpp
+++ b/engines/bladerunner/script/ai/sadik.cpp
@@ -330,7 +330,7 @@ bool AIScriptSadik::GoalChanged(int currentGoalNumber, int newGoalNumber) {
 
 	case kGoalSadikUG18Move:
 		Actor_Set_Targetable(kActorSadik, true);
-		World_Waypoint_Set(436, 89, -356.11f, 0.0f, 652.42f);
+		World_Waypoint_Set(436, kSetUG18, -356.11f, 0.0f, 652.42f);
 		AI_Movement_Track_Flush(kActorSadik);
 		AI_Movement_Track_Append_Run(kActorSadik, 436, 0);
 		AI_Movement_Track_Repeat(kActorSadik);
diff --git a/engines/bladerunner/script/ai/taffy_patron.cpp b/engines/bladerunner/script/ai/taffy_patron.cpp
index 0bf6861..975aa1d 100644
--- a/engines/bladerunner/script/ai/taffy_patron.cpp
+++ b/engines/bladerunner/script/ai/taffy_patron.cpp
@@ -154,7 +154,7 @@ bool AIScriptTaffyPatron::ChangeAnimationMode(int mode) {
 		_animationFrame = 0;
 		break;
 
-	case 48:
+	case kAnimationModeDie:
 		_animationState = 2;
 		_animationFrame = 0;
 		break;
diff --git a/engines/bladerunner/script/scene/ug13.cpp b/engines/bladerunner/script/scene/ug13.cpp
index f2e43c8..ee1d364 100644
--- a/engines/bladerunner/script/scene/ug13.cpp
+++ b/engines/bladerunner/script/scene/ug13.cpp
@@ -82,9 +82,18 @@ void SceneScriptUG13::SceneLoaded() {
 	Unobstacle_Object("BOX FOR ARCHWAY 02", true);
 	Unobstacle_Object("STAIR_RAIL", true);
 	Unobstacle_Object("DISC_LEFT", true);
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+	if (Game_Flag_Query(kFlagUG08ElevatorUp)) {
+		Obstacle_Object("ELEVBLOCK", true);
+	} else {
+		Unobstacle_Object("ELEVBLOCK", true);
+	}
+#endif // BLADERUNNER_ORIGINAL_BUGS
 	Clickable_Object("BASKET");
 	Clickable_Object("BOLLARD");
 	Unclickable_Object("BASKET");
+
 	if ( Global_Variable_Query(kVariableChapter) >= 3
 	 && !Actor_Clue_Query(kActorMcCoy, kClueOriginalRequisitionForm)
 	 &&  Game_Flag_Query(kFlagCT04HomelessKilledByMcCoy)
@@ -115,12 +124,20 @@ bool SceneScriptUG13::ClickedOn3DObject(const char *objectName, bool a2) {
 				Scene_Loop_Start_Special(kSceneLoopModeOnce, 0, false);
 				Game_Flag_Reset(kFlagUG08ElevatorUp);
 				Game_Flag_Set(kFlagUG13CallElevator);
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+				Unobstacle_Object("ELEVBLOCK", true);
+#endif // BLADERUNNER_ORIGINAL_BUGS
 				return true;
 			} else {
 				Scene_Loop_Set_Default(4);
 				Scene_Loop_Start_Special(kSceneLoopModeOnce, 3, false);
 				Game_Flag_Set(kFlagUG08ElevatorUp);
 				Scene_Exit_Remove(0);
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+				Obstacle_Object("ELEVBLOCK", true);
+#endif // BLADERUNNER_ORIGINAL_BUGS
 				return true;
 			}
 		}
diff --git a/engines/bladerunner/set.cpp b/engines/bladerunner/set.cpp
index 1e441f6..6d898bd 100644
--- a/engines/bladerunner/set.cpp
+++ b/engines/bladerunner/set.cpp
@@ -90,6 +90,7 @@ bool Set::open(const Common::String &name) {
 		_objects[i].isTarget = 0;
 		s->skip(4);
 	}
+	patchInAdditionalObjectsInSet();
 
 	_walkboxCount = s->readUint32LE();
 	assert(_walkboxCount <= 95);
@@ -424,12 +425,58 @@ void Set::load(SaveFileReadStream &f) {
 * 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 objectId) const { // For bugfixes with respect to clickable/targetable box positioning/bounding box
-	if (_vm->_scene->getSceneId() == kSceneBB06) { /// Sebastian's room with doll
-		if (_objects[objectId].name == "BOX31") { // dollhouse box in BB06
+void Set::overrideSceneObjectInfo(int objectId) const {
+	switch (_vm->_scene->getSceneId()) {
+	case kSceneBB06:
+		// Sebastian's room with doll
+		if (objectId == 3 && _objects[objectId].name == "BOX31") {
+			// dollhouse box in BB06
 			_objects[objectId].bbox.setXYZ(-161.47f, 30.0f, 53.75f, -110.53f, 69.81f, 90.90f);
 		}
+		break;
+	case kSceneUG09:
+		// block passage to buggy pipe
+		if (objectId == 7 && _objects[objectId].name == "BOXS FOR ARCHWAY 01") {
+			_objects[objectId].bbox.setXYZ(-168.99f, 151.38f, -139.10f, -105.95f, 239.59f, 362.70);
+		}
+		break;
+	default:
+		return;
 	}
 }
 
+/**
+* Used for adding objects in a Set mainly to fix a few "McCoy walking to places he should not" issues
+* This is called in Set::open()
+* Note:
+* - ScummVM (post fix) save games will have the extra objects information
+* - Original save games will not have the extra objects if the save game room scene was an affected scene
+*   but they will get them if the player exits and re-enters. The code anticipates not finding an object in a scene
+*   so this should not be an issue.
+*/
+void Set::patchInAdditionalObjectsInSet() {
+	Common::String custObjName;
+	int objectId = _objectCount;
+	BoundingBox bbox;
+	switch (_vm->_scene->getSceneId()) {
+	case kSceneUG13:
+		// Underground homeless place
+		// block passage to empty elevator chute
+		bbox = BoundingBox(-80.00f, 35.78f, -951.75f, 74.36f, 364.36f, -810.56f);
+		custObjName = "ELEVBLOCK";
+		break;
+	default:
+		return;
+	}
+
+	_objectCount++;
+	_objects[objectId].name = custObjName.c_str();
+	_objects[objectId].bbox = bbox;
+	_objects[objectId].isObstacle  = 0; // init as false - Can be changed in Scene script eg. SceneLoaded() with (Un)Obstacle_Object()
+	_objects[objectId].isClickable = 0; // init as false - Can be changed in Scene script eg. SceneLoaded() with (Un)Clickable_Object()
+	_objects[objectId].isHotMouse  = 0;
+	_objects[objectId].unknown1    = 0;
+	_objects[objectId].isTarget    = 0; // init as false - Can be changed in Scene script eg. SceneLoaded() with (Un_)Combat_Target_Object
+}
+
 } // End of namespace BladeRunner
diff --git a/engines/bladerunner/set.h b/engines/bladerunner/set.h
index 661d38e..b2aca93 100644
--- a/engines/bladerunner/set.h
+++ b/engines/bladerunner/set.h
@@ -108,6 +108,7 @@ public:
 private:
 	static bool isXZInWalkbox(float x, float z, const Walkbox &walkbox);
 	void overrideSceneObjectInfo(int objectId) const;
+	void patchInAdditionalObjectsInSet();
 };
 
 } // End of namespace BladeRunner





More information about the Scummvm-git-logs mailing list