mirror of
https://github.com/zeldaret/ss
synced 2026-09-03 01:54:18 -04:00
Merge pull request #227 from robojumper/d_pad_manager
More game bootup / error related things
This commit is contained in:
+201
-33
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "common.h"
|
||||
#include "d/d_base.h"
|
||||
#include "d/d_cs_base.h"
|
||||
#include "d/d_d2d.h"
|
||||
#include "d/d_dvd_unk.h"
|
||||
#include "d/d_dylink.h"
|
||||
@@ -10,7 +11,11 @@
|
||||
#include "d/d_hbm.h"
|
||||
#include "d/d_heap.h"
|
||||
#include "d/d_message.h"
|
||||
#include "d/d_pad.h"
|
||||
#include "d/d_pad_manager.h"
|
||||
#include "d/d_pad_nav.h"
|
||||
#include "d/d_reset.h"
|
||||
#include "d/d_sc_title.h"
|
||||
#include "d/d_scene.h"
|
||||
#include "d/d_sys.h"
|
||||
#include "d/lyt/d_lyt_battery.h"
|
||||
@@ -32,6 +37,7 @@
|
||||
#include "toBeSorted/d_emitter.h"
|
||||
#include "toBeSorted/d_particle.h"
|
||||
#include "toBeSorted/fi_context.h"
|
||||
#include "toBeSorted/file_manager.h"
|
||||
#include "toBeSorted/save_manager.h"
|
||||
#include "toBeSorted/save_related.h"
|
||||
#include "toBeSorted/special_item_drop_mgr.h"
|
||||
@@ -243,7 +249,7 @@ sFPhaseBase::sFPhaseState dScBoot_c::cb6() {
|
||||
}
|
||||
|
||||
dDvdUnk::FontUnk::GetInstance()->setField_0x2C(1);
|
||||
field_0x5DF = 1;
|
||||
mObjectDataLoaded = true;
|
||||
return sFPhaseBase::PHASE_NEXT;
|
||||
}
|
||||
|
||||
@@ -293,13 +299,13 @@ sFPhaseBase::sFPhaseState dScBoot_c::cb7() {
|
||||
sFPhaseBase::sFPhaseState dScBoot_c::cb8() {
|
||||
return sFPhaseBase::PHASE_NEXT;
|
||||
}
|
||||
extern "C" void fn_80059E90();
|
||||
|
||||
sFPhaseBase::sFPhaseState dScBoot_c::cb9() {
|
||||
dBase_c::createRoot(fProfile::MESSAGE, 0, dBase_c::OTHER);
|
||||
dBase_c::createRoot(fProfile::C_BASE, 0, dBase_c::OTHER);
|
||||
dLytSystemWindow_c::create();
|
||||
SaveMgr::GetInstance()->createSaveMsgWindow();
|
||||
fn_80059E90();
|
||||
dPadManager_c::buildWindow();
|
||||
dLytBattery_c::create();
|
||||
return sFPhaseBase::PHASE_NEXT;
|
||||
}
|
||||
@@ -400,12 +406,12 @@ void dScBoot_c::strap_c::init() {
|
||||
}
|
||||
|
||||
dScBoot_c::dScBoot_c() : mStateMgr(*this, sStateID::null), mPhases(this, sCallbacks), mpDvdCallback(nullptr) {
|
||||
field_0x5DF = 0;
|
||||
mObjectDataLoaded = false;
|
||||
sInstance = this;
|
||||
field_0x5E1 = 0;
|
||||
field_0x5E2 = 0;
|
||||
field_0x5E3 = 0;
|
||||
field_0x5E4 = 0;
|
||||
mStrapScreenVisible = false;
|
||||
field_0x5E2 = false;
|
||||
field_0x5E3 = false;
|
||||
field_0x5E4 = false;
|
||||
}
|
||||
|
||||
dScBoot_c::~dScBoot_c() {
|
||||
@@ -437,7 +443,7 @@ int dScBoot_c::doDelete() {
|
||||
dBase_c::createRoot(fProfile::LAST, 0, 0);
|
||||
d3d::createLightTextures();
|
||||
SpecialItemDropMgr::create();
|
||||
dHbm::Manage_c::GetInstance()->offFlags(8);
|
||||
dHbm::Manage_c::GetInstance()->offFlags(0x8);
|
||||
dGfx_c::GetInstance()->setDrawCallback(nullptr);
|
||||
dReset::Manage_c::GetInstance()->BootComplete(true);
|
||||
return SUCCEEDED;
|
||||
@@ -447,15 +453,15 @@ int dScBoot_c::execute() {
|
||||
mFader.calc();
|
||||
mStateMgr.executeState();
|
||||
sFPhaseBase::sFPhaseState state = executeLoadPhase();
|
||||
if (field_0x5DE == 0 && state == sFPhaseBase::PHASE_ALL_DONE) {
|
||||
field_0x5DE = 1;
|
||||
if (mAllDataLoaded == false && state == sFPhaseBase::PHASE_ALL_DONE) {
|
||||
mAllDataLoaded = true;
|
||||
}
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dScBoot_c::draw() {
|
||||
if (field_0x5E1 == 1) {
|
||||
if (mStrapScreenVisible == true) {
|
||||
mStrapScreen.draw();
|
||||
}
|
||||
|
||||
@@ -463,16 +469,16 @@ int dScBoot_c::draw() {
|
||||
}
|
||||
|
||||
void dScBoot_c::deleteReady() {
|
||||
// TODO
|
||||
// no-op
|
||||
}
|
||||
|
||||
void dScBoot_c::initializeState_Init() {
|
||||
mProgressStage = 0;
|
||||
field_0x5D8 = 0;
|
||||
field_0x5DC = 0;
|
||||
field_0x5DD = 0;
|
||||
field_0x5DE = 0;
|
||||
field_0x5E0 = 0;
|
||||
mStrapScreenSeen = false;
|
||||
mCalibrationDone = false;
|
||||
mAllDataLoaded = false;
|
||||
field_0x5E0 = false;
|
||||
}
|
||||
|
||||
void dScBoot_c::executeState_Init() {
|
||||
@@ -483,7 +489,7 @@ void dScBoot_c::finalizeState_Init() {}
|
||||
|
||||
void dScBoot_c::initializeState_Strap() {
|
||||
mProgressStage = 0;
|
||||
field_0x5E1 = 1;
|
||||
mStrapScreenVisible = true;
|
||||
mFader.fadeIn();
|
||||
mFader.resetFrames();
|
||||
}
|
||||
@@ -504,7 +510,7 @@ void dScBoot_c::executeState_Strap() {
|
||||
}
|
||||
|
||||
if (ok) {
|
||||
field_0x5DC = 1;
|
||||
mStrapScreenSeen = true;
|
||||
if (mFader.fadeOut() == true) {
|
||||
mProgressStage = 2;
|
||||
}
|
||||
@@ -515,7 +521,7 @@ void dScBoot_c::executeState_Strap() {
|
||||
if (!checkDone() && mFader.isNotStatus(mFaderBase_c::FADING_OUT)) {
|
||||
if (mFader.fadeIn() == true) {
|
||||
mProgressStage = 3;
|
||||
field_0x5E1 = 0;
|
||||
mStrapScreenVisible = false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -527,9 +533,9 @@ void dScBoot_c::executeState_Strap() {
|
||||
case 4:
|
||||
mFader.setStatus(mFaderBase_c::FADED_OUT);
|
||||
if (mFader.fadeIn() == true) {
|
||||
field_0x5E4 = 1;
|
||||
if (field_0x5DC != 0) {
|
||||
field_0x5E1 = 0;
|
||||
field_0x5E4 = true;
|
||||
if (mStrapScreenSeen != false) {
|
||||
mStrapScreenVisible = false;
|
||||
mStateMgr.changeState(StateID_Connect);
|
||||
} else {
|
||||
mProgressStage = 0;
|
||||
@@ -543,8 +549,7 @@ void dScBoot_c::executeState_Strap() {
|
||||
}
|
||||
|
||||
void dScBoot_c::finalizeState_Strap() {
|
||||
// TODO
|
||||
dGfx_c::GetInstance()->setField0x09(1);
|
||||
dGfx_c::GetInstance()->setLetterboxEnabled(1);
|
||||
}
|
||||
|
||||
void dScBoot_c::initializeState_Connect() {
|
||||
@@ -553,7 +558,91 @@ void dScBoot_c::initializeState_Connect() {
|
||||
}
|
||||
|
||||
void dScBoot_c::executeState_Connect() {
|
||||
// TODO
|
||||
switch (mProgressStage) {
|
||||
case 0:
|
||||
if (field_0x5E3 == true) {
|
||||
field_0x5E3 = false;
|
||||
mProgressStage = 4;
|
||||
} else if (mObjectDataLoaded == true) {
|
||||
mProgressStage = 1;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (field_0x5E3 == true) {
|
||||
field_0x5E3 = false;
|
||||
mProgressStage = 4;
|
||||
} else {
|
||||
dHbm::Manage_c::GetInstance()->offFlags(0x8);
|
||||
dDvdUnk::FontUnk::GetInstance()->fn_80052CC0();
|
||||
mProgressStage = 2;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (field_0x5E3 == true) {
|
||||
field_0x5E3 = false;
|
||||
mProgressStage = 5;
|
||||
} else {
|
||||
mProgressStage = 3;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (field_0x5E3 == true) {
|
||||
field_0x5E3 = false;
|
||||
mProgressStage = 5;
|
||||
} else if (dPadManager_c::GetInstance()->isCalibrationFinished() ||
|
||||
dPadManager_c::GetInstance()->isCalibrationSkipped()) {
|
||||
mCalibrationDone = true;
|
||||
mStateMgr.changeState(StateID_Save);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
mFader.setStatus(mFaderBase_c::FADED_OUT);
|
||||
if (mFader.fadeIn() == true) {
|
||||
field_0x5E4 = true;
|
||||
if (mObjectDataLoaded == true) {
|
||||
mProgressStage = 1;
|
||||
} else {
|
||||
mProgressStage = 0;
|
||||
}
|
||||
dHbm::Manage_c::GetInstance()->fn_80197560(0);
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
mFader.setStatus(mFaderBase_c::FADED_OUT);
|
||||
if (mFader.fadeIn() == true) {
|
||||
field_0x5E4 = true;
|
||||
mProgressStage = 6;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (mFader.isNotStatus(mFaderBase_c::FADING_IN)) {
|
||||
if (dReset::Manage_c::GetInstance()->isSoftReset()) {
|
||||
if (dPadManager_c::GetInstance()->isCalibrationFinished() == true &&
|
||||
dPadManager_c::GetInstance()->getField_0x25() == false) {
|
||||
mCalibrationDone = true;
|
||||
mStateMgr.changeState(StateID_Save);
|
||||
} else {
|
||||
mProgressStage = 2;
|
||||
}
|
||||
} else {
|
||||
dHbm::Manage_c::GetInstance()->fn_80197560(0);
|
||||
if (dPadManager_c::GetInstance()->isCalibrationFinished() == true) {
|
||||
if (dPadManager_c::GetInstance()->getField_0x25() == false) {
|
||||
mCalibrationDone = true;
|
||||
mStateMgr.changeState(StateID_Save);
|
||||
} else {
|
||||
dDvdUnk::FontUnk::GetInstance()->fn_80052CC0();
|
||||
mProgressStage = 2;
|
||||
}
|
||||
} else {
|
||||
dPad::ex_c::setCalibrateMpls();
|
||||
dDvdUnk::FontUnk::GetInstance()->fn_80052CC0();
|
||||
mProgressStage = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void dScBoot_c::finalizeState_Connect() {}
|
||||
@@ -565,16 +654,95 @@ void dScBoot_c::initializeState_Save() {
|
||||
}
|
||||
|
||||
void dScBoot_c::executeState_Save() {
|
||||
// TODO
|
||||
switch (mProgressStage) {
|
||||
case 0:
|
||||
if (field_0x5E3 == true) {
|
||||
field_0x5E3 = false;
|
||||
field_0x5D8 = mProgressStage;
|
||||
dDvdUnk::FontUnk::GetInstance()->fn_800529B0();
|
||||
mProgressStage = 3;
|
||||
} else if (field_0x5E2 == true) {
|
||||
field_0x5E2 = false;
|
||||
mProgressStage = 2;
|
||||
} else {
|
||||
SaveRelated *saveRelated = SaveRelated::GetInstance();
|
||||
saveRelated->fn_80015EC0();
|
||||
if (saveRelated->getField_0x09() == true) {
|
||||
mProgressStage = 1;
|
||||
field_0x5E0 = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (field_0x5E3 == true) {
|
||||
field_0x5E3 = false;
|
||||
field_0x5D8 = mProgressStage;
|
||||
mProgressStage = 3;
|
||||
} else if (tryLoadTitleScreen()) {
|
||||
mProgressStage = 100;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (FileManager::GetInstance()->getField_0xA84D() != true) {
|
||||
mFader.setStatus(mFaderBase_c::FADED_OUT);
|
||||
if (mFader.fadeIn() == mFaderBase_c::FADED_IN) {
|
||||
dCsBase_c::GetInstance()->setCursorStickVisible(false);
|
||||
dDvdUnk::FontUnk::GetInstance()->fn_800529B0();
|
||||
dDvdUnk::FontUnk::GetInstance()->fn_80052A20();
|
||||
dLytSystemWindow_c::GetInstance()->fn_80152F10();
|
||||
SaveMgr::GetInstance()->init();
|
||||
dPadNav::setNavEnabled(false, false);
|
||||
field_0x5E4 = true;
|
||||
dHbm::Manage_c::GetInstance()->fn_80197560(0);
|
||||
SaveRelated::GetInstance()->fn_80015EA0();
|
||||
SaveRelated::GetInstance()->fn_80015F40();
|
||||
dDvdUnk::FontUnk::GetInstance()->fn_80052CC0();
|
||||
mProgressStage = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
mFader.setStatus(mFaderBase_c::FADED_OUT);
|
||||
if (mFader.fadeIn() == mFaderBase_c::FADED_IN) {
|
||||
field_0x5E4 = true;
|
||||
mProgressStage = field_0x5D8;
|
||||
dDvdUnk::FontUnk::GetInstance()->fn_80052CC0();
|
||||
dHbm::Manage_c::GetInstance()->fn_80197560(0);
|
||||
}
|
||||
break;
|
||||
case 999999:
|
||||
if (tryLoadTitleScreen()) {
|
||||
mProgressStage = 100;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void dScBoot_c::finalizeState_Save() {}
|
||||
|
||||
bool dScBoot_c::checkDone() {
|
||||
if (field_0x5E3 == 1) {
|
||||
field_0x5E3 = 0;
|
||||
mProgressStage = 4;
|
||||
return 1;
|
||||
bool dScBoot_c::tryLoadTitleScreen() {
|
||||
if (mStrapScreenSeen != true) {
|
||||
return false;
|
||||
}
|
||||
return 0;
|
||||
if (mCalibrationDone != true) {
|
||||
return false;
|
||||
}
|
||||
if (mAllDataLoaded != true) {
|
||||
return false;
|
||||
}
|
||||
if (field_0x5E0 != true) {
|
||||
return false;
|
||||
}
|
||||
|
||||
dScTitle_c::loadTitleScreen(0);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dScBoot_c::checkDone() {
|
||||
if (field_0x5E3 == true) {
|
||||
field_0x5E3 = false;
|
||||
mProgressStage = 4;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
+12
-9
@@ -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;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
+218
-3
@@ -1,23 +1,238 @@
|
||||
#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"
|
||||
|
||||
|
||||
// included asset
|
||||
#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
|
||||
|
||||
+5
-5
@@ -23,7 +23,7 @@
|
||||
|
||||
dGfx_c *dGfx_c::sInstance;
|
||||
|
||||
dGfx_c::dGfx_c() : mpTextureBuffer(nullptr), field_0x08(0), field_0x09(0) {
|
||||
dGfx_c::dGfx_c() : mpTextureBuffer(nullptr), mBufRefcount(0), mLetterboxEnabled(false) {
|
||||
mDrawCallback = nullptr;
|
||||
|
||||
d3d::create(mHeap::g_gameHeaps[0]);
|
||||
@@ -52,13 +52,13 @@ EGG::TextureBuffer *dGfx_c::getTextureBuffer() {
|
||||
mpTextureBuffer->onCapFlag(0x20); // TODO
|
||||
ret = mpTextureBuffer;
|
||||
}
|
||||
field_0x08++;
|
||||
mBufRefcount++;
|
||||
return ret;
|
||||
}
|
||||
|
||||
void dGfx_c::releaseTextureBuffer() {
|
||||
field_0x08--;
|
||||
if (field_0x08 == 0 && mpTextureBuffer != nullptr) {
|
||||
mBufRefcount--;
|
||||
if (mBufRefcount == 0 && mpTextureBuffer != nullptr) {
|
||||
mpTextureBuffer->free();
|
||||
mpTextureBuffer = nullptr;
|
||||
}
|
||||
@@ -74,7 +74,7 @@ void dGfx_c::drawBefore() {
|
||||
}
|
||||
|
||||
void dGfx_c::drawLetterbox() {
|
||||
if (field_0x09 != 0 && isTvMode4To3()) {
|
||||
if (mLetterboxEnabled && isTvMode4To3()) {
|
||||
EGG::Screen screen(*EGG::Screen::GetRoot());
|
||||
screen.SetNearFar(-1.0f, 1.0f);
|
||||
screen.SetProjectionGX();
|
||||
|
||||
+5
-5
@@ -8,7 +8,7 @@
|
||||
#include "d/d_gfx.h"
|
||||
#include "d/d_hbm.h"
|
||||
#include "d/d_pad_nav.h"
|
||||
#include "d/d_pause.h"
|
||||
#include "d/d_pad_manager.h"
|
||||
#include "d/d_reset.h"
|
||||
#include "d/d_sc_game.h"
|
||||
#include "d/lyt/d_lyt_control_game.h"
|
||||
@@ -228,7 +228,7 @@ void beginPad_BR() {
|
||||
!dAcPy_c::GetLink()->vt_0x1C0() && !dLytMeter_c::GetMain()->getField_0x1377F()) ||
|
||||
ex.field_0x22CF) {
|
||||
if (dLytControlGame_c::getInstance() && dLytControlGame_c::getInstance()->isStateNormal()) {
|
||||
if (!(dPauseManager_c::GetInstance() && dPauseManager_c::GetInstance()->getField_0x25())) {
|
||||
if (!(dPadManager_c::GetInstance() && dPadManager_c::GetInstance()->getField_0x25())) {
|
||||
KPADDisableMplsDpdRevise(0);
|
||||
KPADDisableMplsAccRevise(0);
|
||||
}
|
||||
@@ -1271,7 +1271,7 @@ f32 ex_c::fn_80058F50() {
|
||||
return m_current_ex->mMotion.fn_80058A00();
|
||||
}
|
||||
|
||||
bool ex_c::fn_80058F60() {
|
||||
bool ex_c::startCurrentMplsCalibration() {
|
||||
if (m_current_ex->mIsWPADDeviceTypeMplsStableTimer < 8) {
|
||||
return true;
|
||||
}
|
||||
@@ -1292,11 +1292,11 @@ f32 ex_c::getCurrentCalibrationWork() {
|
||||
return m_current_ex->getCalibrationWork();
|
||||
}
|
||||
|
||||
void ex_c::fn_80058FF0() {
|
||||
void ex_c::stopCurrentMplsCalibration() {
|
||||
m_current_ex->stopMplsCalibration(mPad::getCurrentCoreID());
|
||||
}
|
||||
|
||||
void ex_c::fn_80059000() {
|
||||
void ex_c::centerCurrentCursor() {
|
||||
m_current_ex->centerCursor(mPad::getCurrentCoreID());
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,798 @@
|
||||
#include "d/d_pad_manager.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "d/d_cs_base.h"
|
||||
#include "d/d_dvd_unk.h"
|
||||
#include "d/d_gfx.h"
|
||||
#include "d/d_pad.h"
|
||||
#include "d/d_pad_nav.h"
|
||||
#include "d/d_sys.h"
|
||||
#include "d/lyt/d_lyt_battery.h"
|
||||
#include "d/snd/d_snd_small_effect_mgr.h"
|
||||
#include "d/snd/d_snd_wzsound.h"
|
||||
#include "m/m_pad.h"
|
||||
|
||||
dPadManager_c::dPadManager_c() {
|
||||
sInstance = this;
|
||||
field_0x20 = true;
|
||||
mpWindow = nullptr;
|
||||
mCalibrationFinished = false;
|
||||
field_0x25 = false;
|
||||
}
|
||||
|
||||
bool dPadManager_c::create(EGG::Heap *pHeap) {
|
||||
new (pHeap) dPadManager_c();
|
||||
sInstance->init();
|
||||
return true;
|
||||
}
|
||||
|
||||
dPadManager_c::~dPadManager_c() {}
|
||||
|
||||
bool dPadManager_c::execute() {
|
||||
executeProc();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dPadManager_c::draw() {
|
||||
dGfx_c::doDrawCapTexture();
|
||||
if (mpWindow != nullptr) {
|
||||
mpWindow->draw();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void dPadManager_c::init() {
|
||||
mSavedCsDrawDirectly = false;
|
||||
field_0x23 = false;
|
||||
ModeRequestNormal();
|
||||
field_0x1E = false;
|
||||
field_0x1F = false;
|
||||
if (mpWindow != nullptr) {
|
||||
mpWindow->init();
|
||||
}
|
||||
mCalibrationSkipped = false;
|
||||
}
|
||||
|
||||
void dPadManager_c::buildWindow() {
|
||||
sInstance->mpWindow = new dLytSystemWindowMain_c();
|
||||
sInstance->mpWindow->build();
|
||||
}
|
||||
|
||||
s32 dPadManager_c::get30SecondsInTicks() {
|
||||
return 1800 / dSys_c::getFrameRate();
|
||||
}
|
||||
|
||||
s32 dPadManager_c::get3Point3SecondsInTicks() {
|
||||
return 200 / dSys_c::getFrameRate();
|
||||
}
|
||||
|
||||
void dPadManager_c::requestMplsCalibration() {
|
||||
mCalibrationFinished = false;
|
||||
dPad::ex_c::setCalibrateMpls();
|
||||
}
|
||||
|
||||
void dPadManager_c::executeProc() {
|
||||
static const ModeFunc procs[] = {
|
||||
&dPadManager_c::ModeProc_Normal,
|
||||
&dPadManager_c::ModeProc_ReconnectPad,
|
||||
&dPadManager_c::ModeProc_AttachMplsAndNunchuk,
|
||||
&dPadManager_c::ModeProc_AttachNunchuk,
|
||||
&dPadManager_c::ModeProc_Calibrating,
|
||||
&dPadManager_c::ModeProc_LowBattery,
|
||||
&dPadManager_c::ModeProc_PointCenter,
|
||||
&dPadManager_c::ModeProc_CalibrationFail,
|
||||
};
|
||||
ModeFunc f = procs[mMode];
|
||||
if (f != nullptr) {
|
||||
(this->*f)();
|
||||
}
|
||||
|
||||
if (mpWindow != nullptr) {
|
||||
mpWindow->calc();
|
||||
}
|
||||
}
|
||||
|
||||
void dPadManager_c::ModeRequestNormal() {
|
||||
ModeRequest(Normal);
|
||||
mIsError = false;
|
||||
field_0x1D = false;
|
||||
if (dCsBase_c::GetInstance() != nullptr) {
|
||||
dCsBase_c::GetInstance()->setDrawDirectly(mSavedCsDrawDirectly);
|
||||
if (field_0x23) {
|
||||
dPadNav::setCursorStickVisible();
|
||||
} else {
|
||||
dPadNav::setCursorStickInvisible();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dPadManager_c::ModeProc_Normal() {
|
||||
PadStatus_e status = getPadStatus();
|
||||
if (status == PAD_NORMAL || status == PAD_CONFIGURING_MPLS) {
|
||||
if (isOutOfBattery() == true) {
|
||||
mIsError = true;
|
||||
dDvdUnk::FontUnk::GetInstance()->onError();
|
||||
ModeRequestLowBattery();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Some sort of error occured
|
||||
|
||||
mIsError = true;
|
||||
mPadStatus = status;
|
||||
dCsBase_c *cs = dCsBase_c::GetInstance();
|
||||
mSavedCsDrawDirectly = cs->getDrawDirectly();
|
||||
cs->setDrawDirectly(false);
|
||||
cs->setCursorStickVisible(false);
|
||||
field_0x23 = dPadNav::isCursorStickVisible();
|
||||
dPadNav::setCursorStickInvisible();
|
||||
dDvdUnk::FontUnk::GetInstance()->onError();
|
||||
|
||||
if (status == PAD_DISCONNECTED) {
|
||||
ModeRequestReconnectPad();
|
||||
} else if (status == PAD_NO_MPLS) {
|
||||
ModeRequestAttachMplsAndNunchuk();
|
||||
} else if (status == PAD_NO_NUNCHUK) {
|
||||
ModeRequestAttachNunchuk();
|
||||
} else if (status == PAD_NEED_POINT_CENTER) {
|
||||
ModeRequestPointCenter();
|
||||
} else {
|
||||
ModeRequestCalibrating();
|
||||
}
|
||||
}
|
||||
|
||||
void dPadManager_c::ModeRequestReconnectPad() {
|
||||
ModeRequest(ReconnectPad);
|
||||
field_0x1D = true;
|
||||
mCalibrationFinished = false;
|
||||
}
|
||||
void dPadManager_c::ModeProc_ReconnectPad() {
|
||||
PadStatus_e status = getPadStatus();
|
||||
if (status == PAD_NEED_CALIBRATION || status == PAD_CONFIGURING_MPLS) {
|
||||
status = PAD_NORMAL;
|
||||
}
|
||||
|
||||
switch (mStep) {
|
||||
case 0:
|
||||
// "Communications with the Wii Remote have been interrupted. Reconnect the Wii Remote.
|
||||
// Press (A) without touching the Control Stick."
|
||||
if (mpWindow->setProperties("SYS_CONT_10", true, nullptr) == true) {
|
||||
mStep = 1;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (mPad::getCore()->isConnected() && mpWindow->requestABtnOut() == true) {
|
||||
mPad::getCore()->startPatternRumble("***--***--***", 0, false);
|
||||
mStepTimer = 0;
|
||||
mStep = 2;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (mStepTimer < get3Point3SecondsInTicks()) {
|
||||
mStepTimer++;
|
||||
} else if (mpWindow->fn_80150EE0() == true) {
|
||||
mStep = 3;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
mStep = 4;
|
||||
}
|
||||
break;
|
||||
case 4: ModeRequestNext(status); break;
|
||||
}
|
||||
}
|
||||
|
||||
void dPadManager_c::ModeRequestAttachMplsAndNunchuk() {
|
||||
ModeRequest(AttachMplsAndNunchuk);
|
||||
field_0x1D = true;
|
||||
mCalibrationFinished = false;
|
||||
}
|
||||
void dPadManager_c::ModeProc_AttachMplsAndNunchuk() {
|
||||
PadStatus_e status = getPadStatus();
|
||||
if (status == PAD_NEED_CALIBRATION || status == PAD_CONFIGURING_MPLS) {
|
||||
status = PAD_NORMAL;
|
||||
}
|
||||
|
||||
switch (mStep) {
|
||||
case 0:
|
||||
// "Connect the Wii Remote and Nunchuk to the Wii MotionPlus accessory. Next, wait a few moments without
|
||||
// touching the Control Stick."
|
||||
if (mpWindow->setProperties("SYS_CONT_01_02", false, nullptr) == true) {
|
||||
mpWindow->fn_80150F30(2);
|
||||
mStep = 1;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
mStep++;
|
||||
}
|
||||
// fall-through
|
||||
case 2:
|
||||
if (status == PAD_DISCONNECTED) {
|
||||
if (mpWindow->fn_80150EE0() == true) {
|
||||
mStep = 4;
|
||||
}
|
||||
} else {
|
||||
if (dPad::ex_c::isMissingMpls() != true) {
|
||||
mStep = 3;
|
||||
mStepTimer = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (mStepTimer < get3Point3SecondsInTicks()) {
|
||||
mStepTimer++;
|
||||
} else if (mpWindow->fn_80150EE0() == true) {
|
||||
mStep = 4;
|
||||
mStepTimer = 0;
|
||||
dPad::ex_c::fn_800590F0();
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
mStep = 5;
|
||||
}
|
||||
break;
|
||||
case 5: ModeRequestNext(status); break;
|
||||
}
|
||||
}
|
||||
|
||||
void dPadManager_c::ModeRequestAttachNunchuk() {
|
||||
ModeRequest(AttachNunchuk);
|
||||
}
|
||||
void dPadManager_c::ModeProc_AttachNunchuk() {
|
||||
PadStatus_e status = getPadStatus();
|
||||
if (status == PAD_NEED_CALIBRATION || status == PAD_CONFIGURING_MPLS) {
|
||||
status = PAD_NORMAL;
|
||||
}
|
||||
|
||||
switch (mStep) {
|
||||
case 0:
|
||||
// "Connect the Nunchuk to the Wii Remote. Once you have connected the Nunchuk, wait a few moments without
|
||||
// touching the Control Stick."
|
||||
if (mpWindow->setProperties("SYS_CONT_01_01", false, nullptr) == true) {
|
||||
mpWindow->fn_80150F30(1);
|
||||
mStep = 1;
|
||||
mStepTimer = 0;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
mStep++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (status == PAD_DISCONNECTED) {
|
||||
if (mpWindow->fn_80150EE0() == true) {
|
||||
mStep = 3;
|
||||
}
|
||||
} else if (status == PAD_NO_MPLS) {
|
||||
if (mpWindow->fn_80150EE0() == true) {
|
||||
mStep = 3;
|
||||
}
|
||||
} else if (mStepTimer < get1Point5SecondsInTicks()) {
|
||||
mStepTimer++;
|
||||
} else if (dPad::ex_c::isMissingNunchuk() != true && mpWindow->fn_80150EB0() == true) {
|
||||
mStep = 3;
|
||||
mStepTimer = 0;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
mStep = 4;
|
||||
}
|
||||
break;
|
||||
case 4: ModeRequestNext(status); break;
|
||||
}
|
||||
}
|
||||
|
||||
void dPadManager_c::ModeRequestCalibrating() {
|
||||
ModeRequest(Calibrating);
|
||||
mCalibrationTimer = 0;
|
||||
field_0x1D = true;
|
||||
mCalibrationFinished = false;
|
||||
mCalibrationSkipped = false;
|
||||
}
|
||||
void dPadManager_c::ModeProc_Calibrating() {
|
||||
PadStatus_e status = getPadStatus();
|
||||
bool empty = false;
|
||||
if (status == PAD_NEED_CALIBRATION) {
|
||||
empty = true;
|
||||
status = PAD_NORMAL;
|
||||
}
|
||||
|
||||
static const char *s_messages[] = {
|
||||
"SYS_MPLS_01", // "Now calibrating the Wii MotionPlus. Place the Wii Remote on a flat surface."
|
||||
"SYS_MPLS_05", // ""
|
||||
};
|
||||
|
||||
switch (mStep) {
|
||||
case 0: {
|
||||
s32 idx = 0;
|
||||
if (empty) {
|
||||
idx = 1;
|
||||
}
|
||||
if (mpWindow->setProperties(s_messages[idx], false, nullptr) == true) {
|
||||
mpWindow->fn_80150F30(3);
|
||||
mpWindow->fn_80150FE0();
|
||||
mpWindow->fn_80151000();
|
||||
mStep = 1;
|
||||
mStepTimer = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
mStep++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (status != PAD_NORMAL && status != PAD_CONFIGURING_MPLS) {
|
||||
mStep = 20;
|
||||
} else if (mStepTimer < get1Point5SecondsInTicks()) {
|
||||
mStepTimer++;
|
||||
} else if (dPad::ex_c::startCurrentMplsCalibration() == false) {
|
||||
mStep = 3;
|
||||
mStepTimer = 0;
|
||||
} else if (mCalibrationTimer >= get30SecondsInTicks() && mpWindow->fn_80150EE0() == true) {
|
||||
mpWindow->fn_80150FF0();
|
||||
mStep = 10;
|
||||
mCalibrationTimer = 0;
|
||||
} else {
|
||||
mCalibrationTimer++;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (status != PAD_NORMAL) {
|
||||
dPad::ex_c::stopCurrentMplsCalibration();
|
||||
mStep = 20;
|
||||
} else if (!dPad::ex_c::getCurrentCalibrationWork()) {
|
||||
// okay cool everywhere else we do "== true" and so on
|
||||
// but here the float is simply converted to bool
|
||||
// done calibrating
|
||||
if (mpWindow->fn_80150EE0() == true) {
|
||||
mStep = 4;
|
||||
}
|
||||
} else if (mCalibrationTimer >= get30SecondsInTicks() && mpWindow->fn_80150EE0() == true) {
|
||||
mpWindow->fn_80150FF0();
|
||||
mStep = 10;
|
||||
mCalibrationTimer = 0;
|
||||
} else {
|
||||
mCalibrationTimer++;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
field_0x1D = false;
|
||||
mCalibrationFinished = true;
|
||||
ModeRequestPointCenter();
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
ModeRequestCalibrationFail();
|
||||
}
|
||||
break;
|
||||
case 20:
|
||||
mpWindow->fn_80150FF0();
|
||||
if (mpWindow->fn_80150EE0() == true) {
|
||||
mStep = 21;
|
||||
}
|
||||
break;
|
||||
case 21:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
if (status == PAD_CONFIGURING_MPLS) {
|
||||
mStep = 30;
|
||||
} else {
|
||||
ModeRequestNext(status);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 30: ModeRequestCalibrationFail(); break;
|
||||
}
|
||||
}
|
||||
|
||||
void dPadManager_c::ModeRequestLowBattery() {
|
||||
ModeRequest(LowBattery);
|
||||
mCalibrationTimer = 0;
|
||||
field_0x20 = false;
|
||||
}
|
||||
void dPadManager_c::ModeProc_LowBattery() {
|
||||
PadStatus_e status = getPadStatus();
|
||||
switch (mStep) {
|
||||
case 0:
|
||||
// "The Wii Remote battery charge is running low. Please check the HOME Menu."
|
||||
if (mpWindow->setProperties("SYS_CONT_09", false, nullptr) == true) {
|
||||
mStep = 1;
|
||||
mStepTimer = 0;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
mStep++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (status != PAD_NORMAL) {
|
||||
mStep = 10;
|
||||
} else if (mStepTimer < get1Point5SecondsInTicks()) {
|
||||
mStepTimer++;
|
||||
} else if (mpWindow->fn_80150FB0() == true) {
|
||||
mStep = 3;
|
||||
mStepTimer = 0;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (status != PAD_NORMAL) {
|
||||
mStep = 10;
|
||||
} else if (mPad::getCore()->downTrigger(mPad::BUTTON_A) && mpWindow->fn_80150EB0() == true) {
|
||||
mStep = 4;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
dLytBattery_c::GetInstance()->dismissManually();
|
||||
ModeRequestNext(status);
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (mpWindow->fn_80150EE0() == true) {
|
||||
mStep = 11;
|
||||
}
|
||||
break;
|
||||
case 11:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
dLytBattery_c::GetInstance()->dismissManually();
|
||||
ModeRequestNext(status);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void dPadManager_c::ModeRequestPointCenter() {
|
||||
ModeRequest(PointCenter);
|
||||
field_0x25 = true;
|
||||
if (field_0x20 == false && dPad::ex_c::getBatteryLevel() >= 2) {
|
||||
field_0x20 = true;
|
||||
}
|
||||
}
|
||||
void dPadManager_c::ModeProc_PointCenter() {
|
||||
PadStatus_e status = getPadStatus();
|
||||
if (status == PAD_NEED_CALIBRATION || status == PAD_CONFIGURING_MPLS) {
|
||||
status = PAD_NORMAL;
|
||||
}
|
||||
|
||||
switch (mStep) {
|
||||
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()->setVisible(true);
|
||||
dCsBase_c::GetInstance()->setDrawDirectly(true);
|
||||
dCsBase_c::GetInstance()->setCalibrationPointCenterEnabled(true);
|
||||
mStep = 1;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
mStep++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (status != PAD_NORMAL) {
|
||||
mStep = 10;
|
||||
} else if (mpWindow->isPointerWithinWindow() != false &&
|
||||
// "Press (A)."
|
||||
mpWindow->setProperties("SYS_MPLS_07", false, nullptr) == true) {
|
||||
mpWindow->fn_80150FB0();
|
||||
mPad::getCore()->startPatternRumble("**-*----", 0, false);
|
||||
mStepTimer = 0;
|
||||
mStep++;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
mStep = 5;
|
||||
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_POINTER_IN);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (status != PAD_NORMAL) {
|
||||
mStep = 10;
|
||||
} else if (mpWindow->isPointerWithinWindow() == false &&
|
||||
// "Point the Wii Remote at the screen, and move <pointer icon> to the center."
|
||||
mpWindow->setProperties("SYS_MPLS_02", false, nullptr) == true) {
|
||||
mStep = 1;
|
||||
} else if (mStepTimer < 8) {
|
||||
mStepTimer++;
|
||||
} else if (mpWindow->fn_80150FB0() == true) {
|
||||
mStepTimer = 0;
|
||||
mStep++;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (mpWindow->getField_0xDF8() == true) {
|
||||
if (status != PAD_NORMAL) {
|
||||
mStep = 20;
|
||||
} else if (mpWindow->isPointerWithinWindow() == false &&
|
||||
// "Point the Wii Remote at the screen, and move <pointer icon> to the center."
|
||||
mpWindow->setProperties("SYS_MPLS_02", false, nullptr) == true) {
|
||||
mpWindow->setField_0xE03(true);
|
||||
mStep = 1;
|
||||
} else if (mPad::getCore()->downTrigger(mPad::BUTTON_A) != false && mpWindow->fn_80150EB0() == true) {
|
||||
mStepTimer = 0;
|
||||
mStep++;
|
||||
dPad::ex_c::centerCurrentCursor();
|
||||
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_POINTER_OK);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
field_0x1E = true;
|
||||
field_0x25 = false;
|
||||
dCsBase_c::GetInstance()->setVisible(false);
|
||||
dCsBase_c::GetInstance()->setDrawDirectly(false);
|
||||
dCsBase_c::GetInstance()->setCalibrationPointCenterEnabled(false);
|
||||
ModeRequestNormal();
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (mpWindow->fn_80150EE0() == true) {
|
||||
mStep = 11;
|
||||
}
|
||||
break;
|
||||
case 11:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
ModeRequestNext(status);
|
||||
dCsBase_c::GetInstance()->setVisible(false);
|
||||
dCsBase_c::GetInstance()->setDrawDirectly(false);
|
||||
dCsBase_c::GetInstance()->setCalibrationPointCenterEnabled(false);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 20:
|
||||
if (mpWindow->fn_80150EE0() == true) {
|
||||
mpWindow->setField_0xE03(true);
|
||||
mStep = 11;
|
||||
}
|
||||
break;
|
||||
}
|
||||
dCsBase_c::GetInstance()->update();
|
||||
}
|
||||
|
||||
void dPadManager_c::ModeRequestCalibrationFail() {
|
||||
ModeRequest(CalibrationFail);
|
||||
}
|
||||
void dPadManager_c::ModeProc_CalibrationFail() {
|
||||
PadStatus_e status = getPadStatus();
|
||||
|
||||
switch (mStep) {
|
||||
case 0:
|
||||
// "Could not successfully complete the calibration check. Run the check again? [1]Check [2]Don't check"
|
||||
if (mpWindow->setProperties("SYS_MPLS_03", false, nullptr) == true) {
|
||||
mpWindow->fn_80150F30(4);
|
||||
mStep = 1;
|
||||
mStepTimer = 0;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (status != PAD_NORMAL && status != PAD_CONFIGURING_MPLS && status != PAD_NEED_CALIBRATION) {
|
||||
mStep = 14;
|
||||
} else if (mStepTimer < get1Point5SecondsInTicks()) {
|
||||
mStepTimer++;
|
||||
} else if (mPad::getCore()->downTrigger(mPad::BUTTON_A) != false && mpWindow->getField_0xDDC() != 2 &&
|
||||
mpWindow->fn_80150EE0() == true) {
|
||||
mStep = 2;
|
||||
mStepTimer = 0;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
mStep = 3;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (mpWindow->getField_0xDDC() == 0) {
|
||||
if (
|
||||
// "If you proceed without finishing calibration, game controls may not work properly. Continue without finishing calibration? [1]Continue [2]Retry check"
|
||||
mpWindow->setProperties("SYS_MPLS_04", false, nullptr) == true
|
||||
) {
|
||||
mStep = 4;
|
||||
mpWindow->fn_80150F30(4);
|
||||
}
|
||||
} else {
|
||||
mStep = 6;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (status != PAD_NORMAL && status != PAD_CONFIGURING_MPLS && status != PAD_NEED_CALIBRATION) {
|
||||
mStep = 14;
|
||||
} else if (mPad::getCore()->downTrigger(mPad::BUTTON_A) != false && mpWindow->getField_0xDDC() != 2) {
|
||||
if (mpWindow->getField_0xDDC() == 0) {
|
||||
if (mpWindow->fn_80150EE0() == true) {
|
||||
mStep = 5;
|
||||
}
|
||||
} else {
|
||||
if (mpWindow->fn_80150EB0() == true) {
|
||||
field_0x1D = false;
|
||||
dPad::ex_c::getInstance()->setNoCalibrationNeeded();
|
||||
mCalibrationSkipped = true;
|
||||
field_0x25 = false;
|
||||
mStep = 16;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
mStep = 6;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
// "Now calibrating the Wii MotionPlus. Place the Wii Remote on a flat surface."
|
||||
if (mpWindow->setProperties("SYS_MPLS_01", false, nullptr) == true) {
|
||||
mpWindow->fn_80150F30(3);
|
||||
mpWindow->fn_80150FE0();
|
||||
mpWindow->fn_80151000();
|
||||
mCalibrationTimer = 0;
|
||||
mStep = 7;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
mStep = 8;
|
||||
mStepTimer = 0;
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
if (status != PAD_NORMAL && status != PAD_NEED_CALIBRATION) {
|
||||
mStep = 12;
|
||||
} else if (mStepTimer < get1Point5SecondsInTicks()) {
|
||||
mStepTimer++;
|
||||
} else if (dPad::ex_c::startCurrentMplsCalibration() == false) {
|
||||
mStep = 9;
|
||||
mStepTimer = 0;
|
||||
mCalibrationTimer = 0;
|
||||
} else if (mCalibrationTimer >= get30SecondsInTicks() && mpWindow->fn_80150EE0() == true) {
|
||||
mpWindow->fn_80150FF0();
|
||||
mStep = 11;
|
||||
mCalibrationTimer = 0;
|
||||
} else {
|
||||
mCalibrationTimer++;
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
if (status != PAD_NORMAL && status != PAD_NEED_CALIBRATION) {
|
||||
dPad::ex_c::stopCurrentMplsCalibration();
|
||||
mStep = 12;
|
||||
} else if (!dPad::ex_c::getCurrentCalibrationWork() && mpWindow->fn_80150EE0() == true) {
|
||||
// okay cool everywhere else we do "== true" and so on
|
||||
// but here the float is simply converted to bool
|
||||
// done calibrating
|
||||
mStep = 10;
|
||||
} else if (mCalibrationTimer >= get30SecondsInTicks() && mpWindow->fn_80150EE0() == true) {
|
||||
mpWindow->fn_80150FF0();
|
||||
mStep = 11;
|
||||
mCalibrationTimer = 0;
|
||||
} else {
|
||||
mCalibrationTimer++;
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
field_0x1D = false;
|
||||
mCalibrationFinished = true;
|
||||
ModeRequestPointCenter();
|
||||
}
|
||||
break;
|
||||
case 11:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
ModeRequestCalibrationFail();
|
||||
}
|
||||
break;
|
||||
case 12:
|
||||
mpWindow->fn_80150FF0();
|
||||
if (mpWindow->fn_80150EE0() == true) {
|
||||
mStep = 13;
|
||||
}
|
||||
break;
|
||||
case 13:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
if (status == PAD_CONFIGURING_MPLS) {
|
||||
ModeRequestCalibrationFail();
|
||||
} else {
|
||||
ModeRequestNext(status);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 14:
|
||||
if (mpWindow->fn_80150EB0() == true) {
|
||||
mpWindow->setField_0xE04(true);
|
||||
mStep = 15;
|
||||
}
|
||||
break;
|
||||
case 15:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
ModeRequestNext(status);
|
||||
}
|
||||
break;
|
||||
case 16:
|
||||
if (mpWindow->getField_0xDF7() == true) {
|
||||
ModeRequestNext(status);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void dPadManager_c::ModeRequest(Mode_e mode) {
|
||||
mMode = mode;
|
||||
mStep = 0;
|
||||
mStepTimer = 0;
|
||||
mCalibrationTimer = 0;
|
||||
}
|
||||
|
||||
dPadManager_c::PadStatus_e dPadManager_c::getPadStatus() {
|
||||
PadStatus_e ret = PAD_NORMAL;
|
||||
if (dDvdUnk::FontUnk::GetInstance()->padErrorsAllowed() != true) {
|
||||
return PAD_NORMAL;
|
||||
}
|
||||
|
||||
if (!mPad::getCore()->isConnected()) {
|
||||
ret = PAD_DISCONNECTED;
|
||||
} else if (dPad::ex_c::isMissingMpls() == true || dPad::ex_c::fn_800590E0()) {
|
||||
ret = PAD_NO_MPLS;
|
||||
} else if (dPad::ex_c::isMissingNunchuk() == true) {
|
||||
ret = PAD_NO_NUNCHUK;
|
||||
} else {
|
||||
if (mMode == Normal) {
|
||||
if (dPad::ex_c::needMplsCalibration()) {
|
||||
ret = PAD_NEED_CALIBRATION;
|
||||
} else if (field_0x25) {
|
||||
ret = PAD_NEED_POINT_CENTER;
|
||||
}
|
||||
}
|
||||
if (dPad::ex_c::fn_800590B0()) {
|
||||
ret = PAD_CONFIGURING_MPLS;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void dPadManager_c::ModeRequestNext(PadStatus_e status) {
|
||||
if (status == PAD_DISCONNECTED) {
|
||||
ModeRequestReconnectPad();
|
||||
} else if (status == PAD_NO_MPLS) {
|
||||
ModeRequestAttachMplsAndNunchuk();
|
||||
} else if (status == PAD_NO_NUNCHUK) {
|
||||
ModeRequestAttachNunchuk();
|
||||
} else if (status == PAD_NEED_CALIBRATION) {
|
||||
ModeRequestCalibrating();
|
||||
} else if (field_0x1D == true) {
|
||||
ModeRequestCalibrating();
|
||||
} else if (field_0x25 == true) {
|
||||
ModeRequestPointCenter();
|
||||
} else if (isOutOfBattery() == true) {
|
||||
ModeRequestLowBattery();
|
||||
} else {
|
||||
ModeRequestNormal();
|
||||
}
|
||||
}
|
||||
|
||||
s32 dPadManager_c::get1Point5SecondsInTicks() {
|
||||
return 90 / dSys_c::getFrameRate();
|
||||
}
|
||||
|
||||
bool dPadManager_c::isOutOfBattery() {
|
||||
if (dDvdUnk::FontUnk::GetInstance()->padErrorsAllowed() != true) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (dPad::ex_c::isOutOfBattery() && field_0x20 == true) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
+17
-15
@@ -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 "THPPlayer/THPPlayer.h"
|
||||
|
||||
@@ -328,23 +329,23 @@ void Manage_c::ModeProc_SoftReset() {
|
||||
if (dScBoot_c::GetInstance()) {
|
||||
if (mpFader->getStatus() == EGG::ColorFader::STATUS_PREPARE_IN) {
|
||||
if (dScBoot_c::GetInstance()->getField_0x5E4()) {
|
||||
dScBoot_c::GetInstance()->setField_0x5E4(0);
|
||||
dScBoot_c::GetInstance()->setField_0x5E4(false);
|
||||
mpFader->setStatus(EGG::ColorFader::STATUS_PREPARE_OUT);
|
||||
ModeRequest(Normal);
|
||||
dSndPlayerMgr_c::GetInstance()->fn_8035E310();
|
||||
} else {
|
||||
if (field_0x66) {
|
||||
dScBoot_c::GetInstance()->setField_0x5E3(1);
|
||||
dScBoot_c::GetInstance()->setField_0x5E3(true);
|
||||
|
||||
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();
|
||||
dScBoot_c::GetInstance()->setField_0x5E3(false);
|
||||
dScBoot_c::GetInstance()->setField_0x5E2(true);
|
||||
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;
|
||||
}
|
||||
@@ -552,7 +553,8 @@ void Manage_c::CleanUpLC() {
|
||||
|
||||
void Manage_c::MotorCancelOn() {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
mPad::g_core[--++i]->stopRumbleMgr();
|
||||
// TODO: Fakematch
|
||||
mPad::getCore(--++i)->stopRumbleMgr();
|
||||
}
|
||||
dRumble_c::stop(-1);
|
||||
}
|
||||
@@ -564,7 +566,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 +583,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;
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user