diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/REL/d/d_s_boot.cpp | 85 | ||||
| -rw-r--r-- | src/d/d_dvd_drive_error.cpp | 154 | ||||
| -rw-r--r-- | src/d/d_dvd_unk.cpp | 46 | ||||
| -rw-r--r-- | src/d/d_sc_title.cpp | 8 | ||||
| -rw-r--r-- | src/d/lyt/meter/d_lyt_meter.cpp | 2 | ||||
| -rw-r--r-- | src/d/lyt/msg_window/d_lyt_msg_window.cpp | 3 | ||||
| -rw-r--r-- | src/toBeSorted/blur_and_palette_manager.cpp | 2 |
7 files changed, 223 insertions, 77 deletions
diff --git a/src/REL/d/d_s_boot.cpp b/src/REL/d/d_s_boot.cpp index 973fb92d..75b1ed25 100644 --- a/src/REL/d/d_s_boot.cpp +++ b/src/REL/d/d_s_boot.cpp @@ -2,6 +2,7 @@ #include "common.h" #include "d/d_base.h" +#include "d/d_d2d.h" #include "d/d_dvd_unk.h" #include "d/d_dylink.h" #include "d/d_font_manager.h" @@ -11,6 +12,7 @@ #include "d/d_scene.h" #include "d/d_sys.h" #include "d/lyt/d_lyt_battery.h" +#include "d/lyt/d_lyt_system_window.h" #include "f/f_base.h" #include "f/f_profile.h" #include "f/f_profile_name.h" @@ -19,14 +21,17 @@ #include "m/m_fader_base.h" #include "m/m_heap.h" #include "m/m_pad.h" -#include "nw4r/ut/ut_ResFont.h" #include "rvl/TPL/TPL.h" #include "s/s_FPhase.h" #include "sized_string.h" #include "toBeSorted/arc_managers/layout_arc_manager.h" #include "toBeSorted/arc_managers/oarc_manager.h" -#include "toBeSorted/hbm.h" +#include "toBeSorted/d_d3d.h" +#include "toBeSorted/d_hbm.h" #include "toBeSorted/reload_color_fader.h" +#include "toBeSorted/save_manager.h" +#include "toBeSorted/save_related.h" +#include "toBeSorted/special_item_drop_mgr.h" sFPhase<dScBoot_c>::phaseCallback dScBoot_c::sCallbacks[] = {&dScBoot_c::cb1, &dScBoot_c::cb2, &dScBoot_c::cb3, &dScBoot_c::cb4, &dScBoot_c::cb5, &dScBoot_c::cb9, @@ -80,7 +85,7 @@ sFPhaseBase::sFPhaseState dScBoot_c::cb3() { } sFPhaseBase::sFPhaseState dScBoot_c::cb4() { - if (!fn_801967D0(getHBM())) { + if (!dHbm_c::GetInstance()->fn_801967D0()) { return sFPhaseBase::PHASE_RETRY; } dHeap::HBMHeap.heap->disableAllocation(); @@ -245,11 +250,11 @@ sFPhaseBase::sFPhaseState dScBoot_c::cb7() { } static u16 profilesToLoad[] = { - // ??? not sure what these correspond to - 0x278, - 0x279, - 0x1B0, - 0x1A9, + // TODO: Why these in particular? + fProfile::PL_RESTART, + fProfile::SW_AREA_TAG, + fProfile::OBJ_SWHIT, + fProfile::BOMBF, }; bool allOk = true; @@ -282,11 +287,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(); dLytBattery_c::create(); return sFPhaseBase::PHASE_NEXT; } @@ -298,12 +305,19 @@ STATE_DEFINE(dScBoot_c, Strap); STATE_DEFINE(dScBoot_c, Connect); STATE_DEFINE(dScBoot_c, Save); +void dScBoot_c::drawCallback() { + d2d::draw(); + if (sInstance != nullptr) { + sInstance->mFader.draw(); + } +} + dScBoot_c::strap_c::strap_c() { SizedString<8> str; u8 langNum = getUsedLanguageNTSCNum(); mArcName.mChars[0] = '\0'; - mStr2.mChars[0] = '\0'; - mStr3.mChars[0] = '\0'; + mLytFileName.mChars[0] = '\0'; + mAnimFileName.mChars[0] = '\0'; if (langNum == 3) { str = "F"; } else if (langNum == 4) { @@ -313,8 +327,8 @@ dScBoot_c::strap_c::strap_c() { } // UB: Cannot pass object of non-POD type 'SizedString<8>' through variadic method mArcName.sprintf("strap%s", str); - mStr2.sprintf("strap_00_%s.brlyt", str); - mStr3.sprintf("strap_00_%s_loop.brlan", str); + mLytFileName.sprintf("strap_00_%s.brlyt", str); + mAnimFileName.sprintf("strap_00_%s_loop.brlan", str); LayoutArcManager::GetInstance()->loadLayoutArcFromDisk(mArcName, dHeap::work2Heap.heap); field_0x4EC = 0; } @@ -330,8 +344,8 @@ bool dScBoot_c::strap_c::create() { // want to undo shadowing... ((m2d::ResAccIf_c *)&mResAcc)->attach(data, ""); mLyt.setResAcc(&mResAcc); - mLyt.build(mStr2, nullptr); - mAnm.doSomething(mStr3, &mResAcc); + mLyt.build(mLytFileName, nullptr); + mAnm.doSomething(mAnimFileName, &mResAcc); mLyt.bind(&mAnm); field_0x4EC = 1; field_0x4EE = 0; @@ -389,7 +403,7 @@ dScBoot_c::dScBoot_c() : mStateMgr(*this, sStateID::null), mPhases(this, sCallba } dScBoot_c::~dScBoot_c() { - fn_80197560(getHBM(), 0); + dHbm_c::GetInstance()->fn_80197560(0); sInstance = nullptr; } @@ -400,10 +414,10 @@ int dScBoot_c::create() { mFader.create(); mFader.setFadeInFrame(1); - // TODO + dGfx_c::GetInstance()->setDrawCallback(&drawCallback); dSys::setFrameRate(1); mStateMgr.changeState(StateID_Init); - + SaveRelated::create(); return SUCCEEDED; } @@ -413,7 +427,14 @@ int dScBoot_c::doDelete() { if (!removed || phaseState != sFPhaseBase::PHASE_ALL_DONE) { return NOT_READY; } - // TODO + SaveRelated::remove(); + dBase_c::createRoot(fProfile::LAST, 0, 0); + d3d::createLightTextures(); + SpecialItemDropMgr::create(); + dHbm_c::GetInstance()->offFlags(8); + dGfx_c::GetInstance()->setDrawCallback(nullptr); + ReloadColorFader::GetInstance()->fn_80067DD0(true); + return SUCCEEDED; } int dScBoot_c::execute() { @@ -440,7 +461,7 @@ void dScBoot_c::deleteReady() { } void dScBoot_c::initializeState_Init() { - field_0x5D4 = 0; + mProgressStage = 0; field_0x5D8 = 0; field_0x5DC = 0; field_0x5DD = 0; @@ -455,7 +476,7 @@ void dScBoot_c::executeState_Init() { void dScBoot_c::finalizeState_Init() {} void dScBoot_c::initializeState_Strap() { - field_0x5D4 = 0; + mProgressStage = 0; field_0x5E1 = 1; mFader.fadeIn(); mFader.resetFrames(); @@ -463,10 +484,10 @@ void dScBoot_c::initializeState_Strap() { void dScBoot_c::executeState_Strap() { if (dScene_c::sFader.isStatus(mFaderBase_c::FADED_IN)) { - switch (field_0x5D4) { + switch (mProgressStage) { case 0: if (!checkDone() && mFader.isNotStatus(mFaderBase_c::FADING_IN)) { - field_0x5D4 = 1; + mProgressStage = 1; } break; case 1: @@ -479,7 +500,7 @@ void dScBoot_c::executeState_Strap() { if (ok) { field_0x5DC = 1; if (mFader.fadeOut() == true) { - field_0x5D4 = 2; + mProgressStage = 2; } } } @@ -487,7 +508,7 @@ void dScBoot_c::executeState_Strap() { case 2: if (!checkDone() && mFader.isNotStatus(mFaderBase_c::FADING_OUT)) { if (mFader.fadeIn() == true) { - field_0x5D4 = 3; + mProgressStage = 3; field_0x5E1 = 0; } } @@ -505,10 +526,10 @@ void dScBoot_c::executeState_Strap() { field_0x5E1 = 0; mStateMgr.changeState(StateID_Connect); } else { - field_0x5D4 = 0; + mProgressStage = 0; mStrapScreen.init(); } - fn_80197560(getHBM(), 0); + dHbm_c::GetInstance()->fn_80197560(0); } break; } @@ -521,7 +542,7 @@ void dScBoot_c::finalizeState_Strap() { } void dScBoot_c::initializeState_Connect() { - field_0x5D4 = 0; + mProgressStage = 0; dSys::setFrameRate(2); } @@ -532,9 +553,9 @@ void dScBoot_c::executeState_Connect() { void dScBoot_c::finalizeState_Connect() {} void dScBoot_c::initializeState_Save() { - field_0x5D4 = 0; + mProgressStage = 0; field_0x5D8 = 0; - // TODO + SaveRelated::GetInstance()->fn_80015F40(); } void dScBoot_c::executeState_Save() { @@ -546,7 +567,7 @@ void dScBoot_c::finalizeState_Save() {} bool dScBoot_c::checkDone() { if (field_0x5E3 == 1) { field_0x5E3 = 0; - field_0x5D4 = 4; + mProgressStage = 4; return 1; } return 0; diff --git a/src/d/d_dvd_drive_error.cpp b/src/d/d_dvd_drive_error.cpp new file mode 100644 index 00000000..2f7329b5 --- /dev/null +++ b/src/d/d_dvd_drive_error.cpp @@ -0,0 +1,154 @@ +#include "d/d_dvd_drive_error.h" + +#include "d/d_dvd_unk.h" +#include "d/d_textunk.h" +#include "egg/gfx/eggDrawGX.h" +#include "egg/gfx/eggScreen.h" +#include "m/m_mtx.h" +#include "m/m_vec.h" +#include "toBeSorted/lyt_related_floats.h" +#include "toBeSorted/reload_color_fader.h" + + +/** 805750d0 */ +dDvdDriveError_c *dDvdDriveError_c::sInstance; + +/** 80052300 */ +void dDvdDriveError_c::create(EGG::Heap *heap) { + sInstance = new (heap, 0x04) dDvdDriveError_c(); + sInstance->init(); +} + +/** 80052340 */ +bool dDvdDriveError_c::isError() const { + return mIsError; +} + +// The alternative would be "-str readonly,noreuse" + +static const wchar_t sErrEnGeneral[] = L"Please insert The Legend of Zelda:\nSkyward Sword Game Disc."; +static const wchar_t sErrEnDiskId[] = L"Please insert The Legend of Zelda:\nSkyward Sword Game Disc."; +static const wchar_t sErrEnDiskError[] = L"The disc could not be read.\nRefer to the Wii Operations\nManual for details."; + +static const wchar_t *sErrorsEn[] = { + sErrEnGeneral, + sErrEnDiskId, + sErrEnDiskError, +}; + +static const wchar_t sErrEsGeneral[] = L"Por favor, inserta el disco\nde The Legend of Zelda:\nSkyward Sword."; +static const wchar_t sErrEsDiskId[] = L"Por favor, inserta el disco\nde The Legend of Zelda:\nSkyward Sword."; +static const wchar_t sErrEsDiskError[] = L"No se puede leer el disco.\nConsulta el manual de operaciones\nde la consola Wii para obtener m\xe1" + "s\ninformaci\xf3" + "n."; + +static const wchar_t *sErrorsEs[] = { + sErrEsGeneral, + sErrEsDiskId, + sErrEsDiskError, +}; + +static const wchar_t sErrFrGeneral[] = L"Veuillez ins\xe9" + "rer le disque\nThe Legend of Zelda:\nSkyward Sword."; +static const wchar_t sErrFrDiskId[] = L"Veuillez ins\xe9" + "rer le disque\nThe Legend of Zelda:\nSkyward Sword."; +static const wchar_t sErrFrDiskError[] = L"Impossible de lire le disque.\nVeuillez vous r\xe9" + "f\xe9" + "rer au mode\nd'emploi de la Wii pour plus\nde d\xe9" + "tails."; + +static const wchar_t *sErrorsFr[] = { + sErrFrGeneral, + sErrFrDiskId, + sErrFrDiskError, +}; + +extern "C" u8 fn_80054F30(); + +/** 80052350 */ +void dDvdDriveError_c::draw() { + EGG::Screen screen; + screen.SetCanvasMode(EGG::Screen::CANVASMODE_0); + screen.SetProjectionType(EGG::Frustum::PROJ_ORTHO); + screen.SetNearFar(0.0f, 500.0f); + screen.SetScale(mVec3_c(get_80575190() / get_80575144(), 1.0f, 1.0f)); + screen.SetProjectionGX(); + f32 x = get_80575144() * 0.5f; + f32 mx = -x; + f32 y = get_80575148() * 0.5f; + f32 my = -y; + + EGG::DrawGX::BeginDrawScreen(screen.GetCanvasMode() == EGG::Screen::CANVASMODE_1, false, false); + GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA); + mMtx_c mtx; + f32 dy, dx; + dx = x - mx; + dy = my - y; + screen.CalcMatrixForDrawQuad(mtx, mx, y, nw4r::math::FAbs(dx), nw4r::math::FAbs(dy)); + + EGG::DrawGX::DrawDL(EGG::DrawGX::DL_17, mtx, EGG::DrawGX::BLACK); + + nw4r::math::MTX44 mtx2; + f32 a = get_8057511C(); + f32 b = get_80575118(); + C_MTXOrtho(mtx2, 0.0f, a, 0.0f, b, 0.0f, 1.0f); + GXSetProjection(mtx2, GX_ORTHOGRAPHIC); + GXSetScissor(0, 0, b, a); + mMtx_c mtx3; + MTXIdentity(mtx3); + GXLoadPosMtxImm(mtx3, 0); + GXSetCurrentMtx(0); + u32 idx = 0; + if (mDvdDriveStatus == DVD_STATE_WRONG_DISK_ID) { + idx = 1; + } else if (mDvdDriveStatus == DVD_STATE_DISK_ERROR) { + idx = 2; + } + + u8 lang = fn_80054F30(); + const wchar_t *str; + if (lang == 3) { + str = sErrorsFr[idx]; + } else if (lang == 4) { + str = sErrorsEs[idx]; + } else { + str = sErrorsEn[idx]; + } + + nw4r::ut::TextWriterBase<wchar_t> textWriter; + + textWriter.SetFont(dDvdUnk::FontUnk::GetInstance()->getFont()); + + textWriter.SetScale( + UnkTextThing::getFn800B1F70() * UnkTextThing::getFn800B1FD0(), + UnkTextThing::getFn800B1F70() * UnkTextThing::getFn800B1FD0() + ); + + textWriter.SetupGX(); + textWriter.SetDrawFlag(0x110); + textWriter.SetCursorX(get_8057514C()); + textWriter.SetCursorY(get_80575150()); + + textWriter.Print(str, wcslen(str)); +} + +/** 800526b0 */ +void dDvdDriveError_c::execute() { + mDvdDriveStatus = DVDGetDriveStatus(); + if (!mIsError) { + if (mDvdDriveStatus != DVD_STATE_IDLE && mDvdDriveStatus != DVD_STATE_BUSY) { + mIsError = true; + dDvdUnk::FontUnk::GetInstance()->fn_80052C60(); + } + } else if (mDvdDriveStatus == DVD_STATE_IDLE) { + if (!ReloadColorFader::GetInstance()->is1Or5()) { + mIsError = false; + } + } +} + +/** 80052750 */ +void dDvdDriveError_c::init() { + mDvdDriveStatus = DVD_STATE_IDLE; + mIsError = false; +} diff --git a/src/d/d_dvd_unk.cpp b/src/d/d_dvd_unk.cpp index eb34b79a..5732bdc8 100644 --- a/src/d/d_dvd_unk.cpp +++ b/src/d/d_dvd_unk.cpp @@ -1,43 +1,23 @@ #include "d/d_dvd_unk.h" +#include "d/d_dvd_drive_error.h" #include "egg/core/eggHeap.h" -#include "nw4r/ut/ut_ResFont.h" +#include "toBeSorted/nand_result_tracker.h" -namespace dDvdUnk { - -/** 805750d0 */ -static unkstruct_c *singleton; - -static nw4r::ut::ResFont *fontPtr; - -/** 80052300 */ -unkstruct_c *unkstruct_c::create(EGG::Heap *heap) { - singleton = new (heap, 0x04) unkstruct_c(); - singleton->init(); -} - -/** 80052340 */ -char unkstruct_c::getUnk() { - return field_0x4; -} - -/** 80052350 */ -void unkstruct_c::draw() { - // EGG:: -} +#include "d/dol_backup_error_font.inc" -/** 800526b0 */ -void unkstruct_c::execute() {} - -/** 80052750 */ -void unkstruct_c::init() { - field_0x0 = 0; - field_0x4 = 0; -} +namespace dDvdUnk { -void unkstruct_c::createFont(EGG::Heap *heap) { - fontPtr = new (heap, 0x04) nw4r::ut::ResFont(); +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); + sInstance->field_0x2C = 0; } } // namespace dDvdUnk diff --git a/src/d/d_sc_title.cpp b/src/d/d_sc_title.cpp index 3f46894d..7402456a 100644 --- a/src/d/d_sc_title.cpp +++ b/src/d/d_sc_title.cpp @@ -16,6 +16,7 @@ #include "toBeSorted/file_manager.h" #include "toBeSorted/music_mgrs.h" #include "toBeSorted/reload_color_fader.h" +#include "toBeSorted/save_related.h" #include "toBeSorted/unk_save_time.h" SPECIAL_BASE_PROFILE(TITLE, dScTitle_c, fProfile::TITLE, 0, 0); @@ -67,7 +68,6 @@ dScTitle_c::~dScTitle_c() { extern "C" u32 TITLE_SCREEN_CHANGE; extern "C" void fn_80059450(); extern "C" void fn_80058C90(s32); -extern "C" void fn_80015E40(); static const char *const sFileSelect = "FileSelect"; static const char *const sSkb = "SoftwareKeyboard"; @@ -92,7 +92,7 @@ int dScTitle_c::create() { dSys::setClearColor(mColor(0x00000000)); fn_80059450(); fn_80058C90(0); - fn_80015E40(); + SaveRelated::create(); field_0x2AD = 0; LayoutArcManager::GetInstance()->loadLayoutArcFromDisk(sFileSelect, nullptr); LayoutArcManager::GetInstance()->loadLayoutArcFromDisk(sSkb, nullptr); @@ -112,8 +112,6 @@ int dScTitle_c::execute() { return SUCCEEDED; } -extern "C" void fn_80015E80(); - int dScTitle_c::doDelete() { // TODO return codes int result; @@ -147,7 +145,7 @@ int dScTitle_c::doDelete() { } dScGame_c::doDelete(); - fn_80015E80(); + SaveRelated::remove(); return SUCCEEDED; } diff --git a/src/d/lyt/meter/d_lyt_meter.cpp b/src/d/lyt/meter/d_lyt_meter.cpp index 7b4928bf..c52fe168 100644 --- a/src/d/lyt/meter/d_lyt_meter.cpp +++ b/src/d/lyt/meter/d_lyt_meter.cpp @@ -592,9 +592,7 @@ u8 dLytMeterMain_c::getUiMode() { return StoryflagManager::sInstance->getFlag(840); } -#pragma dont_inline on dLytMeterMain_c::dLytMeterMain_c() {} -#pragma dont_inline reset static const d2d::LytBrlanMapping meterBrlanMap[] = { { "basicPosition_00_in.brlan", "G_remoConBtn_00"}, diff --git a/src/d/lyt/msg_window/d_lyt_msg_window.cpp b/src/d/lyt/msg_window/d_lyt_msg_window.cpp index af85c022..53431f92 100644 --- a/src/d/lyt/msg_window/d_lyt_msg_window.cpp +++ b/src/d/lyt/msg_window/d_lyt_msg_window.cpp @@ -743,7 +743,6 @@ void dLytMsgWindow_c::setCurrentFlowFilename(const char *name) { mCurrentFlowFileName = name; } -#pragma dont_inline on void dLytMsgWindow_c::createSubMsgManager(u8 type) { switch (type) { case 6: @@ -792,8 +791,6 @@ void dLytMsgWindow_c::createSubMsgManager(u8 type) { } } -#pragma dont_inline off - void dLytMsgWindow_c::removeSubMsgManagers() { if (mpWindowTalk != nullptr) { mpWindowTalk->remove(); diff --git a/src/toBeSorted/blur_and_palette_manager.cpp b/src/toBeSorted/blur_and_palette_manager.cpp index f86d9e43..54a233b4 100644 --- a/src/toBeSorted/blur_and_palette_manager.cpp +++ b/src/toBeSorted/blur_and_palette_manager.cpp @@ -21,7 +21,6 @@ Spf::Spf() {} Sff::Sff() {} -#pragma dont_inline on BlurAndPaletteManager::BlurAndPaletteManager() { mColor grey_aaaaaa = mColor(0xaa, 0xaa, 0xaa, 0xff); mColor white_ffffff = mColor(0xff, 0xff, 0xff, 0xff); @@ -188,4 +187,3 @@ BlurAndPaletteManager::BlurAndPaletteManager() { field_0x5D04.field_0x00 = field_0x5CE4; field_0x5D04.field_0x20 = field_0x5CE4; } -#pragma dont_inline reset |
