[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