aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjohndoe1232011-07-01 13:20:46 +0000
committerWillem Jan Palenstijn2013-05-08 20:30:57 +0200
commit3c82668fe4267b34a9e3c7fe88f0d2a0fcfc4c4b (patch)
tree1a98104a53fb813e0093405a813a42d74d6bfeb5
parentf01f9343c831cda618dabd2dcda7be77b2948ecc (diff)
downloadscummvm-rg350-3c82668fe4267b34a9e3c7fe88f0d2a0fcfc4c4b.tar.gz
scummvm-rg350-3c82668fe4267b34a9e3c7fe88f0d2a0fcfc4c4b.tar.bz2
scummvm-rg350-3c82668fe4267b34a9e3c7fe88f0d2a0fcfc4c4b.zip
NEVERHOOD: More work on Module1500
- Implement Scene1501 (with yet unimpelemented stuff commented out) - Add preliminary main loop to test stuff/updates - Add dummy SoundResource - And fix a mean bug/typo in some initializer lists... (The intro now "runs" but doesn't show anything yet since the actual display code and other classes are not yet implemented yet.)
-rw-r--r--engines/neverhood/gamemodule.cpp25
-rw-r--r--engines/neverhood/module.cpp2
-rw-r--r--engines/neverhood/module1500.cpp91
-rw-r--r--engines/neverhood/module1500.h16
-rw-r--r--engines/neverhood/neverhood.cpp91
-rw-r--r--engines/neverhood/neverhood.h4
-rw-r--r--engines/neverhood/resource.h9
-rw-r--r--engines/neverhood/scene.h2
8 files changed, 186 insertions, 54 deletions
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 09046cfa3e..e46d23c420 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -22,20 +22,22 @@
#include "neverhood/gamemodule.h"
+#include "neverhood/module1500.h"
+
namespace Neverhood {
GameModule::GameModule(NeverhoodEngine *vm)
- : Module(_vm, NULL) {
+ : Module(vm, NULL) {
// Other initializations moved to actual engine class
// TODO
// TODO Sound1ChList_sub_407F70(0x2D0031, 0x8861079);
-
-
SetMessageHandler(&GameModule::handleMessage);
+
+ startup();
}
@@ -49,6 +51,8 @@ GameModule::~GameModule() {
// TODO: Set palette to black but probably not neccessary
// TODO Sound1ChList_sub_408480();
+
+ // TODO Set debug vars (maybe)
}
@@ -84,15 +88,24 @@ void GameModule::startup() {
}
void GameModule::createModule1500(int which) {
- // TODO
_someFlag1 = false;
// TODO *getGlobalGameVarValuePtr(0x91080831) = 0x0F10114;
- // TODO _childObject = new Module1500(this, which, true);
+ _childObject = new Module1500(_vm, this, which, true);
SetUpdateHandler(&GameModule::updateModule1500);
}
void GameModule::updateModule1500() {
- // TODO
+ if (!_childObject)
+ return;
+ _childObject->handleUpdate();
+ if (_done) {
+ _done = false;
+ delete _childObject;
+ _childObject = NULL;
+ debug("Done...");
+ // TODO createModule1000();
+ // TODO _childObject->handleUpdate();
+ }
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/module.cpp b/engines/neverhood/module.cpp
index 1aa1203885..c46aa79ea2 100644
--- a/engines/neverhood/module.cpp
+++ b/engines/neverhood/module.cpp
@@ -25,7 +25,7 @@
namespace Neverhood {
Module::Module(NeverhoodEngine *vm, Module *parentModule)
- : Entity(_vm, 0), _parentModule(parentModule), _childObject(NULL),
+ : Entity(vm, 0), _parentModule(parentModule), _childObject(NULL),
_done(false), _field24(-1), _field26(-1), _field28(-1) {
SetMessageHandler(&Module::handleMessage);
diff --git a/engines/neverhood/module1500.cpp b/engines/neverhood/module1500.cpp
index 05a3bec907..f4c77948b4 100644
--- a/engines/neverhood/module1500.cpp
+++ b/engines/neverhood/module1500.cpp
@@ -26,6 +26,8 @@ namespace Neverhood {
Module1500::Module1500(NeverhoodEngine *vm, Module *parentModule, int which, bool flag)
: Module(vm, parentModule), _flag(flag) {
+
+ debug("Create Module1500(%d)", which);
if (which < 0) {
switch (_vm->gameState().sceneNum) {
@@ -75,19 +77,100 @@ void Module1500::update() {
}
void Module1500::createScene1501() {
- // TODO
+ debug("createScene1501");
+ _vm->gameState().sceneNum = 0;
+ _childObject = new Scene1501(_vm, this, 0x8420221D, 0xA61024C4, 150, 48);
+ SetUpdateHandler(&Module1500::update);
}
void Module1500::createScene1502() {
- // TODO
+ debug("createScene1502");
+ _vm->gameState().sceneNum = 1;
+ _childObject = new Scene1501(_vm, this, 0x30050A0A, 0x58B45E58, 110, 48);
+ SetUpdateHandler(&Module1500::update);
}
void Module1500::createScene1503() {
- // TODO
+ debug("createScene1503");
+ // TODO: This uses the MultiSmackerPlayer
+ // Game will crash now...
}
void Module1500::createScene1504() {
- // TODO
+ debug("createScene1504");
+ _vm->gameState().sceneNum = 3;
+ _childObject = new Scene1501(_vm, this, 0x0CA04202, 0, 110, 48);
+ SetUpdateHandler(&Module1500::update);
+}
+
+// Scene1501
+
+Scene1501::Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 soundFileHash, int countdown2, int countdown3)
+ : Scene(vm, parentModule, true), _soundResource(vm),
+ _countdown3(countdown3), _countdown2(countdown2), _countdown1(0), _flag(false) {
+
+ debug("Create Scene1501(%08X, %08X, %d, %d)", backgroundFileHash, soundFileHash, countdown2, countdown3);
+
+ SetUpdateHandler(&Scene1501::update);
+ SetMessageHandler(&Scene1501::handleMessage);
+
+ _surfaceFlag = true;
+
+ _palette = new Palette(_vm);//DUMMY!
+
+ /* TODO
+
+ _background = addBackground(new Class301(_vm, backgroundFileHash, 0, 0));
+
+ _palette = new Palette2(_vm);
+ _palette->usePalette();
+ addEntity(_palette);
+ Palette2_sub_47BF00(backgroundFileHash, 0, 256, 0);
+ Palette2_sub_47C060(12);
+
+ if (soundFileHash != 0) {
+ _soundResource.set(soundFileHash);
+ _soundResource.load();
+ _soundResource.play();
+ }
+ */
+
+}
+
+void Scene1501::update() {
+
+ Scene::update();
+
+ // TODO: Since these countdowns are used a lot, maybe these can be wrapped in a class/struct
+ // so the code gets a little cleaner.
+
+ if (_countdown1 != 0) {
+ _countdown1--;
+ if (_countdown1 == 0) {
+ // TODO g_screen->clear(0);
+ _parentModule->sendMessage(0x1009, 0, this);
+ }
+ } else if ((_countdown2 != 0 && (--_countdown2 == 0)) || !_soundResource.isPlaying()) {
+ _countdown1 = 12;
+ _palette->startFadeToBlack(11);
+ }
+
+ if (_countdown3 != 0)
+ _countdown3--;
+
+ if (_countdown3 == 0 && _flag && _countdown1 == 0) {
+ _countdown1 = 12;
+ _palette->startFadeToBlack(11);
+ }
+
+}
+
+uint32 Scene1501::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
+ uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
+ if (messageNum == 0x0009) {
+ _flag = true;
+ }
+ return messageResult;
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/module1500.h b/engines/neverhood/module1500.h
index d4a4310cdc..66eef59073 100644
--- a/engines/neverhood/module1500.h
+++ b/engines/neverhood/module1500.h
@@ -27,6 +27,9 @@
#include "neverhood/neverhood.h"
#include "neverhood/module.h"
+#include "neverhood/scene.h"
+#include "neverhood/graphics.h"
+#include "neverhood/palette.h"
namespace Neverhood {
@@ -42,6 +45,19 @@ protected:
void createScene1504();
};
+class Scene1501 : public Scene {
+public:
+ Scene1501(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundFileHash, uint32 soundFileHash, int countdown2, int countdown3);
+protected:
+ SoundResource _soundResource;
+ int _countdown1;
+ int _countdown2;
+ int _countdown3;
+ bool _flag;
+ void update();
+ uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
+};
+
} // End of namespace Neverhood
#endif /* NEVERHOOD_MODULE1500_H */
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index 2f27fca2df..ac89a3e658 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -38,6 +38,7 @@
#include "neverhood/neverhood.h"
#include "neverhood/blbarchive.h"
+#include "neverhood/gamemodule.h"
#include "neverhood/graphics.h"
#include "neverhood/resourceman.h"
#include "neverhood/resource.h"
@@ -123,55 +124,65 @@ Common::Error NeverhoodEngine::run() {
}
#endif
-#if 1
+#if 0
{ // Create a new scope
AnimResource r(this);
r.load(0x000540B0);
}
#endif
-
- delete _res;
- return Common::kNoError;
-}
+ _gameModule = new GameModule(this);
-void NeverhoodEngine::updateEvents() {
- Common::Event event;
- Common::EventManager *eventMan = _system->getEventManager();
-
- while (eventMan->pollEvent(event)) {
- switch (event.type) {
- case Common::EVENT_KEYDOWN:
- _keyState = event.kbd.keycode;
- break;
- case Common::EVENT_KEYUP:
- _keyState = Common::KEYCODE_INVALID;
- break;
- case Common::EVENT_MOUSEMOVE:
- _mouseX = event.mouse.x;
- _mouseY = event.mouse.y;
- break;
- /*
- case Common::EVENT_LBUTTONDOWN:
- _buttonState |= kLeftButton;
- break;
- case Common::EVENT_LBUTTONUP:
- _buttonState &= ~kLeftButton;
- break;
- case Common::EVENT_RBUTTONDOWN:
- _buttonState |= kRightButton;
- break;
- case Common::EVENT_RBUTTONUP:
- _buttonState &= ~kRightButton;
- break;
- case Common::EVENT_QUIT:
- _system->quit();
- break;
- */
- default:
- break;
+ while (1) {
+ Common::Event event;
+ Common::EventManager *eventMan = _system->getEventManager();
+
+ while (eventMan->pollEvent(event)) {
+ switch (event.type) {
+ case Common::EVENT_KEYDOWN:
+ _keyState = event.kbd.keycode;
+ break;
+ case Common::EVENT_KEYUP:
+ _keyState = Common::KEYCODE_INVALID;
+ break;
+ case Common::EVENT_MOUSEMOVE:
+ _mouseX = event.mouse.x;
+ _mouseY = event.mouse.y;
+ break;
+ /*
+ case Common::EVENT_LBUTTONDOWN:
+ _buttonState |= kLeftButton;
+ break;
+ case Common::EVENT_LBUTTONUP:
+ _buttonState &= ~kLeftButton;
+ break;
+ case Common::EVENT_RBUTTONDOWN:
+ _buttonState |= kRightButton;
+ break;
+ case Common::EVENT_RBUTTONUP:
+ _buttonState &= ~kRightButton;
+ break;
+ case Common::EVENT_QUIT:
+ _system->quit();
+ break;
+ */
+ default:
+ break;
+ }
}
+
+ _gameModule->handleUpdate();
+ _system->updateScreen();
+
}
+
+ delete _gameModule;
+
+ delete _res;
+
+ debug("Ok.");
+
+ return Common::kNoError;
}
} // End of namespace Neverhood
diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h
index 8a95b05f94..b261a087f0 100644
--- a/engines/neverhood/neverhood.h
+++ b/engines/neverhood/neverhood.h
@@ -44,6 +44,7 @@ enum NeverhoodGameFeatures {
struct NeverhoodGameDescription;
class ResourceMan;
+class GameModule;
struct GameState {
int sceneNum;
@@ -74,8 +75,7 @@ public:
GameState _gameState;
ResourceMan *_res;
-
- void updateEvents();
+ GameModule *_gameModule;
public:
diff --git a/engines/neverhood/resource.h b/engines/neverhood/resource.h
index 8cab1eb565..6a76a73a64 100644
--- a/engines/neverhood/resource.h
+++ b/engines/neverhood/resource.h
@@ -98,6 +98,15 @@ protected:
Common::Array<AnimFrameInfo> _frames;
};
+// TODO: Dummy class atm
+
+class SoundResource {
+public:
+ SoundResource(NeverhoodEngine *vm) : _vm(vm) {}
+ bool isPlaying() const { return false; }
+protected:
+ NeverhoodEngine *_vm;
+};
} // End of namespace Neverhood
diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h
index 3532a43b0b..e5a3d0ecee 100644
--- a/engines/neverhood/scene.h
+++ b/engines/neverhood/scene.h
@@ -71,7 +71,7 @@ protected:
// TODO 00000090 playerSprite dd ?
// TODO 00000094 mouseSprite dd ?
Palette *_palette;
- // TODO 0000009C class300 dd ?
+ // TODO Background *_background;
bool _surfaceFlag;
bool _messageListFlag;
MessageListItem *_messageList2;