aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorNorbert Lange2009-08-02 01:00:56 +0000
committerNorbert Lange2009-08-02 01:00:56 +0000
commited8f02af96b56137b75d48e32c87de7b825a33e3 (patch)
treea8219e4514d8c2543a747b94aa8fc46cea6e5033 /engines
parent2a4c60244bd57e807a88bc6064af1a265d33a130 (diff)
downloadscummvm-rg350-ed8f02af96b56137b75d48e32c87de7b825a33e3.tar.gz
scummvm-rg350-ed8f02af96b56137b75d48e32c87de7b825a33e3.tar.bz2
scummvm-rg350-ed8f02af96b56137b75d48e32c87de7b825a33e3.zip
synced the branch with the palette patch (#2819787)
svn-id: r42987
Diffstat (limited to 'engines')
-rw-r--r--engines/scumm/palette.cpp202
-rw-r--r--engines/scumm/scumm.cpp3
-rw-r--r--engines/scumm/scumm.h11
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);