aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/neverhood/gamemodule.cpp29
-rw-r--r--engines/neverhood/gamemodule.h2
-rw-r--r--engines/neverhood/module.mk1
-rw-r--r--engines/neverhood/module1000.cpp116
-rw-r--r--engines/neverhood/module1000.h71
-rw-r--r--engines/neverhood/neverhood.cpp18
-rw-r--r--engines/neverhood/neverhood.h4
-rw-r--r--engines/neverhood/smackerscene.cpp8
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 &param, 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 &param, 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 &param, 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);