aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scumm/palette.cpp27
-rw-r--r--scumm/scumm.cpp1
-rw-r--r--scumm/scumm.h1
3 files changed, 25 insertions, 4 deletions
diff --git a/scumm/palette.cpp b/scumm/palette.cpp
index 726a69ccb6..20f13e15f5 100644
--- a/scumm/palette.cpp
+++ b/scumm/palette.cpp
@@ -238,14 +238,29 @@ void ScummEngine::setPaletteFromPtr(const byte *ptr, int numcolor) {
// off there, too... I wonder if it hurts other games, too? What exactly is broken
// if we remove this patch?
// Since it also causes problems in Zak256, I am turning it off for all V4 games and older.
- if ((_version <= 4) || (_version >= 7) || (i <= 15 || r < 252 || g < 252 || b < 252)) {
+ if (_version >= 5 || _version <= 6) {
+ if ((_heversion >= 80) && (i == 15 || r < 252 || g < 252 || b < 252)) {
+ *dest++ = r;
+ *dest++ = g;
+ *dest++ = b;
+ } else if (i <= 15 || r < 252 || g < 252 || b < 252) {
+ *dest++ = r;
+ *dest++ = g;
+ *dest++ = b;
+ } else {
+ dest += 3;
+ }
+ } else {
*dest++ = r;
*dest++ = g;
*dest++ = b;
- } else {
- dest += 3;
}
}
+
+ if (_heversion >= 90) {
+ memcpy(_darkenPalette, _currentPalette, 768);
+ }
+
setDirtyColors(0, numcolor - 1);
}
@@ -633,7 +648,11 @@ void ScummEngine::darkenPalette(int redScale, int greenScale, int blueScale, int
const byte *palptr;
int color, idx, j;
- palptr = getPalettePtr(_curPalIndex, _roomResource);
+ if (_heversion >= 90) {
+ palptr = _darkenPalette;
+ } else {
+ palptr = getPalettePtr(_curPalIndex, _roomResource);
+ }
for (j = startColor; j <= endColor; j++) {
idx = (_heversion == 70) ? _HEV7ActorPalette[j] : j;
cptr = palptr + idx * 3;
diff --git a/scumm/scumm.cpp b/scumm/scumm.cpp
index 1a54fa1c82..8e4670dae3 100644
--- a/scumm/scumm.cpp
+++ b/scumm/scumm.cpp
@@ -857,6 +857,7 @@ ScummEngine::ScummEngine(GameDetector *detector, OSystem *syst, const ScummGameS
_shadowPalette = NULL;
_shadowPaletteSize = 0;
memset(_currentPalette, 0, sizeof(_currentPalette));
+ memset(_darkenPalette, 0, sizeof(_darkenPalette));
memset(_HEV7ActorPalette, 0, sizeof(_HEV7ActorPalette));
_palDirtyMin = 0;
_palDirtyMax = 0;
diff --git a/scumm/scumm.h b/scumm/scumm.h
index 4935af2ada..069ad819c9 100644
--- a/scumm/scumm.h
+++ b/scumm/scumm.h
@@ -1095,6 +1095,7 @@ public:
protected:
int _shadowPaletteSize;
byte _currentPalette[3 * 256];
+ byte _darkenPalette[3 * 256];
int _palDirtyMin, _palDirtyMax;