aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorjohndoe1232011-07-01 13:20:46 +0000
committerWillem Jan Palenstijn2013-05-08 20:30:57 +0200
commit3c82668fe4267b34a9e3c7fe88f0d2a0fcfc4c4b (patch)
tree1a98104a53fb813e0093405a813a42d74d6bfeb5 /engines
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.)
Diffstat (limited to 'engines')
-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;