From f491a2562c396177349a1a3b232d0c37754476f8 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Wed, 25 Dec 2019 13:23:05 +0100 Subject: SCI: Added detection and support for Polish LSL7 Fixes bug #11274 --- engines/sci/detection_tables.h | 9 +++ engines/sci/event.cpp | 143 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+) diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h index 518db2e299..cc7fd3c74a 100644 --- a/engines/sci/detection_tables.h +++ b/engines/sci/detection_tables.h @@ -2925,6 +2925,15 @@ static const struct ADGameDescription SciGameDescriptions[] = { AD_LISTEND}, Common::RU_RUS, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_LSL7 }, + // Larry 7 - Polish DOS (GOG.com release 1.01v2) + // Executable scanning reports "3.000.000", VERSION file reports "1.01" + {"lsl7", "", { + {"resmap.000", 0, "eae93e1b1d1ccc58b4691c371281c95d", 8188}, + {"ressci.000", 0, "89353723488219e25589165d73ed663e", 66965678}, + {"resource.aud", 0, "d7b26b5df5ee6766b2dbd45b427b0074", 417594676}, + AD_LISTEND}, + Common::PL_POL, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO_LSL7 }, + #undef GUIO_LSL7_DEMO #undef GUIO_LSL7 diff --git a/engines/sci/event.cpp b/engines/sci/event.cpp index 2700f54208..6fe4d1f086 100644 --- a/engines/sci/event.cpp +++ b/engines/sci/event.cpp @@ -65,6 +65,140 @@ struct SciKeyConversion { int sciKeyNumlockOn; }; +// Translation table for UTF16->Win1250 (Polish encoding) +// Covers characters 0x80-0xFF. '0' means end of list +static const uint16 UTF16toWin1250[] = { + 0x20AC, + 0x0001, + 0x201A, + 0x0001, + 0x201E, + 0x2026, + 0x2020, + 0x2021, + 0x0001, + 0x2030, + 0x0160, + 0x2039, + 0x015A, + 0x0164, + 0x017D, + 0x0179, + 0x0001, + 0x2018, + 0x2019, + 0x201C, + 0x201D, + 0x2022, + 0x2013, + 0x2014, + 0x0001, + 0x2122, + 0x0161, + 0x203A, + 0x015B, + 0x0165, + 0x017E, + 0x017A, + 0x00A0, + 0x02C7, + 0x02D8, + 0x0141, + 0x00A4, + 0x0104, + 0x00A6, + 0x00A7, + 0x00A8, + 0x00A9, + 0x015E, + 0x00AB, + 0x00AC, + 0x00AD, + 0x00AE, + 0x017B, + 0x00B0, + 0x00B1, + 0x02DB, + 0x0142, + 0x00B4, + 0x00B5, + 0x00B6, + 0x00B7, + 0x00B8, + 0x0105, + 0x015F, + 0x00BB, + 0x013D, + 0x02DD, + 0x013E, + 0x017C, + 0x0154, + 0x00C1, + 0x00C2, + 0x0102, + 0x00C4, + 0x0139, + 0x0106, + 0x00C7, + 0x010C, + 0x00C9, + 0x0118, + 0x00CB, + 0x011A, + 0x00CD, + 0x00CE, + 0x010E, + 0x0110, + 0x0143, + 0x0147, + 0x00D3, + 0x00D4, + 0x0150, + 0x00D6, + 0x00D7, + 0x0158, + 0x016E, + 0x00DA, + 0x0170, + 0x00DC, + 0x00DD, + 0x0162, + 0x00DF, + 0x0155, + 0x00E1, + 0x00E2, + 0x0103, + 0x00E4, + 0x013A, + 0x0107, + 0x00E7, + 0x010D, + 0x00E9, + 0x0119, + 0x00EB, + 0x011B, + 0x00ED, + 0x00EE, + 0x010F, + 0x0111, + 0x0144, + 0x0148, + 0x00F3, + 0x00F4, + 0x0151, + 0x00F6, + 0x00F7, + 0x0159, + 0x016F, + 0x00FA, + 0x0171, + 0x00FC, + 0x00FD, + 0x0163, + 0x02D9, + 0 +}; + static const SciKeyConversion keyMappings[] = { { Common::KEYCODE_UP , kSciKeyUp , kSciKeyUp }, { Common::KEYCODE_DOWN , kSciKeyDown , kSciKeyDown }, @@ -332,6 +466,15 @@ SciEvent EventManager::getScummVMEvent() { else input.character = input.character - 0x410 + 0x80; } + } else if (g_sci->getLanguage() == Common::PL_POL) { + debugN("%d (0x%04x)", input.character, input.character); + for (int i = 0; UTF16toWin1250[i]; i++) + if (UTF16toWin1250[i] == input.character) { + input.character = 0x80 + i; + break; + } + + debug(" -> %d (0x%04x)", input.character, input.character); } } -- cgit v1.2.3