diff options
Diffstat (limited to 'engines/access/data.cpp')
-rw-r--r-- | engines/access/data.cpp | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/engines/access/data.cpp b/engines/access/data.cpp index 0ef1845892..ed913c9be9 100644 --- a/engines/access/data.cpp +++ b/engines/access/data.cpp @@ -20,10 +20,47 @@ * */ -#include "access/data.h" #include "common/algorithm.h" +#include "common/endian.h" +#include "common/memstream.h" +#include "access/access.h" +#include "access/data.h" namespace Access { +SpriteResource::SpriteResource(AccessEngine *vm, const byte *data, uint32 size) { + Common::MemoryReadStream stream(data, size); + Common::Array<uint32> offsets; + int count = stream.readUint16LE(); + + for (int i = 0; i < count; i++) + offsets.push_back(stream.readUint32LE()); + offsets.push_back(size); // For easier calculations of Noctropolis sizes + + // Build up the frames + for (int i = 0; i < count; ++i) { + stream.seek(offsets[i]); + + SpriteFrame *frame = new SpriteFrame(); + frame->_width = stream.readUint16LE(); + frame->_height = stream.readUint16LE(); + frame->_size = (vm->getGameID() == GType_MeanStreets) ? stream.readUint16LE() : + offsets[i + 1] - offsets[i]; + + frame->_data = new byte[frame->_size]; + stream.read(frame->_data, frame->_size); + + _frames.push_back(frame); + } +} + +SpriteResource::~SpriteResource() { + for (uint i = 0; i < _frames.size(); ++i) + delete _frames[i]; +} + +SpriteFrame::~SpriteFrame() { + delete[] _data; +} } // End of namespace Access |