aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/draw.cpp
diff options
context:
space:
mode:
authorSven Hesse2006-04-13 16:25:07 +0000
committerSven Hesse2006-04-13 16:25:07 +0000
commit07a0d5489158efb0b56ec22014f0da89e99d2cb7 (patch)
tree815325f1fd777a0a2290d8786fdf69ac1be383ca /engines/gob/draw.cpp
parentc9555a5d54b96337a6e6d08919bdad1a4d94fde4 (diff)
downloadscummvm-rg350-07a0d5489158efb0b56ec22014f0da89e99d2cb7.tar.gz
scummvm-rg350-07a0d5489158efb0b56ec22014f0da89e99d2cb7.tar.bz2
scummvm-rg350-07a0d5489158efb0b56ec22014f0da89e99d2cb7.zip
- More stubs, the intro now works completely (with extreme graphical
glitches and without sound in the floppy version), the title screen is shown afterwards - Added skipping of the floppy version's copy protection screen, since the CD version doesn't show it either svn-id: r21845
Diffstat (limited to 'engines/gob/draw.cpp')
-rw-r--r--engines/gob/draw.cpp446
1 files changed, 0 insertions, 446 deletions
diff --git a/engines/gob/draw.cpp b/engines/gob/draw.cpp
index 6e1e2a1da3..e43a76f614 100644
--- a/engines/gob/draw.cpp
+++ b/engines/gob/draw.cpp
@@ -321,277 +321,6 @@ void Draw::blitCursor(void) {
}
}
-void Draw::spriteOperation(int16 operation) {
- uint16 id;
- char *dataBuf;
- Game::TotResItem *itemPtr;
- int32 offset;
- int16 len;
- int16 i;
- int16 x;
- int16 y;
- int16 perLine;
-
- if (_sourceSurface >= 100)
- _sourceSurface -= 80;
-
- if (_destSurface >= 100)
- _destSurface -= 80;
-
- if (_renderFlags & RENDERFLAG_USEDELTAS) {
- if (_sourceSurface == 21) {
- _spriteLeft += _backDeltaX;
- _spriteTop += _backDeltaY;
- }
-
- if (_destSurface == 21) {
- _destSpriteX += _backDeltaX;
- _destSpriteY += _backDeltaY;
- if (operation == DRAW_DRAWLINE ||
- (operation >= DRAW_DRAWBAR
- && operation <= DRAW_FILLRECTABS)) {
- _spriteRight += _backDeltaX;
- _spriteBottom += _backDeltaY;
- }
- }
- }
-
- switch (operation) {
- case DRAW_BLITSURF:
- _vm->_video->drawSprite(_spritesArray[_sourceSurface],
- _spritesArray[_destSurface],
- _spriteLeft, _spriteTop,
- _spriteLeft + _spriteRight - 1,
- _spriteTop + _spriteBottom - 1,
- _destSpriteX, _destSpriteY, _transparency);
-
- if (_destSurface == 21) {
- invalidateRect(_destSpriteX, _destSpriteY,
- _destSpriteX + _spriteRight - 1,
- _destSpriteY + _spriteBottom - 1);
- }
- break;
-
- case DRAW_PUTPIXEL:
- _vm->_video->putPixel(_destSpriteX, _destSpriteY,
- _frontColor, _spritesArray[_destSurface]);
- if (_destSurface == 21) {
- invalidateRect(_destSpriteX, _destSpriteY,
- _destSpriteX, _destSpriteY);
- }
- break;
-
- case DRAW_FILLRECT:
- _vm->_video->fillRect(_spritesArray[_destSurface],
- _destSpriteX, _destSpriteY,
- _destSpriteX + _spriteRight - 1,
- _destSpriteY + _spriteBottom - 1, _backColor);
-
- if (_destSurface == 21) {
- invalidateRect(_destSpriteX, _destSpriteY,
- _destSpriteX + _spriteRight - 1,
- _destSpriteY + _spriteBottom - 1);
- }
- break;
-
- case DRAW_DRAWLINE:
- _vm->_video->drawLine(_spritesArray[_destSurface],
- _destSpriteX, _destSpriteY,
- _spriteRight, _spriteBottom, _frontColor);
-
- if (_destSurface == 21) {
- invalidateRect(_destSpriteX, _destSpriteY,
- _spriteRight, _spriteBottom);
- }
- break;
-
- case DRAW_INVALIDATE:
- if (_destSurface == 21) {
- invalidateRect(_destSpriteX - _spriteRight, _destSpriteY - _spriteBottom, // !!
- _destSpriteX + _spriteRight,
- _destSpriteY + _spriteBottom);
- }
- break;
-
- case DRAW_LOADSPRITE:
- id = _spriteLeft;
- if (id >= 30000) {
- dataBuf =
- _vm->_game->loadExtData(id, &_spriteRight,
- &_spriteBottom);
- _vm->_video->drawPackedSprite((byte *)dataBuf, _spriteRight,
- _spriteBottom, _destSpriteX,
- _destSpriteY, _transparency,
- _spritesArray[_destSurface]);
- if (_destSurface == 21) {
- invalidateRect(_destSpriteX,
- _destSpriteY,
- _destSpriteX + _spriteRight - 1,
- _destSpriteY + _spriteBottom - 1);
- }
- delete[] dataBuf;
- break;
- }
- // Load from .TOT resources
- itemPtr = &_vm->_game->_totResourceTable->items[id];
- offset = itemPtr->offset;
- if (offset >= 0) {
- dataBuf =
- ((char *)_vm->_game->_totResourceTable) +
- szGame_TotResTable + szGame_TotResItem *
- _vm->_game->_totResourceTable->itemsCount + offset;
- } else {
- dataBuf =
- _vm->_game->_imFileData +
- (int32)READ_LE_UINT32(&((int32 *)_vm->_game->_imFileData)[-offset - 1]);
- }
-
- _spriteRight = itemPtr->width;
- _spriteBottom = itemPtr->height;
- _vm->_video->drawPackedSprite((byte *)dataBuf,
- _spriteRight, _spriteBottom,
- _destSpriteX, _destSpriteY,
- _transparency, _spritesArray[_destSurface]);
-
- if (_destSurface == 21) {
- invalidateRect(_destSpriteX, _destSpriteY,
- _destSpriteX + _spriteRight - 1,
- _destSpriteY + _spriteBottom - 1);
- }
- break;
-
- case DRAW_PRINTTEXT:
- len = strlen(_textToPrint);
- if (_destSurface == 21) {
- invalidateRect(_destSpriteX, _destSpriteY,
- _destSpriteX +
- len * _fonts[_fontIndex]->itemWidth - 1,
- _destSpriteY +
- _fonts[_fontIndex]->itemHeight - 1);
- }
-
- for (i = 0; i < len; i++) {
- _vm->_video->drawLetter(_textToPrint[i],
- _destSpriteX, _destSpriteY,
- _fonts[_fontIndex],
- _transparency,
- _frontColor, _backColor,
- _spritesArray[_destSurface]);
-
- _destSpriteX += _fonts[_fontIndex]->itemWidth;
- }
- break;
-
- case DRAW_DRAWBAR:
- _vm->_video->drawLine(_spritesArray[_destSurface],
- _destSpriteX, _spriteBottom,
- _spriteRight, _spriteBottom, _frontColor);
-
- _vm->_video->drawLine(_spritesArray[_destSurface],
- _destSpriteX, _destSpriteY,
- _destSpriteX, _spriteBottom, _frontColor);
-
- _vm->_video->drawLine(_spritesArray[_destSurface],
- _spriteRight, _destSpriteY,
- _spriteRight, _spriteBottom, _frontColor);
-
- _vm->_video->drawLine(_spritesArray[_destSurface],
- _destSpriteX, _destSpriteY,
- _spriteRight, _destSpriteY, _frontColor);
-
- if (_destSurface == 21) {
- invalidateRect(_destSpriteX, _destSpriteY,
- _spriteRight, _spriteBottom);
- }
- break;
-
- case DRAW_CLEARRECT:
- if (_backColor < 16) {
- _vm->_video->fillRect(_spritesArray[_destSurface],
- _destSpriteX, _destSpriteY,
- _spriteRight, _spriteBottom,
- _backColor);
- }
- if (_destSurface == 21) {
- invalidateRect(_destSpriteX, _destSpriteY,
- _spriteRight, _spriteBottom);
- }
- break;
-
- case DRAW_FILLRECTABS:
- _vm->_video->fillRect(_spritesArray[_destSurface],
- _destSpriteX, _destSpriteY,
- _spriteRight, _spriteBottom, _backColor);
-
- if (_destSurface == 21) {
- invalidateRect(_destSpriteX, _destSpriteY,
- _spriteRight, _spriteBottom);
- }
- break;
-
- case DRAW_DRAWLETTER:
- if (_fontToSprite[_fontIndex].sprite == -1) {
- if (_destSurface == 21) {
- invalidateRect(_destSpriteX,
- _destSpriteY,
- _destSpriteX +
- _fonts[_fontIndex]->itemWidth - 1,
- _destSpriteY +
- _fonts[_fontIndex]->itemHeight -
- 1);
- }
- _vm->_video->drawLetter(_letterToPrint,
- _destSpriteX, _destSpriteY,
- _fonts[_fontIndex],
- _transparency,
- _frontColor, _backColor,
- _spritesArray[_destSurface]);
- break;
- }
-
- perLine =
- _spritesArray[(int16)_fontToSprite[_fontIndex].
- sprite]->width / _fontToSprite[_fontIndex].width;
-
- y = (_letterToPrint -
- _fontToSprite[_fontIndex].base) / perLine *
- _fontToSprite[_fontIndex].height;
-
- x = (_letterToPrint -
- _fontToSprite[_fontIndex].base) % perLine *
- _fontToSprite[_fontIndex].width;
-
- if (_destSurface == 21) {
- invalidateRect(_destSpriteX, _destSpriteY,
- _destSpriteX +
- _fontToSprite[_fontIndex].width,
- _destSpriteY +
- _fontToSprite[_fontIndex].height);
- }
-
- _vm->_video->drawSprite(_spritesArray[(int16)_fontToSprite
- [_fontIndex].sprite],
- _spritesArray[_destSurface], x, y,
- x + _fontToSprite[_fontIndex].width,
- y + _fontToSprite[_fontIndex].height,
- _destSpriteX, _destSpriteY, _transparency);
-
- break;
- }
-
- if (_renderFlags & RENDERFLAG_USEDELTAS) {
- if (_sourceSurface == 21) {
- _spriteLeft -= _backDeltaX;
- _spriteTop -= _backDeltaY;
- }
-
- if (_destSurface == 21) {
- _destSpriteX -= _backDeltaX;
- _destSpriteY -= _backDeltaY;
- }
- }
-}
-
void Draw::animateCursor(int16 cursor) {
int16 newX = 0;
int16 newY = 0;
@@ -705,181 +434,6 @@ void Draw::animateCursor(int16 cursor) {
_cursorY = newY;
}
-void Draw::printText(void) {
- int16 savedFlags;
- int16 ldestSpriteX;
- char *dataPtr;
- char *ptr;
- char *ptr2;
- int16 index;
- int16 destX;
- int16 destY;
- char cmd;
- int16 val;
- char buf[20];
-
- index = _vm->_inter->load16();
-
- _vm->_cdrom->playMultMusic();
-
- dataPtr = (char *)_vm->_game->_totTextData + _vm->_game->_totTextData->items[index].offset;
- ptr = dataPtr;
-
- if (_renderFlags & RENDERFLAG_CAPTUREPUSH) {
- _destSpriteX = READ_LE_UINT16(ptr);
- _destSpriteY = READ_LE_UINT16(ptr + 2);
- _spriteRight = READ_LE_UINT16(ptr + 4) - _destSpriteX + 1;
- _spriteBottom = READ_LE_UINT16(ptr + 6) - _destSpriteY + 1;
- _vm->_game->capturePush(_destSpriteX, _destSpriteY,
- _spriteRight, _spriteBottom);
- (*_vm->_scenery->_pCaptureCounter)++;
- }
- _destSpriteX = READ_LE_UINT16(ptr);
- destX = _destSpriteX;
-
- _destSpriteY = READ_LE_UINT16(ptr + 2);
- destY = _destSpriteY;
-
- _spriteRight = READ_LE_UINT16(ptr + 4);
- _spriteBottom = READ_LE_UINT16(ptr + 6);
- _destSurface = 21;
-
- ptr += 8;
-
- _backColor = *ptr++;
- _transparency = 1;
- spriteOperation(DRAW_CLEARRECT);
-
- _backColor = 0;
- savedFlags = _renderFlags;
-
- _renderFlags &= ~RENDERFLAG_NOINVALIDATE;
- for (; (_destSpriteX = READ_LE_UINT16(ptr)) != -1; ptr++) {
- _destSpriteX += destX;
- _destSpriteY = READ_LE_UINT16(ptr + 2) + destY;
- _spriteRight = READ_LE_UINT16(ptr + 4) + destX;
- _spriteBottom = READ_LE_UINT16(ptr + 6) + destY;
- ptr += 8;
-
- cmd = (*ptr & 0xf0) >> 4;
- if (cmd == 0) {
- _frontColor = *ptr & 0xf;
- spriteOperation(DRAW_DRAWLINE);
- } else if (cmd == 1) {
- _frontColor = *ptr & 0xf;
- spriteOperation(DRAW_DRAWBAR);
- } else if (cmd == 2) {
- _backColor = *ptr & 0xf;
- spriteOperation(DRAW_FILLRECTABS);
- }
- }
- ptr += 2;
-
- for (ptr2 = ptr; *ptr2 != 1; ptr2++) {
- if (*ptr2 == 3)
- ptr2++;
-
- if (*ptr2 == 2)
- ptr2 += 4;
- }
-
- ptr2++;
-
- while (*ptr != 1) {
- cmd = *ptr;
- if (cmd == 3) {
- ptr++;
- _fontIndex = (*ptr & 0xf0) >> 4;
- _frontColor = *ptr & 0xf;
- ptr++;
- continue;
- } else if (cmd == 2) {
- ptr++;
- _destSpriteX = destX + READ_LE_UINT16(ptr);
- _destSpriteY = destY + READ_LE_UINT16(ptr + 2);
- ptr += 4;
- continue;
- }
-
- if ((byte)*ptr != 0xba) {
- _letterToPrint = *ptr;
- spriteOperation(DRAW_DRAWLETTER);
- _destSpriteX +=
- _fonts[_fontIndex]->itemWidth;
- ptr++;
- } else {
- cmd = ptr2[17] & 0x7f;
- if (cmd == 0) {
- val = READ_LE_UINT16(ptr2 + 18) * 4;
- sprintf(buf, "%d", VAR_OFFSET(val));
- } else if (cmd == 1) {
- val = READ_LE_UINT16(ptr2 + 18) * 4;
-
- strcpy(buf, _vm->_global->_inter_variables + val);
- } else {
- val = READ_LE_UINT16(ptr2 + 18) * 4;
-
- sprintf(buf, "%d", VAR_OFFSET(val));
- if (buf[0] == '-') {
- while (strlen(buf) - 1 < (uint32)ptr2[17]) {
- _vm->_util->insertStr("0", buf, 1);
- }
- } else {
- while (strlen(buf) - 1 < (uint32)ptr2[17]) {
- _vm->_util->insertStr("0", buf, 0);
- }
- }
-
- _vm->_util->insertStr(",", buf, strlen(buf) + 1 - ptr2[17]);
- }
-
- _textToPrint = buf;
- ldestSpriteX = _destSpriteX;
- spriteOperation(DRAW_PRINTTEXT);
- if (ptr2[17] & 0x80) {
- if (ptr[1] == ' ') {
- _destSpriteX += _fonts[_fontIndex]->itemWidth;
- while (ptr[1] == ' ')
- ptr++;
- if (ptr[1] == 2) {
- if (READ_LE_UINT16(ptr + 4) == _destSpriteY)
- ptr += 5;
- }
- } else if (ptr[1] == 2 && READ_LE_UINT16(ptr + 4) == _destSpriteY) {
- ptr += 5;
- _destSpriteX += _fonts[_fontIndex]->itemWidth;
- }
- } else {
- _destSpriteX = ldestSpriteX + _fonts[_fontIndex]->itemWidth;
- }
- ptr2 += 23;
- ptr++;
- }
- }
-
- _renderFlags = savedFlags;
- if (_renderFlags & 4) {
- warning("printText: Input not supported");
-// xor ax, ax
-// loc_436_1391:
-// xor dx, dx
-// push ax
-// push dx
-// push ax
-// push dx
-// push ax
-// mov al, 0
-// push ax
-// call sub_9FF_1E71
-// add sp, 0Ch
- }
-
- if ((_renderFlags & RENDERFLAG_CAPTUREPOP) && *_vm->_scenery->_pCaptureCounter != 0) {
- (*_vm->_scenery->_pCaptureCounter)--;
- _vm->_game->capturePop(1);
- }
-}
-
void Draw::freeSprite(int16 index) {
// .-- sub_CD84 ---
if (_spritesArray[index] == 0)