summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElijah Thomas <42302100+elijah-thomas774@users.noreply.github.com>2025-09-27 12:38:36 -0400
committerGitHub <noreply@github.com>2025-09-27 12:38:36 -0400
commit3c4bfedd5d1591c60bddffe0cd196c90db852cfc (patch)
treed6cf396866b41a12584796962598c413a622dfc7
parent74aef290933bf0183d839c7b24a2330f470a6997 (diff)
parent183ce0e86f7c7796568607b5239035406ea448d2 (diff)
Merge pull request #256 from robojumper/d_lang
d_lang OK
-rw-r--r--config/SOUE01/splits.txt5
-rw-r--r--config/SOUE01/symbols.txt6
-rw-r--r--configure.py1
-rw-r--r--include/d/d_lang.h21
-rw-r--r--src/REL/d/d_s_boot.cpp18
-rw-r--r--src/d/d_dvd_drive_error.cpp9
-rw-r--r--src/d/d_lang.cpp19
-rw-r--r--src/d/d_message.cpp8
-rw-r--r--src/d/lyt/d_lyt_auto_explain.cpp5
-rw-r--r--src/d/lyt/d_lyt_game_over.cpp9
-rw-r--r--src/d/lyt/d_lyt_pause.cpp2
11 files changed, 72 insertions, 31 deletions
diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt
index 6f06108d..56c714be 100644
--- a/config/SOUE01/splits.txt
+++ b/config/SOUE01/splits.txt
@@ -245,8 +245,11 @@ d/d_heap.cpp:
.sbss start:0x805751A8 end:0x805751D0
.bss start:0x80597740 end:0x80597758
+d/d_lang.cpp:
+ .text start:0x80054F30 end:0x80054F88 align:16
+
d/d_main.cpp:
- .text start:0x80054F30 end:0x80055170 align:16
+ .text start:0x80054F90 end:0x80055170 align:16
.sbss start:0x805751D0 end:0x805751E0
d/d_pad.cpp:
diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt
index c7c4dfc9..ff5d9b53 100644
--- a/config/SOUE01/symbols.txt
+++ b/config/SOUE01/symbols.txt
@@ -2233,9 +2233,9 @@ __nwa__FUl = .text:0x80054ED0; // type:function size:0xC
__dl__FPv = .text:0x80054EE0; // type:function size:0x8
__dla__FPv = .text:0x80054EF0; // type:function size:0x8
__sinit_\d_heap_cpp = .text:0x80054F00; // type:function size:0x30 scope:local
-fn_80054F30 = .text:0x80054F30; // type:function size:0x4
-fn_80054F40 = .text:0x80054F40; // type:function size:0x4
-getUsedLanguageNTSCNum = .text:0x80054F50; // type:function size:0x38
+getCurrentLanguage1__Fv = .text:0x80054F30; // type:function size:0x4
+getCurrentLanguage2__Fv = .text:0x80054F40; // type:function size:0x4
+getCurrentLanguage__Fv = .text:0x80054F50; // type:function size:0x38
fn_80054F90 = .text:0x80054F90; // type:function size:0x18
fn_80054FB0 = .text:0x80054FB0; // type:function size:0x24
fn_80054FE0 = .text:0x80054FE0; // type:function size:0x20
diff --git a/configure.py b/configure.py
index 4cc79328..4c8acef2 100644
--- a/configure.py
+++ b/configure.py
@@ -431,6 +431,7 @@ config.libs = [
Object(Matching, "d/d_gfx.cpp"),
Object(NonMatching, "d/d_gfx_measures.cpp"),
Object(Matching, "d/d_heap.cpp"),
+ Object(Matching, "d/d_lang.cpp"),
Object(NonMatching, "d/d_main.cpp"),
Object(NonMatching, "d/d_pad.cpp"),
Object(Matching, "d/d_pad_ex.cpp"),
diff --git a/include/d/d_lang.h b/include/d/d_lang.h
new file mode 100644
index 00000000..42514662
--- /dev/null
+++ b/include/d/d_lang.h
@@ -0,0 +1,21 @@
+#ifndef D_LANG_H
+#define D_LANG_H
+
+#include "rvl/SC.h"
+
+// all of this is made up
+
+enum dLang_e {
+ D_LANG_JP = SC_LANG_JP,
+ D_LANG_EN = SC_LANG_EN,
+ D_LANG_FR = SC_LANG_FR,
+ D_LANG_ES = SC_LANG_SP,
+};
+
+// Yes there are three...
+
+u8 getCurrentLanguage1();
+u8 getCurrentLanguage2();
+u8 getCurrentLanguage();
+
+#endif
diff --git a/src/REL/d/d_s_boot.cpp b/src/REL/d/d_s_boot.cpp
index 349b46a1..e4189c29 100644
--- a/src/REL/d/d_s_boot.cpp
+++ b/src/REL/d/d_s_boot.cpp
@@ -10,6 +10,7 @@
#include "d/d_gfx.h"
#include "d/d_hbm.h"
#include "d/d_heap.h"
+#include "d/d_lang.h"
#include "d/d_message.h"
#include "d/d_pad.h"
#include "d/d_pad_manager.h"
@@ -57,9 +58,6 @@ sFPhaseBase::sFPhaseState dScBoot_c::executeLoadPhase() {
return mPhases.step();
}
-extern "C" u8 getUsedLanguageNTSCNum();
-extern "C" u8 fn_80054F30();
-
sFPhaseBase::sFPhaseState dScBoot_c::cb1() {
LayoutArcManager::GetInstance()->loadLayoutArcFromDisk("cursor", mHeap::g_archiveHeap);
LayoutArcManager::GetInstance()->loadLayoutArcFromDisk("CursorStick", mHeap::g_archiveHeap);
@@ -134,12 +132,14 @@ sFPhaseBase::sFPhaseState dScBoot_c::cb6() {
LayoutArcManager::GetInstance()->loadLayoutArcFromDisk("Main2D", nullptr);
LayoutArcManager::GetInstance()->loadLayoutArcFromDisk("DoButton", nullptr);
LayoutArcManager::GetInstance()->loadLayoutArcFromDisk("MenuHelp", nullptr);
- u8 result = fn_80054F30();
+ u8 result = getCurrentLanguage1();
s32 gameOverType;
- if (result == 3) {
+ if (result == D_LANG_FR) {
gameOverType = 1;
+ } else if (result == D_LANG_ES) {
+ gameOverType = 2;
} else {
- gameOverType = result == 4 ? 2 : 0;
+ gameOverType = 0;
}
if (gameOverType == 0) {
@@ -336,13 +336,13 @@ void dScBoot_c::drawCallback() {
dScBoot_c::strap_c::strap_c() {
SizedString<8> str;
- u8 langNum = getUsedLanguageNTSCNum();
+ u8 langNum = getCurrentLanguage();
mArcName.empty();
mLytFileName.empty();
mAnimFileName.empty();
- if (langNum == 3) {
+ if (langNum == D_LANG_FR) {
str = "F";
- } else if (langNum == 4) {
+ } else if (langNum == D_LANG_ES) {
str = "S";
} else {
str = "U";
diff --git a/src/d/d_dvd_drive_error.cpp b/src/d/d_dvd_drive_error.cpp
index d27fdedc..461c98c4 100644
--- a/src/d/d_dvd_drive_error.cpp
+++ b/src/d/d_dvd_drive_error.cpp
@@ -2,6 +2,7 @@
#include "d/d_dvd_unk.h"
#include "d/d_gfx.h"
+#include "d/d_lang.h"
#include "d/d_lyt_hio.h"
#include "d/d_reset.h"
#include "egg/gfx/eggDrawGX.h"
@@ -64,8 +65,6 @@ static const wchar_t *sErrorsFr[] = {
sErrFrDiskError,
};
-extern "C" u8 fn_80054F30();
-
void dDvdDriveError_c::draw() {
EGG::Screen screen;
screen.SetCanvasMode(EGG::Screen::CANVASMODE_0);
@@ -105,11 +104,11 @@ void dDvdDriveError_c::draw() {
idx = 2;
}
- u8 lang = fn_80054F30();
+ u8 lang = getCurrentLanguage1();
const wchar_t *str;
- if (lang == 3) {
+ if (lang == D_LANG_FR) {
str = sErrorsFr[idx];
- } else if (lang == 4) {
+ } else if (lang == D_LANG_ES) {
str = sErrorsEs[idx];
} else {
str = sErrorsEn[idx];
diff --git a/src/d/d_lang.cpp b/src/d/d_lang.cpp
new file mode 100644
index 00000000..80dd9e00
--- /dev/null
+++ b/src/d/d_lang.cpp
@@ -0,0 +1,19 @@
+#include "d/d_lang.h"
+
+#include "rvl/SC/scapi.h"
+
+u8 getCurrentLanguage1() {
+ return getCurrentLanguage2();
+}
+
+u8 getCurrentLanguage2() {
+ return getCurrentLanguage();
+}
+
+u8 getCurrentLanguage() {
+ u8 lang = SCGetLanguage();
+ if (lang != SC_LANG_FR && lang != SC_LANG_SP) {
+ lang = SC_LANG_EN;
+ }
+ return lang;
+}
diff --git a/src/d/d_message.cpp b/src/d/d_message.cpp
index 7dbb76c4..c4490b60 100644
--- a/src/d/d_message.cpp
+++ b/src/d/d_message.cpp
@@ -6,6 +6,7 @@
#include "d/a/d_a_itembase.h"
#include "d/a/d_a_player.h"
#include "d/d_base.h"
+#include "d/d_lang.h"
#include "d/d_light_env.h"
#include "d/d_lyt_hio.h"
#include "d/d_player.h"
@@ -1776,13 +1777,12 @@ void dMessage_c::reset() {
mMinigameTime = 0;
}
-extern "C" u8 fn_80054F30();
static SizedString<8> sCurrentLanguage;
const char *dMessage_c::getLanguageIdentifier() {
- u8 lang = fn_80054F30();
- if (lang == 3) {
+ u8 lang = getCurrentLanguage1();
+ if (lang == D_LANG_FR) {
sCurrentLanguage = "fr_US";
- } else if (lang == 4) {
+ } else if (lang == D_LANG_ES) {
sCurrentLanguage = "es_US";
} else {
sCurrentLanguage = "en_US";
diff --git a/src/d/lyt/d_lyt_auto_explain.cpp b/src/d/lyt/d_lyt_auto_explain.cpp
index 4c3e87fd..946ff95d 100644
--- a/src/d/lyt/d_lyt_auto_explain.cpp
+++ b/src/d/lyt/d_lyt_auto_explain.cpp
@@ -1,6 +1,7 @@
#include "d/lyt/d_lyt_auto_explain.h"
#include "common.h"
+#include "d/d_lang.h"
#include "d/d_tag_processor.h"
#include "d/lyt/d2d.h"
#include "d/lyt/d_lyt_control_game.h"
@@ -45,11 +46,9 @@ void dLytAutoExplain_c::executeState_Invisible() {
}
void dLytAutoExplain_c::finalizeState_Invisible() {}
-extern "C" u8 fn_80054F30();
-
void dLytAutoExplain_c::initializeState_In() {
int numLines = mpTagProcessor->getNumLinesMaybe() - 1;
- if (fn_80054F30() != 0 && numLines == 3) {
+ if (getCurrentLanguage1() != D_LANG_JP && numLines == 3) {
numLines = 2;
}
diff --git a/src/d/lyt/d_lyt_game_over.cpp b/src/d/lyt/d_lyt_game_over.cpp
index f50045fd..b3939590 100644
--- a/src/d/lyt/d_lyt_game_over.cpp
+++ b/src/d/lyt/d_lyt_game_over.cpp
@@ -3,6 +3,7 @@
#include "common.h"
#include "d/d_base.h"
#include "d/d_fader.h"
+#include "d/d_lang.h"
#include "d/d_message.h"
#include "d/d_sc_game.h"
#include "d/d_sc_title.h"
@@ -62,14 +63,12 @@ dLytGameOver_c::dLytGameOver_c() : mStateMgr(*this) {
init();
}
-extern "C" u8 fn_80054F30();
-
bool dLytGameOver_c::build() {
- u8 lang = fn_80054F30();
+ u8 lang = getCurrentLanguage1();
s32 variant;
- if (lang == 3) {
+ if (lang == D_LANG_FR) {
variant = 1;
- } else if (lang == 4) {
+ } else if (lang == D_LANG_ES) {
variant = 2;
} else {
variant = 0;
diff --git a/src/d/lyt/d_lyt_pause.cpp b/src/d/lyt/d_lyt_pause.cpp
index 926de978..aa6cc565 100644
--- a/src/d/lyt/d_lyt_pause.cpp
+++ b/src/d/lyt/d_lyt_pause.cpp
@@ -358,7 +358,7 @@ void dLytPauseMain_c::initializeState_Select() {
mpPauseText->requestIn();
}
}
-extern "C" void fn_80059F40(void *);
+
void dLytPauseMain_c::executeState_Select() {
switch (mStep) {
case 0: {