ASYLUM: make actors face each other when interacting

This commit is contained in:
alxpnv 2021-05-19 15:09:31 +03:00
parent e394bb3086
commit c33604a765

View File

@ -1716,30 +1716,33 @@ END_OPCODE
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// Opcode 0x56 // Opcode 0x56
IMPLEMENT_OPCODE(Interact) IMPLEMENT_OPCODE(Interact)
Actor *actor = getScene()->getActor(cmd->param2 == 2 ? getSharedData()->getPlayerIndex() : cmd->param1); Actor *player = getScene()->getActor(), *actor = getScene()->getActor((ActorIndex)cmd->param1);
if (actor->getStatus() == kActorStatusWalkingTo || actor->getStatus() == kActorStatusWalkingTo2) {
if (cmd->param2 == 2)
_processNextEntry = true;
return;
}
if (cmd->param2 == 2) { if (cmd->param2 == 2) {
if (player->getStatus() == kActorStatusWalkingTo || player->getStatus() == kActorStatusWalkingTo2) {
_processNextEntry = true;
return;
}
cmd->param2 = 1; cmd->param2 = 1;
_processNextEntry = false; _processNextEntry = false;
if ((actor->getPoint1()->x + actor->getPoint2()->x == cmd->param6) && (actor->getPoint1()->y + actor->getPoint2()->y == cmd->param7)) { if ((player->getPoint1()->x + player->getPoint2()->x == cmd->param6)
getScene()->getActor()->faceTarget((uint32)cmd->param1, kDirectionFromActor); && (player->getPoint1()->y + player->getPoint2()->y == cmd->param7)) {
actor->updateFromDirection((ActorDirection)((actor->getDirection() + 4) & 7)); player->faceTarget((uint32)cmd->param1, kDirectionFromActor);
actor->updateFromDirection((ActorDirection)((player->getDirection() + 4) & 7));
} else { } else {
_currentQueueEntry->currentLine = cmd->param3; _currentQueueEntry->currentLine = cmd->param3;
} }
} else { } else {
Common::Point point; Common::Point point;
if (actor->getStatus() == kActorStatusWalkingTo || actor->getStatus() == kActorStatusWalkingTo2)
return;
if (actor->canInteract(&point, &cmd->param4)) { if (actor->canInteract(&point, &cmd->param4)) {
getScene()->getActor()->processStatus(point.x, point.y, (bool)cmd->param4); player->processStatus(point.x, point.y, (bool)cmd->param4);
cmd->param6 = point.x; cmd->param6 = point.x;
cmd->param7 = point.y; cmd->param7 = point.y;