diff options
author | johndoe123 | 2011-07-05 14:22:18 +0000 |
---|---|---|
committer | Willem Jan Palenstijn | 2013-05-08 20:30:58 +0200 |
commit | ae4ef4e66dc69a9d60b44261596860fcc4518de9 (patch) | |
tree | d2441200cd935e8b9b0be27e4f5b7d1c652e2b79 | |
parent | 9d0e90bcd2fc392a66d213b64dc07ccd32d438b4 (diff) | |
download | scummvm-rg350-ae4ef4e66dc69a9d60b44261596860fcc4518de9.tar.gz scummvm-rg350-ae4ef4e66dc69a9d60b44261596860fcc4518de9.tar.bz2 scummvm-rg350-ae4ef4e66dc69a9d60b44261596860fcc4518de9.zip |
NEVERHOOD: Add StaticData class
-rw-r--r-- | engines/neverhood/module.mk | 3 | ||||
-rw-r--r-- | engines/neverhood/neverhood.cpp | 7 | ||||
-rw-r--r-- | engines/neverhood/neverhood.h | 2 | ||||
-rw-r--r-- | engines/neverhood/scene.h | 10 | ||||
-rw-r--r-- | engines/neverhood/staticdata.cpp | 121 | ||||
-rw-r--r-- | engines/neverhood/staticdata.h | 75 |
6 files changed, 209 insertions, 9 deletions
diff --git a/engines/neverhood/module.mk b/engines/neverhood/module.mk index fe0f7de60c..8a25e25bab 100644 --- a/engines/neverhood/module.mk +++ b/engines/neverhood/module.mk @@ -18,7 +18,8 @@ MODULE_OBJS = \ screen.o \ smackerscene.o \ smackerplayer.o \ - sprite.o + sprite.o \ + staticdata.o # This module can be built as a plugin ifdef BUILD_PLUGINS diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp index b61f65ca77..24033f0fd1 100644 --- a/engines/neverhood/neverhood.cpp +++ b/engines/neverhood/neverhood.cpp @@ -33,6 +33,7 @@ #include "neverhood/resourceman.h" #include "neverhood/resource.h" #include "neverhood/screen.h" +#include "neverhood/staticdata.h" namespace Neverhood { @@ -62,6 +63,9 @@ Common::Error NeverhoodEngine::run() { _isSaveAllowed = false; + _staticData = new StaticData(); + _staticData->load("neverhood.dat"); + _screen = new Screen(this); _res = new ResourceMan(); @@ -176,9 +180,10 @@ Common::Error NeverhoodEngine::run() { } delete _gameModule; - delete _res; delete _screen; + + delete _staticData; debug("Ok."); diff --git a/engines/neverhood/neverhood.h b/engines/neverhood/neverhood.h index dddec472b9..b2ba5f7ff0 100644 --- a/engines/neverhood/neverhood.h +++ b/engines/neverhood/neverhood.h @@ -42,6 +42,7 @@ struct NeverhoodGameDescription; class GameModule; class ResourceMan; class Screen; +class StaticData; struct GameState { int sceneNum; @@ -74,6 +75,7 @@ public: Screen *_screen; ResourceMan *_res; GameModule *_gameModule; + StaticData *_staticData; public: diff --git a/engines/neverhood/scene.h b/engines/neverhood/scene.h index 405a528143..108adba83b 100644 --- a/engines/neverhood/scene.h +++ b/engines/neverhood/scene.h @@ -32,14 +32,10 @@ #include "neverhood/palette.h" #include "neverhood/smackerplayer.h" #include "neverhood/sprite.h" +#include "neverhood/staticdata.h" namespace Neverhood { -struct MessageListItem { - uint32 messageNum; - uint32 messageValue; -}; - class Scene : public Entity { public: Scene(NeverhoodEngine *vm, Module *parentModule, bool clearHitRects); @@ -58,7 +54,7 @@ protected: Common::Array<Entity*> _entities; Common::Array<BaseSurface*> _surfaces; bool _systemCallbackFlag; - MessageListItem *_messageList; + MessageList *_messageList; int _messageListIndex; int _messageListCount; bool _messageListFlag1; @@ -77,7 +73,7 @@ protected: Background *_background; bool _surfaceFlag; bool _messageListFlag; - MessageListItem *_messageList2; + MessageList *_messageList2; int _messageListStatus; SmackerPlayer *_smackerPlayer; void (Entity::*_savedUpdateHandlerCb)(); diff --git a/engines/neverhood/staticdata.cpp b/engines/neverhood/staticdata.cpp new file mode 100644 index 0000000000..4cd1d30251 --- /dev/null +++ b/engines/neverhood/staticdata.cpp @@ -0,0 +1,121 @@ +/* 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/staticdata.h" + +namespace Neverhood { + +StaticData::StaticData() { +} + +StaticData::~StaticData() { +} + +void StaticData::load(const char *filename) { + + Common::File fd; + + if (!fd.open(filename)) + error("StaticData::load() Could not open %s", filename); + + fd.readUint32LE(); // magic + fd.readUint32LE(); // version + + // Load message lists + uint32 messageListsCount = fd.readUint32LE(); + debug("messageListsCount: %d", messageListsCount); + for (uint32 i = 0; i < messageListsCount; i++) { + MessageList *messageList = new MessageList(); + uint32 id = fd.readUint32LE(); + uint32 itemCount = fd.readUint32LE(); + for (uint32 itemIndex = 0; itemIndex < itemCount; itemIndex++) { + MessageItem messageItem; + messageItem.messageNum = fd.readUint16LE(); + messageItem.messageValue = fd.readUint32LE(); + messageList->push_back(messageItem); + } + _messageLists[id] = messageList; + } + + // Load rect lists + uint32 rectListsCount = fd.readUint32LE(); + debug("rectListsCount: %d", rectListsCount); + for (uint32 i = 0; i < rectListsCount; i++) { + RectList *rectList = new RectList(); + uint32 id = fd.readUint32LE(); + uint32 itemCount = fd.readUint32LE(); + for (uint32 itemIndex = 0; itemIndex < itemCount; itemIndex++) { + RectItem rectItem; + rectItem.rect.x1 = fd.readUint16LE(); + rectItem.rect.y1 = fd.readUint16LE(); + rectItem.rect.x2 = fd.readUint16LE(); + rectItem.rect.y2 = fd.readUint16LE(); + uint32 subItemCount = fd.readUint32LE(); + rectItem.subRects.reserve(subItemCount); + for (uint32 subItemIndex = 0; subItemIndex < subItemCount; subItemIndex++) { + SubRectItem subRectItem; + subRectItem.rect.x1 = fd.readUint16LE(); + subRectItem.rect.y1 = fd.readUint16LE(); + subRectItem.rect.x2 = fd.readUint16LE(); + subRectItem.rect.y2 = fd.readUint16LE(); + subRectItem.messageListId = fd.readUint32LE(); + rectItem.subRects.push_back(subRectItem); + } + rectList->push_back(rectItem); + } + _rectLists[id] = rectList; + } + + // Load hit rects + uint32 hitRectListsCount = fd.readUint32LE(); + debug("hitRectListsCount: %d", hitRectListsCount); + for (uint32 i = 0; i < hitRectListsCount; i++) { + HitRectList *hitRectList = new HitRectList(); + uint32 id = fd.readUint32LE(); + uint32 itemCount = fd.readUint32LE(); + for (uint32 itemIndex = 0; itemIndex < itemCount; itemIndex++) { + HitRect hitRect; + hitRect.rect.x1 = fd.readUint16LE(); + hitRect.rect.y1 = fd.readUint16LE(); + hitRect.rect.x2 = fd.readUint16LE(); + hitRect.rect.y2 = fd.readUint16LE(); + hitRect.type = fd.readUint16LE(); + hitRectList->push_back(hitRect); + } + _hitRectLists[id] = hitRectList; + } + +} + +HitRectList *StaticData::getHitRectList(uint32 id) { + return _hitRectLists[id]; +} + +RectList *StaticData::getRectList(uint32 id) { + return _rectLists[id]; +} + +MessageList *StaticData::getMessageList(uint32 id) { + return _messageLists[id]; +} + +} // End of namespace Neverhood diff --git a/engines/neverhood/staticdata.h b/engines/neverhood/staticdata.h new file mode 100644 index 0000000000..a7d8a65bdd --- /dev/null +++ b/engines/neverhood/staticdata.h @@ -0,0 +1,75 @@ +/* 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_STATICDATA_H +#define NEVERHOOD_STATICDATA_H + +#include "common/array.h" +#include "common/hashmap.h" +#include "neverhood/neverhood.h" +#include "neverhood/graphics.h" + +namespace Neverhood { + +struct HitRect { + NRect rect; + uint16 type; +}; + +typedef Common::Array<HitRect> HitRectList; + +struct SubRectItem { + NRect rect; + uint32 messageListId; +}; + +struct RectItem { + NRect rect; + Common::Array<SubRectItem> subRects; +}; + +typedef Common::Array<RectItem> RectList; + +struct MessageItem { + uint16 messageNum; + uint32 messageValue; +}; + +typedef Common::Array<MessageItem> MessageList; + +class StaticData { +public: + StaticData(); + ~StaticData(); + void load(const char *filename); + HitRectList *getHitRectList(uint32 id); + RectList *getRectList(uint32 id); + MessageList *getMessageList(uint32 id); +protected: + Common::HashMap<uint32, HitRectList*> _hitRectLists; + Common::HashMap<uint32, RectList*> _rectLists; + Common::HashMap<uint32, MessageList*> _messageLists; +}; + +} // End of namespace Neverhood + +#endif /* NEVERHOOD_STATICDATA_H */ |