aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/kyra/screen_v2.cpp59
-rw-r--r--engines/kyra/screen_v2.h2
2 files changed, 16 insertions, 45 deletions
diff --git a/engines/kyra/screen_v2.cpp b/engines/kyra/screen_v2.cpp
index ba17fbca39..5199543632 100644
--- a/engines/kyra/screen_v2.cpp
+++ b/engines/kyra/screen_v2.cpp
@@ -84,68 +84,39 @@ void Screen_v2::generateGrayOverlay(const uint8 *srcPal, uint8 *grayOverlay, int
grayOverlay[i] = findLeastDifferentColor(tmpPal + 3 * i, srcPal, lastColor);
}
-uint8 *Screen_v2::generateOverlay(const uint8 *palette, uint8 *buffer, int startColor, int fac) {
+uint8 *Screen_v2::generateOverlay(const uint8 *palette, uint8 *buffer, int startColor, uint16 factor) {
if (!palette || !buffer)
return buffer;
- fac = MIN(0xFF, fac);
+ factor = MIN<uint16>(255, factor);
+ factor >>= 1;
+ factor &= 0xFF;
- byte col1, col2, col3;
- col1 = palette[startColor * 3 + 0];
- col2 = palette[startColor * 3 + 1];
- col3 = palette[startColor * 3 + 2];
- *buffer = 0;
+ const byte col1 = palette[startColor * 3 + 0];
+ const byte col2 = palette[startColor * 3 + 1];
+ const byte col3 = palette[startColor * 3 + 2];
+
+ uint8 *dst = buffer;
+ *dst++ = 0;
- uint8 *dst = buffer + 1;
for (int i = 1; i != 255; ++i) {
- byte procCol1, procCol2, procCol3;
+ uint8 processedPalette[3];
const uint8 *src = palette + i*3;
- const int factor = (fac >> 1) & 0xFF;
byte col;
col = *src++;
col -= ((((col - col1) * factor) << 1) >> 8) & 0xFF;
- procCol1 = col;
+ processedPalette[0] = col;
col = *src++;
col -= ((((col - col2) * factor) << 1) >> 8) & 0xFF;
- procCol2 = col;
+ processedPalette[1] = col;
col = *src++;
col -= ((((col - col3) * factor) << 1) >> 8) & 0xFF;
- procCol3 = col;
-
- uint16 minValue = 0xFFFF;
- uint8 colorNumber = startColor;
- const uint8 *pal = palette + 3;
- for (int count = 0xFF, cur = 1; count > 0; --count, ++cur) {
- pal += 3;
- if (cur != i) {
- uint16 value = 0;
- pal -= 3;
- col = *pal++ - procCol1;
- col *= col;
- value += col;
-
- col = *pal++ - procCol2;
- col *= col;
- value += col;
-
- col = *pal++ - procCol3;
- col *= col;
- value += col;
-
- if (value == 0) {
- colorNumber = i;
- break;
- } else if (value < minValue) {
- minValue = value;
- colorNumber = cur;
- }
- }
- }
+ processedPalette[2] = col;
- *dst++ = colorNumber;
+ *dst++ = findLeastDifferentColor(processedPalette, palette+3, 255)+1;
}
return buffer;
diff --git a/engines/kyra/screen_v2.h b/engines/kyra/screen_v2.h
index a00cad6b18..e3c338b602 100644
--- a/engines/kyra/screen_v2.h
+++ b/engines/kyra/screen_v2.h
@@ -54,7 +54,7 @@ public:
void copyWsaRect(int x, int y, int w, int h, int dimState, int plotFunc, const uint8 *src,
int unk1, const uint8 *unkPtr1, const uint8 *unkPtr2);
- uint8 *generateOverlay(const uint8 *palette, uint8 *buffer, int color, int factor);
+ uint8 *generateOverlay(const uint8 *palette, uint8 *buffer, int color, uint16 factor);
void applyOverlay(int x, int y, int w, int h, int pageNum, const uint8 *overlay);
// shape handling