aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/gob/game_v2.cpp3
-rw-r--r--engines/gob/gob.cpp5
-rw-r--r--engines/gob/gob.h3
-rw-r--r--engines/gob/inter.h1
-rw-r--r--engines/gob/inter_v2.cpp67
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);
}