aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/video.cpp
diff options
context:
space:
mode:
authorSven Hesse2006-05-11 19:43:30 +0000
committerSven Hesse2006-05-11 19:43:30 +0000
commit42e03bd70720643c0866abd7d6da50529d2c1f03 (patch)
tree80aff92316136cac1222ccf01782b5c58d4d7490 /engines/gob/video.cpp
parentd6af07989df23219293cf6117e6cd0ae6a63e2e9 (diff)
downloadscummvm-rg350-42e03bd70720643c0866abd7d6da50529d2c1f03.tar.gz
scummvm-rg350-42e03bd70720643c0866abd7d6da50529d2c1f03.tar.bz2
scummvm-rg350-42e03bd70720643c0866abd7d6da50529d2c1f03.zip
- Sound! Still a bit glitchy, though:
- Negative frequences?!? Maybe "SFX"? - No sound for a small part of the intro (there aren't any sndKeys covering that part either) - A rythm-instrument (hi-hat?) in the titlemusic isn't played as one - More differences in the drawing functions fleshed out - Some of the goblin handling functions written - More unnamed functions and variables, wheeee... svn-id: r22410
Diffstat (limited to 'engines/gob/video.cpp')
-rw-r--r--engines/gob/video.cpp131
1 files changed, 1 insertions, 130 deletions
diff --git a/engines/gob/video.cpp b/engines/gob/video.cpp
index 41680b343b..0dc7055471 100644
--- a/engines/gob/video.cpp
+++ b/engines/gob/video.cpp
@@ -285,7 +285,7 @@ void Video::drawCircle(Video::SurfaceDesc *dest, int16 x, int16 y, int16 radius,
void Video::drawPackedSprite(byte *sprBuf, int16 width, int16 height, int16 x, int16 y,
int16 transp, SurfaceDesc *dest) {
- if (Video::spriteUncompressor(sprBuf, width, height, x, y, transp, dest))
+ if (spriteUncompressor(sprBuf, width, height, x, y, transp, dest))
return;
if ((dest->vidMode & 0x7f) != 0x13)
@@ -391,135 +391,6 @@ void Video::initPrimary(int16 mode) {
}
}
-char Video::spriteUncompressor(byte *sprBuf, int16 srcWidth, int16 srcHeight,
- int16 x, int16 y, int16 transp, SurfaceDesc *destDesc) {
- SurfaceDesc sourceDesc;
- byte *memBuffer;
- byte *srcPtr;
- byte *destPtr;
- byte *linePtr;
- byte temp;
- uint16 sourceLeft;
- int16 curWidth;
- int16 curHeight;
- int16 offset;
- int16 counter2;
- uint16 cmdVar;
- int16 bufPos;
- int16 strLen;
-
- if (!destDesc)
- return 1;
-
- if ((destDesc->vidMode & 0x7f) != 0x13)
- error("Video::spriteUncompressor: Video mode 0x%x is not supported!",
- destDesc->vidMode & 0x7f);
-
- if (sprBuf[0] != 1)
- return 0;
-
- if (sprBuf[1] != 2)
- return 0;
-
- if (sprBuf[2] == 2) {
- sourceDesc.width = srcWidth;
- sourceDesc.height = srcHeight;
- sourceDesc.vidMode = 0x93;
- sourceDesc.vidPtr = sprBuf + 3;
- Video::drawSprite(&sourceDesc, destDesc, 0, 0, srcWidth - 1,
- srcHeight - 1, x, y, transp);
- return 1;
- } else {
- memBuffer = new byte[4114];
- if (memBuffer == 0)
- return 0;
-
- srcPtr = sprBuf + 3;
- sourceLeft = READ_LE_UINT16(srcPtr);
-
- destPtr = destDesc->vidPtr + destDesc->width * y + x;
-
- curWidth = 0;
- curHeight = 0;
-
- linePtr = destPtr;
- srcPtr += 4;
-
- for (offset = 0; offset < 4078; offset++)
- memBuffer[offset] = 0x20;
-
- cmdVar = 0;
- bufPos = 4078;
- while (1) {
- cmdVar >>= 1;
- if ((cmdVar & 0x100) == 0) {
- cmdVar = *srcPtr | 0xff00;
- srcPtr++;
- }
- if ((cmdVar & 1) != 0) {
- temp = *srcPtr++;
- if (temp != 0 || transp == 0)
- *destPtr = temp;
- destPtr++;
- curWidth++;
- if (curWidth >= srcWidth) {
- curWidth = 0;
- linePtr += destDesc->width;
- destPtr = linePtr;
- curHeight++;
- if (curHeight >= srcHeight)
- break;
- }
- sourceLeft--;
- if (sourceLeft == 0)
- break;
-
- memBuffer[bufPos] = temp;
- bufPos++;
- bufPos %= 4096;
- } else {
- offset = *srcPtr;
- srcPtr++;
- offset |= (*srcPtr & 0xf0) << 4;
- strLen = (*srcPtr & 0x0f) + 3;
- srcPtr++;
-
- for (counter2 = 0; counter2 < strLen;
- counter2++) {
- temp =
- memBuffer[(offset +
- counter2) % 4096];
- if (temp != 0 || transp == 0)
- *destPtr = temp;
- destPtr++;
-
- curWidth++;
- if (curWidth >= srcWidth) {
- curWidth = 0;
- linePtr += destDesc->width;
- destPtr = linePtr;
- curHeight++;
- if (curHeight >= srcHeight) {
- delete[] memBuffer;
- return 1;
- }
- }
- sourceLeft--;
- if (sourceLeft == 0) {
- delete[] memBuffer;
- return 1;
- }
- memBuffer[bufPos] = temp;
- bufPos++;
- bufPos %= 4096;
- }
- }
- }
- }
- delete[] memBuffer;
- return 1;
-}
-
void Video::setHandlers() { _vm->_global->_setAllPalette = 1; }
} // End of namespace Gob