summaryrefslogtreecommitdiff
path: root/include/d
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2026-04-09 08:14:05 +0200
committerGitHub <noreply@github.com>2026-04-09 08:14:05 +0200
commitf9fb1b59fca13953041d747da203ec37c38f6bc3 (patch)
treeba3e33665e3e53a48ff59cf6b2665494e63ea4f6 /include/d
parentf637091a32c55307b99ff665cf5bac20294ddc46 (diff)
parent24b818aca2d2724a62a78468493fe8e8f5545022 (diff)
Merge pull request #301 from robojumper/d_lyt_meter_suiryu_score
d_lyt_suiryu_score mostly OK
Diffstat (limited to 'include/d')
-rw-r--r--include/d/flag/storyflag_map.h2
-rw-r--r--include/d/lyt/d_lyt_note.h52
-rw-r--r--include/d/lyt/d_lyt_suiryu_score.h174
-rw-r--r--include/d/lyt/meter/d_lyt_meter.h20
-rw-r--r--include/d/lyt/meter/d_lyt_meter_ganbari_gauge.h13
-rw-r--r--include/d/t/d_t_clef_game.h19
6 files changed, 261 insertions, 19 deletions
diff --git a/include/d/flag/storyflag_map.h b/include/d/flag/storyflag_map.h
index 9f82fc70..4feeed1f 100644
--- a/include/d/flag/storyflag_map.h
+++ b/include/d/flag/storyflag_map.h
@@ -427,7 +427,7 @@ enum StoryFlags_e {
/** [Music Scroll for Tadtones (sets before the collecting, unsets when collecting is done)]
* Story Flag #82 (0x0052) - JP 805ACD6B 0x08 / US 805A9AEB 0x08
*/
- STORYFLAG_82,
+ STORYFLAG_HAS_TADTONE_SCROLL,
/** [Ghirahim 1 defeated (Skyview Spring layer 1 / Skyview Boss Room layer 1)]
* Story Flag #83 (0x0053) - JP 805ACD69 0x80 / US 805A9AE9 0x80
diff --git a/include/d/lyt/d_lyt_note.h b/include/d/lyt/d_lyt_note.h
index 1e437031..bb9788b2 100644
--- a/include/d/lyt/d_lyt_note.h
+++ b/include/d/lyt/d_lyt_note.h
@@ -20,6 +20,46 @@ public:
f32 getField0x260() const;
void setFrame(f32);
+ bool isStateWait() const {
+ return mStateMgr.isState(StateID_Wait);
+ }
+
+ void forceOut() {
+ mShouldMove = false;
+ mForceOut = true;
+ }
+
+ void lose() {
+ mShouldMove = false;
+ mIsCollected = false;
+ }
+
+ void collect() {
+ mShouldMove = false;
+ mIsCollected = true;
+ }
+
+ void startLose() {
+ mIsAboutToLose = true;
+ }
+
+ void stopLose() {
+ mIsAboutToLose = false;
+ }
+
+ void setColor(s32 color) {
+ mColor = color;
+ }
+
+ void setMove() {
+ mIsAboutToLose = false;
+ mShouldMove = true;
+ }
+
+ bool isMove() const {
+ return mIsMove;
+ }
+
private:
STATE_FUNC_DECLARE(dLytNote_c, Wait);
STATE_FUNC_DECLARE(dLytNote_c, In);
@@ -34,12 +74,12 @@ private:
/* 0x260 */ f32 field_0x260;
/* 0x264 */ s32 mOutAnim;
/* 0x268 */ s32 mInAnim;
- /* 0x26C */ s32 field_0x26C;
- /* 0x270 */ u8 field_0x270;
- /* 0x271 */ u8 field_0x271;
- /* 0x272 */ u8 field_0x272;
- /* 0x273 */ u8 field_0x273;
- /* 0x274 */ u8 field_0x274;
+ /* 0x26C */ s32 mColor;
+ /* 0x270 */ bool mShouldMove;
+ /* 0x271 */ bool mIsCollected;
+ /* 0x272 */ bool mIsAboutToLose;
+ /* 0x273 */ bool mIsMove;
+ /* 0x274 */ bool mForceOut;
};
#endif
diff --git a/include/d/lyt/d_lyt_suiryu_score.h b/include/d/lyt/d_lyt_suiryu_score.h
new file mode 100644
index 00000000..317920dc
--- /dev/null
+++ b/include/d/lyt/d_lyt_suiryu_score.h
@@ -0,0 +1,174 @@
+#ifndef D_LYT_SUIRYU_SCORE_H
+#define D_LYT_SUIRYU_SCORE_H
+
+#include "d/d_base.h"
+#include "d/lyt/d2d.h"
+#include "d/lyt/d_lyt_note.h"
+#include "m/m_vec.h"
+#include "nw4r/lyt/lyt_pane.h"
+#include "s/s_State.hpp"
+
+struct dLytNote2_c {
+ /* 0x000 */ dLytNote_c mNote;
+ /* 0x278 */ UNKWORD field_0x278;
+};
+
+class dLytMeterSuiryuScoreBase_c {
+public:
+ dLytMeterSuiryuScoreBase_c()
+ : mStateMgr(*this), field_0x2250(0), field_0x2262(0), field_0x2263(0), field_0x2264(0) {}
+ virtual ~dLytMeterSuiryuScoreBase_c() {}
+
+ bool build(d2d::ResAccIf_c *resAcc);
+ bool remove();
+ bool execute();
+ bool draw();
+
+ void startIn();
+ void startOut();
+ void setColor0(u8 idx);
+ void setColor1(u8 idx);
+ void alphaForwards(s32 idx, f32 rate);
+ void alphaBackwards(s32 idx, f32 rate);
+ void stopMove();
+
+ void fn_802978F0(s32 idx);
+ void fn_80297AE0();
+ void fn_80297B40();
+ void fn_80297BA0();
+ void fn_80297C80();
+ bool fn_80297E10(u8) const;
+ void fn_80297EA0();
+ void fn_80297FE0(u8);
+ bool fn_80298B80();
+
+ nw4r::lyt::Pane *getInOutAllPane() const {
+ return mLyt.findPane("N_inOutAll_00");
+ }
+
+ nw4r::lyt::Pane *getNotePane(s32 idx) const {
+ return mpPanes[idx];
+ }
+
+ u8 getField_0x2251(s32 idx) const {
+ return field_0x2251[idx];
+ }
+
+ void setField_0x2251(u8 idx, u8 val) {
+ if (field_0x2251[idx] != val) {
+ field_0x2251[idx] = val;
+ }
+ }
+
+ void setField_0x2251_(u8 idx, u8 val) {
+ field_0x2251[idx] = val;
+ }
+
+private:
+ STATE_FUNC_DECLARE(dLytMeterSuiryuScoreBase_c, None);
+ STATE_FUNC_DECLARE(dLytMeterSuiryuScoreBase_c, In);
+ STATE_FUNC_DECLARE(dLytMeterSuiryuScoreBase_c, Wait);
+ STATE_FUNC_DECLARE(dLytMeterSuiryuScoreBase_c, Out);
+
+ void initAnm();
+ bool fn_80298600();
+
+ /* 0x0004 */ UI_STATE_MGR_DECLARE(dLytMeterSuiryuScoreBase_c);
+ /* 0x0040 */ d2d::LytBase_c mLyt;
+ /* 0x00D0 */ d2d::AnmGroup_c mAnm[129];
+ /* 0x2110 */ nw4r::lyt::Pane *mpPanes[77];
+ /* 0x2244 */ nw4r::lyt::Pane *mpPaneInOutAll;
+ /* 0x2248 */ mVec2_c mMainTranslate;
+
+ /* 0x2250 */ u8 field_0x2250;
+ /* 0x2251 */ u8 field_0x2251[17];
+
+ /* 0x2262 */ u8 field_0x2262;
+ /* 0x2263 */ u8 field_0x2263;
+ /* 0x2264 */ UNKWORD field_0x2264;
+};
+
+class dLytMeterClefMain_c {
+private:
+ static const s32 NUM_TADTONE_GROUPS = 17;
+ static const s32 NUM_TOTAL_TADTONES = 77;
+
+public:
+ dLytMeterClefMain_c()
+ : mStateMgr(*this),
+ field_0x0040(0),
+ field_0x5E4C(0),
+ field_0x5E4D(0),
+ field_0x5F35(0),
+ field_0x5F36(0),
+ field_0x5F38(0),
+ field_0x5F3C(0),
+ field_0x5F40(0) {}
+ virtual ~dLytMeterClefMain_c() {}
+
+ bool build(d2d::ResAccIf_c *resAcc);
+ bool remove();
+ bool execute();
+ bool draw();
+
+private:
+ void startIn();
+ void startOut();
+ void fn_80299DF0();
+ void fn_80299E30();
+ void fn_8029A050();
+ void fn_8029A200();
+ void fn_8029A260();
+ void fn_8029A2C0();
+ void fn_8029A3B0();
+ void fn_8029A440();
+
+ STATE_FUNC_DECLARE(dLytMeterClefMain_c, None);
+ STATE_FUNC_DECLARE(dLytMeterClefMain_c, In);
+ STATE_FUNC_DECLARE(dLytMeterClefMain_c, Wait);
+ STATE_FUNC_DECLARE(dLytMeterClefMain_c, Out);
+
+ /* 0x0004 */ UI_STATE_MGR_DECLARE(dLytMeterClefMain_c);
+ /* 0x0040 */ u8 field_0x0040;
+ /* 0x0044 */ dLytMeterSuiryuScoreBase_c mBase;
+ /* 0x22AC */ dLytNote2_c mNotes[24];
+ /* 0x5E4C */ u8 field_0x5E4C;
+ /* 0x5E4D */ u8 field_0x5E4D;
+
+ /* 0x5E4E */ u8 field_0x5E4E[NUM_TADTONE_GROUPS];
+ /* 0x5E5F */ u8 field_0x5E5F[NUM_TADTONE_GROUPS];
+ /* 0x5E70 */ u8 field_0x5E70[NUM_TADTONE_GROUPS];
+ /* 0x5E81 */ u8 field_0x5E81[NUM_TADTONE_GROUPS];
+ /* 0x5E92 */ u8 field_0x5E92[NUM_TADTONE_GROUPS];
+ /* 0x5EA4 */ UNKWORD field_0x5EA4[NUM_TADTONE_GROUPS];
+ /* 0x5EE8 */ u8 field_0x5EE8[NUM_TOTAL_TADTONES];
+
+ /* 0x5F35 */ u8 field_0x5F35;
+ /* 0x5F36 */ u8 field_0x5F36;
+
+ /* 0x5F38 */ UNKWORD field_0x5F38;
+ /* 0x5F3C */ UNKWORD field_0x5F3C;
+ /* 0x5F40 */ UNKWORD field_0x5F40;
+};
+
+// Alternative name ideas: dLytMeterClef_c, dLytMeterSuiryuScore_c
+// The profile name is LYT_SUIRYU_SCORE so I went with that class name,
+// but the fact that it contains a dLytMeterClefMain_c (known name) is suspicious...
+class dLytSuiryuScore_c : public dBase_c {
+public:
+ dLytSuiryuScore_c() {}
+ virtual ~dLytSuiryuScore_c() {}
+
+ virtual int create() override;
+ virtual int doDelete() override;
+ virtual int execute() override;
+ virtual int draw() override;
+
+private:
+ static dLytSuiryuScore_c *sInstance;
+
+ /* 0x0060 */ d2d::ResAccIf_c mResAcc;
+ /* 0x03D8 */ dLytMeterClefMain_c mMain;
+};
+
+#endif
diff --git a/include/d/lyt/meter/d_lyt_meter.h b/include/d/lyt/meter/d_lyt_meter.h
index 972144d7..d5eebc37 100644
--- a/include/d/lyt/meter/d_lyt_meter.h
+++ b/include/d/lyt/meter/d_lyt_meter.h
@@ -91,7 +91,7 @@ public:
bool isNotSilentRealmOrLoftwing();
- bool fn_800C9F70();
+ bool shouldHideLytClef();
bool fn_800C9FE0();
bool isPopupOpen();
@@ -102,7 +102,7 @@ public:
void fn_800D5630();
bool isInModeMap();
bool isInModePause();
- bool fn_800D56B0();
+ bool shouldBeHiddenGeneral();
void checkPaneVisibility();
bool execute();
@@ -198,7 +198,7 @@ private:
/* 0x13772 */ bool field_0x13772;
/* 0x13773 */ bool field_0x13773;
/* 0x13774 */ bool mHelpOpen;
- /* 0x13775 */ bool field_0x13775;
+ /* 0x13775 */ bool mIsCollectingTadtoneScroll;
/* 0x13776 */ bool mTimerVisible;
/* 0x13777 */ bool mBirdGaugeVisible;
/* 0x13778 */ bool mSkyGaugeVisible;
@@ -310,8 +310,8 @@ public:
mMain.mHelpOpen = val;
}
- void setMeterField_0x13775(bool val) {
- mMain.field_0x13775 = val;
+ void setIsCollectingTadtoneScroll(bool val) {
+ mMain.mIsCollectingTadtoneScroll = val;
}
bool getMeterField_0x1377F() const {
@@ -334,6 +334,12 @@ public:
mFlags = 0xFFFFFFFF;
}
+ static void setGanbariClefRelated(bool arg) {
+ if (sInstance != nullptr) {
+ sInstance->mMain.mGanbariGauge.setClefRelated(arg);
+ }
+ }
+
static dLytMeterCrossBtn_c::CrossIcon_e getCrossIconDown() {
if (sInstance != nullptr) {
return sInstance->mMain.mCrossBtn.getIconDown();
@@ -452,9 +458,9 @@ public:
}
}
- static bool getfn_800C9F70() {
+ static bool shouldHideLytClef() {
if (sInstance != nullptr) {
- return sInstance->mMain.fn_800C9F70();
+ return sInstance->mMain.shouldHideLytClef();
} else {
return false;
}
diff --git a/include/d/lyt/meter/d_lyt_meter_ganbari_gauge.h b/include/d/lyt/meter/d_lyt_meter_ganbari_gauge.h
index 2356a36f..4140f60d 100644
--- a/include/d/lyt/meter/d_lyt_meter_ganbari_gauge.h
+++ b/include/d/lyt/meter/d_lyt_meter_ganbari_gauge.h
@@ -35,6 +35,10 @@ public:
mStaminaPercent = value;
}
+ void setClefRelated(bool v) {
+ mClefRelated = v;
+ }
+
void setField_0x539(bool v) {
field_0x539 = v;
}
@@ -87,12 +91,11 @@ private:
/* 0x548 */ s32 field_0x548;
/* 0x54C */ f32 field_0x54C;
/* 0x550 */ f32 field_0x550;
-
/* 0x554 */ f32 field_0x554;
- u8 field_0x558;
- u8 field_0x559;
- bool field_0x55A;
- u8 field_0x55B;
+ /* 0x558 */ u8 field_0x558;
+ /* 0x559 */ bool mClefRelated;
+ /* 0x55A */ bool field_0x55A;
+ /* 0x55B */ u8 field_0x55B;
};
STATIC_ASSERT(sizeof(dLytMeterGanbariGauge_c) == 0x55C);
diff --git a/include/d/t/d_t_clef_game.h b/include/d/t/d_t_clef_game.h
index 2864ad10..5f836e36 100644
--- a/include/d/t/d_t_clef_game.h
+++ b/include/d/t/d_t_clef_game.h
@@ -8,7 +8,26 @@ public:
dTgClefGame_c() {}
virtual ~dTgClefGame_c() {}
+ static dTgClefGame_c *GetInstance() {
+ return sInstance;
+ }
+
+ u8 getField_0x14C(s32 idx) const {
+ return field_0x14C[idx];
+ }
+
+ u8 getField_0x15D(s32 idx) const {
+ return field_0x15D[idx];
+ }
+
private:
+ static dTgClefGame_c *sInstance;
+
+ static const s32 NUM_TADTONE_GROUPS = 17;
+
+ /* 0x0FC */ u8 _0x0FC[0x14C - 0x0FC];
+ /* 0x14C */ u8 field_0x14C[NUM_TADTONE_GROUPS];
+ /* 0x15D */ u8 field_0x15D[NUM_TADTONE_GROUPS];
};
#endif