diff options
Diffstat (limited to 'engines/supernova')
-rw-r--r-- | engines/supernova/graphics.cpp | 33 | ||||
-rw-r--r-- | engines/supernova/supernova.cpp | 8 |
2 files changed, 16 insertions, 25 deletions
diff --git a/engines/supernova/graphics.cpp b/engines/supernova/graphics.cpp index 87485e0edc..ee2bfe8e3a 100644 --- a/engines/supernova/graphics.cpp +++ b/engines/supernova/graphics.cpp @@ -203,12 +203,10 @@ bool MSNImageDecoder::loadSections() { for (int section = 0; section < _numSections; ++section) { Graphics::Surface *surface = new Graphics::Surface; _sectionSurfaces.push_back(surface); - surface->create(imageWidth, - imageHeight, - g_system->getScreenFormat()); - byte *surfacePixels = static_cast<byte *>(surface->getPixels()); if (isNewspaper) { + surface->create(imageWidth, imageHeight, g_system->getScreenFormat()); + byte *surfacePixels = static_cast<byte *>(surface->getPixels()); for (int i = 0; i < imageWidth * imageHeight / 8; ++i) { *surfacePixels++ = (_encodedImage[i] & 0x80) ? kColorWhite63 : kColorBlack; *surfacePixels++ = (_encodedImage[i] & 0x40) ? kColorWhite63 : kColorBlack; @@ -220,24 +218,15 @@ bool MSNImageDecoder::loadSections() { *surfacePixels++ = (_encodedImage[i] & 0x01) ? kColorWhite63 : kColorBlack; } } else { - uint image = section; - do { - uint32 offset = (_section[image].addressHigh << 16) + _section[image].addressLow; - if (offset == kInvalidAddress || _section[image].x2 == 0) { - return false; - } - int width = _section[image].x2 - _section[image].x1 + 1; - int height = _section[image].y2 - _section[image].y1 + 1; - uint32 destAddress = imageWidth * _section[image].y1 + _section[image].x1; - while (height) { - Common::copy(_encodedImage + offset, _encodedImage + offset + width, surfacePixels + destAddress); - offset += width; - destAddress += imageWidth; - --height; - } - - image = _section[image].next; - } while (image != 0); + uint32 offset = (_section[section].addressHigh << 16) + _section[section].addressLow; + if (offset == kInvalidAddress || _section[section].x2 == 0) { + return false; + } + int width = _section[section].x2 - _section[section].x1 + 1; + int height = _section[section].y2 - _section[section].y1 + 1; + surface->create(width, height, g_system->getScreenFormat()); + byte *surfacePixels = static_cast<byte *>(surface->getPixels()); + Common::copy(_encodedImage + offset, _encodedImage + offset + width * height, surfacePixels); } } diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp index 6dda5657ff..291e18d964 100644 --- a/engines/supernova/supernova.cpp +++ b/engines/supernova/supernova.cpp @@ -425,12 +425,14 @@ void SupernovaEngine::renderImage(MSNImageDecoder &image, int section) { } } - uint offset = image._section[section].y1 * image._pitch + image._section[section].x1; - if (invert) + uint offset = 0; + if (invert) { + offset = image._section[section].y1 * image._pitch + image._section[section].x1; section = 0; + } _system->copyRectToScreen(static_cast<const byte *>(image._sectionSurfaces[section]->getPixels()) + offset, - image._pitch, + sectionRect.width(), sectionRect.left, sectionRect.top, sectionRect.width(), sectionRect.height()); } |