aboutsummaryrefslogtreecommitdiff
path: root/string.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'string.cpp')
-rw-r--r--string.cpp49
1 files changed, 40 insertions, 9 deletions
diff --git a/string.cpp b/string.cpp
index 5ef0857329..2753653214 100644
--- a/string.cpp
+++ b/string.cpp
@@ -29,6 +29,8 @@ int CharsetRenderer::getStringWidth(int arg, byte *text, int pos) {
width = 1;
ptr = _vm->getResourceAddress(rtCharset, _curId) + 29;
+ if(_vm->_features & GF_SMALL_HEADER)
+ ptr-=12;
while ( (chr = text[pos++]) != 0) {
if (chr==0xD)
@@ -57,6 +59,8 @@ int CharsetRenderer::getStringWidth(int arg, byte *text, int pos) {
int set = text[pos] | (text[pos+1]<<8);
pos+=2;
ptr = _vm->getResourceAddress(rtCharset, set) + 29;
+ if(_vm->_features & GF_SMALL_HEADER)
+ ptr-=12;
continue;
}
}
@@ -82,6 +86,8 @@ void CharsetRenderer::addLinebreaks(int a, byte *str, int pos, int maxwidth) {
byte chr;
ptr = _vm->getResourceAddress(rtCharset, _curId) + 29;
+ if(_vm->_features & GF_SMALL_HEADER)
+ ptr-=12;
while ( (chr=str[pos++]) != 0) {
if (chr=='@')
@@ -114,6 +120,8 @@ void CharsetRenderer::addLinebreaks(int a, byte *str, int pos, int maxwidth) {
int set = str[pos] | (str[pos+1]<<8);
pos+=2;
ptr = _vm->getResourceAddress(rtCharset, set) + 29;
+ if(_vm->_features & GF_SMALL_HEADER)
+ ptr-=12;
continue;
}
}
@@ -235,8 +243,11 @@ void Scumm::CHARSET_1() {
_bkColor = 0;
for (i=0; i<4; i++)
- charset._colorMap[i] = _charsetData[charset._curId][i];
-
+ if(_features & GF_SMALL_HEADER)
+ charset._colorMap[i] = _charsetData[charset._curId][i-12];
+ else
+ charset._colorMap[i] = _charsetData[charset._curId][i];
+
if (_keepText) {
charset._strLeft = gdi._mask_left;
charset._strRight = gdi._mask_right;
@@ -311,9 +322,9 @@ newLine:;
charset._top = charset._ypos2;
if (!(_features&GF_AFTER_V6)) {
- if (!_vars[VAR_V5_CHARFLAG]) {
+// if (!_vars[VAR_V5_CHARFLAG]) { /* FIXME */
charset.printChar(c);
- }
+// }
} else {
charset.printChar(c);
}
@@ -354,7 +365,10 @@ newLine:;
charset._curId = *buffer++;
buffer += 2;
for (i=0; i<4; i++)
- charset._colorMap[i] = _charsetData[charset._curId][i];
+ if(_features & GF_SMALL_HEADER)
+ charset._colorMap[i] = _charsetData[charset._curId][i-12];
+ else
+ charset._colorMap[i] = _charsetData[charset._curId][i];
charset._ypos2 -= getResourceAddress(rtCharset,charset._curId)[30] - oldy;
} else if (c==12) {
int color;
@@ -402,9 +416,14 @@ void Scumm::drawString(int a) {
charsetptr = getResourceAddress(rtCharset, charset._curId);
assert(charsetptr);
charsetptr += 29;
+ if(_features & GF_SMALL_HEADER)
+ charsetptr-=12;
for(i=0; i<4; i++)
- charset._colorMap[i] = _charsetData[charset._curId][i];
+ if(_features & GF_SMALL_HEADER)
+ charset._colorMap[i] = _charsetData[charset._curId][i-12];
+ else
+ charset._colorMap[i] = _charsetData[charset._curId][i];
byte1 = charsetptr[1];
@@ -485,6 +504,9 @@ byte *Scumm::addMessageToStack(byte *msg) {
if (ptr==NULL)
error("Message stack not allocated");
+ if (msg==NULL)
+ error("Bad message in addMessageToStack");
+
while ( (chr=*msg++) != 0) {
if (num > 500)
error("Message stack overflow");
@@ -623,14 +645,20 @@ void Scumm::unkAddMsgToStack5(int var) {
void Scumm::initCharset(int charsetno) {
int i;
- if (!getResourceAddress(rtCharset, charsetno))
- loadCharset(charsetno);
+ if (_features & GF_SMALL_HEADER)
+ loadCharset(charsetno);
+ else
+ if (!getResourceAddress(rtCharset, charsetno))
+ loadCharset(charsetno);
string[0].t_charset = charsetno;
string[1].t_charset = charsetno;
for (i=0; i<0x10; i++)
- charset._colorMap[i] = _charsetData[charsetno][i];
+ if(_features & GF_SMALL_HEADER)
+ charset._colorMap[i] = _charsetData[charset._curId][i-12];
+ else
+ charset._colorMap[i] = _charsetData[charset._curId][i];
}
void CharsetRenderer::printChar(int chr) {
@@ -644,6 +672,9 @@ void CharsetRenderer::printChar(int chr) {
if (chr=='@')
return;
+ if (_vm->_features & GF_SMALL_HEADER)
+ _ptr -= 12;
+
_ptr = _vm->getResourceAddress(rtCharset, _curId) + 29;
_bpp = _unk2 = *_ptr;