diff options
Diffstat (limited to 'engines/gob')
-rw-r--r-- | engines/gob/game_v2.cpp | 3 | ||||
-rw-r--r-- | engines/gob/gob.cpp | 5 | ||||
-rw-r--r-- | engines/gob/gob.h | 3 | ||||
-rw-r--r-- | engines/gob/inter.h | 1 | ||||
-rw-r--r-- | engines/gob/inter_v2.cpp | 67 |
5 files changed, 73 insertions, 6 deletions
diff --git a/engines/gob/game_v2.cpp b/engines/gob/game_v2.cpp index e18f8a9e37..22a4953656 100644 --- a/engines/gob/game_v2.cpp +++ b/engines/gob/game_v2.cpp @@ -71,7 +71,8 @@ void Game_v2::playTot(int16 skipPlay) { if (skipPlay <= 0) { while (!_vm->_quitRequested) { - _vm->_draw->animateCursor(4); + if (_vm->_global->_inter_variables != 0) + _vm->_draw->animateCursor(4); if (_vm->_features & GF_MAC) _vm->_music->stopPlay(); else diff --git a/engines/gob/gob.cpp b/engines/gob/gob.cpp index 4b3120c3c2..726a10d059 100644 --- a/engines/gob/gob.cpp +++ b/engines/gob/gob.cpp @@ -575,6 +575,11 @@ void GobEngine::loadGameData(enum SaveFiles sFile, int16 dataVar, int32 size, in _video->freeSurfDesc(srcDesc); } else retSize = in->read(buf, size); + if (index == 21) { + _video->drawSprite(_draw->_backSurface, _draw->_frontSurface, 0, 0, + _draw->_frontSurface->width - 1, _draw->_frontSurface->height - 1, 0, 0, 0); + _video->waitRetrace(_global->_videoMode); + } } else retSize = readDataEndian(*in, buf, _global->_inter_variablesSizes + dataVar, size); diff --git a/engines/gob/gob.h b/engines/gob/gob.h index c90dde4592..2f65eb7e19 100644 --- a/engines/gob/gob.h +++ b/engines/gob/gob.h @@ -109,7 +109,8 @@ enum { enum SaveFiles { SAVE_CAT = 0, // Saves - SAVE_SAV, // Draw::_backSurface (why?) + SAVE_SAV, // Draw::_backSurface (as a temporary buffer when using the notepad + // and changing the font. TODO: That probably should be worked around SAVE_BLO // Notes }; diff --git a/engines/gob/inter.h b/engines/gob/inter.h index e438d8de43..7a49045ac5 100644 --- a/engines/gob/inter.h +++ b/engines/gob/inter.h @@ -333,6 +333,7 @@ protected: bool o2_playSound(char &cmdCount, int16 &counter, int16 &retFlag); bool o2_goblinFunc(char &cmdCount, int16 &counter, int16 &retFlag); bool o2_evaluateStore(char &cmdCount, int16 &counter, int16 &retFlag); + bool o2_printText(char &cmdCount, int16 &counter, int16 &retFlag); bool o2_palLoad(char &cmdCount, int16 &counter, int16 &retFlag); bool o2_loadTot(char &cmdCount, int16 &counter, int16 &retFlag); bool o2_freeSprite(char &cmdCount, int16 &counter, int16 &retFlag); diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp index 0c050e9436..5a03aa7586 100644 --- a/engines/gob/inter_v2.cpp +++ b/engines/gob/inter_v2.cpp @@ -469,7 +469,7 @@ void Inter_v2::setupOpcodes(void) { {NULL, ""}, /* 10 */ {NULL, ""}, - OPCODE(o1_printText), + OPCODE(o2_printText), OPCODE(o2_loadTot), OPCODE(o2_palLoad), /* 14 */ @@ -1490,7 +1490,7 @@ bool Inter_v2::o2_checkData(char &cmdCount, int16 &counter, int16 &retFlag) { evalExpr(0); varOff = _vm->_parse->parseVarIndex(); - handle = 0; + handle = 1; if (!scumm_stricmp(_vm->_global->_inter_resStr, "cat.inf")) size = _vm->getSaveSize(SAVE_CAT); else if (!scumm_stricmp(_vm->_global->_inter_resStr, "cat.cat")) @@ -1682,6 +1682,66 @@ bool Inter_v2::o2_evaluateStore(char &cmdCount, int16 &counter, int16 &retFlag) return false; } +bool Inter_v2::o2_printText(char &cmdCount, int16 &counter, int16 &retFlag) { + char buf[60]; + int16 i; + + _vm->_draw->_destSpriteX = _vm->_parse->parseValExpr(); + _vm->_draw->_destSpriteY = _vm->_parse->parseValExpr(); + + _vm->_draw->_backColor = _vm->_parse->parseValExpr(); + _vm->_draw->_frontColor = _vm->_parse->parseValExpr(); + _vm->_draw->_fontIndex = _vm->_parse->parseValExpr(); + _vm->_draw->_destSurface = 21; + _vm->_draw->_textToPrint = buf; + _vm->_draw->_transparency = 0; + + if (_vm->_draw->_backColor == 16) { + _vm->_draw->_backColor = 0; + _vm->_draw->_transparency = 1; + } + + do { + for (i = 0; *_vm->_global->_inter_execPtr != '.' && (byte)*_vm->_global->_inter_execPtr != 200; + i++, _vm->_global->_inter_execPtr++) { + buf[i] = *_vm->_global->_inter_execPtr; + } + + if ((byte)*_vm->_global->_inter_execPtr != 200) { + _vm->_global->_inter_execPtr++; + switch (*_vm->_global->_inter_execPtr) { + case 16: + case 18: + sprintf(buf + i, "%d", (int8) READ_VARO_UINT8(_vm->_parse->parseVarIndex())); + break; + + case 17: + case 24: + case 27: + sprintf(buf + i, "%d", (int16) READ_VARO_UINT16(_vm->_parse->parseVarIndex())); + break; + + case 23: + case 26: + sprintf(buf + i, "%d", VAR_OFFSET(_vm->_parse->parseVarIndex())); + break; + + case 25: + case 28: + sprintf(buf + i, "%s", GET_VARO_STR(_vm->_parse->parseVarIndex())); + break; + } + _vm->_global->_inter_execPtr++; + } else { + buf[i] = 0; + } + _vm->_draw->spriteOperation(DRAW_PRINTTEXT); + } while ((byte)*_vm->_global->_inter_execPtr != 200); + _vm->_global->_inter_execPtr++; + + return false; +} + bool Inter_v2::o2_palLoad(char &cmdCount, int16 &counter, int16 &retFlag) { int16 i; int16 ind1; @@ -2238,8 +2298,7 @@ void Inter_v2::o2_totSub(void) { totFile[i] = 0; } - _vm->_global->_inter_execPtr++; - flags = *_vm->_global->_inter_execPtr; + flags = (byte) *_vm->_global->_inter_execPtr++; _vm->_game->totSub(flags, totFile); } |