aboutsummaryrefslogtreecommitdiff
path: root/engines/supernova/supernova.cpp
diff options
context:
space:
mode:
authorThierry Crozat2017-11-17 23:35:19 +0000
committerThierry Crozat2018-01-23 02:15:41 +0000
commit177539ba2ed85af4aa27a72110948063a8257a03 (patch)
treedc948008f919ac345d695300e880de406141d14e /engines/supernova/supernova.cpp
parentcbfa0a0640eeeb2c86edd9c8d4f3e5925c437e05 (diff)
downloadscummvm-rg350-177539ba2ed85af4aa27a72110948063a8257a03.tar.gz
scummvm-rg350-177539ba2ed85af4aa27a72110948063a8257a03.tar.bz2
scummvm-rg350-177539ba2ed85af4aa27a72110948063a8257a03.zip
SUPERNOVA: Load images on demand
Diffstat (limited to 'engines/supernova/supernova.cpp')
-rw-r--r--engines/supernova/supernova.cpp23
1 files changed, 14 insertions, 9 deletions
diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp
index 80a8404599..56ea113eac 100644
--- a/engines/supernova/supernova.cpp
+++ b/engines/supernova/supernova.cpp
@@ -100,7 +100,7 @@ SupernovaEngine::SupernovaEngine(OSystem *syst)
: Engine(syst)
, _console(NULL)
, _gm(NULL)
- , _currentImage(_images)
+ , _currentImage(NULL)
, _brightness(255)
, _menuBrightness(255)
, _delay(33)
@@ -126,6 +126,7 @@ SupernovaEngine::SupernovaEngine(OSystem *syst)
SupernovaEngine::~SupernovaEngine() {
DebugMan.clearAllDebugChannels();
+ delete _currentImage;
delete _rnd;
delete _console;
delete _gm;
@@ -329,10 +330,6 @@ Common::Error SupernovaEngine::loadGameStrings() {
}
void SupernovaEngine::initData() {
- // Images
- for (int i = 0; i < 44; ++i)
- _images[i].init(i);
-
// Sound
// Note:
// - samples start with a header of 6 bytes: 01 SS SS 00 AD 00
@@ -458,6 +455,9 @@ void SupernovaEngine::renderImageSection(int section) {
}
void SupernovaEngine::renderImage(int section) {
+ if (!_currentImage)
+ return;
+
bool sectionVisible = true;
if (section > 128) {
@@ -477,12 +477,17 @@ void SupernovaEngine::renderImage(int section) {
}
bool SupernovaEngine::setCurrentImage(int filenumber) {
- if (filenumber == -1 || filenumber > ARRAYSIZE(_images) - 1) {
- warning("Trying to display image from out of bound file number %d", filenumber);
+ if (_currentImage && _currentImage->_filenumber == filenumber)
+ return true;
+
+ delete _currentImage;
+ _currentImage = new MSNImageDecoder();
+ if (!_currentImage->init(filenumber)) {
+ delete _currentImage;
+ _currentImage = NULL;
return false;
}
- _currentImage = &(_images[filenumber]);
_system->getPaletteManager()->setPalette(_currentImage->getPalette(), 16, 239);
paletteBrightness();
return true;
@@ -690,7 +695,7 @@ void SupernovaEngine::paletteBrightness() {
}
for (uint i = 0; i < 717; ++i) {
const byte *imagePalette;
- if (_currentImage->getPalette()) {
+ if (_currentImage && _currentImage->getPalette()) {
imagePalette = _currentImage->getPalette();
} else {
imagePalette = palette + 48;