summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/REL/d/d_s_boot.cpp85
-rw-r--r--src/d/d_dvd_drive_error.cpp154
-rw-r--r--src/d/d_dvd_unk.cpp46
-rw-r--r--src/d/d_sc_title.cpp8
-rw-r--r--src/d/lyt/meter/d_lyt_meter.cpp2
-rw-r--r--src/d/lyt/msg_window/d_lyt_msg_window.cpp3
-rw-r--r--src/toBeSorted/blur_and_palette_manager.cpp2
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