diff options
-rw-r--r-- | engines/neverhood/gamemodule.cpp | 29 | ||||
-rw-r--r-- | engines/neverhood/gamemodule.h | 2 | ||||
-rw-r--r-- | engines/neverhood/module.mk | 1 | ||||
-rw-r--r-- | engines/neverhood/module1000.cpp | 116 | ||||
-rw-r--r-- | engines/neverhood/module1000.h | 71 | ||||
-rw-r--r-- | engines/neverhood/neverhood.cpp | 18 | ||||
-rw-r--r-- | engines/neverhood/neverhood.h | 4 | ||||
-rw-r--r-- | engines/neverhood/smackerscene.cpp | 8 |
8 files changed, 241 insertions, 8 deletions
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp index 3f4ad4b536..93687f9866 100644 --- a/engines/neverhood/gamemodule.cpp +++ b/engines/neverhood/gamemodule.cpp @@ -22,6 +22,7 @@ #include "neverhood/gamemodule.h" +#include "neverhood/module1000.h" #include "neverhood/module1500.h" namespace Neverhood { @@ -84,12 +85,14 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam ¶m, Enti void GameModule::startup() { // TODO: Displaying of error text probably not needed in ScummVM - createModule1500(0); +// createModule1500(0); // Logos and intro video + + createModule1000(0); } void GameModule::createModule1500(int which) { _someFlag1 = false; - // TODO *getGlobalGameVarValuePtr(0x91080831) = 0x0F10114; + _vm->setGlobalVar(0x91080831, 0x00F10114); _childObject = new Module1500(_vm, this, which, true); SetUpdateHandler(&GameModule::updateModule1500); } @@ -102,8 +105,28 @@ void GameModule::updateModule1500() { _done = false; delete _childObject; _childObject = NULL; + createModule1000(0); + _childObject->handleUpdate(); + } +} + +void GameModule::createModule1000(int which) { + _vm->setGlobalVar(0x91080831, 0x03294419); + _childObject = new Module1000(_vm, this, which); + SetUpdateHandler(&GameModule::updateModule1000); +} + +void GameModule::updateModule1000() { + if (!_childObject) + return; + _childObject->handleUpdate(); + if (_done) { + _done = false; + // TODO _resourceTable3.load(); + delete _childObject; + _childObject = NULL; error("Done..."); - // TODO createModule1000(); + // TODO createModule2300(); // TODO _childObject->handleUpdate(); } } diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h index 6f47fb6f65..6d65895ef7 100644 --- a/engines/neverhood/gamemodule.h +++ b/engines/neverhood/gamemodule.h @@ -49,6 +49,8 @@ protected: void startup(); void createModule1500(int which); void updateModule1500(); + void createModule1000(int which); + void updateModule1000(); }; } // End of namespace Neverhood diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk index 8eb1951543..fe0f7de60c 100644 --- a/engines/neverhood/module.mk +++ b/engines/neverhood/module.mk @@ -8,6 +8,7 @@ MODULE_OBJS = \ gamemodule.o \ graphics.o \ module.o \ + module1000.o \ module1500.o \ neverhood.o \ palette.o \ diff --git a/engines/neverhood/module1000.cpp b/engines/neverhood/module1000.cpp new file mode 100644 index 0000000000..d1403b9307 --- /dev/null +++ b/engines/neverhood/module1000.cpp @@ -0,0 +1,116 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "neverhood/module1000.h" + +namespace Neverhood { + +Module1000::Module1000(NeverhoodEngine *vm, Module *parentModule, int which) + : Module(vm, parentModule) { + + debug("Create Module1000(%d)", which); + + _musicFileHash = _vm->getGlobalVar(0xD0A14D10) ? 0x81106480 : 0x00103144; + + // TODO Music18hList_add(0x03294419, 0x061880C6); + // TODO Music18hList_add(0x03294419, _musicFileHash); + + if (which < 0) { + switch (_vm->gameState().sceneNum) { + case 0: + createScene1001(-1); + break; + case 1: + createScene1002(-1); + break; + case 2: + createScene1003(-1); + break; + case 3: + createScene1004(-1); + break; + case 4: + createScene1005(-1); + break; + } + } else if (which == 0) { + createScene1001(0); + } else if (which == 1) { + createScene1002(1); + } + +} + +Module1000::~Module1000() { + // TODO Music18hList_deleteGroup(0x03294419); +} + +void Module1000::createScene1001(int which) { + debug("createScene1501"); + _vm->gameState().sceneNum = 0; + _childObject = new Scene1001(_vm, this, which); + // TODO ResourceTable_multiLoad(&_resourceTable1, &_resourceTable2, &_resourceTable3); + // TODO Music18hList_play(0x061880C6, 0, 0, 1); + SetUpdateHandler(&Module1000::updateScene1001); +} + +void Module1000::createScene1002(int which) { +} + +void Module1000::createScene1003(int which) { +} + +void Module1000::createScene1004(int which) { +} + +void Module1000::createScene1005(int which) { +} + +void Module1000::updateScene1001() { +} + +void Module1000::updateScene1002() { +} + +void Module1000::updateScene1003() { +} + +void Module1000::updateScene1004() { +} + +void Module1000::updateScene1005() { +} + +// Scene1001 + +Scene1001::Scene1001(NeverhoodEngine *vm, Module *parentModule, int which) + : Scene(vm, parentModule, true) { +} + +void Scene1001::update() { +} + +uint32 Scene1001::handleMessage(int messageNum, const MessageParam ¶m, Entity *sender) { + return 0; +} + +} // End of namespace Neverhood diff --git a/engines/neverhood/module1000.h b/engines/neverhood/module1000.h new file mode 100644 index 0000000000..935a8be020 --- /dev/null +++ b/engines/neverhood/module1000.h @@ -0,0 +1,71 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef NEVERHOOD_MODULE1000_H +#define NEVERHOOD_MODULE1000_H + +#include "neverhood/neverhood.h" +#include "neverhood/module.h" +#include "neverhood/scene.h" + +namespace Neverhood { + +class Module1000 : public Module { +public: + Module1000(NeverhoodEngine *vm, Module *parentModule, int which); + virtual ~Module1000(); +protected: + uint32 _musicFileHash; + // TODO ResourceTable _resourceTable1; + // TODO ResourceTable _resourceTable2; + // TODO ResourceTable _resourceTable3; + // TODO ResourceTable _resourceTable4; + void createScene1001(int which); + void createScene1002(int which); + void createScene1003(int which); + void createScene1004(int which); + void createScene1005(int which); + void updateScene1001(); + void updateScene1002(); + void updateScene1003(); + void updateScene1004(); + void updateScene1005(); +}; + +class Scene1001 : public Scene { +public: + Scene1001(NeverhoodEngine *vm, Module *parentModule, int which); +protected: + Sprite *_class511; + Sprite *_class508; + Sprite *_class509; + Sprite *_class608; + Sprite *_class510; + int16 _fieldE4; + int16 _fieldE6; + void update(); + uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); +}; + +} // End of namespace Neverhood + +#endif /* NEVERHOOD_MODULE1000_H */ diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp index 650681289a..b61f65ca77 100644 --- a/engines/neverhood/neverhood.cpp +++ b/engines/neverhood/neverhood.cpp @@ -185,4 +185,22 @@ Common::Error NeverhoodEngine::run() { return Common::kNoError; } +uint32 NeverhoodEngine::getGlobalVar(uint32 nameHash) { + // TODO + return 0; +} + +void NeverhoodEngine::setGlobalVar(uint32 nameHash, uint32 value) { + // TODO +} + +uint32 NeverhoodEngine::getSubVar(uint32 nameHash, uint32 subNameHash) { + // TODO + return 0; +} + +void NeverhoodEngine::setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value) { + // TODO +} + } // End of namespace Neverhood diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h index c13ac517fb..dddec472b9 100644 --- a/engines/neverhood/neverhood.h +++ b/engines/neverhood/neverhood.h @@ -110,6 +110,10 @@ public: #endif GameState& gameState() { return _gameState; } + uint32 getGlobalVar(uint32 nameHash); + void setGlobalVar(uint32 nameHash, uint32 value); + uint32 getSubVar(uint32 nameHash, uint32 subNameHash); + void setSubVar(uint32 nameHash, uint32 subNameHash, uint32 value); public: diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp index f3ee5775bc..d47dbb0394 100644 --- a/engines/neverhood/smackerscene.cpp +++ b/engines/neverhood/smackerscene.cpp @@ -32,12 +32,10 @@ SmackerScene::SmackerScene(NeverhoodEngine *vm, Module *parentModule, bool doubl // NOTE: Merged from SmackerScene::init, maybe split again if needed (incl. parameter flags) - /* TODO - if (_vm->getGlobalVarValue(0x06C02850)) { + if (_vm->getGlobalVar(0x06C02850)) { _flag1 = true; _canAbort = true; } - */ if (_doubleSurface) { _vm->_screen->clear(); @@ -78,9 +76,9 @@ void SmackerScene::nextVideo() { _parentModule->sendMessage(0x1009, 0, this); return; } - // TODO _fieldDF = getGlobalSubVarValue(0x00800410, smackerFileHash); + _fieldDF = _vm->getSubVar(0x00800410, smackerFileHash); if (!_fieldDF) { - // TODO setGlobalSubVarValue(0x00800410, smackerFileHash) = 1; + _vm->setSubVar(0x00800410, smackerFileHash, 1); } if (_fileHashListIndex == 0) { _smackerPlayer = new SmackerPlayer(_vm, this, smackerFileHash, _doubleSurface, false); |