aboutsummaryrefslogtreecommitdiff
path: root/engines/draci/game.cpp
diff options
context:
space:
mode:
authorDenis Kasak2009-06-28 13:10:53 +0000
committerDenis Kasak2009-06-28 13:10:53 +0000
commitd28bbe51bffe67866b3e1d53188be847c7f533e4 (patch)
tree8467c180e18fa784f8f5809536555bcbfd4748b1 /engines/draci/game.cpp
parent1e70f25fcfed439149a5fc1a87a4ce0461656127 (diff)
downloadscummvm-rg350-d28bbe51bffe67866b3e1d53188be847c7f533e4.tar.gz
scummvm-rg350-d28bbe51bffe67866b3e1d53188be847c7f533e4.tar.bz2
scummvm-rg350-d28bbe51bffe67866b3e1d53188be847c7f533e4.zip
Added struct GameObject (such structs are stored in OBJEKTY.DFW and used for in-game objects' info). Added Game::loadObject() for loading such objects into memory. Made Game's constructor load the object for the main hero.
svn-id: r41925
Diffstat (limited to 'engines/draci/game.cpp')
-rw-r--r--engines/draci/game.cpp54
1 files changed, 53 insertions, 1 deletions
diff --git a/engines/draci/game.cpp b/engines/draci/game.cpp
index 1b6a25679d..7cceb0e854 100644
--- a/engines/draci/game.cpp
+++ b/engines/draci/game.cpp
@@ -121,8 +121,51 @@ Game::Game() {
// TODO: Why is this failing?
// assert(curOffset == _info->_numDialogBlocks);
+ loadObject(0, &_heroObj);
}
+void Game::loadObject(uint16 objNum, GameObject *obj) {
+ Common::String path("OBJEKTY.DFW");
+
+ BArchive objArchive(path);
+ BAFile *file;
+
+ file = objArchive[objNum * 3];
+ Common::MemoryReadStream objReader(file->_data, file->_length);
+
+ obj->_init = objReader.readUint16LE();
+ obj->_look = objReader.readUint16LE();
+ obj->_use = objReader.readUint16LE();
+ obj->_canUse = objReader.readUint16LE();
+ obj->_imInit = objReader.readByte();
+ obj->_imLook = objReader.readByte();
+ obj->_imUse = objReader.readByte();
+ obj->_walkDir = objReader.readByte();
+ obj->_priority = objReader.readByte();
+ obj->_idxSeq = objReader.readUint16LE();
+ obj->_numSeq = objReader.readUint16LE();
+ obj->_lookX = objReader.readUint16LE();
+ obj->_lookY = objReader.readUint16LE();
+ obj->_useX = objReader.readUint16LE();
+ obj->_useY = objReader.readUint16LE();
+ obj->_lookDir = objReader.readByte();
+ obj->_useDir = objReader.readByte();
+
+ obj->_absNum = objNum;
+ obj->_animObj = 0;
+
+ obj->_seqTab = new uint16[obj->_numSeq];
+
+ file = objArchive[objNum * 3 + 1];
+ obj->_title = new byte[file->_length];
+ memcpy(obj->_title, file->_data, file->_length);
+
+ file = objArchive[objNum * 3 + 2];
+ obj->_program = new byte[file->_length];
+ memcpy(obj->_program, file->_data, file->_length);
+ obj->_progLen = file->_length;
+}
+
Game::~Game() {
delete[] _persons;
delete[] _variables;
@@ -130,6 +173,15 @@ Game::~Game() {
delete[] _itemStatus;
delete[] _objectStatus;
delete _info;
-}
+}
+
+GameObject::~GameObject() {
+ if (_seqTab)
+ delete[] _seqTab;
+ if (_title)
+ delete[] _title;
+ if (_program)
+ delete[] _program;
+}
}