aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorThanasis Antoniou2019-05-04 17:24:20 +0300
committerThanasis Antoniou2019-05-04 17:25:34 +0300
commitd666eb154a027b34302a34d090abbda2cf69ce58 (patch)
tree0db83225c2be71eed8bead048aa81e20367f0b9f /engines
parent7d2777e1d7f1abef54272ffb4287e26738a8a554 (diff)
downloadscummvm-rg350-d666eb154a027b34302a34d090abbda2cf69ce58.tar.gz
scummvm-rg350-d666eb154a027b34302a34d090abbda2cf69ce58.tar.bz2
scummvm-rg350-d666eb154a027b34302a34d090abbda2cf69ce58.zip
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
Diffstat (limited to 'engines')
-rw-r--r--engines/bladerunner/actor.cpp4
-rw-r--r--engines/bladerunner/actor.h1
-rw-r--r--engines/bladerunner/actor_combat.cpp5
-rw-r--r--engines/bladerunner/debugger.cpp4
-rw-r--r--engines/bladerunner/script/ai/bullet_bob.cpp2
-rw-r--r--engines/bladerunner/script/ai/chew.cpp2
-rw-r--r--engines/bladerunner/script/ai/crazylegs.cpp2
-rw-r--r--engines/bladerunner/script/ai/free_slot_a.cpp91
-rw-r--r--engines/bladerunner/script/ai/free_slot_b.cpp91
-rw-r--r--engines/bladerunner/script/ai/general_doll.cpp2
-rw-r--r--engines/bladerunner/script/ai/guzza.cpp2
-rw-r--r--engines/bladerunner/script/ai/izo.cpp28
-rw-r--r--engines/bladerunner/script/ai/lucy.cpp2
-rw-r--r--engines/bladerunner/script/ai/luther.cpp2
-rw-r--r--engines/bladerunner/script/ai/mccoy.cpp4
-rw-r--r--engines/bladerunner/script/ai/mutant1.cpp2
-rw-r--r--engines/bladerunner/script/ai/mutant2.cpp2
-rw-r--r--engines/bladerunner/script/ai/mutant3.cpp2
-rw-r--r--engines/bladerunner/script/ai/sadik.cpp2
-rw-r--r--engines/bladerunner/script/ai/taffy_patron.cpp2
-rw-r--r--engines/bladerunner/script/scene/ug13.cpp17
-rw-r--r--engines/bladerunner/set.cpp53
-rw-r--r--engines/bladerunner/set.h1
23 files changed, 215 insertions, 108 deletions
diff --git a/engines/bladerunner/actor.cpp b/engines/bladerunner/actor.cpp
index fa8a5d9643..f0153f8618 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 1177e655a2..186468be2a 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 47c575f7c1..400e3e704e 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 153d8fa306..3558659dce 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 f49462492a..ee5410a263 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 65403920b7..fb60c3607c 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 c2031fc0ab..b4ed739844 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 5491f2eef7..9281e3a32e 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 e7bdfc7f11..cbaecb0ac3 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 eb82c54ba2..f5739fee89 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 d76ee3ee73..5c36beea1b 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 13615d62e5..2fed274f50 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 e4b92ab4a9..c6b26a533e 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 4ad0e5639d..2298f40b02 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 cafca8a1a7..432c75f7d9 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 51c9c705cd..fcc46cdbc2 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 e1e851a381..6f7f4924a4 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 b612cba7bd..393cf01a2c 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 c4a2b99fa8..4dc36f85b9 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 0bf6861d12..975aa1df91 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 f2e43c88e3..ee1d364e4a 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 1e441f68db..6d898bdc80 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 661d38eec1..b2aca931eb 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