From 695e70ea8f81623438c801d4de32e087cebcd03d Mon Sep 17 00:00:00 2001 From: compugab Date: Mon, 8 Jun 2026 20:21:47 -0400 Subject: [PATCH] matching d_lyt_boss_gauge --- config/SOUE01/symbols.txt | 24 ++-- include/d/lyt/d_lyt_boss_gauge.h | 28 ++++- include/d/lyt/meter/d_lyt_meter.h | 2 +- src/d/lyt/d_lyt_boss_gauge.cpp | 178 ++++++++++++++++++++++++++++++ src/d/lyt/meter/d_lyt_meter.cpp | 4 +- 5 files changed, 219 insertions(+), 17 deletions(-) diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 220671a5..6889fd4b 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -4748,7 +4748,7 @@ isDoingSkyKeepPuzzle__15dLytMeterMain_cFv = .text:0x800D53D0; // type:function s fn_800D5420__15dLytMeterMain_cFv = .text:0x800D5420; // type:function size:0x114 isSilentRealm__15dLytMeterMain_cFv = .text:0x800D5540; // type:function size:0x4C fn_800D5590__15dLytMeterMain_cFv = .text:0x800D5590; // type:function size:0x98 -fn_800D5630__15dLytMeterMain_cFv = .text:0x800D5630; // type:function size:0x18 +fn_800D5630__15dLytMeterMain_cFf = .text:0x800D5630; // type:function size:0x18 isInModeMap__15dLytMeterMain_cFv = .text:0x800D5650; // type:function size:0x24 isInModePause__15dLytMeterMain_cFv = .text:0x800D5680; // type:function size:0x28 shouldBeHiddenGeneral__15dLytMeterMain_cFv = .text:0x800D56B0; // type:function size:0xFC @@ -8705,24 +8705,24 @@ __dt__22dLytDepositBoxCursor_cFv = .text:0x801580B0; // type:function size:0x1A8 getName__22dLytDepositBoxCursor_cCFv = .text:0x80158260; // type:function size:0x8 scope:weak getLyt__22dLytDepositBoxCursor_cFv = .text:0x80158270; // type:function size:0x8 scope:weak getPane__22dLytDepositBoxCursor_cFv = .text:0x80158280; // type:function size:0x8 scope:weak -fn_80158290 = .text:0x80158290; // type:function size:0x4 -fn_801582A0 = .text:0x801582A0; // type:function size:0x134 -fn_801583E0 = .text:0x801583E0; // type:function size:0x4 -fn_801583F0 = .text:0x801583F0; // type:function size:0x4 +fn_80158290__15dLytBossGauge_cFv = .text:0x80158290; // type:function size:0x4 +fn_801582A0__15dLytBossGauge_cFv = .text:0x801582A0; // type:function size:0x134 +fn_801583E0__15dLytBossGauge_cFv = .text:0x801583E0; // type:function size:0x4 +fn_801583F0__15dLytBossGauge_cFv = .text:0x801583F0; // type:function size:0x4 fn_80158400__15dLytBossGauge_cFv = .text:0x80158400; // type:function size:0x78 -fn_80158480 = .text:0x80158480; // type:function size:0x4 -fn_80158490 = .text:0x80158490; // type:function size:0x4 +fn_80158480__15dLytBossGauge_cFv = .text:0x80158480; // type:function size:0x4 +fn_80158490__15dLytBossGauge_cFv = .text:0x80158490; // type:function size:0x4 fn_801584A0__15dLytBossGauge_cFv = .text:0x801584A0; // type:function size:0x78 -fn_80158520 = .text:0x80158520; // type:function size:0x4 -fn_80158530 = .text:0x80158530; // type:function size:0x4 -fn_80158540 = .text:0x80158540; // type:function size:0x80 -fn_801585C0 = .text:0x801585C0; // type:function size:0x4 +fn_80158520__15dLytBossGauge_cFv = .text:0x80158520; // type:function size:0x4 +fn_80158530__15dLytBossGauge_cFv = .text:0x80158530; // type:function size:0x4 +fn_80158540__15dLytBossGauge_cFv = .text:0x80158540; // type:function size:0x80 +fn_801585C0__15dLytBossGauge_cFv = .text:0x801585C0; // type:function size:0x4 build__15dLytBossGauge_cFv = .text:0x801585D0; // type:function size:0x188 execute__15dLytBossGauge_cFv = .text:0x80158760; // type:function size:0x100 draw__15dLytBossGauge_cFv = .text:0x80158860; // type:function size:0x68 remove__15dLytBossGauge_cFv = .text:0x801588D0; // type:function size:0x5C setMode__15dLytBossGauge_cFl = .text:0x80158930; // type:function size:0x10 -fn_80158940__15dLytBossGauge_cFv = .text:0x80158940; // type:function size:0x108 +fn_80158940__15dLytBossGauge_cFf = .text:0x80158940; // type:function size:0x108 __sinit_\d_lyt_boss_gauge_cpp = .text:0x80158A50; // type:function size:0x338 scope:local __dt__30sFStateID_c<15dLytBossGauge_c>Fv = .text:0x80158D90; // type:function size:0x58 isSameName__30sFStateID_c<15dLytBossGauge_c>CFPCc = .text:0x80158DF0; // type:function size:0x88 diff --git a/include/d/lyt/d_lyt_boss_gauge.h b/include/d/lyt/d_lyt_boss_gauge.h index 2beff090..fe358906 100644 --- a/include/d/lyt/d_lyt_boss_gauge.h +++ b/include/d/lyt/d_lyt_boss_gauge.h @@ -3,6 +3,8 @@ #include "d/lyt/d2d.h" #include "s/s_State.hpp" +#include "sized_string.h" +#include "toBeSorted/arc_managers/layout_arc_manager.h" class dLytBossGauge_c { public: @@ -16,12 +18,29 @@ public: void setMode(s32 mode); - void fn_80158940(); + void fn_80158940(f32); void setField_0x545(bool value) { field_0x545 = value; } + void setField_0x546(bool value){ + field_0x546 = value; + } + + void fn_80158290(); + void fn_801582A0(); + void fn_801583E0(); + void fn_801583F0(); + void fn_80158400(); + void fn_80158480(); + void fn_80158490(); + void fn_801584A0(); + void fn_80158520(); + void fn_80158530(); + void fn_80158540(); + void fn_801585C0(); + private: STATE_FUNC_DECLARE(dLytBossGauge_c, None); STATE_FUNC_DECLARE(dLytBossGauge_c, In); @@ -30,13 +49,18 @@ private: STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytBossGauge_c); + static dLytBossGauge_c *sInstance; + /* 0x004 */ UI_STATE_MGR_DECLARE(dLytBossGauge_c); /* 0x040 */ d2d::ResAccIf_c mResAcc; /* 0x3B0 */ d2d::dLytSub mLyt; /* 0x444 */ d2d::AnmGroup_c mAnmGroups[4]; /* 0x544 */ u8 field_0x544; /* 0x545 */ bool field_0x545; - /* 0x546 */ u8 _0x546[0x550 - 0x546]; + /* 0x546 */ bool field_0x546; + /* 0x547 */ u8 field_0x547; + /* 0x548 */ s32 field_0x548; + /* 0x54c */ float field_0x54c; }; #endif diff --git a/include/d/lyt/meter/d_lyt_meter.h b/include/d/lyt/meter/d_lyt_meter.h index d5eebc37..26aa9668 100644 --- a/include/d/lyt/meter/d_lyt_meter.h +++ b/include/d/lyt/meter/d_lyt_meter.h @@ -99,7 +99,7 @@ public: bool fn_800D5380(u8); void executeMap(); bool fn_800D5590(); - void fn_800D5630(); + void fn_800D5630(f32); bool isInModeMap(); bool isInModePause(); bool shouldBeHiddenGeneral(); diff --git a/src/d/lyt/d_lyt_boss_gauge.cpp b/src/d/lyt/d_lyt_boss_gauge.cpp index 990dd989..7e594858 100644 --- a/src/d/lyt/d_lyt_boss_gauge.cpp +++ b/src/d/lyt/d_lyt_boss_gauge.cpp @@ -4,3 +4,181 @@ STATE_DEFINE(dLytBossGauge_c, None); STATE_DEFINE(dLytBossGauge_c, In); STATE_DEFINE(dLytBossGauge_c, Move); STATE_DEFINE(dLytBossGauge_c, Out); + +void dLytBossGauge_c::fn_80158290(){0.0f;return;} +void dLytBossGauge_c::fn_801583E0(){return;} +void dLytBossGauge_c::fn_801583F0(){return;} + +void dLytBossGauge_c::fn_80158400(){ + if (mAnmGroups[0].isEndReached()) { + mAnmGroups[0].setAnimEnable(false); + mStateMgr.changeState(dLytBossGauge_c::StateID_Move); + } + return; +} + +void dLytBossGauge_c::fn_80158480(){return;} +void dLytBossGauge_c::fn_80158490(){return;} + +void dLytBossGauge_c::fn_801584A0(){ + if (field_0x545) { + mAnmGroups[1].setAnimEnable(true); + mAnmGroups[1].setFrame(0.0f); + mStateMgr.changeState(dLytBossGauge_c::StateID_Out); + field_0x545=false; + } + return; +} + +void dLytBossGauge_c::fn_80158520(){return;} +void dLytBossGauge_c::fn_80158530(){return;} + +void dLytBossGauge_c::fn_80158540(){ + if(mAnmGroups[1].isEndReached()){ + mAnmGroups[1].setAnimEnable(false); + field_0x546=true; + mStateMgr.changeState(dLytBossGauge_c::StateID_None); + } +} + +void dLytBossGauge_c::fn_801585C0(){return;} + +void dLytBossGauge_c::fn_801582A0(){ + + if(field_0x544){ + + mAnmGroups[0].setAnimEnable(true); + mAnmGroups[0].setFrame(0.0f); + + SizedString<64> name; + name[0] = 0; + + for(int i = 0; i < 3; i++ ){ + name.sprintf("N_bigBoss_%02d", i); + + nw4r::lyt::Pane *pane = mLyt.findPane(name); + + if(i == field_0x548){ + pane->SetVisible(true); + }else{ + pane->SetVisible(false); + } + + } + mAnmGroups[2].setAnimEnable(true); + mAnmGroups[2].setFrame(0.0f); + + mLyt.calc(); + + mAnmGroups[2].setAnimEnable(false); + mStateMgr.changeState(dLytBossGauge_c::StateID_In); + field_0x546=0; + field_0x544=0; + } +} + +static const d2d::LytBrlanMapping brlanMap[] = { + { "bossGauge_00_in.brlan", "G_inOut_00"}, + { "bossGauge_00_out.brlan", "G_inOut_00"}, + { "bossGauge_00_dangerLoop.brlan", "G_danger_00"}, + { "bossGauge_00_move.brlan", "G_move_00"}, +}; + +bool dLytBossGauge_c::build(){ + sInstance = this; + field_0x54c = 0.8f; + + void *data = LayoutArcManager::GetInstance()->getLoadedData("BossGauge"); + + mResAcc.attach(data, "arc"); + mLyt.setResAcc(&mResAcc); + mLyt.build("bossGauge_00.brlyt", nullptr); + + for(int i =0 ; i<4 ; i++){ + mAnmGroups[i].init(brlanMap[i].mFile, &mResAcc, mLyt.getLayout(), brlanMap[i].mName); + mAnmGroups[i].bind(false); + mAnmGroups[i].setAnimEnable(false); + } + + mAnmGroups[0].setAnimEnable(true); + mAnmGroups[0].setFrame(0.0f); + + mAnmGroups[3].setAnimEnable(true); + mAnmGroups[3].setFrame(0.0f); + + mLyt.calc(); + + mAnmGroups[0].setAnimEnable(false); + mAnmGroups[3].setAnimEnable(false); + + mStateMgr.changeState(dLytBossGauge_c::StateID_None); + + field_0x544=0; + field_0x545=0; + field_0x546=0; + field_0x548=0; + + return true; +} + +bool dLytBossGauge_c::remove(){ + mLyt.unbindAnims(); + + for(int i = 0; i<4; i++) { + mAnmGroups[i].remove(); + } + + return true; +} + +bool dLytBossGauge_c::execute(){ + + mStateMgr.executeState(); + + if(*mStateMgr.getStateID() != dLytBossGauge_c::StateID_None){ + for(int i = 0; i < 3 ; i++){ + if(mAnmGroups[i].isEnabled() ){ + if(i < 2 && mAnmGroups[i].isStop()){ + mAnmGroups[i].setAnimEnable(false); + } + mAnmGroups[i].play(); + } + } + mLyt.calc(); + } + return true; +} + +bool dLytBossGauge_c::draw(){ + + if(*mStateMgr.getStateID() != dLytBossGauge_c::StateID_None){ + mLyt.addToDrawList(); + } + return true; +} + +void dLytBossGauge_c::setMode(s32 mode){ + field_0x548 = mode; + field_0x544 = 1; + return; +} + +void dLytBossGauge_c::fn_80158940(f32 f){ + + int f2 = mAnmGroups[3].getAnimDuration() * f + 0.5f; + + mAnmGroups[3].setAnimEnable(true); + mAnmGroups[3].setFrame(f2); + mLyt.calc(); + mAnmGroups[3].setAnimEnable(false); + + if(f >= field_0x54c){ + if(!mAnmGroups[2].isEnabled()){ + mAnmGroups[2].setAnimEnable(true); + mAnmGroups[2].setFrame(0.0f); + }else{ + mAnmGroups[2].setAnimEnable(false); + } + } + return; +} diff --git a/src/d/lyt/meter/d_lyt_meter.cpp b/src/d/lyt/meter/d_lyt_meter.cpp index 25798d54..9f2e6038 100644 --- a/src/d/lyt/meter/d_lyt_meter.cpp +++ b/src/d/lyt/meter/d_lyt_meter.cpp @@ -1058,9 +1058,9 @@ bool dLytMeterMain_c::fn_800D5590() { return field_0x13773; } -void dLytMeterMain_c::fn_800D5630() { +void dLytMeterMain_c::fn_800D5630(f32 f) { if (mpBossGauge != nullptr) { - mpBossGauge->fn_80158940(); + mpBossGauge->fn_80158940(f); } }