summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/SOUE01/splits.txt4
-rw-r--r--config/SOUE01/symbols.txt138
-rw-r--r--configure.py2
-rw-r--r--include/d/a/d_a_player.h7
-rw-r--r--include/d/d_message.h8
-rw-r--r--include/d/lyt/d_lyt_unknowns.h8
-rw-r--r--include/d/lyt/meter/d_lyt_meter.h2
-rw-r--r--include/d/lyt/meter/d_lyt_meter_cross_btn.h82
-rw-r--r--include/d/lyt/meter/d_lyt_meter_minus_btn.h2
-rw-r--r--include/d/lyt/meter/d_lyt_meter_plus_btn.h4
-rw-r--r--include/s/s_State.hpp2
-rw-r--r--src/d/lyt/meter/d_lyt_meter_cross_btn.cpp566
-rw-r--r--src/d/lyt/meter/d_lyt_meter_remocon_bg.cpp2
13 files changed, 738 insertions, 89 deletions
diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt
index d1acb77e..b8695096 100644
--- a/config/SOUE01/splits.txt
+++ b/config/SOUE01/splits.txt
@@ -400,7 +400,11 @@ d/lyt/meter/d_lyt_meter_minus_btn.cpp:
d/lyt/meter/d_lyt_meter_cross_btn.cpp:
.text start:0x800F8DA0 end:0x800FAFC8
.ctors start:0x804DB70C end:0x804DB710
+ .rodata start:0x804E62A8 end:0x804E6568
.data start:0x80517818 end:0x80517CE0
+ .sdata start:0x80572480 end:0x805724A8
+ .sdata2 start:0x80579C18 end:0x80579C38
+ .bss start:0x805ABC90 end:0x805ABE90
d/lyt/meter/d_lyt_meter_dowsing.cpp:
.text start:0x800FAFD0 end:0x801003E8
diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt
index 6cf4547e..499d9650 100644
--- a/config/SOUE01/symbols.txt
+++ b/config/SOUE01/symbols.txt
@@ -6051,41 +6051,41 @@ isSameName__34sFStateID_c<19dLytMeterMinusBtn_c>CFPCc = .text:0x800F8B60; // typ
isSameName__38sFStateID_c<23dLytMeterMinusBtnText_c>CFPCc = .text:0x800F8BF0; // type:function size:0x88
isSameName__39sFStateID_c<24dLytMeterMinusBtnBlink_c>CFPCc = .text:0x800F8C80; // type:function size:0x88
isSameName__42sFStateID_c<27dLytMeterMinusBtnMenuIcon_c>CFPCc = .text:0x800F8D10; // type:function size:0x88
-fn_800F8DA0 = .text:0x800F8DA0; // type:function size:0xC
-fn_800F8DB0 = .text:0x800F8DB0; // type:function size:0x138
-fn_800F8EF0 = .text:0x800F8EF0; // type:function size:0x4
-fn_800F8F00 = .text:0x800F8F00; // type:function size:0x70
-fn_800F8F70 = .text:0x800F8F70; // type:function size:0x64
-fn_800F8FE0 = .text:0x800F8FE0; // type:function size:0x4
-fn_800F8FF0 = .text:0x800F8FF0; // type:function size:0x4
-fn_800F9000 = .text:0x800F9000; // type:function size:0xE8
-fn_800F90F0 = .text:0x800F90F0; // type:function size:0x4
-fn_800F9100 = .text:0x800F9100; // type:function size:0x70
-fn_800F9170 = .text:0x800F9170; // type:function size:0x64
-fn_800F91E0 = .text:0x800F91E0; // type:function size:0x4
-fn_800F91F0 = .text:0x800F91F0; // type:function size:0x80
-fn_800F9270 = .text:0x800F9270; // type:function size:0x4C8
-fn_800F9740 = .text:0x800F9740; // type:function size:0x508
-fn_800F9C50 = .text:0x800F9C50; // type:function size:0x4
-fn_800F9C60 = .text:0x800F9C60; // type:function size:0x4
-fn_800F9C70 = .text:0x800F9C70; // type:function size:0x4
-fn_800F9C80 = .text:0x800F9C80; // type:function size:0x60
-fn_800F9CE0 = .text:0x800F9CE0; // type:function size:0x70
-fn_800F9D50 = .text:0x800F9D50; // type:function size:0xC
-fn_800F9D60 = .text:0x800F9D60; // type:function size:0x60
-fn_800F9DC0 = .text:0x800F9DC0; // type:function size:0x70
-fn_800F9E30 = .text:0x800F9E30; // type:function size:0xC
-fn_800F9E40 = .text:0x800F9E40; // type:function size:0x4
-fn_800F9E50 = .text:0x800F9E50; // type:function size:0x34
-fn_800F9E90 = .text:0x800F9E90; // type:function size:0x4
-fn_800F9EA0 = .text:0x800F9EA0; // type:function size:0x358
-fn_800FA200 = .text:0x800FA200; // type:function size:0x58
-fn_800FA260 = .text:0x800FA260; // type:function size:0x4AC
-fn_800FA710 = .text:0x800FA710; // type:function size:0x18
-fn_800FA730 = .text:0x800FA730; // type:function size:0x48
-fn_800FA780 = .text:0x800FA780; // type:function size:0x8
-fn_800FA790 = .text:0x800FA790; // type:function size:0x8
-fn_800FA7A0 = .text:0x800FA7A0; // type:function size:0x8
+initializeState_Wait__24dLytMeterCrossBtnParts_cFv = .text:0x800F8DA0; // type:function size:0xC
+executeState_Wait__24dLytMeterCrossBtnParts_cFv = .text:0x800F8DB0; // type:function size:0x138
+finalizeState_Wait__24dLytMeterCrossBtnParts_cFv = .text:0x800F8EF0; // type:function size:0x4
+initializeState_On__24dLytMeterCrossBtnParts_cFv = .text:0x800F8F00; // type:function size:0x70
+executeState_On__24dLytMeterCrossBtnParts_cFv = .text:0x800F8F70; // type:function size:0x64
+finalizeState_On__24dLytMeterCrossBtnParts_cFv = .text:0x800F8FE0; // type:function size:0x4
+initializeState_Active__24dLytMeterCrossBtnParts_cFv = .text:0x800F8FF0; // type:function size:0x4
+executeState_Active__24dLytMeterCrossBtnParts_cFv = .text:0x800F9000; // type:function size:0xE8
+finalizeState_Active__24dLytMeterCrossBtnParts_cFv = .text:0x800F90F0; // type:function size:0x4
+initializeState_Off__24dLytMeterCrossBtnParts_cFv = .text:0x800F9100; // type:function size:0x70
+executeState_Off__24dLytMeterCrossBtnParts_cFv = .text:0x800F9170; // type:function size:0x64
+finalizeState_Off__24dLytMeterCrossBtnParts_cFv = .text:0x800F91E0; // type:function size:0x4
+init__24dLytMeterCrossBtnParts_cFv = .text:0x800F91F0; // type:function size:0x80
+execute__24dLytMeterCrossBtnParts_cFb = .text:0x800F9270; // type:function size:0x4C8
+setMessage__24dLytMeterCrossBtnParts_cFl = .text:0x800F9740; // type:function size:0x508
+initializeState_Wait__19dLytMeterCrossBtn_cFv = .text:0x800F9C50; // type:function size:0x4
+executeState_Wait__19dLytMeterCrossBtn_cFv = .text:0x800F9C60; // type:function size:0x4
+finalizeState_Wait__19dLytMeterCrossBtn_cFv = .text:0x800F9C70; // type:function size:0x4
+initializeState_ToUse__19dLytMeterCrossBtn_cFv = .text:0x800F9C80; // type:function size:0x60
+executeState_ToUse__19dLytMeterCrossBtn_cFv = .text:0x800F9CE0; // type:function size:0x70
+finalizeState_ToUse__19dLytMeterCrossBtn_cFv = .text:0x800F9D50; // type:function size:0xC
+initializeState_ToUnuse__19dLytMeterCrossBtn_cFv = .text:0x800F9D60; // type:function size:0x60
+executeState_ToUnuse__19dLytMeterCrossBtn_cFv = .text:0x800F9DC0; // type:function size:0x70
+finalizeState_ToUnuse__19dLytMeterCrossBtn_cFv = .text:0x800F9E30; // type:function size:0xC
+initializeState_Unuse__19dLytMeterCrossBtn_cFv = .text:0x800F9E40; // type:function size:0x4
+executeState_Unuse__19dLytMeterCrossBtn_cFv = .text:0x800F9E50; // type:function size:0x34
+finalizeState_Unuse__19dLytMeterCrossBtn_cFv = .text:0x800F9E90; // type:function size:0x4
+build__19dLytMeterCrossBtn_cFPQ23d2d10ResAccIf_c = .text:0x800F9EA0; // type:function size:0x358
+remove__19dLytMeterCrossBtn_cFv = .text:0x800FA200; // type:function size:0x58
+execute__19dLytMeterCrossBtn_cFv = .text:0x800FA260; // type:function size:0x4AC
+setOwnerPane__19dLytMeterCrossBtn_cFPQ34nw4r3lyt4Pane = .text:0x800FA710; // type:function size:0x18
+fn_800FA730__19dLytMeterCrossBtn_cCFv = .text:0x800FA730; // type:function size:0x48
+getName__19dLytMeterCrossBtn_cCFv = .text:0x800FA780; // type:function size:0x8
+getLyt__19dLytMeterCrossBtn_cFv = .text:0x800FA790; // type:function size:0x8
+getPane__19dLytMeterCrossBtn_cFv = .text:0x800FA7A0; // type:function size:0x8
__sinit_\d_lyt_meter_cross_btn_cpp = .text:0x800FA7B0; // type:function size:0x634 scope:local
__dt__39sFStateID_c<24dLytMeterCrossBtnParts_c>Fv = .text:0x800FADF0; // type:function size:0x58
__dt__34sFStateID_c<19dLytMeterCrossBtn_c>Fv = .text:0x800FAE50; // type:function size:0x58
@@ -6543,8 +6543,8 @@ fn_8010EB30 = .text:0x8010EB30; // type:function size:0x40
__ct__18LytDoButtonRelatedFv = .text:0x8010EB70; // type:function size:0x14
build__18LytDoButtonRelatedFPQ23d2d10ResAccIf_c = .text:0x8010EB90; // type:function size:0x70
remove__18LytDoButtonRelatedFv = .text:0x8010EC00; // type:function size:0x8
-fn_8010EC10 = .text:0x8010EC10; // type:function size:0x134
-fn_8010ED50 = .text:0x8010ED50; // type:function size:0x110
+fn_8010EC10__18LytDoButtonRelatedFQ218LytDoButtonRelated8Action_eb = .text:0x8010EC10; // type:function size:0x134
+fn_8010ED50__18LytDoButtonRelatedFQ218LytDoButtonRelated8Action_eb = .text:0x8010ED50; // type:function size:0x110
convertDoButton__18LytDoButtonRelatedFl = .text:0x8010EE60; // type:function size:0xE8
fn_8010EF50 = .text:0x8010EF50; // type:function size:0x3C
build__16dLytCommonABtn_cFPQ23d2d10ResAccIf_c = .text:0x8010EF90; // type:function size:0xAC
@@ -31576,34 +31576,34 @@ __vt__38sFStateID_c<23dLytMeterMinusBtnText_c> = .data:0x80517748; // type:objec
__vt__39sFStateID_c<24dLytMeterMinusBtnBlink_c> = .data:0x8051777C; // type:object size:0x34
__vt__42sFStateID_c<27dLytMeterMinusBtnMenuIcon_c> = .data:0x805177B0; // type:object size:0x34
__vt__34sFStateID_c<19dLytMeterMinusBtn_c> = .data:0x805177E4; // type:object size:0x34
-lbl_80517818 = .data:0x80517818; // type:object size:0x10
-lbl_80517828 = .data:0x80517828; // type:object size:0x10
-lbl_80517838 = .data:0x80517838; // type:object size:0x1C
+lbl_80517818 = .data:0x80517818; // type:object size:0xE data:string
+lbl_80517828 = .data:0x80517828; // type:object size:0xD data:string
+lbl_80517838 = .data:0x80517838; // type:object size:0x1A data:string
lbl_80517854 = .data:0x80517854; // type:object size:0xC data:string
lbl_80517860 = .data:0x80517860; // type:object size:0xC data:string
lbl_8051786C = .data:0x8051786C; // type:object size:0xC data:string
lbl_80517878 = .data:0x80517878; // type:object size:0xC data:string
lbl_80517884 = .data:0x80517884; // type:object size:0x1C data:string
-lbl_805178A0 = .data:0x805178A0; // type:object size:0x1C
-lbl_805178BC = .data:0x805178BC; // type:object size:0xC
-lbl_805178C8 = .data:0x805178C8; // type:object size:0xC
-lbl_805178D4 = .data:0x805178D4; // type:object size:0xC
-lbl_805178E0 = .data:0x805178E0; // type:object size:0x1C
-lbl_805178FC = .data:0x805178FC; // type:object size:0xC
-lbl_80517908 = .data:0x80517908; // type:object size:0xC
-lbl_80517914 = .data:0x80517914; // type:object size:0xC
-lbl_80517920 = .data:0x80517920; // type:object size:0xC
-lbl_8051792C = .data:0x8051792C; // type:object size:0xC
-lbl_80517938 = .data:0x80517938; // type:object size:0xC
+lbl_805178A0 = .data:0x805178A0; // type:object size:0x19 data:string
+lbl_805178BC = .data:0x805178BC; // type:object size:0xA data:string
+lbl_805178C8 = .data:0x805178C8; // type:object size:0xA data:string
+lbl_805178D4 = .data:0x805178D4; // type:object size:0xA data:string
+lbl_805178E0 = .data:0x805178E0; // type:object size:0x19 data:string
+lbl_805178FC = .data:0x805178FC; // type:object size:0xA data:string
+lbl_80517908 = .data:0x80517908; // type:object size:0x9 data:string
+lbl_80517914 = .data:0x80517914; // type:object size:0xB data:string
+lbl_80517920 = .data:0x80517920; // type:object size:0xB data:string
+lbl_8051792C = .data:0x8051792C; // type:object size:0xB data:string
+lbl_80517938 = .data:0x80517938; // type:object size:0xB data:string
lbl_80517944 = .data:0x80517944; // type:object size:0xC data:string
lbl_80517950 = .data:0x80517950; // type:object size:0xC data:string
lbl_8051795C = .data:0x8051795C; // type:object size:0xC data:string
-lbl_80517968 = .data:0x80517968; // type:object size:0x30
-lbl_80517998 = .data:0x80517998; // type:object size:0xC
-lbl_805179A4 = .data:0x805179A4; // type:object size:0xC
-lbl_805179B0 = .data:0x805179B0; // type:object size:0xC
-lbl_805179BC = .data:0x805179BC; // type:object size:0x30
-__vt__19dLytMeterCrossBtn_c = .data:0x805179EC; // type:object size:0x28C
+lbl_80517968 = .data:0x80517968; // type:object size:0xC data:string
+lbl_80517998 = .data:0x80517998; // type:object size:0x9 data:string
+lbl_805179A4 = .data:0x805179A4; // type:object size:0x9 data:string
+lbl_805179B0 = .data:0x805179B0; // type:object size:0x9 data:string
+lbl_805179BC = .data:0x805179BC; // type:object size:0x9 data:string
+__vt__19dLytMeterCrossBtn_c = .data:0x805179EC; // type:object size:0x34
__vt__34sFStateID_c<19dLytMeterCrossBtn_c> = .data:0x80517C78; // type:object size:0x34
__vt__39sFStateID_c<24dLytMeterCrossBtnParts_c> = .data:0x80517CAC; // type:object size:0x34
lbl_80517CE0 = .data:0x80517CE0; // type:object size:0x10
@@ -38160,11 +38160,11 @@ lbl_80572468 = .sdata:0x80572468; // type:object size:0x8 data:4byte
lbl_80572470 = .sdata:0x80572470; // type:object size:0x4 data:4byte
lbl_80572474 = .sdata:0x80572474; // type:object size:0x4 data:4byte
lbl_80572478 = .sdata:0x80572478; // type:object size:0x4 data:4byte
-lbl_80572480 = .sdata:0x80572480; // type:object size:0x8
-lbl_80572488 = .sdata:0x80572488; // type:object size:0x8
-lbl_80572490 = .sdata:0x80572490; // type:object size:0x8
-lbl_80572498 = .sdata:0x80572498; // type:object size:0x8
-lbl_805724A0 = .sdata:0x805724A0; // type:object size:0x8 data:4byte
+lbl_80572480 = .sdata:0x80572480; // type:object size:0x7 data:string
+lbl_80572488 = .sdata:0x80572488; // type:object size:0x7 data:string
+lbl_80572490 = .sdata:0x80572490; // type:object size:0x7 data:string
+lbl_80572498 = .sdata:0x80572498; // type:object size:0x7 data:string
+lbl_805724A0 = .sdata:0x805724A0; // type:object size:0x4 data:4byte
lbl_805724A8 = .sdata:0x805724A8; // type:object size:0x8
lbl_805724B0 = .sdata:0x805724B0; // type:object size:0x8
lbl_805724B8 = .sdata:0x805724B8; // type:object size:0x8
@@ -48729,13 +48729,13 @@ LtyMeterMinusBtn__STATE_MENU_SELECTING = .bss:0x805ABAE0; // type:object size:0x
LtyMeterMinusBtn__STATE_MENU_SELECTING_OUT = .bss:0x805ABB20; // type:object size:0x30 data:4byte
LtyMeterMinusBtn__STATE_UNUSE = .bss:0x805ABBE0; // type:object size:0x30 data:4byte
LtyMeterMinusBtn__STATE_DEMO_OUT = .bss:0x805ABC60; // type:object size:0x30 data:4byte
-lbl_805ABC90 = .bss:0x805ABC90; // type:object size:0x10
-LytMeterCrossBtnParts__STATE_WAIT = .bss:0x805ABCA0; // type:object size:0x40 data:4byte
-LytMeterCrossBtnParts__STATE_ON = .bss:0x805ABCE0; // type:object size:0x40 data:4byte
-LytMeterCrossBtnParts__STATE_ACTIVE = .bss:0x805ABD20; // type:object size:0x40 data:4byte
-LytMeterCrossBtnParts__STATE_OFF = .bss:0x805ABD60; // type:object size:0x40 data:4byte
-LytMeterCrossBtn__STATE_WAIT = .bss:0x805ABDA0; // type:object size:0x40 data:4byte
-LytMeterCrossBtn__STATE_TO_USE = .bss:0x805ABDE0; // type:object size:0x80 data:4byte
+lbl_805ABC90 = .bss:0x805ABC90; // type:object size:0xC
+LytMeterCrossBtnParts__STATE_WAIT = .bss:0x805ABCA0; // type:object size:0x30 data:4byte
+LytMeterCrossBtnParts__STATE_ON = .bss:0x805ABCE0; // type:object size:0x30 data:4byte
+LytMeterCrossBtnParts__STATE_ACTIVE = .bss:0x805ABD20; // type:object size:0x30 data:4byte
+LytMeterCrossBtnParts__STATE_OFF = .bss:0x805ABD60; // type:object size:0x30 data:4byte
+LytMeterCrossBtn__STATE_WAIT = .bss:0x805ABDA0; // type:object size:0x30 data:4byte
+LytMeterCrossBtn__STATE_TO_USE = .bss:0x805ABDE0; // type:object size:0x30 data:4byte
LytMeterCrossBtn__STATE_UNUSE = .bss:0x805ABE60; // type:object size:0x30 data:4byte
lbl_805ABE90 = .bss:0x805ABE90; // type:object size:0x10
LytMeterDowsingMenuIcon__STATE_WAIT = .bss:0x805ABEA0; // type:object size:0x40 data:4byte
diff --git a/configure.py b/configure.py
index ae955acd..3b0cbd72 100644
--- a/configure.py
+++ b/configure.py
@@ -396,7 +396,7 @@ config.libs = [
Object(Matching, "d/lyt/meter/d_lyt_meter_item_select.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_plus_btn.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_minus_btn.cpp"),
- Object(NonMatching, "d/lyt/meter/d_lyt_meter_cross_btn.cpp"),
+ Object(Matching, "d/lyt/meter/d_lyt_meter_cross_btn.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_dowsing.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_rupy.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp"),
diff --git a/include/d/a/d_a_player.h b/include/d/a/d_a_player.h
index d3b88a9b..2adfe26a 100644
--- a/include/d/a/d_a_player.h
+++ b/include/d/a/d_a_player.h
@@ -5,6 +5,7 @@
#include "d/a/d_a_base.h"
#include "d/a/d_a_itembase.h"
#include "d/a/obj/d_a_obj_base.h"
+#include "m/m3d/m_anmmatclr.h"
#include "m/m_allocator.h"
#include "m/m_angle.h"
#include "m/m_mtx.h"
@@ -248,6 +249,12 @@ public:
/* 0x36C */ int mCurrentAction; // TODO (Document Enum)
/* 0x370 */ u8 _370[0x3C8 - 0x370];
/* 0x3C8 */ nw4r::g3d::ResFile mSwordRes;
+ /* 0x3CC */ u8 _0x3CC[0x5B4 - 0x3CC];
+ /* 0x5B4 */ m3d::anmMatClr_c mAnmMatClr;
+
+ f32 getAnmMatClrFrame() const {
+ return mAnmMatClr.getFrame(0);
+ }
inline bool checkFlags0x340(u32 mask) const {
return (someFlags_0x340 & mask) != 0;
diff --git a/include/d/d_message.h b/include/d/d_message.h
index cd075bb0..b7ec7bc4 100644
--- a/include/d/d_message.h
+++ b/include/d/d_message.h
@@ -36,6 +36,10 @@ public:
return field_0x329;
}
+ s32 getField_0x32C() const {
+ return field_0x32C;
+ }
+
void setField_0x329(bool v) {
field_0x329 = v;
}
@@ -107,7 +111,9 @@ private:
/* 0x329 */ bool field_0x329;
/* 0x32A */ bool field_0x32A;
- /* 0x32B */ u8 _0x32B[0x334 - 0x32B];
+ /* 0x32B */ u8 field_0x32B;
+ /* 0x32C */ s32 field_0x32C;
+ /* 0x330 */ u8 _0x330[0x334 - 0x330];
/* 0x334 */ u32 mMinigameResultPoints;
/* 0x338 */ u32 mMinigameTime;
diff --git a/include/d/lyt/d_lyt_unknowns.h b/include/d/lyt/d_lyt_unknowns.h
index 11c3bb90..7763b4e5 100644
--- a/include/d/lyt/d_lyt_unknowns.h
+++ b/include/d/lyt/d_lyt_unknowns.h
@@ -36,6 +36,11 @@ public:
DO_BUTTON_REMOCON_BG = 5,
DO_BUTTON_NUN_BG = 6,
+ DO_BUTTON_CROSS_T = 7,
+ DO_BUTTON_CROSS_D = 8,
+ DO_BUTTON_CROSS_L = 9,
+ DO_BUTTON_CROSS_R = 10,
+
DO_BUTTON_PLUS = 11,
};
@@ -73,6 +78,9 @@ public:
}
static Action_e convertDoButton(s32);
+
+ static void fn_8010EC10(Action_e, bool);
+ static void fn_8010ED50(Action_e, bool);
private:
diff --git a/include/d/lyt/meter/d_lyt_meter.h b/include/d/lyt/meter/d_lyt_meter.h
index dadff933..4a68fb4a 100644
--- a/include/d/lyt/meter/d_lyt_meter.h
+++ b/include/d/lyt/meter/d_lyt_meter.h
@@ -188,7 +188,7 @@ public:
}
}
- static bool getItemSelect0x75B2() {
+ static bool getItemSelect0x75A2() {
if (sInstance != nullptr) {
return sInstance->mMeter.mItemSelect.getField_0x57A2();
} else {
diff --git a/include/d/lyt/meter/d_lyt_meter_cross_btn.h b/include/d/lyt/meter/d_lyt_meter_cross_btn.h
index f12c5f3a..571de597 100644
--- a/include/d/lyt/meter/d_lyt_meter_cross_btn.h
+++ b/include/d/lyt/meter/d_lyt_meter_cross_btn.h
@@ -2,23 +2,53 @@
#define D_LYT_METER_CROSS_BTN_H
#include "d/lyt/d2d.h"
+#include "d/lyt/d_textbox.h"
+#include "d/lyt/d_window.h"
+#include "nw4r/lyt/lyt_pane.h"
#include "s/s_State.hpp"
-#include "s/s_StateMgr.hpp"
// Size 0x80
class dLytMeterCrossBtnParts_c {
+ friend class dLytMeterCrossBtn_c;
+
public:
- dLytMeterCrossBtnParts_c(): mStateMgr(*this, sStateID::null) {}
+ dLytMeterCrossBtnParts_c() : mStateMgr(*this, sStateID::null) {}
~dLytMeterCrossBtnParts_c() {}
+
+ void init();
+ void execute(bool bIsVisible);
+
+ bool isActive() const {
+ return *mStateMgr.getStateID() == StateID_Active;
+ }
+
private:
+ void setMessage(s32 id);
+
STATE_FUNC_DECLARE(dLytMeterCrossBtnParts_c, Wait);
STATE_FUNC_DECLARE(dLytMeterCrossBtnParts_c, On);
STATE_FUNC_DECLARE(dLytMeterCrossBtnParts_c, Active);
STATE_FUNC_DECLARE(dLytMeterCrossBtnParts_c, Off);
-
+
+ STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterCrossBtnParts_c);
+
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterCrossBtnParts_c);
- /* 0x3C */ u32 padding[17];
+ /* 0x3C */ d2d::LytBase_c *mpLyt;
+ /* 0x40 */ d2d::AnmGroup_c *mpAnm[2];
+ /* 0x48 */ dTextBox_c *mpTextBoxes[2];
+ /* 0x50 */ dWindow_c *mpWindow;
+ /* 0x54 */ dTextBox_c *mpSizeBox;
+ /* 0x58 */ nw4r::lyt::Pane *mpOwnerPane;
+ /* 0x5C */ s32 mIndex;
+ /* 0x60 */ s32 field_0x60;
+ /* 0x64 */ s32 field_0x64;
+ /* 0x68 */ s32 field_0x68;
+ /* 0x6C */ s32 field_0x6C;
+ /* 0x70 */ s32 field_0x70;
+ /* 0x74 */ s32 field_0x74;
+ /* 0x78 */ s32 mOnDelay;
+ /* 0x7C */ u8 field_0x7C;
};
class dLytMeterCrossBtn_c : public d2d::dSubPane {
@@ -27,28 +57,56 @@ public:
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
- virtual nw4r::lyt::Pane *getPane() override;
- virtual d2d::LytBase_c *getLyt() override;
- virtual const char *getName() const override;
+ virtual nw4r::lyt::Pane *getPane() override {
+ return mLyt.getLayout()->GetRootPane();
+ }
+ virtual d2d::LytBase_c *getLyt() override {
+ return &mLyt;
+ }
+ virtual const char *getName() const override {
+ return mLyt.getName();
+ }
virtual ~dLytMeterCrossBtn_c() {}
s32 getField_0x620() const {
return field_0x620;
}
+
+ void setOwnerPane(nw4r::lyt::Pane *pane);
+ bool fn_800FA730() const;
+
private:
STATE_FUNC_DECLARE(dLytMeterCrossBtn_c, Wait);
STATE_FUNC_DECLARE(dLytMeterCrossBtn_c, ToUse);
STATE_FUNC_DECLARE(dLytMeterCrossBtn_c, ToUnuse);
STATE_FUNC_DECLARE(dLytMeterCrossBtn_c, Unuse);
- /* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterCrossBtn_c);
- /* 0x040 */ d2d::dLytSub mLyt;
- /* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[12];
- /* 0x3D8 */ u8 field_0x3D8[0x420 - 0x3D8];
+ STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterMinusBtn_c);
+
+ /* 0x00C */ UI_STATE_MGR_DECLARE(dLytMeterCrossBtn_c);
+ /* 0x044 */ d2d::dLytSub mLyt;
+ /* 0x0D8 */ d2d::AnmGroup_c mAnm[12];
+ /* 0x3D8 */ nw4r::lyt::Pane *mpPane;
+ /* 0x3DC */ nw4r::lyt::Pane *mpOwnerPane;
+ /* 0x3E0 */ dTextBox_c *mpTextboxes[8];
+ /* 0x400 */ dWindow_c *mpWindows[4];
+ /* 0x410 */ dTextBox_c *mpSizeBoxes[4];
/* 0x420 */ dLytMeterCrossBtnParts_c mParts[4];
/* 0x620 */ s32 field_0x620;
- /* 0x624 */ u8 padding[0x640 - 0x624];
+ /* 0x624 */ s32 field_0x624;
+ /* 0x628 */ u16 field_0x628;
+ /* 0x62C */ s32 mCallCount0;
+ /* 0x630 */ s32 mCallCount1;
+ /* 0x634 */ u8 field_0x634;
+ /* 0x635 */ u8 field_0x635;
+ /* 0x636 */ u8 field_0x636;
+ /* 0x637 */ u8 field_0x637;
+ /* 0x638 */ u8 field_0x638;
+ /* 0x639 */ u8 field_0x639;
+ /* 0x63A */ u8 field_0x63A;
+ /* 0x63B */ u8 field_0x63B;
+ /* 0x63C */ u8 field_0x63C;
};
#endif
diff --git a/include/d/lyt/meter/d_lyt_meter_minus_btn.h b/include/d/lyt/meter/d_lyt_meter_minus_btn.h
index 40a697a6..2e1a2e1a 100644
--- a/include/d/lyt/meter/d_lyt_meter_minus_btn.h
+++ b/include/d/lyt/meter/d_lyt_meter_minus_btn.h
@@ -147,7 +147,7 @@ private:
STATE_FUNC_DECLARE(dLytMeterMinusBtn_c, DemoMove);
STATE_FUNC_DECLARE(dLytMeterMinusBtn_c, DemoOut);
- STATE_MGR_DECLARE_UTIL_ISSTATE(dLytMeterMinusBtn_c);
+ STATE_MGR_DEFINE_UTIL_ISSTATE(dLytMeterMinusBtn_c);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterMinusBtn_c);
/* 0x0008 */ dLytMeterMinusBtnMenuIcon_c mIcon[8];
diff --git a/include/d/lyt/meter/d_lyt_meter_plus_btn.h b/include/d/lyt/meter/d_lyt_meter_plus_btn.h
index 111a3f0c..29e03ede 100644
--- a/include/d/lyt/meter/d_lyt_meter_plus_btn.h
+++ b/include/d/lyt/meter/d_lyt_meter_plus_btn.h
@@ -39,8 +39,8 @@ private:
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterPlusBtn_c);
- /* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterPlusBtn_c);
- /* 0x040 */ d2d::dLytSub mLyt;
+ /* 0x00C */ UI_STATE_MGR_DECLARE(dLytMeterPlusBtn_c);
+ /* 0x044 */ d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnm[3];
/* 0x198 */ nw4r::lyt::Pane *mpPane[1];
/* 0x19C */ nw4r::lyt::Pane *mpOwnerPane;
diff --git a/include/s/s_State.hpp b/include/s/s_State.hpp
index 8e68ed91..58a198d2 100644
--- a/include/s/s_State.hpp
+++ b/include/s/s_State.hpp
@@ -39,7 +39,7 @@
mStateMgr.changeState(value); \
}
-#define STATE_MGR_DECLARE_UTIL_ISSTATE(class_name) \
+#define STATE_MGR_DEFINE_UTIL_ISSTATE(class_name) \
bool isState(const sFStateID_c<class_name> &value) const { \
return *mStateMgr.getStateID() == value; \
}
diff --git a/src/d/lyt/meter/d_lyt_meter_cross_btn.cpp b/src/d/lyt/meter/d_lyt_meter_cross_btn.cpp
index adfc7a09..496ecf6f 100644
--- a/src/d/lyt/meter/d_lyt_meter_cross_btn.cpp
+++ b/src/d/lyt/meter/d_lyt_meter_cross_btn.cpp
@@ -1,5 +1,15 @@
#include "d/lyt/meter/d_lyt_meter_cross_btn.h"
+#include "common.h"
+#include "d/a/d_a_player.h"
+#include "d/d_message.h"
+#include "d/flag/storyflag_manager.h"
+#include "d/lyt/d2d.h"
+#include "d/lyt/d_lyt_unknowns.h"
+#include "d/lyt/meter/d_lyt_meter.h"
+#include "toBeSorted/event_manager.h"
+#include "toBeSorted/small_sound_mgr.h"
+
STATE_DEFINE(dLytMeterCrossBtnParts_c, Wait);
STATE_DEFINE(dLytMeterCrossBtnParts_c, On);
STATE_DEFINE(dLytMeterCrossBtnParts_c, Active);
@@ -9,3 +19,559 @@ STATE_DEFINE(dLytMeterCrossBtn_c, Wait);
STATE_DEFINE(dLytMeterCrossBtn_c, ToUse);
STATE_DEFINE(dLytMeterCrossBtn_c, ToUnuse);
STATE_DEFINE(dLytMeterCrossBtn_c, Unuse);
+
+void dLytMeterCrossBtnParts_c::initializeState_Wait() {
+ mOnDelay = 15;
+}
+void dLytMeterCrossBtnParts_c::executeState_Wait() {
+ if (dLytMeterContainer_c::GetMeter()->fn_800D5650()) {
+ mOnDelay = 0;
+ }
+
+ s32 timer = mOnDelay;
+ if (field_0x7C) {
+ if (field_0x68) {
+ bool bDoUpdate = true;
+ if (field_0x64 != LytDoButtonRelated::DO_NONE || field_0x70 != field_0x74) {
+ if (timer <= 0) {
+ mStateMgr.changeState(StateID_On);
+ setMessage(field_0x64);
+ } else {
+ bDoUpdate = false;
+ mOnDelay -= 1;
+ }
+ }
+ if (bDoUpdate) {
+ field_0x60 = field_0x64;
+ field_0x70 = field_0x74;
+ }
+ } else {
+ if (field_0x64 != LytDoButtonRelated::DO_NONE || field_0x70 != field_0x74) {
+ setMessage(field_0x64);
+ }
+ field_0x60 = field_0x64;
+ field_0x70 = field_0x74;
+ }
+ }
+
+ if (timer == mOnDelay) {
+ mOnDelay = 15;
+ }
+}
+void dLytMeterCrossBtnParts_c::finalizeState_Wait() {}
+
+void dLytMeterCrossBtnParts_c::initializeState_On() {
+ mpAnm[0]->setBackwardsOnce();
+ mpAnm[0]->setToStart();
+ mpAnm[0]->setAnimEnable(true);
+}
+void dLytMeterCrossBtnParts_c::executeState_On() {
+ if (mpAnm[0]->isStop2()) {
+ mpAnm[0]->setAnimEnable(false);
+ mStateMgr.changeState(StateID_Active);
+ }
+}
+void dLytMeterCrossBtnParts_c::finalizeState_On() {}
+
+void dLytMeterCrossBtnParts_c::initializeState_Active() {}
+void dLytMeterCrossBtnParts_c::executeState_Active() {
+ if (field_0x64 != field_0x60 || !field_0x68 || field_0x70 != field_0x74) {
+ if ((field_0x64 == LytDoButtonRelated::DO_NONE && field_0x74 == 6) || !field_0x68) {
+ if (field_0x60 != field_0x6C) {
+ field_0x64 = field_0x6C;
+ }
+ mStateMgr.changeState(StateID_Off);
+ } else {
+ setMessage(field_0x64);
+ }
+ field_0x60 = field_0x64;
+ field_0x70 = field_0x74;
+ } else if (field_0x60 == LytDoButtonRelated::DO_NONE && field_0x74 == 6) {
+ mStateMgr.changeState(StateID_Off);
+ }
+}
+void dLytMeterCrossBtnParts_c::finalizeState_Active() {}
+
+void dLytMeterCrossBtnParts_c::initializeState_Off() {
+ mpAnm[0]->setForwardOnce();
+ mpAnm[0]->setToStart();
+ mpAnm[0]->setAnimEnable(true);
+}
+void dLytMeterCrossBtnParts_c::executeState_Off() {
+ if (mpAnm[0]->isStop2()) {
+ mpAnm[0]->setAnimEnable(false);
+ mStateMgr.changeState(StateID_Wait);
+ }
+}
+void dLytMeterCrossBtnParts_c::finalizeState_Off() {}
+
+void dLytMeterCrossBtnParts_c::init() {
+ field_0x6C = LytDoButtonRelated::DO_NONE;
+ field_0x60 = LytDoButtonRelated::DO_NONE;
+ field_0x64 = LytDoButtonRelated::DO_NONE;
+ field_0x7C = false;
+ field_0x70 = 6;
+ field_0x68 = 1;
+ mOnDelay = 15;
+ mpOwnerPane = 0;
+ setMessage(LytDoButtonRelated::DO_NONE);
+ mStateMgr.changeState(StateID_Wait);
+}
+
+extern "C" bool checkIsInSkykeepPuzzle();
+void dLytMeterCrossBtnParts_c::execute(bool bIsVisible) {
+ if (mpOwnerPane == nullptr) {
+ return;
+ }
+
+ if (!mpOwnerPane->IsVisible()) {
+ if (!(*mStateMgr.getStateID() == StateID_On)) {
+ return;
+ }
+ field_0x70 = 6;
+ mpAnm[0]->setForwardOnce();
+ mpAnm[0]->setToEnd2();
+ mpAnm[0]->setAnimEnable(true);
+ mpLyt->getLayout()->Animate(0);
+ mpLyt->calc();
+ mpAnm[0]->setAnimEnable(false);
+ mStateMgr.changeState(StateID_Wait);
+ return;
+ }
+
+ if (dLytMeterContainer_c::GetInstance()->getMeterField_0x13750() == 0) {
+ if (mIndex == 0) {
+ LytDoButtonRelated::fn_8010EC10(LytDoButtonRelated::DO_NONE, true);
+ } else if (mIndex == 1) {
+ LytDoButtonRelated::fn_8010ED50(LytDoButtonRelated::DO_NONE, true);
+ } else if (mIndex == 2) {
+ LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_CROSS_L, LytDoButtonRelated::DO_NONE);
+ } else if (mIndex == 3) {
+ LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_CROSS_R, LytDoButtonRelated::DO_NONE);
+ }
+
+ if (field_0x64 != LytDoButtonRelated::DO_NONE) {
+ field_0x64 = LytDoButtonRelated::DO_NONE;
+ field_0x60 = LytDoButtonRelated::DO_NONE;
+ }
+ setMessage(field_0x64);
+ }
+
+ if (!bIsVisible && *mStateMgr.getStateID() == StateID_Off) {
+ mpAnm[0]->setToEnd();
+ mpLyt->calc();
+ }
+
+ if ((EventManager::isInEvent() && dMessage_c::getInstance()->getField_0x32C() == 12 && !checkIsInSkykeepPuzzle() &&
+ !dLytMeterContainer_c::GetInstance()->fn_800D5670()) ||
+ ((dLytMeterContainer_c::getItemSelect0x75A2() && (mIndex != 1 || field_0x74 != 0)) || !bIsVisible)) {
+ field_0x7C = 0;
+
+ if (mIndex == 0) {
+ LytDoButtonRelated::fn_8010EC10(LytDoButtonRelated::DO_NONE, true);
+ } else if (mIndex == 1) {
+ LytDoButtonRelated::fn_8010ED50(LytDoButtonRelated::DO_NONE, true);
+ } else if (mIndex == 2) {
+ LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_CROSS_L, LytDoButtonRelated::DO_NONE);
+ } else if (mIndex == 3) {
+ LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_CROSS_R, LytDoButtonRelated::DO_NONE);
+ }
+ } else {
+ field_0x7C = 1;
+ }
+
+ if (mIndex == 0) {
+ field_0x64 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_CROSS_T);
+ field_0x68 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_CROSS_T);
+ } else if (mIndex == 1) {
+ field_0x64 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_CROSS_D);
+ field_0x68 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_CROSS_D);
+ } else if (mIndex == 2) {
+ field_0x64 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_CROSS_L);
+ field_0x68 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_CROSS_L);
+ } else if (mIndex == 3) {
+ field_0x64 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_CROSS_R);
+ field_0x68 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_CROSS_R);
+ }
+
+ mStateMgr.executeState();
+
+ for (int i = 0; i < 2; i++) {
+ if (mpAnm[i]->isEnabled()) {
+ mpAnm[i]->play();
+ }
+ }
+}
+
+#include "d/lyt/meter/d_lyt_meter_action_table.inc"
+
+void dLytMeterCrossBtnParts_c::setMessage(s32 id) {
+ char buf[11];
+ for (int i = 0; i < 11; i++) {
+ buf[i] = 0;
+ }
+
+ // If only there was an easier way to write this
+ if (field_0x74 == 0 || field_0x74 == 1) {
+ mpWindow->SetVisible(false);
+ mpAnm[1]->setFrame(0.0f);
+ mpAnm[1]->setAnimEnable(true);
+ mpTextBoxes[0]->SetVisible(false);
+ mpTextBoxes[1]->SetVisible(false);
+ mpLyt->getLayout()->Animate(0);
+ mpLyt->calc();
+ mpAnm[1]->setAnimEnable(false);
+ } else if (field_0x74 == 2) {
+ mpWindow->SetVisible(false);
+ mpAnm[1]->setFrame(2.0f);
+ mpAnm[1]->setAnimEnable(true);
+ mpTextBoxes[0]->SetVisible(false);
+ mpTextBoxes[1]->SetVisible(false);
+ mpLyt->getLayout()->Animate(0);
+ mpLyt->calc();
+ mpAnm[1]->setAnimEnable(false);
+ } else if (field_0x74 == 3) {
+ mpWindow->SetVisible(false);
+ mpAnm[1]->setFrame(3.0f);
+ mpAnm[1]->setAnimEnable(true);
+ mpTextBoxes[0]->SetVisible(false);
+ mpTextBoxes[1]->SetVisible(false);
+ mpLyt->getLayout()->Animate(0);
+ mpLyt->calc();
+ mpAnm[1]->setAnimEnable(false);
+ } else if (field_0x74 == 4) {
+ mpWindow->SetVisible(false);
+ mpAnm[1]->setFrame(4.0f);
+ mpAnm[1]->setAnimEnable(true);
+ mpTextBoxes[0]->SetVisible(false);
+ mpTextBoxes[1]->SetVisible(false);
+ mpLyt->getLayout()->Animate(0);
+ mpLyt->calc();
+ mpAnm[1]->setAnimEnable(false);
+ } else if (field_0x74 == 5) {
+ mpWindow->SetVisible(false);
+ mpAnm[1]->setFrame(5.0f);
+ mpAnm[1]->setAnimEnable(true);
+ mpTextBoxes[0]->SetVisible(false);
+ mpTextBoxes[1]->SetVisible(false);
+ mpLyt->getLayout()->Animate(0);
+ mpLyt->calc();
+ mpAnm[1]->setAnimEnable(false);
+ } else if (id < LytDoButtonRelated::DO_NONE) {
+ if (id < 0x5D) {
+ sprintf(buf, "ACT_INFO_%03d", sActIds[id]);
+ } else {
+ s32 id2 = id - 0x5E;
+ sprintf(buf, "ACT_ETC_%03d", sActIds[id2]);
+ }
+
+ for (int i = 0; i < 2; i++) {
+ mpTextBoxes[i]->SetVisible(true);
+ mpTextBoxes[i]->setMessageWithGlobalTextProcessor2(buf, nullptr);
+ }
+ mpWindow->SetVisible(true);
+ mpWindow->UpdateSize(mpSizeBox, 32.0f);
+ field_0x6C = id;
+ mpAnm[1]->setFrame(1.0f);
+ mpAnm[1]->setAnimEnable(true);
+ mpLyt->getLayout()->Animate(0);
+ mpLyt->calc();
+ mpAnm[1]->setAnimEnable(false);
+ } else {
+ mpWindow->SetVisible(false);
+ mpAnm[1]->setFrame(1.0f);
+ mpAnm[1]->setAnimEnable(true);
+ mpLyt->getLayout()->Animate(0);
+ mpLyt->calc();
+ mpAnm[1]->setAnimEnable(false);
+ }
+}
+
+static const d2d::LytBrlanMapping brlanMap[] = {
+ { "remoConBtn_03_input.brlan", "G_inputT_00"},
+ { "remoConBtn_03_input.brlan", "G_inputD_00"},
+ { "remoConBtn_03_input.brlan", "G_inputL_00"},
+ { "remoConBtn_03_input.brlan", "G_inputR_00"},
+ {"remoConBtn_03_pattern.brlan", "N_T_00"},
+ {"remoConBtn_03_pattern.brlan", "N_D_00"},
+ {"remoConBtn_03_pattern.brlan", "N_L_00"},
+ {"remoConBtn_03_pattern.brlan", "N_R_00"},
+ { "remoConBtn_03_call.brlan", "G_call_00"},
+ { "remoConBtn_03_call.brlan", "G_call_01"},
+ { "remoConBtn_03_call.brlan", "G_call_02"},
+ { "remoConBtn_03_loop.brlan", "G_loop_00"},
+};
+
+#define CROSS_BTN_ANIM_INPUT_T 0
+#define CROSS_BTN_ANIM_INPUT_OFFSET 0
+#define CROSS_BTN_ANIM_PATTERN_OFFSET 4
+#define CROSS_BTN_ANIM_CALL_0 8
+#define CROSS_BTN_ANIM_CALL_1 9
+#define CROSS_BTN_ANIM_CALL_2 10
+#define CROSS_BTN_ANIM_LOOP 11
+
+#define CROSS_BTN_NUM_ANIMS 12
+
+void dLytMeterCrossBtn_c::initializeState_Wait() {}
+void dLytMeterCrossBtn_c::executeState_Wait() {}
+void dLytMeterCrossBtn_c::finalizeState_Wait() {}
+
+void dLytMeterCrossBtn_c::initializeState_ToUse() {
+ mAnm[CROSS_BTN_ANIM_INPUT_T].setBackwardsOnce();
+ mAnm[CROSS_BTN_ANIM_INPUT_T].setToStart();
+ mAnm[CROSS_BTN_ANIM_INPUT_T].setAnimEnable(true);
+}
+void dLytMeterCrossBtn_c::executeState_ToUse() {
+ if (mAnm[CROSS_BTN_ANIM_INPUT_T].isStop2()) {
+ mStateMgr.changeState(StateID_Wait);
+ }
+
+ if (mAnm[CROSS_BTN_ANIM_INPUT_T].isEnabled()) {
+ mAnm[CROSS_BTN_ANIM_INPUT_T].play();
+ }
+}
+void dLytMeterCrossBtn_c::finalizeState_ToUse() {
+ mAnm[CROSS_BTN_ANIM_INPUT_T].setAnimEnable(false);
+}
+
+void dLytMeterCrossBtn_c::initializeState_ToUnuse() {
+ mAnm[CROSS_BTN_ANIM_INPUT_T].setForwardOnce();
+ mAnm[CROSS_BTN_ANIM_INPUT_T].setToStart();
+ mAnm[CROSS_BTN_ANIM_INPUT_T].setAnimEnable(true);
+}
+void dLytMeterCrossBtn_c::executeState_ToUnuse() {
+ if (mAnm[CROSS_BTN_ANIM_INPUT_T].isStop2()) {
+ mStateMgr.changeState(StateID_Unuse);
+ }
+
+ if (mAnm[CROSS_BTN_ANIM_INPUT_T].isEnabled()) {
+ mAnm[CROSS_BTN_ANIM_INPUT_T].play();
+ }
+}
+void dLytMeterCrossBtn_c::finalizeState_ToUnuse() {
+ mAnm[CROSS_BTN_ANIM_INPUT_T].setAnimEnable(false);
+}
+
+void dLytMeterCrossBtn_c::initializeState_Unuse() {}
+void dLytMeterCrossBtn_c::executeState_Unuse() {
+ if (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x1)) {
+ mStateMgr.changeState(StateID_ToUse);
+ }
+}
+void dLytMeterCrossBtn_c::finalizeState_Unuse() {}
+
+static const char *sPane = "N_all_00";
+
+static const char *sTextBoxes[] = {
+ "T_textT_00", "T_textD_00", "T_textL_00", "T_textR_00", "T_textTS_00", "T_textDS_00", "T_textLS_00", "T_textRS_00",
+};
+
+static const char *sWindows[] = {"W_bgP_01", "W_bgP_00", "W_bgP_02", "W_bgP_03"};
+
+bool dLytMeterCrossBtn_c::build(d2d::ResAccIf_c *resAcc) {
+ mLyt.setResAcc(resAcc);
+ mLyt.build("remoConBtn_03.brlyt", nullptr);
+
+ for (int i = 0; i < CROSS_BTN_NUM_ANIMS; i++) {
+ mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
+ mAnm[i].bind(false);
+ mAnm[i].setAnimEnable(false);
+ }
+
+ mpPane = mLyt.findPane(sPane);
+
+ for (int i = 0; i < 8; i++) {
+ mpTextboxes[i] = mLyt.getTextBox(sTextBoxes[i]);
+ }
+
+ for (int i = 0; i < 4; i++) {
+ mpWindows[i] = mLyt.getWindow(sWindows[i]);
+ mpSizeBoxes[i] = mLyt.getSizeBoxInWindow(sWindows[i]);
+ }
+
+ for (int i = 0; i < 4; i++) {
+ mParts[i].mIndex = i;
+ mParts[i].mpLyt = &mLyt;
+ mParts[i].mpAnm[0] = &mAnm[i + CROSS_BTN_ANIM_INPUT_OFFSET];
+ mParts[i].mpAnm[1] = &mAnm[i + CROSS_BTN_ANIM_PATTERN_OFFSET];
+ mParts[i].mpTextBoxes[0] = mpTextboxes[i];
+ mParts[i].mpTextBoxes[1] = mpTextboxes[i + 4];
+ mParts[i].mpWindow = mpWindows[i];
+ mParts[i].mpSizeBox = mpSizeBoxes[i];
+ mParts[i].field_0x74 = 6;
+ mParts[i].init();
+ }
+
+ field_0x634 = 0;
+ field_0x635 = 0;
+ field_0x636 = 0;
+
+ field_0x628 = 0xFFFF;
+ mCallCount0 = 0;
+ mCallCount1 = 0;
+ field_0x620 = 6;
+ field_0x624 = 6;
+
+ field_0x637 = 0;
+ field_0x638 = 0;
+ field_0x639 = 0;
+ field_0x63A = 0;
+ field_0x63B = 0;
+ field_0x63C = 0;
+
+ mpOwnerPane = nullptr;
+
+ for (int i = 0; i < 4; i++) {
+ mAnm[i + CROSS_BTN_ANIM_INPUT_OFFSET].setToEnd();
+ mAnm[i + CROSS_BTN_ANIM_INPUT_OFFSET].setAnimEnable(true);
+ }
+
+ mAnm[CROSS_BTN_ANIM_CALL_0].setToEnd();
+ mAnm[CROSS_BTN_ANIM_CALL_0].setAnimEnable(true);
+ mAnm[CROSS_BTN_ANIM_CALL_1].setToEnd();
+ mAnm[CROSS_BTN_ANIM_CALL_1].setAnimEnable(true);
+ mAnm[CROSS_BTN_ANIM_CALL_2].setToEnd();
+ mAnm[CROSS_BTN_ANIM_CALL_2].setAnimEnable(true);
+
+ mLyt.calc();
+
+ for (int i = 0; i < 4; i++) {
+ mAnm[i + CROSS_BTN_ANIM_INPUT_OFFSET].setAnimEnable(false);
+ }
+
+ mAnm[CROSS_BTN_ANIM_CALL_0].setAnimEnable(false);
+ mAnm[CROSS_BTN_ANIM_CALL_1].setAnimEnable(false);
+ mAnm[CROSS_BTN_ANIM_CALL_2].setAnimEnable(false);
+ mAnm[CROSS_BTN_ANIM_LOOP].setAnimEnable(true);
+
+ mStateMgr.changeState(StateID_Wait);
+
+ return true;
+}
+
+bool dLytMeterCrossBtn_c::remove() {
+ for (int i = 0; i < CROSS_BTN_NUM_ANIMS; i++) {
+ mAnm[i].unbind();
+ mAnm[i].remove();
+ }
+ return true;
+}
+
+extern "C" u16 prepareFiHelpIndex();
+bool dLytMeterCrossBtn_c::execute() {
+ u16 newFiValue = prepareFiHelpIndex();
+ if (newFiValue != field_0x628) {
+ field_0x628 = newFiValue;
+ mCallCount0 = 0;
+ }
+
+ mParts[0].field_0x74 = field_0x624;
+ mParts[1].field_0x74 = field_0x620;
+
+ if (mpOwnerPane != nullptr) {
+ for (int i = 0; i < 4; i++) {
+ mParts[i].execute(mpOwnerPane->IsVisible());
+ }
+ }
+
+ mStateMgr.executeState();
+
+ if (StoryflagManager::sInstance->getCounterOrFlag(43)) {
+ field_0x63B = 1;
+ }
+
+ if (field_0x637 != 0) {
+ if (field_0x620 == 0) {
+ f32 frame = dAcPy_c::GetLink2()->getAnmMatClrFrame();
+ if (frame == 0.0f) {
+ mAnm[CROSS_BTN_ANIM_CALL_0].setToEnd();
+ if (!mAnm[CROSS_BTN_ANIM_CALL_0].isEnabled()) {
+ mAnm[CROSS_BTN_ANIM_CALL_0].setAnimEnable(true);
+ }
+ }
+
+ if (mAnm[CROSS_BTN_ANIM_CALL_0].isEnabled()) {
+ mAnm[CROSS_BTN_ANIM_CALL_0].play();
+ if (mParts[1].isActive() && mCallCount0 < 3 && mAnm[CROSS_BTN_ANIM_CALL_0].getFrame() == 1.0f) {
+ SmallSoundManager::GetInstance()->playSound(SE_S_SG_CALL);
+ mCallCount0++;
+ }
+ }
+ }
+ } else if (field_0x638 == 1) {
+ mAnm[CROSS_BTN_ANIM_CALL_0].setToEnd();
+ } else if (mAnm[CROSS_BTN_ANIM_CALL_0].isEnabled()) {
+ mAnm[CROSS_BTN_ANIM_CALL_0].setAnimEnable(false);
+ }
+
+ if (field_0x639 != 0) {
+ if (field_0x624 == 3) {
+ if (field_0x63A == 0) {
+ mAnm[CROSS_BTN_ANIM_CALL_1].setToEnd();
+ mAnm[CROSS_BTN_ANIM_CALL_1].setAnimEnable(true);
+ }
+ if (mAnm[CROSS_BTN_ANIM_CALL_1].isEnabled()) {
+ mAnm[CROSS_BTN_ANIM_CALL_1].play();
+ if (mParts[0].isActive() && mCallCount1 < 3 && mAnm[CROSS_BTN_ANIM_CALL_1].getFrame() == 1.0f) {
+ SmallSoundManager::GetInstance()->playSound(SE_S_CATAPULT_READY);
+ mCallCount1++;
+ }
+ }
+ }
+ } else if (field_0x63A == 1) {
+ mAnm[CROSS_BTN_ANIM_CALL_1].setToEnd();
+ } else if (mAnm[CROSS_BTN_ANIM_CALL_1].isEnabled()) {
+ mAnm[CROSS_BTN_ANIM_CALL_1].setAnimEnable(false);
+ }
+
+ if (field_0x63B != 0) {
+ if (field_0x620 == 2) {
+ if (field_0x63C == 0) {
+ mAnm[CROSS_BTN_ANIM_CALL_2].setToEnd();
+ mAnm[CROSS_BTN_ANIM_CALL_2].setRate(2.0f);
+ mAnm[CROSS_BTN_ANIM_CALL_2].setAnimEnable(true);
+ }
+ if (mAnm[CROSS_BTN_ANIM_CALL_2].isEnabled()) {
+ mAnm[CROSS_BTN_ANIM_CALL_2].play();
+ if (mParts[1].isActive() && mAnm[CROSS_BTN_ANIM_CALL_2].getFrame() == 1.0f) {
+ SmallSoundManager::GetInstance()->playSound(SE_S_BIRD_CALL);
+ }
+ }
+ }
+ } else if (field_0x63C == 1) {
+ mAnm[CROSS_BTN_ANIM_CALL_2].setToEnd();
+ } else if (mAnm[CROSS_BTN_ANIM_CALL_2].isEnabled()) {
+ mAnm[CROSS_BTN_ANIM_CALL_2].setAnimEnable(false);
+ }
+
+ if (mAnm[CROSS_BTN_ANIM_LOOP].isEnabled()) {
+ mAnm[CROSS_BTN_ANIM_LOOP].play();
+ }
+
+ field_0x620 = 6;
+ field_0x624 = 6;
+ // Might be arrays
+ field_0x638 = field_0x637;
+ field_0x637 = 0;
+ field_0x63A = field_0x639;
+ field_0x639 = 0;
+ field_0x63C = field_0x63B;
+ field_0x63B = 0;
+
+ return true;
+}
+
+void dLytMeterCrossBtn_c::setOwnerPane(nw4r::lyt::Pane *pane) {
+ mpOwnerPane = pane;
+ for (int i = 0; i < 4; i++) {
+ mParts[i].mpOwnerPane = pane;
+ }
+}
+
+bool dLytMeterCrossBtn_c::fn_800FA730() const {
+ if (field_0x620 == 2) {
+ return true;
+ }
+
+ return field_0x637 != 0 || field_0x639 != 0 || field_0x63B != 0;
+}
diff --git a/src/d/lyt/meter/d_lyt_meter_remocon_bg.cpp b/src/d/lyt/meter/d_lyt_meter_remocon_bg.cpp
index c5a23427..0d41c298 100644
--- a/src/d/lyt/meter/d_lyt_meter_remocon_bg.cpp
+++ b/src/d/lyt/meter/d_lyt_meter_remocon_bg.cpp
@@ -48,7 +48,7 @@ bool dLytMeterRemoconBg_c::remove() {
}
bool dLytMeterRemoconBg_c::execute() {
- if (EventManager::isInEvent() || dLytMeterContainer_c::getItemSelect0x75B2() != 0) {
+ if (EventManager::isInEvent() || dLytMeterContainer_c::getItemSelect0x75A2() != 0) {
field_0xEC = 0;
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_REMOCON_BG, LytDoButtonRelated::DO_NONE);
} else {