aboutsummaryrefslogtreecommitdiff
path: root/engines/sci
diff options
context:
space:
mode:
authorEugene Sandulenko2019-12-25 13:23:05 +0100
committerEugene Sandulenko2019-12-25 13:24:36 +0100
commitf491a2562c396177349a1a3b232d0c37754476f8 (patch)
tree24077bfd3914538b215081ab0f7ad3f08e82030d /engines/sci
parent2c6dedaec8e58a0755741d8536dd053f7b2bb092 (diff)
downloadscummvm-rg350-f491a2562c396177349a1a3b232d0c37754476f8.tar.gz
scummvm-rg350-f491a2562c396177349a1a3b232d0c37754476f8.tar.bz2
scummvm-rg350-f491a2562c396177349a1a3b232d0c37754476f8.zip
SCI: Added detection and support for Polish LSL7
Fixes bug #11274
Diffstat (limited to 'engines/sci')
-rw-r--r--engines/sci/detection_tables.h9
-rw-r--r--engines/sci/event.cpp143
2 files changed, 152 insertions, 0 deletions
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);
}
}