summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/SOUE01/splits.txt12
-rw-r--r--config/SOUE01/symbols.txt130
-rw-r--r--configure.py1
-rw-r--r--include/d/lyt/d2d.h8
-rw-r--r--include/d/lyt/d_lyt_area_caption.h73
-rw-r--r--include/d/lyt/d_lyt_sub.h2
-rw-r--r--include/d/lyt/d_textbox.h4
-rw-r--r--include/m/m2d.h4
-rw-r--r--src/d/lyt/d2d.cpp6
-rw-r--r--src/d/lyt/d_lyt_area_caption.cpp248
-rw-r--r--src/d/lyt/d_lyt_battery.cpp2
-rw-r--r--src/d/lyt/d_lyt_common_arrow.cpp4
-rw-r--r--src/d/lyt/d_lyt_fader.cpp10
13 files changed, 423 insertions, 81 deletions
diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt
index b49b218d..9ea2e393 100644
--- a/config/SOUE01/splits.txt
+++ b/config/SOUE01/splits.txt
@@ -192,6 +192,10 @@ d/lyt/d_window.cpp:
.data start:0x80510820 end:0x805108B0
.sdata2 start:0x805797F0 end:0x805797F8
+d/d_text_writer.cpp:
+ .text start:0x800B35C0 end:0x800B9274
+ .ctors start:0x804DB6D4 end:0x804DB6D8
+
toBeSorted/time_area_mgr.cpp:
.text start:0x800B9280 end:0x800BB2A0
@@ -287,6 +291,10 @@ d/lyt/meter/d_lyt_meter_rupy.cpp:
.text start:0x801003F0 end:0x801026A8
.ctors start:0x804DB714 end:0x804DB718
+d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp:
+ .text start:0x801026B0 end:0x80105548
+ .ctors start:0x804DB718 end:0x804DB71C
+
d/lyt/meter/d_lyt_meter_heart.cpp:
.text start:0x8010AEC0 end:0x8010BD48
@@ -381,6 +389,10 @@ d/lyt/d_lyt_battery.cpp:
d/lyt/d_lyt_area_caption.cpp:
.text start:0x8014AD20 end:0x8014C6B8
.ctors start:0x804DB778 end:0x804DB77C
+ .rodata start:0x804E7FA0 end:0x804E7FE0
+ .data start:0x80522B00 end:0x80522E80
+ .sdata start:0x80572878 end:0x80572880
+ .bss start:0x805B0A70 end:0x805B0B30
d/lyt/d_lyt_wipe.cpp:
.text start:0x8014C6C0 end:0x8014E008
diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt
index 00b6a589..d7c3f4c4 100644
--- a/config/SOUE01/symbols.txt
+++ b/config/SOUE01/symbols.txt
@@ -3774,9 +3774,9 @@ LytMeter0x24__13dLytMeterBaseCFv = .text:0x800AC4F0; // type:function size:0x8
LytMeter0x28__13dLytMeterBaseFb = .text:0x800AC500; // type:function size:0x8
init__Q23d2d14AnmGroupBase_cFPCcPQ23m2d10ResAccIf_cPQ23d2d8Layout_cPCc = .text:0x800AC510; // type:function size:0x9C
init__Q23d2d14AnmGroupBase_cFPQ34nw4r3lyt13AnimTransformPCcPQ23m2d10ResAccIf_cPQ34nw4r3lyt5Group = .text:0x800AC5B0; // type:function size:0x114
-fn_800AC6D0__Q23d2d14AnmGroupBase_cFb = .text:0x800AC6D0; // type:function size:0xF8
-fn_800AC7D0__Q23d2d14AnmGroupBase_cFv = .text:0x800AC7D0; // type:function size:0x88
-fn_800AC860__Q23d2d14AnmGroupBase_cFv = .text:0x800AC860; // type:function size:0x8
+setDirection__Q23d2d14AnmGroupBase_cFb = .text:0x800AC6D0; // type:function size:0xF8
+unbind__Q23d2d14AnmGroupBase_cFv = .text:0x800AC7D0; // type:function size:0x88
+afterUnbind__Q23d2d14AnmGroupBase_cFv = .text:0x800AC860; // type:function size:0x8
setAnimEnable__Q23d2d14AnmGroupBase_cFb = .text:0x800AC870; // type:function size:0x8C
setAnmFrame__Q23d2d14AnmGroupBase_cFf = .text:0x800AC900; // type:function size:0xC
syncAnmFrame__Q23d2d14AnmGroupBase_cFv = .text:0x800AC910; // type:function size:0xC
@@ -5466,7 +5466,7 @@ fn_800E02C0 = .text:0x800E02C0; // type:function size:0x1E0
fn_800E04A0 = .text:0x800E04A0; // type:function size:0x58
fn_800E0500 = .text:0x800E0500; // type:function size:0x370
fn_800E0870 = .text:0x800E0870; // type:function size:0x1E4
-fn_800E0A60 = .text:0x800E0A60; // type:function size:0xA0
+fn_800E0A60__10dTextBox_cFPCce = .text:0x800E0A60; // type:function size:0xA0
fn_800E0B00 = .text:0x800E0B00; // type:function size:0x8
fn_800E0B10 = .text:0x800E0B10; // type:function size:0x8
fn_800E0B20 = .text:0x800E0B20; // type:function size:0x8
@@ -8248,64 +8248,64 @@ initializeState__28sFStateID_c<13dLytBattery_c>CFR13dLytBattery_c = .text:0x8014
__sinit_\d_lyt_battery_cpp = .text:0x8014A830; // type:function size:0x3F4 scope:local
__dt__28sFStateID_c<13dLytBattery_c>Fv = .text:0x8014AC30; // type:function size:0x58
isSameName__28sFStateID_c<13dLytBattery_c>CFPCc = .text:0x8014AC90; // type:function size:0x88
-fn_8014AD20 = .text:0x8014AD20; // type:function size:0x218
-fn_8014AF40 = .text:0x8014AF40; // type:function size:0x10
-fn_8014AF50 = .text:0x8014AF50; // type:function size:0x7C
-fn_8014AFD0 = .text:0x8014AFD0; // type:function size:0xE8
-fn_8014B0C0 = .text:0x8014B0C0; // type:function size:0x10
-getState3 = .text:0x8014B0D0; // type:function size:0x10
-fn_8014B0E0 = .text:0x8014B0E0; // type:function size:0x28
-doSomethingIfInCaptionPartsWaitState = .text:0x8014B110; // type:function size:0xA8
-fn_8014B1C0 = .text:0x8014B1C0; // type:function size:0x60
-LytAreaCaptionParts__stateWaitEnter = .text:0x8014B220; // type:function size:0x4
-LytAreaCaptionParts__stateWaitUpdate = .text:0x8014B230; // type:function size:0x208
-LytAreaCaptionParts__stateWaitLeave = .text:0x8014B440; // type:function size:0x4
-LytAreaCaptionParts__stateStartEnter = .text:0x8014B450; // type:function size:0x4C
-LytAreaCaptionParts__stateStartUpdate = .text:0x8014B4A0; // type:function size:0x160
-LytAreaCaptionParts__stateStartLeave = .text:0x8014B600; // type:function size:0x4
-LytAreaCaptionParts__stateOutEnter = .text:0x8014B610; // type:function size:0x4
-LytAreaCaptionParts__stateOutUpdate = .text:0x8014B620; // type:function size:0x98
-LytAreaCaptionParts__stateOutLeave = .text:0x8014B6C0; // type:function size:0x4
+init__22dLytAreaCaptionParts_cFi = .text:0x8014AD20; // type:function size:0x218
+changeState__91sStateMgr_c<22dLytAreaCaptionParts_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x8014AF40; // type:function size:0x10
+remove__22dLytAreaCaptionParts_cFv = .text:0x8014AF50; // type:function size:0x7C
+update__22dLytAreaCaptionParts_cFv = .text:0x8014AFD0; // type:function size:0xE8
+executeState__91sStateMgr_c<22dLytAreaCaptionParts_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8014B0C0; // type:function size:0x10
+getStateID__91sStateMgr_c<22dLytAreaCaptionParts_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8014B0D0; // type:function size:0x10
+draw__22dLytAreaCaptionParts_cFv = .text:0x8014B0E0; // type:function size:0x28
+setTextIfWaiting__22dLytAreaCaptionParts_cFPCc = .text:0x8014B110; // type:function size:0xA8
+check__22dLytAreaCaptionParts_cFv = .text:0x8014B1C0; // type:function size:0x60
+initializeState_Wait__22dLytAreaCaptionParts_cFv = .text:0x8014B220; // type:function size:0x4
+executeState_Wait__22dLytAreaCaptionParts_cFv = .text:0x8014B230; // type:function size:0x208
+finalizeState_Wait__22dLytAreaCaptionParts_cFv = .text:0x8014B440; // type:function size:0x4
+initializeState_Start__22dLytAreaCaptionParts_cFv = .text:0x8014B450; // type:function size:0x4C
+executeState_Start__22dLytAreaCaptionParts_cFv = .text:0x8014B4A0; // type:function size:0x160
+finalizeState_Start__22dLytAreaCaptionParts_cFv = .text:0x8014B600; // type:function size:0x4
+initializeState_Out__22dLytAreaCaptionParts_cFv = .text:0x8014B610; // type:function size:0x4
+executeState_Out__22dLytAreaCaptionParts_cFv = .text:0x8014B620; // type:function size:0x98
+finalizeState_Out__22dLytAreaCaptionParts_cFv = .text:0x8014B6C0; // type:function size:0x4
fn_8014B6D0 = .text:0x8014B6D0; // type:function size:0x1CC
-fn_8014B8A0 = .text:0x8014B8A0; // type:function size:0x74
-LytAreaCaptionParts__ctor = .text:0x8014B920; // type:function size:0x10C
-fn_8014BA30 = .text:0x8014BA30; // type:function size:0x58
-fn_8014BA90 = .text:0x8014BA90; // type:function size:0x6C
-fn_8014BB00 = .text:0x8014BB00; // type:function size:0xA0
-fn_8014BBA0 = .text:0x8014BBA0; // type:function size:0xA4
-fn_8014BC50 = .text:0x8014BC50; // type:function size:0x100
-fn_8014BD50 = .text:0x8014BD50; // type:function size:0x74
-fn_8014BDD0 = .text:0x8014BDD0; // type:function size:0x30
-fn_8014BE00 = .text:0x8014BE00; // type:function size:0x30
-fn_8014BE30 = .text:0x8014BE30; // type:function size:0x1C
-TgTelop__updateOnce = .text:0x8014BE50; // type:function size:0x1C
-fn_8014BE70 = .text:0x8014BE70; // type:function size:0x14
-LytAreaCaptionParts__mapCaptionsThingy = .text:0x8014BE90; // type:function size:0x14
-fn_8014BEB0 = .text:0x8014BEB0; // type:function size:0x1C
-fn_8014BED0 = .text:0x8014BED0; // type:function size:0x70
-fn_8014BF40 = .text:0x8014BF40; // type:function size:0x50
-fn_8014BF90 = .text:0x8014BF90; // type:function size:0x50
-fn_8014BFE0 = .text:0x8014BFE0; // type:function size:0x68
-fn_8014C050 = .text:0x8014C050; // type:function size:0x64
-fn_8014C0C0 = .text:0x8014C0C0; // type:function size:0x78
-fn_8014C140 = .text:0x8014C140; // type:function size:0x4C
-fn_8014C190 = .text:0x8014C190; // type:function size:0x60
-fn_8014C1F0 = .text:0x8014C1F0; // type:function size:0xC
-fn_8014C200 = .text:0x8014C200; // type:function size:0x1C
-fn_8014C220 = .text:0x8014C220; // type:function size:0x1C
-fn_8014C240 = .text:0x8014C240; // type:function size:0x1C
-fn_8014C260 = .text:0x8014C260; // type:function size:0x10
-fn_8014C270 = .text:0x8014C270; // type:function size:0x10
-fn_8014C280 = .text:0x8014C280; // type:function size:0x10
-fn_8014C290 = .text:0x8014C290; // type:function size:0x10
-fn_8014C2A0 = .text:0x8014C2A0; // type:function size:0x10
-fn_8014C2B0 = .text:0x8014C2B0; // type:function size:0x10
-fn_8014C2C0 = .text:0x8014C2C0; // type:function size:0x30
-fn_8014C2F0 = .text:0x8014C2F0; // type:function size:0x30
-fn_8014C320 = .text:0x8014C320; // type:function size:0x30
-LytAreaCaptionParts__initStates = .text:0x8014C350; // type:function size:0x27C
-LytAreaCaptionParts__dtor = .text:0x8014C5D0; // type:function size:0x58
-fn_8014C630 = .text:0x8014C630; // type:function size:0x88
+create__17dLytAreaCaption_cFv = .text:0x8014B8A0; // type:function size:0x74
+__ct__22dLytAreaCaptionParts_cFv = .text:0x8014B920; // type:function size:0x10C
+__dt__35sFState_c<22dLytAreaCaptionParts_c>Fv = .text:0x8014BA30; // type:function size:0x58
+__dt__38sFStateFct_c<22dLytAreaCaptionParts_c>Fv = .text:0x8014BA90; // type:function size:0x6C
+__dt__91sStateMgr_c<22dLytAreaCaptionParts_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8014BB00; // type:function size:0xA0
+__dt__61sFStateMgr_c<22dLytAreaCaptionParts_c,20sStateMethodUsr_FI_c>Fv = .text:0x8014BBA0; // type:function size:0xA4
+__dt__22dLytAreaCaptionParts_cFv = .text:0x8014BC50; // type:function size:0x100
+remove__17dLytAreaCaption_cFv = .text:0x8014BD50; // type:function size:0x74
+update__17dLytAreaCaption_cFv = .text:0x8014BDD0; // type:function size:0x30
+draw__17dLytAreaCaption_cFv = .text:0x8014BE00; // type:function size:0x30
+setTextIfWaiting__17dLytAreaCaption_cFPCc = .text:0x8014BE30; // type:function size:0x1C
+setArea__17dLytAreaCaption_cFi = .text:0x8014BE50; // type:function size:0x1C
+check__17dLytAreaCaption_cFv = .text:0x8014BE70; // type:function size:0x14
+set0xAAC__17dLytAreaCaption_cFUc = .text:0x8014BE90; // type:function size:0x14
+get0xAAC__17dLytAreaCaption_cFv = .text:0x8014BEB0; // type:function size:0x1C
+init__17dLytAreaCaption_cFv = .text:0x8014BED0; // type:function size:0x70
+deinit__17dLytAreaCaption_cFv = .text:0x8014BF40; // type:function size:0x50
+doUpdate__17dLytAreaCaption_cFv = .text:0x8014BF90; // type:function size:0x50
+doDraw__17dLytAreaCaption_cFv = .text:0x8014BFE0; // type:function size:0x68
+doSetTextIfWaiting__17dLytAreaCaption_cFPCc = .text:0x8014C050; // type:function size:0x64
+doSetArea__17dLytAreaCaption_cFi = .text:0x8014C0C0; // type:function size:0x78
+doCheck__17dLytAreaCaption_cFv = .text:0x8014C140; // type:function size:0x4C
+build__38sFStateFct_c<22dLytAreaCaptionParts_c>FRC12sStateIDIf_c = .text:0x8014C190; // type:function size:0x60
+dispose__38sFStateFct_c<22dLytAreaCaptionParts_c>FRP10sStateIf_c = .text:0x8014C1F0; // type:function size:0xC
+initialize__35sFState_c<22dLytAreaCaptionParts_c>Fv = .text:0x8014C200; // type:function size:0x1C
+execute__35sFState_c<22dLytAreaCaptionParts_c>Fv = .text:0x8014C220; // type:function size:0x1C
+finalize__35sFState_c<22dLytAreaCaptionParts_c>Fv = .text:0x8014C240; // type:function size:0x1C
+initializeState__91sStateMgr_c<22dLytAreaCaptionParts_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8014C260; // type:function size:0x10
+finalizeState__91sStateMgr_c<22dLytAreaCaptionParts_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8014C270; // type:function size:0x10
+refreshState__91sStateMgr_c<22dLytAreaCaptionParts_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8014C280; // type:function size:0x10
+getState__91sStateMgr_c<22dLytAreaCaptionParts_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8014C290; // type:function size:0x10
+getNewStateID__91sStateMgr_c<22dLytAreaCaptionParts_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8014C2A0; // type:function size:0x10
+getOldStateID__91sStateMgr_c<22dLytAreaCaptionParts_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8014C2B0; // type:function size:0x10
+finalizeState__37sFStateID_c<22dLytAreaCaptionParts_c>CFR22dLytAreaCaptionParts_c = .text:0x8014C2C0; // type:function size:0x30
+executeState__37sFStateID_c<22dLytAreaCaptionParts_c>CFR22dLytAreaCaptionParts_c = .text:0x8014C2F0; // type:function size:0x30
+initializeState__37sFStateID_c<22dLytAreaCaptionParts_c>CFR22dLytAreaCaptionParts_c = .text:0x8014C320; // type:function size:0x30
+__sinit_\d_lyt_area_caption_cpp = .text:0x8014C350; // type:function size:0x27C scope:local
+__dt__37sFStateID_c<22dLytAreaCaptionParts_c>Fv = .text:0x8014C5D0; // type:function size:0x58
+isSameName__37sFStateID_c<22dLytAreaCaptionParts_c>CFPCc = .text:0x8014C630; // type:function size:0x88
fn_8014C6C0 = .text:0x8014C6C0; // type:function size:0x4
fn_8014C6D0 = .text:0x8014C6D0; // type:function size:0xC
fn_8014C6E0 = .text:0x8014C6E0; // type:function size:0x4
@@ -39975,7 +39975,7 @@ lbl_805754A8 = .sbss:0x805754A8; // type:object size:0x1 data:byte
lbl_805754AC = .sbss:0x805754AC; // type:object size:0x1 data:byte
lbl_805754B0 = .sbss:0x805754B0; // type:object size:0x8 data:4byte
sInstance__13dLytBattery_c = .sbss:0x805754B8; // type:object size:0x8 data:4byte
-lbl_805754C0 = .sbss:0x805754C0; // type:object size:0x8 data:4byte
+sInstance__17dLytAreaCaption_c = .sbss:0x805754C0; // type:object size:0x8 data:4byte
LytWipe = .sbss:0x805754C8; // type:object size:0x8 data:4byte
LYT_HELP_PTR = .sbss:0x805754D0; // type:object size:0x8 data:4byte
lbl_805754D8 = .sbss:0x805754D8; // type:object size:0x8 data:4byte
@@ -48679,9 +48679,9 @@ StateID_On__13dLytBattery_c = .bss:0x805B09C0; // type:object size:0x30 data:4by
StateID_None__13dLytBattery_c = .bss:0x805B0A00; // type:object size:0x30 data:4byte
StateID_Out__13dLytBattery_c = .bss:0x805B0A40; // type:object size:0x30 data:4byte
lbl_805B0A70 = .bss:0x805B0A70; // type:object size:0x10
-LytAreaCaptionParts__STATE_WAIT = .bss:0x805B0A80; // type:object size:0x40 data:4byte
-LytAreaCaptionParts__STATE_START = .bss:0x805B0AC0; // type:object size:0x40 data:4byte
-LytAreaCaptionParts__STATE_OUT = .bss:0x805B0B00; // type:object size:0x30 data:4byte
+StateID_Wait__22dLytAreaCaptionParts_c = .bss:0x805B0A80; // type:object size:0x30 data:4byte
+StateID_Start__22dLytAreaCaptionParts_c = .bss:0x805B0AC0; // type:object size:0x30 data:4byte
+StateID_Out__22dLytAreaCaptionParts_c = .bss:0x805B0B00; // type:object size:0x30 data:4byte
lbl_805B0B30 = .bss:0x805B0B30; // type:object size:0x10
LytWipe__LytWipeMain__STATE_MODE_NONE = .bss:0x805B0B40; // type:object size:0x40 data:4byte
LytWipe__LytWipeMain__STATE_MODE_IN = .bss:0x805B0B80; // type:object size:0x40 data:4byte
diff --git a/configure.py b/configure.py
index 1639d685..0ab83407 100644
--- a/configure.py
+++ b/configure.py
@@ -377,6 +377,7 @@ config.libs = [
Object(NonMatching, "d/lyt/meter/d_lyt_meter_rupy.cpp"),
Object(NonMatching, "d/lyt/d_lyt_do_button.cpp"),
Object(Matching, "d/lyt/d_lyt_battery.cpp"),
+ Object(NonMatching, "d/lyt/d_lyt_area_caption.cpp"),
Object(NonMatching, "d/lyt/d_lyt_pause_disp_00.cpp"),
Object(Matching, "d/lyt/d_lyt_fader.cpp"),
Object(Matching, "d/lyt/d_screen_fader.cpp"),
diff --git a/include/d/lyt/d2d.h b/include/d/lyt/d2d.h
index 94836ebe..72c6a7f2 100644
--- a/include/d/lyt/d2d.h
+++ b/include/d/lyt/d2d.h
@@ -118,9 +118,9 @@ struct AnmGroupBase_c {
bool init(const char *fileName, m2d::ResAccIf_c *acc, d2d::Layout_c *layout, const char *animName);
bool init(nw4r::lyt::AnimTransform *transform, const char *fileName, m2d::ResAccIf_c *acc, nw4r::lyt::Group *group);
- bool fn_800AC6D0(bool);
- bool fn_800AC7D0();
- bool fn_800AC860();
+ bool setDirection(bool backwards);
+ bool unbind();
+ bool afterUnbind();
void setAnimEnable(bool);
void setAnmFrame(f32);
void syncAnmFrame();
@@ -128,7 +128,7 @@ struct AnmGroupBase_c {
void setBackward();
inline void setFrameAndControlThings(f32 frame) {
- fn_800AC6D0(false);
+ setDirection(false);
setAnimEnable(true);
mpFrameCtrl->setFrame(frame);
syncAnmFrame();
diff --git a/include/d/lyt/d_lyt_area_caption.h b/include/d/lyt/d_lyt_area_caption.h
new file mode 100644
index 00000000..f9e22a8e
--- /dev/null
+++ b/include/d/lyt/d_lyt_area_caption.h
@@ -0,0 +1,73 @@
+#ifndef D_LYT_AREA_CAPTION_H
+#define D_LYT_AREA_CAPTION_H
+
+#include <d/lyt/d2d.h>
+#include <d/lyt/d_lyt_sub.h>
+#include <s/s_State.hpp>
+#include <s/s_StateMgr.hpp>
+
+class dLytAreaCaptionParts_c {
+public:
+ dLytAreaCaptionParts_c() : mStateMgr(*this, sStateID::null) {}
+ ~dLytAreaCaptionParts_c() {}
+
+ bool init(int first);
+
+ void check();
+ bool update();
+ bool remove();
+ bool draw();
+ void setTextIfWaiting(const char *text);
+
+ STATE_FUNC_DECLARE(dLytAreaCaptionParts_c, Wait);
+ STATE_FUNC_DECLARE(dLytAreaCaptionParts_c, Start);
+ STATE_FUNC_DECLARE(dLytAreaCaptionParts_c, Out);
+
+private:
+ /* 0x000 */ UI_STATE_MGR_DECLARE(dLytAreaCaptionParts_c);
+ /* 0x040 */ d2d::ResAccIf_c mResAcc;
+ /* 0x0EB */ dLytSub mLyt;
+ /* 0x110 */ d2d::AnmGroup_c mAnmGroups[4];
+ /* 0x540 */ dTextBox_c *mTextBoxes[3];
+ /* 0x54C */ u8 field_0x54C;
+ /* 0x54D */ u8 field_0x54D;
+ /* 0x54E */ u8 mFirst;
+ /* 0x54F */ bool mAnmCtrlInUse[4];
+};
+
+class dLytAreaCaption_c {
+public:
+ static dLytAreaCaption_c *sInstance;
+
+ static bool create();
+ static bool remove();
+ static bool update();
+ static bool draw();
+ static void setTextIfWaiting(const char *);
+ static void setArea(int id);
+ static void check();
+
+ static void set0xAAC(u8 arg);
+ static u8 get0xAAC();
+
+private:
+ dLytAreaCaption_c() {
+ sInstance = this;
+ }
+ ~dLytAreaCaption_c() {
+ sInstance = nullptr;
+ }
+ bool init();
+ bool deinit();
+ bool doUpdate();
+ bool doDraw();
+ void doSetTextIfWaiting(const char *);
+ void doSetArea(int id);
+ void doCheck();
+ dLytAreaCaptionParts_c mParts[2];
+
+ s32 mPartToDraw;
+ u8 field_0xAAC;
+};
+
+#endif
diff --git a/include/d/lyt/d_lyt_sub.h b/include/d/lyt/d_lyt_sub.h
index 21745ad8..cf19b493 100644
--- a/include/d/lyt/d_lyt_sub.h
+++ b/include/d/lyt/d_lyt_sub.h
@@ -8,7 +8,7 @@ public:
dLytSub() {}
virtual bool build(const char *name, m2d::ResAccIf_c *acc) override {
mpName = name;
- d2d::LytBase_c::build(name, acc);
+ return d2d::LytBase_c::build(name, acc);
}
const char *getName() const {
diff --git a/include/d/lyt/d_textbox.h b/include/d/lyt/d_textbox.h
index 2bcf8ee1..423419ae 100644
--- a/include/d/lyt/d_textbox.h
+++ b/include/d/lyt/d_textbox.h
@@ -37,6 +37,10 @@ public:
}
}
+ void fn_800E0A60(const char *area, ...) {
+ // TODO
+ }
+
static f32 GetTranslateX1_();
// @bug: This does not implement UT's RTTI, so casts to dTextBox_c will
diff --git a/include/m/m2d.h b/include/m/m2d.h
index daf4aa6f..98af84a1 100644
--- a/include/m/m2d.h
+++ b/include/m/m2d.h
@@ -141,6 +141,10 @@ public:
/* vt 0x08 */ virtual ~Base_c();
/* vt 0x0C */ virtual void draw();
+ void setPriority(u8 p) {
+ mPriority = p;
+ }
+
/* 0x0C */ u8 mPriority;
void addToDrawList();
diff --git a/src/d/lyt/d2d.cpp b/src/d/lyt/d2d.cpp
index 44a926a2..87934d36 100644
--- a/src/d/lyt/d2d.cpp
+++ b/src/d/lyt/d2d.cpp
@@ -821,7 +821,7 @@ bool AnmGroupBase_c::init(nw4r::lyt::AnimTransform *transform, const char *name,
return true;
}
-bool AnmGroupBase_c::fn_800AC6D0(bool b) {
+bool AnmGroupBase_c::setDirection(bool b) {
nw4r::lyt::AnimTransform *anmTransform = mpAnmTransform;
if (anmTransform == nullptr) {
return false;
@@ -849,7 +849,7 @@ bool AnmGroupBase_c::fn_800AC6D0(bool b) {
return true;
}
-bool AnmGroupBase_c::fn_800AC7D0() {
+bool AnmGroupBase_c::unbind() {
nw4r::lyt::AnimTransform *anmTransform = mpAnmTransform;
if (anmTransform == nullptr) {
return false;
@@ -865,7 +865,7 @@ bool AnmGroupBase_c::fn_800AC7D0() {
return true;
}
-bool AnmGroupBase_c::fn_800AC860() {
+bool AnmGroupBase_c::afterUnbind() {
return true;
}
diff --git a/src/d/lyt/d_lyt_area_caption.cpp b/src/d/lyt/d_lyt_area_caption.cpp
new file mode 100644
index 00000000..72d35fcb
--- /dev/null
+++ b/src/d/lyt/d_lyt_area_caption.cpp
@@ -0,0 +1,248 @@
+#include <d/lyt/d_lyt_area_caption.h>
+#include <d/lyt/d_textbox.h>
+#include <toBeSorted/arc_managers/layout_arc_manager.h>
+
+STATE_DEFINE(dLytAreaCaptionParts_c, Wait);
+STATE_DEFINE(dLytAreaCaptionParts_c, Start);
+STATE_DEFINE(dLytAreaCaptionParts_c, Out);
+
+static const d2d::LytBrlanMapping brlanMap1[] = {
+ { "areaCaption_00_start.brlan", "G__start_00"},
+ { "areaCaption_00_type.brlan", "G_type_00"},
+ {"areaCaption_00_textLine.brlan", "G_textLine_00"},
+ { "", ""},
+};
+
+static const d2d::LytBrlanMapping brlanMap2[] = {
+ { "areaCaption_01_start.brlan", "G__start_00"},
+ { "areaCaption_01_type.brlan", "G_type_00"},
+ {"areaCaption_01_textLine.brlan", "G_textLine_00"},
+ { "areaCaption_01_out.brlan", "G_inOut_00"},
+};
+
+static const char *captionBoxes[] = {
+ "T_caption_00",
+ "T_captionS_00",
+ "T_captionS_01",
+};
+
+bool dLytAreaCaptionParts_c::init(int first) {
+ void *data = LayoutArcManager::sInstance->getLoadedData("DoButton");
+ mResAcc.attach(data, "");
+ mLyt.setResAcc(&mResAcc);
+
+ mFirst = first;
+ if (mFirst != 0) {
+ mLyt.build("areaCaption_00.brlyt", nullptr);
+ for (int i = 0; i < 4; i++) {
+ if (brlanMap1[i].mFile[0] == '\0') {
+ mAnmCtrlInUse[i] = false;
+ } else {
+ mAnmGroups[i].init(brlanMap1[i].mFile, &mResAcc, mLyt.getLayout(), brlanMap1[i].mName);
+ mAnmGroups[i].setDirection(false);
+ mAnmGroups[i].setAnimEnable(false);
+ mAnmCtrlInUse[i] = true;
+ }
+ }
+ } else {
+ mLyt.build("areaCaption_01.brlyt", nullptr);
+ mLyt.setPriority(0x8A);
+ for (int i = 0; i < 4; i++) {
+ if (brlanMap2[i].mFile[0] == '\0') {
+ mAnmCtrlInUse[i] = false;
+ } else {
+ mAnmGroups[i].init(brlanMap2[i].mFile, &mResAcc, mLyt.getLayout(), brlanMap2[i].mName);
+ mAnmGroups[i].setDirection(false);
+ mAnmGroups[i].setAnimEnable(false);
+ mAnmCtrlInUse[i] = true;
+ }
+ }
+ }
+
+ for (int i = 0; i < 3; i++) {
+ mTextBoxes[i] = mLyt.getTextBox(captionBoxes[i]);
+ }
+
+ field_0x54C = 0;
+ field_0x54D = 0;
+ mStateMgr.changeState(StateID_Wait);
+ mLyt.calc();
+ return true;
+}
+
+bool dLytAreaCaptionParts_c::remove() {
+ for (int i = 0; i < 4; i++) {
+ if (mAnmCtrlInUse[i]) {
+ mAnmGroups[i].unbind();
+ mAnmGroups[i].afterUnbind();
+ }
+ }
+ mResAcc.detach();
+ return true;
+}
+
+bool dLytAreaCaptionParts_c::update() {
+ mStateMgr.executeState();
+ if (*mStateMgr.getStateID() != StateID_Wait) {
+ for (int i = 0; i < 4; i++) {
+ if (mAnmCtrlInUse[i] && mAnmGroups[i].isFlag2()) {
+ mAnmGroups[i].play();
+ }
+ }
+ mLyt.calc();
+ }
+ return true;
+}
+
+bool dLytAreaCaptionParts_c::draw() {
+ mLyt.addToDrawList();
+ return true;
+}
+
+void dLytAreaCaptionParts_c::setTextIfWaiting(const char *text) {
+ if (*mStateMgr.getStateID() == StateID_Wait) {
+ mTextBoxes[0]->fn_800E0A60(text, nullptr);
+ mTextBoxes[1]->fn_800E0A60(text, nullptr);
+ mTextBoxes[2]->fn_800E0A60(text, nullptr);
+ field_0x54C = 1;
+ }
+}
+
+void dLytAreaCaptionParts_c::check() {
+ if (*mStateMgr.getStateID() == StateID_Start) {
+ field_0x54D = 1;
+ }
+}
+
+void dLytAreaCaptionParts_c::initializeState_Wait() {}
+void dLytAreaCaptionParts_c::executeState_Wait() {
+ mTextBoxes[0]->fn_800E0A60("N_inOut_00", nullptr);
+}
+void dLytAreaCaptionParts_c::finalizeState_Wait() {}
+
+void dLytAreaCaptionParts_c::initializeState_Start() {}
+void dLytAreaCaptionParts_c::executeState_Start() {}
+void dLytAreaCaptionParts_c::finalizeState_Start() {}
+
+void dLytAreaCaptionParts_c::initializeState_Out() {}
+void dLytAreaCaptionParts_c::executeState_Out() {}
+void dLytAreaCaptionParts_c::finalizeState_Out() {}
+
+bool dLytAreaCaption_c::create() {
+ new dLytAreaCaption_c();
+ if (dLytAreaCaption_c::sInstance == nullptr) {
+ return false;
+ }
+ sInstance->init();
+ return true;
+}
+
+bool dLytAreaCaption_c::remove() {
+ if (sInstance != nullptr) {
+ sInstance->deinit();
+ delete sInstance;
+ sInstance = nullptr;
+ }
+ return true;
+}
+
+bool dLytAreaCaption_c::update() {
+ if (sInstance != nullptr) {
+ sInstance->doUpdate();
+ }
+ return true;
+}
+
+bool dLytAreaCaption_c::draw() {
+ if (sInstance != nullptr) {
+ sInstance->doDraw();
+ }
+ return true;
+}
+
+void dLytAreaCaption_c::setTextIfWaiting(const char *text) {
+ if (sInstance != nullptr) {
+ sInstance->doSetTextIfWaiting(text);
+ }
+}
+
+void dLytAreaCaption_c::setArea(int id) {
+ if (sInstance != nullptr) {
+ sInstance->doSetArea(id);
+ }
+}
+
+void dLytAreaCaption_c::check() {
+ if (sInstance != nullptr) {
+ sInstance->doCheck();
+ }
+}
+
+void dLytAreaCaption_c::set0xAAC(u8 arg) {
+ if (sInstance != nullptr) {
+ sInstance->field_0xAAC = arg;
+ }
+}
+
+u8 dLytAreaCaption_c::get0xAAC() {
+ if (sInstance != nullptr) {
+ return sInstance->field_0xAAC;
+ }
+ return 0;
+}
+
+bool dLytAreaCaption_c::init() {
+ int first = 1;
+ for (int i = 0; i < 2; i++) {
+ mParts[i].init(first);
+ first = 0;
+ }
+ mPartToDraw = 0;
+ field_0xAAC = 0;
+ return true;
+}
+
+bool dLytAreaCaption_c::deinit() {
+ for (int i = 0; i < 2; i++) {
+ mParts[i].remove();
+ }
+ return true;
+}
+
+bool dLytAreaCaption_c::doUpdate() {
+ for (int i = 0; i < 2; i++) {
+ mParts[i].update();
+ }
+ return true;
+}
+
+bool dLytAreaCaption_c::doDraw() {
+ for (int i = 0; i < 2; i++) {
+ if (i == mPartToDraw) {
+ mParts[i].draw();
+ }
+ }
+ return true;
+}
+
+void dLytAreaCaption_c::doSetTextIfWaiting(const char *text) {
+ mPartToDraw = 0;
+ for (int i = 0; i < 2; i++) {
+ mParts[i].setTextIfWaiting(text);
+ }
+}
+
+void dLytAreaCaption_c::doSetArea(int id) {
+ mPartToDraw = 1;
+ SizedString<16> str;
+ str.sprintf("MAP_%02d", id);
+ for (int i = 0; i < 2; i++) {
+ mParts[i].setTextIfWaiting(str);
+ }
+}
+
+void dLytAreaCaption_c::doCheck() {
+ for (int i = 0; i < 2; i++) {
+ mParts[i].check();
+ }
+}
diff --git a/src/d/lyt/d_lyt_battery.cpp b/src/d/lyt/d_lyt_battery.cpp
index b0691f3f..7584214f 100644
--- a/src/d/lyt/d_lyt_battery.cpp
+++ b/src/d/lyt/d_lyt_battery.cpp
@@ -45,7 +45,7 @@ bool dLytBattery_c::init() {
for (int i = 0; i < 4; i++) {
mAnmGroups[i].init(brlanMap[i].mFile, &mResAcc, mLyt.getLayout(), brlanMap[i].mName);
- mAnmGroups[i].fn_800AC6D0(false);
+ mAnmGroups[i].setDirection(false);
mAnmGroups[i].setAnimEnable(false);
}
diff --git a/src/d/lyt/d_lyt_common_arrow.cpp b/src/d/lyt/d_lyt_common_arrow.cpp
index d28a8f91..07607562 100644
--- a/src/d/lyt/d_lyt_common_arrow.cpp
+++ b/src/d/lyt/d_lyt_common_arrow.cpp
@@ -44,7 +44,7 @@ bool dLytCommonArrow_c::fn_80168490() {
d2d::dLytStructDList::sInstance->removeFromList2(&field_0x680);
mLytBase.unbindAnims();
for (int i = 0; i < 9; i++) {
- field_0x440[i].fn_800AC860();
+ field_0x440[i].afterUnbind();
}
return true;
}
@@ -112,7 +112,7 @@ void dLytCommonArrow_c::fn_80168790(s32 idx, f32 frame) {
}
void dLytCommonArrow_c::fn_80168800(s32 idx) {
- field_0x440[idx].fn_800AC7D0();
+ field_0x440[idx].unbind();
}
void dLytCommonArrow_c::fn_80168810(d2d::AnmGroup_c *ctrl) {
diff --git a/src/d/lyt/d_lyt_fader.cpp b/src/d/lyt/d_lyt_fader.cpp
index 6b872117..d0668a39 100644
--- a/src/d/lyt/d_lyt_fader.cpp
+++ b/src/d/lyt/d_lyt_fader.cpp
@@ -14,7 +14,7 @@ dLytFader_c::~dLytFader_c() {
if (field_0x4DD == true) {
for (int i = 0; i < 3; i++) {
- mLytStructAs[i].fn_800AC860();
+ mLytStructAs[i].afterUnbind();
}
mResAcc.detach();
}
@@ -25,7 +25,7 @@ void dLytFader_c::setStatus(EStatus status) {
mStatus = FADED_OUT;
mLytBase.unbindAnims();
d2d::AnmGroup_c *s = &mLytStructAs[0];
- s->fn_800AC6D0(false);
+ s->setDirection(false);
s->setToEnd();
s->setAnimEnable(true);
s->play();
@@ -36,7 +36,7 @@ void dLytFader_c::setStatus(EStatus status) {
mStatus = FADED_IN;
mLytBase.unbindAnims();
d2d::AnmGroup_c *s = &mLytStructAs[0];
- s->fn_800AC6D0(false);
+ s->setDirection(false);
s->setToStart();
s->setAnimEnable(true);
mLytBase.calc();
@@ -112,7 +112,7 @@ void dLytFader_c::fn_801758F0() {
fn_80175BC0(0);
mLytBase.unbindAnims();
d2d::AnmGroup_c *s = &mLytStructAs[0];
- s->fn_800AC6D0(false);
+ s->setDirection(false);
s->setFrame(0.0f);
s->setRate(20.0f / (mFrame - 1));
mLytBase.getLayout()->GetRootPane()->SetVisible(true);
@@ -132,7 +132,7 @@ void dLytFader_c::fn_80175A50() {
fn_80175BC0(1);
mLytBase.unbindAnims();
d2d::AnmGroup_c *s = &mLytStructAs[1];
- s->fn_800AC6D0(false);
+ s->setDirection(false);
s->setFrame(0.0f);
s->setRate(20.0f / (mFrame - 1));
mLytBase.getLayout()->GetRootPane()->SetVisible(true);