aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/graphics/palette.cpp
diff options
context:
space:
mode:
authorFilippos Karapetis2012-08-21 03:31:00 +0300
committerFilippos Karapetis2012-08-21 03:32:23 +0300
commit7d436622a8e10437488f6dfa930e3ff15e254a55 (patch)
tree780ddd41d70eee93d410d13b22dd8a2f314bfde2 /engines/sci/graphics/palette.cpp
parent1a61056b06dc4ea5fe534f6ff13eb4e281bb9c03 (diff)
downloadscummvm-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/palette.cpp')
-rw-r--r--engines/sci/graphics/palette.cpp21
1 files changed, 21 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;