[Scummvm-git-logs] scummvm master -> 454fd8a5b281655c7b4bb7df51f84aef4db2583c
athrxx
noreply at scummvm.org
Wed Dec 1 21:41:33 UTC 2021
This automated email contains information about 9 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
1d064f4c84 KYRA: (LoK/Mac) - fix error message
d9850a2d78 KYRA: (HOF/Traditional Chinese) - add static resources
54d1a06496 KYRA: minor metaengine fix
ad05db611d KYRA: (HOF/Traditional Chinese) - fix intro and main menu
7e87656ba7 KYRA: (LOK) - minor change to final credits code
bd12b5f2f6 KYRA: (HOF/Traditional Chinese) - fix final sequence
f436ebbeb0 KYRA: (HOF/Traditional Chinese) - fix ingame texts
1e51f16572 KYRA: (LOK/HOF/Traditional Chinese) - more fixes to save/load menus
454fd8a5b2 KYRA: fix gcc build
Commit: 1d064f4c84538b4d40fe1bb66d55cc48e063bf42
https://github.com/scummvm/scummvm/commit/1d064f4c84538b4d40fe1bb66d55cc48e063bf42
Author: athrxx (athrxx at scummvm.org)
Date: 2021-12-01T22:37:37+01:00
Commit Message:
KYRA: (LoK/Mac) - fix error message
Changed paths:
engines/kyra/sound/drivers/halestorm.cpp
diff --git a/engines/kyra/sound/drivers/halestorm.cpp b/engines/kyra/sound/drivers/halestorm.cpp
index 4714c605e7..e49421b33f 100644
--- a/engines/kyra/sound/drivers/halestorm.cpp
+++ b/engines/kyra/sound/drivers/halestorm.cpp
@@ -809,7 +809,7 @@ bool HSMidiParser::parseEvent(HSSong &song, TrackState *s) {
if (in < 0x80) {
if (s->curPos <= s->data->ptr)
- error("HSLowLevelDriver::midiParseEvent(): Data error");
+ error("HSMidiParser::parseEvent(): Data error");
s->curPos--;
in = _curCmd;
} else if (in == 0xff) {
Commit: d9850a2d78b1b1ff10fd794a776be47701a03564
https://github.com/scummvm/scummvm/commit/d9850a2d78b1b1ff10fd794a776be47701a03564
Author: athrxx (athrxx at scummvm.org)
Date: 2021-12-01T22:37:59+01:00
Commit Message:
KYRA: (HOF/Traditional Chinese) - add static resources
Changed paths:
A devtools/create_kyradat/resources/hof_dos_chinese_trad.h
devtools/create_kyradat/create_kyradat.cpp
devtools/create_kyradat/create_kyradat.h
devtools/create_kyradat/games.cpp
devtools/create_kyradat/resources.cpp
devtools/create_kyradat/resources/hof_dos.h
dists/engine-data/kyra.dat
engines/kyra/detection_tables.h
engines/kyra/graphics/screen.cpp
engines/kyra/resource/resource.h
engines/kyra/resource/staticres.cpp
diff --git a/devtools/create_kyradat/create_kyradat.cpp b/devtools/create_kyradat/create_kyradat.cpp
index 2348d270c9..29e411a7f1 100644
--- a/devtools/create_kyradat/create_kyradat.cpp
+++ b/devtools/create_kyradat/create_kyradat.cpp
@@ -39,7 +39,7 @@
enum {
- kKyraDatVersion = 113
+ kKyraDatVersion = 114
};
const ExtractFilename extractFilenames[] = {
@@ -199,7 +199,7 @@ const ExtractFilename extractFilenames[] = {
{ k2IngameTimJpStrings, kStringList, false },
{ k2IngameShapeAnimData, k2ItemAnimDefinition, false },
{ k2IngameTlkDemoStrings, kStringList, true },
-
+ { k2FontData, kRawData, true },
// MALCOLM'S REVENGE
{ k3MainMenuStrings, kStringList, true },
@@ -210,7 +210,6 @@ const ExtractFilename extractFilenames[] = {
{ k3ItemAnimData, k2ItemAnimDefinition, false },
{ k3ItemMagicTable, kRawData, false },
{ k3ItemStringMap, kRawData, false },
- { k3FontData, kRawData, true },
{ k3VqaSubtitlesIntro, kStringList, true },
{ k3VqaSubtitlesBoat, kStringList, true },
diff --git a/devtools/create_kyradat/create_kyradat.h b/devtools/create_kyradat/create_kyradat.h
index 9d1b01171e..9825f62b2b 100644
--- a/devtools/create_kyradat/create_kyradat.h
+++ b/devtools/create_kyradat/create_kyradat.h
@@ -170,6 +170,7 @@ enum kExtractID {
k2IngameTimJpStrings,
k2IngameShapeAnimData,
k2IngameTlkDemoStrings,
+ k2FontData,
k3MainMenuStrings,
k3MusicFiles,
@@ -179,7 +180,6 @@ enum kExtractID {
k3ItemAnimData,
k3ItemMagicTable,
k3ItemStringMap,
- k3FontData,
k3VqaSubtitlesIntro,
k3VqaSubtitlesBoat,
diff --git a/devtools/create_kyradat/games.cpp b/devtools/create_kyradat/games.cpp
index 7e14bee918..b1071ea298 100644
--- a/devtools/create_kyradat/games.cpp
+++ b/devtools/create_kyradat/games.cpp
@@ -75,6 +75,7 @@ const Game kyra2Games[] = {
{ kKyra2, kPlatformDOS, kNoSpecial, IT_ITA },
{ kKyra2, kPlatformDOS, kNoSpecial, RU_RUS },
{ kKyra2, kPlatformDOS, kNoSpecial, ES_ESP },
+ { kKyra2, kPlatformDOS, kNoSpecial, ZH_TWN },
{ kKyra2, kPlatformDOS, kTalkieVersion, EN_ANY },
{ kKyra2, kPlatformDOS, kTalkieVersion, FR_FRA },
@@ -759,6 +760,7 @@ const int kyra2FloppyNeed[] = {
k2IngameTracks,
k2IngameTalkObjIndex,
k2IngameShapeAnimData,
+ k2FontData,
-1
};
@@ -811,7 +813,7 @@ const int kyra3Need[] = {
k3ItemAnimData,
k3ItemMagicTable,
k3ItemStringMap,
- k3FontData,
+ k2FontData,
k3VqaSubtitlesIntro,
k3VqaSubtitlesBoat,
-1
diff --git a/devtools/create_kyradat/resources.cpp b/devtools/create_kyradat/resources.cpp
index 6f9ac5e9c0..61811d1b6d 100644
--- a/devtools/create_kyradat/resources.cpp
+++ b/devtools/create_kyradat/resources.cpp
@@ -69,6 +69,7 @@
#include "resources/hof_dos_italian.h"
#include "resources/hof_dos_russian.h"
#include "resources/hof_dos_spanish.h"
+#include "resources/hof_dos_chinese_trad.h"
#include "resources/hof_dos_cddemo.h"
#include "resources/hof_dos_cddemo_english.h"
@@ -996,6 +997,7 @@ static const ResourceProvider resourceProviders[] = {
{ k2SeqplayStrings, kKyra2, kPlatformDOS, kNoSpecial, IT_ITA, &k2SeqplayStringsDOSItalianProvider },
{ k2SeqplayStrings, kKyra2, kPlatformDOS, kNoSpecial, RU_RUS, &k2SeqplayStringsDOSRussianProvider },
{ k2SeqplayStrings, kKyra2, kPlatformDOS, kNoSpecial, ES_ESP, &k2SeqplayStringsDOSSpanishProvider },
+ { k2SeqplayStrings, kKyra2, kPlatformDOS, kNoSpecial, ZH_TWN, &k2SeqplayStringsDOSChineseTradProvider },
{ k2SeqplayPakFiles, kKyra2, kPlatformDOS, kTalkieVersion, UNK_LANG, &k2SeqplayPakFilesDOSCDProvider },
{ k2SeqplayCredits, kKyra2, kPlatformDOS, kTalkieVersion, UNK_LANG, &k2SeqplayCreditsDOSCDProvider },
{ k2SeqplayCreditsSpecial, kKyra2, kPlatformDOS, kTalkieVersion, UNK_LANG, &k2SeqplayCreditsSpecialDOSCDProvider },
@@ -1020,10 +1022,8 @@ static const ResourceProvider resourceProviders[] = {
{ k2SeqplayTlkFiles, kKyra2, kPlatformDOS, kTalkieVersion, HE_ISR, &k2SeqplayTlkFilesDOSCDHebrewProvider },
/*{ k2SeqplayStrings, kKyra2, kPlatformDOS, kTalkieVersion, RU_RUS, &k2SeqplayStringsDOSCDRussianProvider },
{ k2SeqplayTlkFiles, kKyra2, kPlatformDOS, kTalkieVersion, RU_RUS, &k2SeqplayTlkFilesDOSCDRussianProvider },*/
-
{ k2SeqplayStrings, kKyra2, kPlatformDOS, kTalkieVersion, ES_ESP, &k2SeqplayStringsDOSCDSpanishProvider },
{ k2SeqplayTlkFiles, kKyra2, kPlatformDOS, kTalkieVersion, ES_ESP, &k2SeqplayTlkFilesDOSCDSpanishProvider },
-
{ k2SeqplayPakFiles, kKyra2, kPlatformFMTowns, kNoSpecial, UNK_LANG, &k2SeqplayPakFilesFMTownsProvider },
{ k2SeqplayStrings, kKyra2, kPlatformFMTowns, kNoSpecial, EN_ANY, &k2SeqplayStringsFMTownsEnglishProvider },
{ k2SeqplaySfxFiles, kKyra2, kPlatformFMTowns, kNoSpecial, UNK_LANG, &k2SeqplaySfxFilesFMTownsProvider },
@@ -1049,6 +1049,13 @@ static const ResourceProvider resourceProviders[] = {
{ k2IngameTimJpStrings, kKyra2, kPlatformPC98, kNoSpecial, UNK_LANG, &k2IngameTimJpStringsPC98Provider },
{ k2IngameShapeAnimData, kKyra2, kPlatformPC98, kNoSpecial, UNK_LANG, &k2IngameShapeAnimDataPC98Provider },
{ k2SeqplayStrings, kKyra2, kPlatformPC98, kNoSpecial, JA_JPN, &k2SeqplayStringsPC98JapaneseProvider },
+ { k2FontData, kKyra2, kPlatformDOS, kNoSpecial, EN_ANY, &k2FontDataDOSDummyProvider },
+ { k2FontData, kKyra2, kPlatformDOS, kNoSpecial, FR_FRA, &k2FontDataDOSDummyProvider },
+ { k2FontData, kKyra2, kPlatformDOS, kNoSpecial, DE_DEU, &k2FontDataDOSDummyProvider },
+ { k2FontData, kKyra2, kPlatformDOS, kNoSpecial, IT_ITA, &k2FontDataDOSDummyProvider },
+ { k2FontData, kKyra2, kPlatformDOS, kNoSpecial, ES_ESP, &k2FontDataDOSDummyProvider },
+ { k2FontData, kKyra2, kPlatformDOS, kNoSpecial, RU_RUS, &k2FontDataDOSDummyProvider },
+ { k2FontData, kKyra2, kPlatformDOS, kNoSpecial, ZH_TWN, &k2FontDataDOSChineseTradProvider },
{ k3MainMenuStrings, kKyra3, kPlatformDOS, kTalkieVersion, EN_ANY, &k3MainMenuStringsDOSCDEnglishProvider },
{ k3MainMenuStrings, kKyra3, kPlatformDOS, kTalkieVersion, FR_FRA, &k3MainMenuStringsDOSCDFrenchProvider },
{ k3MainMenuStrings, kKyra3, kPlatformDOS, kTalkieVersion, DE_DEU, &k3MainMenuStringsDOSCDGermanProvider },
@@ -1064,14 +1071,14 @@ static const ResourceProvider resourceProviders[] = {
{ k3ItemAnimData, kKyra3, kPlatformDOS, kTalkieVersion, UNK_LANG, &k3ItemAnimDataDOSCDProvider },
{ k3ItemMagicTable, kKyra3, kPlatformDOS, kTalkieVersion, UNK_LANG, &k3ItemMagicTableDOSCDProvider },
{ k3ItemStringMap, kKyra3, kPlatformDOS, kTalkieVersion, UNK_LANG, &k3ItemStringMapDOSCDProvider },
- { k3FontData, kKyra3, kPlatformDOS, kTalkieVersion, EN_ANY, &k3DummyDataDOSCDProvider },
- { k3FontData, kKyra3, kPlatformDOS, kTalkieVersion, FR_FRA, &k3DummyDataDOSCDProvider },
- { k3FontData, kKyra3, kPlatformDOS, kTalkieVersion, DE_DEU, &k3DummyDataDOSCDProvider },
- { k3FontData, kKyra3, kPlatformDOS, kTalkieVersion, IT_ITA, &k3DummyDataDOSCDProvider },
- { k3FontData, kKyra3, kPlatformDOS, kTalkieVersion, ES_ESP, &k3DummyDataDOSCDProvider },
- { k3FontData, kKyra3, kPlatformDOS, kTalkieVersion, RU_RUS, &k3DummyDataDOSCDProvider },
- { k3FontData, kKyra3, kPlatformDOS, kTalkieVersion, ZH_CHN, &k3FontDataDOSCDChineseSmplProvider },
- { k3FontData, kKyra3, kPlatformDOS, kTalkieVersion, ZH_TWN, &k3FontDataDOSCDChineseTradProvider },
+ { k2FontData, kKyra3, kPlatformDOS, kTalkieVersion, EN_ANY, &k3DummyDataDOSCDProvider },
+ { k2FontData, kKyra3, kPlatformDOS, kTalkieVersion, FR_FRA, &k3DummyDataDOSCDProvider },
+ { k2FontData, kKyra3, kPlatformDOS, kTalkieVersion, DE_DEU, &k3DummyDataDOSCDProvider },
+ { k2FontData, kKyra3, kPlatformDOS, kTalkieVersion, IT_ITA, &k3DummyDataDOSCDProvider },
+ { k2FontData, kKyra3, kPlatformDOS, kTalkieVersion, ES_ESP, &k3DummyDataDOSCDProvider },
+ { k2FontData, kKyra3, kPlatformDOS, kTalkieVersion, RU_RUS, &k3DummyDataDOSCDProvider },
+ { k2FontData, kKyra3, kPlatformDOS, kTalkieVersion, ZH_CHN, &k3FontDataDOSCDChineseSmplProvider },
+ { k2FontData, 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 },
diff --git a/devtools/create_kyradat/resources/hof_dos.h b/devtools/create_kyradat/resources/hof_dos.h
index a90acd4803..28285ee008 100644
--- a/devtools/create_kyradat/resources/hof_dos.h
+++ b/devtools/create_kyradat/resources/hof_dos.h
@@ -767,3 +767,8 @@ static const ItemAnimDefinition k2IngameShapeAnimDataDOS[14] = {
static const ItemAnimDefinitionProvider k2IngameShapeAnimDataDOSProvider = { ARRAYSIZE(k2IngameShapeAnimDataDOS), k2IngameShapeAnimDataDOS };
+static const byte k2FontDataDOSDummy[] = {
+ 0
+};
+
+static const ByteProvider k2FontDataDOSDummyProvider = { ARRAYSIZE(k2FontDataDOSDummy), k2FontDataDOSDummy };
diff --git a/devtools/create_kyradat/resources/hof_dos_chinese_trad.h b/devtools/create_kyradat/resources/hof_dos_chinese_trad.h
new file mode 100644
index 0000000000..5bb4e7d6d5
--- /dev/null
+++ b/devtools/create_kyradat/resources/hof_dos_chinese_trad.h
@@ -0,0 +1,369 @@
+static const char *const k2SeqplayStringsDOSChineseTrad[136] = {
+ "\xba\x88\xb1\x97\x88\x83\xa7\x82\xa8\x82\xa9\x82\xa1\x80\x8b\x8d\x8c\x8d\x94\x80\x82\x83\x99\x8b\x94\x82\x99\x81",
+ "\x88\x92\xa6\x87\x88\x83\xa3\x81\xa7\x81\x82\x83\x99\x8b\x94\x82\x99\x82",
+ "\x8f\x86\xad\x99\x88\x83\x84\x80\x80\x81\xa8\x88\x94\x8c\xb2\x86\x9f\x82\x8f\x87\x94\x82\x88\x83",
+ "\xa7\x82\xa8\x82\xa9\x82\xa1\x80\xb3\x89\xb5\x88\x9e\x88\x9e\x82\xae\x99\x94\x82\x93\x8a\x94\x8a\x88\x83",
+ "\x9f\x81\x98\x93\x94\x80\x93\x88\xa0\x81\xb6\x81\xb7\x81\xaf\x99\x82\x88\xa9\x81\x98\x92\x9c\x88\x82\x83\x99\x8b\x94\x80\xb6\x8a\xb8\x8f",
+ "\xab\x88\xaa\x86\x90\x88\xbb\x87\xb0\x99\xb1\x99\x94\x82\x83\x87\x83\x82\x94\x80\xae\x82\xaf\x82\xb5\x8f\x9a\x86\xac\x82\x90\x85\x99\x82",
+ "\x90\x88\xbb\x87\xa8\x88\xbd\x87\x9e\x81\x9f\x81\xa2\x8b\xab\x88\x94\x80\x9d\x83\xae\x8e\xb3\x81""\r""\xac\x82\xa0\x8f\xbc\x86\x9a\x84\x99\x82\xb2\x94\xb3\x94\x88\x82\x9e\x88\x8e\x96\xb4\x93\xae\x82\xaf\x82\x92\x86",
+ "\x88\x88\x94\x86\x99\x82\xac\x82\xa0\x8f\xbc\x86\x9a\x84\xad\x87\x88\x82\x92\x88\x97\x8d\x99\x83\x94\x80\x83\x82\x91\x82\xa3\x80\x92\x86",
+ "\x96\x83\xb6\x86\x99\x82\x9c\x82\xa0\x81\xb5\x8b\x93\x87\x94\x82\xab\x88\xbb\x82\x98\x8a\xb3\x8c\x94\x80\xb9\x88\x98\x85\x92\x86",
+ "\xb1\x89\x87\x82\x94\x8b\xbc\x82\x89\x82\xb3\x81\x84\x82\x98\x80\x91\x80\xa1\x88\xa3\x8e\xa4\x8e\x99\x82",
+ "\xa6\x82\xa7\x88\x9a\x93\xb3\x85\x94\x80\x8a\x80\xa1\x81\xa7\x81\x92\x86",
+ "\xab\x8d\xae\x85\x99\x82\xb2\x99\xb3\x81\x8f\x92\xb4\x82\x93\x88\xa0\x81\xb6\x81\xb7\x81\x8d\x82\x9e\x82""\r""\x96\x83\x99\x8d\x97\x8b\x94\x80\x9f\x80\xa0\x80\xa1\x80\x99\x82\x89\x84\x84\x82\x97\x81\x88\x82\x96\x8e\xae\x82\xaf\x82\x92\x86",
+ "\x91\x8c\xa6\x8e\xb9\x82\x8d\x85""\r""\xb8\x95\xa9\x81\xaa\x81\x83\x80\xac\x82\xb8\x95",
+ "\xa5\x86\xbd\x86\x8f\x86\xb5\x99\x83\x82\x83\x94\x9b\x8b\x94\x80\xb0\x83\xaf\x83\x99\x82""\r""\xa5\x87\x9f\x81\xa7\x86\x89\x87\xb7\x82\x85\x88\xbf\x86\x91\x80\xa1\x88\x94\x80\x84\x87\x8a\x87\xbb\x80\x92\x86",
+ " DUMMY STRING... ",
+ " DUMMY STRING... ",
+ "\xba\x88\x88\x83\x8f\x86\x94\x80\xa6\x8a\xb3\x83\x9c\x86\x8a\x82",
+ " DUMMY STRING... ",
+ "\xb2\x89\xb2\x89\x88\x83\xab\x88\xaa\x86\xbd\x88\x81\x87\x8e\x83\xbd\x8a\xbe\x8a\x88\x83""\r""\xab\x88\xaa\x86\x9d\x86\x9e\x86\x8f\x86\xb6\x85\x9a\x86\x8f\x83\x94\x80\x9b\x82\xbb\x82\x8d\x82\x88\x83",
+ " DUMMY STRING... ",
+ " DUMMY STRING... ",
+ "\x9c\x80\x95\x87\x96\x87\x99\x82\x9a\x83\xbc\x82\xac\x87\x88\x83",
+ "\xb4\x88\x88\x83\x8c\x86\x85\x8d\x88\x83",
+ "\x87\x87\xa2\x83\x88\x83\x9f\x82\x8e\x8d\x8c\x8a\x9f\x86\x99\x82"" \r""\x8f\x86\xb5\x88\xa8\x88\x9f\x82\x89\x87\xb5\x81\x94\x82\x88\x83"" ",
+ "\xbc\x94\x99\x81\xbc\x94\x99\x81",
+ "\x9b\x82\x9f\x89\xbd\x86\x8f\x86\x84\x83\xa0\x89\x9e\x88\x88\x83""\r""\x90\x87\xa5\x86\x9f\x82\x98\x82\x8e\x83\xbc\x82\x81\x88\xb9\x88""\r""\xbb\x80\xa6\x91\xa6\x86\x90\x82\x92\x86"" ",
+ "\xb4\x86\xb5\x86\x88\x83\x8f\x86\xaa\x86\x94\x80""\r""\xbd\x83\xbe\x83\x9a\x86\x95\x8a\x94\x82\x88\x83",
+ "\xa6\x88\xa6\x88\x8f\x86\x94\x80\x98\x96\x99\x96\x8a\x82""\r""\xb7\x86\xa8\x88\x8e\x83\xb3\x84\x88\x86\x94\x80\x92\x86",
+ "\x81\x92\xb8\x99\x99\x82\x9e\x86\x90\x88\x91\x88\xb6\x85\x83\x82""\r""\xb3\x81\x89\x84\xa0\x84\x8f\x86\xaa\x86\x94\x80\x82\x84\x8a\x82",
+ "\xaf\x87\x88\x83\x9a\x83\x8f\x83\xb7\x82\x88\x83",
+ "\x90\x87\x89\x84\x8e\x91\x8f\x86\x89\x84\xb4\x82\x88\x83",
+ "\x9f\x82\x88\x83\x90\x87\x8e\x91\x99\x82"" \r ""\x8f\x86\xb5\x88\x89\x84\xb4\x82\x88\x83",
+ "\x8f\x86\x88\x88\x8e\x83\x9d\x86\x9e\x86\x90\x87\x99\x80""\r""\x86\x86\x84\x83\xa7\x97\xb0\x80\x92\x86"" ",
+ "\x90\x8b\x8a\x82\x90\x87\x94\x80\x99\x93\x88\x88\x8e\x83""\r""\xbc\x82\x9f\x86\x80\x8d\xb9\x88\x88\x83"" ",
+ "Executive Producer",
+ "Brett W. Sperry",
+ "Designed & Directed by",
+ "Rick Gush",
+ "Lead Programmer",
+ "Michael Legg",
+ "Art Management",
+ "Louis Castle",
+ "Joseph B. Hewitt IV",
+ "Lead Artist",
+ "Rick Parks",
+ "Additional Coding by",
+ "Philip W. Gorrow",
+ "Matt Collins",
+ "Mark McCubbin",
+ "Artists",
+ "Cameron Chun",
+ "Cary Averett",
+ "Cindy Chinn",
+ "Elie Arabian",
+ "Fei Cheng",
+ "Ferby Miguel",
+ "Frank Mendeola",
+ "Jack Martin",
+ "Jerry Moore",
+ "",
+ "Judith Peterson",
+ "Larry Miller",
+ "Lenny Lee",
+ "Louise Sandoval",
+ "Ren Olsen",
+ "Music & Sounds by",
+ "Paul Mudra",
+ "Frank Klepacki",
+ "Dwight Okahara",
+ "Pat Collins",
+ "Qualilty Assurance by",
+ "Glenn Sperry",
+ "Michael Lightner",
+ "William Foster",
+ "Jesse Clemit",
+ "Jeff Fillhaber",
+ "Manual, Package Design",
+ "& Fulfillment",
+ "Eydie Laramore",
+ "Lisa Marcinko",
+ "Lauren Rifkin",
+ "\xa5\x92\xb4\x87\xb9\x82\x88\x83",
+ "\x91\x8c\xa6\x8e\xb9\x82\x8d\x85""\r""\xb8\x95\xa9\x81\xaa\x81\x83\x80\xac\x82\xb8\x95\x88\x83",
+ "Guest Coding",
+ "Producer Liaison",
+ "Scott Duckett",
+ "Irvine Testers",
+ "Chris McFarland",
+ "Paul Moore",
+ "Chad Soares",
+ "Jared Brinkley",
+ "Jon Willliams",
+ "Chris Toft",
+ "Chris's Hair by",
+ "Cumulo Nimbus",
+ "\xac\x88\x98\x80\xae\x82\xaf\x82\x84\x82\x85\x82",
+ "\x8c\x95\x92\x88\x9a\x8e\x9b\x8e",
+ "\xb7\x82\x9c\x83\x9d\x83\xae\x82\xaf\x82",
+ "\xb6\x82\xb7\x82\xae\x82\xaf\x82",
+ "Special Thanks to",
+ "Sake Joe Bostic-san",
+ "Tim Fritz",
+ "Kenny Dunne",
+ "\x98\x81\xb4\x8e\xbc\x99\x95\x8d\xa7\x8a",
+ "\x8d\x8c\x97\x84\xba\x94\xb4\x8e\xb1\x85\x92\x88\xa5\x90",
+ "\xbd\x99\xbf\x87\x83\x82\xb7\x93\xbf\x89\xbb\x8e",
+ "\x95\x8d\xa7\x8a\xb8\x87\xaf\x91",
+ "\xbe\x99\xb0\x98\xbf\x99",
+ "\x98\x81\xb4\x8e\xa6\x90\xa7\x83\x95\x8d\xa7\x8a",
+ "\x80\x9a\x81\x9a\xbd\x88",
+ "\xa3\x91\x9e\x93\x84\x8c\x8f\x90",
+ "\x9e\x83\x85\x83\x8e\x8a",
+ "\x95\x80\xa1\x85\x9f\x83",
+ "\x98\x81\xb4\x8e\xb0\x99\xba\x99",
+ "\x9d\x81\x96\x96\xbb\x99",
+ "\xac\x82\x90\x85\x85\x8c\xad\x87",
+ "\xbe\x99\x82\x9a\x83\x9a",
+ "\xae\x82\xaf\x82\x91\x83\x87\x83\x85\x8c\xad\x87",
+ "\xa7\x8b\xb9\x84\xbc\x86\x9a\x84",
+ "\xa3\x88\x84\x88\x91\x8c\xa6\x8e",
+ "\xbe\x99\xa4\x91\x93\x8e",
+ "\x9c\x80\x9f\x83",
+ "\x84\x9a\xb4\x8e\x85\x9a",
+ "\xae\x82\xaf\x82\x89\x90\xa6\x88",
+ "\x83\x99\x81\x84\x80\x8a",
+ "\x80\x9a\x86\x9a\x87\x9a",
+ "\x80\x9a\x85\x83\x88\x9a",
+ "\xbe\x99\x89\x9a\x8a\x9a",
+ "\xbe\x99\x82\x9a\x83\x9a",
+ "\x8b\x9a\x85\x83\xb6\x80",
+ "\xbf\x83\xb8\x85\x8c\x9a",
+ "\x9d\x81\x8d\x9a\x96\x96",
+ "\xa6\x92\x8e\x9a\x80\x86",
+ "\x8f\x9a\xbb\x8a\x90\x9a",
+ "\x8d\x9b"" ""\xb2\x95",
+ "\x93\x9a\x94\x9a\x96\x96"
+};
+
+static const StringListProvider k2SeqplayStringsDOSChineseTradProvider = { ARRAYSIZE(k2SeqplayStringsDOSChineseTrad), k2SeqplayStringsDOSChineseTrad };
+
+static const byte k2FontDataDOSChineseTrad[1792] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e,
+ 0x41, 0x41, 0x55, 0x55, 0x41, 0x63, 0x5d, 0x41,
+ 0x41, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x7f, 0x7f,
+ 0x6b, 0x6b, 0x7f, 0x5d, 0x63, 0x7f, 0x7f, 0x3e,
+ 0x00, 0x00, 0x00, 0x22, 0x77, 0x77, 0x7f, 0x7f,
+ 0x3e, 0x3e, 0x1c, 0x1c, 0x08, 0x08, 0x00, 0x00,
+ 0x00, 0x08, 0x08, 0x1c, 0x1c, 0x3e, 0x7f, 0x3e,
+ 0x1c, 0x1c, 0x08, 0x08, 0x00, 0x00, 0x00, 0x08,
+ 0x1c, 0x3e, 0x1c, 0x2a, 0x7f, 0x7f, 0x2a, 0x08,
+ 0x08, 0x1c, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1c,
+ 0x3e, 0x3e, 0x7f, 0x7f, 0x7f, 0x2a, 0x08, 0x1c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+ 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3,
+ 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x24, 0x24, 0x24, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xe7, 0xdb, 0xdb, 0xdb, 0xe7, 0xff, 0xff,
+ 0xff, 0xff, 0x00, 0x1f, 0x03, 0x05, 0x09, 0x10,
+ 0x20, 0x3c, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00,
+ 0x00, 0x1c, 0x22, 0x22, 0x22, 0x1c, 0x08, 0x08,
+ 0x3e, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x10,
+ 0x18, 0x14, 0x14, 0x12, 0x10, 0x10, 0x10, 0x30,
+ 0x70, 0x60, 0x00, 0x00, 0x00, 0x18, 0x14, 0x12,
+ 0x19, 0x15, 0x13, 0x31, 0x71, 0x63, 0x07, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x5d, 0x22,
+ 0x63, 0x22, 0x5d, 0x08, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x30, 0x38, 0x3c, 0x3e, 0x3f, 0x3e,
+ 0x3c, 0x38, 0x30, 0x20, 0x00, 0x00, 0x00, 0x02,
+ 0x06, 0x0e, 0x1e, 0x3e, 0x7e, 0x3e, 0x1e, 0x0e,
+ 0x06, 0x02, 0x00, 0x00, 0x00, 0x08, 0x1c, 0x3e,
+ 0x7f, 0x1c, 0x1c, 0x1c, 0x7f, 0x3e, 0x1c, 0x08,
+ 0x00, 0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24,
+ 0x24, 0x24, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00,
+ 0x00, 0x1f, 0x29, 0x49, 0x49, 0x59, 0x29, 0x09,
+ 0x09, 0x09, 0x09, 0x09, 0x00, 0x00, 0x00, 0x1c,
+ 0x22, 0x20, 0x1c, 0x22, 0x22, 0x22, 0x1c, 0x02,
+ 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x08, 0x1c, 0x3e, 0x1c, 0x1c,
+ 0x1c, 0x3e, 0x1c, 0x08, 0x00, 0x7f, 0x00, 0x00,
+ 0x00, 0x08, 0x1c, 0x3e, 0x7f, 0x1c, 0x1c, 0x1c,
+ 0x1c, 0x1c, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x1c,
+ 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x7f, 0x3e,
+ 0x1c, 0x08, 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, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x22, 0x63, 0x7f, 0x63, 0x22, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x1c,
+ 0x1c, 0x1c, 0x3e, 0x3e, 0x3e, 0x7f, 0x7f, 0x7f,
+ 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x3e, 0x3e,
+ 0x3e, 0x1c, 0x1c, 0x1c, 0x08, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
+ 0x08, 0x08, 0x00, 0x00, 0x00, 0x33, 0x33, 0x11,
+ 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x7f, 0x22,
+ 0x22, 0x22, 0x7f, 0x22, 0x22, 0x22, 0x00, 0x00,
+ 0x00, 0x08, 0x08, 0x3e, 0x41, 0x40, 0x3e, 0x01,
+ 0x41, 0x3e, 0x08, 0x08, 0x00, 0x00, 0x00, 0x31,
+ 0x4a, 0x4a, 0x4c, 0x34, 0x08, 0x16, 0x19, 0x29,
+ 0x29, 0x46, 0x00, 0x00, 0x00, 0x38, 0x44, 0x44,
+ 0x28, 0x10, 0x28, 0x48, 0x45, 0x42, 0x42, 0x3d,
+ 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x04, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x04, 0x08, 0x08, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x08, 0x08, 0x04, 0x02, 0x00, 0x40,
+ 0x20, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x10, 0x10, 0x20, 0x40, 0x00, 0x00, 0x41, 0x22,
+ 0x14, 0x08, 0x7f, 0x08, 0x14, 0x22, 0x41, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08,
+ 0x7f, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0c, 0x0c, 0x04, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c,
+ 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04,
+ 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40,
+ 0x00, 0x3c, 0x42, 0x42, 0x46, 0x4a, 0x52, 0x62,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x08,
+ 0x18, 0x28, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x3e, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42,
+ 0x02, 0x04, 0x08, 0x10, 0x20, 0x42, 0x42, 0x7e,
+ 0x00, 0x00, 0x00, 0x3c, 0x42, 0x02, 0x02, 0x02,
+ 0x1c, 0x02, 0x02, 0x02, 0x42, 0x3c, 0x00, 0x00,
+ 0x00, 0x04, 0x0c, 0x14, 0x14, 0x24, 0x24, 0x44,
+ 0x7f, 0x04, 0x04, 0x0e, 0x00, 0x00, 0x00, 0x7e,
+ 0x40, 0x40, 0x40, 0x7c, 0x42, 0x02, 0x02, 0x02,
+ 0x42, 0x3c, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x40,
+ 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x7f, 0x41, 0x41, 0x02, 0x02,
+ 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
+ 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x3c,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02,
+ 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+ 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x08, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x10,
+ 0x08, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7e, 0x00, 0x7e, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10,
+ 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
+ 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x04, 0x04,
+ 0x08, 0x08, 0x08, 0x00, 0x08, 0x08, 0x00, 0x00,
+ 0x00, 0x1c, 0x22, 0x42, 0x4e, 0x52, 0x52, 0x52,
+ 0x4c, 0x40, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x08,
+ 0x08, 0x14, 0x14, 0x14, 0x22, 0x22, 0x3e, 0x41,
+ 0x41, 0x41, 0x00, 0x00, 0x00, 0x7c, 0x22, 0x22,
+ 0x22, 0x22, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x7c,
+ 0x00, 0x00, 0x00, 0x1c, 0x22, 0x40, 0x40, 0x40,
+ 0x40, 0x40, 0x40, 0x40, 0x22, 0x1c, 0x00, 0x00,
+ 0x00, 0x78, 0x24, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x22, 0x24, 0x78, 0x00, 0x00, 0x00, 0x7f,
+ 0x21, 0x20, 0x20, 0x24, 0x3c, 0x24, 0x20, 0x20,
+ 0x21, 0x7f, 0x00, 0x00, 0x00, 0x7f, 0x21, 0x20,
+ 0x20, 0x24, 0x3c, 0x24, 0x20, 0x20, 0x20, 0x70,
+ 0x00, 0x00, 0x00, 0x1c, 0x22, 0x40, 0x40, 0x40,
+ 0x4f, 0x42, 0x42, 0x42, 0x26, 0x1a, 0x00, 0x00,
+ 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x1c,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x1c, 0x00, 0x00, 0x00, 0x0e, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x04, 0x04, 0x44, 0x44, 0x38,
+ 0x00, 0x00, 0x00, 0x73, 0x22, 0x24, 0x24, 0x28,
+ 0x28, 0x34, 0x24, 0x22, 0x22, 0x73, 0x00, 0x00,
+ 0x00, 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x21, 0x21, 0x7f, 0x00, 0x00, 0x00, 0x41,
+ 0x41, 0x63, 0x63, 0x55, 0x55, 0x49, 0x49, 0x41,
+ 0x41, 0x41, 0x00, 0x00, 0x00, 0x42, 0x42, 0x62,
+ 0x62, 0x52, 0x52, 0x4a, 0x4a, 0x46, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00,
+ 0x00, 0x7e, 0x21, 0x21, 0x21, 0x21, 0x3e, 0x20,
+ 0x20, 0x20, 0x20, 0x70, 0x00, 0x00, 0x00, 0x3c,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x52,
+ 0x4a, 0x3c, 0x02, 0x00, 0x00, 0x7e, 0x21, 0x21,
+ 0x21, 0x21, 0x3e, 0x24, 0x22, 0x22, 0x21, 0x71,
+ 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x40, 0x40,
+ 0x3c, 0x02, 0x02, 0x42, 0x42, 0x3c, 0x00, 0x00,
+ 0x00, 0x7f, 0x49, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x1c, 0x00, 0x00, 0x00, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x3c, 0x00, 0x00, 0x00, 0x41, 0x41, 0x41,
+ 0x22, 0x22, 0x22, 0x14, 0x14, 0x14, 0x08, 0x08,
+ 0x00, 0x00, 0x00, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x49, 0x49, 0x49, 0x55, 0x22, 0x00, 0x00,
+ 0x00, 0x41, 0x22, 0x22, 0x14, 0x14, 0x08, 0x14,
+ 0x14, 0x22, 0x22, 0x41, 0x00, 0x00, 0x00, 0x41,
+ 0x41, 0x22, 0x22, 0x14, 0x14, 0x08, 0x08, 0x08,
+ 0x08, 0x1c, 0x00, 0x00, 0x00, 0x7e, 0x42, 0x02,
+ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x42, 0x7e,
+ 0x00, 0x00, 0x00, 0x0e, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0e,
+ 0x00, 0x40, 0x40, 0x20, 0x20, 0x10, 0x10, 0x08,
+ 0x08, 0x04, 0x04, 0x02, 0x02, 0x00, 0x00, 0x70,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x70, 0x00, 0x08, 0x14, 0x22,
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3c, 0x42, 0x02, 0x3e, 0x42,
+ 0x42, 0x3d, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40,
+ 0x40, 0x5c, 0x62, 0x42, 0x42, 0x42, 0x62, 0x5c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c,
+ 0x42, 0x40, 0x40, 0x40, 0x42, 0x3c, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x3a, 0x46, 0x42,
+ 0x42, 0x42, 0x46, 0x3a, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x40,
+ 0x42, 0x3c, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x10,
+ 0x10, 0x7e, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d,
+ 0x42, 0x42, 0x3c, 0x10, 0x2e, 0x41, 0x41, 0x3e,
+ 0x00, 0x40, 0x40, 0x40, 0x40, 0x5c, 0x62, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x08,
+ 0x08, 0x00, 0x00, 0x18, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x1c, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x0c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x44,
+ 0x44, 0x38, 0x00, 0xc0, 0x40, 0x40, 0x40, 0x42,
+ 0x44, 0x48, 0x50, 0x68, 0x44, 0x42, 0x00, 0x00,
+ 0x00, 0x18, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x1c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x36, 0x49, 0x49, 0x49, 0x49,
+ 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x5c, 0x62, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x62, 0x42,
+ 0x42, 0x42, 0x62, 0x5c, 0x40, 0x40, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3a, 0x46, 0x42, 0x42, 0x42,
+ 0x46, 0x3a, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x5c, 0x22, 0x20, 0x20, 0x20, 0x20, 0x70,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c,
+ 0x42, 0x40, 0x3c, 0x02, 0x42, 0x3c, 0x00, 0x00,
+ 0x00, 0x10, 0x10, 0x10, 0x10, 0x7e, 0x10, 0x10,
+ 0x10, 0x10, 0x12, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44,
+ 0x4c, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x22, 0x22, 0x14, 0x14, 0x08, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41,
+ 0x49, 0x49, 0x49, 0x49, 0x55, 0x22, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x22, 0x14,
+ 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x42, 0x22, 0x24, 0x14,
+ 0x08, 0x08, 0x10, 0x60, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7e, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7e,
+ 0x00, 0x00, 0x00, 0x02, 0x04, 0x04, 0x04, 0x04,
+ 0x04, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02,
+ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
+ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x40,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x40, 0x00, 0x31, 0x49, 0x46,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x14, 0x14,
+ 0x22, 0x22, 0x41, 0x41, 0x41, 0x7f, 0x00, 0x00
+};
+
+static const ByteProvider k2FontDataDOSChineseTradProvider = { ARRAYSIZE(k2FontDataDOSChineseTrad), k2FontDataDOSChineseTrad };
diff --git a/dists/engine-data/kyra.dat b/dists/engine-data/kyra.dat
index edbaa0dfd2..746cc8a654 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 69761ee611..b3b00d09c1 100644
--- a/engines/kyra/detection_tables.h
+++ b/engines/kyra/detection_tables.h
@@ -648,11 +648,11 @@ const KYRAGameDescription adGameDescs[] = {
{ // Floppy version extracted
{
"kyra2",
- msg_missingLangResources, // Reason for being unsupported
+ "Extracted",
AD_ENTRY1("FATE.PAK", "5bfc4dd48778ca1f3a9e001e345a9774"),
Common::ZH_TWN,
Common::kPlatformDOS,
- ADGF_UNSUPPORTED,
+ ADGF_NO_FLAGS,
GUIO6(GUIO_NOSPEECH, GUIO_MIDIADLIB, GUIO_MIDIMT32, GUIO_MIDIGM, GUIO_MIDIPCSPK, GUIO_RENDERVGA)
},
KYRA2_FLOPPY_FLAGS
diff --git a/engines/kyra/graphics/screen.cpp b/engines/kyra/graphics/screen.cpp
index 6cdf1dbbdf..69fd68433d 100644
--- a/engines/kyra/graphics/screen.cpp
+++ b/engines/kyra/graphics/screen.cpp
@@ -1350,7 +1350,7 @@ bool Screen::loadFont(FontId fontId, const char *filename) {
fa->push_back(new ChineseOneByteFontMR(SCREEN_W));
fa->push_back(new ChineseTwoByteFontMR(SCREEN_W));
fnt = new MultiSubsetFont(fa);
- const uint8 *oneByteData = _vm->staticres()->loadRawData(k3FontData, temp);
+ const uint8 *oneByteData = _vm->staticres()->loadRawData(k2FontData, temp);
Common::MemoryReadStream str(oneByteData, temp);
fnt->load(str);
}
diff --git a/engines/kyra/resource/resource.h b/engines/kyra/resource/resource.h
index 25c22a88c0..77d08a4ee1 100644
--- a/engines/kyra/resource/resource.h
+++ b/engines/kyra/resource/resource.h
@@ -258,6 +258,7 @@ enum KyraResources {
k2IngameTimJpStrings,
k2IngameShapeAnimData,
k2IngameTlkDemoStrings,
+ k2FontData,
k3MainMenuStrings,
k3MusicFiles,
@@ -267,7 +268,6 @@ enum KyraResources {
k3ItemAnimData,
k3ItemMagicTable,
k3ItemStringMap,
- k3FontData,
k3VqaSubtitlesIntro,
k3VqaSubtitlesBoat,
diff --git a/engines/kyra/resource/staticres.cpp b/engines/kyra/resource/staticres.cpp
index 6f3d0573a3..9aed2fffb3 100644
--- a/engines/kyra/resource/staticres.cpp
+++ b/engines/kyra/resource/staticres.cpp
@@ -39,7 +39,7 @@
namespace Kyra {
-#define RESFILE_VERSION 113
+#define RESFILE_VERSION 114
namespace {
bool checkKyraDat(Common::SeekableReadStream *file) {
Commit: 54d1a06496b788808165f9bc539a993f07c526c8
https://github.com/scummvm/scummvm/commit/54d1a06496b788808165f9bc539a993f07c526c8
Author: athrxx (athrxx at scummvm.org)
Date: 2021-12-01T22:38:09+01:00
Commit Message:
KYRA: minor metaengine fix
Changed paths:
engines/kyra/metaengine.cpp
diff --git a/engines/kyra/metaengine.cpp b/engines/kyra/metaengine.cpp
index 17aefcf653..f2e142ea68 100644
--- a/engines/kyra/metaengine.cpp
+++ b/engines/kyra/metaengine.cpp
@@ -214,7 +214,7 @@ SaveStateDescriptor KyraMetaEngine::querySaveMetaInfos(const char *target, int s
// The same goes for the 'Autosave', which is slot 999. Slot 0 will also
// be protected in Kyra 1-3, since it's the 'restart game' save.
desc.setWriteProtectedFlag((slot == 0 && !nonKyraGame) || slot >= 990);
- if (slot == 0 && !nonKyraGame)
+ if (slot == getAutosaveSlot())
desc.setAutosave(true);
desc.setThumbnail(header.thumbnail);
@@ -228,7 +228,7 @@ SaveStateDescriptor KyraMetaEngine::querySaveMetaInfos(const char *target, int s
// The same goes for the 'Autosave', which is slot 999. Slot 0 will also
// be protected in Kyra 1-3, since it's the 'restart game' save.
desc.setWriteProtectedFlag((slot == 0 && !nonKyraGame) || slot >= 990);
- if (slot == 0 && !nonKyraGame)
+ if (slot == getAutosaveSlot())
desc.setAutosave(true);
return desc;
Commit: ad05db611d8e3ecdef3b80dc5188c3a9b2d9855c
https://github.com/scummvm/scummvm/commit/ad05db611d8e3ecdef3b80dc5188c3a9b2d9855c
Author: athrxx (athrxx at scummvm.org)
Date: 2021-12-01T22:38:35+01:00
Commit Message:
KYRA: (HOF/Traditional Chinese) - fix intro and main menu
Changed paths:
engines/kyra/engine/kyra_hof.cpp
engines/kyra/engine/kyra_hof.h
engines/kyra/engine/kyra_mr.cpp
engines/kyra/engine/kyra_v2.cpp
engines/kyra/engine/lol.cpp
engines/kyra/graphics/screen.cpp
engines/kyra/graphics/screen.h
engines/kyra/graphics/screen_hof.cpp
engines/kyra/gui/gui_hof.cpp
engines/kyra/gui/gui_v1.cpp
engines/kyra/gui/gui_v1.h
engines/kyra/resource/staticres.cpp
engines/kyra/sequence/sequences_hof.cpp
diff --git a/engines/kyra/engine/kyra_hof.cpp b/engines/kyra/engine/kyra_hof.cpp
index ed5ead79eb..18b07d0029 100644
--- a/engines/kyra/engine/kyra_hof.cpp
+++ b/engines/kyra/engine/kyra_hof.cpp
@@ -134,6 +134,9 @@ KyraEngine_HoF::KyraEngine_HoF(OSystem *system, const GameFlags &flags) : KyraEn
_useCharPal = false;
memset(_characterFacingCountTable, 0, sizeof(_characterFacingCountTable));
+
+ _defaultFont = (_flags.lang == Common::ZH_TWN) ? Screen::FID_CHINESE_FNT : ((_flags.lang == Common::JA_JPN) ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT);
+ _bookFont = (_flags.lang == Common::ZH_TWN) ? Screen::FID_CHINESE_FNT : ((_flags.lang == Common::JA_JPN) ? Screen::FID_SJIS_FNT : Screen::FID_BOOKFONT_FNT);
}
KyraEngine_HoF::~KyraEngine_HoF() {
@@ -190,12 +193,14 @@ Common::Error KyraEngine_HoF::init() {
if (_flags.isDemo && !_flags.isTalkie) {
_screen->loadFont(_screen->FID_8_FNT, "FONT9P.FNT");
+ } else if (_flags.lang == Common::ZH_TWN) {
+ _screen->loadFont(Screen::FID_CHINESE_FNT, "HOF.PAK");
} else {
_screen->loadFont(_screen->FID_6_FNT, "6.FNT");
_screen->loadFont(_screen->FID_8_FNT, "8FAT.FNT");
_screen->loadFont(_screen->FID_BOOKFONT_FNT, "BOOKFONT.FNT");
}
- _screen->setFont(_flags.lang == Common::JA_JPN ? Screen::FID_SJIS_FNT : _screen->FID_8_FNT);
+ _screen->setFont(_defaultFont);
_screen->setAnimBlockPtr(3504);
_screen->setScreenDim(0);
diff --git a/engines/kyra/engine/kyra_hof.h b/engines/kyra/engine/kyra_hof.h
index a39d50d759..67260232c5 100644
--- a/engines/kyra/engine/kyra_hof.h
+++ b/engines/kyra/engine/kyra_hof.h
@@ -379,6 +379,9 @@ protected:
bool _fadeMessagePalette;
void fadeMessagePalette();
+ Screen::FontId _defaultFont;
+ Screen::FontId _bookFont;
+
// chat
bool _chatIsNote;
diff --git a/engines/kyra/engine/kyra_mr.cpp b/engines/kyra/engine/kyra_mr.cpp
index 759a547387..27f87b8a4c 100644
--- a/engines/kyra/engine/kyra_mr.cpp
+++ b/engines/kyra/engine/kyra_mr.cpp
@@ -351,8 +351,8 @@ void KyraEngine_MR::initMainMenu() {
MainMenu::StaticData data = {
{ _mainMenuStrings[0], _mainMenuStrings[1], _mainMenuStrings[2], _mainMenuStrings[3], nullptr },
{ 0x01, 0x04, 0x0C, 0x04, 0x00, 0x80, 0xFF },
- { 0x16, 0x19, 0x1A, 0x16 },
- _lang == 3 ? Screen::FID_CHINESE_FNT : Screen::FID_8_FNT, 240
+ { 0x16, 0x19, 0x1A, 0x16 }, 0,
+ _lang == 3 ? Screen::FID_CHINESE_FNT : Screen::FID_8_FNT, _lang == 3 ? -1 : 0, 240
};
MainMenu::Animation anim;
diff --git a/engines/kyra/engine/kyra_v2.cpp b/engines/kyra/engine/kyra_v2.cpp
index 2bf6b1fd08..f9c43e7c9c 100644
--- a/engines/kyra/engine/kyra_v2.cpp
+++ b/engines/kyra/engine/kyra_v2.cpp
@@ -99,7 +99,10 @@ KyraEngine_v2::KyraEngine_v2(OSystem *system, const GameFlags &flags, const Engi
case Common::ZH_TWN:
_langIntern = 1;
+ if (!_flags.hasExtraLanguage) // HOF Floppy uses ENG extensions...
+ break;
// fall through
+
case Common::JA_JPN:
case Common::ZH_CHN:
_lang = 3;
diff --git a/engines/kyra/engine/lol.cpp b/engines/kyra/engine/lol.cpp
index 36e47c74d0..4b0beb1b4b 100644
--- a/engines/kyra/engine/lol.cpp
+++ b/engines/kyra/engine/lol.cpp
@@ -661,15 +661,15 @@ int LoLEngine::mainMenu() {
{
{ 0, 0, 0, 0, 0 },
{ 0x01, 0x04, 0x0C, 0x04, 0x00, 0x3D, 0x9F },
- { 0x2C, 0x19, 0x48, 0x2C },
- Screen::FID_9_FNT, 1
+ { 0x2C, 0x19, 0x48, 0x2C }, 0,
+ Screen::FID_9_FNT, 0, 1
},
// 16 color SJIS mode
{
{ 0, 0, 0, 0, 0 },
{ 0x01, 0x04, 0x0C, 0x04, 0x00, 0xC1, 0xE1 },
- { 0xCC, 0xDD, 0xDD, 0xDD },
- Screen::FID_SJIS_TEXTMODE_FNT, 1
+ { 0xCC, 0xDD, 0xDD, 0xDD }, 0,
+ Screen::FID_SJIS_TEXTMODE_FNT, 1, 1
}
};
diff --git a/engines/kyra/graphics/screen.cpp b/engines/kyra/graphics/screen.cpp
index 69fd68433d..03ba2ed06c 100644
--- a/engines/kyra/graphics/screen.cpp
+++ b/engines/kyra/graphics/screen.cpp
@@ -1346,9 +1346,18 @@ bool Screen::loadFont(FontId fontId, const char *filename) {
fa->push_back(new ChineseOneByteFontLoK(SCREEN_W));
fa->push_back(new ChineseTwoByteFontLoK(SCREEN_W, lookupTable, temp));
fnt = new MultiSubsetFont(fa);
- } else if (_vm->game() == GI_KYRA3) {
- fa->push_back(new ChineseOneByteFontMR(SCREEN_W));
- fa->push_back(new ChineseTwoByteFontMR(SCREEN_W));
+ } else {
+ Font *fn1 = 0;
+ Font *fn2 = 0;
+ if (_vm->game() == GI_KYRA2) {
+ fn1 = new ChineseOneByteFontHOF(SCREEN_W);
+ fn2 = new ChineseTwoByteFontHOF(SCREEN_W);
+ } else {
+ fn1 = new ChineseOneByteFontMR(SCREEN_W);
+ fn2 = new ChineseTwoByteFontMR(SCREEN_W);
+ }
+ fa->push_back(fn1);
+ fa->push_back(fn2);
fnt = new MultiSubsetFont(fa);
const uint8 *oneByteData = _vm->staticres()->loadRawData(k2FontData, temp);
Common::MemoryReadStream str(oneByteData, temp);
@@ -3806,6 +3815,7 @@ void AMIGAFont::unload() {
SJISFont::SJISFont(Common::SharedPtr<Graphics::FontSJIS> &font, const uint8 invisColor, bool is16Color, bool drawOutline, int extraSpacing)
: _colorMap(nullptr), _font(font), _invisColor(invisColor), _isTextMode(is16Color), _style(kStyleNone), _drawOutline(drawOutline), _sjisWidthOffset(extraSpacing) {
assert(_font);
+ _font->setDrawingMode(_drawOutline ? Graphics::FontSJIS::kOutlineMode : Graphics::FontSJIS::kDefaultMode);
}
int SJISFont::getHeight() const {
diff --git a/engines/kyra/graphics/screen.h b/engines/kyra/graphics/screen.h
index f35d1c27bf..0a77ad832b 100644
--- a/engines/kyra/graphics/screen.h
+++ b/engines/kyra/graphics/screen.h
@@ -258,6 +258,8 @@ public:
ChineseFont(int pitch, int renderWidth, int renderHeight, int spacingWidth, int spacingHeight, int extraSpacingWidth, int extraSpacingHeight);
~ChineseFont() override;
+ virtual Type getType() const override { return kBIG5; }
+
bool load(Common::SeekableReadStream &data) override;
void setStyles(int styles) override { _border = (styles & kStyleBorder); }
@@ -290,9 +292,6 @@ private:
class ChineseOneByteFontLoK final : public ChineseFont {
public:
ChineseOneByteFontLoK(int pitch);
- ~ChineseOneByteFontLoK() override {}
- Type getType() const override { return kBIG5; }
-
private:
bool hasGlyphForCharacter(uint16 c) const override { return !(c & 0x80); }
uint32 getFontOffset(uint16 c) const override { return (c & 0x7F) * 14; }
@@ -302,9 +301,6 @@ private:
class ChineseTwoByteFontLoK final : public ChineseFont {
public:
ChineseTwoByteFontLoK(int pitch, const uint16 *lookupTable, uint32 lookupTableSize);
- ~ChineseTwoByteFontLoK() override {}
- Type getType() const override { return kBIG5; }
-
private:
bool hasGlyphForCharacter(uint16 c) const override;
uint32 getFontOffset(uint16 c) const override;
@@ -314,30 +310,42 @@ private:
uint32 _lookupTableSize;
};
-class ChineseOneByteFontMR final : public ChineseFont {
+class ChineseOneByteFontMR : public ChineseFont {
public:
ChineseOneByteFontMR(int pitch) : ChineseFont(pitch, 7, 14, 9, 14, 0, 2) {}
- ~ChineseOneByteFontMR() override {}
- Type getType() const override { return kBIG5; }
-
private:
bool hasGlyphForCharacter(uint16 c) const override { return (c == 0x6187) || !(c & 0x80); }
uint32 getFontOffset(uint16 c) const override { return ((c == 0x6187) ? 128 : (c & 0x7F)) * 14; }
void processColorMap() override;
};
-class ChineseTwoByteFontMR final : public ChineseFont {
+class ChineseTwoByteFontMR : public ChineseFont {
public:
ChineseTwoByteFontMR(int pitch) : ChineseFont(pitch, 15, 14, 18, 14, 0, 2) {}
- ~ChineseTwoByteFontMR() override {}
- Type getType() const override { return kBIG5; }
-
private:
bool hasGlyphForCharacter(uint16 c) const override { return (c != 0x6187) && (c & 0x80); }
uint32 getFontOffset(uint16 c) const override;
void processColorMap() override;
};
+class ChineseOneByteFontHOF : public ChineseFont {
+public:
+ ChineseOneByteFontHOF(int pitch) : ChineseFont(pitch, 7, 14, 9, 15, 0, 0) {}
+private:
+ bool hasGlyphForCharacter(uint16 c) const override { return !(c & 0x80); }
+ uint32 getFontOffset(uint16 c) const override { return (c & 0x7F) * 14; }
+ void processColorMap() override;
+};
+
+class ChineseTwoByteFontHOF : public ChineseFont {
+public:
+ ChineseTwoByteFontHOF(int pitch) : ChineseFont(pitch, 16, 14, 18, 15, 0, 0) {}
+private:
+ bool hasGlyphForCharacter(uint16 c) const override { return (c & 0x80); }
+ uint32 getFontOffset(uint16 c) const override;
+ void processColorMap() override;
+};
+
class MultiSubsetFont final : public Font {
public:
MultiSubsetFont(Common::Array<Font*> *subsets) : Font(), _subsets(subsets) {}
diff --git a/engines/kyra/graphics/screen_hof.cpp b/engines/kyra/graphics/screen_hof.cpp
index a3ab811cdb..d3776a06f8 100644
--- a/engines/kyra/graphics/screen_hof.cpp
+++ b/engines/kyra/graphics/screen_hof.cpp
@@ -93,4 +93,21 @@ void Screen_HoF::cmpFadeFrameStep(int srcPage, int srcW, int srcH, int srcX, int
}
}
+void ChineseOneByteFontHOF::processColorMap() {
+ _textColor[0] = _colorMap[1];
+ _textColor[1] = _colorMap[0] | (_colorMap[0] << 8);
+ _pixelColorShading = false;
+}
+
+uint32 ChineseTwoByteFontHOF::getFontOffset(uint16 c) const {
+ c = ((c & 0x7F00) >> 2) | (c & 0x3F);
+ return c * 28;
+}
+
+void ChineseTwoByteFontHOF::processColorMap() {
+ _textColor[0] = TO_LE_16(_colorMap[1] | ((_colorMap[1] + 1) << 8));
+ _textColor[1] = _colorMap[0] | (_colorMap[0] << 8);
+ _pixelColorShading = !(_colorMap[1] == 207 || _colorMap[1] > 240);
+}
+
} // End of namespace Kyra
diff --git a/engines/kyra/gui/gui_hof.cpp b/engines/kyra/gui/gui_hof.cpp
index 911a997789..7d1b68eef6 100644
--- a/engines/kyra/gui/gui_hof.cpp
+++ b/engines/kyra/gui/gui_hof.cpp
@@ -521,7 +521,7 @@ void KyraEngine_HoF::bookPrintText(int dstPage, const uint8 *str, int x, int y,
_screen->_curPage = dstPage;
_screen->setTextColor(_bookTextColorMap, 0, 3);
- Screen::FontId oldFont = _screen->setFont(_flags.lang == Common::JA_JPN ? Screen::FID_SJIS_FNT : Screen::FID_BOOKFONT_FNT);
+ Screen::FontId oldFont = _screen->setFont(_bookFont);
_screen->_charSpacing = -2;
Common::String strr((const char *)str);
diff --git a/engines/kyra/gui/gui_v1.cpp b/engines/kyra/gui/gui_v1.cpp
index 1f8bec7324..6cd3761bab 100644
--- a/engines/kyra/gui/gui_v1.cpp
+++ b/engines/kyra/gui/gui_v1.cpp
@@ -498,6 +498,13 @@ int MainMenu::handle(int dim) {
int width = _screen->_curDim->w << 3;
int height = _screen->_curDim->h;
+ if (_static.boxCoords) {
+ x = _static.boxCoords[0];
+ y = _static.boxCoords[1];
+ width = _static.boxCoords[2];
+ height = _static.boxCoords[3];
+ }
+
drawBox(x, y, width, height, 1);
drawBox(x + 1, y + 1, width - 2, height - 2, 0);
@@ -508,12 +515,7 @@ int MainMenu::handle(int dim) {
while (!_screen->isMouseVisible())
_screen->showMouse();
- int fh = _screen->getFontHeight();
- if (_vm->gameFlags().lang == Common::JA_JPN)
- fh++;
- else if (_vm->gameFlags().lang == Common::ZH_CHN || _vm->gameFlags().lang == Common::ZH_TWN)
- fh--;
-
+ int fh = _screen->getFontHeight() + _static.lineSpacingAdjust;
int textPos = ((_screen->_curDim->w >> 1) + _screen->_curDim->sx) << 3;
Common::Rect menuRect(x + 16, y + 4, x + width - 16, y + 4 + fh * _static.menuTable[3]);
@@ -560,13 +562,9 @@ int MainMenu::handle(int dim) {
}
void MainMenu::draw(int select) {
- int top = _screen->_curDim->sy;
+ int top = _static.boxCoords ? _static.boxCoords[1] : _screen->_curDim->sy;
top += _static.menuTable[1];
- int fh = _screen->getFontHeight();
- if (_vm->gameFlags().lang == Common::JA_JPN)
- fh++;
- else if (_vm->gameFlags().lang == Common::ZH_CHN || _vm->gameFlags().lang == Common::ZH_TWN)
- fh--;
+ int fh = _screen->getFontHeight() + _static.lineSpacingAdjust;
for (int i = 0; i < _static.menuTable[3]; ++i) {
int curY = top + i * fh;
diff --git a/engines/kyra/gui/gui_v1.h b/engines/kyra/gui/gui_v1.h
index 8d34bdba26..2d0540de49 100644
--- a/engines/kyra/gui/gui_v1.h
+++ b/engines/kyra/gui/gui_v1.h
@@ -163,8 +163,11 @@ public:
uint8 menuTable[7];
uint8 colorTable[4];
+ const uint8 *boxCoords;
Screen::FontId font;
+ int8 lineSpacingAdjust;
+
uint8 altColor;
};
diff --git a/engines/kyra/resource/staticres.cpp b/engines/kyra/resource/staticres.cpp
index 9aed2fffb3..6b3a57a1cc 100644
--- a/engines/kyra/resource/staticres.cpp
+++ b/engines/kyra/resource/staticres.cpp
@@ -1084,7 +1084,8 @@ const ScreenDim Screen_HoF::_screenDimTable[] = {
{ 0x00, 0x00, 0x28, 0x88, 0xC7, 0xCF, 0x00, 0x00 },
{ 0x00, 0x08, 0x28, 0xB8, 0xC7, 0xCF, 0x00, 0x00 },
{ 0x01, 0x28, 0x26, 0x46, 0xC7, 0xCC, 0x00, 0x00 },
- { 0x0A, 0x96, 0x14, 0x30, 0x19, 0xF0, 0x00, 0x00 } // menu, just present for current menu code
+ { 0x0A, 0x96, 0x14, 0x30, 0x19, 0xF0, 0x00, 0x00 }, // menu, just present for current menu code
+ { 0x0B, 0x96, 0x10, 0x30, 0x19, 0xF0, 0x00, 0x00 }, // Chinese menu
};
const int Screen_HoF::_screenDimTableCount = ARRAYSIZE(Screen_HoF::_screenDimTable);
diff --git a/engines/kyra/sequence/sequences_hof.cpp b/engines/kyra/sequence/sequences_hof.cpp
index 3bf4ea3ed2..e8f7689e4c 100644
--- a/engines/kyra/sequence/sequences_hof.cpp
+++ b/engines/kyra/sequence/sequences_hof.cpp
@@ -215,6 +215,8 @@ private:
uint8 _textColor[2];
uint8 _textColorMap[16];
int _textDuration[33];
+ Screen::FontId _defaultFont;
+ int _lineHeight;
const char *const *_sequenceStrings;
const char *const *_sequenceSoundList;
@@ -382,6 +384,9 @@ SeqPlayer_HOF::SeqPlayer_HOF(KyraEngine_v1 *vm, Screen_v2 *screen, OSystem *syst
_target = kHoF;
_firstScene = _loopStartScene = 0;
+ _defaultFont = (_vm->gameFlags().lang == Common::ZH_TWN) ? Screen::FID_CHINESE_FNT : ((_vm->gameFlags().lang == Common::JA_JPN) ? Screen::FID_SJIS_FNT : Screen::FID_GOLDFONT_FNT);
+ _lineHeight = (_vm->gameFlags().lang == Common::ZH_TWN) ? 16 : 10;
+
int tempSize = 0;
_vm->resource()->unloadAllPakFiles();
_vm->resource()->loadPakFile(StaticResource::staticDataFilename());
@@ -434,7 +439,7 @@ SeqPlayer_HOF::SeqPlayer_HOF(KyraEngine_v1 *vm, Screen_v2 *screen, OSystem *syst
_vm->sound()->loadSoundFile("SOUND.DAT");
_screen->loadFont(_screen->FID_GOLDFONT_FNT, "GOLDFONT.FNT");
- _screen->setFont(_vm->gameFlags().lang == Common::JA_JPN ? Screen::FID_SJIS_FNT : Screen::FID_GOLDFONT_FNT);
+ _screen->setFont(_defaultFont);
if (_vm->gameFlags().isDemo && !_vm->gameFlags().isTalkie) {
if (_vm->game() == GI_KYRA2) {
@@ -448,11 +453,25 @@ SeqPlayer_HOF::SeqPlayer_HOF(KyraEngine_v1 *vm, Screen_v2 *screen, OSystem *syst
delete[] shp;
}
} else {
+ const uint8 *boxCoords = 0;
+ int ls = 0;
+ Screen::FontId fid = Screen::FID_8_FNT;
+
+ if (_vm->gameFlags().lang == Common::JA_JPN) {
+ fid = Screen::FID_SJIS_FNT;
+ ls = 1;
+ } else if (_vm->gameFlags().lang == Common::ZH_TWN) {
+ static const uint8 boxCoordsZH[] = { 0x5a, 0x81, 0x78, 0x46 };
+ boxCoords = boxCoordsZH;
+ fid = Screen::FID_CHINESE_FNT;
+ ls = 1;
+ }
+
const MainMenu::StaticData data = {
{ _sequenceStrings[97], _sequenceStrings[96], _sequenceStrings[95], _sequenceStrings[98], nullptr },
{ 0x01, 0x04, 0x0C, 0x04, 0x00, 0xD7, 0xD6 },
{ 0xD8, 0xDA, 0xD9, 0xD8 },
- (_vm->gameFlags().lang == Common::JA_JPN) ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT, 240
+ boxCoords, fid, ls, 240
};
_menu = new MainMenu(_vm);
@@ -479,7 +498,7 @@ SeqPlayer_HOF::~SeqPlayer_HOF() {
delete _menu;
if (_vm->game() != GI_LOL)
- _screen->setFont(_vm->gameFlags().lang == Common::JA_JPN ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT);
+ _screen->setFont(_vm->gameFlags().lang == Common::ZH_TWN ? Screen::FID_CHINESE_FNT : (_vm->gameFlags().lang == Common::JA_JPN ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT));
}
int SeqPlayer_HOF::play(SequenceID firstScene, SequenceID loopStartScene) {
@@ -674,7 +693,7 @@ void SeqPlayer_HOF::playScenes() {
if (sq.flags & 4) {
int cp = _screen->setCurPage(2);
- Screen::FontId cf = _screen->setFont(_vm->gameFlags().lang == Common::JA_JPN ? Screen::FID_SJIS_FNT : Screen::FID_GOLDFONT_FNT);
+ Screen::FontId cf = _screen->setFont(_defaultFont);
if (sq.stringIndex1 != -1)
_screen->printText(_sequenceStrings[sq.stringIndex1], (320 - _screen->getTextWidth(_sequenceStrings[sq.stringIndex1])) / 2, 100 - _screen->getFontHeight(), 1, 0);
@@ -1404,7 +1423,7 @@ void SeqPlayer_HOF::updateSubTitles() {
uint8 textColor = (_textSlots[i].textcolor >= 0) ? _textSlots[i].textcolor : _textColor[0];
_screen->printText(cstr, _textSlots[i].x - (_screen->getTextWidth(cstr) / 2), yPos, textColor, 0);
- yPos += 10;
+ yPos += _lineHeight;
}
} else {
_textSlots[i].duration = -1;
@@ -1785,7 +1804,7 @@ int SeqPlayer_HOF::cbHOF_title(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
int cp = _screen->setCurPage(0);
_screen->showMouse();
_system->updateScreen();
- _result = _menu->handle(11) + 1;
+ _result = _menu->handle(_vm->gameFlags().lang == Common::ZH_TWN ? 12 : 11) + 1;
_updateAnimations = false;
if (_result == 1 || _result == 3) {
Commit: 7e87656ba7103fff381caec9d4abc4e7dd3ee2cf
https://github.com/scummvm/scummvm/commit/7e87656ba7103fff381caec9d4abc4e7dd3ee2cf
Author: athrxx (athrxx at scummvm.org)
Date: 2021-12-01T22:38:46+01:00
Commit Message:
KYRA: (LOK) - minor change to final credits code
Changed paths:
engines/kyra/sequence/sequences_lok.cpp
diff --git a/engines/kyra/sequence/sequences_lok.cpp b/engines/kyra/sequence/sequences_lok.cpp
index 5fe6fdac79..6147eb3860 100644
--- a/engines/kyra/sequence/sequences_lok.cpp
+++ b/engines/kyra/sequence/sequences_lok.cpp
@@ -1262,17 +1262,18 @@ void KyraEngine_LoK::seq_playCredits() {
uint8 *buffer = nullptr;
uint32 size = 0;
- if (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98 || _flags.lang == Common::ZH_TWN) {
+ buffer = _res->fileData("CREDITS.TXT", &size);
+ if (!buffer) {
int sizeTmp = 0;
const uint8 *bufferTmp = _staticres->loadRawData(k1CreditsStrings, sizeTmp);
+ if (!bufferTmp)
+ error("KyraEngine_LoK::seq_playCredits(): Unable to find credits data (neither in file 'CREDITS.TXT' nor in static data");
+
buffer = new uint8[sizeTmp];
assert(buffer);
memcpy(buffer, bufferTmp, sizeTmp);
size = sizeTmp;
_staticres->unloadId(k1CreditsStrings);
- } else {
- buffer = _res->fileData("CREDITS.TXT", &size);
- assert(buffer);
}
uint8 *nextString = buffer;
Commit: bd12b5f2f6700b5f36576e117c5f4b131e3e6c5c
https://github.com/scummvm/scummvm/commit/bd12b5f2f6700b5f36576e117c5f4b131e3e6c5c
Author: athrxx (athrxx at scummvm.org)
Date: 2021-12-01T22:38:58+01:00
Commit Message:
KYRA: (HOF/Traditional Chinese) - fix final sequence
Changed paths:
engines/kyra/graphics/screen.h
engines/kyra/sequence/sequences_hof.cpp
diff --git a/engines/kyra/graphics/screen.h b/engines/kyra/graphics/screen.h
index 0a77ad832b..8efbce4899 100644
--- a/engines/kyra/graphics/screen.h
+++ b/engines/kyra/graphics/screen.h
@@ -310,7 +310,7 @@ private:
uint32 _lookupTableSize;
};
-class ChineseOneByteFontMR : public ChineseFont {
+class ChineseOneByteFontMR final : public ChineseFont {
public:
ChineseOneByteFontMR(int pitch) : ChineseFont(pitch, 7, 14, 9, 14, 0, 2) {}
private:
@@ -319,7 +319,7 @@ private:
void processColorMap() override;
};
-class ChineseTwoByteFontMR : public ChineseFont {
+class ChineseTwoByteFontMR final : public ChineseFont {
public:
ChineseTwoByteFontMR(int pitch) : ChineseFont(pitch, 15, 14, 18, 14, 0, 2) {}
private:
@@ -328,16 +328,16 @@ private:
void processColorMap() override;
};
-class ChineseOneByteFontHOF : public ChineseFont {
+class ChineseOneByteFontHOF final : public ChineseFont {
public:
- ChineseOneByteFontHOF(int pitch) : ChineseFont(pitch, 7, 14, 9, 15, 0, 0) {}
+ ChineseOneByteFontHOF(int pitch) : ChineseFont(pitch, 8, 14, 9, 15, 0, 0) {}
private:
bool hasGlyphForCharacter(uint16 c) const override { return !(c & 0x80); }
uint32 getFontOffset(uint16 c) const override { return (c & 0x7F) * 14; }
void processColorMap() override;
};
-class ChineseTwoByteFontHOF : public ChineseFont {
+class ChineseTwoByteFontHOF final : public ChineseFont {
public:
ChineseTwoByteFontHOF(int pitch) : ChineseFont(pitch, 16, 14, 18, 15, 0, 0) {}
private:
@@ -357,6 +357,7 @@ public:
// already been filled. It will then try the next slot. So, unlike other fonts the
// subset fonts cannot be allowed to call the load method as often as they want
// (which we never did anyway - we only ever load each font exactly one time).
+ // But this also means that different
bool load(Common::SeekableReadStream &data) override;
void setStyles(int styles) override;
diff --git a/engines/kyra/sequence/sequences_hof.cpp b/engines/kyra/sequence/sequences_hof.cpp
index e8f7689e4c..5921b1b6ea 100644
--- a/engines/kyra/sequence/sequences_hof.cpp
+++ b/engines/kyra/sequence/sequences_hof.cpp
@@ -216,7 +216,8 @@ private:
uint8 _textColorMap[16];
int _textDuration[33];
Screen::FontId _defaultFont;
- int _lineHeight;
+ Screen::FontId _creditsFont;
+ Screen::FontId _creditsFont2;
const char *const *_sequenceStrings;
const char *const *_sequenceSoundList;
@@ -385,7 +386,8 @@ SeqPlayer_HOF::SeqPlayer_HOF(KyraEngine_v1 *vm, Screen_v2 *screen, OSystem *syst
_firstScene = _loopStartScene = 0;
_defaultFont = (_vm->gameFlags().lang == Common::ZH_TWN) ? Screen::FID_CHINESE_FNT : ((_vm->gameFlags().lang == Common::JA_JPN) ? Screen::FID_SJIS_FNT : Screen::FID_GOLDFONT_FNT);
- _lineHeight = (_vm->gameFlags().lang == Common::ZH_TWN) ? 16 : 10;
+ _creditsFont = (_vm->gameFlags().lang == Common::ZH_TWN) ? Screen::FID_CHINESE_FNT : Screen::FID_8_FNT;
+ _creditsFont2 = (_vm->gameFlags().lang == Common::ZH_TWN) ? Screen::FID_GOLDFONT_FNT : Screen::FID_8_FNT;
int tempSize = 0;
_vm->resource()->unloadAllPakFiles();
@@ -454,7 +456,7 @@ SeqPlayer_HOF::SeqPlayer_HOF(KyraEngine_v1 *vm, Screen_v2 *screen, OSystem *syst
}
} else {
const uint8 *boxCoords = 0;
- int ls = 0;
+ int8 ls = 0;
Screen::FontId fid = Screen::FID_8_FNT;
if (_vm->gameFlags().lang == Common::JA_JPN) {
@@ -762,6 +764,9 @@ void SeqPlayer_HOF::playScenes() {
_curScene++;
}
+ if (_curScene - 1 == kSequenceFrash && !_vm->shouldQuit())
+ _vm->delay(1500);
+
resetAllTextSlots();
_vm->sound()->haltTrack();
_vm->sound()->voiceStop();
@@ -773,7 +778,7 @@ void SeqPlayer_HOF::playScenes() {
bool SeqPlayer_HOF::checkAbortPlayback() {
Common::Event event;
- if (_vm->skipFlag()) {
+ if (_vm->skipFlag() || _vm->shouldQuit()) {
_abortRequested = true;
_vm->resetSkipFlag();
}
@@ -1331,7 +1336,6 @@ void SeqPlayer_HOF::printFadingText(uint16 strID, int x, int y, const uint8 *col
if (_abortPlayback || _abortRequested || _vm->shouldQuit() || _result)
return;
- Screen::FontId of = _screen->setFont(Screen::FID_8_FNT);
_screen->getPalette(0).fill(254, 2, 63);
_screen->setPaletteIndex(252, 63, 32, 48);
cmap[0] = colorMap[0];
@@ -1363,8 +1367,6 @@ void SeqPlayer_HOF::printFadingText(uint16 strID, int x, int y, const uint8 *col
resetAllTextSlots();
_textColor[0] = col0;
-
- _screen->setFont(of);
}
int SeqPlayer_HOF::displaySubTitle(uint16 strIndex, uint16 posX, uint16 posY, int duration, uint16 width) {
@@ -1391,6 +1393,7 @@ int SeqPlayer_HOF::displaySubTitle(uint16 strIndex, uint16 posX, uint16 posY, in
void SeqPlayer_HOF::updateSubTitles() {
int curPage = _screen->setCurPage(2);
+ int lineHeight = (_screen->_currentFont == Screen::FID_CHINESE_FNT) ? 16 : 10;
char outputStr[70];
for (int i = 0; i < 10; i++) {
@@ -1422,8 +1425,11 @@ void SeqPlayer_HOF::updateSubTitles() {
}
uint8 textColor = (_textSlots[i].textcolor >= 0) ? _textSlots[i].textcolor : _textColor[0];
- _screen->printText(cstr, _textSlots[i].x - (_screen->getTextWidth(cstr) / 2), yPos, textColor, 0);
- yPos += _lineHeight;
+ int xOffs = (_screen->_currentFont == Screen::FID_CHINESE_FNT ? string.size() * 9 : _screen->getTextWidth(cstr)) >> 1;
+ _screen->printText(cstr, _textSlots[i].x - xOffs, yPos, textColor, 0);
+ if (_screen->_currentFont == Screen::FID_CHINESE_FNT && textColor >= 240)
+ _screen->printText(cstr, _textSlots[i].x - xOffs + 1, yPos, textColor, 0);
+ yPos += lineHeight;
}
} else {
_textSlots[i].duration = -1;
@@ -1443,12 +1449,14 @@ char *SeqPlayer_HOF::preprocessString(const char *srcStr, int width) {
dstStr[lineStart + linePos++] = *srcStr++;
dstStr[lineStart + linePos] = 0;
+ Screen::FontId of = (_vm->gameFlags().lang == Common::ZH_TWN) ? _screen->setFont(_creditsFont2) : _screen->_currentFont;
int len = _screen->getTextWidth(&dstStr[lineStart]);
+ _screen->setFont(of);
if (width >= len && *srcStr) {
dstStr[lineStart + linePos++] = *srcStr++;
} else {
dstStr[lineStart + linePos] = '\r';
- lineStart += linePos + 1;
+ lineStart += (linePos + 1);
linePos = 0;
if (*srcStr)
srcStr++;
@@ -2268,6 +2276,7 @@ int SeqPlayer_HOF::cbHOF_funters(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
int subTitleFirstFrame = 0;
int subTitleLastFrame = 0;
uint16 voiceIndex = 0;
+ Screen::FontId of = _creditsFont;
switch (frm) {
case -2:
@@ -2281,6 +2290,7 @@ int SeqPlayer_HOF::cbHOF_funters(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
memset(_textColorMap, _textColor[1], 16);
_textColor[0] = _textColorMap[1] = 0xFF;
_screen->setTextColorMap(_textColorMap);
+ of = _screen->setFont(_creditsFont);
frameEnd = _system->getMillis() + 480 * _tickLength / 1000;
printFadingText(81, 240, 70, _textColorMap, 252);
@@ -2288,6 +2298,7 @@ int SeqPlayer_HOF::cbHOF_funters(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
_screen->copyPage(2, 12);
playSoundAndDisplaySubTitle(_vm->gameFlags().isTalkie ? 28 : 24);
delayUntil(frameEnd);
+ _screen->setFont(of);
_textColor[0] = 1;
if (_vm->gameFlags().isTalkie) {
@@ -2352,10 +2363,12 @@ int SeqPlayer_HOF::cbHOF_ferb(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
int subTitleFirstFrame = 0;
int subTitleLastFrame = 0;
uint16 voiceIndex = 0;
+ Screen::FontId of = _creditsFont;
switch (frm) {
case -2:
doTransition(9);
+ of = _screen->setFont(_creditsFont2);
frameEnd = _system->getMillis() + 480 * _tickLength / 1000;
printFadingText(34, 240, _vm->gameFlags().isTalkie ? 60 : 40, _textColorMap, 252);
printFadingText(35, 240, _vm->gameFlags().isTalkie ? 70 : 50, _textColorMap, _textColor[0]);
@@ -2365,6 +2378,7 @@ int SeqPlayer_HOF::cbHOF_ferb(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
printFadingText(39, 240, _vm->gameFlags().isTalkie ? 130 : 120, _textColorMap, _textColor[0]);
if (_vm->gameFlags().platform == Common::kPlatformFMTowns || _vm->gameFlags().platform == Common::kPlatformPC98)
printFadingText(103, 240, 130, _textColorMap, _textColor[0]);
+ _screen->setFont(of);
delayUntil(frameEnd);
setCountDown(0);
break;
@@ -2389,7 +2403,7 @@ int SeqPlayer_HOF::cbHOF_ferb(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
subTitleLastFrame = 14;
}
subTitleX = 116;
- subTitleY = 90;
+ subTitleY = (_vm->gameFlags().lang == Common::ZH_TWN) ? 82 : 90;
subTitleW = 60;
playDialogueAnimation(24, voiceIndex, 149, subTitleX, subTitleY, subTitleW, wsaObj, subTitleFirstFrame, subTitleLastFrame, x, y);
@@ -2408,10 +2422,10 @@ int SeqPlayer_HOF::cbHOF_ferb(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
subTitleY = 48;
subTitleW = 88;
} else {
- subTitleY = 60;
+ subTitleY = (_vm->gameFlags().lang == Common::ZH_TWN) ? 44 : 60;
subTitleW = 100;
}
- subTitleX = 60;
+ subTitleX = (_vm->gameFlags().lang == Common::ZH_TWN) ? 76 : 60;
if (_vm->gameFlags().isTalkie)
voiceIndex = 36;
@@ -2434,12 +2448,13 @@ int SeqPlayer_HOF::cbHOF_fish(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
int subTitleY = 0;
int subTitleW = 0;
uint16 voiceIndex = 0;
+ Screen::FontId of = _creditsFont;
switch (frm) {
case -2:
doTransition(9);
+ of = _screen->setFont(_creditsFont2);
frameEnd = _system->getMillis() + 480 * _tickLength / 1000;
-
printFadingText(40, 240, _vm->gameFlags().isTalkie ? 55 : 40, _textColorMap, 252);
printFadingText(41, 240, _vm->gameFlags().isTalkie ? 65 : 50, _textColorMap, _textColor[0]);
printFadingText(42, 240, _vm->gameFlags().isTalkie ? 75 : 60, _textColorMap, _textColor[0]);
@@ -2448,6 +2463,7 @@ int SeqPlayer_HOF::cbHOF_fish(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
printFadingText(93, 240, _vm->gameFlags().isTalkie ? 125 : 110, _textColorMap, 252);
printFadingText(94, 240, _vm->gameFlags().isTalkie ? 135 : 120, _textColorMap, _textColor[0]);
delayUntil(frameEnd);
+ _screen->setFont(of);
setCountDown(0);
break;
@@ -2513,6 +2529,7 @@ int SeqPlayer_HOF::cbHOF_fheep(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
int subTitleFirstFrame = 0;
int subTitleLastFrame = 0;
uint16 voiceIndex = 0;
+ Screen::FontId of = _creditsFont;
switch (frm) {
case -2:
@@ -2520,6 +2537,7 @@ int SeqPlayer_HOF::cbHOF_fheep(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
_screen->copyPage(2, 0);
_screen->updateScreen();
doTransition(9);
+ of = _screen->setFont(_creditsFont2);
frameEnd = _system->getMillis() + 480 * _tickLength / 1000;
printFadingText(49, 240, 20, _textColorMap, 252);
printFadingText(50, 240, 30, _textColorMap, _textColor[0]);
@@ -2538,6 +2556,7 @@ int SeqPlayer_HOF::cbHOF_fheep(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
printFadingText(64, 240, 160, _textColorMap, _textColor[0]);
delayUntil(frameEnd);
+ _screen->setFont(of);
setCountDown(0);
break;
@@ -2551,7 +2570,10 @@ int SeqPlayer_HOF::cbHOF_fheep(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
case 2:
playSoundAndDisplaySubTitle(_vm->gameFlags().isTalkie ? 25 : 21);
- if (_vm->gameFlags().lang == Common::FR_FRA) {
+ if (_vm->gameFlags().lang == Common::ZH_TWN) {
+ subTitleX = 83;
+ subTitleY = 68;
+ } else if (_vm->gameFlags().lang == Common::FR_FRA) {
subTitleX = 92;
subTitleY = 72;
} else {
@@ -2593,6 +2615,7 @@ int SeqPlayer_HOF::cbHOF_farmer(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
int subTitleY = 0;
int subTitleW = 0;
uint16 voiceIndex = 0;
+ Screen::FontId of = _creditsFont;
switch (frm) {
case -2:
@@ -2600,6 +2623,7 @@ int SeqPlayer_HOF::cbHOF_farmer(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
_screen->copyPage(2, 0);
_screen->updateScreen();
doTransition(9);
+ of = _screen->setFont(_creditsFont2);
frameEnd = _system->getMillis() + 480 * _tickLength / 1000;
printFadingText(45, 240, 40, _textColorMap, 252);
printFadingText(46, 240, 50, _textColorMap, _textColor[0]);
@@ -2614,6 +2638,7 @@ int SeqPlayer_HOF::cbHOF_farmer(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
if (_vm->gameFlags().platform == Common::kPlatformFMTowns || _vm->gameFlags().platform == Common::kPlatformPC98)
printFadingText(104, 240, 160, _textColorMap, _textColor[0]);
delayUntil(frameEnd);
+ _screen->setFont(of);
setCountDown(0);
break;
@@ -2644,6 +2669,9 @@ int SeqPlayer_HOF::cbHOF_farmer(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
subTitleY = 25;
}
voiceIndex = 40;
+ } else if (_vm->gameFlags().lang == Common::ZH_TWN) {
+ subTitleX = 80;
+ subTitleY = 27;
}
playDialogueAnimation(29, voiceIndex, 150, subTitleX, subTitleY, subTitleW, wsaObj, 12, -21, x, y);
@@ -2664,12 +2692,13 @@ int SeqPlayer_HOF::cbHOF_fuards(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
int subTitleW = 0;
int subTitleFirstFrame = 0;
int subTitleLastFrame = 0;
-
uint16 voiceIndex = 0;
+ Screen::FontId of = _creditsFont;
switch (frm) {
case -2:
doTransition(9);
+ of = _screen->setFont(_creditsFont2);
frameEnd = _system->getMillis() + 480 * _tickLength / 1000;
printFadingText(70, 240, 20, _textColorMap, 252);
printFadingText(71, 240, 30, _textColorMap, _textColor[0]);
@@ -2686,6 +2715,7 @@ int SeqPlayer_HOF::cbHOF_fuards(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
printFadingText(91, 240, 140, _textColorMap, _textColor[0]);
printFadingText(92, 240, 150, _textColorMap, _textColor[0]);
delayUntil(frameEnd);
+ _screen->setFont(of);
setCountDown(0);
break;
@@ -2708,11 +2738,11 @@ int SeqPlayer_HOF::cbHOF_fuards(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
subTitleLastFrame = 21;
voiceIndex = 41;
} else {
- subTitleX = 62;
+ subTitleX = (_vm->gameFlags().lang == Common::ZH_TWN) ? 80 : 62;
subTitleFirstFrame = 9;
subTitleLastFrame = 13;
}
- subTitleY = (_vm->gameFlags().lang == Common::FR_FRA || _vm->gameFlags().lang == Common::DE_DEU) ? 88 :100;
+ subTitleY = (_vm->gameFlags().lang == Common::FR_FRA || _vm->gameFlags().lang == Common::DE_DEU) ? 88 : (_vm->gameFlags().lang == Common::ZH_TWN ? 90 : 100);
subTitleW = 80;
playDialogueAnimation(30, voiceIndex, 137, subTitleX, subTitleY, subTitleW, wsaObj, subTitleFirstFrame, subTitleLastFrame, x, y);
@@ -2736,7 +2766,7 @@ int SeqPlayer_HOF::cbHOF_fuards(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
subTitleFirstFrame = 16;
subTitleLastFrame = 21;
}
- subTitleY = 100;
+ subTitleY = (_vm->gameFlags().lang == Common::ZH_TWN) ? 80 : 100;
subTitleW = 100;
playDialogueAnimation(31, voiceIndex, 143, subTitleX, subTitleY, subTitleW, wsaObj, subTitleFirstFrame, subTitleLastFrame, x, y);
@@ -2758,6 +2788,7 @@ int SeqPlayer_HOF::cbHOF_firates(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
int subTitleY = 0;
int subTitleW = 0;
uint16 voiceIndex = 0;
+ Screen::FontId of = _creditsFont;
switch (frm) {
case -2:
@@ -2765,17 +2796,56 @@ int SeqPlayer_HOF::cbHOF_firates(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
_screen->copyPage(2, 0);
_screen->updateScreen();
doTransition(9);
+ of = _screen->setFont(_creditsFont);
frameEnd = _system->getMillis() + 480 * _tickLength / 1000;
- printFadingText(76, 240, 40, _textColorMap, 252);
- printFadingText(77, 240, 50, _textColorMap, 252);
- printFadingText(78, 240, 60, _textColorMap, _textColor[0]);
- printFadingText(79, 240, 70, _textColorMap, _textColor[0]);
- printFadingText(80, 240, 80, _textColorMap, _textColor[0]);
- printFadingText(84, 240, 100, _textColorMap, 252);
- printFadingText(85, 240, 110, _textColorMap, _textColor[0]);
- printFadingText(99, 240, 130, _textColorMap, 252);
- printFadingText(100, 240, 140, _textColorMap, _textColor[0]);
+
+ if (_vm->gameFlags().lang == Common::ZH_TWN) {
+ printFadingText(103, 240, 80, _textColorMap, 252);
+ printFadingText(104, 240, 96, _textColorMap, _textColor[0]);
+ printFadingText(105, 240, 112, _textColorMap, _textColor[0]);
+ delayUntil(frameEnd);
+ _screen->fillRect(160, 0, 310, 199, 0);
+ frameEnd = _system->getMillis() + 480 * _tickLength / 1000;
+ printFadingText(106, 240, 20, _textColorMap, 252);
+ printFadingText(107, 240, 36, _textColorMap, _textColor[0]);
+ printFadingText(108, 240, 60, _textColorMap, 252);
+ printFadingText(109, 240, 76, _textColorMap, _textColor[0]);
+ printFadingText(110, 240, 100, _textColorMap, 252);
+ printFadingText(111, 240, 116, _textColorMap, _textColor[0]);
+ printFadingText(112, 240, 132, _textColorMap, _textColor[0]);
+ printFadingText(113, 240, 156, _textColorMap, 252);
+ printFadingText(114, 240, 172, _textColorMap, _textColor[0]);
+ delayUntil(frameEnd);
+ _screen->fillRect(160, 0, 310, 199, 0);
+ frameEnd = _system->getMillis() + 480 * _tickLength / 1000;
+ printFadingText(115, 240, 24, _textColorMap, 252);
+ printFadingText(116, 240, 40, _textColorMap, _textColor[0]);
+ printFadingText(117, 240, 64, _textColorMap, 252);
+ printFadingText(118, 240, 80, _textColorMap, _textColor[0]);
+ printFadingText(119, 240, 104, _textColorMap, 252);
+ printFadingText(120, 240, 120, _textColorMap, _textColor[0]);
+ printFadingText(121, 240, 136, _textColorMap, _textColor[0]);
+ printFadingText(122, 240, 152, _textColorMap, _textColor[0]);
+ delayUntil(frameEnd);
+ _screen->fillRect(160, 0, 310, 199, 0);
+ frameEnd = _system->getMillis() + 480 * _tickLength / 1000;
+ printFadingText(123, 240, 3, _textColorMap, 252);
+ for (int i = 0; i < 12; ++i)
+ printFadingText(124 + i, 240, 20 + (i << 4), _textColorMap, _textColor[0]);
+
+ } else {
+ printFadingText(76, 240, 40, _textColorMap, 252);
+ printFadingText(77, 240, 50, _textColorMap, 252);
+ printFadingText(78, 240, 60, _textColorMap, _textColor[0]);
+ printFadingText(79, 240, 70, _textColorMap, _textColor[0]);
+ printFadingText(80, 240, 80, _textColorMap, _textColor[0]);
+ printFadingText(84, 240, 100, _textColorMap, 252);
+ printFadingText(85, 240, 110, _textColorMap, _textColor[0]);
+ printFadingText(99, 240, 130, _textColorMap, 252);
+ printFadingText(100, 240, 140, _textColorMap, _textColor[0]);
+ }
delayUntil(frameEnd);
+ _screen->setFont(of);
setCountDown(0);
break;
@@ -2803,7 +2873,7 @@ int SeqPlayer_HOF::cbHOF_firates(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
subTitleW = 140;
} else {
subTitleX = 74;
- subTitleY = (_vm->gameFlags().lang == Common::FR_FRA) ? 96: 108;
+ subTitleY = (_vm->gameFlags().lang == Common::FR_FRA) ? 96: (_vm->gameFlags().lang == Common::ZH_TWN ? 98 : 108);
subTitleW = 80;
}
@@ -2826,7 +2896,7 @@ int SeqPlayer_HOF::cbHOF_firates(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
voiceIndex = 44;
subTitleX = 90;
- subTitleY = (_vm->gameFlags().lang == Common::DE_DEU) ? 60 : 76;
+ subTitleY = (_vm->gameFlags().lang == Common::DE_DEU) ? 60 : (_vm->gameFlags().lang == Common::ZH_TWN ? 86 : 76);
subTitleW = 80;
playDialogueAnimation(33, voiceIndex, 143, subTitleX, subTitleY, subTitleW, wsaObj, 31, 34, x, y);
@@ -2879,7 +2949,7 @@ int SeqPlayer_HOF::cbHOF_frash(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
if (_callbackCurrentFrame < 20 && _talkieFinaleExtraFlag) {
_animCurrentFrame = 0;
} else {
- _animDuration = _vm->gameFlags().isTalkie ? 500 : (300 + _vm->_rnd.getRandomNumberRng(1, 300));
+ _animDuration = 500;
playSoundAndDisplaySubTitle(_vm->gameFlags().isTalkie ? 26 : 22);
if (_talkieFinaleExtraFlag) {
_callbackCurrentFrame = 3;
@@ -2894,7 +2964,7 @@ int SeqPlayer_HOF::cbHOF_frash(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
case 3:
playSoundAndDisplaySubTitle(_vm->gameFlags().isTalkie ? 27 : 23);
- _animDuration = _vm->gameFlags().isTalkie ? 500 : (300 + _vm->_rnd.getRandomNumberRng(1, 300));
+ _animDuration = 500;
break;
case 4:
@@ -2905,9 +2975,9 @@ int SeqPlayer_HOF::cbHOF_frash(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
playSoundAndDisplaySubTitle(_vm->gameFlags().isTalkie ? 27 : 23);
tmp = _callbackCurrentFrame / 6;
if (tmp == 2)
- _animDuration = _vm->gameFlags().isTalkie ? 7 : (1 + _vm->_rnd.getRandomNumberRng(1, 10));
+ _animDuration = 7;
else if (tmp < 2)
- _animDuration = _vm->gameFlags().isTalkie ? 500 : (300 + _vm->_rnd.getRandomNumberRng(1, 300));
+ _animDuration = 500;
break;
case 6:
Commit: f436ebbeb0de4200d4a56b1e33662eed27d479d0
https://github.com/scummvm/scummvm/commit/f436ebbeb0de4200d4a56b1e33662eed27d479d0
Author: athrxx (athrxx at scummvm.org)
Date: 2021-12-01T22:39:24+01:00
Commit Message:
KYRA: (HOF/Traditional Chinese) - fix ingame texts
(adjust ui, text formatting, menus, etc)
Changed paths:
engines/kyra/engine/kyra_hof.cpp
engines/kyra/engine/kyra_hof.h
engines/kyra/graphics/screen.cpp
engines/kyra/graphics/screen.h
engines/kyra/graphics/screen_lok.cpp
engines/kyra/gui/gui_hof.cpp
engines/kyra/gui/gui_hof.h
engines/kyra/gui/gui_v2.cpp
engines/kyra/gui/gui_v2.h
engines/kyra/resource/staticres.cpp
engines/kyra/script/script_hof.cpp
engines/kyra/text/text.cpp
engines/kyra/text/text_hof.cpp
diff --git a/engines/kyra/engine/kyra_hof.cpp b/engines/kyra/engine/kyra_hof.cpp
index 18b07d0029..0105ccfd90 100644
--- a/engines/kyra/engine/kyra_hof.cpp
+++ b/engines/kyra/engine/kyra_hof.cpp
@@ -137,6 +137,7 @@ KyraEngine_HoF::KyraEngine_HoF(OSystem *system, const GameFlags &flags) : KyraEn
_defaultFont = (_flags.lang == Common::ZH_TWN) ? Screen::FID_CHINESE_FNT : ((_flags.lang == Common::JA_JPN) ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT);
_bookFont = (_flags.lang == Common::ZH_TWN) ? Screen::FID_CHINESE_FNT : ((_flags.lang == Common::JA_JPN) ? Screen::FID_SJIS_FNT : Screen::FID_BOOKFONT_FNT);
+ _lineHeight = (_flags.lang == Common::ZH_TWN) ? 16 : 10;
}
KyraEngine_HoF::~KyraEngine_HoF() {
@@ -195,6 +196,7 @@ Common::Error KyraEngine_HoF::init() {
_screen->loadFont(_screen->FID_8_FNT, "FONT9P.FNT");
} else if (_flags.lang == Common::ZH_TWN) {
_screen->loadFont(Screen::FID_CHINESE_FNT, "HOF.PAK");
+ _screen->_lineSpacing = 1;
} else {
_screen->loadFont(_screen->FID_6_FNT, "6.FNT");
_screen->loadFont(_screen->FID_8_FNT, "8FAT.FNT");
@@ -842,7 +844,8 @@ void KyraEngine_HoF::showMessageFromCCode(int id, int16 palIndex, int) {
void KyraEngine_HoF::showMessage(const Common::String &string, int16 palIndex) {
_shownMessage = string;
- _screen->fillRect(0, 190, 319, 199, 0xCF);
+ int y = (_flags.lang == Common::ZH_TWN) ? 186 : 190;
+ _screen->fillRect(0, y, 319, 199, 0xCF);
if (!string.empty()) {
if (palIndex != -1 || _fadeMessagePalette) {
@@ -853,7 +856,7 @@ void KyraEngine_HoF::showMessage(const Common::String &string, int16 palIndex) {
}
int x = _text->getCenterStringX(string, 0, 320);
- _text->printText(string, x, 190, 255, 207, 0);
+ _text->printText(string, x, y, 255, 207, 0);
setTimer1DelaySecs(7);
}
@@ -874,7 +877,7 @@ void KyraEngine_HoF::showChapterMessage(int id, int16 palIndex) {
void KyraEngine_HoF::updateCommandLineEx(int str1, int str2, int16 palIndex) {
Common::String str = getTableString(str1, _cCodeBuffer, true);
- if (_flags.lang != Common::JA_JPN && _flags.lang != Common::HE_ISR) {
+ if (_flags.lang != Common::ZH_TWN && _flags.lang != Common::JA_JPN && _flags.lang != Common::HE_ISR) {
if (uint32 i = (uint32)str.findFirstOf(' ') + 1) {
str.erase(0, i);
str.setChar(toupper(str[0]), 0);
@@ -882,12 +885,14 @@ void KyraEngine_HoF::updateCommandLineEx(int str1, int str2, int16 palIndex) {
}
if (str2 > 0) {
- if (_flags.lang != Common::JA_JPN && _flags.lang != Common::HE_ISR)
+ if (_flags.lang != Common::ZH_TWN && _flags.lang != Common::JA_JPN && _flags.lang != Common::HE_ISR)
str += " ";
- if (_flags.lang != Common::HE_ISR)
- str += getTableString(str2, _cCodeBuffer, 1);
- else
+ if (_flags.lang == Common::HE_ISR)
str = getTableString(str2, _cCodeBuffer, 1) + " " + str + ".";
+ else if (_flags.lang == Common::ZH_TWN)
+ str = getTableString(str2, _cCodeBuffer, 1) + str;
+ else
+ str += getTableString(str2, _cCodeBuffer, 1);
}
showMessage(str, palIndex);
@@ -1931,7 +1936,7 @@ void KyraEngine_HoF::writeSettings() {
case 0:
default:
- _flags.lang = Common::EN_ANY;
+ _flags.lang = _langIntern ? Common::ZH_TWN : Common::EN_ANY;
}
if (_flags.lang == _flags.replacedLang && _flags.fanLang != Common::UNK_LANG)
diff --git a/engines/kyra/engine/kyra_hof.h b/engines/kyra/engine/kyra_hof.h
index 67260232c5..64c528ea2c 100644
--- a/engines/kyra/engine/kyra_hof.h
+++ b/engines/kyra/engine/kyra_hof.h
@@ -381,6 +381,7 @@ protected:
Screen::FontId _defaultFont;
Screen::FontId _bookFont;
+ int _lineHeight;
// chat
bool _chatIsNote;
diff --git a/engines/kyra/graphics/screen.cpp b/engines/kyra/graphics/screen.cpp
index 03ba2ed06c..9b54c93a14 100644
--- a/engines/kyra/graphics/screen.cpp
+++ b/engines/kyra/graphics/screen.cpp
@@ -1524,7 +1524,7 @@ void Screen::drawChar(uint16 c, int x, int y, int pitch) {
const bool useOverlay = fnt->usesOverlay();
const int charWidth = fnt->getCharWidth(c);
- const int charHeight = fnt->getHeight();
+ const int charHeight = fnt->getCharHeight(c);
if (x < 0 || y < 0)
return;
@@ -3970,6 +3970,15 @@ int MultiSubsetFont::getCharWidth(uint16 c) const {
return res > 0 ? res : 0;
}
+int MultiSubsetFont::getCharHeight(uint16 c) const {
+ int res = 0;
+ for (Common::Array<Font*>::const_iterator i = _subsets->begin(); i != _subsets->end(); ++i) {
+ if ((res = (*i)->getCharHeight(c)) != -1)
+ break;
+ }
+ return res > 0 ? res : 0;
+}
+
void MultiSubsetFont::setColorMap(const uint8 *src) {
for (Common::Array<Font*>::const_iterator i = _subsets->begin(); i != _subsets->end(); ++i)
(*i)->setColorMap(src);
diff --git a/engines/kyra/graphics/screen.h b/engines/kyra/graphics/screen.h
index 8efbce4899..3e481ea05e 100644
--- a/engines/kyra/graphics/screen.h
+++ b/engines/kyra/graphics/screen.h
@@ -266,6 +266,7 @@ public:
int getHeight() const override { return _spacingHeight + (_border ? _borderExtraSpacingHeight : 0); }
int getWidth() const override { return _spacingWidth + (_border ? _borderExtraSpacingWidth : 0); }
int getCharWidth(uint16 c) const override { return hasGlyphForCharacter(c) ? getWidth() : -1; }
+ int getCharHeight(uint16 c) const override { return hasGlyphForCharacter(c) ? _renderHeight + (_border ? _borderExtraSpacingHeight : 0) : -1; }
void setColorMap(const uint8 *src) override;
void drawChar(uint16 c, byte *dst, int pitch, int) const override;
@@ -364,6 +365,7 @@ public:
int getHeight() const override;
int getWidth() const override;
int getCharWidth(uint16 c) const override;
+ int getCharHeight(uint16 c) const override;
void setColorMap(const uint8 *src) override;
void drawChar(uint16 c, byte *dst, int pitch, int) const override;
diff --git a/engines/kyra/graphics/screen_lok.cpp b/engines/kyra/graphics/screen_lok.cpp
index 4e2ae34bdd..1d7cedd25d 100644
--- a/engines/kyra/graphics/screen_lok.cpp
+++ b/engines/kyra/graphics/screen_lok.cpp
@@ -493,7 +493,7 @@ void ChineseOneByteFontLoK::processColorMap() {
_textColor[1] = _colorMap[0];
}
-ChineseTwoByteFontLoK::ChineseTwoByteFontLoK(int pitch, const uint16 *lookupTable, uint32 lookupTableSize) : ChineseFont(pitch, 15, 14, 18, 17, 0, 0),
+ChineseTwoByteFontLoK::ChineseTwoByteFontLoK(int pitch, const uint16 *lookupTable, uint32 lookupTableSize) : ChineseFont(pitch, 15, 14, 18, 17, 0, 3),
_lookupTable(lookupTable), _lookupTableSize(lookupTableSize) {
assert(lookupTable);
}
diff --git a/engines/kyra/gui/gui_hof.cpp b/engines/kyra/gui/gui_hof.cpp
index 7d1b68eef6..85f4e28d6c 100644
--- a/engines/kyra/gui/gui_hof.cpp
+++ b/engines/kyra/gui/gui_hof.cpp
@@ -108,6 +108,14 @@ Common::String GUI_HoF::getMenuItemLabel(const MenuItem &menuItem) {
}
Common::String GUI_HoF::getTableString(int id, bool decode) {
+ // Apparently, these were forgotten to translate in the text files...
+ if (_vm->gameFlags().lang == Common::ZH_TWN) {
+ if (id == 18)
+ return Common::String(_saveLoadStringsZH[1]);
+ else if (id == 42)
+ return Common::String(_saveLoadStringsZH[0]);
+ }
+
return _vm->getTableString(id, _vm->_optionsBuffer, decode);
}
@@ -263,7 +271,22 @@ void KyraEngine_HoF::scrollInventoryWheel() {
memcpy(_screenBuffer, _screen->getCPagePtr(2), 64000);
uint8 overlay[0x100];
_screen->generateOverlay(_screen->getPalette(0), overlay, 0, 50);
- _screen->copyRegion(0x46, 0x90, 0x46, 0x79, 0x71, 0x17, 0, 2, Screen::CR_NO_P_CHECK);
+
+ int ry2 = 121;
+ int rh = 23;
+ int rh2 = 46;
+ int rm = 981;
+ // The Chinese version needs a couple of extra pixels for the text display.
+ // at the bottom. This means that the animation has to be clipped a bit, so
+ // that it does not collide with the text.
+ if (_flags.lang == Common::ZH_TWN) {
+ ry2 = 123;
+ rh = 21;
+ rh2 = 42;
+ rm = 896;
+ }
+
+ _screen->copyRegion(70, 144, 70, ry2, 113, rh, 0, 2, Screen::CR_NO_P_CHECK);
snd_playSoundEffect(0x25);
bool breakFlag = false;
@@ -275,14 +298,14 @@ void KyraEngine_HoF::scrollInventoryWheel() {
uint32 endTime = _system->getMillis() + _tickLength;
- int y = (i * 981) >> 8;
- if (y >= 23 || i == 6) {
- y = 23;
+ int y = (i * rm) >> 8;
+ if (y >= rh || i == 6) {
+ y = rh;
breakFlag = true;
}
- _screen->applyOverlay(0x46, 0x79, 0x71, 0x17, 2, overlay);
- _screen->copyRegion(0x46, y+0x79, 0x46, 0x90, 0x71, 0x2E, 2, 0, Screen::CR_NO_P_CHECK);
+ _screen->applyOverlay(70, ry2, 113, rh, 2, overlay);
+ _screen->copyRegion(70, y+ry2, 70, 144, 113, rh2, 2, 0, Screen::CR_NO_P_CHECK);
_screen->updateScreen();
delayUntil(endTime);
diff --git a/engines/kyra/gui/gui_hof.h b/engines/kyra/gui/gui_hof.h
index 658d361f63..27b36df471 100644
--- a/engines/kyra/gui/gui_hof.h
+++ b/engines/kyra/gui/gui_hof.h
@@ -77,6 +77,8 @@ private:
static const uint16 _menuStringsTalkie[];
static const uint16 _menuStringsOther[];
+
+ static const char *const _saveLoadStringsZH[2];
};
} // End of namespace Kyra
diff --git a/engines/kyra/gui/gui_v2.cpp b/engines/kyra/gui/gui_v2.cpp
index cb4d496c50..bfb3e5c1f7 100644
--- a/engines/kyra/gui/gui_v2.cpp
+++ b/engines/kyra/gui/gui_v2.cpp
@@ -45,6 +45,13 @@ GUI_v2::GUI_v2(KyraEngine_v2 *vm) : GUI_v1(vm), _vm(vm), _screen(vm->screen_v2()
_sliderHandlerFunctor = BUTTON_FUNCTOR(GUI_v2, this, &GUI_v2::sliderHandler);
_savegameOffset = 0;
_isDeleteMenu = false;
+ _saveMenuFont = Screen::FID_8_FNT;
+ _saveMenuCursor = Common::Rect(1, 1, 7, 8);
+
+ if (vm->game() == GI_KYRA2 && vm->gameFlags().lang == Common::ZH_TWN) {
+ _saveMenuFont = Screen::FID_CHINESE_FNT;
+ _saveMenuCursor = Common::Rect(0, 0, 8, 14);
+ }
}
Button *GUI_v2::addButtonToList(Button *list, Button *newButton) {
@@ -528,7 +535,8 @@ int GUI_v2::scrollDownButton(Button *button) {
int GUI_v2::resumeGame(Button *caller) {
updateMenuButton(caller);
_displayMenu = false;
- _screen->setFontStyles(_screen->_currentFont, Font::kStyleBorder);
+ if (!(_vm->game() == GI_KYRA2 && _vm->gameFlags().lang == Common::ZH_TWN))
+ _screen->setFontStyles(_screen->_currentFont, Font::kStyleBorder);
return 0;
}
@@ -665,7 +673,7 @@ int GUI_v2::clickSaveSlot(Button *caller) {
backUpPage1(_vm->_screenBuffer);
initMenu(_savenameMenu);
- _screen->fillRect(0x26, 0x5B, 0x11F, 0x66, textFieldColor2());
+ _screen->fillRect(0x26, 0x5B, 0x11F, _vm->gameFlags().lang == Common::ZH_TWN ? 0x6b : 0x66, textFieldColor2());
g_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, true);
const char *desc = nameInputProcess(_saveDescription, 0x27, 0x5C, textFieldColor1(), textFieldColor2(), textFieldColor3(), 0x50);
g_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false);
@@ -749,9 +757,10 @@ int GUI_v2::deleteMenu(Button *caller) {
const char *GUI_v2::nameInputProcess(char *buffer, int x, int y, uint8 c1, uint8 c2, uint8 c3, int bufferSize) {
bool running = true;
int curPos = strlen(buffer);
-
+ uint8 keyLim = (_vm->gameFlags().lang == Common::JA_JPN || _vm->gameFlags().lang == Common::ZH_TWN) ? 128 : 226;
int x2 = x, y2 = y;
- Screen::FontId of = _screen->setFont(Screen::FID_8_FNT);
+
+ Screen::FontId of = _screen->setFont(_saveMenuFont);
_text->printText(buffer, x, y, c1, c2, c2);
for (int i = 0; i < curPos; ++i)
@@ -763,7 +772,7 @@ const char *GUI_v2::nameInputProcess(char *buffer, int x, int y, uint8 c1, uint8
_keyPressed.reset();
_cancelNameInput = _finishNameInput = false;
while (running && !_vm->shouldQuit()) {
- of = _screen->setFont(Screen::FID_8_FNT);
+ of = _screen->setFont(_saveMenuFont);
checkTextfieldInput();
_screen->setFont(of);
processHighlights(_savenameMenu);
@@ -788,12 +797,17 @@ const char *GUI_v2::nameInputProcess(char *buffer, int x, int y, uint8 c1, uint8
drawTextfieldBlock(x2, y2, c3);
_screen->updateScreen();
_lastScreenUpdate = _vm->_system->getMillis();
- } else if ((uint8)inputKey > 31 && (uint8)inputKey < (_vm->gameFlags().lang == Common::JA_JPN ? 128 : 226) && curPos < bufferSize) {
- of = _screen->setFont(Screen::FID_8_FNT);
+ } else if ((uint8)inputKey > 31 && (uint8)inputKey < keyLim && curPos < bufferSize) {
+ of = _screen->setFont(_saveMenuFont);
if (x2 + getCharWidth(inputKey) + 7 < 0x11F) {
buffer[curPos] = inputKey;
const char text[2] = { buffer[curPos], 0 };
- _text->printText(text, x2, y2, c1, c2, c2);
+ if (_saveMenuFont == Screen::FID_CHINESE_FNT) {
+ drawTextfieldBlock(x2, y2, c2);
+ _text->printText(text, x2, y2, c1, c2, 0);
+ } else {
+ _text->printText(text, x2, y2, c1, c2, c2);
+ }
x2 += getCharWidth(inputKey);
drawTextfieldBlock(x2, y2, c3);
++curPos;
@@ -836,7 +850,7 @@ bool GUI_v2::checkSavegameDescription(const char *buffer, int size) {
}
int GUI_v2::getCharWidth(uint8 c) {
- Screen::FontId old = _screen->setFont(Screen::FID_8_FNT);
+ Screen::FontId old = _screen->setFont(_saveMenuFont);
_screen->_charSpacing = -2;
int width = _screen->getCharWidth(c);
_screen->_charSpacing = 0;
@@ -845,7 +859,7 @@ int GUI_v2::getCharWidth(uint8 c) {
}
void GUI_v2::drawTextfieldBlock(int x, int y, uint8 c) {
- _screen->fillRect(x + 1, y + 1, x + 7, y + 8, c);
+ _screen->fillRect(x + _saveMenuCursor.left, y + _saveMenuCursor.top, x + _saveMenuCursor.right, y + _saveMenuCursor.bottom, c);
}
bool GUI_v2::choiceDialog(int name, bool type) {
diff --git a/engines/kyra/gui/gui_v2.h b/engines/kyra/gui/gui_v2.h
index 8668599638..fe2da71999 100644
--- a/engines/kyra/gui/gui_v2.h
+++ b/engines/kyra/gui/gui_v2.h
@@ -221,6 +221,9 @@ protected:
int getCharWidth(uint8 c);
void drawTextfieldBlock(int x, int y, uint8 c);
+ Screen::FontId _saveMenuFont;
+ Common::Rect _saveMenuCursor;
+
// choice menu
bool _choice;
diff --git a/engines/kyra/resource/staticres.cpp b/engines/kyra/resource/staticres.cpp
index 6b3a57a1cc..4285b86586 100644
--- a/engines/kyra/resource/staticres.cpp
+++ b/engines/kyra/resource/staticres.cpp
@@ -1558,6 +1558,11 @@ const int16 KyraEngine_HoF::_keyboardSounds[190] = {
-1, 197, -1, 205, 152, 139, -1, -1, -1, -1
};
+const char *const GUI_HoF::_saveLoadStringsZH[2] = {
+ "[ ""\xb7\x82\x9c\x83\x9d\x83\xae\x82\xaf\x82"" ]",
+ "[ ""\xb8\x80\x81\x83\xbe\x82"" ]"
+};
+
void KyraEngine_HoF::initInventoryButtonList() {
delete[] _inventoryButtons;
@@ -1621,20 +1626,24 @@ void GUI_HoF::initStaticData() {
const uint16 *menuStr = _vm->gameFlags().isTalkie ? _menuStringsTalkie : _menuStringsOther;
+ int menuItemYStart = _vm->gameFlags().lang == Common::ZH_TWN ? 27 : 30;
+ int menuItemYInc = _vm->gameFlags().lang == Common::ZH_TWN ? 20 : 17;
+ int menuItemHeight = _vm->gameFlags().lang == Common::ZH_TWN ? 19 : 15;
+
GUI_V2_MENU(_mainMenu, -1, -1, 0x100, 0xAC, 0xF8, 0xF9, 0xFA, menuStr[0 * 8], 0xFB, -1, 8, 0, 7, -1, -1, -1, -1);
- GUI_V2_MENU_ITEM(_mainMenu.item[0], 1, 0x02, -1, 0x1E, 0xDC, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_mainMenu.item[0], 1, 0x02, -1, menuItemYStart, 0xDC, menuItemHeight, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_mainMenu.item[0].callback = clickLoadMenuFunctor;
- GUI_V2_MENU_ITEM(_mainMenu.item[1], 1, 0x03, -1, 0x2F, 0xDC, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_mainMenu.item[1], 1, 0x03, -1, menuItemYStart + menuItemYInc, 0xDC, menuItemHeight, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_mainMenu.item[1].callback = BUTTON_FUNCTOR(GUI_HoF, this, &GUI_HoF::saveMenu);
- GUI_V2_MENU_ITEM(_mainMenu.item[2], 1, 0x23, -1, 0x40, 0xDC, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_mainMenu.item[2], 1, 0x23, -1, menuItemYStart + menuItemYInc * 2, 0xDC, menuItemHeight, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_mainMenu.item[2].callback = BUTTON_FUNCTOR(GUI_HoF, this, &GUI_HoF::deleteMenu);
- GUI_V2_MENU_ITEM(_mainMenu.item[3], 1, 0x04, -1, 0x51, 0xDC, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_mainMenu.item[3], 1, 0x04, -1, menuItemYStart + menuItemYInc * 3, 0xDC, menuItemHeight, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_mainMenu.item[3].callback = BUTTON_FUNCTOR(GUI_HoF, this, &GUI_HoF::gameOptionsTalkie);
- GUI_V2_MENU_ITEM(_mainMenu.item[4], 1, 0x25, -1, 0x62, 0xDC, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_mainMenu.item[4], 1, 0x25, -1, menuItemYStart + menuItemYInc * 4, 0xDC, menuItemHeight, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_mainMenu.item[4].callback = BUTTON_FUNCTOR(GUI_HoF, this, &GUI_HoF::audioOptions);
- GUI_V2_MENU_ITEM(_mainMenu.item[5], 1, 0x05, -1, 0x73, 0xDC, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_mainMenu.item[5], 1, 0x05, -1, menuItemYStart + menuItemYInc * 5, 0xDC, menuItemHeight, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_mainMenu.item[5].callback = clickQuitGameFunctor;
- GUI_V2_MENU_ITEM(_mainMenu.item[6], 1, 0x06, -1, 0x90, 0xDC, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_mainMenu.item[6], 1, 0x06, -1, 0x90, 0xDC, menuItemHeight, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_mainMenu.item[6].callback = BUTTON_FUNCTOR(GUI_HoF, this, &GUI_HoF::resumeGame);
for (int i = 0; i < 7; ++i)
_mainMenu.item[i].itemId = menuStr[0 * 8 + i + 1];
@@ -1662,11 +1671,11 @@ void GUI_HoF::initStaticData() {
_gameOptions.item[3].callback = clickQuitOptionsFunctor;
} else {
_gameOptions.numberOfItems = 5;
- GUI_V2_MENU_ITEM(_gameOptions.item[0], 0, 0x2B, 0xA0, 0x1E, 0x74, 0x0F, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0x1F, 0x10, 0x20, 0);
- GUI_V2_MENU_ITEM(_gameOptions.item[1], 0, 0x2C, 0xA0, 0x2F, 0x74, 0x0F, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0x20, 0x10, 0x31, 0);
- GUI_V2_MENU_ITEM(_gameOptions.item[2], 0, 0x2D, 0xA0, 0x40, 0x74, 0x0F, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0x1D, 0x10, 0x42, 0);
- GUI_V2_MENU_ITEM(_gameOptions.item[3], 0, 0x2E, 0xA0, 0x51, 0x74, 0x0F, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0x1E, 0x10, 0x53, 0);
- GUI_V2_MENU_ITEM(_gameOptions.item[4], 1, 0x18, -1, 0x6E, 0x6C, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_gameOptions.item[0], 0, 0x2B, 0xA0, menuItemYStart, 0x74, menuItemHeight, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0x1F, 0x10, 0x20, 0);
+ GUI_V2_MENU_ITEM(_gameOptions.item[1], 0, 0x2C, 0xA0, menuItemYStart + menuItemYInc, 0x74, menuItemHeight, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0x20, 0x10, 0x31, 0);
+ GUI_V2_MENU_ITEM(_gameOptions.item[2], 0, 0x2D, 0xA0, menuItemYStart + menuItemYInc * 2, 0x74, menuItemHeight, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0x1D, 0x10, 0x42, 0);
+ GUI_V2_MENU_ITEM(_gameOptions.item[3], 0, 0x2E, 0xA0, menuItemYStart + menuItemYInc * 3, 0x74, menuItemHeight, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0x1E, 0x10, 0x53, 0);
+ GUI_V2_MENU_ITEM(_gameOptions.item[4], 1, 0x18, -1, 0x6E, 0x6C, menuItemHeight, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_gameOptions.item[4].callback = clickQuitOptionsFunctor;
}
@@ -1687,57 +1696,63 @@ void GUI_HoF::initStaticData() {
_audioOptions.item[i].itemId = menuStr[2 * 8 + i + 1];
GUI_V2_MENU(_choiceMenu, -1, -1, 0x140, 0x38, 0xF8, 0xF9, 0xFA, 0, 0xFE, -1, 8, 0, 2, -1, -1, -1, -1);
- GUI_V2_MENU_ITEM(_choiceMenu.item[0], 1, 0x14, 0x18, 0x1E, 0x48, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_choiceMenu.item[0], 1, 0x14, 0x18, 30, 0x48, menuItemHeight, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_choiceMenu.item[0].callback = BUTTON_FUNCTOR(GUI_HoF, this, &GUI_HoF::choiceYes);
- GUI_V2_MENU_ITEM(_choiceMenu.item[1], 1, 0x13, 0xD8, 0x1E, 0x48, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_choiceMenu.item[1], 1, 0x13, 0xD8, 30, 0x48, menuItemHeight, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_choiceMenu.item[1].callback = BUTTON_FUNCTOR(GUI_HoF, this, &GUI_HoF::choiceNo);
for (int i = 2; i <= 6; ++i)
_choiceMenu.item[i].enabled = false;
for (int i = 0; i < 7; ++i)
_choiceMenu.item[i].itemId = menuStr[3 * 8 + i + 1];
- GUI_V2_MENU(_loadMenu, -1, -1, 0x120, 0xA0, 0xF8, 0xF9, 0xFA, menuStr[4 * 8], 0xFB, -1, 8, 0, 6, 0x84, 0x16, 0x84, 0x7C);
- GUI_V2_MENU_ITEM(_loadMenu.item[0], 1, 0x29, -1, 0x27, 0x100, 0xF, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
- GUI_V2_MENU_ITEM(_loadMenu.item[1], 1, 0x2A, -1, 0x38, 0x100, 0xF, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
- GUI_V2_MENU_ITEM(_loadMenu.item[2], 1, 0x2B, -1, 0x49, 0x100, 0xF, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
- GUI_V2_MENU_ITEM(_loadMenu.item[3], 1, 0x2C, -1, 0x5A, 0x100, 0xF, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
- GUI_V2_MENU_ITEM(_loadMenu.item[4], 1, 0x2D, -1, 0x6B, 0x100, 0xF, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ menuItemYStart = _vm->gameFlags().lang == Common::ZH_TWN ? 45 : 39;
+ int menuItemScrollArrowY1 = _vm->gameFlags().lang == Common::ZH_TWN ? 26 : 22;
+ int menuItemScrollArrowY2 = _vm->gameFlags().lang == Common::ZH_TWN ? 131 : 124;
+
+ GUI_V2_MENU(_loadMenu, -1, -1, 0x120, 0xA0, 0xF8, 0xF9, 0xFA, menuStr[4 * 8], 0xFB, -1, 8, 0, 6, 0x84, menuItemScrollArrowY1, 0x84, menuItemScrollArrowY2);
+ GUI_V2_MENU_ITEM(_loadMenu.item[0], 1, 0x29, -1, menuItemYStart, 0x100, menuItemHeight, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_loadMenu.item[1], 1, 0x2A, -1, menuItemYStart + menuItemYInc * 1, 0x100, menuItemHeight, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_loadMenu.item[2], 1, 0x2B, -1, menuItemYStart + menuItemYInc * 2, 0x100, menuItemHeight, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_loadMenu.item[3], 1, 0x2C, -1, menuItemYStart + menuItemYInc * 3, 0x100, menuItemHeight, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_loadMenu.item[4], 1, 0x2D, -1, menuItemYStart + menuItemYInc * 4, 0x100, menuItemHeight, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
for (int i = 0; i <= 4; ++i)
_loadMenu.item[i].callback = clickLoadSlotFunctor;
- GUI_V2_MENU_ITEM(_loadMenu.item[5], 1, 0x0B, 0xB8, 0x86, 0x58, 0xF, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_loadMenu.item[5], 1, 0x0B, 0xB8, 0x86, 0x58, menuItemHeight, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_loadMenu.item[5].callback = BUTTON_FUNCTOR(GUI_HoF, this, &GUI_HoF::cancelLoadMenu);
_loadMenu.item[6].enabled = false;
for (int i = 0; i < 7; ++i)
_loadMenu.item[i].itemId = menuStr[4 * 8 + i + 1];
- GUI_V2_MENU(_saveMenu, -1, -1, 0x120, 0xA0, 0xF8, 0xF9, 0xFA, menuStr[5 * 8], 0xFB, -1, 8, 0, 6, 0x84, 0x16, 0x84, 0x7C);
- GUI_V2_MENU_ITEM(_saveMenu.item[0], 1, 0x29, -1, 0x27, 0x100, 0xF, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
- GUI_V2_MENU_ITEM(_saveMenu.item[1], 1, 0x2A, -1, 0x38, 0x100, 0xF, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
- GUI_V2_MENU_ITEM(_saveMenu.item[2], 1, 0x2B, -1, 0x49, 0x100, 0xF, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
- GUI_V2_MENU_ITEM(_saveMenu.item[3], 1, 0x2C, -1, 0x5A, 0x100, 0xF, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
- GUI_V2_MENU_ITEM(_saveMenu.item[4], 1, 0x2D, -1, 0x6B, 0x100, 0xF, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU(_saveMenu, -1, -1, 0x120, 0xA0, 0xF8, 0xF9, 0xFA, menuStr[5 * 8], 0xFB, -1, 8, 0, 6, 0x84, menuItemScrollArrowY1, 0x84, menuItemScrollArrowY2);
+ GUI_V2_MENU_ITEM(_saveMenu.item[0], 1, 0x29, -1, menuItemYStart, 0x100, menuItemHeight, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_saveMenu.item[1], 1, 0x2A, -1, menuItemYStart + menuItemYInc * 1, 0x100, menuItemHeight, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_saveMenu.item[2], 1, 0x2B, -1, menuItemYStart + menuItemYInc * 2, 0x100, menuItemHeight, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_saveMenu.item[3], 1, 0x2C, -1, menuItemYStart + menuItemYInc * 3, 0x100, menuItemHeight, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_saveMenu.item[4], 1, 0x2D, -1, menuItemYStart + menuItemYInc * 4, 0x100, menuItemHeight, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
for (int i = 0; i <= 4; ++i)
_saveMenu.item[i].callback = clickSaveSlotFunctor;
- GUI_V2_MENU_ITEM(_saveMenu.item[5], 1, 0x0B, 0xB8, 0x86, 0x58, 0xF, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_saveMenu.item[5], 1, 0x0B, 0xB8, 0x86, 0x58, menuItemHeight, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_saveMenu.item[5].callback = BUTTON_FUNCTOR(GUI_HoF, this, &GUI_HoF::cancelSaveMenu);
_saveMenu.item[6].enabled = false;
for (int i = 0; i < 7; ++i)
_saveMenu.item[i].itemId = menuStr[5 * 8 + i + 1];
GUI_V2_MENU(_savenameMenu, -1, -1, 0x140, 0x43, 0xF8, 0xF9, 0xFA, menuStr[6 * 8], 0xFB, -1, 8, 0, 2, -1, -1, -1, -1);
- GUI_V2_MENU_ITEM(_savenameMenu.item[0], 1, 0xD, 0x18, 0x2C, 0x58, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_savenameMenu.item[0], 1, 0xD, 0x18, 0x2C, 0x58, menuItemHeight, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_savenameMenu.item[0].callback = BUTTON_FUNCTOR(GUI_HoF, this, &GUI_HoF::finishSavename);
- GUI_V2_MENU_ITEM(_savenameMenu.item[1], 1, 0xB, 0xD0, 0x2C, 0x58, 0x0F, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_savenameMenu.item[1], 1, 0xB, 0xD0, 0x2C, 0x58, menuItemHeight, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_savenameMenu.item[1].callback = BUTTON_FUNCTOR(GUI_HoF, this, &GUI_HoF::cancelSavename);
for (int i = 2; i <= 6; ++i)
_savenameMenu.item[i].enabled = false;
for (int i = 0; i < 7; ++i)
_savenameMenu.item[i].itemId = menuStr[6 * 8 + i + 1];
+ menuItemYStart = _vm->gameFlags().lang == Common::ZH_TWN ? 27 : 30;
+
GUI_V2_MENU(_deathMenu, -1, -1, 0xD0, 0x4C, 0xF8, 0xF9, 0xFA, menuStr[7 * 8], 0xFB, -1, 8, 0, 2, -1, -1, -1, -1);
- GUI_V2_MENU_ITEM(_deathMenu.item[0], 1, 2, -1, 0x1E, 0xB4, 0x0F, 0xFC, 0xFD, 8, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_deathMenu.item[0], 1, 2, -1, menuItemYStart, 0xB4, menuItemHeight, 0xFC, 0xFD, 8, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_deathMenu.item[0].callback = clickLoadMenuFunctor;
- GUI_V2_MENU_ITEM(_deathMenu.item[1], 1, 5, -1, 0x2F, 0xB4, 0x0F, 0xFC, 0xFD, 8, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
+ GUI_V2_MENU_ITEM(_deathMenu.item[1], 1, 5, -1, menuItemYStart + menuItemYInc, 0xB4, menuItemHeight, 0xFC, 0xFD, 8, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_deathMenu.item[1].callback = clickQuitGameFunctor;
for (int i = 2; i <= 6; ++i)
_deathMenu.item[i].enabled = false;
diff --git a/engines/kyra/script/script_hof.cpp b/engines/kyra/script/script_hof.cpp
index f114278e5c..f857644453 100644
--- a/engines/kyra/script/script_hof.cpp
+++ b/engines/kyra/script/script_hof.cpp
@@ -797,9 +797,17 @@ int KyraEngine_HoF::o2_showLetter(EMCState *script) {
letterBuffer = _res->fileData(filename, nullptr);
}
+ int x = 12;
+ int y = 10;
+
+ if (_flags.lang == Common::ZH_TWN) {
+ x = 17;
+ y = 11;
+ }
+
if (letterBuffer) {
bookDecodeText(letterBuffer);
- bookPrintText(2, letterBuffer, 0xC, 0xA, 0x20);
+ bookPrintText(2, letterBuffer, x, y, 0x20);
}
_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0, Screen::CR_NO_P_CHECK);
diff --git a/engines/kyra/text/text.cpp b/engines/kyra/text/text.cpp
index c72b5ce025..222e709423 100644
--- a/engines/kyra/text/text.cpp
+++ b/engines/kyra/text/text.cpp
@@ -139,8 +139,13 @@ int TextDisplayer::buildMessageSubstrings(const char *str) {
} else {
_talkSubstrings[currentLine * TALK_SUBSTRING_LEN + pos] = *str;
++pos;
- if (pos >= TALK_SUBSTRING_LEN - 2)
+ if (_vm->game() == GI_KYRA2 && _vm->gameFlags().lang == Common::ZH_TWN && pos == 32) {
+ _talkSubstrings[currentLine * TALK_SUBSTRING_LEN + pos] = '\0';
+ ++currentLine;
+ pos = 0;
+ } else if (pos >= TALK_SUBSTRING_LEN - 2) {
pos = TALK_SUBSTRING_LEN - 2;
+ }
}
++str;
}
@@ -162,11 +167,12 @@ int TextDisplayer::getWidestLineWidth(int linesCount) {
}
void TextDisplayer::calcWidestLineBounds(int &x1, int &x2, int w, int cx) {
+ int margin = (_vm->game() == GI_KYRA2 && _vm->gameFlags().lang == Common::ZH_TWN) ? 8 : 12;
x1 = cx - w / 2;
- if (x1 + w >= Screen::SCREEN_W - 12) {
- x1 = Screen::SCREEN_W - 12 - w - 1;
- } else if (x1 < 12) {
- x1 = 12;
+ if (x1 + w >= Screen::SCREEN_W - margin) {
+ x1 = Screen::SCREEN_W - margin - w - 1;
+ } else if (x1 < margin) {
+ x1 = margin;
}
x2 = x1 + w + 1;
}
@@ -238,11 +244,11 @@ void TextDisplayer::printText(const Common::String &str, int x, int y, uint8 c0,
colorMap[3] = c1;
_screen->setTextColor(colorMap, 0, 3);
_screen->_charSpacing = -2;
+ int ls = _screen->_lineSpacing;
_screen->_lineSpacing = 0;
_screen->printText(tmp, x, y, c0, c2);
_screen->_charSpacing = 0;
- if (_vm->gameFlags().lang == Common::ZH_TWN)
- _screen->_lineSpacing = 2;
+ _screen->_lineSpacing = ls;
}
void TextDisplayer::printCharacterText(const char *text, int8 charNum, int charX) {
diff --git a/engines/kyra/text/text_hof.cpp b/engines/kyra/text/text_hof.cpp
index 220e145bab..e22d2d3da8 100644
--- a/engines/kyra/text/text_hof.cpp
+++ b/engines/kyra/text/text_hof.cpp
@@ -51,8 +51,8 @@ void TextDisplayer_HoF::printCustomCharacterText(const char *text, int x, int y,
text = preprocessString(text);
int lineCount = buildMessageSubstrings(text);
int w = getWidestLineWidth(lineCount);
- int h = lineCount * 10;
- y = MAX(0, y - (lineCount * 10));
+ int h = lineCount * _vm->_lineHeight;
+ y = MAX(0, y - (lineCount * _vm->_lineHeight));
int x1 = 0, x2 = 0;
calcWidestLineBounds(x1, x2, w, x);
@@ -69,7 +69,9 @@ void TextDisplayer_HoF::printCustomCharacterText(const char *text, int x, int y,
if (_vm->textEnabled()) {
for (int i = 0; i < lineCount; ++i) {
const char *msg = &_talkSubstrings[i * TALK_SUBSTRING_LEN];
- printText(msg, getCenterStringX(msg, x1, x2), i * 10 + _talkMessageY, c1, 0xCF, 0);
+ if (i == 0 || _vm->gameFlags().lang != Common::ZH_TWN)
+ x = getCenterStringX(msg, x1, x2);
+ printText(msg, x, i * _vm->_lineHeight + _talkMessageY, c1, 0xCF, 0);
}
}
@@ -82,6 +84,9 @@ char *TextDisplayer_HoF::preprocessString(const char *str) {
strcpy(_talkBuffer, str);
}
+ if (_vm->gameFlags().lang == Common::ZH_TWN)
+ return _talkBuffer;
+
char *p = _talkBuffer;
while (*p) {
if (*p == '\r')
@@ -230,10 +235,10 @@ void KyraEngine_HoF::objectChatInit(const Common::String &str0, int object, int
xPos = _talkObjectList[object].x;
}
- yPos -= lineNum * 10;
+ yPos -= lineNum * _lineHeight;
yPos = MAX(yPos, 0);
_text->_talkMessageY = yPos;
- _text->_talkMessageH = lineNum*10;
+ _text->_talkMessageH = lineNum * _lineHeight;
int width = _text->getWidestLineWidth(lineNum);
_text->calcWidestLineBounds(xPos, yPos, width, xPos);
@@ -271,8 +276,9 @@ void KyraEngine_HoF::objectChatPrintText(const Common::String &str0, int object)
for (int i = 0; i < lineNum; ++i) {
str = Common::String(&_text->_talkSubstrings[i*_text->maxSubstringLen()]);
- int y = _text->_talkMessageY + i * 10;
- x = _text->getCenterStringX(str, cX1, cX2);
+ int y = _text->_talkMessageY + i * _lineHeight;
+ if (i == 0 || _flags.lang != Common::ZH_TWN)
+ x = _text->getCenterStringX(str, cX1, cX2);
_text->printText(str, x, y, c1, 0xCF, 0);
}
Commit: 1e51f165727f552013a566b9d22a16baff568f76
https://github.com/scummvm/scummvm/commit/1e51f165727f552013a566b9d22a16baff568f76
Author: athrxx (athrxx at scummvm.org)
Date: 2021-12-01T22:39:33+01:00
Commit Message:
KYRA: (LOK/HOF/Traditional Chinese) - more fixes to save/load menus
Changed paths:
engines/kyra/gui/gui_hof.cpp
engines/kyra/gui/gui_lok.cpp
engines/kyra/gui/gui_lok.h
engines/kyra/gui/gui_v2.cpp
engines/kyra/gui/gui_v2.h
engines/kyra/resource/staticres.cpp
diff --git a/engines/kyra/gui/gui_hof.cpp b/engines/kyra/gui/gui_hof.cpp
index 85f4e28d6c..d8a9e7a0ee 100644
--- a/engines/kyra/gui/gui_hof.cpp
+++ b/engines/kyra/gui/gui_hof.cpp
@@ -1162,7 +1162,7 @@ int GUI_HoF::loadMenu(Button *caller) {
}
_savegameOffset = 0;
- setupSavegameNames(_loadMenu, 5);
+ setupSavegameNames(_loadMenu, _saveLoadNumSlots);
initMenu(_loadMenu);
_isLoadMenu = true;
_noLoadProcess = false;
diff --git a/engines/kyra/gui/gui_lok.cpp b/engines/kyra/gui/gui_lok.cpp
index d246c05782..814b93c4a9 100644
--- a/engines/kyra/gui/gui_lok.cpp
+++ b/engines/kyra/gui/gui_lok.cpp
@@ -185,6 +185,7 @@ GUI_LoK::GUI_LoK(KyraEngine_LoK *vm, Screen_LoK *screen) : GUI_v1(vm), _vm(vm),
initStaticResource();
_scrollUpFunctor = BUTTON_FUNCTOR(GUI_LoK, this, &GUI_LoK::scrollUp);
_scrollDownFunctor = BUTTON_FUNCTOR(GUI_LoK, this, &GUI_LoK::scrollDown);
+ _saveLoadNumSlots = (vm->gameFlags().lang == Common::ZH_TWN) ? 4 : 5;
}
GUI_LoK::~GUI_LoK() {
@@ -563,7 +564,7 @@ void GUI_LoK::setupSavegames(Menu &menu, int num) {
}
for (int i = startSlot; i < num; ++i)
- menu.item[i].enabled = 0;
+ menu.item[i].enabled = false;
KyraEngine_LoK::SaveHeader header;
for (int i = startSlot; i < num && uint(_savegameOffset + i) < _saveSlots.size(); i++) {
@@ -589,7 +590,7 @@ void GUI_LoK::setupSavegames(Menu &menu, int num) {
}
menu.item[i].itemString = _savegameNames[i];
- menu.item[i].enabled = 1;
+ menu.item[i].enabled = true;
menu.item[i].saveSlot = _saveSlots[i + _savegameOffset];
delete in;
}
@@ -611,7 +612,7 @@ int GUI_LoK::saveGameMenu(Button *button) {
_menu[2].item[i].callback = BUTTON_FUNCTOR(GUI_LoK, this, &GUI_LoK::saveGame);
_savegameOffset = 0;
- setupSavegames(_menu[2], 5);
+ setupSavegames(_menu[2], _saveLoadNumSlots);
initMenu(_menu[2]);
updateAllMenuButtons();
@@ -655,7 +656,7 @@ int GUI_LoK::loadGameMenu(Button *button) {
_menu[2].item[i].callback = BUTTON_FUNCTOR(GUI_LoK, this, &GUI_LoK::loadGame);
_savegameOffset = 0;
- setupSavegames(_menu[2], 5);
+ setupSavegames(_menu[2], _saveLoadNumSlots);
initMenu(_menu[2]);
updateAllMenuButtons();
@@ -1064,7 +1065,7 @@ int GUI_LoK::scrollUp(Button *button) {
if (_savegameOffset > 0) {
_savegameOffset--;
- setupSavegames(_menu[2], 5);
+ setupSavegames(_menu[2], _saveLoadNumSlots);
initMenu(_menu[2]);
}
return 0;
@@ -1074,9 +1075,9 @@ int GUI_LoK::scrollDown(Button *button) {
updateMenuButton(button);
_savegameOffset++;
- if (uint(_savegameOffset + 5) >= _saveSlots.size())
- _savegameOffset = MAX<int>(_saveSlots.size() - 5, 0);
- setupSavegames(_menu[2], 5);
+ if (uint(_savegameOffset + _saveLoadNumSlots) >= _saveSlots.size())
+ _savegameOffset = MAX<int>(_saveSlots.size() - _saveLoadNumSlots, 0);
+ setupSavegames(_menu[2], _saveLoadNumSlots);
initMenu(_menu[2]);
return 0;
diff --git a/engines/kyra/gui/gui_lok.h b/engines/kyra/gui/gui_lok.h
index 56b6206f4f..b48919753d 100644
--- a/engines/kyra/gui/gui_lok.h
+++ b/engines/kyra/gui/gui_lok.h
@@ -167,6 +167,8 @@ private:
char _savegameNames[5][35];
const char *_specialSavegameString;
+ int _saveLoadNumSlots;
+
Button::Callback _scrollUpFunctor;
Button::Callback _scrollDownFunctor;
Button::Callback getScrollUpButtonHandler() const override { return _scrollUpFunctor; }
diff --git a/engines/kyra/gui/gui_v2.cpp b/engines/kyra/gui/gui_v2.cpp
index bfb3e5c1f7..7af8c7ca0a 100644
--- a/engines/kyra/gui/gui_v2.cpp
+++ b/engines/kyra/gui/gui_v2.cpp
@@ -47,10 +47,12 @@ GUI_v2::GUI_v2(KyraEngine_v2 *vm) : GUI_v1(vm), _vm(vm), _screen(vm->screen_v2()
_isDeleteMenu = false;
_saveMenuFont = Screen::FID_8_FNT;
_saveMenuCursor = Common::Rect(1, 1, 7, 8);
+ _saveLoadNumSlots = 5;
if (vm->game() == GI_KYRA2 && vm->gameFlags().lang == Common::ZH_TWN) {
_saveMenuFont = Screen::FID_CHINESE_FNT;
_saveMenuCursor = Common::Rect(0, 0, 8, 14);
+ _saveLoadNumSlots = 4;
}
}
@@ -500,11 +502,11 @@ int GUI_v2::scrollUpButton(Button *button) {
--_savegameOffset;
if (_isLoadMenu) {
- setupSavegameNames(_loadMenu, 5);
+ setupSavegameNames(_loadMenu, _saveLoadNumSlots);
// original calls something different here...
initMenu(_loadMenu);
} else if (_isSaveMenu || _isDeleteMenu) {
- setupSavegameNames(_saveMenu, 5);
+ setupSavegameNames(_saveMenu, _saveLoadNumSlots);
// original calls something different here...
initMenu(_saveMenu);
}
@@ -516,15 +518,15 @@ int GUI_v2::scrollDownButton(Button *button) {
updateMenuButton(button);
++_savegameOffset;
- if (uint(_savegameOffset + 5) >= _saveSlots.size())
- _savegameOffset = MAX<int>(_saveSlots.size() - 5, _isDeleteMenu ? 1 : 0);
+ if (uint(_savegameOffset + _saveLoadNumSlots) >= _saveSlots.size())
+ _savegameOffset = MAX<int>(_saveSlots.size() - _saveLoadNumSlots, _isDeleteMenu ? 1 : 0);
if (_isLoadMenu) {
- setupSavegameNames(_loadMenu, 5);
+ setupSavegameNames(_loadMenu, _saveLoadNumSlots);
// original calls something different here...
initMenu(_loadMenu);
} else if (_isSaveMenu || _isDeleteMenu) {
- setupSavegameNames(_saveMenu, 5);
+ setupSavegameNames(_saveMenu, _saveLoadNumSlots);
// original calls something different here...
initMenu(_saveMenu);
}
@@ -612,7 +614,7 @@ int GUI_v2::saveMenu(Button *caller) {
_noSaveProcess = false;
_saveSlot = -1;
_savegameOffset = 0;
- setupSavegameNames(_saveMenu, 5);
+ setupSavegameNames(_saveMenu, _saveLoadNumSlots);
initMenu(_saveMenu);
updateAllMenuButtons();
@@ -642,7 +644,8 @@ int GUI_v2::saveMenu(Button *caller) {
thumb.free();
_displayMenu = false;
- _screen->setFontStyles(_screen->_currentFont, Font::kStyleBorder);
+ if (!(_vm->game() == GI_KYRA2 && _vm->gameFlags().lang == Common::ZH_TWN))
+ _screen->setFontStyles(_screen->_currentFont, Font::kStyleBorder);
_madeSave = true;
return 0;
@@ -711,7 +714,7 @@ int GUI_v2::deleteMenu(Button *caller) {
backUpPage1(_vm->_screenBuffer);
_savegameOffset = 1;
_saveMenu.menuNameId = _vm->gameFlags().isTalkie ? 35 : 1;
- setupSavegameNames(_saveMenu, 5);
+ setupSavegameNames(_saveMenu, _saveLoadNumSlots);
initMenu(_saveMenu);
_isDeleteMenu = true;
_slotToDelete = -1;
diff --git a/engines/kyra/gui/gui_v2.h b/engines/kyra/gui/gui_v2.h
index fe2da71999..7e40001313 100644
--- a/engines/kyra/gui/gui_v2.h
+++ b/engines/kyra/gui/gui_v2.h
@@ -194,6 +194,8 @@ protected:
int clickSaveSlot(Button *caller);
int cancelSaveMenu(Button *caller);
+ int _saveLoadNumSlots;
+
// delete menu
int _slotToDelete;
int deleteMenu(Button *caller);
diff --git a/engines/kyra/resource/staticres.cpp b/engines/kyra/resource/staticres.cpp
index 4285b86586..25d245d805 100644
--- a/engines/kyra/resource/staticres.cpp
+++ b/engines/kyra/resource/staticres.cpp
@@ -1177,12 +1177,15 @@ void GUI_LoK::initStaticResource() {
GUI_V1_MENU_ITEM(_menu[2].item[5], 1, 0, 0, 0, 0xB8, 0, 0x86, 0x58, menuItemHeight, 252, 253, -1, 255, 248, 249, 250, -1, 0, 0, 0, 0, 0);
_menu[2].item[5].callback = cancelSubMenuFunctor;
+ if (_vm->gameFlags().lang == Common::ZH_TWN)
+ _menu[2].item[4].enabled = false;
+
int menuHeight = _vm->gameFlags().lang == Common::ZH_TWN ? 80 : 67;
labelYStart = _vm->gameFlags().lang == Common::ZH_TWN ? 50 : 44;
GUI_V1_MENU(_menu[3], -1, -1, 288, menuHeight, 248, 249, 250, 0, 251, -1, 8, 0, 2, -1, -1, -1, -1);
- GUI_V1_MENU_ITEM(_menu[3].item[0], 1, 0, 0, 0, 22/*24*/, 0, labelYStart, 88, menuItemHeight, 252, 253, -1, 255, 248, 249, 250, -1, 0, 0, 0, 0, 0);
- GUI_V1_MENU_ITEM(_menu[3].item[1], 1, 0, 0, 0, 184/*179*/, 0, labelYStart, 88, menuItemHeight, 252, 253, -1, 255, 248, 249, 250, -1, 0, 0, 0, 0, 0);
+ GUI_V1_MENU_ITEM(_menu[3].item[0], 1, 0, 0, 0, 22, 0, labelYStart, 88, menuItemHeight, 252, 253, -1, 255, 248, 249, 250, -1, 0, 0, 0, 0, 0);
+ GUI_V1_MENU_ITEM(_menu[3].item[1], 1, 0, 0, 0, 184, 0, labelYStart, 88, menuItemHeight, 252, 253, -1, 255, 248, 249, 250, -1, 0, 0, 0, 0, 0);
_menu[3].item[0].callback = BUTTON_FUNCTOR(GUI_LoK, this, &GUI_LoK::savegameConfirm);
_menu[3].item[1].callback = cancelSubMenuFunctor;
@@ -1709,6 +1712,7 @@ void GUI_HoF::initStaticData() {
int menuItemScrollArrowY1 = _vm->gameFlags().lang == Common::ZH_TWN ? 26 : 22;
int menuItemScrollArrowY2 = _vm->gameFlags().lang == Common::ZH_TWN ? 131 : 124;
+
GUI_V2_MENU(_loadMenu, -1, -1, 0x120, 0xA0, 0xF8, 0xF9, 0xFA, menuStr[4 * 8], 0xFB, -1, 8, 0, 6, 0x84, menuItemScrollArrowY1, 0x84, menuItemScrollArrowY2);
GUI_V2_MENU_ITEM(_loadMenu.item[0], 1, 0x29, -1, menuItemYStart, 0x100, menuItemHeight, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
GUI_V2_MENU_ITEM(_loadMenu.item[1], 1, 0x2A, -1, menuItemYStart + menuItemYInc * 1, 0x100, menuItemHeight, 0xFC, 0xFD, 5, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
@@ -1737,6 +1741,9 @@ void GUI_HoF::initStaticData() {
for (int i = 0; i < 7; ++i)
_saveMenu.item[i].itemId = menuStr[5 * 8 + i + 1];
+ if (_vm->gameFlags().lang == Common::ZH_TWN)
+ _loadMenu.item[4].enabled = _saveMenu.item[4].enabled = false;
+
GUI_V2_MENU(_savenameMenu, -1, -1, 0x140, 0x43, 0xF8, 0xF9, 0xFA, menuStr[6 * 8], 0xFB, -1, 8, 0, 2, -1, -1, -1, -1);
GUI_V2_MENU_ITEM(_savenameMenu.item[0], 1, 0xD, 0x18, 0x2C, 0x58, menuItemHeight, 0xFC, 0xFD, -1, 0xF8, 0xF9, 0xFA, -1, 0, 0, 0, 0);
_savenameMenu.item[0].callback = BUTTON_FUNCTOR(GUI_HoF, this, &GUI_HoF::finishSavename);
Commit: 454fd8a5b281655c7b4bb7df51f84aef4db2583c
https://github.com/scummvm/scummvm/commit/454fd8a5b281655c7b4bb7df51f84aef4db2583c
Author: athrxx (athrxx at scummvm.org)
Date: 2021-12-01T22:39:55+01:00
Commit Message:
KYRA: fix gcc build
Changed paths:
engines/kyra/engine/kyra_mr.cpp
diff --git a/engines/kyra/engine/kyra_mr.cpp b/engines/kyra/engine/kyra_mr.cpp
index 27f87b8a4c..f6f70b2281 100644
--- a/engines/kyra/engine/kyra_mr.cpp
+++ b/engines/kyra/engine/kyra_mr.cpp
@@ -346,13 +346,15 @@ void KyraEngine_MR::initMainMenu() {
_menuAnim = new WSAMovie_v2(this);
_menuAnim->open("REVENGE.WSA", 1, &_screen->getPalette(0));
_screen->getPalette(0).fill(0, 1, 0);
+ Screen::FontId fid = (_lang == 3) ? Screen::FID_CHINESE_FNT : Screen::FID_8_FNT;
+ int8 lsa = (_lang == 3) ? -1 : 0;
_menu = new MainMenu(this);
MainMenu::StaticData data = {
{ _mainMenuStrings[0], _mainMenuStrings[1], _mainMenuStrings[2], _mainMenuStrings[3], nullptr },
{ 0x01, 0x04, 0x0C, 0x04, 0x00, 0x80, 0xFF },
{ 0x16, 0x19, 0x1A, 0x16 }, 0,
- _lang == 3 ? Screen::FID_CHINESE_FNT : Screen::FID_8_FNT, _lang == 3 ? -1 : 0, 240
+ fid, lsa, 240
};
MainMenu::Animation anim;
More information about the Scummvm-git-logs
mailing list