From c23d013c6b9dca7a288b8bac55d0949f0cd3ea92 Mon Sep 17 00:00:00 2001 From: TomCube <121310847+yomcube@users.noreply.github.com> Date: Fri, 27 Feb 2026 21:40:51 -0600 Subject: [PATCH 1/6] dWiiStrapScreen_c mostly matching --- compile_flags.txt | 4 + include/game/bases/d_game_com.hpp | 8 ++ include/game/bases/d_wii_strap_screen.hpp | 10 ++ slices/wiimj2d.json | 8 ++ source/dol/bases/d_wii_strap_screen.cpp | 123 ++++++++++++++++++++++ 5 files changed, 153 insertions(+) create mode 100644 compile_flags.txt create mode 100644 source/dol/bases/d_wii_strap_screen.cpp diff --git a/compile_flags.txt b/compile_flags.txt new file mode 100644 index 00000000..2f50b1fc --- /dev/null +++ b/compile_flags.txt @@ -0,0 +1,4 @@ +-I +include +-I +include/lib diff --git a/include/game/bases/d_game_com.hpp b/include/game/bases/d_game_com.hpp index 7f0a9294..4f09005e 100644 --- a/include/game/bases/d_game_com.hpp +++ b/include/game/bases/d_game_com.hpp @@ -1,6 +1,8 @@ #pragma once +#include "revolution/SC/scapi.h" #include #include +#include #include #include #include @@ -38,6 +40,12 @@ namespace dGameCom { void clearGameStop(); ///< Resets the game stop state. void setGameStop(); + ////////////////// + // Language API // + ////////////////// + + SCLanguage GetLanguageHBM(); + //////////////////////// // Model Lighting API // //////////////////////// diff --git a/include/game/bases/d_wii_strap_screen.hpp b/include/game/bases/d_wii_strap_screen.hpp index 30cc4777..231c84bf 100644 --- a/include/game/bases/d_wii_strap_screen.hpp +++ b/include/game/bases/d_wii_strap_screen.hpp @@ -5,6 +5,16 @@ class dWiiStrapScreen_c : public dBase_c { public: + dWiiStrapScreen_c(); + virtual ~dWiiStrapScreen_c(); + + bool createLayout(); + + virtual int create(); + virtual int preExecute(); + virtual int execute(); + virtual int draw(); + virtual int doDelete(); LytBase_c mLayout; bool mHasLoadedLayout; diff --git a/slices/wiimj2d.json b/slices/wiimj2d.json index 1870dc6c..0a067381 100644 --- a/slices/wiimj2d.json +++ b/slices/wiimj2d.json @@ -466,6 +466,14 @@ ".sdata2": "0x2290-0x22d0" } }, + { + "source": "dol/bases/d_wii_strap_screen.cpp", + "memoryRanges": { + ".text": "0x108900-0x108db0", + ".data": "0x24a78-0x24ac8", + ".sdata": "0x1bc0-0x1bf0" + } + }, { "source": "dol/bases/d_a_iceball.cpp", "memoryRanges": { diff --git a/source/dol/bases/d_wii_strap_screen.cpp b/source/dol/bases/d_wii_strap_screen.cpp new file mode 100644 index 00000000..da9dd265 --- /dev/null +++ b/source/dol/bases/d_wii_strap_screen.cpp @@ -0,0 +1,123 @@ +#include "game/framework/f_profile_name.hpp" +#include +#include +#include +#include +#include +#include +#include +#include + +BASE_PROFILE(WII_STRAP, dWiiStrapScreen_c); + +dWiiStrapScreen_c::dWiiStrapScreen_c() { + mHasLoadedLayout = false; +} +dWiiStrapScreen_c::~dWiiStrapScreen_c() {} + +int dWiiStrapScreen_c::create() { + if (mHasLoadedLayout) { + return SUCCEEDED; + } + if (!createLayout()) { + return NOT_READY; + } + mHasLoadedLayout = true; + mVisible = true; + return SUCCEEDED; +} + +const char* lanFra = "wiiStrap_FraEU_00_roop.brlan"; +const char* lanGer = "wiiStrap_GerEU_00_roop.brlan"; +const char* lanIta = "wiiStrap_ItaEU_00_roop.brlan"; +const char* lanSpa = "wiiStrap_SpaEU_00_roop.brlan"; +const char* lanNed = "wiiStrap_NedEU_00_roop.brlan"; +const char* lanEng = "wiiStrap_EngEU_00_roop.brlan"; +const char* a00Strap = "A00_Strap"; +int groupRegisterArray; + +bool dWiiStrapScreen_c::createLayout() { + if (mHasLoadedLayout) { + return true; + } + + if ((u8)(dGameCom::GetLanguageHBM()) == '\x06') { + if (!mLayout.ReadResource3("WiiStrap/WiiStrap.arc", 2)) { + return false; + } + } + else { + if (!mLayout.ReadResourceEx("WiiStrap/WiiStrap.arc", 2, true)) { + return false; + } + } + + + char rlyt[112]; + memset(rlyt, 0, 100); + strncat(rlyt, "wiiStrap_", 99); + + char filename; + switch ((u8)dGameCom::GetLanguageHBM()) { + default: + strncat(&filename,"EngEU_00",99); break; + case '\x03': + strncat(&filename,"FraEU_00",99); break; + case '\x02': + strncat(&filename,"GerEU_00",99); break; + case '\x05': + strncat(&filename,"ItaEU_00",99); break; + case '\x04': + strncat(&filename,"SpaEU_00",99); break; + case '\x06': + strncat(&filename,"NedEU_00",99); break; + } + strncat(&filename, ".brlyt", 99); + + mLayout.build(rlyt, nullptr); + u8 lang = dGameCom::GetLanguageHBM(); + switch (lang) { + default: + mLayout.AnimeResRegister(&lanEng, 1); break; + case '\x03': + mLayout.AnimeResRegister(&lanFra, 1); break; + case '\x02': + mLayout.AnimeResRegister(&lanGer, 1); break; + case '\x05': + mLayout.AnimeResRegister(&lanIta, 1); break; + case '\x04': + mLayout.AnimeResRegister(&lanSpa, 1); break; + case '\x06': + mLayout.AnimeResRegister(&lanNed, 1); break; + } + mLayout.GroupRegister(&a00Strap, &groupRegisterArray, 1); + mLayout.LoopAnimeStartSetup(0); + + return true; +} + +int dWiiStrapScreen_c::preExecute() { + if (dBase_c::preExecute() == NOT_READY) { + return NOT_READY; + } + return mFader_c::mFader->getStatus() == mFaderBase_c::HIDDEN; +} + +int dWiiStrapScreen_c::execute() { + if (mHasLoadedLayout && mVisible) { + mLayout.AnimePlay(); + mLayout.calc(); + } + return SUCCEEDED; +} + +int dWiiStrapScreen_c::draw() { + if (mHasLoadedLayout && mVisible) { + mLayout.entry(); + } + return SUCCEEDED; +} + +int dWiiStrapScreen_c::doDelete() { + return mLayout.doDelete(); +} From 65dcef6d0bf658664f40e200f48cce7844919bcb Mon Sep 17 00:00:00 2001 From: TomCube <121310847+yomcube@users.noreply.github.com> Date: Fri, 27 Feb 2026 21:53:19 -0600 Subject: [PATCH 2/6] add symbols to syms.txt --- syms.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/syms.txt b/syms.txt index e3af0653..3fee4002 100644 --- a/syms.txt +++ b/syms.txt @@ -140,6 +140,7 @@ SetSoftLight_Boss__8dGameComFRQ23m3d6bmdl_ci=0x800B4050 SetSoftLight_Enemy__8dGameComFRQ23m3d6bmdl_ci=0x800B4170 SetSoftLight_MapObj__8dGameComFRQ23m3d6bmdl_ci=0x800B42B0 SelectCursorSetup__8dGameComFPQ34nw4r3lyt4Paneib=0x800B44D0 +GetLanguageHBM__8dGameComFv=0x800B4630 PlayerEnterCheck__8dGameComFi=0x800B4760 Player1upColor__8dGameComFP12LytTextBox_ci=0x800B4780 isNowCourseClear__8dGameComFv=0x800B4E30 @@ -162,7 +163,9 @@ FUN_800bbc40__7dInfo_cFiii=0x800BBC40 GetMapEnemyInfo__7dInfo_cFiiRQ27dInfo_c7enemy_s=0x800BBC60 __ct__9LytBase_cFv=0x800C89A0 __dt__9LytBase_cFv=0x800C89F0 +ReadResourceEx__9LytBase_cFPCcib=0x800C8C00 ReadResource__9LytBase_cFPCcb=0x800C8D00 +ReadResource3__9LytBase_cFPCcb=0x800C8DB0 NPaneRegister__9LytBase_cFPPCcPPQ34nw4r3lyt4Panei=0x800C8E50 WPaneRegister__9LytBase_cFPPCcPPQ34nw4r3lyt6Windowi=0x800C8EC0 PPaneRegister__9LytBase_cFPPCcPPQ34nw4r3lyt7Picturei=0x800C8F30 @@ -578,6 +581,7 @@ snprintf=0x802E19D8 sprintf=0x802E1ACC strcpy=0x802E1C28 strncpy=0x802E1CE8 +strncat=0x802E1D58 strcmp=0x802E1DA4 strrchr=0x802E1F30 fmod=0x802E8904 From d11b8edcba6ee3ea37f548c4af47a87d45b0972d Mon Sep 17 00:00:00 2001 From: RootCubed Date: Sat, 11 Apr 2026 07:33:49 +0200 Subject: [PATCH 3/6] Match and link `dWiiStrapScreen_c` --- include/game/bases/d_game_com.hpp | 2 +- include/game/bases/d_lytbase.hpp | 2 +- include/game/bases/d_wii_strap_screen.hpp | 16 ++- slices/wiimj2d.json | 5 +- source/dol/bases/d_wii_strap_screen.cpp | 113 +++++++++++----------- syms.txt | 2 +- 6 files changed, 77 insertions(+), 63 deletions(-) diff --git a/include/game/bases/d_game_com.hpp b/include/game/bases/d_game_com.hpp index 4f09005e..bb5e67db 100644 --- a/include/game/bases/d_game_com.hpp +++ b/include/game/bases/d_game_com.hpp @@ -44,7 +44,7 @@ namespace dGameCom { // Language API // ////////////////// - SCLanguage GetLanguageHBM(); + u8 GetLanguageHBM(); //////////////////////// // Model Lighting API // diff --git a/include/game/bases/d_lytbase.hpp b/include/game/bases/d_lytbase.hpp index 5bc5c24f..46e33ab6 100644 --- a/include/game/bases/d_lytbase.hpp +++ b/include/game/bases/d_lytbase.hpp @@ -17,7 +17,7 @@ class LytBase_c : public d2d::Multi_c { bool ReadResourceEx(const char *, int, bool); bool ReadResource(const char *, bool); bool ReadResource2(const char *, int); - bool ReadResource3(const char *, int); ///< @unofficial Not in Shield version. + bool ReadResource3(const char *, int); ///< @unofficial [Not in Shield version.] void NPaneRegister(const char **, nw4r::lyt::Pane **, int); void WPaneRegister(const char **, nw4r::lyt::Window **, int); diff --git a/include/game/bases/d_wii_strap_screen.hpp b/include/game/bases/d_wii_strap_screen.hpp index 231c84bf..1f0154c2 100644 --- a/include/game/bases/d_wii_strap_screen.hpp +++ b/include/game/bases/d_wii_strap_screen.hpp @@ -5,11 +5,25 @@ class dWiiStrapScreen_c : public dBase_c { public: + /// @brief The animation names used in the layout. + /// @unofficial + enum ANIM_NAME_e { + roop, + ANIM_NAME_COUNT + }; + + /// @brief The animations used for the layout. + /// @unofficial + enum ANIM_e { + ANIM_STRAP, + ANIM_COUNT + }; + dWiiStrapScreen_c(); virtual ~dWiiStrapScreen_c(); bool createLayout(); - + virtual int create(); virtual int preExecute(); virtual int execute(); diff --git a/slices/wiimj2d.json b/slices/wiimj2d.json index 0a067381..2f0bca7a 100644 --- a/slices/wiimj2d.json +++ b/slices/wiimj2d.json @@ -470,8 +470,9 @@ "source": "dol/bases/d_wii_strap_screen.cpp", "memoryRanges": { ".text": "0x108900-0x108db0", - ".data": "0x24a78-0x24ac8", - ".sdata": "0x1bc0-0x1bf0" + ".data": "0x24940-0x24ac8", + ".sdata": "0x1bc0-0x1bf0", + ".sbss2": "0x20-0x28" } }, { diff --git a/source/dol/bases/d_wii_strap_screen.cpp b/source/dol/bases/d_wii_strap_screen.cpp index da9dd265..e5d8af38 100644 --- a/source/dol/bases/d_wii_strap_screen.cpp +++ b/source/dol/bases/d_wii_strap_screen.cpp @@ -1,10 +1,6 @@ -#include "game/framework/f_profile_name.hpp" #include -#include #include #include -#include -#include #include #include @@ -13,6 +9,7 @@ BASE_PROFILE(WII_STRAP, dWiiStrapScreen_c); dWiiStrapScreen_c::dWiiStrapScreen_c() { mHasLoadedLayout = false; } + dWiiStrapScreen_c::~dWiiStrapScreen_c() {} int dWiiStrapScreen_c::create() { @@ -27,71 +24,73 @@ int dWiiStrapScreen_c::create() { return SUCCEEDED; } -const char* lanFra = "wiiStrap_FraEU_00_roop.brlan"; -const char* lanGer = "wiiStrap_GerEU_00_roop.brlan"; -const char* lanIta = "wiiStrap_ItaEU_00_roop.brlan"; -const char* lanSpa = "wiiStrap_SpaEU_00_roop.brlan"; -const char* lanNed = "wiiStrap_NedEU_00_roop.brlan"; -const char* lanEng = "wiiStrap_EngEU_00_roop.brlan"; -const char* a00Strap = "A00_Strap"; -int groupRegisterArray; - bool dWiiStrapScreen_c::createLayout() { + static const char *AnmNameTblEng[ANIM_NAME_COUNT] = { "wiiStrap_EngEU_00_roop.brlan" }; + static const char *AnmNameTblFra[ANIM_NAME_COUNT] = { "wiiStrap_FraEU_00_roop.brlan" }; + static const char *AnmNameTblGer[ANIM_NAME_COUNT] = { "wiiStrap_GerEU_00_roop.brlan" }; + static const char *AnmNameTblIta[ANIM_NAME_COUNT] = { "wiiStrap_ItaEU_00_roop.brlan" }; + static const char *AnmNameTblSpa[ANIM_NAME_COUNT] = { "wiiStrap_SpaEU_00_roop.brlan" }; + static const char *AnmNameTblNed[ANIM_NAME_COUNT] = { "wiiStrap_NedEU_00_roop.brlan" }; + + static const char *GROUP_NAME_DT[ANIM_COUNT] = { "A00_Strap" }; + + static const int ANIME_INDEX_TBL[ANIM_COUNT] = { roop }; + if (mHasLoadedLayout) { return true; } - - if ((u8)(dGameCom::GetLanguageHBM()) == '\x06') { - if (!mLayout.ReadResource3("WiiStrap/WiiStrap.arc", 2)) { - return false; - } - } - else { - if (!mLayout.ReadResourceEx("WiiStrap/WiiStrap.arc", 2, true)) { - return false; - } - } + switch (dGameCom::GetLanguageHBM()) { + case SC_LANG_NL: + if (!mLayout.ReadResource3("WiiStrap/WiiStrap.arc", 2)) { + return false; + } + break; + default: + if (!mLayout.ReadResourceEx("WiiStrap/WiiStrap.arc", 2, true)) { + return false; + } + break; + } - char rlyt[112]; - memset(rlyt, 0, 100); - strncat(rlyt, "wiiStrap_", 99); - char filename; - switch ((u8)dGameCom::GetLanguageHBM()) { + char filename[100]; + memset(filename, 0, 100); + strncat(filename, "wiiStrap_", 99); + switch (dGameCom::GetLanguageHBM()) { default: - strncat(&filename,"EngEU_00",99); break; - case '\x03': - strncat(&filename,"FraEU_00",99); break; - case '\x02': - strncat(&filename,"GerEU_00",99); break; - case '\x05': - strncat(&filename,"ItaEU_00",99); break; - case '\x04': - strncat(&filename,"SpaEU_00",99); break; - case '\x06': - strncat(&filename,"NedEU_00",99); break; + strncat(filename, "EngEU_00", 99); break; + case SC_LANG_FR: + strncat(filename, "FraEU_00", 99); break; + case SC_LANG_DE: + strncat(filename, "GerEU_00", 99); break; + case SC_LANG_IT: + strncat(filename, "ItaEU_00", 99); break; + case SC_LANG_SP: + strncat(filename, "SpaEU_00", 99); break; + case SC_LANG_NL: + strncat(filename, "NedEU_00", 99); break; } - strncat(&filename, ".brlyt", 99); + strncat(filename, ".brlyt", 99); + + mLayout.build(filename, nullptr); - mLayout.build(rlyt, nullptr); - u8 lang = dGameCom::GetLanguageHBM(); - switch (lang) { + switch (dGameCom::GetLanguageHBM()) { default: - mLayout.AnimeResRegister(&lanEng, 1); break; - case '\x03': - mLayout.AnimeResRegister(&lanFra, 1); break; - case '\x02': - mLayout.AnimeResRegister(&lanGer, 1); break; - case '\x05': - mLayout.AnimeResRegister(&lanIta, 1); break; - case '\x04': - mLayout.AnimeResRegister(&lanSpa, 1); break; - case '\x06': - mLayout.AnimeResRegister(&lanNed, 1); break; + mLayout.AnimeResRegister(AnmNameTblEng, ANIM_NAME_COUNT); break; + case SC_LANG_FR: + mLayout.AnimeResRegister(AnmNameTblFra, ANIM_NAME_COUNT); break; + case SC_LANG_DE: + mLayout.AnimeResRegister(AnmNameTblGer, ANIM_NAME_COUNT); break; + case SC_LANG_IT: + mLayout.AnimeResRegister(AnmNameTblIta, ANIM_NAME_COUNT); break; + case SC_LANG_SP: + mLayout.AnimeResRegister(AnmNameTblSpa, ANIM_NAME_COUNT); break; + case SC_LANG_NL: + mLayout.AnimeResRegister(AnmNameTblNed, ANIM_NAME_COUNT); break; } - mLayout.GroupRegister(&a00Strap, &groupRegisterArray, 1); - mLayout.LoopAnimeStartSetup(0); + mLayout.GroupRegister(GROUP_NAME_DT, ANIME_INDEX_TBL, ANIM_COUNT); + mLayout.LoopAnimeStartSetup(ANIM_STRAP); return true; } diff --git a/syms.txt b/syms.txt index 3fee4002..5f358620 100644 --- a/syms.txt +++ b/syms.txt @@ -165,7 +165,7 @@ __ct__9LytBase_cFv=0x800C89A0 __dt__9LytBase_cFv=0x800C89F0 ReadResourceEx__9LytBase_cFPCcib=0x800C8C00 ReadResource__9LytBase_cFPCcb=0x800C8D00 -ReadResource3__9LytBase_cFPCcb=0x800C8DB0 +ReadResource3__9LytBase_cFPCci=0x800C8DB0 NPaneRegister__9LytBase_cFPPCcPPQ34nw4r3lyt4Panei=0x800C8E50 WPaneRegister__9LytBase_cFPPCcPPQ34nw4r3lyt6Windowi=0x800C8EC0 PPaneRegister__9LytBase_cFPPCcPPQ34nw4r3lyt7Picturei=0x800C8F30 From eb8951dee5f72987e63e573448d197301e9df2f0 Mon Sep 17 00:00:00 2001 From: RootCubed Date: Sat, 11 Apr 2026 08:15:57 +0200 Subject: [PATCH 4/6] Fix prepare_objdiff error --- prepare_objdiff.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/prepare_objdiff.py b/prepare_objdiff.py index 05c08d93..a1d14713 100644 --- a/prepare_objdiff.py +++ b/prepare_objdiff.py @@ -43,7 +43,8 @@ def text_to_syms(syms_text: str) -> dict[tuple[str, int], tuple[str, dict[str, s if re.match(r'^\@\d+$', sym): # All @ symbols are local comment_dict['scope'] = 'local' - orig_syms[(sec, addr)] = (sym, comment_dict) + if not re.match(r'\.\.\..+', sym): + orig_syms[(sec, addr)] = (sym, comment_dict) # Symbols that appear multiple times must also be local for _, (sym, comment_dict) in orig_syms.items(): @@ -226,7 +227,7 @@ def get_dtk(tag: str) -> str: o_sym, o_attrs = dol_syms[(sec, addr)] n_sym, n_attrs = new_syms[(sec, addr)] if 'size' in o_attrs and o_attrs['size'] != 0: - if 'size' not in n_attrs or n_attrs['size'] != o_attrs['size']: + if 'size' not in n_attrs or n_attrs['size'] < o_attrs['size']: n_attrs['size'] = o_attrs['size'] if re.match(r'\.\.\..+', n_sym) and n_sym != o_sym: new_syms[(sec, addr)] = (o_sym, o_attrs) From 3091e9a2316a8f96c79c1cc2ed4c12ee759990ca Mon Sep 17 00:00:00 2001 From: RootCubed Date: Sat, 11 Apr 2026 10:36:21 +0200 Subject: [PATCH 5/6] Cleanup / document --- compile_flags.txt | 4 --- include/game/bases/d_WarningManager.hpp | 21 +++++++++++++++ ..._strap_screen.hpp => d_WiiStrapScreen.hpp} | 15 +++++++---- include/game/bases/d_game_com.hpp | 2 -- include/game/bases/d_s_boot.hpp | 2 +- include/game/bases/d_warning_manager.hpp | 27 ------------------- slices/wiimj2d.json | 2 +- ..._strap_screen.cpp => d_WiiStrapScreen.cpp} | 3 ++- source/dol/bases/d_s_boot.cpp | 2 +- 9 files changed, 36 insertions(+), 42 deletions(-) delete mode 100644 compile_flags.txt rename include/game/bases/{d_wii_strap_screen.hpp => d_WiiStrapScreen.hpp} (58%) delete mode 100644 include/game/bases/d_warning_manager.hpp rename source/dol/bases/{d_wii_strap_screen.cpp => d_WiiStrapScreen.cpp} (98%) diff --git a/compile_flags.txt b/compile_flags.txt deleted file mode 100644 index 2f50b1fc..00000000 --- a/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --I -include --I -include/lib diff --git a/include/game/bases/d_WarningManager.hpp b/include/game/bases/d_WarningManager.hpp index ebc9cc57..2e2193c1 100644 --- a/include/game/bases/d_WarningManager.hpp +++ b/include/game/bases/d_WarningManager.hpp @@ -1,6 +1,27 @@ #pragma once +#include + class dWarningManager_c { public: + void AllWarningEnd(bool); + void setError(int errorID) { m_b8f = true; mErrorID = errorID; } + static void CreateWarningManager(); + static void addWarningForbid() NOINLINE { m_WarningForbid++; } + static void subWarningForbid() NOINLINE { if (m_WarningForbid > 0) m_WarningForbid--; } + static bool isError() { return m_Created && m_WarningCheck; } + + u8 mPad1[0xb00]; + int m_b00; + u8 mPad2[0x5]; + bool m_b09; + u8 mPad3[0x46]; + int mErrorID; + u8 mPad4[0x3b]; + bool m_b8f; + + static bool m_Created; + static bool m_WarningCheck; static int m_WarningForbid; + static dWarningManager_c *m_instance; }; diff --git a/include/game/bases/d_wii_strap_screen.hpp b/include/game/bases/d_WiiStrapScreen.hpp similarity index 58% rename from include/game/bases/d_wii_strap_screen.hpp rename to include/game/bases/d_WiiStrapScreen.hpp index 1f0154c2..0982996a 100644 --- a/include/game/bases/d_wii_strap_screen.hpp +++ b/include/game/bases/d_WiiStrapScreen.hpp @@ -3,6 +3,10 @@ #include #include +/// @brief Displays the Wii Strap safety warning screen. +/// @details Loops between the two images that show the safety warning and how to put on the strap. +/// Note that pressing a button to advance from the screen is handled by dScBoot_c. +/// @ingroup bases class dWiiStrapScreen_c : public dBase_c { public: /// @brief The animation names used in the layout. @@ -22,15 +26,16 @@ class dWiiStrapScreen_c : public dBase_c { dWiiStrapScreen_c(); virtual ~dWiiStrapScreen_c(); - bool createLayout(); - virtual int create(); virtual int preExecute(); virtual int execute(); virtual int draw(); virtual int doDelete(); - LytBase_c mLayout; - bool mHasLoadedLayout; - bool mVisible; + bool createLayout(); + + LytBase_c mLayout; ///< The layout for the screen. + + bool mHasLoadedLayout; ///< Whether the layout has been loaded. + bool mVisible; ///< Whether the screen is currently visible. }; diff --git a/include/game/bases/d_game_com.hpp b/include/game/bases/d_game_com.hpp index bb5e67db..ddb4aba6 100644 --- a/include/game/bases/d_game_com.hpp +++ b/include/game/bases/d_game_com.hpp @@ -1,8 +1,6 @@ #pragma once -#include "revolution/SC/scapi.h" #include #include -#include #include #include #include diff --git a/include/game/bases/d_s_boot.hpp b/include/game/bases/d_s_boot.hpp index a1404ad7..0688a768 100644 --- a/include/game/bases/d_s_boot.hpp +++ b/include/game/bases/d_s_boot.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include #include #include diff --git a/include/game/bases/d_warning_manager.hpp b/include/game/bases/d_warning_manager.hpp deleted file mode 100644 index 2e2193c1..00000000 --- a/include/game/bases/d_warning_manager.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include - -class dWarningManager_c { -public: - void AllWarningEnd(bool); - void setError(int errorID) { m_b8f = true; mErrorID = errorID; } - static void CreateWarningManager(); - static void addWarningForbid() NOINLINE { m_WarningForbid++; } - static void subWarningForbid() NOINLINE { if (m_WarningForbid > 0) m_WarningForbid--; } - static bool isError() { return m_Created && m_WarningCheck; } - - u8 mPad1[0xb00]; - int m_b00; - u8 mPad2[0x5]; - bool m_b09; - u8 mPad3[0x46]; - int mErrorID; - u8 mPad4[0x3b]; - bool m_b8f; - - static bool m_Created; - static bool m_WarningCheck; - static int m_WarningForbid; - static dWarningManager_c *m_instance; -}; diff --git a/slices/wiimj2d.json b/slices/wiimj2d.json index 2f0bca7a..59fa5585 100644 --- a/slices/wiimj2d.json +++ b/slices/wiimj2d.json @@ -467,7 +467,7 @@ } }, { - "source": "dol/bases/d_wii_strap_screen.cpp", + "source": "dol/bases/d_WiiStrapScreen.cpp", "memoryRanges": { ".text": "0x108900-0x108db0", ".data": "0x24940-0x24ac8", diff --git a/source/dol/bases/d_wii_strap_screen.cpp b/source/dol/bases/d_WiiStrapScreen.cpp similarity index 98% rename from source/dol/bases/d_wii_strap_screen.cpp rename to source/dol/bases/d_WiiStrapScreen.cpp index e5d8af38..b23eec03 100644 --- a/source/dol/bases/d_wii_strap_screen.cpp +++ b/source/dol/bases/d_WiiStrapScreen.cpp @@ -1,7 +1,8 @@ -#include +#include #include #include #include +#include #include BASE_PROFILE(WII_STRAP, dWiiStrapScreen_c); diff --git a/source/dol/bases/d_s_boot.cpp b/source/dol/bases/d_s_boot.cpp index e89acaa8..0548a7e4 100644 --- a/source/dol/bases/d_s_boot.cpp +++ b/source/dol/bases/d_s_boot.cpp @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include #include From f312ce5e761f710609e0bfc5c36aab84dae5460e Mon Sep 17 00:00:00 2001 From: RootCubed Date: Sun, 12 Apr 2026 09:16:41 +0200 Subject: [PATCH 6/6] Apply code review --- include/game/bases/d_WiiStrapScreen.hpp | 2 +- include/types.h | 1 + source/dol/bases/d_WiiStrapScreen.cpp | 22 ++++++++++------------ 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/include/game/bases/d_WiiStrapScreen.hpp b/include/game/bases/d_WiiStrapScreen.hpp index 0982996a..cbda6f86 100644 --- a/include/game/bases/d_WiiStrapScreen.hpp +++ b/include/game/bases/d_WiiStrapScreen.hpp @@ -5,7 +5,7 @@ /// @brief Displays the Wii Strap safety warning screen. /// @details Loops between the two images that show the safety warning and how to put on the strap. -/// Note that pressing a button to advance from the screen is handled by dScBoot_c. +/// @note The button press to advance from this screen is handled by dScBoot_c. /// @ingroup bases class dWiiStrapScreen_c : public dBase_c { public: diff --git a/include/types.h b/include/types.h index a596d92e..ece753da 100644 --- a/include/types.h +++ b/include/types.h @@ -49,6 +49,7 @@ typedef int BOOL; // Macros #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) +#define ARRAY_MAX_STRLEN(a) (ARRAY_SIZE(a) - 1) #define ARRAY_LAST(a) (a[ARRAY_SIZE(a) - 1]) #define BIT_FLAG(bit) ((bit) < 0 ? 0 : 1 << (bit)) #define ROUND_UP(x, align) (((x) + (align) - 1) & (-(align))) diff --git a/source/dol/bases/d_WiiStrapScreen.cpp b/source/dol/bases/d_WiiStrapScreen.cpp index b23eec03..d5889d21 100644 --- a/source/dol/bases/d_WiiStrapScreen.cpp +++ b/source/dol/bases/d_WiiStrapScreen.cpp @@ -7,9 +7,7 @@ BASE_PROFILE(WII_STRAP, dWiiStrapScreen_c); -dWiiStrapScreen_c::dWiiStrapScreen_c() { - mHasLoadedLayout = false; -} +dWiiStrapScreen_c::dWiiStrapScreen_c() : mHasLoadedLayout(false) {} dWiiStrapScreen_c::~dWiiStrapScreen_c() {} @@ -56,23 +54,23 @@ bool dWiiStrapScreen_c::createLayout() { char filename[100]; - memset(filename, 0, 100); - strncat(filename, "wiiStrap_", 99); + memset(filename, 0, ARRAY_SIZE(filename)); + strncat(filename, "wiiStrap_", ARRAY_MAX_STRLEN(filename)); switch (dGameCom::GetLanguageHBM()) { default: - strncat(filename, "EngEU_00", 99); break; + strncat(filename, "EngEU_00", ARRAY_MAX_STRLEN(filename)); break; case SC_LANG_FR: - strncat(filename, "FraEU_00", 99); break; + strncat(filename, "FraEU_00", ARRAY_MAX_STRLEN(filename)); break; case SC_LANG_DE: - strncat(filename, "GerEU_00", 99); break; + strncat(filename, "GerEU_00", ARRAY_MAX_STRLEN(filename)); break; case SC_LANG_IT: - strncat(filename, "ItaEU_00", 99); break; + strncat(filename, "ItaEU_00", ARRAY_MAX_STRLEN(filename)); break; case SC_LANG_SP: - strncat(filename, "SpaEU_00", 99); break; + strncat(filename, "SpaEU_00", ARRAY_MAX_STRLEN(filename)); break; case SC_LANG_NL: - strncat(filename, "NedEU_00", 99); break; + strncat(filename, "NedEU_00", ARRAY_MAX_STRLEN(filename)); break; } - strncat(filename, ".brlyt", 99); + strncat(filename, ".brlyt", ARRAY_MAX_STRLEN(filename)); mLayout.build(filename, nullptr);