diff options
author | Filippos Karapetis | 2012-08-21 03:31:00 +0300 |
---|---|---|
committer | Filippos Karapetis | 2012-08-21 03:32:23 +0300 |
commit | 7d436622a8e10437488f6dfa930e3ff15e254a55 (patch) | |
tree | 780ddd41d70eee93d410d13b22dd8a2f314bfde2 /engines/sci/graphics | |
parent | 1a61056b06dc4ea5fe534f6ff13eb4e281bb9c03 (diff) | |
download | scummvm-rg350-7d436622a8e10437488f6dfa930e3ff15e254a55.tar.gz scummvm-rg350-7d436622a8e10437488f6dfa930e3ff15e254a55.tar.bz2 scummvm-rg350-7d436622a8e10437488f6dfa930e3ff15e254a55.zip |
SCI: More work on kRemapColors
This implements some more color remap-based palette effects, found in QFG4
Diffstat (limited to 'engines/sci/graphics')
-rw-r--r-- | engines/sci/graphics/palette.cpp | 21 | ||||
-rw-r--r-- | engines/sci/graphics/palette.h | 1 |
2 files changed, 22 insertions, 0 deletions
diff --git a/engines/sci/graphics/palette.cpp b/engines/sci/graphics/palette.cpp index 68104b0ac8..53d69cdcca 100644 --- a/engines/sci/graphics/palette.cpp +++ b/engines/sci/graphics/palette.cpp @@ -375,6 +375,27 @@ void GfxPalette::setRemappingPercent(byte color, byte percent) { _remappingType[color] = kRemappingByPercent; } +void GfxPalette::setRemappingPercentGray(byte color, byte percent) { + _remapOn = true; + + // We need to defer the setup of the remapping table every time the screen + // palette is changed, so that kernelFindColor() can find the correct + // colors. Set it once here, in case the palette stays the same and update + // it on each palette change by copySysPaletteToScreen(). + _remappingPercentToSet = percent; + + // Note: This is not what the original does, but the results are the same visually + for (int i = 0; i < 256; i++) { + byte rComponent = _sysPalette.colors[i].r * _remappingPercentToSet * 0.30 / 100; + byte gComponent = _sysPalette.colors[i].g * _remappingPercentToSet * 0.59 / 100; + byte bComponent = _sysPalette.colors[i].b * _remappingPercentToSet * 0.11 / 100; + byte luminosity = rComponent + gComponent + bComponent; + _remappingByPercent[i] = kernelFindColor(luminosity, luminosity, luminosity); + } + + _remappingType[color] = kRemappingByPercent; +} + void GfxPalette::setRemappingRange(byte color, byte from, byte to, byte base) { _remapOn = true; diff --git a/engines/sci/graphics/palette.h b/engines/sci/graphics/palette.h index 9898315897..e974781d49 100644 --- a/engines/sci/graphics/palette.h +++ b/engines/sci/graphics/palette.h @@ -61,6 +61,7 @@ public: void resetRemapping(); void setRemappingPercent(byte color, byte percent); + void setRemappingPercentGray(byte color, byte percent); void setRemappingRange(byte color, byte from, byte to, byte base); bool isRemapped(byte color) const { return _remapOn && (_remappingType[color] != kRemappingNone); |