aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2003-05-25 20:21:28 +0000
committerMax Horn2003-05-25 20:21:28 +0000
commitb797a34526d3bb021b07b74b5881b7279cec8dca (patch)
treed7124ec333d4bdc556a5544836af94038bbea790
parent30d9dde76cc76df58b63be12c299e0ab0738c419 (diff)
downloadscummvm-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.cpp155
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
}