From 7f7a93451e443a13e432350c0bc0680a84363e92 Mon Sep 17 00:00:00 2001 From: robojumper Date: Fri, 18 Apr 2025 20:50:14 +0200 Subject: [PATCH] d_lyt_meter_timer OK by shamefully avoiding an inline --- config/SOUE01/symbols.txt | 154 +++++++++++++------------- configure.py | 2 +- include/d/lyt/d2d.h | 6 + include/m/m2d.h | 8 ++ src/d/lyt/meter/d_lyt_meter_timer.cpp | 28 ++--- 5 files changed, 104 insertions(+), 94 deletions(-) diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 586a5337..15d679c0 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -31740,87 +31740,87 @@ lbl_805195BC = .data:0x805195BC; // type:object size:0xF data:string lbl_805195CC = .data:0x805195CC; // type:object size:0xE data:string lbl_805195DC = .data:0x805195DC; // type:object size:0x9 data:string __vt__35sFStateID_c<20dLytMeterEventSkip_c> = .data:0x80519710; // type:object size:0x34 -lbl_80519748 = .data:0x80519748; // type:object size:0x14 -lbl_8051975C = .data:0x8051975C; // type:object size:0xC -lbl_80519768 = .data:0x80519768; // type:object size:0x1C +lbl_80519748 = .data:0x80519748; // type:object size:0x12 data:string +lbl_8051975C = .data:0x8051975C; // type:object size:0xB data:string +lbl_80519768 = .data:0x80519768; // type:object size:0x1B data:string lbl_80519784 = .data:0x80519784; // type:object size:0x14 data:string -lbl_80519798 = .data:0x80519798; // type:object size:0x10 -lbl_805197A8 = .data:0x805197A8; // type:object size:0x18 -lbl_805197C0 = .data:0x805197C0; // type:object size:0x18 -lbl_805197D8 = .data:0x805197D8; // type:object size:0x18 -lbl_805197F0 = .data:0x805197F0; // type:object size:0x10 -lbl_80519800 = .data:0x80519800; // type:object size:0x18 -lbl_80519818 = .data:0x80519818; // type:object size:0xC -lbl_80519824 = .data:0x80519824; // type:object size:0xC -lbl_80519830 = .data:0x80519830; // type:object size:0xC -lbl_8051983C = .data:0x8051983C; // type:object size:0xC -lbl_80519848 = .data:0x80519848; // type:object size:0xC -lbl_80519854 = .data:0x80519854; // type:object size:0xC -lbl_80519860 = .data:0x80519860; // type:object size:0xC -lbl_8051986C = .data:0x8051986C; // type:object size:0xC -lbl_80519878 = .data:0x80519878; // type:object size:0xC -lbl_80519884 = .data:0x80519884; // type:object size:0xC -lbl_80519890 = .data:0x80519890; // type:object size:0xC -lbl_8051989C = .data:0x8051989C; // type:object size:0xC -lbl_805198A8 = .data:0x805198A8; // type:object size:0xC -lbl_805198B4 = .data:0x805198B4; // type:object size:0xC -lbl_805198C0 = .data:0x805198C0; // type:object size:0xC -lbl_805198CC = .data:0x805198CC; // type:object size:0x14 -lbl_805198E0 = .data:0x805198E0; // type:object size:0x10 -lbl_805198F0 = .data:0x805198F0; // type:object size:0x10 -lbl_80519900 = .data:0x80519900; // type:object size:0x10 -lbl_80519910 = .data:0x80519910; // type:object size:0x10 -lbl_80519920 = .data:0x80519920; // type:object size:0x10 -lbl_80519930 = .data:0x80519930; // type:object size:0x10 -lbl_80519940 = .data:0x80519940; // type:object size:0x10 -lbl_80519950 = .data:0x80519950; // type:object size:0x10 -lbl_80519960 = .data:0x80519960; // type:object size:0x10 -lbl_80519970 = .data:0x80519970; // type:object size:0x10 -lbl_80519980 = .data:0x80519980; // type:object size:0x10 -lbl_80519990 = .data:0x80519990; // type:object size:0x10 -lbl_805199A0 = .data:0x805199A0; // type:object size:0x10 -lbl_805199B0 = .data:0x805199B0; // type:object size:0x10 -lbl_805199C0 = .data:0x805199C0; // type:object size:0x10 +lbl_80519798 = .data:0x80519798; // type:object size:0xD data:string +lbl_805197A8 = .data:0x805197A8; // type:object size:0x15 data:string +lbl_805197C0 = .data:0x805197C0; // type:object size:0x15 data:string +lbl_805197D8 = .data:0x805197D8; // type:object size:0x15 data:string +lbl_805197F0 = .data:0x805197F0; // type:object size:0xE data:string +lbl_80519800 = .data:0x80519800; // type:object size:0x17 data:string +lbl_80519818 = .data:0x80519818; // type:object size:0x9 data:string +lbl_80519824 = .data:0x80519824; // type:object size:0x9 data:string +lbl_80519830 = .data:0x80519830; // type:object size:0x9 data:string +lbl_8051983C = .data:0x8051983C; // type:object size:0x9 data:string +lbl_80519848 = .data:0x80519848; // type:object size:0x9 data:string +lbl_80519854 = .data:0x80519854; // type:object size:0x9 data:string +lbl_80519860 = .data:0x80519860; // type:object size:0x9 data:string +lbl_8051986C = .data:0x8051986C; // type:object size:0x9 data:string +lbl_80519878 = .data:0x80519878; // type:object size:0x9 data:string +lbl_80519884 = .data:0x80519884; // type:object size:0x9 data:string +lbl_80519890 = .data:0x80519890; // type:object size:0x9 data:string +lbl_8051989C = .data:0x8051989C; // type:object size:0x9 data:string +lbl_805198A8 = .data:0x805198A8; // type:object size:0x9 data:string +lbl_805198B4 = .data:0x805198B4; // type:object size:0x9 data:string +lbl_805198C0 = .data:0x805198C0; // type:object size:0x9 data:string +lbl_805198CC = .data:0x805198CC; // type:object size:0x13 data:string +lbl_805198E0 = .data:0x805198E0; // type:object size:0xD data:string +lbl_805198F0 = .data:0x805198F0; // type:object size:0xD data:string +lbl_80519900 = .data:0x80519900; // type:object size:0xD data:string +lbl_80519910 = .data:0x80519910; // type:object size:0xD data:string +lbl_80519920 = .data:0x80519920; // type:object size:0xD data:string +lbl_80519930 = .data:0x80519930; // type:object size:0xD data:string +lbl_80519940 = .data:0x80519940; // type:object size:0xD data:string +lbl_80519950 = .data:0x80519950; // type:object size:0xD data:string +lbl_80519960 = .data:0x80519960; // type:object size:0xD data:string +lbl_80519970 = .data:0x80519970; // type:object size:0xD data:string +lbl_80519980 = .data:0x80519980; // type:object size:0xD data:string +lbl_80519990 = .data:0x80519990; // type:object size:0xD data:string +lbl_805199A0 = .data:0x805199A0; // type:object size:0xD data:string +lbl_805199B0 = .data:0x805199B0; // type:object size:0xD data:string +lbl_805199C0 = .data:0x805199C0; // type:object size:0xD data:string lbl_805199D0 = .data:0x805199D0; // type:object size:0x3C data:4byte -lbl_80519A0C = .data:0x80519A0C; // type:object size:0x10 -lbl_80519A1C = .data:0x80519A1C; // type:object size:0x14 -lbl_80519A30 = .data:0x80519A30; // type:object size:0x1C -lbl_80519A4C = .data:0x80519A4C; // type:object size:0x18 -lbl_80519A64 = .data:0x80519A64; // type:object size:0xC -lbl_80519A70 = .data:0x80519A70; // type:object size:0xC -lbl_80519A7C = .data:0x80519A7C; // type:object size:0xC -lbl_80519A88 = .data:0x80519A88; // type:object size:0xC -lbl_80519A94 = .data:0x80519A94; // type:object size:0xC -lbl_80519AA0 = .data:0x80519AA0; // type:object size:0xC -lbl_80519AAC = .data:0x80519AAC; // type:object size:0xC -lbl_80519AB8 = .data:0x80519AB8; // type:object size:0xC -lbl_80519AC4 = .data:0x80519AC4; // type:object size:0xC -lbl_80519AD0 = .data:0x80519AD0; // type:object size:0x18 -lbl_80519AE8 = .data:0x80519AE8; // type:object size:0x1C -lbl_80519B04 = .data:0x80519B04; // type:object size:0x10 -lbl_80519B14 = .data:0x80519B14; // type:object size:0x1C -lbl_80519B30 = .data:0x80519B30; // type:object size:0x20 +lbl_80519A0C = .data:0x80519A0C; // type:object size:0xF data:string +lbl_80519A1C = .data:0x80519A1C; // type:object size:0x12 data:string +lbl_80519A30 = .data:0x80519A30; // type:object size:0x1B data:string +lbl_80519A4C = .data:0x80519A4C; // type:object size:0x15 data:string +lbl_80519A64 = .data:0x80519A64; // type:object size:0xA data:string +lbl_80519A70 = .data:0x80519A70; // type:object size:0xA data:string +lbl_80519A7C = .data:0x80519A7C; // type:object size:0xA data:string +lbl_80519A88 = .data:0x80519A88; // type:object size:0xA data:string +lbl_80519A94 = .data:0x80519A94; // type:object size:0xA data:string +lbl_80519AA0 = .data:0x80519AA0; // type:object size:0xA data:string +lbl_80519AAC = .data:0x80519AAC; // type:object size:0xA data:string +lbl_80519AB8 = .data:0x80519AB8; // type:object size:0xA data:string +lbl_80519AC4 = .data:0x80519AC4; // type:object size:0xA data:string +lbl_80519AD0 = .data:0x80519AD0; // type:object size:0x17 data:string +lbl_80519AE8 = .data:0x80519AE8; // type:object size:0x1B data:string +lbl_80519B04 = .data:0x80519B04; // type:object size:0xF data:string +lbl_80519B14 = .data:0x80519B14; // type:object size:0x1B data:string +lbl_80519B30 = .data:0x80519B30; // type:object size:0x1A data:string lbl_80519B50 = .data:0x80519B50; // type:object size:0x10 data:string -lbl_80519B60 = .data:0x80519B60; // type:object size:0x18 -lbl_80519B78 = .data:0x80519B78; // type:object size:0xC -lbl_80519B84 = .data:0x80519B84; // type:object size:0x1C +lbl_80519B60 = .data:0x80519B60; // type:object size:0x15 data:string +lbl_80519B78 = .data:0x80519B78; // type:object size:0xB data:string +lbl_80519B84 = .data:0x80519B84; // type:object size:0x1A data:string lbl_80519BA0 = .data:0x80519BA0; // type:object size:0x10 data:string -lbl_80519BB0 = .data:0x80519BB0; // type:object size:0x1C +lbl_80519BB0 = .data:0x80519BB0; // type:object size:0x1B data:string lbl_80519BCC = .data:0x80519BCC; // type:object size:0xC data:string -lbl_80519BD8 = .data:0x80519BD8; // type:object size:0x1C -lbl_80519BF4 = .data:0x80519BF4; // type:object size:0x10 -lbl_80519C04 = .data:0x80519C04; // type:object size:0x1C -lbl_80519C20 = .data:0x80519C20; // type:object size:0x18 +lbl_80519BD8 = .data:0x80519BD8; // type:object size:0x19 data:string +lbl_80519BF4 = .data:0x80519BF4; // type:object size:0xF data:string +lbl_80519C04 = .data:0x80519C04; // type:object size:0x1A data:string +lbl_80519C20 = .data:0x80519C20; // type:object size:0x14 data:string lbl_80519C38 = .data:0x80519C38; // type:object size:0x10 data:string -lbl_80519C48 = .data:0x80519C48; // type:object size:0x14 -lbl_80519C5C = .data:0x80519C5C; // type:object size:0x10 -lbl_80519C6C = .data:0x80519C6C; // type:object size:0x10 +lbl_80519C48 = .data:0x80519C48; // type:object size:0x13 data:string +lbl_80519C5C = .data:0x80519C5C; // type:object size:0xF data:string +lbl_80519C6C = .data:0x80519C6C; // type:object size:0xF data:string lbl_80519C7C = .data:0x80519C7C; // type:object size:0xC data:string -lbl_80519C88 = .data:0x80519C88; // type:object size:0x10 +lbl_80519C88 = .data:0x80519C88; // type:object size:0xD data:string lbl_80519C98 = .data:0x80519C98; // type:object size:0x10 data:string -lbl_80519CA8 = .data:0x80519CA8; // type:object size:0x10 +lbl_80519CA8 = .data:0x80519CA8; // type:object size:0xF data:string __vt__20LytMeterTimerPart2_c = .data:0x80519CB8; // type:object size:0x34 -__vt__20LytMeterTimerPart1_c = .data:0x80519CEC; // type:object size:0x23C +__vt__20LytMeterTimerPart1_c = .data:0x80519CEC; // type:object size:0x34 __vt__31sFStateID_c<16dLytMeterTimer_c> = .data:0x80519F28; // type:object size:0x34 lbl_80519F60 = .data:0x80519F60; // type:object size:0x17 data:string lbl_80519F78 = .data:0x80519F78; // type:object size:0xB data:string @@ -38178,7 +38178,7 @@ lbl_805724F0 = .sdata:0x805724F0; // type:object size:0x5 data:string lbl_805724F8 = .sdata:0x805724F8; // type:object size:0x6 data:string lbl_80572500 = .sdata:0x80572500; // type:object size:0x8 data:4byte lbl_80572508 = .sdata:0x80572508; // type:object size:0x5 data:string -lbl_80572510 = .sdata:0x80572510; // type:object size:0x8 data:4byte +lbl_80572510 = .sdata:0x80572510; // type:object size:0x4 data:4byte lbl_80572518 = .sdata:0x80572518; // type:object size:0x5 data:string lbl_80572520 = .sdata:0x80572520; // type:object size:0x8 data:string lbl_80572528 = .sdata:0x80572528; // type:object size:0x8 data:4byte @@ -48787,10 +48787,10 @@ LytMeterEventSkip__STATE_INVISIBLE = .bss:0x805ACAA0; // type:object size:0x30 d LytMeterEventSkip__STATE_IN = .bss:0x805ACAE0; // type:object size:0x30 data:4byte LytMeterEventSkip__STATE_VISIBLE = .bss:0x805ACB20; // type:object size:0x30 data:4byte LytMeterEventSkip__STATE_OUT = .bss:0x805ACB60; // type:object size:0x30 data:4byte -lbl_805ACB90 = .bss:0x805ACB90; // type:object size:0x50 -LytMeterTimer__STATE_SIREN = .bss:0x805ACBE0; // type:object size:0x80 data:4byte -LytMeterTimer__STATE_CHANGE_SAFE = .bss:0x805ACC60; // type:object size:0x40 data:4byte -LytMeterTimer__STATE_SAFE = .bss:0x805ACCA0; // type:object size:0x80 data:4byte +lbl_805ACB90 = .bss:0x805ACB90; // type:object size:0xC +LytMeterTimer__STATE_SIREN = .bss:0x805ACBE0; // type:object size:0x30 data:4byte +LytMeterTimer__STATE_CHANGE_SAFE = .bss:0x805ACC60; // type:object size:0x30 data:4byte +LytMeterTimer__STATE_SAFE = .bss:0x805ACCA0; // type:object size:0x30 data:4byte LytMeterTimer__STATE_FRUITS = .bss:0x805ACD20; // type:object size:0x30 data:4byte lbl_805ACD50 = .bss:0x805ACD50; // type:object size:0xC LytMeterShieldGauge__STATE_NORMAL = .bss:0x805ACD60; // type:object size:0x30 data:4byte diff --git a/configure.py b/configure.py index 25c0f43b..dbf3e4f5 100644 --- a/configure.py +++ b/configure.py @@ -401,7 +401,7 @@ config.libs = [ Object(Matching, "d/lyt/meter/d_lyt_meter_rupy.cpp"), Object(Matching, "d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp"), Object(Matching, "d/lyt/meter/d_lyt_meter_event_skip.cpp"), - Object(NonMatching, "d/lyt/meter/d_lyt_meter_timer.cpp"), + Object(Matching, "d/lyt/meter/d_lyt_meter_timer.cpp"), Object(Matching, "d/lyt/meter/d_lyt_meter_heart.cpp"), Object(Matching, "d/lyt/meter/d_lyt_meter_shield_gauge.cpp"), Object(NonMatching, "d/lyt/d_lyt_do_button.cpp"), diff --git a/include/d/lyt/d2d.h b/include/d/lyt/d2d.h index cc090009..c4e3e533 100644 --- a/include/d/lyt/d2d.h +++ b/include/d/lyt/d2d.h @@ -292,6 +292,12 @@ struct AnmGroupBase_c { return mpFrameCtrl->getNextFrame(); } +#ifdef NEED_DIRECT_FRAMECTRL_ACCESS + m2d::FrameCtrl_c *getFrameCtrl() { + return mpFrameCtrl; + } +#endif + private: /* 0x04 */ void *field_0x04; /* 0x08 */ m2d::FrameCtrl_c *mpFrameCtrl; diff --git a/include/m/m2d.h b/include/m/m2d.h index 3f839d91..c996b43b 100644 --- a/include/m/m2d.h +++ b/include/m/m2d.h @@ -114,7 +114,15 @@ public: return mEndFrame; } +// There's at least 1 file where the obvious way of writing +// it seems to require accessing some members directly, without +// inlines. I want to discourage direct access though, so +// putting the ability behind an explicit define. We don't +// know either way whether inlines are used at all or +// whether stuff even is private. +#ifndef NEED_DIRECT_FRAMECTRL_ACCESS private: +#endif inline bool notLooping() const { return (mFlags & FLAG_NO_LOOP) != 0; } diff --git a/src/d/lyt/meter/d_lyt_meter_timer.cpp b/src/d/lyt/meter/d_lyt_meter_timer.cpp index feb86b3b..30e2d19e 100644 --- a/src/d/lyt/meter/d_lyt_meter_timer.cpp +++ b/src/d/lyt/meter/d_lyt_meter_timer.cpp @@ -1,3 +1,5 @@ +#define NEED_DIRECT_FRAMECTRL_ACCESS 1 + #include "d/lyt/meter/d_lyt_meter_timer.h" #include "common.h" @@ -612,6 +614,14 @@ void LytMeterTimerPart2_c::initOutAnim() { mAnm[TIMER_02_ANIM_OUT].setAnimEnable(false); } +void LytMeterTimerPart2_c::initChangeFruitAnim() { + mAnm[TIMER_02_ANIM_CHANGE_FRUIT].setForwardOnce(); + mAnm[TIMER_02_ANIM_CHANGE_FRUIT].setFrame(0.0f); + mAnm[TIMER_02_ANIM_CHANGE_FRUIT].setAnimEnable(true); + mLyt.calc(); + mAnm[TIMER_02_ANIM_CHANGE_FRUIT].setAnimEnable(false); +} + void LytMeterTimerPart2_c::startInAnim() { if (dLytMeterContainer_c::GetMeter()->fn_800D5650()) { mAnm[TIMER_02_ANIM_MAP_POSITION].setFrame(1.0f); @@ -626,14 +636,6 @@ void LytMeterTimerPart2_c::startInAnim() { mAnm[TIMER_02_ANIM_IN].setAnimEnable(true); } -void LytMeterTimerPart2_c::initChangeFruitAnim() { - mAnm[TIMER_02_ANIM_CHANGE_FRUIT].setForwardOnce(); - mAnm[TIMER_02_ANIM_CHANGE_FRUIT].setFrame(0.0f); - mAnm[TIMER_02_ANIM_CHANGE_FRUIT].setAnimEnable(true); - mLyt.calc(); - mAnm[TIMER_02_ANIM_CHANGE_FRUIT].setAnimEnable(false); -} - void LytMeterTimerPart2_c::enableBloomAnim() { mAnm[TIMER_02_ANIM_BLOOM].setAnimEnable(true); } @@ -741,14 +743,8 @@ void LytMeterTimerPart2_c::syncTimeWithSafe() { if (time == 0) { time = 2000; } - // FPR regswap between 2000.0f and cast constant - // Not sure why the cast needs to be pulled out here - - // This way works in other functions, but breaks instructions in this case - // f32 loopFrame = duration - (time / 2000.0f) * duration; - f32 fTime = time; - f32 loopFrame = duration - (fTime / 2000.0f) * duration; - f32 safeDuration = mAnm[TIMER_02_ANIM_SIREN_SAFE].getAnimDuration() - 1.0f; + f32 loopFrame = duration - (time / 2000.0f) * duration; + f32 safeDuration = mAnm[TIMER_02_ANIM_SIREN_SAFE].getFrameCtrl()->mEndFrame - 1.0f; f32 finalFrame = loopFrame; if (safeDuration < finalFrame) { finalFrame = finalFrame - safeDuration;