[Scummvm-cvs-logs] CVS: scummvm/scumm actor.h,1.1.1.1,1.2 scumm.h,1.22,1.23 string.cpp,1.16,1.17
Max Horn
fingolfin at users.sourceforge.net
Thu Sep 19 16:50:04 CEST 2002
Update of /cvsroot/scummvm/scummvm/scumm
In directory usw-pr-cvs1:/tmp/cvs-serv10845/scumm
Modified Files:
actor.h scumm.h string.cpp
Log Message:
based on my findings for guifont, I changed string.cpp to read the char width table for OLD256 games! yippi! some more code cleanup, and marked two struct values as 'to be removed when savegame format changes'
Index: actor.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/actor.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -d -r1.1.1.1 -r1.2
--- actor.h 21 Aug 2002 16:07:25 -0000 1.1.1.1
+++ actor.h 19 Sep 2002 23:49:38 -0000 1.2
@@ -91,7 +91,7 @@
uint speedx, speedy;
byte frame;
byte walkbox;
- byte mask; // This field is *NOT* used anymore, only kept around to make saveload.cpp happy
+ byte mask; // FIXME: This field is *NOT* used - remove next time save game format changes
byte animProgress, animSpeed;
int16 new_1, new_2;
uint16 talk_script, walk_script;
Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- scumm.h 19 Sep 2002 21:45:56 -0000 1.22
+++ scumm.h 19 Sep 2002 23:49:38 -0000 1.23
@@ -197,7 +197,7 @@
int _bufPos;
byte _unk12, _disableOffsX;
- byte *_ptr;
+ byte *_ptr; // FIXME: This field is *NOT* used - remove next time save game format changes
byte _unk2, _bpp;
byte _invNumBits;
uint32 _charOffs;
@@ -220,7 +220,7 @@
void drawBits();
void printChar(int chr);
void printCharOld(int chr);
- int getSpacing(char chr);
+ int getSpacing(char chr, byte *charset);
int getStringWidth(int a, byte *str, int pos);
void addLinebreaks(int a, byte *str, int pos, int maxwidth);
};
Index: string.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/string.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- string.cpp 18 Sep 2002 18:48:54 -0000 1.16
+++ string.cpp 19 Sep 2002 23:49:38 -0000 1.17
@@ -28,7 +28,7 @@
int CharsetRenderer::getStringWidth(int arg, byte *text, int pos)
{
byte *ptr;
- int width, offs, w;
+ int width;
byte chr;
width = 1;
@@ -69,19 +69,7 @@
continue;
}
}
- if (_vm->_features & GF_OLD256) {
- width += getSpacing(chr);
- } else {
- offs = READ_LE_UINT32(ptr + chr * 4 + 4);
- if (offs) {
- if (ptr[offs + 2] >= 0x80) {
- w = ptr[offs + 2] - 0x100;
- } else {
- w = ptr[offs + 2];
- }
- width += ptr[offs] + w;
- }
- }
+ width += getSpacing(chr, ptr);
}
return width;
}
@@ -90,7 +78,6 @@
{
int lastspace = -1;
int curw = 1;
- int offs, w;
byte *ptr;
byte chr;
@@ -138,19 +125,7 @@
if (chr == ' ')
lastspace = pos - 1;
- if (_vm->_features & GF_OLD256) {
- curw += getSpacing(chr);
- } else {
- offs = READ_LE_UINT32(ptr + chr * 4 + 4);
- if (offs) {
- if (ptr[offs + 2] >= 0x80) {
- w = ptr[offs + 2] - 0x100;
- } else {
- w = ptr[offs + 2];
- }
- curw += w + ptr[offs];
- }
- }
+ curw += getSpacing(chr, ptr);
if (lastspace == -1)
continue;
if (curw > maxwidth) {
@@ -431,7 +406,11 @@
buffer += 2;
break;
case 14: {
- int oldy = getResourceAddress(rtCharset, charset._curId)[30];
+ int oldy;
+ if (_features & GF_SMALL_HEADER)
+ oldy = getResourceAddress(rtCharset, charset._curId)[18];
+ else
+ oldy = getResourceAddress(rtCharset, charset._curId)[30];
charset._curId = *buffer++;
buffer += 2;
@@ -440,7 +419,10 @@
charset._colorMap[i] = _charsetData[charset._curId][i - 12];
else
charset._colorMap[i] = _charsetData[charset._curId][i];
- charset._ypos2 -= getResourceAddress(rtCharset, charset._curId)[30] - oldy;
+ if (_features & GF_SMALL_HEADER)
+ charset._ypos2 -= getResourceAddress(rtCharset, charset._curId)[18] - oldy;
+ else
+ charset._ypos2 -= getResourceAddress(rtCharset, charset._curId)[30] - oldy;
break;
}
default:
@@ -828,6 +810,10 @@
if (chr == '@')
return;
+ byte *ptr = _vm->getResourceAddress(rtCharset, _curId) + 29;
+ if (_vm->_features & GF_SMALL_HEADER)
+ ptr -= 12;
+
if (_unk12) {
_strLeft = _left;
_strTop = _top;
@@ -851,7 +837,8 @@
}
}
- _left += getSpacing(chr);
+ // FIXME
+ _left += getSpacing(chr, ptr);
if (_left > _strRight)
_strRight = _left;
@@ -868,29 +855,30 @@
VirtScreen *vs;
_vm->checkRange(_vm->_maxCharsets - 1, 1, _curId, "Printing with bad charset %d");
+
if ((vs = _vm->findVirtScreen(_top)) == NULL)
return;
if (chr == '@')
return;
- _ptr = _vm->getResourceAddress(rtCharset, _curId) + 29;
+ byte *ptr = _vm->getResourceAddress(rtCharset, _curId) + 29;
if (_vm->_features & GF_SMALL_HEADER)
- _ptr -= 12;
+ ptr -= 12;
- _bpp = _unk2 = *_ptr;
+ _bpp = _unk2 = *ptr;
_invNumBits = 8 - _bpp;
_bitMask = 0xFF << _invNumBits;
_colorMap[1] = _color;
- _charOffs = READ_LE_UINT32(_ptr + chr * 4 + 4);
+ _charOffs = READ_LE_UINT32(ptr + chr * 4 + 4);
if (!_charOffs)
return;
assert(_charOffs < 0x10000);
- _charPtr = _ptr + _charOffs;
+ _charPtr = ptr + _charOffs;
_width = _charPtr[0];
_height = _charPtr[1];
@@ -950,23 +938,14 @@
_vm->updateDirtyRect(vs->number, _left, right, _drawTop, _bottom, 0);
-#if defined(OLD)
- if (vs->number == 0)
- _hasMask = true;
-#else
if (vs->number != 0)
_blitAlso = false;
if (vs->number == 0 && _blitAlso == 0)
_hasMask = true;
-#endif
_dest_ptr = _backbuff_ptr = vs->screenPtr + vs->xstart + _drawTop * _vm->_realWidth + _left;
-#if !defined(OLD)
if (_blitAlso) {
-#else
- if (1) {
-#endif
_dest_ptr = _bgbak_ptr = _vm->getResourceAddress(rtBuffer, vs->number + 5)
+ vs->xstart + _drawTop * _vm->_realWidth + _left;
}
@@ -979,10 +958,8 @@
drawBits();
-#if !defined(OLD)
if (_blitAlso)
_vm->blit(_backbuff_ptr, _bgbak_ptr, _width, _height);
-#endif
_left += _width;
if (_left > _strRight)
@@ -1042,44 +1019,25 @@
}
// do spacing for variable width old-style font
-int CharsetRenderer::getSpacing(char chr)
+int CharsetRenderer::getSpacing(char chr, byte *ptr)
{
- int space;
-
- if (_curId == 1) {
- switch (chr) {
- case '.':
- case ':':
- case ';':
- case 'i':
- case '\'':
- case 'I':
- case '!':
- space = 2;
- break;
- case 'l':
- space = 3;
- break;
- case ' ':
- space = 4;
- break;
- case '(':
- case ')':
- space = 5;
- break;
- case 'W':
- case 'w':
- case 'N':
- case 'M':
- case 'm':
- space = 8;
- break;
- default:
- space = 6;
+ int spacing;
+
+ if (_vm->_features & GF_OLD256) {
+ spacing = *(ptr - 11 + chr);
+ } else {
+ int offs = READ_LE_UINT32(ptr + chr * 4 + 4);
+ if (offs) {
+ spacing = ptr[offs];
+ if (ptr[offs + 2] >= 0x80) {
+ spacing += ptr[offs + 2] - 0x100;
+ } else {
+ spacing += ptr[offs + 2];
+ }
}
- } else
- space = 7;
- return space;
+ }
+
+ return spacing;
}
void Scumm::loadLanguageBundle() {
More information about the Scummvm-git-logs
mailing list