diff options
author | Benjamin Haisch | 2008-08-13 15:13:22 +0000 |
---|---|---|
committer | Willem Jan Palenstijn | 2011-11-20 22:43:05 +0100 |
commit | 5660ff514852fbc8e09e223355c1d46270c5db41 (patch) | |
tree | 12aaf9d7c74f535bc14fee8e42a673d1a9a8a3b5 /engines/toltecs/palette.cpp | |
parent | 98ac7885acb82ae77b6eccbf2380d4326f758f28 (diff) | |
download | scummvm-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.cpp | 45 |
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 |