BLADERUNNER: _playerActorIdle should affect McCoy only

Should be set or cleared only when McCoy is the actor who is walking and affect only McCoy
This commit is contained in:
Thanasis Antoniou 2019-06-22 11:01:39 +03:00
parent 2287a4f607
commit f3cdbd2ea9
3 changed files with 85 additions and 0 deletions

View file

@ -493,9 +493,18 @@ bool Actor::loopWalk(const Vector3 &destination, int proximity, bool interruptib
_vm->playerGainsControl(); _vm->playerGainsControl();
} }
#if BLADERUNNER_ORIGINAL_BUGS
if (!wasInterrupted && proximity == 0 && !_vm->_playerActorIdle) { if (!wasInterrupted && proximity == 0 && !_vm->_playerActorIdle) {
setAtXYZ(destination, _facing, true, false, false); 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) { if (_id != kActorMcCoy) {
_vm->_mouse->enable(); _vm->_mouse->enable();

View file

@ -353,8 +353,13 @@ bool AIScriptClovis::GoalChanged(int currentGoalNumber, int newGoalNumber) {
} else { } else {
Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeDie); Actor_Change_Animation_Mode(kActorMcCoy, kAnimationModeDie);
} }
#if BLADERUNNER_ORIGINAL_BUGS
Delay(3000); Delay(3000);
Actor_Retired_Here(kActorMcCoy, 12, 48, true, kActorClovis); 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; return true;
case kGoalClovisStartChapter5: case kGoalClovisStartChapter5:

View file

@ -489,15 +489,29 @@ bool ScriptBase::Loop_Actor_Walk_To_Actor(int actorId, int otherActorId, int pro
run = true; run = true;
} }
#if BLADERUNNER_ORIGINAL_BUGS
_vm->_playerActorIdle = false; _vm->_playerActorIdle = false;
#else
if (actorId == kActorMcCoy) {
_vm->_playerActorIdle = false;
}
#endif // BLADERUNNER_ORIGINAL_BUGS
bool isRunning; bool isRunning;
bool result = _vm->_actors[actorId]->loopWalkToActor(otherActorId, proximity, interruptible, run, true, &isRunning); bool result = _vm->_actors[actorId]->loopWalkToActor(otherActorId, proximity, interruptible, run, true, &isRunning);
#if BLADERUNNER_ORIGINAL_BUGS
if (_vm->_playerActorIdle) { if (_vm->_playerActorIdle) {
result = true; result = true;
_vm->_playerActorIdle = false; _vm->_playerActorIdle = false;
} }
#else
if (actorId == kActorMcCoy && _vm->_playerActorIdle) {
result = true;
_vm->_playerActorIdle = false;
}
#endif // BLADERUNNER_ORIGINAL_BUGS
if (isRunning) { if (isRunning) {
_vm->_runningActorId = actorId; _vm->_runningActorId = actorId;
} }
@ -514,15 +528,29 @@ bool ScriptBase::Loop_Actor_Walk_To_Item(int actorId, int itemId, int proximity,
run = true; run = true;
} }
#if BLADERUNNER_ORIGINAL_BUGS
_vm->_playerActorIdle = false; _vm->_playerActorIdle = false;
#else
if (actorId == kActorMcCoy) {
_vm->_playerActorIdle = false;
}
#endif // BLADERUNNER_ORIGINAL_BUGS
bool isRunning; bool isRunning;
bool result = _vm->_actors[actorId]->loopWalkToItem(itemId, proximity, interruptible, run, true, &isRunning); bool result = _vm->_actors[actorId]->loopWalkToItem(itemId, proximity, interruptible, run, true, &isRunning);
#if BLADERUNNER_ORIGINAL_BUGS
if (_vm->_playerActorIdle) { if (_vm->_playerActorIdle) {
result = true; result = true;
_vm->_playerActorIdle = false; _vm->_playerActorIdle = false;
} }
#else
if (actorId == kActorMcCoy && _vm->_playerActorIdle) {
result = true;
_vm->_playerActorIdle = false;
}
#endif // BLADERUNNER_ORIGINAL_BUGS
if (isRunning) { if (isRunning) {
_vm->_runningActorId = actorId; _vm->_runningActorId = actorId;
} }
@ -539,15 +567,29 @@ bool ScriptBase::Loop_Actor_Walk_To_Scene_Object(int actorId, const char *object
run = true; run = true;
} }
#if BLADERUNNER_ORIGINAL_BUGS
_vm->_playerActorIdle = false; _vm->_playerActorIdle = false;
#else
if (actorId == kActorMcCoy) {
_vm->_playerActorIdle = false;
}
#endif // BLADERUNNER_ORIGINAL_BUGS
bool isRunning; bool isRunning;
bool result = _vm->_actors[actorId]->loopWalkToSceneObject(objectName, proximity, interruptible, run, true, &isRunning); bool result = _vm->_actors[actorId]->loopWalkToSceneObject(objectName, proximity, interruptible, run, true, &isRunning);
#if BLADERUNNER_ORIGINAL_BUGS
if (_vm->_playerActorIdle) { if (_vm->_playerActorIdle) {
result = true; result = true;
_vm->_playerActorIdle = false; _vm->_playerActorIdle = false;
} }
#else
if (actorId == kActorMcCoy && _vm->_playerActorIdle) {
result = true;
_vm->_playerActorIdle = false;
}
#endif // BLADERUNNER_ORIGINAL_BUGS
if (isRunning) { if (isRunning) {
_vm->_runningActorId = actorId; _vm->_runningActorId = actorId;
} }
@ -564,15 +606,29 @@ bool ScriptBase::Loop_Actor_Walk_To_Waypoint(int actorId, int waypointId, int pr
run = true; run = true;
} }
#if BLADERUNNER_ORIGINAL_BUGS
_vm->_playerActorIdle = false; _vm->_playerActorIdle = false;
#else
if (actorId == kActorMcCoy) {
_vm->_playerActorIdle = false;
}
#endif // BLADERUNNER_ORIGINAL_BUGS
bool isRunning; bool isRunning;
bool result = _vm->_actors[actorId]->loopWalkToWaypoint(waypointId, proximity, interruptible, run, true, &isRunning); bool result = _vm->_actors[actorId]->loopWalkToWaypoint(waypointId, proximity, interruptible, run, true, &isRunning);
#if BLADERUNNER_ORIGINAL_BUGS
if (_vm->_playerActorIdle) { if (_vm->_playerActorIdle) {
result = true; result = true;
_vm->_playerActorIdle = false; _vm->_playerActorIdle = false;
} }
#else
if (actorId == kActorMcCoy && _vm->_playerActorIdle) {
result = true;
_vm->_playerActorIdle = false;
}
#endif // BLADERUNNER_ORIGINAL_BUGS
if (isRunning) { if (isRunning) {
_vm->_runningActorId = actorId; _vm->_runningActorId = actorId;
} }
@ -592,15 +648,30 @@ bool ScriptBase::Loop_Actor_Walk_To_XYZ(int actorId, float x, float y, float z,
run = true; run = true;
} }
} }
#if BLADERUNNER_ORIGINAL_BUGS
_vm->_playerActorIdle = false; _vm->_playerActorIdle = false;
#else
if (actorId == kActorMcCoy) {
_vm->_playerActorIdle = false;
}
#endif // BLADERUNNER_ORIGINAL_BUGS
bool isRunning; bool isRunning;
bool result = _vm->_actors[actorId]->loopWalkToXYZ(Vector3(x, y, z), proximity, interruptible, run, true, &isRunning); bool result = _vm->_actors[actorId]->loopWalkToXYZ(Vector3(x, y, z), proximity, interruptible, run, true, &isRunning);
#if BLADERUNNER_ORIGINAL_BUGS
if (_vm->_playerActorIdle) { if (_vm->_playerActorIdle) {
result = true; result = true;
_vm->_playerActorIdle = false; _vm->_playerActorIdle = false;
} }
#else
if (actorId == kActorMcCoy && _vm->_playerActorIdle) {
result = true;
_vm->_playerActorIdle = false;
}
#endif // BLADERUNNER_ORIGINAL_BUGS
if (isRunning) { if (isRunning) {
_vm->_runningActorId = actorId; _vm->_runningActorId = actorId;
} }