summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/SOUE01/symbols.txt24
-rw-r--r--include/d/lyt/d_lyt_boss_gauge.h28
-rw-r--r--include/d/lyt/meter/d_lyt_meter.h2
-rw-r--r--src/d/lyt/d_lyt_boss_gauge.cpp178
-rw-r--r--src/d/lyt/meter/d_lyt_meter.cpp4
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);
}
}