diff options
author | Eugene Sandulenko | 2016-08-22 09:51:56 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2016-08-22 09:51:56 +0200 |
commit | fdb451bacaae8fdd5c3cf5a29502ac13163b511c (patch) | |
tree | 3f121d22b94bcfe0c53c4a5800afd5eda5552a9a /engines | |
parent | 3f32c4a4b9ef1ed6d151da1dbf3c299cc6f533b1 (diff) | |
download | scummvm-rg350-fdb451bacaae8fdd5c3cf5a29502ac13163b511c.tar.gz scummvm-rg350-fdb451bacaae8fdd5c3cf5a29502ac13163b511c.tar.bz2 scummvm-rg350-fdb451bacaae8fdd5c3cf5a29502ac13163b511c.zip |
DIRECTOR: Improvements to the BITD rendering
Diffstat (limited to 'engines')
-rw-r--r-- | engines/director/images.cpp | 41 | ||||
-rw-r--r-- | engines/director/images.h | 3 | ||||
-rw-r--r-- | engines/director/score.cpp | 6 | ||||
-rw-r--r-- | engines/director/score.h | 2 |
4 files changed, 23 insertions, 29 deletions
diff --git a/engines/director/images.cpp b/engines/director/images.cpp index 0b440e1b1d..67ffb5d700 100644 --- a/engines/director/images.cpp +++ b/engines/director/images.cpp @@ -108,11 +108,20 @@ bool DIBDecoder::loadStream(Common::SeekableReadStream &stream) { return true; } -BITDDecoder::BITDDecoder() { - _surface = 0; - _palette = 0; - _paletteColorCount = 0; - _codec = 0; +/**************************** + * BITD + ****************************/ + +BITDDecoder::BITDDecoder(int w, int h) { + _surface = new Graphics::Surface(); + _surface->create(w, h, Graphics::PixelFormat::createFormatCLUT8()); + + _palette = new byte[255 * 3]; + + _palette[0] = _palette[1] = _palette[2] = 0; + _palette[255 * 3 + 0] = _palette[255 * 3 + 1] = _palette[255 * 3 + 2] = 0xff; + + _paletteColorCount = 2; } BITDDecoder::~BITDDecoder() { @@ -125,30 +134,16 @@ void BITDDecoder::destroy() { delete[] _palette; _palette = 0; _paletteColorCount = 0; - - delete _codec; - _codec = 0; } void BITDDecoder::loadPalette(Common::SeekableReadStream &stream) { - _palette = new byte[255 * 3]; - - _palette[0] = _palette[1] = _palette[2] = 0; - _palette[255 * 3 + 0] = _palette[255 * 3 + 1] = _palette[255 * 3 + 2] = 0xff; - - _paletteColorCount = 2; + // no op } bool BITDDecoder::loadStream(Common::SeekableReadStream &stream) { - uint32 width = 512; // Should come from the Cast - uint32 height = 342; - - _surface = new Graphics::Surface(); - _surface->create(width, height, Graphics::PixelFormat::createFormatCLUT8()); - int x = 0, y = 0; - while (y < height) { + while (y < _surface->h) { int n = stream.readSByte(); int count; int b = 0; @@ -168,7 +163,7 @@ bool BITDDecoder::loadStream(Common::SeekableReadStream &stream) { count = 0; } - for (int i = 0; i < count && y < height; i++) { + for (int i = 0; i < count && y < _surface->h; i++) { byte color = 0; if (state == 1) { color = stream.readByte(); @@ -178,7 +173,7 @@ bool BITDDecoder::loadStream(Common::SeekableReadStream &stream) { for (int c = 0; c < 8; c++) { *((byte *)_surface->getBasePtr(x, y)) = (color & (1 << (7 - c % 8))) ? 0 : 0xff; x++; - if (x == width) { + if (x == _surface->w) { y++; x = 0; break; diff --git a/engines/director/images.h b/engines/director/images.h index 821b85ad48..54e824588f 100644 --- a/engines/director/images.h +++ b/engines/director/images.h @@ -64,7 +64,7 @@ private: class BITDDecoder : public Image::ImageDecoder { public: - BITDDecoder(); + BITDDecoder(int w, int h); virtual ~BITDDecoder(); // ImageDecoder API @@ -76,7 +76,6 @@ public: uint16 getPaletteColorCount() const { return _paletteColorCount; } private: - Image::Codec *_codec; Graphics::Surface *_surface; byte *_palette; uint8 _paletteColorCount; diff --git a/engines/director/score.cpp b/engines/director/score.cpp index 662820840e..ccadac212c 100644 --- a/engines/director/score.cpp +++ b/engines/director/score.cpp @@ -1240,7 +1240,7 @@ void Frame::renderSprites(Graphics::ManagedSurface &surface, bool renderTrail) { continue; } - Image::ImageDecoder *img = getImageFrom(_sprites[i]->_castId); + Image::ImageDecoder *img = getImageFrom(_sprites[i]->_castId, _sprites[i]->_width, _sprites[i]->_height); if (!img) { warning("Image with id %d not found", _sprites[i]->_castId); @@ -1321,7 +1321,7 @@ void Frame::renderButton(Graphics::ManagedSurface &surface, uint16 spriteId) { } } -Image::ImageDecoder *Frame::getImageFrom(uint16 spriteId) { +Image::ImageDecoder *Frame::getImageFrom(uint16 spriteId, int w, int h) { uint16 imgId = spriteId + 1024; Image::ImageDecoder *img = NULL; @@ -1339,7 +1339,7 @@ Image::ImageDecoder *Frame::getImageFrom(uint16 spriteId) { if (_vm->_currentScore->getArchive()->hasResource(MKTAG('B', 'I', 'T', 'D'), imgId)) { if (_vm->getVersion() < 4) { - img = new BITDDecoder(); + img = new BITDDecoder(w, h); } else { img = new Image::BitmapDecoder(); } diff --git a/engines/director/score.h b/engines/director/score.h index a7ca59b475..929dae666f 100644 --- a/engines/director/score.h +++ b/engines/director/score.h @@ -347,7 +347,7 @@ private: void readPaletteInfo(Common::SeekableSubReadStreamEndian &stream); void readSprite(Common::SeekableSubReadStreamEndian &stream, uint16 offset, uint16 size); void readMainChannels(Common::SeekableSubReadStreamEndian &stream, uint16 offset, uint16 size); - Image::ImageDecoder *getImageFrom(uint16 spriteID); + Image::ImageDecoder *getImageFrom(uint16 spriteID, int w, int h); void drawBackgndTransSprite(Graphics::ManagedSurface &target, const Graphics::Surface &sprite, Common::Rect &drawRect); void drawMatteSprite(Graphics::ManagedSurface &target, const Graphics::Surface &sprite, Common::Rect &drawRect); void drawGhostSprite(Graphics::ManagedSurface &target, const Graphics::Surface &sprite, Common::Rect &drawRect); |