aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorSven Hesse2009-08-22 13:11:30 +0000
committerSven Hesse2009-08-22 13:11:30 +0000
commit401e54825f986b8287acd3f9b2d8002327ccef27 (patch)
treea5f35cb2c8a5fb9f2df6b9e28f4faf62806bc271 /engines
parent529dc3e3f89b9a73307659f53a9322a957bbbb12 (diff)
downloadscummvm-rg350-401e54825f986b8287acd3f9b2d8002327ccef27.tar.gz
scummvm-rg350-401e54825f986b8287acd3f9b2d8002327ccef27.tar.bz2
scummvm-rg350-401e54825f986b8287acd3f9b2d8002327ccef27.zip
Hooking up the v2 spriteUncompressor into the v6 one
svn-id: r43642
Diffstat (limited to 'engines')
-rw-r--r--engines/gob/video_v2.cpp49
-rw-r--r--engines/gob/video_v6.cpp19
2 files changed, 47 insertions, 21 deletions
diff --git a/engines/gob/video_v2.cpp b/engines/gob/video_v2.cpp
index b526b63a37..98cf4a5d4f 100644
--- a/engines/gob/video_v2.cpp
+++ b/engines/gob/video_v2.cpp
@@ -64,12 +64,15 @@ char Video_v2::spriteUncompressor(byte *sprBuf, int16 srcWidth, int16 srcHeight,
memBuffer = new byte[4370];
assert(memBuffer);
+ memset(memBuffer, 0, 4370);
+
srcPtr = sprBuf + 3;
+
sourceLeft = READ_LE_UINT32(srcPtr);
destPtr = destDesc.getVidMem() + destDesc.getWidth() * y + x;
- curWidth = 0;
+ curWidth = 0;
curHeight = 0;
linePtr = destPtr;
@@ -89,58 +92,64 @@ char Video_v2::spriteUncompressor(byte *sprBuf, int16 srcWidth, int16 srcHeight,
cmdVar = 0;
while (1) {
cmdVar >>= 1;
- if ((cmdVar & 0x100) == 0) {
- cmdVar = *srcPtr | 0xFF00;
- srcPtr++;
- }
+ if ((cmdVar & 0x100) == 0)
+ cmdVar = *srcPtr++ | 0xFF00;
+
if ((cmdVar & 1) != 0) {
temp = *srcPtr++;
+
if ((temp != 0) || (transp == 0))
*destPtr = temp;
+
destPtr++;
curWidth++;
+
if (curWidth >= srcWidth) {
curWidth = 0;
linePtr += destDesc.getWidth();
destPtr = linePtr;
- curHeight++;
- if (curHeight >= srcHeight)
+ if (++curHeight >= srcHeight)
break;
}
- sourceLeft--;
+
memBuffer[bufPos] = temp;
- bufPos++;
- bufPos %= 4096;
- if (sourceLeft == 0)
+
+ bufPos = (bufPos + 1) % 4096;
+
+ if (--sourceLeft == 0)
break;
+
} else {
offset = *srcPtr++;
- offset |= (*srcPtr & 0xF0) << 4;
- strLen = (*srcPtr & 0x0F) + 3;
- *srcPtr++;
+ temp = *srcPtr++;
+
+ offset |= (temp & 0xF0) << 4;
+ strLen = (temp & 0x0F) + 3;
+
if (strLen == lenCmd)
strLen = *srcPtr++ + 18;
for (counter2 = 0; counter2 < strLen; counter2++) {
temp = memBuffer[(offset + counter2) % 4096];
+
if ((temp != 0) || (transp == 0))
*destPtr = temp;
- destPtr++;
+ destPtr++;
curWidth++;
+
if (curWidth >= srcWidth) {
curWidth = 0;
linePtr += destDesc.getWidth();
destPtr = linePtr;
- curHeight++;
- if (curHeight >= srcHeight) {
+ if (++curHeight >= srcHeight) {
delete[] memBuffer;
return 1;
}
}
+
memBuffer[bufPos] = temp;
- bufPos++;
- bufPos %= 4096;
+ bufPos = (bufPos + 1) % 4096;
}
if (strLen >= ((int32) sourceLeft)) {
@@ -148,7 +157,9 @@ char Video_v2::spriteUncompressor(byte *sprBuf, int16 srcWidth, int16 srcHeight,
return 1;
} else
sourceLeft--;
+
}
+
}
} else
return 0;
diff --git a/engines/gob/video_v6.cpp b/engines/gob/video_v6.cpp
index c51b027bad..6f39edb588 100644
--- a/engines/gob/video_v6.cpp
+++ b/engines/gob/video_v6.cpp
@@ -84,8 +84,23 @@ char Video_v6::spriteUncompressor(byte *sprBuf, int16 srcWidth, int16 srcHeight,
return 1;
}
- warning("Urban Stub: spriteUncompressor(), sprBuf[0,1] = %d,%d",
- sprBuf[0], sprBuf[1]);
+ if (srcWidth & 0xC000) {
+ warning("Playtoons Stub: srcWidth & 0xC000 == %04X", srcWidth & 0xC000);
+ srcWidth &= 0x3FFF;
+ }
+
+ if ((sprBuf[0] == 1) && (sprBuf[1] == 2)) {
+ if (Video_v2::spriteUncompressor(sprBuf, srcWidth, srcHeight, x, y, transp, destDesc))
+ return 1;
+
+ _vm->validateVideoMode(destDesc._vidMode);
+
+ _videoDriver->drawPackedSprite(sprBuf, srcWidth, srcHeight, x, y, transp, destDesc);
+ return 1;
+ }
+
+ warning("Urban Stub: spriteUncompressor(), sprBuf[0,1,2] = %d,%d,%d",
+ sprBuf[0], sprBuf[1], sprBuf[2]);
return 1;
}