aboutsummaryrefslogtreecommitdiff
path: root/scumm
diff options
context:
space:
mode:
authorJames Brown2002-10-06 07:23:08 +0000
committerJames Brown2002-10-06 07:23:08 +0000
commitd19260af2cef193c4964f5fa4ea990d7e91be8fb (patch)
tree2faa880537a3a9c529564918c6759136622c59b9 /scumm
parent9b93506bcb881e7f0e5018e08b2b6cd9e422ed3a (diff)
downloadscummvm-rg350-d19260af2cef193c4964f5fa4ea990d7e91be8fb.tar.gz
scummvm-rg350-d19260af2cef193c4964f5fa4ea990d7e91be8fb.tar.bz2
scummvm-rg350-d19260af2cef193c4964f5fa4ea990d7e91be8fb.zip
Fix drawDescString - still needs centering corrections
svn-id: r5094
Diffstat (limited to 'scumm')
-rw-r--r--scumm/script_v2.cpp4
-rw-r--r--scumm/scumm.h2
-rw-r--r--scumm/string.cpp78
3 files changed, 31 insertions, 53 deletions
diff --git a/scumm/script_v2.cpp b/scumm/script_v2.cpp
index 9f51f739d1..f8c9575c47 100644
--- a/scumm/script_v2.cpp
+++ b/scumm/script_v2.cpp
@@ -2827,9 +2827,7 @@ void Scumm::o6_miscOps()
_string[0].color = (byte)args[2];
_string[0].xpos = args[3];
_string[0].ypos = args[4];
-
- addMessageToStack(getStringAddressVar(VAR_STRING2DRAW));
- drawDescString();
+ drawDescString(getStringAddressVar(VAR_STRING2DRAW));
}
break;
case 17:
diff --git a/scumm/scumm.h b/scumm/scumm.h
index e562b7554a..720aeb7b92 100644
--- a/scumm/scumm.h
+++ b/scumm/scumm.h
@@ -939,7 +939,7 @@ public:
int hasCharsetMask(int x, int y, int x2, int y2);
void CHARSET_1();
void description();
- void drawDescString();
+ void drawDescString(byte *msg);
byte *_msgPtrToAdd;
byte *addMessageToStack(byte *msg);
void addIntToStack(int var);
diff --git a/scumm/string.cpp b/scumm/string.cpp
index 060e4efd71..db1f258a22 100644
--- a/scumm/string.cpp
+++ b/scumm/string.cpp
@@ -504,70 +504,50 @@ void Scumm::description()
gdi._mask_bottom = charset._strBottom;
}
-void Scumm::drawDescString()
+void Scumm::drawDescString(byte *msg)
{
- byte byte1=0, chr, *buf, *charsetptr;
- uint color, i;
+ byte c, *buf, buffer[256];
- buf = charset._buffer;
- charset._bufPos = 0;
+ buf = _msgPtrToAdd = buffer;
+ addMessageToStack(msg);
- charset._left2 = charset._left = _string[0].xpos;
+ charset._bufPos = 0;
charset._top = _string[0].ypos;
+ charset._left = _string[0].xpos;
+ charset._left2 = _string[0].xpos;
+ charset._right = _realWidth - 1;
+ charset._xpos2 = _string[0].xpos;
+ charset._ypos2 = _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;
+ // Center text
+ charset._xpos2 -= charset.getStringWidth(0, buffer, 0) >> 1;
+ if (charset._xpos2 < 0)
+ charset._xpos2 = 0;
+
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);
+ do {
+ c = *buf++;
+ if (c == 0) {
+ _haveMsg = 1;
+ break;
}
- }
+ if (c != 0xFF) {
+ charset._left = charset._xpos2;
+ charset._top = charset._ypos2;
+ charset.printChar(c);
+ charset._xpos2 = charset._left;
+ charset._ypos2 = charset._top;
+ continue;
+ }
+ } while (1);
gdi._mask_left = charset._strLeft;
gdi._mask_right = charset._strRight;