aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjohndoe1232011-09-14 09:18:53 +0000
committerWillem Jan Palenstijn2013-05-08 20:39:38 +0200
commita6cb31c9c3b4d516b5cfe4d93ccb94cc4c62c9d1 (patch)
tree159502600bcef04591997e329acbac877627c253
parenta29c62ce5a801e245a44daa680f5c109f965f750 (diff)
downloadscummvm-rg350-a6cb31c9c3b4d516b5cfe4d93ccb94cc4c62c9d1.tar.gz
scummvm-rg350-a6cb31c9c3b4d516b5cfe4d93ccb94cc4c62c9d1.tar.bz2
scummvm-rg350-a6cb31c9c3b4d516b5cfe4d93ccb94cc4c62c9d1.zip
NEVERHOOD: Add Scene1305
-rw-r--r--engines/neverhood/gamemodule.cpp2
-rw-r--r--engines/neverhood/klayman.cpp43
-rw-r--r--engines/neverhood/klayman.h9
-rw-r--r--engines/neverhood/module1300.cpp40
-rw-r--r--engines/neverhood/module1300.h7
5 files changed, 100 insertions, 1 deletions
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 &param) {
@@ -3031,6 +3032,48 @@ uint32 KmScene1304::xHandleMessage(int messageNum, const MessageParam &param) {
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 &param) {
+ 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 &param);
};
+class KmScene1305 : public Klayman {
+public:
+ KmScene1305(NeverhoodEngine *vm, Entity *parentScene, int16 x, int16 y);
+protected:
+ uint32 xHandleMessage(int messageNum, const MessageParam &param);
+ 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 &param, 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 &param, 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 &param, Entity *sender);
};
+class Scene1305 : public Scene {
+public:
+ Scene1305(NeverhoodEngine *vm, Module *parentModule, int which);
+protected:
+ uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1300_H */