summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/SOUE01/splits.txt2
-rw-r--r--config/SOUE01/symbols.txt108
-rw-r--r--include/d/d_sc_game.h9
-rw-r--r--include/d/d_stage_mgr.h5
-rw-r--r--include/d/lyt/d_lyt_mini_game.h193
-rw-r--r--include/d/lyt/meter/d_lyt_meter.h18
-rw-r--r--include/d/lyt/meter/d_lyt_meter_rupy.h3
-rw-r--r--include/toBeSorted/minigame_mgr.h3
-rw-r--r--src/REL/d/t/d_t_sword_battle_game.cpp14
-rw-r--r--src/d/d_message.cpp44
-rw-r--r--src/d/lyt/d_lyt_mini_game.cpp788
-rw-r--r--src/d/lyt/meter/d_lyt_meter.cpp2
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;
}