[Scummvm-cvs-logs] SF.net SVN: scummvm:[42361] scummvm/trunk/engines/saga/font.cpp
wjpalenstijn at users.sourceforge.net
wjpalenstijn at users.sourceforge.net
Sat Jul 11 02:47:32 CEST 2009
Revision: 42361
http://scummvm.svn.sourceforge.net/scummvm/?rev=42361&view=rev
Author: wjpalenstijn
Date: 2009-07-11 00:47:32 +0000 (Sat, 11 Jul 2009)
Log Message:
-----------
Fix SAGA outline generation algorithm for characters
that are copies of earlier characters. (5 characters in IHNM.)
This fixes #1904624.
Modified Paths:
--------------
scummvm/trunk/engines/saga/font.cpp
Modified: scummvm/trunk/engines/saga/font.cpp
===================================================================
--- scummvm/trunk/engines/saga/font.cpp 2009-07-11 00:38:50 UTC (rev 42360)
+++ scummvm/trunk/engines/saga/font.cpp 2009-07-11 00:47:32 UTC (rev 42361)
@@ -165,6 +165,25 @@
index += indexOffset;
}
+ bool skip = false;
+
+ if (i > 0 && font->normal.fontCharEntry[i].width != 0 && font->normal.fontCharEntry[i].index < font->normal.fontCharEntry[i-1].index) {
+ // Some characters are copies of earlier characters.
+ // Look up the original, and make sure not to grow the size of
+ // the outline font twice.
+ skip = true;
+ bool found = false;
+ for (int j = 0; j < i; j++) {
+ if (font->normal.fontCharEntry[i].index == font->normal.fontCharEntry[j].index) {
+ index = font->outline.fontCharEntry[j].index;
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ error("Invalid index backreference in font char %d", i);
+ }
+
font->outline.fontCharEntry[i].index = index;
font->outline.fontCharEntry[i].tracking = font->normal.fontCharEntry[i].tracking;
font->outline.fontCharEntry[i].flag = font->normal.fontCharEntry[i].flag;
@@ -173,14 +192,16 @@
newByteWidth = getByteLen(font->normal.fontCharEntry[i].width + 2);
oldByteWidth = getByteLen(font->normal.fontCharEntry[i].width);
- if (newByteWidth > oldByteWidth) {
+ if (!skip && newByteWidth > oldByteWidth) {
indexOffset++;
}
}
font->outline.fontCharEntry[i].width = font->normal.fontCharEntry[i].width + 2;
font->outline.fontCharEntry[i].byteWidth = newByteWidth;
- newRowLength += newByteWidth;
+
+ if (!skip)
+ newRowLength += newByteWidth;
}
debug(2, "New row length: %d", newRowLength);
@@ -196,6 +217,10 @@
// Generate outline font representation
for (i = 0; i < FONT_CHARCOUNT; i++) {
+ if (i > 0 && font->normal.fontCharEntry[i].index < font->normal.fontCharEntry[i-1].index) {
+ // Skip copies
+ continue;
+ }
for (row = 0; row < font->normal.header.charHeight; row++) {
for (currentByte = 0; currentByte < font->outline.fontCharEntry[i].byteWidth; currentByte++) {
basePointer = font->outline.font + font->outline.fontCharEntry[i].index + currentByte;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list