diff options
author | Joseph-Eugene Winzer | 2017-07-17 16:28:06 +0200 |
---|---|---|
committer | Thierry Crozat | 2018-01-22 23:54:41 +0000 |
commit | dc12a0fd2392c09c7c5c75bd851da834c48ab4fa (patch) | |
tree | 47f16f43adf6c5433fc90e846c5825599c9261dd | |
parent | a54c9084c1b4e9a18556066e255bb71e33793547 (diff) | |
download | scummvm-rg350-dc12a0fd2392c09c7c5c75bd851da834c48ab4fa.tar.gz scummvm-rg350-dc12a0fd2392c09c7c5c75bd851da834c48ab4fa.tar.bz2 scummvm-rg350-dc12a0fd2392c09c7c5c75bd851da834c48ab4fa.zip |
SUPERNOVA: Enables renderImage() to render inverse sections
Besides the addition of inverse sections, the 'fullscreen' parameter was
removed as it was used only for testing purposes in the beginning.
-rw-r--r-- | engines/supernova/graphics.cpp | 1 | ||||
-rw-r--r-- | engines/supernova/supernova.cpp | 31 | ||||
-rw-r--r-- | engines/supernova/supernova.h | 4 |
3 files changed, 18 insertions, 18 deletions
diff --git a/engines/supernova/graphics.cpp b/engines/supernova/graphics.cpp index 1940dd7ef6..d28c60118c 100644 --- a/engines/supernova/graphics.cpp +++ b/engines/supernova/graphics.cpp @@ -85,6 +85,7 @@ bool MSNImageDecoder::loadStream(Common::SeekableReadStream &stream) { _section[i].addressHigh = 0xff; _section[i].addressLow = 0xffff; _section[i].x2 = 0; + _section[i].next = 0; } for (int i = 0; i < _numSections; ++i) { _section[i].x1 = stream.readUint16LE(); diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp index 26a6aa5ed8..e8e425336c 100644 --- a/engines/supernova/supernova.cpp +++ b/engines/supernova/supernova.cpp @@ -273,14 +273,16 @@ void SupernovaEngine::playSoundMod(int filenumber) -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO); } -void SupernovaEngine::renderImage(MSNImageDecoder &image, int section, bool fullscreen) { +void SupernovaEngine::renderImage(MSNImageDecoder &image, int section) { + _sectionIndex = section; + + if (section > 128) + section -= 128; if (section > image._numSections - 1) return; _currentImage = ℑ _imageIndex = image._filenumber; - _sectionIndex = section; - _system->getPaletteManager()->setPalette(image.getPalette(), 16, 239); paletteBrightness(); @@ -291,7 +293,6 @@ void SupernovaEngine::renderImage(MSNImageDecoder &image, int section, bool full if (image._filenumber == 1 || image._filenumber == 2) { sectionRect.setWidth(640); sectionRect.setHeight(480); - if (_screenWidth != 640) { _screenWidth = 640; _screenHeight = 480; @@ -305,23 +306,21 @@ void SupernovaEngine::renderImage(MSNImageDecoder &image, int section, bool full } } - if (fullscreen) { - _system->copyRectToScreen(image._sectionSurfaces[section]->getPixels(), - image._pitch, 0, 0, _screenWidth, _screenHeight); - } else { - uint offset = image._section[section].y1 * image._pitch + image._section[section].x1; - _system->copyRectToScreen(static_cast<const byte *>(image._sectionSurfaces[section]->getPixels()) + offset, - image._pitch, - sectionRect.left, sectionRect.top, - sectionRect.width(), sectionRect.height()); - } + uint offset = image._section[section].y1 * image._pitch + image._section[section].x1; + if (_sectionIndex > 128) + section = 0; + + _system->copyRectToScreen(static_cast<const byte *>(image._sectionSurfaces[section]->getPixels()) + offset, + image._pitch, + sectionRect.left, sectionRect.top, + sectionRect.width(), sectionRect.height()); } -void SupernovaEngine::renderImage(int filenumber, int section, bool fullscreen) { +void SupernovaEngine::renderImage(int filenumber, int section) { if (filenumber > ARRAYSIZE(_images) - 1) return; - renderImage(_images[filenumber], section, fullscreen); + renderImage(_images[filenumber], section); } void SupernovaEngine::saveScreen(int x, int y, int width, int height) { diff --git a/engines/supernova/supernova.h b/engines/supernova/supernova.h index 1d3b17cd36..67c7067f4e 100644 --- a/engines/supernova/supernova.h +++ b/engines/supernova/supernova.h @@ -117,8 +117,8 @@ public: void playSound(AudioIndex sample); void playSoundMod(int filenumber); void stopSound(); - void renderImage(MSNImageDecoder &image, int section, bool fullscreen = false); - void renderImage(int filenumber, int section, bool fullscreen = false); + void renderImage(MSNImageDecoder &image, int section); + void renderImage(int filenumber, int section); void saveScreen(int x, int y, int width, int height); void restoreScreen(); void renderRoom(Room &room); |