diff options
| -rw-r--r-- | config/SOUE01/splits.txt | 2 | ||||
| -rw-r--r-- | config/SOUE01/symbols.txt | 108 | ||||
| -rw-r--r-- | include/d/d_sc_game.h | 9 | ||||
| -rw-r--r-- | include/d/d_stage_mgr.h | 5 | ||||
| -rw-r--r-- | include/d/lyt/d_lyt_mini_game.h | 193 | ||||
| -rw-r--r-- | include/d/lyt/meter/d_lyt_meter.h | 18 | ||||
| -rw-r--r-- | include/d/lyt/meter/d_lyt_meter_rupy.h | 3 | ||||
| -rw-r--r-- | include/toBeSorted/minigame_mgr.h | 3 | ||||
| -rw-r--r-- | src/REL/d/t/d_t_sword_battle_game.cpp | 14 | ||||
| -rw-r--r-- | src/d/d_message.cpp | 44 | ||||
| -rw-r--r-- | src/d/lyt/d_lyt_mini_game.cpp | 788 | ||||
| -rw-r--r-- | src/d/lyt/meter/d_lyt_meter.cpp | 2 |
12 files changed, 971 insertions, 218 deletions
diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index e4f60c69..aaf32c1b 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -1620,7 +1620,7 @@ d/lyt/d_lyt_mini_game.cpp: .text start:0x8028BCE0 end:0x802969E0 align:16 .rodata start:0x804EE7D8 end:0x804EEB68 .data start:0x80538E58 end:0x80539B68 - .sdata start:0x80573B90 end:0x80573BB0 + .sdata start:0x80573B88 end:0x80573BB0 .sbss start:0x80575970 end:0x80575990 .sdata2 start:0x8057C700 end:0x8057C760 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 9de06218..271f147c 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -4500,7 +4500,7 @@ executeState__85sStateMgr_c<16dLytMeterParts_c,20sStateMethodUsr_FI_c,12sFStateF isNotSilentRealmOrLoftwing__15dLytMeterMain_cFv = .text:0x800C9F20; // type:function size:0x44 fn_800C9F70__15dLytMeterMain_cFv = .text:0x800C9F70; // type:function size:0x70 fn_800C9FE0__15dLytMeterMain_cFv = .text:0x800C9FE0; // type:function size:0x60 -fn_800CA040__15dLytMeterMain_cFv = .text:0x800CA040; // type:function size:0x60 +isPopupOpen__15dLytMeterMain_cFv = .text:0x800CA040; // type:function size:0x60 setUiMode__15dLytMeterMain_cCFUs = .text:0x800CA0A0; // type:function size:0x1C getUiMode__15dLytMeterMain_cFv = .text:0x800CA0C0; // type:function size:0x38 __ct__15dLytMeterMain_cFv = .text:0x800CA100; // type:function size:0x1C0 @@ -13142,7 +13142,7 @@ checkBambooCuttingMinigameState2 = .text:0x8023BCE0; // type:function size:0x4 checkMinigameThrillDigger = .text:0x8023BCF0; // type:function size:0x4 checkMinigameThrillDigger2 = .text:0x8023BD00; // type:function size:0x8 checkFunFunIslandMinigameState = .text:0x8023BD10; // type:function size:0x4 -checkFunFunIslandMinigameState2 = .text:0x8023BD20; // type:function size:0x8 +checkInFunFunIsland__15MinigameManagerFv = .text:0x8023BD20; // type:function size:0x8 checkMinigameHouseCleaning = .text:0x8023BD30; // type:function size:0x4 checkMinigameHouseCleaning2 = .text:0x8023BD40; // type:function size:0x8 checkTrialTimeAttackMinigameState = .text:0x8023BD50; // type:function size:0x4 @@ -15254,13 +15254,13 @@ init__18dLytMiniGameBugs_cFv = .text:0x8028CB30; // type:function size:0x90 startAllIconsIn__18dLytMiniGameBugs_cFv = .text:0x8028CBC0; // type:function size:0xB8 startOut__18dLytMiniGameBugs_cFv = .text:0x8028CC80; // type:function size:0x90 startIn__18dLytMiniGameBugs_cFv = .text:0x8028CD10; // type:function size:0x8C -startOutForced__18dLytMiniGameBugs_cFv = .text:0x8028CDA0; // type:function size:0x80 +startOutTemp__18dLytMiniGameBugs_cFv = .text:0x8028CDA0; // type:function size:0x80 collectBug__18dLytMiniGameBugs_cFl = .text:0x8028CE20; // type:function size:0x150 startBugsFlash__18dLytMiniGameBugs_cFv = .text:0x8028CF70; // type:function size:0xC0 setBug__18dLytMiniGameBugs_cFll = .text:0x8028D030; // type:function size:0xE0 isSlotIconOnEndReached__18dLytMiniGameBugs_cCFl = .text:0x8028D110; // type:function size:0x48 isSlotIconOnEnabled__18dLytMiniGameBugs_cCFl = .text:0x8028D160; // type:function size:0x38 -isSlotBugCollected__18dLytMiniGameBugs_cFl = .text:0x8028D1A0; // type:function size:0x2C +isSlotBugCollected__18dLytMiniGameBugs_cCFl = .text:0x8028D1A0; // type:function size:0x2C resetBugIconsIn__18dLytMiniGameBugs_cFv = .text:0x8028D1D0; // type:function size:0xC0 resetIn__18dLytMiniGameBugs_cFv = .text:0x8028D290; // type:function size:0x80 resetOut__18dLytMiniGameBugs_cFv = .text:0x8028D310; // type:function size:0x80 @@ -15284,9 +15284,9 @@ execute__18dLytMiniGameTime_cFv = .text:0x8028DA00; // type:function size:0x224 draw__18dLytMiniGameTime_cFv = .text:0x8028DC30; // type:function size:0x48 init__18dLytMiniGameTime_cFv = .text:0x8028DC80; // type:function size:0x100 fn_8028DD80__18dLytMiniGameTime_cFv = .text:0x8028DD80; // type:function size:0xC0 -fn_8028DE40__18dLytMiniGameTime_cFv = .text:0x8028DE40; // type:function size:0x84 -fn_8028DED0__18dLytMiniGameTime_cFv = .text:0x8028DED0; // type:function size:0x100 -fn_8028DFD0__18dLytMiniGameTime_cFv = .text:0x8028DFD0; // type:function size:0xEC +startOut__18dLytMiniGameTime_cFv = .text:0x8028DE40; // type:function size:0x84 +startIn__18dLytMiniGameTime_cFv = .text:0x8028DED0; // type:function size:0x100 +startOutTemp__18dLytMiniGameTime_cFv = .text:0x8028DFD0; // type:function size:0xEC startAlphaIn__18dLytMiniGameTime_cFv = .text:0x8028E0C0; // type:function size:0xAC startAlphaOut__18dLytMiniGameTime_cFv = .text:0x8028E170; // type:function size:0x60 startFinish__18dLytMiniGameTime_cFv = .text:0x8028E1D0; // type:function size:0xC4 @@ -15356,9 +15356,9 @@ execute__19dLytMiniGameScore_cFv = .text:0x80290140; // type:function size:0x2EC draw__19dLytMiniGameScore_cFv = .text:0x80290430; // type:function size:0x48 init__19dLytMiniGameScore_cFv = .text:0x80290480; // type:function size:0xF84 fn_80291410__19dLytMiniGameScore_cFv = .text:0x80291410; // type:function size:0x1A0 -fn_802915B0__19dLytMiniGameScore_cFv = .text:0x802915B0; // type:function size:0x84 -fn_80291640__19dLytMiniGameScore_cFv = .text:0x80291640; // type:function size:0x100 -fn_80291740__19dLytMiniGameScore_cFv = .text:0x80291740; // type:function size:0xEC +startOut__19dLytMiniGameScore_cFv = .text:0x802915B0; // type:function size:0x84 +startIn__19dLytMiniGameScore_cFv = .text:0x80291640; // type:function size:0x100 +startOutTemp__19dLytMiniGameScore_cFv = .text:0x80291740; // type:function size:0xEC startAlphaIn__19dLytMiniGameScore_cFv = .text:0x80291830; // type:function size:0xD0 startAlphaOut__19dLytMiniGameScore_cFv = .text:0x80291900; // type:function size:0x60 startGetScore__19dLytMiniGameScore_cFv = .text:0x80291960; // type:function size:0xD0 @@ -15440,46 +15440,46 @@ draw__14dLytMiniGame_cFv = .text:0x802956D0; // type:function size:0x6C scoreRelatedExecute__14dLytMiniGame_cFv = .text:0x80295740; // type:function size:0x8C scoreRelated__14dLytMiniGame_cFv = .text:0x802957D0; // type:function size:0x78 setDisplayedPoints__14dLytMiniGame_cFl = .text:0x80295850; // type:function size:0xA8 -fn_80295900 = .text:0x80295900; // type:function size:0x38 -fn_80295940__14dLytMiniGame_cFv = .text:0x80295940; // type:function size:0x38 -fn_80295980__14dLytMiniGame_cFv = .text:0x80295980; // type:function size:0x98 -fn_80295A20 = .text:0x80295A20; // type:function size:0x90 -fn_80295AB0__14dLytMiniGame_cFv = .text:0x80295AB0; // type:function size:0x20 -fn_80295AD0__14dLytMiniGame_cFv = .text:0x80295AD0; // type:function size:0x20 -fn_80295AF0 = .text:0x80295AF0; // type:function size:0x2C -fn_80295B20 = .text:0x80295B20; // type:function size:0x8 -fn_80295B30 = .text:0x80295B30; // type:function size:0x8 +fn_80295900__14dLytMiniGame_cFl = .text:0x80295900; // type:function size:0x38 +startCountdown__14dLytMiniGame_cFv = .text:0x80295940; // type:function size:0x38 +startFinish__14dLytMiniGame_cFv = .text:0x80295980; // type:function size:0x98 +fn_80295A20__14dLytMiniGame_cFv = .text:0x80295A20; // type:function size:0x90 +isStartCountdownDone__14dLytMiniGame_cFv = .text:0x80295AB0; // type:function size:0x20 +isFinishAnimDone__14dLytMiniGame_cFv = .text:0x80295AD0; // type:function size:0x20 +isTimeupAnimDone__14dLytMiniGame_cFv = .text:0x80295AF0; // type:function size:0x2C +fn_80295B20__14dLytMiniGame_cFl = .text:0x80295B20; // type:function size:0x8 +fn_80295B30__14dLytMiniGame_cFl = .text:0x80295B30; // type:function size:0x8 timeRelatedExecute__14dLytMiniGame_cFv = .text:0x80295B40; // type:function size:0xA8 timeRelated__14dLytMiniGame_cFv = .text:0x80295BF0; // type:function size:0x24 setDisplayedTime__14dLytMiniGame_cFl = .text:0x80295C20; // type:function size:0x4C setHighscore__14dLytMiniGame_cFl = .text:0x80295C70; // type:function size:0x38 -fn_80295CB0__14dLytMiniGame_cFb = .text:0x80295CB0; // type:function size:0x38 -fn_80295CF0 = .text:0x80295CF0; // type:function size:0x8 -fn_80295D00 = .text:0x80295D00; // type:function size:0xC -fn_80295D10 = .text:0x80295D10; // type:function size:0xC -fn_80295D20 = .text:0x80295D20; // type:function size:0x8 -fn_80295D30 = .text:0x80295D30; // type:function size:0x8 -fn_80295D40 = .text:0x80295D40; // type:function size:0x8 -fn_80295D50 = .text:0x80295D50; // type:function size:0x8 -fn_80295D60 = .text:0x80295D60; // type:function size:0x8 -fn_80295D70 = .text:0x80295D70; // type:function size:0x8 -fn_80295D80 = .text:0x80295D80; // type:function size:0x4 -fn_80295D90 = .text:0x80295D90; // type:function size:0x4 -fn_80295DA0 = .text:0x80295DA0; // type:function size:0x8 -fn_80295DB0 = .text:0x80295DB0; // type:function size:0x60 -fn_80295E10 = .text:0x80295E10; // type:function size:0x34 -fn_80295E50 = .text:0x80295E50; // type:function size:0x54 -fn_80295EB0 = .text:0x80295EB0; // type:function size:0x54 -fn_80295F10 = .text:0x80295F10; // type:function size:0x80 -fn_80295F90 = .text:0x80295F90; // type:function size:0x70 -fn_80296000 = .text:0x80296000; // type:function size:0x6C -fn_80296070 = .text:0x80296070; // type:function size:0xE0 -fn_80296150 = .text:0x80296150; // type:function size:0xB8 -fn_80296210 = .text:0x80296210; // type:function size:0x88 -fn_802962A0 = .text:0x802962A0; // type:function size:0x88 -fn_80296330 = .text:0x80296330; // type:function size:0xA4 -fn_802963E0 = .text:0x802963E0; // type:function size:0x98 -fn_80296480 = .text:0x80296480; // type:function size:0x98 +setShowBestTime__14dLytMiniGame_cFb = .text:0x80295CB0; // type:function size:0x38 +startBugsAllIconsIn__14dLytMiniGame_cFv = .text:0x80295CF0; // type:function size:0x8 +set5Bugs__14dLytMiniGame_cFv = .text:0x80295D00; // type:function size:0xC +set10Bugs__14dLytMiniGame_cFv = .text:0x80295D10; // type:function size:0xC +reInitBugs__14dLytMiniGame_cFv = .text:0x80295D20; // type:function size:0x8 +setBug__14dLytMiniGame_cFll = .text:0x80295D30; // type:function size:0x8 +collectBug__14dLytMiniGame_cFl = .text:0x80295D40; // type:function size:0x8 +startBugsFlash__14dLytMiniGame_cFv = .text:0x80295D50; // type:function size:0x8 +isBugIconOnEndReached__14dLytMiniGame_cCFl = .text:0x80295D60; // type:function size:0x8 +isBugCollected__14dLytMiniGame_cCFl = .text:0x80295D70; // type:function size:0x8 +fn_80295D80__14dLytMiniGame_cFv = .text:0x80295D80; // type:function size:0x4 +fn_80295D90__14dLytMiniGame_cFl = .text:0x80295D90; // type:function size:0x4 +getPumpkin__14dLytMiniGame_cFRC7mVec3_clb = .text:0x80295DA0; // type:function size:0x8 +fn_80295DB0__14dLytMiniGame_cFv = .text:0x80295DB0; // type:function size:0x60 +isInEvent__14dLytMiniGame_cCFv = .text:0x80295E10; // type:function size:0x34 +isPopupOpen__14dLytMiniGame_cCFv = .text:0x80295E50; // type:function size:0x54 +isPopupOpenExceptHelp__14dLytMiniGame_cCFv = .text:0x80295EB0; // type:function size:0x54 +isFadingOut__14dLytMiniGame_cCFv = .text:0x80295F10; // type:function size:0x80 +fn_80295F90__14dLytMiniGame_cFv = .text:0x80295F90; // type:function size:0x70 +fn_80296000__14dLytMiniGame_cFv = .text:0x80296000; // type:function size:0x6C +fn_80296070__14dLytMiniGame_cFv = .text:0x80296070; // type:function size:0xE0 +fn_80296150__14dLytMiniGame_cFv = .text:0x80296150; // type:function size:0xB8 +fn_80296210__14dLytMiniGame_cFv = .text:0x80296210; // type:function size:0x88 +fn_802962A0__14dLytMiniGame_cFv = .text:0x802962A0; // type:function size:0x88 +fn_80296330__14dLytMiniGame_cFv = .text:0x80296330; // type:function size:0xA4 +fn_802963E0__14dLytMiniGame_cFv = .text:0x802963E0; // type:function size:0x98 +fn_80296480__14dLytMiniGame_cFv = .text:0x80296480; // type:function size:0x98 init__14dLytMiniGame_cFv = .text:0x80296520; // type:function size:0x58 loadData__14dLytMiniGame_cFPCcl = .text:0x80296580; // type:function size:0x130 isLoading__14dLytMiniGame_cCFPCc = .text:0x802966B0; // type:function size:0x30 @@ -36891,14 +36891,14 @@ jumptable_805399B4 = .data:0x805399B4; // type:object size:0x44 scope:local jumptable_805399F8 = .data:0x805399F8; // type:object size:0x38 scope:local jumptable_80539A30 = .data:0x80539A30; // type:object size:0x38 scope:local jumptable_80539A68 = .data:0x80539A68; // type:object size:0x34 scope:local -LytMiniGame__vtable = .data:0x80539A9C; // type:object size:0x4C -lbl_80539AE8 = .data:0x80539AE8; // type:object size:0xC -lbl_80539AF4 = .data:0x80539AF4; // type:object size:0xC -lbl_80539B00 = .data:0x80539B00; // type:object size:0xC -lbl_80539B0C = .data:0x80539B0C; // type:object size:0xC -lbl_80539B18 = .data:0x80539B18; // type:object size:0xC -lbl_80539B24 = .data:0x80539B24; // type:object size:0xC -lbl_80539B30 = .data:0x80539B30; // type:object size:0x38 +__vt__14dLytMiniGame_c = .data:0x80539A9C; // type:object size:0x4C +__vt__21dLytMiniGameScoreSd_c = .data:0x80539AE8; // type:object size:0xC +__vt__19dLytMiniGameScore_c = .data:0x80539AF4; // type:object size:0xC +__vt__19dLytMiniGameStart_c = .data:0x80539B00; // type:object size:0xC +__vt__18dLytMiniGameTime_c = .data:0x80539B0C; // type:object size:0xC +__vt__18dLytMiniGameBugs_c = .data:0x80539B18; // type:object size:0xC +__vt__21dLytMiniGamePumpkin_c = .data:0x80539B24; // type:object size:0xC +__vt__26dLytMiniGamePumpkinParts_c = .data:0x80539B30; // type:object size:0xC lbl_80539B68 = .data:0x80539B68; // type:object size:0x1C data:string lbl_80539B84 = .data:0x80539B84; // type:object size:0xE data:string lbl_80539B94 = .data:0x80539B94; // type:object size:0x23 data:string diff --git a/include/d/d_sc_game.h b/include/d/d_sc_game.h index d1a905b7..b1ba5573 100644 --- a/include/d/d_sc_game.h +++ b/include/d/d_sc_game.h @@ -11,6 +11,7 @@ #include "f/f_profile_name.h" #include "m/m2d.h" #include "m/m_angle.h" +#include "m/m_fader_base.h" #include "m/m_vec.h" #include "s/s_FPhase.h" #include "s/s_State.hpp" @@ -210,6 +211,14 @@ public: return mFader.isSettled(); } + bool isFadingOut() const { + return mFader.isStatus(mFaderBase_c::FADING_OUT); + } + + bool isFadingIn() const { + return mFader.isStatus(mFaderBase_c::FADING_IN); + } + f32 targetingScreenFn_801BBEC0() const { return mScreen1.fn_801BBEC0(); } diff --git a/include/d/d_stage_mgr.h b/include/d/d_stage_mgr.h index f7a00405..de4d0b47 100644 --- a/include/d/d_stage_mgr.h +++ b/include/d/d_stage_mgr.h @@ -11,6 +11,7 @@ #include "egg/gfx/eggScreen.h" #include "m/m_allocator.h" #include "m/m_dvd.h" +#include "m/m_fader_base.h" #include "nw4r/g3d/g3d_camera.h" #include "s/s_FPhase.h" #include "s/s_State.hpp" @@ -176,6 +177,10 @@ public: return mFader.isSettled(); } + bool isFadingOut() const { + return mFader.isStatus(mFaderBase_c::FADING_OUT); + } + bool isInLastBoss() const { return mIsInLastBoss; } diff --git a/include/d/lyt/d_lyt_mini_game.h b/include/d/lyt/d_lyt_mini_game.h index 6ec7bc2d..b8dfb374 100644 --- a/include/d/lyt/d_lyt_mini_game.h +++ b/include/d/lyt/d_lyt_mini_game.h @@ -99,17 +99,22 @@ public: ELDIN_ROLLER, }; -private: void startAllIconsIn(); - void startOut(); - void startIn(); - void startOutForced(); + void setBugsNumLevel(u8 level) { + mBugsNumLevel = level; + } + void setBug(s32 slot, s32 bugIndex); void collectBug(s32 slot); void startBugsFlash(); - void setBug(s32 slot, s32 bugIndex); bool isSlotIconOnEndReached(s32 slot) const; + bool isSlotBugCollected(s32 slot) const; + + void startOut(); + void startIn(); + void startOutTemp(); + +private: bool isSlotIconOnEnabled(s32 slot) const; - bool isSlotBugCollected(s32 slot); void resetBugIconsIn(); void resetIn(); void resetOut(); @@ -147,12 +152,12 @@ private: class dLytMiniGameTime_c { public: enum Variant_e { - TIME_VARIANT_0, - TIME_VARIANT_1, - TIME_VARIANT_2, - TIME_VARIANT_3, - TIME_VARIANT_4, - TIME_VARIANT_5, + TIME_VARIANT_INSECT_CAPTURE, + TIME_VARIANT_SPIRAL_CHARGE_TUTORIAL, + TIME_VARIANT_PUMPKIN_ARCHERY, + TIME_VARIANT_ROLLERCOASTER, + TIME_VARIANT_BOSS_RUSH, + TIME_VARIANT_TRIAL_TIME_ATTACK, }; public: @@ -185,27 +190,29 @@ public: field_0x7EE = v; } + void fn_8028DD80(); + void startOut(); + void startIn(); + void startOutTemp(); + void startFinish(); + void startAlphaIn(); + void startAlphaOut(); + + void setTimerValueInMilliSeconds(s32 time); + void setTimerSecondsValueInMilliSeconds(s32 time); + void setBestTime(s32 time); + void setShowBestTime(bool show); + private: enum TimeFormat_e { TIMER_LONG, TIMER_SECONDS, }; - void fn_8028DD80(); - void fn_8028DE40(); - void fn_8028DED0(); - void fn_8028DFD0(); - void startAlphaIn(); - void startAlphaOut(); - void startFinish(); void startLoop(); - void setTimerValueInMilliSeconds(s32 time); void updateLongTimer(); - void setTimerSecondsValueInMilliSeconds(s32 time); void updateSecondsTimer(); void saveSecondsTimer(); - void setBestTime(s32 time); - void setShowBestTime(bool show); void resetIn(); void resetOut(); void resetAlphaIn(); @@ -264,7 +271,6 @@ public: bool draw(); void init(); -private: void startCountdown(); void startCountdown120(); void startFinish(); @@ -272,6 +278,8 @@ private: bool isCountdownEndReached() const; bool isFinishEndReached() const; bool isTimeupEndReached() const; + +private: void resetPlayedSounds(); void resetCountdown(); void resetFinish(); @@ -298,11 +306,11 @@ private: class dLytMiniGameScore_c { public: enum Variant_e { - SCORE_VARIANT_0, - SCORE_VARIANT_1, - SCORE_VARIANT_2, - SCORE_VARIANT_3, - SCORE_VARIANT_4, + SCORE_VARIANT_BAMBOO_CUTTING, + SCORE_VARIANT_FUN_FUN_ISLAND, + SCORE_VARIANT_THRILL_DIGGER, + SCORE_VARIANT_PUMPKIN_ARCHERY, + SCORE_VARIANT_SPIRAL_CHARGE_TUTORIAL, }; public: @@ -325,7 +333,7 @@ public: field_0x814(false), field_0x815(false), field_0x816(false), - mVariant(SCORE_VARIANT_0), + mVariant(SCORE_VARIANT_BAMBOO_CUTTING), field_0x81C(0), field_0x820(false), field_0x824(0), @@ -350,22 +358,31 @@ public: field_0x816 = v; } -private: + void setField_0x828(bool v) { + field_0x828 = v; + } + + s32 getScore() const { + return mScore; + } + + void startIn(); + void startOut(); + void startOutTemp(); + void setScore(s32 score); void fn_80291410(); - void fn_802915B0(); - void fn_80291640(); - void fn_80291740(); void startAlphaIn(); void startAlphaOut(); - void startGetScore(); + void fn_80291D40(s32 score); + void fn_80291ED0(s32); void startFinish(); + +private: + void startGetScore(); void startLoop(); - void setScore(s32 score); void fn_80291BC0(); - void fn_80291D40(s32 arg); bool hasIncreasedScore() const; bool hasDecreasedScore() const; - void fn_80291ED0(s32); void fn_80291EF0(); void increaseScore(s32); void fn_80292040(); @@ -455,11 +472,12 @@ public: bool draw(); void init(); + void setScoreUp(s32 score); + void setScoreDown(s32 score); + private: static dLytMiniGameScoreSd_c *sInstance; - void setScoreUp(s32 score); - void setScoreDown(s32 score); void setScoreInternal(s32 score); void setHighestDigitIndex(s32); void setDigit(s32 digitIndex, s32 number); @@ -485,15 +503,18 @@ class dLytMiniGame_c : public dBase_c { public: enum Variant_e { VARIANT_0, - VARIANT_1, - VARIANT_2, - VARIANT_3, - VARIANT_4, - VARIANT_5, - VARIANT_6, - VARIANT_7, - VARIANT_8, - VARIANT_9, + VARIANT_BAMBOO_CUTTING, + VARIANT_FUN_FUN_ISLAND, + VARIANT_THRILL_DIGGER, + VARIANT_INSECT_CAPTURE, + VARIANT_SPIRAL_CHARGE_TUTORIAL, + VARIANT_PUMPKIN_ARCHERY, + VARIANT_ROLLERCOASTER, + VARIANT_BOSS_RUSH, + VARIANT_TRIAL_TIME_ATTACK, + // These are created by dFlow_c and correspond to above entries. + // They also cause things to behave a bit differently. What is the purpose + // of these special variants? VARIANT_10, VARIANT_11, VARIANT_12, @@ -515,12 +536,12 @@ private: public: dLytMiniGame_c() - : field_0x0068(0), - field_0x0069(0), - field_0x006A(0), - field_0x006B(0), - field_0x006C(0), - field_0x006D(0), + : field_0x0068(false), + field_0x0069(false), + field_0x006A(false), + field_0x006B(false), + field_0x006C(false), + field_0x006D(false), mVariant(1), field_0x3864(0), field_0x3865(0), @@ -539,28 +560,35 @@ public: } /** Updates some window */ - void fn_80295940(); + void startCountdown(); /** ??? */ - void fn_80295980(); + void startFinish(); + void fn_80295A20(); /** Checks to see if in BAMBOO_CUTTING .. BOSS_RUSH and returns some boolean (start?) */ - bool fn_80295AB0(); + bool isStartCountdownDone(); /** Checks to see if in BAMBOO_CUTTING .. BOSS_RUSH and returns some boolean (end?) */ - bool fn_80295AD0(); + bool isFinishAnimDone(); + bool isTimeupAnimDone(); + + void fn_80295B20(s32); + void fn_80295B30(s32); void setHighscore(s32 time); /** GUESS: sets the start for the high score? */ - void fn_80295CB0(bool); + void setShowBestTime(bool); void timeRelatedExecute(); void scoreRelatedExecute(); void setDisplayedTime(s32 time); - void setDisplayedPoints(s32 time); + void setDisplayedPoints(s32 points); void timeRelated(); void scoreRelated(); + void fn_80295900(s32); + /** GUESS: Assumption based on function caller */ void setComplete() { field_0x3866 = true; @@ -573,16 +601,45 @@ private: bool loadData(const char *name, s32 slot); void unloadData(const char *name); void attachLoadedData(const char *name, d2d::ResAccIf_c &resAcc); - void init(); - /* 0x0068 */ u8 field_0x0068; - /* 0x0069 */ u8 field_0x0069; - /* 0x006A */ u8 field_0x006A; - /* 0x006B */ u8 field_0x006B; - /* 0x006C */ u8 field_0x006C; - /* 0x006D */ u8 field_0x006D; + void startBugsAllIconsIn(); + void set5Bugs(); + void set10Bugs(); + void reInitBugs(); + void setBug(s32 slot, s32 bugIndex); + void collectBug(s32 slot); + void startBugsFlash(); + bool isBugIconOnEndReached(s32 slot) const; + bool isBugCollected(s32 slot) const; + void fn_80295D80(); + void fn_80295D90(s32 points); + void getPumpkin(const mVec3_c &pumpkinPos, s32 unk, bool doubleScore); + bool fn_80295DB0(); + bool isInEvent() const; + bool isPopupOpen() const; + bool isPopupOpenExceptHelp() const; + bool isFadingOut() const; + + void fn_80295F90(); + void fn_80296000(); + void fn_80296070(); + void fn_80296150(); + void fn_80296210(); + void fn_802962A0(); + void fn_80296330(); + + // These two do the same thing + void fn_802963E0(); + void fn_80296480(); + + /* 0x0068 */ bool field_0x0068; + /* 0x0069 */ bool field_0x0069; + /* 0x006A */ bool field_0x006A; + /* 0x006B */ bool field_0x006B; + /* 0x006C */ bool field_0x006C; + /* 0x006D */ bool field_0x006D; /* 0x0070 */ d2d::ResAccIf_c mResAccStart; /* 0x03E0 */ d2d::ResAccIf_c mResAccScore; diff --git a/include/d/lyt/meter/d_lyt_meter.h b/include/d/lyt/meter/d_lyt_meter.h index 48fef6cb..8c6dfc28 100644 --- a/include/d/lyt/meter/d_lyt_meter.h +++ b/include/d/lyt/meter/d_lyt_meter.h @@ -93,7 +93,7 @@ public: bool fn_800C9F70(); bool fn_800C9FE0(); - bool fn_800CA040(); + bool isPopupOpen(); bool isInMapEvent(); bool fn_800D5380(u8); @@ -402,6 +402,14 @@ public: } } + static s32 getRupeeDifference() { + if (sInstance != nullptr) { + return sInstance->mMain.mRupy.getRupeeDifference(); + } else { + return 0; + } + } + static void setField_0x13B61(u8 val) { if (sInstance != nullptr) { sInstance->field_0x13B61 = val; @@ -452,6 +460,14 @@ public: } } + static bool isPopupOpen() { + if (sInstance != nullptr) { + return sInstance->mMain.isPopupOpen(); + } else { + return false; + } + } + static bool getfn_800D97A0() { if (sInstance != nullptr) { return sInstance->fn_800D97A0(); diff --git a/include/d/lyt/meter/d_lyt_meter_rupy.h b/include/d/lyt/meter/d_lyt_meter_rupy.h index 65b04517..d295d749 100644 --- a/include/d/lyt/meter/d_lyt_meter_rupy.h +++ b/include/d/lyt/meter/d_lyt_meter_rupy.h @@ -117,10 +117,11 @@ public: mSize = size; } + s32 getRupeeDifference() const; + private: bool updateDisplayedAmount(bool suppressSound); bool hasChangeInRupees() const; - s32 getRupeeDifference() const; void setDigit(s32 index, s32 digit); void executeDigitJump(); void executeDigitBlink(s32 amount); diff --git a/include/toBeSorted/minigame_mgr.h b/include/toBeSorted/minigame_mgr.h index 10bb4be3..941d3ed6 100644 --- a/include/toBeSorted/minigame_mgr.h +++ b/include/toBeSorted/minigame_mgr.h @@ -34,6 +34,9 @@ public: static bool checkInBossRush() { return isInMinigameState(BOSS_RUSH); } + static bool checkInFunFunIsland() { + return isInMinigameState(FUN_FUN_ISLAND); + } private: MinigameManager() {} diff --git a/src/REL/d/t/d_t_sword_battle_game.cpp b/src/REL/d/t/d_t_sword_battle_game.cpp index 5cb2f84a..a5555a1c 100644 --- a/src/REL/d/t/d_t_sword_battle_game.cpp +++ b/src/REL/d/t/d_t_sword_battle_game.cpp @@ -68,12 +68,12 @@ int dTgSwordBattleGame_c::actorExecuteInEvent() { } break; case 'cndn': { if (advance) { - dLytMiniGame_c::GetInstance()->fn_80295940(); + dLytMiniGame_c::GetInstance()->startCountdown(); - } else if (dLytMiniGame_c::GetInstance()->fn_80295AB0()) { + } else if (dLytMiniGame_c::GetInstance()->isStartCountdownDone()) { dLytMiniGame_c::GetInstance()->timeRelatedExecute(); dLytMiniGame_c::GetInstance()->setHighscore(getBossHighscore()); - dLytMiniGame_c::GetInstance()->fn_80295CB0(true); + dLytMiniGame_c::GetInstance()->setShowBestTime(true); mTimer.initUpCounter(); field_0x1A8 = true; field_0x1AC = true; @@ -83,8 +83,8 @@ int dTgSwordBattleGame_c::actorExecuteInEvent() { } break; case 'fnsh': { if (advance) { - dLytMiniGame_c::GetInstance()->fn_80295980(); - } else if (dLytMiniGame_c::GetInstance()->fn_80295AD0()) { + dLytMiniGame_c::GetInstance()->startFinish(); + } else if (dLytMiniGame_c::GetInstance()->isFinishAnimDone()) { mEventRelated.advanceNext(); } ret = SUCCEEDED; @@ -112,7 +112,7 @@ int dTgSwordBattleGame_c::actorExecuteInEvent() { setInBossRushFlag(); setCurrentBossNumber(mBossNumber + 1); if (MinigameManager::endMinigame(MinigameManager::BOSS_RUSH)) { - dLytMiniGame_c::GetInstance()->fn_80295980(); + dLytMiniGame_c::GetInstance()->startFinish(); dLytMiniGame_c::GetInstance()->timeRelated(); } } @@ -163,7 +163,7 @@ void dTgSwordBattleGame_c::finalizeState_Manage() {} void dTgSwordBattleGame_c::init() { if (MinigameManager::GetInstance()->checkInBossRush()) { - createBase(fProfile::LYT_MINI_GAME, this, 8, OTHER); + createBase(fProfile::LYT_MINI_GAME, this, dLytMiniGame_c::VARIANT_BOSS_RUSH, OTHER); } mTimer.vt_0x0C(); diff --git a/src/d/d_message.cpp b/src/d/d_message.cpp index a031544e..7a3e7574 100644 --- a/src/d/d_message.cpp +++ b/src/d/d_message.cpp @@ -437,9 +437,7 @@ bool dFlow_c::handleEventInternal(const MsbFlowInfo *element) { dMessage_c::getInstance()->setInMapEvent(true); dMessage_c::getInstance()->clearLightPillarRelatedArgs(); if (dLytControlGame_c::getInstance()->isStateNotNormalOrInEvent()) { - dLytControlGame_c::getInstance()->openMapEvent( - mapEvent, arg1, arg2 - ); + dLytControlGame_c::getInstance()->openMapEvent(mapEvent, arg1, arg2); } } else { dLytMap_c::GetInstance()->queueMapEvent(mapEvent, arg1, arg2); @@ -1196,28 +1194,52 @@ void dFlow_c::createLytMiniGame() { if (dLytMiniGame_c::GetInstance() == nullptr) { switch (dMessage_c::getInstance()->getMiniGameVariant()) { case 0: - dBase_c::createBase(fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), 11, fBase_c::OTHER); + dBase_c::createBase( + fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), dLytMiniGame_c::VARIANT_11, + fBase_c::OTHER + ); break; case 1: - dBase_c::createBase(fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), 10, fBase_c::OTHER); + dBase_c::createBase( + fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), dLytMiniGame_c::VARIANT_10, + fBase_c::OTHER + ); break; case 2: - dBase_c::createBase(fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), 12, fBase_c::OTHER); + dBase_c::createBase( + fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), dLytMiniGame_c::VARIANT_12, + fBase_c::OTHER + ); break; case 3: - dBase_c::createBase(fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), 14, fBase_c::OTHER); + dBase_c::createBase( + fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), dLytMiniGame_c::VARIANT_14, + fBase_c::OTHER + ); break; case 4: - dBase_c::createBase(fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), 13, fBase_c::OTHER); + dBase_c::createBase( + fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), dLytMiniGame_c::VARIANT_13, + fBase_c::OTHER + ); break; case 5: - dBase_c::createBase(fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), 2, fBase_c::OTHER); + dBase_c::createBase( + fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), dLytMiniGame_c::VARIANT_FUN_FUN_ISLAND, + fBase_c::OTHER + ); break; case 6: - dBase_c::createBase(fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), 16, fBase_c::OTHER); + dBase_c::createBase( + fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), dLytMiniGame_c::VARIANT_16, + fBase_c::OTHER + ); break; case 7: - dBase_c::createBase(fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), 15, fBase_c::OTHER); + dBase_c::createBase( + fProfile::LYT_MINI_GAME, dLytControlGame_c::getInstance(), dLytMiniGame_c::VARIANT_15, + fBase_c::OTHER + ); break; } } diff --git a/src/d/lyt/d_lyt_mini_game.cpp b/src/d/lyt/d_lyt_mini_game.cpp index 2fdeb81f..11f79c97 100644 --- a/src/d/lyt/d_lyt_mini_game.cpp +++ b/src/d/lyt/d_lyt_mini_game.cpp @@ -5,7 +5,11 @@ #include "d/a/d_a_itembase.h" #include "d/d_lang.h" #include "d/d_message.h" +#include "d/d_rawarchive.h" +#include "d/d_sc_game.h" +#include "d/d_stage_mgr.h" #include "d/lyt/d2d.h" +#include "d/lyt/meter/d_lyt_meter.h" #include "d/snd/d_snd_small_effect_mgr.h" #include "d/snd/d_snd_wzsound.h" #include "f/f_base.h" @@ -14,7 +18,18 @@ #include "nw4r/lyt/lyt_types.h" #include "nw4r/math/math_arithmetic.h" #include "nw4r/math/math_types.h" +#include "toBeSorted/arc_managers/layout_arc_manager.h" #include "toBeSorted/d_d3d.h" +#include "toBeSorted/event_manager.h" +#include "toBeSorted/minigame_mgr.h" + +dLytMiniGamePumpkin_c *dLytMiniGamePumpkin_c::sInstance; +dLytMiniGameBugs_c *dLytMiniGameBugs_c::sInstance; +dLytMiniGameTime_c *dLytMiniGameTime_c::sInstance; +dLytMiniGameStart_c *dLytMiniGameStart_c::sInstance; +dLytMiniGameScore_c *dLytMiniGameScore_c::sInstance; +dLytMiniGameScoreSd_c *dLytMiniGameScoreSd_c::sInstance; +dLytMiniGame_c *dLytMiniGame_c::sInstance; static const d2d::LytBrlanMapping brlanMapPumpkin[] = { { "miniGamePumpkin_00_getPoint.brlan", "G_scoreAll_00"}, @@ -472,7 +487,7 @@ void dLytMiniGameBugs_c::startIn() { } } -void dLytMiniGameBugs_c::startOutForced() { +void dLytMiniGameBugs_c::startOutTemp() { if (sInstance == nullptr) { return; } @@ -574,7 +589,7 @@ bool dLytMiniGameBugs_c::isSlotIconOnEnabled(s32 slot) const { return mAnm[idx].isEnabled_(); } -bool dLytMiniGameBugs_c::isSlotBugCollected(s32 slot) { +bool dLytMiniGameBugs_c::isSlotBugCollected(s32 slot) const { if (sInstance == nullptr) { return false; } @@ -873,7 +888,7 @@ bool dLytMiniGameTime_c::execute() { saveSecondsTimer(); } - if (mVariant == TIME_VARIANT_0) { + if (mVariant == TIME_VARIANT_INSECT_CAPTURE) { if (mCurrentTimerValueSeconds >= 590 && mLastTimerValueSeconds != mCurrentTimerValueSeconds && mCurrentTimerValueSeconds != 600) { dSndSmallEffectMgr_c::GetInstance()->playMinigameTimeUpSound(600 - mCurrentTimerValueSeconds); @@ -900,12 +915,12 @@ void dLytMiniGameTime_c::init() { } switch (mVariant) { - case TIME_VARIANT_0: mTimeFormat = TIMER_LONG; break; - case TIME_VARIANT_1: mTimeFormat = TIMER_SECONDS; break; - case TIME_VARIANT_2: mTimeFormat = TIMER_SECONDS; break; - case TIME_VARIANT_3: mTimeFormat = TIMER_LONG; break; - case TIME_VARIANT_4: mTimeFormat = TIMER_LONG; break; - case TIME_VARIANT_5: mTimeFormat = TIMER_LONG; break; + case TIME_VARIANT_INSECT_CAPTURE: mTimeFormat = TIMER_LONG; break; + case TIME_VARIANT_SPIRAL_CHARGE_TUTORIAL: mTimeFormat = TIMER_SECONDS; break; + case TIME_VARIANT_PUMPKIN_ARCHERY: mTimeFormat = TIMER_SECONDS; break; + case TIME_VARIANT_ROLLERCOASTER: mTimeFormat = TIMER_LONG; break; + case TIME_VARIANT_BOSS_RUSH: mTimeFormat = TIMER_LONG; break; + case TIME_VARIANT_TRIAL_TIME_ATTACK: mTimeFormat = TIMER_LONG; break; } resetAlphaIn(); @@ -944,7 +959,7 @@ void dLytMiniGameTime_c::fn_8028DD80() { mIsVisible = true; } -void dLytMiniGameTime_c::fn_8028DE40() { +void dLytMiniGameTime_c::startOut() { if (sInstance == nullptr) { return; } @@ -958,7 +973,7 @@ void dLytMiniGameTime_c::fn_8028DE40() { } } -void dLytMiniGameTime_c::fn_8028DED0() { +void dLytMiniGameTime_c::startIn() { if (sInstance == nullptr) { return; } @@ -987,7 +1002,7 @@ void dLytMiniGameTime_c::fn_8028DED0() { } } -void dLytMiniGameTime_c::fn_8028DFD0() { +void dLytMiniGameTime_c::startOutTemp() { if (sInstance == nullptr) { return; } @@ -1563,7 +1578,7 @@ bool dLytMiniGameStart_c::execute() { } if (isTimeupEndReached()) { - stopFinish(); + stopTimeup(); resetPlayedSounds(); mIsVisible = false; } @@ -1906,12 +1921,12 @@ bool dLytMiniGameScore_c::execute() { fn_80291BC0(); if (!field_0x816) { switch (mVariant) { - case SCORE_VARIANT_0: + case SCORE_VARIANT_BAMBOO_CUTTING: if (hasIncreasedScore()) { startGetScore(); } break; - case SCORE_VARIANT_2: + case SCORE_VARIANT_THRILL_DIGGER: if (field_0x829) { if (hasIncreasedScore()) { startGetScore(); @@ -1924,15 +1939,15 @@ bool dLytMiniGameScore_c::execute() { field_0x829 = false; } break; - case SCORE_VARIANT_1: + case SCORE_VARIANT_FUN_FUN_ISLAND: if (mScore != 1) { if (hasIncreasedScore()) { startGetScore(); } } break; - case SCORE_VARIANT_3: - case SCORE_VARIANT_4: + case SCORE_VARIANT_PUMPKIN_ARCHERY: + case SCORE_VARIANT_SPIRAL_CHARGE_TUTORIAL: if (hasIncreasedScore()) { startGetScore(); } @@ -1986,7 +2001,7 @@ bool dLytMiniGameScore_c::execute() { mLyt.calc(); } - if (!field_0x816 && mVariant == SCORE_VARIANT_0 && hasIncreasedScore()) { + if (!field_0x816 && mVariant == SCORE_VARIANT_BAMBOO_CUTTING && hasIncreasedScore()) { dSndSmallEffectMgr_c::GetInstance()->playMinigameScoreUpSound(mScore); } @@ -2052,7 +2067,7 @@ void dLytMiniGameScore_c::init() { mAnm[SCORE_ANIM_IN].setAnimEnable(false); switch (mVariant) { - case SCORE_VARIANT_0: + case SCORE_VARIANT_BAMBOO_CUTTING: field_0x82C = 0; field_0x81C = 21; field_0x7E4 = 4; @@ -2088,7 +2103,7 @@ void dLytMiniGameScore_c::init() { fn_80293450(field_0x81C); break; - case SCORE_VARIANT_1: + case SCORE_VARIANT_FUN_FUN_ISLAND: field_0x830 = 0; field_0x82C = 0; field_0x81C = 11; @@ -2149,7 +2164,7 @@ void dLytMiniGameScore_c::init() { } fn_80293450(field_0x81C); break; - case SCORE_VARIANT_2: + case SCORE_VARIANT_THRILL_DIGGER: field_0x830 = 0; field_0x82C = 0; field_0x81C = 6; @@ -2168,7 +2183,7 @@ void dLytMiniGameScore_c::init() { fn_80293450(field_0x81C); break; - case SCORE_VARIANT_3: + case SCORE_VARIANT_PUMPKIN_ARCHERY: field_0x82C = 0; field_0x81C = 21; field_0x7E4 = 4; @@ -2204,7 +2219,7 @@ void dLytMiniGameScore_c::init() { fn_80293450(field_0x81C); break; - case SCORE_VARIANT_4: + case SCORE_VARIANT_SPIRAL_CHARGE_TUTORIAL: field_0x830 = 0; field_0x82C = 0; field_0x81C = 19; @@ -2266,7 +2281,7 @@ void dLytMiniGameScore_c::fn_80291410() { field_0x820 = true; mIsVisible = true; - if (mVariant == SCORE_VARIANT_1) { + if (mVariant == SCORE_VARIANT_FUN_FUN_ISLAND) { setScore(1); calcNumDigits(); mAnm[SCORE_ANIM_SET_POSITION].setFrame(field_0x81C); @@ -2283,7 +2298,7 @@ void dLytMiniGameScore_c::fn_80291410() { } } -void dLytMiniGameScore_c::fn_802915B0() { +void dLytMiniGameScore_c::startOut() { if (sInstance == nullptr) { return; } @@ -2297,7 +2312,7 @@ void dLytMiniGameScore_c::fn_802915B0() { } } -void dLytMiniGameScore_c::fn_80291640() { +void dLytMiniGameScore_c::startIn() { if (sInstance == nullptr) { return; } @@ -2326,7 +2341,7 @@ void dLytMiniGameScore_c::fn_80291640() { } } -void dLytMiniGameScore_c::fn_80291740() { +void dLytMiniGameScore_c::startOutTemp() { if (sInstance == nullptr) { return; } @@ -2456,11 +2471,11 @@ void dLytMiniGameScore_c::fn_80291BC0() { calcNumDigits(); realizePosition(); - if (mVariant == SCORE_VARIANT_1) { + if (mVariant == SCORE_VARIANT_FUN_FUN_ISLAND) { if (field_0x828) { fn_80291EF0(); } - } else if (mVariant == SCORE_VARIANT_2) { + } else if (mVariant == SCORE_VARIANT_THRILL_DIGGER) { fn_80292040(); } @@ -2471,12 +2486,12 @@ void dLytMiniGameScore_c::fn_80291BC0() { } } -void dLytMiniGameScore_c::fn_80291D40(s32 arg) { +void dLytMiniGameScore_c::fn_80291D40(s32 score) { if (sInstance == nullptr) { return; } - s32 diff = arg - mScore; + s32 diff = score - mScore; switch (diff) { case 1: field_0x80C = 1; @@ -2501,11 +2516,11 @@ void dLytMiniGameScore_c::fn_80291D40(s32 arg) { case 0: return; } - if (arg < mScore) { + if (score < mScore) { field_0x80C = nw4r::math::FAbs(diff); field_0x810 = -1; } - field_0x808 = arg; + field_0x808 = score; field_0x804 = true; field_0x829 = true; } @@ -2837,7 +2852,7 @@ void dLytMiniGameScore_c::fn_80292C30() { PaneCalc calc; switch (mVariant) { - case SCORE_VARIANT_0: { + case SCORE_VARIANT_BAMBOO_CUTTING: { dMessage_c::getGlobalTagProcessor()->setNumericArg0(mScore); loadTextVariant(1); field_0x7E8 = mpTextBoxes[0]->GetLineWidth(nullptr); @@ -2851,7 +2866,7 @@ void dLytMiniGameScore_c::fn_80292C30() { break; } - case SCORE_VARIANT_3: { + case SCORE_VARIANT_PUMPKIN_ARCHERY: { dMessage_c::getGlobalTagProcessor()->setNumericArg0(mScore); loadTextVariant(0); field_0x7E8 = mpTextBoxes[0]->GetLineWidth(nullptr); @@ -2891,7 +2906,24 @@ void dLytMiniGameScore_c::fn_80292C30() { } } - // TODO - ... + // TODO - this uses similar annoying calculations and stack as above but + // I can't be bothered right now. Let's at least give this code + // a chance to be equivalent, even if it's not matching... + + nw4r::lyt::Pane *p = mpPanes[SCORE_PANE_P_POSITION_0]; + f32 fVar2 = p->GetSize().width * p->GetScale().x; + f32 fVar1 = field_0x834[0][1]; + f32 fVar3 = p->GetParent()->GetTranslate().x + p->GetTranslate().x; + f32 local_e0 = 0.0; + if (field_0x830 == 0) { + local_e0 = ((-fVar3 + f * 0.5) - fVar2 * 0.5) + 0.0; + } else if (field_0x830 == 1) { + local_e0 = (((((-fVar3 + f * 0.5) - fVar2 * 0.5) - field_0x7E8) + 0.0) - (f32)field_0x7FC) - (f32)field_0x804; + } else if (field_0x830 == 2) { + local_e0 = ((-fVar3 + f * 0.5) - fVar2 * 0.5) + 0.0; + } + mVec3_c translate(local_e0 + (f32)field_0x7F4, fVar1 + field_0x7F8, 0.0f); + mpPanes[SCORE_PANE_POSITION]->SetTranslate(translate); fn_80293450(mHighestDigitIndex + t + field_0x81C); nw4r::math::MTX34 mtx = mpPanes[SCORE_PANE_CENTER]->GetGlobalMtx(); @@ -3056,7 +3088,7 @@ void dLytMiniGameScoreSd_c::setScoreDown(s32 score) { return; } setScoreInternal(score); - startScoreUp(); + startScoreDown(); dSndSmallEffectMgr_c::GetInstance()->playMinigameScoreDownSound(score); mIsVisible = true; } @@ -3197,7 +3229,7 @@ static const char *sMiniGameSd = "MiniGameSd"; int dLytMiniGame_c::create() { mVariant = mParams; switch (mVariant) { - case VARIANT_1: { + case VARIANT_BAMBOO_CUTTING: { if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGameScore, SLOT_MINI_GAME_SCORE)) { return NOT_READY; } @@ -3207,12 +3239,12 @@ int dLytMiniGame_c::create() { attachLoadedData(sMiniGame, mResAccStart); attachLoadedData(sMiniGameScore, mResAccScore); - mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_0); + mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_BAMBOO_CUTTING); mScore.build(&mResAccScore); mStart.build(&mResAccStart); break; } - case VARIANT_2: { + case VARIANT_FUN_FUN_ISLAND: { if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGameSd, SLOT_MINI_GAME_SCORE_SD) || loadData(sMiniGameScore, SLOT_MINI_GAME_SCORE)) { return NOT_READY; @@ -3224,13 +3256,13 @@ int dLytMiniGame_c::create() { attachLoadedData(sMiniGame, mResAccStart); attachLoadedData(sMiniGameSd, mResAccScoreSd); attachLoadedData(sMiniGameScore, mResAccScore); - mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_1); + mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_FUN_FUN_ISLAND); mScore.build(&mResAccScore); mScoreSd.build(&mResAccScoreSd); mStart.build(&mResAccStart); break; } - case VARIANT_3: { + case VARIANT_THRILL_DIGGER: { if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGameScore, SLOT_MINI_GAME_SCORE)) { return NOT_READY; } @@ -3240,12 +3272,12 @@ int dLytMiniGame_c::create() { attachLoadedData(sMiniGame, mResAccStart); attachLoadedData(sMiniGameScore, mResAccScore); - mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_2); + mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_THRILL_DIGGER); mScore.build(&mResAccScore); mStart.build(&mResAccStart); break; } - case VARIANT_4: { + case VARIANT_INSECT_CAPTURE: { if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGameBugs, SLOT_MINI_GAME_BUGS) || loadData(sMiniGameTime, SLOT_MINI_GAME_TIME)) { return NOT_READY; @@ -3257,13 +3289,13 @@ int dLytMiniGame_c::create() { attachLoadedData(sMiniGame, mResAccStart); attachLoadedData(sMiniGameBugs, mResAccBugs); attachLoadedData(sMiniGameTime, mResAccTime); - mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_0); + mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_INSECT_CAPTURE); mTime.build(&mResAccTime); mBugs.build(&mResAccBugs); mStart.build(&mResAccStart); break; } - case VARIANT_5: { + case VARIANT_SPIRAL_CHARGE_TUTORIAL: { if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGameScore, SLOT_MINI_GAME_SCORE) || loadData(sMiniGameTime, SLOT_MINI_GAME_TIME)) { return NOT_READY; @@ -3275,14 +3307,14 @@ int dLytMiniGame_c::create() { attachLoadedData(sMiniGame, mResAccStart); attachLoadedData(sMiniGameScore, mResAccScore); attachLoadedData(sMiniGameTime, mResAccTime); - mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_1); + mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_SPIRAL_CHARGE_TUTORIAL); mTime.build(&mResAccTime); - mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_4); + mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_SPIRAL_CHARGE_TUTORIAL); mScore.build(&mResAccScore); mStart.build(&mResAccStart); break; } - case VARIANT_6: { + case VARIANT_PUMPKIN_ARCHERY: { if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGamePumpkin, SLOT_MINI_GAME_PUMPKIN) || loadData(sMiniGameScore, SLOT_MINI_GAME_SCORE) || loadData(sMiniGameTime, SLOT_MINI_GAME_TIME)) { return NOT_READY; @@ -3296,15 +3328,15 @@ int dLytMiniGame_c::create() { attachLoadedData(sMiniGamePumpkin, mResAccPumpkin); attachLoadedData(sMiniGameScore, mResAccScore); attachLoadedData(sMiniGameTime, mResAccTime); - mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_2); + mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_PUMPKIN_ARCHERY); mTime.build(&mResAccTime); - mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_3); + mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_PUMPKIN_ARCHERY); mScore.build(&mResAccScore); mStart.build(&mResAccStart); mPumpkin.build(&mResAccPumpkin); break; } - case VARIANT_7: { + case VARIANT_ROLLERCOASTER: { if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGameTime, SLOT_MINI_GAME_TIME)) { return NOT_READY; } @@ -3314,12 +3346,12 @@ int dLytMiniGame_c::create() { attachLoadedData(sMiniGame, mResAccStart); attachLoadedData(sMiniGameTime, mResAccTime); - mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_3); + mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_ROLLERCOASTER); mTime.build(&mResAccTime); mStart.build(&mResAccStart); break; } - case VARIANT_8: { + case VARIANT_BOSS_RUSH: { if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGameTime, SLOT_MINI_GAME_TIME)) { return NOT_READY; } @@ -3329,12 +3361,12 @@ int dLytMiniGame_c::create() { attachLoadedData(sMiniGame, mResAccStart); attachLoadedData(sMiniGameTime, mResAccTime); - mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_4); + mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_BOSS_RUSH); mTime.build(&mResAccTime); mStart.build(&mResAccStart); break; } - case VARIANT_9: { + case VARIANT_TRIAL_TIME_ATTACK: { if (loadData(sMiniGame, SLOT_MINI_GAME) || loadData(sMiniGameTime, SLOT_MINI_GAME_TIME)) { return NOT_READY; } @@ -3344,7 +3376,7 @@ int dLytMiniGame_c::create() { attachLoadedData(sMiniGame, mResAccStart); attachLoadedData(sMiniGameTime, mResAccTime); - mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_5); + mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_TRIAL_TIME_ATTACK); mTime.build(&mResAccTime); mStart.build(&mResAccStart); break; @@ -3357,7 +3389,7 @@ int dLytMiniGame_c::create() { return NOT_READY; } attachLoadedData(sMiniGameScore, mResAccScore); - mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_0); + mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_BAMBOO_CUTTING); mScore.setField_0x816(true); mScore.build(&mResAccScore); break; @@ -3370,7 +3402,7 @@ int dLytMiniGame_c::create() { return NOT_READY; } attachLoadedData(sMiniGameScore, mResAccScore); - mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_2); + mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_THRILL_DIGGER); mScore.setField_0x816(true); mScore.build(&mResAccScore); break; @@ -3383,7 +3415,7 @@ int dLytMiniGame_c::create() { return NOT_READY; } attachLoadedData(sMiniGameTime, mResAccTime); - mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_0); + mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_INSECT_CAPTURE); mTime.setField_0x7EE(true); mTime.build(&mResAccTime); break; @@ -3396,7 +3428,7 @@ int dLytMiniGame_c::create() { return NOT_READY; } attachLoadedData(sMiniGameScore, mResAccScore); - mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_3); + mScore.setVariant(dLytMiniGameScore_c::SCORE_VARIANT_PUMPKIN_ARCHERY); mScore.setField_0x816(true); mScore.build(&mResAccScore); break; @@ -3409,7 +3441,7 @@ int dLytMiniGame_c::create() { return NOT_READY; } attachLoadedData(sMiniGameTime, mResAccTime); - mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_3); + mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_ROLLERCOASTER); mTime.setField_0x7EE(true); mTime.build(&mResAccTime); break; @@ -3422,7 +3454,7 @@ int dLytMiniGame_c::create() { return NOT_READY; } attachLoadedData(sMiniGameTime, mResAccTime); - mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_4); + mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_BOSS_RUSH); mTime.setField_0x7EE(true); mTime.build(&mResAccTime); break; @@ -3435,7 +3467,7 @@ int dLytMiniGame_c::create() { return NOT_READY; } attachLoadedData(sMiniGameTime, mResAccTime); - mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_5); + mTime.setVariant(dLytMiniGameTime_c::TIME_VARIANT_TRIAL_TIME_ATTACK); mTime.setField_0x7EE(true); mTime.build(&mResAccTime); break; @@ -3457,14 +3489,14 @@ int dLytMiniGame_c::doDelete() { mPumpkin.remove(); switch (mVariant) { - case VARIANT_1: { + case VARIANT_BAMBOO_CUTTING: { mResAccStart.detach(); mResAccScore.detach(); unloadData(sMiniGame); unloadData(sMiniGameScore); break; } - case VARIANT_2: { + case VARIANT_FUN_FUN_ISLAND: { mResAccStart.detach(); mResAccScoreSd.detach(); mResAccScore.detach(); @@ -3473,14 +3505,14 @@ int dLytMiniGame_c::doDelete() { unloadData(sMiniGameScore); break; } - case VARIANT_3: { + case VARIANT_THRILL_DIGGER: { mResAccStart.detach(); mResAccScore.detach(); unloadData(sMiniGame); unloadData(sMiniGameScore); break; } - case VARIANT_4: { + case VARIANT_INSECT_CAPTURE: { mResAccStart.detach(); mResAccBugs.detach(); mResAccTime.detach(); @@ -3489,7 +3521,7 @@ int dLytMiniGame_c::doDelete() { unloadData(sMiniGameTime); break; } - case VARIANT_5: { + case VARIANT_SPIRAL_CHARGE_TUTORIAL: { mResAccStart.detach(); mResAccScore.detach(); mResAccTime.detach(); @@ -3498,7 +3530,7 @@ int dLytMiniGame_c::doDelete() { unloadData(sMiniGameTime); break; } - case VARIANT_6: { + case VARIANT_PUMPKIN_ARCHERY: { mResAccStart.detach(); mResAccPumpkin.detach(); mResAccScore.detach(); @@ -3509,21 +3541,21 @@ int dLytMiniGame_c::doDelete() { unloadData(sMiniGameTime); break; } - case VARIANT_7: { + case VARIANT_ROLLERCOASTER: { mResAccStart.detach(); mResAccTime.detach(); unloadData(sMiniGame); unloadData(sMiniGameTime); break; } - case VARIANT_8: { + case VARIANT_BOSS_RUSH: { mResAccStart.detach(); mResAccTime.detach(); unloadData(sMiniGame); unloadData(sMiniGameTime); break; } - case VARIANT_9: { + case VARIANT_TRIAL_TIME_ATTACK: { mResAccStart.detach(); mResAccTime.detach(); unloadData(sMiniGame); @@ -3572,13 +3604,577 @@ int dLytMiniGame_c::doDelete() { } int dLytMiniGame_c::execute() { + switch (mVariant) { + case VARIANT_BAMBOO_CUTTING: + case VARIANT_10: fn_80295F90(); break; + case VARIANT_FUN_FUN_ISLAND: fn_80296000(); break; + case VARIANT_THRILL_DIGGER: + case VARIANT_11: fn_80296070(); break; + case VARIANT_INSECT_CAPTURE: + case VARIANT_12: fn_80296150(); break; + case VARIANT_SPIRAL_CHARGE_TUTORIAL: fn_80296210(); break; + case VARIANT_PUMPKIN_ARCHERY: + case VARIANT_13: fn_802962A0(); break; + case VARIANT_ROLLERCOASTER: + case VARIANT_14: fn_80296330(); break; + case VARIANT_BOSS_RUSH: + case VARIANT_15: fn_802963E0(); break; + case VARIANT_TRIAL_TIME_ATTACK: + case VARIANT_16: fn_80296480(); break; + } + + mScore.execute(); + mScoreSd.execute(); + mTime.execute(); + mBugs.execute(); + mPumpkin.execute(); + + if (!isPopupOpenExceptHelp()) { + mStart.execute(); + } + return SUCCEEDED; } int dLytMiniGame_c::draw() { + mPumpkin.draw(); + mScoreSd.draw(); + mBugs.draw(); + mScore.draw(); + mTime.draw(); + + if (!isPopupOpenExceptHelp()) { + mStart.draw(); + } + return SUCCEEDED; } +void dLytMiniGame_c::scoreRelatedExecute() { + switch (mVariant) { + case VARIANT_BAMBOO_CUTTING: + case VARIANT_THRILL_DIGGER: + case VARIANT_SPIRAL_CHARGE_TUTORIAL: + case VARIANT_PUMPKIN_ARCHERY: mScore.fn_80291410(); break; + case VARIANT_FUN_FUN_ISLAND: + if (fn_80295DB0()) { + mScore.startAlphaIn(); + } else { + mScore.fn_80291410(); + mScore.setField_0x828(false); + } + break; + case VARIANT_10: + case VARIANT_11: + case VARIANT_13: mScore.startAlphaIn(); + } +} + +void dLytMiniGame_c::scoreRelated() { + switch (mVariant) { + case VARIANT_FUN_FUN_ISLAND: + if (fn_80295DB0()) { + mScore.startAlphaOut(); + } else { + mScore.startOut(); + } + break; + case VARIANT_10: + case VARIANT_11: + case VARIANT_13: mScore.startAlphaOut(); break; + } +} + +void dLytMiniGame_c::setDisplayedPoints(s32 points) { + switch (mVariant) { + case VARIANT_BAMBOO_CUTTING: + case VARIANT_SPIRAL_CHARGE_TUTORIAL: + case VARIANT_PUMPKIN_ARCHERY: mScore.setScore(points); break; + case VARIANT_FUN_FUN_ISLAND: + fn_80295DB0(); + mScore.setScore(points); + break; + case VARIANT_THRILL_DIGGER: mScore.fn_80291D40(points); break; + case VARIANT_10: + case VARIANT_13: mScore.setScore(points); break; + case VARIANT_11: + mScore.setScore(points); + field_0x3864 = 1; + field_0x3865 = 0; + break; + } +} + +void dLytMiniGame_c::fn_80295900(s32 arg) { + mScore.fn_80291ED0(arg); + mScore.setField_0x828(true); +} + +void dLytMiniGame_c::startCountdown() { + switch (mVariant) { + case VARIANT_BAMBOO_CUTTING: + case VARIANT_FUN_FUN_ISLAND: + case VARIANT_THRILL_DIGGER: + case VARIANT_INSECT_CAPTURE: + case VARIANT_SPIRAL_CHARGE_TUTORIAL: + case VARIANT_PUMPKIN_ARCHERY: + case VARIANT_ROLLERCOASTER: + case VARIANT_TRIAL_TIME_ATTACK: mStart.startCountdown(); break; + case VARIANT_BOSS_RUSH: mStart.startCountdown120(); break; + } +} + +void dLytMiniGame_c::startFinish() { + switch (mVariant) { + case VARIANT_BAMBOO_CUTTING: + case VARIANT_FUN_FUN_ISLAND: + case VARIANT_THRILL_DIGGER: + case VARIANT_PUMPKIN_ARCHERY: + mStart.startFinish(); + mScore.startFinish(); + break; + case VARIANT_INSECT_CAPTURE: + case VARIANT_ROLLERCOASTER: + case VARIANT_BOSS_RUSH: + case VARIANT_TRIAL_TIME_ATTACK: + mStart.startFinish(); + mTime.startFinish(); + break; + case VARIANT_SPIRAL_CHARGE_TUTORIAL: + mStart.startFinish(); + mScore.startFinish(); + break; + } +} + +void dLytMiniGame_c::fn_80295A20() { + switch (mVariant) { + case VARIANT_BAMBOO_CUTTING: + case VARIANT_FUN_FUN_ISLAND: + case VARIANT_THRILL_DIGGER: + // case VARIANT_PUMPKIN_ARCHERY: + mStart.startTimeup(); + mScore.startFinish(); + break; + case VARIANT_INSECT_CAPTURE: + case VARIANT_ROLLERCOASTER: + case VARIANT_BOSS_RUSH: + case VARIANT_TRIAL_TIME_ATTACK: + mStart.startTimeup(); + mTime.startFinish(); + break; + case VARIANT_SPIRAL_CHARGE_TUTORIAL: + mStart.startTimeup(); + mScore.startFinish(); + break; + } +} + +bool dLytMiniGame_c::isStartCountdownDone() { + switch (mVariant) { + case VARIANT_BAMBOO_CUTTING: + case VARIANT_FUN_FUN_ISLAND: + case VARIANT_THRILL_DIGGER: + case VARIANT_INSECT_CAPTURE: + case VARIANT_SPIRAL_CHARGE_TUTORIAL: + case VARIANT_PUMPKIN_ARCHERY: + case VARIANT_ROLLERCOASTER: + case VARIANT_BOSS_RUSH: + case VARIANT_TRIAL_TIME_ATTACK: return mStart.isCountdownEndReached(); + } + return false; +} + +bool dLytMiniGame_c::isFinishAnimDone() { + switch (mVariant) { + case VARIANT_BAMBOO_CUTTING: + case VARIANT_FUN_FUN_ISLAND: + case VARIANT_THRILL_DIGGER: + case VARIANT_INSECT_CAPTURE: + case VARIANT_SPIRAL_CHARGE_TUTORIAL: + case VARIANT_PUMPKIN_ARCHERY: + case VARIANT_ROLLERCOASTER: + case VARIANT_BOSS_RUSH: + case VARIANT_TRIAL_TIME_ATTACK: return mStart.isFinishEndReached(); + } + return false; +} + +bool dLytMiniGame_c::isTimeupAnimDone() { + switch (mVariant) { + case VARIANT_BAMBOO_CUTTING: + case VARIANT_FUN_FUN_ISLAND: + case VARIANT_THRILL_DIGGER: + case VARIANT_INSECT_CAPTURE: + case VARIANT_SPIRAL_CHARGE_TUTORIAL: + // case VARIANT_PUMPKIN_ARCHERY: + case VARIANT_ROLLERCOASTER: + case VARIANT_BOSS_RUSH: + case VARIANT_TRIAL_TIME_ATTACK: return mStart.isTimeupEndReached(); + } + return false; +} + +void dLytMiniGame_c::fn_80295B20(s32 score) { + mScoreSd.setScoreUp(score); +} + +void dLytMiniGame_c::fn_80295B30(s32 score) { + mScoreSd.setScoreDown(score); +} + +void dLytMiniGame_c::timeRelatedExecute() { + switch (mVariant) { + case VARIANT_INSECT_CAPTURE: + case VARIANT_PUMPKIN_ARCHERY: + case VARIANT_ROLLERCOASTER: + case VARIANT_BOSS_RUSH: + case VARIANT_TRIAL_TIME_ATTACK: mTime.fn_8028DD80(); break; + case VARIANT_SPIRAL_CHARGE_TUTORIAL: + if (!dScGame_c::GetInstance()->isFadingIn()) { + mTime.fn_8028DD80(); + } + break; + case VARIANT_12: + case VARIANT_14: + case VARIANT_15: + case VARIANT_16: mTime.startAlphaIn(); break; + } +} + +void dLytMiniGame_c::timeRelated() { + switch (mVariant) { + case VARIANT_12: + case VARIANT_14: + case VARIANT_15: + case VARIANT_16: mTime.startAlphaOut(); break; + } +} + +void dLytMiniGame_c::setDisplayedTime(s32 time) { + switch (mVariant) { + case VARIANT_INSECT_CAPTURE: + case VARIANT_ROLLERCOASTER: + case VARIANT_BOSS_RUSH: + case VARIANT_TRIAL_TIME_ATTACK: mTime.setTimerValueInMilliSeconds(time); break; + case VARIANT_PUMPKIN_ARCHERY: mTime.setTimerSecondsValueInMilliSeconds(time); break; + case VARIANT_SPIRAL_CHARGE_TUTORIAL: mTime.setTimerSecondsValueInMilliSeconds(time); break; + case VARIANT_12: + case VARIANT_14: + case VARIANT_15: + case VARIANT_16: mTime.setTimerValueInMilliSeconds(time); break; + } +} + +void dLytMiniGame_c::setHighscore(s32 time) { + switch (mVariant) { + case VARIANT_INSECT_CAPTURE: + case VARIANT_ROLLERCOASTER: + case VARIANT_BOSS_RUSH: + case VARIANT_TRIAL_TIME_ATTACK: + // case VARIANT_SPIRAL_CHARGE_TUTORIAL: + case VARIANT_PUMPKIN_ARCHERY: + case VARIANT_12: + case VARIANT_14: + case VARIANT_15: + case VARIANT_16: mTime.setBestTime(time); break; + } +} + +void dLytMiniGame_c::setShowBestTime(bool show) { + switch (mVariant) { + case VARIANT_INSECT_CAPTURE: + case VARIANT_ROLLERCOASTER: + case VARIANT_BOSS_RUSH: + case VARIANT_TRIAL_TIME_ATTACK: + // case VARIANT_SPIRAL_CHARGE_TUTORIAL: + case VARIANT_PUMPKIN_ARCHERY: + case VARIANT_12: + case VARIANT_14: + case VARIANT_15: + case VARIANT_16: mTime.setShowBestTime(show); break; + } +} + +void dLytMiniGame_c::startBugsAllIconsIn() { + mBugs.startAllIconsIn(); +} + +void dLytMiniGame_c::set5Bugs() { + mBugs.setBugsNumLevel(0); +} + +void dLytMiniGame_c::set10Bugs() { + mBugs.setBugsNumLevel(1); +} + +void dLytMiniGame_c::reInitBugs() { + mBugs.init(); +} + +void dLytMiniGame_c::setBug(s32 slot, s32 bugIndex) { + mBugs.setBug(slot, bugIndex); +} + +void dLytMiniGame_c::collectBug(s32 slot) { + mBugs.collectBug(slot); +} + +void dLytMiniGame_c::startBugsFlash() { + mBugs.startBugsFlash(); +} + +bool dLytMiniGame_c::isBugIconOnEndReached(s32 slot) const { + return mBugs.isSlotIconOnEndReached(slot); +} + +bool dLytMiniGame_c::isBugCollected(s32 slot) const { + return mBugs.isSlotBugCollected(slot); +} + +void dLytMiniGame_c::fn_80295D80() { + scoreRelatedExecute(); +} + +void dLytMiniGame_c::fn_80295D90(s32 points) { + setDisplayedPoints(points); +} + +void dLytMiniGame_c::getPumpkin(const mVec3_c &pumpkinPos, s32 unk, bool doubleScore) { + mPumpkin.getPoint(pumpkinPos, unk, doubleScore); +} + +// cannot be const... +bool dLytMiniGame_c::fn_80295DB0() { + bool ret = false; + switch (mVariant) { + case VARIANT_10: + case VARIANT_11: + case VARIANT_12: + case VARIANT_13: + case VARIANT_14: + case VARIANT_15: + case VARIANT_16: ret = true; break; + case VARIANT_FUN_FUN_ISLAND: + if (!MinigameManager::GetInstance()->checkInFunFunIsland()) { + ret = true; + } + break; + } + return ret; +} + +bool dLytMiniGame_c::isInEvent() const { + bool ret = false; + if (EventManager::isInEvent()) { + ret = true; + } + return ret; +} + +bool dLytMiniGame_c::isPopupOpen() const { + bool ret = false; + if (dLytMeter_c::isPopupOpen()) { + ret = true; + } + return ret; +} + +bool dLytMiniGame_c::isPopupOpenExceptHelp() const { + bool ret = false; + if (isPopupOpen()) { + ret = true; + } + + if (dLytMeter_c::GetInstance()->isHelpOpen()) { + ret = false; + } + + return ret; +} + +bool dLytMiniGame_c::isFadingOut() const { + bool ret = false; + if (dStageMgr_c::GetInstance()->isFadingOut() || dScGame_c::GetInstance()->isFadingOut()) { + ret = true; + } + return ret; +} + +void dLytMiniGame_c::fn_80295F90() { + if (fn_80295DB0()) { + // nothing + } else { + if (isPopupOpen()) { + mScore.startOutTemp(); + } else { + mScore.startIn(); + } + + if (isFadingOut()) { + mScore.startOut(); + } + } +} + +void dLytMiniGame_c::fn_80296000() { + if (fn_80295DB0()) { + mScore.setField_0x816(true); + } else { + mScore.setField_0x816(false); + if (isPopupOpen()) { + mScore.startOutTemp(); + } else { + mScore.startIn(); + } + } +} + +void dLytMiniGame_c::fn_80296070() { + if (fn_80295DB0()) { + if (field_0x3864 == 1) { + s32 score = mScore.getScore(); + s32 rupeeDiff = dLytMeter_c::getRupeeDifference(); + if (score != 0) { + if (rupeeDiff != 0) { + field_0x3865 = 1; + } + + if (field_0x3865 == 1 && rupeeDiff < score) { + mScore.setScore(rupeeDiff); + } + } + } + } else { + if (isPopupOpen()) { + mScore.startOutTemp(); + } else { + mScore.startIn(); + } + + if (isFadingOut()) { + mScore.startOut(); + } + } +} + +void dLytMiniGame_c::fn_80296150() { + if (fn_80295DB0()) { + // nothing + } else { + if (isInEvent() || isPopupOpen()) { + if (!field_0x3866) { + mBugs.startOutTemp(); + mTime.startOutTemp(); + } else { + mBugs.startIn(); + mTime.startIn(); + } + } else { + mBugs.startIn(); + mTime.startIn(); + } + + if (isFadingOut()) { + mBugs.startOut(); + mTime.startOut(); + } + } +} + +void dLytMiniGame_c::fn_80296210() { + if (isInEvent() || isPopupOpen()) { + mScore.startOutTemp(); + mTime.startOutTemp(); + } else { + mScore.startIn(); + mTime.startIn(); + } + + if (isFadingOut()) { + mScore.startOut(); + mTime.startOut(); + } +} + +void dLytMiniGame_c::fn_802962A0() { + if (!fn_80295DB0()) { + if (isPopupOpen()) { + mScore.startOutTemp(); + mTime.startOutTemp(); + } else { + mScore.startIn(); + mTime.startIn(); + } + + if (isFadingOut()) { + mScore.startOut(); + mTime.startOut(); + } + } +} + +void dLytMiniGame_c::fn_80296330() { + if (fn_80295DB0()) { + // nothing + } else { + if (isInEvent() || isPopupOpen()) { + if (!field_0x3866) { + mTime.startOutTemp(); + } else { + mTime.startIn(); + } + } else { + mTime.startIn(); + } + + if (isFadingOut() && field_0x3866 == 1) { + mTime.startOut(); + } + } +} + +// These two do the same thing +void dLytMiniGame_c::fn_802963E0() { + if (fn_80295DB0()) { + // nothing + } else { + if (isInEvent() || isPopupOpen()) { + if (!field_0x3866) { + mTime.startOutTemp(); + } else { + mTime.startIn(); + } + } else { + mTime.startIn(); + } + + if (isFadingOut()) { + mTime.startOut(); + } + } +} + +void dLytMiniGame_c::fn_80296480() { + if (fn_80295DB0()) { + // nothing + } else { + if (isInEvent() || isPopupOpen()) { + if (!field_0x3866) { + mTime.startOutTemp(); + } else { + mTime.startIn(); + } + } else { + mTime.startIn(); + } + + if (isFadingOut()) { + mTime.startOut(); + } + } +} + void dLytMiniGame_c::init() { mScore.init(); mScoreSd.init(); @@ -3587,3 +4183,47 @@ void dLytMiniGame_c::init() { mBugs.init(); mPumpkin.init(); } + +bool dLytMiniGame_c::loadData(const char *name, s32 slot) { + bool loadRequest = false; + switch (slot) { + case SLOT_MINI_GAME: loadRequest = field_0x0068; break; + case SLOT_MINI_GAME_SCORE: loadRequest = field_0x0069; break; + case SLOT_MINI_GAME_TIME: loadRequest = field_0x006A; break; + case SLOT_MINI_GAME_BUGS: loadRequest = field_0x006B; break; + case SLOT_MINI_GAME_PUMPKIN: loadRequest = field_0x006C; break; + case SLOT_MINI_GAME_SCORE_SD: loadRequest = field_0x006D; break; + } + + if (!loadRequest) { + LayoutArcManager::GetInstance()->loadLayoutArcFromDisk(name, nullptr); + switch (slot) { + case SLOT_MINI_GAME: field_0x0068 = true; break; + case SLOT_MINI_GAME_SCORE: field_0x0069 = true; break; + case SLOT_MINI_GAME_TIME: field_0x006A = true; break; + case SLOT_MINI_GAME_BUGS: field_0x006B = true; break; + case SLOT_MINI_GAME_PUMPKIN: field_0x006C = true; break; + case SLOT_MINI_GAME_SCORE_SD: field_0x006D = true; break; + } + return true; + } + return false; +} + +bool dLytMiniGame_c::isLoading(const char *name) const { + return LayoutArcManager::GetInstance()->ensureLoaded1(name) != D_ARC_RESULT_OK; +} + +void dLytMiniGame_c::attachLoadedData(const char *name, d2d::ResAccIf_c &resAcc) { + resAcc.attach(LayoutArcManager::GetInstance()->getLoadedData(name), ""); +} + +void dLytMiniGame_c::unloadData(const char *name) { + s32 res = LayoutArcManager::GetInstance()->ensureLoaded2(name); + if (res == D_ARC_RESULT_ERROR_NOT_FOUND) { + return; + } + if (res == D_ARC_RESULT_OK) { + LayoutArcManager::GetInstance()->decrement(name); + } +} diff --git a/src/d/lyt/meter/d_lyt_meter.cpp b/src/d/lyt/meter/d_lyt_meter.cpp index c8db7a82..bb0accb9 100644 --- a/src/d/lyt/meter/d_lyt_meter.cpp +++ b/src/d/lyt/meter/d_lyt_meter.cpp @@ -581,7 +581,7 @@ bool dLytMeterMain_c::fn_800C9FE0() { return false; } -bool dLytMeterMain_c::fn_800CA040() { +bool dLytMeterMain_c::isPopupOpen() { if (mHelpOpen || isInModeMap() || isInModePause()) { return true; } |
