NEVERHOOD: Add skeleton for Module1000

- Add dummies for game variable access
This commit is contained in:
johndoe123 2011-07-05 13:28:43 +00:00 committed by Willem Jan Palenstijn
parent 21eb88053c
commit 9d0e90bcd2
8 changed files with 241 additions and 8 deletions

View File

@ -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();
}
}

View File

@ -49,6 +49,8 @@ protected:
void startup();
void createModule1500(int which);
void updateModule1500();
void createModule1000(int which);
void updateModule1000();
};
} // End of namespace Neverhood

View File

@ -8,6 +8,7 @@ MODULE_OBJS = \
gamemodule.o \
graphics.o \
module.o \
module1000.o \
module1500.o \
neverhood.o \
palette.o \

View File

@ -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

View File

@ -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 */

View File

@ -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

View File

@ -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:

View File

@ -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);