From 4d9806f2fc9fcc78d80f2102d8c0b755682342b4 Mon Sep 17 00:00:00 2001 From: robojumper Date: Mon, 30 Sep 2024 06:02:30 +0200 Subject: [PATCH] Some game UI basics (#25) * start with dLyt stuff, dLytFader_c * Some game UI basics * More progress * Move and format files * Proper outlining * Fix build * More cleanup * Correct inlining behavior * Fix some symbols * Compiler downgrade required for some funcs. * fixup vtable * one line that was somehow missed --------- Co-authored-by: elijah-thomas774 --- config/SOUE01/splits.txt | 31 ++ config/SOUE01/symbols.txt | 360 ++++++++--------- configure.py | 16 +- include/d/d_font_manager.h | 1 + include/d/lyt/common_arrow.h | 55 +++ include/d/lyt/d2d.h | 178 +++++++++ include/d/lyt/d_lyt_fader.h | 37 ++ include/d/lyt/d_textbox.h | 18 + include/d/lyt/d_window.h | 18 + include/d/lyt/pause_disp_00.h | 35 ++ include/egg/prim/eggAssert.h | 1 + include/m/m2d.h | 55 ++- include/m/m_color_fader.h | 2 +- include/m/m_fader_base.h | 2 +- include/nw4r/lyt/lyt_layout.h | 141 ++++--- include/nw4r/lyt/lyt_pane.h | 16 +- include/s/s_StateInterfaces.hpp | 2 + .../arc_managers/layout_arc_manager.h | 1 + src/d/d_font_manager.cpp | 2 +- src/d/lyt/common_arrow.cpp | 235 +++++++++++ src/d/lyt/d2d.cpp | 364 ++++++++++++++++++ src/d/lyt/d_lyt_fader.cpp | 159 ++++++++ src/d/lyt/d_window.cpp | 28 ++ src/d/lyt/pause_disp_00.cpp | 57 +++ src/egg/prim/eggAssert.cpp | 1 - src/m/m2d.cpp | 5 +- src/m/m_color_fader.cpp | 4 +- src/m/m_fader_base.cpp | 4 +- 28 files changed, 1556 insertions(+), 272 deletions(-) create mode 100644 include/d/lyt/common_arrow.h create mode 100644 include/d/lyt/d2d.h create mode 100644 include/d/lyt/d_lyt_fader.h create mode 100644 include/d/lyt/d_textbox.h create mode 100644 include/d/lyt/d_window.h create mode 100644 include/d/lyt/pause_disp_00.h create mode 100644 src/d/lyt/common_arrow.cpp create mode 100644 src/d/lyt/d2d.cpp create mode 100644 src/d/lyt/d_lyt_fader.cpp create mode 100644 src/d/lyt/d_window.cpp create mode 100644 src/d/lyt/pause_disp_00.cpp diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index 46e2a7b5..5909330b 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -169,6 +169,16 @@ toBeSorted/dowsing_target.cpp: .sdata2 start:0x80579640 end:0x80579670 .bss start:0x805A2FB0 end:0x805A3010 +d/lyt/d2d.cpp: + .text start:0x800A9D30 end:0x800ACAB8 + .data start:0x80510010 end:0x80510088 + .sdata2 start:0x80579788 end:0x805797B0 + +d/lyt/d_window.cpp: + .text start:0x800B1630 end:0x800B1818 + .data start:0x80510820 end:0x805108B0 + .sdata2 start:0x805797F0 end:0x805797F8 + toBeSorted/time_area_mgr.cpp: .text start:0x800B9280 end:0x800BB2A0 @@ -206,6 +216,20 @@ toBeSorted/special_item_drop_mgr.cpp: .text start:0x800C7B60 end:0x800C82B0 .sbss start:0x80575438 end:0x80575440 +d/lyt/pause_disp_00.cpp: + .text start:0x80159E80 end:0x8015EDE8 + .ctors start:0x804DB798 end:0x804DB79C + .data start:0x80525138 end:0x80525EE0 + +d/lyt/common_arrow.cpp: + .text start:0x80167FE0 end:0x801695E8 + .ctors start:0x804DB7AC end:0x804DB7B0 + .rodata start:0x804E8D28 end:0x804E8D70 + .data start:0x80527298 end:0x80527600 + .sdata start:0x805729D0 end:0x805729D8 + .sdata2 start:0x8057A180 end:0x8057A188 + .bss start:0x805B1CB0 end:0x805B1DB0 + toBeSorted/counters/counter.cpp: .text start:0x8016CC40 end:0x8016CD94 @@ -252,6 +276,13 @@ toBeSorted/counters/extra_wallet_counter.cpp: .data start:0x805280B0 end:0x805280D0 .sbss start:0x80575640 end:0x80575648 +d/lyt/d_lyt_fader.cpp: + .text start:0x801753A0 end:0x80175BD0 + .rodata start:0x804E9AB8 end:0x804E9AD0 + .data start:0x80528CC8 end:0x80528D68 + .sdata start:0x80572AA8 end:0x80572AB0 + .sdata2 start:0x8057ABC8 end:0x8057ABE0 + d/a/d_a_player.cpp: .text start:0x801C5C30 end:0x802471F8 .ctors start:0x804DB824 end:0x804DB828 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index fa0f2ce0..ce7b6e34 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -445,7 +445,7 @@ fn_80011AF0 = .text:0x80011AF0; // type:function size:0xA4 fn_80011BA0 = .text:0x80011BA0; // type:function size:0xA0 fn_80011C40 = .text:0x80011C40; // type:function size:0x6C fn_80011CB0 = .text:0x80011CB0; // type:function size:0x58 -fn_80011D10 = .text:0x80011D10; // type:function size:0x5C +__dt__Q23d2d10AnmGroup_cFv = .text:0x80011D10; // type:function size:0x5C fn_80011D70 = .text:0x80011D70; // type:function size:0x40 fn_80011DB0 = .text:0x80011DB0; // type:function size:0x58 fn_80011E10 = .text:0x80011E10; // type:function size:0xA4 @@ -453,9 +453,9 @@ fn_80011EC0 = .text:0x80011EC0; // type:function size:0xA0 fn_80011F60 = .text:0x80011F60; // type:function size:0x6C fn_80011FD0 = .text:0x80011FD0; // type:function size:0x58 fn_80012030 = .text:0x80012030; // type:function size:0x40 -fn_80012070 = .text:0x80012070; // type:function size:0x40 +__dt__Q23d2d11dLytStructCFv = .text:0x80012070; // type:function size:0x40 fn_800120B0 = .text:0x800120B0; // type:function size:0x74 -fn_80012130 = .text:0x80012130; // type:function size:0x40 +__dt__Q34nw4r3lyt11FontRefLinkFv = .text:0x80012130; // type:function size:0x40 fn_80012170 = .text:0x80012170; // type:function size:0xA4 fn_80012220 = .text:0x80012220; // type:function size:0xA0 fn_800122C0 = .text:0x800122C0; // type:function size:0x6C @@ -2194,7 +2194,7 @@ dFader_c__sinit = .text:0x80053E50; // type:function size:0x20 __ct__10dFontMng_cFv = .text:0x80053E70; // type:function size:0x50 __dt__10dFontMng_cFv = .text:0x80053EC0; // type:function size:0x68 getFont__10dFontMng_cFUc = .text:0x80053F30; // type:function size:0x34 -getFontName__FUc = .text:0x80053F70; // type:function size:0x14 +getFontName__10dFontMng_cFUc = .text:0x80053F70; // type:function size:0x14 getFontManager__10dFontMng_cFi = .text:0x80053F90; // type:function size:0x14 getFontMgrIdx__10dFontMng_cFUc = .text:0x80053FB0; // type:function size:0x18 setFontFile__10dFontMng_cFiPv = .text:0x80053FD0; // type:function size:0x18 @@ -2865,20 +2865,20 @@ fn_80065600 = .text:0x80065600; // type:function size:0x3C fn_80065640 = .text:0x80065640; // type:function size:0x164 fn_800657B0 = .text:0x800657B0; // type:function size:0x58 fn_80065810 = .text:0x80065810; // type:function size:0x60 -fn_80065870 = .text:0x80065870; // type:function size:0x110 -fn_80065980 = .text:0x80065980; // type:function size:0xA4 +append__Q23d2d11dLytStructDFPQ23d2d11dLytStructD = .text:0x80065870; // type:function size:0x110 +detach__Q23d2d11dLytStructDFPQ23d2d11dLytStructD = .text:0x80065980; // type:function size:0xA4 fn_80065A30 = .text:0x80065A30; // type:function size:0x34 fn_80065A70 = .text:0x80065A70; // type:function size:0x38 fn_80065AB0 = .text:0x80065AB0; // type:function size:0x78 fn_80065B30 = .text:0x80065B30; // type:function size:0x4C fn_80065B80 = .text:0x80065B80; // type:function size:0x174 fn_80065D00 = .text:0x80065D00; // type:function size:0x14 -fn_80065D20 = .text:0x80065D20; // type:function size:0x74 +__dt__Q23d2d11dLytStructDFv = .text:0x80065D20; // type:function size:0x74 fn_80065DA0 = .text:0x80065DA0; // type:function size:0x40 fn_80065DE0 = .text:0x80065DE0; // type:function size:0x90 -fn_80065E70 = .text:0x80065E70; // type:function size:0xC4 +fn_80065E70__Q23d2d11dLytStructDFPQ34nw4r3lyt4Panelll = .text:0x80065E70; // type:function size:0xC4 fn_80065F40 = .text:0x80065F40; // type:function size:0x28 -fn_80065F70 = .text:0x80065F70; // type:function size:0x328 +fn_80065F70__Q23d2d11dLytStructDFv = .text:0x80065F70; // type:function size:0x328 fn_800662A0 = .text:0x800662A0; // type:function size:0xD4 GetRuntimeTypeInfo__Q34nw4r3lyt4PaneCFv = .text:0x80066380; // type:function size:0x8 scope:weak fn_80066390 = .text:0x80066390; // type:function size:0xE8 @@ -3724,33 +3724,33 @@ ActorOnRail2__setSegment = .text:0x800A9AB0; // type:function size:0x50 checkPosInAREA = .text:0x800A9B00; // type:function size:0xC4 getAREAForIndexInRoom = .text:0x800A9BD0; // type:function size:0x78 checkPosInArea__FllRC7mVec3_cPPv = .text:0x800A9C50; // type:function size:0xD4 -fn_800A9D30 = .text:0x800A9D30; // type:function size:0x60 -fn_800A9D90 = .text:0x800A9D90; // type:function size:0x90 -fn_800A9E20 = .text:0x800A9E20; // type:function size:0x12C -fn_800A9F50 = .text:0x800A9F50; // type:function size:0x60 -fn_800A9FB0 = .text:0x800A9FB0; // type:function size:0x60 -fn_800AA010 = .text:0x800AA010; // type:function size:0x60 -fn_800AA070 = .text:0x800AA070; // type:function size:0x60 -fn_800AA0D0 = .text:0x800AA0D0; // type:function size:0x50 -fn_800AA120 = .text:0x800AA120; // type:function size:0x2F4 -fn_800AA420 = .text:0x800AA420; // type:function size:0x60 -fn_800AA480 = .text:0x800AA480; // type:function size:0x58 +detach__Q23d2d10ResAccIf_cFv = .text:0x800A9D30; // type:function size:0x60 +attach__Q23d2d10ResAccIf_cFPvPCc = .text:0x800A9D90; // type:function size:0x90 +BuildPaneObj__Q23d2d8Layout_cFlPCvRCQ34nw4r3lyt11ResBlockSet = .text:0x800A9E20; // type:function size:0x12C +NewObj__Q34nw4r3lyt6LayoutFPCQ44nw4r3lyt3res8BoundingQ34nw4r3lyt11ResBlockSet_PQ34nw4r3lyt8Bounding = .text:0x800A9F50; // type:function size:0x60 +NewObj<9dWindow_c,PCQ44nw4r3lyt3res6Window,Q34nw4r3lyt11ResBlockSet>__Q34nw4r3lyt6LayoutFPCQ44nw4r3lyt3res6WindowQ34nw4r3lyt11ResBlockSet_P9dWindow_c = .text:0x800A9FB0; // type:function size:0x60 +NewObj<10dTextBox_c,PCQ44nw4r3lyt3res7TextBox,Q34nw4r3lyt11ResBlockSet>__Q34nw4r3lyt6LayoutFPCQ44nw4r3lyt3res7TextBoxQ34nw4r3lyt11ResBlockSet_P10dTextBox_c = .text:0x800AA010; // type:function size:0x60 +NewObj__Q34nw4r3lyt6LayoutFPCQ44nw4r3lyt3res7PictureQ34nw4r3lyt11ResBlockSet_PQ34nw4r3lyt7Picture = .text:0x800AA070; // type:function size:0x60 +NewObj__Q34nw4r3lyt6LayoutFPCQ44nw4r3lyt3res4Pane_PQ34nw4r3lyt4Pane = .text:0x800AA0D0; // type:function size:0x50 +Build__Q23d2d8Layout_cFPCvPQ34nw4r3lyt16ResourceAccessor = .text:0x800AA120; // type:function size:0x2F4 +NewObj__Q34nw4r3lyt6LayoutFPCQ44nw4r3lyt3res5GroupPQ34nw4r3lyt4Pane_PQ34nw4r3lyt5Group = .text:0x800AA420; // type:function size:0x60 +NewObj__Q34nw4r3lyt6LayoutFv_PQ34nw4r3lyt14GroupContainer = .text:0x800AA480; // type:function size:0x58 fn_800AA4E0 = .text:0x800AA4E0; // type:function size:0x50 -d2d__Multi_c____ct = .text:0x800AA530; // type:function size:0xD0 -fn_800AA600 = .text:0x800AA600; // type:function size:0x58 -fn_800AA660 = .text:0x800AA660; // type:function size:0x24 -fn_800AA690 = .text:0x800AA690; // type:function size:0x34 -fn_800AA6D0 = .text:0x800AA6D0; // type:function size:0x24 -fn_800AA700 = .text:0x800AA700; // type:function size:0x78 -fn_800AA780 = .text:0x800AA780; // type:function size:0x178 -fn_800AA900 = .text:0x800AA900; // type:function size:0x108 -fn_800AAA10 = .text:0x800AAA10; // type:function size:0x18 -fn_800AAA30 = .text:0x800AAA30; // type:function size:0x94 -fn_800AAAD0 = .text:0x800AAAD0; // type:function size:0x94 -fn_800AAB70 = .text:0x800AAB70; // type:function size:0x10 -LytBase__ct = .text:0x800AAB80; // type:function size:0x44 -fn_800AABD0 = .text:0x800AABD0; // type:function size:0x78 -fn_800AAC50 = .text:0x800AAC50; // type:function size:0xA0 +__ct__Q23d2d7Multi_cFv = .text:0x800AA530; // type:function size:0xD0 +__dt__Q23d2d8Layout_cFv = .text:0x800AA600; // type:function size:0x58 +animate__Q23d2d7Multi_cFv = .text:0x800AA660; // type:function size:0x24 +calc__Q23d2d7Multi_cFv = .text:0x800AA690; // type:function size:0x34 +calcBefore__Q23d2d7Multi_cFv = .text:0x800AA6D0; // type:function size:0x24 +calcAfter__Q23d2d7Multi_cFv = .text:0x800AA700; // type:function size:0x78 +draw__Q23d2d7Multi_cFv = .text:0x800AA780; // type:function size:0x178 +build__Q23d2d7Multi_cFPCcPQ23m2d10ResAccIf_c = .text:0x800AA900; // type:function size:0x108 +findPane__Q23d2d7Multi_cCFPCc = .text:0x800AAA10; // type:function size:0x18 +findPicture__Q23d2d7Multi_cCFPCc = .text:0x800AAA30; // type:function size:0x94 +findBounding__Q23d2d7Multi_cCFPCc = .text:0x800AAAD0; // type:function size:0x94 +unbindAnims__Q23d2d7Multi_cFv = .text:0x800AAB70; // type:function size:0x10 +__ct__Q23d2d9LytBase_cFv = .text:0x800AAB80; // type:function size:0x44 +__dt__Q23d2d7Multi_cFv = .text:0x800AABD0; // type:function size:0x78 +__dt__Q23d2d9LytBase_cFv = .text:0x800AAC50; // type:function size:0xA0 build = .text:0x800AACF0; // type:function size:0x2F8 fn_800AAFF0 = .text:0x800AAFF0; // type:function size:0x100 fn_800AB0F0 = .text:0x800AB0F0; // type:function size:0x94 @@ -3772,20 +3772,20 @@ fn_800AC350 = .text:0x800AC350; // type:function size:0x64 fn_800AC3C0 = .text:0x800AC3C0; // type:function size:0x128 fn_800AC4F0 = .text:0x800AC4F0; // type:function size:0x8 fn_800AC500 = .text:0x800AC500; // type:function size:0x8 -fn_800AC510 = .text:0x800AC510; // type:function size:0x9C -fn_800AC5B0 = .text:0x800AC5B0; // type:function size:0x114 -fn_800AC6D0 = .text:0x800AC6D0; // type:function size:0xF8 -fn_800AC7D0 = .text:0x800AC7D0; // type:function size:0x88 -fn_800AC860 = .text:0x800AC860; // type:function size:0x8 -fn_800AC870 = .text:0x800AC870; // type:function size:0x8C -fn_800AC900 = .text:0x800AC900; // type:function size:0xC -fn_800AC910 = .text:0x800AC910; // type:function size:0xC -fn_800AC920 = .text:0x800AC920; // type:function size:0x14 -fn_800AC940 = .text:0x800AC940; // type:function size:0x14 +init__Q23d2d10AnmGroup_cFPCcPQ23m2d10ResAccIf_cPQ23d2d8Layout_cPCc = .text:0x800AC510; // type:function size:0x9C +init__Q23d2d10AnmGroup_cFPQ34nw4r3lyt13AnimTransformPCcPQ23m2d10ResAccIf_cPQ34nw4r3lyt5Group = .text:0x800AC5B0; // type:function size:0x114 +fn_800AC6D0__Q23d2d10AnmGroup_cFb = .text:0x800AC6D0; // type:function size:0xF8 +fn_800AC7D0__Q23d2d10AnmGroup_cFv = .text:0x800AC7D0; // type:function size:0x88 +fn_800AC860__Q23d2d10AnmGroup_cFv = .text:0x800AC860; // type:function size:0x8 +fn_800AC870__Q23d2d10AnmGroup_cFb = .text:0x800AC870; // type:function size:0x8C +setAnmFrame__Q23d2d10AnmGroup_cFf = .text:0x800AC900; // type:function size:0xC +syncAnmFrame__Q23d2d10AnmGroup_cFv = .text:0x800AC910; // type:function size:0xC +setForward__Q23d2d10AnmGroup_cFv = .text:0x800AC920; // type:function size:0x14 +setBackward__Q23d2d10AnmGroup_cFv = .text:0x800AC940; // type:function size:0x14 fn_800AC960 = .text:0x800AC960; // type:function size:0x4C fn_800AC9B0 = .text:0x800AC9B0; // type:function size:0x80 fn_800ACA30 = .text:0x800ACA30; // type:function size:0x64 -fn_800ACAA0 = .text:0x800ACAA0; // type:function size:0x18 +draw__Q23d2d9LytBase_cFv = .text:0x800ACAA0; // type:function size:0x18 fn_800ACAC0 = .text:0x800ACAC0; // type:function size:0x5C fn_800ACB20 = .text:0x800ACB20; // type:function size:0x40 fn_800ACB60 = .text:0x800ACB60; // type:function size:0x208 @@ -3832,7 +3832,7 @@ fn_800AE1F0 = .text:0x800AE1F0; // type:function size:0x30 LytDrawMark__initStates = .text:0x800AE220; // type:function size:0x644 LytDrawMark__dtor = .text:0x800AE870; // type:function size:0x58 fn_800AE8D0 = .text:0x800AE8D0; // type:function size:0x88 -fn_800AE960 = .text:0x800AE960; // type:function size:0xE0 +__ct__10dTextBox_cFPCQ44nw4r3lyt3res7TextBoxRCQ34nw4r3lyt11ResBlockSet = .text:0x800AE960; // type:function size:0xE0 fn_800AEA40 = .text:0x800AEA40; // type:function size:0xB4 fn_800AEB00 = .text:0x800AEB00; // type:function size:0x178 fn_800AEC80 = .text:0x800AEC80; // type:function size:0x108 @@ -3848,7 +3848,7 @@ fn_800AF720 = .text:0x800AF720; // type:function size:0x8C fn_800AF7B0 = .text:0x800AF7B0; // type:function size:0x84 fn_800AF840 = .text:0x800AF840; // type:function size:0xEC fn_800AF930 = .text:0x800AF930; // type:function size:0x50 -fn_800AF980 = .text:0x800AF980; // type:function size:0x1E4 +GetLineWidth__10dTextBox_cFPf = .text:0x800AF980; // type:function size:0x1E4 fn_800AFB70 = .text:0x800AFB70; // type:function size:0x1A4 fn_800AFD20 = .text:0x800AFD20; // type:function size:0x3C fn_800AFD60 = .text:0x800AFD60; // type:function size:0xC8 @@ -3863,10 +3863,10 @@ dTextBox_c__setFontSize = .text:0x800B1570; // type:function size:0x14 fn_800B1590 = .text:0x800B1590; // type:function size:0x14 GetRuntimeTypeInfo__Q34nw4r3lyt7TextBoxCFv = .text:0x800B15B0; // type:function size:0x8 scope:weak fn_800B15C0 = .text:0x800B15C0; // type:function size:0x68 -fn_800B1630 = .text:0x800B1630; // type:function size:0x3C -fn_800B1670 = .text:0x800B1670; // type:function size:0x134 +__ct__9dWindow_cFPCQ44nw4r3lyt3res6WindowRCQ34nw4r3lyt11ResBlockSet = .text:0x800B1630; // type:function size:0x3C +UpdateSize__9dWindow_cFP10dTextBox_cf = .text:0x800B1670; // type:function size:0x134 GetRuntimeTypeInfo__Q34nw4r3lyt6WindowCFv = .text:0x800B17B0; // type:function size:0x8 scope:weak -fn_800B17C0 = .text:0x800B17C0; // type:function size:0x58 +__dt__9dWindow_cFv = .text:0x800B17C0; // type:function size:0x58 __dt__Q34nw4r3lyt19ArcResourceAccessorFv = .text:0x800B1820; // type:function size:0x6C scope:weak fn_800B1890 = .text:0x800B1890; // type:function size:0x40 fn_800B18D0 = .text:0x800B18D0; // type:function size:0x4D4 @@ -4504,7 +4504,7 @@ fn_800CA0A0 = .text:0x800CA0A0; // type:function size:0x1C hasSavedAfterCredits = .text:0x800CA0C0; // type:function size:0x38 fn_800CA100 = .text:0x800CA100; // type:function size:0x1C0 fn_800CA2C0 = .text:0x800CA2C0; // type:function size:0x6C -lytItemCursor_frameCntrl__ctor = .text:0x800CA330; // type:function size:0x84 +__ct__Q23d2d10AnmGroup_cFv = .text:0x800CA330; // type:function size:0x84 LytMeterGanbariGauge__ct = .text:0x800CA3C0; // type:function size:0x110 fn_800CA4D0 = .text:0x800CA4D0; // type:function size:0x58 fn_800CA530 = .text:0x800CA530; // type:function size:0x6C @@ -4530,7 +4530,7 @@ fn_800CB0C0 = .text:0x800CB0C0; // type:function size:0xA4 fn_800CB170 = .text:0x800CB170; // type:function size:0xA8 fn_800CB220 = .text:0x800CB220; // type:function size:0x10C fn_800CB330 = .text:0x800CB330; // type:function size:0x1C8 -fn_800CB500 = .text:0x800CB500; // type:function size:0x168 +__dt__Q23d2d11dLytStructBFv = .text:0x800CB500; // type:function size:0x168 fn_800CB670 = .text:0x800CB670; // type:function size:0x84 fn_800CB700 = .text:0x800CB700; // type:function size:0x84 fn_800CB790 = .text:0x800CB790; // type:function size:0x84 @@ -4600,9 +4600,9 @@ fn_800CDD40 = .text:0x800CDD40; // type:function size:0x58 fn_800CDDA0 = .text:0x800CDDA0; // type:function size:0x6C fn_800CDE10 = .text:0x800CDE10; // type:function size:0xA0 fn_800CDEB0 = .text:0x800CDEB0; // type:function size:0xA4 -fn_800CDF60 = .text:0x800CDF60; // type:function size:0x258 +__ct__Q23d2d11dLytStructBFv = .text:0x800CDF60; // type:function size:0x258 fn_800CE1C0 = .text:0x800CE1C0; // type:function size:0x18 -fn_800CE1E0 = .text:0x800CE1E0; // type:function size:0x10 +__ct__Q23d2d11dLytStructCFv = .text:0x800CE1E0; // type:function size:0x10 fn_800CE1F0 = .text:0x800CE1F0; // type:function size:0x1BC LytMeterDowsing__ct = .text:0x800CE3B0; // type:function size:0x218 fn_800CE5D0 = .text:0x800CE5D0; // type:function size:0x98 @@ -8779,17 +8779,17 @@ fn_80159A20 = .text:0x80159A20; // type:function size:0x30 LytPauseBack__initStates = .text:0x80159A50; // type:function size:0x338 LytPauseBack__dtor = .text:0x80159D90; // type:function size:0x58 fn_80159DF0 = .text:0x80159DF0; // type:function size:0x88 -LytPauseDisp00__ctor = .text:0x80159E80; // type:function size:0x160 -fn_80159FE0 = .text:0x80159FE0; // type:function size:0xA4 -fn_8015A090 = .text:0x8015A090; // type:function size:0xA0 -fn_8015A130 = .text:0x8015A130; // type:function size:0x6C -fn_8015A1A0 = .text:0x8015A1A0; // type:function size:0x58 -fn_8015A200 = .text:0x8015A200; // type:function size:0x310 -fn_8015A510 = .text:0x8015A510; // type:function size:0x10 +__ct__17dLytPauseDisp00_cFv = .text:0x80159E80; // type:function size:0x160 +__dt__56sFStateMgr_c<17dLytPauseDisp00_c,20sStateMethodUsr_FI_c>Fv = .text:0x80159FE0; // type:function size:0xA4 +__dt__86sStateMgr_c<17dLytPauseDisp00_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8015A090; // type:function size:0xA0 +__dt__33sFStateFct_c<17dLytPauseDisp00_c>Fv = .text:0x8015A130; // type:function size:0x6C +__dt__30sFState_c<17dLytPauseDisp00_c>Fv = .text:0x8015A1A0; // type:function size:0x58 +init__17dLytPauseDisp00_cFv = .text:0x8015A200; // type:function size:0x310 +changeState__86sStateMgr_c<17dLytPauseDisp00_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x8015A510; // type:function size:0x10 fn_8015A520 = .text:0x8015A520; // type:function size:0x118 fn_8015A640 = .text:0x8015A640; // type:function size:0x10C -fn_8015A750 = .text:0x8015A750; // type:function size:0x10 -fn_8015A760 = .text:0x8015A760; // type:function size:0x10 +executeState__86sStateMgr_c<17dLytPauseDisp00_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8015A750; // type:function size:0x10 +getStateID__86sStateMgr_c<17dLytPauseDisp00_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8015A760; // type:function size:0x10 fn_8015A770 = .text:0x8015A770; // type:function size:0x38 fn_8015A7B0 = .text:0x8015A7B0; // type:function size:0x14 fn_8015A7D0 = .text:0x8015A7D0; // type:function size:0x14 @@ -8820,7 +8820,7 @@ LytPauseDisp00__stateGetDemoLeave = .text:0x8015BD40; // type:function size:0x4 LytPauseDisp00__stateOutEnter = .text:0x8015BD50; // type:function size:0x94 LytPauseDisp00__stateOutUpdate = .text:0x8015BDF0; // type:function size:0xE0 LytPauseDisp00__stateOutLeave = .text:0x8015BED0; // type:function size:0x4 -displayPauseMenuElement = .text:0x8015BEE0; // type:function size:0x68 +displayElement__17dLytPauseDisp00_cFif = .text:0x8015BEE0; // type:function size:0x68 fn_8015BF50 = .text:0x8015BF50; // type:function size:0x10 fn_8015BF60 = .text:0x8015BF60; // type:function size:0x64 pauseDisplayMainInventory = .text:0x8015BFD0; // type:function size:0x160 @@ -8844,24 +8844,24 @@ fn_8015E070 = .text:0x8015E070; // type:function size:0x220 fn_8015E290 = .text:0x8015E290; // type:function size:0xA4 fn_8015E340 = .text:0x8015E340; // type:function size:0x54 fn_8015E3A0 = .text:0x8015E3A0; // type:function size:0xF4 -fn_8015E4A0 = .text:0x8015E4A0; // type:function size:0x130 -fn_8015E5D0 = .text:0x8015E5D0; // type:function size:0x60 -fn_8015E630 = .text:0x8015E630; // type:function size:0xC -fn_8015E640 = .text:0x8015E640; // type:function size:0x1C -fn_8015E660 = .text:0x8015E660; // type:function size:0x1C -fn_8015E680 = .text:0x8015E680; // type:function size:0x1C -fn_8015E6A0 = .text:0x8015E6A0; // type:function size:0x10 -fn_8015E6B0 = .text:0x8015E6B0; // type:function size:0x10 -fn_8015E6C0 = .text:0x8015E6C0; // type:function size:0x10 -fn_8015E6D0 = .text:0x8015E6D0; // type:function size:0x10 -fn_8015E6E0 = .text:0x8015E6E0; // type:function size:0x10 -fn_8015E6F0 = .text:0x8015E6F0; // type:function size:0x10 -fn_8015E700 = .text:0x8015E700; // type:function size:0x30 -fn_8015E730 = .text:0x8015E730; // type:function size:0x30 -fn_8015E760 = .text:0x8015E760; // type:function size:0x30 -LytPauseDisp00__initStates = .text:0x8015E790; // type:function size:0x56C -LytPauseDisp00__dtor = .text:0x8015ED00; // type:function size:0x58 -fn_8015ED60 = .text:0x8015ED60; // type:function size:0x88 +__dt__17dLytPauseDisp00_cFv = .text:0x8015E4A0; // type:function size:0x130 +build__33sFStateFct_c<17dLytPauseDisp00_c>FRC12sStateIDIf_c = .text:0x8015E5D0; // type:function size:0x60 +dispose__33sFStateFct_c<17dLytPauseDisp00_c>FRP10sStateIf_c = .text:0x8015E630; // type:function size:0xC +initialize__30sFState_c<17dLytPauseDisp00_c>Fv = .text:0x8015E640; // type:function size:0x1C +execute__30sFState_c<17dLytPauseDisp00_c>Fv = .text:0x8015E660; // type:function size:0x1C +finalize__30sFState_c<17dLytPauseDisp00_c>Fv = .text:0x8015E680; // type:function size:0x1C +initializeState__86sStateMgr_c<17dLytPauseDisp00_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8015E6A0; // type:function size:0x10 +finalizeState__86sStateMgr_c<17dLytPauseDisp00_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8015E6B0; // type:function size:0x10 +refreshState__86sStateMgr_c<17dLytPauseDisp00_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8015E6C0; // type:function size:0x10 +getState__86sStateMgr_c<17dLytPauseDisp00_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8015E6D0; // type:function size:0x10 +getNewStateID__86sStateMgr_c<17dLytPauseDisp00_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8015E6E0; // type:function size:0x10 +getOldStateID__86sStateMgr_c<17dLytPauseDisp00_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8015E6F0; // type:function size:0x10 +finalizeState__32sFStateID_c<17dLytPauseDisp00_c>CFR17dLytPauseDisp00_c = .text:0x8015E700; // type:function size:0x30 +executeState__32sFStateID_c<17dLytPauseDisp00_c>CFR17dLytPauseDisp00_c = .text:0x8015E730; // type:function size:0x30 +initializeState__32sFStateID_c<17dLytPauseDisp00_c>CFR17dLytPauseDisp00_c = .text:0x8015E760; // type:function size:0x30 +__sinit_\pause_disp_00_cpp = .text:0x8015E790; // type:function size:0x56C +__dt__32sFStateID_c<17dLytPauseDisp00_c>Fv = .text:0x8015ED00; // type:function size:0x58 +isSameName__32sFStateID_c<17dLytPauseDisp00_c>CFPCc = .text:0x8015ED60; // type:function size:0x88 LytPauseDisp01__ctor = .text:0x8015EDF0; // type:function size:0x160 fn_8015EF50 = .text:0x8015EF50; // type:function size:0xA4 fn_8015F000 = .text:0x8015F000; // type:function size:0xA0 @@ -9197,58 +9197,58 @@ swordRestrictedBokoBase = .text:0x80167E70; // type:function size:0x44 getItemIdForTriforcePieceNum = .text:0x80167EC0; // type:function size:0x10 fn_80167ED0 = .text:0x80167ED0; // type:function size:0x88 fn_80167F60 = .text:0x80167F60; // type:function size:0x74 -LytCommonArrow__ctor = .text:0x80167FE0; // type:function size:0x148 -fn_80168130 = .text:0x80168130; // type:function size:0xA4 -fn_801681E0 = .text:0x801681E0; // type:function size:0xA0 -fn_80168280 = .text:0x80168280; // type:function size:0x6C -fn_801682F0 = .text:0x801682F0; // type:function size:0x58 -fn_80168350 = .text:0x80168350; // type:function size:0x124 -fn_80168480 = .text:0x80168480; // type:function size:0x10 -fn_80168490 = .text:0x80168490; // type:function size:0x68 -fn_80168500 = .text:0x80168500; // type:function size:0xB0 -fn_801685B0 = .text:0x801685B0; // type:function size:0x10 -fn_801685C0 = .text:0x801685C0; // type:function size:0x10 -fn_801685D0 = .text:0x801685D0; // type:function size:0x34 -fn_80168610 = .text:0x80168610; // type:function size:0x24 -fn_80168640 = .text:0x80168640; // type:function size:0x34 -fn_80168680 = .text:0x80168680; // type:function size:0x70 -fn_801686F0 = .text:0x801686F0; // type:function size:0x70 -fn_80168760 = .text:0x80168760; // type:function size:0x2C -fn_80168790 = .text:0x80168790; // type:function size:0x68 -fn_80168800 = .text:0x80168800; // type:function size:0x10 -fn_80168810 = .text:0x80168810; // type:function size:0x64 -fn_80168880 = .text:0x80168880; // type:function size:0xC4 -LytCommonArrow__stateNoneEnter = .text:0x80168950; // type:function size:0x74 -LytCommonArrow__stateNoneUpdate = .text:0x801689D0; // type:function size:0x28 -LytCommonArrow__stateNoneLeave = .text:0x80168A00; // type:function size:0x14 -LytCommonArrow__stateInEnter = .text:0x80168A20; // type:function size:0x88 -LytCommonArrow__stateInUpdate = .text:0x80168AB0; // type:function size:0xB4 -LytCommonArrow__stateInLeave = .text:0x80168B70; // type:function size:0x8 -LytCommonArrow__stateWaitEnter = .text:0x80168B80; // type:function size:0xC -LytCommonArrow__stateWaitUpdate = .text:0x80168B90; // type:function size:0x238 -LytCommonArrow__stateWaitLeave = .text:0x80168DD0; // type:function size:0x4 -LytCommonArrow__stateOutEnter = .text:0x80168DE0; // type:function size:0x48 -LytCommonArrow__stateOutUpdate = .text:0x80168E30; // type:function size:0xA4 -LytCommonArrow__stateOutLeave = .text:0x80168EE0; // type:function size:0x4 -fn_80168EF0 = .text:0x80168EF0; // type:function size:0x110 -fn_80169000 = .text:0x80169000; // type:function size:0x60 -fn_80169060 = .text:0x80169060; // type:function size:0xC -fn_80169070 = .text:0x80169070; // type:function size:0x1C -fn_80169090 = .text:0x80169090; // type:function size:0x1C -fn_801690B0 = .text:0x801690B0; // type:function size:0x1C -fn_801690D0 = .text:0x801690D0; // type:function size:0x10 -fn_801690E0 = .text:0x801690E0; // type:function size:0x10 -fn_801690F0 = .text:0x801690F0; // type:function size:0x10 -fn_80169100 = .text:0x80169100; // type:function size:0x10 -fn_80169110 = .text:0x80169110; // type:function size:0x10 -fn_80169120 = .text:0x80169120; // type:function size:0x10 -fn_80169130 = .text:0x80169130; // type:function size:0x30 -fn_80169160 = .text:0x80169160; // type:function size:0x30 -fn_80169190 = .text:0x80169190; // type:function size:0x30 -LytCommonArrow__initStates = .text:0x801691C0; // type:function size:0x338 -LytCommonArrow__dtor = .text:0x80169500; // type:function size:0x58 -fn_80169560 = .text:0x80169560; // type:function size:0x88 -LytCommonTitle__ctor = .text:0x801695F0; // type:function size:0x110 +__ct__17dLytCommonArrow_cFv = .text:0x80167FE0; // type:function size:0x148 +__dt__56sFStateMgr_c<17dLytCommonArrow_c,20sStateMethodUsr_FI_c>Fv = .text:0x80168130; // type:function size:0xA4 +__dt__86sStateMgr_c<17dLytCommonArrow_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801681E0; // type:function size:0xA0 +__dt__33sFStateFct_c<17dLytCommonArrow_c>Fv = .text:0x80168280; // type:function size:0x6C +__dt__30sFState_c<17dLytCommonArrow_c>Fv = .text:0x801682F0; // type:function size:0x58 +init__17dLytCommonArrow_cFv = .text:0x80168350; // type:function size:0x124 +changeState__86sStateMgr_c<17dLytCommonArrow_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x80168480; // type:function size:0x10 +fn_80168490__17dLytCommonArrow_cFv = .text:0x80168490; // type:function size:0x68 +fn_80168500__17dLytCommonArrow_cFv = .text:0x80168500; // type:function size:0xB0 +executeState__86sStateMgr_c<17dLytCommonArrow_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801685B0; // type:function size:0x10 +getStateID__86sStateMgr_c<17dLytCommonArrow_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801685C0; // type:function size:0x10 +addToDrawList__17dLytCommonArrow_cFv = .text:0x801685D0; // type:function size:0x34 +setState__17dLytCommonArrow_cFl = .text:0x80168610; // type:function size:0x24 +fn_80168640__17dLytCommonArrow_cFPf = .text:0x80168640; // type:function size:0x34 +fn_80168680__17dLytCommonArrow_cFv = .text:0x80168680; // type:function size:0x70 +fn_801686F0__17dLytCommonArrow_cFv = .text:0x801686F0; // type:function size:0x70 +fn_80168760__17dLytCommonArrow_cFv = .text:0x80168760; // type:function size:0x2C +fn_80168790__17dLytCommonArrow_cFlf = .text:0x80168790; // type:function size:0x68 +fn_80168800__17dLytCommonArrow_cFl = .text:0x80168800; // type:function size:0x10 +fn_80168810__17dLytCommonArrow_cFPQ23d2d10AnmGroup_c = .text:0x80168810; // type:function size:0x64 +fn_80168880__17dLytCommonArrow_cFv = .text:0x80168880; // type:function size:0xC4 +initializeState_None__17dLytCommonArrow_cFv = .text:0x80168950; // type:function size:0x74 +executeState_None__17dLytCommonArrow_cFv = .text:0x801689D0; // type:function size:0x28 +finalizeState_None__17dLytCommonArrow_cFv = .text:0x80168A00; // type:function size:0x14 +initializeState_In__17dLytCommonArrow_cFv = .text:0x80168A20; // type:function size:0x88 +executeState_In__17dLytCommonArrow_cFv = .text:0x80168AB0; // type:function size:0xB4 +finalizeState_In__17dLytCommonArrow_cFv = .text:0x80168B70; // type:function size:0x8 +initializeState_Wait__17dLytCommonArrow_cFv = .text:0x80168B80; // type:function size:0xC +executeState_Wait__17dLytCommonArrow_cFv = .text:0x80168B90; // type:function size:0x238 +finalizeState_Wait__17dLytCommonArrow_cFv = .text:0x80168DD0; // type:function size:0x4 +initializeState_Out__17dLytCommonArrow_cFv = .text:0x80168DE0; // type:function size:0x48 +executeState_Out__17dLytCommonArrow_cFv = .text:0x80168E30; // type:function size:0xA4 +finalizeState_Out__17dLytCommonArrow_cFv = .text:0x80168EE0; // type:function size:0x4 +__dt__17dLytCommonArrow_cFv = .text:0x80168EF0; // type:function size:0x110 +build__33sFStateFct_c<17dLytCommonArrow_c>FRC12sStateIDIf_c = .text:0x80169000; // type:function size:0x60 +dispose__33sFStateFct_c<17dLytCommonArrow_c>FRP10sStateIf_c = .text:0x80169060; // type:function size:0xC +initialize__30sFState_c<17dLytCommonArrow_c>Fv = .text:0x80169070; // type:function size:0x1C +execute__30sFState_c<17dLytCommonArrow_c>Fv = .text:0x80169090; // type:function size:0x1C +finalize__30sFState_c<17dLytCommonArrow_c>Fv = .text:0x801690B0; // type:function size:0x1C +initializeState__86sStateMgr_c<17dLytCommonArrow_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801690D0; // type:function size:0x10 +finalizeState__86sStateMgr_c<17dLytCommonArrow_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801690E0; // type:function size:0x10 +refreshState__86sStateMgr_c<17dLytCommonArrow_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801690F0; // type:function size:0x10 +getState__86sStateMgr_c<17dLytCommonArrow_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80169100; // type:function size:0x10 +getNewStateID__86sStateMgr_c<17dLytCommonArrow_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80169110; // type:function size:0x10 +getOldStateID__86sStateMgr_c<17dLytCommonArrow_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80169120; // type:function size:0x10 +finalizeState__32sFStateID_c<17dLytCommonArrow_c>CFR17dLytCommonArrow_c = .text:0x80169130; // type:function size:0x30 +executeState__32sFStateID_c<17dLytCommonArrow_c>CFR17dLytCommonArrow_c = .text:0x80169160; // type:function size:0x30 +initializeState__32sFStateID_c<17dLytCommonArrow_c>CFR17dLytCommonArrow_c = .text:0x80169190; // type:function size:0x30 +__sinit_\common_arrow_cpp = .text:0x801691C0; // type:function size:0x338 scope:local +__dt__32sFStateID_c<17dLytCommonArrow_c>Fv = .text:0x80169500; // type:function size:0x58 +isSameName__32sFStateID_c<17dLytCommonArrow_c>CFPCc = .text:0x80169560; // type:function size:0x88 +fn_801695F0 = .text:0x801695F0; // type:function size:0x110 fn_80169700 = .text:0x80169700; // type:function size:0xF4 fn_80169800 = .text:0x80169800; // type:function size:0x10 fn_80169810 = .text:0x80169810; // type:function size:0x6C @@ -9817,19 +9817,19 @@ fn_80175290 = .text:0x80175290; // type:function size:0x4 fn_801752A0 = .text:0x801752A0; // type:function size:0x8 fn_801752B0 = .text:0x801752B0; // type:function size:0x4C fn_80175300 = .text:0x80175300; // type:function size:0x9C -mLytFader_c____ct = .text:0x801753A0; // type:function size:0xAC -fn_80175450 = .text:0x80175450; // type:function size:0x100 -fn_80175550 = .text:0x80175550; // type:function size:0x140 -fn_80175690 = .text:0x80175690; // type:function size:0x70 -fn_80175700 = .text:0x80175700; // type:function size:0x4C -fn_80175750 = .text:0x80175750; // type:function size:0x4C -fn_801757A0 = .text:0x801757A0; // type:function size:0x4C -fn_801757F0 = .text:0x801757F0; // type:function size:0xF4 -fn_801758F0 = .text:0x801758F0; // type:function size:0xB8 -fn_801759B0 = .text:0x801759B0; // type:function size:0x94 -fn_80175A50 = .text:0x80175A50; // type:function size:0xB8 -fn_80175B10 = .text:0x80175B10; // type:function size:0xA4 -fn_80175BC0 = .text:0x80175BC0; // type:function size:0x10 +__ct__11dLytFader_cFRC6mColorQ212mFaderBase_c7EStatus = .text:0x801753A0; // type:function size:0xAC +__dt__11dLytFader_cFv = .text:0x80175450; // type:function size:0x100 +setStatus__11dLytFader_cFQ212mFaderBase_c7EStatus = .text:0x80175550; // type:function size:0x140 +calc__11dLytFader_cFv = .text:0x80175690; // type:function size:0x70 +draw__11dLytFader_cFv = .text:0x80175700; // type:function size:0x4C +fadeIn__11dLytFader_cFv = .text:0x80175750; // type:function size:0x4C +fadeOut__11dLytFader_cFv = .text:0x801757A0; // type:function size:0x4C +init__11dLytFader_cFv = .text:0x801757F0; // type:function size:0xF4 +fn_801758F0__11dLytFader_cFv = .text:0x801758F0; // type:function size:0xB8 +fn_801759B0__11dLytFader_cFv = .text:0x801759B0; // type:function size:0x94 +fn_80175A50__11dLytFader_cFv = .text:0x80175A50; // type:function size:0xB8 +fn_80175B10__11dLytFader_cFv = .text:0x80175B10; // type:function size:0xA4 +fn_80175BC0__11dLytFader_cFl = .text:0x80175BC0; // type:function size:0x10 fn_80175BD0 = .text:0x80175BD0; // type:function size:0x44 fn_80175C20 = .text:0x80175C20; // type:function size:0x58 fn_80175C80 = .text:0x80175C80; // type:function size:0x74 @@ -28367,7 +28367,7 @@ RUPEE_ITEM_TO_TEX_FRAME = .rodata:0x804E9A48; // type:object size:0x38 data:2byt lbl_804E9A80 = .rodata:0x804E9A80; // type:object size:0x18 data:2byte lbl_804E9A98 = .rodata:0x804E9A98; // type:object size:0x10 lbl_804E9AA8 = .rodata:0x804E9AA8; // type:object size:0x10 -lbl_804E9AB8 = .rodata:0x804E9AB8; // type:object size:0x18 data:4byte +lbl_804E9AB8 = .rodata:0x804E9AB8; // type:object size:0x18 scope:local data:4byte lbl_804E9AD0 = .rodata:0x804E9AD0; // type:object size:0x10 data:4byte lbl_804E9AE0 = .rodata:0x804E9AE0; // type:object size:0x18 data:4byte lbl_804E9AF8 = .rodata:0x804E9AF8; // type:object size:0xA4 data:4byte @@ -30777,7 +30777,7 @@ lbl_8050DF28 = .data:0x8050DF28; // type:object size:0x11 data:string lbl_8050DF3C = .data:0x8050DF3C; // type:object size:0x11 data:string __vt__18ArcCallbackHandler = .data:0x8050DF50; // type:object size:0x10 lbl_8050DF60 = .data:0x8050DF60; // type:object size:0x10 -lbl_8050DF70 = .data:0x8050DF70; // type:object size:0x14 +__vt__Q23d2d11dLytStructD = .data:0x8050DF70; // type:object size:0x14 lbl_8050DF84 = .data:0x8050DF84; // type:object size:0xC lbl_8050DF90 = .data:0x8050DF90; // type:object size:0x10 lbl_8050DFA0 = .data:0x8050DFA0; // type:object size:0x10 @@ -30932,9 +30932,9 @@ lbl_8050FF98 = .data:0x8050FF98; // type:object size:0x10 lbl_8050FFA8 = .data:0x8050FFA8; // type:object size:0x10 data:string lbl_8050FFB8 = .data:0x8050FFB8; // type:object size:0x10 lbl_8050FFC8 = .data:0x8050FFC8; // type:object size:0x48 -lbl_80510010 = .data:0x80510010; // type:object size:0x1C -lbl_8051002C = .data:0x8051002C; // type:object size:0x1C -lbl_80510048 = .data:0x80510048; // type:object size:0x40 +__vt__Q23d2d9LytBase_c = .data:0x80510010; // type:object size:0x1C +__vt__Q23d2d7Multi_c = .data:0x8051002C; // type:object size:0x1C +__vt__Q23d2d8Layout_c = .data:0x80510048; // type:object size:0x40 lbl_80510088 = .data:0x80510088; // type:object size:0x18 lbl_805100A0 = .data:0x805100A0; // type:object size:0xC lbl_805100AC = .data:0x805100AC; // type:object size:0x1C @@ -30987,8 +30987,8 @@ lbl_8051074C = .data:0x8051074C; // type:object size:0x34 lbl_80510780 = .data:0x80510780; // type:object size:0xC lbl_8051078C = .data:0x8051078C; // type:object size:0xC lbl_80510798 = .data:0x80510798; // type:object size:0x88 -lbl_80510820 = .data:0x80510820; // type:object size:0x90 -lbl_805108B0 = .data:0x805108B0; // type:object size:0x18 +__vt__9dWindow_c = .data:0x80510820; // type:object size:0x8C +__vt__Q23d2d10ResAccIf_c = .data:0x805108B0; // type:object size:0x18 lbl_805108C8 = .data:0x805108C8; // type:object size:0x10 lbl_805108D8 = .data:0x805108D8; // type:object size:0x10 lbl_805108E8 = .data:0x805108E8; // type:object size:0x10 @@ -33115,11 +33115,11 @@ lbl_80525A18 = .data:0x80525A18; // type:object size:0x10 data:string jumptable_80525A28 = .data:0x80525A28; // type:object size:0x20 scope:local lbl_80525A48 = .data:0x80525A48; // type:object size:0x10 jumptable_80525A58 = .data:0x80525A58; // type:object size:0x54 scope:local -lbl_80525AD4 = .data:0x80525AD4; // type:object size:0xC -lbl_80525AE0 = .data:0x80525AE0; // type:object size:0x30 -lbl_80525B10 = .data:0x80525B10; // type:object size:0x30 -lbl_80525B40 = .data:0x80525B40; // type:object size:0x18 -lbl_80525B58 = .data:0x80525B58; // type:object size:0x354 +__vt__17dLytPauseDisp00_c = .data:0x80525AD4; // type:object size:0xC +__vt__56sFStateMgr_c<17dLytPauseDisp00_c,20sStateMethodUsr_FI_c> = .data:0x80525AE0; // type:object size:0x30 +__vt__86sStateMgr_c<17dLytPauseDisp00_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x80525B10; // type:object size:0x30 +__vt__33sFStateFct_c<17dLytPauseDisp00_c> = .data:0x80525B40; // type:object size:0x18 +__vt__30sFState_c<17dLytPauseDisp00_c> = .data:0x80525B58; // type:object size:0x354 lbl_80525EAC = .data:0x80525EAC; // type:object size:0x34 lbl_80525EE0 = .data:0x80525EE0; // type:object size:0x14 lbl_80525EF4 = .data:0x80525EF4; // type:object size:0xC @@ -33261,12 +33261,12 @@ lbl_80527340 = .data:0x80527340; // type:object size:0x1C data:string lbl_8052735C = .data:0x8052735C; // type:object size:0x1C lbl_80527378 = .data:0x80527378; // type:object size:0xC lbl_80527384 = .data:0x80527384; // type:object size:0x58 -lbl_805273DC = .data:0x805273DC; // type:object size:0xC -lbl_805273E8 = .data:0x805273E8; // type:object size:0x30 -lbl_80527418 = .data:0x80527418; // type:object size:0x30 -lbl_80527448 = .data:0x80527448; // type:object size:0x18 -lbl_80527460 = .data:0x80527460; // type:object size:0x168 -lbl_805275C8 = .data:0x805275C8; // type:object size:0x38 +__vt__17dLytCommonArrow_c = .data:0x805273DC; // type:object size:0xC +__vt__56sFStateMgr_c<17dLytCommonArrow_c,20sStateMethodUsr_FI_c> = .data:0x805273E8; // type:object size:0x30 +__vt__86sStateMgr_c<17dLytCommonArrow_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x80527418; // type:object size:0x30 +__vt__33sFStateFct_c<17dLytCommonArrow_c> = .data:0x80527448; // type:object size:0x14 +__vt__30sFState_c<17dLytCommonArrow_c> = .data:0x80527460; // type:object size:0x18 +__vt__32sFStateID_c<17dLytCommonArrow_c> = .data:0x805275C8; // type:object size:0x34 lbl_80527600 = .data:0x80527600; // type:object size:0x18 data:string lbl_80527618 = .data:0x80527618; // type:object size:0xC lbl_80527624 = .data:0x80527624; // type:object size:0x1C @@ -33496,14 +33496,14 @@ lbl_80528BF4 = .data:0x80528BF4; // type:object size:0xC lbl_80528C00 = .data:0x80528C00; // type:object size:0x10 lbl_80528C10 = .data:0x80528C10; // type:object size:0x30 lbl_80528C40 = .data:0x80528C40; // type:object size:0x88 -lbl_80528CC8 = .data:0x80528CC8; // type:object size:0x18 data:string -lbl_80528CE0 = .data:0x80528CE0; // type:object size:0xC -lbl_80528CEC = .data:0x80528CEC; // type:object size:0x18 -lbl_80528D04 = .data:0x80528D04; // type:object size:0x14 -lbl_80528D18 = .data:0x80528D18; // type:object size:0xC -lbl_80528D24 = .data:0x80528D24; // type:object size:0xC -lbl_80528D30 = .data:0x80528D30; // type:object size:0x10 -lbl_80528D40 = .data:0x80528D40; // type:object size:0x28 +lbl_80528CC8 = .data:0x80528CC8; // type:object size:0x18 scope:local data:string +lbl_80528CE0 = .data:0x80528CE0; // type:object size:0xA scope:local data:string +lbl_80528CEC = .data:0x80528CEC; // type:object size:0x17 scope:local data:string +lbl_80528D04 = .data:0x80528D04; // type:object size:0x12 scope:local data:string +lbl_80528D18 = .data:0x80528D18; // type:object size:0x9 scope:local data:string +lbl_80528D24 = .data:0x80528D24; // type:object size:0x9 scope:local data:string +lbl_80528D30 = .data:0x80528D30; // type:object size:0xE scope:local data:string +__vt__11dLytFader_c = .data:0x80528D40; // type:object size:0x24 lbl_80528D68 = .data:0x80528D68; // type:object size:0x28 lbl_80528D90 = .data:0x80528D90; // type:object size:0x10 lbl_80528DA0 = .data:0x80528DA0; // type:object size:0x168 @@ -38198,7 +38198,7 @@ lbl_80572A90 = .sdata:0x80572A90; // type:object size:0x8 data:string lbl_80572A98 = .sdata:0x80572A98; // type:object size:0x8 data:string lbl_80572AA0 = .sdata:0x80572AA0; // type:object size:0x4 lbl_80572AA4 = .sdata:0x80572AA4; // type:object size:0x4 -lbl_80572AA8 = .sdata:0x80572AA8; // type:object size:0x8 +lbl_80572AA8 = .sdata:0x80572AA8; // type:object size:0x1 scope:local lbl_80572AB0 = .sdata:0x80572AB0; // type:object size:0x8 lbl_80572AB8 = .sdata:0x80572AB8; // type:object size:0x8 lbl_80572AC0 = .sdata:0x80572AC0; // type:object size:0x8 @@ -42968,7 +42968,7 @@ lbl_805797E0 = .sdata2:0x805797E0; // type:object size:0x4 data:float lbl_805797E4 = .sdata2:0x805797E4; // type:object size:0x4 data:float lbl_805797E8 = .sdata2:0x805797E8; // type:object size:0x4 data:float lbl_805797EC = .sdata2:0x805797EC; // type:object size:0x4 data:float -lbl_805797F0 = .sdata2:0x805797F0; // type:object size:0x8 data:float +lbl_805797F0 = .sdata2:0x805797F0; // type:object size:0x4 data:float lbl_805797F8 = .sdata2:0x805797F8; // type:object size:0x4 data:float lbl_805797FC = .sdata2:0x805797FC; // type:object size:0x4 data:float lbl_80579800 = .sdata2:0x80579800; // type:object size:0x4 data:float @@ -48726,10 +48726,10 @@ LytSaveMsgWindow__STATE_IN = .bss:0x805B1C00; // type:object size:0x40 data:4byt LytSaveMsgWindow__STATE_WAIT = .bss:0x805B1C40; // type:object size:0x40 data:4byte LytSaveMsgWindow__STATE_OUT = .bss:0x805B1C80; // type:object size:0x30 data:4byte lbl_805B1CB0 = .bss:0x805B1CB0; // type:object size:0x10 -LytCommonArrow__STATE_NONE = .bss:0x805B1CC0; // type:object size:0x40 data:4byte -LytCommonArrow__STATE_IN = .bss:0x805B1D00; // type:object size:0x40 data:4byte -LytCommonArrow__STATE_WAIT = .bss:0x805B1D40; // type:object size:0x40 data:4byte -LytCommonArrow__STATE_OUT = .bss:0x805B1D80; // type:object size:0x30 data:4byte +StateID_None__17dLytCommonArrow_c = .bss:0x805B1CC0; // type:object size:0x30 data:4byte +StateID_In__17dLytCommonArrow_c = .bss:0x805B1D00; // type:object size:0x30 data:4byte +StateID_Wait__17dLytCommonArrow_c = .bss:0x805B1D40; // type:object size:0x30 data:4byte +StateID_Out__17dLytCommonArrow_c = .bss:0x805B1D80; // type:object size:0x30 data:4byte lbl_805B1DB0 = .bss:0x805B1DB0; // type:object size:0x10 LytCommonTitle__STATE_NONE = .bss:0x805B1DC0; // type:object size:0x40 data:4byte LytCommonTitle__STATE_IN = .bss:0x805B1E00; // type:object size:0x40 data:4byte diff --git a/configure.py b/configure.py index 93bbdb77..19d7513f 100644 --- a/configure.py +++ b/configure.py @@ -150,7 +150,7 @@ config.asflags = [ f"-I build/{config.version}/include", f"--defsym version={version_num}", ] -config.linker_version = "Wii/1.6" +config.linker_version = "Wii/1.5" config.ldflags = [ "-fp hardware", "-nodefaults", @@ -246,7 +246,7 @@ cflags_rel = [ def Rel(status, rel_name, cpp_name, extra_cflags=[]): return { "lib": rel_name, - "mw_version": "Wii/1.6", + "mw_version": "Wii/1.5", "cflags": cflags_rel + extra_cflags, "progress_category": "game", "host": False, @@ -258,7 +258,7 @@ def Rel(status, rel_name, cpp_name, extra_cflags=[]): def MultiRel(rel_name, objects, extra_cflags=[]): return { "lib": rel_name, - "mw_version": "Wii/1.6", + "mw_version": "Wii/1.5", "cflags": cflags_rel + extra_cflags, "host": False, "objects": objects, @@ -268,7 +268,7 @@ def MultiRel(rel_name, objects, extra_cflags=[]): def EGGLib(lib_name, objects): return { "lib": lib_name, - "mw_version": "Wii/1.6", + "mw_version": "Wii/1.5", "cflags": cflags_egg, "progress_category": "egg", "host": False, @@ -296,7 +296,7 @@ config.warn_missing_source = False config.libs = [ { "lib": "game_code", - "mw_version": "Wii/1.6", + "mw_version": "Wii/1.5", "cflags": cflags_framework, "progress_category": "game", "host": False, @@ -351,6 +351,12 @@ config.libs = [ Object(NonMatching, "toBeSorted/cc/d_cc_m3d_g_cyl.cpp"), Object(NonMatching, "toBeSorted/cc/d_cc_m3d_g_sph.cpp"), Object(Matching, "toBeSorted/cc/d_cc_shape_colliders.cpp"), + Object(NonMatching, "d/lyt/d2d.cpp"), + Object(NonMatching, "d/lyt/d_textbox.cpp"), + Object(Matching, "d/lyt/d_window.cpp"), + Object(Matching, "d/lyt/d_lyt_fader.cpp"), + Object(NonMatching, "d/lyt/common_arrow.cpp"), + Object(NonMatching, "d/lyt/pause_disp_00.cpp"), Object(NonMatching, "toBeSorted/file_manager.cpp"), Object(NonMatching, "toBeSorted/save_manager.cpp"), Object(Matching, "DynamicLink.cpp"), diff --git a/include/d/d_font_manager.h b/include/d/d_font_manager.h index 8614f5a4..a6789f28 100644 --- a/include/d/d_font_manager.h +++ b/include/d/d_font_manager.h @@ -15,6 +15,7 @@ public: static dFontMng_c *getFontManager(int idx); static u8 getFontMgrIdx(u8 type); static const char *getFontPath(u8 idx); + static const char *getFontName(u8 type); static bool create(); diff --git a/include/d/lyt/common_arrow.h b/include/d/lyt/common_arrow.h new file mode 100644 index 00000000..c54ade58 --- /dev/null +++ b/include/d/lyt/common_arrow.h @@ -0,0 +1,55 @@ +#ifndef D_LYT_COMMON_ARROW_H +#define D_LYT_COMMON_ARROW_H + +#include +#include +#include + +class dLytCommonArrow_c { +public: + dLytCommonArrow_c(); + virtual ~dLytCommonArrow_c() {} + + bool init(); + + STATE_FUNC_DECLARE(dLytCommonArrow_c, None); + STATE_FUNC_DECLARE(dLytCommonArrow_c, In); + STATE_FUNC_DECLARE(dLytCommonArrow_c, Wait); + STATE_FUNC_DECLARE(dLytCommonArrow_c, Out); + + void setState(s32 state); + bool addToDrawList(); + + bool fn_80168490(); + bool fn_80168500(); + void fn_80168640(f32 *); + bool fn_80168680(); + bool fn_801686F0(); + bool fn_80168760(); + void fn_80168790(s32, f32); + void fn_80168800(s32); + void fn_80168810(d2d::AnmGroup_c *); + void fn_80168880(); + +private: + STATE_MGR_DECLARE(dLytCommonArrow_c); + /* 0x40 */ d2d::LytBase_c mLytBase; + d2d::ResAccIf_c mResAcc; + d2d::AnmGroup_c field_0x440[0x9]; + d2d::dLytStructD field_0x680; + void *field_0x6A8; + void *field_0x6AC; + s32 field_0x6B0; + s32 field_0x6B4; + s32 field_0x6B8; + s32 field_0x6BC; + s32 field_0x6C0; + s32 field_0x6C4; + u8 field_0x6C8; + u8 field_0x6C9; + u8 field_0x6CA; + u8 field_0x6CB; + u8 field_0x6CC; +}; + +#endif diff --git a/include/d/lyt/d2d.h b/include/d/lyt/d2d.h new file mode 100644 index 00000000..b3d0a40b --- /dev/null +++ b/include/d/lyt/d2d.h @@ -0,0 +1,178 @@ +#ifndef D2D_H +#define D2D_H + +#include +#include +#include + +namespace d2d { + +class ResAccIf_c : public m2d::ResAccIf_c { +public: + /* 0xB4 */ nw4r::lyt::FontRefLink mFontRefLinks[5]; + + bool attach(void *data, const char *name); + void detach(); +}; + +struct LytBrlanMapping { + const char *mFile; + const char *mName; +}; + +class Layout_c : public nw4r::lyt::Layout { +public: + virtual ~Layout_c() {} + virtual bool Build(const void *lytResBuf, nw4r::lyt::ResourceAccessor *pResAcsr) override; + virtual nw4r::lyt::AnimTransform *CreateAnimTransform(const void *animResBuf, + nw4r::lyt::ResourceAccessor *pResAcsr) override; + + // Bring the overloaded, otherwise shadowed functions in scope + using nw4r::lyt::Layout::CreateAnimTransform; + +private: + nw4r::lyt::Pane *BuildPaneObj(s32 kind, const void *dataPtr, const nw4r::lyt::ResBlockSet &resBlockSet); +}; + +class Multi_c : public m2d::Base_c { +public: + Multi_c(); + virtual ~Multi_c() {} + virtual void draw() override; + virtual void animate(); + virtual void calc(); + virtual bool build(const char *name, m2d::ResAccIf_c *acc); + + void calcBefore(); + void calcAfter(); + nw4r::lyt::Pane *findPane(const char *name) const; + nw4r::lyt::Picture *findPicture(const char *name) const; + nw4r::lyt::Bounding *findBounding(const char *name) const; + void unbindAnims(); + + Layout_c *getLayout() { + return &mLayout; + } + + void setResAcc(m2d::ResAccIf_c *resAcc) { + mpResAcc = resAcc; + } + +protected: + Layout_c mLayout; + nw4r::lyt::DrawInfo mDrawInfo; + m2d::ResAccIf_c *mpResAcc; + u32 mFlags; +}; + +class LytBase_c : public Multi_c { +public: + LytBase_c(); + virtual ~LytBase_c(); + virtual void draw() override { + mLayout.Draw(mDrawInfo); + }; + +private: + void *mpMsbtInfo; +}; + +struct AnmGroup_c { + AnmGroup_c() {} + ~AnmGroup_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(); + void fn_800AC870(bool); + void setAnmFrame(f32); + void syncAnmFrame(); + void setForward(); + void setBackward(); + + inline void setFrame(f32 frame) { + fn_800AC6D0(false); + fn_800AC870(true); + mpFrameCtrl->setFrame(frame); + syncAnmFrame(); + } + + inline void play() { + mpFrameCtrl->play(); + syncAnmFrame(); + } + + inline void setToStart() { + mpFrameCtrl->setToStart(); + syncAnmFrame(); + } + + inline void setToEnd() { + mpFrameCtrl->setToEnd(); + syncAnmFrame(); + } + + u8 field_0x00[0x08 - 0x00]; + + /* 0x08 */ m2d::FrameCtrl_c *mpFrameCtrl; + /* 0x0C */ u8 mFlags; + /* 0x10 */ nw4r::lyt::AnimResource mAnmResource; + /* 0x20 */ nw4r::lyt::Group *mpGroup; + /* 0x24 */ nw4r::lyt::AnimTransform *mpAnmTransform; + /* 0x28 */ u8 field_0x20[0x40 - 0x28]; +}; + +struct dLytStructB { + dLytStructB(); + ~dLytStructB(); + + void init(void *, u8); + + u8 field_0x00[0x808 - 0x00]; +}; + +struct dLytStructC { + dLytStructC(); + ~dLytStructC(); + + u8 field_0x00[0x10 - 0x00]; +}; + +struct dLytStructD_Base { + dLytStructD_Base() + : field_0x04(0), field_0x08(0), field_0x0C(0), field_0x10(0), field_0x14(0), field_0x015(0), field_0x016(0) {} + virtual ~dLytStructD_Base(); + u32 field_0x04; + u32 field_0x08; + u32 field_0x0C; + u32 field_0x10; + u16 field_0x14; + u8 field_0x015; + u8 field_0x016; +}; + +struct dLytStructD : dLytStructD_Base { + dLytStructD() : field_0x18(0), field_0x1C(0), field_0x20(0), field_0x22(0), field_0x23(0), field_0x24(0) {} + + virtual ~dLytStructD(); + + void init(nw4r::lyt::Pane *, u16, u8, u8); + void append(dLytStructD *other); + void detach(dLytStructD *other); + void fn_80065E70(nw4r::lyt::Pane *, s32, s32, s32); + void fn_80065F70(); + + u32 field_0x18; + u32 field_0x1C; + u16 field_0x20; + u8 field_0x22; + u8 field_0x23; + u32 field_0x24; +}; + +} // namespace d2d + +#endif diff --git a/include/d/lyt/d_lyt_fader.h b/include/d/lyt/d_lyt_fader.h new file mode 100644 index 00000000..7c44185e --- /dev/null +++ b/include/d/lyt/d_lyt_fader.h @@ -0,0 +1,37 @@ +#ifndef D_LYT_FADER_H +#define D_LYT_FADER_H + +#include +#include + +class dLytFader_c : public mFaderBase_c { +public: + dLytFader_c(const mColor &color, EStatus status); + virtual ~dLytFader_c(); + + virtual void setStatus(EStatus status) override; + virtual bool fadeIn() override; + virtual bool fadeOut() override; + virtual bool calc() override; + virtual void draw() override; + + bool init(); + +private: + void fn_801758F0(); + void fn_801759B0(); + void fn_80175A50(); + void fn_80175B10(); + void fn_80175BC0(s32); + + /* 0x014 */ d2d::ResAccIf_c mResAcc; + /* 0x384 */ d2d::LytBase_c mLytBase; + /* 0x414 */ d2d::AnmGroup_c mLytStructAs[3]; + /* 0x4D4 */ s32 field_0x4D4; + /* 0x4D8 */ s32 field_0x4D8; + /* 0x4DC */ u8 field_0x4DC[0x4DD - 0x4DC]; + + bool field_0x4DD; +}; + +#endif diff --git a/include/d/lyt/d_textbox.h b/include/d/lyt/d_textbox.h new file mode 100644 index 00000000..615b83a8 --- /dev/null +++ b/include/d/lyt/d_textbox.h @@ -0,0 +1,18 @@ +#ifndef D_LYT_TEXTBOX_H +#define D_LYT_TEXTBOX_H + +#include + +class dTextBox_c : public nw4r::lyt::TextBox { + friend class dWindow_c; + +public: + dTextBox_c(const nw4r::lyt::res::TextBox *pBlock, const nw4r::lyt::ResBlockSet &ResBlockSet); + + f32 GetLineWidth(f32 *pOutSpacing); + +private: + u8 field_0x104[0x204 - 0x104]; +}; + +#endif diff --git a/include/d/lyt/d_window.h b/include/d/lyt/d_window.h new file mode 100644 index 00000000..1818e8b5 --- /dev/null +++ b/include/d/lyt/d_window.h @@ -0,0 +1,18 @@ +#ifndef D_LYT_WINDOW_H +#define D_LYT_WINDOW_H + +#include + +class dTextBox_c; + +class dWindow_c : public nw4r::lyt::Window { +public: + dWindow_c(const nw4r::lyt::res::Window *pBlock, const nw4r::lyt::ResBlockSet &ResBlockSet); + virtual ~dWindow_c() {} + void UpdateSize(dTextBox_c *textBox, f32 f); + +private: + UNKWORD field_0x108; +}; + +#endif diff --git a/include/d/lyt/pause_disp_00.h b/include/d/lyt/pause_disp_00.h new file mode 100644 index 00000000..cae2e7ad --- /dev/null +++ b/include/d/lyt/pause_disp_00.h @@ -0,0 +1,35 @@ +#ifndef LYT_PAUSE_DISP_00_H +#define LYT_PAUSE_DISP_00_H + +#include +#include +#include + +class dLytPauseDisp00_c { +public: + dLytPauseDisp00_c(); + virtual ~dLytPauseDisp00_c(); + + void init(); + + STATE_FUNC_DECLARE(dLytPauseDisp00_c, None); + STATE_FUNC_DECLARE(dLytPauseDisp00_c, In); + STATE_FUNC_DECLARE(dLytPauseDisp00_c, Wait); + STATE_FUNC_DECLARE(dLytPauseDisp00_c, Select); + STATE_FUNC_DECLARE(dLytPauseDisp00_c, Ring); + STATE_FUNC_DECLARE(dLytPauseDisp00_c, GetDemo); + STATE_FUNC_DECLARE(dLytPauseDisp00_c, Out); + +private: + void displayElement(int idx, float value); + + STATE_MGR_DECLARE(dLytPauseDisp00_c); + d2d::LytBase_c mLytBase; + d2d::AnmGroup_c field_0x00D0[0x7E]; + d2d::dLytStructB field_0x2050[0x18]; + /* 0xE110 */ nw4r::ut::LinkList mList; + d2d::dLytStructC field_0xE11C[0x18]; + d2d::dLytStructD field_0xE29C; +}; + +#endif diff --git a/include/egg/prim/eggAssert.h b/include/egg/prim/eggAssert.h index 147847b9..e44e1e7b 100644 --- a/include/egg/prim/eggAssert.h +++ b/include/egg/prim/eggAssert.h @@ -2,6 +2,7 @@ #define EGG_ASSERT_H #include +#include namespace EGG { // All this is guess diff --git a/include/m/m2d.h b/include/m/m2d.h index 968fabc0..1d383c23 100644 --- a/include/m/m2d.h +++ b/include/m/m2d.h @@ -34,10 +34,10 @@ public: virtual void noop(); virtual nw4r::lyt::ArcResourceAccessor *getAccessor(); - void attach(void *data, const char *name); + bool attach(void *data, const char *name); void detach(); -private: +protected: nw4r::lyt::ArcResourceAccessor mAccessor; }; @@ -58,10 +58,31 @@ public: f32 getEndFrame() const; f32 getEndFrame2() const; - inline f32 getFrame() { + inline f32 getFrame() const { return mCurrFrame; } + inline void setToStart() { + setFrame(0.0f); + } + + inline bool isEndReached() const { + f32 actualEnd = mEndFrame - 1.0f; + return mCurrFrame >= actualEnd; + } + + inline void setToEnd() { + setFrame(mEndFrame - 1.0f); + } + + inline void setForward() { + mFlags = mFlags & ~FLAG_BACKWARDS; + } + + inline void setBackward() { + mFlags = mFlags | FLAG_BACKWARDS; + } + private: inline bool notLooping() const { return (mFlags & FLAG_NO_LOOP) != 0; @@ -71,11 +92,11 @@ private: return (mFlags & FLAG_BACKWARDS) != 0; } - f32 mEndFrame; - f32 mCurrFrame; - f32 mPrevFrame; - f32 mRate; - u8 mFlags; + /* 0x04 */ f32 mEndFrame; + /* 0x08 */ f32 mCurrFrame; + /* 0x0C */ f32 mPrevFrame; + /* 0x10 */ f32 mRate; + /* 0x14 */ u8 mFlags; }; class Anm_c { @@ -114,9 +135,11 @@ class Base_c { public: Base_c(u8 priority) : mPriority(priority) {} /* 0x00 */ nw4r::ut::Node mLink; - /* vt 0x04 */ - virtual ~Base_c(); - virtual void draw(); + + /* vt offset 0x04 */ + /* vt 0x08 */ virtual ~Base_c(); + /* vt 0x0C */ virtual void draw(); + /* 0x0C */ u8 mPriority; void addToDrawList(); @@ -125,10 +148,10 @@ public: class Simple_c : public Base_c { public: Simple_c(); - virtual ~Simple_c(); - virtual void draw() override; - virtual void calc(); - virtual bool build(const char *name, ResAccIf_c *acc); + /* vt 0x08 */ virtual ~Simple_c(); + /* vt 0x0C */ virtual void draw() override; + /* vt 0x10 */ virtual void calc(); + /* vt 0x14 */ virtual bool build(const char *name, ResAccIf_c *acc); void calcBefore(); void calcAfter(); @@ -148,6 +171,6 @@ private: u32 field_0x94; }; -} // namespace m2d +} #endif diff --git a/include/m/m_color_fader.h b/include/m/m_color_fader.h index f0c4eca4..6250e6f4 100644 --- a/include/m/m_color_fader.h +++ b/include/m/m_color_fader.h @@ -12,7 +12,7 @@ public: virtual ~mColorFader_c(); virtual void setStatus(EStatus status) override; - virtual u8 calc() override; + virtual bool calc() override; virtual void draw() override; u8 mAspectRatio; diff --git a/include/m/m_fader_base.h b/include/m/m_fader_base.h index f6feb043..28fb8bcc 100644 --- a/include/m/m_fader_base.h +++ b/include/m/m_fader_base.h @@ -26,7 +26,7 @@ public: virtual EStatus getStatus() const; virtual bool fadeIn(); virtual bool fadeOut(); - virtual u8 calc(); + virtual bool calc(); virtual void draw() = 0; void setFrame(u16 frame); diff --git a/include/nw4r/lyt/lyt_layout.h b/include/nw4r/lyt/lyt_layout.h index 8f668e2f..ff999933 100644 --- a/include/nw4r/lyt/lyt_layout.h +++ b/include/nw4r/lyt/lyt_layout.h @@ -51,7 +51,11 @@ public: return mpRootPane; } -private: + GroupContainer *GetGroupContainer() const { + return mpGroupContainer; + } + +protected: ut::LinkList mAnimTransList; // at 0x04 Pane *mpRootPane; // at 0x10 GroupContainer *mpGroupContainer; // at 0x14 @@ -68,77 +72,100 @@ public: } template - static void DeleteArray(T *p, size_t n) { - if (p) { - for (size_t i = 0; i < n; i++) { - p[i].~T(); - } - - FreeMemory(p); - } - } + static void DeleteArray(T *p, size_t n); template - static T *NewArray(size_t n) { - T *array = (T *)AllocMemory(n * sizeof(T)); - if (!array) { - return nullptr; - } - - for (size_t i = 0; i < n; i++) { - new (&array[i]) T(); - } - - return array; - } + static T *NewArray(size_t n); template - static void DeleteObj(T *t) { - if (t) { - t->~T(); - FreeMemory(t); - } - } + static void DeleteObj(T *t); template - static void DeletePrimArray(T *objAry) { - if (objAry) { - FreeMemory(objAry); - } - } + static void DeletePrimArray(T *objAry); template - static T *NewObj() { - T *pMem = (T *)AllocMemory(sizeof(T)); - if (pMem) { - return new (pMem) T(); - } else { - return nullptr; - } - } + static T *NewObj(); template - static T *NewObj(P1 param1) { - T *pMem = (T *)AllocMemory(sizeof(T)); - if (pMem) { - return new (pMem) T(param1); - } else { - return nullptr; - } - } + static T *NewObj(P1 param1); template - static T *NewObj(P1 param1, P2 param2) { - T *pMem = (T *)AllocMemory(sizeof(T)); - if (pMem) { - return new (pMem) T(param1, param2); - } else { - return nullptr; - } - } + static T *NewObj(P1 param1, P2 param2); static MEMAllocator *mspAllocator; }; + + +template +void Layout::DeleteArray(T *p, size_t n) { + if (p) { + for (size_t i = 0; i < n; i++) { + p[i].~T(); + } + + FreeMemory(p); + } +} + +template +T *Layout::NewArray(size_t n) { + T *array = (T *)AllocMemory(n * sizeof(T)); + if (!array) { + return nullptr; + } + + for (size_t i = 0; i < n; i++) { + new (&array[i]) T(); + } + + return array; +} + +template +void Layout::DeleteObj(T *t) { + if (t) { + t->~T(); + FreeMemory(t); + } +} + +template +void Layout::DeletePrimArray(T *objAry) { + if (objAry) { + FreeMemory(objAry); + } +} + +template +T *Layout::NewObj() { + T *pMem = (T *)AllocMemory(sizeof(T)); + if (pMem) { + return new (pMem) T(); + } else { + return nullptr; + } +} + +template +T *Layout::NewObj(P1 param1) { + T *pMem = (T *)AllocMemory(sizeof(T)); + if (pMem) { + return new (pMem) T(param1); + } else { + return nullptr; + } +} + +template +T *Layout::NewObj(P1 param1, P2 param2) { + T *pMem = (T *)AllocMemory(sizeof(T)); + if (pMem) { + return new (pMem) T(param1, param2); + } else { + return nullptr; + } +} + } // namespace lyt } // namespace nw4r diff --git a/include/nw4r/lyt/lyt_pane.h b/include/nw4r/lyt/lyt_pane.h index 20c38ed3..6c8cbab0 100644 --- a/include/nw4r/lyt/lyt_pane.h +++ b/include/nw4r/lyt/lyt_pane.h @@ -50,6 +50,14 @@ public: return &mAnimList; } + const math::VEC3 &GetTranslate() const { + return mTranslate; + } + + void SetTranslate(const nw4r::math::VEC3 &value) { + mTranslate = value; + } + const math::MTX34 &GetGlobalMtx() const { return mGlbMtx; } @@ -57,8 +65,8 @@ public: return mpParent; } - const math::VEC2 *GetScale() const { - return &mScale; + const math::VEC2 &GetScale() const { + return mScale; } void SetScale(const math::VEC2 &value) { mScale = value; @@ -71,8 +79,8 @@ public: mAlpha = value; } - const Size *GetSize() const { - return &mSize; + const Size &GetSize() const { + return mSize; } void SetSize(const Size &value) { mSize = value; diff --git a/include/s/s_StateInterfaces.hpp b/include/s/s_StateInterfaces.hpp index 92101b2c..10b9986e 100644 --- a/include/s/s_StateInterfaces.hpp +++ b/include/s/s_StateInterfaces.hpp @@ -1,6 +1,8 @@ #ifndef S_STATEINTERFACES_H #define S_STATEINTERFACES_H +#include + // Note: Ported from https://github.com/NSMBW-Community/NSMBW-Decomp/tree/master/include/dol/sLib // See include/s/README.txt for changes made diff --git a/include/toBeSorted/arc_managers/layout_arc_manager.h b/include/toBeSorted/arc_managers/layout_arc_manager.h index 0534cf2f..fe84d959 100644 --- a/include/toBeSorted/arc_managers/layout_arc_manager.h +++ b/include/toBeSorted/arc_managers/layout_arc_manager.h @@ -6,6 +6,7 @@ #include class LayoutArcManager { +public: LayoutArcManager(); virtual ~LayoutArcManager(); diff --git a/src/d/d_font_manager.cpp b/src/d/d_font_manager.cpp index d258b186..c4588a9f 100644 --- a/src/d/d_font_manager.cpp +++ b/src/d/d_font_manager.cpp @@ -29,7 +29,7 @@ nw4r::ut::ResFont *dFontMng_c::getFont(u8 type) { return &l_dFontMng_obj[index].mFont; } -const char *getFontName(u8 type) { +const char *dFontMng_c::getFontName(u8 type) { return fonts[type]; } diff --git a/src/d/lyt/common_arrow.cpp b/src/d/lyt/common_arrow.cpp new file mode 100644 index 00000000..486e3c65 --- /dev/null +++ b/src/d/lyt/common_arrow.cpp @@ -0,0 +1,235 @@ +#include +#include + +STATE_DEFINE(dLytCommonArrow_c, None); +STATE_DEFINE(dLytCommonArrow_c, In); +STATE_DEFINE(dLytCommonArrow_c, Wait); +STATE_DEFINE(dLytCommonArrow_c, Out); + +f32 arrow_fs[0x20]; + +static const d2d::LytBrlanMapping brlanMap[] = { + {"commonArrow_00_in.brlan", "G_inOut_00"}, + {"commonArrow_00_loop.brlan", "G_loop_00"}, + {"commonArrow_00_type.brlan", "G_type_00"}, + {"commonArrow_00_onOff.brlan", "G_arrowL_00"}, + {"commonArrow_00_onOff.brlan", "G_arrowR_00"}, + {"commonArrow_00_decide.brlan", "G_arrowL_00"}, + {"commonArrow_00_decide.brlan", "G_arrowR_00"}, + {"commonArrow_00_input.brlan", "G_input_00"}, + {"commonArrow_00_out.brlan", "G_inOut_00"}, +}; + +dLytCommonArrow_c::dLytCommonArrow_c() : mStateMgr(*this, sStateID::null) {} + +extern "C" d2d::dLytStructD *lbl_80575260; + +bool dLytCommonArrow_c::init() { + void *data = LayoutArcManager::sInstance->getLoadedData("CommonArrow"); + mResAcc.attach(data, ""); + mLytBase.build("commonArrow_00.brlyt", &mResAcc); + mLytBase.mPriority = 0x86; + + for (int i = 0; i < 9; i++) { + field_0x440[i].init(brlanMap[i].mFile, &mResAcc, mLytBase.getLayout(), brlanMap[i].mName); + } + field_0x680.fn_80065E70(mLytBase.getLayout()->GetRootPane(), 1, 0, 0); + lbl_80575260->append(&field_0x680); + field_0x6A8 = mLytBase.findBounding("B_arrowL_00"); + field_0x6AC = mLytBase.findBounding("B_arrowR_00"); + mStateMgr.changeState(StateID_None); + setState(0); + return true; +} + +bool dLytCommonArrow_c::fn_80168490() { + lbl_80575260->detach(&field_0x680); + mLytBase.unbindAnims(); + for (int i = 0; i < 9; i++) { + field_0x440[i].fn_800AC860(); + } + return true; +} + +bool dLytCommonArrow_c::fn_80168500() { + mStateMgr.executeState(); + if (!mStateMgr.getStateID()->isEqual(StateID_None)) { + field_0x440[1].mpFrameCtrl->play(); + field_0x440[1].syncAnmFrame(); + } + mLytBase.calc(); + field_0x680.field_0x22 = 0; + field_0x680.fn_80065F70(); + field_0x6BC = field_0x6B8; + return true; +} + +bool dLytCommonArrow_c::addToDrawList() { + if (field_0x6CB == 1) { + mLytBase.addToDrawList(); + } + return true; +} + +void dLytCommonArrow_c::setState(s32 state) { + field_0x6B0 = state; + if (state == 0) { + mLytBase.mPriority = 0x86; + } else { + mLytBase.mPriority = 0x80; + } +} + +void dLytCommonArrow_c::fn_80168640(f32 *arg) { + // TODO + mLytBase.getLayout()->GetRootPane()->SetTranslate(nw4r::math::VEC3(arg[0], arg[1], 0.0f)); +} + +bool dLytCommonArrow_c::fn_80168680() { + if (!mStateMgr.getStateID()->isEqual(StateID_None)) { + return false; + } + field_0x6C8 = 1; + return true; +} + +bool dLytCommonArrow_c::fn_801686F0() { + if (!mStateMgr.getStateID()->isEqual(StateID_Wait)) { + return false; + } + field_0x6C9 = 1; + return true; +} + +bool dLytCommonArrow_c::fn_80168760() { + if (field_0x6C0 == 2 && field_0x6B8 != 2) { + field_0x6C0 = field_0x6B8; + return true; + } + return false; +} + +void dLytCommonArrow_c::fn_80168790(s32 idx, f32 frame) { + d2d::AnmGroup_c *s = &field_0x440[idx]; + s->setFrame(frame); +} + +void dLytCommonArrow_c::fn_80168800(s32 idx) { + field_0x440[idx].fn_800AC7D0(); +} + +void dLytCommonArrow_c::fn_80168810(d2d::AnmGroup_c *ctrl) { + if (ctrl->mpFrameCtrl->getFrame()) { + f32 newFrame = ctrl->mpFrameCtrl->getFrame() - 1.0f; + if (newFrame <= 0.0f) { + newFrame = 0.0f; + } + ctrl->mpFrameCtrl->setFrame(newFrame); + ctrl->syncAnmFrame(); + } +} + +void dLytCommonArrow_c::fn_80168880() {} + +void dLytCommonArrow_c::initializeState_None() { + mLytBase.unbindAnims(); + field_0x6C8 = 0; + field_0x6C9 = 0; + field_0x6CA = 0; + field_0x6CB = 0; + field_0x6B4 = 2; + field_0x6B8 = 2; + field_0x6BC = 2; + field_0x6C0 = 2; + field_0x6C4 = 0; + fn_80168790(0, 0.0f); + field_0x6CC = 1; +} +void dLytCommonArrow_c::executeState_None() { + if (field_0x6C8 == 1) { + mStateMgr.changeState(StateID_In); + } +} +void dLytCommonArrow_c::finalizeState_None() { + field_0x6C8 = 0; + fn_80168790(1, 0.0f); +} + +void dLytCommonArrow_c::initializeState_In() { + field_0x6C4 = 0; + field_0x6CB = 1; + f32 tmp = 0.0f; + if (field_0x6B0 == 1) { + tmp = 1.0f; + } + fn_80168790(2, tmp); + fn_80168790(3, 0.0f); + fn_80168790(4, 0.0f); + fn_80168790(7, 0.0f); +} +void dLytCommonArrow_c::executeState_In() { + switch (field_0x6C4) { + case 0: + d2d::AnmGroup_c *s = &field_0x440[0]; + if (s->mpFrameCtrl->isEndReached() == 1) { + field_0x6C4 += 1; + field_0x6CA = 1; + } else { + s->mpFrameCtrl->play(); + s->syncAnmFrame(); + } + break; + case 1: + field_0x6CA = 0; + mStateMgr.changeState(StateID_Wait); + break; + } +} +void dLytCommonArrow_c::finalizeState_In() { + fn_80168800(0); +} + +void dLytCommonArrow_c::initializeState_Wait() { + field_0x6C4 = 0; +} +void dLytCommonArrow_c::executeState_Wait() { + if (field_0x6C9 == 1) { + mStateMgr.changeState(StateID_Out); + return; + } + + fn_80168880(); + if (field_0x6B8 == 0) { + field_0x440[3].play(); + fn_80168810(&field_0x440[4]); + } else if (field_0x6B8 == 1) { + field_0x440[4].play(); + fn_80168810(&field_0x440[3]); + } else { + fn_80168810(&field_0x440[3]); + fn_80168810(&field_0x440[4]); + } +} +void dLytCommonArrow_c::finalizeState_Wait() {} + +void dLytCommonArrow_c::initializeState_Out() { + field_0x6C4 = 0; + fn_80168790(8, 0.0f); + field_0x6C9 = 0; +} +void dLytCommonArrow_c::executeState_Out() { + switch (field_0x6C4) { + case 0: + d2d::AnmGroup_c *s = &field_0x440[8]; + if (s->mpFrameCtrl->isEndReached() == 1) { + field_0x6C4 = 1; + field_0x6CA = 1; + } + s->play(); + break; + case 1: + mStateMgr.changeState(StateID_None); + break; + } +} +void dLytCommonArrow_c::finalizeState_Out() {} diff --git a/src/d/lyt/d2d.cpp b/src/d/lyt/d2d.cpp new file mode 100644 index 00000000..d72ea051 --- /dev/null +++ b/src/d/lyt/d2d.cpp @@ -0,0 +1,364 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace nw4r::lyt; + +namespace d2d { + +void ResAccIf_c::detach() { + for (u8 i = 0; i < 5; i++) { + mAccessor.UnregistFont(&mFontRefLinks[i]); + } + m2d::ResAccIf_c::detach(); +} + +bool ResAccIf_c::attach(void *data, const char *name) { + nw4r::lyt::FontRefLink *link; + bool ok = m2d::ResAccIf_c::attach(data, name); + if (ok) { + for (u8 i = 0; i < 5; i++) { + link = &mFontRefLinks[i]; + link->Set(dFontMng_c::getFontName(i), dFontMng_c::getFont(i)); + mAccessor.RegistFont(link); + } + } + + return ok; +} + +// Copied from lyt, with some types replaced +nw4r::lyt::Pane *Layout_c::BuildPaneObj(s32 kind, const void *dataPtr, const ResBlockSet &resBlockSet) { + // Oddly enough the breaks are required here to not inline the function??? + // Had them as left over from editing and somehow when removing them it just broke Build. + // Probably some analysis depth as 3 break statements do it + switch (kind) { + case 'pan1': { + const res::Pane *pResPane = (const res::Pane *)dataPtr; + return NewObj(pResPane); + } break; + case 'pic1': { + const res::Picture *pResPic = (const res::Picture *)dataPtr; + return NewObj(pResPic, resBlockSet); + } break; + case 'txt1': { + const res::TextBox *pBlock = (const res::TextBox *)dataPtr; + return NewObj(pBlock, resBlockSet); + } break; + case 'wnd1': { + const res::Window *pBlock = (const res::Window *)dataPtr; + return NewObj(pBlock, resBlockSet); + } break; + case 'bnd1': { + const res::Bounding *pResBounding = (const res::Bounding *)dataPtr; + return NewObj(pResBounding, resBlockSet); + } break; + default: + return nullptr; + } +} + +// This is exactly copied from nw4r::lyt::Layout +bool Layout_c::Build(const void *lytResBuf, ResourceAccessor *pResAcsr) { + const res::BinaryFileHeader *pFileHead = (const res::BinaryFileHeader *)(lytResBuf); + if (!detail::TestFileHeader(*pFileHead, 'RLYT')) { + return false; + } + if (!detail::TestFileVersion(*pFileHead)) { + return false; + } + + ResBlockSet resBlockSet = {nullptr, nullptr, nullptr, pResAcsr}; + Pane *pParentPane = nullptr; + Pane *pLastPane = nullptr; + bool bReadRootGroup = false; + int groupNestLevel = 0; + + const void *dataPtr = ((u8 *)lytResBuf + pFileHead->headerSize); + for (int i = 0; i < pFileHead->dataBlocks; i++) { + const res::DataBlockHeader *pDataBlockHead = (const res::DataBlockHeader *)dataPtr; + switch (detail::GetSignatureInt(pDataBlockHead->kind)) { + case 'lyt1': // Main Layout + { + const res::Layout *pResLyt = ((const res::Layout *)dataPtr); + mLayoutSize = pResLyt->layoutSize; + } break; + case 'txl1': // Texture List + resBlockSet.pTextureList = (const res::TextureList *)dataPtr; + break; + case 'fnl1': // Font List + resBlockSet.pFontList = (const res::FontList *)dataPtr; + break; + case 'mat1': // Material + resBlockSet.pMaterialList = (const res::MaterialList *)dataPtr; + break; + case 'wnd1': // Window + case 'pan1': // Pane + case 'pic1': // Picture + case 'txt1': // Text Box + case 'bnd1': // Boundary Pane + { + Pane *pPane = BuildPaneObj(detail::GetSignatureInt(pDataBlockHead->kind), dataPtr, resBlockSet); + if (pPane) { + if (mpRootPane == nullptr) { + mpRootPane = pPane; + } + if (pParentPane) { + pParentPane->AppendChild(pPane); + } + pLastPane = pPane; + } + } break; + case 'usd1': // User Data + pLastPane->SetExtUserDataList((const res::ExtUserDataList *)dataPtr); + break; + case 'pas1': // PaneChildren Start + pParentPane = pLastPane; + break; + case 'pae1': // PaneChildren End + pLastPane = pParentPane; + pParentPane = pLastPane->GetParent(); + break; + case 'grp1': // Group + if (!bReadRootGroup) { + bReadRootGroup = true; + mpGroupContainer = NewObj(); + } else { + if (mpGroupContainer && groupNestLevel == 1) { + Group *pGroup = NewObj((const res::Group *)dataPtr, mpRootPane); + if (pGroup) { + mpGroupContainer->AppendGroup(pGroup); + } + } + } + break; + case 'grs1': // Group Children Start + groupNestLevel++; + break; + case 'gre1': // Group Children End + groupNestLevel--; + break; + default: + break; + } + dataPtr = ((u8 *)dataPtr + pDataBlockHead->size); + } + return true; +} + +Multi_c::Multi_c() : Base_c(0x80), mLayout(), mDrawInfo(), mpResAcc(nullptr), mFlags(0) { + mDrawInfo.SetLocationAdjustScale(nw4r::math::VEC2((float)EGG::Screen::GetSizeXMax(EGG::Screen::TV_MODE_1) / + (float)EGG::Screen::GetSizeXMax(EGG::Screen::TV_MODE_2), + 1.0f)); + mDrawInfo.SetLocationAdjust(true); +} + +void Multi_c::animate() { + u32 arg = 0; + if ((mFlags & 1) != 0) { + arg = 1; + } + mLayout.Animate(arg); +} + +void Multi_c::calc() { + calcBefore(); + calcAfter(); +} + +void Multi_c::calcBefore() { + u32 arg = 0; + if ((mFlags & 1) != 0) { + arg = 1; + } + mLayout.Animate(arg); +} + +void Multi_c::calcAfter() { + nw4r::ut::Rect rect = mLayout.GetLayoutRect(); + mDrawInfo.SetViewRect(rect); + mDrawInfo.SetMultipleViewMtxOnDraw(true); + mLayout.CalculateMtx(mDrawInfo); +} + +void Multi_c::draw() {} + +bool Multi_c::build(const char *name, m2d::ResAccIf_c *acc) { + if (mLayout.GetRootPane() != nullptr) { + return true; + } + + if (acc == nullptr) { + acc = mpResAcc; + if (acc == nullptr) { + return false; + } + } + + void *res = acc->getAccessor()->GetResource(0, name, nullptr); + if (res == nullptr) { + return false; + } + + bool ok = mLayout.Build(res, acc->getAccessor()); + if (ok) { + calc(); + } + return ok; +} + +nw4r::lyt::Pane *Multi_c::findPane(const char *name) const { + return mLayout.GetRootPane()->FindPaneByName(name, true); +} + +nw4r::lyt::Picture *Multi_c::findPicture(const char *name) const { + nw4r::lyt::Pane *p = findPane(name); + if (p != nullptr) { + return nw4r::ut::DynamicCast(p); + } + return nullptr; +} + +nw4r::lyt::Bounding *Multi_c::findBounding(const char *name) const { + nw4r::lyt::Pane *p = findPane(name); + if (p != nullptr) { + return nw4r::ut::DynamicCast(p); + } + return nullptr; +} + +void Multi_c::unbindAnims() { + mLayout.UnbindAllAnimation(); +} + +LytBase_c::LytBase_c() : mpMsbtInfo(nullptr) {} + +extern "C" void libms__LMS_CloseMessage(void *); +LytBase_c::~LytBase_c() { + if (mpMsbtInfo != nullptr) { + libms__LMS_CloseMessage(mpMsbtInfo); + } +} + +bool AnmGroup_c::init(const char *fileName, m2d::ResAccIf_c *resAcc, d2d::Layout_c *layout, const char *groupName) { + if (layout->GetGroupContainer() == nullptr) { + return false; + } + + nw4r::lyt::Group *group = layout->GetGroupContainer()->FindGroupByName(groupName); + if (group == nullptr) { + return nullptr; + } + nw4r::lyt::AnimTransform *transform = layout->CreateAnimTransform(); + return init(transform, fileName, resAcc, group); +} + +bool AnmGroup_c::init(nw4r::lyt::AnimTransform *transform, const char *name, m2d::ResAccIf_c *acc, + nw4r::lyt::Group *group) { + if (transform == nullptr) { + return false; + } + + if (group == nullptr) { + return false; + } + + void *res = acc->getAccessor()->GetResource(0, name, nullptr); + if (res == nullptr) { + return false; + } + + mAnmResource.Set(res); + u16 animNum = mAnmResource.CalcAnimationNum(group, mAnmResource.IsDescendingBind()); + if (animNum != 0) { + transform->SetResource(mAnmResource.GetResourceBlock(), acc->getAccessor(), animNum); + mpGroup = group; + mpAnmTransform = transform; + } + return true; +} + +bool AnmGroup_c::fn_800AC6D0(bool b) { + nw4r::lyt::AnimTransform *anmTransform = mpAnmTransform; + if (anmTransform == nullptr) { + return false; + } + + if (mpGroup == nullptr) { + return false; + } + + nw4r::lyt::BindAnimation(mpGroup, anmTransform, false, b); + mFlags |= 1; + if (b) { + mFlags = (mFlags & ~2); + } else { + mFlags |= 2; + } + + u32 flags = 1; + if (mpAnmTransform->IsLoopData()) { + flags = 0; + } + + mpFrameCtrl->set(anmTransform->GetFrameSize(), flags, 1.0f, -1.0f); + syncAnmFrame(); + return true; +} + +bool AnmGroup_c::fn_800AC7D0() { + nw4r::lyt::AnimTransform *anmTransform = mpAnmTransform; + if (anmTransform == nullptr) { + return false; + } + + nw4r::lyt::Group *group = mpGroup; + if (group == nullptr) { + return false; + } + + nw4r::lyt::UnbindAnimation(group, anmTransform, mAnmResource.IsDescendingBind()); + mFlags = (mFlags & ~1); + return true; +} + +bool AnmGroup_c::fn_800AC860() { + return true; +} + +void AnmGroup_c::fn_800AC870(bool b) { + nw4r::lyt::Group *group = mpGroup; + nw4r::lyt::AnimTransform *anmTransform = mpAnmTransform; + nw4r::lyt::SetAnimationEnable(group, anmTransform, b, mAnmResource.IsDescendingBind()); + if (b) { + mFlags |= 2; + } else { + mFlags = mFlags & ~2; + } +} + +void AnmGroup_c::setAnmFrame(f32 arg) { + mpAnmTransform->SetFrame(arg); +} + +void AnmGroup_c::syncAnmFrame() { + setAnmFrame(mpFrameCtrl->getFrame()); +} + +void AnmGroup_c::setForward() { + mpFrameCtrl->setForward(); +} + +void AnmGroup_c::setBackward() { + mpFrameCtrl->setBackward(); +} + +} // namespace d2d diff --git a/src/d/lyt/d_lyt_fader.cpp b/src/d/lyt/d_lyt_fader.cpp new file mode 100644 index 00000000..458b9315 --- /dev/null +++ b/src/d/lyt/d_lyt_fader.cpp @@ -0,0 +1,159 @@ +#include +#include + +static const d2d::LytBrlanMapping blanMap[] = { + {"wipe_01_wipeStart.brlan", "G_wipe_00"}, + {"wipe_01_wipeOpen.brlan", "G_wipe_00"}, + {"wipe_01_out.brlan", "G_out_00"}, +}; + +dLytFader_c::dLytFader_c(const mColor &color, EStatus status) : mFaderBase_c(color, status), field_0x4DD(false) {} + +dLytFader_c::~dLytFader_c() { + 0.0f; // float ordering + + if (field_0x4DD == true) { + for (int i = 0; i < 3; i++) { + mLytStructAs[i].fn_800AC860(); + } + mResAcc.detach(); + } +} + +void dLytFader_c::setStatus(EStatus status) { + if (status == FADED_OUT) { + mStatus = FADED_OUT; + mLytBase.unbindAnims(); + d2d::AnmGroup_c *s = &mLytStructAs[0]; + s->fn_800AC6D0(false); + s->setToEnd(); + s->fn_800AC870(true); + s->play(); + mLytBase.calc(); + fn_80175BC0(2); + mLytBase.getLayout()->GetRootPane()->SetVisible(true); + } else if (status == FADED_IN) { + mStatus = FADED_IN; + mLytBase.unbindAnims(); + d2d::AnmGroup_c *s = &mLytStructAs[0]; + s->fn_800AC6D0(false); + s->setToStart(); + s->fn_800AC870(true); + mLytBase.calc(); + fn_80175BC0(2); + mLytBase.getLayout()->GetRootPane()->SetVisible(false); + } +} + +bool dLytFader_c::calc() { + if (field_0x4DD == true) { + switch (field_0x4D4) { + case 0: + fn_801759B0(); + break; + case 1: + fn_80175B10(); + break; + default: + break; + } + return field_0x4D4 == 2; + } else { + return mFaderBase_c::calc(); + } +} + +extern "C" void fn_80016200(); + +void dLytFader_c::draw() { + if (field_0x4DD) { + fn_80016200(); + mLytBase.draw(); + } +} + +bool dLytFader_c::fadeIn() { + bool res = mFaderBase_c::fadeIn(); + if (res) { + fn_80175A50(); + } + return res; +} + +bool dLytFader_c::fadeOut() { + bool res = mFaderBase_c::fadeOut(); + if (res) { + fn_801758F0(); + } + return res; +} + +bool dLytFader_c::init() { + if (field_0x4DD == true) { + return true; + } else { + void *data = LayoutArcManager::sInstance->getLoadedData("System2D"); + if (!data) { + return false; + } + mResAcc.attach(data, ""); + mLytBase.setResAcc(&mResAcc); + mLytBase.build("wipe_01.brlyt", nullptr); + + for (int i = 0; i < 3; i++) { + mLytStructAs[i].init(blanMap[i].mFile, &mResAcc, mLytBase.getLayout(), blanMap[i].mName); + } + field_0x4DD = true; + return true; + } +} + +void dLytFader_c::fn_801758F0() { + fn_80175BC0(0); + mLytBase.unbindAnims(); + d2d::AnmGroup_c *s = &mLytStructAs[0]; + s->fn_800AC6D0(false); + s->mpFrameCtrl->setFrame(0.0f); + s->syncAnmFrame(); + s->mpFrameCtrl->setRate(20.0f / (mFrame - 1)); + s->fn_800AC870(true); + mLytBase.getLayout()->GetRootPane()->SetVisible(true); +} + +void dLytFader_c::fn_801759B0() { + d2d::AnmGroup_c *s = &mLytStructAs[0]; + if (s->mpFrameCtrl->isEndReached() == true) { + fn_80175BC0(2); + mStatus = FADED_OUT; + } + s->play(); + mLytBase.calc(); +} + +void dLytFader_c::fn_80175A50() { + fn_80175BC0(1); + mLytBase.unbindAnims(); + d2d::AnmGroup_c *s = &mLytStructAs[1]; + s->fn_800AC6D0(false); + s->mpFrameCtrl->setFrame(0.0f); + s->syncAnmFrame(); + s->mpFrameCtrl->setRate(20.0f / (mFrame - 1)); + s->fn_800AC870(true); + mLytBase.getLayout()->GetRootPane()->SetVisible(true); +} + +void dLytFader_c::fn_80175B10() { + d2d::AnmGroup_c *s = &mLytStructAs[1]; + if (s->mpFrameCtrl->isEndReached() == true) { + fn_80175BC0(2); + mStatus = FADED_IN; + mLytBase.getLayout()->GetRootPane()->SetVisible(false); + } + s->play(); + mLytBase.calc(); +} + +void dLytFader_c::fn_80175BC0(s32 arg) { + field_0x4D4 = arg; + field_0x4D8 = 0; +} diff --git a/src/d/lyt/d_window.cpp b/src/d/lyt/d_window.cpp new file mode 100644 index 00000000..14c02a76 --- /dev/null +++ b/src/d/lyt/d_window.cpp @@ -0,0 +1,28 @@ +#include +#include + +dWindow_c::dWindow_c(const nw4r::lyt::res::Window *pBlock, const nw4r::lyt::ResBlockSet &ResBlockSet) + : nw4r::lyt::Window(pBlock, ResBlockSet) {} + +void dWindow_c::UpdateSize(dTextBox_c *textBox, f32 f) { + if (textBox == nullptr) { + return; + } + + u8 rem = mBasePosition % 3; + if (rem == 0) { + nw4r::math::VEC3 other = textBox->GetTranslate(); + nw4r::math::VEC3 my = GetTranslate(); + f = (other.x - my.x) * 2.0f; + } else if (rem == 2) { + nw4r::math::VEC3 other = textBox->GetTranslate(); + nw4r::math::VEC3 my = GetTranslate(); + f = (my.x - other.x) * 2.0f; + } + + nw4r::lyt::Size size = GetSize(); + f32 width = textBox->GetLineWidth(nullptr); + width += f; + size.width = width; + SetSize(size); +} diff --git a/src/d/lyt/pause_disp_00.cpp b/src/d/lyt/pause_disp_00.cpp new file mode 100644 index 00000000..130a3a1f --- /dev/null +++ b/src/d/lyt/pause_disp_00.cpp @@ -0,0 +1,57 @@ +#include +#include + +STATE_DEFINE(dLytPauseDisp00_c, None); +STATE_DEFINE(dLytPauseDisp00_c, In); +STATE_DEFINE(dLytPauseDisp00_c, Wait); +STATE_DEFINE(dLytPauseDisp00_c, Select); +STATE_DEFINE(dLytPauseDisp00_c, Ring); +STATE_DEFINE(dLytPauseDisp00_c, GetDemo); +STATE_DEFINE(dLytPauseDisp00_c, Out); + +extern d2d::LytBrlanMapping S_MAPPINGS[]; +extern "C" char lbl_804E8898[]; + +extern const char *B_LIST[]; + +dLytPauseDisp00_c::dLytPauseDisp00_c() : mStateMgr(*this, sStateID::null) {} + +extern "C" void fn_800AC3C0(nw4r::lyt::Group *, nw4r::ut::LinkList *); +extern "C" d2d::dLytStructD *lbl_80575260; + +void dLytPauseDisp00_c::init() { + mLytBase.build("pause_00.brlyt", nullptr); + mLytBase.mPriority = 0x86; + + for (int i = 0; i < 0x7E; i++) { + field_0x00D0[i].init(S_MAPPINGS[i].mFile, nullptr, mLytBase.getLayout(), S_MAPPINGS[i].mName); + } + + for (int i = 0; i < 0x18; i++) { + field_0x2050[i].init(nullptr, lbl_804E8898[i]); + mList.PushBack(&field_0x2050[i]); + } + + if (mLytBase.getLayout()->GetGroupContainer() != nullptr) { + nw4r::lyt::Group *group = mLytBase.getLayout()->GetGroupContainer()->FindGroupByName("G_ref_00"); + if (group != nullptr) { + fn_800AC3C0(group, &mList); + } + } + + field_0xE29C.init(mLytBase.getLayout()->GetRootPane(), 1, 0, 0); + lbl_80575260->append(&field_0xE29C); + for (int i = 0; i < 0x25; i++) { + if (i != 0x1F && i != 0x20) { + nw4r::lyt::Bounding *b = mLytBase.findBounding(B_LIST[i]); + // TODO + } + } +} + +void dLytPauseDisp00_c::displayElement(int i, float frame) { + d2d::AnmGroup_c *s = &field_0x00D0[i]; + s->setFrame(frame); +} + +dLytPauseDisp00_c::~dLytPauseDisp00_c() {} diff --git a/src/egg/prim/eggAssert.cpp b/src/egg/prim/eggAssert.cpp index bde46ca9..146012af 100644 --- a/src/egg/prim/eggAssert.cpp +++ b/src/egg/prim/eggAssert.cpp @@ -1,4 +1,3 @@ -#include #include #include #include diff --git a/src/m/m2d.cpp b/src/m/m2d.cpp index dab95700..65dec866 100644 --- a/src/m/m2d.cpp +++ b/src/m/m2d.cpp @@ -85,9 +85,10 @@ nw4r::lyt::ArcResourceAccessor *ResAccIf_c::getAccessor() { void ResAccIf_c::noop() {} -void ResAccIf_c::attach(void *data, const char *name) { - mAccessor.Attach(data, name); +bool ResAccIf_c::attach(void *data, const char *name) { + return mAccessor.Attach(data, name); } + void ResAccIf_c::detach() { mAccessor.Detach(); } diff --git a/src/m/m_color_fader.cpp b/src/m/m_color_fader.cpp index 66a03b35..e0713020 100644 --- a/src/m/m_color_fader.cpp +++ b/src/m/m_color_fader.cpp @@ -18,8 +18,8 @@ void mColorFader_c::setStatus(EStatus status) { } } -u8 mColorFader_c::calc() { - u8 result = mFaderBase_c::calc(); +bool mColorFader_c::calc() { + bool result = mFaderBase_c::calc(); u16 elapsed = mElapsed; u16 frame = mFrame; if (elapsed > mFrame) { diff --git a/src/m/m_fader_base.cpp b/src/m/m_fader_base.cpp index ae5c182b..598edc56 100644 --- a/src/m/m_fader_base.cpp +++ b/src/m/m_fader_base.cpp @@ -50,8 +50,8 @@ bool mFaderBase_c::fadeOut() { return canFadeOut; } -u8 mFaderBase_c::calc() { - u8 result = 0; +bool mFaderBase_c::calc() { + bool result = 0; if (mStatus == FADING_IN) { if (mElapsed++ > mFrame) { mStatus = FADED_IN;