From a6cb31c9c3b4d516b5cfe4d93ccb94cc4c62c9d1 Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Wed, 14 Sep 2011 09:18:53 +0000 Subject: NEVERHOOD: Add Scene1305 --- engines/neverhood/gamemodule.cpp | 2 +- engines/neverhood/klayman.cpp | 43 ++++++++++++++++++++++++++++++++++++++++ engines/neverhood/klayman.h | 9 +++++++++ engines/neverhood/module1300.cpp | 40 +++++++++++++++++++++++++++++++++++++ engines/neverhood/module1300.h | 7 +++++++ 5 files changed, 100 insertions(+), 1 deletion(-) diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp index 4c70ff203b..1487e8c9b2 100644 --- a/engines/neverhood/gamemodule.cpp +++ b/engines/neverhood/gamemodule.cpp @@ -247,7 +247,7 @@ void GameModule::startup() { createModule2200(-1); #endif #if 1 - _vm->gameState().sceneNum = 3; + _vm->gameState().sceneNum = 4; createModule1300(-1); #endif } diff --git a/engines/neverhood/klayman.cpp b/engines/neverhood/klayman.cpp index 57e1274dc2..3f03faad85 100644 --- a/engines/neverhood/klayman.cpp +++ b/engines/neverhood/klayman.cpp @@ -2981,6 +2981,7 @@ void KmScene1303::sub4162B0() { KmScene1304::KmScene1304(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y) : Klayman(vm, parentScene, x, y, 1000, 1000) { + // Empty } uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) { @@ -3031,6 +3032,48 @@ uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam ¶m) { return 0; } +KmScene1305::KmScene1305(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y) + : Klayman(vm, parentScene, x, y, 1000, 1000) { + + // Empty +} + +uint32 KmScene1305::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 0x4804: + setCallback2(AnimationCallback(&KmScene1305::sub46BEF0)); + break; + case 0x4817: + setDoDeltaX(param.asInteger()); + sub41C7B0(); + break; + } + return 0; +} + +void KmScene1305::sub46BEF0() { + _soundResource1.play(0x41648271); + _status2 = 1; + _flagE5 = false; + setFileHash2(0x000BAB02, 0x88003000, 0); + SetUpdateHandler(&Klayman::update); + SetSpriteCallback(NULL); + SetMessageHandler(&Klayman::handleMessage41D480); + SetAnimationCallback3(&KmScene1305::sub46BF60); +} + +void KmScene1305::sub46BF60() { + setDoDeltaX(2); + sub41FC80(); +} + // KmScene1401 KmScene1401::KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y) diff --git a/engines/neverhood/klayman.h b/engines/neverhood/klayman.h index 77c4160794..c269e91ed0 100644 --- a/engines/neverhood/klayman.h +++ b/engines/neverhood/klayman.h @@ -342,6 +342,15 @@ protected: uint32 xHandleMessage(int messageNum, const MessageParam ¶m); }; +class KmScene1305 : public Klayman { +public: + KmScene1305(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y); +protected: + uint32 xHandleMessage(int messageNum, const MessageParam ¶m); + void sub46BEF0(); + void sub46BF60(); +}; + class KmScene1401 : public Klayman { public: KmScene1401(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y); diff --git a/engines/neverhood/module1300.cpp b/engines/neverhood/module1300.cpp index c6dfd3886b..4814f41260 100644 --- a/engines/neverhood/module1300.cpp +++ b/engines/neverhood/module1300.cpp @@ -172,6 +172,11 @@ void Module1300::createScene1304(int which) { } void Module1300::createScene1305(int which) { + _vm->gameState().sceneNum = 4; + // TODO Sound1ChList_setSoundValuesMulti(dword_4B2868, false, 0, 0, 0, 0); + // TODO Music18hList_play(0x203197, 0, 2, 1); + _childObject = new Scene1305(_vm, this, which); + SetUpdateHandler(&Module1300::updateScene1305); } void Module1300::createScene1306(int which) { @@ -276,6 +281,14 @@ void Module1300::updateScene1304() { } void Module1300::updateScene1305() { + _childObject->handleUpdate(); + if (_done) { + _done = false; + delete _childObject; + _childObject = NULL; + createScene1317(-1); + _childObject->handleUpdate(); + } } void Module1300::updateScene1306() { @@ -883,4 +896,31 @@ uint32 Scene1304::handleMessage(int messageNum, const MessageParam ¶m, Entit return 0; } +Scene1305::Scene1305(NeverhoodEngine *vm, Module *parentModule, int which) + : Scene(vm, parentModule, true) { + + _surfaceFlag = true; + SetMessageHandler(&Scene1305::handleMessage); + setRectList(0x004B6E98); + + _background = addBackground(new DirtyBackground(_vm, 0x28801B64, 0, 0)); + _palette = new Palette(_vm, 0x28801B64); + _palette->usePalette(); + _mouseCursor = addSprite(new Mouse433(_vm, 0x01B60280, NULL)); + + if (which < 0) { + _klayman = new KmScene1305(_vm, this, 212, 441); + setMessageList(0x004B6E40); + } else { + _klayman = new KmScene1305(_vm, this, 212, 441); + setMessageList(0x004B6E48); + } + addSprite(_klayman); + +} + +uint32 Scene1305::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { + return Scene::handleMessage(messageNum, param, sender); +} + } // End of namespace Neverhood diff --git a/engines/neverhood/module1300.h b/engines/neverhood/module1300.h index ca53147331..03e3d6e92d 100644 --- a/engines/neverhood/module1300.h +++ b/engines/neverhood/module1300.h @@ -165,6 +165,13 @@ protected: uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); }; +class Scene1305 : public Scene { +public: + Scene1305(NeverhoodEngine *vm, Module *parentModule, int which); +protected: + uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); +}; + } // End of namespace Neverhood #endif /* NEVERHOOD_MODULE1300_H */ -- cgit v1.2.3