diff --git a/config/SOUE01/rels/d_t_rock_boatNP/symbols.txt b/config/SOUE01/rels/d_t_rock_boatNP/symbols.txt index ea8907ed..59537bb3 100644 --- a/config/SOUE01/rels/d_t_rock_boatNP/symbols.txt +++ b/config/SOUE01/rels/d_t_rock_boatNP/symbols.txt @@ -4,7 +4,7 @@ _unresolved = .text:0x00000060; // type:function size:0x4 scope:global __register_global_object = .text:0x00000070; // type:function size:0x1C scope:global __destroy_global_chain = .text:0x00000090; // type:function size:0x54 scope:global dTgRockBoat_c_classInit__Fv = .text:0x000000F0; // type:function size:0xAC -__dt__8dTgAbs_cFv = .text:0x000001A0; // type:function size:0x58 +__dt__5dTg_cFv = .text:0x000001A0; // type:function size:0x58 __dt__26sFState_c<13dTgRockBoat_c>Fv = .text:0x00000200; // type:function size:0x58 __dt__29sFStateFct_c<13dTgRockBoat_c>Fv = .text:0x00000260; // type:function size:0x6C __dt__82sStateMgr_c<13dTgRockBoat_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000002D0; // type:function size:0xA0 diff --git a/config/SOUE01/rels/d_t_tumble_weedNP/symbols.txt b/config/SOUE01/rels/d_t_tumble_weedNP/symbols.txt index 2b24ae56..5d60b4ab 100644 --- a/config/SOUE01/rels/d_t_tumble_weedNP/symbols.txt +++ b/config/SOUE01/rels/d_t_tumble_weedNP/symbols.txt @@ -4,7 +4,7 @@ _unresolved = .text:0x00000060; // type:function size:0x4 scope:global __register_global_object = .text:0x00000070; // type:function size:0x1C scope:global __destroy_global_chain = .text:0x00000090; // type:function size:0x54 scope:global dTgTumbleWeed_c_classInit__Fv = .text:0x000000F0; // type:function size:0xC0 -__dt__8dTgAbs_cFv = .text:0x000001B0; // type:function size:0x58 +__dt__5dTg_cFv = .text:0x000001B0; // type:function size:0x58 __dt__28sFState_c<15dTgTumbleWeed_c>Fv = .text:0x00000210; // type:function size:0x58 __dt__31sFStateFct_c<15dTgTumbleWeed_c>Fv = .text:0x00000270; // type:function size:0x6C __dt__84sStateMgr_c<15dTgTumbleWeed_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000002E0; // type:function size:0xA0 diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index c259bf46..c99b0fdf 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -135,6 +135,9 @@ toBeSorted/arc_callback_handler.cpp: .sdata start:0x80571D10 end:0x80571D20 .sbss start:0x80575250 end:0x80575258 +d/lyt/d_structd.cpp: + .text start:0x80065600 end:0x80066478 + toBeSorted/arc_managers/current_stage_arc_manager.cpp: .text start:0x80068FD0 end:0x80069910 .ctors start:0x804DB6A8 end:0x804DB6AC @@ -173,9 +176,17 @@ toBeSorted/dowsing_target.cpp: d/lyt/d2d.cpp: .text start:0x800A9D30 end:0x800ACAB8 - .data start:0x80510010 end:0x80510088 + .data start:0x8050FFC8 end:0x80510088 + .sdata start:0x80572288 end:0x805722B8 .sdata2 start:0x80579788 end:0x805797B0 +d/lyt/d_lyt_draw_mark.cpp: + .text start:0x800ACEC0 end:0x800AE958 + .ctors start:0x804DB6CC end:0x804DB6D0 + +d/lyt/d_textbox.cpp: + .text start:0x800AE960 end:0x800B1628 + d/lyt/d_window.cpp: .text start:0x800B1630 end:0x800B1818 .data start:0x80510820 end:0x805108B0 @@ -218,12 +229,205 @@ toBeSorted/special_item_drop_mgr.cpp: .text start:0x800C7B60 end:0x800C82B0 .sbss start:0x80575438 end:0x80575440 -d/lyt/pause_disp_00.cpp: +d/lyt/meter/d_lyt_meter.cpp: + .text start:0x800C8950 end:0x800DFCB8 + .ctors start:0x804DB6E0 end:0x804DB6E4 + +d/lyt/meter/d_lyt_meter_a_btn.cpp: + .text start:0x800DFCC0 end:0x800E1188 + .ctors start:0x804DB6E4 end:0x804DB6E8 + +d/lyt/meter/d_lyt_meter_z_btn.cpp: + .text start:0x800E1190 end:0x800E2238 + .ctors start:0x804DB6E8 end:0x804DB6EC + +d/lyt/meter/d_lyt_meter_key.cpp: + .text start:0x800E2240 end:0x800E4928 + .ctors start:0x804DB6EC end:0x804DB6F0 + +d/lyt/meter/d_lyt_meter_drink.cpp: + .text start:0x800E4930 end:0x800E6AC8 + .ctors start:0x804DB6F0 end:0x804DB6F4 + +d/lyt/meter/d_lyt_meter_remocon_bg.cpp: + .text start:0x800E6AD0 end:0x800E7218 + .ctors start:0x804DB6F4 end:0x804DB6F8 + .data start:0x80514D60 end:0x80514F10 + .bss start:0x805AA9D0 end:0x805AAAD0 + +d/lyt/meter/d_lyt_meter_nunchaku_bg.cpp: + .text start:0x800E7220 end:0x800E8168 + .ctors start:0x804DB6F8 end:0x804DB6FC + +d/lyt/meter/d_lyt_meter_nun_stk.cpp: + .text start:0x800E8170 end:0x800E8ED8 + .ctors start:0x804DB6FC end:0x804DB700 + +d/lyt/meter/d_lyt_meter_item_select.cpp: + .text start:0x800E8EE0 end:0x800F35A8 + .ctors start:0x804DB700 end:0x804DB704 + +d/lyt/meter/d_lyt_meter_plus_btn.cpp: + .text start:0x800F35B0 end:0x800F4768 + .ctors start:0x804DB704 end:0x804DB708 + +d/lyt/meter/d_lyt_meter_minus_btn.cpp: + .text start:0x800F4770 end:0x800F8D98 + .ctors start:0x804DB708 end:0x804DB70C + +d/lyt/meter/d_lyt_meter_cross_btn.cpp: + .text start:0x800F8DA0 end:0x800FAFC8 + .ctors start:0x804DB70C end:0x804DB710 + +d/lyt/meter/d_lyt_meter_dowsing.cpp: + .text start:0x800FAFD0 end:0x801003E8 + .ctors start:0x804DB710 end:0x804DB714 + +d/lyt/meter/d_lyt_meter_rupy.cpp: + .text start:0x801003F0 end:0x801026A8 + .ctors start:0x804DB714 end:0x804DB718 + +d/lyt/meter/d_lyt_meter_heart.cpp: + .text start:0x8010AEC0 end:0x8010BD48 + +d/lyt/meter/d_lyt_meter_shield_gauge.cpp: + .text start:0x8010BD50 end:0x8010CEC8 + .ctors start:0x804DB724 end:0x804DB728 + +d/lyt/d_lyt_do_button.cpp: + .text start:0x8010CED0 end:0x8010EAF8 + .ctors start:0x804DB728 end:0x804DB72C + .rodata start:0x804E6D60 end:0x804E7080 + .data start:0x8051A5A8 end:0x8051AC00 + .bss start:0x805ACE10 end:0x805ACF78 + +d/lyt/d_lyt_common_icon_material.cpp: + .text start:0x8010F820 end:0x80111718 + .ctors start:0x804DB730 end:0x804DB734 + +d/lyt/d_lyt_common_icon_item.cpp: + .text start:0x80111720 end:0x80113ED8 + .ctors start:0x804DB734 end:0x804DB738 + +d/lyt/d_lyt_msg_window.cpp: + .text start:0x801148F0 end:0x8011C8C8 + .ctors start:0x804DB738 end:0x804DB73C + +d/lyt/d_lyt_msg_window_select_btn.cpp: + .text start:0x8011C8D0 end:0x80120988 + .ctors start:0x804DB73C end:0x804DB740 + +d/lyt/d_lyt_msg_window_talk.cpp: + .text start:0x80120A20 end:0x801223C8 + .ctors start:0x804DB740 end:0x804DB744 + +d/lyt/d_lyt_msg_window_link.cpp: + .text start:0x801223D0 end:0x80123738 + .ctors start:0x804DB744 end:0x804DB748 + +d/lyt/d_lyt_msg_window_get.cpp: + .text start:0x80123740 end:0x80124678 + .ctors start:0x804DB748 end:0x804DB74C + +d/lyt/d_lyt_msg_window_sword.cpp: + .text start:0x80124680 end:0x80125BA8 + .ctors start:0x804DB74C end:0x804DB750 + +d/lyt/d_lyt_msg_window_wood.cpp: + .text start:0x80125BB0 end:0x801267F8 + .ctors start:0x804DB750 end:0x804DB754 + +d/lyt/d_lyt_msg_window_stone.cpp: + .text start:0x80126800 end:0x80127478 + .ctors start:0x804DB754 end:0x804DB758 + +d/lyt/d_lyt_msg_window_demo.cpp: + .text start:0x80127480 end:0x801281F8 + .ctors start:0x804DB758 end:0x804DB75C + +d/lyt/d_lyt_simple_window.cpp: + .text start:0x80128200 end:0x8012B948 + .ctors start:0x804DB75C end:0x804DB760 + +d/lyt/d_lyt_auto_caption.cpp: + .text start:0x8012B950 end:0x8012C568 + .ctors start:0x804DB760 end:0x804DB764 + +d/lyt/d_lyt_auto_explain.cpp: + .text start:0x8012C570 end:0x8012D188 + .ctors start:0x804DB764 end:0x804DB768 + +d/lyt/d_lyt_map_capture.cpp: + .text start:0x8012D190 end:0x8012DC28 + .ctors start:0x804DB768 end:0x804DB76C + +d/lyt/d_lyt_map.cpp: + .text start:0x8012DC30 end:0x80148DE8 + .ctors start:0x804DB76C end:0x804DB770 + +d/lyt/d_lyt_note.cpp: + .text start:0x80148DF0 end:0x80149C28 + .ctors start:0x804DB770 end:0x804DB774 + +d/lyt/d_lyt_battery.cpp: + .text start:0x80149C30 end:0x8014AD18 + .ctors start:0x804DB774 end:0x804DB778 + .rodata start:0x804E7F80 end:0x804E7FA0 + .data start:0x80522820 end:0x80522B00 + .sdata start:0x80572870 end:0x80572878 + .sdata2 start:0x80579FC8 end:0x80579FD0 + .bss start:0x805B0930 end:0x805B0A70 + +d/lyt/d_lyt_area_caption.cpp: + .text start:0x8014AD20 end:0x8014C6B8 + .ctors start:0x804DB778 end:0x804DB77C + +d/lyt/d_lyt_wipe.cpp: + .text start:0x8014C6C0 end:0x8014E008 + .ctors start:0x804DB77C end:0x804DB780 + +d/lyt/d_lyt_bird_gauge.cpp: + .text start:0x80152FD0 end:0x801548D8 + .ctors start:0x804DB784 end:0x804DB788 + +d/lyt/d_lyt_sky_gauge.cpp: + .text start:0x801548E0 end:0x80155CC8 + .ctors start:0x804DB788 end:0x804DB78C + +d/lyt/d_lyt_deposit_stock.cpp: + .text start:0x80155CD0 end:0x801578A8 + .ctors start:0x804DB78C end:0x804DB790 + +d/lyt/d_lyt_bigboss_gauge.cpp: + .text start:0x80158290 end:0x80158E78 + .ctors start:0x804DB790 end:0x804DB794 + +d/lyt/d_lyt_pause_back.cpp: + .text start:0x80158E80 end:0x80159E78 + .ctors start:0x804DB794 end:0x804DB798 + +d/lyt/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: +d/lyt/d_lyt_pause_disp_01.cpp: + .text start:0x8015EDF0 end:0x80161F98 + .ctors start:0x804DB79C end:0x804DB7A0 + +d/lyt/d_lyt_pause_info.cpp: + .text start:0x80161FA0 end:0x80163568 + .ctors start:0x804DB7A0 end:0x804DB7A4 + +d/lyt/d_lyt_pause_text.cpp: + .text start:0x80163570 end:0x80164F88 + .ctors start:0x804DB7A4 end:0x804DB7A8 + +d/lyt/d_lyt_save_msg_window.cpp: + .text start:0x80164F90 end:0x80166968 + .ctors start:0x804DB7A8 end:0x804DB7AC + +d/lyt/d_lyt_common_arrow.cpp: .text start:0x80167FE0 end:0x801695E8 .ctors start:0x804DB7AC end:0x804DB7B0 .rodata start:0x804E8D28 end:0x804E8D70 @@ -232,6 +436,14 @@ d/lyt/common_arrow.cpp: .sdata2 start:0x8057A180 end:0x8057A188 .bss start:0x805B1CB0 end:0x805B1DB0 +d/lyt/d_lyt_common_title.cpp: + .text start:0x801695F0 end:0x8016B2A8 + .ctors start:0x804DB7B0 end:0x804DB7B4 + +d/lyt/d_lyt_cursor_stick.cpp: + .text start:0x8016B2B0 end:0x8016BCD8 + .ctors start:0x804DB7B4 end:0x804DB7B8 + toBeSorted/counters/counter.cpp: .text start:0x8016CC40 end:0x8016CD94 @@ -366,6 +578,84 @@ d/tg/d_tk_event.cpp: .text start:0x8027AB30 end:0x8027B408 .ctors start:0x804DB84C end:0x804DB850 +d/lyt/d_lyt_pause.cpp: + .text start:0x8027E9E0 end:0x80282678 + .ctors start:0x804DB85C end:0x804DB860 + +d/lyt/d_lyt_game_over.cpp: + .text start:0x80282680 end:0x80284FA8 + .ctors start:0x804DB860 end:0x804DB864 + +d/lyt/d_lyt_save_mgr.cpp: + .text start:0x80284FB0 end:0x80286C88 + .ctors start:0x804DB864 end:0x804DB868 + +d/lyt/d_lyt_enemy_icon.cpp: + .text start:0x8028AA00 end:0x8028BCD8 + .ctors start:0x804DB870 end:0x804DB874 + +d/lyt/d_lyt_mini_game.cpp: + .text start:0x802940D0 end:0x802969E0 + +d/lyt/d_lyt_demo_dowsing.cpp: + .text start:0x802A0B10 end:0x802A17C8 + .ctors start:0x804DB880 end:0x804DB884 + +d/lyt/d_lyt_shop.cpp: + .text start:0x802A17D0 end:0x802A7FD8 + .ctors start:0x804DB884 end:0x804DB888 + +d/lyt/d_lyt_deposit.cpp: + .text start:0x802A7FE0 end:0x802B02C8 + .ctors start:0x804DB888 end:0x804DB88C + +d/lyt/d_lyt_demo_title.cpp: + .text start:0x802B02D0 end:0x802B22E8 + .ctors start:0x804DB88C end:0x804DB890 + +d/lyt/d_lyt_end_roll.cpp: + .text start:0x802B22F0 end:0x802B6B98 + .ctors start:0x804DB890 end:0x804DB894 + +d/lyt/d_lyt_control_game.cpp: + .text start:0x802CC7B0 end:0x802D16A8 + .ctors start:0x804DB8A0 end:0x804DB8A4 + +d/lyt/d_lyt_control_title.cpp: + .text start:0x802D16B0 end:0x802D17BC + +d/tg/d_t_map_area.cpp: + .text start:0x802D17C0 end:0x802D18EC + +d/tg/d_t_truck_rails.cpp: + .text start:0x802D18F0 end:0x802D4FD8 + +d/a/obj/d_a_obj_force_sign.cpp: + .text start:0x802D4FE0 end:0x802D58D0 + .ctors start:0x804DB8A4 end:0x804DB8A8 + +d/tg/d_t_force_get_flag.cpp: + .text start:0x802D58D0 end:0x802D5BF4 + .ctors start:0x804DB8A8 end:0x804DB8AC + +d/a/obj/d_a_obj_water_spout.cpp: + .text start:0x802D5C00 end:0x802D67F8 + .ctors start:0x804DB8AC end:0x804DB8B0 + +d/tg/d_t_siren_tag.cpp: + .text start:0x802D6800 end:0x802D84F8 + .ctors start:0x804DB8B0 end:0x804DB8B4 + +d/a/obj/d_a_obj_spore.cpp: + .text start:0x802D8500 end:0x802D9408 + .ctors start:0x804DB8B4 end:0x804DB8B8 + +d/tg/d_t_genki_mgr.cpp: + .text start:0x802D9410 end:0x802D9D60 + +d/a/obj/d_a_obj_water_mark.cpp: + .text start:0x802D9D60 end:0x802DA0BC + s/s_StateID.cpp: .text start:0x802DDDB0 end:0x802DE1F4 .ctors start:0x804DB8B8 end:0x804DB8BC diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 11e55329..a9eeb3d5 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -446,14 +446,14 @@ fn_80011BA0 = .text:0x80011BA0; // type:function size:0xA0 fn_80011C40 = .text:0x80011C40; // type:function size:0x6C fn_80011CB0 = .text:0x80011CB0; // type:function size:0x58 __dt__Q23d2d10AnmGroup_cFv = .text:0x80011D10; // type:function size:0x5C -fn_80011D70 = .text:0x80011D70; // type:function size:0x40 +__dt__Q23d2d14AnmGroupBase_cFv = .text:0x80011D70; // type:function size:0x40 fn_80011DB0 = .text:0x80011DB0; // type:function size:0x58 fn_80011E10 = .text:0x80011E10; // type:function size:0xA4 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 -__dt__Q23d2d11dLytStructCFv = .text:0x80012070; // type:function size:0x40 +__dt__13dLytMeterBaseFv = .text:0x80012030; // type:function size:0x40 +__dt__16LytMeterListNodeFv = .text:0x80012070; // type:function size:0x40 fn_800120B0 = .text:0x800120B0; // type:function size:0x74 __dt__Q34nw4r3lyt11FontRefLinkFv = .text:0x80012130; // type:function size:0x40 fn_80012170 = .text:0x80012170; // type:function size:0xA4 @@ -2211,7 +2211,7 @@ InitModelHeapMaybe = .text:0x80054510; // type:function size:0x38 ThisCopiesScreenForTransparency = .text:0x80054550; // type:function size:0x31C fn_80054870 = .text:0x80054870; // type:function size:0x25C fn_80054AD0 = .text:0x80054AD0; // type:function size:0x10 -fn_80054AE0 = .text:0x80054AE0; // type:function size:0x14 +NeedsScreenAdjustment = .text:0x80054AE0; // type:function size:0x14 __dt__14dHeapAllocatorFv = .text:0x80054B00; // type:function size:0x40 onAlloc__14dHeapAllocatorFPQ23EGG12HeapAllocArg = .text:0x80054B40; // type:function size:0x20 init__5dHeapFPCcUlPQ23EGG4Heap = .text:0x80054B60; // type:function size:0x64 @@ -2861,14 +2861,14 @@ DestroyArcEntry__22ArcCallbackHandlerBaseFPCc = .text:0x800653D0; // type:functi __sinit_\arc_callback_handler_cpp = .text:0x80065570; // type:function size:0x20 scope:local create__6mVideoFv = .text:0x80065590; // type:function size:0x54 fn_800655F0 = .text:0x800655F0; // type:function size:0x4 -fn_80065600 = .text:0x80065600; // type:function size:0x3C +__ct__Q23d2d15dLytStructDListFv = .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 -append__Q23d2d11dLytStructDFPQ23d2d11dLytStructD = .text:0x80065870; // type:function size:0x110 -detach__Q23d2d11dLytStructDFPQ23d2d11dLytStructD = .text:0x80065980; // type:function size:0xA4 +appendToList1__Q23d2d15dLytStructDListFPQ23d2d11dLytStructD = .text:0x800657B0; // type:function size:0x58 +removeFromList1__Q23d2d15dLytStructDListFPQ23d2d11dLytStructD = .text:0x80065810; // type:function size:0x60 +appendToList2__Q23d2d15dLytStructDListFPQ23d2d11dLytStructD = .text:0x80065870; // type:function size:0x110 +removeFromList2__Q23d2d15dLytStructDListFPQ23d2d11dLytStructD = .text:0x80065980; // type:function size:0xA4 fn_80065A30 = .text:0x80065A30; // type:function size:0x34 -fn_80065A70 = .text:0x80065A70; // type:function size:0x38 +create__Q23d2d15dLytStructDListFPQ23EGG4Heap = .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 @@ -3735,7 +3735,7 @@ NewObj__Q34nw4r3lyt6LayoutFPCQ44nw4r3ly 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 +CreateAnimTransform__Q23d2d8Layout_cFPCvPQ34nw4r3lyt16ResourceAccessor = .text:0x800AA4E0; // type:function size:0x50 __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 @@ -3751,37 +3751,37 @@ 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 -fn_800AB190 = .text:0x800AB190; // type:function size:0xAC -fn_800AB240 = .text:0x800AB240; // type:function size:0x94 -fn_800AB2E0 = .text:0x800AB2E0; // type:function size:0x294 -fn_800AB580 = .text:0x800AB580; // type:function size:0x3A4 -fn_800AB930 = .text:0x800AB930; // type:function size:0x8 -fn_800AB940 = .text:0x800AB940; // type:function size:0x58 -fn_800AB9A0 = .text:0x800AB9A0; // type:function size:0x1DC -fn_800ABB80 = .text:0x800ABB80; // type:function size:0x158 -fn_800ABCE0 = .text:0x800ABCE0; // type:function size:0x170 -fn_800ABE50 = .text:0x800ABE50; // type:function size:0x1E8 -fn_800AC040 = .text:0x800AC040; // type:function size:0x160 -fn_800AC1A0 = .text:0x800AC1A0; // type:function size:0x158 -fn_800AC300 = .text:0x800AC300; // type:function size:0x8 -fn_800AC310 = .text:0x800AC310; // type:function size:0x38 -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 -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 +build__Q23d2d9LytBase_cFPCcPQ23m2d10ResAccIf_c = .text:0x800AACF0; // type:function size:0x2F8 +getTextBox__Q23d2d9LytBase_cFPCc = .text:0x800AAFF0; // type:function size:0x100 +getWindow__Q23d2d9LytBase_cFPCc = .text:0x800AB0F0; // type:function size:0x94 +getSizeBoxInWindow__Q23d2d9LytBase_cFPCc = .text:0x800AB190; // type:function size:0xAC +getTextBoxViaUserData__Q23d2d9LytBase_cFPQ34nw4r3lyt4PanePCc = .text:0x800AB240; // type:function size:0x94 +setPropertiesRecursive__Q23d2d9LytBase_cFPQ34nw4r3lyt4Panefffff = .text:0x800AB2E0; // type:function size:0x294 +setProperties__Q23d2d9LytBase_cFPQ34nw4r3lyt4Panefffff = .text:0x800AB580; // type:function size:0x3A4 +fn_800AB930__Q23d2d9LytBase_cFP10dTextBox_c = .text:0x800AB930; // type:function size:0x8 +fn_800AB940__Q23d2d9LytBase_cFPCci = .text:0x800AB940; // type:function size:0x58 +fn_800AB9A0__Q23d2d9LytBase_cFP10dTextBox_ci = .text:0x800AB9A0; // type:function size:0x1DC +fn_800ABB80__Q23d2d9LytBase_cFP10dTextBox_cP10dTextBox_ci = .text:0x800ABB80; // type:function size:0x158 +fn_800ABCE0__Q23d2d9LytBase_cFPCQ44nw4r3lyt3res11ExtUserDataP10dTextBox_cP10dTextBox_ci = .text:0x800ABCE0; // type:function size:0x170 +fn_800ABE50__Q23d2d9LytBase_cFP10dTextBox_ciPv = .text:0x800ABE50; // type:function size:0x1E8 +fn_800AC040__Q23d2d9LytBase_cFP10dTextBox_cP10dTextBox_ciPv = .text:0x800AC040; // type:function size:0x160 +fn_800AC1AC__Q23d2d9LytBase_cFPCQ44nw4r3lyt3res11ExtUserDataP10dTextBox_cP10dTextBox_ciPv = .text:0x800AC1A0; // type:function size:0x158 +getMsbtInfo__Q23d2d9LytBase_cCFv = .text:0x800AC300; // type:function size:0x8 +findGroupByName__Q23d2d9LytBase_cFPCc = .text:0x800AC310; // type:function size:0x38 +hasSameBaseName__3d2dFPCcPCc = .text:0x800AC350; // type:function size:0x64 +linkMeters__Q23d2d9LytBase_cFPQ34nw4r3lyt5GroupPQ34nw4r2ut30LinkList<16LytMeterListNode,0> = .text:0x800AC3C0; // type:function size:0x128 +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 +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 +setForward__Q23d2d14AnmGroupBase_cFv = .text:0x800AC920; // type:function size:0x14 +setBackward__Q23d2d14AnmGroupBase_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 @@ -4502,8 +4502,8 @@ fn_800C9FE0 = .text:0x800C9FE0; // type:function size:0x60 fn_800CA040 = .text:0x800CA040; // type:function size:0x60 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 +__ct__11dLytMeter_cFv = .text:0x800CA100; // type:function size:0x1C0 +__ct__Q23d2d10ResAccIf_cFv = .text:0x800CA2C0; // type:function size:0x6C __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 @@ -4602,7 +4602,7 @@ fn_800CDE10 = .text:0x800CDE10; // type:function size:0xA0 fn_800CDEB0 = .text:0x800CDEB0; // type:function size:0xA4 __ct__Q23d2d11dLytStructBFv = .text:0x800CDF60; // type:function size:0x258 fn_800CE1C0 = .text:0x800CE1C0; // type:function size:0x18 -__ct__Q23d2d11dLytStructCFv = .text:0x800CE1E0; // type:function size:0x10 +__ct__16LytMeterListNodeFv = .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 @@ -4648,12 +4648,12 @@ fn_800CFE10 = .text:0x800CFE10; // type:function size:0x6C fn_800CFE80 = .text:0x800CFE80; // type:function size:0xA0 fn_800CFF20 = .text:0x800CFF20; // type:function size:0xA4 fn_800CFFD0 = .text:0x800CFFD0; // type:function size:0xDC -LytMeterRemoconBg__ct = .text:0x800D00B0; // type:function size:0xC0 -fn_800D0170 = .text:0x800D0170; // type:function size:0x58 -fn_800D01D0 = .text:0x800D01D0; // type:function size:0x6C -fn_800D0240 = .text:0x800D0240; // type:function size:0xA0 -fn_800D02E0 = .text:0x800D02E0; // type:function size:0xA4 -fn_800D0390 = .text:0x800D0390; // type:function size:0xC4 +__ct__20dLytMeterRemoconBg_cFv = .text:0x800D00B0; // type:function size:0xC0 +__dt__33sFState_c<20dLytMeterRemoconBg_c>Fv = .text:0x800D0170; // type:function size:0x58 +__dt__36sFStateFct_c<20dLytMeterRemoconBg_c>Fv = .text:0x800D01D0; // type:function size:0x6C +__dt__89sStateMgr_c<20dLytMeterRemoconBg_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x800D0240; // type:function size:0xA0 +__dt__59sFStateMgr_c<20dLytMeterRemoconBg_c,20sStateMethodUsr_FI_c>Fv = .text:0x800D02E0; // type:function size:0xA4 +__dt__20dLytMeterRemoconBg_cFv = .text:0x800D0390; // type:function size:0xC4 LytMeterNunchakuBg__ct = .text:0x800D0460; // type:function size:0xE0 fn_800D0540 = .text:0x800D0540; // type:function size:0x58 fn_800D05A0 = .text:0x800D05A0; // type:function size:0x6C @@ -4818,7 +4818,7 @@ fn_800DA590 = .text:0x800DA590; // type:function size:0x10 fn_800DA5A0 = .text:0x800DA5A0; // type:function size:0x10 fn_800DA5B0 = .text:0x800DA5B0; // type:function size:0x10 fn_800DA5C0 = .text:0x800DA5C0; // type:function size:0x10 -fn_800DA5D0 = .text:0x800DA5D0; // type:function size:0x10 +changeState__89sStateMgr_c<20dLytMeterRemoconBg_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x800DA5D0; // type:function size:0x10 fn_800DA5E0 = .text:0x800DA5E0; // type:function size:0x10 fn_800DA5F0 = .text:0x800DA5F0; // type:function size:0x10 fn_800DA600 = .text:0x800DA600; // type:function size:0x10 @@ -5173,14 +5173,14 @@ fn_800DCE40 = .text:0x800DCE40; // type:function size:0x10 fn_800DCE50 = .text:0x800DCE50; // type:function size:0x10 fn_800DCE60 = .text:0x800DCE60; // type:function size:0x10 fn_800DCE70 = .text:0x800DCE70; // type:function size:0x10 -fn_800DCE80 = .text:0x800DCE80; // type:function size:0x10 -fn_800DCE90 = .text:0x800DCE90; // type:function size:0x10 -fn_800DCEA0 = .text:0x800DCEA0; // type:function size:0x10 -fn_800DCEB0 = .text:0x800DCEB0; // type:function size:0x10 -fn_800DCEC0 = .text:0x800DCEC0; // type:function size:0x10 -fn_800DCED0 = .text:0x800DCED0; // type:function size:0x10 -fn_800DCEE0 = .text:0x800DCEE0; // type:function size:0x10 -fn_800DCEF0 = .text:0x800DCEF0; // type:function size:0x10 +initializeState__89sStateMgr_c<20dLytMeterRemoconBg_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x800DCE80; // type:function size:0x10 +executeState__89sStateMgr_c<20dLytMeterRemoconBg_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x800DCE90; // type:function size:0x10 +finalizeState__89sStateMgr_c<20dLytMeterRemoconBg_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x800DCEA0; // type:function size:0x10 +refreshState__89sStateMgr_c<20dLytMeterRemoconBg_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x800DCEB0; // type:function size:0x10 +getState__89sStateMgr_c<20dLytMeterRemoconBg_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x800DCEC0; // type:function size:0x10 +getNewStateID__89sStateMgr_c<20dLytMeterRemoconBg_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x800DCED0; // type:function size:0x10 +getStateID__89sStateMgr_c<20dLytMeterRemoconBg_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x800DCEE0; // type:function size:0x10 +getOldStateID__89sStateMgr_c<20dLytMeterRemoconBg_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x800DCEF0; // type:function size:0x10 fn_800DCF00 = .text:0x800DCF00; // type:function size:0x10 fn_800DCF10 = .text:0x800DCF10; // type:function size:0x10 fn_800DCF20 = .text:0x800DCF20; // type:function size:0x10 @@ -5601,27 +5601,27 @@ LytMeterDrinkParts__dtor = .text:0x800E68F0; // type:function size:0x58 LytMeterDrink__dtor = .text:0x800E6950; // type:function size:0x58 fn_800E69B0 = .text:0x800E69B0; // type:function size:0x88 fn_800E6A40 = .text:0x800E6A40; // type:function size:0x88 -fn_800E6AD0 = .text:0x800E6AD0; // type:function size:0x4 -fn_800E6AE0 = .text:0x800E6AE0; // type:function size:0x4 -fn_800E6AF0 = .text:0x800E6AF0; // type:function size:0x4 -fn_800E6B00 = .text:0x800E6B00; // type:function size:0x4 -fn_800E6B10 = .text:0x800E6B10; // type:function size:0x4 -fn_800E6B20 = .text:0x800E6B20; // type:function size:0x4 -fn_800E6B30 = .text:0x800E6B30; // type:function size:0x4 -fn_800E6B40 = .text:0x800E6B40; // type:function size:0x4 -fn_800E6B50 = .text:0x800E6B50; // type:function size:0x4 -fn_800E6B60 = .text:0x800E6B60; // type:function size:0x4 -fn_800E6B70 = .text:0x800E6B70; // type:function size:0x4 -fn_800E6B80 = .text:0x800E6B80; // type:function size:0x4 -fn_800E6B90 = .text:0x800E6B90; // type:function size:0x9C -fn_800E6C30 = .text:0x800E6C30; // type:function size:0x8 -fn_800E6C40 = .text:0x800E6C40; // type:function size:0x180 -fn_800E6DC0 = .text:0x800E6DC0; // type:function size:0x8 -fn_800E6DD0 = .text:0x800E6DD0; // type:function size:0x8 -fn_800E6DE0 = .text:0x800E6DE0; // type:function size:0x8 -LytMeterRemoconBg__initStates = .text:0x800E6DF0; // type:function size:0x338 -LytMeterRemoconBg__dtor = .text:0x800E7130; // type:function size:0x58 -fn_800E7190 = .text:0x800E7190; // type:function size:0x88 +initializeState_Wait__20dLytMeterRemoconBg_cFv = .text:0x800E6AD0; // type:function size:0x4 +executeState_Wait__20dLytMeterRemoconBg_cFv = .text:0x800E6AE0; // type:function size:0x4 +finalizeState_Wait__20dLytMeterRemoconBg_cFv = .text:0x800E6AF0; // type:function size:0x4 +initializeState_On__20dLytMeterRemoconBg_cFv = .text:0x800E6B00; // type:function size:0x4 +executeState_On__20dLytMeterRemoconBg_cFv = .text:0x800E6B10; // type:function size:0x4 +finalizeState_On__20dLytMeterRemoconBg_cFv = .text:0x800E6B20; // type:function size:0x4 +initializeState_Active__20dLytMeterRemoconBg_cFv = .text:0x800E6B30; // type:function size:0x4 +executeState_Active__20dLytMeterRemoconBg_cFv = .text:0x800E6B40; // type:function size:0x4 +finalizeState_Active__20dLytMeterRemoconBg_cFv = .text:0x800E6B50; // type:function size:0x4 +initializeState_Off__20dLytMeterRemoconBg_cFv = .text:0x800E6B60; // type:function size:0x4 +executeState_Off__20dLytMeterRemoconBg_cFv = .text:0x800E6B70; // type:function size:0x4 +finalizeState_Off__20dLytMeterRemoconBg_cFv = .text:0x800E6B80; // type:function size:0x4 +build__20dLytMeterRemoconBg_cFPQ23d2d10ResAccIf_c = .text:0x800E6B90; // type:function size:0x9C +LytMeter0x10__20dLytMeterRemoconBg_cFv = .text:0x800E6C30; // type:function size:0x8 +LytMeter0x14__20dLytMeterRemoconBg_cFv = .text:0x800E6C40; // type:function size:0x180 +getName__20dLytMeterRemoconBg_cCFv = .text:0x800E6DC0; // type:function size:0x8 +LytMeter0x1C__20dLytMeterRemoconBg_cFv = .text:0x800E6DD0; // type:function size:0x8 +getPane__20dLytMeterRemoconBg_cFv = .text:0x800E6DE0; // type:function size:0x8 +__sinit_\d_lyt_meter_remocon_bg_cpp = .text:0x800E6DF0; // type:function size:0x338 +__dt__35sFStateID_c<20dLytMeterRemoconBg_c>Fv = .text:0x800E7130; // type:function size:0x58 +isSameName__35sFStateID_c<20dLytMeterRemoconBg_c>CFPCc = .text:0x800E7190; // type:function size:0x88 fn_800E7220 = .text:0x800E7220; // type:function size:0xC fn_800E7230 = .text:0x800E7230; // type:function size:0x11C fn_800E7350 = .text:0x800E7350; // type:function size:0x4 @@ -6509,24 +6509,24 @@ fn_8010CB50 = .text:0x8010CB50; // type:function size:0x8 LytMeterShieldGauge__initStates = .text:0x8010CB60; // type:function size:0x27C LytMeterShieldGauge__dtor = .text:0x8010CDE0; // type:function size:0x58 fn_8010CE40 = .text:0x8010CE40; // type:function size:0x88 -fn_8010CED0 = .text:0x8010CED0; // type:function size:0x50 -fn_8010CF20 = .text:0x8010CF20; // type:function size:0x40 -fn_8010CF60 = .text:0x8010CF60; // type:function size:0x4 -fn_8010CF70 = .text:0x8010CF70; // type:function size:0x60 -fn_8010CFD0 = .text:0x8010CFD0; // type:function size:0x4 -fn_8010CFE0 = .text:0x8010CFE0; // type:function size:0xC -fn_8010CFF0 = .text:0x8010CFF0; // type:function size:0xDC -fn_8010D0D0 = .text:0x8010D0D0; // type:function size:0x4 -fn_8010D0E0 = .text:0x8010D0E0; // type:function size:0x88 -fn_8010D170 = .text:0x8010D170; // type:function size:0x118 -fn_8010D290 = .text:0x8010D290; // type:function size:0x4 -fn_8010D2A0 = .text:0x8010D2A0; // type:function size:0x4 -fn_8010D2B0 = .text:0x8010D2B0; // type:function size:0x98 -fn_8010D350 = .text:0x8010D350; // type:function size:0x4 -fn_8010D360 = .text:0x8010D360; // type:function size:0x88 -fn_8010D3F0 = .text:0x8010D3F0; // type:function size:0x8C -fn_8010D480 = .text:0x8010D480; // type:function size:0x4 -fn_8010D490 = .text:0x8010D490; // type:function size:0x1D4 +__ct__13DoButtonClassFv = .text:0x8010CED0; // type:function size:0x50 +__dt__13DoButtonClassFv = .text:0x8010CF20; // type:function size:0x40 +initializeState_InvisibleWait__14dLytDobutton_cFv = .text:0x8010CF60; // type:function size:0x4 +executeState_InvisibleWait__14dLytDobutton_cFv = .text:0x8010CF70; // type:function size:0x60 +finalizeState_InvisibleWait__14dLytDobutton_cFv = .text:0x8010CFD0; // type:function size:0x4 +initializeState_InvisibleTimeCnt__14dLytDobutton_cFv = .text:0x8010CFE0; // type:function size:0xC +executeState_InvisibleTimeCnt__14dLytDobutton_cFv = .text:0x8010CFF0; // type:function size:0xDC +finalizeState_InvisibleTimeCnt__14dLytDobutton_cFv = .text:0x8010D0D0; // type:function size:0x4 +initializeState_In__14dLytDobutton_cFv = .text:0x8010D0E0; // type:function size:0x88 +executeState_In__14dLytDobutton_cFv = .text:0x8010D170; // type:function size:0x118 +finalizeState_In__14dLytDobutton_cFv = .text:0x8010D290; // type:function size:0x4 +initializeState_Wait__14dLytDobutton_cFv = .text:0x8010D2A0; // type:function size:0x4 +executeState_Wait__14dLytDobutton_cFv = .text:0x8010D2B0; // type:function size:0x98 +finalizeState_Wait__14dLytDobutton_cFv = .text:0x8010D350; // type:function size:0x4 +initializeState_Out__14dLytDobutton_cFv = .text:0x8010D360; // type:function size:0x88 +executeState_Out__14dLytDobutton_cFv = .text:0x8010D3F0; // type:function size:0x8C +finalizeState_Out__14dLytDobutton_cFv = .text:0x8010D480; // type:function size:0x4 +init__14dLytDobutton_cFPQ23m2d10ResAccIf_c = .text:0x8010D490; // type:function size:0x1D4 fn_8010D670 = .text:0x8010D670; // type:function size:0x50 fn_8010D6C0 = .text:0x8010D6C0; // type:function size:0x80C fn_8010DED0 = .text:0x8010DED0; // type:function size:0x28 @@ -6535,9 +6535,9 @@ fn_8010E3D0 = .text:0x8010E3D0; // type:function size:0x1F0 LytDoButton__setActionTextStuff = .text:0x8010E5C0; // type:function size:0x10 fn_8010E5D0 = .text:0x8010E5D0; // type:function size:0x8 fn_8010E5E0 = .text:0x8010E5E0; // type:function size:0x1C -LytDoButton__initStates = .text:0x8010E600; // type:function size:0x410 -LytDoButton__dtor = .text:0x8010EA10; // type:function size:0x58 -fn_8010EA70 = .text:0x8010EA70; // type:function size:0x88 +__sinit_\d_lyt_do_button_cpp = .text:0x8010E600; // type:function size:0x410 +__dt__29sFStateID_c<14dLytDobutton_c>Fv = .text:0x8010EA10; // type:function size:0x58 +isSameName__29sFStateID_c<14dLytDobutton_c>CFPCc = .text:0x8010EA70; // type:function size:0x88 fn_8010EB00 = .text:0x8010EB00; // type:function size:0x24 fn_8010EB30 = .text:0x8010EB30; // type:function size:0x40 fn_8010EB70 = .text:0x8010EB70; // type:function size:0x14 @@ -8203,51 +8203,51 @@ fn_801497D0 = .text:0x801497D0; // type:function size:0x30 LytNote__initStates = .text:0x80149800; // type:function size:0x338 LytNote__state_dtor = .text:0x80149B40; // type:function size:0x58 fn_80149BA0 = .text:0x80149BA0; // type:function size:0x88 -LytBattery__ctor = .text:0x80149C30; // type:function size:0x138 -fn_80149D70 = .text:0x80149D70; // type:function size:0x58 -fn_80149DD0 = .text:0x80149DD0; // type:function size:0x6C -fn_80149E40 = .text:0x80149E40; // type:function size:0xA0 -fn_80149EE0 = .text:0x80149EE0; // type:function size:0xA4 -fn_80149F90 = .text:0x80149F90; // type:function size:0x30 -fn_80149FC0 = .text:0x80149FC0; // type:function size:0x124 -fn_8014A0F0 = .text:0x8014A0F0; // type:function size:0x10 -fn_8014A100 = .text:0x8014A100; // type:function size:0xF0 -fn_8014A1F0 = .text:0x8014A1F0; // type:function size:0x10 -fn_8014A200 = .text:0x8014A200; // type:function size:0x10 -fn_8014A210 = .text:0x8014A210; // type:function size:0x6C -fn_8014A280 = .text:0x8014A280; // type:function size:0x50 -fn_8014A2D0 = .text:0x8014A2D0; // type:function size:0x4 -fn_8014A2E0 = .text:0x8014A2E0; // type:function size:0x70 -fn_8014A350 = .text:0x8014A350; // type:function size:0x4 -fn_8014A360 = .text:0x8014A360; // type:function size:0x4 -fn_8014A370 = .text:0x8014A370; // type:function size:0x78 -fn_8014A3F0 = .text:0x8014A3F0; // type:function size:0x4 -fn_8014A400 = .text:0x8014A400; // type:function size:0x4 -fn_8014A410 = .text:0x8014A410; // type:function size:0xA0 -fn_8014A4B0 = .text:0x8014A4B0; // type:function size:0x4 -fn_8014A4C0 = .text:0x8014A4C0; // type:function size:0x48 -fn_8014A510 = .text:0x8014A510; // type:function size:0xAC -fn_8014A5C0 = .text:0x8014A5C0; // type:function size:0x4 -fn_8014A5D0 = .text:0x8014A5D0; // type:function size:0x4 -fn_8014A5E0 = .text:0x8014A5E0; // type:function size:0x78 -fn_8014A660 = .text:0x8014A660; // type:function size:0x4 -fn_8014A670 = .text:0x8014A670; // type:function size:0x60 -fn_8014A6D0 = .text:0x8014A6D0; // type:function size:0xC -fn_8014A6E0 = .text:0x8014A6E0; // type:function size:0x1C -fn_8014A700 = .text:0x8014A700; // type:function size:0x1C -fn_8014A720 = .text:0x8014A720; // type:function size:0x1C -fn_8014A740 = .text:0x8014A740; // type:function size:0x10 -fn_8014A750 = .text:0x8014A750; // type:function size:0x10 -fn_8014A760 = .text:0x8014A760; // type:function size:0x10 -fn_8014A770 = .text:0x8014A770; // type:function size:0x10 -fn_8014A780 = .text:0x8014A780; // type:function size:0x10 -fn_8014A790 = .text:0x8014A790; // type:function size:0x10 -fn_8014A7A0 = .text:0x8014A7A0; // type:function size:0x30 -fn_8014A7D0 = .text:0x8014A7D0; // type:function size:0x30 -fn_8014A800 = .text:0x8014A800; // type:function size:0x30 -LytBattery__initStates = .text:0x8014A830; // type:function size:0x3F4 -LytBattery__state_dtor = .text:0x8014AC30; // type:function size:0x58 -fn_8014AC90 = .text:0x8014AC90; // type:function size:0x88 +create__13dLytBattery_cFv = .text:0x80149C30; // type:function size:0x138 +__dt__26sFState_c<13dLytBattery_c>Fv = .text:0x80149D70; // type:function size:0x58 +__dt__29sFStateFct_c<13dLytBattery_c>Fv = .text:0x80149DD0; // type:function size:0x6C +__dt__82sStateMgr_c<13dLytBattery_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80149E40; // type:function size:0xA0 +__dt__52sFStateMgr_c<13dLytBattery_c,20sStateMethodUsr_FI_c>Fv = .text:0x80149EE0; // type:function size:0xA4 +draw__13dLytBattery_cFv = .text:0x80149F90; // type:function size:0x30 +init__13dLytBattery_cFv = .text:0x80149FC0; // type:function size:0x124 +changeState__82sStateMgr_c<13dLytBattery_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x8014A0F0; // type:function size:0x10 +doDraw__13dLytBattery_cFv = .text:0x8014A100; // type:function size:0xF0 +executeState__82sStateMgr_c<13dLytBattery_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8014A1F0; // type:function size:0x10 +getStateID__82sStateMgr_c<13dLytBattery_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8014A200; // type:function size:0x10 +dismissManually__13dLytBattery_cFv = .text:0x8014A210; // type:function size:0x6C +hasEnoughBatteryCharge__13dLytBattery_cFv = .text:0x8014A280; // type:function size:0x50 +initializeState_Off__13dLytBattery_cFv = .text:0x8014A2D0; // type:function size:0x4 +executeState_Off__13dLytBattery_cFv = .text:0x8014A2E0; // type:function size:0x70 +finalizeState_Off__13dLytBattery_cFv = .text:0x8014A350; // type:function size:0x4 +initializeState_In__13dLytBattery_cFv = .text:0x8014A360; // type:function size:0x4 +executeState_In__13dLytBattery_cFv = .text:0x8014A370; // type:function size:0x78 +finalizeState_In__13dLytBattery_cFv = .text:0x8014A3F0; // type:function size:0x4 +initializeState_On__13dLytBattery_cFv = .text:0x8014A400; // type:function size:0x4 +executeState_On__13dLytBattery_cFv = .text:0x8014A410; // type:function size:0xA0 +finalizeState_On__13dLytBattery_cFv = .text:0x8014A4B0; // type:function size:0x4 +initializeState_None__13dLytBattery_cFv = .text:0x8014A4C0; // type:function size:0x48 +executeState_None__13dLytBattery_cFv = .text:0x8014A510; // type:function size:0xAC +finalizeState_None__13dLytBattery_cFv = .text:0x8014A5C0; // type:function size:0x4 +initializeState_Out__13dLytBattery_cFv = .text:0x8014A5D0; // type:function size:0x4 +executeState_Out__13dLytBattery_cFv = .text:0x8014A5E0; // type:function size:0x78 +finalizeState_Out__13dLytBattery_cFv = .text:0x8014A660; // type:function size:0x4 +build__29sFStateFct_c<13dLytBattery_c>FRC12sStateIDIf_c = .text:0x8014A670; // type:function size:0x60 +dispose__29sFStateFct_c<13dLytBattery_c>FRP10sStateIf_c = .text:0x8014A6D0; // type:function size:0xC +initialize__26sFState_c<13dLytBattery_c>Fv = .text:0x8014A6E0; // type:function size:0x1C +execute__26sFState_c<13dLytBattery_c>Fv = .text:0x8014A700; // type:function size:0x1C +finalize__26sFState_c<13dLytBattery_c>Fv = .text:0x8014A720; // type:function size:0x1C +initializeState__82sStateMgr_c<13dLytBattery_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8014A740; // type:function size:0x10 +finalizeState__82sStateMgr_c<13dLytBattery_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8014A750; // type:function size:0x10 +refreshState__82sStateMgr_c<13dLytBattery_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8014A760; // type:function size:0x10 +getState__82sStateMgr_c<13dLytBattery_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8014A770; // type:function size:0x10 +getNewStateID__82sStateMgr_c<13dLytBattery_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8014A780; // type:function size:0x10 +getOldStateID__82sStateMgr_c<13dLytBattery_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8014A790; // type:function size:0x10 +finalizeState__28sFStateID_c<13dLytBattery_c>CFR13dLytBattery_c = .text:0x8014A7A0; // type:function size:0x30 +executeState__28sFStateID_c<13dLytBattery_c>CFR13dLytBattery_c = .text:0x8014A7D0; // type:function size:0x30 +initializeState__28sFStateID_c<13dLytBattery_c>CFR13dLytBattery_c = .text:0x8014A800; // type:function size:0x30 +__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 @@ -8859,7 +8859,7 @@ getOldStateID__86sStateMgr_c<17dLytPauseDisp00_c,20sStateMethodUsr_FI_c,12sFStat 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 +__sinit_\d_lyt_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 @@ -9245,7 +9245,7 @@ getOldStateID__86sStateMgr_c<17dLytCommonArrow_c,20sStateMethodUsr_FI_c,12sFStat 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 +__sinit_\d_lyt_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 @@ -31163,10 +31163,10 @@ lbl_80512B28 = .data:0x80512B28; // type:object size:0x30 lbl_80512B58 = .data:0x80512B58; // type:object size:0x30 lbl_80512B88 = .data:0x80512B88; // type:object size:0x18 lbl_80512BA0 = .data:0x80512BA0; // type:object size:0x18 -lbl_80512BB8 = .data:0x80512BB8; // type:object size:0x30 -lbl_80512BE8 = .data:0x80512BE8; // type:object size:0x30 -lbl_80512C18 = .data:0x80512C18; // type:object size:0x18 -lbl_80512C30 = .data:0x80512C30; // type:object size:0x18 +__vt__59sFStateMgr_c<20dLytMeterRemoconBg_c,20sStateMethodUsr_FI_c> = .data:0x80512BB8; // type:object size:0x30 +__vt__89sStateMgr_c<20dLytMeterRemoconBg_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x80512BE8; // type:object size:0x30 +__vt__36sFStateFct_c<20dLytMeterRemoconBg_c> = .data:0x80512C18; // type:object size:0x18 +__vt__33sFState_c<20dLytMeterRemoconBg_c> = .data:0x80512C30; // type:object size:0x18 lbl_80512C48 = .data:0x80512C48; // type:object size:0x30 lbl_80512C78 = .data:0x80512C78; // type:object size:0x30 lbl_80512CA8 = .data:0x80512CA8; // type:object size:0x18 @@ -31245,9 +31245,9 @@ lbl_80513650 = .data:0x80513650; // type:object size:0x30 lbl_80513680 = .data:0x80513680; // type:object size:0x30 lbl_805136B0 = .data:0x805136B0; // type:object size:0x18 lbl_805136C8 = .data:0x805136C8; // type:object size:0x28 -lbl_805136F0 = .data:0x805136F0; // type:object size:0xC -lbl_805136FC = .data:0x805136FC; // type:object size:0x40 -lbl_8051373C = .data:0x8051373C; // type:object size:0x388 +__vt__Q23d2d10AnmGroup_c = .data:0x805136F0; // type:object size:0xC +__vt__Q23d2d14AnmGroupBase_c = .data:0x805136FC; // type:object size:0x40 +__vt__7dLytSub = .data:0x8051373C; // type:object size:0x388 lbl_80513AC4 = .data:0x80513AC4; // type:object size:0x34 lbl_80513AF8 = .data:0x80513AF8; // type:object size:0x34 lbl_80513B2C = .data:0x80513B2C; // type:object size:0x34 @@ -31347,7 +31347,7 @@ lbl_80514CF4 = .data:0x80514CF4; // type:object size:0x34 lbl_80514D28 = .data:0x80514D28; // type:object size:0x38 lbl_80514D60 = .data:0x80514D60; // type:object size:0x10 lbl_80514D70 = .data:0x80514D70; // type:object size:0x14 -LytMeterRemoconBg__vt = .data:0x80514D84; // type:object size:0x158 +__vt__20dLytMeterRemoconBg_c = .data:0x80514D84; // type:object size:0x34 lbl_80514EDC = .data:0x80514EDC; // type:object size:0x34 lbl_80514F10 = .data:0x80514F10; // type:object size:0x18 lbl_80514F28 = .data:0x80514F28; // type:object size:0xC @@ -31946,7 +31946,7 @@ lbl_8051AA20 = .data:0x8051AA20; // type:object size:0x10 lbl_8051AA30 = .data:0x8051AA30; // type:object size:0x10 lbl_8051AA40 = .data:0x8051AA40; // type:object size:0x14 lbl_8051AA54 = .data:0x8051AA54; // type:object size:0xC data:string -lbl_8051AA60 = .data:0x8051AA60; // type:object size:0x16C +__vt__13DoButtonClass = .data:0x8051AA60; // type:object size:0x16C lbl_8051ABCC = .data:0x8051ABCC; // type:object size:0x34 lbl_8051AC00 = .data:0x8051AC00; // type:object size:0xC lbl_8051AC0C = .data:0x8051AC0C; // type:object size:0xC @@ -32743,19 +32743,19 @@ lbl_805226BC = .data:0x805226BC; // type:object size:0xC lbl_805226C8 = .data:0x805226C8; // type:object size:0x10 lbl_805226D8 = .data:0x805226D8; // type:object size:0x110 lbl_805227E8 = .data:0x805227E8; // type:object size:0x38 -lbl_80522820 = .data:0x80522820; // type:object size:0x14 -lbl_80522834 = .data:0x80522834; // type:object size:0xC -lbl_80522840 = .data:0x80522840; // type:object size:0x18 -lbl_80522858 = .data:0x80522858; // type:object size:0x18 -lbl_80522870 = .data:0x80522870; // type:object size:0xC +lbl_80522820 = .data:0x80522820; // type:object size:0x13 data:string +lbl_80522834 = .data:0x80522834; // type:object size:0xB data:string +lbl_80522840 = .data:0x80522840; // type:object size:0x15 data:string +lbl_80522858 = .data:0x80522858; // type:object size:0x15 data:string +lbl_80522870 = .data:0x80522870; // type:object size:0xA data:string lbl_8052287C = .data:0x8052287C; // type:object size:0x14 data:string -lbl_80522890 = .data:0x80522890; // type:object size:0x10 +lbl_80522890 = .data:0x80522890; // type:object size:0x9 data:string lbl_805228A0 = .data:0x805228A0; // type:object size:0x10 data:string -lbl_805228B0 = .data:0x805228B0; // type:object size:0x30 -lbl_805228E0 = .data:0x805228E0; // type:object size:0x30 -lbl_80522910 = .data:0x80522910; // type:object size:0x18 -lbl_80522928 = .data:0x80522928; // type:object size:0x1A0 -lbl_80522AC8 = .data:0x80522AC8; // type:object size:0x38 +__vt__52sFStateMgr_c<13dLytBattery_c,20sStateMethodUsr_FI_c> = .data:0x805228B0; // type:object size:0x30 +__vt__82sStateMgr_c<13dLytBattery_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x805228E0; // type:object size:0x30 +__vt__29sFStateFct_c<13dLytBattery_c> = .data:0x80522910; // type:object size:0x14 +__vt__26sFState_c<13dLytBattery_c> = .data:0x80522928; // type:object size:0x18 +__vt__28sFStateID_c<13dLytBattery_c> = .data:0x80522AC8; // type:object size:0x34 lbl_80522B00 = .data:0x80522B00; // type:object size:0x1C lbl_80522B1C = .data:0x80522B1C; // type:object size:0xC data:string lbl_80522B28 = .data:0x80522B28; // type:object size:0x1C @@ -38119,7 +38119,7 @@ lbl_80572850 = .sdata:0x80572850; // type:object size:0x4 lbl_80572854 = .sdata:0x80572854; // type:object size:0x8 lbl_8057285C = .sdata:0x8057285C; // type:object size:0xC lbl_80572868 = .sdata:0x80572868; // type:object size:0x8 data:4byte -lbl_80572870 = .sdata:0x80572870; // type:object size:0x8 +lbl_80572870 = .sdata:0x80572870; // type:object size:0x1 data:string lbl_80572878 = .sdata:0x80572878; // type:object size:0x4 lbl_8057287C = .sdata:0x8057287C; // type:object size:0x4 lbl_80572880 = .sdata:0x80572880; // type:object size:0x8 @@ -39940,7 +39940,7 @@ lbl_805754A0 = .sbss:0x805754A0; // type:object size:0x8 data:4byte 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 -lbl_805754B8 = .sbss:0x805754B8; // 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 LytWipe = .sbss:0x805754C8; // type:object size:0x8 data:4byte LYT_HELP_PTR = .sbss:0x805754D0; // type:object size:0x8 data:4byte @@ -43928,7 +43928,7 @@ lbl_8057ABE8 = .sdata2:0x8057ABE8; // type:object size:0x8 data:double lbl_8057ABF0 = .sdata2:0x8057ABF0; // type:object size:0x4 data:float lbl_8057ABF4 = .sdata2:0x8057ABF4; // type:object size:0x4 data:float lbl_8057ABF8 = .sdata2:0x8057ABF8; // type:object size:0x8 data:double -lbl_8057AC00 = .sdata2:0x8057AC00; // type:object size:0x8 data:float +lbl_8057AC00 = .sdata2:0x8057AC00; // type:object size:0x4 data:float lbl_8057AC08 = .sdata2:0x8057AC08; // type:object size:0x4 data:float lbl_8057AC0C = .sdata2:0x8057AC0C; // type:object size:0x4 data:float lbl_8057AC10 = .sdata2:0x8057AC10; // type:object size:0x8 data:double @@ -48638,12 +48638,12 @@ LytNote__STATE_WAIT = .bss:0x805B0840; // type:object size:0x40 data:4byte LytNote__STATE_IN = .bss:0x805B0880; // type:object size:0x40 data:4byte LytNote__STATE_MOVE = .bss:0x805B08C0; // type:object size:0x40 data:4byte LytNote__STATE_OUT = .bss:0x805B0900; // type:object size:0x30 data:4byte -lbl_805B0930 = .bss:0x805B0930; // type:object size:0x10 -LytBattery__STATE_OFF = .bss:0x805B0940; // type:object size:0x40 data:4byte -LytBattery__STATE_IN = .bss:0x805B0980; // type:object size:0x40 data:4byte -LytBattery__STATE_ON = .bss:0x805B09C0; // type:object size:0x40 data:4byte -LytBattery__STATE_NONE = .bss:0x805B0A00; // type:object size:0x40 data:4byte -LytBattery__STATE_OUT = .bss:0x805B0A40; // type:object size:0x30 data:4byte +lbl_805B0930 = .bss:0x805B0930; // type:object size:0xC +StateID_Off__13dLytBattery_c = .bss:0x805B0940; // type:object size:0x30 data:4byte +StateID_In__13dLytBattery_c = .bss:0x805B0980; // type:object size:0x30 data:4byte +StateID_On__13dLytBattery_c = .bss:0x805B09C0; // type:object size:0x30 data:4byte +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 diff --git a/configure.py b/configure.py index 9c0393d1..b1081841 100644 --- a/configure.py +++ b/configure.py @@ -368,13 +368,19 @@ 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/d_structd.cpp"), Object(NonMatching, "d/lyt/d2d.cpp"), Object(NonMatching, "d/lyt/d_textbox.cpp"), Object(Matching, "d/lyt/d_window.cpp"), + Object(NonMatching, "d/lyt/meter/d_lyt_meter.cpp"), + Object(NonMatching, "d/lyt/meter/d_lyt_meter_remocon_bg.cpp"), + 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_pause_disp_00.cpp"), Object(Matching, "d/lyt/d_lyt_fader.cpp"), Object(Matching, "d/lyt/d_screen_fader.cpp"), - Object(NonMatching, "d/lyt/common_arrow.cpp"), - Object(NonMatching, "d/lyt/pause_disp_00.cpp"), + Object(NonMatching, "d/lyt/d_lyt_common_arrow.cpp"), Object(NonMatching, "toBeSorted/file_manager.cpp"), Object(NonMatching, "toBeSorted/save_manager.cpp"), Object(Matching, "DynamicLink.cpp"), diff --git a/include/d/d_rawarchive.h b/include/d/d_rawarchive.h index abffa93d..7f3f09da 100644 --- a/include/d/d_rawarchive.h +++ b/include/d/d_rawarchive.h @@ -47,8 +47,8 @@ public: return mRefCount != 0; } - inline const char *name() const { - return &mArcName; + inline const SizedString<32> &name() const { + return mArcName; } inline bool isNotLoaded() { diff --git a/include/d/lyt/d2d.h b/include/d/lyt/d2d.h index b3d0a40b..94836ebe 100644 --- a/include/d/lyt/d2d.h +++ b/include/d/lyt/d2d.h @@ -1,10 +1,15 @@ #ifndef D2D_H #define D2D_H +#include #include +#include #include #include +class dTextBox_c; +class dWindow_c; + namespace d2d { class ResAccIf_c : public m2d::ResAccIf_c { @@ -50,6 +55,10 @@ public: nw4r::lyt::Bounding *findBounding(const char *name) const; void unbindAnims(); + const Layout_c *getLayout() const { + return &mLayout; + } + Layout_c *getLayout() { return &mLayout; } @@ -73,13 +82,38 @@ public: mLayout.Draw(mDrawInfo); }; + virtual bool build(const char *name, m2d::ResAccIf_c *acc) override; + dTextBox_c *getTextBox(const char *name); + dTextBox_c *getSizeBoxInWindow(const char *windowName); + dWindow_c *getWindow(const char *name); + nw4r::lyt::Group *findGroupByName(const char *name); + + bool fn_800AB940(const char *name, int arg); + bool fn_800AB9A0(dTextBox_c *textbox, int arg); + + bool fn_800ABE50(dTextBox_c *textbox, int arg, void *unk); + + static void linkMeters(nw4r::lyt::Group *group, LytMeterGroup *meterGroup); + private: - void *mpMsbtInfo; + void setPropertiesRecursive(nw4r::lyt::Pane *pane, f32, f32, f32, f32, f32); + void setProperties(nw4r::lyt::Pane *pane, f32, f32, f32, f32, f32); + dTextBox_c *getTextBoxViaUserData(nw4r::lyt::Pane *pane, const char *name); + bool fn_800ABB80(dTextBox_c *textbox1, dTextBox_c *textbox2, int arg); + bool fn_800ABCE0(const nw4r::lyt::res::ExtUserData *userDatum, dTextBox_c *textbox1, dTextBox_c *textbox2, int arg); + + bool fn_800AC040(dTextBox_c *textbox1, dTextBox_c *textbox2, int arg, void *unk); + bool fn_800AC1AC(const nw4r::lyt::res::ExtUserData *userDatum, dTextBox_c *textbox1, dTextBox_c *textbox2, int arg, + void *unk); + MsbtInfo *getMsbtInfo() const; + bool fn_800AB930(dTextBox_c *box); + + /* 0x8C */ MsbtInfo *mpMsbtInfo; }; -struct AnmGroup_c { - AnmGroup_c() {} - ~AnmGroup_c() {} +struct AnmGroupBase_c { + AnmGroupBase_c(m2d::FrameCtrl_c *frameCtrl): field_0x04(nullptr), mFlags(0), mpFrameCtrl(frameCtrl) {} + virtual ~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); @@ -87,15 +121,15 @@ struct AnmGroup_c { bool fn_800AC6D0(bool); bool fn_800AC7D0(); bool fn_800AC860(); - void fn_800AC870(bool); + void setAnimEnable(bool); void setAnmFrame(f32); void syncAnmFrame(); void setForward(); void setBackward(); - inline void setFrame(f32 frame) { + inline void setFrameAndControlThings(f32 frame) { fn_800AC6D0(false); - fn_800AC870(true); + setAnimEnable(true); mpFrameCtrl->setFrame(frame); syncAnmFrame(); } @@ -105,6 +139,15 @@ struct AnmGroup_c { syncAnmFrame(); } + inline void setFrame(f32 frame) { + mpFrameCtrl->setFrame(frame); + syncAnmFrame(); + } + + inline f32 getFrame() const { + return mpFrameCtrl->getFrame(); + } + inline void setToStart() { mpFrameCtrl->setToStart(); syncAnmFrame(); @@ -115,62 +158,50 @@ struct AnmGroup_c { syncAnmFrame(); } - u8 field_0x00[0x08 - 0x00]; + inline bool isEndReached() const { + return mpFrameCtrl->isEndReached(); + } + inline void setRate(f32 rate) { + mpFrameCtrl->setRate(rate); + setAnimEnable(true); + } + + inline bool isFlag2() const { + return (mFlags & 2) != 0; + } + +private: + + /* 0x04 */ void *field_0x04; /* 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 { +struct AnmGroup_c : public AnmGroupBase_c { + AnmGroup_c(): AnmGroupBase_c(&mFrameCtrl) {} + virtual ~AnmGroup_c() {} + /* 0x28 */ m2d::FrameCtrl_c mFrameCtrl; +}; + +// Probably pause menu specific +struct dLytStructB: public dLytMeterBase { dLytStructB(); ~dLytStructB(); + virtual bool build(d2d::ResAccIf_c *resAcc) override; + virtual bool LytMeter0x10() override; + virtual bool LytMeter0x14() override; + virtual nw4r::lyt::Pane *getPane() override; + virtual void *LytMeter0x1C() override; + virtual const char *getName() const override; + 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; + u8 field_0x00[0x808 - 0x08]; }; } // namespace d2d diff --git a/include/d/lyt/d_lyt_battery.h b/include/d/lyt/d_lyt_battery.h new file mode 100644 index 00000000..7f198d00 --- /dev/null +++ b/include/d/lyt/d_lyt_battery.h @@ -0,0 +1,41 @@ +#ifndef D_LYT_BATTERY_H +#define D_LYT_BATTERY_H + +#include +#include +#include +#include +#include + +class dLytBattery_c { +public: + static bool create(); + static bool draw(); + bool dismissManually(); + +private: + dLytBattery_c() : mStateMgr(*this, sStateID::null) { + sInstance = this; + } + + bool doDraw(); + bool init(); + + bool hasEnoughBatteryCharge(); + + STATE_FUNC_DECLARE(dLytBattery_c, Off); + STATE_FUNC_DECLARE(dLytBattery_c, In); + STATE_FUNC_DECLARE(dLytBattery_c, On); + STATE_FUNC_DECLARE(dLytBattery_c, None); + STATE_FUNC_DECLARE(dLytBattery_c, Out); + + /* 0x000 */ UI_STATE_MGR_DECLARE(dLytBattery_c); + /* 0x040 */ d2d::ResAccIf_c mResAcc; + /* 0x0EB */ dLytSub mLyt; + /* 0x110 */ d2d::AnmGroup_c mAnmGroups[4]; + /* 0x540 */ bool mDismissManually; + + static dLytBattery_c *sInstance; +}; + +#endif diff --git a/include/d/lyt/common_arrow.h b/include/d/lyt/d_lyt_common_arrow.h similarity index 94% rename from include/d/lyt/common_arrow.h rename to include/d/lyt/d_lyt_common_arrow.h index c54ade58..e8c7b31b 100644 --- a/include/d/lyt/common_arrow.h +++ b/include/d/lyt/d_lyt_common_arrow.h @@ -2,6 +2,7 @@ #define D_LYT_COMMON_ARROW_H #include +#include #include #include @@ -32,7 +33,7 @@ public: void fn_80168880(); private: - STATE_MGR_DECLARE(dLytCommonArrow_c); + UI_STATE_MGR_DECLARE(dLytCommonArrow_c); /* 0x40 */ d2d::LytBase_c mLytBase; d2d::ResAccIf_c mResAcc; d2d::AnmGroup_c field_0x440[0x9]; diff --git a/include/d/lyt/d_lyt_do_button.h b/include/d/lyt/d_lyt_do_button.h new file mode 100644 index 00000000..42f9bf7d --- /dev/null +++ b/include/d/lyt/d_lyt_do_button.h @@ -0,0 +1,40 @@ +#ifndef D_LYT_DO_BUTTON_H +#define D_LYT_DO_BUTTON_H + +#include +#include +#include +#include + +class dLytDobutton_c { +public: + dLytDobutton_c() : mStateMgr(*this, sStateID::null) { + sInstance = this; + } + + bool init(m2d::ResAccIf_c *resAcc); + + dLytDobutton_c *sInstance; + +private: + STATE_FUNC_DECLARE(dLytDobutton_c, InvisibleWait); + STATE_FUNC_DECLARE(dLytDobutton_c, InvisibleTimeCnt); + STATE_FUNC_DECLARE(dLytDobutton_c, In); + STATE_FUNC_DECLARE(dLytDobutton_c, Wait); + STATE_FUNC_DECLARE(dLytDobutton_c, Out); + + UI_STATE_MGR_DECLARE(dLytDobutton_c); + /* 0x040 */ dLytSub mLyt; + /* 0x0D4 */ d2d::AnmGroup_c mAnmGroups[12]; + /* 0x3D4 */ u8 field_0x3D4[0x470 - 0x3D4]; + /* 0x470 */ s32 mDoActionToShow; + /* 0x474 */ s32 field_0x474; + /* 0x478 */ s32 field_0x478; + /* 0x47C */ s32 field_0x47C; + /* 0x480 */ s32 field_0x480; + /* 0x484 */ s32 mNextDoActionToShow; + /* 0x488 */ s32 field_0x488; + /* 0x48C */ s32 field_0x48C; +}; + +#endif diff --git a/include/d/lyt/pause_disp_00.h b/include/d/lyt/d_lyt_pause_disp_00.h similarity index 84% rename from include/d/lyt/pause_disp_00.h rename to include/d/lyt/d_lyt_pause_disp_00.h index cae2e7ad..6d581120 100644 --- a/include/d/lyt/pause_disp_00.h +++ b/include/d/lyt/d_lyt_pause_disp_00.h @@ -2,13 +2,14 @@ #define LYT_PAUSE_DISP_00_H #include +#include #include #include class dLytPauseDisp00_c { public: dLytPauseDisp00_c(); - virtual ~dLytPauseDisp00_c(); + virtual ~dLytPauseDisp00_c() {} void init(); @@ -27,8 +28,8 @@ private: 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]; + /* 0xE110 */ LytMeterGroup mLytMeterGroup; + LytMeterListNode field_0xE11C[0x18]; d2d::dLytStructD field_0xE29C; }; diff --git a/include/d/lyt/d_lyt_sub.h b/include/d/lyt/d_lyt_sub.h new file mode 100644 index 00000000..21745ad8 --- /dev/null +++ b/include/d/lyt/d_lyt_sub.h @@ -0,0 +1,23 @@ +#ifndef D_LYT_SUB_H +#define D_LYT_SUB_H + +#include + +class dLytSub : public d2d::LytBase_c { +public: + dLytSub() {} + virtual bool build(const char *name, m2d::ResAccIf_c *acc) override { + mpName = name; + d2d::LytBase_c::build(name, acc); + } + + const char *getName() const { + return mpName; + } +private: + /// This name is stored by `build` and usually accessed by dLytMeters' getName functions + const char *mpName; +}; + + +#endif diff --git a/include/d/lyt/d_structd.h b/include/d/lyt/d_structd.h new file mode 100644 index 00000000..9b599fda --- /dev/null +++ b/include/d/lyt/d_structd.h @@ -0,0 +1,60 @@ +#ifndef D_LYT_STRUCTD_H +#define D_LYT_STRUCTD_H + +#include +#include +#include + +namespace d2d { + +struct dLytStructD_Base { + dLytStructD_Base() + : field_0x0C(0), field_0x10(0), field_0x14(0), field_0x015(0), field_0x016(0) {} + virtual ~dLytStructD_Base(); + TListNode mNode; + 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 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; +}; + +class dLytStructDList { +public: + dLytStructDList(); + static dLytStructDList *create(EGG::Heap *heap); + + static dLytStructDList *sInstance; + + void appendToList1(dLytStructD *other); + void removeFromList1(dLytStructD *other); + + void appendToList2(dLytStructD *other); + void removeFromList2(dLytStructD *other); + +private: + TList mList1; + TList mList2; + bool field_0x18; +}; + +} // namespace d2d + +#endif diff --git a/include/d/lyt/d_textbox.h b/include/d/lyt/d_textbox.h index 615b83a8..2bcf8ee1 100644 --- a/include/d/lyt/d_textbox.h +++ b/include/d/lyt/d_textbox.h @@ -1,8 +1,12 @@ #ifndef D_LYT_TEXTBOX_H #define D_LYT_TEXTBOX_H +#include #include + +extern "C" void *lbl_805753B0; + class dTextBox_c : public nw4r::lyt::TextBox { friend class dWindow_c; @@ -11,8 +15,41 @@ public: f32 GetLineWidth(f32 *pOutSpacing); + void setLytBase(d2d::LytBase_c *lytBase) { + mpLytBase = lytBase; + } + + void SetScale(float scale) { + nw4r::math::VEC2 value = GetScale(); + value.x = GetScale().x * scale; + value.y = GetScale().y * scale; + mScale = scale; + MySetScale(value); + nw4r::lyt::TextBox::SetScale(value); + } + + + static inline f32 GetTranslateX1() { + if (lbl_805753B0 != nullptr) { + return GetTranslateX1_(); + } else { + return 0.0f; + } + } + + static f32 GetTranslateX1_(); + + // @bug: This does not implement UT's RTTI, so casts to dTextBox_c will + // succeed even if all you have is a lyt::TextBox private: - u8 field_0x104[0x204 - 0x104]; + + void MySetScale(const nw4r::math::VEC2 &value); + + d2d::LytBase_c *mpLytBase; + u8 field_0x108[0x118 - 0x108]; + /* 0x118 */ nw4r::math::VEC2 mTextScale; + /* 0x120 */ f32 mScale; + u8 field_0x124[0x204 - 0x124]; }; #endif diff --git a/include/d/lyt/d_window.h b/include/d/lyt/d_window.h index 1818e8b5..ab7fed76 100644 --- a/include/d/lyt/d_window.h +++ b/include/d/lyt/d_window.h @@ -11,6 +11,9 @@ public: virtual ~dWindow_c() {} void UpdateSize(dTextBox_c *textBox, f32 f); + // @bug: This does not implement UT's RTTI, so casts to dWindow_c will + // succeed even if all you have is a lyt::Window + private: UNKWORD field_0x108; }; diff --git a/include/d/lyt/meter/d_lyt_meter.h b/include/d/lyt/meter/d_lyt_meter.h new file mode 100644 index 00000000..09e24e64 --- /dev/null +++ b/include/d/lyt/meter/d_lyt_meter.h @@ -0,0 +1,23 @@ +#ifndef D_LYT_METER_H +#define D_LYT_METER_H + +#include +#include +#include + +class dLytMeter_c { +public: + dLytMeter_c(); + virtual ~dLytMeter_c() {} + + d2d::ResAccIf_c mResAcc; + d2d::LytBase_c mLyt; + d2d::AnmGroup_c mAnmGroups[34]; + // Meters... + dLytMeterRemoconBg_c mRemoCon; + LytMeterGroup mMeters; + +}; + + +#endif diff --git a/include/d/lyt/meter/d_lyt_meter_base.h b/include/d/lyt/meter/d_lyt_meter_base.h new file mode 100644 index 00000000..4591a179 --- /dev/null +++ b/include/d/lyt/meter/d_lyt_meter_base.h @@ -0,0 +1,46 @@ +#ifndef D_LYT_METER_BASE_H +#define D_LYT_METER_BASE_H + +#include + +namespace d2d { +class ResAccIf_c; +} + +class dLytMeterBase { +public: + dLytMeterBase() : field_0x04(false), field_0x05(0) {} + virtual ~dLytMeterBase() {} + virtual bool build(d2d::ResAccIf_c *resAcc) = 0; + virtual bool LytMeter0x10() = 0; + virtual bool LytMeter0x14() = 0; + virtual nw4r::lyt::Pane *getPane() = 0; + virtual void *LytMeter0x1C() = 0; + virtual const char *getName() const = 0; + virtual bool LytMeter0x24() const { + return field_0x04; + } + virtual void LytMeter0x28(bool arg) { + field_0x04 = arg; + } + virtual u8 LytMeter0x2C() const { + return field_0x05; + } + + virtual void LytMeter0x30(u8 arg) { + field_0x05 = arg; + } + + bool field_0x04; + u8 field_0x05; +}; + +struct LytMeterListNode { + nw4r::ut::LinkListNode mNode; + dLytMeterBase *mpMeter; + nw4r::lyt::Pane *mpPane; +}; + +typedef nw4r::ut::LinkList LytMeterGroup; + +#endif diff --git a/include/d/lyt/meter/d_lyt_meter_remocon_bg.h b/include/d/lyt/meter/d_lyt_meter_remocon_bg.h new file mode 100644 index 00000000..bc11cb2e --- /dev/null +++ b/include/d/lyt/meter/d_lyt_meter_remocon_bg.h @@ -0,0 +1,37 @@ +#ifndef D_LYT_METER_REMOCON_BH_H +#define D_LYT_METER_REMOCON_BH_H + +#include +#include +#include +#include +#include + +class dLytMeterRemoconBg_c : public dLytMeterBase { +public: + dLytMeterRemoconBg_c(); + virtual bool build(d2d::ResAccIf_c *resAcc) override; + virtual bool LytMeter0x10() override; + virtual bool LytMeter0x14() override; + virtual nw4r::lyt::Pane *getPane() override; + virtual void *LytMeter0x1C() override; + virtual const char *getName() const override; + + virtual ~dLytMeterRemoconBg_c(); +private: + STATE_FUNC_DECLARE(dLytMeterRemoconBg_c, Wait); + STATE_FUNC_DECLARE(dLytMeterRemoconBg_c, On); + STATE_FUNC_DECLARE(dLytMeterRemoconBg_c, Active); + STATE_FUNC_DECLARE(dLytMeterRemoconBg_c, Off); + + UI_STATE_MGR_DECLARE(dLytMeterRemoconBg_c); + dLytSub mLyt; + /* 0xD8 */ nw4r::lyt::Pane *mpPane; + /* 0xDC */ u32 field_0xDC; + /* 0xE0 */ u32 field_0xE0; + /* 0xE4 */ u32 field_0xE4; + /* 0xE8 */ u32 field_0xE8; + /* 0xEC */ bool field_0xEC; +}; + +#endif diff --git a/include/d/tg/d_t_rock_boat.h b/include/d/tg/d_t_rock_boat.h index 28d0d669..54194752 100644 --- a/include/d/tg/d_t_rock_boat.h +++ b/include/d/tg/d_t_rock_boat.h @@ -1,17 +1,12 @@ #ifndef D_T_ROCK_BOAT #define D_T_ROCK_BOAT -#include +#include #include #include #include -class dTgAbs_c : public dAcBase_c { -public: - virtual ~dTgAbs_c() {} -}; - -class dTgRockBoat_c : public dTgAbs_c { +class dTgRockBoat_c : public dTg_c { public: dTgRockBoat_c() : mStateMgr(*this, sStateID::null) {} virtual ~dTgRockBoat_c() {} diff --git a/include/m/m2d.h b/include/m/m2d.h index 1d383c23..daf4aa6f 100644 --- a/include/m/m2d.h +++ b/include/m/m2d.h @@ -46,6 +46,7 @@ protected: class FrameCtrl_c { public: + FrameCtrl_c() : mEndFrame(0.0f), mCurrFrame(0.0f), mPrevFrame(0.0f), mRate(1.0f) {} virtual ~FrameCtrl_c(); void play(); diff --git a/include/nw4r/lyt/lyt_group.h b/include/nw4r/lyt/lyt_group.h index 959d1aad..8b143732 100644 --- a/include/nw4r/lyt/lyt_group.h +++ b/include/nw4r/lyt/lyt_group.h @@ -15,6 +15,8 @@ struct PaneLink { }; } // namespace detail +typedef ut::LinkList PaneList; + class Group { public: Group(const res::Group *pResGroup, Pane *pRootPane); @@ -23,7 +25,7 @@ public: void AppendPane(Pane *pPane); void Init(); - ut::LinkList *GetPaneList() { + PaneList *GetPaneList() { return &mPaneListLink; } bool IsUserAllocated() const { @@ -35,7 +37,7 @@ public: private: ut::LinkListNode mLink; // at 0x04 - ut::LinkList mPaneListLink; // at 0x0C + PaneList mPaneListLink; // at 0x0C char mName[NW4R_RES_NAME_SIZE + 1]; // at 0x18 bool mbUserAllocated; // at 0x29 u8 mPadding[2]; // at 0x2A diff --git a/include/nw4r/lyt/lyt_resources.h b/include/nw4r/lyt/lyt_resources.h index 644e6c3f..c764d384 100644 --- a/include/nw4r/lyt/lyt_resources.h +++ b/include/nw4r/lyt/lyt_resources.h @@ -143,7 +143,35 @@ struct Group { u16 paneNum; // at 0x18 u16 padding; // at 0x1A }; + +enum ExtUserDataType { + TYPE_STRING, + TYPE_INT, + TYPE_FLOAT, +}; + struct ExtUserData { + inline const char *GetString() const { + return detail::ConvertOffsToPtr(this, datOffs); + } + + inline float GetFloat() const { + return *detail::ConvertOffsToPtr(this, datOffs); + } + + inline int GetInt() const { + return *detail::ConvertOffsToPtr(this, datOffs); + } + + inline const char *GetName() const { + return nameOffs != 0 ? detail::ConvertOffsToPtr(this, nameOffs) : nullptr; + } + + inline ExtUserDataType GetType() const { + return (ExtUserDataType)type; + } + +private: u32 nameOffs; // at 0x00 u32 datOffs; // at 0x04 u16 numEntries; // at 0x08 diff --git a/include/nw4r/lyt/lyt_textBox.h b/include/nw4r/lyt/lyt_textBox.h index 6a56a0fc..5e907447 100644 --- a/include/nw4r/lyt/lyt_textBox.h +++ b/include/nw4r/lyt/lyt_textBox.h @@ -53,6 +53,25 @@ public: void SetFontSize(const Size &fontSize) { mFontSize = fontSize; } + + + f32 GetCharSpace() const { + return mCharSpace; + } + + void SetCharSpace(f32 charSpace) { + mCharSpace = charSpace; + } + + + f32 GetLineSpace() const { + return mLineSpace; + } + + void SetLineSpace(f32 lineSpace) { + mLineSpace = lineSpace; + } + ut::TagProcessorBase *GetTagProcessor() const { return mpTagProcessor; } diff --git a/include/nw4r/lyt/lyt_types.h b/include/nw4r/lyt/lyt_types.h index 9648fde0..22c626d4 100644 --- a/include/nw4r/lyt/lyt_types.h +++ b/include/nw4r/lyt/lyt_types.h @@ -34,18 +34,18 @@ inline void SetBit(T *bits, int pos, bool val) { } template -T GetBits(T bits, int pos, int len) { +inline T GetBits(T bits, int pos, int len) { u32 mask = T(1 << pos); return bits & mask; } template -T *ConvertOffsToPtr(void *baseAddress, unsigned int offset) { +inline T *ConvertOffsToPtr(void *baseAddress, unsigned int offset) { return (T *)((u32)baseAddress + offset); } template -const T *ConvertOffsToPtr(const void *baseAddress, unsigned int offset) { +inline const T *ConvertOffsToPtr(const void *baseAddress, unsigned int offset) { return (const T *)((u32)baseAddress + offset); } diff --git a/include/s/s_State.hpp b/include/s/s_State.hpp index 9ec6614a..54559191 100644 --- a/include/s/s_State.hpp +++ b/include/s/s_State.hpp @@ -22,4 +22,7 @@ void dummy_GetStateID() { \ mStateMgr.getStateID(); \ } + +#define UI_STATE_MGR_DECLARE(class_name) \ + sFStateMgr_c mStateMgr; #endif diff --git a/include/sized_string.h b/include/sized_string.h index c1abcd5f..e5c63521 100644 --- a/include/sized_string.h +++ b/include/sized_string.h @@ -3,6 +3,8 @@ #include +extern "C" bool strequals(const char *a, const char *b); + /** * A statically sized string buffer used for resource * identification where strings are guaranteed to be short. @@ -23,11 +25,11 @@ struct SizedString { char mChars[Size]; - char *operator&() { + operator char *() { return mChars; } - const char *operator&() const { + operator const char *() const { return mChars; } @@ -57,6 +59,10 @@ struct SizedString { } } + bool operator==(const char* other) const { + return strequals(mChars, other); + } + int sprintf(const char *fmt, ...) { va_list args; va_start(args, fmt); diff --git a/src/d/d_dvd.cpp b/src/d/d_dvd.cpp index 3afda769..68e4a562 100644 --- a/src/d/d_dvd.cpp +++ b/src/d/d_dvd.cpp @@ -31,10 +31,10 @@ void *loader_c::request(const char *path, u8 mountDirection, EGG::Heap *heap) { mpHeap = heap != nullptr ? heap : mDvd::getArchiveHeap(); SizedString<128> buf; buf.sprintf("US%s", path); - if (!mDvd::IsExistPath(&buf)) { + if (!mDvd::IsExistPath(buf)) { buf.sprintf("%s", path); } - mpCommand = mDvd_toMainRam_normal_c::create(&buf, mountDirection, heap); + mpCommand = mDvd_toMainRam_normal_c::create(buf, mountDirection, heap); } if (mpCommand != nullptr && mpCommand->mStatus != 0) { mpBuffer = mpCommand->mDataPtr; diff --git a/src/d/d_font_manager.cpp b/src/d/d_font_manager.cpp index c4588a9f..2e15c4f8 100644 --- a/src/d/d_font_manager.cpp +++ b/src/d/d_font_manager.cpp @@ -54,7 +54,7 @@ const char *dFontMng_c::getFontPath(u8 idx) { } else { TEMP_FONT_NAME.sprintf("/US/Font/%s/%s", getUsedLanguageString(), systemFonts[idx]); } - return &TEMP_FONT_NAME; + return TEMP_FONT_NAME; } bool dFontMng_c::create() { diff --git a/src/d/d_rawarchive.cpp b/src/d/d_rawarchive.cpp index b69e1a2b..3d4f43b3 100644 --- a/src/d/d_rawarchive.cpp +++ b/src/d/d_rawarchive.cpp @@ -112,7 +112,7 @@ bool dRawArcEntry_c::loadArcFromDiskChecked(const char *fileName, const char *di SizedString<128> path; if (checkArcExistsOnDiskInner(path, fileName, dirName)) { - return loadArcFromDisk(fileName, &path, mountDirection, heap); + return loadArcFromDisk(fileName, path, mountDirection, heap); } return false; } @@ -133,9 +133,9 @@ BOOL dRawArcEntry_c::checkArcExistsOnDisk(const char *fileName, const char *dirN BOOL dRawArcEntry_c::checkArcExistsOnDiskInner(SizedString<128> &path, const char *fileName, const char *dirName) { path.sprintf("/US/%s/%s.arc", dirName, fileName); - if (!mDvd::IsExistPath(&path)) { + if (!mDvd::IsExistPath(path)) { path.sprintf("/%s/%s.arc", dirName, fileName); - if (!mDvd::IsExistPath(&path)) { + if (!mDvd::IsExistPath(path)) { return false; } } @@ -347,12 +347,10 @@ int dRawArcTable_c::ensureAllEntriesLoaded() { return 0; } -extern "C" bool strequals(const char *, const char *); - dRawArcEntry_c *dRawArcTable_c::findEntry(const char *name) const { dRawArcEntry_c *entry = mpEntries; for (int i = 0; i < mCount; i++) { - if (entry->isReferenced() && strequals(entry->name(), name)) { + if (entry->isReferenced() && entry->name() == name) { return entry; } entry++; diff --git a/src/d/lyt/d2d.cpp b/src/d/lyt/d2d.cpp index d72ea051..44a926a2 100644 --- a/src/d/lyt/d2d.cpp +++ b/src/d/lyt/d2d.cpp @@ -9,6 +9,7 @@ #include #include #include +#include using namespace nw4r::lyt; @@ -154,9 +155,17 @@ bool Layout_c::Build(const void *lytResBuf, ResourceAccessor *pResAcsr) { return true; } +nw4r::lyt::AnimTransform *Layout_c::CreateAnimTransform(const void *animResBuf, nw4r::lyt::ResourceAccessor *pResAcsr) { + nw4r::lyt::AnimTransform *transform = nw4r::lyt::Layout::CreateAnimTransform(animResBuf, pResAcsr); + if (transform != nullptr) { + mAnimTransList.Erase(transform); + } + return transform; +} + 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), + mDrawInfo.SetLocationAdjustScale(nw4r::math::VEC2((f32)EGG::Screen::GetSizeXMax(EGG::Screen::TV_MODE_1) / + (f32)EGG::Screen::GetSizeXMax(EGG::Screen::TV_MODE_2), 1.0f)); mDrawInfo.SetLocationAdjust(true); } @@ -189,7 +198,29 @@ void Multi_c::calcAfter() { mLayout.CalculateMtx(mDrawInfo); } -void Multi_c::draw() {} +extern "C" bool NeedsScreenAdjustment(); + +// Largerly copied from m2d::Simple_c::draw +void Multi_c::draw() { + nw4r::ut::Rect r = mLayout.GetLayoutRect(); + f32 near = 0.0f; + f32 far = 500.0f; + EGG::Screen s; + bool needsAdjust = NeedsScreenAdjustment(); + f32 f1 = EGG::Screen::GetSizeXMax(EGG::Screen::TV_MODE_2); + f32 f2 = EGG::Screen::GetSizeXMax(EGG::Screen::TV_MODE_1); + + f32 left = needsAdjust ? f1 * r.left / f2 : r.left; + f32 right = needsAdjust ? f1 * r.right / f2 : r.right; + s.SetProjectionType(EGG::Frustum::PROJ_ORTHO); + s.ResetOrthographic(r.top, r.bottom, left, right, near, far); + if (needsAdjust) { + s.SetScale(nw4r::math::VEC3(f2 / f1, 1.0f, 1.0f)); + } + s.SetProjectionGX(); + mDrawInfo.SetMultipleViewMtxOnDraw(false); + mLayout.Draw(mDrawInfo); +} bool Multi_c::build(const char *name, m2d::ResAccIf_c *acc) { if (mLayout.GetRootPane() != nullptr) { @@ -241,14 +272,518 @@ void Multi_c::unbindAnims() { LytBase_c::LytBase_c() : mpMsbtInfo(nullptr) {} -extern "C" void libms__LMS_CloseMessage(void *); LytBase_c::~LytBase_c() { if (mpMsbtInfo != nullptr) { - libms__LMS_CloseMessage(mpMsbtInfo); + LMS_CloseMessage(mpMsbtInfo); } } -bool AnmGroup_c::init(const char *fileName, m2d::ResAccIf_c *resAcc, d2d::Layout_c *layout, const char *groupName) { +extern "C" const char *getUsedLanguageString(); +extern "C" nw4r::ut::TagProcessorBase *GLOBAL_TEXT_MANAGER; + +bool LytBase_c::build(const char *name, m2d::ResAccIf_c *acc) { + if (mLayout.GetRootPane() != nullptr) { + return true; + } + + mFlags |= 0x1; + + if (acc == nullptr) { + acc = mpResAcc; + if (acc == nullptr) { + return false; + } + } + + void *resource = acc->getAccessor()->GetResource(0, name, nullptr); + if (resource == nullptr) { + return false; + } + + // Copy the name, and once we reach a '.' append 'msbt' + char fileName[0x32]; + int suffixIdx = 0; + for (int i = 0; i < 0x32; i++) { + if (suffixIdx == 0) { + if (name[i] == '.') { + suffixIdx = 1; + } + fileName[i] = name[i]; + } else if (suffixIdx == 1) { + fileName[i] = 'm'; + suffixIdx = 2; + } else if (suffixIdx == 2) { + fileName[i] = 's'; + suffixIdx = 3; + } else if (suffixIdx == 3) { + fileName[i] = 'b'; + suffixIdx = 4; + } else if (suffixIdx == 4) { + fileName[i] = 't'; + suffixIdx = 5; + } else { + fileName[i] = '\0'; + suffixIdx = 6; + } + } + + if (suffixIdx < 6) { + return false; + } + + SizedString<0x80> localizedName; + localizedName.sprintf("%s_%s", getUsedLanguageString(), fileName); + + void *data = acc->getAccessor()->GetResource(0, localizedName, nullptr); + if (data == nullptr) { + mpMsbtInfo = nullptr; + } else { + mpMsbtInfo = LMS_InitMessage(data); + } + + bool ok = mLayout.Build(resource, acc->getAccessor()); + if (ok) { + mLayout.SetTagProcessor(GLOBAL_TEXT_MANAGER); + calc(); + setPropertiesRecursive(mLayout.GetRootPane(), -9999.0f, -9999.0f, -9999.0f, -9999.0f, -9999.0f); + } + + return ok; +} + +dTextBox_c *LytBase_c::getTextBox(const char *name) { + nw4r::lyt::Pane *pane = findPane(name); + if (pane != nullptr) { + nw4r::ut::DynamicCast(pane)->setLytBase(this); + return nw4r::ut::DynamicCast(pane); + } + + return nullptr; +} + +dWindow_c *LytBase_c::getWindow(const char *name) { + nw4r::lyt::Pane *pane = findPane(name); + if (pane != nullptr) { + return nw4r::ut::DynamicCast(pane); + } + + return nullptr; +} + +dTextBox_c *LytBase_c::getSizeBoxInWindow(const char *windowName) { + nw4r::lyt::Pane *pane = findPane(windowName); + if (pane != nullptr) { + dWindow_c *window = nw4r::ut::DynamicCast(pane); + return getTextBoxViaUserData(window, "size"); + } + return nullptr; +} + +dTextBox_c *LytBase_c::getTextBoxViaUserData(nw4r::lyt::Pane *pane, const char *name) { + u16 num = pane->GetExtUserDataNum(); + const nw4r::lyt::res::ExtUserData *dat; + dTextBox_c *textBox; + if (num == 0) { + goto fail; + } + + dat = pane->FindExtUserDataByName(name); + if (dat == nullptr) { + goto fail; + } + + if (dat->GetType() != nw4r::lyt::res::TYPE_STRING) { + goto fail; + } + + textBox = getTextBox(dat->GetString()); + if (textBox == nullptr) { + goto fail; + } + + return textBox; + +fail: + return nullptr; +} + +void LytBase_c::setPropertiesRecursive(nw4r::lyt::Pane *pane, f32 posX, f32 posY, f32 scale, f32 spaceX, + f32 spaceY) { + u16 num = pane->GetExtUserDataNum(); + if (num != 0) { + const nw4r::lyt::res::ExtUserData *list = pane->GetExtUserData(); + for (int i = 0; i < num; i++) { + SizedString<0x40> userDatName; + userDatName = list->GetName(); + if (userDatName == "c11n-posX-1" && list->GetType() == nw4r::lyt::res::TYPE_FLOAT) { + posX = list->GetFloat(); + } + if (userDatName == "c11n-posY-1" && list->GetType() == nw4r::lyt::res::TYPE_FLOAT) { + posY = list->GetFloat(); + } + if (userDatName == "c11n-scale-1" && list->GetType() == nw4r::lyt::res::TYPE_FLOAT) { + scale = list->GetFloat(); + } + if (userDatName == "c11n-spaceX-1" && list->GetType() == nw4r::lyt::res::TYPE_FLOAT) { + spaceX = list->GetFloat(); + } + if (userDatName == "c11n-spaceY-1" && list->GetType() == nw4r::lyt::res::TYPE_FLOAT) { + spaceY = list->GetFloat(); + } + + list++; + } + } + + setProperties(pane, posX, posY, scale, spaceX, spaceY); + for (nw4r::ut::LinkList::Iterator it = pane->GetChildList()->GetBeginIter(); + it != pane->GetChildList()->GetEndIter(); ++it) { + setPropertiesRecursive(&*it, posX, posY, scale, spaceX, spaceY); + } +} + +extern "C" const char *fn_801B2600(const char *); +extern "C" void fn_800AF930(dTextBox_c *, const char *); +extern "C" void fn_800B0F40(dTextBox_c *); + +// NOTE: This function uses `textBox->GetTranslateX1()` as a general placeholder to figure +// out the details first. In reality these are all different functions! +void LytBase_c::setProperties(nw4r::lyt::Pane *pane, f32 posX, f32 posY, f32 scale, f32 spaceX, f32 spaceY) { + if (pane->GetName()[0] != 'T') { + return; + } + + dTextBox_c *textBox = nw4r::ut::DynamicCast(pane); + if (textBox == nullptr) { + return; + } + + textBox->AllocStringBuffer(0x200); + textBox->setLytBase(this); + fn_800B0F40(textBox); + + if (posX != -9999.0f || posY != -9999.0f) { + if (posX == -9999.0f) { + posX = 0.0f; + } + if (posY == -9999.0f) { + posY = 0.0f; + } + nw4r::math::VEC3 t1 = textBox->GetTranslate(); + t1.x += posX; + t1.y += posY; + textBox->SetTranslate(t1); + } + + nw4r::math::VEC3 t2 = textBox->GetTranslate(); + t2.x += textBox->GetTranslateX1(); + t2.y += textBox->GetTranslateX1(); + textBox->SetTranslate(t2); + + + if (scale != -9999.0f) { + const nw4r::ut::Font *f = textBox->GetFont(); + if (f != nullptr) { + // VEC2 internally copied via GPRs here, should be FPRs + textBox->SetScale(scale * 0.01f); + } + } else { + const nw4r::ut::Font *f = textBox->GetFont(); + if (f != nullptr) { + // VEC2 internally copied via GPRs here, should be FPRs + textBox->SetScale(textBox->GetTranslateX1()); + } + } + + + f32 f4 = 0.0f; + f32 f6 = 0.0f; + + if (spaceX != -9999.0f) { + textBox->SetCharSpace(spaceX); + } else { + f6 = textBox->GetTranslateX1(); + } + + if (spaceY != -9999.0f) { + textBox->SetLineSpace(spaceY); + } else { + f4 = textBox->GetTranslateX1(); + } + + textBox->SetCharSpace(f6 + textBox->GetCharSpace() + textBox->GetTranslateX1()); + textBox->SetLineSpace(f4 + textBox->GetLineSpace() + textBox->GetTranslateX1()); + fn_800AB930(textBox); +} + + +bool LytBase_c::fn_800AB930(dTextBox_c *box) { + return fn_800AB9A0(box, -1); +} + +bool LytBase_c::fn_800AB940(const char *name, int arg) { + dTextBox_c *box = getTextBox(name); + if (box == nullptr) { + return false; + } + + return fn_800AB9A0(box, arg); +} + +bool LytBase_c::fn_800AB9A0(dTextBox_c *textbox, int arg) { + if (getMsbtInfo() == nullptr) { + return false; + } + u16 num = textbox->GetExtUserDataNum(); + if (num == 0) { + return false; + } + u32 found = 0; + s32 ty = 2; + const nw4r::lyt::res::ExtUserData *list = textbox->GetExtUserData(); + for (int i = 0; i < num; i++) { + SizedString<0x40> userDatName; + userDatName = list->GetName(); + if (userDatName == "embed" && list->GetType() == nw4r::lyt::res::TYPE_INT) { + found = 1; + ty = 0; + break; + } + + if (userDatName == "copy" && list->GetType() == nw4r::lyt::res::TYPE_STRING) { + found = 1; + ty = 1; + break; + } + list++; + } + + if (found != 1) { + return false; + } + + if (ty == 1) { + dTextBox_c *otherBox = getTextBox(list->GetString()); + if (otherBox != nullptr) { + return fn_800ABB80(textbox, otherBox, arg); + } + } else { + return fn_800ABCE0(list, textbox, textbox, arg); + } + return false; +} + +bool LytBase_c::fn_800ABB80(dTextBox_c *textbox1, dTextBox_c *textbox2, int arg) { + u16 num = textbox2->GetExtUserDataNum(); + if (num == 0) { + return false; + } + u32 found = 0; + const nw4r::lyt::res::ExtUserData *list = textbox2->GetExtUserData(); + for (int i = 0; i < num; i++) { + SizedString<0x40> userDatName; + userDatName = list->GetName(); + if (userDatName == "embed" && list->GetType() == nw4r::lyt::res::TYPE_INT) { + found = 1; + break; + } + list++; + } + + if (found != 1) { + return false; + } + return fn_800ABCE0(list, textbox1, textbox2, arg); +} + +bool LytBase_c::fn_800ABCE0(const nw4r::lyt::res::ExtUserData *userDatum, dTextBox_c *textbox1, dTextBox_c *textbox2, + int arg) { + int userDatInt = userDatum->GetInt(); + SizedString<0x40> str1; + SizedString<0x40> str2; + + str1 = textbox2->GetName(); + if (userDatInt != 0) { + userDatInt = 0; + if (arg != -1) { + userDatInt = arg; + } + str2.sprintf(":%02d", userDatInt); + // TODO this operator is not behaving correctly here - there's + // an additional null check, and the source string address is + // computed twice via stack instead of once. + str1 += str2; + } + + const char *text = LMS_GetTextByLabel(getMsbtInfo(), str1); + if (text == nullptr) { + return false; + } + + fn_800AF930(textbox1, fn_801B2600(text)); + return true; +} + +// Now largely the same functions again, but with an additional argument +bool LytBase_c::fn_800ABE50(dTextBox_c *textbox, int arg, void *unk) { + if (getMsbtInfo() == nullptr) { + return false; + } + u16 num = textbox->GetExtUserDataNum(); + if (num == 0) { + return false; + } + u32 found = 0; + s32 ty = 2; + const nw4r::lyt::res::ExtUserData *list = textbox->GetExtUserData(); + for (int i = 0; i < num; i++) { + SizedString<0x40> userDatName; + userDatName = list->GetName(); + if (userDatName == "embed" && list->GetType() == nw4r::lyt::res::TYPE_INT) { + found = 1; + ty = 0; + break; + } + + if (userDatName == "copy" && list->GetType() == nw4r::lyt::res::TYPE_STRING) { + found = 1; + ty = 1; + break; + } + list++; + } + + if (found != 1) { + return false; + } + + if (ty == 1) { + dTextBox_c *otherBox = getTextBox(list->GetString()); + if (otherBox != nullptr) { + return fn_800AC040(textbox, otherBox, arg, unk); + } + } else { + return fn_800AC1AC(list, textbox, textbox, arg, unk); + } + return false; +} + +bool LytBase_c::fn_800AC040(dTextBox_c *textbox1, dTextBox_c *textbox2, int arg, void *unk) { + u16 num = textbox2->GetExtUserDataNum(); + if (num == 0) { + return false; + } + u32 found = 0; + const nw4r::lyt::res::ExtUserData *list = textbox2->GetExtUserData(); + for (int i = 0; i < num; i++) { + SizedString<0x40> userDatName; + userDatName = list->GetName(); + if (userDatName == "embed" && list->GetType() == nw4r::lyt::res::TYPE_INT) { + found = 1; + break; + } + list++; + } + + if (found != 1) { + return false; + } + return fn_800AC1AC(list, textbox1, textbox2, arg, unk); +} + +extern "C" void fn_800AF840(dTextBox_c *textbox1, MsbtInfo *, const char *, int arg, void *unk); + +bool LytBase_c::fn_800AC1AC(const nw4r::lyt::res::ExtUserData *userDatum, dTextBox_c *textbox1, dTextBox_c *textbox2, int arg, void *unk) { + int userDatInt = userDatum->GetInt(); + SizedString<0x40> str1; + SizedString<0x40> str2; + + str1 = textbox2->GetName(); + if (userDatInt != 0) { + str2.sprintf(":%02d", 0); + // TODO this operator is not behaving correctly here - there's + // an additional null check, and the source string address is + // computed twice via stack instead of once. + str1 += str2; + } + + fn_800AF840(textbox1, getMsbtInfo(), str1, arg, unk); + return true; +} + +MsbtInfo *LytBase_c::getMsbtInfo() const { + return mpMsbtInfo; +} + +nw4r::lyt::Group *LytBase_c::findGroupByName(const char *name) { + nw4r::lyt::Group *ret = nullptr; + if (mLayout.GetGroupContainer() != nullptr) { + ret = mLayout.GetGroupContainer()->FindGroupByName(name); + } + return ret; +} + +bool hasSameBaseName(const char *left, const char *right) { + // A for loop turns this into a bdnz + bool same = true; + int i = 0; + while (true) { + if (i >= 0x1E) { + same = false; + break; + } + char a = *left; + char b = *right; + if (a == '\0' && b == '\0') { + break; + } + if (a != b) { + if (b != '.') { + same = false; + break; + } + break; + } + left++; + right++; + i++; + } + + return same; +} + +char *sRef = "ref"; + + +void LytBase_c::linkMeters(nw4r::lyt::Group *group, LytMeterGroup *meterGroup) { + // single regswap + nw4r::ut::LinkList::Iterator beginIt = meterGroup->GetBeginIter(); + nw4r::ut::LinkList::Iterator endIt = meterGroup->GetEndIter(); + + for (nw4r::lyt::PaneList::Iterator paneIt = group->GetPaneList()->GetBeginIter(); + paneIt != group->GetPaneList()->GetEndIter(); ++paneIt) { + nw4r::lyt::Pane *pane = paneIt->mTarget; + int num = pane->GetExtUserDataNum(); + if (num != 0) { + const nw4r::lyt::res::ExtUserData *dat = pane->FindExtUserDataByName(sRef); + if (dat != nullptr && dat->GetType() == nw4r::lyt::res::TYPE_STRING) { + for (nw4r::ut::LinkList::Iterator it = beginIt; it != endIt; ++it) { + dLytMeterBase *meter = it->mpMeter; + if (!meter->LytMeter0x24()) { + if (hasSameBaseName(dat->GetString(), meter->getName())) { + it->mpPane = pane; + pane->AppendChild(meter->getPane()); + meter->LytMeter0x28(true); + break; + } + } + } + } + } + } +} + +bool AnmGroupBase_c::init(const char *fileName, m2d::ResAccIf_c *resAcc, d2d::Layout_c *layout, const char *groupName) { if (layout->GetGroupContainer() == nullptr) { return false; } @@ -261,7 +796,7 @@ bool AnmGroup_c::init(const char *fileName, m2d::ResAccIf_c *resAcc, d2d::Layout return init(transform, fileName, resAcc, group); } -bool AnmGroup_c::init(nw4r::lyt::AnimTransform *transform, const char *name, m2d::ResAccIf_c *acc, +bool AnmGroupBase_c::init(nw4r::lyt::AnimTransform *transform, const char *name, m2d::ResAccIf_c *acc, nw4r::lyt::Group *group) { if (transform == nullptr) { return false; @@ -286,7 +821,7 @@ bool AnmGroup_c::init(nw4r::lyt::AnimTransform *transform, const char *name, m2d return true; } -bool AnmGroup_c::fn_800AC6D0(bool b) { +bool AnmGroupBase_c::fn_800AC6D0(bool b) { nw4r::lyt::AnimTransform *anmTransform = mpAnmTransform; if (anmTransform == nullptr) { return false; @@ -314,7 +849,7 @@ bool AnmGroup_c::fn_800AC6D0(bool b) { return true; } -bool AnmGroup_c::fn_800AC7D0() { +bool AnmGroupBase_c::fn_800AC7D0() { nw4r::lyt::AnimTransform *anmTransform = mpAnmTransform; if (anmTransform == nullptr) { return false; @@ -330,11 +865,11 @@ bool AnmGroup_c::fn_800AC7D0() { return true; } -bool AnmGroup_c::fn_800AC860() { +bool AnmGroupBase_c::fn_800AC860() { return true; } -void AnmGroup_c::fn_800AC870(bool b) { +void AnmGroupBase_c::setAnimEnable(bool b) { nw4r::lyt::Group *group = mpGroup; nw4r::lyt::AnimTransform *anmTransform = mpAnmTransform; nw4r::lyt::SetAnimationEnable(group, anmTransform, b, mAnmResource.IsDescendingBind()); @@ -345,19 +880,19 @@ void AnmGroup_c::fn_800AC870(bool b) { } } -void AnmGroup_c::setAnmFrame(f32 arg) { +void AnmGroupBase_c::setAnmFrame(f32 arg) { mpAnmTransform->SetFrame(arg); } -void AnmGroup_c::syncAnmFrame() { +void AnmGroupBase_c::syncAnmFrame() { setAnmFrame(mpFrameCtrl->getFrame()); } -void AnmGroup_c::setForward() { +void AnmGroupBase_c::setForward() { mpFrameCtrl->setForward(); } -void AnmGroup_c::setBackward() { +void AnmGroupBase_c::setBackward() { mpFrameCtrl->setBackward(); } diff --git a/src/d/lyt/d_lyt_battery.cpp b/src/d/lyt/d_lyt_battery.cpp new file mode 100644 index 00000000..b0691f3f --- /dev/null +++ b/src/d/lyt/d_lyt_battery.cpp @@ -0,0 +1,156 @@ +#include +#include +#include +#include + +STATE_DEFINE(dLytBattery_c, Off); +STATE_DEFINE(dLytBattery_c, In); +STATE_DEFINE(dLytBattery_c, On); +STATE_DEFINE(dLytBattery_c, None); +STATE_DEFINE(dLytBattery_c, Out); + +static const d2d::LytBrlanMapping brlanMap[] = { + { "denchi_00_in.brlan", "G_inOut_00"}, + {"denchi_00_none.brlan", "G_inOut_00"}, + {"denchi_00_loop.brlan", "G_loop_00"}, + { "denchi_00_out.brlan", "G_inOut_00"}, +}; + +#define LYT_BATTERY_ANIM_IN 0 +#define LYT_BATTERY_ANIM_NONE 1 +#define LYT_BATTERY_ANIM_LOOP 2 +#define LYT_BATTERY_ANIM_OUT 3 + +bool dLytBattery_c::create() { + new dLytBattery_c(); + if (sInstance == nullptr) { + return false; + } + sInstance->init(); + return true; +} + +bool dLytBattery_c::draw() { + if (sInstance != nullptr) { + sInstance->doDraw(); + } + return true; +} + +bool dLytBattery_c::init() { + void *data = LayoutArcManager::sInstance->getLoadedData("System2D"); + mResAcc.attach(data, ""); + mLyt.setResAcc(&mResAcc); + mLyt.build("denchi_00.brlyt", nullptr); + + 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].setAnimEnable(false); + } + + mAnmGroups[LYT_BATTERY_ANIM_LOOP].setAnimEnable(true); + mStateMgr.changeState(StateID_Off); + mLyt.calc(); + mDismissManually = false; + return true; +} + +extern "C" void fn_80016200(); + +bool dLytBattery_c::doDraw() { + mStateMgr.executeState(); + if (*mStateMgr.getStateID() != StateID_Off) { + for (int i = 0; i < 4; i++) { + if (mAnmGroups[i].isFlag2()) { + mAnmGroups[i].play(); + } + } + + mLyt.calc(); + fn_80016200(); + mLyt.draw(); + } + + return true; +} + +bool dLytBattery_c::dismissManually() { + if (*mStateMgr.getStateID() != StateID_On) { + return false; + } + mDismissManually = true; + return true; +} + +extern "C" bool isLowBattery1(); +extern "C" bool isLowBattery2(); + +bool dLytBattery_c::hasEnoughBatteryCharge() { + if (!mPad::g_currentCore->mFlag.offBit(0) && (isLowBattery2() || isLowBattery1())) { + return false; + } + return true; +} + +void dLytBattery_c::initializeState_Off() {} +void dLytBattery_c::executeState_Off() { + if (!hasEnoughBatteryCharge()) { + mAnmGroups[LYT_BATTERY_ANIM_IN].setAnimEnable(true); + mAnmGroups[LYT_BATTERY_ANIM_IN].setFrame(0.0f); + mStateMgr.changeState(StateID_In); + } +} +void dLytBattery_c::finalizeState_Off() {} + +void dLytBattery_c::initializeState_In() {} +void dLytBattery_c::executeState_In() { + if (mAnmGroups[LYT_BATTERY_ANIM_IN].isEndReached()) { + mAnmGroups[LYT_BATTERY_ANIM_IN].setAnimEnable(false); + mStateMgr.changeState(StateID_On); + } +} +void dLytBattery_c::finalizeState_In() {} + +void dLytBattery_c::initializeState_On() {} +void dLytBattery_c::executeState_On() { + if (mDismissManually == true) { + mDismissManually = false; + mStateMgr.changeState(StateID_None); + } else { + if (hasEnoughBatteryCharge()) { + mAnmGroups[LYT_BATTERY_ANIM_OUT].setAnimEnable(true); + mAnmGroups[LYT_BATTERY_ANIM_OUT].setFrame(0.0f); + mStateMgr.changeState(StateID_Out); + } + } +} +void dLytBattery_c::finalizeState_On() {} + +void dLytBattery_c::initializeState_None() { + d2d::AnmGroup_c &grp = mAnmGroups[LYT_BATTERY_ANIM_NONE]; + grp.setAnimEnable(true); + grp.setFrame(0.0f); +} +void dLytBattery_c::executeState_None() { + d2d::AnmGroup_c &grp = mAnmGroups[LYT_BATTERY_ANIM_NONE]; + if (grp.isEndReached()) { + grp.setAnimEnable(false); + } + + if (hasEnoughBatteryCharge()) { + mAnmGroups[LYT_BATTERY_ANIM_OUT].setAnimEnable(true); + mAnmGroups[LYT_BATTERY_ANIM_OUT].setFrame(0.0f); + mStateMgr.changeState(StateID_Out); + } +} +void dLytBattery_c::finalizeState_None() {} + +void dLytBattery_c::initializeState_Out() {} +void dLytBattery_c::executeState_Out() { + if (mAnmGroups[LYT_BATTERY_ANIM_OUT].isEndReached()) { + mAnmGroups[LYT_BATTERY_ANIM_OUT].setAnimEnable(false); + mStateMgr.changeState(StateID_Off); + } +} +void dLytBattery_c::finalizeState_Out() {} diff --git a/src/d/lyt/common_arrow.cpp b/src/d/lyt/d_lyt_common_arrow.cpp similarity index 89% rename from src/d/lyt/common_arrow.cpp rename to src/d/lyt/d_lyt_common_arrow.cpp index 486e3c65..d28a8f91 100644 --- a/src/d/lyt/common_arrow.cpp +++ b/src/d/lyt/d_lyt_common_arrow.cpp @@ -1,4 +1,4 @@ -#include +#include #include STATE_DEFINE(dLytCommonArrow_c, None); @@ -22,8 +22,6 @@ static const d2d::LytBrlanMapping brlanMap[] = { 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, ""); @@ -34,7 +32,7 @@ bool dLytCommonArrow_c::init() { 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); + d2d::dLytStructDList::sInstance->appendToList2(&field_0x680); field_0x6A8 = mLytBase.findBounding("B_arrowL_00"); field_0x6AC = mLytBase.findBounding("B_arrowR_00"); mStateMgr.changeState(StateID_None); @@ -43,7 +41,7 @@ bool dLytCommonArrow_c::init() { } bool dLytCommonArrow_c::fn_80168490() { - lbl_80575260->detach(&field_0x680); + d2d::dLytStructDList::sInstance->removeFromList2(&field_0x680); mLytBase.unbindAnims(); for (int i = 0; i < 9; i++) { field_0x440[i].fn_800AC860(); @@ -54,8 +52,7 @@ bool dLytCommonArrow_c::fn_80168490() { bool dLytCommonArrow_c::fn_80168500() { mStateMgr.executeState(); if (!mStateMgr.getStateID()->isEqual(StateID_None)) { - field_0x440[1].mpFrameCtrl->play(); - field_0x440[1].syncAnmFrame(); + field_0x440[1].play(); } mLytBase.calc(); field_0x680.field_0x22 = 0; @@ -111,7 +108,7 @@ bool dLytCommonArrow_c::fn_80168760() { void dLytCommonArrow_c::fn_80168790(s32 idx, f32 frame) { d2d::AnmGroup_c *s = &field_0x440[idx]; - s->setFrame(frame); + s->setFrameAndControlThings(frame); } void dLytCommonArrow_c::fn_80168800(s32 idx) { @@ -119,13 +116,12 @@ void dLytCommonArrow_c::fn_80168800(s32 idx) { } void dLytCommonArrow_c::fn_80168810(d2d::AnmGroup_c *ctrl) { - if (ctrl->mpFrameCtrl->getFrame()) { - f32 newFrame = ctrl->mpFrameCtrl->getFrame() - 1.0f; + if (ctrl->getFrame()) { + f32 newFrame = ctrl->getFrame() - 1.0f; if (newFrame <= 0.0f) { newFrame = 0.0f; } - ctrl->mpFrameCtrl->setFrame(newFrame); - ctrl->syncAnmFrame(); + ctrl->setFrame(newFrame); } } @@ -169,16 +165,15 @@ void dLytCommonArrow_c::initializeState_In() { } void dLytCommonArrow_c::executeState_In() { switch (field_0x6C4) { - case 0: + case 0: { d2d::AnmGroup_c *s = &field_0x440[0]; - if (s->mpFrameCtrl->isEndReached() == 1) { + if (s->isEndReached() == 1) { field_0x6C4 += 1; field_0x6CA = 1; } else { - s->mpFrameCtrl->play(); - s->syncAnmFrame(); + s->play(); } - break; + } break; case 1: field_0x6CA = 0; mStateMgr.changeState(StateID_Wait); @@ -219,14 +214,14 @@ void dLytCommonArrow_c::initializeState_Out() { } void dLytCommonArrow_c::executeState_Out() { switch (field_0x6C4) { - case 0: + case 0: { d2d::AnmGroup_c *s = &field_0x440[8]; - if (s->mpFrameCtrl->isEndReached() == 1) { + if (s->isEndReached() == 1) { field_0x6C4 = 1; field_0x6CA = 1; } s->play(); - break; + } break; case 1: mStateMgr.changeState(StateID_None); break; diff --git a/src/d/lyt/d_lyt_do_button.cpp b/src/d/lyt/d_lyt_do_button.cpp new file mode 100644 index 00000000..96683949 --- /dev/null +++ b/src/d/lyt/d_lyt_do_button.cpp @@ -0,0 +1,177 @@ +#include + +struct DoButtonClass { + DoButtonClass(); + virtual ~DoButtonClass(); + + u8 field_0x04; + u8 field_0x05; + u8 field_0x06; + u8 field_0x07; + f32 field_0x08; + f32 field_0x0C; + f32 field_0x10; + u8 field_0x14; + u8 field_0x15; + u8 field_0x16; +}; + +static DoButtonClass sDoButtonClass; + +DoButtonClass::DoButtonClass() { + field_0x04 = 0; + field_0x05 = 0x29; + field_0x06 = 0x5E; + field_0x07 = 0; + field_0x08 = 0.0f; + field_0x0C = 0.0f; + field_0x14 = 0xFF; + field_0x10 = 76.0f; + field_0x15 = 0; + field_0x16 = 0; +} +DoButtonClass::~DoButtonClass() {} + +STATE_DEFINE(dLytDobutton_c, InvisibleWait); +STATE_DEFINE(dLytDobutton_c, InvisibleTimeCnt); +STATE_DEFINE(dLytDobutton_c, In); +STATE_DEFINE(dLytDobutton_c, Wait); +STATE_DEFINE(dLytDobutton_c, Out); + +#define DO_BUTTON_ANIM_IN 0 +#define DO_BUTTON_ANIM 1 +#define DO_BUTTON_ANIM_LOOP_BTN 2 +#define DO_BUTTON_ANIM_LOOP_BTN_Z 3 +#define DO_BUTTON_ANIM_LOOP_NUN 4 +#define DO_BUTTON_ANIM_LOOP_REMO_CON 5 +#define DO_BUTTON_ANIM_LOOP_RECOVER 6 +#define DO_BUTTON_ANIM_LOOP_ROTATE 7 +#define DO_BUTTON_ANIM_LOOP_MOVE_INFO 8 +#define DO_BUTTON_ANIM_MOVE_ALPHA 9 +#define DO_BUTTON_ANIM_MOVE_OUT 10 +#define DO_BUTTON_ANIM_LOOP_BG 11 + +static const d2d::LytBrlanMapping brlanMap[] = { + { "basicInfo_00_in.brlan", "G_inOut_00"}, + { "basicInfo_00_basicInfo.brlan", "G_basicInfo_00"}, + { "basicInfo_00_loopBtn.brlan", "G_loopBtn_00"}, + { "basicInfo_00_loopBtn.brlan", "G_loopBtnZ_00"}, + { "basicInfo_00_loopNun.brlan", "G_loopNun_00"}, + {"basicInfo_00_loopRemoCon.brlan", "G_loopRemoCon_00"}, + {"basicInfo_00_loopRecover.brlan", "G_loopRecover_00"}, + { "basicInfo_00_loopRotate.brlan", "G_loopRotate"}, + { "basicInfo_00_moveInfo.brlan", "G_moveInfo_00"}, + { "basicInfo_00_moveAlpha.brlan", "G_moveAlpha_00"}, + { "basicInfo_00_out.brlan", "G_inOut_00"}, + { "basicInfo_00_loopBg.brlan", "G_loopBg_00"}, +}; + +void dLytDobutton_c::initializeState_InvisibleWait() {} +void dLytDobutton_c::executeState_InvisibleWait() { + if (field_0x488 == field_0x474 && mNextDoActionToShow == mDoActionToShow) { + return; + } + + field_0x478 = field_0x474; + field_0x474 = field_0x488; + mDoActionToShow = mNextDoActionToShow; + if (field_0x488 == 0x29) { + return; + } + + if (mNextDoActionToShow == 0x5E) { + return; + } + mStateMgr.changeState(StateID_InvisibleTimeCnt); +} +void dLytDobutton_c::finalizeState_InvisibleWait() {} + +void dLytDobutton_c::initializeState_InvisibleTimeCnt() { + field_0x48C = 0; +} + +extern "C" void fn_8010DF00(dLytDobutton_c *); + +void dLytDobutton_c::executeState_InvisibleTimeCnt() { + if (field_0x488 != field_0x474 || mNextDoActionToShow != mDoActionToShow) { + field_0x478 = field_0x474; + field_0x474 = field_0x488; + mDoActionToShow = mNextDoActionToShow; + if (field_0x488 == 0x29 || mNextDoActionToShow == 0x5E) { + mStateMgr.changeState(StateID_InvisibleWait); + } else { + field_0x48C = 0; + } + } else { + if (field_0x48C < sDoButtonClass.field_0x15) { + field_0x48C++; + } else { + fn_8010DF00(this); + mStateMgr.changeState(StateID_In); + } + } +} +void dLytDobutton_c::finalizeState_InvisibleTimeCnt() {} + +void dLytDobutton_c::initializeState_In() { + mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setAnimEnable(true); + mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setFrame(0.0f); + mLyt.calc(); + mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setAnimEnable(false); + + mAnmGroups[DO_BUTTON_ANIM_IN].setAnimEnable(true); + mAnmGroups[DO_BUTTON_ANIM_IN].setFrame(0.0f); +} +void dLytDobutton_c::executeState_In() { + if (field_0x488 == 0x29 || mNextDoActionToShow == 0x5E) { + mAnmGroups[DO_BUTTON_ANIM_IN].setFrame(0.0f); + mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setAnimEnable(true); + mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setToEnd(); + mLyt.calc(); + mAnmGroups[DO_BUTTON_ANIM_IN].setAnimEnable(false); + mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setAnimEnable(false); + mStateMgr.changeState(StateID_InvisibleWait); + } else if (mAnmGroups[DO_BUTTON_ANIM_IN].isEndReached()) { + mAnmGroups[DO_BUTTON_ANIM_IN].setAnimEnable(false); + mStateMgr.changeState(StateID_Wait); + } +} +void dLytDobutton_c::finalizeState_In() {} + +void dLytDobutton_c::initializeState_Wait() {} +void dLytDobutton_c::executeState_Wait() { + if (field_0x488 != field_0x474 || mNextDoActionToShow != mDoActionToShow) { + field_0x478 = field_0x474; + field_0x474 = field_0x488; + mDoActionToShow = mNextDoActionToShow; + if (field_0x488 == 0x29 || mNextDoActionToShow == 0x5E) { + mStateMgr.changeState(StateID_Out); + field_0x48C = 0; + } else { + fn_8010DF00(this); + } + } +} +void dLytDobutton_c::finalizeState_Wait() {} + +void dLytDobutton_c::initializeState_Out() { + mAnmGroups[DO_BUTTON_ANIM_IN].setAnimEnable(true); + mAnmGroups[DO_BUTTON_ANIM_IN].setFrame(0.0f); + mLyt.calc(); + mAnmGroups[DO_BUTTON_ANIM_IN].setAnimEnable(false); + + mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setAnimEnable(true); + mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setFrame(0.0f); +} +void dLytDobutton_c::executeState_Out() { + if (mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].isEndReached()) { + mLyt.calc(); + mAnmGroups[DO_BUTTON_ANIM_MOVE_OUT].setAnimEnable(false); + mStateMgr.changeState(StateID_InvisibleTimeCnt); + } +} +void dLytDobutton_c::finalizeState_Out() {} + +bool dLytDobutton_c::init(m2d::ResAccIf_c *resAcc) { + return brlanMap[0].mFile[0] != '\0' && sDoButtonClass.field_0x04; +} diff --git a/src/d/lyt/d_lyt_fader.cpp b/src/d/lyt/d_lyt_fader.cpp index 458b9315..6b872117 100644 --- a/src/d/lyt/d_lyt_fader.cpp +++ b/src/d/lyt/d_lyt_fader.cpp @@ -27,7 +27,7 @@ void dLytFader_c::setStatus(EStatus status) { d2d::AnmGroup_c *s = &mLytStructAs[0]; s->fn_800AC6D0(false); s->setToEnd(); - s->fn_800AC870(true); + s->setAnimEnable(true); s->play(); mLytBase.calc(); fn_80175BC0(2); @@ -38,7 +38,7 @@ void dLytFader_c::setStatus(EStatus status) { d2d::AnmGroup_c *s = &mLytStructAs[0]; s->fn_800AC6D0(false); s->setToStart(); - s->fn_800AC870(true); + s->setAnimEnable(true); mLytBase.calc(); fn_80175BC0(2); mLytBase.getLayout()->GetRootPane()->SetVisible(false); @@ -113,16 +113,14 @@ void dLytFader_c::fn_801758F0() { 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); + s->setFrame(0.0f); + s->setRate(20.0f / (mFrame - 1)); mLytBase.getLayout()->GetRootPane()->SetVisible(true); } void dLytFader_c::fn_801759B0() { d2d::AnmGroup_c *s = &mLytStructAs[0]; - if (s->mpFrameCtrl->isEndReached() == true) { + if (s->isEndReached() == true) { fn_80175BC0(2); mStatus = FADED_OUT; } @@ -135,16 +133,14 @@ void dLytFader_c::fn_80175A50() { 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); + s->setFrame(0.0f); + s->setRate(20.0f / (mFrame - 1)); mLytBase.getLayout()->GetRootPane()->SetVisible(true); } void dLytFader_c::fn_80175B10() { d2d::AnmGroup_c *s = &mLytStructAs[1]; - if (s->mpFrameCtrl->isEndReached() == true) { + if (s->isEndReached() == true) { fn_80175BC0(2); mStatus = FADED_IN; mLytBase.getLayout()->GetRootPane()->SetVisible(false); diff --git a/src/d/lyt/pause_disp_00.cpp b/src/d/lyt/d_lyt_pause_disp_00.cpp similarity index 79% rename from src/d/lyt/pause_disp_00.cpp rename to src/d/lyt/d_lyt_pause_disp_00.cpp index 130a3a1f..7de352db 100644 --- a/src/d/lyt/pause_disp_00.cpp +++ b/src/d/lyt/d_lyt_pause_disp_00.cpp @@ -1,4 +1,4 @@ -#include +#include #include STATE_DEFINE(dLytPauseDisp00_c, None); @@ -16,9 +16,6 @@ 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; @@ -29,18 +26,18 @@ void dLytPauseDisp00_c::init() { for (int i = 0; i < 0x18; i++) { field_0x2050[i].init(nullptr, lbl_804E8898[i]); - mList.PushBack(&field_0x2050[i]); + mLytMeterGroup.PushBack(&field_0xE11C[i]); } if (mLytBase.getLayout()->GetGroupContainer() != nullptr) { nw4r::lyt::Group *group = mLytBase.getLayout()->GetGroupContainer()->FindGroupByName("G_ref_00"); if (group != nullptr) { - fn_800AC3C0(group, &mList); + mLytBase.linkMeters(group, &mLytMeterGroup); } } field_0xE29C.init(mLytBase.getLayout()->GetRootPane(), 1, 0, 0); - lbl_80575260->append(&field_0xE29C); + d2d::dLytStructDList::sInstance->appendToList2(&field_0xE29C); for (int i = 0; i < 0x25; i++) { if (i != 0x1F && i != 0x20) { nw4r::lyt::Bounding *b = mLytBase.findBounding(B_LIST[i]); @@ -51,7 +48,5 @@ void dLytPauseDisp00_c::init() { void dLytPauseDisp00_c::displayElement(int i, float frame) { d2d::AnmGroup_c *s = &field_0x00D0[i]; - s->setFrame(frame); + s->setFrameAndControlThings(frame); } - -dLytPauseDisp00_c::~dLytPauseDisp00_c() {} diff --git a/src/d/lyt/d_structd.cpp b/src/d/lyt/d_structd.cpp new file mode 100644 index 00000000..30f46873 --- /dev/null +++ b/src/d/lyt/d_structd.cpp @@ -0,0 +1,33 @@ +#include + +namespace d2d +{ + +dLytStructDList::dLytStructDList() { + field_0x18 = true; + sInstance = this; +} + + +dLytStructDList *dLytStructDList::create(EGG::Heap *heap) { + return new(heap) dLytStructDList(); +} + + +void dLytStructDList::appendToList1(dLytStructD *other) { + mList1.insert(other); +} + +void dLytStructDList::removeFromList1(dLytStructD *other) { + mList1.remove(other); +} + +void dLytStructDList::appendToList2(dLytStructD *other) { + mList2.insert(other); +} + +void dLytStructDList::removeFromList2(dLytStructD *other) { + mList2.remove(other); +} + +} // namespace d2d diff --git a/src/d/lyt/meter/d_lyt_meter.cpp b/src/d/lyt/meter/d_lyt_meter.cpp new file mode 100644 index 00000000..cbae77ef --- /dev/null +++ b/src/d/lyt/meter/d_lyt_meter.cpp @@ -0,0 +1,7 @@ +#include + + +dLytMeter_c::dLytMeter_c() {} + +dLytMeterRemoconBg_c::dLytMeterRemoconBg_c() : mStateMgr(*this, sStateID::null) {} +dLytMeterRemoconBg_c::~dLytMeterRemoconBg_c() {} diff --git a/src/d/lyt/meter/d_lyt_meter_remocon_bg.cpp b/src/d/lyt/meter/d_lyt_meter_remocon_bg.cpp new file mode 100644 index 00000000..108e119d --- /dev/null +++ b/src/d/lyt/meter/d_lyt_meter_remocon_bg.cpp @@ -0,0 +1,59 @@ +#include +#include + +STATE_DEFINE(dLytMeterRemoconBg_c, Wait); +STATE_DEFINE(dLytMeterRemoconBg_c, On); +STATE_DEFINE(dLytMeterRemoconBg_c, Active); +STATE_DEFINE(dLytMeterRemoconBg_c, Off); + +void dLytMeterRemoconBg_c::initializeState_Wait() {} +void dLytMeterRemoconBg_c::executeState_Wait() {} +void dLytMeterRemoconBg_c::finalizeState_Wait() {} + +void dLytMeterRemoconBg_c::initializeState_On() {} +void dLytMeterRemoconBg_c::executeState_On() {} +void dLytMeterRemoconBg_c::finalizeState_On() {} + +void dLytMeterRemoconBg_c::initializeState_Active() {} +void dLytMeterRemoconBg_c::executeState_Active() {} +void dLytMeterRemoconBg_c::finalizeState_Active() {} + +void dLytMeterRemoconBg_c::initializeState_Off() {} +void dLytMeterRemoconBg_c::executeState_Off() {} +void dLytMeterRemoconBg_c::finalizeState_Off() {} + +static const char *n1 = "N_remoConBg_00"; + +bool dLytMeterRemoconBg_c::build(d2d::ResAccIf_c *resAcc) { + mLyt.setResAcc(resAcc); + mLyt.build("remoConBg_00.brlyt", nullptr); + mpPane = mLyt.findPane(n1); + field_0xE8 = 0x61; + field_0xDC = 0x61; + field_0xE0 = 0x61; + field_0xEC = false; + field_0xE4 = 1; + mStateMgr.changeState(StateID_Wait); + return true; +} + +bool dLytMeterRemoconBg_c::LytMeter0x10() { + return true; +} + +bool dLytMeterRemoconBg_c::LytMeter0x14() { + // TODO + return true; +} + +const char *dLytMeterRemoconBg_c::getName() const { + return mLyt.getName(); +} + +void *dLytMeterRemoconBg_c::LytMeter0x1C() { + return &mLyt; +} + +nw4r::lyt::Pane *dLytMeterRemoconBg_c::getPane() { + return mLyt.getLayout()->GetRootPane(); +} diff --git a/src/nw4r/lyt/lyt_pane.cpp b/src/nw4r/lyt/lyt_pane.cpp index 31364e9c..0a6d21e3 100644 --- a/src/nw4r/lyt/lyt_pane.cpp +++ b/src/nw4r/lyt/lyt_pane.cpp @@ -527,14 +527,7 @@ const res::ExtUserData *Pane::FindExtUserDataByName(const char *name) { } int i = 0; for (int i = 0; i < this->mpExtUserDataList->num; i++, pUserData++) { - u32 offset = pUserData->nameOffs; - const char *str = 0; - if (offset != 0) { - str = detail::ConvertOffsToPtr(pUserData, offset); - } else { - str = nullptr; - } - + const char *str = pUserData->GetName(); if (strcmp(name, str) == 0) { return pUserData; }; diff --git a/src/toBeSorted/arc_callback_handler.cpp b/src/toBeSorted/arc_callback_handler.cpp index 55a329e7..0bfd7f96 100644 --- a/src/toBeSorted/arc_callback_handler.cpp +++ b/src/toBeSorted/arc_callback_handler.cpp @@ -64,14 +64,14 @@ void ArcCallbackHandlerBase::CreateArcEntry(void *data, const char *path) { } else if (mPrefix == NAME_OARC) { SizedString<64> oarcPath = path; char buf[64]; - sscanf(&oarcPath, "/oarc/%31[^.]arc", buf); + sscanf(oarcPath, "/oarc/%31[^.]arc", buf); u32 oldPrefix = mPrefix; OarcManager::sInstance->addEntryFromSuperArc(buf, data, nullptr); mPrefix = oldPrefix; } else if (mPrefix == NAME_RARC) { SizedString<64> oarcPath = path; char buf[64]; - sscanf(&oarcPath, "/rarc/%31[^.]arc", buf); + sscanf(oarcPath, "/rarc/%31[^.]arc", buf); u32 oldPrefix = mPrefix; CurrentStageArcManager::sInstance->addEntryFromSuperArc(buf, data); mPrefix = oldPrefix; @@ -82,14 +82,14 @@ void ArcCallbackHandlerBase::DestroyArcEntry(const char *path) { if (mPrefix == NAME_OARC) { SizedString<64> oarcPath = path; char buf[64]; - sscanf(&oarcPath, "/oarc/%31[^.]arc", buf); + sscanf(oarcPath, "/oarc/%31[^.]arc", buf); u32 oldPrefix = mPrefix; OarcManager::sInstance->decrement(buf); mPrefix = oldPrefix; } else if (mPrefix == NAME_RARC) { SizedString<64> oarcPath = path; char buf[64]; - sscanf(&oarcPath, "/rarc/%31[^.]arc", buf); + sscanf(oarcPath, "/rarc/%31[^.]arc", buf); u32 oldPrefix = mPrefix; CurrentStageArcManager::sInstance->decrement(buf); mPrefix = oldPrefix; diff --git a/src/toBeSorted/arc_managers/current_stage_arc_manager.cpp b/src/toBeSorted/arc_managers/current_stage_arc_manager.cpp index d07bb129..945cd34e 100644 --- a/src/toBeSorted/arc_managers/current_stage_arc_manager.cpp +++ b/src/toBeSorted/arc_managers/current_stage_arc_manager.cpp @@ -19,26 +19,26 @@ bool CurrentStageArcManager::setStage(const char *newStage) { mStageName = newStage; mCurrentLoadingStageArcName.sprintf("%s_stg_l0", mStageName); - if (dRawArcEntry_c::checkArcExistsOnDisk(&mCurrentLoadingStageArcName, getCurrentStageDirectory())) { - return (bool)mArcTable.getArcOrLoadFromDisk(&mCurrentLoadingStageArcName, getCurrentStageDirectory(), 0, + if (dRawArcEntry_c::checkArcExistsOnDisk(mCurrentLoadingStageArcName, getCurrentStageDirectory())) { + return (bool)mArcTable.getArcOrLoadFromDisk(mCurrentLoadingStageArcName, getCurrentStageDirectory(), 0, dHeap::work2Heap.heap); } else { mCurrentLoadingStageArcName.sprintf("%s_stg", mStageName); - return (bool)mArcTable.getArcOrLoadFromDisk(&mCurrentLoadingStageArcName, getCurrentStageDirectory(), 0, + return (bool)mArcTable.getArcOrLoadFromDisk(mCurrentLoadingStageArcName, getCurrentStageDirectory(), 0, dHeap::work2Heap.heap); } } bool CurrentStageArcManager::decrement() { - return mArcTable.decreaseRefCount(&mCurrentLoadingStageArcName); + return mArcTable.decreaseRefCount(mCurrentLoadingStageArcName); } void *CurrentStageArcManager::getData(const char *fileName) { - return mArcTable.getDataFromOarc(&mCurrentLoadingStageArcName, fileName); + return mArcTable.getDataFromOarc(mCurrentLoadingStageArcName, fileName); } void *CurrentStageArcManager::getFileFromCurrentLay0Arc(const char *fileName) { - return mArcTable.getSubEntryData(&mCurrentLoadingStageArcName, fileName); + return mArcTable.getSubEntryData(mCurrentLoadingStageArcName, fileName); } bool CurrentStageArcManager::loadFileFromExtraLayerArc(int layer) { @@ -47,8 +47,8 @@ bool CurrentStageArcManager::loadFileFromExtraLayerArc(int layer) { } mStageExtraLayerArcName.sprintf("%s_stg_l%d", mStageName, layer); - if (dRawArcEntry_c::checkArcExistsOnDisk(&mStageExtraLayerArcName, getCurrentStageDirectory())) { - return (bool)mArcTable.getArcOrLoadFromDisk(&mStageExtraLayerArcName, getCurrentStageDirectory(), 0, + if (dRawArcEntry_c::checkArcExistsOnDisk(mStageExtraLayerArcName, getCurrentStageDirectory())) { + return (bool)mArcTable.getArcOrLoadFromDisk(mStageExtraLayerArcName, getCurrentStageDirectory(), 0, dHeap::work2Heap.heap); } else { return true; @@ -56,8 +56,8 @@ bool CurrentStageArcManager::loadFileFromExtraLayerArc(int layer) { } bool CurrentStageArcManager::unloadExtraLayerArc() { - if (mArcTable.hasEntry(&mStageExtraLayerArcName)) { - return mArcTable.decreaseRefCount(&mStageExtraLayerArcName); + if (mArcTable.hasEntry(mStageExtraLayerArcName)) { + return mArcTable.decreaseRefCount(mStageExtraLayerArcName); } return true; } @@ -96,16 +96,16 @@ EGG::ExpHeap *getHeap() { const char *CurrentStageArcManager::getCurrentStageDirectory() { static SizedString<64> sStageDirTmp; sStageDirTmp = "Stage/"; - sStageDirTmp += &mStageName; + sStageDirTmp += mStageName; - return &sStageDirTmp; + return sStageDirTmp; } static SizedString<32> s_roomArcTmp; const char *CurrentStageArcManager::getRoomArcDirectory(int room) const { s_roomArcTmp.sprintf("%s_r%02d", mStageName, room); - return &s_roomArcTmp; + return s_roomArcTmp; } bool CurrentStageArcManager::create(EGG::Heap *heap) { diff --git a/src/toBeSorted/arc_managers/oarc_manager.cpp b/src/toBeSorted/arc_managers/oarc_manager.cpp index 6c6dac4b..a939b8b4 100644 --- a/src/toBeSorted/arc_managers/oarc_manager.cpp +++ b/src/toBeSorted/arc_managers/oarc_manager.cpp @@ -65,14 +65,14 @@ void *OarcManager::getDzbFromArc(const char *oarcName, const char *fileName) { SizedString<32> str = "dzb/"; str += fileName; str += ".dzb"; - return mArcTable.getDataFromOarc(oarcName, &str); + return mArcTable.getDataFromOarc(oarcName, str); } void *OarcManager::getPlcFromArc(const char *oarcName, const char *fileName) { SizedString<32> str = "dat/"; str += fileName; str += ".plc"; - return mArcTable.getDataFromOarc(oarcName, &str); + return mArcTable.getDataFromOarc(oarcName, str); } void *OarcManager::getSubEntryData(const char *oarcName, const char *fileName) { diff --git a/src/toBeSorted/file_manager.cpp b/src/toBeSorted/file_manager.cpp index 630161a5..1aa3326f 100644 --- a/src/toBeSorted/file_manager.cpp +++ b/src/toBeSorted/file_manager.cpp @@ -121,7 +121,7 @@ u16 *FileManager::getStoryFlagsMut() { SizedString<32> buf; buf = "F405"; - file->setAreaT1(&buf); + file->setAreaT1(buf); file->room_id_t1 = 0; file->forced_layer_t1 = 0; file->entrance_t1_load_flag = 1;