[Scummvm-cvs-logs] SF.net SVN: scummvm:[41908] scummvm/branches/gsoc2009-draci/engines/draci
dkasak13 at users.sourceforge.net
dkasak13 at users.sourceforge.net
Sat Jun 27 07:10:24 CEST 2009
Revision: 41908
http://scummvm.svn.sourceforge.net/scummvm/?rev=41908&view=rev
Author: dkasak13
Date: 2009-06-27 05:10:24 +0000 (Sat, 27 Jun 2009)
Log Message:
-----------
Extended Game to load all info from INIT.DFW (general game info, dialog offsets, variables, item status, object status).
Modified Paths:
--------------
scummvm/branches/gsoc2009-draci/engines/draci/game.cpp
scummvm/branches/gsoc2009-draci/engines/draci/game.h
Modified: scummvm/branches/gsoc2009-draci/engines/draci/game.cpp
===================================================================
--- scummvm/branches/gsoc2009-draci/engines/draci/game.cpp 2009-06-27 01:04:24 UTC (rev 41907)
+++ scummvm/branches/gsoc2009-draci/engines/draci/game.cpp 2009-06-27 05:10:24 UTC (rev 41908)
@@ -32,22 +32,104 @@
namespace Draci {
Game::Game() {
+ unsigned int i;
Common::String path("INIT.DFW");
BArchive initArchive(path);
BAFile *file;
+ // Read in persons
+
file = initArchive[5];
- Common::MemoryReadStream reader(file->_data, file->_length);
+ Common::MemoryReadStream personData(file->_data, file->_length);
unsigned int numPersons = file->_length / personSize;
_persons = new Person[numPersons];
- for (unsigned int i = 0; i < numPersons; ++i) {
- _persons[i]._x = reader.readByte();
- _persons[i]._y = reader.readByte();
- _persons[i]._fontColour = reader.readUint16LE();
+ for (i = 0; i < numPersons; ++i) {
+ _persons[i]._x = personData.readByte();
+ _persons[i]._y = personData.readByte();
+ _persons[i]._fontColour = personData.readUint16LE();
}
+
+ // Read in dialog offsets
+
+ file = initArchive[4];
+ Common::MemoryReadStream dialogData(file->_data, file->_length);
+
+ unsigned int numDialogs = file->_length / sizeof(uint16);
+ _dialogOffsets = new uint16[numDialogs];
+
+ unsigned int curOffset;
+ for (i = 0, curOffset = 0; i < numDialogs; ++i) {
+ _dialogOffsets[i] = curOffset;
+ curOffset += dialogData.readUint16LE();
+ }
+
+ // Read in game info
+
+ file = initArchive[3];
+ Common::MemoryReadStream gameData(file->_data, file->_length);
+ _info = new GameInfo();
+
+ _info->_currentRoom = gameData.readByte();
+ _info->_mapRoom = gameData.readByte();
+ _info->_numObjects = gameData.readUint16LE();
+ _info->_numIcons = gameData.readUint16LE();
+ _info->_numVariables = gameData.readByte();
+ _info->_numPersons = gameData.readByte();
+ _info->_numDialogs = gameData.readByte();
+ _info->_maxIconWidth = gameData.readUint16LE();
+ _info->_maxIconHeight = gameData.readUint16LE();
+ _info->_musicLength = gameData.readUint32LE();
+
+// FIXME: Something is wrong here. The total file length is only 23 bytes
+// but the whole struct should be 35 bytes.
+ _info->_crc[0] = gameData.readUint32LE();
+ _info->_crc[1] = gameData.readUint32LE();
+ _info->_crc[2] = gameData.readUint32LE();
+ _info->_crc[3] = gameData.readUint32LE();
+ _info->_numDialogBlocks = gameData.readUint16LE();
+
+ // Read in variables
+
+ file = initArchive[2];
+ unsigned int numVariables = file->_length / sizeof (int16);
+
+ _variables = new int16[numVariables];
+ memcpy(_variables, file->_data, file->_length);
+
+ // Read in item status
+
+ file = initArchive[1];
+ _itemStatus = new byte[file->_length];
+ memcpy(_itemStatus, file->_data, file->_length);
+
+ // Read in object status
+
+ file = initArchive[0];
+ unsigned int numObjects = file->_length;
+
+ _objectStatus = new byte[numObjects];
+ memcpy(_objectStatus, file->_data, file->_length);
+
+ assert(numDialogs == _info->_numDialogs);
+ assert(numPersons == _info->_numPersons);
+ assert(numVariables == _info->_numVariables);
+ assert(numObjects == _info->_numObjects);
+
+// TODO: Why is this failing?
+// assert(curOffset == _info->_numDialogBlocks);
+
}
+Game::~Game() {
+ delete[] _persons;
+ delete[] _variables;
+ delete[] _dialogOffsets;
+ delete[] _itemStatus;
+ delete[] _objectStatus;
+ delete _info;
+}
+
}
Modified: scummvm/branches/gsoc2009-draci/engines/draci/game.h
===================================================================
--- scummvm/branches/gsoc2009-draci/engines/draci/game.h 2009-06-27 01:04:24 UTC (rev 41907)
+++ scummvm/branches/gsoc2009-draci/engines/draci/game.h 2009-06-27 05:10:24 UTC (rev 41908)
@@ -31,9 +31,23 @@
namespace Draci {
enum StructSizes {
- personSize = 3
+ personSize = sizeof(uint16) * 2 + sizeof(byte)
};
+struct GameInfo {
+ byte _currentRoom;
+ byte _mapRoom;
+ uint16 _numObjects;
+ uint16 _numIcons;
+ byte _numVariables;
+ byte _numPersons;
+ byte _numDialogs;
+ uint16 _maxIconWidth, _maxIconHeight;
+ uint32 _musicLength;
+ uint32 _crc[4];
+ uint16 _numDialogBlocks;
+};
+
struct Person {
uint16 _x, _y;
byte _fontColour;
@@ -46,7 +60,12 @@
~Game();
private:
+ GameInfo *_info;
Person *_persons;
+ uint16 *_dialogOffsets;
+ int16 *_variables;
+ byte *_itemStatus;
+ byte *_objectStatus;
};
} // End of namespace Draci
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list