aboutsummaryrefslogtreecommitdiff
path: root/engines/toltecs/palette.cpp
diff options
context:
space:
mode:
authorBenjamin Haisch2008-08-13 15:13:22 +0000
committerWillem Jan Palenstijn2011-11-20 22:43:05 +0100
commit5660ff514852fbc8e09e223355c1d46270c5db41 (patch)
tree12aaf9d7c74f535bc14fee8e42a673d1a9a8a3b5 /engines/toltecs/palette.cpp
parent98ac7885acb82ae77b6eccbf2380d4326f758f28 (diff)
downloadscummvm-rg350-5660ff514852fbc8e09e223355c1d46270c5db41.tar.gz
scummvm-rg350-5660ff514852fbc8e09e223355c1d46270c5db41.tar.bz2
scummvm-rg350-5660ff514852fbc8e09e223355c1d46270c5db41.zip
TOLTECS: Implemented buildColorTransTable (still TODO) and shadow sprite drawing.
Diffstat (limited to 'engines/toltecs/palette.cpp')
-rw-r--r--engines/toltecs/palette.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/engines/toltecs/palette.cpp b/engines/toltecs/palette.cpp
index 9692538169..2fb2f8744a 100644
--- a/engines/toltecs/palette.cpp
+++ b/engines/toltecs/palette.cpp
@@ -166,6 +166,51 @@ void Palette::clearFragments() {
_fragments.clear();
}
+void Palette::buildColorTransTable(byte limit, char deltaValue, byte mask) {
+
+ // TODO
+
+ byte r, g, b;
+
+ mask &= 7;
+
+ for (int i = 0; i < 256; i++) {
+
+ if (deltaValue < 0) {
+ // TODO
+ } else {
+ r = _mainPalette[i * 3 + 0];
+ g = _mainPalette[i * 3 + 1];
+ b = _mainPalette[i * 3 + 2];
+ if (MAX(r, MAX(b, g)) >= limit) {
+ if ((mask & 1) && r >= deltaValue)
+ r -= deltaValue;
+ if ((mask & 2) && g >= deltaValue)
+ g -= deltaValue;
+ if ((mask & 4) && b >= deltaValue)
+ b -= deltaValue;
+ }
+ }
+
+ int bestIndex = 0;
+ uint16 bestMatch = 0xFFFF;
+
+ for (int j = 0; j < 256; j++) {
+ byte distance = ABS(_mainPalette[j * 3 + 0] - r) + ABS(_mainPalette[j * 3 + 1] - g) + ABS(_mainPalette[j * 3 + 2] - b);
+ byte maxColor = MAX(_mainPalette[j * 3 + 0], MAX(_mainPalette[j * 3 + 1], _mainPalette[j * 3 + 2]));
+ uint16 match = (distance << 8) | maxColor;
+ if (match < bestMatch) {
+ bestMatch = match;
+ bestIndex = j;
+ }
+ }
+
+ _colorTransTable[i] = bestIndex;
+
+ }
+
+}
+
void Palette::saveState(Common::WriteStream *out) {
// Save currently active palette