From 9b92fc5e640e6feb61e856ce587dfd3637a3efce Mon Sep 17 00:00:00 2001 From: Julien Templier Date: Tue, 5 Jul 2011 06:31:26 -0400 Subject: [PATCH] ASYLUM: Implement Actor::updateStatus15_Chapter11_Player() --- engines/asylum/resources/actor.cpp | 55 ++++++++++++++++++++++++++- engines/asylum/resources/worldstats.h | 2 +- engines/asylum/shared.h | 7 ++++ 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/engines/asylum/resources/actor.cpp b/engines/asylum/resources/actor.cpp index 1a34e6912a4..562f81aa3c3 100644 --- a/engines/asylum/resources/actor.cpp +++ b/engines/asylum/resources/actor.cpp @@ -1721,7 +1721,60 @@ void Actor::updateStatus15_Chapter11() { } void Actor::updateStatus15_Chapter11_Player() { - error("[Actor::updateStatus15_Chapter11_Player] not implemented!"); + _frameIndex++; + + if (_frameIndex == 17) { + getSpeech()->playPlayer(130); + + if (getWorld()->field_E849C >= 666) { + if (_vm->isGameFlagSet(kGameFlag583)) { + _vm->setGameFlag(kGameFlag582); + _vm->clearGameFlag(kGameFlag565); + ++getWorld()->field_E8518; + getSound()->playSound(getWorld()->soundResourceIds[2]); + } + } else { + Actor *actor2 = getScene()->getActor(getWorld()->field_E849C); + + double diffX = (actor2->getPoint1()->x + actor2->getPoint2()->x) - (_point1.x + _point2.x); + double diffY = (actor2->getPoint1()->y + actor2->getPoint2()->y) - (_point1.y + _point2.y); + + if (sqrt(diffX * diffX + diffY * diffY) < 75.0f + && (actor2->getStatus() == kActorStatus14 || actor2->getStatus() == kActorStatus15)) { + getSound()->playSound(getWorld()->soundResourceIds[2]); + + switch (getWorld()->field_E849C) { + default: + break; + + case 10: + _vm->setGameFlag(kGameFlag563); + break; + + case 11: + _vm->setGameFlag(kGameFlag724); + break; + + case 12: + _vm->setGameFlag(kGameFlag727); + break; + + case 13: + _vm->setGameFlag(kGameFlag730); + break; + } + + actor2->updateStatus(kActorStatus17); + } + } + } + + if (_frameIndex >= _frameCount) { + getCursor()->show(); + getSharedData()->setFlag(kFlag1, false); + _frameIndex = 0; + updateStatus(kActorStatus14); + } } void Actor::updateStatus16_Chapter2() { diff --git a/engines/asylum/resources/worldstats.h b/engines/asylum/resources/worldstats.h index 4caef39d76d..ce430c83dda 100644 --- a/engines/asylum/resources/worldstats.h +++ b/engines/asylum/resources/worldstats.h @@ -133,7 +133,7 @@ public: int32 field_E8490; int32 field_E8494; int32 field_E8498; - int32 field_E849C; + int32 field_E849C; // ActorIndex??? int32 tickValueArray[30]; int32 field_E8518; int32 field_E851C[30]; diff --git a/engines/asylum/shared.h b/engines/asylum/shared.h index 305d3a4d805..295f1e7e2ae 100644 --- a/engines/asylum/shared.h +++ b/engines/asylum/shared.h @@ -119,12 +119,19 @@ enum GameFlag { kGameFlag553 = 553, kGameFlag556 = 556, kGameFlag560 = 560, + kGameFlag563 = 563, + kGameFlag565 = 565, kGameFlag570 = 570, + kGameFlag582 = 582, + kGameFlag583 = 583, kGameFlag608 = 608, kGameFlag619 = 619, kGameFlag635 = 635, kGameFlag636 = 636, kGameFlag637 = 637, + kGameFlag724 = 724, + kGameFlag727 = 727, + kGameFlag730 = 730, kGameFlag776 = 776, kGameFlag801 = 801, kGameFlag802 = 802,