From 75f3be60d26e205f1681afb44a3b4d5a72f75d80 Mon Sep 17 00:00:00 2001 From: robojumper Date: Thu, 29 Jan 2026 23:33:34 +0100 Subject: [PATCH 1/3] A start --- config/SOUE01/splits.txt | 8 +- config/SOUE01/symbols.txt | 288 +++---- configure.py | 2 +- include/d/flag/storyflag_map.h | 2 +- include/d/lyt/d2d.h | 4 + include/d/lyt/d_lyt_note.h | 4 + include/d/lyt/d_lyt_suiryu_score.h | 148 ++++ include/d/lyt/meter/d_lyt_meter.h | 20 +- .../d/lyt/meter/d_lyt_meter_ganbari_gauge.h | 13 +- include/d/t/d_t_clef_game.h | 17 + include/m/m2d.h | 4 + include/toBeSorted/misc_actor.h | 47 ++ src/d/d_message.cpp | 4 +- src/d/lyt/d_lyt_force_line.cpp | 2 +- src/d/lyt/d_lyt_suiryu_score.cpp | 724 ++++++++++++++++++ src/d/lyt/meter/d_lyt_meter.cpp | 62 +- src/d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp | 4 +- 17 files changed, 1156 insertions(+), 197 deletions(-) create mode 100644 include/d/lyt/d_lyt_suiryu_score.h create mode 100644 src/d/lyt/d_lyt_suiryu_score.cpp diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index 02c56d5e..bcc5edfa 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -1637,19 +1637,21 @@ d/lyt/d_lyt_mini_game.cpp: .sbss start:0x80575970 end:0x80575990 .sdata2 start:0x8057C700 end:0x8057C760 -d/lyt/d_lyt_meter_suiryu_score.cpp: +d/lyt/d_lyt_suiryu_score.cpp: .text start:0x802969E0 end:0x8029C2C8 align:16 .ctors start:0x804DB874 end:0x804DB878 .rodata start:0x804EEB68 end:0x804EEF98 - .data start:0x80539B68 end:0x8053AAC8 + .data start:0x80539B68 end:0x8053AAD8 + .sdata start:0x80573BB0 end:0x80573BC8 .sbss start:0x80575990 end:0x80575998 + .sdata2 start:0x8057C760 end:0x8057C788 .bss start:0x805B61C0 end:0x805B63C0 d/lyt/d_lyt_meter_suiryu_score_comp.cpp: .text start:0x8029C2D0 end:0x8029F278 align:16 .ctors start:0x804DB878 end:0x804DB87C .rodata start:0x804EEF98 end:0x804EF100 - .data start:0x8053AAC8 end:0x8053B968 + .data start:0x8053AAD8 end:0x8053B968 .sbss start:0x80575998 end:0x805759A0 .bss start:0x805B63C0 end:0x805B6640 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index e86041fb..96693fac 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -4498,7 +4498,7 @@ build__16dLytMeterParts_cFl = .text:0x800C9ED0; // type:function size:0x24 execute__16dLytMeterParts_cFv = .text:0x800C9F00; // type:function size:0x10 executeState__85sStateMgr_c<16dLytMeterParts_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x800C9F10; // type:function size:0x10 scope:weak isNotSilentRealmOrLoftwing__15dLytMeterMain_cFv = .text:0x800C9F20; // type:function size:0x44 -fn_800C9F70__15dLytMeterMain_cFv = .text:0x800C9F70; // type:function size:0x70 +shouldHideLytClef__15dLytMeterMain_cFv = .text:0x800C9F70; // type:function size:0x70 fn_800C9FE0__15dLytMeterMain_cFv = .text:0x800C9FE0; // type:function size:0x60 isPopupOpen__15dLytMeterMain_cFv = .text:0x800CA040; // type:function size:0x60 setUiMode__15dLytMeterMain_cCFUs = .text:0x800CA0A0; // type:function size:0x1C @@ -4751,7 +4751,7 @@ fn_800D5590__15dLytMeterMain_cFv = .text:0x800D5590; // type:function size:0x98 fn_800D5630__15dLytMeterMain_cFv = .text:0x800D5630; // type:function size:0x18 isInModeMap__15dLytMeterMain_cFv = .text:0x800D5650; // type:function size:0x24 isInModePause__15dLytMeterMain_cFv = .text:0x800D5680; // type:function size:0x28 -fn_800D56B0__15dLytMeterMain_cFv = .text:0x800D56B0; // type:function size:0xFC +shouldBeHiddenGeneral__15dLytMeterMain_cFv = .text:0x800D56B0; // type:function size:0xFC checkPaneVisibility__15dLytMeterMain_cFv = .text:0x800D57B0; // type:function size:0x1A58 execute__15dLytMeterMain_cFv = .text:0x800D7210; // type:function size:0x92C fn_800D7B40__15dLytMsgWindow_cFv = .text:0x800D7B40; // type:function size:0xC scope:weak @@ -15486,139 +15486,139 @@ isLoading__14dLytMiniGame_cCFPCc = .text:0x802966B0; // type:function size:0x30 attachLoadedData__14dLytMiniGame_cFPCcRQ23d2d10ResAccIf_c = .text:0x802966E0; // type:function size:0x40 unloadData__14dLytMiniGame_cFPCc = .text:0x80296720; // type:function size:0x4C __dt__14dLytMiniGame_cFv = .text:0x80296770; // type:function size:0x270 -LytMeterSuiryuScoreBase__stateNoneEnter = .text:0x802969E0; // type:function size:0x4 -LytMeterSuiryuScoreBase__stateNoneUpdate = .text:0x802969F0; // type:function size:0x4 -LytMeterSuiryuScoreBase__stateNoneLeave = .text:0x80296A00; // type:function size:0x4 -LytMeterSuiryuScoreBase__stateInEnter = .text:0x80296A10; // type:function size:0x4 -LytMeterSuiryuScoreBase__stateInUpdate = .text:0x80296A20; // type:function size:0x4 -LytMeterSuiryuScoreBase__stateInLeave = .text:0x80296A30; // type:function size:0x4 -LytMeterSuiryuScoreBase__stateWaitEnter = .text:0x80296A40; // type:function size:0x4 -LytMeterSuiryuScoreBase__stateWaitUpdate = .text:0x80296A50; // type:function size:0x56C -LytMeterSuiryuScoreBase__stateWaitLeave = .text:0x80296FC0; // type:function size:0x4 -LytMeterSuiryuScoreBase__stateOutEnter = .text:0x80296FD0; // type:function size:0x4 -LytMeterSuiryuScoreBase__stateOutUpdate = .text:0x80296FE0; // type:function size:0x4 -LytMeterSuiryuScoreBase__stateOutLeave = .text:0x80296FF0; // type:function size:0x4 -fn_80297000 = .text:0x80297000; // type:function size:0x174 -fn_80297180 = .text:0x80297180; // type:function size:0x10 -fn_80297190 = .text:0x80297190; // type:function size:0x58 -fn_802971F0 = .text:0x802971F0; // type:function size:0x144 -fn_80297340 = .text:0x80297340; // type:function size:0x10 -fn_80297350 = .text:0x80297350; // type:function size:0x28 -fn_80297380 = .text:0x80297380; // type:function size:0x2D8 -fn_80297660 = .text:0x80297660; // type:function size:0xBC -fn_80297720 = .text:0x80297720; // type:function size:0xA8 -fn_802977D0 = .text:0x802977D0; // type:function size:0x84 -fn_80297860 = .text:0x80297860; // type:function size:0x84 +initializeState_None__26dLytMeterSuiryuScoreBase_cFv = .text:0x802969E0; // type:function size:0x4 +executeState_None__26dLytMeterSuiryuScoreBase_cFv = .text:0x802969F0; // type:function size:0x4 +finalizeState_None__26dLytMeterSuiryuScoreBase_cFv = .text:0x80296A00; // type:function size:0x4 +initializeState_In__26dLytMeterSuiryuScoreBase_cFv = .text:0x80296A10; // type:function size:0x4 +executeState_In__26dLytMeterSuiryuScoreBase_cFv = .text:0x80296A20; // type:function size:0x4 +finalizeState_In__26dLytMeterSuiryuScoreBase_cFv = .text:0x80296A30; // type:function size:0x4 +initializeState_Wait__26dLytMeterSuiryuScoreBase_cFv = .text:0x80296A40; // type:function size:0x4 +executeState_Wait__26dLytMeterSuiryuScoreBase_cFv = .text:0x80296A50; // type:function size:0x56C +finalizeState_Wait__26dLytMeterSuiryuScoreBase_cFv = .text:0x80296FC0; // type:function size:0x4 +initializeState_Out__26dLytMeterSuiryuScoreBase_cFv = .text:0x80296FD0; // type:function size:0x4 +executeState_Out__26dLytMeterSuiryuScoreBase_cFv = .text:0x80296FE0; // type:function size:0x4 +finalizeState_Out__26dLytMeterSuiryuScoreBase_cFv = .text:0x80296FF0; // type:function size:0x4 +build__26dLytMeterSuiryuScoreBase_cFPQ23d2d10ResAccIf_c = .text:0x80297000; // type:function size:0x174 +changeState__95sStateMgr_c<26dLytMeterSuiryuScoreBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x80297180; // type:function size:0x10 +remove__26dLytMeterSuiryuScoreBase_cFv = .text:0x80297190; // type:function size:0x58 +execute__26dLytMeterSuiryuScoreBase_cFv = .text:0x802971F0; // type:function size:0x144 +executeState__95sStateMgr_c<26dLytMeterSuiryuScoreBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80297340; // type:function size:0x10 +draw__26dLytMeterSuiryuScoreBase_cFv = .text:0x80297350; // type:function size:0x28 +initAnm__26dLytMeterSuiryuScoreBase_cFv = .text:0x80297380; // type:function size:0x2D8 +startIn__26dLytMeterSuiryuScoreBase_cFv = .text:0x80297660; // type:function size:0xBC +startOut__26dLytMeterSuiryuScoreBase_cFv = .text:0x80297720; // type:function size:0xA8 +setColor0__26dLytMeterSuiryuScoreBase_cFl = .text:0x802977D0; // type:function size:0x84 +setColor1__26dLytMeterSuiryuScoreBase_cFl = .text:0x80297860; // type:function size:0x84 fn_802978F0 = .text:0x802978F0; // type:function size:0x1EC fn_80297AE0 = .text:0x80297AE0; // type:function size:0x54 fn_80297B40 = .text:0x80297B40; // type:function size:0x54 fn_80297BA0 = .text:0x80297BA0; // type:function size:0xD4 fn_80297C80 = .text:0x80297C80; // type:function size:0xC4 -fn_80297D50 = .text:0x80297D50; // type:function size:0x60 -fn_80297DB0 = .text:0x80297DB0; // type:function size:0x60 +alphaBackwards__26dLytMeterSuiryuScoreBase_cFlf = .text:0x80297D50; // type:function size:0x60 +alphaForwards__26dLytMeterSuiryuScoreBase_cFlf = .text:0x80297DB0; // type:function size:0x60 fn_80297E10 = .text:0x80297E10; // type:function size:0x84 fn_80297EA0 = .text:0x80297EA0; // type:function size:0x140 fn_80297FE0 = .text:0x80297FE0; // type:function size:0x61C fn_80298600 = .text:0x80298600; // type:function size:0x50C -fn_80298B10 = .text:0x80298B10; // type:function size:0x64 +stopMove__26dLytMeterSuiryuScoreBase_cFv = .text:0x80298B10; // type:function size:0x64 fn_80298B80 = .text:0x80298B80; // type:function size:0x248 -dLytMeterClefMain__stateNoneEnter = .text:0x80298DD0; // type:function size:0x4 -dLytMeterClefMain__stateNoneUpdate = .text:0x80298DE0; // type:function size:0x4 -dLytMeterClefMain__stateNoneLeave = .text:0x80298DF0; // type:function size:0x4 -dLytMeterClefMain__stateInEnter = .text:0x80298E00; // type:function size:0x4 -dLytMeterClefMain__stateInUpdate = .text:0x80298E10; // type:function size:0x4 -dLytMeterClefMain__stateInLeave = .text:0x80298E20; // type:function size:0x4 -dLytMeterClefMain__stateWaitEnter = .text:0x80298E30; // type:function size:0x4 -dLytMeterClefMain__stateWaitUpdate = .text:0x80298E40; // type:function size:0xA74 -dLytMeterClefMain__stateWaitLeave = .text:0x802998C0; // type:function size:0x4 -dLytMeterClefMain__stateOutEnter = .text:0x802998D0; // type:function size:0x4 -dLytMeterClefMain__stateOutUpdate = .text:0x802998E0; // type:function size:0x4 -dLytMeterClefMain__stateOutLeave = .text:0x802998F0; // type:function size:0x4 -fn_80299900 = .text:0x80299900; // type:function size:0x80 -fn_80299980 = .text:0x80299980; // type:function size:0x10 -fn_80299990 = .text:0x80299990; // type:function size:0x6C -fn_80299A00 = .text:0x80299A00; // type:function size:0x1B8 -fn_80299BC0 = .text:0x80299BC0; // type:function size:0x10 -fn_80299BD0 = .text:0x80299BD0; // type:function size:0x5C -fn_80299C30 = .text:0x80299C30; // type:function size:0x14C -fn_80299D80 = .text:0x80299D80; // type:function size:0x10 -fn_80299D90 = .text:0x80299D90; // type:function size:0x5C -fn_80299DF0 = .text:0x80299DF0; // type:function size:0x34 -fn_80299E30 = .text:0x80299E30; // type:function size:0x220 -fn_8029A050 = .text:0x8029A050; // type:function size:0x1A4 -fn_8029A200 = .text:0x8029A200; // type:function size:0x5C -fn_8029A260 = .text:0x8029A260; // type:function size:0x60 -fn_8029A2C0 = .text:0x8029A2C0; // type:function size:0xE8 -fn_8029A3B0 = .text:0x8029A3B0; // type:function size:0x8C -fn_8029A440 = .text:0x8029A440; // type:function size:0x238 -LytSuiryuScore__ctor = .text:0x8029A680; // type:function size:0x1DC -fn_8029A860 = .text:0x8029A860; // type:function size:0x58 -fn_8029A8C0 = .text:0x8029A8C0; // type:function size:0x6C -fn_8029A930 = .text:0x8029A930; // type:function size:0xA0 -fn_8029A9D0 = .text:0x8029A9D0; // type:function size:0xA4 -fn_8029AA80 = .text:0x8029AA80; // type:function size:0x58 -fn_8029AAE0 = .text:0x8029AAE0; // type:function size:0x6C -fn_8029AB50 = .text:0x8029AB50; // type:function size:0xA0 -fn_8029ABF0 = .text:0x8029ABF0; // type:function size:0xA4 -fn_8029ACA0 = .text:0x8029ACA0; // type:function size:0xD8 -fn_8029AD80 = .text:0x8029AD80; // type:function size:0xC0 -fn_8029AE40 = .text:0x8029AE40; // type:function size:0x58 -fn_8029AEA0 = .text:0x8029AEA0; // type:function size:0x6C -fn_8029AF10 = .text:0x8029AF10; // type:function size:0xA0 -fn_8029AFB0 = .text:0x8029AFB0; // type:function size:0xA4 -fn_8029B060 = .text:0x8029B060; // type:function size:0xD8 -fn_8029B140 = .text:0x8029B140; // type:function size:0xDC -fn_8029B220 = .text:0x8029B220; // type:function size:0x14C -fn_8029B370 = .text:0x8029B370; // type:function size:0x58 -fn_8029B3D0 = .text:0x8029B3D0; // type:function size:0x30 -fn_8029B400 = .text:0x8029B400; // type:function size:0x28 -fn_8029B430 = .text:0x8029B430; // type:function size:0x28 -fn_8029B460 = .text:0x8029B460; // type:function size:0x184 -fn_8029B5F0 = .text:0x8029B5F0; // type:function size:0x10 -fn_8029B600 = .text:0x8029B600; // type:function size:0x60 -fn_8029B660 = .text:0x8029B660; // type:function size:0xC -fn_8029B670 = .text:0x8029B670; // type:function size:0x60 -fn_8029B6D0 = .text:0x8029B6D0; // type:function size:0xC -fn_8029B6E0 = .text:0x8029B6E0; // type:function size:0x60 -fn_8029B740 = .text:0x8029B740; // type:function size:0xC -fn_8029B750 = .text:0x8029B750; // type:function size:0x1C -fn_8029B770 = .text:0x8029B770; // type:function size:0x1C -fn_8029B790 = .text:0x8029B790; // type:function size:0x1C -fn_8029B7B0 = .text:0x8029B7B0; // type:function size:0x1C -fn_8029B7D0 = .text:0x8029B7D0; // type:function size:0x1C -fn_8029B7F0 = .text:0x8029B7F0; // type:function size:0x1C -fn_8029B810 = .text:0x8029B810; // type:function size:0x1C -fn_8029B830 = .text:0x8029B830; // type:function size:0x1C -fn_8029B850 = .text:0x8029B850; // type:function size:0x1C -fn_8029B870 = .text:0x8029B870; // type:function size:0x10 -fn_8029B880 = .text:0x8029B880; // type:function size:0x10 -fn_8029B890 = .text:0x8029B890; // type:function size:0x10 -fn_8029B8A0 = .text:0x8029B8A0; // type:function size:0x10 -fn_8029B8B0 = .text:0x8029B8B0; // type:function size:0x10 -fn_8029B8C0 = .text:0x8029B8C0; // type:function size:0x10 -fn_8029B8D0 = .text:0x8029B8D0; // type:function size:0x10 -fn_8029B8E0 = .text:0x8029B8E0; // type:function size:0x10 -fn_8029B8F0 = .text:0x8029B8F0; // type:function size:0x10 -fn_8029B900 = .text:0x8029B900; // type:function size:0x10 -fn_8029B910 = .text:0x8029B910; // type:function size:0x10 -fn_8029B920 = .text:0x8029B920; // type:function size:0x10 -fn_8029B930 = .text:0x8029B930; // type:function size:0x10 -fn_8029B940 = .text:0x8029B940; // type:function size:0x10 -fn_8029B950 = .text:0x8029B950; // type:function size:0x10 -fn_8029B960 = .text:0x8029B960; // type:function size:0x10 -fn_8029B970 = .text:0x8029B970; // type:function size:0x10 -fn_8029B980 = .text:0x8029B980; // type:function size:0x10 -fn_8029B990 = .text:0x8029B990; // type:function size:0x30 -fn_8029B9C0 = .text:0x8029B9C0; // type:function size:0x30 -fn_8029B9F0 = .text:0x8029B9F0; // type:function size:0x30 -fn_8029BA20 = .text:0x8029BA20; // type:function size:0x30 -fn_8029BA50 = .text:0x8029BA50; // type:function size:0x30 -fn_8029BA80 = .text:0x8029BA80; // type:function size:0x30 -LytTadtonesBase__initStates = .text:0x8029BAB0; // type:function size:0x634 -LytMeterSuiryuScoreBase__dtor = .text:0x8029C0F0; // type:function size:0x58 -dLytMeterClefMain__dtor = .text:0x8029C150; // type:function size:0x58 -fn_8029C1B0 = .text:0x8029C1B0; // type:function size:0x88 -fn_8029C240 = .text:0x8029C240; // type:function size:0x88 +initializeState_None__19dLytMeterClefMain_cFv = .text:0x80298DD0; // type:function size:0x4 +executeState_None__19dLytMeterClefMain_cFv = .text:0x80298DE0; // type:function size:0x4 +finalizeState_None__19dLytMeterClefMain_cFv = .text:0x80298DF0; // type:function size:0x4 +initializeState_In__19dLytMeterClefMain_cFv = .text:0x80298E00; // type:function size:0x4 +executeState_In__19dLytMeterClefMain_cFv = .text:0x80298E10; // type:function size:0x4 +finalizeState_In__19dLytMeterClefMain_cFv = .text:0x80298E20; // type:function size:0x4 +initializeState_Wait__19dLytMeterClefMain_cFv = .text:0x80298E30; // type:function size:0x4 +executeState_Wait__19dLytMeterClefMain_cFv = .text:0x80298E40; // type:function size:0xA74 +finalizeState_Wait__19dLytMeterClefMain_cFv = .text:0x802998C0; // type:function size:0x4 +initializeState_Out__19dLytMeterClefMain_cFv = .text:0x802998D0; // type:function size:0x4 +executeState_Out__19dLytMeterClefMain_cFv = .text:0x802998E0; // type:function size:0x4 +finalizeState_Out__19dLytMeterClefMain_cFv = .text:0x802998F0; // type:function size:0x4 +startIn__19dLytMeterClefMain_cFv = .text:0x80299900; // type:function size:0x80 +getStateID__88sStateMgr_c<19dLytMeterClefMain_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80299980; // type:function size:0x10 +startOut__19dLytMeterClefMain_cFv = .text:0x80299990; // type:function size:0x6C +build__19dLytMeterClefMain_cFPQ23d2d10ResAccIf_c = .text:0x80299A00; // type:function size:0x1B8 +changeState__88sStateMgr_c<19dLytMeterClefMain_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x80299BC0; // type:function size:0x10 +remove__19dLytMeterClefMain_cFv = .text:0x80299BD0; // type:function size:0x5C +execute__19dLytMeterClefMain_cFv = .text:0x80299C30; // type:function size:0x14C +executeState__88sStateMgr_c<19dLytMeterClefMain_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80299D80; // type:function size:0x10 +draw__19dLytMeterClefMain_cFv = .text:0x80299D90; // type:function size:0x5C +fn_80299DF0__19dLytMeterClefMain_cFv = .text:0x80299DF0; // type:function size:0x34 +fn_80299E30__19dLytMeterClefMain_cFv = .text:0x80299E30; // type:function size:0x220 +fn_8029A050__19dLytMeterClefMain_cFv = .text:0x8029A050; // type:function size:0x1A4 +fn_8029A200__19dLytMeterClefMain_cFv = .text:0x8029A200; // type:function size:0x5C +fn_8029A260__19dLytMeterClefMain_cFv = .text:0x8029A260; // type:function size:0x60 +fn_8029A2C0__19dLytMeterClefMain_cFv = .text:0x8029A2C0; // type:function size:0xE8 +fn_8029A3B0__19dLytMeterClefMain_cFv = .text:0x8029A3B0; // type:function size:0x8C +fn_8029A440__19dLytMeterClefMain_cFv = .text:0x8029A440; // type:function size:0x238 +dLytSuiryuScore_c_classInit__Fv = .text:0x8029A680; // type:function size:0x1DC +__dt__32sFState_c<19dLytMeterClefMain_c>Fv = .text:0x8029A860; // type:function size:0x58 +__dt__35sFStateFct_c<19dLytMeterClefMain_c>Fv = .text:0x8029A8C0; // type:function size:0x6C +__dt__88sStateMgr_c<19dLytMeterClefMain_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8029A930; // type:function size:0xA0 +__dt__58sFStateMgr_c<19dLytMeterClefMain_c,20sStateMethodUsr_FI_c>Fv = .text:0x8029A9D0; // type:function size:0xA4 +__dt__39sFState_c<26dLytMeterSuiryuScoreBase_c>Fv = .text:0x8029AA80; // type:function size:0x58 +__dt__42sFStateFct_c<26dLytMeterSuiryuScoreBase_c>Fv = .text:0x8029AAE0; // type:function size:0x6C +__dt__95sStateMgr_c<26dLytMeterSuiryuScoreBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8029AB50; // type:function size:0xA0 +__dt__65sFStateMgr_c<26dLytMeterSuiryuScoreBase_c,20sStateMethodUsr_FI_c>Fv = .text:0x8029ABF0; // type:function size:0xA4 +__dt__26dLytMeterSuiryuScoreBase_cFv = .text:0x8029ACA0; // type:function size:0xD8 +__ct__11dLytNote2_cFv = .text:0x8029AD80; // type:function size:0xC0 +__dt__23sFState_c<10dLytNote_c>Fv = .text:0x8029AE40; // type:function size:0x58 +__dt__26sFStateFct_c<10dLytNote_c>Fv = .text:0x8029AEA0; // type:function size:0x6C +__dt__79sStateMgr_c<10dLytNote_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8029AF10; // type:function size:0xA0 +__dt__49sFStateMgr_c<10dLytNote_c,20sStateMethodUsr_FI_c>Fv = .text:0x8029AFB0; // type:function size:0xA4 +__dt__10dLytNote_cFv = .text:0x8029B060; // type:function size:0xD8 +__dt__11dLytNote2_cFv = .text:0x8029B140; // type:function size:0xDC +__dt__19dLytMeterClefMain_cFv = .text:0x8029B220; // type:function size:0x14C +create__17dLytSuiryuScore_cFv = .text:0x8029B370; // type:function size:0x58 +doDelete__17dLytSuiryuScore_cFv = .text:0x8029B3D0; // type:function size:0x30 +execute__17dLytSuiryuScore_cFv = .text:0x8029B400; // type:function size:0x28 +draw__17dLytSuiryuScore_cFv = .text:0x8029B430; // type:function size:0x28 +__dt__17dLytSuiryuScore_cFv = .text:0x8029B460; // type:function size:0x184 +getStateID__95sStateMgr_c<26dLytMeterSuiryuScoreBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8029B5F0; // type:function size:0x10 +build__35sFStateFct_c<19dLytMeterClefMain_c>FRC12sStateIDIf_c = .text:0x8029B600; // type:function size:0x60 +dispose__35sFStateFct_c<19dLytMeterClefMain_c>FRP10sStateIf_c = .text:0x8029B660; // type:function size:0xC +build__42sFStateFct_c<26dLytMeterSuiryuScoreBase_c>FRC12sStateIDIf_c = .text:0x8029B670; // type:function size:0x60 +dispose__42sFStateFct_c<26dLytMeterSuiryuScoreBase_c>FRP10sStateIf_c = .text:0x8029B6D0; // type:function size:0xC +build__26sFStateFct_c<10dLytNote_c>FRC12sStateIDIf_c = .text:0x8029B6E0; // type:function size:0x60 +dispose__26sFStateFct_c<10dLytNote_c>FRP10sStateIf_c = .text:0x8029B740; // type:function size:0xC +initialize__32sFState_c<19dLytMeterClefMain_c>Fv = .text:0x8029B750; // type:function size:0x1C +execute__32sFState_c<19dLytMeterClefMain_c>Fv = .text:0x8029B770; // type:function size:0x1C +finalize__32sFState_c<19dLytMeterClefMain_c>Fv = .text:0x8029B790; // type:function size:0x1C +initialize__39sFState_c<26dLytMeterSuiryuScoreBase_c>Fv = .text:0x8029B7B0; // type:function size:0x1C +execute__39sFState_c<26dLytMeterSuiryuScoreBase_c>Fv = .text:0x8029B7D0; // type:function size:0x1C +finalize__39sFState_c<26dLytMeterSuiryuScoreBase_c>Fv = .text:0x8029B7F0; // type:function size:0x1C +initialize__23sFState_c<10dLytNote_c>Fv = .text:0x8029B810; // type:function size:0x1C +execute__23sFState_c<10dLytNote_c>Fv = .text:0x8029B830; // type:function size:0x1C +finalize__23sFState_c<10dLytNote_c>Fv = .text:0x8029B850; // type:function size:0x1C +initializeState__88sStateMgr_c<19dLytMeterClefMain_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8029B870; // type:function size:0x10 +finalizeState__88sStateMgr_c<19dLytMeterClefMain_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8029B880; // type:function size:0x10 +refreshState__88sStateMgr_c<19dLytMeterClefMain_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8029B890; // type:function size:0x10 +getState__88sStateMgr_c<19dLytMeterClefMain_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8029B8A0; // type:function size:0x10 +getNewStateID__88sStateMgr_c<19dLytMeterClefMain_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8029B8B0; // type:function size:0x10 +getOldStateID__88sStateMgr_c<19dLytMeterClefMain_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8029B8C0; // type:function size:0x10 +initializeState__95sStateMgr_c<26dLytMeterSuiryuScoreBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8029B8D0; // type:function size:0x10 +finalizeState__95sStateMgr_c<26dLytMeterSuiryuScoreBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8029B8E0; // type:function size:0x10 +refreshState__95sStateMgr_c<26dLytMeterSuiryuScoreBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8029B8F0; // type:function size:0x10 +getState__95sStateMgr_c<26dLytMeterSuiryuScoreBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8029B900; // type:function size:0x10 +getNewStateID__95sStateMgr_c<26dLytMeterSuiryuScoreBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8029B910; // type:function size:0x10 +getOldStateID__95sStateMgr_c<26dLytMeterSuiryuScoreBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8029B920; // type:function size:0x10 +initializeState__79sStateMgr_c<10dLytNote_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8029B930; // type:function size:0x10 +finalizeState__79sStateMgr_c<10dLytNote_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8029B940; // type:function size:0x10 +refreshState__79sStateMgr_c<10dLytNote_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8029B950; // type:function size:0x10 +getState__79sStateMgr_c<10dLytNote_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8029B960; // type:function size:0x10 +getNewStateID__79sStateMgr_c<10dLytNote_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8029B970; // type:function size:0x10 +getOldStateID__79sStateMgr_c<10dLytNote_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8029B980; // type:function size:0x10 +finalizeState__41sFStateID_c<26dLytMeterSuiryuScoreBase_c>CFR26dLytMeterSuiryuScoreBase_c = .text:0x8029B990; // type:function size:0x30 +executeState__41sFStateID_c<26dLytMeterSuiryuScoreBase_c>CFR26dLytMeterSuiryuScoreBase_c = .text:0x8029B9C0; // type:function size:0x30 +initializeState__41sFStateID_c<26dLytMeterSuiryuScoreBase_c>CFR26dLytMeterSuiryuScoreBase_c = .text:0x8029B9F0; // type:function size:0x30 +finalizeState__34sFStateID_c<19dLytMeterClefMain_c>CFR19dLytMeterClefMain_c = .text:0x8029BA20; // type:function size:0x30 +executeState__34sFStateID_c<19dLytMeterClefMain_c>CFR19dLytMeterClefMain_c = .text:0x8029BA50; // type:function size:0x30 +initializeState__34sFStateID_c<19dLytMeterClefMain_c>CFR19dLytMeterClefMain_c = .text:0x8029BA80; // type:function size:0x30 +__sinit_\d_lyt_suiryu_score_cpp = .text:0x8029BAB0; // type:function size:0x634 +__dt__41sFStateID_c<26dLytMeterSuiryuScoreBase_c>Fv = .text:0x8029C0F0; // type:function size:0x58 +__dt__34sFStateID_c<19dLytMeterClefMain_c>Fv = .text:0x8029C150; // type:function size:0x58 +isSameName__34sFStateID_c<19dLytMeterClefMain_c>CFPCc = .text:0x8029C1B0; // type:function size:0x88 +isSameName__41sFStateID_c<26dLytMeterSuiryuScoreBase_c>CFPCc = .text:0x8029C240; // type:function size:0x88 LytNoteCompMain__stateSoundEnter = .text:0x8029C2D0; // type:function size:0xF8 LytNoteCompMain__stateSoundUpdate = .text:0x8029C3D0; // type:function size:0x98 fn_8029C470 = .text:0x8029C470; // type:function size:0x10 @@ -37076,24 +37076,24 @@ lbl_8053A444 = .data:0x8053A444; // type:object size:0x134 data:4byte lbl_8053A578 = .data:0x8053A578; // type:object size:0xE data:string lbl_8053A588 = .data:0x8053A588; // type:object size:0x19 data:string g_profile_LYT_SUIRYU_SCORE = .data:0x8053A5A4; // type:object size:0xC -lbl_8053A5B0 = .data:0x8053A5B0; // type:object size:0x4C -lbl_8053A5FC = .data:0x8053A5FC; // type:object size:0xC -lbl_8053A608 = .data:0x8053A608; // type:object size:0x30 -lbl_8053A638 = .data:0x8053A638; // type:object size:0x30 -lbl_8053A668 = .data:0x8053A668; // type:object size:0x18 -lbl_8053A680 = .data:0x8053A680; // type:object size:0x18 -lbl_8053A698 = .data:0x8053A698; // type:object size:0x10 -lbl_8053A6A8 = .data:0x8053A6A8; // type:object size:0x30 -lbl_8053A6D8 = .data:0x8053A6D8; // type:object size:0x30 -lbl_8053A708 = .data:0x8053A708; // type:object size:0x18 -lbl_8053A720 = .data:0x8053A720; // type:object size:0x18 -lbl_8053A738 = .data:0x8053A738; // type:object size:0x10 -lbl_8053A748 = .data:0x8053A748; // type:object size:0x30 -lbl_8053A778 = .data:0x8053A778; // type:object size:0x30 -lbl_8053A7A8 = .data:0x8053A7A8; // type:object size:0x18 -lbl_8053A7C0 = .data:0x8053A7C0; // type:object size:0x2A0 -lbl_8053AA60 = .data:0x8053AA60; // type:object size:0x34 -lbl_8053AA94 = .data:0x8053AA94; // type:object size:0x34 +__vt__17dLytSuiryuScore_c = .data:0x8053A5B0; // type:object size:0x4C +__vt__19dLytMeterClefMain_c = .data:0x8053A5FC; // type:object size:0xC +__vt__58sFStateMgr_c<19dLytMeterClefMain_c,20sStateMethodUsr_FI_c> = .data:0x8053A608; // type:object size:0x30 +__vt__88sStateMgr_c<19dLytMeterClefMain_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x8053A638; // type:object size:0x30 +__vt__35sFStateFct_c<19dLytMeterClefMain_c> = .data:0x8053A668; // type:object size:0x18 +__vt__32sFState_c<19dLytMeterClefMain_c> = .data:0x8053A680; // type:object size:0x18 +__vt__26dLytMeterSuiryuScoreBase_c = .data:0x8053A698; // type:object size:0x10 +__vt__65sFStateMgr_c<26dLytMeterSuiryuScoreBase_c,20sStateMethodUsr_FI_c> = .data:0x8053A6A8; // type:object size:0x30 +__vt__95sStateMgr_c<26dLytMeterSuiryuScoreBase_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x8053A6D8; // type:object size:0x30 +__vt__42sFStateFct_c<26dLytMeterSuiryuScoreBase_c> = .data:0x8053A708; // type:object size:0x18 +__vt__39sFState_c<26dLytMeterSuiryuScoreBase_c> = .data:0x8053A720; // type:object size:0x18 +__vt__10dLytNote_c = .data:0x8053A738; // type:object size:0x10 +__vt__49sFStateMgr_c<10dLytNote_c,20sStateMethodUsr_FI_c> = .data:0x8053A748; // type:object size:0x30 +__vt__79sStateMgr_c<10dLytNote_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x8053A778; // type:object size:0x30 +__vt__26sFStateFct_c<10dLytNote_c> = .data:0x8053A7A8; // type:object size:0x18 +__vt__23sFState_c<10dLytNote_c> = .data:0x8053A7C0; // type:object size:0x2A0 +__vt__34sFStateID_c<19dLytMeterClefMain_c> = .data:0x8053AA60; // type:object size:0x34 +__vt__41sFStateID_c<26dLytMeterSuiryuScoreBase_c> = .data:0x8053AA94; // type:object size:0x34 lbl_8053AAC8 = .data:0x8053AAC8; // type:object size:0xE data:string lbl_8053AAD8 = .data:0x8053AAD8; // type:object size:0x1F data:string lbl_8053AAF8 = .data:0x8053AAF8; // type:object size:0xB data:string @@ -42584,7 +42584,7 @@ sInstance__19dLytMiniGameStart_c = .sbss:0x8057597C; // type:object size:0x4 dat sInstance__19dLytMiniGameScore_c = .sbss:0x80575980; // type:object size:0x4 data:4byte sInstance__21dLytMiniGameScoreSd_c = .sbss:0x80575984; // type:object size:0x4 data:4byte sInstance__14dLytMiniGame_c = .sbss:0x80575988; // type:object size:0x8 data:4byte -lbl_80575990 = .sbss:0x80575990; // type:object size:0x8 data:4byte +sInstance__17dLytSuiryuScore_c = .sbss:0x80575990; // type:object size:0x8 data:4byte lbl_80575998 = .sbss:0x80575998; // type:object size:0x8 data:4byte sInstance__17dLytBossCaption_c = .sbss:0x805759A0; // type:object size:0x8 data:4byte sInstance__17dLytDemoDowsing_c = .sbss:0x805759A8; // type:object size:0x8 data:4byte diff --git a/configure.py b/configure.py index 86ce4cf8..17ce1984 100644 --- a/configure.py +++ b/configure.py @@ -657,7 +657,7 @@ config.libs = [ Object(Matching, "d/lyt/d_lyt_force_line.cpp"), Object(NonMatching, "d/lyt/d_lyt_enemy_icon.cpp"), Object(NonMatching, "d/lyt/d_lyt_mini_game.cpp"), - Object(NonMatching, "d/lyt/d_lyt_meter_suiryu_score.cpp"), + Object(NonMatching, "d/lyt/d_lyt_suiryu_score.cpp"), Object(NonMatching, "d/lyt/d_lyt_meter_suiryu_score_comp.cpp"), Object(NonMatching, "d/lyt/d_lyt_boss_caption.cpp"), Object(NonMatching, "d/lyt/d_lyt_demo_dowsing.cpp"), 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/d2d.h b/include/d/lyt/d2d.h index d650ee9e..fcf416ef 100644 --- a/include/d/lyt/d2d.h +++ b/include/d/lyt/d2d.h @@ -245,6 +245,10 @@ struct AnmGroupBase_c { return mpFrameCtrl->isEndReached(); } + inline bool isStartReached() const { + return mpFrameCtrl->isStartReached(); + } + inline void setRate(f32 rate) { mpFrameCtrl->setRate(rate); } diff --git a/include/d/lyt/d_lyt_note.h b/include/d/lyt/d_lyt_note.h index 1e437031..138f6254 100644 --- a/include/d/lyt/d_lyt_note.h +++ b/include/d/lyt/d_lyt_note.h @@ -20,6 +20,10 @@ public: f32 getField0x260() const; void setFrame(f32); + bool isStateWait() const { + return mStateMgr.isState(StateID_Wait); + } + private: STATE_FUNC_DECLARE(dLytNote_c, Wait); STATE_FUNC_DECLARE(dLytNote_c, In); 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..758c541d --- /dev/null +++ b/include/d/lyt/d_lyt_suiryu_score.h @@ -0,0 +1,148 @@ +#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(s32 idx); + void setColor1(s32 idx); + void alphaForwards(s32 idx, f32 rate); + void alphaBackwards(s32 idx, f32 rate); + void stopMove(); + + void fn_802978F0(u8); + + nw4r::lyt::Pane *getInOutAllPane() const { + return mLyt.findPane("N_inOutAll_00"); + } + +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(); + void fn_80298B10(); + + /* 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; + +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[77]; + + /* 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..5f95745c 100644 --- a/include/d/t/d_t_clef_game.h +++ b/include/d/t/d_t_clef_game.h @@ -8,7 +8,24 @@ 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; + + /* 0x0FC */ u8 _0x0FC[0x14C - 0x0FC]; + /* 0x14C */ u8 field_0x14C[17]; + /* 0x15D */ u8 field_0x15D[17]; }; #endif diff --git a/include/m/m2d.h b/include/m/m2d.h index c51b47dd..5ecdab76 100644 --- a/include/m/m2d.h +++ b/include/m/m2d.h @@ -85,6 +85,10 @@ public: return mCurrFrame >= actualEnd; } + inline bool isStartReached() const { + return std::fabsf(mCurrFrame) <= EGG::Math::epsilon(); + } + inline void setToEnd() { setFrame(mEndFrame - 1.0f); } diff --git a/include/toBeSorted/misc_actor.h b/include/toBeSorted/misc_actor.h index 4024e1bc..ade8210e 100644 --- a/include/toBeSorted/misc_actor.h +++ b/include/toBeSorted/misc_actor.h @@ -1,6 +1,10 @@ #ifndef MISC_ACTOR_H #define MISC_ACTOR_H +#include "common.h" +#include "d/flag/sceneflag_manager.h" +#include "d/t/d_t_clef_game.h" + // TODO - this header might be unnecessary; a lot of functions in // the split corresponding to this header clearly are REL functions // that were moved to the DOL because they need to be called from the DOL. @@ -9,4 +13,47 @@ bool checkIsInSkykeepPuzzle(); void restoreSkykeepPuzzleFromGlobal(); +extern const u8 sTadtoneSceneflags[]; +extern const u8 sTadtoneGroupSizes[]; + +inline bool isValidTadtoneGroupIndex(s32 i) { + return 0 <= i && i <= 17 - 1; +} + +inline void unkTadtoneInline(s32 i, u8 *result) { + if (result != nullptr) { + if (isValidTadtoneGroupIndex(i)) { + if (SceneflagManager::sInstance->isNotTempOrZoneFlag(sTadtoneSceneflags[i])) { + if (SceneflagManager::sInstance->checkTempOrSceneflag(sTadtoneSceneflags[i])) { + *result = sTadtoneGroupSizes[i]; + } else if (dTgClefGame_c::GetInstance() == nullptr) { + *result = 0; + } else { + *result = dTgClefGame_c::GetInstance()->getField_0x14C(i); + } + } else { + *result = sTadtoneGroupSizes[i]; + } + } + } +} + +inline void unkTadtoneInline2(s32 i, u8 *result) { + if (result != nullptr) { + if (isValidTadtoneGroupIndex(i)) { + *result = sTadtoneGroupSizes[i]; + } + } +} + +inline void unkTadtoneInline3(s32 i, u8 *result) { + if (result != nullptr) { + if (isValidTadtoneGroupIndex(i)) { + if (dTgClefGame_c::GetInstance() != nullptr) { + *result = dTgClefGame_c::GetInstance()->getField_0x15D(i); + } + } + } +} + #endif diff --git a/src/d/d_message.cpp b/src/d/d_message.cpp index ee053763..a8c8c7b4 100644 --- a/src/d/d_message.cpp +++ b/src/d/d_message.cpp @@ -228,8 +228,8 @@ bool dFlow_c::handleEventInternal(const MsbFlowInfo *element) { switch (element->param3) { case EVENT_SET_STORYFLAG: StoryflagManager::sInstance->setFlag(params1n2); - if (params1n2 == 0x52) { - dLytMeter_c::GetInstance()->setMeterField_0x13775(true); + if (params1n2 == STORYFLAG_HAS_TADTONE_SCROLL) { + dLytMeter_c::GetInstance()->setIsCollectingTadtoneScroll(true); } if (dLytMsgWindow_c::fn_800D7B40() != 50013 && dLytMsgWindow_c::fn_800D7B40() != 20061) { if (params1n2 == 100 || params1n2 == 64 || params1n2 == 271 || params1n2 == 81 || params1n2 == 668 || diff --git a/src/d/lyt/d_lyt_force_line.cpp b/src/d/lyt/d_lyt_force_line.cpp index 89fa1d3e..fdfca838 100644 --- a/src/d/lyt/d_lyt_force_line.cpp +++ b/src/d/lyt/d_lyt_force_line.cpp @@ -101,7 +101,7 @@ void dLytForceLineParts_c::initializeState_Move() { void dLytForceLineParts_c::executeState_Move() { bool isDone = false; - if (dLytMeter_c::getfn_800C9F70()) { + if (dLytMeter_c::shouldHideLytClef()) { mStateMgr.changeState(StateID_Wait); mMoveRequest = false; mIsDone = true; diff --git a/src/d/lyt/d_lyt_suiryu_score.cpp b/src/d/lyt/d_lyt_suiryu_score.cpp new file mode 100644 index 00000000..631bc262 --- /dev/null +++ b/src/d/lyt/d_lyt_suiryu_score.cpp @@ -0,0 +1,724 @@ +#include "d/lyt/d_lyt_suiryu_score.h" + +#include "common.h" +#include "d/d_pad.h" +#include "d/d_sc_game.h" +#include "d/d_vec.h" +#include "d/flag/storyflag_manager.h" +#include "d/lyt/d2d.h" +#include "d/lyt/d_lyt_force_line.h" +#include "d/lyt/meter/d_lyt_meter.h" +#include "m/m_vec.h" +#include "toBeSorted/arc_managers/layout_arc_manager.h" +#include "toBeSorted/misc_actor.h" + +STATE_DEFINE(dLytMeterSuiryuScoreBase_c, None); +STATE_DEFINE(dLytMeterSuiryuScoreBase_c, In); +STATE_DEFINE(dLytMeterSuiryuScoreBase_c, Wait); +STATE_DEFINE(dLytMeterSuiryuScoreBase_c, Out); + +#define SUIRYU_SCORE_BASE_ANIM_IN 0 +#define SUIRYU_SCORE_BASE_ANIM_ALPHA_OFFSET 1 +#define SUIRYU_SCORE_BASE_ANIM_MOVE_1 4 +#define SUIRYU_SCORE_BASE_ANIM_MOVE_2 5 +#define SUIRYU_SCORE_BASE_ANIM_MOVE_3 6 +#define SUIRYU_SCORE_BASE_ANIM_MOVE_123 7 +#define SUIRYU_SCORE_BASE_ANIM_MOVE_ALL 8 +#define SUIRYU_SCORE_BASE_ANIM_FIX_COLOR_OFFSET 9 +#define SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET 26 +#define SUIRYU_SCORE_BASE_ANIM_FIX_OFFSET 43 +#define SUIRYU_SCORE_BASE_ANIM_LOST_LOOP_OFFSET 60 +#define SUIRYU_SCORE_BASE_ANIM_FIX_N_OFFSET 77 +#define SUIRYU_SCORE_BASE_ANIM_FIX_N_LOOP_OFFSET 94 +#define SUIRYU_SCORE_BASE_ANIM_FIX_P_OFFSET 111 +#define SUIRYU_SCORE_BASE_ANIM_OUT 128 + +#define SUIRYU_SCORE_BASE_NUM_NOTE_ANIMS 17 +#define SUIRYU_SCORE_BASE_NUM_ALPHA_ANIMS 3 +#define SUIRYU_SCORE_BASE_NUM_ANIMS 129 + +#define SUIRYU_SCORE_BASE_NUM_PANES 77 + +void dLytMeterSuiryuScoreBase_c::initializeState_None() {} +void dLytMeterSuiryuScoreBase_c::executeState_None() {} +void dLytMeterSuiryuScoreBase_c::finalizeState_None() {} + +void dLytMeterSuiryuScoreBase_c::initializeState_In() {} +void dLytMeterSuiryuScoreBase_c::executeState_In() {} +void dLytMeterSuiryuScoreBase_c::finalizeState_In() {} + +void dLytMeterSuiryuScoreBase_c::initializeState_Wait() {} +void dLytMeterSuiryuScoreBase_c::executeState_Wait() { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_IN].isEnabled() && mAnm[SUIRYU_SCORE_BASE_ANIM_IN].isEndReached()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_IN].setAnimEnable(false); + field_0x2264 = 2; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_OUT].isEnabled() && mAnm[SUIRYU_SCORE_BASE_ANIM_OUT].isEndReached()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_OUT].setAnimEnable(false); + field_0x2264 = 0; + dLytMeter_c::setGanbariClefRelated(false); + } + + for (int i = 0; i < SUIRYU_SCORE_BASE_NUM_ALPHA_ANIMS; i++) { + if (mAnm[i + SUIRYU_SCORE_BASE_ANIM_ALPHA_OFFSET].isEnabled() && + mAnm[i + SUIRYU_SCORE_BASE_ANIM_ALPHA_OFFSET].isStop2()) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_ALPHA_OFFSET].setAnimEnable(false); + } + } + + int i; + for (int i = 0; i < SUIRYU_SCORE_BASE_NUM_NOTE_ANIMS; i++) { + if (field_0x2251[i] == 0 && mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET].isEnabled()) { + field_0x2262 = i; + break; + } + } + + for (int i = 0; i < SUIRYU_SCORE_BASE_NUM_NOTE_ANIMS; i++) { + if (mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET].isEnabled() && + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET].isEndReached()) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET].setFrame(0.0f); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET].setAnimEnable(false); + } + + if (mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_OFFSET].isEnabled() && + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_OFFSET].isEndReached()) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_OFFSET].setFrame(0.0f); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_OFFSET].setAnimEnable(false); + } + + if (mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOST_LOOP_OFFSET].isEnabled() && + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOST_LOOP_OFFSET].isEndReached()) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOST_LOOP_OFFSET].setFrame(0.0f); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOST_LOOP_OFFSET].setAnimEnable(false); + } + + if (field_0x2251[i] == 0 && mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOST_LOOP_OFFSET].isEnabled() && + 30.0f < mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOST_LOOP_OFFSET].getFrame()) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOST_LOOP_OFFSET].setFrame(0.0f); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOST_LOOP_OFFSET].setAnimEnable(false); + } + + if (mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_N_OFFSET].isEnabled() && + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_N_OFFSET].isEndReached()) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_N_OFFSET].setAnimEnable(false); + field_0x2251[i] = 3; + } + + if (mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_P_OFFSET].isEnabled() && + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_P_OFFSET].isEndReached()) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_P_OFFSET].setAnimEnable(false); + field_0x2251[i] = 3; + } + + if (mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_N_LOOP_OFFSET].isEnabled() && + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_N_LOOP_OFFSET].isEndReached()) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_N_LOOP_OFFSET].setAnimEnable(false); + field_0x2251[i] = 3; + } + } + + for (int i = 0; i < SUIRYU_SCORE_BASE_NUM_NOTE_ANIMS; i++) { + if (mAnm[field_0x2262 + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET].isStartReached() == true) { + if (field_0x2251[i] == 0 && !mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET].isEnabled()) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET].setAnimEnable(true); + } + + if (field_0x2251[i] == 0 && !mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_OFFSET].isEnabled()) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_OFFSET].setAnimEnable(true); + } + } + + if (field_0x2251[i] == 1 && !mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOST_LOOP_OFFSET].isEnabled()) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOST_LOOP_OFFSET].setAnimEnable(true); + } + + if (field_0x2251[i] == 2 && !mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_N_OFFSET].isEnabled()) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_N_OFFSET].setAnimEnable(true); + } + + if (field_0x2251[i] == 2 && !mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_P_OFFSET].isEnabled()) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_P_OFFSET].setAnimEnable(true); + } + + if (field_0x2251[i] == 2 && !mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_N_LOOP_OFFSET].isEnabled()) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_N_LOOP_OFFSET].setAnimEnable(true); + } + } +} +void dLytMeterSuiryuScoreBase_c::finalizeState_Wait() {} + +void dLytMeterSuiryuScoreBase_c::initializeState_Out() {} +void dLytMeterSuiryuScoreBase_c::executeState_Out() {} +void dLytMeterSuiryuScoreBase_c::finalizeState_Out() {} + +static const d2d::LytBrlanMapping scoreBaseBrlanMap[] = { + { "suiryuScoreBase_00_in.brlan", "G_inOutAll_00"}, + { "suiryuScoreBase_00_baseAlpha.brlan", "G_baseAlpha_00"}, + { "suiryuScoreBase_00_baseAlpha.brlan", "G_baseAlpha_01"}, + { "suiryuScoreBase_00_baseAlpha.brlan", "G_baseAlpha_02"}, + { "suiryuScoreBase_00_move1.brlan", "G_scroll_00"}, + { "suiryuScoreBase_00_move2.brlan", "G_scroll_00"}, + { "suiryuScoreBase_00_move3.brlan", "G_scroll_00"}, + { "suiryuScoreBase_00_move123.brlan", "G_scroll_00"}, + { "suiryuScoreBase_00_moveAll.brlan", "G_scroll_00"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_00"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_01"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_02"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_03"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_04"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_05"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_06"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_07"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_08"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_09"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_10"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_11"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_12"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_13"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_14"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_15"}, + { "suiryuScoreBase_00_noteFixColor.brlan", "G_scoreFixP_16"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_00"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_01"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_02"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_03"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_04"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_05"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_06"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_07"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_08"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_09"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_10"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_11"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_12"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_13"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_14"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_15"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreLoop_16"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_00"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_01"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_02"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_03"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_04"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_05"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_06"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_07"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_08"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_09"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_10"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_11"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_12"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_13"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_14"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_15"}, + { "suiryuScoreBase_00_noteLoop.brlan", "G_scoreFixN_16"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_00"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_01"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_02"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_03"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_04"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_05"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_06"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_07"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_08"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_09"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_10"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_11"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_12"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_13"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_14"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_15"}, + {"suiryuScoreBase_00_noteLostLoopB.brlan", "G_scoreLoop_16"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_00"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_01"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_02"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_03"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_04"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_05"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_06"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_07"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_08"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_09"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_10"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_11"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_12"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_13"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_14"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_15"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreFixN_16"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_00"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_01"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_02"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_03"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_04"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_05"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_06"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_07"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_08"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_09"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_10"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_11"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_12"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_13"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_14"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_15"}, + { "suiryuScoreBase_00_noteFixN.brlan", "G_scoreLoop_16"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_00"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_01"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_02"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_03"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_04"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_05"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_06"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_07"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_08"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_09"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_10"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_11"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_12"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_13"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_14"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_15"}, + { "suiryuScoreBase_00_noteFixP.brlan", "G_scoreFixP_16"}, + { "suiryuScoreBase_00_out.brlan", "G_inOutAll_00"}, +}; + +static const char *scoreBasePanes[] = { + "N_scoreA_00", "N_scoreB_00", "N_scoreB_01", "N_scoreB_02", "N_scoreB_03", "N_scoreC_00", "N_scoreC_01", + "N_scoreD_00", "N_scoreD_01", "N_scoreD_02", "N_scoreD_03", "N_scoreD_04", "N_scoreD_05", "N_scoreD_06", + "N_scoreD_07", "N_scoreE_00", "N_scoreF_00", "N_scoreF_01", "N_scoreF_02", "N_scoreF_03", "N_scoreF_04", + "N_scoreF_05", "N_scoreF_06", "N_scoreF_07", "N_scoreG_00", "N_scoreH_00", "N_scoreH_01", "N_scoreH_02", + "N_scoreH_03", "N_scoreI_00", "N_scoreI_01", "N_scoreI_02", "N_scoreI_03", "N_scoreI_04", "N_scoreI_05", + "N_scoreI_06", "N_scoreI_07", "N_scoreJ_00", "N_scoreK_00", "N_scoreK_01", "N_scoreK_02", "N_scoreK_03", + "N_scoreL_00", "N_scoreL_01", "N_scoreL_02", "N_scoreL_03", "N_scoreL_04", "N_scoreL_05", "N_scoreL_06", + "N_scoreL_07", "N_scoreM_00", "N_scoreN_00", "N_scoreN_01", "N_scoreN_02", "N_scoreN_03", "N_scoreO_00", + "N_scoreO_01", "N_scoreP_00", "N_scoreP_01", "N_scoreP_02", "N_scoreP_03", "N_scoreQ_00", "N_scoreQ_01", + "N_scoreQ_02", "N_scoreQ_03", "N_scoreQ_04", "N_scoreQ_05", "N_scoreQ_06", "N_scoreQ_07", "N_scoreQ_08", + "N_scoreQ_09", "N_scoreQ_10", "N_scoreQ_11", "N_scoreQ_12", "N_scoreQ_13", "N_scoreQ_14", "N_scoreQ_15", +}; + +static const char *scoreBasePaneInOutAll = "N_inOutAll_00"; + +bool dLytMeterSuiryuScoreBase_c::build(d2d::ResAccIf_c *resAcc) { + mLyt.setResAcc(resAcc); + mLyt.build("suiryuScoreBase_00.brlyt", nullptr); + + for (int i = 0; i < SUIRYU_SCORE_BASE_NUM_ANIMS; i++) { + mAnm[i].init(scoreBaseBrlanMap[i].mFile, resAcc, mLyt.getLayout(), scoreBaseBrlanMap[i].mName); + mAnm[i].bind(false); + mAnm[i].setRate(1.0f); + mAnm[i].setAnimEnable(false); + } + + for (int i = 0; i < SUIRYU_SCORE_BASE_NUM_PANES; i++) { + mpPanes[i] = mLyt.findPane(scoreBasePanes[i]); + } + + mpPaneInOutAll = mLyt.findPane(scoreBasePaneInOutAll); + mMainTranslate.x = mpPaneInOutAll->GetTranslate().x; + mMainTranslate.y = mpPaneInOutAll->GetTranslate().y; + + for (int i = SUIRYU_SCORE_BASE_ANIM_MOVE_1; i <= SUIRYU_SCORE_BASE_ANIM_MOVE_ALL; i++) { + mAnm[i].setAnimEnable(false); + } + + dLytForceLine_c::initPos(&mLyt, &mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123]); + + initAnm(); + + mStateMgr.changeState(StateID_Wait); + field_0x2264 = 0; + + return true; +} + +bool dLytMeterSuiryuScoreBase_c::remove() { + for (int i = 0; i < SUIRYU_SCORE_BASE_NUM_ANIMS; i++) { + mAnm[i].unbind(); + mAnm[i].remove(); + } + + return true; +} + +bool dLytMeterSuiryuScoreBase_c::execute() { + if (fn_80298600()) { + fn_80298B10(); + } + + if (dScGame_c::isCurrentStage("F103") && dScGame_c::currentSpawnInfo.layer == 13) { + mVec2_c t(mMainTranslate.x, mMainTranslate.y + 110.0f); + mpPaneInOutAll->SetTranslate(vec2ToVec3XY(t)); + } else { + mpPaneInOutAll->SetTranslate(vec2ToVec3XY(mMainTranslate)); + } + + mStateMgr.executeState(); + + for (int i = 0; i < SUIRYU_SCORE_BASE_NUM_ANIMS; i++) { + if (mAnm[i].isEnabled()) { + mAnm[i].play(); + } + } + + mLyt.calc(); + + return true; +} + +bool dLytMeterSuiryuScoreBase_c::draw() { + mLyt.addToDrawList(); + return true; +} + +void dLytMeterSuiryuScoreBase_c::initAnm() {} + +void dLytMeterSuiryuScoreBase_c::startIn() { + if (field_0x2264 == 0) { + if (dScGame_c::isCurrentStage("F103") && dScGame_c::currentSpawnInfo.layer == 13) { + mAnm[SUIRYU_SCORE_BASE_ANIM_IN].setRate(1.0f / 3.0f); + } else { + mAnm[SUIRYU_SCORE_BASE_ANIM_IN].setRate(1.0f); + } + mAnm[SUIRYU_SCORE_BASE_ANIM_IN].setForwardOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_IN].setFrame(0.0f); + mAnm[SUIRYU_SCORE_BASE_ANIM_IN].setAnimEnable(true); + field_0x2264 = 1; + dLytMeter_c::setGanbariClefRelated(true); + } +} + +void dLytMeterSuiryuScoreBase_c::startOut() { + if (field_0x2264 == 2) { + if (dScGame_c::isCurrentStage("F103") && dScGame_c::currentSpawnInfo.layer == 13) { + mAnm[SUIRYU_SCORE_BASE_ANIM_OUT].setRate(1.0f / 3.0f); + } else { + mAnm[SUIRYU_SCORE_BASE_ANIM_OUT].setRate(1.0f); + } + mAnm[SUIRYU_SCORE_BASE_ANIM_OUT].setForwardOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_OUT].setFrame(0.0f); + mAnm[SUIRYU_SCORE_BASE_ANIM_OUT].setAnimEnable(true); + field_0x2264 = 3; + } +} + +void dLytMeterSuiryuScoreBase_c::setColor0(s32 idx) { + s32 actualIdx = idx + SUIRYU_SCORE_BASE_ANIM_FIX_COLOR_OFFSET; + mAnm[actualIdx].setFrame(0.0f); + mAnm[actualIdx].setAnimEnable(true); + mLyt.calc(); + mAnm[actualIdx].setAnimEnable(false); +} + +void dLytMeterSuiryuScoreBase_c::setColor1(s32 idx) { + s32 actualIdx = idx + SUIRYU_SCORE_BASE_ANIM_FIX_COLOR_OFFSET; + mAnm[actualIdx].setFrame(1.0f); + mAnm[actualIdx].setAnimEnable(true); + mLyt.calc(); + mAnm[actualIdx].setAnimEnable(false); +} + +void dLytMeterSuiryuScoreBase_c::alphaBackwards(s32 idx, f32 rate) { + s32 actualIdx = idx + SUIRYU_SCORE_BASE_ANIM_ALPHA_OFFSET; + mAnm[actualIdx].setBackwardsOnce(); + mAnm[actualIdx].setRate(rate); + mAnm[actualIdx].setAnimEnable(true); +} + +void dLytMeterSuiryuScoreBase_c::alphaForwards(s32 idx, f32 rate) { + s32 actualIdx = idx + SUIRYU_SCORE_BASE_ANIM_ALPHA_OFFSET; + mAnm[actualIdx].setForwardOnce(); + mAnm[actualIdx].setRate(rate); + mAnm[actualIdx].setAnimEnable(true); +} + +void dLytMeterSuiryuScoreBase_c::stopMove() { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setAnimEnable(false); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setAnimEnable(false); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setAnimEnable(false); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setAnimEnable(false); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setAnimEnable(false); +} + +STATE_DEFINE(dLytMeterClefMain_c, None); +STATE_DEFINE(dLytMeterClefMain_c, In); +STATE_DEFINE(dLytMeterClefMain_c, Wait); +STATE_DEFINE(dLytMeterClefMain_c, Out); + +#define SUIRYU_SCORE_NUM_NOTES 24 + +void dLytMeterClefMain_c::initializeState_None() {} +void dLytMeterClefMain_c::executeState_None() {} +void dLytMeterClefMain_c::finalizeState_None() {} + +void dLytMeterClefMain_c::initializeState_In() {} +void dLytMeterClefMain_c::executeState_In() {} +void dLytMeterClefMain_c::finalizeState_In() {} + +void dLytMeterClefMain_c::initializeState_Wait() {} +void dLytMeterClefMain_c::executeState_Wait() { + fn_8029A200(); + fn_8029A2C0(); + fn_8029A260(); + fn_8029A440(); + + bool b = dPad::ex_c::fn_80059100(); + if (dScGame_c::isCurrentStage("F103") && dScGame_c::currentSpawnInfo.layer == 13) { + b = false; + field_0x5F40 = 0; + } + + if (dLytMeter_c::GetMain()->fn_800D5380(0) || dLytMeter_c::GetInstance()->isHelpOpen()) { + b = true; + } + + for (int i = 0; i < NUM_TADTONE_GROUPS; i++) { + if (field_0x5E81[i] != 0) { + field_0x5E81[i]--; + // TODO - ... + } + } +} +void dLytMeterClefMain_c::finalizeState_Wait() {} + +void dLytMeterClefMain_c::initializeState_Out() {} +void dLytMeterClefMain_c::executeState_Out() {} +void dLytMeterClefMain_c::finalizeState_Out() {} + +void dLytMeterClefMain_c::startIn() { + if (mStateMgr.isState(StateID_Wait)) { + if (!field_0x5E4C) { + fn_80299DF0(); + } + mBase.startIn(); + } +} + +void dLytMeterClefMain_c::startOut() { + if (mStateMgr.isState(StateID_Wait)) { + mBase.startOut(); + } +} + +bool dLytMeterClefMain_c::build(d2d::ResAccIf_c *resAcc) { + mBase.build(resAcc); + + for (int i = 0; i < SUIRYU_SCORE_NUM_NOTES; i++) { + mNotes[i].mNote.build(resAcc); + } + + fn_80299E30(); + fn_8029A200(); + fn_8029A2C0(); + + for (int i = 0; i < NUM_TADTONE_GROUPS; i++) { + field_0x5E70[i] = field_0x5E5F[i]; + field_0x5E81[i] = field_0x5E5F[i]; + } + + mStateMgr.changeState(StateID_Wait); + + return true; +} + +bool dLytMeterClefMain_c::remove() { + mBase.remove(); + for (int i = 0; i < SUIRYU_SCORE_NUM_NOTES; i++) { + mNotes[i].mNote.remove(); + } + return true; +} + +bool dLytMeterClefMain_c::execute() { + bool hasCollectedAllTadtones = StoryflagManager::sInstance->getFlag(STORYFLAG_ALL_TADTONES_GATHERED); + bool hasTadtoneScroll = StoryflagManager::sInstance->getFlag(STORYFLAG_HAS_TADTONE_SCROLL); + if (hasCollectedAllTadtones == true) { + startOut(); + } else if (hasTadtoneScroll == true) { + if (dLytMeter_c::shouldHideLytClef()) { + startOut(); + } else { + startIn(); + } + } else { + startOut(); + } + + mStateMgr.executeState(); + + mBase.execute(); + + for (int i = 0; i < SUIRYU_SCORE_NUM_NOTES; i++) { + mNotes[i].mNote.execute(mBase.getInOutAllPane()->GetAlpha()); + } + + return true; +} + +bool dLytMeterClefMain_c::draw() { + mBase.draw(); + for (int i = 0; i < SUIRYU_SCORE_NUM_NOTES; i++) { + mNotes[i].mNote.draw(); + } + return true; +} + +void dLytMeterClefMain_c::fn_80299DF0() { + fn_8029A050(); + field_0x5E4C = 1; +} + +void dLytMeterClefMain_c::fn_80299E30() { + for (int i = 0; i < NUM_TADTONE_GROUPS; i++) { + field_0x5E4E[i] = 0; + field_0x5E5F[i] = 0; + field_0x5E70[i] = 0; + field_0x5E81[i] = 0; + field_0x5EA4[i] = 9; + } + + for (int i = 0; i < SUIRYU_SCORE_NUM_NOTES; i++) { + mNotes[i].field_0x278 = 7; + } + + for (int i = 0; i < 77; i++) { + field_0x5EE8[i] = 77; + } + + field_0x5F35 = 18; + field_0x5F36 = 18; + field_0x5E4D = 0; + + field_0x5F3C = 60; + field_0x5F40 = 0; +} + +void dLytMeterClefMain_c::fn_8029A050() { + fn_8029A200(); + fn_8029A2C0(); + + for (int i = 0; i < NUM_TADTONE_GROUPS; i++) { + field_0x5E70[i] = field_0x5E5F[i]; + field_0x5E81[i] = field_0x5E5F[i]; + } + + for (int i = 0; i < NUM_TADTONE_GROUPS; i++) { + if (field_0x5E5F[i] == field_0x5E4E[i]) { + field_0x5EA4[i] = 8; + field_0x5E81[i] = field_0x5E4E[i]; + mBase.fn_802978F0(i); + } + } +} + +void dLytMeterClefMain_c::fn_8029A200() { + for (int i = 0; i < NUM_TADTONE_GROUPS; i++) { + unkTadtoneInline2(i, &field_0x5E4E[i]); + } +} + +void dLytMeterClefMain_c::fn_8029A260() { + for (int i = 0; i < NUM_TADTONE_GROUPS; i++) { + unkTadtoneInline3(i, &field_0x5E92[i]); + } +} + +void dLytMeterClefMain_c::fn_8029A2C0() { + for (int i = 0; i < NUM_TADTONE_GROUPS; i++) { + u8 *result = field_0x5E5F + i; + unkTadtoneInline(i, &field_0x5E5F[i]); + } +} + +void dLytMeterClefMain_c::fn_8029A3B0() { + for (int i = 0; i < NUM_TADTONE_GROUPS; i++) { + field_0x5E70[i] = field_0x5E5F[i]; + } +} + +void dLytMeterClefMain_c::fn_8029A440() { + s32 num8 = 0; + for (int i = 0; i < NUM_TADTONE_GROUPS; i++) { + if (field_0x5EA4[i] == 8) { + num8++; + if (num8 == NUM_TADTONE_GROUPS) { + field_0x5E4D = 1; + } + } else if (field_0x5EA4[i] == 7) { + int acc = 0; + for (int j = 0; j < NUM_TADTONE_GROUPS; j++) { + if (i == j) { + break; + } + acc += field_0x5E4E[j]; + } + bool b = true; + for (int j = 0; j < field_0x5E4E[i]; j++) { + // TODO cast + if ((s32)field_0x5EE8[acc + j] != 77 && !mNotes[field_0x5EE8[acc + j]].mNote.isStateWait()) { + b = false; + } + } + + if (b) { + field_0x5EA4[i] = 8; + } + } else { + if ((field_0x5E5F[i] == field_0x5E4E[i]) && (field_0x5E81[i] == field_0x5E4E[i])) { + field_0x5EA4[i] = 5; + } else if ((field_0x5E5F[i] == 0) && (field_0x5E81[i] == 0)) { + field_0x5EA4[i] = 9; + } else if (field_0x5EA4[i] != 4) { + if (field_0x5E5F[i] != field_0x5E81[i]) { + if (field_0x5E81[i] < field_0x5E5F[i]) { + field_0x5EA4[i] = 0; + field_0x5F35 = i; + } + if (field_0x5EA4[field_0x5F36] != 3 && field_0x5E5F[i] < field_0x5E81[i]) { + field_0x5EA4[i] = 1; + } + if (field_0x5E5F[i] == field_0x5E4E[i]) { + field_0x5F35 = i; + } + } + } + } + } + + if (field_0x5F35 < NUM_TADTONE_GROUPS && field_0x5F36 < NUM_TADTONE_GROUPS && field_0x5F35 != field_0x5F36) { + if ((field_0x5EA4[field_0x5F36] < 3 || field_0x5EA4[field_0x5F36] > 5) && + (field_0x5EA4[field_0x5F36] < 7 || field_0x5EA4[field_0x5F36] > 8)) { + field_0x5EA4[field_0x5F36] = 2; + } + } +} + +SPECIAL_BASE_PROFILE(LYT_SUIRYU_SCORE, dLytSuiryuScore_c, fProfile::LYT_SUIRYU_SCORE, 0x2B5, 0x06F9); + +dLytSuiryuScore_c *dLytSuiryuScore_c::sInstance; + +int dLytSuiryuScore_c::create() { + void *data = LayoutArcManager::GetInstance()->getLoadedData("Score"); + mResAcc.attach(data, ""); + mMain.build(&mResAcc); + sInstance = this; + return SUCCEEDED; +} + +int dLytSuiryuScore_c::doDelete() { + mMain.remove(); + sInstance = nullptr; + return SUCCEEDED; +} + +int dLytSuiryuScore_c::execute() { + mMain.execute(); + return SUCCEEDED; +} + +int dLytSuiryuScore_c::draw() { + mMain.draw(); + return SUCCEEDED; +} diff --git a/src/d/lyt/meter/d_lyt_meter.cpp b/src/d/lyt/meter/d_lyt_meter.cpp index bb0accb9..4de66635 100644 --- a/src/d/lyt/meter/d_lyt_meter.cpp +++ b/src/d/lyt/meter/d_lyt_meter.cpp @@ -567,15 +567,15 @@ bool dLytMeterMain_c::isNotSilentRealmOrLoftwing() { return true; } -bool dLytMeterMain_c::fn_800C9F70() { - if ((fn_800D56B0() && !field_0x13775) || isInModeMap() || isInModePause()) { +bool dLytMeterMain_c::shouldHideLytClef() { + if ((shouldBeHiddenGeneral() && !mIsCollectingTadtoneScroll) || isInModeMap() || isInModePause()) { return true; } return false; } bool dLytMeterMain_c::fn_800C9FE0() { - if (fn_800D56B0() || mMode == MODE_MAP_INIT || isInModePause()) { + if (shouldBeHiddenGeneral() || mMode == MODE_MAP_INIT || isInModePause()) { return true; } return false; @@ -857,7 +857,7 @@ bool dLytMeterMain_c::build(d2d::ResAccIf_c *resAcc) { mMode = MODE_NONE; field_0x13770 = 3; mHelpOpen = false; - field_0x13775 = 0; + mIsCollectingTadtoneScroll = false; field_0x13773 = 0; mTimerVisible = false; mBirdGaugeVisible = false; @@ -1078,7 +1078,7 @@ bool dLytMeterMain_c::isInModePause() { return false; } -bool dLytMeterMain_c::fn_800D56B0() { +bool dLytMeterMain_c::shouldBeHiddenGeneral() { if (dLytSaveMgr_c::GetInstance() != nullptr && dLytSaveMgr_c::GetInstance()->isBusy()) { return true; } @@ -1179,18 +1179,18 @@ void dLytMeterMain_c::checkPaneVisibility() { || (MinigameManager::isInMinigameState(MinigameManager::TRIAL_TIME_ATTACK) && LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_B) == LytDoButtonRelated::ACT_IE_NONE) || - (dLytMeter_c::getField_0x13B66() || (fn_800D56B0() && !mItemSelect.fn_800F02F0() && !isDoingSkyKeepPuzzle()) || + (dLytMeter_c::getField_0x13B66() || (shouldBeHiddenGeneral() && !mItemSelect.fn_800F02F0() && !isDoingSkyKeepPuzzle()) || isInModeMap() || isInModePause())) { mPanesVisible[METER_ANIM_ITEM_SELECT] = false; } - if ((fn_800D56B0() && !isDoingSkyKeepPuzzle() && !mMinusBtn.fn_800F75E0()) + if ((shouldBeHiddenGeneral() && !isDoingSkyKeepPuzzle() && !mMinusBtn.fn_800F75E0()) || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || mMode == MODE_MAP_INIT || isInModePause())) { mPanesVisible[METER_ANIM_MINUS_BTN] = false; } - if ((fn_800D56B0() && !isDoingSkyKeepPuzzle()) + if ((shouldBeHiddenGeneral() && !isDoingSkyKeepPuzzle()) || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || mMode == MODE_MAP_INIT || isInModePause()) @@ -1198,7 +1198,7 @@ void dLytMeterMain_c::checkPaneVisibility() { mPanesVisible[METER_ANIM_PLUS_BTN] = false; } - if ((fn_800D56B0() && !isDoingSkyKeepPuzzle()) + if ((shouldBeHiddenGeneral() && !isDoingSkyKeepPuzzle()) || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || mMode == MODE_MAP_INIT || isInModePause()) @@ -1206,7 +1206,7 @@ void dLytMeterMain_c::checkPaneVisibility() { mPanesVisible[METER_ANIM_CROSS_BTN] = false; } - if ((fn_800D56B0() && !isDoingSkyKeepPuzzle()) + if ((shouldBeHiddenGeneral() && !isDoingSkyKeepPuzzle()) || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || mMode == MODE_MAP_INIT || isInModePause()) @@ -1214,7 +1214,7 @@ void dLytMeterMain_c::checkPaneVisibility() { mPanesVisible[METER_ANIM_1_BTN] = false; } - if ((fn_800D56B0() && !isDoingSkyKeepPuzzle()) + if ((shouldBeHiddenGeneral() && !isDoingSkyKeepPuzzle()) || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || mMode == MODE_MAP_INIT || isInModePause()) @@ -1222,7 +1222,7 @@ void dLytMeterMain_c::checkPaneVisibility() { mPanesVisible[METER_ANIM_2_BTN] = false; } - if ((fn_800D56B0() && !isDoingSkyKeepPuzzle()) + if ((shouldBeHiddenGeneral() && !isDoingSkyKeepPuzzle()) || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || mMode == MODE_MAP_INIT || isInModePause()) @@ -1230,7 +1230,7 @@ void dLytMeterMain_c::checkPaneVisibility() { mPanesVisible[METER_ANIM_A_BTN] = false; } - if ((fn_800D56B0() && !isDoingSkyKeepPuzzle()) + if ((shouldBeHiddenGeneral() && !isDoingSkyKeepPuzzle()) || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || mMode == MODE_MAP_INIT || isInModePause()) @@ -1238,7 +1238,7 @@ void dLytMeterMain_c::checkPaneVisibility() { mPanesVisible[METER_ANIM_REMOCON_BG] = false; } - if ((fn_800D56B0() && !isDoingSkyKeepPuzzle() && !mDowsing.fn_800FE490()) + if ((shouldBeHiddenGeneral() && !isDoingSkyKeepPuzzle() && !mDowsing.fn_800FE490()) || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || mMode == MODE_MAP_INIT || isInModePause()) @@ -1246,7 +1246,7 @@ void dLytMeterMain_c::checkPaneVisibility() { mPanesVisible[METER_ANIM_DOWSING] = false; } - if ((fn_800D56B0() && !isDoingSkyKeepPuzzle()) + if ((shouldBeHiddenGeneral() && !isDoingSkyKeepPuzzle()) || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || mMode == MODE_MAP_INIT || isInModePause()) @@ -1254,7 +1254,7 @@ void dLytMeterMain_c::checkPaneVisibility() { mPanesVisible[METER_ANIM_Z_BTN] = false; } - if ((fn_800D56B0() && !isDoingSkyKeepPuzzle()) + if ((shouldBeHiddenGeneral() && !isDoingSkyKeepPuzzle()) || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || mMode == MODE_MAP_INIT || isInModePause()) @@ -1262,7 +1262,7 @@ void dLytMeterMain_c::checkPaneVisibility() { mPanesVisible[METER_ANIM_NUN_STK] = false; } - if ((fn_800D56B0() && !isDoingSkyKeepPuzzle()) + if ((shouldBeHiddenGeneral() && !isDoingSkyKeepPuzzle()) || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || mMode == MODE_MAP_INIT || isInModePause()) @@ -1278,7 +1278,7 @@ void dLytMeterMain_c::checkPaneVisibility() { MinigameManager::isInMinigameState(MinigameManager::TRIAL_TIME_ATTACK) || MinigameManager::isInMinigameState(MinigameManager::PUMPKIN_ARCHERY) || MinigameManager::isInMinigameState(MinigameManager::SPIRAL_CHARGE_TUTORIAL) || - MinigameManager::isInMinigameState(MinigameManager::ROLLERCOASTER) || fn_800D56B0() || mIsInSwordDrawEvent) + MinigameManager::isInMinigameState(MinigameManager::ROLLERCOASTER) || shouldBeHiddenGeneral() || mIsInSwordDrawEvent) || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || (dLytSimpleWindow_c::getInstance() != nullptr && dLytSimpleWindow_c::getInstance()->isOutputText()) || @@ -1301,7 +1301,7 @@ void dLytMeterMain_c::checkPaneVisibility() { || (dMessage_c::getInstance()->getField_0x2FC() && mHeart.getField_0x78C() && !dAcPy_c::LINK->isSittingOrUnk0xAE()) - || (fn_800D56B0() && + || (shouldBeHiddenGeneral() && (dMessage_c::getInstance()->getField_0x2FC() == 0 || dMessage_c::getInstance()->getField_0x2FC() == -2)) || mIsInSwordDrawEvent @@ -1326,7 +1326,7 @@ void dLytMeterMain_c::checkPaneVisibility() { MinigameManager::isInMinigameState(MinigameManager::SPIRAL_CHARGE_TUTORIAL) || MinigameManager::isInMinigameState(MinigameManager::ROLLERCOASTER)) - || (fn_800D56B0() && mHeart.getField_0x78C() == 0) + || (shouldBeHiddenGeneral() && mHeart.getField_0x78C() == 0) || (dScGame_c::currentSpawnInfo.stageName == "F406" && dScGame_c::currentSpawnInfo.layer == 13) @@ -1338,7 +1338,7 @@ void dLytMeterMain_c::checkPaneVisibility() { mPanesVisible[METER_ANIM_HEART] = false; } - if (!isSilentRealm() || (fn_800D56B0() && !fn_800D5590()) + if (!isSilentRealm() || (shouldBeHiddenGeneral() && !fn_800D5590()) || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || mMode == MODE_MAP_INIT || isInModePause())) { mTimerVisible = false; @@ -1353,7 +1353,7 @@ void dLytMeterMain_c::checkPaneVisibility() { } if ((dAcPy_c::GetLink()->hasvt_0x1C0() || dAcPy_c::GetLink()->checkActionFlagsCont(0x10) || - (fn_800D56B0() && !mHelpOpen) || mGanbariGauge.fn_80104760() || + (shouldBeHiddenGeneral() && !mHelpOpen) || mGanbariGauge.fn_80104760() || MinigameManager::isInMinigameState(MinigameManager::FUN_FUN_ISLAND) || MinigameManager::isInMinigameState(MinigameManager::THRILL_DIGGER) || @@ -1365,7 +1365,7 @@ void dLytMeterMain_c::checkPaneVisibility() { mPanesVisible[METER_ANIM_GANBARI_GAUGE] = false; } - if ((dAcPy_c::GetLink()->getRidingActorType() != dAcPy_c::RIDING_LOFTWING || fn_800D56B0()) || + if ((dAcPy_c::GetLink()->getRidingActorType() != dAcPy_c::RIDING_LOFTWING || shouldBeHiddenGeneral()) || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || isInModeMap() || isInModePause())) { mSkyGaugeVisible = false; } else if (bird != nullptr && mpSkyGauge != nullptr) { @@ -1382,7 +1382,7 @@ void dLytMeterMain_c::checkPaneVisibility() { if (dAcPy_c::GetLink()->getRidingActorType() != dAcPy_c::RIDING_LOFTWING || !field_0x13780 || - (dLytDobutton_c::getAction() != dLytDobutton_c::ACT_DO_INVALID || fn_800D56B0() || + (dLytDobutton_c::getAction() != dLytDobutton_c::ACT_DO_INVALID || shouldBeHiddenGeneral() || dLytMeter_c::getField_0x13B66() || fn_800D5420() || isInModeMap() || isInModePause())) { mBirdGaugeVisible = false; } @@ -1408,7 +1408,7 @@ void dLytMeterMain_c::checkPaneVisibility() { } } - if (!field_0x13781 || fn_800D56B0() || + if (!field_0x13781 || shouldBeHiddenGeneral() || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || isInModeMap() || isInModePause())) { mBossGaugeVisible = false; @@ -1436,7 +1436,7 @@ void dLytMeterMain_c::checkPaneVisibility() { if (dAcItem_c::getKeyPieceCount() == 0 || dLytAreaCaption_c::getVisible() || fn_800D5380(false) || SceneflagManager::sInstance->checkSceneflagGlobal(4, 0x21) || MinigameManager::isInAnyMinigame() - || (dLytMeter_c::getField_0x13B66() || fn_800D56B0() || mIsInSwordDrawEvent || fn_800D5420() || + || (dLytMeter_c::getField_0x13B66() || shouldBeHiddenGeneral() || mIsInSwordDrawEvent || fn_800D5420() || isInModeMap() || isInModePause())) { mKakeraKeyVisible = false; } @@ -1454,7 +1454,7 @@ void dLytMeterMain_c::checkPaneVisibility() { || DungeonflagManager::sInstance->getCounterOrFlag(16, 8) != 0 || dAcPy_c::GetLink()->getCurrentAction() == 0x8C || dLytAreaCaption_c::getVisible() || fn_800D5380(false) || - MinigameManager::isInAnyMinigame() || fn_800D56B0() || mIsInSwordDrawEvent + MinigameManager::isInAnyMinigame() || shouldBeHiddenGeneral() || mIsInSwordDrawEvent || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || isInModeMap() || isInModePause())) { mBossKeyVisible = false; @@ -1471,7 +1471,7 @@ void dLytMeterMain_c::checkPaneVisibility() { if (mpSmallKey != nullptr) { if (dAcItem_c::getSmallKeyCount() == 0 || dLytAreaCaption_c::getVisible() || fn_800D5380(false) || - MinigameManager::isInAnyMinigame() || fn_800D56B0() || mIsInSwordDrawEvent + MinigameManager::isInAnyMinigame() || shouldBeHiddenGeneral() || mIsInSwordDrawEvent || (dLytMeter_c::getField_0x13B66() || fn_800D5420() || isInModeMap() || isInModePause())) { mSmallKeyVisible = false; @@ -1490,7 +1490,7 @@ void dLytMeterMain_c::checkPaneVisibility() { if (!field_0x137B2 || dLytAreaCaption_c::getVisible() || fn_800D5380(false) || MinigameManager::isInAnyMinigame() || mIsInSwordDrawEvent - || fn_800D56B0() || dLytMeter_c::getField_0x13B66() || fn_800D5420() || isInModeMap() || isInModePause()) { + || shouldBeHiddenGeneral() || dLytMeter_c::getField_0x13B66() || fn_800D5420() || isInModeMap() || isInModePause()) { mDrinkVisible = false; } @@ -1509,8 +1509,8 @@ void dLytMeterMain_c::checkPaneVisibility() { bool dLytMeterMain_c::execute() { dLytMeter_c *meter = dLytMeter_c::GetInstance(); - if (field_0x13775 && !EventManager::isInEvent()) { - field_0x13775 = 0; + if (mIsCollectingTadtoneScroll && !EventManager::isInEvent()) { + mIsCollectingTadtoneScroll = false; } if (isSilentRealm()) { diff --git a/src/d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp b/src/d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp index 448c8cbe..9cd61dbf 100644 --- a/src/d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp +++ b/src/d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp @@ -332,7 +332,7 @@ bool dLytMeterGanbariGauge_c::build(d2d::ResAccIf_c *resAcc) { field_0x548 = dLytMeter_HIO_c::sInstance->field_0x1C8; field_0x558 = 0; - field_0x559 = 0; + mClefRelated = false; field_0x55B = 0; mpOwnerPane = nullptr; field_0x55A = 0; @@ -483,7 +483,7 @@ bool dLytMeterGanbariGauge_c::execute() { angle = 3; v2.set(-95.0f, -50.0f); scale = 0.9f; - } else if (field_0x559 && swimmingRelated()) { + } else if (mClefRelated && swimmingRelated()) { angle = 1; v2.set(-65.0f, 0.0f); scale = 1.0f; From 98b97ac2b36ff0ad39a25d608923cabad2b02d6f Mon Sep 17 00:00:00 2001 From: robojumper Date: Sun, 1 Mar 2026 17:12:09 +0100 Subject: [PATCH 2/3] Mostly ok --- config/SOUE01/symbols.txt | 24 +- include/d/lyt/d_lyt_note.h | 48 +- include/d/lyt/d_lyt_suiryu_score.h | 35 +- src/d/lyt/d_lyt_note.cpp | 36 +- src/d/lyt/d_lyt_suiryu_score.cpp | 832 ++++++++++++++++++++++++++++- 5 files changed, 923 insertions(+), 52 deletions(-) diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 96693fac..4100cd30 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -15507,21 +15507,21 @@ draw__26dLytMeterSuiryuScoreBase_cFv = .text:0x80297350; // type:function size:0 initAnm__26dLytMeterSuiryuScoreBase_cFv = .text:0x80297380; // type:function size:0x2D8 startIn__26dLytMeterSuiryuScoreBase_cFv = .text:0x80297660; // type:function size:0xBC startOut__26dLytMeterSuiryuScoreBase_cFv = .text:0x80297720; // type:function size:0xA8 -setColor0__26dLytMeterSuiryuScoreBase_cFl = .text:0x802977D0; // type:function size:0x84 -setColor1__26dLytMeterSuiryuScoreBase_cFl = .text:0x80297860; // type:function size:0x84 -fn_802978F0 = .text:0x802978F0; // type:function size:0x1EC -fn_80297AE0 = .text:0x80297AE0; // type:function size:0x54 -fn_80297B40 = .text:0x80297B40; // type:function size:0x54 -fn_80297BA0 = .text:0x80297BA0; // type:function size:0xD4 -fn_80297C80 = .text:0x80297C80; // type:function size:0xC4 +setColor0__26dLytMeterSuiryuScoreBase_cFUc = .text:0x802977D0; // type:function size:0x84 +setColor1__26dLytMeterSuiryuScoreBase_cFUc = .text:0x80297860; // type:function size:0x84 +fn_802978F0__26dLytMeterSuiryuScoreBase_cFl = .text:0x802978F0; // type:function size:0x1EC +fn_80297AE0__26dLytMeterSuiryuScoreBase_cFv = .text:0x80297AE0; // type:function size:0x54 +fn_80297B40__26dLytMeterSuiryuScoreBase_cFv = .text:0x80297B40; // type:function size:0x54 +fn_80297BA0__26dLytMeterSuiryuScoreBase_cFv = .text:0x80297BA0; // type:function size:0xD4 +fn_80297C80__26dLytMeterSuiryuScoreBase_cFv = .text:0x80297C80; // type:function size:0xC4 alphaBackwards__26dLytMeterSuiryuScoreBase_cFlf = .text:0x80297D50; // type:function size:0x60 alphaForwards__26dLytMeterSuiryuScoreBase_cFlf = .text:0x80297DB0; // type:function size:0x60 -fn_80297E10 = .text:0x80297E10; // type:function size:0x84 -fn_80297EA0 = .text:0x80297EA0; // type:function size:0x140 -fn_80297FE0 = .text:0x80297FE0; // type:function size:0x61C -fn_80298600 = .text:0x80298600; // type:function size:0x50C +fn_80297E10__26dLytMeterSuiryuScoreBase_cCFUc = .text:0x80297E10; // type:function size:0x84 +fn_80297EA0__26dLytMeterSuiryuScoreBase_cFv = .text:0x80297EA0; // type:function size:0x140 +fn_80297FE0__26dLytMeterSuiryuScoreBase_cFUc = .text:0x80297FE0; // type:function size:0x61C +fn_80298600__26dLytMeterSuiryuScoreBase_cFv = .text:0x80298600; // type:function size:0x50C stopMove__26dLytMeterSuiryuScoreBase_cFv = .text:0x80298B10; // type:function size:0x64 -fn_80298B80 = .text:0x80298B80; // type:function size:0x248 +fn_80298B80__26dLytMeterSuiryuScoreBase_cFv = .text:0x80298B80; // type:function size:0x248 initializeState_None__19dLytMeterClefMain_cFv = .text:0x80298DD0; // type:function size:0x4 executeState_None__19dLytMeterClefMain_cFv = .text:0x80298DE0; // type:function size:0x4 finalizeState_None__19dLytMeterClefMain_cFv = .text:0x80298DF0; // type:function size:0x4 diff --git a/include/d/lyt/d_lyt_note.h b/include/d/lyt/d_lyt_note.h index 138f6254..bb9788b2 100644 --- a/include/d/lyt/d_lyt_note.h +++ b/include/d/lyt/d_lyt_note.h @@ -24,6 +24,42 @@ public: 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); @@ -38,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 index 758c541d..18792450 100644 --- a/include/d/lyt/d_lyt_suiryu_score.h +++ b/include/d/lyt/d_lyt_suiryu_score.h @@ -26,18 +26,44 @@ public: void startIn(); void startOut(); - void setColor0(s32 idx); - void setColor1(s32 idx); + 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(u8); + 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); @@ -66,6 +92,7 @@ private: class dLytMeterClefMain_c { private: static const s32 NUM_TADTONE_GROUPS = 17; + static const s32 NUM_TOTAL_TADTONES = 77; public: dLytMeterClefMain_c() @@ -115,7 +142,7 @@ private: /* 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[77]; + /* 0x5EE8 */ u8 field_0x5EE8[NUM_TOTAL_TADTONES]; /* 0x5F35 */ u8 field_0x5F35; /* 0x5F36 */ u8 field_0x5F36; diff --git a/src/d/lyt/d_lyt_note.cpp b/src/d/lyt/d_lyt_note.cpp index 231b3cf3..8f3d2d7e 100644 --- a/src/d/lyt/d_lyt_note.cpp +++ b/src/d/lyt/d_lyt_note.cpp @@ -28,11 +28,11 @@ static const d2d::LytBrlanMapping brlanMap[] = { #define NOTE_ANIM_INVALID 6 void dLytNote_c::initializeState_Wait() { - field_0x273 = 0; + mIsMove = false; } void dLytNote_c::executeState_Wait() { - if (field_0x270 != 0) { + if (mShouldMove) { mStateMgr.changeState(StateID_In); } } @@ -40,14 +40,14 @@ void dLytNote_c::executeState_Wait() { void dLytNote_c::finalizeState_Wait() {} void dLytNote_c::initializeState_In() { - field_0x274 = 0; + mForceOut = false; mpPane->SetVisible(true); mAnmGroups[NOTE_ANIM_GET].setAnimEnable(true); mAnmGroups[NOTE_ANIM_GET].setFrame(0.0f); } void dLytNote_c::executeState_In() { - if (field_0x270 == 0) { + if (!mShouldMove) { mAnmGroups[NOTE_ANIM_GET].setToEnd(); mAnmGroups[NOTE_ANIM_GET].setAnimEnable(false); mStateMgr.changeState(StateID_Out); @@ -68,14 +68,14 @@ void dLytNote_c::executeState_In() { void dLytNote_c::finalizeState_In() {} void dLytNote_c::initializeState_Move() { - field_0x273 = 1; + mIsMove = true; } void dLytNote_c::executeState_Move() { - if (field_0x270 == 0) { + if (!mShouldMove) { mAnmGroups[mInAnim].setAnimEnable(false); mStateMgr.changeState(StateID_Out); - } else if (field_0x272 != 0 && mInAnim == NOTE_ANIM_GET_LOOP) { + } else if (mIsAboutToLose && mInAnim == NOTE_ANIM_GET_LOOP) { mAnmGroups[mInAnim].setAnimEnable(false); field_0x260 = 0.0f; mInAnim = NOTE_ANIM_LOST_LOOP; @@ -88,7 +88,7 @@ void dLytNote_c::executeState_Move() { mAnmGroups[mInAnim].setFrame(field_0x260); mAnmGroups[mInAnim].setAnimEnable(true); } else { - if (field_0x272 == 0 && mInAnim == NOTE_ANIM_LOST_LOOP) { + if (!mIsAboutToLose && mInAnim == NOTE_ANIM_LOST_LOOP) { mAnmGroups[mInAnim].setAnimEnable(false); field_0x260 = 0.0f; mInAnim = NOTE_ANIM_GET_LOOP; @@ -108,8 +108,8 @@ void dLytNote_c::finalizeState_Move() {} void dLytNote_c::initializeState_Out() { mInAnim = NOTE_ANIM_INVALID; - field_0x273 = 0; - if (field_0x271) { + mIsMove = false; + if (mIsCollected) { mOutAnim = NOTE_ANIM_FIX; } else { mOutAnim = NOTE_ANIM_LOST; @@ -119,7 +119,7 @@ void dLytNote_c::initializeState_Out() { } void dLytNote_c::executeState_Out() { - if (field_0x274 != 0) { + if (mForceOut) { mAnmGroups[mOutAnim].setToEnd(); } @@ -155,12 +155,12 @@ bool dLytNote_c::build(d2d::ResAccIf_c *resAcc) { mInAnim = NOTE_ANIM_INVALID; mOutAnim = NOTE_ANIM_FIX; field_0x260 = 0.0f; - field_0x270 = 0; - field_0x271 = 0; - field_0x272 = 0; - field_0x273 = 0; - field_0x274 = 0; - field_0x26C = 0; + mShouldMove = false; + mIsCollected = false; + mIsAboutToLose = false; + mIsMove = false; + mForceOut = false; + mColor = 0; mStateMgr.changeState(StateID_Wait); return true; } @@ -177,7 +177,7 @@ void dLytNote_c::execute(u8 alpha) { mStateMgr.executeState(); if (*mStateMgr.getStateID() != StateID_Wait) { mpPane->SetTranslate(mTranslate); - mAnmGroups[NOTE_ANIM_COLOR].setFrame(field_0x26C); + mAnmGroups[NOTE_ANIM_COLOR].setFrame(mColor); mpPane->SetAlpha(alpha); mLyt.calc(); } diff --git a/src/d/lyt/d_lyt_suiryu_score.cpp b/src/d/lyt/d_lyt_suiryu_score.cpp index 631bc262..0b9cc849 100644 --- a/src/d/lyt/d_lyt_suiryu_score.cpp +++ b/src/d/lyt/d_lyt_suiryu_score.cpp @@ -8,6 +8,8 @@ #include "d/lyt/d2d.h" #include "d/lyt/d_lyt_force_line.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 "m/m_vec.h" #include "toBeSorted/arc_managers/layout_arc_manager.h" #include "toBeSorted/misc_actor.h" @@ -373,7 +375,57 @@ bool dLytMeterSuiryuScoreBase_c::draw() { return true; } -void dLytMeterSuiryuScoreBase_c::initAnm() {} +void dLytMeterSuiryuScoreBase_c::initAnm() { + mAnm[SUIRYU_SCORE_BASE_ANIM_OUT].setForwardOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_OUT].setToStart(); + mAnm[SUIRYU_SCORE_BASE_ANIM_OUT].setAnimEnable(false); + + for (int i = 0; i < SUIRYU_SCORE_BASE_NUM_NOTE_ANIMS; i++) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_N_OFFSET].setForwardOnce(); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_N_OFFSET].setToStart(); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_N_OFFSET].setAnimEnable(false); + + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_P_OFFSET].setForwardOnce(); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_P_OFFSET].setToStart(); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_P_OFFSET].setAnimEnable(false); + + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_N_LOOP_OFFSET].setForwardOnce(); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_N_LOOP_OFFSET].setToStart(); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_N_LOOP_OFFSET].setAnimEnable(false); + + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOST_LOOP_OFFSET].setForwardOnce(); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOST_LOOP_OFFSET].setToStart(); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOST_LOOP_OFFSET].setAnimEnable(false); + + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_OFFSET].setForwardOnce(); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_OFFSET].setToStart(); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_OFFSET].setAnimEnable(true); + mLyt.calc(); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_FIX_OFFSET].setAnimEnable(false); + + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET].setForwardOnce(); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET].setToStart(); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET].setAnimEnable(true); + mLyt.calc(); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET].setAnimEnable(false); + setColor0(i); + } + + mAnm[SUIRYU_SCORE_BASE_ANIM_IN].setForwardOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_IN].setToStart(); + mAnm[SUIRYU_SCORE_BASE_ANIM_IN].setAnimEnable(true); + mLyt.calc(); + mAnm[SUIRYU_SCORE_BASE_ANIM_IN].setAnimEnable(false); + + fn_80297C80(); + fn_80297EA0(); + + for (int i = 0; i < SUIRYU_SCORE_BASE_NUM_NOTE_ANIMS; i++) { + field_0x2251[i] = 0; + } + + field_0x2262 = 0; +} void dLytMeterSuiryuScoreBase_c::startIn() { if (field_0x2264 == 0) { @@ -404,7 +456,7 @@ void dLytMeterSuiryuScoreBase_c::startOut() { } } -void dLytMeterSuiryuScoreBase_c::setColor0(s32 idx) { +void dLytMeterSuiryuScoreBase_c::setColor0(u8 idx) { s32 actualIdx = idx + SUIRYU_SCORE_BASE_ANIM_FIX_COLOR_OFFSET; mAnm[actualIdx].setFrame(0.0f); mAnm[actualIdx].setAnimEnable(true); @@ -412,7 +464,7 @@ void dLytMeterSuiryuScoreBase_c::setColor0(s32 idx) { mAnm[actualIdx].setAnimEnable(false); } -void dLytMeterSuiryuScoreBase_c::setColor1(s32 idx) { +void dLytMeterSuiryuScoreBase_c::setColor1(u8 idx) { s32 actualIdx = idx + SUIRYU_SCORE_BASE_ANIM_FIX_COLOR_OFFSET; mAnm[actualIdx].setFrame(1.0f); mAnm[actualIdx].setAnimEnable(true); @@ -420,6 +472,90 @@ void dLytMeterSuiryuScoreBase_c::setColor1(s32 idx) { mAnm[actualIdx].setAnimEnable(false); } +void dLytMeterSuiryuScoreBase_c::fn_802978F0(s32 idx) { + s32 i1 = idx + SUIRYU_SCORE_BASE_ANIM_LOST_LOOP_OFFSET; + s32 i2 = idx + SUIRYU_SCORE_BASE_ANIM_FIX_OFFSET; + s32 i3 = idx + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET; + s32 i4 = idx + SUIRYU_SCORE_BASE_ANIM_FIX_N_OFFSET; + s32 i5 = idx + SUIRYU_SCORE_BASE_ANIM_FIX_P_OFFSET; + s32 i6 = idx + SUIRYU_SCORE_BASE_ANIM_FIX_N_LOOP_OFFSET; + + mAnm[i1].setToEnd2(); + mAnm[i2].setToEnd2(); + mAnm[i3].setToEnd2(); + + mAnm[i1].setAnimEnable(true); + mAnm[i2].setAnimEnable(true); + mAnm[i3].setAnimEnable(true); + + mAnm[i4].setToEnd2(); + mAnm[i5].setToEnd2(); + mAnm[i6].setToEnd2(); + + mAnm[i4].setAnimEnable(true); + mAnm[i5].setAnimEnable(true); + mAnm[i6].setAnimEnable(true); + + mLyt.calc(); + + mAnm[i4].setAnimEnable(false); + mAnm[i5].setAnimEnable(false); + mAnm[i6].setAnimEnable(false); + + mAnm[i1].setAnimEnable(false); + mAnm[i2].setAnimEnable(false); + mAnm[i3].setAnimEnable(false); + + field_0x2251[idx] = 3; +} + +void dLytMeterSuiryuScoreBase_c::fn_80297AE0() { + alphaBackwards(0, 1.0f); + alphaBackwards(1, 1.0f); + alphaBackwards(2, 1.0f); +} + +void dLytMeterSuiryuScoreBase_c::fn_80297B40() { + alphaForwards(0, 1.0f); + alphaForwards(1, 1.0f); + alphaForwards(2, 1.0f); +} + +void dLytMeterSuiryuScoreBase_c::fn_80297BA0() { + switch (field_0x2250) { + case 0: { + alphaBackwards(0, 1.0f); + alphaForwards(1, 1.0f); + alphaForwards(2, 1.0f); + break; + } + case 1: { + alphaForwards(0, 1.0f); + alphaBackwards(1, 1.0f); + alphaForwards(2, 1.0f); + break; + } + case 2: { + alphaForwards(0, 1.0f); + alphaForwards(1, 1.0f); + alphaBackwards(2, 1.0f); + break; + } + } +} + +void dLytMeterSuiryuScoreBase_c::fn_80297C80() { + for (int i = 0; i < 3; i++) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_ALPHA_OFFSET].setBackwardsOnce(); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_ALPHA_OFFSET].setToEnd2(); + mAnm[i + SUIRYU_SCORE_BASE_ANIM_ALPHA_OFFSET].setAnimEnable(true); + } + mLyt.calc(); + for (int i = 0; i < 3; i++) { + mAnm[i + SUIRYU_SCORE_BASE_ANIM_ALPHA_OFFSET].setAnimEnable(false); + } +} + void dLytMeterSuiryuScoreBase_c::alphaBackwards(s32 idx, f32 rate) { s32 actualIdx = idx + SUIRYU_SCORE_BASE_ANIM_ALPHA_OFFSET; mAnm[actualIdx].setBackwardsOnce(); @@ -434,6 +570,327 @@ void dLytMeterSuiryuScoreBase_c::alphaForwards(s32 idx, f32 rate) { mAnm[actualIdx].setAnimEnable(true); } +bool dLytMeterSuiryuScoreBase_c::fn_80297E10(u8 arg) const { + if (field_0x2250 == 0) { + if (arg == 1) { + return true; + } + if (arg == 2) { + return true; + } + } else if (field_0x2250 == 1) { + if (arg == 0) { + return true; + } + if (arg == 2) { + return true; + } + } else if (field_0x2250 == 2) { + if (arg == 0) { + return true; + } + if (arg == 1) { + return true; + } + } + return false; +} + +void dLytMeterSuiryuScoreBase_c::fn_80297EA0() { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setForwardOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setToStart(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setAnimEnable(false); + + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setForwardOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setToStart(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setAnimEnable(false); + + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setForwardOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setToStart(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setAnimEnable(false); + + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setForwardOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setToStart(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setAnimEnable(false); + + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setForwardOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setToEnd2(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setAnimEnable(true); + + mLyt.calc(); + + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setAnimEnable(false); + + field_0x2250 = 4; +} + +void dLytMeterSuiryuScoreBase_c::fn_80297FE0(u8 arg) { + if (field_0x2250 == 4) { + if (arg == 0) { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setToEnd2(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setAnimEnable(false); + } + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setBackwardsOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setToStart(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setAnimEnable(true); + } else if (arg == 1) { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setToEnd2(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setAnimEnable(false); + } + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setBackwardsOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setToStart(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setAnimEnable(true); + } else if (arg == 2) { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setToEnd2(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setAnimEnable(false); + } + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setBackwardsOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setToStart(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setAnimEnable(true); + } else if (arg == 3) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setBackwardsOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setAnimEnable(true); + } + field_0x2263 = 0; + } else if (field_0x2250 == 3) { + if (arg == 0) { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setToEnd2(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setAnimEnable(false); + } + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setToEnd2(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setAnimEnable(false); + } + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setToEnd2(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setAnimEnable(false); + } + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setForwardOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setAnimEnable(true); + } else if (arg == 1) { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setToEnd2(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setAnimEnable(false); + } + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setToEnd2(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setAnimEnable(false); + } + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setToEnd2(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setAnimEnable(false); + } + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setForwardOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setAnimEnable(true); + } else if (arg == 2) { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setToEnd2(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setAnimEnable(false); + } + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setToEnd2(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setAnimEnable(false); + } + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setToEnd2(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setAnimEnable(false); + } + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setForwardOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setAnimEnable(true); + } else if (arg == 4) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setForwardOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setAnimEnable(true); + } + field_0x2263 = 0; + } else if (field_0x2250 == 0) { + if (arg == 1) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setForwardOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setFrame(0.0f); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setAnimEnable(true); + field_0x2263 = 1; + } else if (arg == 2) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setBackwardsOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setToStart(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setAnimEnable(true); + field_0x2263 = 1; + } else if (arg == 3) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setBackwardsOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setAnimEnable(true); + field_0x2263 = 0; + } + } else if (field_0x2250 == 1) { + if (arg == 0) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setBackwardsOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setFrame(10.0f); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setAnimEnable(true); + field_0x2263 = 1; + } else if (arg == 2) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setForwardOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setFrame(10.0f); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setAnimEnable(true); + field_0x2263 = 1; + } else if (arg == 3) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setBackwardsOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setAnimEnable(true); + field_0x2263 = 0; + } + } else if (field_0x2250 == 2) { + if (arg == 0) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setForwardOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setFrame(20.0f); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setAnimEnable(true); + field_0x2263 = 1; + } else if (arg == 1) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setBackwardsOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setFrame(20.0f); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setAnimEnable(true); + field_0x2263 = 1; + } else if (arg == 3) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setBackwardsOnce(); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setAnimEnable(true); + field_0x2263 = 0; + } + } + + field_0x2250 = arg; +} + +bool dLytMeterSuiryuScoreBase_c::fn_80298600() { + switch (field_0x2250) { + case 0: { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].isPlayingForwardsOnce() && + 10.0f <= mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].getFrame() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setFrame(0.0f); + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].isPlayingBackwardsOnce() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].getFrame() <= 10.0f && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setFrame(0.0f); + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isPlayingBackwardsOnce() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isStop2() && mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setFrame(10.0f); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setFrame(0.0f); + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isPlayingForwardsOnce() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isStop2() && mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setFrame(10.0f); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setFrame(0.0f); + return true; + } + break; + } + + case 1: { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].isPlayingForwardsOnce() && + 10.0f <= mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].getFrame() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setFrame(10.0f); + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].isPlayingBackwardsOnce() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].getFrame() <= 10.0f && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setFrame(10.0f); + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isPlayingForwardsOnce() && + 10.0f <= mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].getFrame() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setFrame(10.0f); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setFrame(0.0f); + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isPlayingBackwardsOnce() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].getFrame() <= 10.0f && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setFrame(10.0f); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setFrame(0.0f); + return true; + } + break; + } + + case 2: { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].isPlayingForwardsOnce() && + 10.0f <= mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].getFrame() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setFrame(20.0f); + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].isPlayingBackwardsOnce() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].getFrame() <= 20.0f && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setFrame(10.0f); + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isPlayingBackwardsOnce() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].getFrame() <= 20.0f && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setFrame(10.0f); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setFrame(0.0f); + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isPlayingForwardsOnce() && + 20.0f <= mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].getFrame() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].setFrame(10.0f); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setFrame(0.0f); + return true; + } + break; + } + + case 3: { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].isStop2() && mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].isEnabled()) { + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].isStop2() && mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setFrame(0.0f); + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].isStop2() && mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setFrame(0.0f); + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].isStop2() && mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].isEnabled()) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setFrame(0.0f); + return true; + } + break; + } + + case 4: { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].isStop2() && mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].isEnabled()) { + return true; + } + break; + } + } + + return false; +} + void dLytMeterSuiryuScoreBase_c::stopMove() { mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].setAnimEnable(false); mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].setAnimEnable(false); @@ -442,6 +899,87 @@ void dLytMeterSuiryuScoreBase_c::stopMove() { mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_ALL].setAnimEnable(false); } +bool dLytMeterSuiryuScoreBase_c::fn_80298B80() { + switch (field_0x2250) { + case 0: { + if (field_0x2263 == 1) { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isPlayingBackwardsOnce() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isStop2()) { + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isPlayingForwardsOnce() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isStop2()) { + return true; + } + } else { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].isPlayingForwardsOnce() && + 10.0f <= mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].getFrame()) { + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].isPlayingBackwardsOnce() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_1].getFrame() <= 10.0f) { + return true; + } + } + break; + } + + case 1: { + if (field_0x2263 == 1) { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isPlayingForwardsOnce() && + 10.0f <= mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].getFrame()) { + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isPlayingBackwardsOnce() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].getFrame() <= 10.0f) { + return true; + } + } else { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].isPlayingForwardsOnce() && + 10.0f <= mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].getFrame()) { + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].isPlayingBackwardsOnce() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_2].getFrame() <= 10.0f) { + return true; + } + } + break; + } + + case 2: { + if (field_0x2263 == 1) { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isPlayingBackwardsOnce() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].getFrame() <= 10.0f) { + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isPlayingForwardsOnce() && + 10.0f <= mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].getFrame()) { + return true; + } + } else { + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].isPlayingForwardsOnce() && + 10.0f <= mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].getFrame()) { + return true; + } + + if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].isPlayingBackwardsOnce() && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].getFrame() <= 10.0f) { + return true; + } + } + break; + } + } + + return false; +} + STATE_DEFINE(dLytMeterClefMain_c, None); STATE_DEFINE(dLytMeterClefMain_c, In); STATE_DEFINE(dLytMeterClefMain_c, Wait); @@ -459,6 +997,8 @@ void dLytMeterClefMain_c::finalizeState_In() {} void dLytMeterClefMain_c::initializeState_Wait() {} void dLytMeterClefMain_c::executeState_Wait() { + // TODO - Nonmatching but maybe equivalent. Function suffers from register pressure, + // so regalloc might have an effect on codegen patterns too... fn_8029A200(); fn_8029A2C0(); fn_8029A260(); @@ -474,11 +1014,279 @@ void dLytMeterClefMain_c::executeState_Wait() { b = true; } + bool b2 = false; + + s32 acc = 0; for (int i = 0; i < NUM_TADTONE_GROUPS; i++) { if (field_0x5E81[i] != 0) { - field_0x5E81[i]--; - // TODO - ... + for (int j = field_0x5E81[i] - 1; j >= 0; j--) { + s32 noteIdx = field_0x5EE8[acc + j]; + if (noteIdx != NUM_TOTAL_TADTONES && mNotes[noteIdx].mNote.isStateWait()) { + if (mNotes[noteIdx].field_0x278 == 5) { + field_0x5E81[i] -= 1; + } + mNotes[noteIdx].field_0x278 = 7; + field_0x5EE8[acc + j] = NUM_TOTAL_TADTONES; + } + } } + acc += field_0x5E4E[i]; + } + + acc = 0; + for (int i = 0; i < NUM_TADTONE_GROUPS; i++) { + if (field_0x5E5F[i] != 0) { + for (int j = field_0x5E5F[i] - 1; j >= 0; j--) { + s32 noteIdx = field_0x5EE8[acc + j]; + if (noteIdx != NUM_TOTAL_TADTONES && !mNotes[noteIdx].mNote.isStateWait()) { + b2 = true; + } + } + } + + if (field_0x5E81[i] != 0) { + for (int j = field_0x5E81[i] - 1; j >= 0; j--) { + s32 noteIdx = field_0x5EE8[acc + j]; + if (noteIdx != NUM_TOTAL_TADTONES && !mNotes[noteIdx].mNote.isStateWait()) { + b2 = true; + } + } + } + + if (field_0x5EA4[i] == 0) { + b2 = true; + } + + acc += field_0x5E4E[i]; + } + + if (!b && !b2) { + if (field_0x5F40 <= 0) { + mBase.fn_80297AE0(); + field_0x5F35 = NUM_TADTONE_GROUPS + 1; // TODO ??? + field_0x5F36 = NUM_TADTONE_GROUPS + 1; + } else { + field_0x5F40--; + } + } else { + field_0x5F40 = 45; + } + + acc = 0; + for (int j = 0; j < NUM_TADTONE_GROUPS; j++) { + if (field_0x5F36 == j) { + break; + } + acc += field_0x5E4E[j]; + } + + // TODO: actual length? + static const u8 sUnk1[] = { + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 4, 0, + }; + + if (mBase.getField_0x2251(field_0x5F36) == 2 && mBase.fn_80297E10(sUnk1[field_0x5F35])) { + for (int j = 0; j < field_0x5E4E[field_0x5F36]; j++) { + s32 noteIdx = field_0x5EE8[acc + j]; + if (noteIdx != NUM_TOTAL_TADTONES) { + mNotes[noteIdx].mNote.forceOut(); + } + } + } + + if (field_0x5F40 > 0) { + if (b2 == true) { + mBase.fn_80297BA0(); + } else { + mBase.fn_80297B40(); + field_0x5F35 = NUM_TADTONE_GROUPS; + field_0x5F36 = NUM_TADTONE_GROUPS; + } + } + + mBase.fn_80297FE0(sUnk1[field_0x5F35]); + + // TODO new local? + acc = 0; + + for (int i = 0; i < NUM_TADTONE_GROUPS; i++) { + if (field_0x5E81[i] != 0) { + switch (field_0x5EA4[i]) { + case 1: { + for (int j = field_0x5E5F[i]; j < field_0x5E70[i]; j++) { + s32 noteIdx = field_0x5EE8[acc + j]; + if (noteIdx != NUM_TOTAL_TADTONES && mNotes[noteIdx].field_0x278 != 5) { + mNotes[noteIdx].field_0x278 = 5; + mNotes[noteIdx].mNote.lose(); + } + } + dSndSmallEffectMgr_c::GetInstance()->playSound(SE_Clef_GROUP_DROP_OUT); + field_0x5EA4[i] = 3; + break; + } + case 2: { + for (int j = 0; j < field_0x5E70[i]; j++) { + s32 noteIdx = field_0x5EE8[acc + j]; + if (noteIdx != NUM_TOTAL_TADTONES && mNotes[noteIdx].field_0x278 != 5) { + mNotes[noteIdx].field_0x278 = 5; + mNotes[noteIdx].mNote.lose(); + } + } + dSndSmallEffectMgr_c::GetInstance()->playSound(SE_Clef_GROUP_DROP_OUT); + field_0x5EA4[i] = 4; + break; + } + } + } + + for (int j = 0; j < field_0x5E81[i]; j++) { + s32 noteIdx = field_0x5EE8[acc + j]; + if (noteIdx != NUM_TOTAL_TADTONES) { + f32 f = mNotes[noteIdx].mNote.getField0x260(); + if (mNotes[noteIdx].field_0x278 == 2 || mNotes[noteIdx].field_0x278 == 4) { + mNotes[noteIdx].mNote.setFrame(f); + } + } + } + + if (field_0x5E81[i] != field_0x5E4E[i]) { + field_0x5F3C = 60; + if (field_0x5E92[i] < field_0x5F3C && field_0x5E92[i] != 0) { + mBase.setField_0x2251(i, 1); + + for (int j = 0; j < field_0x5E81[i]; j++) { + s32 noteIdx = field_0x5EE8[acc + j]; + if (noteIdx != NUM_TOTAL_TADTONES && mNotes[noteIdx].field_0x278 == 3) { + if (j != 0) { + s32 otherNoteIdx = field_0x5EE8[acc + j - 1]; + f32 f = mNotes[otherNoteIdx].mNote.getField0x260(); + if (0.0f <= f - 2.0f) { + mNotes[noteIdx].field_0x278 = 4; + mNotes[noteIdx].mNote.setFrame(f - 2.0f); + } else { + mNotes[noteIdx].mNote.setFrame(0.0f); + } + } else { + f32 f = mNotes[noteIdx].mNote.getField0x260(); + if (0.0f <= f) { + mNotes[noteIdx].field_0x278 = 4; + mNotes[noteIdx].mNote.setFrame(f); + } + } + } + if (mNotes[noteIdx].field_0x278 >= 1 && mNotes[noteIdx].field_0x278 <= 2) { + mNotes[noteIdx].field_0x278 = 3; + mNotes[noteIdx].mNote.startLose(); + } + } + } else { + mBase.setField_0x2251(i, 0); + + for (int j = 0; j < field_0x5E81[i]; j++) { + s32 noteIdx = field_0x5EE8[acc + j]; + if (noteIdx != NUM_TOTAL_TADTONES && mNotes[noteIdx].field_0x278 == 1) { + if (j != 0) { + s32 otherNoteIdx = field_0x5EE8[acc + j - 1]; + f32 f = mNotes[otherNoteIdx].mNote.getField0x260(); + if (0.0f <= f - 2.0f) { + mNotes[noteIdx].field_0x278 = 2; + mNotes[noteIdx].mNote.setFrame(f - 2.0f); + } else { + mNotes[noteIdx].mNote.setFrame(0.0f); + } + } else { + f32 f = mNotes[noteIdx].mNote.getField0x260(); + if (0.0f <= f) { + mNotes[noteIdx].field_0x278 = 2; + mNotes[noteIdx].mNote.setFrame(f); + } + } + } + if (mNotes[noteIdx].field_0x278 >= 3 && mNotes[noteIdx].field_0x278 <= 4) { + mNotes[noteIdx].field_0x278 = 1; + mNotes[noteIdx].mNote.stopLose(); + } + } + } + } + + acc += field_0x5E4E[i]; + } + + static const u8 sTadtoneGroupColors[NUM_TADTONE_GROUPS] = {0, 1, 2, 3, 4, 5, 2, 3, 4, 5, 0, 1, 3, 5, 0, 1, 2}; + + if (mBase.fn_80298B80()) { + // TODO new local? + acc = 0; + for (int i = 0; i < NUM_TADTONE_GROUPS; i++) { + switch (field_0x5EA4[i]) { + case 0: { + for (int j = 0; j < field_0x5E5F[i]; j++) { + if (field_0x5EE8[acc + j] == NUM_TOTAL_TADTONES) { + if (dLytForceLine_c::isDone(j)) { + for (int k = 0; k < 24; k++) { + if (mNotes[k].field_0x278 == 7) { + mNotes[k].field_0x278 = 0; + mNotes[k].mNote.setColor(sTadtoneGroupColors[i]); + mNotes[k].mNote.setTransform(*mBase.getNotePane(acc + j)); + mNotes[k].mNote.setMove(); + field_0x5EE8[acc + j] = k; + break; + } + } + } + } else if (mNotes[field_0x5EE8[acc + j]].field_0x278 == 5) { + break; + } + } + + for (int j = 0; j < field_0x5E5F[i]; j++) { + s32 noteIdx = field_0x5EE8[acc + j]; + if (noteIdx != NUM_TOTAL_TADTONES && mNotes[noteIdx].mNote.isMove() && + mNotes[noteIdx].field_0x278 == 0) { + if (j != 0) { + s32 otherNoteIdx = field_0x5EE8[acc + j - 1]; + f32 f = mNotes[otherNoteIdx].mNote.getField0x260(); + if (0.0f <= f - 2.0f) { + mNotes[noteIdx].field_0x278 = 2; + mNotes[noteIdx].mNote.setFrame(f - 2.0f); + field_0x5E81[i]++; + } else { + mNotes[noteIdx].mNote.setFrame(0.0f); + } + } else { + f32 f = mNotes[noteIdx].mNote.getField0x260(); + if (0.0f <= f) { + mNotes[noteIdx].field_0x278 = 2; + mNotes[noteIdx].mNote.setFrame(f); + field_0x5E81[i]++; + } + } + } + } + break; + } + case 5: { + for (int j = 0; j < field_0x5E4E[i]; j++) { + s32 noteIdx = field_0x5EE8[acc + j]; + if (noteIdx != NUM_TOTAL_TADTONES) { + mNotes[noteIdx].field_0x278 = 6; + mNotes[noteIdx].mNote.collect(); + } + } + mBase.setColor1(i); + mBase.setField_0x2251_(i, 2); + field_0x5EA4[i] = 7; + dSndSmallEffectMgr_c::GetInstance()->playSound(SE_Clef_GROUP_FIX); + break; + } + } + + acc += field_0x5E4E[i]; + } + + fn_8029A3B0(); + field_0x5F36 = field_0x5F35; } } void dLytMeterClefMain_c::finalizeState_Wait() {} @@ -583,12 +1391,12 @@ void dLytMeterClefMain_c::fn_80299E30() { mNotes[i].field_0x278 = 7; } - for (int i = 0; i < 77; i++) { - field_0x5EE8[i] = 77; + for (int i = 0; i < NUM_TOTAL_TADTONES; i++) { + field_0x5EE8[i] = NUM_TOTAL_TADTONES; } - field_0x5F35 = 18; - field_0x5F36 = 18; + field_0x5F35 = NUM_TADTONE_GROUPS + 1; // TODO ??? + field_0x5F36 = NUM_TADTONE_GROUPS + 1; field_0x5E4D = 0; field_0x5F3C = 60; @@ -608,7 +1416,7 @@ void dLytMeterClefMain_c::fn_8029A050() { if (field_0x5E5F[i] == field_0x5E4E[i]) { field_0x5EA4[i] = 8; field_0x5E81[i] = field_0x5E4E[i]; - mBase.fn_802978F0(i); + mBase.setColor0(i); } } } @@ -656,8 +1464,8 @@ void dLytMeterClefMain_c::fn_8029A440() { } bool b = true; for (int j = 0; j < field_0x5E4E[i]; j++) { - // TODO cast - if ((s32)field_0x5EE8[acc + j] != 77 && !mNotes[field_0x5EE8[acc + j]].mNote.isStateWait()) { + s32 noteIdx = field_0x5EE8[acc + j]; + if (noteIdx != NUM_TOTAL_TADTONES && !mNotes[noteIdx].mNote.isStateWait()) { b = false; } } From 24b818aca2d2724a62a78468493fe8e8f5545022 Mon Sep 17 00:00:00 2001 From: robojumper Date: Tue, 7 Apr 2026 21:50:50 +0200 Subject: [PATCH 3/3] Fixes --- config/SOUE01/symbols.txt | 6 +++--- include/d/lyt/d2d.h | 4 ---- include/d/lyt/d_lyt_suiryu_score.h | 1 - include/d/t/d_t_clef_game.h | 6 ++++-- include/m/m2d.h | 5 +---- src/d/lyt/d_lyt_suiryu_score.cpp | 20 ++++++++++---------- 6 files changed, 18 insertions(+), 24 deletions(-) diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 4100cd30..8f334e09 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -28376,8 +28376,8 @@ lbl_804E9B9C = .rodata:0x804E9B9C; // type:object size:0x2C data:byte lbl_804E9BC8 = .rodata:0x804E9BC8; // type:object size:0xE8 data:4byte AMMO_CAPACITY_INCREASES = .rodata:0x804E9CB0; // type:object size:0x28 sInteractionTargetDefs = .rodata:0x804E9CD8; // type:object size:0x150 scope:local -TADTONE_GROUP_SIZES = .rodata:0x804E9E28; // type:object size:0x14 data:byte -TADTONE_SCENEFLAGS = .rodata:0x804E9E3C; // type:object size:0x14 data:byte +sTadtoneGroupSizes = .rodata:0x804E9E28; // type:object size:0x14 data:byte +sTadtoneSceneflags = .rodata:0x804E9E3C; // type:object size:0x14 data:byte SK_DOOR_SCENEFLAGS = .rodata:0x804E9E50; // type:object size:0x20 lbl_804E9E70 = .rodata:0x804E9E70; // type:object size:0x20 data:4byte lbl_804E9E90 = .rodata:0x804E9E90; // type:object size:0xC data:4byte @@ -42375,7 +42375,7 @@ sStreamList__11dTgStream_c = .sbss:0x805756C8; // type:object size:0x8 data:4byt sSandStreamList__11dTgStream_c = .sbss:0x805756D0; // type:object size:0x8 data:4byte lbl_805756D8 = .sbss:0x805756D8; // type:object size:0x8 data:4byte IMPRISONED_PTR = .sbss:0x805756E0; // type:object size:0x4 data:4byte -TADTONE_GAME = .sbss:0x805756E4; // type:object size:0x4 data:4byte +sInstance__13dTgClefGame_c = .sbss:0x805756E4; // type:object size:0x4 data:4byte IS_IN_SKYKEEP_PUZZLE = .sbss:0x805756E8; // type:object size:0x1 data:byte lbl_805756E9 = .sbss:0x805756E9; // type:object size:0x1 data:byte sInstance__10dTgSndMg_c = .sbss:0x805756EC; // type:object size:0x4 data:4byte diff --git a/include/d/lyt/d2d.h b/include/d/lyt/d2d.h index fcf416ef..d650ee9e 100644 --- a/include/d/lyt/d2d.h +++ b/include/d/lyt/d2d.h @@ -245,10 +245,6 @@ struct AnmGroupBase_c { return mpFrameCtrl->isEndReached(); } - inline bool isStartReached() const { - return mpFrameCtrl->isStartReached(); - } - inline void setRate(f32 rate) { mpFrameCtrl->setRate(rate); } diff --git a/include/d/lyt/d_lyt_suiryu_score.h b/include/d/lyt/d_lyt_suiryu_score.h index 18792450..317920dc 100644 --- a/include/d/lyt/d_lyt_suiryu_score.h +++ b/include/d/lyt/d_lyt_suiryu_score.h @@ -72,7 +72,6 @@ private: void initAnm(); bool fn_80298600(); - void fn_80298B10(); /* 0x0004 */ UI_STATE_MGR_DECLARE(dLytMeterSuiryuScoreBase_c); /* 0x0040 */ d2d::LytBase_c mLyt; diff --git a/include/d/t/d_t_clef_game.h b/include/d/t/d_t_clef_game.h index 5f95745c..5f836e36 100644 --- a/include/d/t/d_t_clef_game.h +++ b/include/d/t/d_t_clef_game.h @@ -23,9 +23,11 @@ public: private: static dTgClefGame_c *sInstance; + static const s32 NUM_TADTONE_GROUPS = 17; + /* 0x0FC */ u8 _0x0FC[0x14C - 0x0FC]; - /* 0x14C */ u8 field_0x14C[17]; - /* 0x15D */ u8 field_0x15D[17]; + /* 0x14C */ u8 field_0x14C[NUM_TADTONE_GROUPS]; + /* 0x15D */ u8 field_0x15D[NUM_TADTONE_GROUPS]; }; #endif diff --git a/include/m/m2d.h b/include/m/m2d.h index 5ecdab76..059c4b26 100644 --- a/include/m/m2d.h +++ b/include/m/m2d.h @@ -1,6 +1,7 @@ #ifndef M_M2D_H #define M_M2D_H +#include "c/c_math.h" #include "m/m_allocator.h" #include "m/m_vec.h" #include "nw4r/lyt/lyt_arcResourceAccessor.h" @@ -85,10 +86,6 @@ public: return mCurrFrame >= actualEnd; } - inline bool isStartReached() const { - return std::fabsf(mCurrFrame) <= EGG::Math::epsilon(); - } - inline void setToEnd() { setFrame(mEndFrame - 1.0f); } diff --git a/src/d/lyt/d_lyt_suiryu_score.cpp b/src/d/lyt/d_lyt_suiryu_score.cpp index 0b9cc849..2258c56b 100644 --- a/src/d/lyt/d_lyt_suiryu_score.cpp +++ b/src/d/lyt/d_lyt_suiryu_score.cpp @@ -122,7 +122,7 @@ void dLytMeterSuiryuScoreBase_c::executeState_Wait() { } for (int i = 0; i < SUIRYU_SCORE_BASE_NUM_NOTE_ANIMS; i++) { - if (mAnm[field_0x2262 + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET].isStartReached() == true) { + if (cM::isZero(mAnm[field_0x2262 + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET].getFrame()) == true) { if (field_0x2251[i] == 0 && !mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET].isEnabled()) { mAnm[i + SUIRYU_SCORE_BASE_ANIM_LOOP_OFFSET].setAnimEnable(true); } @@ -347,7 +347,7 @@ bool dLytMeterSuiryuScoreBase_c::remove() { bool dLytMeterSuiryuScoreBase_c::execute() { if (fn_80298600()) { - fn_80298B10(); + stopMove(); } if (dScGame_c::isCurrentStage("F103") && dScGame_c::currentSpawnInfo.layer == 13) { @@ -834,9 +834,9 @@ bool dLytMeterSuiryuScoreBase_c::fn_80298600() { } if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].isPlayingBackwardsOnce() && - mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].getFrame() <= 20.0f && + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].getFrame() <= 10.0f && mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_3].isEnabled()) { - mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setFrame(10.0f); + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].setFrame(20.0f); return true; } @@ -954,12 +954,12 @@ bool dLytMeterSuiryuScoreBase_c::fn_80298B80() { case 2: { if (field_0x2263 == 1) { if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isPlayingBackwardsOnce() && - mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].getFrame() <= 10.0f) { + mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].getFrame() <= 20.0f) { return true; } if (mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].isPlayingForwardsOnce() && - 10.0f <= mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].getFrame()) { + 20.0f <= mAnm[SUIRYU_SCORE_BASE_ANIM_MOVE_123].getFrame()) { return true; } } else { @@ -1080,9 +1080,9 @@ void dLytMeterClefMain_c::executeState_Wait() { acc += field_0x5E4E[j]; } - // TODO: actual length? - static const u8 sUnk1[] = { - 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 4, 0, + // TODO ??? + static const u8 sUnk1[NUM_TADTONE_GROUPS + 2] = { + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 4 }; if (mBase.getField_0x2251(field_0x5F36) == 2 && mBase.fn_80297E10(sUnk1[field_0x5F35])) { @@ -1416,7 +1416,7 @@ void dLytMeterClefMain_c::fn_8029A050() { if (field_0x5E5F[i] == field_0x5E4E[i]) { field_0x5EA4[i] = 8; field_0x5E81[i] = field_0x5E4E[i]; - mBase.setColor0(i); + mBase.fn_802978F0((u8)i); } } }