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/d_dvd_unk.cpp | |
| parent | 415873f7b34faa42ead43e620c591842dadee68e (diff) | |
Other cleanup
Diffstat (limited to 'src/d/d_dvd_unk.cpp')
| -rw-r--r-- | src/d/d_dvd_unk.cpp | 222 |
1 files changed, 218 insertions, 4 deletions
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 |
