diff options
author | Gregory Montoir | 2007-05-17 22:13:31 +0000 |
---|---|---|
committer | Gregory Montoir | 2007-05-17 22:13:31 +0000 |
commit | e9827d0884318822b20d13dbe6465c78194e5ea2 (patch) | |
tree | 27ad533e46001d04bd81045b088ce34ddf873fab /engines/cine/various.cpp | |
parent | edaadd692feecd478f1b27df8aa35a68978e5c57 (diff) | |
download | scummvm-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.cpp | 26 |
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; |