diff options
author | Strangerke | 2013-07-03 07:59:25 +0200 |
---|---|---|
committer | Strangerke | 2013-07-03 07:59:25 +0200 |
commit | cabe0ed33d64cee1b8bec5be143733e655c9ab3f (patch) | |
tree | 26bab340a1b820143016f7ad72705b2304b13fa1 | |
parent | a116486b777c946f9f4f3181c6d8f155b49f8279 (diff) | |
download | scummvm-rg350-cabe0ed33d64cee1b8bec5be143733e655c9ab3f.tar.gz scummvm-rg350-cabe0ed33d64cee1b8bec5be143733e655c9ab3f.tar.bz2 scummvm-rg350-cabe0ed33d64cee1b8bec5be143733e655c9ab3f.zip |
MORTEVIELLE: Fix text decryption in German version
-rw-r--r-- | engines/mortevielle/utils.cpp | 60 |
1 files changed, 44 insertions, 16 deletions
diff --git a/engines/mortevielle/utils.cpp b/engines/mortevielle/utils.cpp index 8c2d375359..fcf55cbfeb 100644 --- a/engines/mortevielle/utils.cpp +++ b/engines/mortevielle/utils.cpp @@ -1798,7 +1798,7 @@ void MortevielleEngine::decodeNumber(byte *pStart, int count) { } } -const byte tabdr[32] = { +const byte tabdrFr[32] = { 32, 101, 115, 97, 114, 105, 110, 117, 116, 111, 108, 13, 100, 99, 112, 109, 46, 118, 130, 39, 102, @@ -1806,20 +1806,45 @@ const byte tabdr[32] = { 85, 106, 30, 31 }; -const byte tab30[32] = { +const byte tab30Fr[32] = { 69, 67, 74, 138, 133, 120, 77, 122, 121, 68, 65, 63, 73, 80, 83, 82, 156, 45, 58, 79, 49, 86, 78, 84, 71, 81, 64, 66, 135, 34, 136, 91 }; -const byte tab31[32]= { +const byte tab31Fr[32]= { 93, 47, 48, 53, 50, 70, 124, 75, 72, 147, 140, 150, 151, 57, 56, 51, 107, 139, 55, 89, 131, 37, 54, 88, 119, 0, 0, 0, 0, 0, 0, 0 }; +const byte tabdrDe[32] = { + 0x20, 0x65, 0x6E, 0x69, 0x73, 0x72, 0x74, + 0x68, 0x61, 0x75, 0x0D, 0x63, 0x6C, 0x64, + 0x6D, 0x6F, 0x67, 0x2E, 0x62, 0x66, 0x53, + 0x2C, 0x77, 0x45, 0x7A, 0x6B, 0x44, 0x76, + 0x9C, 0x47, 0x1E, 0x1F +}; + +const byte tab30De[32] = { + 0x49, 0x4D, 0x21, 0x42, 0x4C, 0x70, 0x41, 0x52, + 0x57, 0x4E, 0x48, 0x3F, 0x46, 0x50, 0x55, 0x4B, + 0x5A, 0x4A, 0x54, 0x31, 0x4F, 0x56, 0x79, 0x3A, + 0x6A, 0x5B, 0x5D, 0x40, 0x22, 0x2F, 0x30, 0x35 +}; + +const byte tab31De[32]= { + 0x78, 0x2D, 0x32, 0x82, 0x43, 0x39, 0x33, 0x38, + 0x7C, 0x27, 0x37, 0x3B, 0x25, 0x28, 0x29, 0x36, + 0x51, 0x59, 0x71, 0x81, 0x87, 0x88, 0x93, 0, + 0, 0, 0, 0, 0, 0, 0, 0 +}; + +const byte *tabdr, *tab30, *tab31; +uint16 ctrlChar; + void MortevielleEngine::cinq_huit(char &c, int &idx, byte &pt, bool &the_end) { uint16 oct, ocd; @@ -1836,13 +1861,10 @@ void MortevielleEngine::cinq_huit(char &c, int &idx, byte &pt, bool &the_end) { oct = (uint)oct >> pt; } - switch (oct) { - case 11: + if (oct == ctrlChar) { c = '$'; the_end = true; - break; - case 30: - case 31: + } else if (oct == 30 || oct == 31) { ocd = _inpBuffer[idx]; ocd = (uint16)(ocd << (16 - pt)) >> (16 - pt); if (pt < 6) { @@ -1864,10 +1886,8 @@ void MortevielleEngine::cinq_huit(char &c, int &idx, byte &pt, bool &the_end) { the_end = true; c = '#'; } - break; - default: + } else { c = chr(tabdr[oct]); - break; } } @@ -2081,11 +2101,19 @@ void MortevielleEngine::loadTexts() { return; } } - if (!ntpFile.open("TXX.NTP")) { - if (!ntpFile.open("TXX.IND")) { - warning("Missing file - TXX.NTP or .IND - Switching to DAT file"); - return; - } + if (ntpFile.open("TXX.NTP")) { + tab30 = tab30Fr; + tab31 = tab31Fr; + tabdr = tabdrFr; + ctrlChar = 11; + } else if (ntpFile.open("TXX.IND")) { + tab30 = tab30De; + tab31 = tab31De; + tabdr = tabdrDe; + ctrlChar = 10; + } else { + warning("Missing file - TXX.NTP or .IND - Switching to DAT file"); + return; } if ((inpFile.size() > (kMaxTi * 2)) || (ntpFile.size() > (kMaxTd * 3))) { |