From 9612002d78bbf76a80f462ea1036e20739b2d9ca Mon Sep 17 00:00:00 2001 From: James Brown Date: Sun, 6 Oct 2002 06:09:32 +0000 Subject: Full Throttle / The Dig fixes. drawDescString (for Full Throttle object names, in the 'ring of fire') is still somewhat broken. Feel free to fix ;) svn-id: r5090 --- scumm/string.cpp | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) (limited to 'scumm/string.cpp') diff --git a/scumm/string.cpp b/scumm/string.cpp index 3d77a59131..5612a17a5b 100644 --- a/scumm/string.cpp +++ b/scumm/string.cpp @@ -504,6 +504,77 @@ void Scumm::description() gdi._mask_bottom = charset._strBottom; } +void Scumm::drawDescString() +{ + byte byte1=0, chr, *buf, *charsetptr; + uint color, i; + + buf = charset._buffer; + charset._bufPos = 0; + + charset._left2 = charset._left = _string[0].xpos; + charset._top = _string[0].ypos; + charset._curId = _string[0].charset; + charset._center = _string[0].center; + charset._right = _string[0].right; + charset._color = _string[0].color; + + charset._xpos2 = _string[0].xpos; + charset._ypos2 = _string[0].ypos; + charset._disableOffsX = charset._unk12 = 1; + _bkColor = 0; + _talkDelay = 1; + + charset._left -= charset.getStringWidth(0, buf, 0) >> 1; + + restoreCharsetBg(); + + // Read color mapping and height information + charsetptr = getResourceAddress(rtCharset, charset._curId); + assert(charsetptr); + charsetptr += 29; + for (i = 0; i < 4; i++) + charset._colorMap[i] = _charsetData[charset._curId][i]; + + byte1 = charsetptr[1]; // Character height + + for (i = 0; (chr = buf[i++]) != 0;) { + if (chr == 254) + chr = 255; + if (chr == 255) { + chr = buf[i++]; + switch (chr) { + case 9: + case 10: + case 13: + case 14: + i += 2; + break; + case 1: + case 8: + charset._left = charset._left2 - charset.getStringWidth(0, buf, i); + charset._top += byte1; + break; + case 12: + color = buf[i] + (buf[i + 1] << 8); + i += 2; + if (color == 0xFF) + charset._color = _string[0].color; + else + charset._color = color; + break; + } + } else { + charset.printChar(chr); + } + } + + gdi._mask_left = charset._strLeft; + gdi._mask_right = charset._strRight; + gdi._mask_top = charset._strTop; + gdi._mask_bottom = charset._strBottom; +} + void Scumm::drawString(int a) { byte buf[256]; @@ -560,6 +631,10 @@ void Scumm::drawString(int a) charset._left -= charset.getStringWidth(a, buf, 0) >> 1; } + if (!_features & GF_AFTER_V7) + charset._ignoreCharsetMask = 1; + + // Verb text should never time out. if (a == 4) _talkDelay = -1; -- cgit v1.2.3