aboutsummaryrefslogtreecommitdiff
path: root/engines/access/data.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/access/data.cpp')
-rw-r--r--engines/access/data.cpp39
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