NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
d_s_boot.cpp
1#include <game/bases/d_s_boot.hpp>
2#include <game/bases/d_system.hpp>
3#include <game/bases/d_game_com.hpp>
4#include <game/bases/d_graph.hpp>
6#include <game/bases/d_info.hpp>
7#include <game/bases/d_s_stage.hpp>
9#include <game/bases/d_reset.hpp>
10#include <game/bases/d_remocon_manager.hpp>
11#include <game/bases/d_dylink.hpp>
12#include <game/bases/d_hbm.hpp>
13#include <game/bases/d_fader.hpp>
14#include <game/bases/d_wipe_kuppa.hpp>
15#include <game/bases/d_wipe_dokan.hpp>
16#include <game/bases/d_wipe_mario.hpp>
17#include <game/bases/d_wipe_circle.hpp>
18#include <game/bases/d_nand_thread.hpp>
19#include <game/bases/d_s_restart_crsin.hpp>
20#include <game/bases/d_save_mng.hpp>
21#include <game/bases/d_warning_manager.hpp>
22#include <game/mLib/m_pad.hpp>
23#include <revolution/VI.h>
24
26
28
29void painter() {
30 d2d::draw();
31}
32
33namespace {
34
35dDynamicModuleControl s_DBasesDMC("d_bases", nullptr);
36dDynamicModuleControl s_EnemiesDMC("d_enemies", nullptr);
37dDynamicModuleControl s_En_BossDMC("d_en_boss", nullptr);
38
39sPhase_c::METHOD_RESULT_e myDylinkInitPhase_0a(void *) {
40 if (s_DBasesDMC.load_async()) {
41 s_DBasesDMC.link();
42 return sPhase_c::OK;
43 }
44 return sPhase_c::WAIT;
45}
46
47sPhase_c::METHOD_RESULT_e myDylinkInitPhase_0b(void *) {
48 if (s_EnemiesDMC.load_async()) {
49 s_EnemiesDMC.link();
50 return sPhase_c::OK;
51 }
52 return sPhase_c::WAIT;
53}
54
55sPhase_c::METHOD_RESULT_e myDylinkInitPhase_0c(void *) {
56 if (s_En_BossDMC.load_async()) {
57 s_En_BossDMC.link();
58 return sPhase_c::OK;
59 }
60 return sPhase_c::WAIT;
61}
62
63sPhase_c::METHOD_RESULT_e myDylinkInitPhase_2a(void *) {
64 if (
65 dDyl::LinkASync(fProfile::CRSIN) == 1 &&
66 dDyl::LinkASync(fProfile::STAGE) == 1 &&
67 dDyl::LinkASync(fProfile::RESTART_CRSIN) == 1 &&
68 dDyl::LinkASync(fProfile::GAMEOVER) == 1 &&
69 dDyl::LinkASync(fProfile::RESULT) == 1 &&
70 dDyl::LinkASync(fProfile::MOVIE) == 1
71 ) {
72 return sPhase_c::OK;
73 }
74 return sPhase_c::WAIT;
75}
76
77sPhase_c::METHOD_RESULT_e myDylinkInitPhase_2b(void *) {
78 if (dDyl::LinkASync(fProfile::BOOT) == 1) {
79 return sPhase_c::OK;
80 }
81 return sPhase_c::WAIT;
82}
83
84sPhase_c::METHOD_RESULT_e myDylinkInitPhase_2c(void *) {
85 return sPhase_c::OK;
86}
87
88sPhase_c::METHOD_RESULT_e myDylinkInitPhase_2d(void *) {
89 if (dDyl::LinkASync(fProfile::WORLD_9_DEMO) == 1) {
90 return sPhase_c::OK;
91 }
92 return sPhase_c::WAIT;
93}
94
95sPhase_c::METHOD_RESULT_e myDylinkInitPhase_2e(void *) {
96 if (dDyl::LinkASync(fProfile::WORLD_MAP) == 1) {
97 return sPhase_c::OK;
98 }
99 return sPhase_c::WAIT;
100}
101
102sPhase_c::METHOD_RESULT_e myDylinkInitPhase_3a(void *) {
103 if (dDyl::LinkASync(fProfile::GAME_SETUP) == 1) {
104 return sPhase_c::OK;
105 }
106 return sPhase_c::WAIT;
107}
108
109sPhase_c::METHOD_RESULT_e myDylinkInitPhase_3b(void *) {
110 if (dDyl::LinkASync(fProfile::MULTI_PLAY_COURSE_SELECT) == 1) {
111 return sPhase_c::OK;
112 }
113 return sPhase_c::WAIT;
114}
115
116} // anonymous namespace
117
118sPhase_c::METHOD_RESULT_e myCreate_linkWaitProc(void *) {
119 if (dDyl::LinkASync(fProfile::YES_NO_WINDOW) != 1) {
120 return sPhase_c::WAIT;
121 }
122 if (dDyl::LinkASync(fProfile::CONTROLLER_INFORMATION) != 1) {
123 return sPhase_c::WAIT;
124 }
125 return sPhase_c::OK;
126}
127
128/// @unofficial
129sPhase_c::METHOD_RESULT_e myCreate_WiiStrap(void *thisPtr) {
130 dScBoot_c *self = (dScBoot_c *) thisPtr;
131 dWiiStrapScreen_c *strapScreen = (dWiiStrapScreen_c *) fBase_c::createChild(fProfile::WII_STRAP, self, 0, 0);
132 self->mpWiiStrapScreen = strapScreen;
133 return sPhase_c::OK;
134}
135
136sPhase_c::METHOD_RESULT_e myCreate_LogoScreen(void *thisPtr) {
137 dScBoot_c *self = (dScBoot_c *) thisPtr;
138 if (!self->mpWiiStrapScreen->mHasLoadedLayout) {
139 return sPhase_c::WAIT;
140 }
141 return sPhase_c::OK;
142}
143
144sPhase_c::METHOD_RESULT_e myCreate_ExtensionMng(void *) {
145 dWarningManager_c::CreateWarningManager();
146 dWarningManager_c::addWarningForbid();
147 return sPhase_c::OK;
148}
149
150/// @unofficial
151sPhase_c::METHOD_RESULT_e myCreate_Painter(void *) {
152 dGraph_c::ms_Instance->mpPainterFunc = painter;
153 return sPhase_c::OK;
154}
155
156sPhase_c::phaseMethod myCreate_PhaseMethod[] = {
157 myCreate_WiiStrap,
158 myCreate_LogoScreen,
159 myCreate_Painter
160};
161
162/// @brief This phase is run via dScene_c::mpPhase, so before dScBoot_c::execute() is run.
163sPhase_c myCreate_InitPhase(myCreate_PhaseMethod, ARRAY_SIZE(myCreate_PhaseMethod));
164
165mDvd_callback_c *s_dvdcb;
166
167void *BootSound(void *) {
168 dAudio::boot();
169 return (void *) 1;
170}
171
172sPhase_c::METHOD_RESULT_e myReadArc_BootSound(void *) {
173 s_dvdcb = mDvd_callback_c::createOrDie(BootSound, nullptr);
174 return sPhase_c::OK;
175}
176
177sPhase_c::METHOD_RESULT_e myReadArc_Sound(void *) {
178 if (!s_dvdcb->mDone) {
179 return sPhase_c::WAIT;
180 }
181 s_dvdcb->destroy();
182 s_dvdcb = nullptr;
184 dAudio::loadSceneSnd();
185 return sPhase_c::OK;
186}
187
188sPhase_c::METHOD_RESULT_e myReadArc_resSndWait(void *thisPtr) {
189 dScBoot_c *self = (dScBoot_c *) thisPtr;
190 if (dAudio::isLoadedSceneSnd()) {
191 self->mSceneSoundLoaded = true;
192 return sPhase_c::OK;
193 }
194 return sPhase_c::WAIT;
195}
196
197sPhase_c::METHOD_RESULT_e myCreate_HbmManage(void *) {
199 if (dHbm::Manage_c::GetInstance()->Load()) {
200 res = sPhase_c::OK;
201 }
202 return res;
203}
204
205sPhase_c::METHOD_RESULT_e myReadArc_SaveBanner(void *) {
206 const char *saveBannerPath = "/EU/save_banner";
207 static const char saveBannerName[] = "save_banner"; ///< @unofficial
208 dResMng_c::m_instance->setRes(saveBannerPath, saveBannerName, nullptr);
209 return sPhase_c::OK;
210}
211
212/// @unofficial
213const char *l_env_names[] = {
214 "Env_world",
215 "Env_course",
216 "Env_movie"
217};
218
219sPhase_c::METHOD_RESULT_e myReadArc_RegRes(void *) {
220 dResMng_c::m_instance->setRes("Env", l_env_names, ARRAY_SIZE(l_env_names), nullptr);
221 return sPhase_c::OK;
222}
223
224
225sPhase_c::METHOD_RESULT_e myReadArc_resWait(void *) {
226 if (dResMng_c::m_instance->syncAllRes()) {
227 return sPhase_c::WAIT;
228 }
229 return sPhase_c::OK;
230}
231
232sPhase_c::METHOD_RESULT_e myReadArc_WipeKuppa(void *) {
233 if (dWipeKuppa_c::m_instance != nullptr && dWipeKuppa_c::m_instance->createLayout()) {
234 return sPhase_c::OK;
235 }
236 return sPhase_c::WAIT;
237}
238sPhase_c::METHOD_RESULT_e myReadArc_WipeDokan(void *) {
239 if (dWipeDokan_c::m_instance != nullptr && dWipeDokan_c::m_instance->createLayout()) {
240 return sPhase_c::OK;
241 }
242 return sPhase_c::WAIT;
243}
244sPhase_c::METHOD_RESULT_e myReadArc_WipeMario(void *) {
245 if (dWipeMario_c::m_instance != nullptr && dWipeMario_c::m_instance->createLayout()) {
246 return sPhase_c::OK;
247 }
248 return sPhase_c::WAIT;
249}
250sPhase_c::METHOD_RESULT_e myReadArc_WipeCircle(void *) {
251 if (dWipeCircle_c::m_instance != nullptr && dWipeCircle_c::m_instance->createLayout()) {
252 return sPhase_c::OK;
253 }
254 return sPhase_c::WAIT;
255}
256
257/// @unofficial
258sPhase_c::METHOD_RESULT_e myCreate_CreateYesNoWindow(void *selfPtr) {
259 dScBoot_c *self = (dScBoot_c *) selfPtr;
261 self->mpYesNoWindow = ynWindow;
262 dSelectCursor_c *selectCursor = (dSelectCursor_c *) fBase_c::createChild(fProfile::SELECT_CURSOR, self, 0, 0);
263 self->mpSelectCursor = selectCursor;
264 return sPhase_c::OK;
265}
266
267sPhase_c::METHOD_RESULT_e myReadArc_ExtensionMng(void *) {
268 if (!dWarningManager_c::m_Created) {
269 return sPhase_c::WAIT;
270 }
271 return sPhase_c::OK;
272}
273
274sPhase_c::METHOD_RESULT_e myReadArc_MakeControllerInformation(void *selfPtr) {
275 dScBoot_c *self = (dScBoot_c *) selfPtr;
277 self->mpControllerInformation = controllerInfo;
278 return sPhase_c::OK;
279}
280
281/// @unofficial
282sPhase_c::METHOD_RESULT_e myCreate_ControllerInformationReady(void *selfPtr) {
283 dScBoot_c *self = (dScBoot_c *) selfPtr;
285 return sPhase_c::WAIT;
286 }
287 return sPhase_c::OK;
288}
289
290/// @unofficial
291sPhase_c::METHOD_RESULT_e myCreate_YesNoWindowReady(void *selfPtr) {
292 dScBoot_c *self = (dScBoot_c *) selfPtr;
293 dYesNoWindow_c *ynWindow = self->mpYesNoWindow;
294 dSelectCursor_c *selectCursor = self->mpSelectCursor;
295 if (!ynWindow->mHasLoadedLayout || !selectCursor->mHasLoadedLayout) {
296 return sPhase_c::WAIT;
297 }
298 return sPhase_c::OK;
299}
300
301sPhase_c::phaseMethod myBackGround_PhaseMethod[] = {
302 myCreate_linkWaitProc,
303 dSystem::createFontManagerPhase,
304 dSystem::createMessageManagerPhase,
305 myCreate_CreateYesNoWindow,
306 myCreate_YesNoWindowReady,
307 myCreate_ExtensionMng,
308 myReadArc_ExtensionMng,
309 myCreate_HbmManage,
310 myReadArc_MakeControllerInformation,
311 myCreate_ControllerInformationReady,
312 myReadArc_BootSound,
313 myReadArc_Sound,
314 myReadArc_resSndWait,
315 myReadArc_SaveBanner,
316 myReadArc_resWait,
317 myDylinkInitPhase_0a,
318 myDylinkInitPhase_0b,
319 myDylinkInitPhase_0c,
320 myDylinkInitPhase_2a,
321 myDylinkInitPhase_2b,
322 myDylinkInitPhase_2c,
323 myDylinkInitPhase_2d,
324 myDylinkInitPhase_2e,
325 myDylinkInitPhase_3a,
326 myDylinkInitPhase_3b,
327 myReadArc_RegRes,
328 myReadArc_resWait,
329 myReadArc_WipeKuppa,
330 myReadArc_WipeDokan,
331 myReadArc_WipeMario,
332 myReadArc_WipeCircle,
333 dSystem::createEffectManagerPhase1
334};
335
336/// @brief This phase is run directly inside of dScBoot_c::execute() each frame.
337sPhase_c myBackGround_Phase(myBackGround_PhaseMethod, ARRAY_SIZE(myBackGround_PhaseMethod));
338
339STATE_DEFINE(dScBoot_c, ResetWait);
340STATE_DEFINE(dScBoot_c, ResetFadeOut);
341STATE_DEFINE(dScBoot_c, ResetFadeIn);
342
343STATE_DEFINE(dScBoot_c, FadeOutWait);
344STATE_DEFINE(dScBoot_c, WiiStrapKeyWait);
345STATE_DEFINE(dScBoot_c, WiiStrapDispEndWait);
346STATE_DEFINE(dScBoot_c, WiiStrapFadeOut);
347STATE_DEFINE(dScBoot_c, ControllerInformationFadeIn);
348STATE_DEFINE(dScBoot_c, ControllerInformationSoundWait);
349STATE_DEFINE(dScBoot_c, ControllerInformationKeyWait);
350STATE_DEFINE(dScBoot_c, ControllerInformationDispEndWait);
351STATE_DEFINE(dScBoot_c, NandCommandEndWait);
352STATE_DEFINE(dScBoot_c, ExistFileCheck);
353STATE_DEFINE(dScBoot_c, NandSpaceCheck);
354STATE_DEFINE(dScBoot_c, CreateFile);
356STATE_DEFINE(dScBoot_c, GoToErrorFadeOut);
357STATE_DEFINE(dScBoot_c, GoToErrorFadeIn);
358STATE_DEFINE(dScBoot_c, NewSaveFileDisp);
359STATE_DEFINE(dScBoot_c, ButtonInputWait);
360STATE_DEFINE(dScBoot_c, WindowExitWait);
361STATE_DEFINE(dScBoot_c, ProcEnd);
362STATE_DEFINE(dScBoot_c, ErrorWindowOnStageWait);
363STATE_DEFINE(dScBoot_c, ErrorInfinityDisp);
364
368{
369 mpPhase = &myCreate_InitPhase;
370 m_instance = this;
371}
372
374 m_instance = nullptr;
375}
376
378 dSys_c::setClearColor(nw4r::ut::Color::BLACK);
379 dSys_c::setFrameRate(1);
380 setFadeInFrame(30);
381 setFadeOutFrame(30);
382
384
385 new dResMng_c();
386 new dInfo_c();
387
388 dScStage_c::setTitleReplayRandomTable();
389 dGameCom::initGame();
390
391 mResetFadeOutStarted = false;
393
394 VIEnableDimming(true);
395
396 return SUCCEEDED;
397}
398
400 dGraph_c::ms_Instance->mpPainterFunc = nullptr;
401}
402
404 if (myBackGround_Phase.callMethod(this) != sPhase_c::DONE) {
405 return NOT_READY;
406 }
407
408 dReset::Manage_c::GetInstance()->BootComplete();
409 dRemoconMng_c::dConnect_c::m_isBoot = 0;
410 setFadeInFrame(30);
411 setFadeOutFrame(30);
412
413 if (!dDyl::Unlink(fProfile::YES_NO_WINDOW)) {
414 return NOT_READY;
415 }
416 if (!dDyl::Unlink(fProfile::CONTROLLER_INFORMATION)) {
417 return NOT_READY;
418 }
419
420 dSystem::createEffectManagerPhase2(nullptr);
421
422 return SUCCEEDED;
423}
424
427 return NOT_READY;
428 }
429 dReset::Manage_c::GetInstance()->PermitSoftReset(true);
430 return SUCCEEDED;
431}
432
434 myBackGround_Phase.callMethod(this);
435 mResetStateMgr.executeState();
436 if (!mIsResetting) {
437 mStateMgr.executeState();
438 }
439 return SUCCEEDED;
440}
441
443 return SUCCEEDED;
444}
445
446// [Unsure how one could get rid of this pragma...]
447#pragma push
448#pragma pool_data off
449
450void dScBoot_c::initializeState_ResetWait() {
451 mIsResetting = false;
452 mpWiiStrapScreen->mLayout.mpAnimGroup->setAndUpdate(0.0f);
453}
454
455void dScBoot_c::executeState_ResetWait() {
456 if (dReset::Manage_c::GetInstance()->mSoftResetStateMaybe != 1) {
457 return;
458 }
459 dHbm::Manage_c::GetInstance()->mFlags |= 0x40;
461}
462
463void dScBoot_c::finalizeState_ResetWait() {}
464
465void dScBoot_c::initializeState_ResetFadeOut() {
466 mIsResetting = true;
468 dFader_c::setFader(dFader_c::FADE);
470 mResetFaderDone = false;
471}
472
473void dScBoot_c::executeState_ResetFadeOut() {
476 return;
477 }
478 if (!mResetFaderDone && dReset::Manage_c::GetInstance()->IsFaderBlank()) {
479 mResetFaderDone = true;
480 }
482 if (mpControllerInformation != nullptr && mpControllerInformation->mIsCreated) {
483 if (dWarningManager_c::m_instance->m_b00 >= 1) {
484 dWarningManager_c::m_instance->AllWarningEnd(false);
485 }
487 // Hide the yes/no window so that it doesn't show up again after reset
488 finalizeState_ResetFadeIn();
489 mStateMgr.changeState(StateID_ProcEnd);
490 dYesNoWindow_c *ynWindow = mpYesNoWindow;
491 dSelectCursor_c::m_instance->Cancel(0);
492 ynWindow->mIsActive = false;
493 mpControllerInformation->mVisible = false;
495 } else {
497 }
498 }
499 }
500}
501
502void dScBoot_c::finalizeState_ResetFadeOut() {
503 dReset::Manage_c::GetInstance()->SetSoftResetFinish();
505 mResetFaderDone = false;
506 if (isState(StateID_WiiStrapDispEndWait)) {
507 dWarningManager_c::m_instance->AllWarningEnd(false);
508 mpControllerInformation->mVisible = true;
509 mpWiiStrapScreen->mVisible = false;
511 } else {
512 mpControllerInformation->mVisible = false;
514 }
516 mMinWaitTimer = 0;
517 }
518 mResetFadeOutStarted = false;
519}
520
521void dScBoot_c::initializeState_ResetFadeIn() {
522 dReset::Manage_c::GetInstance()->ActiveSaveWindow(true);
523 dFader_c::setFader(dFader_c::FADE);
525 mpWiiStrapScreen->mLayout.mpAnimGroup->setAndUpdate(0.0f);
526}
527
528void dScBoot_c::executeState_ResetFadeIn() {
531 }
532}
533
534void dScBoot_c::finalizeState_ResetFadeIn() {
535 m_isAutoFadeIn = true;
536 dReset::Manage_c::GetInstance()->ActiveSaveWindow(false);
537 dHbm::Manage_c::GetInstance()->mFlags &= ~0x40;
540 }
543 mMinWaitTimer = 0;
544 } else {
545 mAutoAdvanceTimer = 1200;
546 mMinWaitTimer = 60;
547 }
548 mResetFaderDone = false;
549 mIsResetting = false;
550}
551
552void dScBoot_c::initializeState_FadeOutWait() {}
553
554void dScBoot_c::executeState_FadeOutWait() {
557 }
558}
559
560void dScBoot_c::finalizeState_FadeOutWait() {}
561
562#pragma pop
563
564void dScBoot_c::initializeState_WiiStrapKeyWait() {
565 mAutoAdvanceTimer = 1200;
566 mMinWaitTimer = 60;
567 mpWiiStrapScreen->mLayout.mpAnimGroup->setAndUpdate(0.0f);
568}
569
570void dScBoot_c::executeState_WiiStrapKeyWait() {
573 if (mMinWaitTimer <= 0) {
575 }
576}
577
578void dScBoot_c::finalizeState_WiiStrapKeyWait() {}
579
580void dScBoot_c::initializeState_WiiStrapDispEndWait() {}
581
582void dScBoot_c::executeState_WiiStrapDispEndWait() {
584 ulong buttons = (
585 WPAD_BUTTON_LEFT | WPAD_BUTTON_RIGHT | WPAD_BUTTON_DOWN | WPAD_BUTTON_UP |
586 WPAD_BUTTON_A | WPAD_BUTTON_B | WPAD_BUTTON_1 | WPAD_BUTTON_2 |
587 WPAD_BUTTON_PLUS | WPAD_BUTTON_MINUS |
588 WPAD_BUTTON_FS_Z | WPAD_BUTTON_FS_C
589 );
590 if (mAutoAdvanceTimer <= 0 || mPad::g_currentCore->downTrigger(buttons) || dInfo_c::mGameFlag & 0x80000) {
592 }
593}
594
595void dScBoot_c::finalizeState_WiiStrapDispEndWait() {}
596
597void dScBoot_c::initializeState_WiiStrapFadeOut() {
599 dFader_c::setFader(dFader_c::FADE);
601 dHbm::Manage_c::GetInstance()->mFlags |= 0x40;
602 dReset::Manage_c::GetInstance()->ActiveSaveWindow(true);
603}
604
605void dScBoot_c::executeState_WiiStrapFadeOut() {
607 if (mpControllerInformation != nullptr && mpControllerInformation->mIsCreated) {
608 mpWiiStrapScreen->mVisible = false;
610 }
611 }
612}
613
614void dScBoot_c::finalizeState_WiiStrapFadeOut() {
615 dWarningManager_c::m_instance->AllWarningEnd(false);
616}
617
618void dScBoot_c::initializeState_ControllerInformationFadeIn() {
619 dFader_c::setFader(dFader_c::FADE);
621 mpControllerInformation->mVisible = true;
622}
623
624void dScBoot_c::executeState_ControllerInformationFadeIn() {
627 }
628}
629
630void dScBoot_c::finalizeState_ControllerInformationFadeIn() {
632 dHbm::Manage_c::GetInstance()->mFlags &= ~0x40;
633 dReset::Manage_c::GetInstance()->ActiveSaveWindow(false);
634 dWarningManager_c::subWarningForbid();
635}
636
637void dScBoot_c::initializeState_ControllerInformationSoundWait() {
638 dHbm::Manage_c::GetInstance()->mFlags &= ~0x08;
639 mAutoAdvanceTimer = 300;
640 mMinWaitTimer = 30;
641}
642
643void dScBoot_c::executeState_ControllerInformationSoundWait() {
644 if (mAutoAdvanceTimer > 0) {
646 }
647 if (mMinWaitTimer > 0) {
649 }
650 if (mSceneSoundLoaded) {
652 }
653}
654
655void dScBoot_c::finalizeState_ControllerInformationSoundWait() {}
656
657void dScBoot_c::initializeState_ControllerInformationKeyWait() {}
658
659void dScBoot_c::executeState_ControllerInformationKeyWait() {
660 if (mAutoAdvanceTimer > 0) {
662 }
664 if (mMinWaitTimer <= 0) {
667 }
668}
669
670void dScBoot_c::finalizeState_ControllerInformationKeyWait() {}
671
672void dScBoot_c::initializeState_ControllerInformationDispEndWait() {}
673
674void dScBoot_c::executeState_ControllerInformationDispEndWait() {
675 if (mAutoAdvanceTimer != 0) {
677 }
678 ulong buttons = (
679 WPAD_BUTTON_LEFT | WPAD_BUTTON_RIGHT | WPAD_BUTTON_DOWN | WPAD_BUTTON_UP |
680 WPAD_BUTTON_A | WPAD_BUTTON_B | WPAD_BUTTON_1 | WPAD_BUTTON_2 |
681 WPAD_BUTTON_PLUS | WPAD_BUTTON_MINUS |
682 WPAD_BUTTON_FS_Z | WPAD_BUTTON_FS_C
683 );
684 if (mPad::g_currentCore->downTrigger(buttons) || dInfo_c::mGameFlag & 0x80000) {
687 }
688 if (mAutoAdvanceTimer <= 0) {
690 }
691}
692
693void dScBoot_c::finalizeState_ControllerInformationDispEndWait() {}
694
695void dScBoot_c::initializeState_NandCommandEndWait() {}
696
697void dScBoot_c::executeState_NandCommandEndWait() {
698 if (dNandThread_c::m_instance->mState == 0) {
699 if (!dReset::Manage_c::GetInstance()->isSafetyWait()) {
701 }
702 }
703}
704
705void dScBoot_c::finalizeState_NandCommandEndWait() {}
706
707void dScBoot_c::initializeState_ExistFileCheck() {
708 dHbm::Manage_c::GetInstance()->mFlags |= 0x40;
709 dReset::Manage_c::GetInstance()->ActiveSaveWindow(true);
710 dNandThread_c::m_instance->cmdExistCheck();
711 mNewSaveFileCreated = false;
712}
713
714void dScBoot_c::finalizeState_ExistFileCheck() {}
715
716void dScBoot_c::executeState_ExistFileCheck() {
717 if (dSaveMng_c::m_instance->isNandBusy()) {
718 return;
719 }
720 if (dNandThread_c::m_instance->mError != 0) {
722 } else if (dNandThread_c::m_instance->mFileExists) {
723 mStateMgr.changeState(StateID_Load);
724 } else {
726 }
727}
728
729void dScBoot_c::initializeState_NandSpaceCheck() {
730 dNandThread_c::m_instance->cmdSpaceCheck();
731}
732
733void dScBoot_c::finalizeState_NandSpaceCheck() {}
734
735void dScBoot_c::executeState_NandSpaceCheck() {
736 if (dSaveMng_c::m_instance->isNandBusy()) {
737 return;
738 }
739 if (dNandThread_c::m_instance->mError != 0) {
741 } else {
742 const char *save_icon = "save_icon.bti";
743 const char *save_banner = "save_banner";
744 if (dResMng_c::m_instance->getRes(save_banner, save_icon).IsValid()) {
745 mStateMgr.changeState(StateID_CreateFile);
746 }
747 }
748}
749
750void dScBoot_c::initializeState_CreateFile() {
751 dSaveMng_c *saveMng = dSaveMng_c::m_instance;
752 saveMng->mHeader.initialize();
753 for (int i = 0; i < SAVE_SLOT_COUNT; i++) {
754 saveMng->getSaveGame(i)->initialize();
755 saveMng->getTempGame(i)->initialize();
756 }
757 saveMng->calcCRC();
758 saveMng->startNandSave();
759}
760
761void dScBoot_c::executeState_CreateFile() {
762 if (dSaveMng_c::m_instance->isNandBusy()) {
763 return;
764 }
765 if (dNandThread_c::m_instance->mError == 0) {
766 mNewSaveFileCreated = true;
767 }
770}
771
772void dScBoot_c::finalizeState_CreateFile() {}
773
774void dScBoot_c::initializeState_Load() {
775 dSaveMng_c::m_instance->startNandLoad();
776}
777
778void dScBoot_c::executeState_Load() {
779 if (dSaveMng_c::m_instance->isNandBusy()) {
780 return;
781 }
782 if (dNandThread_c::m_instance->mError != 0) {
784 return;
785 }
786 dHbm::Manage_c::GetInstance()->mFlags &= ~0x40;
787 dReset::Manage_c::GetInstance()->ActiveSaveWindow(false);
788 mStateMgr.changeState(StateID_ProcEnd);
789}
790
791void dScBoot_c::finalizeState_Load() {}
792
793void dScBoot_c::initializeState_ProcEnd() {}
794
795void dScBoot_c::executeState_ProcEnd() {
796 dScRestartCrsin_c::startTitle(0, false);
797}
798
799void dScBoot_c::finalizeState_ProcEnd() {}
800
801void dScBoot_c::initializeState_NewSaveFileDisp() {
802 mpYesNoWindow->mType = dYesNoWindow_c::SAVE_DATA_CREATED;
803 mpYesNoWindow->mIsActive = true;
804}
805
806void dScBoot_c::executeState_NewSaveFileDisp() {
807 if (!mpYesNoWindow->mIsAnimating) {
809 }
810}
811
812void dScBoot_c::finalizeState_NewSaveFileDisp() {
813 dReset::Manage_c::GetInstance()->ActiveSaveWindow(false);
814}
815
816void dScBoot_c::initializeState_ButtonInputWait() {
818}
819
820void dScBoot_c::executeState_ButtonInputWait() {
821 if (mPad::g_currentCore->downTrigger(WPAD_BUTTON_A | WPAD_BUTTON_2) || dInfo_c::mGameFlag & 0x80000) {
822 dReset::Manage_c::GetInstance()->ActiveSaveWindow(true);
824 }
825}
826
827void dScBoot_c::finalizeState_ButtonInputWait() {}
828
829void dScBoot_c::initializeState_WindowExitWait() {
830 mpYesNoWindow->mHitButton = true;
831}
832
833void dScBoot_c::executeState_WindowExitWait() {
834 if (!mpYesNoWindow->mIsAnimating) {
835 dHbm::Manage_c::GetInstance()->mFlags &= ~0x40;
836 dReset::Manage_c::GetInstance()->ActiveSaveWindow(false);
837 mNewSaveFileCreated = false;
838 mStateMgr.changeState(StateID_ProcEnd);
839 }
840}
841
842void dScBoot_c::finalizeState_WindowExitWait() {}
843
844void dScBoot_c::initializeState_GoToErrorFadeOut() {
846 dFader_c::setFader(dFader_c::FADE);
848 dReset::Manage_c::GetInstance()->ActiveSaveWindow(true);
849}
850
851void dScBoot_c::executeState_GoToErrorFadeOut() {
853 mpWiiStrapScreen->mVisible = false;
854 mpControllerInformation->mVisible = false;
856 }
857}
858
859void dScBoot_c::finalizeState_GoToErrorFadeOut() {}
860
861void dScBoot_c::initializeState_GoToErrorFadeIn() {
862 dFader_c::setFader(dFader_c::FADE);
864}
865
866void dScBoot_c::executeState_GoToErrorFadeIn() {
871 } else {
873 dReset::Manage_c::GetInstance()->ActiveSaveWindow(false);
875 }
876 }
877}
878
879void dScBoot_c::finalizeState_GoToErrorFadeIn() {
880 dHbm::Manage_c::GetInstance()->mFlags &= ~0x40;
881}
882
883void dScBoot_c::initializeState_ErrorWindowOnStageWait() {
884 dWarningManager_c::m_instance->setError(dNandThread_c::m_instance->mError);
885}
886
887void dScBoot_c::executeState_ErrorWindowOnStageWait() {
888 dWarningManager_c *warningMgr = dWarningManager_c::m_instance;
889 dHbm::Manage_c::GetInstance()->mFlags &= ~0x40;
890 if (warningMgr->mErrorID == 6) {
891 if (!warningMgr->m_b09) {
892 dHbm::Manage_c::GetInstance()->mFlags &= ~0x40;
894 }
895 } else if (!dWarningManager_c::isError()) {
896 dHbm::Manage_c::GetInstance()->mFlags &= ~0x40;
898 }
899}
900
901void dScBoot_c::finalizeState_ErrorWindowOnStageWait() {}
902
903void dScBoot_c::initializeState_ErrorInfinityDisp() {}
904
905void dScBoot_c::executeState_ErrorInfinityDisp() {}
906
907void dScBoot_c::finalizeState_ErrorInfinityDisp() {}
Displays the controller information screen.
bool mIsCreated
If the layout has been successfully created.
@ SHOW_IN
Playing the button pop-out animation.
@ END
Playing the button pressed sound effect and the button shrinking animation.
static bool startFadeOut(u16 duration)
Starts a fade out with the current fader.
static bool startFadeIn(u16 duration)
Starts a fade in with the current fader.
static dHbm::Manage_c * GetInstance()
Gets a pointer to the instance of this class.
static unsigned int mGameFlag
See GAME_FLAG_e.
Definition d_info.hpp:76
void initialize()
Initializes the slot data.
void initialize()
Initializes the header data.
A higher-level archive resource management class.
Definition d_res_mng.hpp:10
static dResMng_c * m_instance
The instance of this class.
Definition d_res_mng.hpp:61
static dReset::Manage_c * GetInstance()
Gets a pointer to the instance of this class.
This scene handles the game's boot process. It does the following:
Definition d_s_boot.hpp:19
dSelectCursor_c * mpSelectCursor
The select cursor instance.
Definition d_s_boot.hpp:75
virtual int create()
do method for the create operation.
Definition d_s_boot.cpp:377
sFStateMgr_c< dScBoot_c, sStateMethodUsr_FI_c > mResetStateMgr
The state manager for the ResetXXX states.
Definition d_s_boot.hpp:69
virtual void deleteReady()
Informs the base that it's about to be deleted.
Definition d_s_boot.cpp:399
virtual int doDelete()
do method for the delete operation.
Definition d_s_boot.cpp:403
bool mSceneSoundLoaded
Whether the sound (for the button press) has finished loading.
Definition d_s_boot.hpp:82
static sFStateID_c< dScBoot_c > StateID_WiiStrapFadeOut
The Wii strap screen is fading out.
Definition d_s_boot.hpp:49
static sFStateID_c< dScBoot_c > StateID_GoToErrorFadeIn
Fading in the error message.
Definition d_s_boot.hpp:60
static sFStateID_c< dScBoot_c > StateID_ButtonInputWait
Waiting for button input after creating new save data.
Definition d_s_boot.hpp:62
dScBoot_c()
Creates a new scene.
Definition d_s_boot.cpp:365
static sFStateID_c< dScBoot_c > StateID_ResetFadeOut
Fading out the game for the reset.
Definition d_s_boot.hpp:43
static sFStateID_c< dScBoot_c > StateID_ExistFileCheck
Checking for existing save data.
Definition d_s_boot.hpp:55
static sFStateID_c< dScBoot_c > StateID_CreateFile
Creating new save data.
Definition d_s_boot.hpp:57
static sFStateID_c< dScBoot_c > StateID_ControllerInformationSoundWait
Waiting for the scene sound to load.
Definition d_s_boot.hpp:51
dYesNoWindow_c * mpYesNoWindow
The yes/no window instance.
Definition d_s_boot.hpp:74
static sFStateID_c< dScBoot_c > StateID_ResetFadeIn
Fading back in after the reset.
Definition d_s_boot.hpp:44
bool mResetFaderDone
Whether the reset fade-out has completed.
Definition d_s_boot.hpp:80
int mAutoAdvanceTimer
The number of frames after which the scene will automatically advance.
Definition d_s_boot.hpp:88
dControllerInformation_c * mpControllerInformation
The controller information instance.
Definition d_s_boot.hpp:76
static sFStateID_c< dScBoot_c > StateID_FadeOutWait
Waiting for fade out to complete.
Definition d_s_boot.hpp:46
static sFStateID_c< dScBoot_c > StateID_ControllerInformationKeyWait
Forced delay before key press is accepted.
Definition d_s_boot.hpp:52
static sFStateID_c< dScBoot_c > StateID_WiiStrapDispEndWait
Waiting for key press to continue.
Definition d_s_boot.hpp:48
static sFStateID_c< dScBoot_c > StateID_ResetWait
Waiting for a reset event.
Definition d_s_boot.hpp:42
bool mNewSaveFileCreated
Whether new save data was created during boot.
Definition d_s_boot.hpp:79
bool mSaveDataCreatedMessageShown
Whether the "new save data created" message has been shown.
Definition d_s_boot.hpp:87
static sFStateID_c< dScBoot_c > StateID_GoToErrorFadeOut
Fading out to show an error message.
Definition d_s_boot.hpp:59
static sFStateID_c< dScBoot_c > StateID_ErrorInfinityDisp
Showing an irrecoverable error message.
Definition d_s_boot.hpp:66
virtual int preExecute()
pre method for the execute operation.
Definition d_s_boot.cpp:425
int mMinWaitTimer
The minimum number of frames to wait before a button may be pressed to advance the scene.
Definition d_s_boot.hpp:89
virtual int draw()
do method for the draw operation.
Definition d_s_boot.cpp:442
virtual ~dScBoot_c()
Destroys the scene.
Definition d_s_boot.cpp:373
static sFStateID_c< dScBoot_c > StateID_ErrorWindowOnStageWait
Showing an error message.
Definition d_s_boot.hpp:65
static sFStateID_c< dScBoot_c > StateID_Load
Loading existing save data.
Definition d_s_boot.hpp:58
bool mResetFadeOutStarted
Whether the reset fade-out has started.
Definition d_s_boot.hpp:86
dWiiStrapScreen_c * mpWiiStrapScreen
The Wii strap screen instance.
Definition d_s_boot.hpp:73
static sFStateID_c< dScBoot_c > StateID_NandSpaceCheck
Checking for sufficient NAND space for the save data.
Definition d_s_boot.hpp:56
virtual int execute()
do method for the execute operation.
Definition d_s_boot.cpp:433
static sFStateID_c< dScBoot_c > StateID_NewSaveFileDisp
Animating in the "new save data created" message.
Definition d_s_boot.hpp:61
static sFStateID_c< dScBoot_c > StateID_WiiStrapKeyWait
Forced delay before key press is accepted.
Definition d_s_boot.hpp:47
static sFStateID_c< dScBoot_c > StateID_ControllerInformationFadeIn
The controller information screen is fading in.
Definition d_s_boot.hpp:50
static dScBoot_c * m_instance
The singleton instance of the boot scene.
Definition d_s_boot.hpp:92
sFStateMgr_c< dScBoot_c, sStateMethodUsr_FI_c > mStateMgr
The main state manager for the boot scene.
Definition d_s_boot.hpp:68
bool mIsResetting
Whether the game is currently resetting.
Definition d_s_boot.hpp:84
static sFStateID_c< dScBoot_c > StateID_ControllerInformationDispEndWait
Waiting for key press to continue.
Definition d_s_boot.hpp:53
static sFStateID_c< dScBoot_c > StateID_ProcEnd
Going to the title screen.
Definition d_s_boot.hpp:64
static sFStateID_c< dScBoot_c > StateID_WindowExitWait
Waiting for the "save data created" window to close.
Definition d_s_boot.hpp:63
static sFStateID_c< dScBoot_c > StateID_NandCommandEndWait
Waiting for the system to be ready for a NAND command.
Definition d_s_boot.hpp:54
virtual int preExecute()
pre method for the execute operation.
Definition d_scene.cpp:77
static void setFadeInFrame(unsigned short length)
Sets the duration of the next fade-in transition to length.
Definition d_scene.cpp:184
static void setFadeOutFrame(unsigned short length)
Sets the duration of the next fade-out transition to length.
Definition d_scene.cpp:188
static bool m_isAutoFadeIn
If a fade-in should automatically be performed on scene load.
Definition d_scene.hpp:62
sPhase_c * mpPhase
The phase used for scene initialization.
Definition d_scene.hpp:52
static dWipeCircle_c * m_instance
The instance of the fader.
static dWipeDokan_c * m_instance
The instance of the fader.
static dWipeKuppa_c * m_instance
The instance of the fader.
static dWipeMario_c * m_instance
The instance of the fader.
Displays a confirmation prompt.
bool mIsActive
Whether the window is currently open.
bool mHasLoadedLayout
Whether the layout has been loaded.
static fBase_c * createChild(ProfileName profName, fBase_c *parent, unsigned long param, u8 groupType)
Creates a child base under the given parent.
Definition f_base.cpp:511
@ NOT_READY
The step could not completed at this time.
Definition f_base.hpp:44
@ SUCCEEDED
The step was completed successfully.
Definition f_base.hpp:45
@ HIDDEN
The screen is completely unblocked.
@ OPAQUE
The screen is completely blacked out.
static bool isStatus(mFaderBase_c::EStatus status)
Checks if the current fader's status matches status .
Definition m_fader.hpp:12
A phase is a list of methods to be called in order.
Definition s_Phase.hpp:5
METHOD_RESULT_e
Return value of a phase method and callMethod().
Definition s_Phase.hpp:9
@ OK
Proceed to the next method in the phase.
Definition s_Phase.hpp:11
@ WAIT
Do not proceed to the next method in the phase.
Definition s_Phase.hpp:10
@ DONE
The phase is done.
Definition s_Phase.hpp:12
void FUN_8006a6a0(bool)
#define SAVE_SLOT_COUNT
The total save slot count.
#define BASE_PROFILE(profName, className)
Creates a basic profile, using the profile number as the execute and draw order value.
Definition f_profile.hpp:23
@ CONTROLLER_INFORMATION
The profile for dControllerInformation_c.
@ YES_NO_WINDOW
The profile for dYesNoWindow_c.
void draw()
Draws all registered 2D objects.
Definition d_2d.cpp:13
void initRandomSeed()
Initializes the random seed used for randomness.
#define STATE_DEFINE(class, name)
Defines a state.
Definition s_State.hpp:36