diff options
-rw-r--r-- | engines/sword2/palette.cpp | 35 | ||||
-rw-r--r-- | engines/sword2/screen.cpp | 2 | ||||
-rw-r--r-- | engines/sword2/screen.h | 5 | ||||
-rw-r--r-- | engines/sword2/sword2.cpp | 22 | ||||
-rw-r--r-- | engines/sword2/sword2.h | 1 |
5 files changed, 32 insertions, 33 deletions
diff --git a/engines/sword2/palette.cpp b/engines/sword2/palette.cpp index 1b9cd28d25..81f93c77ae 100644 --- a/engines/sword2/palette.cpp +++ b/engines/sword2/palette.cpp @@ -156,22 +156,17 @@ void Screen::setPalette(int16 startEntry, int16 noEntries, byte *colourTable, ui memcpy(&_palette[4 * startEntry], colourTable, noEntries * 4); if (fadeNow == RDPAL_INSTANT) { - _vm->_system->setPalette(_palette, startEntry, noEntries); + setSystemPalette(_palette, startEntry, noEntries); setNeedFullRedraw(); } } -void Screen::dimPalette() { - byte *p = _palette; - - for (int i = 0; i < 256; i++) { - p[i * 4 + 0] /= 2; - p[i * 4 + 1] /= 2; - p[i * 4 + 2] /= 2; +void Screen::dimPalette(bool dim) { + if (dim != _dimPalette) { + _dimPalette = dim; + setSystemPalette(_palette, 0, 256); + setNeedFullRedraw(); } - - _vm->_system->setPalette(p, 0, 256); - setNeedFullRedraw(); } /** @@ -269,8 +264,24 @@ void Screen::fadeServer() { } } - _vm->_system->setPalette(newPalette, 0, 256); + setSystemPalette(newPalette, 0, 256); setNeedFullRedraw(); } +void Screen::setSystemPalette(const byte *colors, uint start, uint num) { + const byte *palette; + + if (_dimPalette) { + byte pal[256 * 4]; + + for (uint i = start * 4; i < 4 * (start + num); i++) + pal[i] = colors[i] / 2; + + palette = pal; + } else + palette = colors; + + _vm->_system->setPalette(palette, start, num); +} + } // End of namespace Sword2 diff --git a/engines/sword2/screen.cpp b/engines/sword2/screen.cpp index 1f6eb1b22d..fdabb3ee6f 100644 --- a/engines/sword2/screen.cpp +++ b/engines/sword2/screen.cpp @@ -97,6 +97,8 @@ Screen::Screen(Sword2Engine *vm, int16 width, int16 height) { _renderAverageTime = 60; _layer = 0; + + _dimPalette = false; } Screen::~Screen() { diff --git a/engines/sword2/screen.h b/engines/sword2/screen.h index d59a6ef3df..93cc5e40ce 100644 --- a/engines/sword2/screen.h +++ b/engines/sword2/screen.h @@ -350,6 +350,8 @@ private: uint16 _layer; + bool _dimPalette; + public: Screen(Sword2Engine *vm, int16 width, int16 height); ~Screen(); @@ -400,11 +402,12 @@ public: void setFullPalette(int32 palRes); void setPalette(int16 startEntry, int16 noEntries, byte *palette, uint8 setNow); + void setSystemPalette(const byte *colors, uint start, uint num); uint8 quickMatch(uint8 r, uint8 g, uint8 b); int32 fadeUp(float time = 0.75); int32 fadeDown(float time = 0.75); uint8 getFadeStatus(); - void dimPalette(); + void dimPalette(bool dim); void waitForFade(); void fadeServer(); diff --git a/engines/sword2/sword2.cpp b/engines/sword2/sword2.cpp index 26fd598d9d..7331d1f761 100644 --- a/engines/sword2/sword2.cpp +++ b/engines/sword2/sword2.cpp @@ -225,7 +225,6 @@ Sword2Engine::Sword2Engine(OSystem *syst) : Engine(syst) { #endif _gamePaused = false; - _graphicsLevelFudged = false; _gameCycle = 0; _gameSpeed = 1; @@ -701,22 +700,14 @@ void Sword2Engine::pauseEngineIntern(bool pause) { _sound->pauseAllSound(); _mouse->pauseEngine(true); - // If render level is at max, turn it down because palette- - // matching won't work when the palette is dimmed. - - if (_screen->getRenderLevel() == 3) { - _screen->setRenderLevel(2); - _graphicsLevelFudged = true; - } - #ifdef SWORD2_DEBUG // Don't dim it if we're single-stepping through frames // dim the palette during the pause if (!_stepOneCycle) - _screen->dimPalette(); + _screen->dimPalette(true); #else - _screen->dimPalette(); + _screen->dimPalette(true); #endif _gamePaused = true; @@ -724,14 +715,7 @@ void Sword2Engine::pauseEngineIntern(bool pause) { _mouse->pauseEngine(false); _sound->unpauseAllSound(); - // Put back game screen palette; see screen.cpp - _screen->setFullPalette(-1); - - // If graphics level at max, turn up again - if (_graphicsLevelFudged) { - _screen->setRenderLevel(3); - _graphicsLevelFudged = false; - } + _screen->dimPalette(false); _gamePaused = false; diff --git a/engines/sword2/sword2.h b/engines/sword2/sword2.h index ba59772a71..05c5d7fa47 100644 --- a/engines/sword2/sword2.h +++ b/engines/sword2/sword2.h @@ -207,7 +207,6 @@ public: uint32 findBufferSize(); bool _gamePaused; - bool _graphicsLevelFudged; void startGame(); void gameCycle(); |