mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-15 06:08:35 +00:00
ASYLUM: implement Special::chapter11()
This commit is contained in:
parent
56df11e356
commit
bc3ebf36db
@ -519,8 +519,8 @@ void Actor::update() {
|
||||
break;
|
||||
|
||||
case 1:
|
||||
updateStatus12_Chapter11_Actor1();
|
||||
return;
|
||||
getSpecial()->run(NULL, _index);
|
||||
break;
|
||||
|
||||
case 10:
|
||||
case 11:
|
||||
@ -2327,16 +2327,6 @@ void Actor::updateStatusEnabled() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// XXX
|
||||
if (getWorld()->chapter == kChapter11 && _index == 9)
|
||||
// the following block is originally from updateStatus12_Chapter11_Actor1()
|
||||
if (_vm->isGameFlagNotSet(kGameFlag1099)) {
|
||||
_vm->setGameFlag(kGameFlag1099);
|
||||
_reaction[0] = 1;
|
||||
_reaction[1] = 2;
|
||||
_reaction[2] = 3;
|
||||
}
|
||||
}
|
||||
|
||||
void Actor::updateStatusEnabledProcessStatus(int16 testX, int16 testY, uint32 counter, int16 setX, int16 setY) {
|
||||
@ -2491,28 +2481,6 @@ void Actor::updateStatus12_Chapter2_Actor11() {
|
||||
}
|
||||
}
|
||||
|
||||
void Actor::updateStatus12_Chapter11_Actor1() {
|
||||
// Original seems to have lots of dead code here
|
||||
Actor *actor0 = getScene()->getActor(0);
|
||||
if (actor0->isVisible())
|
||||
return;
|
||||
|
||||
if (_vm->isGameFlagNotSet(kGameFlag560))
|
||||
_frameIndex = (_frameIndex + 1) & _frameCount;
|
||||
|
||||
if (getWorld()->tickCount1 < (int32)_vm->getTick()
|
||||
&& !_frameIndex
|
||||
&& _vm->isGameFlagNotSet(kGameFlag560)) {
|
||||
_vm->setGameFlag(kGameFlag560);
|
||||
hide();
|
||||
updateStatus(kActorStatusEnabled);
|
||||
actor0->updateStatus(kActorStatusEnabled);
|
||||
|
||||
getWorld()->field_E848C = 0;
|
||||
getScript()->queueScript(getWorld()->getActionAreaById(1574)->scriptIndex, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void Actor::updateStatus12_Chapter11() {
|
||||
if (!_frameIndex)
|
||||
getSound()->playSound(getWorld()->soundResourceIds[6]);
|
||||
|
@ -107,6 +107,7 @@ public:
|
||||
void setSoundResourceId(ResourceId id) { _soundResourceId = id; }
|
||||
void setStatus(ActorStatus status) { _status = status; }
|
||||
void setTransparency(int32 val) { _transparency = val; }
|
||||
void setTickCount(int32 tickCount) { _tickCount = tickCount; }
|
||||
|
||||
void setField638(int32 val) { _field_638 = val; }
|
||||
void setField934(int32 val) { _field_934 = val; }
|
||||
@ -132,6 +133,7 @@ public:
|
||||
bool shouldInvertPriority() { return _invertPriority; }
|
||||
ResourceId getSoundResourceId() { return _soundResourceId; }
|
||||
ActorStatus getStatus() { return _status; }
|
||||
int32 getTickCount() { return _tickCount; }
|
||||
|
||||
int32 getField638() { return _field_638; }
|
||||
int32 getField934() { return _field_934; }
|
||||
@ -438,7 +440,6 @@ private:
|
||||
|
||||
void updateStatus12_Chapter2();
|
||||
void updateStatus12_Chapter2_Actor11();
|
||||
void updateStatus12_Chapter11_Actor1();
|
||||
void updateStatus12_Chapter11();
|
||||
|
||||
void updateStatus14();
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "asylum/resources/actor.h"
|
||||
#include "asylum/resources/object.h"
|
||||
#include "asylum/resources/encounters.h"
|
||||
#include "asylum/resources/polygons.h"
|
||||
#include "asylum/resources/script.h"
|
||||
#include "asylum/resources/worldstats.h"
|
||||
|
||||
@ -39,6 +40,22 @@
|
||||
|
||||
namespace Asylum {
|
||||
|
||||
static const Common::Point actorRects[][2] = {
|
||||
{Common::Point(1100, 150), Common::Point( 30, 95)},
|
||||
{Common::Point( 695, 159), Common::Point( 113, 54)},
|
||||
{Common::Point( 925, 158), Common::Point( 129, 66)},
|
||||
{Common::Point(1158, 162), Common::Point( 135, 86)},
|
||||
{Common::Point(1319, 218), Common::Point( 150, 133)},
|
||||
{Common::Point( 430, 351), Common::Point( 78, 56)},
|
||||
{Common::Point( 762, 339), Common::Point( 102, 59)},
|
||||
{Common::Point( 962, 328), Common::Point( 118, 45)},
|
||||
{Common::Point( 848, 161), Common::Point( 36, 55)},
|
||||
{Common::Point( 861, 334), Common::Point( 23, 79)},
|
||||
{Common::Point( 600, 193), Common::Point( 21, 36)},
|
||||
{Common::Point( 805, 156), Common::Point( 152, 69)},
|
||||
{Common::Point( 641, 162), Common::Point( 150, 64)},
|
||||
};
|
||||
|
||||
static const int32 zapPatterns[9][16] = {
|
||||
{2292, 2299, 2301, 2302, 2303, 2304, 2306, 2307, 2310, 2311, 2312, 2313, 2314},
|
||||
{2291, 2294, 2295, 2296, 2297, 2298, 2300, 2301, 2306, 2309, 2311, 2313, 2316},
|
||||
@ -109,6 +126,10 @@ void Special::run(Object* object, ActorIndex index) {
|
||||
chapter9(object, index);
|
||||
break;
|
||||
|
||||
case kChapter11:
|
||||
chapter11(object, index);
|
||||
break;
|
||||
|
||||
case kChapter12:
|
||||
chapter12(object, index);
|
||||
break;
|
||||
@ -712,6 +733,265 @@ void Special::chapter9(Object *object, ActorIndex actorIndex) {
|
||||
}
|
||||
}
|
||||
|
||||
void Special::chapter11(Object *object, ActorIndex actorIndex) {
|
||||
Actor *actor0 = getScene()->getActor(0), *actor1 = getScene()->getActor(1);
|
||||
Actor *player = getScene()->getActor(getSharedData()->getPlayerIndex());
|
||||
Common::Point sum;
|
||||
|
||||
playChapterSound(object, actorIndex);
|
||||
|
||||
if (actorIndex == kActorInvalid) {
|
||||
switch (object->getId()) {
|
||||
default:
|
||||
return;
|
||||
|
||||
case kObjectABarrier:
|
||||
if (actor0->isVisible() && _vm->isGameFlagSet(kGameFlag708)) {
|
||||
if (!getSound()->isPlaying(getSpeech()->getSoundResourceId()))
|
||||
_vm->clearGameFlag(kGameFlag219);
|
||||
if (!getWorld()->field_E848C && !getSound()->isPlaying(getWorld()->soundResourceIds[3]))
|
||||
getSound()->playSound(getWorld()->soundResourceIds[3], false, Config.sfxVolume);
|
||||
if (getWorld()->field_E848C == 1 && !getSound()->isPlaying(getWorld()->soundResourceIds[4]))
|
||||
getSound()->playSound(getWorld()->soundResourceIds[4], false, Config.sfxVolume);
|
||||
if (getWorld()->field_E848C == 2 && !getSound()->isPlaying(getWorld()->soundResourceIds[5]))
|
||||
getSound()->playSound(getWorld()->soundResourceIds[5], false, Config.sfxVolume);
|
||||
}
|
||||
|
||||
if (_vm->isGameFlagNotSet(kGameFlag1099)) {
|
||||
_vm->setGameFlag(kGameFlag1099);
|
||||
getScene()->getActor(9)->setReaction(0, 1);
|
||||
getScene()->getActor(9)->setReaction(1, 2);
|
||||
getScene()->getActor(9)->setReaction(2, 3);
|
||||
}
|
||||
|
||||
if (_vm->isGameFlagSet(kGameFlag561) && _vm->isGameFlagNotSet(kGameFlag562)) {
|
||||
ActorStatus playerStatus = player->getStatus();
|
||||
if (playerStatus != kActorStatusGettingHurt && playerStatus != kActorStatusRestarting && playerStatus != kActorStatusAttacking && playerStatus != kActorStatusWalkingTo2)
|
||||
actor0->updateStatus(kActorStatusAttacking);
|
||||
_vm->clearGameFlag(kGameFlag561);
|
||||
}
|
||||
|
||||
if (actor1->getTickCount() != -1 && actor1->getTickCount() < _vm->getTick()) {
|
||||
actor1->setTickCount(-1);
|
||||
actor1->show();
|
||||
actor1->getPoint1()->x = actor0->getPoint2()->x + actor0->getPoint1()->x - actor1->getPoint2()->x;
|
||||
actor1->getPoint1()->y = actor0->getPoint2()->y + actor0->getPoint1()->y - actor1->getPoint2()->y;
|
||||
actor1->updateStatus(kActorStatusWalking2);
|
||||
}
|
||||
|
||||
tentacle(10, kGameFlag557, kGameFlag558, kGameFlag563, actorRects[0][0], actorRects[0][1]);
|
||||
tentacle(11, kGameFlag722, kGameFlag723, kGameFlag724, actorRects[8][0], actorRects[8][1]);
|
||||
tentacle(12, kGameFlag725, kGameFlag726, kGameFlag727, actorRects[9][0], actorRects[9][1]);
|
||||
tentacle(13, kGameFlag728, kGameFlag729, kGameFlag730, actorRects[10][0], actorRects[10][1]);
|
||||
rock(2, kGameFlag597, kGameFlag598, kGameFlag599, kGameFlag600, actorRects[1][0], actorRects[1][1]);
|
||||
rock(3, kGameFlag684, kGameFlag685, kGameFlag686, kGameFlag687, actorRects[2][0], actorRects[2][1]);
|
||||
rock(4, kGameFlag688, kGameFlag689, kGameFlag690, kGameFlag691, actorRects[3][0], actorRects[3][1]);
|
||||
rock(5, kGameFlag692, kGameFlag693, kGameFlag694, kGameFlag695, actorRects[4][0], actorRects[4][1]);
|
||||
rock(6, kGameFlag696, kGameFlag697, kGameFlag698, kGameFlag699, actorRects[5][0], actorRects[5][1]);
|
||||
rock(7, kGameFlag700, kGameFlag701, kGameFlag702, kGameFlag703, actorRects[6][0], actorRects[6][1]);
|
||||
rock(8, kGameFlag704, kGameFlag705, kGameFlag706, kGameFlag707, actorRects[7][0], actorRects[7][1]);
|
||||
rock(16, kGameFlag1054, kGameFlag1055, kGameFlag1056, kGameFlag1057, actorRects[11][0], actorRects[11][1]);
|
||||
rock(17, kGameFlag1058, kGameFlag1059, kGameFlag1060, kGameFlag1061, actorRects[12][0], actorRects[12][1]);
|
||||
break;
|
||||
|
||||
case kObjectMonsterHurt:
|
||||
object->setFrameIndex(object->getFrameIndex() + 1);
|
||||
if (object->getFrameIndex() == 4) {
|
||||
if (getWorld()->field_E8518 <= 2) {
|
||||
object->setFrameIndex(0);
|
||||
_vm->clearGameFlag(kGameFlag582);
|
||||
_vm->setGameFlag(kGameFlag565);
|
||||
} else {
|
||||
_vm->clearGameFlag(kGameFlag582);
|
||||
_vm->setGameFlag(kGameFlag566);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kObjectMonsterDeath:
|
||||
if (object->getFrameIndex() == object->getFrameCount() - 1) {
|
||||
_vm->clearGameFlag(kGameFlag566);
|
||||
_vm->setGameFlag(kGameFlag596);
|
||||
} else {
|
||||
if (object->getFrameIndex() == 40) {
|
||||
_vm->setGameFlag(kGameFlag219);
|
||||
getSpeech()->playPlayer(134);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kObjectMonsterUp:
|
||||
object->setFrameIndex(object->getFrameIndex() + 1);
|
||||
if (object->getFrameIndex() >= object->getFrameCount()) {
|
||||
_vm->clearGameFlag(kGameFlag564);
|
||||
getSpeech()->playPlayer(0);
|
||||
object->setFrameIndex(0);
|
||||
_vm->setGameFlag(kGameFlag565);
|
||||
getWorld()->field_E8490 = -666;
|
||||
}
|
||||
break;
|
||||
|
||||
case kObjectMonsterAttack:
|
||||
if (object->getFrameIndex() != 9)
|
||||
object->setFrameIndex(object->getFrameIndex() + 1);
|
||||
if (object->getFrameIndex() == 8) {
|
||||
getSound()->playSound(object->getSoundResourceId(), false, Config.sfxVolume);
|
||||
|
||||
switch (getWorld()->field_E8494) {
|
||||
default:
|
||||
break;
|
||||
|
||||
case 0:
|
||||
_vm->setGameFlag(kGameFlag567);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
_vm->setGameFlag(kGameFlag568);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
_vm->setGameFlag(kGameFlag569);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
_vm->setGameFlag(kGameFlag567);
|
||||
_vm->setGameFlag(kGameFlag568);
|
||||
_vm->setGameFlag(kGameFlag569);
|
||||
break;
|
||||
}
|
||||
|
||||
if (++getWorld()->field_E8494 > 3)
|
||||
getWorld()->field_E8494 = 0;
|
||||
}
|
||||
|
||||
if (object->getFrameIndex() >= object->getFrameCount()) {
|
||||
_vm->clearGameFlag(kGameFlag570);
|
||||
object->setFrameIndex(0);
|
||||
_vm->setGameFlag(kGameFlag565);
|
||||
}
|
||||
break;
|
||||
|
||||
case kObjectPuke1:
|
||||
sum = *player->getPoint1() + *player->getPoint2();
|
||||
if (getScene()->polygons()->get(getWorld()->actions[getWorld()->getActionAreaIndexById(1591)]->polygonIndex).contains(sum)) {
|
||||
ActorStatus playerStatus = getScene()->getActor(getSharedData()->getPlayerIndex())->getStatus();
|
||||
if (playerStatus == kActorStatusWalking2 || playerStatus == kActorStatusAttacking || playerStatus == kActorStatusEnabled2) {
|
||||
actor0->updateStatus(kActorStatusGettingHurt);
|
||||
getSpeech()->playPlayer(131);
|
||||
++getWorld()->field_E848C;
|
||||
getSound()->stop(getWorld()->soundResourceIds[3]);
|
||||
getSound()->stop(getWorld()->soundResourceIds[4]);
|
||||
getSound()->stop(getWorld()->soundResourceIds[5]);
|
||||
}
|
||||
}
|
||||
|
||||
object->setFrameIndex(object->getFrameIndex() + 1);
|
||||
if (object->getFrameIndex() == 15) {
|
||||
Object *otherObject = getWorld()->getObjectById(kObjectMonsterAttack);
|
||||
otherObject->setFrameIndex(otherObject->getFrameIndex() + 1);
|
||||
}
|
||||
|
||||
if (object->getFrameIndex() >= object->getFrameCount()) {
|
||||
_vm->clearGameFlag(kGameFlag567);
|
||||
object->setFrameIndex(0);
|
||||
}
|
||||
break;
|
||||
|
||||
case kObjectPuke2:
|
||||
sum = *player->getPoint1() + *player->getPoint2();
|
||||
if (getScene()->polygons()->get(getWorld()->actions[getWorld()->getActionAreaIndexById(1590)]->polygonIndex).contains(sum)) {
|
||||
ActorStatus playerStatus = getScene()->getActor(getSharedData()->getPlayerIndex())->getStatus();
|
||||
if (playerStatus == kActorStatusWalking2 || playerStatus == kActorStatusAttacking || playerStatus == kActorStatusEnabled2) {
|
||||
actor0->updateStatus(kActorStatusGettingHurt);
|
||||
++getWorld()->field_E848C;
|
||||
getSound()->stop(getWorld()->soundResourceIds[3]);
|
||||
getSound()->stop(getWorld()->soundResourceIds[4]);
|
||||
getSound()->stop(getWorld()->soundResourceIds[5]);
|
||||
getSpeech()->playPlayer(131);
|
||||
}
|
||||
}
|
||||
|
||||
object->setFrameIndex(object->getFrameIndex() + 1);
|
||||
if (object->getFrameIndex() == 15 && _vm->isGameFlagNotSet(kGameFlag567)) {
|
||||
Object *otherObject = getWorld()->getObjectById(kObjectMonsterAttack);
|
||||
otherObject->setFrameIndex(otherObject->getFrameIndex() + 1);
|
||||
}
|
||||
|
||||
if (object->getFrameIndex() >= object->getFrameCount()) {
|
||||
_vm->clearGameFlag(kGameFlag568);
|
||||
object->setFrameIndex(0);
|
||||
}
|
||||
break;
|
||||
|
||||
case kObjectPuke3:
|
||||
sum = *player->getPoint1() + *player->getPoint2();
|
||||
if (getScene()->polygons()->get(getWorld()->actions[getWorld()->getActionAreaIndexById(1589)]->polygonIndex).contains(sum)) {
|
||||
ActorStatus playerStatus = getScene()->getActor(getSharedData()->getPlayerIndex())->getStatus();
|
||||
if (playerStatus == kActorStatusWalking2 || playerStatus == kActorStatusAttacking || playerStatus == kActorStatusEnabled2) {
|
||||
actor0->updateStatus(kActorStatusGettingHurt);
|
||||
++getWorld()->field_E848C;
|
||||
getSound()->stop(getWorld()->soundResourceIds[3]);
|
||||
getSound()->stop(getWorld()->soundResourceIds[4]);
|
||||
getSound()->stop(getWorld()->soundResourceIds[5]);
|
||||
getSpeech()->playPlayer(131);
|
||||
}
|
||||
}
|
||||
|
||||
object->setFrameIndex(object->getFrameIndex() + 1);
|
||||
if (object->getFrameIndex() == 15 && _vm->isGameFlagNotSet(kGameFlag567)) {
|
||||
Object *otherObject = getWorld()->getObjectById(kObjectMonsterAttack);
|
||||
otherObject->setFrameIndex(otherObject->getFrameIndex() + 1);
|
||||
}
|
||||
|
||||
if (object->getFrameIndex() >= object->getFrameCount()) {
|
||||
_vm->clearGameFlag(kGameFlag569);
|
||||
object->setFrameIndex(0);
|
||||
}
|
||||
break;
|
||||
|
||||
case kObjectMonsterStatus:
|
||||
_vm->setGameFlag(kGameFlag572);
|
||||
if (object->getFrameIndex() >= getWorld()->dword_4563A0 + object->getFrameIndex()) {
|
||||
object->setFrameIndex(object->getFrameCount() - 1);
|
||||
getWorld()->dword_4563A0 = -1;
|
||||
}
|
||||
|
||||
if (object->getFrameIndex() < 0) {
|
||||
object->setFrameIndex(0);
|
||||
getWorld()->dword_4563A0 = 1;
|
||||
}
|
||||
|
||||
if (getWorld()->field_E8490 == -666)
|
||||
getWorld()->field_E8490 = _vm->getTick() + 3000;
|
||||
|
||||
if (getWorld()->field_E8490 < _vm->getTick()) {
|
||||
getWorld()->field_E8490 = -666;
|
||||
if (_vm->isGameFlagSet(kGameFlag572)) {
|
||||
_vm->clearGameFlag(kGameFlag565);
|
||||
_vm->setGameFlag(kGameFlag570);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
} else {
|
||||
if (actorIndex == 1 && !actor0->isVisible()) {
|
||||
if (_vm->isGameFlagNotSet(kGameFlag560))
|
||||
actor1->setFrameIndex((actor1->getFrameIndex() + 1) % actor1->getFrameCount());
|
||||
if (getWorld()->tickCount1 < _vm->getTick() && !actor1->getFrameIndex()) {
|
||||
if (_vm->isGameFlagNotSet(kGameFlag560)) {
|
||||
_vm->setGameFlag(kGameFlag560);
|
||||
actor1->hide();
|
||||
actor1->updateStatus(kActorStatusEnabled);
|
||||
actor0->updateStatus(kActorStatusEnabled);
|
||||
getWorld()->field_E848C = 0;
|
||||
getScript()->queueScript(getWorld()->getActionAreaIndexById(1574), kActorSarah);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Special::chapter12(Object *object, ActorIndex actorIndex) {
|
||||
playChapterSound(object, actorIndex);
|
||||
|
||||
@ -1727,4 +2007,88 @@ void Special::checkOtherObject(Object *object, ObjectId otherObjectId, GameFlag
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Chapter 11 helpers
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void Special::rock(ActorIndex actorIndex, GameFlag flag1, GameFlag flag2, GameFlag flag3, GameFlag flag4, const Common::Point &p1, const Common::Point &p2) {
|
||||
Actor *actor = getScene()->getActor(actorIndex);
|
||||
|
||||
if (!(_vm->isGameFlagNotSet(flag1) && _vm->isGameFlagSet(flag2)))
|
||||
return;
|
||||
|
||||
if (_vm->isGameFlagNotSet(flag3)) {
|
||||
getWorld()->tickValueArray[actorIndex] = _vm->getTick() + 1500;
|
||||
|
||||
actor->getPoint1()->x = p1.x + rnd(p2.x - p1.x) - actor->getPoint2()->x;
|
||||
actor->getPoint1()->y = p1.y + rnd(p2.y - p1.y) - actor->getPoint2()->y;
|
||||
|
||||
getWorld()->field_E8594[actorIndex] = actor->getPoint1()->y;
|
||||
actor->getPoint1()->y -= 160;
|
||||
|
||||
actor->updateStatus(kActorStatusEnabled2);
|
||||
getSound()->playSound(getWorld()->soundResourceIds[0], false, Config.sfxVolume - 10);
|
||||
_vm->setGameFlag(flag3);
|
||||
getScene()->getActor(actorIndex)->show();
|
||||
} else if (_vm->getTick() > getWorld()->tickValueArray[actorIndex]) {
|
||||
if (_vm->isGameFlagNotSet(flag4)) {
|
||||
_vm->setGameFlag(flag4);
|
||||
actor->setFrameIndex(0);
|
||||
actor->updateStatus(kActorStatusWalking2);
|
||||
if (actorIndex == 8 || actorIndex == 9)
|
||||
actor->setField944(1);
|
||||
actor->getPoint1()->y = 0;
|
||||
} else {
|
||||
if (actor->getPoint1()->y <= getWorld()->field_E8594[actorIndex]) {
|
||||
actor->getPoint1()->y += 27;
|
||||
actor->setFrameIndex((actor->getFrameIndex() + 1) % actor->getFrameCount());
|
||||
} else if (actor->getStatus() == kActorStatusAttacking) {
|
||||
actor->setFrameIndex((actor->getFrameIndex() + 1) % actor->getFrameCount());
|
||||
if (actor->getFrameIndex() == actor->getFrameCount() - 1)
|
||||
actor->hide();
|
||||
} else {
|
||||
actor->setField944(3);
|
||||
getSound()->playSound(getWorld()->soundResourceIds[1], false, Config.sfxVolume - 10);
|
||||
actor->updateStatus(kActorStatusAttacking);
|
||||
actor->setFrameIndex(4);
|
||||
|
||||
ActorIndex playerIndex = getSharedData()->getPlayerIndex();
|
||||
Common::Point sum = *actor->getPoint1() + *actor->getPoint2();
|
||||
Common::Point playerSum = *getScene()->getActor(playerIndex)->getPoint1() + *getScene()->getActor(playerIndex)->getPoint2();
|
||||
if (Actor::euclidianDistance(sum, playerSum) < 30) {
|
||||
getScene()->getActor(0)->updateStatus(kActorStatusGettingHurt);
|
||||
++getWorld()->field_E848C;
|
||||
getSound()->stop(getWorld()->soundResourceIds[3]);
|
||||
getSound()->stop(getWorld()->soundResourceIds[4]);
|
||||
getSound()->stop(getWorld()->soundResourceIds[5]);
|
||||
getSpeech()->playPlayer(131);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Special::tentacle(ActorIndex actorIndex, GameFlag flag1, GameFlag flag2, GameFlag flag3, const Common::Point &p1, const Common::Point &p2) {
|
||||
Actor *actor = getScene()->getActor(actorIndex);
|
||||
if (_vm->isGameFlagSet(flag1)
|
||||
&& _vm->isGameFlagNotSet(flag3)
|
||||
&& !_vm->isGameFlagSet(flag2)
|
||||
&& _vm->getTick() > getWorld()->tickValueArray[actorIndex + 10]) {
|
||||
actor->getPoint1()->x = p1.x + rnd(p2.x - p1.x) - actor->getPoint2()->x;
|
||||
actor->getPoint1()->y = p1.y + rnd(p2.y - p1.y) - actor->getPoint2()->y;
|
||||
|
||||
ActorIndex playerIndex = getSharedData()->getPlayerIndex();
|
||||
Common::Point sum = *actor->getPoint1() + *actor->getPoint2();
|
||||
Common::Point playerSum = *getScene()->getActor(playerIndex)->getPoint1() + *getScene()->getActor(playerIndex)->getPoint2();
|
||||
|
||||
if (Actor::euclidianDistance(sum, playerSum) > 40) {
|
||||
getWorld()->tickValueArray[actorIndex + 10] = 0;
|
||||
actor->show();
|
||||
actor->updateStatus(kActorStatusWalking2);
|
||||
actor->setFrameIndex(0);
|
||||
_vm->setGameFlag(flag2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // End of namespace Asylum
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "asylum/shared.h"
|
||||
|
||||
#include "common/scummsys.h"
|
||||
#include "common/rect.h"
|
||||
|
||||
namespace Asylum {
|
||||
|
||||
@ -64,6 +65,7 @@ private:
|
||||
void chapter7(Object *object, ActorIndex actorIndex);
|
||||
void chapter8(Object *object, ActorIndex actorIndex);
|
||||
void chapter9(Object *object, ActorIndex actorIndex);
|
||||
void chapter11(Object *object, ActorIndex actorIndex);
|
||||
void chapter12(Object *object, ActorIndex actorIndex);
|
||||
void chapter13(Object *object, ActorIndex actorIndex);
|
||||
|
||||
@ -98,6 +100,13 @@ private:
|
||||
|
||||
void checkObject(Object *object, GameFlag flagToSet, GameFlag flagToClear, ObjectId objectId = kObjectNone);
|
||||
void checkOtherObject(Object *object, ObjectId otherObjectId, GameFlag flagToClear, GameFlag flagToSet);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Chapter 11 helpers
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void tentacle(ActorIndex actorIndex, GameFlag flag1, GameFlag flag2, GameFlag flag3, const Common::Point &p1, const Common::Point &p2);
|
||||
void rock(ActorIndex actorIndex, GameFlag flag1, GameFlag flag2, GameFlag flag3, GameFlag flag4, const Common::Point &p1, const Common::Point &p2);
|
||||
};
|
||||
|
||||
} // End of namespace Asylum
|
||||
|
@ -92,6 +92,7 @@ WorldStats::WorldStats(AsylumEngine *engine) : _vm(engine) {
|
||||
memset(&wheels, 0, sizeof(wheels));
|
||||
tickCount1 = 0;
|
||||
memset(&field_E8660, 0, sizeof(field_E8660));
|
||||
dword_4563A0 = 0;
|
||||
}
|
||||
|
||||
WorldStats::~WorldStats() {
|
||||
|
@ -141,6 +141,7 @@ public:
|
||||
Object *wheels[7];
|
||||
int32 tickCount1;
|
||||
uint32 field_E8660[6];
|
||||
int32 dword_4563A0;
|
||||
|
||||
void setWheelObjects();
|
||||
|
||||
|
@ -121,20 +121,66 @@ enum GameFlag {
|
||||
kGameFlag545 = 545,
|
||||
kGameFlag553 = 553,
|
||||
kGameFlag556 = 556,
|
||||
kGameFlag557 = 557,
|
||||
kGameFlag558 = 558,
|
||||
kGameFlag560 = 560,
|
||||
kGameFlag561 = 561,
|
||||
kGameFlag562 = 562,
|
||||
kGameFlag563 = 563,
|
||||
kGameFlag564 = 564,
|
||||
kGameFlag565 = 565,
|
||||
kGameFlag566 = 566,
|
||||
kGameFlag567 = 567,
|
||||
kGameFlag568 = 568,
|
||||
kGameFlag569 = 569,
|
||||
kGameFlag570 = 570,
|
||||
kGameFlag572 = 572,
|
||||
kGameFlag582 = 582,
|
||||
kGameFlag583 = 583,
|
||||
kGameFlag596 = 596,
|
||||
kGameFlag597 = 597,
|
||||
kGameFlag598 = 598,
|
||||
kGameFlag599 = 599,
|
||||
kGameFlag600 = 600,
|
||||
kGameFlag608 = 608,
|
||||
kGameFlag619 = 619,
|
||||
kGameFlag635 = 635,
|
||||
kGameFlag636 = 636,
|
||||
kGameFlag637 = 637,
|
||||
kGameFlagSolveHiveControl = 640,
|
||||
kGameFlag684 = 684,
|
||||
kGameFlag685 = 685,
|
||||
kGameFlag686 = 686,
|
||||
kGameFlag687 = 687,
|
||||
kGameFlag688 = 688,
|
||||
kGameFlag689 = 689,
|
||||
kGameFlag690 = 690,
|
||||
kGameFlag691 = 691,
|
||||
kGameFlag692 = 692,
|
||||
kGameFlag693 = 693,
|
||||
kGameFlag694 = 694,
|
||||
kGameFlag695 = 695,
|
||||
kGameFlag696 = 696,
|
||||
kGameFlag697 = 697,
|
||||
kGameFlag698 = 698,
|
||||
kGameFlag699 = 699,
|
||||
kGameFlag700 = 700,
|
||||
kGameFlag701 = 701,
|
||||
kGameFlag702 = 702,
|
||||
kGameFlag703 = 703,
|
||||
kGameFlag704 = 704,
|
||||
kGameFlag705 = 705,
|
||||
kGameFlag706 = 706,
|
||||
kGameFlag707 = 707,
|
||||
kGameFlag708 = 708,
|
||||
kGameFlag722 = 722,
|
||||
kGameFlag723 = 723,
|
||||
kGameFlag724 = 724,
|
||||
kGameFlag725 = 725,
|
||||
kGameFlag726 = 726,
|
||||
kGameFlag727 = 727,
|
||||
kGameFlag728 = 728,
|
||||
kGameFlag729 = 729,
|
||||
kGameFlag730 = 730,
|
||||
kGameFlag759 = 759,
|
||||
kGameFlag760 = 760,
|
||||
@ -188,6 +234,14 @@ enum GameFlag {
|
||||
kGameFlag1021 = 1021,
|
||||
kGameFlag1022 = 1022,
|
||||
kGameFlag1023 = 1023,
|
||||
kGameFlag1054 = 1054,
|
||||
kGameFlag1055 = 1055,
|
||||
kGameFlag1056 = 1056,
|
||||
kGameFlag1057 = 1057,
|
||||
kGameFlag1058 = 1058,
|
||||
kGameFlag1059 = 1059,
|
||||
kGameFlag1060 = 1060,
|
||||
kGameFlag1061 = 1061,
|
||||
kGameFlag1062 = 1062,
|
||||
kGameFlag1063 = 1063,
|
||||
kGameFlag1064 = 1064,
|
||||
@ -570,6 +624,15 @@ enum ObjectId {
|
||||
kObjectWitchDoctor = 1778,
|
||||
kObjectStoneWifeStatuQuo = 1782,
|
||||
kObjectFishermanWidowStatusQuo = 1786,
|
||||
kObjectABarrier = 1899,
|
||||
kObjectMonsterUp = 1956,
|
||||
kObjectMonsterStatus = 1957,
|
||||
kObjectMonsterDeath = 1958,
|
||||
kObjectMonsterAttack = 1959,
|
||||
kObjectPuke1 = 1960,
|
||||
kObjectPuke2 = 1961,
|
||||
kObjectPuke3 = 1962,
|
||||
kObjectMonsterHurt = 1997,
|
||||
kObjectWheel1 = 2113,
|
||||
kObjectWheel2 = 2114,
|
||||
kObjectWheel3 = 2115,
|
||||
|
Loading…
Reference in New Issue
Block a user