aboutsummaryrefslogtreecommitdiff
path: root/engines/saga/font.cpp
diff options
context:
space:
mode:
authorTravis Howell2009-07-11 11:48:01 +0000
committerTravis Howell2009-07-11 11:48:01 +0000
commite3398c0cc73999524e92774fb889a0d22eea552b (patch)
treeff1534d1e5e72f1965b747b21b594ef30d5e16ab /engines/saga/font.cpp
parent0577bee93893a55be1b2a067ec18f3c8ad462358 (diff)
parent2ceea652e62b301adea4628cebe4116191aa4998 (diff)
downloadscummvm-rg350-e3398c0cc73999524e92774fb889a0d22eea552b.tar.gz
scummvm-rg350-e3398c0cc73999524e92774fb889a0d22eea552b.tar.bz2
scummvm-rg350-e3398c0cc73999524e92774fb889a0d22eea552b.zip
Merged revisions 42360-42361,42364-42366,42368-42378,42380 via svnmerge from
https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk ........ r42360 | Kirben | 2009-07-11 10:38:50 +1000 (Sat, 11 Jul 2009) | 1 line Fix recent regression in AGOSEngine_Simon1::drawImage(). ........ r42361 | wjpalenstijn | 2009-07-11 10:47:32 +1000 (Sat, 11 Jul 2009) | 3 lines Fix SAGA outline generation algorithm for characters that are copies of earlier characters. (5 characters in IHNM.) This fixes #1904624. ........ r42364 | Kirben | 2009-07-11 11:40:53 +1000 (Sat, 11 Jul 2009) | 1 line Fix bug #2819628 - DETECTOR: Atlantis CD sets wrong gui options. ........ r42365 | lordhoto | 2009-07-11 11:54:27 +1000 (Sat, 11 Jul 2009) | 1 line Fix graphics not updating, when loading a save in Kyra1. This fixes problems when loading saves in rooms like Brynn's temple, which play animations directly on scene enter. ........ r42366 | lordhoto | 2009-07-11 11:54:42 +1000 (Sat, 11 Jul 2009) | 1 line Removed the now uneeded "Screen::_disableScreen" flag. ........ r42368 | dreammaster | 2009-07-11 15:10:13 +1000 (Sat, 11 Jul 2009) | 1 line Bugfix to show the mouse cursor when restarting the game after returning to launcher ........ r42369 | dreammaster | 2009-07-11 15:12:17 +1000 (Sat, 11 Jul 2009) | 1 line Active background screens are now properly freed when the game exits ........ r42370 | dreammaster | 2009-07-11 15:14:42 +1000 (Sat, 11 Jul 2009) | 1 line Added initialisation of paging screens when the game starts ........ r42371 | thebluegr | 2009-07-11 16:19:29 +1000 (Sat, 11 Jul 2009) | 1 line Fixed regression in the script parser from commit 42260 ........ r42372 | thebluegr | 2009-07-11 16:33:19 +1000 (Sat, 11 Jul 2009) | 1 line Applied a slightly modified patch from clone2727 which adds static selector names to some demos which are missing them (KQ4, LSL1, LSL3, Iceman and Christmas1992) ........ r42373 | thebluegr | 2009-07-11 16:34:25 +1000 (Sat, 11 Jul 2009) | 1 line Removed an invalid detection entry ........ r42374 | thebluegr | 2009-07-11 16:43:01 +1000 (Sat, 11 Jul 2009) | 1 line Applied slightly modified patch 2819002 - "SCI: resource-view-patch on SQ5/German fix" ........ r42375 | thebluegr | 2009-07-11 16:53:39 +1000 (Sat, 11 Jul 2009) | 1 line Applied patch 2818733 - "SCI: Timer iterator for audio resources played via doSound" ........ r42376 | Kirben | 2009-07-11 17:03:28 +1000 (Sat, 11 Jul 2009) | 1 line Only error out, if checkStaticSelectorNames() fails. ........ r42377 | dreammaster | 2009-07-11 18:16:55 +1000 (Sat, 11 Jul 2009) | 1 line Bugfix to properly save the currently playing midi music when saving a scene ........ r42378 | wjpalenstijn | 2009-07-11 19:45:25 +1000 (Sat, 11 Jul 2009) | 1 line Fix oversight in r42361 and also handle consecutive copied characters in SAGA. ........ r42380 | drmccoy | 2009-07-11 20:24:06 +1000 (Sat, 11 Jul 2009) | 1 line Explicitely instantiate the decompressWizImage() templates, so that they won't be optimized away, as they are also used in akos.cpp ........ svn-id: r42381
Diffstat (limited to 'engines/saga/font.cpp')
-rw-r--r--engines/saga/font.cpp32
1 files changed, 30 insertions, 2 deletions
diff --git a/engines/saga/font.cpp b/engines/saga/font.cpp
index 175ab01478..d58d1a8900 100644
--- a/engines/saga/font.cpp
+++ b/engines/saga/font.cpp
@@ -154,6 +154,7 @@ void Font::createOutline(FontData *font) {
unsigned char *destPointer2;
unsigned char *destPointer3;
unsigned char charRep;
+ int nextIndex = 0;
// Populate new font style character data
@@ -165,6 +166,25 @@ void Font::createOutline(FontData *font) {
index += indexOffset;
}
+ bool skip = false;
+
+ if (font->normal.fontCharEntry[i].width != 0 && font->normal.fontCharEntry[i].index < nextIndex) {
+ // 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 +193,18 @@ void Font::createOutline(FontData *font) {
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;
+ nextIndex = font->normal.fontCharEntry[i].index + oldByteWidth;
+ }
}
debug(2, "New row length: %d", newRowLength);
@@ -196,6 +220,10 @@ void Font::createOutline(FontData *font) {
// 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;