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
118/// @unofficial
119sPhase_c::METHOD_RESULT_e myCreate_Controller(void *) {
120 if (dDyl::LinkASync(fProfile::YES_NO_WINDOW) != 1) {
121 return sPhase_c::WAIT;
122 }
123 if (dDyl::LinkASync(fProfile::CONTROLLER_INFORMATION) != 1) {
124 return sPhase_c::WAIT;
125 }
126 return sPhase_c::OK;
127}
128
129/// @unofficial
130sPhase_c::METHOD_RESULT_e myCreate_WiiStrap(void *thisPtr) {
131 dScBoot_c *self = (dScBoot_c *) thisPtr;
132 dWiiStrapScreen_c *strapScreen = (dWiiStrapScreen_c *) fBase_c::createChild(fProfile::WII_STRAP, self, 0, 0);
133 self->mpWiiStrapScreen = strapScreen;
134 return sPhase_c::OK;
135}
136
137sPhase_c::METHOD_RESULT_e myCreate_LogoScreen(void *thisPtr) {
138 dScBoot_c *self = (dScBoot_c *) thisPtr;
139 if (!self->mpWiiStrapScreen->mHasLoadedLayout) {
140 return sPhase_c::WAIT;
141 }
142 return sPhase_c::OK;
143}
144
145sPhase_c::METHOD_RESULT_e myCreate_ExtensionMng(void *) {
146 dWarningManager_c::CreateWarningManager();
147 dWarningManager_c::addWarningForbid();
148 return sPhase_c::OK;
149}
150
151/// @unofficial
152sPhase_c::METHOD_RESULT_e myCreate_Painter(void *) {
153 dGraph_c::ms_Instance->mpPainterFunc = painter;
154 return sPhase_c::OK;
155}
156
157sPhase_c::phaseMethod myCreate_PhaseMethod[] = {
158 myCreate_WiiStrap,
159 myCreate_LogoScreen,
160 myCreate_Painter
161};
162
163/// @brief This phase is run via dScene_c::mpPhase, so before dScBoot_c::execute() is run.
164sPhase_c myCreate_InitPhase(myCreate_PhaseMethod, ARRAY_SIZE(myCreate_PhaseMethod));
165
166mDvd_callback_c *s_dvdcb;
167
168void *BootSound(void *) {
169 dAudio::boot();
170 return (void *) 1;
171}
172
173sPhase_c::METHOD_RESULT_e myReadArc_BootSound(void *) {
174 s_dvdcb = mDvd_callback_c::createOrDie(BootSound, nullptr);
175 return sPhase_c::OK;
176}
177
178sPhase_c::METHOD_RESULT_e myReadArc_Sound(void *) {
179 if (!s_dvdcb->mDone) {
180 return sPhase_c::WAIT;
181 }
182 s_dvdcb->destroy();
183 s_dvdcb = nullptr;
185 dAudio::loadSceneSnd();
186 return sPhase_c::OK;
187}
188
189sPhase_c::METHOD_RESULT_e myReadArc_resSndWait(void *thisPtr) {
190 dScBoot_c *self = (dScBoot_c *) thisPtr;
191 if (dAudio::isLoadedSceneSnd()) {
192 self->mSceneSoundLoaded = true;
193 return sPhase_c::OK;
194 }
195 return sPhase_c::WAIT;
196}
197
198sPhase_c::METHOD_RESULT_e myCreate_HbmManage(void *) {
200 if (dHbm::Manage_c::GetInstance()->Load()) {
201 res = sPhase_c::OK;
202 }
203 return res;
204}
205
206sPhase_c::METHOD_RESULT_e myReadArc_SaveBanner(void *) {
207 const char *saveBannerPath = "/EU/save_banner";
208 static const char saveBannerName[] = "save_banner"; ///< @unofficial
209 dResMng_c::m_instance->setRes(saveBannerPath, saveBannerName, nullptr);
210 return sPhase_c::OK;
211}
212
213/// @unofficial
214const char *l_env_names[] = {
215 "Env_world",
216 "Env_course",
217 "Env_movie"
218};
219
220sPhase_c::METHOD_RESULT_e myReadArc_RegRes(void *) {
221 dResMng_c::m_instance->setRes("Env", l_env_names, ARRAY_SIZE(l_env_names), nullptr);
222 return sPhase_c::OK;
223}
224
225
226sPhase_c::METHOD_RESULT_e myReadArc_resWait(void *) {
227 if (dResMng_c::m_instance->mRes.syncAllRes()) {
228 return sPhase_c::WAIT;
229 }
230 return sPhase_c::OK;
231}
232
233sPhase_c::METHOD_RESULT_e myReadArc_WipeKuppa(void *) {
234 if (dWipeKuppa_c::m_instance != nullptr && dWipeKuppa_c::m_instance->createLayout()) {
235 return sPhase_c::OK;
236 }
237 return sPhase_c::WAIT;
238}
239sPhase_c::METHOD_RESULT_e myReadArc_WipeDokan(void *) {
240 if (dWipeDokan_c::m_instance != nullptr && dWipeDokan_c::m_instance->createLayout()) {
241 return sPhase_c::OK;
242 }
243 return sPhase_c::WAIT;
244}
245sPhase_c::METHOD_RESULT_e myReadArc_WipeMario(void *) {
246 if (dWipeMario_c::m_instance != nullptr && dWipeMario_c::m_instance->createLayout()) {
247 return sPhase_c::OK;
248 }
249 return sPhase_c::WAIT;
250}
251sPhase_c::METHOD_RESULT_e myReadArc_WipeCircle(void *) {
252 if (dWipeCircle_c::m_instance != nullptr && dWipeCircle_c::m_instance->createLayout()) {
253 return sPhase_c::OK;
254 }
255 return sPhase_c::WAIT;
256}
257
258/// @unofficial
259sPhase_c::METHOD_RESULT_e myCreate_CreateYesNoWindow(void *selfPtr) {
260 dScBoot_c *self = (dScBoot_c *) selfPtr;
262 self->mpYesNoWindow = ynWindow;
263 dSelectCursor_c *selectCursor = (dSelectCursor_c *) fBase_c::createChild(fProfile::SELECT_CURSOR, self, 0, 0);
264 self->mpSelectCursor = selectCursor;
265 return sPhase_c::OK;
266}
267
268sPhase_c::METHOD_RESULT_e myReadArc_ExtensionMng(void *) {
269 if (!dWarningManager_c::m_Created) {
270 return sPhase_c::WAIT;
271 }
272 return sPhase_c::OK;
273}
274
275sPhase_c::METHOD_RESULT_e myReadArc_MakeControllerInformation(void *selfPtr) {
276 dScBoot_c *self = (dScBoot_c *) selfPtr;
278 self->mpControllerInformation = controllerInfo;
279 return sPhase_c::OK;
280}
281
282/// @unofficial
283sPhase_c::METHOD_RESULT_e myCreate_ControllerInformationReady(void *selfPtr) {
284 dScBoot_c *self = (dScBoot_c *) selfPtr;
286 return sPhase_c::WAIT;
287 }
288 return sPhase_c::OK;
289}
290
291/// @unofficial
292sPhase_c::METHOD_RESULT_e myCreate_YesNoWindowReady(void *selfPtr) {
293 dScBoot_c *self = (dScBoot_c *) selfPtr;
294 dYesNoWindow_c *ynWindow = self->mpYesNoWindow;
295 dSelectCursor_c *selectCursor = self->mpSelectCursor;
296 if (!ynWindow->mHasLoadedLayout || !selectCursor->mHasLoadedLayout) {
297 return sPhase_c::WAIT;
298 }
299 return sPhase_c::OK;
300}
301
302sPhase_c::phaseMethod myBackGround_PhaseMethod[] = {
303 myCreate_Controller,
304 dSystem::createFontManagerPhase,
305 dSystem::createMessageManagerPhase,
306 myCreate_CreateYesNoWindow,
307 myCreate_YesNoWindowReady,
308 myCreate_ExtensionMng,
309 myReadArc_ExtensionMng,
310 myCreate_HbmManage,
311 myReadArc_MakeControllerInformation,
312 myCreate_ControllerInformationReady,
313 myReadArc_BootSound,
314 myReadArc_Sound,
315 myReadArc_resSndWait,
316 myReadArc_SaveBanner,
317 myReadArc_resWait,
318 myDylinkInitPhase_0a,
319 myDylinkInitPhase_0b,
320 myDylinkInitPhase_0c,
321 myDylinkInitPhase_2a,
322 myDylinkInitPhase_2b,
323 myDylinkInitPhase_2c,
324 myDylinkInitPhase_2d,
325 myDylinkInitPhase_2e,
326 myDylinkInitPhase_3a,
327 myDylinkInitPhase_3b,
328 myReadArc_RegRes,
329 myReadArc_resWait,
330 myReadArc_WipeKuppa,
331 myReadArc_WipeDokan,
332 myReadArc_WipeMario,
333 myReadArc_WipeCircle,
334 dSystem::createEffectManagerPhase1
335};
336
337/// @brief This phase is run directly inside of dScBoot_c::execute() each frame.
338sPhase_c myBackGround_Phase(myBackGround_PhaseMethod, ARRAY_SIZE(myBackGround_PhaseMethod));
339
340STATE_DEFINE(dScBoot_c, ResetWait);
341STATE_DEFINE(dScBoot_c, ResetFadeOut);
342STATE_DEFINE(dScBoot_c, ResetFadeIn);
343
344STATE_DEFINE(dScBoot_c, FadeOutWait);
345STATE_DEFINE(dScBoot_c, WiiStrapKeyWait);
346STATE_DEFINE(dScBoot_c, WiiStrapDispEndWait);
347STATE_DEFINE(dScBoot_c, WiiStrapFadeOut);
348STATE_DEFINE(dScBoot_c, ControllerInformationFadeIn);
349STATE_DEFINE(dScBoot_c, ControllerInformationSoundWait);
350STATE_DEFINE(dScBoot_c, ControllerInformationKeyWait);
351STATE_DEFINE(dScBoot_c, ControllerInformationDispEndWait);
352STATE_DEFINE(dScBoot_c, NandCommandEndWait);
353STATE_DEFINE(dScBoot_c, ExistFileCheck);
354STATE_DEFINE(dScBoot_c, NandSpaceCheck);
355STATE_DEFINE(dScBoot_c, CreateFile);
357STATE_DEFINE(dScBoot_c, GoToErrorFadeOut);
358STATE_DEFINE(dScBoot_c, GoToErrorFadeIn);
359STATE_DEFINE(dScBoot_c, NewSaveFileDisp);
360STATE_DEFINE(dScBoot_c, ButtonInputWait);
361STATE_DEFINE(dScBoot_c, WindowExitWait);
362STATE_DEFINE(dScBoot_c, ProcEnd);
363STATE_DEFINE(dScBoot_c, ErrorWindowOnStageWait);
364STATE_DEFINE(dScBoot_c, ErrorInfinityDisp);
365
369{
370 mpPhase = &myCreate_InitPhase;
371 m_instance = this;
372}
373
375 m_instance = nullptr;
376}
377
379 dSys_c::setClearColor(nw4r::ut::Color::BLACK);
380 dSys_c::setFrameRate(1);
381 setFadeInFrame(30);
382 setFadeOutFrame(30);
383
385
386 new dResMng_c();
387 new dInfo_c();
388
389 dScStage_c::setTitleReplayRandomTable();
390 dGameCom::initGame();
391
392 mResetFadeOutStarted = false;
394
395 VIEnableDimming(true);
396
397 return SUCCEEDED;
398}
399
401 dGraph_c::ms_Instance->mpPainterFunc = nullptr;
402}
403
405 if (myBackGround_Phase.callMethod(this) != sPhase_c::DONE) {
406 return NOT_READY;
407 }
408
409 dReset::Manage_c::GetInstance()->BootComplete();
410 dRemoconMng_c::dConnect_c::m_isBoot = 0;
411 setFadeInFrame(30);
412 setFadeOutFrame(30);
413
414 if (!dDyl::Unlink(fProfile::YES_NO_WINDOW)) {
415 return NOT_READY;
416 }
417 if (!dDyl::Unlink(fProfile::CONTROLLER_INFORMATION)) {
418 return NOT_READY;
419 }
420
421 dSystem::createEffectManagerPhase2(nullptr);
422
423 return SUCCEEDED;
424}
425
428 return NOT_READY;
429 }
430 dReset::Manage_c::GetInstance()->PermitSoftReset(true);
431 return SUCCEEDED;
432}
433
435 myBackGround_Phase.callMethod(this);
436 mResetStateMgr.executeState();
437 if (!mIsResetting) {
438 mStateMgr.executeState();
439 }
440 return SUCCEEDED;
441}
442
444 return SUCCEEDED;
445}
446
447// [Unsure how one could get rid of this pragma...]
448#pragma push
449#pragma pool_data off
450
451void dScBoot_c::initializeState_ResetWait() {
452 mIsResetting = false;
453 mpWiiStrapScreen->mLayout.mpAnimGroup->setAndUpdate(0.0f);
454}
455
456void dScBoot_c::executeState_ResetWait() {
457 if (dReset::Manage_c::GetInstance()->mSoftResetStateMaybe != 1) {
458 return;
459 }
460 dHbm::Manage_c::GetInstance()->mFlags |= 0x40;
462}
463
464void dScBoot_c::finalizeState_ResetWait() {}
465
466void dScBoot_c::initializeState_ResetFadeOut() {
467 mIsResetting = true;
469 dFader_c::setFader(dFader_c::FADE);
471 mResetFaderDone = false;
472}
473
474void dScBoot_c::executeState_ResetFadeOut() {
477 return;
478 }
479 if (!mResetFaderDone && dReset::Manage_c::GetInstance()->IsFaderBlank()) {
480 mResetFaderDone = true;
481 }
483 if (mpControllerInformation != nullptr && mpControllerInformation->mIsCreated) {
484 if (dWarningManager_c::m_instance->m_b00 >= 1) {
485 dWarningManager_c::m_instance->AllWarningEnd(false);
486 }
488 // Hide the yes/no window so that it doesn't show up again after reset
489 finalizeState_ResetFadeIn();
490 mStateMgr.changeState(StateID_ProcEnd);
491 dYesNoWindow_c *ynWindow = mpYesNoWindow;
492 dSelectCursor_c::m_instance->Cancel(0);
493 ynWindow->mIsActive = false;
494 mpControllerInformation->mVisible = false;
496 } else {
498 }
499 }
500 }
501}
502
503void dScBoot_c::finalizeState_ResetFadeOut() {
504 dReset::Manage_c::GetInstance()->SetSoftResetFinish();
506 mResetFaderDone = false;
507 if (isState(StateID_WiiStrapDispEndWait)) {
508 dWarningManager_c::m_instance->AllWarningEnd(false);
509 mpControllerInformation->mVisible = true;
510 mpWiiStrapScreen->mVisible = false;
512 } else {
513 mpControllerInformation->mVisible = false;
515 }
517 mMinWaitTimer = 0;
518 }
519 mResetFadeOutStarted = false;
520}
521
522void dScBoot_c::initializeState_ResetFadeIn() {
523 dReset::Manage_c::GetInstance()->ActiveSaveWindow(true);
524 dFader_c::setFader(dFader_c::FADE);
526 mpWiiStrapScreen->mLayout.mpAnimGroup->setAndUpdate(0.0f);
527}
528
529void dScBoot_c::executeState_ResetFadeIn() {
532 }
533}
534
535void dScBoot_c::finalizeState_ResetFadeIn() {
536 m_isAutoFadeIn = true;
537 dReset::Manage_c::GetInstance()->ActiveSaveWindow(false);
538 dHbm::Manage_c::GetInstance()->mFlags &= ~0x40;
541 }
544 mMinWaitTimer = 0;
545 } else {
546 mAutoAdvanceTimer = 1200;
547 mMinWaitTimer = 60;
548 }
549 mResetFaderDone = false;
550 mIsResetting = false;
551}
552
553void dScBoot_c::initializeState_FadeOutWait() {}
554
555void dScBoot_c::executeState_FadeOutWait() {
558 }
559}
560
561void dScBoot_c::finalizeState_FadeOutWait() {}
562
563#pragma pop
564
565void dScBoot_c::initializeState_WiiStrapKeyWait() {
566 mAutoAdvanceTimer = 1200;
567 mMinWaitTimer = 60;
568 mpWiiStrapScreen->mLayout.mpAnimGroup->setAndUpdate(0.0f);
569}
570
571void dScBoot_c::executeState_WiiStrapKeyWait() {
574 if (mMinWaitTimer <= 0) {
576 }
577}
578
579void dScBoot_c::finalizeState_WiiStrapKeyWait() {}
580
581void dScBoot_c::initializeState_WiiStrapDispEndWait() {}
582
583void dScBoot_c::executeState_WiiStrapDispEndWait() {
585 ulong buttons = (
586 WPAD_BUTTON_LEFT | WPAD_BUTTON_RIGHT | WPAD_BUTTON_DOWN | WPAD_BUTTON_UP |
587 WPAD_BUTTON_A | WPAD_BUTTON_B | WPAD_BUTTON_1 | WPAD_BUTTON_2 |
588 WPAD_BUTTON_PLUS | WPAD_BUTTON_MINUS |
589 WPAD_BUTTON_FS_Z | WPAD_BUTTON_FS_C
590 );
591 if (mAutoAdvanceTimer <= 0 || mPad::g_currentCore->downTrigger(buttons) || dInfo_c::mGameFlag & 0x80000) {
593 }
594}
595
596void dScBoot_c::finalizeState_WiiStrapDispEndWait() {}
597
598void dScBoot_c::initializeState_WiiStrapFadeOut() {
600 dFader_c::setFader(dFader_c::FADE);
602 dHbm::Manage_c::GetInstance()->mFlags |= 0x40;
603 dReset::Manage_c::GetInstance()->ActiveSaveWindow(true);
604}
605
606void dScBoot_c::executeState_WiiStrapFadeOut() {
608 if (mpControllerInformation != nullptr && mpControllerInformation->mIsCreated) {
609 mpWiiStrapScreen->mVisible = false;
611 }
612 }
613}
614
615void dScBoot_c::finalizeState_WiiStrapFadeOut() {
616 dWarningManager_c::m_instance->AllWarningEnd(false);
617}
618
619void dScBoot_c::initializeState_ControllerInformationFadeIn() {
620 dFader_c::setFader(dFader_c::FADE);
622 mpControllerInformation->mVisible = true;
623}
624
625void dScBoot_c::executeState_ControllerInformationFadeIn() {
628 }
629}
630
631void dScBoot_c::finalizeState_ControllerInformationFadeIn() {
633 dHbm::Manage_c::GetInstance()->mFlags &= ~0x40;
634 dReset::Manage_c::GetInstance()->ActiveSaveWindow(false);
635 dWarningManager_c::subWarningForbid();
636}
637
638void dScBoot_c::initializeState_ControllerInformationSoundWait() {
639 dHbm::Manage_c::GetInstance()->mFlags &= ~0x08;
640 mAutoAdvanceTimer = 300;
641 mMinWaitTimer = 30;
642}
643
644void dScBoot_c::executeState_ControllerInformationSoundWait() {
645 if (mAutoAdvanceTimer > 0) {
647 }
648 if (mMinWaitTimer > 0) {
650 }
651 if (mSceneSoundLoaded) {
653 }
654}
655
656void dScBoot_c::finalizeState_ControllerInformationSoundWait() {}
657
658void dScBoot_c::initializeState_ControllerInformationKeyWait() {}
659
660void dScBoot_c::executeState_ControllerInformationKeyWait() {
661 if (mAutoAdvanceTimer > 0) {
663 }
665 if (mMinWaitTimer <= 0) {
668 }
669}
670
671void dScBoot_c::finalizeState_ControllerInformationKeyWait() {}
672
673void dScBoot_c::initializeState_ControllerInformationDispEndWait() {}
674
675void dScBoot_c::executeState_ControllerInformationDispEndWait() {
676 if (mAutoAdvanceTimer != 0) {
678 }
679 ulong buttons = (
680 WPAD_BUTTON_LEFT | WPAD_BUTTON_RIGHT | WPAD_BUTTON_DOWN | WPAD_BUTTON_UP |
681 WPAD_BUTTON_A | WPAD_BUTTON_B | WPAD_BUTTON_1 | WPAD_BUTTON_2 |
682 WPAD_BUTTON_PLUS | WPAD_BUTTON_MINUS |
683 WPAD_BUTTON_FS_Z | WPAD_BUTTON_FS_C
684 );
685 if (mPad::g_currentCore->downTrigger(buttons) || dInfo_c::mGameFlag & 0x80000) {
688 }
689 if (mAutoAdvanceTimer <= 0) {
691 }
692}
693
694void dScBoot_c::finalizeState_ControllerInformationDispEndWait() {}
695
696void dScBoot_c::initializeState_NandCommandEndWait() {}
697
698void dScBoot_c::executeState_NandCommandEndWait() {
699 if (dNandThread_c::m_instance->mState == 0) {
700 if (!dReset::Manage_c::GetInstance()->isSafetyWait()) {
702 }
703 }
704}
705
706void dScBoot_c::finalizeState_NandCommandEndWait() {}
707
708void dScBoot_c::initializeState_ExistFileCheck() {
709 dHbm::Manage_c::GetInstance()->mFlags |= 0x40;
710 dReset::Manage_c::GetInstance()->ActiveSaveWindow(true);
711 dNandThread_c::m_instance->cmdExistCheck();
712 mNewSaveFileCreated = false;
713}
714
715void dScBoot_c::finalizeState_ExistFileCheck() {}
716
717void dScBoot_c::executeState_ExistFileCheck() {
718 if (dSaveMng_c::m_instance->isNandBusy()) {
719 return;
720 }
721 if (dNandThread_c::m_instance->mError != 0) {
723 } else if (dNandThread_c::m_instance->mFileExists) {
724 mStateMgr.changeState(StateID_Load);
725 } else {
727 }
728}
729
730void dScBoot_c::initializeState_NandSpaceCheck() {
731 dNandThread_c::m_instance->cmdSpaceCheck();
732}
733
734void dScBoot_c::finalizeState_NandSpaceCheck() {}
735
736void dScBoot_c::executeState_NandSpaceCheck() {
737 if (dSaveMng_c::m_instance->isNandBusy()) {
738 return;
739 }
740 if (dNandThread_c::m_instance->mError != 0) {
742 } else {
743 const char *save_icon = "save_icon.bti";
744 const char *save_banner = "save_banner";
745 if (dResMng_c::m_instance->mRes.getRes(save_banner, save_icon).IsValid()) {
746 mStateMgr.changeState(StateID_CreateFile);
747 }
748 }
749}
750
751void dScBoot_c::initializeState_CreateFile() {
752 dSaveMng_c *saveMng = dSaveMng_c::m_instance;
753 saveMng->mHeader.initialize();
754 for (int i = 0; i < SAVE_SLOT_COUNT; i++) {
755 saveMng->getSaveGame(i)->initialize();
756 saveMng->getTempGame(i)->initialize();
757 }
758 saveMng->calcCRC();
759 saveMng->startNandSave();
760}
761
762void dScBoot_c::executeState_CreateFile() {
763 if (dSaveMng_c::m_instance->isNandBusy()) {
764 return;
765 }
766 if (dNandThread_c::m_instance->mError == 0) {
767 mNewSaveFileCreated = true;
768 }
771}
772
773void dScBoot_c::finalizeState_CreateFile() {}
774
775void dScBoot_c::initializeState_Load() {
776 dSaveMng_c::m_instance->startNandLoad();
777}
778
779void dScBoot_c::executeState_Load() {
780 if (dSaveMng_c::m_instance->isNandBusy()) {
781 return;
782 }
783 if (dNandThread_c::m_instance->mError != 0) {
785 return;
786 }
787 dHbm::Manage_c::GetInstance()->mFlags &= ~0x40;
788 dReset::Manage_c::GetInstance()->ActiveSaveWindow(false);
789 mStateMgr.changeState(StateID_ProcEnd);
790}
791
792void dScBoot_c::finalizeState_Load() {}
793
794void dScBoot_c::initializeState_ProcEnd() {}
795
796void dScBoot_c::executeState_ProcEnd() {
797 dScRestartCrsin_c::startTitle(0, false);
798}
799
800void dScBoot_c::finalizeState_ProcEnd() {}
801
802void dScBoot_c::initializeState_NewSaveFileDisp() {
803 mpYesNoWindow->mType = dYesNoWindow_c::SAVE_DATA_CREATED;
804 mpYesNoWindow->mIsActive = true;
805}
806
807void dScBoot_c::executeState_NewSaveFileDisp() {
808 if (!mpYesNoWindow->mIsAnimating) {
810 }
811}
812
813void dScBoot_c::finalizeState_NewSaveFileDisp() {
814 dReset::Manage_c::GetInstance()->ActiveSaveWindow(false);
815}
816
817void dScBoot_c::initializeState_ButtonInputWait() {
819}
820
821void dScBoot_c::executeState_ButtonInputWait() {
822 if (mPad::g_currentCore->downTrigger(WPAD_BUTTON_A | WPAD_BUTTON_2) || dInfo_c::mGameFlag & 0x80000) {
823 dReset::Manage_c::GetInstance()->ActiveSaveWindow(true);
825 }
826}
827
828void dScBoot_c::finalizeState_ButtonInputWait() {}
829
830void dScBoot_c::initializeState_WindowExitWait() {
831 mpYesNoWindow->mHitButton = true;
832}
833
834void dScBoot_c::executeState_WindowExitWait() {
835 if (!mpYesNoWindow->mIsAnimating) {
836 dHbm::Manage_c::GetInstance()->mFlags &= ~0x40;
837 dReset::Manage_c::GetInstance()->ActiveSaveWindow(false);
838 mNewSaveFileCreated = false;
839 mStateMgr.changeState(StateID_ProcEnd);
840 }
841}
842
843void dScBoot_c::finalizeState_WindowExitWait() {}
844
845void dScBoot_c::initializeState_GoToErrorFadeOut() {
847 dFader_c::setFader(dFader_c::FADE);
849 dReset::Manage_c::GetInstance()->ActiveSaveWindow(true);
850}
851
852void dScBoot_c::executeState_GoToErrorFadeOut() {
854 mpWiiStrapScreen->mVisible = false;
855 mpControllerInformation->mVisible = false;
857 }
858}
859
860void dScBoot_c::finalizeState_GoToErrorFadeOut() {}
861
862void dScBoot_c::initializeState_GoToErrorFadeIn() {
863 dFader_c::setFader(dFader_c::FADE);
865}
866
867void dScBoot_c::executeState_GoToErrorFadeIn() {
872 } else {
874 dReset::Manage_c::GetInstance()->ActiveSaveWindow(false);
876 }
877 }
878}
879
880void dScBoot_c::finalizeState_GoToErrorFadeIn() {
881 dHbm::Manage_c::GetInstance()->mFlags &= ~0x40;
882}
883
884void dScBoot_c::initializeState_ErrorWindowOnStageWait() {
885 dWarningManager_c::m_instance->setError(dNandThread_c::m_instance->mError);
886}
887
888void dScBoot_c::executeState_ErrorWindowOnStageWait() {
889 dWarningManager_c *warningMgr = dWarningManager_c::m_instance;
890 dHbm::Manage_c::GetInstance()->mFlags &= ~0x40;
891 if (warningMgr->mErrorID == 6) {
892 if (!warningMgr->m_b09) {
893 dHbm::Manage_c::GetInstance()->mFlags &= ~0x40;
895 }
896 } else if (!dWarningManager_c::isError()) {
897 dHbm::Manage_c::GetInstance()->mFlags &= ~0x40;
899 }
900}
901
902void dScBoot_c::finalizeState_ErrorWindowOnStageWait() {}
903
904void dScBoot_c::initializeState_ErrorInfinityDisp() {}
905
906void dScBoot_c::executeState_ErrorInfinityDisp() {}
907
908void 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:89
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:47
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:378
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:400
virtual int doDelete()
do method for the delete operation.
Definition d_s_boot.cpp:404
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:366
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:426
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:443
virtual ~dScBoot_c()
Destroys the scene.
Definition d_s_boot.cpp:374
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:434
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:42
@ SUCCEEDED
The step was completed successfully.
Definition f_base.hpp:43
@ 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:32