aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/bladerunner/actor.cpp9
-rw-r--r--engines/bladerunner/script/ai/clovis.cpp5
-rw-r--r--engines/bladerunner/script/script.cpp71
3 files changed, 85 insertions, 0 deletions
diff --git a/engines/bladerunner/actor.cpp b/engines/bladerunner/actor.cpp
index dd5650c324..5a464394f8 100644
--- a/engines/bladerunner/actor.cpp
+++ b/engines/bladerunner/actor.cpp
@@ -493,9 +493,18 @@ bool Actor::loopWalk(const Vector3 &destination, int proximity, bool interruptib
_vm->playerGainsControl();
}
+#if BLADERUNNER_ORIGINAL_BUGS
if (!wasInterrupted && proximity == 0 && !_vm->_playerActorIdle) {
setAtXYZ(destination, _facing, true, false, false);
}
+#else
+ if (!wasInterrupted && proximity == 0
+ && (_id == kActorMcCoy && !_vm->_playerActorIdle)
+ && !isRetired()
+ ) {
+ setAtXYZ(destination, _facing, true, false, false);
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
if (_id != kActorMcCoy) {
_vm->_mouse->enable();
diff --git a/engines/bladerunner/script/ai/clovis.cpp b/engines/bladerunner/script/ai/clovis.cpp
index 4d476f4cab..f054ce3d50 100644
--- a/engines/bladerunner/script/ai/clovis.cpp
+++ b/engines/bladerunner/script/ai/clovis.cpp
@@ -353,8 +353,13 @@ bool AIScriptClovis::GoalChanged(int currentGoalNumber, int newGoalNumber) {
} else {
Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeDie);
}
+#if BLADERUNNER_ORIGINAL_BUGS
Delay(3000);
Actor_Retired_Here(kActorMcCoy, 12, 48, true, kActorClovis);
+#else
+ Actor_Retired_Here(kActorMcCoy, 12, 48, true, kActorClovis);
+ Delay(3000);
+#endif // BLADERUNNER_ORIGINAL_BUGS
return true;
case kGoalClovisStartChapter5:
diff --git a/engines/bladerunner/script/script.cpp b/engines/bladerunner/script/script.cpp
index c65fb03152..a98a5ec7bd 100644
--- a/engines/bladerunner/script/script.cpp
+++ b/engines/bladerunner/script/script.cpp
@@ -489,15 +489,29 @@ bool ScriptBase::Loop_Actor_Walk_To_Actor(int actorId, int otherActorId, int pro
run = true;
}
+#if BLADERUNNER_ORIGINAL_BUGS
_vm->_playerActorIdle = false;
+#else
+ if (actorId == kActorMcCoy) {
+ _vm->_playerActorIdle = false;
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
bool isRunning;
bool result = _vm->_actors[actorId]->loopWalkToActor(otherActorId, proximity, interruptible, run, true, &isRunning);
+#if BLADERUNNER_ORIGINAL_BUGS
if (_vm->_playerActorIdle) {
result = true;
_vm->_playerActorIdle = false;
}
+#else
+ if (actorId == kActorMcCoy && _vm->_playerActorIdle) {
+ result = true;
+ _vm->_playerActorIdle = false;
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
+
if (isRunning) {
_vm->_runningActorId = actorId;
}
@@ -514,15 +528,29 @@ bool ScriptBase::Loop_Actor_Walk_To_Item(int actorId, int itemId, int proximity,
run = true;
}
+#if BLADERUNNER_ORIGINAL_BUGS
_vm->_playerActorIdle = false;
+#else
+ if (actorId == kActorMcCoy) {
+ _vm->_playerActorIdle = false;
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
bool isRunning;
bool result = _vm->_actors[actorId]->loopWalkToItem(itemId, proximity, interruptible, run, true, &isRunning);
+#if BLADERUNNER_ORIGINAL_BUGS
if (_vm->_playerActorIdle) {
result = true;
_vm->_playerActorIdle = false;
}
+#else
+ if (actorId == kActorMcCoy && _vm->_playerActorIdle) {
+ result = true;
+ _vm->_playerActorIdle = false;
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
+
if (isRunning) {
_vm->_runningActorId = actorId;
}
@@ -539,15 +567,29 @@ bool ScriptBase::Loop_Actor_Walk_To_Scene_Object(int actorId, const char *object
run = true;
}
+#if BLADERUNNER_ORIGINAL_BUGS
_vm->_playerActorIdle = false;
+#else
+ if (actorId == kActorMcCoy) {
+ _vm->_playerActorIdle = false;
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
bool isRunning;
bool result = _vm->_actors[actorId]->loopWalkToSceneObject(objectName, proximity, interruptible, run, true, &isRunning);
+#if BLADERUNNER_ORIGINAL_BUGS
if (_vm->_playerActorIdle) {
result = true;
_vm->_playerActorIdle = false;
}
+#else
+ if (actorId == kActorMcCoy && _vm->_playerActorIdle) {
+ result = true;
+ _vm->_playerActorIdle = false;
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
+
if (isRunning) {
_vm->_runningActorId = actorId;
}
@@ -564,15 +606,29 @@ bool ScriptBase::Loop_Actor_Walk_To_Waypoint(int actorId, int waypointId, int pr
run = true;
}
+#if BLADERUNNER_ORIGINAL_BUGS
_vm->_playerActorIdle = false;
+#else
+ if (actorId == kActorMcCoy) {
+ _vm->_playerActorIdle = false;
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
bool isRunning;
bool result = _vm->_actors[actorId]->loopWalkToWaypoint(waypointId, proximity, interruptible, run, true, &isRunning);
+#if BLADERUNNER_ORIGINAL_BUGS
if (_vm->_playerActorIdle) {
result = true;
_vm->_playerActorIdle = false;
}
+#else
+ if (actorId == kActorMcCoy && _vm->_playerActorIdle) {
+ result = true;
+ _vm->_playerActorIdle = false;
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
+
if (isRunning) {
_vm->_runningActorId = actorId;
}
@@ -592,15 +648,30 @@ bool ScriptBase::Loop_Actor_Walk_To_XYZ(int actorId, float x, float y, float z,
run = true;
}
}
+
+#if BLADERUNNER_ORIGINAL_BUGS
_vm->_playerActorIdle = false;
+#else
+ if (actorId == kActorMcCoy) {
+ _vm->_playerActorIdle = false;
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
bool isRunning;
bool result = _vm->_actors[actorId]->loopWalkToXYZ(Vector3(x, y, z), proximity, interruptible, run, true, &isRunning);
+#if BLADERUNNER_ORIGINAL_BUGS
if (_vm->_playerActorIdle) {
result = true;
_vm->_playerActorIdle = false;
}
+#else
+ if (actorId == kActorMcCoy && _vm->_playerActorIdle) {
+ result = true;
+ _vm->_playerActorIdle = false;
+ }
+#endif // BLADERUNNER_ORIGINAL_BUGS
+
if (isRunning) {
_vm->_runningActorId = actorId;
}