aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm
diff options
context:
space:
mode:
Diffstat (limited to 'engines/scumm')
-rw-r--r--engines/scumm/costume.cpp2
-rw-r--r--engines/scumm/cursor.cpp14
-rw-r--r--engines/scumm/he/wiz_he.cpp4
-rw-r--r--engines/scumm/scumm.h5
4 files changed, 16 insertions, 9 deletions
diff --git a/engines/scumm/costume.cpp b/engines/scumm/costume.cpp
index 4358e03a2a..089e7a2fbe 100644
--- a/engines/scumm/costume.cpp
+++ b/engines/scumm/costume.cpp
@@ -876,7 +876,7 @@ void ClassicCostumeLoader::costumeDecodeData(Actor *a, int frame, uint usemask)
void ClassicCostumeRenderer::setPalette(uint16 *palette) {
int i;
- byte color;
+ byte color = 0;
if (_loaded._format == 0x57) {
for (i = 0; i < 13; i++)
diff --git a/engines/scumm/cursor.cpp b/engines/scumm/cursor.cpp
index 64829114ca..66dd3807db 100644
--- a/engines/scumm/cursor.cpp
+++ b/engines/scumm/cursor.cpp
@@ -111,7 +111,13 @@ void ScummEngine_v6::setCursorTransparency(int a) {
}
void ScummEngine::updateCursor() {
- const int transColor = (_game.heversion >= 80) ? 5 : 255;
+ //HACK Put the 16-bit mapped color, and
+ //hope no other palette entry shares it
+ int transColor = (_game.heversion >= 80) ? 5 : 255;
+ if (_game.features & GF_16BIT_COLOR && _hePalettes)
+ transColor = READ_LE_UINT16(_hePalettes + 2048 + transColor * 2);
+ else
+ transColor = 0;
CursorMan.replaceCursor(_grabbedCursor, _cursor.width, _cursor.height,
_cursor.hotspotX, _cursor.hotspotY,
(_game.platform == Common::kPlatformNES ? _grabbedCursor[63] : transColor),
@@ -138,7 +144,7 @@ void ScummEngine::setCursorFromBuffer(const byte *ptr, int width, int height, in
uint size;
byte *dst;
- size = width * height;
+ size = width * height * _bitDepth;
if (size > sizeof(_grabbedCursor))
error("grabCursor: grabbed cursor too big");
@@ -148,8 +154,8 @@ void ScummEngine::setCursorFromBuffer(const byte *ptr, int width, int height, in
dst = _grabbedCursor;
for (; height; height--) {
- memcpy(dst, ptr, width);
- dst += width;
+ memcpy(dst, ptr, width * _bitDepth);
+ dst += width * _bitDepth;
ptr += pitch;
}
diff --git a/engines/scumm/he/wiz_he.cpp b/engines/scumm/he/wiz_he.cpp
index 8fe2639fbb..e91eb48cd4 100644
--- a/engines/scumm/he/wiz_he.cpp
+++ b/engines/scumm/he/wiz_he.cpp
@@ -1800,14 +1800,12 @@ void Wiz::loadWizCursor(int resId, int palette) {
}
const Common::Rect *r = NULL;
- _vm->_bitDepth = 1;
uint8 *cursor = drawWizImage(resId, 0, 0, 0, 0, 0, 0, r, kWIFBlitToMemBuffer, 0, _vm->getHEPaletteSlot(palette));
- _vm->_bitDepth = (_vm->_game.features & GF_16BIT_COLOR) ? 2 : 1;
int32 cw, ch;
getWizImageDim(resId, 0, cw, ch);
_vm->setCursorHotspot(x, y);
- _vm->setCursorFromBuffer(cursor, cw, ch, cw);
+ _vm->setCursorFromBuffer(cursor, cw, ch, cw * _vm->_bitDepth);
// Since we set up cursor palette for default cursor, disable it now
CursorMan.disableCursorPalette(true);
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index c4b2ab9e56..5580c4c73d 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -974,7 +974,10 @@ protected:
byte animate, animateIndex;
int8 state;
} _cursor;
- byte _grabbedCursor[8192];
+
+ // HACK Double the array size to handle 16-bit images.
+ // this should be dynamically allocated based on game depth instead.
+ byte _grabbedCursor[16384];
byte _currentCursor;
byte _newEffect, _switchRoomEffect2, _switchRoomEffect;