summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-08-01 11:26:25 +0200
committerrobojumper <robojumper@gmail.com>2025-08-02 09:20:02 +0200
commitd153cbc0ede10dd24a32e89faf81c8fb839ee23a (patch)
tree5a71a813845573051b1cafe0f91397f92261925d
parent415873f7b34faa42ead43e620c591842dadee68e (diff)
Other cleanup
-rw-r--r--config/SOUE01/symbols.txt45
-rw-r--r--configure.py6
-rw-r--r--include/d/d_cs_base.h22
-rw-r--r--include/d/d_dvd_drive_error.h4
-rw-r--r--include/d/d_dvd_unk.h73
-rw-r--r--include/d/d_pad_manager.h19
-rw-r--r--include/d/d_video.h10
-rw-r--r--include/d/snd/d_snd_player_mgr.h1
-rw-r--r--include/toBeSorted/nand_result_tracker.h42
-rw-r--r--src/d/d_cs_base.cpp21
-rw-r--r--src/d/d_cs_game.cpp2
-rw-r--r--src/d/d_dvd_drive_error.cpp2
-rw-r--r--src/d/d_dvd_unk.cpp222
-rw-r--r--src/d/d_pad_manager.cpp40
-rw-r--r--src/d/d_reset.cpp21
-rw-r--r--src/d/d_sc_title.cpp3
-rw-r--r--src/toBeSorted/nand_result_tracker.cpp118
-rw-r--r--src/toBeSorted/save_manager.cpp46
18 files changed, 568 insertions, 129 deletions
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"
+namespace dDvdUnk {
#include "d/dol_backup_error_font.inc"
-namespace dDvdUnk {
-
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 <pointer icon> 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;