[Scummvm-git-logs] scummvm master -> 07df840bd9fe50202d6c80caeb9ce8a78e0677b5

athrxx athrxx at scummvm.org
Tue Oct 26 15:59:02 UTC 2021


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
ece7e26b41 KYRA: (MR/Traditional Chinese) - add support
07df840bd9 NEWS: mention KYRA 3 Traditional Chinese support


Commit: ece7e26b414e4e9169e3d85e34da8edd89bb0633
    https://github.com/scummvm/scummvm/commit/ece7e26b414e4e9169e3d85e34da8edd89bb0633
Author: athrxx (athrxx at scummvm.org)
Date: 2021-10-26T17:57:01+02:00

Commit Message:
KYRA: (MR/Traditional Chinese) - add support

Changed paths:
  A devtools/create_kyradat/resources/mr_dos_cd_chinese_trad.h
    devtools/create_kyradat/create_kyradat.cpp
    devtools/create_kyradat/games.cpp
    devtools/create_kyradat/resources.cpp
    dists/engine-data/kyra.dat
    engines/kyra/detection_tables.h
    engines/kyra/engine/kyra_mr.cpp
    engines/kyra/engine/kyra_v2.cpp
    engines/kyra/engine/kyra_v2.h
    engines/kyra/gui/gui_v1.cpp
    engines/kyra/resource/staticres.cpp


diff --git a/devtools/create_kyradat/create_kyradat.cpp b/devtools/create_kyradat/create_kyradat.cpp
index 80d7e5c87f..7cd8a3a51a 100644
--- a/devtools/create_kyradat/create_kyradat.cpp
+++ b/devtools/create_kyradat/create_kyradat.cpp
@@ -39,7 +39,7 @@
 
 
 enum {
-	kKyraDatVersion = 110
+	kKyraDatVersion = 111
 };
 
 const ExtractFilename extractFilenames[] = {
@@ -1191,15 +1191,16 @@ byte getGameID(int game) {
 
 const TypeTable languageTable[] = {
 	{ UNK_LANG, 0 },
-	{ EN_ANY, 1 },
-	{ FR_FRA, 2 },
-	{ DE_DEU, 3 },
-	{ ES_ESP, 4 },
-	{ IT_ITA, 5 },
-	{ JA_JPN, 6 },
-	{ RU_RUS, 7 },
-	{ HE_ISR, 8 },
-	{ ZH_CNA, 9 },
+	{ EN_ANY,  1 },
+	{ FR_FRA,  2 },
+	{ DE_DEU,  3 },
+	{ ES_ESP,  4 },
+	{ IT_ITA,  5 },
+	{ JA_JPN,  6 },
+	{ RU_RUS,  7 },
+	{ HE_ISR,  8 },
+	{ ZH_CNA,  9 },
+	{ ZH_TWN, 10 },
 	{ -1, -1 }
 };
 
diff --git a/devtools/create_kyradat/games.cpp b/devtools/create_kyradat/games.cpp
index d38680af8c..0432520fbd 100644
--- a/devtools/create_kyradat/games.cpp
+++ b/devtools/create_kyradat/games.cpp
@@ -100,6 +100,7 @@ const Game kyra3Games[] = {
 	{ kKyra3, kPlatformDOS, kTalkieVersion, ES_ESP },
 	{ kKyra3, kPlatformDOS, kTalkieVersion, RU_RUS },
 	{ kKyra3, kPlatformDOS, kTalkieVersion, ZH_CNA },
+	{ kKyra3, kPlatformDOS, kTalkieVersion, ZH_TWN },
 
 	GAME_DUMMY_ENTRY
 };
diff --git a/devtools/create_kyradat/resources.cpp b/devtools/create_kyradat/resources.cpp
index fff8620d43..145a8b4ee7 100644
--- a/devtools/create_kyradat/resources.cpp
+++ b/devtools/create_kyradat/resources.cpp
@@ -100,6 +100,7 @@
 #include "resources/mr_dos_cd_spanish.h"
 #include "resources/mr_dos_cd_russian.h"
 #include "resources/mr_dos_cd_chinese_simplified.h"
+#include "resources/mr_dos_cd_chinese_trad.h"
 
 // Eye of the Beholder
 #include "resources/eob1_dos.h"
@@ -1022,6 +1023,7 @@ static const ResourceProvider resourceProviders[] = {
 	{ k3MainMenuStrings, kKyra3, kPlatformDOS, kTalkieVersion, ES_ESP, &k3MainMenuStringsDOSCDSpanishProvider },
 	{ k3MainMenuStrings, kKyra3, kPlatformDOS, kTalkieVersion, RU_RUS, &k3MainMenuStringsDOSCDRussianProvider },
 	{ k3MainMenuStrings, kKyra3, kPlatformDOS, kTalkieVersion, ZH_CNA, &k3MainMenuStringsDOSCDChineseSmplProvider },
+	{ k3MainMenuStrings, kKyra3, kPlatformDOS, kTalkieVersion, ZH_TWN, &k3MainMenuStringsDOSCDChineseTradProvider },
 	{ k3MusicFiles, kKyra3, kPlatformDOS, kTalkieVersion, UNK_LANG, &k3MusicFilesDOSCDProvider },
 	{ k3ScoreTable, kKyra3, kPlatformDOS, kTalkieVersion, UNK_LANG, &k3ScoreTableDOSCDProvider },
 	{ k3SfxFiles, kKyra3, kPlatformDOS, kTalkieVersion, UNK_LANG, &k3SfxFilesDOSCDProvider },
@@ -1036,6 +1038,7 @@ static const ResourceProvider resourceProviders[] = {
 	{ k3FontData, kKyra3, kPlatformDOS, kTalkieVersion, ES_ESP, &k3DummyDataDOSCDProvider },
 	{ k3FontData, kKyra3, kPlatformDOS, kTalkieVersion, RU_RUS, &k3DummyDataDOSCDProvider },
 	{ k3FontData, kKyra3, kPlatformDOS, kTalkieVersion, ZH_CNA, &k3FontDataDOSCDChineseSmplProvider },
+	{ k3FontData, kKyra3, kPlatformDOS, kTalkieVersion, ZH_TWN, &k3FontDataDOSCDChineseTradProvider },
 	{ k3VqaSubtitlesIntro, kKyra3, kPlatformDOS, kTalkieVersion, EN_ANY, &k3VqaSubtitlesIntroDOSCDEnglishProvider },
 	{ k3VqaSubtitlesIntro, kKyra3, kPlatformDOS, kTalkieVersion, FR_FRA, &k3VqaSubtitlesIntroDOSCDFrenchProvider },
 	{ k3VqaSubtitlesIntro, kKyra3, kPlatformDOS, kTalkieVersion, DE_DEU, &k3VqaSubtitlesIntroDOSCDGermanProvider },
@@ -1043,6 +1046,7 @@ static const ResourceProvider resourceProviders[] = {
 	{ k3VqaSubtitlesIntro, kKyra3, kPlatformDOS, kTalkieVersion, ES_ESP, &k3VqaSubtitlesIntroDOSCDSpanishProvider },
 	{ k3VqaSubtitlesIntro, kKyra3, kPlatformDOS, kTalkieVersion, RU_RUS, &k3VqaSubtitlesIntroDOSCDRussianProvider },
 	{ k3VqaSubtitlesIntro, kKyra3, kPlatformDOS, kTalkieVersion, ZH_CNA, &k3VqaSubtitlesIntroDOSCDChineseSmplProvider },
+	{ k3VqaSubtitlesIntro, kKyra3, kPlatformDOS, kTalkieVersion, ZH_TWN, &k3VqaSubtitlesIntroDOSCDChineseTradProvider },
 	{ k3VqaSubtitlesBoat, kKyra3, kPlatformDOS, kTalkieVersion, EN_ANY, &k3VqaSubtitlesBoatDOSCDEnglishProvider },
 	{ k3VqaSubtitlesBoat, kKyra3, kPlatformDOS, kTalkieVersion, FR_FRA, &k3VqaSubtitlesBoatDOSCDFrenchProvider },
 	{ k3VqaSubtitlesBoat, kKyra3, kPlatformDOS, kTalkieVersion, DE_DEU, &k3VqaSubtitlesBoatDOSCDGermanProvider },
@@ -1050,6 +1054,7 @@ static const ResourceProvider resourceProviders[] = {
 	{ k3VqaSubtitlesBoat, kKyra3, kPlatformDOS, kTalkieVersion, ES_ESP, &k3VqaSubtitlesBoatDOSCDSpanishProvider },
 	{ k3VqaSubtitlesBoat, kKyra3, kPlatformDOS, kTalkieVersion, RU_RUS, &k3VqaSubtitlesBoatDOSCDRussianProvider },
 	{ k3VqaSubtitlesBoat, kKyra3, kPlatformDOS, kTalkieVersion, ZH_CNA, &k3VqaSubtitlesBoatDOSCDChineseSmplProvider },
+	{ k3VqaSubtitlesBoat, kKyra3, kPlatformDOS, kTalkieVersion, ZH_TWN, &k3VqaSubtitlesBoatDOSCDChineseTradProvider },
 	{ kEoBBaseNpcPresetsNames, kEoB1, kPlatformDOS, kNoSpecial, EN_ANY, &kEoB1NpcPresetsNamesDOSEnglishProvider },
 	{ kEoBBaseChargenStrings1, kEoB1, kPlatformDOS, kNoSpecial, EN_ANY, &kEoB1ChargenStrings1DOSEnglishProvider },
 	{ kEoBBaseChargenStrings2, kEoB1, kPlatformDOS, kNoSpecial, EN_ANY, &kEoB1ChargenStrings2DOSEnglishProvider },
diff --git a/devtools/create_kyradat/resources/mr_dos_cd_chinese_trad.h b/devtools/create_kyradat/resources/mr_dos_cd_chinese_trad.h
new file mode 100644
index 0000000000..ce09d3ab15
--- /dev/null
+++ b/devtools/create_kyradat/resources/mr_dos_cd_chinese_trad.h
@@ -0,0 +1,251 @@
+static const char *const k3MainMenuStringsDOSCDChineseTrad[4] = {
+	"\x86\xa3\x87\xa3\x88\xa3\x89\xa3\x8a\xa3",
+	"\x8b\xa3"" ""\x8c\xa3"" ""\x8d\xa3"" ""\x8e\xa3",
+	"\x8f\xa3\x90\xa3\x89\xa3\x8a\xa3\x91\xa3\x92\xa3",
+	"\x93\xa3"" ""\x94\xa3"" ""\x89\xa3"" ""\x8a\xa3"
+};
+
+static const StringListProvider k3MainMenuStringsDOSCDChineseTradProvider = { ARRAYSIZE(k3MainMenuStringsDOSCDChineseTrad), k3MainMenuStringsDOSCDChineseTrad };
+
+static const char *const k3VqaSubtitlesIntroDOSCDChineseTrad[] = {
+	""// TODO
+};
+
+static const StringListProvider k3VqaSubtitlesIntroDOSCDChineseTradProvider = { ARRAYSIZE(k3VqaSubtitlesIntroDOSCDChineseTrad), k3VqaSubtitlesIntroDOSCDChineseTrad };
+
+static const char *const k3VqaSubtitlesBoatDOSCDChineseTrad[] = {
+	""// TODO
+};
+
+static const StringListProvider k3VqaSubtitlesBoatDOSCDChineseTradProvider = { ARRAYSIZE(k3VqaSubtitlesBoatDOSCDChineseTrad), k3VqaSubtitlesBoatDOSCDChineseTrad };
+
+static const byte k3FontDataDOSCDChineseTrad[1806] = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x3e, 0x41, 0x55, 0x55, 0x41, 0x63, 0x5d, 0x41,
+	0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x7f,
+	0x6b, 0x6b, 0x7f, 0x5d, 0x63, 0x7f, 0x3e, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x22, 0x77, 0x7f, 0x7f,
+	0x3e, 0x3e, 0x1c, 0x1c, 0x08, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x08, 0x1c, 0x1c, 0x3e, 0x7f, 0x3e,
+	0x1c, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x08, 0x3e, 0x1c, 0x2a, 0x7f, 0x7f, 0x2a, 0x08,
+	0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1c,
+	0x3e, 0x3e, 0x7f, 0x7f, 0x7f, 0x2a, 0x1c, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+	0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3,
+	0xc3, 0xe7, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x18, 0x24, 0x24, 0x24, 0x18,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+	0xff, 0xe7, 0xdb, 0xdb, 0xdb, 0xe7, 0xff, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x1f, 0x05, 0x09, 0x10,
+	0x20, 0x3c, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x1c, 0x22, 0x22, 0x1c, 0x08, 0x08,
+	0x3e, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x10, 0x14, 0x14, 0x12, 0x10, 0x10, 0x10, 0x30,
+	0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x12,
+	0x19, 0x15, 0x13, 0x31, 0x71, 0x63, 0x06, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x5d, 0x22,
+	0x63, 0x22, 0x5d, 0x08, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x20, 0x38, 0x3c, 0x3e, 0x3f, 0x3e,
+	0x3c, 0x38, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x02, 0x0e, 0x1e, 0x3e, 0x7e, 0x3e, 0x1e, 0x0e,
+	0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3e,
+	0x7f, 0x1c, 0x1c, 0x1c, 0x7f, 0x3e, 0x08, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x24, 0x24,
+	0x24, 0x24, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x1f, 0x49, 0x49, 0x59, 0x29, 0x09,
+	0x09, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x1c, 0x20, 0x1c, 0x22, 0x22, 0x22, 0x1c, 0x02,
+	0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x08, 0x3e, 0x1c, 0x1c,
+	0x1c, 0x3e, 0x1c, 0x08, 0x7f, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x08, 0x3e, 0x7f, 0x1c, 0x1c, 0x1c,
+	0x1c, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x7f, 0x3e,
+	0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
+	0x0c, 0x06, 0x7f, 0x06, 0x0c, 0x08, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, 0x30,
+	0x7f, 0x30, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60,
+	0x60, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x22, 0x63, 0x7f, 0x63, 0x22, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1c,
+	0x1c, 0x1c, 0x3e, 0x3e, 0x3e, 0x7f, 0x7f, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x3e, 0x3e,
+	0x3e, 0x1c, 0x1c, 0x1c, 0x08, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18,
+	0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66,
+	0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x7e, 0x24,
+	0x24, 0x24, 0x7e, 0x24, 0x24, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x08, 0x3e, 0x41, 0x40, 0x3e, 0x01,
+	0x41, 0x3e, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x31, 0x4a, 0x4c, 0x34, 0x08, 0x16, 0x19, 0x29,
+	0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44,
+	0x28, 0x10, 0x28, 0x48, 0x45, 0x42, 0x3d, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x10, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x02, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10, 0x10,
+	0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x20, 0x10,
+	0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04,
+	0x08, 0x08, 0x08, 0x10, 0x00, 0x00, 0x00, 0x22,
+	0x14, 0x08, 0x7f, 0x08, 0x14, 0x22, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08,
+	0x7f, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x30, 0x30, 0x10, 0x20, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04,
+	0x08, 0x08, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xce, 0xd6, 0xe6,
+	0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x18, 0x38, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18,
+	0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
+	0xc6, 0x06, 0x1c, 0x70, 0xc0, 0xc0, 0xfe, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x06,
+	0x3c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x3c, 0x6c, 0x6c, 0xcc, 0xcc, 0xcc,
+	0xcc, 0xfe, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0xc6, 0xc6,
+	0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
+	0xc6, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0x7c, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0x0c,
+	0x18, 0x18, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6,
+	0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xc6, 0xc6,
+	0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
+	0x00, 0x18, 0x18, 0x08, 0x10, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x10,
+	0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x7e, 0x00, 0x7e, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+	0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x06, 0x0c,
+	0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x1c, 0x42, 0x4e, 0x52, 0x52, 0x52,
+	0x4c, 0x40, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6,
+	0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xc6,
+	0xc6, 0xc6, 0xfc, 0xc6, 0xc6, 0xc6, 0xfc, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc0,
+	0xc0, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+	0xc6, 0xc6, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x7e, 0xc0, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0,
+	0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xc0,
+	0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc0,
+	0xce, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6,
+	0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+	0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0xc6, 0xc6, 0x7c, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xcc, 0xd8,
+	0xf8, 0xd8, 0xcc, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+	0xc0, 0xc0, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0xc6, 0xc6, 0xee, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6,
+	0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6,
+	0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6,
+	0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0xfc, 0xc6, 0xc6, 0xc6, 0xfc, 0xc0,
+	0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xcc,
+	0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xc6,
+	0xc6, 0xc6, 0xfc, 0xcc, 0xcc, 0xc6, 0xc6, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc0,
+	0x7c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18,
+	0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+	0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6,
+	0xc6, 0x6c, 0x6c, 0x6c, 0x38, 0x38, 0x38, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6,
+	0xd6, 0xfe, 0xee, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x6c,
+	0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x30, 0x30,
+	0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06,
+	0x0c, 0x58, 0x38, 0x34, 0x60, 0xc0, 0xfe, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x0e, 0x08, 0x08, 0x08,
+	0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x40, 0x20, 0x20, 0x10, 0x10, 0x08,
+	0x08, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+	0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x22,
+	0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x18, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x7c, 0x06, 0x7e, 0xc6, 0xc6,
+	0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0,
+	0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xfc, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
+	0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x06, 0x06, 0x06, 0x7e, 0xc6, 0xc6,
+	0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc0,
+	0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x36,
+	0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
+	0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0xc6, 0x7c, 0x00,
+	0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6,
+	0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18,
+	0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
+	0x0c, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc,
+	0x78, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc6, 0xcc,
+	0xd8, 0xf0, 0xd8, 0xcc, 0xc6, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+	0x18, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0xc6, 0xee, 0xfe, 0xd6, 0xc6,
+	0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
+	0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xc6, 0xc6,
+	0xc6, 0xfc, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x7e, 0xc6, 0xc6, 0xc6, 0x7e,
+	0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x6c, 0x76, 0x66, 0x60, 0x60, 0x60, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
+	0xc6, 0x70, 0x1c, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x30, 0x30, 0x30, 0xfc, 0x30, 0x30,
+	0x30, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+	0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6,
+	0xc6, 0xd6, 0xfe, 0xee, 0xc6, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x30,
+	0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e,
+	0x06, 0x0c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0xfe, 0x06, 0x1c, 0x70, 0xc0, 0xfe, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x04, 0x04,
+	0x04, 0x08, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
+	0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x20, 0x20,
+	0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x46,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x14,
+	0x22, 0x22, 0x41, 0x41, 0x7f, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0,
+	0xc0, 0xc6, 0x7c, 0x08, 0x38, 0x00
+};
+
+static const ByteProvider k3FontDataDOSCDChineseTradProvider = { ARRAYSIZE(k3FontDataDOSCDChineseTrad), k3FontDataDOSCDChineseTrad };
diff --git a/dists/engine-data/kyra.dat b/dists/engine-data/kyra.dat
index 2edda26877..cba2622671 100644
Binary files a/dists/engine-data/kyra.dat and b/dists/engine-data/kyra.dat differ
diff --git a/engines/kyra/detection_tables.h b/engines/kyra/detection_tables.h
index f3385ae884..5abe72a00b 100644
--- a/engines/kyra/detection_tables.h
+++ b/engines/kyra/detection_tables.h
@@ -992,20 +992,6 @@ const KYRAGameDescription adGameDescs[] = {
 		KYRA3_CD_FLAGS
 	},
 
-	{ // Provided by AquariumTroop. Bugreport #11935
-		{
-			"kyra3",
-			_s("Missing game code"), // Reason for being unsupported
-			AD_ENTRY2s("ONETIME.PAK", "4fe8ff05002f3a4d645f11cd326fcef2", 485328,
-					   "WESTWOOD.001", "99d4b13576ced18a072a7590eac3cc37", 10419012),
-			Common::ZH_TWN,
-			Common::kPlatformDOS,
-			ADGF_DROPLANGUAGE | ADGF_UNSUPPORTED,
-			GUIO5(GUIO_NOMIDI, GUIO_RENDERVGA, GAMEOPTION_KYRA3_AUDIENCE, GAMEOPTION_KYRA3_SKIP, GAMEOPTION_KYRA3_HELIUM)
-		},
-		KYRA3_CD_FLAGS
-	},
-
 	// installed version
 	{
 		{
@@ -1210,6 +1196,20 @@ const KYRAGameDescription adGameDescs[] = {
 		KYRA3_CD_4LANG_FLAGS
 	},
 
+	{ // non installed version
+		{
+			"kyra3",
+			0,
+			AD_ENTRY2s("ONETIME.PAK", "4fe8ff05002f3a4d645f11cd326fcef2", -1,
+					   "WESTWOOD.001", "99d4b13576ced18a072a7590eac3cc37", -1),
+			Common::ZH_TWN,
+			Common::kPlatformDOS,
+			ADGF_DROPLANGUAGE,
+			GUIO5(GUIO_NOMIDI, GUIO_RENDERVGA, GAMEOPTION_KYRA3_AUDIENCE, GAMEOPTION_KYRA3_SKIP, GAMEOPTION_KYRA3_HELIUM)
+		},
+		KYRA3_CD_4LANG_FLAGS
+	},
+
 	{
 		{
 			"kyra3",
@@ -1270,6 +1270,24 @@ const KYRAGameDescription adGameDescs[] = {
 		KYRA3_CD_INS_4LANG_FLAGS
 	},
 
+	{ // installed version
+		{
+			"kyra3",
+			0,
+			{
+				{ "ONETIME.PAK", 0, "4fe8ff05002f3a4d645f11cd326fcef2", -1 },
+				{ "MALCOLM.PAK", 0, "c01eaf3b5568b207b22ea1c0637fe193", -1 },
+				{ "AUD.PAK", 0, 0, -1 },
+				AD_LISTEND
+			},
+			Common::ZH_TWN,
+			Common::kPlatformDOS,
+			ADGF_DROPLANGUAGE,
+			GUIO5(GUIO_NOMIDI, GUIO_RENDERVGA, GAMEOPTION_KYRA3_AUDIENCE, GAMEOPTION_KYRA3_SKIP, GAMEOPTION_KYRA3_HELIUM)
+		},
+		KYRA3_CD_INS_4LANG_FLAGS
+	},
+
 	{
 		{
 			"kyra3",
diff --git a/engines/kyra/engine/kyra_mr.cpp b/engines/kyra/engine/kyra_mr.cpp
index 2487dc0a28..f4ef5f2025 100644
--- a/engines/kyra/engine/kyra_mr.cpp
+++ b/engines/kyra/engine/kyra_mr.cpp
@@ -486,7 +486,7 @@ void KyraEngine_MR::playStudioSFX(const char *str) {
 		return;
 
 	const int strSize = strlen(str) - 1;
-	if (_flags.lang == Common::ZH_CNA) {
+	if (_flags.lang == Common::ZH_CNA || _flags.lang == Common::ZH_TWN) {
 		// WORKAROUND: The studio sfx is broken in the original, since it still has the
 		// check for '!' and '?' even if the language is set to Chinese. I have fixed this here...
 		if (str[strSize] != '\x80' || !(str[strSize - 1] == '\x81' || str[strSize - 1] == '\x91'))
@@ -1416,10 +1416,9 @@ void KyraEngine_MR::writeSettings() {
 		break;
 
 	case 3:
-		_flags.lang = Common::ZH_CNA;
+		_flags.lang = _langIntern ? Common::ZH_TWN : Common::ZH_CNA;
 		break;
 
-	case 0:
 	default:
 		_flags.lang = Common::EN_ANY;
 	}
diff --git a/engines/kyra/engine/kyra_v2.cpp b/engines/kyra/engine/kyra_v2.cpp
index ed21a66b8a..abf1dc3ebf 100644
--- a/engines/kyra/engine/kyra_v2.cpp
+++ b/engines/kyra/engine/kyra_v2.cpp
@@ -29,7 +29,7 @@
 
 namespace Kyra {
 
-KyraEngine_v2::KyraEngine_v2(OSystem *system, const GameFlags &flags, const EngineDesc &desc) : KyraEngine_v1(system, flags), _desc(desc), _numLang(flags.hasExtraLanguage ? 4 : 3) {
+KyraEngine_v2::KyraEngine_v2(OSystem *system, const GameFlags &flags, const EngineDesc &desc) : KyraEngine_v1(system, flags), _desc(desc), _langIntern(0), _numLang(flags.hasExtraLanguage ? 4 : 3) {
 	memset(&_sceneAnims, 0, sizeof(_sceneAnims));
 	memset(&_sceneAnimMovie, 0, sizeof(_sceneAnimMovie));
 
@@ -97,6 +97,9 @@ KyraEngine_v2::KyraEngine_v2(OSystem *system, const GameFlags &flags, const Engi
 		_lang = 2;
 		break;
 
+	case Common::ZH_TWN:
+		_langIntern = 1;
+		// fall through
 	case Common::JA_JPN:
 	case Common::ZH_CNA:
 		_lang = 3;
diff --git a/engines/kyra/engine/kyra_v2.h b/engines/kyra/engine/kyra_v2.h
index 36c2b6b963..df467537e7 100644
--- a/engines/kyra/engine/kyra_v2.h
+++ b/engines/kyra/engine/kyra_v2.h
@@ -94,6 +94,7 @@ protected:
 	// detection
 	int _lang;
 	const int _numLang;
+	int _langIntern;
 
 	// Input
 	virtual int inputSceneChange(int x, int y, int unk1, int unk2) = 0;
diff --git a/engines/kyra/gui/gui_v1.cpp b/engines/kyra/gui/gui_v1.cpp
index c53444085d..cabfa62e15 100644
--- a/engines/kyra/gui/gui_v1.cpp
+++ b/engines/kyra/gui/gui_v1.cpp
@@ -139,7 +139,7 @@ void GUI_v1::initMenu(Menu &menu) {
 			} else {
 				Screen::FontId of = _screen->_currentFont;
 				if (menu.item[i].saveSlot > 0)
-					_screen->setFont(_vm->gameFlags().lang == Common::ZH_CNA ? Screen::FID_CHINESE_FNT : Screen::FID_8_FNT);
+					_screen->setFont((_vm->gameFlags().lang == Common::ZH_CNA || _vm->gameFlags().lang == Common::ZH_TWN) ? Screen::FID_CHINESE_FNT : Screen::FID_8_FNT);
 
 				if (_vm->gameFlags().platform != Common::kPlatformAmiga)
 					printMenuText(getMenuItemTitle(menu.item[i]), textX - 1, textY + 1, defaultColor1(), 0, 0);
@@ -259,7 +259,7 @@ void GUI_v1::redrawText(const Menu &menu) {
 	} else {
 		Screen::FontId of = _screen->_currentFont;
 		if (menu.item[i].saveSlot > 0)
-			_screen->setFont(_vm->gameFlags().lang == Common::ZH_CNA ? Screen::FID_CHINESE_FNT : Screen::FID_8_FNT);
+			_screen->setFont((_vm->gameFlags().lang == Common::ZH_CNA || _vm->gameFlags().lang == Common::ZH_TWN) ? Screen::FID_CHINESE_FNT : Screen::FID_8_FNT);
 		if (_vm->gameFlags().platform != Common::kPlatformAmiga)
 			printMenuText(getMenuItemTitle(menu.item[i]), textX - 1, textY + 1, defaultColor1(), 0, 0);
 		printMenuText(getMenuItemTitle(menu.item[i]), textX, textY, menu.item[i].textColor, 0, 0);
@@ -289,7 +289,7 @@ void GUI_v1::redrawHighlight(const Menu &menu) {
 	} else {
 		Screen::FontId of = _screen->_currentFont;
 		if (menu.item[i].saveSlot > 0)
-			_screen->setFont(_vm->gameFlags().lang == Common::ZH_CNA ? Screen::FID_CHINESE_FNT : Screen::FID_8_FNT);
+			_screen->setFont((_vm->gameFlags().lang == Common::ZH_CNA || _vm->gameFlags().lang == Common::ZH_TWN) ? Screen::FID_CHINESE_FNT : Screen::FID_8_FNT);
 		if (_vm->gameFlags().platform != Common::kPlatformAmiga)
 			printMenuText(getMenuItemTitle(menu.item[i]), textX - 1, textY + 1, defaultColor1(), 0, 0);
 		printMenuText(getMenuItemTitle(menu.item[i]), textX, textY, menu.item[i].highlightColor, 0, 0);
@@ -511,7 +511,7 @@ int MainMenu::handle(int dim) {
 	int fh = _screen->getFontHeight();
 	if (_vm->gameFlags().lang == Common::JA_JPN)
 		fh++;
-	else if (_vm->gameFlags().lang == Common::ZH_CNA)
+	else if (_vm->gameFlags().lang == Common::ZH_CNA || _vm->gameFlags().lang == Common::ZH_TWN)
 		fh--;
 
 	int textPos = ((_screen->_curDim->w >> 1) + _screen->_curDim->sx) << 3;
@@ -565,7 +565,7 @@ void MainMenu::draw(int select) {
 	int fh = _screen->getFontHeight();
 	if (_vm->gameFlags().lang == Common::JA_JPN)
 		fh++;
-	else if (_vm->gameFlags().lang == Common::ZH_CNA)
+	else if (_vm->gameFlags().lang == Common::ZH_CNA || _vm->gameFlags().lang == Common::ZH_TWN)
 		fh--;
 
 	for (int i = 0; i < _static.menuTable[3]; ++i) {
diff --git a/engines/kyra/resource/staticres.cpp b/engines/kyra/resource/staticres.cpp
index 35f242babf..756bb20d59 100644
--- a/engines/kyra/resource/staticres.cpp
+++ b/engines/kyra/resource/staticres.cpp
@@ -39,7 +39,7 @@
 
 namespace Kyra {
 
-#define RESFILE_VERSION 110
+#define RESFILE_VERSION 111
 
 namespace {
 bool checkKyraDat(Common::SeekableReadStream *file) {
@@ -87,15 +87,16 @@ byte getGameID(const GameFlags &flags) {
 }
 
 const IndexTable iLanguageTable[] = {
-	{ Common::EN_ANY, 1 },
-	{ Common::FR_FRA, 2 },
-	{ Common::DE_DEU, 3 },
-	{ Common::ES_ESP, 4 },
-	{ Common::IT_ITA, 5 },
-	{ Common::JA_JPN, 6 },
-	{ Common::RU_RUS, 7 },
-	{ Common::HE_ISR, 8 },
-	{ Common::ZH_CNA, 9 },
+	{ Common::EN_ANY,  1 },
+	{ Common::FR_FRA,  2 },
+	{ Common::DE_DEU,  3 },
+	{ Common::ES_ESP,  4 },
+	{ Common::IT_ITA,  5 },
+	{ Common::JA_JPN,  6 },
+	{ Common::RU_RUS,  7 },
+	{ Common::HE_ISR,  8 },
+	{ Common::ZH_CNA,  9 },
+	{ Common::ZH_TWN, 10 },
 	{ -1, -1 }
 };
 


Commit: 07df840bd9fe50202d6c80caeb9ce8a78e0677b5
    https://github.com/scummvm/scummvm/commit/07df840bd9fe50202d6c80caeb9ce8a78e0677b5
Author: athrxx (athrxx at scummvm.org)
Date: 2021-10-26T17:57:37+02:00

Commit Message:
NEWS: mention KYRA 3 Traditional Chinese support

Changed paths:
    NEWS.md


diff --git a/NEWS.md b/NEWS.md
index 04d18664cb..27f9578aca 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -6,6 +6,9 @@ For a more comprehensive changelog of the latest experimental code, see:
  Dreamweb:
    - Added text to speech for dialogs and object descriptions.
 
+ Kyra:
+   - Added support for the Traditional Chinese version of Legend of Kyrandia 3.
+
  Supernova:
    - Added text to speech for dialogs and object descriptions.
 




More information about the Scummvm-git-logs mailing list