[Scummvm-git-logs] scummvm master -> 8040f2a8ce97b67e35eaee4b8b49aca4a08290dc

athrxx noreply at scummvm.org
Tue Jul 18 19:37:21 UTC 2023


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

Summary:
1f97973e01 KYRA: (EOB II/ZH) - fix minor text glitch
4d1e616816 KYRA: (EOB II/ZH) - update static resources
f93a3acd2d KYRA: (EOB/Amiga) - fix text color regression
15415dc7f4 KYRA: (EOB II/ZH) - fix character name length
8040f2a8ce KYRA: (EOB II/ZH) - fix party/inventory/stats pages


Commit: 1f97973e01ad96b95bdb99395d07c527eb3ff792
    https://github.com/scummvm/scummvm/commit/1f97973e01ad96b95bdb99395d07c527eb3ff792
Author: athrxx (athrxx at scummvm.org)
Date: 2023-07-18T21:36:04+02:00

Commit Message:
KYRA: (EOB II/ZH) - fix minor text glitch

Changed paths:
    engines/kyra/text/text_rpg.cpp


diff --git a/engines/kyra/text/text_rpg.cpp b/engines/kyra/text/text_rpg.cpp
index e10c38534b7..a6032636283 100644
--- a/engines/kyra/text/text_rpg.cpp
+++ b/engines/kyra/text/text_rpg.cpp
@@ -352,9 +352,10 @@ void TextDisplayer_rpg::printLine(char *str) {
 
 		int h1 = ((sd->h / fh) - 1) * fh;
 		int h2 = sd->h - fh;
+		int wOffs = (_textDimData[sdx].shadowColor && sd->sx > 0) ? 1 : 0;
 
 		if (h2)
-			_screen->copyRegion(sd->sx << 3, sd->sy + fh, sd->sx << 3, sd->sy, sd->w << 3, h2, _screen->_curPage, _screen->_curPage, Screen::CR_NO_P_CHECK);
+			_screen->copyRegion((sd->sx << 3) - wOffs, sd->sy + fh, (sd->sx << 3) - wOffs, sd->sy, (sd->w << 3) + wOffs, h2, _screen->_curPage, _screen->_curPage, Screen::CR_NO_P_CHECK);
 
 		// HACK: In Chinese EOBII some characters overdraw the valid boundaries by one pixel
 		// (at least the ',' does). So, the original redraws the border here. We do the same
@@ -363,7 +364,7 @@ void TextDisplayer_rpg::printLine(char *str) {
 			_screen->drawBox(3, 170, 290, 199, _vm->guiSettings()->colors.fill);
 
 		_screen->set16bitShadingLevel(4);
-		_screen->fillRect(sd->sx << 3, sd->sy + h1, ((sd->sx + sd->w) << 3) - 1, sd->sy + sd->h - 1, _textDimData[sdx].color2);
+		_screen->fillRect((sd->sx << 3) - wOffs, sd->sy + h1, ((sd->sx + sd->w) << 3) - 1, sd->sy + sd->h - 1, _textDimData[sdx].color2);
 		_screen->set16bitShadingLevel(0);
 
 		if (_textDimData[sdx].line)


Commit: 4d1e616816ad041f1dee45ade133f938fe74ac37
    https://github.com/scummvm/scummvm/commit/4d1e616816ad041f1dee45ade133f938fe74ac37
Author: athrxx (athrxx at scummvm.org)
Date: 2023-07-18T21:36:08+02:00

Commit Message:
KYRA: (EOB II/ZH) - update static resources

(still weren't complete; also fix a couple of PC98 strings)

Changed paths:
    devtools/create_kyradat/resources/eob2_dos_chinese.h
    devtools/create_kyradat/resources/eob2_pc98_japanese.h
    dists/engine-data/kyra.dat


diff --git a/devtools/create_kyradat/resources/eob2_dos_chinese.h b/devtools/create_kyradat/resources/eob2_dos_chinese.h
index 944d21c1337..521b6ce8b71 100644
--- a/devtools/create_kyradat/resources/eob2_dos_chinese.h
+++ b/devtools/create_kyradat/resources/eob2_dos_chinese.h
@@ -501,15 +501,17 @@ static const char *const kEoB2MenuStringsSpecDOSChinese[2] = {
 static const StringListProvider kEoB2MenuStringsSpecDOSChineseProvider = { ARRAYSIZE(kEoB2MenuStringsSpecDOSChinese), kEoB2MenuStringsSpecDOSChinese };
 
 static const char *const kEoB2MenuYesNoStringsDOSChinese[2] = {
-	"Yes",
-	"No"
+	"\xac""O",	/* "是" */
+	"\xa4\xa3"	/* "不" */
 };
 
 static const StringListProvider kEoB2MenuYesNoStringsDOSChineseProvider = { ARRAYSIZE(kEoB2MenuYesNoStringsDOSChinese), kEoB2MenuYesNoStringsDOSChinese };
 
-static const char *const kEoB2CharGuiStringsHpDOSChinese[2] = {
-	"HP",
-	"%3d of %-3d"
+static const char *const kEoB2CharGuiStringsHpDOSChinese[4] = {
+	"\xa9""R", /* "命" */
+	"%2d",
+	"%2d/%-2d",
+	"\xad\xb9" /* "食" */
 };
 
 static const StringListProvider kEoB2CharGuiStringsHpDOSChineseProvider = { ARRAYSIZE(kEoB2CharGuiStringsHpDOSChinese), kEoB2CharGuiStringsHpDOSChinese };
@@ -525,20 +527,20 @@ static const StringListProvider kEoB2CharGuiStringsWp2DOSChineseProvider = { ARR
 static const char *const kEoB2CharGuiStringsWrDOSChinese[4] = {
 	"\xb5\x4c\xaa\x6b\xa7\xf0\xc0\xbb", /* "無法攻擊"; */
 	"",
-	"NO",
-	"AMMO"
+	"\xb5""L""\xa8\xbe\xc5""@""\xa4""O",/* "無防護力"; */
+	""
 };
 
 static const StringListProvider kEoB2CharGuiStringsWrDOSChineseProvider = { ARRAYSIZE(kEoB2CharGuiStringsWrDOSChinese), kEoB2CharGuiStringsWrDOSChinese };
 
 static const char *const kEoB2CharGuiStringsSt2DOSChinese[7] = {
-	"Swapping",
+	"\xa5\xe6\xb4\xab\xa6\xec\xb8""m",	/* "交換位置"; */
 	"\xa5\xfa\xba\x61\xb0\x7d\xa4\x60", /* "光榮陣亡"; */
 	"\xa9\xfc\xb0\x67\xa4\xa3\xbf\xf4", /* "昏迷不醒"; */
 	"\xba\x43\xa9\xca\xa4\xa4\xac\x72", /* "慢性中毒"; */
 	"\xa8\xad\xac\x56\xbc\x40\xac\x72", /* "身染劇毒"; */
 	"\xa5\xfe\xa8\xad\xb7\xf2\xb7\xf4", /* "全身痲痺"; */
-	"\xc5\xdc\xa6\xa8\xa4\xc6\xa5\xdb", /* "變成化石"; */
+	"\xc5\xdc\xa6\xa8\xa4\xc6\xa5\xdb"	/* "變成化石"; */
 };
 
 static const StringListProvider kEoB2CharGuiStringsSt2DOSChineseProvider = { ARRAYSIZE(kEoB2CharGuiStringsSt2DOSChinese), kEoB2CharGuiStringsSt2DOSChinese };
@@ -547,7 +549,7 @@ static const char *const kEoB2CharGuiStringsInDOSChinese[4] = {
 	"\xb6\xa4\xad\xfb\xb8\xea\xae\xc6", /* "隊員資料"; */
 	"\xa8\xbe\xc5\x40\xa4\x4f\x3a", /* "防護力:"; */
 	"\xb8\x67\xc5\xe7", /* "ç¶“é©—"; */
-	"\xb5\xa5\xaf\xc5", /* "等級"; */
+	"\xb5\xa5\xaf\xc5"	/* "等級"; */
 };
 
 static const StringListProvider kEoB2CharGuiStringsInDOSChineseProvider = { ARRAYSIZE(kEoB2CharGuiStringsInDOSChinese), kEoB2CharGuiStringsInDOSChinese };
diff --git a/devtools/create_kyradat/resources/eob2_pc98_japanese.h b/devtools/create_kyradat/resources/eob2_pc98_japanese.h
index a15bdbf1bc0..4067a2677f2 100644
--- a/devtools/create_kyradat/resources/eob2_pc98_japanese.h
+++ b/devtools/create_kyradat/resources/eob2_pc98_japanese.h
@@ -36,12 +36,12 @@ static const char *const kEoB2ChargenStatStringsPC98Japanese[12] = {
 	"DEX",
 	"CON",
 	"CHA",
-	"STR",
-	"INT",
-	"WIS",
-	"DEX",
-	"CON",
-	"CHA"
+	"STRENGTH",
+	"INTELLIGENCE",
+	"WISDOM",
+	"DEXTERITY",
+	"CONSTITUTION",
+	"CHARISMA"
 };
 
 static const StringListProvider kEoB2ChargenStatStringsPC98JapaneseProvider = { ARRAYSIZE(kEoB2ChargenStatStringsPC98Japanese), kEoB2ChargenStatStringsPC98Japanese };
diff --git a/dists/engine-data/kyra.dat b/dists/engine-data/kyra.dat
index 7a2a15fbebb..34209460cd4 100644
Binary files a/dists/engine-data/kyra.dat and b/dists/engine-data/kyra.dat differ


Commit: f93a3acd2d1aff69c9dc18fa4aa675529addec03
    https://github.com/scummvm/scummvm/commit/f93a3acd2d1aff69c9dc18fa4aa675529addec03
Author: athrxx (athrxx at scummvm.org)
Date: 2023-07-18T21:36:12+02:00

Commit Message:
KYRA: (EOB/Amiga) - fix text color regression

Changed paths:
    engines/kyra/text/text_rpg.cpp


diff --git a/engines/kyra/text/text_rpg.cpp b/engines/kyra/text/text_rpg.cpp
index a6032636283..e83e15448c6 100644
--- a/engines/kyra/text/text_rpg.cpp
+++ b/engines/kyra/text/text_rpg.cpp
@@ -364,7 +364,7 @@ void TextDisplayer_rpg::printLine(char *str) {
 			_screen->drawBox(3, 170, 290, 199, _vm->guiSettings()->colors.fill);
 
 		_screen->set16bitShadingLevel(4);
-		_screen->fillRect((sd->sx << 3) - wOffs, sd->sy + h1, ((sd->sx + sd->w) << 3) - 1, sd->sy + sd->h - 1, _textDimData[sdx].color2);
+		_screen->fillRect((sd->sx << 3) - wOffs, sd->sy + h1, ((sd->sx + sd->w) << 3) - 1, sd->sy + sd->h - 1, remapColor(sdx, _textDimData[sdx].color2));
 		_screen->set16bitShadingLevel(0);
 
 		if (_textDimData[sdx].line)
@@ -494,7 +494,7 @@ void TextDisplayer_rpg::printLine(char *str) {
 	str[s] = 0;
 
 	uint8 col1 = remapColor(sdx, _textDimData[sdx].color1);
-	uint8 col2 = _isChinese ? remapColor(sdx, _textDimData[sdx].color2) : _textDimData[sdx].color2;
+	uint8 col2 = remapColor(sdx, _textDimData[sdx].color2);
 	if (sjisTextMode && (sdx == 2 || sdx == 3 || sdx == 4 || sdx == 5 || sdx == 15)) {
 		x1 &= ~3;
 		y = (y + 8) & ~7;
@@ -599,7 +599,7 @@ void TextDisplayer_rpg::printMessage(const char *str, int textColor, ...) {
 int TextDisplayer_rpg::clearDim(int dim) {
 	int res = _screen->curDimIndex();
 	_screen->setScreenDim(dim);
-	_textDimData[dim].color1= _screen->_curDim->col1;
+	_textDimData[dim].color1 = _screen->_curDim->col1;
 	_textDimData[dim].color2 = (_vm->game() == GI_LOL || _vm->gameFlags().platform == Common::kPlatformAmiga) ? _screen->_curDim->col2 : _vm->guiSettings()->colors.fill;
 
 	clearCurDim();
@@ -859,6 +859,11 @@ uint8 TextDisplayer_rpg::remapColor(int sd, uint8 color) const {
 	if (sd < -1 || sd >= _dimCount)
 		error("TextDisplayer_rpg::applySetting(): arg out of range");
 
+	// HACK: Apparently, this needs a better implementation (allowing to set
+	// mappings for col1 and col2 independently). But this will do for now...
+	if (_vm->gameFlags().platform == Common::kPlatformAmiga && sd != 7 && color == _textDimData[sd].color2)
+		return color;
+
 	if (sd != -1 && _textDimData[sd].colorMap != nullptr)
 		return _textDimData[sd].colorMap[color];
 


Commit: 15415dc7f42798dd39443098e8e2a7bea5286ad9
    https://github.com/scummvm/scummvm/commit/15415dc7f42798dd39443098e8e2a7bea5286ad9
Author: athrxx (athrxx at scummvm.org)
Date: 2023-07-18T21:36:16+02:00

Commit Message:
KYRA: (EOB II/ZH) - fix character name length

Changed paths:
    engines/kyra/engine/chargen.cpp


diff --git a/engines/kyra/engine/chargen.cpp b/engines/kyra/engine/chargen.cpp
index 0d029b041d7..7698fd7bb48 100644
--- a/engines/kyra/engine/chargen.cpp
+++ b/engines/kyra/engine/chargen.cpp
@@ -718,7 +718,7 @@ void CharacterGenerator::createPartyMember() {
 				_screen->printShadedText(_chargenStrings2[11], 149, 100, _vm->guiSettings()->colors.guiColorLightBlue, 0, _vm->guiSettings()->colors.guiColorBlack);
 				if (!_vm->shouldQuit()) {
 					if (_vm->game() == GI_EOB2 && _vm->gameFlags().lang == Common::Language::ZH_TWN) {
-						_vm->_gui->getTextInput(_characters[_activeBox].name, 28, 100, 9,
+						_vm->_gui->getTextInput(_characters[_activeBox].name, 28, 100, 8,
 									_vm->guiSettings()->colors.guiColorWhite, 0, _vm->guiSettings()->colors.guiColorDarkRed);
 					} else {
 						Screen::FontId of = _screen->setFont(_vm->_invFont3);
@@ -2304,6 +2304,8 @@ void TransferPartyWiz::convertStats() {
 			cname = convertFromJISX0201(cname);
 			cname = makeTwoByteString(cname);
 			Common::strlcpy(c->name, cname.c_str(), sizeof(c->name));
+		} else if (_vm->_flags.lang == Common::ZH_TWN) {
+			c->name[8] = '\0';
 		}
 
 		for (int ii = 0; ii < 25; ii++) {


Commit: 8040f2a8ce97b67e35eaee4b8b49aca4a08290dc
    https://github.com/scummvm/scummvm/commit/8040f2a8ce97b67e35eaee4b8b49aca4a08290dc
Author: athrxx (athrxx at scummvm.org)
Date: 2023-07-18T21:36:20+02:00

Commit Message:
KYRA: (EOB II/ZH) - fix party/inventory/stats pages

Changed paths:
    engines/kyra/engine/eobcommon.cpp
    engines/kyra/engine/eobcommon.h
    engines/kyra/engine/kyra_rpg.h
    engines/kyra/gui/gui_eob.cpp
    engines/kyra/resource/staticres_eob.cpp
    engines/kyra/resource/staticres_lol.cpp


diff --git a/engines/kyra/engine/eobcommon.cpp b/engines/kyra/engine/eobcommon.cpp
index 8c15d1b19a4..0fdb59bfa13 100644
--- a/engines/kyra/engine/eobcommon.cpp
+++ b/engines/kyra/engine/eobcommon.cpp
@@ -197,7 +197,7 @@ EoBCoreEngine::EoBCoreEngine(OSystem *system, const GameFlags &flags) : KyraRpgE
 	_buttonList3Size = _buttonList4Size = _buttonList5Size = _buttonList6Size = 0;
 	_buttonList7Size = _buttonList8Size = 0;
 	_inventorySlotsY = _mnDef = 0;
-	_invFont1 = _invFont2 = _invFont4 = _conFont = _bookFont = Screen::FID_6_FNT;
+	_invFont1 = _invFont2 = _invFont4 = _invFont5 = _invFont6 = _hpStatFont = _conFont = _bookFont = Screen::FID_6_FNT;
 	_titleFont = _invFont3 = Screen::FID_8_FNT;
 	_transferStringsScummVM = 0;
 	_buttonDefs = 0;
@@ -596,17 +596,18 @@ void EoBCoreEngine::loadFonts() {
 		if (_flags.gameID == GI_EOB1) {
 			_screen->loadFont(Screen::FID_SJIS_SMALL_FNT, "FONT12.FNT");
 			_bookFont = Screen::FID_SJIS_SMALL_FNT;
-			_invFont4 = Screen::FID_SJIS_FNT;
+			_invFont4 = _invFont5 = _invFont6 = Screen::FID_SJIS_FNT;
 		}		
 		_titleFont = _conFont = _invFont3 = Screen::FID_SJIS_FNT;
 		_invFont1 = Screen::FID_SJIS_SMALL_FNT;
 	} else if (_flags.platform == Common::kPlatformSegaCD) {
 		_screen->loadFont(Screen::FID_8_FNT, "FONTK12");
 		_screen->setFontStyles(Screen::FID_8_FNT, Font::kStyleNone);
-		_invFont1 = _invFont2 = _invFont4 = _conFont = Screen::FID_8_FNT;
+		_invFont1 = _invFont2 = _invFont4 = _invFont5 = _invFont6 = _hpStatFont = _conFont = Screen::FID_8_FNT;
 	} else if (_flags.lang == Common::ZH_TWN) {
 		_screen->loadFont(Screen::FID_CHINESE_FNT, "FONT8.FNT");
-		_titleFont = _conFont = Screen::FID_CHINESE_FNT;
+		_titleFont = _conFont = _invFont1 = _invFont2 = _invFont4 = Screen::FID_CHINESE_FNT;
+		_invFont5 = Screen::FID_8_FNT;
 	}
 }
 
diff --git a/engines/kyra/engine/eobcommon.h b/engines/kyra/engine/eobcommon.h
index 506292bb127..3c46db0c40c 100644
--- a/engines/kyra/engine/eobcommon.h
+++ b/engines/kyra/engine/eobcommon.h
@@ -762,6 +762,7 @@ protected:
 	void gui_setCastOnWhomButtons();
 	void gui_initButton(int index, int x = -1, int y = -1, int val = -1) override;
 	Button *gui_getButton(Button *buttonList, int index);
+	void printStatsPageString(const char *str, int x, int y, int col);
 
 	int clickedInventoryNextPage(Button *button);
 	int clickedPortraitRestore(Button *button);
@@ -835,9 +836,12 @@ protected:
 	Screen::FontId _invFont2;
 	Screen::FontId _invFont3;
 	Screen::FontId _invFont4;
+	Screen::FontId _invFont5;
+	Screen::FontId _invFont6;
 	Screen::FontId _conFont;
 	Screen::FontId _titleFont;
 	Screen::FontId _bookFont;
+	Screen::FontId _hpStatFont;
 	const uint8 **_compassShapes;
 	uint8 _charExchangeSwap;
 	uint8 *_swapShape;
diff --git a/engines/kyra/engine/kyra_rpg.h b/engines/kyra/engine/kyra_rpg.h
index e759ab34143..efbaf5a1988 100644
--- a/engines/kyra/engine/kyra_rpg.h
+++ b/engines/kyra/engine/kyra_rpg.h
@@ -127,9 +127,12 @@ struct KyraRpgGUISettings {
 		uint8 guiColorDarkRed;
 		uint8 guiColorLightBlue;
 		uint8 guiColorBlue;
+		uint8 guiColorDarkBlue;
 		uint8 guiColorYellow;
 		uint8 guiColorLightGreen;
 		uint8 guiColorDarkGreen;
+		uint8 guiColorPurple;
+		uint8 guiColorBrown;
 		uint8 guiColorBlack;
 	} colors;
 
@@ -150,11 +153,64 @@ struct KyraRpgGUISettings {
 		uint8 hpBarHeight_1;
 		int16 hpFoodBarX_2[3];
 		int16 hpFoodBarY_2[3];
-		uint8 hpFoodBarWidth_2;
+		uint8 hpFoodBarWidth_2[2];
 		uint8 hpFoodBarHeight_2;
+		int16 nameLabelOffsetX;
+		int16 nameLabelOffsetY;
+		int16 exchangeLabelOffsetX;
+		int16 exchangeLabelOffsetY;
 		int16 redSplatOffsetX;
 		int16 redSplatOffsetY;
 	} charBoxCoords;
+
+	struct StatsPageCoords {
+		int16 headlineX;
+		int16 headlineY;
+		int16 descStartX;
+		int16 descStartY;
+		uint8 descYInc;
+		int16 statsGroup1StringsX;
+		int16 statsGroup1StringsY;
+		int16 statsGroup2StringsX;
+		int16 statsGroup2StringsY;
+		uint8 statsStringsYInc;
+		int16 statsGroup1StatsX;
+		int16 statsGroup1StatsY;
+		int16 statsGroup2StatsX;
+		int16 statsGroup2StatsY;
+		uint8 statsStatsYInc;
+		int16 acStringX;
+		int16 acStringY;
+		int16 acStatsX;
+		int16 acStatsY;
+		int16 expStringX;
+		int16 expStringY;
+		int16 expStatsX;
+		int16 expStatsY;
+		uint8 expStatsXInc;
+		uint8 expStatsYInc;
+		int16 lvlStringX;
+		int16 lvlStringY;
+		int16 lvlStatsX;
+		int16 lvlStatsY;
+		uint8 lvlStatsXInc;
+		uint8 lvlStatsYInc;
+		int16 classStringsX;
+		int16 classStringsY;
+		uint8 classStringsXInc;
+		uint8 classStringsYInc;
+	} statsPageCoords;
+
+	struct StatsPageColors {
+		uint8 headLine;
+		uint8 cls[3];
+		uint8 alignment;
+		uint8 race;
+		uint8 acString;
+		uint8 statsStrings;
+		uint8 statsValues;
+		uint8 expLvl[3];
+	} statsPageColors;
 };
 
 class KyraRpgEngine : public KyraEngine_v1 {
diff --git a/engines/kyra/gui/gui_eob.cpp b/engines/kyra/gui/gui_eob.cpp
index 0ff4aac72c3..9100df61649 100644
--- a/engines/kyra/gui/gui_eob.cpp
+++ b/engines/kyra/gui/gui_eob.cpp
@@ -101,31 +101,37 @@ void EoBCoreEngine::gui_drawCharPortraitWithStats(int index, bool screenUpdt) {
 		return;
 
 	EoBCharacter *c = &_characters[index];
-	int txtCol1 = guiSettings()->colors.guiColorBlack;
-	int txtCol2 = guiSettings()->colors.guiColorWhite;
+	const KyraRpgGUISettings *g = guiSettings();
+	int txtCol1 = g->colors.guiColorBlack;
+	int txtCol2 = g->colors.guiColorWhite;
 
 	if ((_flags.gameID == GI_EOB1 && c->flags & 6) || (_flags.gameID == GI_EOB2 && c->flags & 0x0E)) {
-		txtCol1 = guiSettings()->colors.guiColorDarkRed;
-		txtCol2 = guiSettings()->colors.guiColorLightRed;
+		txtCol1 = g->colors.guiColorDarkRed;
+		txtCol2 = g->colors.guiColorLightRed;
 	}
 
 	if (_currentControlMode == 0) {
-		int x2 = guiSettings()->charBoxCoords.facePosX_1[index & 1];
-		int y2 = guiSettings()->charBoxCoords.boxY[index >> 1];
-
-		_screen->copyRegion(176, 168, x2, y2, guiSettings()->charBoxCoords.boxWidth, 24, 2, 2, Screen::CR_NO_P_CHECK);
-		_screen->copyRegion(240, 168, x2, y2 + 24, guiSettings()->charBoxCoords.boxWidth, guiSettings()->charBoxCoords.boxHeight - 24, 2, 2, Screen::CR_NO_P_CHECK);
+		int x2 = g->charBoxCoords.facePosX_1[index & 1];
+		int y2 = g->charBoxCoords.boxY[index >> 1];
 
 		int cp = _screen->setCurPage(2);
 		Screen::FontId cf = _screen->setFont(_invFont1);
 
+		if (_flags.lang == Common::ZH_TWN)
+			gui_drawBox(176, 168, 63, 15, g->colors.frame1, g->colors.frame2, g->colors.fill);
+
+		_screen->copyRegion(176, 168, x2, y2, g->charBoxCoords.boxWidth, 24, 2, 2, Screen::CR_NO_P_CHECK);
+		_screen->copyRegion(240, 168, x2, y2 + 24, g->charBoxCoords.boxWidth, g->charBoxCoords.boxHeight - 24, 2, 2, Screen::CR_NO_P_CHECK);
+
 		if (_flags.platform == Common::kPlatformSegaCD) {
 			_screen->drawShape(_screen->_curPage, (index == _exchangeCharacterId) ? _swapShape : c->nameShape, x2 + 4, y2 + 4, 0);
 		} else {
 			if (index == _exchangeCharacterId)
-				_screen->printText(_characterGuiStringsSt[0], x2 + 2, y2 + 2, guiSettings()->colors.guiColorDarkRed, guiSettings()->colors.fill);
+				_screen->printText(_characterGuiStringsSt[0], x2 + g->charBoxCoords.exchangeLabelOffsetX, y2 + g->charBoxCoords.exchangeLabelOffsetY, g->colors.guiColorDarkRed, g->colors.fill);
+			else if (_flags.lang == Common::ZH_TWN)
+				_screen->printShadedText(c->name, x2 + g->charBoxCoords.nameLabelOffsetX, y2 + g->charBoxCoords.nameLabelOffsetY, g->colors.guiColorYellow, 0, g->colors.guiColorBlack);
 			else
-				_screen->printText(c->name, x2 + 2, y2 + (_flags.platform == Common::kPlatformFMTowns ? 1 : 2), txtCol1, _flags.platform == Common::kPlatformPC98 ? 0 : guiSettings()->colors.fill);
+				_screen->printText(c->name, x2 + g->charBoxCoords.nameLabelOffsetX, y2 + g->charBoxCoords.nameLabelOffsetY, txtCol1, _flags.platform == Common::kPlatformPC98 ? 0 : g->colors.fill);
 		}
 
 		_screen->setFont(_invFont2);
@@ -138,12 +144,14 @@ void EoBCoreEngine::gui_drawCharPortraitWithStats(int index, bool screenUpdt) {
 			gui_drawCharPortraitStatusFrame(index);
 
 		if (c->damageTaken > 0) {
-			_screen->drawShape(2, _redSplatShape, x2 + guiSettings()->charBoxCoords.redSplatOffsetX, y2 + guiSettings()->charBoxCoords.redSplatOffsetY, 0);
+			_screen->drawShape(2, _redSplatShape, x2 + g->charBoxCoords.redSplatOffsetX, y2 + g->charBoxCoords.redSplatOffsetY, 0);
 			if (_flags.platform == Common::kPlatformSegaCD) {
-				gui_printInventoryDigits(x2 + guiSettings()->charBoxCoords.redSplatOffsetX + 12, y2 + guiSettings()->charBoxCoords.redSplatOffsetY + 10, c->damageTaken);
+				gui_printInventoryDigits(x2 + g->charBoxCoords.redSplatOffsetX + 12, y2 + g->charBoxCoords.redSplatOffsetY + 10, c->damageTaken);
 			} else {
 				Common::String tmpStr = Common::String::format("%d", c->damageTaken);
-				_screen->printText(tmpStr.c_str(), x2 + 34 - tmpStr.size() * 3, y2 + 42, (_configRenderMode == Common::kRenderCGA) ? 12 : guiSettings()->colors.guiColorWhite, 0);
+				Screen::FontId fnt = _screen->setFont(_hpStatFont);
+				_screen->printText(tmpStr.c_str(), x2 + 34 - tmpStr.size() * 3, y2 + 42, (_configRenderMode == Common::kRenderCGA) ? 12 : g->colors.guiColorWhite, 0);
+				_screen->setFont(fnt);
 			}
 		}
 
@@ -152,14 +160,14 @@ void EoBCoreEngine::gui_drawCharPortraitWithStats(int index, bool screenUpdt) {
 
 		if (!cp) {
 			if (_redSplatBG[index])
-				_screen->copyBlockToPage(0, guiSettings()->charBoxCoords.boxX[index & 1] + guiSettings()->charBoxCoords.redSplatOffsetX, y2 + guiSettings()->charBoxCoords.boxHeight - 1, _redSplatShape[2] << 3, 4, _redSplatBG[index]);
+				_screen->copyBlockToPage(0, g->charBoxCoords.boxX[index & 1] + g->charBoxCoords.redSplatOffsetX, y2 + g->charBoxCoords.boxHeight - 1, _redSplatShape[2] << 3, 4, _redSplatBG[index]);
 
-			_screen->copyRegion(x2, y2, guiSettings()->charBoxCoords.boxX[index & 1], y2, guiSettings()->charBoxCoords.boxWidth, guiSettings()->charBoxCoords.boxHeight, 2, 0, Screen::CR_NO_P_CHECK);
+			_screen->copyRegion(x2, y2, g->charBoxCoords.boxX[index & 1], y2, g->charBoxCoords.boxWidth, g->charBoxCoords.boxHeight, 2, 0, Screen::CR_NO_P_CHECK);
 
 			// Redraw this for the SegaCD version, since the red splat shapes do overlap with the next portrait to the bottom and would otherwise be cut off.
 			if (_flags.platform == Common::kPlatformSegaCD && c->damageTaken > 0) {
-				_screen->drawShape(0, _redSplatShape, guiSettings()->charBoxCoords.boxX[index & 1] + guiSettings()->charBoxCoords.redSplatOffsetX, y2 + guiSettings()->charBoxCoords.redSplatOffsetY, 0);
-				gui_printInventoryDigits(guiSettings()->charBoxCoords.boxX[index & 1] + guiSettings()->charBoxCoords.redSplatOffsetX + 12, y2 + guiSettings()->charBoxCoords.redSplatOffsetY + 10, c->damageTaken);
+				_screen->drawShape(0, _redSplatShape, g->charBoxCoords.boxX[index & 1] + g->charBoxCoords.redSplatOffsetX, y2 + g->charBoxCoords.redSplatOffsetY, 0);
+				gui_printInventoryDigits(g->charBoxCoords.boxX[index & 1] + g->charBoxCoords.redSplatOffsetX + 12, y2 + g->charBoxCoords.redSplatOffsetY + 10, c->damageTaken);
 			}
 			if (screenUpdt)
 				_screen->updateScreen();
@@ -172,11 +180,17 @@ void EoBCoreEngine::gui_drawCharPortraitWithStats(int index, bool screenUpdt) {
 
 		gui_drawFaceShape(index);
 
+		if (_flags.lang == Common::ZH_TWN) {
+			_screen->fillRect(216, 5, 300, 33, g->colors.fill);
+			_screen->printShadedText(_characterGuiStringsHp[0], 214, 20, g->colors.guiColorDarkBlue, 0, 0);
+			_screen->printShadedText(_characterGuiStringsHp[3], 272, 20, g->colors.guiColorDarkBlue, 0, 0);
+		}
+
 		Screen::FontId cf = _screen->setFont(_invFont1);
 		if (_flags.platform == Common::kPlatformSegaCD)
 			_screen->drawShape(_screen->_curPage, (index == _exchangeCharacterId) ? _swapShape : c->nameShape, 224, 8);
 		else
-			_screen->printShadedText(c->name, 219, 6, txtCol2, 0, guiSettings()->colors.guiColorBlack);
+			_screen->printShadedText(c->name, 219, 6, txtCol2, 0, g->colors.guiColorBlack);
 		_screen->setFont(_invFont2);
 
 		gui_drawHitpoints(index);
@@ -191,17 +205,17 @@ void EoBCoreEngine::gui_drawCharPortraitWithStats(int index, bool screenUpdt) {
 
 			if (_characterGuiStringsSt) {
 				if (c->hitPointsCur == -10)
-					_screen->printShadedText(_characterGuiStringsSt[1], 247, statusTxtY, guiSettings()->colors.guiColorLightRed, 0, guiSettings()->colors.guiColorBlack);
+					_screen->printShadedText(_characterGuiStringsSt[1], 247, statusTxtY, g->colors.guiColorLightRed, 0, g->colors.guiColorBlack);
 				else if (c->hitPointsCur < 1)
-					_screen->printShadedText(_characterGuiStringsSt[2], 226, statusTxtY, guiSettings()->colors.guiColorLightRed, 0, guiSettings()->colors.guiColorBlack);
+					_screen->printShadedText(_characterGuiStringsSt[2], 226, statusTxtY, g->colors.guiColorLightRed, 0, g->colors.guiColorBlack);
 				else if (c->effectFlags & 0x2000)
-					_screen->printShadedText(_characterGuiStringsSt[3], 220, statusTxtY, guiSettings()->colors.guiColorLightRed, 0, guiSettings()->colors.guiColorBlack);
+					_screen->printShadedText(_characterGuiStringsSt[3], 220, statusTxtY, g->colors.guiColorLightRed, 0, g->colors.guiColorBlack);
 				else if (c->flags & 2)
-					_screen->printShadedText(_characterGuiStringsSt[4], 235, statusTxtY, guiSettings()->colors.guiColorLightRed, 0, guiSettings()->colors.guiColorBlack);
+					_screen->printShadedText(_characterGuiStringsSt[4], 235, statusTxtY, g->colors.guiColorLightRed, 0, g->colors.guiColorBlack);
 				else if (c->flags & 4)
-					_screen->printShadedText(_characterGuiStringsSt[5], 232, statusTxtY, guiSettings()->colors.guiColorLightRed, 0, guiSettings()->colors.guiColorBlack);
+					_screen->printShadedText(_characterGuiStringsSt[5], 232, statusTxtY, g->colors.guiColorLightRed, 0, g->colors.guiColorBlack);
 				else if (c->flags & 8)
-					_screen->printShadedText(_characterGuiStringsSt[6], 232, statusTxtY, guiSettings()->colors.guiColorLightRed, 0, guiSettings()->colors.guiColorBlack);
+					_screen->printShadedText(_characterGuiStringsSt[6], 232, statusTxtY, g->colors.guiColorLightRed, 0, g->colors.guiColorBlack);
 			}
 
 			_screen->setFont(_invFont2);
@@ -351,6 +365,8 @@ void EoBCoreEngine::gui_drawWeaponSlotStatus(int x, int y, int status) {
 	if (!tmpStr2.empty()) {
 		_screen->printText(tmpStr.c_str(), x + (16 - tmpStr.size() * 3), y + 2, textColor, 0);
 		_screen->printText(tmpStr2.c_str(), x + (16 - tmpStr.size() * 3), y + 9, textColor, 0);
+	} else if (_flags.lang == Common::ZH_TWN) {
+		_screen->printText(tmpStr.c_str(), x + (status > -1 ? (12 - ((tmpStr.size() - 1) << 2)) : (32 - (tmpStr.size() << 3))), y + 1, textColor, 0);
 	} else {
 		_screen->printText(tmpStr.c_str(), x + (16 - tmpStr.size() * 3), y + 5, textColor, 0);
 	}
@@ -363,22 +379,24 @@ void EoBCoreEngine::gui_drawHitpoints(int index) {
 	if (_currentControlMode && (index != _updateCharNum))
 		return;
 
-	int x = guiSettings()->charBoxCoords.hpBarX_1[index & 1];
-	int y = guiSettings()->charBoxCoords.hpBarY_1[index >> 1];
-	int w = guiSettings()->charBoxCoords.hpBarWidth_1;
-	int h = guiSettings()->charBoxCoords.hpBarHeight_1;
-	uint8 bgCol = guiSettings()->colors.fill;
+	const KyraRpgGUISettings *g = guiSettings();
+
+	int x = g->charBoxCoords.hpBarX_1[index & 1];
+	int y = g->charBoxCoords.hpBarY_1[index >> 1];
+	int w = g->charBoxCoords.hpBarWidth_1;
+	int h = g->charBoxCoords.hpBarHeight_1;
+	uint8 bgCol = g->colors.fill;
 
 	if (!_screen->_curPage)
 		x += 176;
 
 	if (_currentControlMode) {
-		x = guiSettings()->charBoxCoords.hpFoodBarX_2[0];
-		y = guiSettings()->charBoxCoords.hpFoodBarY_2[0];
-		w = guiSettings()->charBoxCoords.hpFoodBarWidth_2;
-		h = guiSettings()->charBoxCoords.hpFoodBarHeight_2;
+		x = g->charBoxCoords.hpFoodBarX_2[0];
+		y = g->charBoxCoords.hpFoodBarY_2[0];
+		w = g->charBoxCoords.hpFoodBarWidth_2[0];
+		h = g->charBoxCoords.hpFoodBarHeight_2;
 		if (_flags.platform == Common::kPlatformAmiga && _flags.gameID == GI_EOB1)
-			bgCol = guiSettings()->colors.sfill;
+			bgCol = g->colors.sfill;
 	}
 
 	EoBCharacter *c = &_characters[index];
@@ -386,26 +404,39 @@ void EoBCoreEngine::gui_drawHitpoints(int index) {
 	if (_configHpBarGraphs) {
 		int bgCur = c->hitPointsCur + 10;
 		int bgMax = c->hitPointsMax + 10;
-		int col = ((bgMax / 3) > bgCur) ? guiSettings()->colors.guiColorYellow : guiSettings()->colors.guiColorDarkGreen;
+		int col = ((bgMax / 3) > bgCur) ? g->colors.guiColorYellow : g->colors.guiColorDarkGreen;
 		if (bgCur <= 10)
-			col = guiSettings()->colors.guiColorDarkRed;
+			col = g->colors.guiColorDarkRed;
 
 		if (_flags.platform == Common::kPlatformSegaCD)
-			col = (bgCur * 40 / bgMax) < 12 ? guiSettings()->colors.guiColorDarkRed : ((bgCur * 40 / bgMax) < 24 ? guiSettings()->colors.guiColorYellow : guiSettings()->colors.guiColorDarkGreen);
-		else if (!_currentControlMode)
-			_screen->printText(_characterGuiStringsHp[0], x - 13, y - 1, guiSettings()->colors.guiColorBlack, 0);
+			col = (bgCur * 40 / bgMax) < 12 ? g->colors.guiColorDarkRed : ((bgCur * 40 / bgMax) < 24 ? g->colors.guiColorYellow : g->colors.guiColorDarkGreen);
+		else if (!_currentControlMode && _flags.lang != Common::ZH_TWN)
+			_screen->printText(_characterGuiStringsHp[0], x - 13, y - 1, g->colors.guiColorBlack, 0);
 
-		gui_drawHorizontalBarGraph(x, y, w, h, bgCur, bgMax, col, guiSettings()->colors.barGraph);
+		gui_drawHorizontalBarGraph(x, y, w, h, bgCur, bgMax, col, g->colors.barGraph);
 
 	} else {
 		Common::String tmpString = Common::String::format(_characterGuiStringsHp[1], c->hitPointsCur, c->hitPointsMax);
-
-		if (!_currentControlMode) {
+		int txtCol = g->colors.guiColorBlack;
+
+		if (_flags.lang == Common::ZH_TWN) {
+			txtCol = g->colors.guiColorWhite;
+			if (_currentControlMode) {
+				tmpString = Common::String::format(_characterGuiStringsHp[2], c->hitPointsCur, c->hitPointsMax);
+				x -= 3;
+				y += 1;
+			} else {
+				x -= 1;
+				y -= 3;
+			}
+		} else if (!_currentControlMode) {
 			x -= 13;
 			y -= 1;
 		}
 
-		_screen->printText(tmpString.c_str(), x, y, guiSettings()->colors.guiColorBlack, bgCol);
+		Screen::FontId of = _screen->setFont(_hpStatFont);
+		_screen->printText(tmpString.c_str(), x, y, txtCol, bgCol);
+		_screen->setFont(of);
 	}
 }
 
@@ -423,8 +454,9 @@ void EoBCoreEngine::gui_drawFoodStatusGraph(int index) {
 	if (index != _updateCharNum)
 		return;
 
-	uint8 col = c->food < 20 ? guiSettings()->colors.guiColorDarkRed : (c->food < 33 ? guiSettings()->colors.guiColorYellow : guiSettings()->colors.guiColorDarkGreen);
-	gui_drawHorizontalBarGraph(guiSettings()->charBoxCoords.hpFoodBarX_2[1], guiSettings()->charBoxCoords.hpFoodBarY_2[1], guiSettings()->charBoxCoords.hpFoodBarWidth_2, guiSettings()->charBoxCoords.hpFoodBarHeight_2, c->food, 100, col, guiSettings()->colors.barGraph);
+	const KyraRpgGUISettings *g = guiSettings();
+	uint8 col = c->food < 20 ? g->colors.guiColorDarkRed : (c->food < 33 ? g->colors.guiColorYellow : g->colors.guiColorDarkGreen);
+	gui_drawHorizontalBarGraph(g->charBoxCoords.hpFoodBarX_2[1], g->charBoxCoords.hpFoodBarY_2[1], g->charBoxCoords.hpFoodBarWidth_2[1], g->charBoxCoords.hpFoodBarHeight_2, c->food, 100, col, g->colors.barGraph);
 }
 
 void EoBCoreEngine::gui_drawHorizontalBarGraph(int x, int y, int w, int h, int32 curVal, int32 maxVal, int col1, int col2) {
@@ -438,9 +470,10 @@ void EoBCoreEngine::gui_drawCharPortraitStatusFrame(int index) {
 	if (_flags.platform == Common::kPlatformSegaCD)
 		return;
 
-	uint8 redGreenColor = (_partyEffectFlags & 0x20000) ? guiSettings()->colors.guiColorLightGreen : ((_configRenderMode == Common::kRenderCGA) ? 3 : guiSettings()->colors.guiColorLightRed);
-	int x = guiSettings()->charBoxCoords.facePosX_1[index & 1];
-	int y = guiSettings()->charBoxCoords.boxY[index >> 1];
+	const KyraRpgGUISettings *g = guiSettings();
+	uint8 redGreenColor = (_partyEffectFlags & 0x20000) ? g->colors.guiColorLightGreen : ((_configRenderMode == Common::kRenderCGA) ? 3 : g->colors.guiColorLightRed);
+	int x = g->charBoxCoords.facePosX_1[index & 1];
+	int y = g->charBoxCoords.boxY[index >> 1];
 	int xOffset = (_configRenderMode == Common::kRenderCGA) ? 0 : 1;
 
 	if (!_screen->_curPage)
@@ -453,12 +486,12 @@ void EoBCoreEngine::gui_drawCharPortraitStatusFrame(int index) {
 
 	if (redGreen || yellow) {
 		if (redGreen && !yellow) {
-			_screen->drawBox(x, y, x + guiSettings()->charBoxCoords.boxWidth - 1, y + guiSettings()->charBoxCoords.boxHeight - 1, redGreenColor);
+			_screen->drawBox(x, y, x + g->charBoxCoords.boxWidth - 1, y + g->charBoxCoords.boxHeight - 1, redGreenColor);
 			return;
 		}
 
 		if (yellow && !redGreen) {
-			_screen->drawBox(x, y, x + guiSettings()->charBoxCoords.boxWidth - 1, y + guiSettings()->charBoxCoords.boxHeight - 1, guiSettings()->colors.guiColorYellow);
+			_screen->drawBox(x, y, x + g->charBoxCoords.boxWidth - 1, y + g->charBoxCoords.boxHeight - 1, g->colors.guiColorYellow);
 			return;
 		}
 
@@ -469,11 +502,11 @@ void EoBCoreEngine::gui_drawCharPortraitStatusFrame(int index) {
 			x = iX + i;
 			if (redGreen) {
 				_screen->drawClippedLine(x, y, x + 7, y, redGreenColor);
-				_screen->drawClippedLine(x + 8, y + guiSettings()->charBoxCoords.boxHeight - 1, x + 15, y + guiSettings()->charBoxCoords.boxHeight - 1, redGreenColor);
+				_screen->drawClippedLine(x + 8, y + g->charBoxCoords.boxHeight - 1, x + 15, y + g->charBoxCoords.boxHeight - 1, redGreenColor);
 			}
 			if (yellow) {
-				_screen->drawClippedLine(x + 8, y, x + 15, y, guiSettings()->colors.guiColorYellow);
-				_screen->drawClippedLine(x, y + guiSettings()->charBoxCoords.boxHeight - 1, x + 7, y + guiSettings()->charBoxCoords.boxHeight - 1, guiSettings()->colors.guiColorYellow);
+				_screen->drawClippedLine(x + 8, y, x + 15, y, g->colors.guiColorYellow);
+				_screen->drawClippedLine(x, y + g->charBoxCoords.boxHeight - 1, x + 7, y + g->charBoxCoords.boxHeight - 1, g->colors.guiColorYellow);
 			}
 		}
 
@@ -483,20 +516,20 @@ void EoBCoreEngine::gui_drawCharPortraitStatusFrame(int index) {
 			y = iY + i - 1;
 
 			if (yellow) {
-				_screen->drawClippedLine(x, y + 1, x, y + 6, guiSettings()->colors.guiColorYellow);
-				_screen->drawClippedLine(x + guiSettings()->charBoxCoords.boxWidth - 1, y + 7, x + guiSettings()->charBoxCoords.boxWidth - 1, y + 12, guiSettings()->colors.guiColorYellow);
+				_screen->drawClippedLine(x, y + 1, x, y + 6, g->colors.guiColorYellow);
+				_screen->drawClippedLine(x + g->charBoxCoords.boxWidth - 1, y + 7, x + g->charBoxCoords.boxWidth - 1, y + 12, g->colors.guiColorYellow);
 			}
 			if (redGreen) {
 				_screen->drawClippedLine(x, y + 7, x, y + 12, redGreenColor);
-				_screen->drawClippedLine(x + guiSettings()->charBoxCoords.boxWidth - 1, y + 1, x + guiSettings()->charBoxCoords.boxWidth - 1, y + 6, redGreenColor);
+				_screen->drawClippedLine(x + g->charBoxCoords.boxWidth - 1, y + 1, x + g->charBoxCoords.boxWidth - 1, y + 6, redGreenColor);
 			}
 		}
 
 	} else {
-		_screen->drawClippedLine(x, y, x + guiSettings()->charBoxCoords.boxWidth - 2, y, guiSettings()->colors.frame2);
-		_screen->drawClippedLine(x, y + guiSettings()->charBoxCoords.boxHeight - 1, x + guiSettings()->charBoxCoords.boxWidth - 2, y + guiSettings()->charBoxCoords.boxHeight - 1, guiSettings()->colors.frame1);
-		_screen->drawClippedLine(x - xOffset, y, x - xOffset, y + guiSettings()->charBoxCoords.boxHeight, guiSettings()->colors.guiColorBlack);
-		_screen->drawClippedLine(x + guiSettings()->charBoxCoords.boxWidth - 1, y, x + guiSettings()->charBoxCoords.boxWidth - 1, y + guiSettings()->charBoxCoords.boxHeight, guiSettings()->colors.guiColorBlack);
+		_screen->drawClippedLine(x, y, x + g->charBoxCoords.boxWidth - 2, y, g->colors.frame2);
+		_screen->drawClippedLine(x, y + g->charBoxCoords.boxHeight - 1, x + g->charBoxCoords.boxWidth - 2, y + g->charBoxCoords.boxHeight - 1, g->colors.frame1);
+		_screen->drawClippedLine(x - xOffset, y, x - xOffset, y + g->charBoxCoords.boxHeight, g->colors.guiColorBlack);
+		_screen->drawClippedLine(x + g->charBoxCoords.boxWidth - 1, y, x + g->charBoxCoords.boxWidth - 1, y + g->charBoxCoords.boxHeight, g->colors.guiColorBlack);
 	}
 }
 
@@ -559,66 +592,53 @@ void EoBCoreEngine::gui_drawCharacterStatsPage() {
 	static const uint16 cm2Y2[] = { 165, 165, 147 };
 
 	EoBCharacter *c = &_characters[_updateCharNum];
+	const KyraRpgGUISettings *g = guiSettings();
+	const KyraRpgGUISettings::StatsPageCoords &cd = g->statsPageCoords;
+	const KyraRpgGUISettings::StatsPageColors &cl = g->statsPageColors;
 
-	if (_flags.platform != Common::kPlatformSegaCD) {
-		for (int i = 0; i < 3; i++)
-			_screen->fillRect(cm2X1[i], cm2Y1[i], cm2X2[i], cm2Y2[i], guiSettings()->colors.sfill);
-	}
-
-	int lineH = MIN(_screen->getFontHeight() + 1, 8);
-	_screen->printShadedText(_characterGuiStringsIn[0], 183, 42, guiSettings()->colors.guiColorWhite, guiSettings()->colors.sfill, guiSettings()->colors.guiColorBlack);
-	_screen->printText(_chargenClassStrings[c->cClass], 183, 55, guiSettings()->colors.guiColorBlack, guiSettings()->colors.sfill);
-	_screen->printText(_chargenAlignmentStrings[c->alignment], 183, 55 + lineH, guiSettings()->colors.guiColorBlack, guiSettings()->colors.sfill);
-	_screen->printText(_chargenRaceSexStrings[c->raceSex], 183, 55 + 2 * lineH, guiSettings()->colors.guiColorBlack, guiSettings()->colors.sfill);
-
-	lineH = _screen->getFontHeight() + 1;
-	int tX = 183;
-	int tY = _flags.use16ColorMode ? 87 : 82;
 	for (int i = 0; i < 3; i++)
-		_screen->printText(_chargenStatStrings[6 + i], tX, tY + i * lineH, guiSettings()->colors.guiColorBlack, guiSettings()->colors.sfill);
-
-	if (_flags.use16ColorMode) {
-		tX += 72;
-		tY -= 27;
-	}
-	for (int i = 3; i < 6; i++)
-		_screen->printText(_chargenStatStrings[6 + i], tX, tY + i * lineH, guiSettings()->colors.guiColorBlack, guiSettings()->colors.sfill);
+		_screen->fillRect(cm2X1[i], cm2Y1[i], cm2X2[i], cm2Y2[i], g->colors.sfill);
 
-	_screen->printText(_characterGuiStringsIn[1], 183, tY + 6 * lineH, guiSettings()->colors.guiColorBlack, guiSettings()->colors.sfill);
+	_screen->printShadedText(_characterGuiStringsIn[0], cd.headlineX, cd.headlineY, cl.headLine, g->colors.sfill, g->colors.guiColorBlack);
+	if (_flags.lang != Common::ZH_TWN)
+		printStatsPageString(_chargenClassStrings[c->cClass], cd.descStartX, cd.descStartY , cl.cls[0]);
+	printStatsPageString(_chargenAlignmentStrings[c->alignment], cd.descStartX, cd.descStartY + cd.descYInc, cl.alignment);
+	printStatsPageString(_chargenRaceSexStrings[c->raceSex], cd.descStartX, cd.descStartY + 2 * cd.descYInc, cl.race);
 
-	tY = _flags.use16ColorMode ? 127 : 138;
-	_screen->printText(_characterGuiStringsIn[2], 239, tY, guiSettings()->colors.guiColorBlack, guiSettings()->colors.sfill);
-	_screen->printText(_characterGuiStringsIn[3], 278, tY, guiSettings()->colors.guiColorBlack, guiSettings()->colors.sfill);
-
-	tX = _flags.use16ColorMode ? 210 : 275;
-	tY = _flags.use16ColorMode ? 87 : 82;
-	_screen->printText(getCharStrength(c->strengthCur, c->strengthExtCur).c_str(), tX, tY, guiSettings()->colors.guiColorWhite, guiSettings()->colors.sfill);
-	_screen->printText(Common::String::format("%d", c->intelligenceCur).c_str(), tX, tY + lineH, guiSettings()->colors.guiColorWhite, guiSettings()->colors.sfill);
-	_screen->printText(Common::String::format("%d", c->wisdomCur).c_str(), tX, tY + 2 * lineH, guiSettings()->colors.guiColorWhite, guiSettings()->colors.sfill);
-
-	if (_flags.use16ColorMode) {
-		tX = 285;
-		tY -= 27;
+	for (int i = 0; i < 3; i++) {
+		printStatsPageString(_chargenStatStrings[6 + i], cd.statsGroup1StringsX, cd.statsGroup1StringsY + i * cd.statsStringsYInc, cl.statsStrings);
+		printStatsPageString(_chargenStatStrings[9 + i], cd.statsGroup2StringsX, cd.statsGroup2StringsY + i * cd.statsStringsYInc, cl.statsStrings);
 	}
-	_screen->printText(Common::String::format("%d", c->dexterityCur).c_str(), tX, tY + 3 * lineH, guiSettings()->colors.guiColorWhite, guiSettings()->colors.sfill);
-	_screen->printText(Common::String::format("%d", c->constitutionCur).c_str(), tX, tY + 4 * lineH, guiSettings()->colors.guiColorWhite, guiSettings()->colors.sfill);
-	_screen->printText(Common::String::format("%d", c->charismaCur).c_str(), tX, tY + 5 * lineH, guiSettings()->colors.guiColorWhite, guiSettings()->colors.sfill);
 
-	if (_flags.use16ColorMode)
-		tX = 255;
-	_screen->printText(Common::String::format("%d", c->armorClass).c_str(), tX, tY + 6 * lineH, guiSettings()->colors.guiColorWhite, guiSettings()->colors.sfill);
+	printStatsPageString(_characterGuiStringsIn[1], cd.acStringX, cd.acStringY, cl.acString);
+	printStatsPageString(_characterGuiStringsIn[2], cd.expStringX, cd.expStringY, cl.statsStrings);
+	printStatsPageString(_characterGuiStringsIn[3], cd.lvlStringX, cd.lvlStringY, cl.statsStrings);
+
+	Screen::FontId of = _screen->setFont(_invFont5);
+	printStatsPageString(getCharStrength(c->strengthCur, c->strengthExtCur).c_str(), cd.statsGroup1StatsX, cd.statsGroup1StatsY, cl.statsValues);
+	printStatsPageString(Common::String::format("%d", c->intelligenceCur).c_str(), cd.statsGroup1StatsX, cd.statsGroup1StatsY + cd.statsStatsYInc, cl.statsValues);
+	printStatsPageString(Common::String::format("%d", c->wisdomCur).c_str(), cd.statsGroup1StatsX, cd.statsGroup1StatsY + 2 * cd.statsStatsYInc, cl.statsValues);
+	printStatsPageString(Common::String::format("%d", c->dexterityCur).c_str(), cd.statsGroup2StatsX, cd.statsGroup2StatsY, cl.statsValues);
+	printStatsPageString(Common::String::format("%d", c->constitutionCur).c_str(), cd.statsGroup2StatsX, cd.statsGroup2StatsY + cd.statsStatsYInc, cl.statsValues);
+	printStatsPageString(Common::String::format("%d", c->charismaCur).c_str(), cd.statsGroup2StatsX, cd.statsGroup2StatsY + 2 * cd.statsStatsYInc, cl.statsValues);
+	printStatsPageString(Common::String::format("%d", c->armorClass).c_str(), cd.acStatsX, cd.acStatsY, cl.statsValues);
+	_screen->setFont(of);
 
-	tY = _flags.use16ColorMode ? 136 : 145;
 	for (int i = 0; i < 3; i++) {
 		int t = getCharacterClassType(c->cClass, i);
 		if (t == -1)
 			continue;
-		tX = (_flags.use16ColorMode) ? 183 : 180;
-		_screen->printText(_chargenClassStrings[t + 15], tX, tY + lineH * i, guiSettings()->colors.guiColorBlack, guiSettings()->colors.sfill);
+
+		printStatsPageString(_chargenClassStrings[t + 15], cd.classStringsX + cd.classStringsXInc * i, cd.classStringsY + cd.classStringsYInc * i, cl.cls[i]);
+		if (_flags.lang == Common::ZH_TWN && i < 2 && getCharacterClassType(c->cClass, i + 1) != -1)
+			_screen->printShadedText("/", 182 + i * 8 + (i + 1) * 30, 148, g->colors.guiColorWhite, 0, g->colors.guiColorBlack);
+
+		of = _screen->setFont(_invFont6);
 		Common::String tmpStr = Common::String::format("%d", c->experience[i]);
-		_screen->printText(tmpStr.c_str(), 251 - (_screen->getTextWidth(tmpStr.c_str()) >> 1), tY + lineH * i, guiSettings()->colors.guiColorWhite, guiSettings()->colors.sfill);
+		printStatsPageString(tmpStr.c_str(), cd.expStatsX - (_screen->getTextWidth(tmpStr.c_str()) >> 1) + cd.expStatsXInc * i, cd.expStatsY + cd.expStatsYInc * i, cl.expLvl[i]);
 		tmpStr = Common::String::format("%d", c->level[i]);
-		_screen->printText(tmpStr.c_str(), 286 - (_screen->getTextWidth(tmpStr.c_str()) >> 1), tY + lineH * i, guiSettings()->colors.guiColorWhite, guiSettings()->colors.sfill);
+		printStatsPageString(tmpStr.c_str(), cd.lvlStatsX - (_screen->getTextWidth(tmpStr.c_str()) >> 1) + cd.lvlStatsXInc * i, cd.lvlStatsY + cd.lvlStatsYInc * i, cl.expLvl[i]);
+		_screen->setFont(of);
 	}
 }
 
@@ -867,6 +887,13 @@ void EoBCoreEngine::gui_initButton(int index, int, int, int) {
 	b->arg = d->arg;
 }
 
+void EoBCoreEngine::printStatsPageString(const char *str, int x, int y, int col) {
+	if (_flags.lang == Common::ZH_TWN)
+		_screen->printShadedText(str, x, y, col, guiSettings()->colors.sfill, guiSettings()->colors.guiColorBlack);
+	else
+		_screen->printText(str, x, y, col, guiSettings()->colors.sfill);
+}
+
 int EoBCoreEngine::clickedCharPortraitDefault(Button *button) {
 	if (!testCharacter(button->arg, 1))
 		return 1;
diff --git a/engines/kyra/resource/staticres_eob.cpp b/engines/kyra/resource/staticres_eob.cpp
index 1c17fc6163e..0dc3c3e2f63 100644
--- a/engines/kyra/resource/staticres_eob.cpp
+++ b/engines/kyra/resource/staticres_eob.cpp
@@ -1664,69 +1664,80 @@ void EoBEngine::initSpells() {
 
 const KyraRpgGUISettings EoBEngine::_guiSettingsVGA = {
 	{ _dlgButtonPosX_Def, _dlgButtonPosY_Def, 9, 15, false, 95, 9, 2, 7, { 285, 139 }, { 189, 162 }, { 31, 31 } },
-	{ 135, 130, 132, 180, 133, 17, 23, 20, 184, 177, 180, 184, 177, 180, 15, 6, 8, 9, 2, 5, 4, 3, 12 },
+	{ 135, 130, 132, 180, 133, 17, 23, 20, 184, 177, 180, 184, 177, 180, 15, 6, 8, 9, 2, 11, 5, 4, 3, 1, 7, 12 },
 	{	{ 184, 256, -1}, { 2, 54, 106 }, 64, 50,
 		{ 8, 80, -1 }, { 11, 63, 115 }, { 181, -1, -1 }, { 3, -1, -1 },
 		{ 40, 112, -1 }, { 11, 27, 63, 79, 115, 131 },
-		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, 51, 5,
-		13, 30
-	}
+		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, { 51, 51 }, 5,
+		2, 2, 2, 2, 13, 30
+	},
+	{ 183, 42, 183, 55, 7, 183, 82, 183, 103, 7, 275, 82, 275, 103, 7, 183, 124, 275, 124, 239, 138, 251, 145, 0, 7, 278, 138, 286, 145, 0, 7, 180, 145, 0, 7 },
+	{ 15, { 12, 12, 12 }, 12, 12, 12, 12, 15, { 15, 15, 15 } }
 };
 
 const KyraRpgGUISettings EoBEngine::_guiSettingsEGA = {
 	{ _dlgButtonPosX_Def, _dlgButtonPosY_Def, 9, 15, false, 95, 9, 2, 7, { 285, 139 }, { 189, 162 }, { 31, 31 } },
-	{ 13, 9, 2, 14, 2, 6, 13, 8, 13, 15, 14, 13, 15, 14, 15, 6, 8, 9, 2, 5, 4, 3, 12 },
+	{ 13, 9, 2, 14, 2, 6, 13, 8, 13, 15, 14, 13, 15, 14, 15, 6, 8, 9, 2, 11, 5, 4, 3, 1, 7, 12 },
 	{	{ 184, 256, -1}, { 2, 54, 106 }, 64, 50,
 		{ 8, 80, -1 }, { 11, 63, 115 }, { 181, -1, -1 }, { 3, -1, -1 },
 		{ 40, 112, -1 }, { 11, 27, 63, 79, 115, 131 },
-		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, 51, 5,
-		13, 30
-	}
+		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, { 51, 51 }, 5,
+		2, 2, 2, 2, 13, 30
+	},
+	{ 183, 42, 183, 55, 7, 183, 82, 183, 103, 7, 275, 82, 275, 103, 7, 183, 124, 275, 124, 239, 138, 251, 145, 0, 7, 278, 138, 286, 145, 0, 7, 180, 145, 0, 7 },
+	{ 15, { 12, 12, 12 }, 12, 12, 12, 12, 15, { 15, 15, 15 } }
 };
 
 const KyraRpgGUISettings EoBEngine::_guiSettingsPC98 = {
 	{ _dlgButtonPosX_Def, _dlgButtonPosY_Def, 9, 15, false, 95, 11, 1, 7, { 285, 139 }, { 189, 162 }, { 31, 31 } },
-	{ 13, 9, 2, 14, 2, 6, 13, 8, 13, 15, 14, 13, 15, 14, 15, 6, 8, 9, 2, 5, 4, 3, 12 },
+	{ 13, 9, 2, 14, 2, 6, 13, 8, 13, 15, 14, 13, 15, 14, 15, 6, 8, 9, 2, 11, 5, 4, 3, 1, 7, 12 },
 	{	{ 184, 256, -1}, { 2, 54, 106 }, 64, 50,
 		{ 8, 80, -1 }, { 11, 63, 115 }, { 181, -1, -1 }, { 3, -1, -1 },
 		{ 40, 112, -1 }, { 11, 27, 63, 79, 115, 131 },
-		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, 51, 5,
-		13, 30
-	}
+		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, { 51, 51 }, 5,
+		2, 2, 2, 2, 13, 30
+	},
+	{ 183, 42, 183, 55, 8, 183, 87, 255, 87, 9, 210, 87, 285, 87, 9, 183, 114, 255, 114, 239, 127, 251, 136, 0, 9, 278, 127, 286, 136, 0, 9, 183, 136, 0, 9 },
+	{ 15, { 12, 12, 12 }, 12, 12, 12, 12, 15, { 15, 15, 15 } }
 };
 
 const KyraRpgGUISettings EoBEngine::_guiSettingsAmiga = {
 	{ _dlgButtonPosX_Def, _dlgButtonPosY_Def, 28, 31, false, 95, 9, 2, 7, { 285, 139 }, { 189, 162 }, { 31, 31 } },
-	{ 18, 17, 10, 17, 11, 24, 22, 25, 18, 9, 10, 18, 9, 10, 31, 24, 25, 28, 29, 7, 26, 27, 19 },
+	{ 18, 17, 10, 17, 11, 24, 22, 25, 18, 9, 10, 18, 9, 10, 31, 24, 25, 28, 29, 16, 7, 26, 27, 6, 22, 19 },
 	{	{ 184, 256, -1}, { 2, 54, 106 }, 64, 50,
 		{ 8, 80, -1 }, { 11, 63, 115 }, { 181, -1, -1 }, { 3, -1, -1 },
 		{ 40, 112, -1 }, { 11, 27, 63, 79, 115, 131 },
-		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, 51, 5,
-		13, 30
-	}
+		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, { 51, 51 }, 5,
+		2, 2, 2, 2, 13, 30
+	},
+	{ 183, 42, 183, 55, 7, 183, 82, 183, 103, 7, 275, 82, 275, 103, 7, 183, 124, 275, 124, 239, 138, 251, 145, 0, 7, 278, 138, 286, 145, 0, 7, 180, 145, 0, 7 },
+	{ 31, { 19, 19, 19 }, 19, 19, 19, 19, 31, { 31, 31, 31 } }
 };
 
 const KyraRpgGUISettings EoBEngine::_guiSettingsAmigaMainMenu = {
 	{ _dlgButtonPosX_Def, _dlgButtonPosY_Def, 28, 31, false, 95, 9, 2, 7, { 285, 139 }, { 189, 162 }, { 31, 31 } },
-	{ 22, 28, 30, 17, 11, 24, 22, 25, 18, 9, 10, 18, 9, 10, 31, 24, 25, 28, 29, 7, 26, 27, 19 },
+	{ 22, 28, 30, 17, 11, 24, 22, 25, 18, 9, 10, 18, 9, 10, 31, 24, 25, 28, 29, 16, 7, 26, 27, 6, 22, 19 },
 	{	{ 184, 256, -1}, { 2, 54, 106 }, 64, 50,
 		{ 8, 80, -1 }, { 11, 63, 115 }, { 181, -1, -1 }, { 3, -1, -1 },
 		{ 40, 112, -1 }, { 11, 27, 63, 79, 115, 131 },
-		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, 51, 5,
-		13, 30
-	}
+		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, { 51, 51 }, 5,
+		2, 2, 2, 2, 13, 30
+	},
+	{ 183, 42, 183, 55, 7, 183, 82, 183, 103, 7, 275, 82, 275, 103, 7, 183, 124, 275, 124, 239, 138, 251, 145, 0, 7, 278, 138, 286, 145, 0, 7, 180, 145, 0, 7 },
+	{ 31, { 19, 19, 19 }, 19, 19, 19, 19, 31, { 31, 31, 31 } }
 };
 
 const KyraRpgGUISettings EoBEngine::_guiSettingsSegaCD = {
 	{ _dlgButtonPosX_Sega, _dlgButtonPosY_Sega, 0x66, 0xFF, false, 90, 14, 2, 7, { 285, 139 }, { 189, 162 }, { 31, 31 } },
-	{ 135, 130, 132, 180, 0x00, 17, 23, 20, 184, 177, 180, 184, 177, 180, 15, 6, 0x31, 9, 2, 0x35, 4, 0x33, 0x3C },
+	{ 135, 130, 132, 180, 0x00, 17, 23, 20, 184, 177, 180, 184, 177, 180, 15, 6, 0x31, 9, 2, 11, 0x35, 4, 0x33, 1, 7, 0x3C },
 	{	{ 184, 256, -1}, { 1, 57, 113 }, 64, 55,
 		{ 8, 80, -1 }, { 16, 72, 128 }, { 184, -1, -1 }, { 8, -1, -1 },
 		{ 40, 112, -1 }, { 16, 32, 72, 88, 128, 144 },
-		{ 24, 96, -1}, { 51, 107, 163 }, 40, 2, { 248, 248, -1}, { 19, 27, -1 }, 47, 2,
-		16, 39
-	}
-
+		{ 24, 96, -1}, { 51, 107, 163 }, 40, 2, { 248, 248, -1}, { 19, 27, -1 }, { 47, 47 }, 2,
+		2, 2, 2, 2, 16, 39
+	},
+	{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+	{ 0, { 0, 0, 0 }, 0, 0, 0, 0, 0, { 0, 0, 0 } }
 };
 
 const uint8 EoBEngine::_redGridTile[8] = {
@@ -1940,57 +1951,67 @@ void DarkMoonEngine::initSpells() {
 
 const KyraRpgGUISettings DarkMoonEngine::_guiSettingsFMTowns = {
 	{ _dlgButtonPosX_Def, _dlgButtonPosY_Def, 9, 15, false, 95, 11, 1, 7, { 221, 76 }, { 187, 162 }, { 95, 95 } },
-	{ 186, 181, 183, 183, 184, 17, 23, 20, 186, 181, 183, 182, 177, 180, 15, 6, 8, 9, 2, 5, 4, 3, 12 },
+	{ 186, 181, 183, 183, 184, 17, 23, 20, 186, 181, 183, 182, 177, 180, 15, 6, 8, 9, 2, 11, 5, 4, 3, 1, 7, 12 },
 	{	{ 184, 256, -1}, { 2, 54, 106 }, 64, 50,
 		{ 8, 80, -1 }, { 11, 63, 115 }, { 181, -1, -1 }, { 3, -1, -1 },
 		{ 40, 112, -1 }, { 11, 27, 63, 79, 115, 131 },
-		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, 51, 5,
-		13, 30
-	}
+		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, { 51, 51 }, 5,
+		2, 1, 2, 2, 13, 30
+	},
+	{ 183, 42, 183, 55, 7, 183, 82, 183, 103, 7, 275, 82, 275, 103, 7, 183, 124, 275, 124, 239, 138, 251, 145, 0, 7, 278, 138, 286, 145, 0, 7, 180, 145, 0, 7 },
+	{ 15, { 12, 12, 12 }, 12, 12, 12, 12, 15, { 15, 15, 15 } }
 };
 
 const KyraRpgGUISettings DarkMoonEngine::_guiSettingsPC98 = {
 	{ _dlgButtonPosX_Def, _dlgButtonPosY_Def, 9, 15, false, 95, 11, 2, 7, { 221, 76 }, { 189, 162 }, { 95, 95 } },
-	{ 186, 181, 183, 183, 184, 17, 23, 20, 186, 181, 183, 182, 177, 180, 15, 6, 8, 9, 2, 5, 4, 3, 12 },
+	{ 186, 181, 183, 183, 184, 17, 23, 20, 186, 181, 183, 182, 177, 180, 15, 6, 8, 9, 2, 11, 5, 4, 3, 1, 7, 12 },
 	{	{ 184, 256, -1}, { 2, 54, 106 }, 64, 50,
 		{ 8, 80, -1 }, { 11, 63, 115 }, { 181, -1, -1 }, { 3, -1, -1 },
 		{ 40, 112, -1 }, { 11, 27, 63, 79, 115, 131 },
-		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, 51, 5,
-		13, 30
-	}
+		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, { 51, 51 }, 5,
+		2, 2, 2, 2, 13, 30
+	},
+	{ 183, 42, 183, 55, 7, 183, 82, 183, 103, 7, 275, 82, 275, 103, 7, 183, 124, 275, 124, 239, 138, 251, 145, 0, 7, 278, 138, 286, 145, 0, 7, 180, 145, 0, 7 },
+	{ 15, { 12, 12, 12 }, 12, 12, 12, 12, 15, { 15, 15, 15 } }
 };
 
 const KyraRpgGUISettings DarkMoonEngine::_guiSettingsDOS = {
 	{ _dlgButtonPosX_Def, _dlgButtonPosY_Def, 9, 15, false, 95, 9, 2, 7, { 221, 76 }, { 189, 162 }, { 95, 95 } },
-	{ 186, 181, 183, 183, 184, 17, 23, 20, 186, 181, 183, 182, 177, 180, 15, 6, 8, 9, 2, 5, 4, 3, 12 },
+	{ 186, 181, 183, 183, 184, 17, 23, 20, 186, 181, 183, 182, 177, 180, 15, 6, 8, 9, 2, 11, 5, 4, 3, 1, 7, 12 },
 	{	{ 184, 256, -1}, { 2, 54, 106 }, 64, 50,
 		{ 8, 80, -1 }, { 11, 63, 115 }, { 181, -1, -1 }, { 3, -1, -1 },
 		{ 40, 112, -1 }, { 11, 27, 63, 79, 115, 131 },
-		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, 51, 5,
-		13, 30
-	}
+		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, { 51, 51 }, 5,
+		2, 2, 2, 2, 13, 30
+	},
+	{ 183, 42, 183, 55, 7, 183, 82, 183, 103, 7, 275, 82, 275, 103, 7, 183, 124, 275, 124, 239, 138, 251, 145, 0, 7, 278, 138, 286, 145, 0, 7, 180, 145, 0, 7 },
+	{ 15, { 12, 12, 12 }, 12, 12, 12, 12, 15, { 15, 15, 15 } }
 };
 
 const KyraRpgGUISettings DarkMoonEngine::_guiSettingsDOS_ZH = {
 	{ _dlgButtonPosX_ZH, _dlgButtonPosY_ZH, 9, 15, true, 69, 16, 1, 7, { 246, 86 }, { 184, 184 }, { 69, 69 } },
-	{ 186, 181, 183, 183, 184, 17, 23, 20, 186, 181, 183, 182, 177, 180, 15, 6, 8, 9, 2, 5, 4, 3, 12 },
+	{ 186, 181, 183, 183, 184, 17, 23, 20, 186, 181, 183, 182, 177, 180, 15, 6, 8, 9, 2, 11, 5, 4, 3, 1, 7, 12 },
 	{	{ 184, 256, -1}, { 2, 54, 106 }, 64, 50,
-		{ 8, 80, -1 }, { 11, 63, 115 }, { 181, -1, -1 }, { 3, -1, -1 },
-		{ 40, 112, -1 }, { 11, 27, 63, 79, 115, 131 },
-		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, 51, 5,
-		13, 30
-	}
+		{ 8, 80, -1 }, { 18, 70, 121 }, { 181, -1, -1 }, { 3, -1, -1 },
+		{ 40, 112, -1 }, { 17, 33, 69, 85, 120, 137 },
+		{ 42, 114, -1}, { 49, 101, 153 }, 25, 2, { 233, 290, -1}, { 25, 25, -1 }, { 30, 23 }, 8,
+		0, 1, 0, 0, 13, 30
+	},
+	{ 180, 37, 180, 36, 16, 180, 100, 261, 100, 15, 219, 104, 300, 104, 15, 180, 84, 236, 88, 254, 51, 270, 67, 0, 7, 287, 51, 301, 67, 0, 7, 180, 148, 38, 0 },
+	{ 15, { 4, 5, 6 }, 1, 2, 7, 15, 15, { 4, 5, 6 } }
 };
 
 const KyraRpgGUISettings DarkMoonEngine::_guiSettingsAmiga = {
 	{ _dlgButtonPosX_Def, _dlgButtonPosY_Def, 28, 31, false, 95, 9, 2, 7, { 221, 76 }, { 189, 162 }, { 95, 95 } },
-	{ 18, 17, 10, 17, 11, 10, 12, 25, 18, 9, 10, 18, 9, 10, 31, 24, 25, 28, 29, 7, 26, 27, 19 },
+	{ 18, 17, 10, 17, 11, 10, 12, 25, 18, 9, 10, 18, 9, 10, 31, 24, 25, 28, 29, 16, 7, 26, 27, 6, 22, 19 },
 	{	{ 184, 256, -1}, { 2, 54, 106 }, 64, 50,
 		{ 8, 80, -1 }, { 11, 63, 115 }, { 181, -1, -1 }, { 3, -1, -1 },
 		{ 40, 112, -1 }, { 11, 27, 63, 79, 115, 131 },
-		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, 51, 5,
-		13, 30
-	}
+		{ 23, 95, -1}, { 46, 98, 150 }, 38, 3, { 250, 250, -1}, { 16, 25, -1 }, { 51, 51 }, 5,
+		2, 2, 2, 2, 13, 30
+	},
+	{ 183, 42, 183, 55, 7, 183, 82, 183, 103, 7, 275, 82, 275, 103, 7, 183, 124, 275, 124, 239, 138, 251, 145, 0, 7, 278, 138, 286, 145, 0, 7, 180, 145, 0, 7 },
+	{ 31, { 19, 19, 19 }, 19, 19, 19, 19, 31, { 31, 31, 31 } }
 };
 
 const uint16 DarkMoonEngine::_dlgButtonPosX_ZH[17] = { 62, 192, 6, 86, 166, 246, 6, 86, 166, 246, 168, 250, 32, 174, 248, 0 };
diff --git a/engines/kyra/resource/staticres_lol.cpp b/engines/kyra/resource/staticres_lol.cpp
index 80e49f4bae0..384ddc3a97e 100644
--- a/engines/kyra/resource/staticres_lol.cpp
+++ b/engines/kyra/resource/staticres_lol.cpp
@@ -806,24 +806,28 @@ const int8 LoLEngine::_mapCoords[12][4] = {
 // be the PC-98 16 color version. That said, I have filled all the unused parts of the struct with zeroes.
 const KyraRpgGUISettings LoLEngine::_guiSettings = {
 	{ _dlgButtonPosX_Def, _dlgButtonPosY_Def, 144, 254, false, 74, 9, 2, 80, { 0, 0 }, { 0, 0 }, { 0, 0 } },
-	{ 136, 251, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+	{ 136, 251, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
 	{	{ 0, 0, 0 }, { 0, 0, 0 }, 0, 0,
 		{ 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
 		{ 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 },
-		{ 0, 0, 0 }, { 0, 0, 0 }, 0, 0, { 0, 0, 0 }, { 0, 0, 0 }, 0, 0,
-		0, 0
-	}
+		{ 0, 0, 0 }, { 0, 0, 0 }, 0, 0, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0 }, 0,
+		0, 0, 0, 0, 0, 0
+	},
+	{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+	{ 0, { 0, 0, 0 }, 0, 0, 0, 0, 0, { 0, 0, 0 } }
 };
 
 const KyraRpgGUISettings LoLEngine::_guiSettingsZH = {
 	{ _dlgButtonPosX_Def, _dlgButtonPosY_Def, 144, 254, false, 68, 18, 2, 66, { 0, 0 }, { 0, 0 }, { 0, 0 } },
-	{ 136, 251, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+	{ 136, 251, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
 	{	{ 0, 0, 0 }, { 0, 0, 0 }, 0, 0,
 		{ 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
 		{ 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 },
-		{ 0, 0, 0 }, { 0, 0, 0 }, 0, 0, { 0, 0, 0 }, { 0, 0, 0 }, 0, 0,
-		0, 0
-	}
+		{ 0, 0, 0 }, { 0, 0, 0 }, 0, 0, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0 }, 0,
+		0, 0, 0, 0, 0, 0
+	},
+	{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+	{ 0, { 0, 0, 0 }, 0, 0, 0, 0, 0, { 0, 0, 0 } }
 };
 
 const MistOfDoomAnimData LoLEngine::_mistAnimData[] = {




More information about the Scummvm-git-logs mailing list