aboutsummaryrefslogtreecommitdiff
path: root/engines/mads/palette.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2014-03-12 20:54:50 -0400
committerPaul Gilbert2014-03-12 20:54:50 -0400
commitd9bb593b5f39f31f078d9b479d569c56c6eda563 (patch)
tree9efa5122696249297de5b5d1695a850c38923265 /engines/mads/palette.cpp
parent98f7ba964369b128f65755c918f4c5e6d1d16dbe (diff)
downloadscummvm-rg350-d9bb593b5f39f31f078d9b479d569c56c6eda563.tar.gz
scummvm-rg350-d9bb593b5f39f31f078d9b479d569c56c6eda563.tar.bz2
scummvm-rg350-d9bb593b5f39f31f078d9b479d569c56c6eda563.zip
MADS: Implemented PaletteUsage::updateUsage
Diffstat (limited to 'engines/mads/palette.cpp')
-rw-r--r--engines/mads/palette.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/engines/mads/palette.cpp b/engines/mads/palette.cpp
index aeb97d2ff2..7e0d5bbdb5 100644
--- a/engines/mads/palette.cpp
+++ b/engines/mads/palette.cpp
@@ -304,6 +304,30 @@ void PaletteUsage::transform(Common::Array<RGB6> &palette) {
}
}
+void PaletteUsage::updateUsage(Common::Array<int> &usageList, int sceneUsageIndex) {
+ uint32 mask1 = 0xFFFFFFFF;
+ uint32 mask2 = 0;
+
+ for (uint idx = 0; idx < usageList.size(); ++idx) {
+ uint32 bitMask = 1 << usageList[idx];
+ mask1 ^= bitMask;
+ mask2 |= bitMask;
+ _vm->_palette->_rgbList[usageList[idx]] = 0;
+ }
+
+ uint32 mask3 = 1 << sceneUsageIndex;
+
+ for (uint idx = 0; idx < PALETTE_COUNT; ++idx) {
+ uint32 mask = mask2 & _vm->_palette->_palFlags[idx];
+ if (mask) {
+ _vm->_palette->_palFlags[idx] = (_vm->_palette->_palFlags[idx] &
+ mask1) | mask3;
+ }
+ }
+
+ _vm->_palette->_rgbList[sceneUsageIndex] = -1;
+}
+
int PaletteUsage::getGamePalFreeIndex(int *palIndex) {
*palIndex = -1;
int count = 0;