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 +#include +#include +#include + +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 +#include +#include + +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);