diff options
author | johndoe123 | 2011-07-16 17:27:21 +0000 |
---|---|---|
committer | Willem Jan Palenstijn | 2013-05-08 20:38:48 +0200 |
commit | 71da221507182398a1fe905f4cd293a4ed25eacd (patch) | |
tree | 084b9215a6c79979461abe8dd7e457321e58da5a /engines | |
parent | a23b694c94d318b3e06f450189aab82b3908fcc5 (diff) | |
download | scummvm-rg350-71da221507182398a1fe905f4cd293a4ed25eacd.tar.gz scummvm-rg350-71da221507182398a1fe905f4cd293a4ed25eacd.tar.bz2 scummvm-rg350-71da221507182398a1fe905f4cd293a4ed25eacd.zip |
NEVERHOOD: Implement Scene1004
- Module1000 is now almost complete
Diffstat (limited to 'engines')
-rw-r--r-- | engines/neverhood/graphics.h | 1 | ||||
-rw-r--r-- | engines/neverhood/klayman.cpp | 118 | ||||
-rw-r--r-- | engines/neverhood/klayman.h | 11 | ||||
-rw-r--r-- | engines/neverhood/module1000.cpp | 253 | ||||
-rw-r--r-- | engines/neverhood/module1000.h | 23 | ||||
-rw-r--r-- | engines/neverhood/resource.cpp | 4 | ||||
-rw-r--r-- | engines/neverhood/resource.h | 1 | ||||
-rw-r--r-- | engines/neverhood/scene.cpp | 12 | ||||
-rw-r--r-- | engines/neverhood/scene.h | 3 | ||||
-rw-r--r-- | engines/neverhood/sprite.cpp | 12 | ||||
-rw-r--r-- | engines/neverhood/sprite.h | 3 |
11 files changed, 386 insertions, 55 deletions
diff --git a/engines/neverhood/graphics.h b/engines/neverhood/graphics.h index 8bdf0afd3d..36bd95e3ab 100644 --- a/engines/neverhood/graphics.h +++ b/engines/neverhood/graphics.h @@ -81,6 +81,7 @@ public: bool getVisible() const { return _visible; } void setVisible(bool value) { _visible = value; } void setTransparent(bool value) { _transparent = value; } + Graphics::Surface *getSurface() { return _surface; } protected: NeverhoodEngine *_vm; int _priority; diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp index 51dde55548..d5c320536f 100644 --- a/engines/neverhood/klayman.cpp +++ b/engines/neverhood/klayman.cpp @@ -1555,7 +1555,6 @@ void Klayman::sub420420() { } uint32 Klayman::handleMessage41E290(int messageNum, const MessageParam ¶m, Entity *sender) { - uint32 messageResult = handleMessage41D480(messageNum, param, sender); switch (messageNum) { case 0x100D: @@ -1567,6 +1566,33 @@ uint32 Klayman::handleMessage41E290(int messageNum, const MessageParam ¶m, E return messageResult; } +void Klayman::sub420ED0() { + if (!sub41CEB0(AnimationCallback(&Klayman::sub420ED0))) { + _status2 = 2; + _flagE5 = false; + setFileHash(0x91540140, 0, -1); + SetUpdateHandler(&Klayman::update); + SetMessageHandler(&Klayman::handleMessage41E2F0); + SetSpriteCallback(&Klayman::spriteUpdate41F230); + } +} + +uint32 Klayman::handleMessage41E2F0(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = handleMessage41D480(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0xC61A0119) { + _soundResource1.play(0x402338C2); + } else if (param.asInteger() == 0x32180101) { + _soundResource1.play(0x4924AAC4); + } else if (param.asInteger() == 0x0A2A9098) { + _soundResource1.play(0x0A2AA8E0); + } + break; + } + return messageResult; +} + //############################################################################## // KmScene1001 @@ -2209,4 +2235,94 @@ void KmScene1002::sub44A4B0() { _attachedSprite->sendMessage(0x482A, 0, this); } +// KmScene1004 + +KmScene1004::KmScene1004(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y) + : Klayman(vm, parentScene, x, y, 1000, 1000) { + + _dataResource.load(0x01900A04); +} + +uint32 KmScene1004::xHandleMessage(int messageNum, const MessageParam ¶m) { + switch (messageNum) { + case 0x4001: + case 0x4800: + sub41C930(param.asPoint().x, false); + break; + case 0x4004: + setCallback2(AnimationCallback(&Klayman::sub41FC80)); + break; + case 0x4817: + setDoDeltaX(param.asInteger()); + sub41C7B0(); + break; + case 0x4818: + sub41C930(_dataResource.getPoint(param.asInteger()).x, false); + break; + case 0x481E: + setCallback2(AnimationCallback(&KmScene1004::sub478170)); + break; + case 0x4820: + _parentScene->sendMessage(0x2000, 0, this); + setCallback2(AnimationCallback(&Klayman::sub420970)); + break; + case 0x4821: + _parentScene->sendMessage(0x2000, 0, this); + _y4 = param.asInteger(); + setCallback2(AnimationCallback(&Klayman::sub4209D0)); + break; + case 0x4822: + _parentScene->sendMessage(0x2000, 0, this); + _y4 = param.asInteger(); + setCallback2(AnimationCallback(&Klayman::sub420AD0)); + break; + case 0x4823: + _parentScene->sendMessage(0x2001, 0, this); + setCallback2(AnimationCallback(&Klayman::sub420BC0)); + break; + case 0x4824: + _parentScene->sendMessage(0x2000, 0, this); + _y4 = _dataResource.getPoint(param.asInteger()).y; + setCallback2(AnimationCallback(&Klayman::sub4209D0)); + break; + case 0x4825: + _parentScene->sendMessage(0x2000, 0, this); + _y4 = _dataResource.getPoint(param.asInteger()).y; + setCallback2(AnimationCallback(&Klayman::sub420AD0)); + break; + case 0x4828: + setCallback2(AnimationCallback(&Klayman::sub420ED0)); + break; + case 0x483F: + sub41CD00(param.asInteger()); + break; + case 0x4840: + sub41CD70(param.asInteger()); + break; + } + return 0; +} + +uint32 KmScene1004::handleMessage478110(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = handleMessage41D480(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x04684052) { + _flagE5 = true; + _parentScene->sendMessage(0x2002, 0, this); + } + break; + } + return messageResult; +} + +void KmScene1004::sub478170() { + _status2 = 2; + _flagE5 = false; + setFileHash(0x123E9C9F, 0, -1); + SetUpdateHandler(&Klayman::update); + SetMessageHandler(&KmScene1004::handleMessage478110); + SetSpriteCallback(&AnimatedSprite::updateDeltaXY); +} + } // End of namespace Neverhood diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h index 20d0e885cd..8ec33bceab 100644 --- a/engines/neverhood/klayman.h +++ b/engines/neverhood/klayman.h @@ -81,6 +81,7 @@ public: void sub4210C0(); void sub421070(); void sub420420(); + void sub420ED0(); void spriteUpdate41F250(); void spriteUpdate41F5F0(); @@ -204,6 +205,7 @@ protected: uint32 handleMessage41E0D0(int messageNum, const MessageParam ¶m, Entity *sender); uint32 handleMessage41E490(int messageNum, const MessageParam ¶m, Entity *sender); uint32 handleMessage41E290(int messageNum, const MessageParam ¶m, Entity *sender); + uint32 handleMessage41E2F0(int messageNum, const MessageParam ¶m, Entity *sender); }; @@ -253,6 +255,15 @@ protected: void sub44A4B0(); }; +class KmScene1004 : public Klayman { +public: + KmScene1004(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); + uint32 handleMessage478110(int messageNum, const MessageParam ¶m, Entity *sender); + void sub478170(); +}; + } // End of namespace Neverhood #endif /* NEVERHOOD_KLAYMAN_H */ diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp index 6825f62926..dc28960e60 100644 --- a/engines/neverhood/module1000.cpp +++ b/engines/neverhood/module1000.cpp @@ -56,8 +56,9 @@ Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which) } else if (which == 0) { //createScene1001(0); // DEBUG: Jump to room - //createScene1002(0); - createScene1005(0); + createScene1002(0); + //createScene1005(0); + //createScene1004(0); } else if (which == 1) { createScene1002(1); } @@ -93,6 +94,11 @@ void Module1000::createScene1003(int which) { } void Module1000::createScene1004(int which) { + _vm->gameState().sceneNum = 3; + _childObject = new Scene1004(_vm, this, which); + SetUpdateHandler(&Module1000::updateScene1004); + // TODO ResourceTable_multiLoad(&_resourceTable4, &_resourceTable3, &_resourceTable1); + // TODO Music18hList_stop(0x061880C6, 0, 2); } void Module1000::createScene1005(int which) { @@ -100,16 +106,13 @@ void Module1000::createScene1005(int which) { _childObject = new Scene1005(_vm, this, which); // TODO Music18hList_stop(0x061880C6, 0, 0); // TODO Music18hList_play(_musicFileHash, 0, 0, 1); - SetUpdateHandler(&Module1000::updateScene1002); + SetUpdateHandler(&Module1000::updateScene1005); } void Module1000::updateScene1001() { _childObject->handleUpdate(); - if (_done) { - debug("SCENE 1001 DONE; _field20 = %d", _field20); - _done = false; delete _childObject; _childObject = NULL; @@ -117,11 +120,10 @@ void Module1000::updateScene1001() { createScene1003(0); _childObject->handleUpdate(); } else { - // TODO createScene1002(); - // TODO _childObject->handleUpdate(); + createScene1002(0); + _childObject->handleUpdate(); } } - if (_field24 >= 0) { if (_field24 == 2) { // TODO ResourceTable_multiLoad(&_resourceTable2, &_resourceTable1, &_resourceTable3); @@ -131,36 +133,29 @@ void Module1000::updateScene1001() { _field24 = -1; } } - if (_field26 >= 0) { // TODO ResourceTable_multiLoad(&_resourceTable1, &_resourceTable2, &_resourceTable3); _field26 = -1; } - } void Module1000::updateScene1002() { - _childObject->handleUpdate(); - if (_done) { - debug("SCENE 1002 DONE; _field20 = %d", _field20); - _done = false; delete _childObject; _childObject = NULL; if (_field20 == 1) { _parentModule->sendMessage(0x1009, 0, this); } else if (_field20 == 2) { - // TODO createScene1004(0); - // TODO _childObject->handleUpdate(); + createScene1004(0); + _childObject->handleUpdate(); } else { createScene1001(1); _childObject->handleUpdate(); } } - if (_field24 >= 0) { if (_field24 == 1) { _parentModule->sendMessage(0x100A, 0, this); @@ -171,7 +166,6 @@ void Module1000::updateScene1002() { } _field24 = -1; } - if (_field26 >= 0) { if (_field26 == 1) { _parentModule->sendMessage(0x1023, 0, this); @@ -180,11 +174,9 @@ void Module1000::updateScene1002() { } _field26 = -1; } - if (_field28 >= 0) { _field28 = -1; } - } void Module1000::updateScene1003() { @@ -199,6 +191,30 @@ void Module1000::updateScene1003() { } void Module1000::updateScene1004() { + _childObject->handleUpdate(); + if (_done) { + debug("SCENE 1004 DONE; _field20 = %d", _field20); + _done = false; + delete _childObject; + _childObject = NULL; + if (_field20 == 1) { + createScene1005(0); + _childObject->handleUpdate(); + } else { + createScene1002(2); + _childObject->handleUpdate(); + } + } + if (_field24 >= 0) { + if (_field24 == 0) { + // TODO ResourceTable_multiLoad(&_resourceTable3, &_resourceTable4, &_resourceTable1); + } + _field24 = -1; + } + if (_field26 >= 0) { + // TODO ResourceTable_multiLoad(&_resourceTable4, &_resourceTable3, &_resourceTable1); + _field26 = -1; + } } void Module1000::updateScene1005() { @@ -223,11 +239,7 @@ AsScene1001Door::AsScene1001Door(NeverhoodEngine *vm) _x = 726; _y = 440; callback1(); -#if 0 - _soundResource2.set(0xED403E03); - _soundResource2.load(); - _soundResource2.createSoundBuffer(); -#endif + _soundResource2.load(0xED403E03); SetUpdateHandler(&AnimatedSprite::update); SetMessageHandler(&AsScene1001Door::handleMessage); } @@ -1421,49 +1433,66 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which) _class599 = addSprite(new Class599(_vm, this)); - // DEBUG/HACK!!!! - which = 1; setGlobalVar(0x8306F218, 1); - if (which < 0) { if (_vm->_gameState.field2 == 0) { _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226); _class478 = addSprite(new Class478(_vm, _klayman)); setMessageList(0x004B4270); - // TODO + _klayman->getSurface()->getClipRect().x1 = 31; + _klayman->getSurface()->getClipRect().y1 = 0; + _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width; + _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart3->getSurface()->getDrawRect().y + _ssLadderArchPart3->getSurface()->getDrawRect().height; + _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect(); _klayman->setRepl(64, 0); } else { _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 379, 435); _class478 = addSprite(new Class478(_vm, _klayman)); setMessageList(0x004B4270); - // TODO + _klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x; + _klayman->getSurface()->getClipRect().y1 = 0; + _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width; + _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height; + _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect(); } } else { if (which == 1) { _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 650, 435); _class478 = addSprite(new Class478(_vm, _klayman)); setMessageList(0x004B4478); - // TODO + _klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x; + _klayman->getSurface()->getClipRect().y1 = 0; + _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width; + _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height; + _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect(); _vm->_gameState.field2 = 1; } else if (which == 2) { _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 68, 645); _class478 = addSprite(new Class478(_vm, _klayman)); setMessageList(0x004B4298); - // TODO + _klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x; + _klayman->getSurface()->getClipRect().y1 = 0; + _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width; + _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height; + _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect(); _vm->_gameState.field2 = 1; _klayman->sendMessage(0x4820, 0, this); } else { _klayman = new KmScene1002(_vm, this, _class599, _ssLadderArch, 90, 226); _class478 = addSprite(new Class478(_vm, _klayman)); setMessageList(0x004B4470); - // TODO - //_class479 = addSprite(new Class479(_vm, this, _klayman)); - // TODO + _klayman->getSurface()->getClipRect().x1 = 31; + _klayman->getSurface()->getClipRect().y1 = 0; + _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width; + _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart3->getSurface()->getDrawRect().y + _ssLadderArchPart3->getSurface()->getDrawRect().height; + _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect(); + // TODO _class479 = addSprite(new Class479(_vm, this, _klayman)); + // TODO _class479->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect(); _klayman->setRepl(64, 0); _vm->_gameState.field2 = 0; } } - addSprite(_klayman); + addSprite(_klayman); _mouseCursor = addSprite(new Mouse433(_vm, 0x23303124, NULL)); @@ -1496,11 +1525,8 @@ Scene1002::Scene1002(NeverhoodEngine *vm, Module *parentModule, int which) setRectList(0x004B43A0); - -#if 0 // TODO _soundResource2.load(0x60755842); _soundResource3.load(0x616D5821); -#endif } @@ -1510,7 +1536,11 @@ Scene1002::~Scene1002() { void Scene1002::update() { Scene::update(); if (!_flag1B4 && _klayman->getY() > 230) { - // TODO + _klayman->getSurface()->getClipRect().x1 = _ssLadderArch->getSurface()->getDrawRect().x; + _klayman->getSurface()->getClipRect().y1 = 0; + _klayman->getSurface()->getClipRect().x2 = _ssLadderArchPart2->getSurface()->getDrawRect().x + _ssLadderArchPart2->getSurface()->getDrawRect().width; + _klayman->getSurface()->getClipRect().y2 = _ssLadderArchPart1->getSurface()->getDrawRect().y + _ssLadderArchPart1->getSurface()->getDrawRect().height; + _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect(); deleteSprite(&_ssLadderArchPart3); _klayman->clearRepl(); _flag1B4 = true; @@ -1689,6 +1719,144 @@ uint32 Class152::handleMessage(int messageNum, const MessageParam ¶m, Entity return 0; } +// Scene1004 + +AsScene1004TrashCan::AsScene1004TrashCan(NeverhoodEngine *vm) + : AnimatedSprite(vm, 1100), _soundResource(vm) { + + _x = 330; + _y = 327; + createSurface(800, 56, 50); + SetUpdateHandler(&AnimatedSprite::update); + SetMessageHandler(&AsScene1004TrashCan::handleMessage); + _surface->setVisible(false); +} + +uint32 AsScene1004TrashCan::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { + Sprite::handleMessage(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x225A8587) { + _soundResource.play(0x109AFC4C); + } + break; + case 0x2002: + setFileHash(0xEB312C11, 0, -1); + _surface->setVisible(true); + break; + case 0x3002: + setFileHash1(); + _surface->setVisible(false); + break; + } + return 0; +} + +Scene1004::Scene1004(NeverhoodEngine *vm, Module *parentModule, int which) + : Scene(vm, parentModule, true), _paletteAreaStatus(-1) { + + Palette2 *palette2; + Sprite *tempSprite; + + _surfaceFlag = true; + + SetUpdateHandler(&Scene1004::update); + SetMessageHandler(&Scene1004::handleMessage); + + _background = addBackground(new DirtyBackground(_vm, 0x50C03005, 0, 0)); + + if (getGlobalVar(0x0D0A14D10)) { + palette2 = new Palette2(_vm, 0xA30BA329); + palette2->addPalette(0xA30BA329, 0, 256, 0); + } else { + palette2 = new Palette2(_vm, 0x50C03005); + palette2->addPalette(0x50C03005, 0, 256, 0); + } + _palette = palette2; + _palette->usePalette(); + addEntity(_palette); + + _mouseCursor = addSprite(new Mouse433(_vm, 0x03001504, NULL)); + + if (which < 0) { + setRectList(0x004B7C70); + _klayman = new KmScene1004(_vm, this, 330, 327); + setMessageList(0x004B7C18); + } else if (which == 1) { + setRectList(0x004B7C70); + _klayman = new KmScene1004(_vm, this, 330, 327); + setMessageList(0x004B7C08); + } else { + loadDataResource(0x01900A04); + _klayman = new KmScene1004(_vm, this, _dataResource.getPoint(0x80052A29).x, 27); + setMessageList(0x004B7BF0); + } + + addSprite(_klayman); + + updatePaletteArea(); + + _class478 = addSprite(new Class478(_vm, _klayman)); + + addSprite(new StaticSprite(_vm, 0x800034A0, 1100)); + addSprite(new StaticSprite(_vm, 0x64402020, 1100)); + addSprite(new StaticSprite(_vm, 0x3060222E, 1300)); + tempSprite = addSprite(new StaticSprite(_vm, 0x0E002004, 1300)); + + _klayman->getSurface()->getClipRect().x1 = 0; + _klayman->getSurface()->getClipRect().y1 = tempSprite->getSurface()->getDrawRect().y; + _klayman->getSurface()->getClipRect().x2 = 640; + _klayman->getSurface()->getClipRect().y2 = 480; + _class478->getSurface()->getClipRect() = _klayman->getSurface()->getClipRect(); + + _asTrashCan = addSprite(new AsScene1004TrashCan(_vm)); + +} + +void Scene1004::update() { + Scene::update(); + updatePaletteArea(); +} + +uint32 Scene1004::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { + uint32 messageResult = 0; + Scene::handleMessage(messageNum, param, sender); + switch (messageNum) { + case 0x100D: + if (param.asInteger() == 0x926500A1) { + setMessageList(0x004B7C20); + messageResult = 1; + } + break; + case 0x2000: + loadDataResource(0x01900A04); + break; + case 0x2001: + setRectList(0x004B7C70); + break; + case 0x2002: + _asTrashCan->sendMessage(0x2002, 0, this); + break; + } + return messageResult; +} + +void Scene1004::updatePaletteArea() { + if (_klayman->getY() < 150) { + if (_paletteAreaStatus != 0) { + _paletteAreaStatus = 0; + ((Palette2*)_palette)->addPalette(0x406B0D10, 0, 64, 0); + ((Palette2*)_palette)->startFadeToPalette(12); + } + } else { + if (_paletteAreaStatus != 1) { + _paletteAreaStatus = 1; + ((Palette2*)_palette)->addPalette(0x24332243, 0, 64, 0); + ((Palette2*)_palette)->startFadeToPalette(12); + } + } +} + // Scene1005 Scene1005::Scene1005(NeverhoodEngine *vm, Module *parentModule, int which) @@ -1717,9 +1885,6 @@ Scene1005::Scene1005(NeverhoodEngine *vm, Module *parentModule, int which) } -Scene1005::~Scene1005() { -} - uint32 Scene1005::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { Scene::handleMessage(messageNum, param, sender); switch (messageNum) { diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h index 4b2121eb53..0e3f950c3e 100644 --- a/engines/neverhood/module1000.h +++ b/engines/neverhood/module1000.h @@ -302,12 +302,33 @@ protected: uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); }; +// Scene1004 + +class AsScene1004TrashCan : public AnimatedSprite { +public: + AsScene1004TrashCan(NeverhoodEngine *vm); +protected: + SoundResource _soundResource; + uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); +}; + +class Scene1004 : public Scene { +public: + Scene1004(NeverhoodEngine *vm, Module *parentModule, int which); +protected: + Sprite *_class478; + Sprite *_asTrashCan; + int _paletteAreaStatus; + void update(); + uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); + void updatePaletteArea(); +}; + // Scene1005 class Scene1005 : public Scene { public: Scene1005(NeverhoodEngine *vm, Module *parentModule, int which); - virtual ~Scene1005(); protected: uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); void drawTextToBackground(); diff --git a/engines/neverhood/resource.cpp b/engines/neverhood/resource.cpp index 1c376105cf..8b2a19c07c 100644 --- a/engines/neverhood/resource.cpp +++ b/engines/neverhood/resource.cpp @@ -606,6 +606,7 @@ DataResource::DRDirectoryItem *DataResource::findDRDirectoryItem(uint32 nameHash } // SoundResource +// ALL TODO SoundResource::SoundResource(NeverhoodEngine *vm) : _vm(vm) { @@ -615,6 +616,9 @@ bool SoundResource::isPlaying() { return false; } +void SoundResource::load(uint32 fileHash) { +} + void SoundResource::play(uint32 fileHash, bool looping) { } diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h index d273e7c9d9..5d8d5ca13d 100644 --- a/engines/neverhood/resource.h +++ b/engines/neverhood/resource.h @@ -195,6 +195,7 @@ class SoundResource { public: SoundResource(NeverhoodEngine *vm); bool isPlaying(); + void load(uint32 fileHash); void play(uint32 fileHash, bool looping = false); void play(); protected: diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp index 2b5c81b4ad..8f49a0033d 100644 --- a/engines/neverhood/scene.cpp +++ b/engines/neverhood/scene.cpp @@ -26,7 +26,7 @@ namespace Neverhood { Scene::Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects) - : Entity(vm, 0), _parentModule(parentModule) { + : Entity(vm, 0), _parentModule(parentModule), _dataResource(vm) { _messageListFlag1 = false; _systemCallbackFlag = false; @@ -94,8 +94,10 @@ void Scene::draw() { (*iter)->addDirtyRect(); // TODO g_screen->addDirtyRects(); } - for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++) + for (Common::Array<BaseSurface*>::iterator iter = _surfaces.begin(); iter != _surfaces.end(); iter++) { + debug(4, "priority = %d", (*iter)->getPriority()); (*iter)->draw(); + } } } @@ -492,4 +494,10 @@ void Scene::setRectList(RectList *rectList) { _rectType = 1; } +void Scene::loadDataResource(uint32 fileHash) { + _dataResource.load(fileHash); + if (_klayman) + _klayman->loadDataResource(fileHash); +} + } // End of namespace Neverhood diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h index 0878380ccd..8f0b79a5ee 100644 --- a/engines/neverhood/scene.h +++ b/engines/neverhood/scene.h @@ -61,7 +61,7 @@ protected: bool _messageListFlag1; NPoint _mouseClickPos; bool _mouseClicked; - // TODO RectResource _rectResource; + DataResource _dataResource; RectList *_rectList; int _rectType; // rectListCount @@ -102,6 +102,7 @@ protected: void runMessageList(); void setRectList(uint32 id); void setRectList(RectList *rectList); + void loadDataResource(uint32 fileHash); }; } // End of namespace Neverhood diff --git a/engines/neverhood/sprite.cpp b/engines/neverhood/sprite.cpp index 87fd13153b..2c772d7731 100644 --- a/engines/neverhood/sprite.cpp +++ b/engines/neverhood/sprite.cpp @@ -27,10 +27,8 @@ namespace Neverhood { // Sprite Sprite::Sprite(NeverhoodEngine *vm, int objectPriority) - : Entity(vm, objectPriority), _x(0), _y(0), - _spriteUpdateCb(NULL), _filterXCb(NULL), _filterYCb(NULL), - _doDeltaX(false), _doDeltaY(false), _needRefresh(false), - _flags(0) { + : Entity(vm, objectPriority), _x(0), _y(0), _spriteUpdateCb(NULL), _filterXCb(NULL), _filterYCb(NULL), + _dataResource(vm), _doDeltaX(false), _doDeltaY(false), _needRefresh(false), _flags(0) { _name = "Sprite"; SetMessageHandler(&Sprite::handleMessage); @@ -87,6 +85,10 @@ uint32 Sprite::handleMessage(int messageNum, const MessageParam ¶m, Entity * return 0; } +void Sprite::loadDataResource(uint32 fileHash) { + _dataResource.load(fileHash); +} + void Sprite::createSurface(int surfacePriority, int16 width, int16 height) { _surface = new BaseSurface(_vm, surfacePriority, width, height); } @@ -138,7 +140,7 @@ void StaticSprite::init(uint32 fileHash, int surfacePriority, int16 x, int16 y, _drawRect.x = 0; _drawRect.y = 0; _drawRect.width = width; - _drawRect.width = height; + _drawRect.height = height; _needRefresh = true; diff --git a/engines/neverhood/sprite.h b/engines/neverhood/sprite.h index f1d8a87b69..18c9ae32da 100644 --- a/engines/neverhood/sprite.h +++ b/engines/neverhood/sprite.h @@ -53,6 +53,7 @@ public: bool isDoDeltaY() const { return _doDeltaY; } NRect& getRect() { return _rect; } uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); + void loadDataResource(uint32 fileHash); protected: void (Sprite::*_spriteUpdateCb)(); Common::String _spriteUpdateCbName; // For debugging purposes @@ -69,7 +70,7 @@ protected: NRect _rect; uint16 _flags; //0000004A field4A dw ? // seems to be unused except in ctor - //0000004C rectResource RectResource ? + DataResource _dataResource; //void update(); void createSurface(int surfacePriority, int16 width, int16 height); void handleSpriteUpdate() { |