aboutsummaryrefslogtreecommitdiff
path: root/scumm
diff options
context:
space:
mode:
authorTravis Howell2005-09-19 00:29:41 +0000
committerTravis Howell2005-09-19 00:29:41 +0000
commit3b029a37b221eef05582297259384b52d2324c72 (patch)
tree417d7ba70b7fe79082815458249bd68dc25b22a0 /scumm
parent7aa398a9d058c3dd4c5aec66f19d996f2e32fd5c (diff)
downloadscummvm-rg350-3b029a37b221eef05582297259384b52d2324c72.tar.gz
scummvm-rg350-3b029a37b221eef05582297259384b52d2324c72.tar.bz2
scummvm-rg350-3b029a37b221eef05582297259384b52d2324c72.zip
Switch back to using _paletteMod for the palette adjustment in 32 color Amiga games, since overflow is required for the correct palette (ie 256 should overflow to 0).
Fixes the palette regression, bug #1294513 svn-id: r18845
Diffstat (limited to 'scumm')
-rw-r--r--scumm/gfx.cpp22
-rw-r--r--scumm/gfx.h1
2 files changed, 14 insertions, 9 deletions
diff --git a/scumm/gfx.cpp b/scumm/gfx.cpp
index 7e18424a89..15cedae852 100644
--- a/scumm/gfx.cpp
+++ b/scumm/gfx.cpp
@@ -193,10 +193,9 @@ static const TransitionEffect transitionEffects[6] = {
Gdi::Gdi(ScummEngine *vm) {
memset(this, 0, sizeof(*this));
_vm = vm;
+ _paletteMod = 0;
_roomPalette = vm->_roomPalette;
_roomStrips = 0;
- if ((vm->_platform == Common::kPlatformAmiga) && (vm->_version >= 4))
- _roomPalette += 16;
}
Gdi::~Gdi() {
@@ -1796,6 +1795,11 @@ bool Gdi::decompressBitmap(byte *dst, int dstPitch, const byte *src, int numLine
byte code = *src++;
bool useOrDecompress = false;
+ if ((_vm->_platform == Common::kPlatformAmiga) && (_vm->_version >= 4))
+ _paletteMod = 16;
+ else
+ _paletteMod = 0;
+
if (code <= 10) {
switch (code) {
case 1:
@@ -2426,7 +2430,7 @@ void Gdi::drawStripEGA(byte *dst, int dstPitch, const byte *src, int height) con
run = *src++;
}
for (z = 0; z < run; z++) {
- *(dst + y * dstPitch + x) = (z & 1) ? _roomPalette[color & 0xf] : _roomPalette[color >> 4];
+ *(dst + y * dstPitch + x) = (z & 1) ? _roomPalette[color & 0xf] + _paletteMod : _roomPalette[color >> 4] + _paletteMod;
y++;
if (y >= height) {
@@ -2440,7 +2444,7 @@ void Gdi::drawStripEGA(byte *dst, int dstPitch, const byte *src, int height) con
}
for (z = 0; z < run; z++) {
- *(dst + y * dstPitch + x) = *(dst + y * dstPitch + x - 1);
+ *(dst + y * dstPitch + x) = *(dst + y * dstPitch + x - 1) + _paletteMod;
y++;
if (y >= height) {
@@ -2456,7 +2460,7 @@ void Gdi::drawStripEGA(byte *dst, int dstPitch, const byte *src, int height) con
}
for (z = 0; z < run; z++) {
- *(dst + y * dstPitch + x) = _roomPalette[color & 0xf];
+ *(dst + y * dstPitch + x) = _roomPalette[color & 0xf] + _paletteMod;
y++;
if (y >= height) {
@@ -2580,7 +2584,7 @@ void Gdi::drawStripComplex(byte *dst, int dstPitch, const byte *src, int height,
do {
FILL_BITS;
if (!transpCheck || color != _transparentColor)
- *dst = _roomPalette[color];
+ *dst = _roomPalette[color] + _paletteMod;
dst++;
againPos:
@@ -2607,7 +2611,7 @@ void Gdi::drawStripComplex(byte *dst, int dstPitch, const byte *src, int height,
return;
}
if (!transpCheck || color != _transparentColor)
- *dst = _roomPalette[color];
+ *dst = _roomPalette[color] + _paletteMod;
dst++;
} while (--reps);
bits >>= 8;
@@ -2632,7 +2636,7 @@ void Gdi::drawStripBasicH(byte *dst, int dstPitch, const byte *src, int height,
do {
FILL_BITS;
if (!transpCheck || color != _transparentColor)
- *dst = _roomPalette[color];
+ *dst = _roomPalette[color] + _paletteMod;
dst++;
if (!READ_BIT) {
} else if (!READ_BIT) {
@@ -2665,7 +2669,7 @@ void Gdi::drawStripBasicV(byte *dst, int dstPitch, const byte *src, int height,
do {
FILL_BITS;
if (!transpCheck || color != _transparentColor)
- *dst = _roomPalette[color];
+ *dst = _roomPalette[color] + _paletteMod;
dst += dstPitch;
if (!READ_BIT) {
} else if (!READ_BIT) {
diff --git a/scumm/gfx.h b/scumm/gfx.h
index b64fe96963..48f5048fc1 100644
--- a/scumm/gfx.h
+++ b/scumm/gfx.h
@@ -204,6 +204,7 @@ public:
~Gdi();
protected:
+ byte _paletteMod;
byte *_roomPalette;
byte _transparentColor;
byte _decomp_shr, _decomp_mask;