From d153cbc0ede10dd24a32e89faf81c8fb839ee23a Mon Sep 17 00:00:00 2001 From: robojumper Date: Fri, 1 Aug 2025 11:26:25 +0200 Subject: [PATCH] Other cleanup --- config/SOUE01/symbols.txt | 45 ++--- configure.py | 6 +- include/d/d_cs_base.h | 22 +-- include/d/d_dvd_drive_error.h | 4 + include/d/d_dvd_unk.h | 73 ++++++-- include/d/d_pad_manager.h | 19 +- include/d/d_video.h | 10 + include/d/snd/d_snd_player_mgr.h | 1 + include/toBeSorted/nand_result_tracker.h | 42 ++++- src/d/d_cs_base.cpp | 21 ++- src/d/d_cs_game.cpp | 2 +- src/d/d_dvd_drive_error.cpp | 2 +- src/d/d_dvd_unk.cpp | 224 ++++++++++++++++++++++- src/d/d_pad_manager.cpp | 40 ++-- src/d/d_reset.cpp | 21 ++- src/d/d_sc_title.cpp | 3 - src/toBeSorted/nand_result_tracker.cpp | 118 ++++++++++++ src/toBeSorted/save_manager.cpp | 46 ++--- 18 files changed, 569 insertions(+), 130 deletions(-) create mode 100644 include/d/d_video.h create mode 100644 src/toBeSorted/nand_result_tracker.cpp diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 77a7fe84..a2ed088c 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -2151,22 +2151,22 @@ draw__16dDvdDriveError_cFv = .text:0x80052350; // type:function size:0x35C execute__16dDvdDriveError_cFv = .text:0x800526B0; // type:function size:0x98 init__16dDvdDriveError_cFv = .text:0x80052750; // type:function size:0x10 create__Q27dDvdUnk7FontUnkFPQ23EGG4Heap = .text:0x80052760; // type:function size:0x88 -fn_800527F0 = .text:0x800527F0; // type:function size:0x11C -fn_80052910 = .text:0x80052910; // type:function size:0x48 -fn_80052960 = .text:0x80052960; // type:function size:0x18 +execute__Q27dDvdUnk7FontUnkFv = .text:0x800527F0; // type:function size:0x11C +drawNonDriveError__Q27dDvdUnk7FontUnkFv = .text:0x80052910; // type:function size:0x48 +drawDriveError__Q27dDvdUnk7FontUnkFv = .text:0x80052960; // type:function size:0x18 init__Q27dDvdUnk7FontUnkFv = .text:0x80052980; // type:function size:0x30 fn_800529B0__Q27dDvdUnk7FontUnkFv = .text:0x800529B0; // type:function size:0x30 -fn_800529E0__Q27dDvdUnk7FontUnkFv = .text:0x800529E0; // type:function size:0x38 +clearNandError__Q27dDvdUnk7FontUnkFv = .text:0x800529E0; // type:function size:0x38 fn_80052A20__Q27dDvdUnk7FontUnkFv = .text:0x80052A20; // type:function size:0xB8 -fn_80052AE0 = .text:0x80052AE0; // type:function size:0x148 -fn_80052C30 = .text:0x80052C30; // type:function size:0x24 -fn_80052C60__Q27dDvdUnk7FontUnkFv = .text:0x80052C60; // type:function size:0x24 -fn_80052C90__Q27dDvdUnk7FontUnkFv = .text:0x80052C90; // type:function size:0x28 -fn_80052CC0 = .text:0x80052CC0; // type:function size:0x38 -fn_80052D00__Q27dDvdUnk7FontUnkFb = .text:0x80052D00; // type:function size:0x14 -fn_80052D20__Q27dDvdUnk7FontUnkFv = .text:0x80052D20; // type:function size:0x30 +preExecute__Q27dDvdUnk7FontUnkFv = .text:0x80052AE0; // type:function size:0x148 +isAnyError__Q27dDvdUnk7FontUnkCFv = .text:0x80052C30; // type:function size:0x24 +onError__Q27dDvdUnk7FontUnkFv = .text:0x80052C60; // type:function size:0x24 +clearNandTrackerError__Q27dDvdUnk7FontUnkFv = .text:0x80052C90; // type:function size:0x28 +fn_80052CC0__Q27dDvdUnk7FontUnkFv = .text:0x80052CC0; // type:function size:0x38 +setNeedsPad__Q27dDvdUnk7FontUnkFb = .text:0x80052D00; // type:function size:0x14 +padErrorsAllowed__Q27dDvdUnk7FontUnkFv = .text:0x80052D20; // type:function size:0x30 fn_80052D50__Q27dDvdUnk7FontUnkFv = .text:0x80052D50; // type:function size:0x78 -fn_80052DD0 = .text:0x80052DD0; // type:function size:0x2C +fn_80052DD0__Q27dDvdUnk7FontUnkFv = .text:0x80052DD0; // type:function size:0x2C initDylinkHeap__4dDylFiPC10RelNamePtriPQ23EGG4Heap = .text:0x80052E00; // type:function size:0x1A0 isLinked__4dDylFUs = .text:0x80052FA0; // type:function size:0x30 Unlink__4dDylFUs = .text:0x80052FD0; // type:function size:0x20 @@ -2860,7 +2860,7 @@ CreateArcEntry__22ArcCallbackHandlerBaseFPvPCc = .text:0x800651C0; // type:funct DestroyArcEntry__22ArcCallbackHandlerBaseFPCc = .text:0x800653D0; // type:function size:0x194 __sinit_\arc_callback_handler_cpp = .text:0x80065570; // type:function size:0x20 scope:local create__6mVideoFv = .text:0x80065590; // type:function size:0x54 -fn_800655F0 = .text:0x800655F0; // type:function size:0x4 +enableDimming__6dVideoFi = .text:0x800655F0; // type:function size:0x4 __ct__8dCsMgr_cFv = .text:0x80065600; // type:function size:0x3C execute__8dCsMgr_cFv = .text:0x80065640; // type:function size:0x164 registCursor__8dCsMgr_cFP18dCursorInterface_c = .text:0x800657B0; // type:function size:0x58 @@ -4062,13 +4062,14 @@ onEnter__Q23EGG6ThreadFv = .text:0x800BD600; // type:function size:0x4 create__17NandResultTrackerFPQ23EGG4Heap = .text:0x800BD610; // type:function size:0x34 GetInstance__17NandResultTrackerFv = .text:0x800BD650; // type:function size:0x8 isFailure__17NandResultTrackerF10NANDResult = .text:0x800BD660; // type:function size:0x5C -fn_800BD6C0 = .text:0x800BD6C0; // type:function size:0x34 -fn_800BD700 = .text:0x800BD700; // type:function size:0x74 -fn_800BD780 = .text:0x800BD780; // type:function size:0x18 -fn_800BD7A0 = .text:0x800BD7A0; // type:function size:0x74 -fn_800BD820 = .text:0x800BD820; // type:function size:0x8 -fn_800BD830 = .text:0x800BD830; // type:function size:0x78 -fn_800BD8B0 = .text:0x800BD8B0; // type:function size:0x10 +draw__17NandResultTrackerFv = .text:0x800BD6C0; // type:function size:0x34 +execute__17NandResultTrackerFv = .text:0x800BD700; // type:function size:0x74 +init__17NandResultTrackerFv = .text:0x800BD780; // type:function size:0x10 +ModeRequestNormal__17NandResultTrackerFv = .text:0x800BD790; // type:function size:0x8 +ModeProc_Normal__17NandResultTrackerFv = .text:0x800BD7A0; // type:function size:0x74 +ModeRequestError__17NandResultTrackerFv = .text:0x800BD820; // type:function size:0x8 +ModeProc_Error__17NandResultTrackerFv = .text:0x800BD830; // type:function size:0x78 +ModeRequest__17NandResultTrackerFQ217NandResultTracker6Mode_e = .text:0x800BD8B0; // type:function size:0x10 init__16SceneflagManagerFv = .text:0x800BD8C0; // type:function size:0x4 setShouldCommit__16SceneflagManagerFUs = .text:0x800BD8D0; // type:function size:0xC __ct__16SceneflagManagerFv = .text:0x800BD8E0; // type:function size:0x64 @@ -19953,7 +19954,7 @@ enterHelp__15dSndPlayerMgr_cFv = .text:0x8035E540; // type:function size:0x18 fn_8035E560 = .text:0x8035E560; // type:function size:0x18 fn_8035E580 = .text:0x8035E580; // type:function size:0x50 fn_8035E5D0 = .text:0x8035E5D0; // type:function size:0x44 -fn_8035E620 = .text:0x8035E620; // type:function size:0xB4 +fn_8035E620__15dSndPlayerMgr_cFv = .text:0x8035E620; // type:function size:0xB4 fn_8035E6E0__15dSndPlayerMgr_cFv = .text:0x8035E6E0; // type:function size:0xA4 fn_8035E790 = .text:0x8035E790; // type:function size:0x84 fn_8035E820 = .text:0x8035E820; // type:function size:0x38 @@ -41506,7 +41507,7 @@ sInstance__14dTimeAreaMgr_c = .sbss:0x805753C0; // type:object size:0x4 data:4by TIMESHIFT_TRANSITION_BORDER_COLOR = .sbss:0x805753C4; // type:object size:0x1 data:byte CURR_TIMESHIFT_STONE_ACTIVE = .sbss:0x805753C8; // type:object size:0x8 data:4byte sInstance__17NandRequestThread = .sbss:0x805753D0; // type:object size:0x8 data:4byte -lbl_805753D8 = .sbss:0x805753D8; // type:object size:0x8 data:4byte +sInstance__17NandResultTracker = .sbss:0x805753D8; // type:object size:0x8 data:4byte sInstance__16SceneflagManager = .sbss:0x805753E0; // type:object size:0x4 data:4byte sTempFlags__16SceneflagManager = .sbss:0x805753E8; // type:object size:0x8 sInstance__15TBoxflagManager = .sbss:0x805753F0; // type:object size:0x4 data:4byte diff --git a/configure.py b/configure.py index 5e719ca7..506acb7b 100644 --- a/configure.py +++ b/configure.py @@ -403,7 +403,7 @@ config.libs = [ Object(Matching, "d/d_cc.cpp"), Object(Matching, "d/d_dvd.cpp"), Object(Matching, "d/d_dvd_drive_error.cpp"), - Object(NonMatching, "d/d_dvd_unk.cpp"), + Object(Matching, "d/d_dvd_unk.cpp"), Object(NonMatching, "d/d_dylink.cpp"), Object(Matching, "d/d_fader.cpp"), Object(Matching, "d/d_font_manager.cpp"), @@ -413,7 +413,7 @@ config.libs = [ Object(NonMatching, "d/d_main.cpp"), Object(NonMatching, "d/d_pad.cpp"), Object(Matching, "d/d_pad_ex.cpp"), - Object(NonMatching, "d/d_pad_manager.cpp"), + Object(Matching, "d/d_pad_manager.cpp"), Object(NonMatching, "d/d_player_act.cpp"), Object(Matching, "d/d_player_mdl.cpp"), Object(Matching, "d/d_player_guide_colors.cpp"), @@ -462,7 +462,7 @@ config.libs = [ Object(Matching, "d/d_tag_processor.cpp"), Object(NonMatching, "toBeSorted/time_area_mgr.cpp"), Object(NonMatching, "toBeSorted/nand_request_thread.cpp"), - Object(NonMatching, "toBeSorted/nand_result_tracker.cpp"), + Object(Matching, "toBeSorted/nand_result_tracker.cpp"), Object(Matching, "d/flag/flag_managers.cpp"), Object(NonMatching, "toBeSorted/bigboss_model_math_stuff.cpp"), Object(NonMatching, "toBeSorted/actor_event_flow_manager_related.cpp"), diff --git a/include/d/d_cs_base.h b/include/d/d_cs_base.h index 50786801..54eedd01 100644 --- a/include/d/d_cs_base.h +++ b/include/d/d_cs_base.h @@ -22,17 +22,17 @@ public: int update(); bool drawDirectly(); - void setField703(bool val) { - field_0x703 = val; + void setVisible(bool val) { + mVisible = val; } - void setField704(bool val) { - field_0x704 = val; + void setDrawDirectly(bool val) { + mDrawDirectly = val; } - bool getField704() const { - return field_0x704; + bool getDrawDirectly() const { + return mDrawDirectly; } - void setField705(bool val) { - field_0x705 = val; + void setCalibrationPointCenterEnabled(bool val) { + mCalibrationPointCenterEnabled = val; } dCursorHitCheck_c *getHitCheck() { @@ -60,9 +60,9 @@ private: /* 0x6F8 */ mVec2_c mCsVelocity; /* 0x700 */ mAng field_0x700; /* 0x702 */ u8 mAlpha; - /* 0x703 */ u8 field_0x703; - /* 0x704 */ bool field_0x704; - /* 0x705 */ u8 field_0x705; + /* 0x703 */ bool mVisible; + /* 0x704 */ bool mDrawDirectly; + /* 0x705 */ bool mCalibrationPointCenterEnabled; }; #endif diff --git a/include/d/d_dvd_drive_error.h b/include/d/d_dvd_drive_error.h index 9c950315..0cbd5870 100644 --- a/include/d/d_dvd_drive_error.h +++ b/include/d/d_dvd_drive_error.h @@ -16,6 +16,10 @@ public: return sInstance; } + s32 getStatus() const { + return mDvdDriveStatus; + } + private: static dDvdDriveError_c *sInstance; diff --git a/include/d/d_dvd_unk.h b/include/d/d_dvd_unk.h index 90cd7175..10aa6cb2 100644 --- a/include/d/d_dvd_unk.h +++ b/include/d/d_dvd_unk.h @@ -11,8 +11,22 @@ namespace dDvdUnk { class FontUnk { +private: + enum Error_e { + ERROR_NONE, + ERROR_DISK, + ERROR_PAD, + ERROR_NAND, + }; + + enum Flag_e { + FLAG_ERROR_REQUEST = 0x1, + FLAG_0x2 = 0x2, + FLAG_ERROR_STATE = 0x4, + }; + public: - FontUnk() : field_0x2D(0) {} + FontUnk() : mFlags(0) {} static FontUnk *GetInstance() { return sInstance; @@ -20,26 +34,35 @@ public: static void create(EGG::Heap *heap); void init(); + void execute(); + void drawNonDriveError(); + void drawDriveError(); + + void preExecute(); + + bool isAnyError() const; + void onError(); + void clearNandTrackerError(); void fn_800529B0(); - void fn_800529E0(); + void clearNandError(); void fn_80052A20(); - void fn_80052D00(bool); + void fn_80052CC0(); + void setNeedsPad(bool); + bool padErrorsAllowed(); void fn_80052D50(); - void fn_80052C90(); - void fn_80052C60(); - bool fn_80052D20(); + void fn_80052DD0(); - s32 getField_0x24() const { - return field_0x24; + s32 getNandError() const { + return mNandErrorCode; } - bool getField_0x28() const { - return field_0x28; + bool isDiskError() const { + return mIsDiskError; } - u8 getField_0x29() const { - return field_0x29; + bool isNandError() const { + return mIsNandError; } void setField_0x2C(u8 val) { @@ -53,16 +76,28 @@ public: private: static FontUnk *sInstance; + void onFlag(u8 mask) { + mFlags |= mask; + } + + void offFlag(u8 mask) { + mFlags &= ~mask; + } + + bool checkFlag(u8 mask) const { + return (mFlags & mask) != 0; + } + /* 0x00 */ nw4r::ut::ResFont mFont; - /* 0x1C */ s32 field_0x1C; - /* 0x20 */ s32 field_0x20; - /* 0x24 */ s32 field_0x24; - /* 0x28 */ bool field_0x28; - /* 0x29 */ u8 field_0x29; - /* 0x2A */ u8 field_0x2A; + /* 0x1C */ s32 mErrorType; + /* 0x20 */ s32 mDiskErrorCode; + /* 0x24 */ s32 mNandErrorCode; + /* 0x28 */ bool mIsDiskError; + /* 0x29 */ bool mIsNandError; + /* 0x2A */ bool mIsPadError; /* 0x2B */ u8 field_0x2B; /* 0x2C */ u8 field_0x2C; - /* 0x2D */ u8 field_0x2D; + /* 0x2D */ u8 mFlags; }; } // namespace dDvdUnk diff --git a/include/d/d_pad_manager.h b/include/d/d_pad_manager.h index a27fb945..7db0cfbc 100644 --- a/include/d/d_pad_manager.h +++ b/include/d/d_pad_manager.h @@ -20,9 +20,24 @@ public: static dPadManager_c *GetInstance() { return sInstance; } + + bool isCalibrationFinished() const { + return mCalibrationFinished; + } bool getField_0x25() const { return field_0x25; } + bool isError() const { + return mIsError; + } + + void setField_0x1F(bool b) { + field_0x1F = b; + } + bool getField_0x1F() const { + return field_0x1F; + } + void requestMplsCalibration(); @@ -91,13 +106,13 @@ private: /* 0x10 */ s32 mStep; /* 0x14 */ s32 mCalibrationTimer; /* 0x18 */ s32 mStepTimer; - /* 0x1C */ bool field_0x1C; + /* 0x1C */ bool mIsError; /* 0x1D */ bool field_0x1D; /* 0x1E */ bool field_0x1E; /* 0x1F */ bool field_0x1F; /* 0x20 */ bool field_0x20; /* 0x21 */ bool mCalibrationFinished; - /* 0x22 */ bool field_0x22; + /* 0x22 */ bool mSavedCsDrawDirectly; /* 0x23 */ bool field_0x23; /* 0x24 */ bool field_0x24; /* 0x25 */ bool field_0x25; diff --git a/include/d/d_video.h b/include/d/d_video.h new file mode 100644 index 00000000..a25e3ac2 --- /dev/null +++ b/include/d/d_video.h @@ -0,0 +1,10 @@ +#ifndef D_VIDEO_H +#define D_VIDEO_H + +namespace dVideo { + +void enableDimming(int); + +} // namespace dVideo + +#endif diff --git a/include/d/snd/d_snd_player_mgr.h b/include/d/snd/d_snd_player_mgr.h index 6bbf7fb0..5b83ee5d 100644 --- a/include/d/snd/d_snd_player_mgr.h +++ b/include/d/snd/d_snd_player_mgr.h @@ -44,6 +44,7 @@ public: void fn_8035E250(u16); bool fn_8035E2E0(); void fn_8035E310(); + void fn_8035E620(); void fn_8035E6E0(); u32 getFreeSize(); diff --git a/include/toBeSorted/nand_result_tracker.h b/include/toBeSorted/nand_result_tracker.h index 6177d858..c8112fb1 100644 --- a/include/toBeSorted/nand_result_tracker.h +++ b/include/toBeSorted/nand_result_tracker.h @@ -2,16 +2,56 @@ #define NAND_RESULT_TRACKER_H #include "egg/core/eggHeap.h" + #include "rvl/NAND.h" class NandResultTracker { + enum Mode_e { + Normal = 0, + Error = 1, + }; + public: + enum ErrorCategory_e { + // Everything is ok + ERR_CAT_NONE = 0, + // Error handled by us + ERR_CAT_FATAL = 3, + // Error handled by save manager + ERR_CAT_SAVE_MGR = 4, + }; static void create(EGG::Heap *heap); static NandResultTracker *GetInstance(); bool isFailure(NANDResult status); + void init(); + void draw(); + void execute(); + + s32 getErrorCategory() const { + return mErrorCategory; + } + + bool isError() const { + return mIsError; + } + private: - NandResultTracker *sInstance; + typedef void (NandResultTracker::*ModeFunc)(); + + void ModeRequestNormal(); + void ModeProc_Normal(); + void ModeRequestError(); + void ModeProc_Error(); + + void ModeRequest(Mode_e mode); + + static NandResultTracker *sInstance; + + /* 0x00 */ s32 mErrorCategory; + /* 0x04 */ Mode_e mMode; + /* 0x08 */ s32 mStep; + /* 0x0C */ bool mIsError; }; #endif diff --git a/src/d/d_cs_base.cpp b/src/d/d_cs_base.cpp index 30fc60f1..b16fddf4 100644 --- a/src/d/d_cs_base.cpp +++ b/src/d/d_cs_base.cpp @@ -24,9 +24,9 @@ dCsBase_c::dCsBase_c() mCsVelocity(0.0f, 0.0f), field_0x700(0), mAlpha(0), - field_0x703(0), - field_0x704(0), - field_0x705(0) { + mVisible(false), + mDrawDirectly(false), + mCalibrationPointCenterEnabled(false) { sInstance = this; } @@ -58,7 +58,7 @@ int dCsBase_c::create() { field_0x700 = 0; mAlpha = 0; - field_0x703 = 0; + mVisible = false; return SUCCEEDED; } @@ -74,7 +74,10 @@ int dCsBase_c::execute() { mVec2_c dpdPosScreen = dPad::ex_c::getInstance()->getDpdPosScreen(); u8 oldAlpha = mAlpha; bool bIsInBounds = false; - if (field_0x705 == 1) { + if (mCalibrationPointCenterEnabled == true) { + // If we're in the initial "cursor center" process at startup or when manually calibrating, + // we need to make sure to only take the raw pointer inputs into account (transforming them + // to screen coordinates of course) mVec2_c dpdPos = mPad::getDpdRawPos(); dpdPosScreen.x = dGfx_c::getWidth4x3F() * 0.5f * (1.f + dpdPos.x) + dGfx_c::getWidth4x3LeftF(); dpdPosScreen.y = dGfx_c::getCurrentScreenHeightF() * -0.5f * (1.f + dpdPos.y) + dGfx_c::getCurrentScreenTopF(); @@ -112,11 +115,11 @@ int dCsBase_c::execute() { } int dCsBase_c::draw() { - if (field_0x704 == 1) { + if (mDrawDirectly == true) { return SUCCEEDED; } - if (field_0x703 && dPadNav::isPointerVisible() && mAlpha) { + if (mVisible && dPadNav::isPointerVisible() && mAlpha != 0) { nw4r::lyt::Pane *p = mpCurrLyt->getLayout()->GetRootPane(); nw4r::math::VEC3 pos; pos.x = mCsPosition.x; @@ -140,11 +143,11 @@ int dCsBase_c::update() { } bool dCsBase_c::drawDirectly() { - if (field_0x704 != 1) { + if (mDrawDirectly != true) { return true; } - if (field_0x703 && dPadNav::isPointerVisible() && mAlpha) { + if (mVisible && dPadNav::isPointerVisible() && mAlpha != 0) { nw4r::lyt::Pane *p = mpCurrLyt->getLayout()->GetRootPane(); nw4r::math::VEC3 pos; pos.x = mCsPosition.x; diff --git a/src/d/d_cs_game.cpp b/src/d/d_cs_game.cpp index 8d2b2a91..7163184a 100644 --- a/src/d/d_cs_game.cpp +++ b/src/d/d_cs_game.cpp @@ -149,7 +149,7 @@ int dCsGame_c::create() { mCursor.setField0x9A0(0); mCursorIf.setCursorMask(2); dCsMgr_c::GetInstance()->registCursor(&mCursorIf); - dCsBase_c::GetInstance()->setField703(false); + dCsBase_c::GetInstance()->setVisible(false); return SUCCEEDED; } diff --git a/src/d/d_dvd_drive_error.cpp b/src/d/d_dvd_drive_error.cpp index 3cf15bb2..68dace4a 100644 --- a/src/d/d_dvd_drive_error.cpp +++ b/src/d/d_dvd_drive_error.cpp @@ -142,7 +142,7 @@ void dDvdDriveError_c::execute() { if (!mIsError) { if (mDvdDriveStatus != DVD_STATE_IDLE && mDvdDriveStatus != DVD_STATE_BUSY) { mIsError = true; - dDvdUnk::FontUnk::GetInstance()->fn_80052C60(); + dDvdUnk::FontUnk::GetInstance()->onError(); } } else if (mDvdDriveStatus == DVD_STATE_IDLE) { if (!dReset::Manage_c::GetInstance()->isSoftResetOrSafetyWait()) { diff --git a/src/d/d_dvd_unk.cpp b/src/d/d_dvd_unk.cpp index 5732bdc8..e0225142 100644 --- a/src/d/d_dvd_unk.cpp +++ b/src/d/d_dvd_unk.cpp @@ -1,23 +1,237 @@ #include "d/d_dvd_unk.h" +#include "common.h" +#include "d/d_cs_base.h" +#include "d/d_cursor_hit_check.h" #include "d/d_dvd_drive_error.h" +#include "d/d_gfx.h" +#include "d/d_hbm.h" +#include "d/d_pad.h" +#include "d/d_pad_manager.h" +#include "d/d_s_boot.h" +#include "d/d_video.h" +#include "d/lyt/d_lyt_system_window.h" +#include "d/snd/d_snd_player_mgr.h" #include "egg/core/eggHeap.h" +#include "egg/gfx/eggTextureBuffer.h" +#include "rvl/NAND/nand.h" #include "toBeSorted/nand_result_tracker.h" - -#include "d/dol_backup_error_font.inc" - namespace dDvdUnk { +#include "d/dol_backup_error_font.inc" + FontUnk *FontUnk::sInstance; -extern "C" void fn_80059D10(EGG::Heap *heap); + void FontUnk::create(EGG::Heap *heap) { sInstance = new (heap, 0x04) FontUnk(); sInstance->init(); dDvdDriveError_c::create(heap); NandResultTracker::create(heap); - fn_80059D10(heap); + dPadManager_c::create(heap); sInstance->field_0x2C = 0; } +void FontUnk::execute() { + if (dHbm::Manage_c::GetInstance()->getState() == dHbm::Manage_c::HBM_MANAGE_ACTIVE) { + return; + } + + dDvdDriveError_c *driveError = dDvdDriveError_c::GetInstance(); + dPadManager_c *padManager = dPadManager_c::GetInstance(); + NandResultTracker *nandTracker = NandResultTracker::GetInstance(); + + // Errors in decreasing importance + switch (mErrorType) { + case ERROR_DISK: driveError->execute(); break; + case ERROR_PAD: + driveError->execute(); + padManager->execute(); + break; + case ERROR_NAND: + driveError->execute(); + padManager->execute(); + nandTracker->execute(); + break; + default: + driveError->execute(); + nandTracker->execute(); + padManager->execute(); + break; + } + if (checkFlag(FLAG_ERROR_REQUEST)) { + offFlag(FLAG_ERROR_REQUEST); + EGG::TextureBuffer *buf = dGfx_c::GetInstance()->getTextureBuffer(); + if (buf != nullptr) { + buf->capture(0, 0, false, -1); + } + onFlag(FLAG_ERROR_STATE); + } +} + +void FontUnk::drawNonDriveError() { + switch (mErrorType) { + case ERROR_PAD: dPadManager_c::GetInstance()->draw(); break; + case ERROR_NAND: NandResultTracker::GetInstance()->draw(); break; + default: break; + } +} + +void FontUnk::drawDriveError() { + if (mIsDiskError == true) { + dDvdDriveError_c::GetInstance()->draw(); + } +} + +void FontUnk::init() { + mIsDiskError = false; + mIsNandError = false; + mIsPadError = false; + mFlags = 0; + mDiskErrorCode = 0; + mNandErrorCode = 0; + field_0x2B = false; + mErrorType = ERROR_NONE; + mFont.SetResource(DOL_BACKUP_FONT); +} + +void dDvdUnk::FontUnk::fn_800529B0() { + mIsPadError = false; + field_0x2B = false; + if (dCsBase_c::GetInstance() == nullptr) { + return; + } + dCsBase_c::GetInstance()->setVisible(false); + dCsBase_c::GetInstance()->setDrawDirectly(false); + dCsBase_c::GetInstance()->setCalibrationPointCenterEnabled(false); +} + +void dDvdUnk::FontUnk::clearNandError() { + clearNandTrackerError(); + mIsNandError = false; + mNandErrorCode = 0; +} + +void dDvdUnk::FontUnk::fn_80052A20() { + if (dScBoot_c::GetInstance() == nullptr && !dPadManager_c::GetInstance()->isCalibrationFinished()) { + dPad::ex_c::setCalibrateMpls(); + } + + if (checkFlag(FLAG_ERROR_STATE)) { + dGfx_c::GetInstance()->releaseTextureBuffer(); + dSndPlayerMgr_c::GetInstance()->fn_8035E6E0(); + } + + if (dLytSystemWindow_c::GetInstance() != nullptr && dLytSystemWindow_c::GetInstance()->fn_80152F80()) { + dLytSystemWindow_c::GetInstance()->fn_80152F10(); + } + + mIsDiskError = false; + mIsNandError = false; + mIsPadError = false; + mFlags = false; + mDiskErrorCode = 0; + mNandErrorCode = 0; + field_0x2B = false; + mErrorType = ERROR_NONE; + + dPadManager_c::GetInstance()->init(); + NandResultTracker::GetInstance()->init(); +} + +void FontUnk::preExecute() { + if (dHbm::Manage_c::GetInstance()->getState() != dHbm::Manage_c::HBM_MANAGE_ACTIVE) { + dDvdDriveError_c *drive = dDvdDriveError_c::GetInstance(); + NandResultTracker *nand = NandResultTracker::GetInstance(); + dPadManager_c *pad = dPadManager_c::GetInstance(); + bool prevError = isAnyError(); + mIsDiskError = drive->isError(); + mDiskErrorCode = drive->getStatus(); + mIsNandError = nand->isError(); + mNandErrorCode = nand->getErrorCategory(); + + if (padErrorsAllowed() == true) { + mIsPadError = pad->isError(); + } + + // Errors in decreasing importance + if (mIsDiskError == true) { + mErrorType = ERROR_DISK; + } else if (mIsPadError == true) { + mErrorType = ERROR_PAD; + } else if (mIsNandError == true) { + mErrorType = ERROR_NAND; + } else { + mErrorType = ERROR_NONE; + } + + if (prevError && !isAnyError()) { + dGfx_c::GetInstance()->releaseTextureBuffer(); + offFlag(FLAG_ERROR_STATE); + dSndPlayerMgr_c::GetInstance()->fn_8035E6E0(); + } + + if (field_0x2C == true && !prevError && isAnyError()) { + dSndPlayerMgr_c::GetInstance()->fn_8035E620(); + } + } +} + +bool FontUnk::isAnyError() const { + return mIsDiskError | mIsNandError | mIsPadError; +} + +void FontUnk::onError() { + if (checkFlag(FLAG_ERROR_STATE)) { + return; + } + onFlag(FLAG_ERROR_REQUEST); + dVideo::enableDimming(1); +} + +void FontUnk::clearNandTrackerError() { + NandResultTracker::GetInstance()->isFailure(NAND_RESULT_OK); +} + +void FontUnk::fn_80052CC0() { + setNeedsPad(true); + field_0x2B = true; +} + +void FontUnk::setNeedsPad(bool b) { + if (dPadManager_c::GetInstance() != nullptr) { + dPadManager_c::GetInstance()->setField_0x1F(b); + } +} + +bool FontUnk::padErrorsAllowed() { + if (field_0x2B != true) { + return false; + } + + if (dPadManager_c::GetInstance() != nullptr) { + return dPadManager_c::GetInstance()->getField_0x1F(); + } + + return false; +} + +void FontUnk::fn_80052D50() { + if (dPadManager_c::GetInstance()->isError() == true) { + if (checkFlag(FLAG_ERROR_STATE)) { + dGfx_c::GetInstance()->releaseTextureBuffer(); + mFlags = 0; + dSndPlayerMgr_c::GetInstance()->fn_8035E6E0(); + } + dPadManager_c::GetInstance()->init(); + } + setNeedsPad(false); + dVideo::enableDimming(0); +} + +void FontUnk::fn_80052DD0() { + setNeedsPad(true); + dVideo::enableDimming(1); +} + } // namespace dDvdUnk diff --git a/src/d/d_pad_manager.cpp b/src/d/d_pad_manager.cpp index 255fa7a1..7c63d0ba 100644 --- a/src/d/d_pad_manager.cpp +++ b/src/d/d_pad_manager.cpp @@ -42,7 +42,7 @@ bool dPadManager_c::draw() { } void dPadManager_c::init() { - field_0x22 = false; + mSavedCsDrawDirectly = false; field_0x23 = false; ModeRequestNormal(); field_0x1E = false; @@ -94,10 +94,10 @@ void dPadManager_c::executeProc() { void dPadManager_c::ModeRequestNormal() { ModeRequest(Normal); - field_0x1C = false; + mIsError = false; field_0x1D = false; if (dCsBase_c::GetInstance() != nullptr) { - dCsBase_c::GetInstance()->setField704(field_0x22); + dCsBase_c::GetInstance()->setDrawDirectly(mSavedCsDrawDirectly); if (field_0x23) { dPadNav::setCursorStickVisible(); } else { @@ -110,8 +110,8 @@ void dPadManager_c::ModeProc_Normal() { PadStatus_e status = getPadStatus(); if (status == PAD_NORMAL || status == PAD_CONFIGURING_MPLS) { if (isOutOfBattery() == true) { - field_0x1C = true; - dDvdUnk::FontUnk::GetInstance()->fn_80052C60(); + mIsError = true; + dDvdUnk::FontUnk::GetInstance()->onError(); ModeRequestLowBattery(); } return; @@ -119,15 +119,15 @@ void dPadManager_c::ModeProc_Normal() { // Some sort of error occured - field_0x1C = true; + mIsError = true; mPadStatus = status; dCsBase_c *cs = dCsBase_c::GetInstance(); - field_0x22 = cs->getField704(); - cs->setField704(false); + mSavedCsDrawDirectly = cs->getDrawDirectly(); + cs->setDrawDirectly(false); cs->setCursorStickVisible(false); field_0x23 = dPadNav::isCursorStickVisible(); dPadNav::setCursorStickInvisible(); - dDvdUnk::FontUnk::GetInstance()->fn_80052C60(); + dDvdUnk::FontUnk::GetInstance()->onError(); if (status == PAD_DISCONNECTED) { ModeRequestReconnectPad(); @@ -468,9 +468,9 @@ void dPadManager_c::ModeProc_PointCenter() { case 0: // "Point the Wii Remote at the screen, and move to the center." if (mpWindow->setProperties("SYS_MPLS_02", false, nullptr) == true) { - dCsBase_c::GetInstance()->setField703(true); - dCsBase_c::GetInstance()->setField704(true); - dCsBase_c::GetInstance()->setField705(true); + dCsBase_c::GetInstance()->setVisible(true); + dCsBase_c::GetInstance()->setDrawDirectly(true); + dCsBase_c::GetInstance()->setCalibrationPointCenterEnabled(true); mStep = 1; } break; @@ -532,9 +532,9 @@ void dPadManager_c::ModeProc_PointCenter() { if (mpWindow->getField_0xDF7() == true) { field_0x1E = true; field_0x25 = false; - dCsBase_c::GetInstance()->setField703(false); - dCsBase_c::GetInstance()->setField704(false); - dCsBase_c::GetInstance()->setField705(false); + dCsBase_c::GetInstance()->setVisible(false); + dCsBase_c::GetInstance()->setDrawDirectly(false); + dCsBase_c::GetInstance()->setCalibrationPointCenterEnabled(false); ModeRequestNormal(); return; } @@ -547,9 +547,9 @@ void dPadManager_c::ModeProc_PointCenter() { case 11: if (mpWindow->getField_0xDF7() == true) { ModeRequestNext(status); - dCsBase_c::GetInstance()->setField703(false); - dCsBase_c::GetInstance()->setField704(false); - dCsBase_c::GetInstance()->setField705(false); + dCsBase_c::GetInstance()->setVisible(false); + dCsBase_c::GetInstance()->setDrawDirectly(false); + dCsBase_c::GetInstance()->setCalibrationPointCenterEnabled(false); return; } break; @@ -736,7 +736,7 @@ void dPadManager_c::ModeRequest(Mode_e mode) { dPadManager_c::PadStatus_e dPadManager_c::getPadStatus() { PadStatus_e ret = PAD_NORMAL; - if (dDvdUnk::FontUnk::GetInstance()->fn_80052D20() != true) { + if (dDvdUnk::FontUnk::GetInstance()->padErrorsAllowed() != true) { return PAD_NORMAL; } @@ -787,7 +787,7 @@ s32 dPadManager_c::get1Point5SecondsInTicks() { } bool dPadManager_c::isOutOfBattery() { - if (dDvdUnk::FontUnk::GetInstance()->fn_80052D20() != true) { + if (dDvdUnk::FontUnk::GetInstance()->padErrorsAllowed() != true) { return false; } diff --git a/src/d/d_reset.cpp b/src/d/d_reset.cpp index 4f2910f2..15331958 100644 --- a/src/d/d_reset.cpp +++ b/src/d/d_reset.cpp @@ -26,6 +26,7 @@ #include "rvl/OS/OSThread.h" #include "rvl/VI/vi.h" #include "toBeSorted/file_manager.h" +#include "toBeSorted/nand_result_tracker.h" #include "toBeSorted/save_manager.h" #include "rvl/OS.h" @@ -339,12 +340,12 @@ void Manage_c::ModeProc_SoftReset() { dDvdUnk::FontUnk::GetInstance()->fn_800529B0(); dSndPlayerMgr_c::GetInstance()->fn_8035E6E0(); - if (dDvdUnk::FontUnk::GetInstance()->getField_0x29() || - dDvdUnk::FontUnk::GetInstance()->getField_0x24() || + if (dDvdUnk::FontUnk::GetInstance()->isNandError() || + dDvdUnk::FontUnk::GetInstance()->getNandError() != NandResultTracker::ERR_CAT_NONE || SaveMgr::GetInstance()->getCheckForFreeSpaceResult()) { dScBoot_c::GetInstance()->setField_0x5E3(0); dScBoot_c::GetInstance()->setField_0x5E2(1); - dDvdUnk::FontUnk::GetInstance()->fn_800529E0(); + dDvdUnk::FontUnk::GetInstance()->clearNandError(); } dDvdUnk::FontUnk::GetInstance()->fn_80052A20(); } @@ -356,9 +357,9 @@ void Manage_c::ModeProc_SoftReset() { dDvdUnk::FontUnk::GetInstance()->fn_800529B0(); dDvdUnk::FontUnk::GetInstance()->fn_80052A20(); - dCsBase_c::GetInstance()->setField703(false); - dCsBase_c::GetInstance()->setField704(false); - dCsBase_c::GetInstance()->setField705(false); + dCsBase_c::GetInstance()->setVisible(false); + dCsBase_c::GetInstance()->setDrawDirectly(false); + dCsBase_c::GetInstance()->setCalibrationPointCenterEnabled(false); field_0x66 = false; } @@ -564,7 +565,7 @@ bool Manage_c::IsFatalError() { } bool Manage_c::IsDiskError() { - return dDvdUnk::FontUnk::GetInstance()->getField_0x28(); + return dDvdUnk::FontUnk::GetInstance()->isDiskError(); } bool Manage_c::FadeOutCalc() { @@ -581,9 +582,9 @@ void Manage_c::FadeOutRequest(bool fade) { dDvdUnk::FontUnk::GetInstance()->fn_800529B0(); dDvdUnk::FontUnk::GetInstance()->fn_80052A20(); - dCsBase_c::GetInstance()->setField703(false); - dCsBase_c::GetInstance()->setField704(false); - dCsBase_c::GetInstance()->setField705(false); + dCsBase_c::GetInstance()->setVisible(false); + dCsBase_c::GetInstance()->setDrawDirectly(false); + dCsBase_c::GetInstance()->setCalibrationPointCenterEnabled(false); field_0x66 = 0; diff --git a/src/d/d_sc_title.cpp b/src/d/d_sc_title.cpp index 73e578d7..31f2b0fc 100644 --- a/src/d/d_sc_title.cpp +++ b/src/d/d_sc_title.cpp @@ -42,9 +42,6 @@ static const char *sLayoutArcsToLoad[] = { STATE_VIRTUAL_DEFINE(dScTitle_c, Stanby); STATE_VIRTUAL_DEFINE(dScTitle_c, Action); -extern "C" void *lbl_805750D8; -extern "C" void fn_80052D50(void *); - dScTitle_c::dScTitle_c() { sInstance = this; mRelCtrl.set(sModulesToLoad, ARRAY_LENGTH(sModulesToLoad)); diff --git a/src/toBeSorted/nand_result_tracker.cpp b/src/toBeSorted/nand_result_tracker.cpp new file mode 100644 index 00000000..bd877255 --- /dev/null +++ b/src/toBeSorted/nand_result_tracker.cpp @@ -0,0 +1,118 @@ +#include "toBeSorted/nand_result_tracker.h" + +#include "common.h" +#include "d/d_dvd_unk.h" +#include "d/d_gfx.h" +#include "d/lyt/d_lyt_system_window.h" +#include "egg/core/eggHeap.h" + +NandResultTracker *NandResultTracker::sInstance; + +void NandResultTracker::create(EGG::Heap *heap) { + sInstance = new (heap) NandResultTracker(); + sInstance->init(); +} + +NandResultTracker *NandResultTracker::GetInstance() { + return sInstance; +} + +bool NandResultTracker::isFailure(NANDResult status) { + bool ret = true; + + switch (status) { + case NAND_RESULT_OK: + case NAND_RESULT_EXISTS: + case NAND_RESULT_NOEXISTS: { + mErrorCategory = ERR_CAT_NONE; + ret = false; + break; + } + case NAND_RESULT_ECC_CRIT: + case NAND_RESULT_AUTHENTICATION: { + mErrorCategory = ERR_CAT_SAVE_MGR; + break; + } + default: { + mErrorCategory = ERR_CAT_FATAL; + break; + } + } + + return ret; +} + +void NandResultTracker::draw() { + dGfx_c::doDrawCapTexture(); +} + +void NandResultTracker::execute() { + static const ModeFunc procs[] = { + &NandResultTracker::ModeProc_Normal, + &NandResultTracker::ModeProc_Error, + }; + ModeFunc f = procs[mMode]; + if (f != nullptr) { + (this->*f)(); + } +} + +void NandResultTracker::init() { + mErrorCategory = ERR_CAT_NONE; + mIsError = false; + ModeRequestNormal(); +} + +void NandResultTracker::ModeRequestNormal() { + ModeRequest(Normal); +} + +void NandResultTracker::ModeProc_Normal() { + if (mErrorCategory != ERR_CAT_NONE && mErrorCategory != ERR_CAT_SAVE_MGR) { + mIsError = true; + dDvdUnk::FontUnk::GetInstance()->onError(); + } else { + mIsError = false; + } + + if (mErrorCategory != ERR_CAT_NONE && mErrorCategory != ERR_CAT_SAVE_MGR) { + ModeRequestError(); + } +} + +void NandResultTracker::ModeRequestError() { + ModeRequest(Error); +} + +void NandResultTracker::ModeProc_Error() { + // Note: Only index 3 (SYS_NAND_12) is reachable apparently +#pragma push +#pragma readonly_strings on + static const char *sMessages[] = { + // "The Wii system memory has been damaged. Refer to the Wii Operations Manual for details." + "SYS_NAND_08", + "SYS_NAND_08", + // "Could not access Wii system memory. Refer to the Wii Operations Manual for details." + "SYS_NAND_11", + // "An error occurred while accessing Wii system memory. Refer to the Wii Operations Manual for details." + "SYS_NAND_12", + "SYS_NAND_12", + }; +#pragma pop + dLytSystemWindow_c *window = dLytSystemWindow_c::GetInstance(); + s32 error = GetInstance()->getErrorCategory(); + + switch (mStep) { + case 0: + if (window->setProperties(sMessages[error], false, nullptr) == true) { + mStep = 1; + } + break; + default: break; + } +} + +void NandResultTracker::ModeRequest(Mode_e mode) { + mMode = mode; + mStep = 0; +} diff --git a/src/toBeSorted/save_manager.cpp b/src/toBeSorted/save_manager.cpp index cb023b03..221d129a 100644 --- a/src/toBeSorted/save_manager.cpp +++ b/src/toBeSorted/save_manager.cpp @@ -81,7 +81,7 @@ void SaveMgr::init() { mDelayTimer = 0; FileManager::GetInstance()->setField0xA840(1); if (dCsBase_c::GetInstance() != nullptr) { - dCsBase_c::GetInstance()->setField704(false); + dCsBase_c::GetInstance()->setDrawDirectly(false); } if (mpWindow != nullptr) { mpWindow->reset(); @@ -175,7 +175,7 @@ bool SaveMgr::saveAfterCredits() { return false; } field_0x836 = 0; - dDvdUnk::FontUnk::GetInstance()->fn_80052D00(true); + dDvdUnk::FontUnk::GetInstance()->setNeedsPad(true); FileManager::GetInstance()->setFileTimes(); FileManager::GetInstance()->saveAfterCredits(); initializeSave(); @@ -218,7 +218,7 @@ void SaveMgr::initializeCheckForSave() { beginState(STATE_CHECK_FOR_SAVE); mCheckIsFileRequest.checkIsFile(sSaveFileName); field_0x839 = 0; - dDvdUnk::FontUnk::GetInstance()->fn_80052D00(false); + dDvdUnk::FontUnk::GetInstance()->setNeedsPad(false); } void SaveMgr::executeCheckForSave() { @@ -290,7 +290,7 @@ void SaveMgr::executeCheckForSave() { void SaveMgr::initializeCheckForFreeSpace() { beginState(STATE_CHECK_FOR_FREE_SPACE); - dDvdUnk::FontUnk::GetInstance()->fn_80052D00(false); + dDvdUnk::FontUnk::GetInstance()->setNeedsPad(false); mCheckRequest.check(7, 3); mCheckForFreeSpaceResult = 0; } @@ -327,7 +327,7 @@ void SaveMgr::initializeCreateFiles() { beginState(STATE_CREATE_FILES); field_0x838 = 1; FileManager::GetInstance()->setField0xA84D(1); - dDvdUnk::FontUnk::GetInstance()->fn_80052D00(false); + dDvdUnk::FontUnk::GetInstance()->setNeedsPad(false); } void SaveMgr::executeCreateFiles() { @@ -510,7 +510,7 @@ void SaveMgr::executeSaveBanner() { } if (b == 1) { - if (!dDvdUnk::FontUnk::GetInstance()->getField_0x28()) { + if (!dDvdUnk::FontUnk::GetInstance()->isDiskError()) { dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_SAVE_FINISH); } mDelayTimer = 0; @@ -532,8 +532,8 @@ void SaveMgr::executeSaveBanner() { } case 5: { if (mpWindow->getWillFinishOut() == 1) { - if (fontUnk->getField_0x29() == 1) { - fontUnk->fn_80052C90(); + if (fontUnk->isNandError() == 1) { + fontUnk->clearNandTrackerError(); } field_0x838 = 0; field_0x83A = 0; @@ -721,7 +721,7 @@ void SaveMgr::executeLoadSave() { void SaveMgr::initializeWriteSave() { beginState(STATE_WRITE); mDelayTimer = 0; - dDvdUnk::FontUnk::GetInstance()->fn_80052D00(false); + dDvdUnk::FontUnk::GetInstance()->setNeedsPad(false); FileManager::GetInstance()->setField0xA84D(1); field_0x83D = 1; } @@ -1110,7 +1110,7 @@ void SaveMgr::executeClearSelectedFile() { void SaveMgr::initializeSave() { beginState(STATE_SAVE); FileManager::GetInstance()->setField0xA840(0); - dDvdUnk::FontUnk::GetInstance()->fn_80052D00(false); + dDvdUnk::FontUnk::GetInstance()->setNeedsPad(false); FileManager::GetInstance()->setField_0xA843(1); } @@ -1218,7 +1218,7 @@ void SaveMgr::initializeError() { FileManager::GetInstance()->setField0xA84D(0); field_0x83D = 0; beginState(STATE_ERROR); - dDvdUnk::FontUnk::GetInstance()->fn_80052D00(true); + dDvdUnk::FontUnk::GetInstance()->setNeedsPad(true); field_0x83F = 0; } @@ -1227,7 +1227,7 @@ void SaveMgr::executeError() { FileManager *fileManager = FileManager::GetInstance(); switch (mStep) { case 0: { - if (dDvdUnk::FontUnk::GetInstance()->getField_0x24() == 4) { + if (dDvdUnk::FontUnk::GetInstance()->getNandError() == NandResultTracker::ERR_CAT_SAVE_MGR) { if (field_0x837 == true) { // "The save data is corrupted. Save data will be restored." if (systemWindow->setProperties("SYS_INIT_05", false, nullptr) == true) { @@ -1239,7 +1239,7 @@ void SaveMgr::executeError() { if (systemWindow->setProperties("SYS_INIT_04", false, nullptr) == true) { systemWindow->showMaybe(4); mStep = 1; - dCsBase_c::GetInstance()->setField704(true); + dCsBase_c::GetInstance()->setDrawDirectly(true); } } else { // "The file cannot be used because nthe data is corrupted. All data saved up to this point will be @@ -1247,7 +1247,7 @@ void SaveMgr::executeError() { if (systemWindow->setProperties("SYS_NAND_07", false, nullptr) == true) { systemWindow->showMaybe(4); mStep = 1; - dCsBase_c::GetInstance()->setField704(true); + dCsBase_c::GetInstance()->setDrawDirectly(true); } } } @@ -1274,7 +1274,7 @@ void SaveMgr::executeError() { mStep = 3; } else { initializeDeleteAllData(); - dCsBase_c::GetInstance()->setField704(false); + dCsBase_c::GetInstance()->setDrawDirectly(false); } } break; @@ -1336,11 +1336,11 @@ void SaveMgr::executeError() { } case 10: { if (systemWindow->fn_80152F70() == true) { - dDvdUnk::FontUnk::GetInstance()->fn_80052C90(); + dDvdUnk::FontUnk::GetInstance()->clearNandTrackerError(); if (field_0x837 != true) { fileManager->setField0xA84C(1); } - dCsBase_c::GetInstance()->setField704(false); + dCsBase_c::GetInstance()->setDrawDirectly(false); endState(); } break; @@ -1372,7 +1372,7 @@ void SaveMgr::executeError() { void SaveMgr::initializeNandError() { FileManager::GetInstance()->setField0xA84D(0); field_0x83D = 0; - dDvdUnk::FontUnk::GetInstance()->fn_80052D00(true); + dDvdUnk::FontUnk::GetInstance()->setNeedsPad(true); beginState(STATE_NAND_ERROR); } @@ -1424,7 +1424,7 @@ void SaveMgr::executeNandError() { // "Do you want to go to the Wii console's Data Management screen to edit data? [1]Yes[2]No" if (systemWindow->setProperties("SYS_NAND_04", false, nullptr) == true) { systemWindow->showMaybe(4); - dCsBase_c::GetInstance()->setField704(true); + dCsBase_c::GetInstance()->setDrawDirectly(true); mStep = 5; } break; @@ -1455,7 +1455,7 @@ void SaveMgr::executeNandError() { if (systemWindow->getField_0xDE0() == 0) { mStep = 9; } else { - dCsBase_c::GetInstance()->setField704(false); + dCsBase_c::GetInstance()->setDrawDirectly(false); dReset::Manage_c::GetInstance()->SetInteriorReturnDataManager(); endState(); field_0x836 = 0; @@ -1501,8 +1501,8 @@ void SaveMgr::executeNandError() { } case 13: { if (systemWindow->fn_80152F70() == 1) { - dCsBase_c::GetInstance()->setField704(false); - dDvdUnk::FontUnk::GetInstance()->fn_80052C90(); + dCsBase_c::GetInstance()->setDrawDirectly(false); + dDvdUnk::FontUnk::GetInstance()->clearNandTrackerError(); fileManager->setField0xA84C(1); endState(); } @@ -1522,7 +1522,7 @@ void SaveMgr::endState() { field_0x836 = 1; FileManager::GetInstance()->setField0xA840(1); field_0x83D = 0; - dDvdUnk::FontUnk::GetInstance()->fn_80052D00(true); + dDvdUnk::FontUnk::GetInstance()->setNeedsPad(true); field_0x83B = 0; field_0x83C = 0; mCurrentState = STATE_MAX;