NEVERHOOD: More work on Scene1201

This commit is contained in:
johndoe123 2011-07-18 20:20:23 +00:00 committed by Willem Jan Palenstijn
parent 0632fc7dda
commit f162516f25
4 changed files with 109 additions and 18 deletions

View File

@ -485,7 +485,6 @@ void Klayman::sub41C930(int16 x, bool flag) {
error("// TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub421550));");
// TODO AnimatedSprite_setCallback2(AnimationCallback(&Klayman::sub421550));
} else {
debug("##################################################################");
_x4 = x;
setCallback2(AnimationCallback(&Klayman::sub41F950));
}
@ -773,8 +772,7 @@ void Klayman::sub41FA40() {
if (_status3 == 2) {
sub41C7B0();
} else if (_status3 == 3) {
error("// TODO sub420F20();");
// TODO sub420F20();
sub420F20();
} else {
_flagE2 = true;
_flagE5 = true;
@ -1626,6 +1624,23 @@ void Klayman::sub4207F0() {
SetMessageHandler(&Klayman::handleMessage41EEF0);
}
void Klayman::sub420F20() {
_flagF8 = false;
_flagE5 = false;
setFileHash(0x11A8E012, 0, -1);
SetUpdateHandler(&Klayman::update);
SetSpriteCallback(&Klayman::spriteUpdate41F5A0);
SetMessageHandler(&Klayman::handleMessage41EC70);
}
void Klayman::spriteUpdate41F5A0() {
if (!_flagF8 && ABS(_x4 - _x) < 80) {
_parentScene->sendMessage(0x4829, 0, this);
_flagF8 = true;
}
AnimatedSprite::updateDeltaXY();
}
//##############################################################################
// KmScene1001
@ -1758,8 +1773,6 @@ void KmScene1002::xUpdate() {
uint32 KmScene1002::xHandleMessage(int messageNum, const MessageParam &param) {
//ok
debug("KmScene1002::xHandleMessage(%04X)", messageNum);
if (messageNum == 0x100D)
debug("-> %08X", param.asInteger());
switch (messageNum) {
case 0x2001:
setCallback2(AnimationCallback(&KmScene1002::sub449E90));
@ -1908,9 +1921,6 @@ uint32 KmScene1002::handleMessage4498E0(int messageNum, const MessageParam &para
_x = ((Sprite*)sender)->getX() + 75;
}
_y = ((Sprite*)sender)->getY() - 200;
debug("&&&&&&&&&&& param.asInteger() = %d", param.asInteger());
if (param.asInteger() == 0) {
sub449EF0();
} else if (param.asInteger() == 1) {

View File

@ -84,11 +84,13 @@ public:
void sub420ED0();
void sub4207A0();
void sub4207F0();
void sub420F20();
void spriteUpdate41F250();
void spriteUpdate41F5F0();
void spriteUpdate41F780();
void spriteUpdate41F230();
void spriteUpdate41F5A0();
uint32 handleMessage41D360(int messageNum, const MessageParam &param, Entity *sender);
uint32 handleMessage41D480(int messageNum, const MessageParam &param, Entity *sender);

View File

@ -478,6 +478,69 @@ void Class463::sub40CD90() {
_newHashListIndex = -2;
}
Class465::Class465(NeverhoodEngine *vm, Sprite *class463)
: AnimatedSprite(vm, 1200), _class463(class463) {
createSurface1(995, 0x828C0411);
SetUpdateHandler(&Class465::update);
SetMessageHandler(&Sprite::handleMessage);
SetSpriteCallback(&Class465::spriteUpdate40D150);
setFileHash(0x828C0411, 0, -1);
_surface->setVisible(false);
}
Class465::~Class465() {
// TODO Sound1ChList_sub_407AF0(0x041080A4);
}
void Class465::update() {
AnimatedSprite::update();
if (getGlobalVar(0x20A0C516)) {
_surface->setVisible(true);
SetUpdateHandler(&AnimatedSprite::update);
// TODO Sound1ChList_addSoundResource(0x041080A4, 0x460A1050, true);
// TODO Sound1ChList_playLooping(0x460A1050);
}
}
void Class465::spriteUpdate40D150() {
_x = _class463->getX() - 18;
_y = _class463->getY() - 158;
}
AsScene1201LeftDoor::AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klayman)
: AnimatedSprite(vm, 1100), _soundResource(vm), _klayman(klayman) {
_x = 320;
_y = 240;
createSurface(800, 55, 199);
if (_klayman->getX() < 100) {
setFileHash(0x508A111B, 0, -1);
_newHashListIndex = -2;
_soundResource.play(calcHash("fxDoorOpen03"));
} else {
setFileHash(0x508A111B, -1, -1);
_newHashListIndex = -2;
}
SetUpdateHandler(&AnimatedSprite::update);
SetMessageHandler(&AsScene1201LeftDoor::handleMessage);
}
uint32 AsScene1201LeftDoor::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x4809:
sub40D590();
break;
}
return messageResult;
}
void AsScene1201LeftDoor::sub40D590() {
setFileHash(0x508A111B, -1, -1);
_playBackwards = true;
_newHashListIndex = 0;
}
Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _flag(false) {
@ -600,13 +663,11 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
class463->getSurface()->getClipRect().y2 = 480;
_vm->_collisionMan->addSprite(_class463);
_class463 = addSprite(class463);
#if 0
tempSprite = addSprite(new Class465(_vm, _class463));
tempSprite->getSurface()->getClipRect().x1 = x1;
tempSprite->getSurface()->getClipRect().y1 = 0;
tempSprite->getSurface()->getClipRect().x2 = x2;
tempSprite->getSurface()->getClipRect().y2 = 480;
#endif
class463->setRepl(64, 0);
}
@ -670,13 +731,11 @@ Scene1201::Scene1201(NeverhoodEngine *vm, Module *parentModule, int which)
tempSprite = addSprite(new StaticSprite(_vm, 0x63D400BC, 900));
#if 0
_class467 = addSprite(new Class467(_vm, _klayman));
_class467->getSurface()->getClipRect().x1 = x1;
_class467->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y;
_class467->getSurface()->getClipRect().x2 = tempSprite->getSurface()->getDrawRect().x + tempSprite->getSurface()->getDrawRect().width;
_class467->getSurface()->getClipRect().y2 = 480;
#endif
_asLeftDoor = addSprite(new AsScene1201LeftDoor(_vm, _klayman));
_asLeftDoor->getSurface()->getClipRect().x1 = x1;
_asLeftDoor->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y;
_asLeftDoor->getSurface()->getClipRect().x2 = tempSprite->getSurface()->getDrawRect().x + tempSprite->getSurface()->getDrawRect().width;
_asLeftDoor->getSurface()->getClipRect().y2 = 480;
if (getGlobalVar(0x0A310817) && ! getGlobalVar(0x0112090A)) {
setGlobalVar(0x0112090A, 1);

View File

@ -109,6 +109,26 @@ protected:
void sub40CD90();
};
class Class465 : public AnimatedSprite {
public:
Class465(NeverhoodEngine *vm, Sprite *class463);
~Class465();
protected:
Sprite *_class463;
void update();
void spriteUpdate40D150();
};
class AsScene1201LeftDoor : public AnimatedSprite {
public:
AsScene1201LeftDoor(NeverhoodEngine *vm, Sprite *klayman);
protected:
Sprite *_klayman;
SoundResource _soundResource;
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
void sub40D590();
};
class SsScene1201Tnt : public StaticSprite {
public:
SsScene1201Tnt(NeverhoodEngine *vm, uint32 elemIndex, uint32 pointIndex, int16 clipY2);
@ -128,7 +148,7 @@ protected:
Sprite *_class463;
Sprite *_class462;
Sprite *_class466;
Sprite *_class467;
Sprite *_asLeftDoor;
Sprite *_class468;
Sprite *_asTape;
bool _flag;