From e1d0f99fc3215e5af99b4b4029e05c6379069723 Mon Sep 17 00:00:00 2001 From: MelonSpeedruns Date: Sat, 30 May 2026 15:19:22 -0400 Subject: [PATCH] language support --- src/d/d_msg_object.cpp | 32 +++++++++++++++++++++++++++++++- src/d/d_s_logo.cpp | 34 +++++++++++++++++++++++++++++++++- src/dusk/ui/settings.cpp | 4 ++-- src/m_Do/m_Do_main.cpp | 4 ++-- 4 files changed, 68 insertions(+), 6 deletions(-) diff --git a/src/d/d_msg_object.cpp b/src/d/d_msg_object.cpp index 3e74db8f71..4d9c7004e5 100644 --- a/src/d/d_msg_object.cpp +++ b/src/d/d_msg_object.cpp @@ -1660,7 +1660,37 @@ void dMsgObject_c::readMessageGroupLocal(mDoDvdThd_mountXArchive_c** p_arcMount) #if TARGET_PC // Original game UB - if (dusk::version::isRegionPal()) { + if (dusk::tphd_active()) { + switch (dComIfGs_getPalLanguage()) { + case dSv_player_config_c::LANGUAGE_GERMAN: + snprintf(arcName, sizeof(arcName), "/res/Msgde/bmgres%d.arc", msgGroup); + break; + case dSv_player_config_c::LANGUAGE_FRENCH: + if (dusk::version::isRegionPal()) { + snprintf(arcName, sizeof(arcName), "/res/Msgfr/bmgres%d.arc", msgGroup); + } + else { + snprintf(arcName, sizeof(arcName), "/res/Msgusfr/bmgres%d.arc", msgGroup); + } + break; + case dSv_player_config_c::LANGUAGE_SPANISH: + if (dusk::version::isRegionPal()) { + snprintf(arcName, sizeof(arcName), "/res/Msgsp/bmgres%d.arc", msgGroup); + } else { + snprintf(arcName, sizeof(arcName), "/res/Msgussp/bmgres%d.arc", msgGroup); + } + break; + case dSv_player_config_c::LANGUAGE_ITALIAN: + snprintf(arcName, sizeof(arcName), "/res/Msgit/bmgres%d.arc", msgGroup); + break; + default: + if (dusk::version::isRegionPal()) { + snprintf(arcName, sizeof(arcName), "/res/Msguk/bmgres%d.arc", msgGroup); + } else { + snprintf(arcName, sizeof(arcName), "/res/Msgus/bmgres%d.arc", msgGroup); + } + } + } else if (dusk::version::isRegionPal()) { switch (dComIfGs_getPalLanguage()) { case dSv_player_config_c::LANGUAGE_GERMAN: snprintf(arcName, sizeof(arcName), "/res/Msgde/bmgres%d.arc", msgGroup); diff --git a/src/d/d_s_logo.cpp b/src/d/d_s_logo.cpp index 570dfac577..36b2ed1865 100644 --- a/src/d/d_s_logo.cpp +++ b/src/d/d_s_logo.cpp @@ -1504,7 +1504,39 @@ void dScnLogo_c::dvdDataLoad() { mpCardIconCommand = aramMount(ICON_RES_PATH, mDoExt_getJ2dHeap()); #if TARGET_PC - if (getGameVersion() == GameVersion::GcnPal) { + if (dusk::tphd_active) { + switch (getPalLanguage()) { + case 1: + mpBmgResCommand = onMemMount("/res/Msgde/bmgres.arc"); + break; + case 2: + if (getGameVersion() == GameVersion::GcnPal) { + mpBmgResCommand = onMemMount("/res/Msgfr/bmgres.arc"); + } else { + mpBmgResCommand = onMemMount("/res/Msgusfr/bmgres.arc"); + } + break; + case 3: + if (getGameVersion() == GameVersion::GcnPal) { + mpBmgResCommand = onMemMount("/res/Msgsp/bmgres.arc"); + } else { + mpBmgResCommand = onMemMount("/res/Msgussp/bmgres.arc"); + } + break; + case 4: + mpBmgResCommand = onMemMount("/res/Msgit/bmgres.arc"); + break; + case 0: + default: + if (getGameVersion() == GameVersion::GcnPal) { + mpBmgResCommand = onMemMount("/res/Msguk/bmgres.arc"); + } + else { + mpBmgResCommand = onMemMount("/res/Msgus/bmgres.arc"); + } + break; + } + } else if (getGameVersion() == GameVersion::GcnPal) { switch (getPalLanguage()) { case 1: mpBmgResCommand = onMemMount("/res/Msgde/bmgres.arc"); diff --git a/src/dusk/ui/settings.cpp b/src/dusk/ui/settings.cpp index 0b17e11590..c90acfb5bc 100644 --- a/src/dusk/ui/settings.cpp +++ b/src/dusk/ui/settings.cpp @@ -639,7 +639,7 @@ SettingsWindow::SettingsWindow(bool prelaunch) : mPrelaunch(prelaunch) { .getValue = [] { const auto& state = prelaunch_state(); - if (!state.configuredDiscCanLaunch || !state.configuredDiscInfo.isPal) { + if (!state.configuredDiscCanLaunch || (!state.configuredDiscInfo.isPal && !dusk::tphd_active())) { return kLanguageNames[0]; } const u8 idx = static_cast(getSettings().game.language.getValue()); @@ -649,7 +649,7 @@ SettingsWindow::SettingsWindow(bool prelaunch) : mPrelaunch(prelaunch) { [] { const auto& state = prelaunch_state(); return !state.configuredDiscCanLaunch || - !state.configuredDiscInfo.isPal; + (!state.configuredDiscInfo.isPal && !dusk::tphd_active()); }, .isModified = [] { diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 755bb8961f..ef8ba9e314 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -469,9 +469,9 @@ u8 OSGetLanguage() { } static void LanguageInit() { - // Keep language at 0 (English) if not on a PAL disc. + // Keep language at 0 (English) if not on a PAL disc and if TPHD is unloaded. // Doubt this matters, but avoid funky shit. - if (!dusk::version::isRegionPal()) { + if (!dusk::version::isRegionPal() && !dusk::tphd_active()) { return; }