From 072ef7eff7e152e2276342f8472dfa49228cac74 Mon Sep 17 00:00:00 2001 From: Gliniak <153369+Gliniak@users.noreply.github.com> Date: Tue, 19 May 2026 22:37:14 +0200 Subject: [PATCH] [XAM] Implemented XamGetOnlineLanguageAndCountry --- src/xenia/kernel/xam/xam_locale.cc | 31 ++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/xenia/kernel/xam/xam_locale.cc b/src/xenia/kernel/xam/xam_locale.cc index a18f239e3..37445f0f7 100644 --- a/src/xenia/kernel/xam/xam_locale.cc +++ b/src/xenia/kernel/xam/xam_locale.cc @@ -332,6 +332,37 @@ dword_result_t XamGetLanguageLocaleString_entry(dword_t language_id, } DECLARE_XAM_EXPORT1(XamGetLanguageLocaleString, kLocale, kImplemented); +void XamGetOnlineLanguageAndCountry_entry(qword_t xuid, + dword_t language_result_buffer, + dword_t country_result_buffer) { + const auto user = kernel_state()->xam_state()->GetUserProfile(xuid); + if (country_result_buffer) { + uint8_t* country_buffer = + kernel_memory()->TranslateVirtual(country_result_buffer); + + const uint8_t country_id = + user ? user->GetCountry() + : kernel_state()->xconfig()->ReadSetting( + XCONFIG_USER_CATEGORY, XCONFIG_USER_COUNTRY); + + *country_buffer = country_id; + } + + if (language_result_buffer) { + uint8_t* language_buffer = + kernel_memory()->TranslateVirtual(language_result_buffer); + + const uint32_t desired_language = + user ? user->GetLanguage() + : kernel_state()->xconfig()->ReadSetting( + XCONFIG_USER_CATEGORY, + XCONFIG_USER_CATEGORY_ENTRIES::XCONFIG_USER_LANGUAGE); + + *language_buffer = static_cast(desired_language); + } +} +DECLARE_XAM_EXPORT1(XamGetOnlineLanguageAndCountry, kLocale, kImplemented); + dword_result_t XamGetOnlineLanguageAndCountryString_entry( dword_t language_id, dword_t country_id, dword_t buffer_length, lpu16string_t buffer) {