aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/director/images.cpp41
-rw-r--r--engines/director/images.h3
-rw-r--r--engines/director/score.cpp6
-rw-r--r--engines/director/score.h2
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);