diff options
author | Max Horn | 2003-05-25 20:21:28 +0000 |
---|---|---|
committer | Max Horn | 2003-05-25 20:21:28 +0000 |
commit | b797a34526d3bb021b07b74b5881b7279cec8dca (patch) | |
tree | d7124ec333d4bdc556a5544836af94038bbea790 | |
parent | 30d9dde76cc76df58b63be12c299e0ab0738c419 (diff) | |
download | scummvm-rg350-b797a34526d3bb021b07b74b5881b7279cec8dca.tar.gz scummvm-rg350-b797a34526d3bb021b07b74b5881b7279cec8dca.tar.bz2 scummvm-rg350-b797a34526d3bb021b07b74b5881b7279cec8dca.zip |
fixed V2 font decoder; added french V2 font
svn-id: r7967
-rw-r--r-- | scumm/charset.cpp | 155 |
1 files changed, 147 insertions, 8 deletions
diff --git a/scumm/charset.cpp b/scumm/charset.cpp index f7317d064e..a2d0cb365b 100644 --- a/scumm/charset.cpp +++ b/scumm/charset.cpp @@ -197,7 +197,7 @@ void CharsetRenderer::addLinebreaks(int a, byte *str, int pos, int maxwidth) { } // German Zak font (should work for US version too). -static byte charsetDataV2[] = { +static byte germanCharsetDataV2[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18, 0x3e, 0x03, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18, 0x7c, 0xc0, 0x00, @@ -325,11 +325,146 @@ static byte charsetDataV2[] = { 0x66, 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x00, 0x42, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x1c, 0x36, 0x36, 0x7c, 0x66, 0x66, 0x7c, 0x40, - 0x08, 0x0c, 0x0e, 0xff, 0xff, 0x0e, 0x0c, 0x08 + 0x08, 0x0c, 0x0e, 0xff, 0xff, 0x0e, 0x0c, 0x08, }; +// French Zak font (should work for US version too). +static byte frenchCharsetDataV2[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x06, 0x0c, 0x18, 0x3e, 0x03, 0x00, + 0x80, 0xc0, 0x60, 0x30, 0x18, 0x7c, 0xc0, 0x00, + 0x00, 0x03, 0x3e, 0x18, 0x0c, 0x06, 0x03, 0x01, + 0x00, 0xc0, 0x7c, 0x18, 0x30, 0x60, 0xc0, 0x80, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x1f, 0x7f, + 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, + 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18, + 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18, + 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, + 0x18, 0x0c, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x30, 0x18, 0x18, + 0x18, 0x18, 0x30, 0xe0, 0xc0, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x66, 0x3c, 0x18, + 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x3c, 0x18, + 0x18, 0x66, 0xc3, 0xdb, 0xdb, 0xc3, 0x66, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00, + 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x00, + 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00, + 0x62, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x46, 0x00, + 0x3c, 0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x00, + 0x30, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, + 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, + 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, + 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, + 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, + 0x00, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x00, + 0x3c, 0x66, 0x06, 0x0c, 0x30, 0x60, 0x7e, 0x00, + 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00, + 0x06, 0x0e, 0x1e, 0x66, 0x7f, 0x06, 0x06, 0x00, + 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00, + 0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00, + 0x7e, 0x66, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00, + 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, + 0x10, 0x08, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, + 0x18, 0x24, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, + 0x00, 0x00, 0x3c, 0x60, 0x60, 0x3c, 0x18, 0x38, + 0x3c, 0x66, 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00, + 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00, + 0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00, + 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x00, + 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00, + 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, + 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00, + 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00, + 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x00, + 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0e, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x00, + 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00, + 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, + 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x00, + 0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00, + 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00, + 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00, + 0x08, 0x10, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x10, 0x08, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x18, 0x24, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00, + 0x00, 0x6c, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, + 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00, + 0x00, 0x00, 0x3c, 0x60, 0x60, 0x60, 0x3c, 0x00, + 0x00, 0x06, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x00, 0x0e, 0x18, 0x3e, 0x18, 0x18, 0x18, 0x00, + 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x7c, + 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x00, + 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, + 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3c, + 0x00, 0x60, 0x60, 0x6c, 0x78, 0x6c, 0x66, 0x00, + 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0x00, 0x00, 0x66, 0x7f, 0x7f, 0x6b, 0x63, 0x00, + 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, + 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x06, + 0x00, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x60, 0x00, + 0x00, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x00, + 0x00, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x0e, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, + 0x00, 0x00, 0x63, 0x6b, 0x7f, 0x3e, 0x36, 0x00, + 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x0c, 0x78, + 0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00, + 0x18, 0x24, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, + 0x18, 0x24, 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x00, + 0x10, 0x08, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00, + 0x18, 0x24, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00, + 0x08, 0x0c, 0x0e, 0xff, 0xff, 0x0e, 0x0c, 0x08, +}; + + void CharsetRendererV2::setCurID(byte id) { - _fontPtr = charsetDataV2; + + _fontPtr = frenchCharsetDataV2; + _fontPtr = germanCharsetDataV2; #if 0 // Decompress weird encoding in which the Zak executable contains the font. @@ -339,10 +474,13 @@ void CharsetRendererV2::setCurID(byte id) { // int count = 0, len; byte b; - for (int offset = 0; offset < (int)sizeof(charsetDataV2); offset++) { - if (charsetDataV2[offset+1] == 0x00 && charsetDataV2[offset+2] == 0xB2) { - b = charsetDataV2[offset+3]; - len = charsetDataV2[offset+4]; + const byte *data = frenchCharsetDataV2; + const int size = sizeof(frenchCharsetDataV2); + for (int offset = 0; offset < size; offset++) { + if (data[offset+1] == 0x00 && data[offset+2] == 0xB2 && + data[offset+5] == 0x00 && data[offset+6] == 0xB0) { + b = data[offset+3]; + len = data[offset+4]; while (len--) { printf("0x%02x, ", b); count++; @@ -351,13 +489,14 @@ void CharsetRendererV2::setCurID(byte id) { } offset += 6; } else { - printf("0x%02x, ", charsetDataV2[offset]); + printf("0x%02x, ", data[offset]); count++; if (count % 8 == 0) printf("\n"); } } printf("\n"); + exit(0); #endif } |