diff options
author | Norbert Lange | 2009-08-02 01:00:56 +0000 |
---|---|---|
committer | Norbert Lange | 2009-08-02 01:00:56 +0000 |
commit | ed8f02af96b56137b75d48e32c87de7b825a33e3 (patch) | |
tree | a8219e4514d8c2543a747b94aa8fc46cea6e5033 | |
parent | 2a4c60244bd57e807a88bc6064af1a265d33a130 (diff) | |
download | scummvm-rg350-ed8f02af96b56137b75d48e32c87de7b825a33e3.tar.gz scummvm-rg350-ed8f02af96b56137b75d48e32c87de7b825a33e3.tar.bz2 scummvm-rg350-ed8f02af96b56137b75d48e32c87de7b825a33e3.zip |
synced the branch with the palette patch (#2819787)
svn-id: r42987
-rw-r--r-- | engines/scumm/palette.cpp | 202 | ||||
-rw-r--r-- | engines/scumm/scumm.cpp | 3 | ||||
-rw-r--r-- | engines/scumm/scumm.h | 11 |
3 files changed, 93 insertions, 123 deletions
diff --git a/engines/scumm/palette.cpp b/engines/scumm/palette.cpp index 6adf5c524e..5b0183f47f 100644 --- a/engines/scumm/palette.cpp +++ b/engines/scumm/palette.cpp @@ -34,73 +34,19 @@ namespace Scumm { void ScummEngine::resetPalette() { - if (_game.version <= 1) { - if (_game.platform == Common::kPlatformApple2GS) { - // TODO: unique palette? - setC64Palette(); - } else if (_game.platform == Common::kPlatformC64) { - setC64Palette(); - } else if (_game.platform == Common::kPlatformNES) { - setNESPalette(); - } else { - setV1Palette(); - } - } else if (_game.features & GF_16COLOR) { - switch (_renderMode) { - case Common::kRenderEGA: - setEGAPalette(); - break; - - case Common::kRenderAmiga: - setAmigaPalette(); - break; - - case Common::kRenderCGA: - setCGAPalette(); - break; - - case Common::kRenderHercA: - case Common::kRenderHercG: - setHercPalette(); - break; - - default: - if ((_game.platform == Common::kPlatformAmiga) || (_game.platform == Common::kPlatformAtariST)) - setAmigaPalette(); - else - setEGAPalette(); - } - } else if ((_game.platform == Common::kPlatformAmiga) && _game.version == 4) { - // if rendermode is set to EGA we use the full palette from the resources - // else we initialise and then lock down the first 16 colors. - if (_renderMode != Common::kRenderEGA) - setAmigaMIPalette(); - } else - setDirtyColors(0, 255); -} - -void ScummEngine::setHardcodedPaletteRGB(const byte *ptr, int numcolor, int index) { - for ( ; numcolor > 0; --numcolor, ++index, ptr += 3) - setPalColor( index, ptr[0], ptr[1], ptr[2]); -} - -void ScummEngine::setC64Palette() { - // Use 17 color table for v1 games to allow correct color for inventory and - // sentence line. Original games used some kind of dynamic color table - // remapping between rooms. - static const byte ctable[] = { + static const byte tableC64Palette[] = { 0x00, 0x00, 0x00, 0xFD, 0xFE, 0xFC, 0xBE, 0x1A, 0x24, 0x30, 0xE6, 0xC6, 0xB4, 0x1A, 0xE2, 0x1F, 0xD2, 0x1E, 0x21, 0x1B, 0xAE, 0xDF, 0xF6, 0x0A, 0xB8, 0x41, 0x04, 0x6A, 0x33, 0x04, 0xFE, 0x4A, 0x57, 0x42, 0x45, 0x40, 0x70, 0x74, 0x6F, 0x59, 0xFE, 0x59, 0x5F, 0x53, 0xFE, 0xA4, 0xA7, 0xA2, + // Use 17 color table for v1 games to allow correct color for inventory and + // sentence line. Original games used some kind of dynamic color table + // remapping between rooms. 0xFF, 0x55, 0xFF }; - setHardcodedPaletteRGB(ctable, ARRAYSIZE(ctable) / 3); -} -void ScummEngine::setNESPalette() { - static const byte ctable[] = { + static const byte tableNESPalette[] = { /* 0x1D */ 0x00, 0x00, 0x00, 0x00, 0x24, 0x92, 0x00, 0x00, 0xDB, 0x6D, 0x49, 0xDB, 0x92, 0x00, 0x6D, 0xB6, 0x00, 0x6D, 0xB6, 0x24, 0x00, 0x92, 0x49, 0x00, @@ -123,67 +69,29 @@ void ScummEngine::setNESPalette() { 0xFF, 0xFF, 0x6D, 0xB6, 0xFF, 0x49, 0x92, 0xFF, 0x6D, 0x49, 0xFF, 0xDB, 0x92, 0xDB, 0xFF, 0x92, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - setHardcodedPaletteRGB(ctable, ARRAYSIZE(ctable) / 3); -} -void ScummEngine::setAmigaPalette() { - static const byte ctable[] = { + static const byte tableAmigaPalette[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0xBB, 0x00, 0xBB, 0x00, 0x00, 0xBB, 0xBB, 0xBB, 0x00, 0x00, 0xBB, 0x00, 0xBB, 0xBB, 0x77, 0x00, 0xBB, 0xBB, 0xBB, 0x77, 0x77, 0x77, 0x77, 0x77, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x88, 0x88, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF }; - setHardcodedPaletteRGB(ctable, ARRAYSIZE(ctable) / 3); -} -void ScummEngine::setAmigaMIPalette() { - static const byte ctable[] = { + static const byte tableAmigaMIPalette[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0x00, 0x88, 0x22, 0x00, 0x66, 0x77, 0xBB, 0x66, 0x66, 0xAA, 0x22, 0xAA, 0x88, 0x55, 0x22, 0x77, 0x77, 0x77, 0x33, 0x33, 0x33, 0x22, 0x55, 0xDD, 0x22, 0xDD, 0x44, 0x00, 0xCC, 0xFF, 0xFF, 0x99, 0x99, 0xFF, 0x55, 0xFF, 0xFF, 0xFF, 0x77, 0xFF, 0xFF, 0xFF }; - setHardcodedPaletteRGB(ctable, ARRAYSIZE(ctable) / 3); -} - -void ScummEngine::setHercPalette() { - setPalColor( 0, 0, 0, 0); - - if (_renderMode == Common::kRenderHercA) - setPalColor( 1, 0xAE, 0x69, 0x38); - else - setPalColor( 1, 0x00, 0xFF, 0x00); - - // Setup cursor palette - setPalColor( 7, 170, 170, 170); - setPalColor( 8, 85, 85, 85); - setPalColor(15, 255, 255, 255); -} -void ScummEngine::setCGAPalette() { - setPalColor( 0, 0, 0, 0); - setPalColor( 1, 0, 168, 168); - setPalColor( 2, 168, 0, 168); - setPalColor( 3, 168, 168, 168); - - // Setup cursor palette - setPalColor( 7, 170, 170, 170); - setPalColor( 8, 85, 85, 85); - setPalColor(15, 255, 255, 255); -} - -void ScummEngine::setEGAPalette() { - static const byte ctable[] = { + static const byte tableEGAPalette[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0x00, 0xAA, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0x00, 0x00, 0xAA, 0x00, 0xAA, 0xAA, 0x55, 0x00, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0x55, 0xFF, 0x55, 0xFF, 0x55, 0x55, 0xFF, 0xFF, 0xFF, 0x55, 0x55, 0xFF, 0x55, 0xFF, 0xFF, 0xFF, 0x55, 0xFF, 0xFF, 0xFF }; - setHardcodedPaletteRGB(ctable, ARRAYSIZE(ctable) / 3); -} -void ScummEngine::setV1Palette() { - static const byte ctable[] = { + static const byte tableV1Palette[] = { 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xAA, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0x00, 0xAA, 0x00, 0xAA, 0x00, 0x00, 0x00, 0xAA, 0xFF, 0xFF, 0x55, 0xFF, 0x55, 0x55, 0xAA, 0x55, 0x00, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x55, @@ -191,10 +99,86 @@ void ScummEngine::setV1Palette() { 0xFF, 0x55, 0xFF }; - setHardcodedPaletteRGB(ctable, ARRAYSIZE(ctable) / 3); - if (_game.id == GID_ZAK) - setPalColor(15, 170, 170, 170); + static const byte tableCGAPalette[] = { + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xA8, 0xA8, 0x00, 0xA8, 0xA8, 0xA8, 0xA8 + }; + + static const byte tableHercAPalette[] = { + 0x00, 0x00, 0x00, 0xAE, 0x69, 0x38 + }; + + static const byte tableHercGPalette[] = { + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00 + }; + + if (_game.version <= 1) { + if (_game.platform == Common::kPlatformApple2GS) { + // TODO: unique palette? + setPaletteFromTable(tableC64Palette, sizeof(tableC64Palette) / 3); + } else if (_game.platform == Common::kPlatformC64) { + setPaletteFromTable(tableC64Palette, sizeof(tableC64Palette) / 3); + } else if (_game.platform == Common::kPlatformNES) { + setPaletteFromTable(tableNESPalette, sizeof(tableNESPalette) / 3); + } else { + setPaletteFromTable(tableV1Palette, sizeof(tableV1Palette) / 3); + if (_game.id == GID_ZAK) + setPalColor(15, 170, 170, 170); + } + } else if (_game.features & GF_16COLOR) { + bool setupCursor = false; + + switch (_renderMode) { + case Common::kRenderEGA: + setPaletteFromTable(tableEGAPalette, sizeof(tableEGAPalette) / 3); + break; + + case Common::kRenderAmiga: + setPaletteFromTable(tableAmigaPalette, sizeof(tableAmigaPalette) / 3); + break; + + case Common::kRenderCGA: + setPaletteFromTable(tableCGAPalette, sizeof(tableCGAPalette) / 3); + setupCursor = true; + break; + + case Common::kRenderHercA: + setPaletteFromTable(tableHercAPalette, sizeof(tableHercAPalette) / 3); + setupCursor = true; + break; + + case Common::kRenderHercG: + setPaletteFromTable(tableHercGPalette, sizeof(tableHercGPalette) / 3); + setupCursor = true; + break; + + default: + if ((_game.platform == Common::kPlatformAmiga) || (_game.platform == Common::kPlatformAtariST)) + setPaletteFromTable(tableAmigaPalette, sizeof(tableAmigaPalette) / 3); + else + setPaletteFromTable(tableEGAPalette, sizeof(tableEGAPalette) / 3); + } + if (setupCursor) { + // Setup cursor palette + setPalColor( 7, 170, 170, 170); + setPalColor( 8, 85, 85, 85); + setPalColor(15, 255, 255, 255); + } + + } else { + if ((_game.platform == Common::kPlatformAmiga) && _game.version == 4) { + // if rendermode is set to EGA we use the full palette from the resources + // else we initialise and then lock down the first 16 colors. + if (_renderMode != Common::kRenderEGA) + setPaletteFromTable(tableAmigaMIPalette, sizeof(tableAmigaMIPalette) / 3); + } + setDirtyColors(0, 255); + } +} + +void ScummEngine::setPaletteFromTable(const byte *ptr, int numcolor, int index) { + for ( ; numcolor > 0; --numcolor, ++index, ptr += 3) + setPalColor( index, ptr[0], ptr[1], ptr[2]); } void ScummEngine::setPaletteFromPtr(const byte *ptr, int numcolor) { @@ -218,13 +202,7 @@ void ScummEngine::setPaletteFromPtr(const byte *ptr, int numcolor) { dest = _currentPalette; - if ((_game.platform == Common::kPlatformAmiga) && _game.version == 4 && _renderMode != Common::kRenderEGA) { - firstIndex = 16; - dest += 3 * 16; - ptr += 3 * 16; - } - - for (i = firstIndex; i < numcolor; i++) { + for (i = 0; i < numcolor; i++) { r = *ptr++; g = *ptr++; b = *ptr++; @@ -249,7 +227,7 @@ void ScummEngine::setPaletteFromPtr(const byte *ptr, int numcolor) { memcpy(_darkenPalette, _currentPalette, 768); } - setDirtyColors(firstIndex, numcolor - 1); + setDirtyColors(0, numcolor - 1); } void ScummEngine::setDirtyColors(int min, int max) { diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp index 5e3bd66b0a..99f9c8b083 100644 --- a/engines/scumm/scumm.cpp +++ b/engines/scumm/scumm.cpp @@ -494,7 +494,8 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr) case Common::kRenderCGA: case Common::kRenderEGA: case Common::kRenderAmiga: - if ((_game.version >= 4 && !(_game.features & GF_16COLOR) && !(_game.platform == Common::kPlatformAmiga && _renderMode == Common::kRenderEGA)) + if ((_game.version >= 4 && !(_game.features & GF_16COLOR) + && !(_game.platform == Common::kPlatformAmiga && _renderMode == Common::kRenderEGA)) || (_game.features & GF_OLD256)) _renderMode = Common::kRenderDefault; break; diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h index 143051c162..8ce76c4184 100644 --- a/engines/scumm/scumm.h +++ b/engines/scumm/scumm.h @@ -1018,16 +1018,7 @@ protected: const byte *getPalettePtr(int palindex, int room); - void setHardcodedPaletteRGB(const byte *ptr, int numcolor, int firstIndex = 0); - void setC64Palette(); - void setNESPalette(); - void setAmigaPalette(); - void setAmigaMIPalette(); - void setHercPalette(); - void setCGAPalette(); - void setEGAPalette(); - void setV1Palette(); - + void setPaletteFromTable(const byte *ptr, int numcolor, int firstIndex = 0); void resetPalette(); void setCurrentPalette(int pal); |