aboutsummaryrefslogtreecommitdiff
path: root/engines/cine/various.cpp
diff options
context:
space:
mode:
authorGregory Montoir2007-05-17 22:13:31 +0000
committerGregory Montoir2007-05-17 22:13:31 +0000
commite9827d0884318822b20d13dbe6465c78194e5ea2 (patch)
tree27ad533e46001d04bd81045b088ce34ddf873fab /engines/cine/various.cpp
parentedaadd692feecd478f1b27df8aa35a68978e5c57 (diff)
downloadscummvm-rg350-e9827d0884318822b20d13dbe6465c78194e5ea2.tar.gz
scummvm-rg350-e9827d0884318822b20d13dbe6465c78194e5ea2.tar.bz2
scummvm-rg350-e9827d0884318822b20d13dbe6465c78194e5ea2.zip
added code for gfxSpriteFunc1 and gfxSpriteFunc2, which are used for sprite masking (see also bug #1624797)
svn-id: r26861
Diffstat (limited to 'engines/cine/various.cpp')
-rw-r--r--engines/cine/various.cpp26
1 files changed, 13 insertions, 13 deletions
diff --git a/engines/cine/various.cpp b/engines/cine/various.cpp
index 92a38f969b..5479625eb1 100644
--- a/engines/cine/various.cpp
+++ b/engines/cine/various.cpp
@@ -2188,13 +2188,18 @@ uint16 executePlayerInput(void) {
void drawSprite(overlayHeadElement *currentOverlay, byte *spritePtr,
byte *maskPtr, uint16 width, uint16 height, byte *page, int16 x, int16 y) {
-#if 0
byte *ptr = NULL;
+ byte *msk = NULL;
byte i = 0;
uint16 si = 0;
overlayHeadElement *pCurrentOverlay = currentOverlay;
- while (pCurrentOverlay) { // unfinished, probably for mask handling..
+ if (g_cine->getGameType() == Cine::GType_OS) {
+ drawSpriteRaw2(spritePtr, objectTable[currentOverlay->objIdx].part, width, height, page, x, y);
+ return;
+ }
+
+ while (pCurrentOverlay) {
if (pCurrentOverlay->type == 5) {
int16 maskX;
int16 maskY;
@@ -2203,7 +2208,8 @@ void drawSprite(overlayHeadElement *currentOverlay, byte *spritePtr,
uint16 maskSpriteIdx;
if (!si) {
- ptr = (byte *)malloc(width * height);
+ ptr = (byte *)malloc(width * 8 * height);
+ msk = (byte *)malloc(width * 8 * height);
si = 1;
}
@@ -2214,25 +2220,19 @@ void drawSprite(overlayHeadElement *currentOverlay, byte *spritePtr,
maskWidth = animDataTable[maskSpriteIdx].width / 2;
maskHeight = animDataTable[maskSpriteIdx].height;
-
- gfxSpriteFunc2(spritePtr, width, height, animDataTable[maskSpriteIdx].ptr1, maskWidth, maskHeight, ptr, maskX - x,maskY - y, i++);
+ gfxSpriteFunc2(spritePtr, maskPtr, width, height, animDataTable[maskSpriteIdx].ptr1, maskWidth, maskHeight, ptr, msk, x, y, maskX, maskY, i++);
}
pCurrentOverlay = pCurrentOverlay->next;
}
if (si) {
- gfxSpriteFunc1(ptr, width, height, page, x, y);
+ gfxSpriteFunc1(ptr, msk, width, height, page, x, y);
free(ptr);
- } else
-#endif
-
- if (g_cine->getGameType() == Cine::GType_OS) {
- drawSpriteRaw2(spritePtr, objectTable[currentOverlay->objIdx].part, width, height, page, x, y);
+ free(msk);
} else {
- drawSpriteRaw(spritePtr, maskPtr, width, height, page, x, y);
+ gfxSpriteFunc1(spritePtr, maskPtr, width, height, page, x, y);
}
-
}
int16 additionalBgVScroll = 0;