From 02a1d0eaa3f462425d115f4d88c3d2badbc7a236 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 22 Feb 2014 12:17:37 -0500 Subject: MADS: Further cursor/event initialisation --- engines/mads/assets.cpp | 65 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'engines/mads/assets.cpp') diff --git a/engines/mads/assets.cpp b/engines/mads/assets.cpp index 7c1b169396..6ad313ce3e 100644 --- a/engines/mads/assets.cpp +++ b/engines/mads/assets.cpp @@ -22,9 +22,74 @@ #include "common/scummsys.h" #include "mads/mads.h" +#include "mads/assets.h" +#include "mads/compression.h" #include "mads/events.h" namespace MADS { +SpriteAsset::SpriteAsset(MADSEngine *vm, const Common::String &resourceName, int flags): + _vm(vm) { + Common::String resName = resourceName; + if (!resName.hasSuffix(".SS")) + resName += ".SS"; + + File file(resName); + MadsPack sprites(&file); + + int curFrame = 0; + uint32 frameOffset = 0; + _frameRate = 0; + _pixelSpeed = 0; + _maxWidth = 0; + _maxHeight = 0; + + Common::SeekableReadStream *spriteStream = sprites.getItemStream(0); + for (int i = 0; i < 19; i++) { + spriteStream->readUint16LE(); + } + _frameCount = spriteStream->readUint16LE(); + // we skip the rest of the data + delete spriteStream; + + // Get the palette data + spriteStream = sprites.getItemStream(2); + int numColors = 0; + byte *palData = _vm->_palette->decodePalette(spriteStream, &numColors); + + Common::copy(palData, &palData[numColors], &_palette[0]); + if (numColors < 256) + Common::fill(&_palette[numColors * 3], &_palette[PALETTE_SIZE], 0); + _colorCount = numColors; + delete[] palData; + delete spriteStream; + + spriteStream = sprites.getItemStream(1); + Common::SeekableReadStream *spriteDataStream = sprites.getItemStream(3); + + SpriteAssetFrame frame; + for (curFrame = 0; curFrame < _frameCount; curFrame++) { + frame.comp = 0; + frameOffset = spriteStream->readUint32LE(); + _frameOffsets.push_back(frameOffset); + spriteStream->readUint32LE(); // frame size + frame.x = spriteStream->readUint16LE(); + frame.y = spriteStream->readUint16LE(); + frame.w = spriteStream->readUint16LE(); + frame.h = spriteStream->readUint16LE(); + if (curFrame == 0) { + debugN(kDebugGraphics, "%i frames, x = %i, y = %i, w = %i, h = %i\n", + _frameCount, frame.x, frame.y, frame.w, frame.h); + } + + frame.frame = MSprite::init(spriteDataStream, Common::Point(frame.x, frame.y), + frame.w, frame.h, false); + _frames.push_back(frame); + } + + delete spriteStream; + delete spriteDataStream; + file.close(); +} } // End of namespace MADS -- cgit v1.2.3