aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/neverhood/gamemodule.cpp2
-rw-r--r--engines/neverhood/module2800.cpp71
-rw-r--r--engines/neverhood/module2800.h15
3 files changed, 86 insertions, 2 deletions
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 248c873359..7ea115cfb9 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -328,7 +328,7 @@ void GameModule::startup() {
createModule(2700, -1);
#endif
#if 1
- _vm->gameState().sceneNum = 7;
+ _vm->gameState().sceneNum = 2;
createModule(2800, -1);
#endif
}
diff --git a/engines/neverhood/module2800.cpp b/engines/neverhood/module2800.cpp
index 353bb76d73..3a787ee013 100644
--- a/engines/neverhood/module2800.cpp
+++ b/engines/neverhood/module2800.cpp
@@ -290,6 +290,75 @@ uint32 Scene2801::handleMessage(int messageNum, const MessageParam &param, Entit
return messageResult;
}
+Class488::Class488(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int16 x, int16 y)
+ : AnimatedSprite(vm, 1100), _parentScene(parentScene), _fileHash1(fileHash1), _fileHash2(fileHash2),
+ _flag1(false), _flag2(false), _soundResource(vm) {
+
+ createSurface(1010, 640, 480); // TODO Use correct size from the two hashes
+ SetUpdateHandler(&AnimatedSprite::update);
+ SetSpriteUpdate(&AnimatedSprite::updateDeltaXY);
+ _x = x;
+ _y = y;
+ sub4343C0();
+}
+
+uint32 Class488::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
+ uint32 messageResult = Sprite::handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x100D:
+ if (!_flag2 && param.asInteger() == calcHash("ClickSwitch")) {
+ sendMessage(_parentScene, 0x480F, 0);
+ _soundResource.play(0x4E1CA4A0);
+ }
+ break;
+ case 0x480F:
+ sub434380();
+ break;
+ case 0x482A:
+ sendMessage(_parentScene, 0x1022, 990);
+ break;
+ case 0x482B:
+ sendMessage(_parentScene, 0x1022, 1010);
+ break;
+ }
+ return messageResult;
+}
+
+uint32 Class488::handleMessage434340(int messageNum, const MessageParam &param, Entity *sender) {
+ uint32 messageResult = handleMessage(messageNum, param, sender);
+ switch (messageNum) {
+ case 0x3002:
+ gotoNextState();
+ break;
+ }
+ return messageResult;
+}
+
+void Class488::sub434380() {
+ _flag2 = false;
+ _flag1 = true;
+ startAnimation(_fileHash2, 0, -1);
+ SetMessageHandler(&Class488::handleMessage434340);
+ NextState(&Class488::sub4343C0);
+}
+
+void Class488::sub4343C0() {
+ _flag1 = false;
+ startAnimation(_fileHash1, 0, -1);
+ SetMessageHandler(&Class488::handleMessage);
+}
+
+void Class488::setFileHashes(uint32 fileHash1, uint32 fileHash2) {
+ _fileHash1 = fileHash1;
+ _fileHash2 = fileHash2;
+ if (_flag1) {
+ startAnimation(_fileHash2, _currFrameIndex, -1);
+ _flag2 = true;
+ } else {
+ startAnimation(_fileHash1, 0, -1);
+ }
+}
+
Scene2803b::Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which)
: Scene(vm, parentModule, true), _palStatus(0) {
@@ -307,7 +376,7 @@ Scene2803b::Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which)
loadDataResource(0x81120132);
insertMouse433(0x00A05290);
- // TODO insertSprite<Class488>(this, 0xAFAD591A, 0x276E321D, 578, 200);
+ insertSprite<Class488>(this, 0xAFAD591A, 0x276E321D, 578, 200);
if (getGlobalVar(0x190A1D18)) {
setBackground(0x412A423E);
diff --git a/engines/neverhood/module2800.h b/engines/neverhood/module2800.h
index ed93c9fe32..4026093b1d 100644
--- a/engines/neverhood/module2800.h
+++ b/engines/neverhood/module2800.h
@@ -54,6 +54,21 @@ protected:
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
};
+class Class488 : public AnimatedSprite {
+public:
+ Class488(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int16 x, int16 y);
+ void sub434380();
+ void sub4343C0();
+ void setFileHashes(uint32 fileHash1, uint32 fileHash2);
+protected:
+ Scene *_parentScene;
+ SoundResource _soundResource;
+ uint32 _fileHash1, _fileHash2;
+ bool _flag1, _flag2;
+ uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
+ uint32 handleMessage434340(int messageNum, const MessageParam &param, Entity *sender);
+};
+
class Scene2803b : public Scene {
public:
Scene2803b(NeverhoodEngine *vm, Module *parentModule, int which);