diff options
| author | robojumper <robojumper@gmail.com> | 2025-08-01 11:26:25 +0200 |
|---|---|---|
| committer | robojumper <robojumper@gmail.com> | 2025-08-02 09:20:02 +0200 |
| commit | d153cbc0ede10dd24a32e89faf81c8fb839ee23a (patch) | |
| tree | 5a71a813845573051b1cafe0f91397f92261925d /src/d | |
| parent | 415873f7b34faa42ead43e620c591842dadee68e (diff) | |
Other cleanup
Diffstat (limited to 'src/d')
| -rw-r--r-- | src/d/d_cs_base.cpp | 21 | ||||
| -rw-r--r-- | src/d/d_cs_game.cpp | 2 | ||||
| -rw-r--r-- | src/d/d_dvd_drive_error.cpp | 2 | ||||
| -rw-r--r-- | src/d/d_dvd_unk.cpp | 222 | ||||
| -rw-r--r-- | src/d/d_pad_manager.cpp | 40 | ||||
| -rw-r--r-- | src/d/d_reset.cpp | 21 | ||||
| -rw-r--r-- | src/d/d_sc_title.cpp | 3 |
7 files changed, 263 insertions, 48 deletions
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)); |
