[Xam/Info] - Fix XamGetLanguage & XGetLanguage Implementation

XamGetLanguage:
 - Language values that are returned must match Xlanguage values
XGetLanguage:
 - Return values above 9 will default to japanese, korean, or english depending on game region
This commit is contained in:
The-Little-Wolf 2024-11-30 11:16:48 -08:00 committed by Radosław Gliński
parent 61b2e15666
commit 6a380bcd91
1 changed files with 25 additions and 13 deletions

View File

@ -259,24 +259,36 @@ uint32_t xeXGetGameRegion() {
dword_result_t XGetGameRegion_entry() { return xeXGetGameRegion(); }
DECLARE_XAM_EXPORT1(XGetGameRegion, kNone, kStub);
dword_result_t XGetLanguage_entry() {
XLanguage xeGetLanguage(bool extended_languages_support) {
auto desired_language = static_cast<XLanguage>(cvars::user_language);
uint32_t region = xeXGetGameRegion();
auto max_languages = extended_languages_support ? XLanguage::kMaxLanguages
: XLanguage::kSChinese;
if (desired_language < max_languages) {
return desired_language;
}
if ((region & 0xff00) != 0x100) {
return XLanguage::kEnglish;
}
switch (region) {
case 0x101: // NTSC-J (Japan)
return XLanguage::kJapanese;
case 0x102: // NTSC-J (China)
return extended_languages_support ? XLanguage::kSChinese
: XLanguage::kEnglish;
default:
return XLanguage::kKorean;
}
}
// Switch the language based on game region.
// TODO(benvanik): pull from xex header.
/* uint32_t game_region = XEX_REGION_NTSCU;
if (game_region & XEX_REGION_NTSCU) {
desired_language = XLanguage::kEnglish;
} else if (game_region & XEX_REGION_NTSCJ) {
desired_language = XLanguage::kJapanese;
}*/
// Add more overrides?
return uint32_t(desired_language);
dword_result_t XGetLanguage_entry() {
return static_cast<uint32_t>(xeGetLanguage(false));
}
DECLARE_XAM_EXPORT1(XGetLanguage, kNone, kImplemented);
dword_result_t XamGetLanguage_entry() { return cvars::user_language; }
dword_result_t XamGetLanguage_entry() {
return static_cast<uint32_t>(xeGetLanguage(true));
}
DECLARE_XAM_EXPORT1(XamGetLanguage, kNone, kImplemented);
dword_result_t XamGetCurrentTitleId_entry() {