diff options
author | Arnaud Boutonné | 2009-09-09 20:10:16 +0000 |
---|---|---|
committer | Arnaud Boutonné | 2009-09-09 20:10:16 +0000 |
commit | 6f6d4df529ea7e84d851c52683974032e65d7e91 (patch) | |
tree | 5b507bd7d14332b8379d4c7d5d6b972a0f0760c7 | |
parent | 5cd538a1b3026513d7b1ee924337c6603fc6a52b (diff) | |
download | scummvm-rg350-6f6d4df529ea7e84d851c52683974032e65d7e91.tar.gz scummvm-rg350-6f6d4df529ea7e84d851c52683974032e65d7e91.tar.bz2 scummvm-rg350-6f6d4df529ea7e84d851c52683974032e65d7e91.zip |
Playtoons - Add oPlaytoons_printText
svn-id: r44018
-rw-r--r-- | engines/gob/inter.h | 1 | ||||
-rw-r--r-- | engines/gob/inter_playtoons.cpp | 92 |
2 files changed, 92 insertions, 1 deletions
diff --git a/engines/gob/inter.h b/engines/gob/inter.h index 80676ee501..fbeca765e2 100644 --- a/engines/gob/inter.h +++ b/engines/gob/inter.h @@ -557,6 +557,7 @@ protected: virtual void setupOpcodesFunc(); virtual void setupOpcodesGob(); + bool oPlaytoons_printText(OpFuncParams ¶ms); bool oPlaytoons_F_1B(OpFuncParams ¶ms); bool oPlaytoons_freeSprite(OpFuncParams ¶ms); bool oPlaytoons_checkData(OpFuncParams ¶ms); diff --git a/engines/gob/inter_playtoons.cpp b/engines/gob/inter_playtoons.cpp index 05023df10c..6e2a77df35 100644 --- a/engines/gob/inter_playtoons.cpp +++ b/engines/gob/inter_playtoons.cpp @@ -35,6 +35,7 @@ #include "gob/dataio.h" #include "gob/draw.h" #include "gob/game.h" +#include "gob/expression.h" #include "gob/script.h" #include "gob/hotspots.h" #include "gob/palanim.h" @@ -84,7 +85,7 @@ void Inter_Playtoons::setupOpcodesFunc() { Inter_v6::setupOpcodesFunc(); CLEAROPCODEFUNC(0x3D); - + OPCODEFUNC(0x0B, oPlaytoons_printText); OPCODEFUNC(0x1B, oPlaytoons_F_1B); OPCODEFUNC(0x27, oPlaytoons_freeSprite); OPCODEFUNC(0x3F, oPlaytoons_checkData); @@ -94,6 +95,95 @@ void Inter_Playtoons::setupOpcodesFunc() { void Inter_Playtoons::setupOpcodesGob() { } +bool Inter_Playtoons::oPlaytoons_printText(OpFuncParams ¶ms) { + char buf[60]; + int i; + int16 oldTransparency; + + _vm->_draw->_destSpriteX = _vm->_game->_script->readValExpr(); + _vm->_draw->_destSpriteY = _vm->_game->_script->readValExpr(); + + _vm->_draw->_backColor = _vm->_game->_script->readValExpr(); + _vm->_draw->_frontColor = _vm->_game->_script->readValExpr(); + _vm->_draw->_fontIndex = _vm->_game->_script->readValExpr(); + _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; + } + +// colMod is read from conf file (_off_=xxx). +// in Playtoons, it's not present in the conf file, thus always equal to the default value (0). +// Maybe used in ADIs... +// if (!_vm->_draw->_transparency) +// _vm->_draw->_backColor += colMod; +// _vm->_draw->_frontColor += colMod; + + oldTransparency = _vm->_draw->_transparency; + do { + for (i = 0; (_vm->_game->_script->peekChar() != '.') && + (_vm->_game->_script->peekByte() != 200); i++) { + buf[i] = _vm->_game->_script->readChar(); + } + + if (_vm->_game->_script->peekByte() != 200) { + _vm->_game->_script->skip(1); + switch (_vm->_game->_script->peekByte()) { + case TYPE_VAR_INT8: + case TYPE_ARRAY_INT8: + sprintf(buf + i, "%d", + (int8) READ_VARO_UINT8(_vm->_game->_script->readVarIndex())); + break; + + case TYPE_VAR_INT16: + case TYPE_VAR_INT32_AS_INT16: + case TYPE_ARRAY_INT16: + sprintf(buf + i, "%d", + (int16) READ_VARO_UINT16(_vm->_game->_script->readVarIndex())); + break; + + case TYPE_VAR_INT32: + case TYPE_ARRAY_INT32: + sprintf(buf + i, "%d", + VAR_OFFSET(_vm->_game->_script->readVarIndex())); + break; + + case TYPE_VAR_STR: + case TYPE_ARRAY_STR: + sprintf(buf + i, "%s", + GET_VARO_STR(_vm->_game->_script->readVarIndex())); + break; + } + _vm->_game->_script->skip(1); + } else + buf[i] = 0; + + if (_vm->_game->_script->peekByte() == 200) { + _vm->_draw->_spriteBottom = _vm->_draw->_fonts[_vm->_draw->_fontIndex]->getCharHeight(); + _vm->_draw->_spriteRight = _vm->_draw->stringLength(_vm->_draw->_textToPrint, _vm->_draw->_fontIndex); + _vm->_draw->adjustCoords(1, &_vm->_draw->_spriteBottom, &_vm->_draw->_spriteRight); + if (_vm->_draw->_transparency == 0) { + _vm->_draw->spriteOperation(DRAW_FILLRECT); + _vm->_draw->_transparency = 1; + } + + warning("print %s", _vm->_draw->_textToPrint); + + _vm->_draw->spriteOperation(DRAW_PRINTTEXT); + _vm->_draw->_transparency = oldTransparency; + i = 0; + } else + i = strlen(buf); + } while (_vm->_game->_script->peekByte() != 200); + + _vm->_game->_script->skip(1); + + return false; +} + bool Inter_Playtoons::oPlaytoons_F_1B(OpFuncParams ¶ms) { int16 shortId; int16 var2; |