diff options
-rw-r--r-- | engines/supernova/graphics.h | 1 | ||||
-rw-r--r-- | engines/supernova/supernova.cpp | 26 | ||||
-rw-r--r-- | engines/supernova/supernova.h | 3 |
3 files changed, 21 insertions, 9 deletions
diff --git a/engines/supernova/graphics.h b/engines/supernova/graphics.h index 585aabe260..462e9ea36a 100644 --- a/engines/supernova/graphics.h +++ b/engines/supernova/graphics.h @@ -26,7 +26,6 @@ public: bool loadSection(int _section); -private: static const int kMaxSections = 50; static const int kMaxClickFields = 80; diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp index 3c57fcdaf5..602f69fc1a 100644 --- a/engines/supernova/supernova.cpp +++ b/engines/supernova/supernova.cpp @@ -49,6 +49,7 @@ SupernovaEngine::SupernovaEngine(OSystem *syst) , _menuBrightness(255) , _imageIndex(10) , _sectionIndex(0) + , _delay(33) { // const Common::FSNode gameDataDir(ConfMan.get("path")); // SearchMan.addSubDirectoryMatching(gameDataDir, "sound"); @@ -82,7 +83,7 @@ Common::Error SupernovaEngine::run() { renderImage(_imageIndex, _sectionIndex); renderText(Common::String::format("%u | %u", _imageIndex, _sectionIndex).c_str(), 0, 190, 15); _system->updateScreen(); - _system->delayMillis(10); + _system->delayMillis(_delay); } //deinit timer/sound/.. @@ -121,7 +122,8 @@ void SupernovaEngine::updateEvents() { } } if (event.kbd.keycode == Common::KEYCODE_e) { - ++_sectionIndex; + renderImage(_imageIndex, 0); + renderImage(_imageIndex, ++_sectionIndex); } break; default: @@ -168,7 +170,7 @@ void playSoundMod(int filenumber) // play Supernova MOD file } -void SupernovaEngine::renderImage(int filenumber, int section) { +void SupernovaEngine::renderImage(int filenumber, int section, bool fullscreen) { Common::File file; if (!file.open(Common::String::format("msn_data.0%2d", filenumber))) { error("File %s could not be read!", file.getName()); @@ -176,9 +178,19 @@ void SupernovaEngine::renderImage(int filenumber, int section) { _image.loadStream(file); _image.loadSection(section); - _system->getPaletteManager()->setPalette(_image.getPalette(), 16, 240); + _system->getPaletteManager()->setPalette(_image.getPalette(), 16, 239); paletteBrightness(); - _system->copyRectToScreen(_image.getSurface()->getPixels(), 320, 0, 0, 320, 200); + if (fullscreen) { + _system->copyRectToScreen(_image.getSurface()->getPixels(), 320, 0, 0, 320, 200); + } else { + size_t offset = _image._section[section].y1 * 320 + _image._section[section].x1; + _system->copyRectToScreen(static_cast<const byte *>(_image.getSurface()->getPixels()) + offset, + 320, + _image._section[section].x1, + _image._section[section].y1, + _image._section[section].x2 - _image._section[section].x1, + _image._section[section].y2 - _image._section[section].y1); + } } static int characterWidth(const char *text) { @@ -336,7 +348,7 @@ void SupernovaEngine::paletteFadeOut() { paletteBrightness(); _brightness -= 20; _system->updateScreen(); - _system->delayMillis(10); + _system->delayMillis(_delay); } _menuBrightness = 0; _brightness = 0; @@ -353,7 +365,7 @@ void SupernovaEngine::paletteFadeIn() { paletteBrightness(); _brightness += 20; _system->updateScreen(); - _system->delayMillis(10); + _system->delayMillis(_delay); } _menuBrightness = 255; _brightness = 255; diff --git a/engines/supernova/supernova.h b/engines/supernova/supernova.h index 2e15850b61..017c912f13 100644 --- a/engines/supernova/supernova.h +++ b/engines/supernova/supernova.h @@ -54,6 +54,7 @@ private: byte _sectionIndex; byte _menuBrightness; byte _brightness; + uint _delay; void initData(); void initPalette(); @@ -64,7 +65,7 @@ private: void playSound(int filenumber, int offset = 0); void playSoundMod(int filenumber); void stopSound(); - void renderImage(int filenumber, int section); + void renderImage(int filenumber, int section, bool fullscreen = false); void renderMessage(char *text, MessagePosition position); void renderText(const char *text, int x, int y, byte color); void renderBox(int x, int y, int width, int height, byte color); |