From fabadd25d9b4177ff068d9198b6b0df82cae44a8 Mon Sep 17 00:00:00 2001 From: Eebit Date: Sun, 1 Feb 2026 12:24:34 -0500 Subject: [PATCH 1/5] (menu) Menu 93% --- config/YFEE01/arm9/delinks.txt | 3 + include/menu.hpp | 321 +++-- include/unknown_funcs.h | 2 +- src/menu.cpp | 2038 ++++++++++++++++++++++++++++++++ 4 files changed, 2259 insertions(+), 105 deletions(-) create mode 100644 src/menu.cpp diff --git a/config/YFEE01/arm9/delinks.txt b/config/YFEE01/arm9/delinks.txt index 7d5dc76..ae0bb55 100644 --- a/config/YFEE01/arm9/delinks.txt +++ b/config/YFEE01/arm9/delinks.txt @@ -39,6 +39,9 @@ src/gamectrl.cpp: .text start:0x020217b4 end:0x02022f4c .data start:0x020cec44 end:0x020cf650 +src/menu.cpp: + .text start:0x0202d4c4 end:0x020302e0 + src/button.cpp: .text start:0x020346e0 end:0x020355e4 diff --git a/include/menu.hpp b/include/menu.hpp index 9177f32..6283110 100644 --- a/include/menu.hpp +++ b/include/menu.hpp @@ -18,22 +18,25 @@ enum { // Menu availability identifiers - MENU_ENABLED = 0, + MENU_ENABLED = 0, MENU_DISABLED = 1, MENU_NOTSHOWN = 2, - MENU_ACTIVE = 8, + MENU_ACTIVE = 8, }; +class ProcMenu; +class MenuItem; class MenuItemState; class Menu { public: // vtable - STRUCT_PAD(0x04, 0x0C); + Menu * unk_04; // parent? + MenuItem ** unk_08; // menu items? MenuItemState * unk_0c; - ProcEx * unk_10; + ProcMenu * unk_10; u32 unk_14; u32 unk_18; u32 unk_1c; @@ -42,98 +45,109 @@ class Menu u32 unk_28; u32 unk_2c; u32 unk_30; - u8 unk_34; - u8 unk_35; - u8 unk_36; - u8 unk_37; + s8 unk_34; + s8 unk_35; + s8 unk_36; + s8 unk_37; s8 unk_38; - STRUCT_PAD(0x39, 0x40); + s8 unk_39; + u8 unk_3a; + u8 unk_3b; + u8 unk_3c; + s8 unk_3d; + u8 unk_3e; + u8 unk_3f; u8 unk_40; u8 unk_41; u8 unk_42; u8 unk_43; - STRUCT_PAD(0x44, 0x48); + u8 unk_44; + u8 unk_45; + u8 unk_46; + u8 unk_47; u8 unk_48; - STRUCT_PAD(0x49, 0x50); + u8 unk_49; + s8 unk_4a[4]; + STRUCT_PAD(0x4E, 0x50); Menu(); // func_0202d4c4 virtual void vfunc_00(void); // ? virtual void vfunc_04(/* ? */); // func_02015368 - virtual void vfunc_08(/* ? */); // func_0202f2a4 - virtual void vfunc_0c(/* ? */); // func_0202f34c - virtual void vfunc_10(/* ? */); // func_0202f468 - virtual void vfunc_14(/* ? */); // func_0202f490 - virtual void vfunc_18(/* ? */); // func_0202f504 - virtual void vfunc_1c(/* ? */); // func_0202f57c + virtual void vfunc_08(void); // func_0202f2a4 + virtual void vfunc_0c(void); // func_0202f34c + virtual void vfunc_10(void); // func_0202f468 + virtual void vfunc_14(void); // func_0202f490 + virtual void vfunc_18(void); // func_0202f504 + virtual void vfunc_1c(void); // func_0202f57c virtual void vfunc_20(/* ? */); // func_02015360 - virtual s32 vfunc_24(void *, s32); // ? + virtual s32 vfunc_24(MenuItemState *, s32); // ? virtual s32 vfunc_28(void); // ? - virtual void vfunc_2c(/* ? */); // func_02015328 + virtual s32 vfunc_2c(MenuItemState *, s32); // func_02015328 virtual void vfunc_30(/* ? */); // func_02015308 - virtual void vfunc_34(/* ? */); // func_02015310 + virtual s32 vfunc_34(MenuItemState *, s32); // func_02015310 virtual void vfunc_38(/* ? */); // func_020152e8 - virtual void vfunc_3c(/* ? */); // func_020152f0 + virtual s32 vfunc_3c(MenuItemState *, s32); // func_020152f0 virtual void vfunc_40(/* ? */); // func_020152c8 - virtual void vfunc_44(/* ? */); // func_020152d0 + virtual s32 vfunc_44(MenuItemState *, s32); // func_020152d0 virtual void vfunc_48(/* ? */); // func_020152a8 - virtual void vfunc_4c(/* ? */); // func_020152b0 + virtual s32 vfunc_4c(MenuItemState *, s32); // func_020152b0 virtual void vfunc_50(/* ? */); // func_02015288 - virtual void vfunc_54(/* ? */); // func_02015290 - virtual s32 vfunc_58(void); // ? + virtual s32 vfunc_54(MenuItemState *, s32); // func_02015290 + virtual s32 vfunc_58(s32); // ? virtual void vfunc_5c(/* ? */); // func_02015270 - virtual void vfunc_60(/* ? */); // func_02015250 + virtual s32 vfunc_60(void); // func_02015250 virtual void vfunc_64(/* ? */); // func_0202ddec - virtual void vfunc_68(/* ? */); // func_0202e7a4 - virtual void vfunc_6c(/* ? */); // func_0202e874 - virtual void vfunc_70(/* ? */); // func_0202e94c - virtual void vfunc_74(/* ? */); // func_0202e9d8 - virtual void vfunc_78(/* ? */); // func_0202daf4 - virtual void vfunc_7c(/* ? */); // func_0202db5c - virtual void vfunc_80(/* ? */); // func_0202dbc4 - virtual void vfunc_84(/* ? */); // func_0202dc2c - virtual void vfunc_88(/* ? */); // func_0202dc94 - virtual void vfunc_8c(/* ? */); // func_0202dcfc - virtual void vfunc_90(/* ? */); // func_0202dd84 - virtual void vfunc_94(/* ? */); // func_02015248 - virtual void vfunc_98(/* ? */); // func_02015240 - virtual void vfunc_9c(/* ? */); // func_02015238 - virtual void vfunc_a0(void); // ? - virtual void vfunc_a4(/* ? */); // func_02015228 - virtual void vfunc_a8(void); // ? - virtual void vfunc_ac(/* ? */); // func_02015218 - virtual void vfunc_b0(/* ? */); // func_0202e6dc - virtual void vfunc_b4(/* ? */); // func_0202e734 - virtual void vfunc_b8(/* ? */); // func_02015214 - virtual void vfunc_bc(/* ? */); // func_0202e60c - virtual void vfunc_c0(/* ? */); // func_0202e640 - virtual void vfunc_c4(/* ? */); // func_0202e674 - virtual void vfunc_c8(/* ? */); // func_0202e6a8 - virtual void vfunc_cc(/* ? */); // func_0202ebe8 - virtual void vfunc_d0(/* ? */); // func_0202ebf0 - virtual void vfunc_d4(/* ? */); // func_0202ebf8 - virtual void vfunc_d8(/* ? */); // func_0202ea68 - virtual void vfunc_dc(/* ? */); // func_0202eb2c + virtual void vfunc_68(s32); // func_0202e7a4 + virtual void vfunc_6c(s32); // func_0202e874 + virtual void vfunc_70(s32); // func_0202e94c + virtual void vfunc_74(s32); // func_0202e9d8 + virtual s32 vfunc_78(void); // func_0202daf4 + virtual s32 vfunc_7c(void); // func_0202db5c + virtual s32 vfunc_80(void); // func_0202dbc4 + virtual s32 vfunc_84(void); // func_0202dc2c + virtual s32 vfunc_88(void); // func_0202dc94 + virtual s32 vfunc_8c(void); // func_0202dcfc + virtual s32 vfunc_90(void); // func_0202dd84 + virtual s32 vfunc_94(s32, s32); // func_02015248 + virtual s32 vfunc_98(s32, s32); // func_02015240 + virtual BOOL vfunc_9c(void); // func_02015238 + virtual BOOL vfunc_a0(void); // ? + virtual BOOL vfunc_a4(void); // func_02015228 + virtual BOOL vfunc_a8(void); // ? + virtual s32 vfunc_ac(void); // func_02015218 + virtual BOOL vfunc_b0(MenuItemState *, s32, s32); // func_0202e6dc + virtual BOOL vfunc_b4(void); // func_0202e734 + virtual void vfunc_b8(s32); // func_02015214 + virtual void vfunc_bc(void); // func_0202e60c + virtual void vfunc_c0(void); // func_0202e640 + virtual void vfunc_c4(void); // func_0202e674 + virtual void vfunc_c8(void); // func_0202e6a8 + virtual s32 vfunc_cc(void); // func_0202ebe8 + virtual void vfunc_d0(s32); // func_0202ebf0 + virtual s32 vfunc_d4(s32); // func_0202ebf8 + virtual void vfunc_d8(void); // func_0202ea68 + virtual void vfunc_dc(void); // func_0202eb2c virtual void vfunc_e0(/* ? */); // func_02015210 virtual void vfunc_e4(/* ? */); // func_0201520c - virtual void vfunc_e8(void); // ? - virtual void vfunc_ec(void); // ? - virtual void vfunc_f0(/* ? */); // func_0202ec44 - virtual void vfunc_f4(/* ? */); // func_0202edc0 - virtual void vfunc_f8(/* ? */); // func_0202eef0 - virtual void vfunc_fc(/* ? */); // func_0202eeac - virtual void vfunc_100(/* ? */); // func_0202ef38 - virtual void vfunc_104(/* ? */); // func_0202efc0 - virtual void vfunc_108(/* ? */); // func_0202ef7c - virtual void vfunc_10c(/* ? */); // func_0202effc + virtual void vfunc_e8(void); // func_0202ec90 + virtual void vfunc_ec(void); // func_0202edec + virtual void vfunc_f0(s32, s32, s32, s32); // func_0202ec44 + virtual void vfunc_f4(s32, s32, s32, s32); // func_0202edc0 + virtual void vfunc_f8(void *, s32, s32, s32, s32); // func_0202eef0 + virtual void vfunc_fc(s32, s32, s32, s32); // func_0202eeac + virtual void vfunc_100(s32, s32, s32, s32); // func_0202ef38 + virtual void vfunc_104(void *, s32, s32, s32, s32); // func_0202efc0 + virtual void vfunc_108(s32, s32, s32, s32); // func_0202ef7c + virtual s32 vfunc_10c(void); // func_0202effc virtual void vfunc_110(/* ? */); // func_0202f008 virtual void vfunc_114(/* ? */); // func_02028068 virtual void vfunc_118(/* ? */); // func_0202f2a0 - virtual void vfunc_11c(/* ? */); // func_0202f5b4 - virtual void vfunc_120(void); // ? - virtual void vfunc_124(void); // ? - virtual void vfunc_128(/* ? */); // func_0202fa1c - virtual void vfunc_12c(/* ? */); // func_0202f89c + virtual void vfunc_11c(void); // func_0202f5b4 + virtual void vfunc_120(void); // func_0202f604 + virtual void vfunc_124(void); // func_0202f800 + virtual void vfunc_128(void); // func_0202fa1c + virtual void vfunc_12c(void); // func_0202f89c virtual void vfunc_130(/* ? */); // ? virtual void vfunc_134(/* ? */); // ? @@ -152,89 +166,188 @@ class MenuItem : public MenuState, public MenuResult { public: virtual char * vfunc_00(void); // ?; GetLabelText? - virtual void vfunc_04(/* */); // func_0201511c; wraps vfunc_00 + virtual char * vfunc_04(MenuItemState *); // func_0201511c; wraps vfunc_00 virtual void vfunc_08(/* */); // func_020150f8 virtual void vfunc_0c(/* */); // func_02015100; wraps vfunc_08 - virtual s32 vfunc_10(MenuItemState *); // func_0202d948; GetLabelColor? (1 = White, 2 = Grey, 3 = Cyan, 4 = Gold, 5 = Green) + virtual s32 + vfunc_10(MenuItemState *); // func_0202d948; GetLabelColor? (1 = White, 2 = Grey, 3 = Cyan, 4 = Gold, 5 = Green) virtual s32 vfunc_14(void); // func_020150dc; IsEnabled? - virtual void vfunc_18(/* */); // func_020150e4; Wraps vfunc_14 + virtual s32 vfunc_18(s32); // func_020150e4; Wraps vfunc_14 virtual s32 vfunc_1c(void); // func_020150bc; OnConfirm? virtual s32 vfunc_20(MenuItemState *); // func_020150a8; OnConfirm? void * virtual s32 vfunc_24(Menu *, MenuItemState *); // func_020150c4; OnConfirm? Menu *, void * - virtual void vfunc_28(/* */); // func_02015074; OnBPress - virtual void vfunc_2c(/* */); // func_0201507c; OnBPress; wraps vfunc_28 - virtual void vfunc_30(/* */); // func_02015090; OnBPress; wraps vfunc_2c + virtual s32 vfunc_28(/* */); // func_02015074; OnBPress + virtual s32 vfunc_2c(/* */); // func_0201507c; OnBPress; wraps vfunc_28 + virtual s32 vfunc_30(Menu *, MenuItemState *); // func_02015090; OnBPress; wraps vfunc_2c virtual void vfunc_34(/* */); // func_02015040; OnXPress virtual void vfunc_38(/* */); // func_02015048; OnXPress - virtual void vfunc_3c(/* */); // func_0201505c; OnXPress + virtual s32 vfunc_3c(Menu *, MenuItemState *); // func_0201505c; OnXPress virtual void vfunc_40(/* */); // func_0201500c virtual void vfunc_44(/* */); // func_02015014 - virtual void vfunc_48(/* */); // func_02015028 + virtual s32 vfunc_48(Menu *, MenuItemState *); // func_02015028 virtual void vfunc_4c(/* */); // func_02014fd8; OnLPress virtual void vfunc_50(/* */); // func_02014fe0; OnLPress - virtual void vfunc_54(/* */); // func_02014ff4; OnLPress + virtual s32 vfunc_54(Menu *, MenuItemState *); // func_02014ff4; OnLPress virtual void vfunc_58(/* */); // func_02014fa4; OnRPress virtual void vfunc_5c(/* */); // func_02014fac; OnRPress - virtual void vfunc_60(/* */); // func_02014fc0; OnRPress + virtual s32 vfunc_60(Menu *, MenuItemState *); // func_02014fc0; OnRPress virtual void vfunc_64(/* */); // func_02014f70; maybe onexit virtual void vfunc_68(/* */); // func_02014f78 - virtual void vfunc_6c(/* */); // func_02014f8c + virtual s32 vfunc_6c(Menu *, MenuItemState *); // func_02014f8c virtual void vfunc_70(void); // func_02014f40; OnHover? or OnEnter? virtual void vfunc_74(/* */); // func_02014f44; OnHover? void * - virtual void vfunc_78(/* */); // func_02014f58; OnHover? Menu *, void * + virtual s32 vfunc_78(Menu *, MenuItemState *); // func_02014f58; OnHover? Menu *, void * virtual void vfunc_7c(/* */); // func_02014f10 virtual void vfunc_80(/* */); // func_02014f14 - virtual void vfunc_84(/* */); // func_02014f28 + virtual s32 vfunc_84(Menu *, MenuItemState *); // func_02014f28 virtual void vfunc_88(/* */); // func_02014ee0 virtual void vfunc_8c(/* */); // func_02014ee4 - virtual void vfunc_90(/* */); // func_02014ef8 + virtual void vfunc_90(Menu *, MenuItemState *); // func_02014ef8 virtual void vfunc_94(/* */); // func_02014eb0 virtual void vfunc_98(/* */); // func_02014eb4 - virtual void vfunc_9c(/* */); // func_02014ec8 + virtual void vfunc_9c(Menu *, MenuItemState *); // func_02014ec8 virtual void vfunc_a0(/* */); // func_02014e98 virtual void vfunc_a4(/* */); // func_02014e9c - virtual void vfunc_a8(/* */); // - virtual void vfunc_ac(/* */); // - virtual void vfunc_b0(/* */); // func_02014e94 - virtual void vfunc_b4(Menu *, MenuItemState *); // - virtual void vfunc_b8(/* */); // - virtual void vfunc_bc(/* */); // - virtual void vfunc_c0(/* */); // - virtual void vfunc_c4(/* */); // func_02014e8c - virtual void vfunc_c8(/* */); // - virtual void vfunc_cc(/* */); // func_02014e84 - virtual void vfunc_d0(/* */); // func_02014e7c - virtual void vfunc_d4(/* */); // func_02014e74 + virtual void vfunc_a8(Menu *, MenuItemState *); // + virtual s32 vfunc_ac(MenuItemState *, s32, s32, s32, s32); // func_0202d78c + virtual void vfunc_b0(Menu *, MenuItemState *); // func_02014e94 + virtual void vfunc_b4(Menu *, MenuItemState *); // func_0202d960 + virtual void vfunc_b8(Menu *, MenuItemState *); // func_0202d9bc + virtual void vfunc_bc(Menu *, MenuItemState *); // func_0202da18 + virtual void vfunc_c0(Menu *, MenuItemState *); // func_0202da74 + virtual u32 vfunc_c4(void); // func_02014e8c + virtual u32 vfunc_c8(MenuItemState *); // func_0202d8c8 + virtual u32 vfunc_cc(void); // func_02014e84 + virtual u32 vfunc_d0(void); // func_02014e7c + virtual u32 vfunc_d4(void); // func_02014e74 }; class MenuItemState { public: MenuItem * unk_00; - void * unk_04; + s8 unk_04; + s8 unk_05; + s8 unk_06; + s8 unk_07; u8 unk_08; u8 unk_09; STRUCT_PAD(0x0A, 0x0C); }; +class SplitMenu : public Menu +{ +public: + virtual void vfunc_08(void); // func_0203004c + virtual void vfunc_0c(void); // func_020300ec + virtual BOOL vfunc_b0(MenuItemState *, s32, s32); // func_0202fffc + + // func_020302dc + virtual void vfunc_e8(void) + { + } + + // func_020302d8 + virtual void vfunc_ec(void) + { + } + + // func_020302d4 + virtual void vfunc_fc(s32, s32, s32, s32) + { + } + + // func_020302d0 + virtual void vfunc_100(s32, s32, s32, s32) + { + } + + // func_020302cc + virtual void vfunc_108(s32, s32, s32, s32) + { + } +}; + +EC void func_0202f674(Menu *); +EC void func_0202f7d0(Menu *); + +class ProcMenu : public ProcEx +{ +public: + Menu * unk_38; + u8 unk_3c; + + ProcMenu(Menu * menu) + { + this->unk_38 = menu; + this->unk_3c = 0; + } + + // func_020301f4 + // func_02030264 + virtual ~ProcMenu() + { + if (this->unk_3c == 0) + { + func_0202f7d0(this->unk_38); + } + + this->unk_38->vfunc_dc(); + this->unk_38->vfunc_ec(); + + if (this->unk_38 != NULL) + { + this->unk_38->vfunc_134(); + } + } + + inline void func_0202d688() + { + this->unk_38->vfunc_e0(); + this->unk_38->vfunc_d8(); + + func_0202f674(this->unk_38); + + return; + } +}; + class DialogBase : public Menu { public: - u32 unk_50; + void * unk_50; DialogBase() { - this->unk_50 = 0; + this->unk_50 = NULL; } - virtual ~DialogBase(); + // func_02030ed0 + // func_02030e8c + virtual ~DialogBase() + { + if (this->unk_50 != NULL) + { + gHeap.Free(this->unk_50); + } + } }; class Dialog : public DialogBase { public: - Dialog(); // func_020302e0 - virtual ~Dialog(); + u32 unk_54; + + // func_020302e0 + Dialog(); + + // func_02030e0c + // func_02030e50 + virtual ~Dialog() + { + } + + virtual void vfunc_128(void); // func_02030330 }; class DialogYesNo : public Dialog diff --git a/include/unknown_funcs.h b/include/unknown_funcs.h index bea2c6b..9d0a6ae 100644 --- a/include/unknown_funcs.h +++ b/include/unknown_funcs.h @@ -1504,7 +1504,7 @@ EC void func_02028c68(void); // EC ??? func_02029480 // EC ??? func_0202957c EC s32 func_020295ec(struct UnkStruct_021970c4 *, char *, void *, void *, u32, u32, u32, u32, u32, u32); -EC void func_0202972c(struct UnkStruct_021970c4 *, char *, void *, u16 *, u32, u32, u32, u32, u32, u32, u32); +EC s32 func_0202972c(struct UnkStruct_021970c4 *, char *, void *, u16 *, u32, u32, u32, u32, u32, u32, u32); EC void func_02029850(struct UnkStruct_021970c4 *, s32, void *, u16 *, u32, u32, u32, u32, u32); EC void func_02029a1c(struct UnkStruct_021970c4 *, u32, void *, void *, u32, u32, u32, u32); // EC ??? func_02029ae8 diff --git a/src/menu.cpp b/src/menu.cpp new file mode 100644 index 0000000..358a3a0 --- /dev/null +++ b/src/menu.cpp @@ -0,0 +1,2038 @@ +#include "global.h" + +#include + +#include "hardware.hpp" +#include "heap.hpp" +#include "menu.hpp" +#include "sound_manager.hpp" + +#include "unknown_funcs.h" + +#include "constants/sounds.h" + +extern struct KeyState * gKeySt; +extern struct TouchState * gTouchSt; + +// func_0202d4c4 +Menu::Menu(void) +{ + s32 i; + + this->unk_10 = NULL; + this->unk_04 = 0; + this->unk_14 = 0x20; + this->unk_18 = 0; + this->unk_1c = 0; + this->unk_20 = 1; + this->unk_24 = 0; + this->unk_28 = 0; + this->unk_2c = 1; + this->unk_30 = 2; + this->unk_34 = this->unk_35 = this->unk_36 = this->unk_37 = -1; + this->unk_41 = 0; + this->unk_42 = 0; + this->unk_48 = 0; + this->unk_3b = 0; + this->unk_3c = 0; + this->unk_3e = 0; + this->unk_3f = 0; + this->unk_40 = 0; + this->unk_43 = 1; + this->unk_44 = 1; + this->unk_45 = 0; + this->unk_46 = 0; + this->unk_0c = 0; + this->unk_38 = 0; + this->unk_47 = 0; + + for (i = 0; i < 4; i++) + { + this->unk_4a[i] = -1; + } + + return; +} + +// func_0202d574 +// func_0202d5a8 +// func_0202d5e4 +Menu::~Menu() +{ + if (this->unk_0c != NULL) + { + gHeap.Free(this->unk_0c); + } +} + +EC void func_0202d618(ProcMenu * param_1) +{ + param_1->unk_38->vfunc_124(); + return; +} + +EC void func_0202f7d0(Menu *); + +EC void func_0202d630(ProcMenu * param_1) +{ + func_0202f7d0(param_1->unk_38); + param_1->unk_3c = 1; + + param_1->unk_38->vfunc_dc(); + param_1->unk_38->vfunc_e4(); + + func_02018f54((struct Proc *)param_1, 0); + + return; +} + +EC void func_0202f6d0(Menu *); + +EC void func_0202d678(ProcMenu * param_1) +{ + func_0202f6d0(param_1->unk_38); + return; +} + +EC void func_0202f8c4(Menu *); +EC void func_0202f674(Menu *); +EC void func_0202f72c(Menu *); + +EC void func_0202d688(ProcMenu * param_1) +{ + param_1->unk_38->vfunc_e0(); + param_1->unk_38->vfunc_d8(); + + func_0202f674(param_1->unk_38); + + return; +} + +EC void func_0202d6bc(ProcMenu * param_1) +{ + func_0202f72c(param_1->unk_38); + return; +} + +EC void func_0202d6cc(ProcMenu * param_1) +{ + param_1->unk_38->vfunc_120(); + return; +} + +EC void func_0202d6e4(ProcMenu * param_1) +{ + param_1->unk_38->vfunc_11c(); + return; +} + +EC void func_0202d6fc(Menu * param_1, s32 param_2) +{ + param_1->unk_10->unk_38->vfunc_11c(); + + param_1->unk_47 = 4; + + if (param_2 != 0) + { + param_1->vfunc_e8(); + } + + func_02018f54((struct Proc *)param_1->unk_10, (void *)func_0202d6bc); + + param_1->unk_10->func_0202d688(); + + Proc_Goto(param_1->unk_10, 0, 0); + + return; +} + +struct UnkStruct_021970c4 +{ + void * unk_00; + void * unk_04; + void * unk_08; +}; + +extern struct UnkStruct_021970c4 * data_021970c4; +extern struct UnkStruct_021970c4 * data_021970cc; + +// func_0202d78c +s32 MenuItem::vfunc_ac(MenuItemState * param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6) +{ + s32 bVar1; + s32 bVar2; + ScreenState * pSVar3; + s32 uVar6; + + bVar1 = param_2->unk_04; + bVar2 = param_2->unk_05; + uVar6 = 0; + + if (this->vfunc_04(param_2) != 0) + { + data_021970c4->unk_08 = (void *)((u32 *)(data_021970cc->unk_00))[this->vfunc_10(param_2)]; + + pSVar3 = gpActiveScreenSt; + + if (param_6 != 0) + { + uVar6 = func_0202972c( + data_021970c4, this->vfunc_04(param_2), pSVar3->bgTiles[param_3], pSVar3->tilemap[param_3], bVar1, + bVar2, param_4, param_5, param_6, 0, 0); + } + else + { + uVar6 = func_020295ec( + data_021970c4, this->vfunc_04(param_2), pSVar3->bgTiles[param_3], pSVar3->tilemap[param_3], bVar1, + bVar2, param_4, param_5, 0, 0); + } + } + + return uVar6; +} + +EC u32 func_02028e7c(UnkStruct_021970c4 *, char *, s32); + +// func_0202d8c8 +u32 MenuItem::vfunc_c8(MenuItemState * param_2) +{ + u32 uVar1 = this->vfunc_c4(); + + if (uVar1 != -1) + { + return uVar1; + } + + if (this->vfunc_04(param_2) != NULL) + { + return (func_02028e7c(data_021970c4, this->vfunc_04(param_2), 0) + 7 & ~7) / 8; + } + + return 0; +} + +// func_0202d948 +s32 MenuItem::vfunc_10(MenuItemState * param_2) +{ + if ((param_2->unk_09 & 7) != 1) + { + return MENU_COLOR_WHITE; + } + + return MENU_COLOR_GRAY; +} + +// func_0202d960 +void MenuItem::vfunc_b4(Menu * param_2, MenuItemState * param_3) +{ + param_2->vfunc_fc(param_3->unk_04, param_3->unk_05, param_3->unk_06, param_3->unk_07); + gpActiveScreenSt->unk_3e |= (1 << param_2->unk_30); + return; +} + +// func_0202d9bc +void MenuItem::vfunc_b8(Menu * param_2, MenuItemState * param_3) +{ + param_2->vfunc_108(param_3->unk_04, param_3->unk_05, param_3->unk_06, param_3->unk_07); + gpActiveScreenSt->unk_3e |= (1 << param_2->unk_30); + return; +} + +// func_0202da18 +void MenuItem::vfunc_bc(Menu * param_2, MenuItemState * param_3) +{ + param_2->vfunc_100(param_3->unk_04, param_3->unk_05, param_3->unk_06, param_3->unk_07); + gpActiveScreenSt->unk_3e |= (1 << param_2->unk_30); + return; +} + +// func_0202da74 +void MenuItem::vfunc_c0(Menu * param_2, MenuItemState * param_3) +{ + param_2->vfunc_fc(param_3->unk_04, param_3->unk_05, param_3->unk_06, param_3->unk_07); + gpActiveScreenSt->unk_3e |= (1 << param_2->unk_30); + return; +} + +EC BOOL func_0202dad0(MenuItemState * param_1, Menu * param_2) +{ + return (¶m_2->unk_0c[param_2->unk_38] == param_1) & 0xff; +} + +// func_0202daf4 +s32 Menu::vfunc_78(void) +{ + u32 uVar2; + + if (this->unk_3b == 0) + { + uVar2 = this->unk_0c[this->unk_38].unk_00->vfunc_24(this, &this->unk_0c[this->unk_38]); + return this->vfunc_24(&this->unk_0c[this->unk_38], uVar2); + } + + return 0; +} + +// func_0202db5c +s32 Menu::vfunc_7c(void) +{ + u32 uVar2; + + if (this->unk_3b == 0) + { + uVar2 = this->unk_0c[this->unk_38].unk_00->vfunc_30(this, &this->unk_0c[this->unk_38]); + return this->vfunc_2c(&this->unk_0c[this->unk_38], uVar2); + } + + return 0x800; +} + +// func_0202dbc4 +s32 Menu::vfunc_80(void) +{ + u32 uVar2; + + if (this->unk_3b == 0) + { + uVar2 = this->unk_0c[this->unk_38].unk_00->vfunc_3c(this, &this->unk_0c[this->unk_38]); + return this->vfunc_34(&this->unk_0c[this->unk_38], uVar2); + } + + return 0; +} + +// func_0202dc2c +s32 Menu::vfunc_84(void) +{ + u32 uVar2; + + if (this->unk_3b == 0) + { + uVar2 = this->unk_0c[this->unk_38].unk_00->vfunc_48(this, &this->unk_0c[this->unk_38]); + return this->vfunc_3c(&this->unk_0c[this->unk_38], uVar2); + } + + return 0; +} + +// func_0202dc94 +s32 Menu::vfunc_88(void) +{ + u32 uVar2; + + if (this->unk_3b == 0) + { + uVar2 = this->unk_0c[this->unk_38].unk_00->vfunc_54(this, &this->unk_0c[this->unk_38]); + return this->vfunc_44(&this->unk_0c[this->unk_38], uVar2); + } + + return 0; +} + +// func_0202dcfc +s32 Menu::vfunc_8c(void) +{ + u32 uVar2; + + if (this->unk_3b != 0) + { + return this->vfunc_4c(&this->unk_0c[this->unk_38], 0x800); + } + + uVar2 = this->unk_0c[this->unk_38].unk_00->vfunc_60(this, &this->unk_0c[this->unk_38]); + return this->vfunc_4c(&this->unk_0c[this->unk_38], uVar2); +} + +// func_0202dd84 +s32 Menu::vfunc_90(void) +{ + u32 uVar2; + + if (this->unk_3b == 0) + { + uVar2 = this->unk_0c[this->unk_38].unk_00->vfunc_6c(this, &this->unk_0c[this->unk_38]); + return this->vfunc_54(&this->unk_0c[this->unk_38], uVar2); + } + + return 0; +} + +EC void func_0202fef8(Menu *); +EC void func_0202ff08(void); +EC void func_0202fe9c(Menu *, s32); +EC void func_0202febc(s32); + +// func_0202ddec +void Menu::vfunc_64(void) +{ + s32 r5; + u32 action; + s32 touchIndex; + s32 prevTouchIndex; + s32 i; + + action = 0; + touchIndex = -1; + prevTouchIndex = -1; + + this->unk_39 = this->unk_38; + + if (this->unk_43 == 0 || this->unk_43 > 1) + { + if (this->unk_43 > 1) + { + this->unk_43--; + return; + } + + this->unk_3c = 0; + return; + } + + if (this->vfunc_ac()) + { + action = this->vfunc_60(); + } + + if (this->unk_44 != 0) + { + if (gTouchSt->unk_12 != 0 || gTouchSt->unk_15 != 0) + { + for (i = 0; i < this->unk_3a; i++) + { + MenuItemState * item = &this->unk_0c[i]; + + if ((item->unk_09 & 7) == 3) + { + continue; + } + + if (!this->vfunc_b0(item, gTouchSt->unk_00, gTouchSt->unk_02)) + { + continue; + } + + touchIndex = i; + break; + } + + if (gTouchSt->unk_14) + { + this->unk_3d = (u8)touchIndex; + this->unk_3c = 1; + } + + if (touchIndex != this->unk_3d) + { + this->unk_3c = 0; + } + + if (this->unk_3c && touchIndex == -1 && + (!this->vfunc_94(gTouchSt->unk_00, gTouchSt->unk_02) || + this->vfunc_98(gTouchSt->unk_00, gTouchSt->unk_02))) + { + this->unk_3c = 0; + } + + if (touchIndex != -1) + this->unk_38 = touchIndex; + + prevTouchIndex = touchIndex; + + if (gTouchSt->unk_15 == 0 && touchIndex != -1) + { + if (this->unk_3e == 0) + { + this->unk_0c[this->unk_38].unk_00->vfunc_bc(this, &this->unk_0c[this->unk_38]); + this->unk_3e = 1; + } + } + else if (this->unk_3e != 0) + { + this->unk_0c[this->unk_38].unk_00->vfunc_c0(this, &this->unk_0c[this->unk_38]); + this->unk_3e = 0; + } + } + } + else + { + this->unk_3c = 0; + + if (gKeySt->repeated & KEY_DPAD_UP) + { + this->vfunc_68(((gKeySt->pressed & KEY_DPAD_UP) != 0) & 0xFF); + } + + if (gKeySt->repeated & KEY_DPAD_DOWN) + { + this->vfunc_6c(((gKeySt->pressed & KEY_DPAD_DOWN) != 0) & 0xFF); + } + + if (gKeySt->repeated & KEY_DPAD_LEFT) + { + this->vfunc_70(((gKeySt->pressed & KEY_DPAD_LEFT) != 0) & 0xFF); + } + + if (gKeySt->repeated & KEY_DPAD_RIGHT) + { + this->vfunc_74(((gKeySt->pressed & KEY_DPAD_RIGHT) != 0) & 0xFF); + } + + if (action == 0 && (gKeySt->repeated & KEY_DPAD_ANY)) + { + action = this->vfunc_90(); + } + } + + if (this->unk_39 != this->unk_38) + { + if (this->unk_3e) + { + this->unk_0c[this->unk_38].unk_00->vfunc_c0(this, &this->unk_0c[this->unk_38]); + this->unk_3e = 0; + } + + this->unk_0c[this->unk_39].unk_00->vfunc_b8(this, &this->unk_0c[this->unk_39]); + this->unk_0c[this->unk_38].unk_00->vfunc_b4(this, &this->unk_0c[this->unk_38]); + this->unk_0c[this->unk_39].unk_00->vfunc_84(this, &this->unk_0c[this->unk_39]); + this->unk_0c[this->unk_38].unk_00->vfunc_78(this, &this->unk_0c[this->unk_38]); + + this->vfunc_bc(); + } + + if (this->unk_44 != 0) + { + if ((gTouchSt->unk_12 != 0) || (gTouchSt->unk_15 != 0)) + { + if (gTouchSt->unk_15 != 0) + { + if (((gTouchSt->unk_10 < 30) ? TRUE : FALSE) && this->unk_3c != 0) + { + if (touchIndex == this->unk_3d) + { + if (touchIndex == -1) + { + action = this->vfunc_7c(); + } + else + { + action = this->vfunc_78(); + } + } + } + } + + goto _0202e430; + } + } + + if (action == 0 && (gKeySt->pressed & KEY_BUTTON_A)) + { + action = this->vfunc_78(); + } + + if (action == 0 && (gKeySt->pressed & KEY_BUTTON_B)) + { + action = this->vfunc_7c(); + } + + if (action == 0 && (gKeySt->pressed & KEY_BUTTON_X)) + { + action = this->vfunc_80(); + } + + if (action == 0 && (gKeySt->pressed & KEY_BUTTON_Y)) + { + action = this->vfunc_84(); + } + + if (action == 0 && (gKeySt->pressed & KEY_BUTTON_L)) + { + action = this->vfunc_88(); + } + + if (action == 0 && (gKeySt->pressed & KEY_BUTTON_R)) + { + action = this->vfunc_8c(); + } + + if (action == 0 && (gKeySt->pressed & KEY_BUTTON_START)) + { + action = this->vfunc_58(action); + } + +_0202e430: + if (action == 0 && this->vfunc_9c()) + { + action = this->vfunc_78(); + } + + if (action == 0 && this->vfunc_a0()) + { + action = this->vfunc_7c(); + } + + if (action == 0 && this->vfunc_a4()) + { + action = this->vfunc_8c(); + } + + if (action == 0 && this->vfunc_a8()) + { + action = this->vfunc_58(action); + } + + if (action & 0x40) + { + this->vfunc_c0(); + } + else if (action & 0x80) + { + this->vfunc_c4(); + } + else if (action & 0x100) + { + this->vfunc_c8(); + } + + if (action & 0x1000) + { + if (this->unk_10->proc_parent != NULL) + { + Proc_Lock((struct Proc *)this->unk_10->proc_parent); + } + } + + r5 = ((action & 0x2000) != 0) & 0xFF; + + if (action & 8) + { + func_0202fef8(this); + return; + } + + if (action & 0x10) + { + func_0202fef8(this->unk_04); + return; + } + + if (action & 0x20) + { + func_0202ff08(); + return; + } + + if (action & 1) + { + func_0202fe9c(this, r5); + return; + } + + if (action & 2) + { + func_0202fe9c(this, r5); + func_0202fe9c(this->unk_04, r5); + return; + } + + if (action & 4) + { + func_0202febc(r5); + return; + } +} + +// func_0202e60c +void Menu::vfunc_bc(void) +{ + gSoundManager->unk_b0->vfunc_28(SE_SYS_CURSOL2_WIN1, 0, 0); + return; +} + +// func_0202e640 +void Menu::vfunc_c0(void) +{ + gSoundManager->unk_b0->vfunc_28(SE_SYS_SELECT1, 0, 0); + return; +} + +// func_0202e674 +void Menu::vfunc_c4(void) +{ + gSoundManager->unk_b0->vfunc_28(SE_SYS_CANSEL1, 0, 0); + return; +} + +// func_0202e6a8 +void Menu::vfunc_c8(void) +{ + gSoundManager->unk_b0->vfunc_28(SE_SYS_MISS1, 0, 0); + return; +} + +// func_0202e6dc +BOOL Menu::vfunc_b0(MenuItemState * arg1, s32 arg2, s32 arg3) +{ + if ((arg2 < ((arg1->unk_04 - 1) * 8)) || (arg2 >= ((arg1->unk_04 + arg1->unk_06 + 1) * 8))) + { + return FALSE; + } + + if ((arg3 < (arg1->unk_05 * 8)) || (arg3 >= ((arg1->unk_05 + arg1->unk_07) * 8))) + { + return FALSE; + } + + return TRUE; +} + +// func_0202e734 +BOOL Menu::vfunc_b4(void) +{ + s32 i; + + for (i = 0; i < this->unk_3a; i++) + { + if (this->vfunc_b0(&this->unk_0c[i], gTouchSt->unk_00, gTouchSt->unk_02)) + { + return TRUE; + } + } + + return FALSE; +} + +// func_0202e7a4 +void Menu::vfunc_68(s32 param_2) +{ + MenuItemState * pMVar1; + int iVar2; + int iVar3; + int iVar4; + u32 uVar5; + MenuItemState * pMVar6; + + iVar2 = IntSys_Div(this->unk_38, this->unk_48); + + uVar5 = this->unk_48; + iVar2 = iVar2 * uVar5; + if (this->unk_3a < (iVar2 + uVar5)) + { + uVar5 = this->unk_3a - iVar2; + } + + iVar3 = this->unk_38 - iVar2; + + while (TRUE) + { + if (iVar3 == 0) + { + if (param_2 != 0) + { + this->unk_3f = 1; + iVar3 = uVar5 - 1; + } + } + else + { + iVar3--; + } + + if (iVar3 == 0) + { + for (pMVar6 = &this->unk_0c[iVar2]; (pMVar6->unk_09 & 7) == 3; pMVar6++) + { + iVar3++; + } + } + + if ((this->unk_0c[iVar2 + iVar3].unk_09 & 7) == 3) + { + break; + } + } + + this->unk_38 = iVar2 + iVar3; + + return; +} + +// func_0202e874 +void Menu::vfunc_6c(s32 param_2) +{ + s32 iVar2; + s32 iVar3; + s32 uVar5; + MenuItemState * pMVar6; + + iVar2 = IntSys_Div(this->unk_38, this->unk_48); + + uVar5 = this->unk_48; + iVar2 = iVar2 * uVar5; + + if ((iVar2 + uVar5) > this->unk_3a) + { + uVar5 = this->unk_3a - iVar2; + } + + iVar3 = this->unk_38 - iVar2; + + while (TRUE) + { + if (iVar3 < (uVar5 - 1)) + { + iVar3++; + } + else if (param_2 != 0) + { + this->unk_3f = 1; + iVar3 = 0; + } + + if (iVar3 >= (uVar5 - 1)) + { + for (pMVar6 = &this->unk_0c[iVar2 + iVar3]; (pMVar6->unk_09 & 7) == 3; pMVar6--) + { + iVar3--; + } + } + + if ((this->unk_0c[iVar2 + iVar3].unk_09 & 7) != 3) + { + break; + } + } + + this->unk_38 = iVar2 + iVar3; + + return; +} + +EC void func_020208b0(s32, s32, s32 *, s32 *); + +// func_0202e94c +EC void Menu::vfunc_70(s32 param_2) +{ + s32 iVar1; + s32 acStack_14; + s32 iStack_18; + + iVar1 = IntSys_Div(this->unk_3a + this->unk_48 - 1, this->unk_48); + + if (iVar1 != 0) + { + func_020208b0(this->unk_38, this->unk_48, &iStack_18, &acStack_14); + + if (iStack_18 != 0) + { + iStack_18--; + } + else + { + if (param_2 != 0) + { + iStack_18 = iVar1 - 1; + this->unk_3f = 1; + } + } + + this->unk_38 = iStack_18 * this->unk_48 + acStack_14; + } + + return; +} + +// func_0202e9d8 +EC void Menu::vfunc_74(s32 param_2) +{ + s32 iVar1; + s32 acStack_14; + s32 iStack_18; + + iVar1 = IntSys_Div(this->unk_3a + this->unk_48 - 1, this->unk_48); + + if (iVar1 != 0) + { + func_020208b0(this->unk_38, this->unk_48, &iStack_18, &acStack_14); + + if (iStack_18 < iVar1 - 1) + { + iStack_18++; + } + else if (param_2 != 0) + { + iStack_18 = 0; + this->unk_3f = 1; + } + + this->unk_38 = iStack_18 * this->unk_48 + acStack_14; + } + + return; +} + +// func_0202ea68 +void Menu::vfunc_d8(void) +{ + s32 iVar1; + MenuItemState * pMVar2; + s32 iVar3; + s32 iVar4; + + iVar3 = this->unk_14; + + pMVar2 = this->unk_0c; + + for (iVar4 = 0; iVar4 < this->unk_3a; iVar4++) + { + if (this->unk_40 != 0) + { + iVar1 = (this->unk_36 - 2) * 8; + } + else + { + iVar1 = 0; + } + + iVar1 = pMVar2->unk_00->vfunc_ac(pMVar2, this->unk_2c, iVar3, this->unk_18, iVar1); + iVar3 = iVar3 + iVar1; + pMVar2 = pMVar2 + 1; + } + + data_021970c4->unk_08 = data_021970cc->unk_04; + gpActiveScreenSt->unk_3e |= 1 << this->unk_2c; + + return; +} + +EC void func_02010f98(u16 *, s32, s32); + +// func_0202eb2c +void Menu::vfunc_dc(void) +{ + s32 i; + s32 quotient; + s32 iVar6; + + quotient = IntSys_Div(this->unk_3a + this->unk_48 - 1, this->unk_48); + + for (i = 0; i < quotient; i++) + { + if (i == 0) + { + iVar6 = this->unk_37; + } + else + { + iVar6 = this->unk_4a[i]; + } + + func_02010f98( + (u16 *)(gpActiveScreenSt->tilemap[this->unk_2c]) + (this->unk_36 * i + this->unk_34 + 1) + + ((this->unk_35 + 1) * 0x20), + (u16)(this->unk_36 - 2), (u16)(iVar6 - 2)); + } + + gpActiveScreenSt->unk_3e |= 1 << this->unk_2c; + + return; +} + +// func_0202ebe8 +s32 Menu::vfunc_cc(void) +{ + return this->unk_47; +} + +// func_0202ebf0 +void Menu::vfunc_d0(s32 param_2) +{ + this->unk_47 = param_2; + return; +} + +// func_0202ebf8 +s32 Menu::vfunc_d4(s32 index) +{ + s32 offset; + + if (index == -1) + { + index = this->unk_36; + } + + if (index >= 8) + { + return (index * this->vfunc_cc()) >> 2; + } + + offset = index - ((4 - this->vfunc_cc()) * 2); + + return MAX(offset, 0); +} + +struct Idk +{ + s32 a; + s32 b; + s32 c; + s32 d; +}; +EC void func_0202a718(void *, s32, s32, struct Idk *); + +// func_0202ec44 +void Menu::vfunc_f0(s32 arg1, s32 arg2, s32 arg3, s32 arg4) +{ + struct Idk sp; + sp.a = arg4; + sp.b = this->unk_1c; + sp.c = this->unk_20; + sp.d = this->unk_36; + func_0202a718(gpActiveScreenSt->tilemap[this->unk_30], arg1, arg2, &sp); +} + +// func_0202ec90 +void Menu::vfunc_e8(void) +{ + s32 bVar1; + s32 iVar2; + s32 iVar3; + s32 iVar4; + s32 iVar5; + s32 iVar6; + + iVar2 = this->vfunc_d4(-1); + + iVar5 = (this->unk_36 >> 1) - (iVar2 >> 1); + + if (iVar2 >= 2) + { + iVar3 = IntSys_Div(this->unk_3a + this->unk_48 - 1, this->unk_48); + + for (iVar6 = 0; iVar6 < iVar3; iVar6++) + { + if (iVar6 == 0) + { + bVar1 = this->unk_37; + } + else + { + bVar1 = this->unk_4a[iVar6]; + } + + this->vfunc_f0(iVar5 + this->unk_36 * iVar6 + this->unk_34, this->unk_35, iVar2, bVar1); + + iVar4 = this->unk_38; + + if ((iVar4 >= (this->unk_48 * iVar6)) && (iVar4 < (this->unk_48 * (iVar6 + 1)))) + { + MenuItemState * mis = &this->unk_0c[iVar4]; + this->vfunc_fc( + iVar5 + this->unk_36 * iVar6 + this->unk_34 + 1, mis->unk_05, iVar2 - 2, mis->unk_07); + } + } + } + + gpActiveScreenSt->unk_3e |= 1 << this->unk_30; + + return; +} + +EC void func_0202b260(void *, s32, s32, s32, s32); + +// func_0202edc0 +void Menu::vfunc_f4(s32 param_2, s32 param_3, s32 param_4, s32 param_5) +{ + func_0202b260(gpActiveScreenSt->tilemap[this->unk_30], param_2, param_3, param_4, param_5); + return; +} + +// func_0202edec +void Menu::vfunc_ec(void) +{ + s32 r4; + s32 bVar2; + s32 r5; + s32 r6; + s32 r7; + + r5 = this->vfunc_d4(-1); + + r4 = ((this->unk_36 >> 1) - (r5 >> 1)); + + r7 = IntSys_Div(this->unk_3a + this->unk_48 - 1, this->unk_48); + + for (r6 = 0; r6 < r7; r6++) + { + if (r6 == 0) + { + bVar2 = this->unk_37; + } + else + { + bVar2 = this->unk_4a[r6]; + } + + this->vfunc_f4(r4 + (this->unk_36 * r6 + this->unk_34), this->unk_35, r5, bVar2); + } + + gpActiveScreenSt->unk_3e |= 1 << this->unk_30; + + return; +} + +// func_0202eeac +void Menu::vfunc_fc(s32 param_2, s32 param_3, s32 param_4, s32 param_5) +{ + this->vfunc_f8(gpActiveScreenSt->tilemap[this->unk_30], param_2, param_3, param_4, param_5); + return; +} + +EC void func_0202ad68(void *, s32, s32, s32, s32, s32, s32, s32, s32); + +// func_0202eef0 +void Menu::vfunc_f8(void * param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6) +{ + func_0202ad68(param_2, param_3, param_4, param_5, param_6, this->unk_1c, this->unk_20, 0, 0); + return; +} + +EC void func_0202b014(void *, s32, s32, s32, s32); + +// func_0202ef38 +void Menu::vfunc_100(s32 param_2, s32 param_3, s32 param_4, s32 param_5) +{ + func_0202b014(gpActiveScreenSt->tilemap[this->unk_30], param_2, param_3, param_4, param_5); + return; +} + +// func_0202ef7c +void Menu::vfunc_108(s32 param_2, s32 param_3, s32 param_4, s32 param_5) +{ + this->vfunc_104(gpActiveScreenSt->tilemap[this->unk_30], param_2, param_3, param_4, param_5); + return; +} + +EC void func_0202b1e4(void *, s32, s32, s32, s32, s32, s32); + +// func_0202efc0 +void Menu::vfunc_104(void * param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6) +{ + func_0202b1e4(param_2, param_3, param_4, param_5, param_6, this->unk_1c, this->unk_20); + return; +} + +// func_0202effc +s32 Menu::vfunc_10c(void) +{ + return this->unk_10->proc_lockCnt; +} + +EC void func_0202f040(Menu *, s32, s32, s32); + +// func_0202f008 +void Menu::vfunc_110(void) +{ + func_0202f040(this, 0, 0, 0); +} + +EC void func_0202f020(Menu * param_1, s32 param_2, s32 param_3) +{ + func_0202f040(param_1, param_2, param_3, 1); +} + +EC void func_0202f030(Menu * param_1, s32 param_2, s32 param_3) +{ + func_0202f040(param_1, param_2, param_3, 2); +} + +EC void func_0202b538(u16, u16, u32, u32); +EC void func_0202b624(u16, u16, u32, u32); +EC void func_0202b31c(u16, u16, u32, u32); + +EC void func_0202f040(Menu * param_1, s32 param_2, s32 param_3, s32 param_4) +{ + s32 sVar1; + s32 sVar2; + s32 a; + s32 r3; + u32 bVar3; + u32 bVar4; + u32 bVar5; + s32 iVar6; + s32 iVar7; + MenuItemState * pMVar8; + MenuItemState * pMVar9; + s32 iVar10; + s32 iVar11; + + switch (param_4) + { + case 0: + iVar10 = param_3 - 8; + break; + + case 1: + iVar10 = param_3 - 0x20; + break; + + case 2: + iVar10 = param_3 - 0x18; + break; + } + + pMVar8 = param_1->unk_0c; + bVar3 = pMVar8[param_1->unk_39].unk_04; + iVar6 = pMVar8[param_1->unk_39].unk_00->vfunc_cc(); + + pMVar9 = param_1->unk_0c; + bVar4 = pMVar8[param_1->unk_39].unk_05; + iVar11 = pMVar9[param_1->unk_38].unk_04 * 8; + iVar7 = pMVar9[param_1->unk_38].unk_00->vfunc_cc(); + iVar7 = iVar7 * 4 + pMVar9[param_1->unk_38].unk_05 * 8; + + if (param_1->unk_3f == 0) + { + iVar11 = iVar11 + ((bVar3 * 8 + bVar5 * -8) >> 1); + iVar7 = iVar7 + (((iVar6 * 4 + bVar4 * 8) - iVar7) >> 1); + } + + iVar11 = param_2 - 0x10 + iVar11; + iVar10 = iVar10 + iVar7; + + a = param_1->vfunc_10c(); + + switch (param_4) + { + case 0: + r3 = a ? param_1->unk_42 + 1 : param_1->unk_42; + func_0202b31c( + iVar11, iVar10, + (param_1->unk_28 << 0xc) | (param_1->unk_41 << 0x1e) >> 0x14 | + (param_1->unk_24 >> gpActiveScreenSt->dispIo->dispcnt.bit_13_14) & 0x3ffU, + r3); + break; + + case 1: + r3 = a ? param_1->unk_42 + 1 : param_1->unk_42; + func_0202b538( + iVar11, iVar10, + (param_1->unk_28 << 0xc) | (param_1->unk_41 << 0x1e) >> 0x14 | + (param_1->unk_24 >> gpActiveScreenSt->dispIo->dispcnt.bit_13_14) & 0x3ffU, + r3); + break; + + case 2: + r3 = a ? param_1->unk_42 + 1 : param_1->unk_42; + func_0202b624( + iVar11, iVar10, + (param_1->unk_28 << 0xc) | (param_1->unk_41 << 0x1e) >> 0x14 | + (param_1->unk_24 >> gpActiveScreenSt->dispIo->dispcnt.bit_13_14) & 0x3ffU, + r3); + break; + } + + return; +} + +// func_0202f2a0 +void Menu::vfunc_118(void) +{ + return; +} + +// func_0202f2a4 +EC void Menu::vfunc_08(void) +{ + s32 iVar1; + s32 iVar2; + s32 iVar3; + MenuItemState * pMVar4; + + iVar1 = 0; + iVar2 = iVar1; + for (pMVar4 = this->unk_0c, iVar3 = 0; iVar3 < this->unk_3a; iVar3++, pMVar4++) + { + pMVar4->unk_04 = 1; + + iVar1 = pMVar4->unk_00->vfunc_c8(pMVar4); + + if (iVar1 <= iVar2) + { + iVar1 = iVar2; + } + + iVar2 = iVar1; + } + + if (this->unk_36 == -1) + { + this->unk_36 = iVar1 + 2; + } + + for (pMVar4 = this->unk_0c, iVar3 = 0; iVar1 < this->unk_3a; iVar3++, pMVar4++) + { + pMVar4->unk_06 = this->unk_36 - 2; + } + + return; +} + +// func_0202f34c +void Menu::vfunc_0c(void) +{ + u32 bVar1; + s32 cVar2; + MenuItemState * pMVar3; + s32 cVar4; + s32 i; + u32 uVar6; + s32 iVar7; + + cVar2 = 0; + cVar4 = 0; + iVar7 = 0; + uVar6 = 0; + + for (i = 0, pMVar3 = this->unk_0c; i < this->unk_3a; i++, pMVar3++) + { + if (uVar6 == 0) + { + cVar2 = 0; + } + + pMVar3->unk_05 = cVar2 + 1; + + bVar1 = pMVar3->unk_00->vfunc_cc(); + + pMVar3->unk_07 = bVar1; + cVar4 = cVar2 + bVar1; + + if (uVar6 != this->unk_48 - 1) + { + cVar4 = cVar4 + pMVar3->unk_00->vfunc_d0(); + } + + uVar6 = uVar6 + 1; + + if (uVar6 == this->unk_48) + { + if (iVar7 == 0) + { + if (this->unk_37 == -1) + { + this->unk_37 = cVar4 + 2; + } + } + else if (this->unk_4a[iVar7] == -1) + { + this->unk_4a[iVar7] = cVar4 + 2; + } + + uVar6 = 0; + iVar7 = iVar7 + 1; + } + } + + if (uVar6 == 0) + { + return; + } + + if (iVar7 == 0) + { + if (this->unk_37 == -1) + { + this->unk_37 = cVar4 + 2; + } + + return; + } + + if (this->unk_4a[iVar7] == -1) + { + this->unk_4a[iVar7] = cVar4 + 2; + } + + return; +} + +// func_0202f468 +void Menu::vfunc_10(void) +{ + this->vfunc_08(); + this->vfunc_0c(); + + return; +} + +// func_0202f490 +EC void Menu::vfunc_14(void) +{ + s32 iVar1; + + if (this->unk_34 == -1) + { + iVar1 = IntSys_Div(this->unk_3a + this->unk_48 - 1, this->unk_48); + this->unk_34 = ((u32)(0x20 - ((this->unk_36 * iVar1 + 1) & ~1)) >> 1); + } + + if (this->unk_35 == -1) + { + this->unk_35 = ((u32)(0x18 - ((this->unk_37 + 1) & ~1)) >> 1); + } + + return; +} + +// func_0202f504 +void Menu::vfunc_18(void) +{ + MenuItemState * pMVar1; + s32 i; + u32 uVar3 = 0; + u32 cVar4 = 0; + + for (i = 0, pMVar1 = this->unk_0c; i < this->unk_3a; i++, pMVar1++) + { + uVar3++; + + pMVar1->unk_04 = this->unk_36 * cVar4 + this->unk_34 + pMVar1->unk_04; + pMVar1->unk_05 = this->unk_35 + pMVar1->unk_05; + + if (uVar3 == this->unk_48) + { + uVar3 = 0; + cVar4++; + } + } + + return; +} + +// func_0202f57c +void Menu::vfunc_1c(void) +{ + this->vfunc_10(); + this->vfunc_14(); + this->vfunc_18(); + + return; +} + +// func_0202f5b4 +void Menu::vfunc_11c(void) +{ + s32 i; + + for (i = 0; i < this->unk_3a; i++) + { + this->unk_0c[i].unk_00->vfunc_90(this, &this->unk_0c[i]); + } + + return; +} + +// func_0202f604 +void Menu::vfunc_120(void) +{ + this->vfunc_ec(); + + if (++this->unk_47 > 4) + { + this->unk_47 = 4; + } + + this->vfunc_e8(); + this->vfunc_b8(this->unk_47); + + if (this->unk_47 == 4) + { + Proc_Break(this->unk_10, 1); + } + + return; +} + +EC void func_0202fc30(Menu * param_1, s32 param_2, s32 param_3); + +// func_0202f674 +EC void func_0202f674(Menu * param_1) +{ + param_1->unk_0c[param_1->unk_38].unk_00->vfunc_b0(param_1, ¶m_1->unk_0c[param_1->unk_38]); + param_1->unk_0c[param_1->unk_38].unk_00->vfunc_78(param_1, ¶m_1->unk_0c[param_1->unk_38]); + return; +} + +// func_0202f6d0 +EC void func_0202f6d0(Menu * param_1) +{ + if (param_1->unk_45 != 0) + { + func_0202fc30(param_1, 0, 1); + } + + param_1->vfunc_64(); + + param_1->unk_0c[param_1->unk_38].unk_00->vfunc_9c(param_1, ¶m_1->unk_0c[param_1->unk_38]); + + return; +} + +EC void func_0202f72c(Menu * param_1) +{ + MenuItemState * pMVar1; + s32 iVar2; + + if (param_1->unk_45 != 0) + { + func_0202fc30(param_1, 0, 1); + } + + param_1->vfunc_110(); + param_1->vfunc_118(); + param_1->vfunc_114(); + + for (pMVar1 = param_1->unk_0c, iVar2 = 0; iVar2 < param_1->unk_3a; iVar2++, pMVar1++) + { + pMVar1->unk_00->vfunc_a8(param_1, pMVar1); + } + + param_1->unk_39 = param_1->unk_38; + param_1->unk_3f = 0; + + return; +} + +EC void func_0202f7d0(Menu * param_1) +{ + param_1->unk_0c[param_1->unk_38].unk_00->vfunc_84(param_1, ¶m_1->unk_0c[param_1->unk_38]); + return; +} + +// func_0202f800 +void Menu::vfunc_124(void) +{ + this->vfunc_ec(); + + this->unk_47--; + + this->vfunc_e8(); + + this->vfunc_b8(this->unk_47); + + if (this->unk_47 == 0) + { + Proc_Break(this->unk_10, 1); + } + + return; +} + +EC s32 func_0202f860(Menu * param_1) +{ + MenuItem * piVar1; + + MenuItem ** piVar3 = param_1->unk_08; + s32 iVar4 = 0; + + for (piVar1 = *piVar3; piVar1 != NULL; piVar1 = *++piVar3) + { + iVar4 += piVar1->vfunc_d4(); + } + + return iVar4; +} + +// func_0202f89c +void Menu::vfunc_12c(void) +{ + this->unk_0c = static_cast(gHeap.Alloc(func_0202f860(this) * sizeof(MenuItemState))); + return; +} + +EC void func_0202f8c4(Menu * param_1) +{ + MenuItem * piVar1; + MenuItem ** piVar4; + s32 iVar5; + s32 iVar6; + s32 i; + s32 iVar2; + s32 uVar11; + + piVar4 = param_1->unk_08; + + if (param_1->unk_0c == NULL) + { + param_1->vfunc_12c(); + } + + iVar6 = 0; + iVar5 = 0; + + param_1->unk_48 = param_1->unk_49; + + for (piVar1 = *piVar4; piVar1 != NULL; piVar1 = *++piVar4) + { + iVar2 = (*piVar4)->vfunc_d4(); + + for (i = 0; i < iVar2; i++) + { + uVar11 = (*piVar4)->vfunc_18(iVar5); + + if (!(iVar6 == 0 && param_1->unk_46 == 0 && (uVar11 & 7) == 3) && (uVar11 & 7) != 2) + { + param_1->unk_0c[i].unk_00 = *piVar4; + + param_1->unk_0c[i].unk_09 = uVar11; + param_1->unk_0c[i].unk_08 = iVar5; + + if (param_1->unk_38 == iVar5 && uVar11 == 3) + { + param_1->unk_38++; + } + else if ((uVar11 & 8) != 0) + { + param_1->unk_38 = iVar6; + } + + iVar6++; + } + + iVar5++; + } + } + + if (param_1->unk_38 >= iVar6) + { + param_1->unk_38 = iVar6 - 1; + } + + param_1->unk_3a = iVar6; + + if ((param_1->unk_48 == 0) || (param_1->unk_48 >= param_1->unk_3a)) + { + param_1->unk_48 = param_1->unk_3a; + } + + param_1->vfunc_1c(); + + param_1->unk_39 = param_1->unk_38; + + return; +} + +EC void func_0202a5e0(void *, s32, s32); + +// func_0202fa1c +void Menu::vfunc_128(void) +{ + func_0202a4dc(this->unk_18, 0); + func_0202a5e0(gpActiveScreenSt->bgTiles[this->unk_30], this->unk_1c, this->unk_20); + func_0202b294((void *)gpActiveScreenSt->objVram, this->unk_24, this->unk_28); + return; +} + +extern struct ProcCmd data_020d3dd4[]; + +EC void func_0202fa70(Menu * param_1, MenuItem ** param_2, s32 param_3) +{ + param_1->unk_08 = param_2; + + param_1->vfunc_00(); + + if (param_3 != 0) + { + param_1->vfunc_128(); + } + + param_1->unk_49 = param_1->unk_48; + + func_0202f8c4(param_1); + + param_1->vfunc_04(); + + if (param_1->unk_04 != NULL) + { + param_1->unk_10 = new (Proc_StartBlocking(data_020d3dd4, param_1->unk_04->unk_10)) ProcMenu(param_1); + } + else + { + param_1->unk_10 = new (Proc_Start(data_020d3dd4, PROC_TREE_9)) ProcMenu(param_1); + } + return; +} + +EC void func_0202fb38(Menu * param_1, MenuItem ** param_2, ProcPtr param_3, u32 param_4, u8 param_5) +{ + param_1->unk_08 = param_2; + + if ((!IsRootProcess((struct Proc *)param_3)) && (func_020190c4((struct Proc *)param_3) == data_020d3dd4)) + { + param_1->unk_04 = static_cast(param_3)->unk_38; + } + + param_1->vfunc_00(); + + if (param_5 != 0) + { + param_1->vfunc_128(); + } + + param_1->unk_49 = param_1->unk_48; + + func_0202f8c4(param_1); + + param_1->vfunc_04(); + + if (param_4) + { + param_1->unk_10 = new (Proc_StartBlocking(data_020d3dd4, param_3)) ProcMenu(param_1); + } + else + { + param_1->unk_10 = new (Proc_Start(data_020d3dd4, param_3)) ProcMenu(param_1); + } +} + +EC void func_0202fc30(Menu * param_1, s32 param_2, s32 param_3) +{ + param_1->unk_0c[param_1->unk_38].unk_00->vfunc_84(param_1, ¶m_1->unk_0c[param_1->unk_38]); + + param_1->vfunc_dc(); + param_1->vfunc_ec(); + + if (param_2 != 0) + { + param_1->unk_34 = param_1->unk_35 = -1; + } + + if (param_3 != 0) + { + param_1->unk_36 = param_1->unk_37 = -1; + } + + func_0202f8c4(param_1); + + param_1->vfunc_e8(); + param_1->vfunc_d8(); + + param_1->unk_3f = 1; + + param_1->unk_0c[param_1->unk_38].unk_00->vfunc_78(param_1, ¶m_1->unk_0c[param_1->unk_38]); + + param_1->unk_45 = 0; + + return; +} + +EC void func_0202fd1c(Menu * param_1, s32 param_2, s32 param_3) +{ + if (param_3 != 0 || param_2 != param_1->unk_38) + { + param_1->unk_0c[param_1->unk_38].unk_00->vfunc_b8(param_1, ¶m_1->unk_0c[param_1->unk_38]); + param_1->unk_0c[param_1->unk_38].unk_00->vfunc_84(param_1, ¶m_1->unk_0c[param_1->unk_38]); + + param_1->vfunc_ec(); + + param_1->unk_39 = param_2; + param_1->unk_38 = param_2; + + param_1->vfunc_e8(); + + param_1->unk_0c[param_1->unk_38].unk_00->vfunc_78(param_1, ¶m_1->unk_0c[param_1->unk_38]); + param_1->unk_0c[param_1->unk_38].unk_00->vfunc_b4(param_1, ¶m_1->unk_0c[param_1->unk_38]); + + param_1->unk_3f = 1; + } + + return; +} + +EC void func_02033f98(void); +EC BOOL func_02033f54(ProcMenu *); + +EC BOOL func_0202fe14(ProcMenu * param_1) +{ + if (func_020190c4((struct Proc *)param_1) == data_020d3dd4) + { + return TRUE; + } + + return func_02033f54(param_1) != 0; +} + +EC void func_0202fe4c(ProcMenu * param_1) +{ + ProcMenu * p; + + Proc_Goto(param_1, 1, 0); + + p = (ProcMenu *)func_020190cc((struct Proc *)param_1); + if (p == NULL) + { + return; + } + + if (func_0202fe14(p) == 0) + { + return; + } + + func_02019124((struct Proc *)param_1); + + return; +} + +EC void func_0202fe88(ProcMenu * param_1) +{ + Proc_Goto(param_1, 1, 0); + return; +} + +EC void func_0202fe9c(Menu * param_1, s32 param_2) +{ + if (param_2 != 0) + { + func_0202fe88(param_1->unk_10); + } + else + { + func_0202fe4c(param_1->unk_10); + } + + return; +} + +EC void func_0202febc(s32 param_1) +{ + if (param_1 != 0) + { + Proc_ForEach(data_020d3dd4, (ProcFunc)func_0202fe88); + } + else + { + Proc_ForEach(data_020d3dd4, (ProcFunc)func_0202fe4c); + } + + func_02033f98(); + + return; +} + +EC void func_0202fef8(Menu * param_1) +{ + Proc_End(param_1->unk_10); + return; +} + +EC void func_02033fc4(void); + +EC void func_0202ff08(void) +{ + Proc_EndEach(data_020d3dd4); + func_02033fc4(); + return; +} + +EC void func_0202ff20(Menu * param_1) +{ + Proc_Lock((struct Proc *)param_1->unk_10); + return; +} + +EC void func_0202ff30(Menu * param_1) +{ + Proc_Release((struct Proc *)param_1->unk_10); + return; +} + +EC BOOL func_0202ff40(Menu * param_1) +{ + return IsProcLocked((struct Proc *)param_1->unk_10); +} + +EC BOOL func_0202ff50(Menu * param_1) +{ + return func_02018f5c((struct Proc *)param_1->unk_10) != NULL; +} + +EC BOOL func_0202ff6c(void) +{ + return Proc_Find(data_020d3dd4) != NULL; +} + +EC Menu * func_0202ff8c(ProcMenu * param_1) +{ + if (param_1 == NULL) + { + param_1 = static_cast(Proc_Find(data_020d3dd4)); + } + + if (param_1 == NULL) + { + return NULL; + } + else + { + return param_1->unk_38; + } +} + +EC Menu * func_0202ffb4(ProcPtr param_1) +{ + ProcMenu * proc = static_cast((void *)func_02018d9c(data_020d3dd4, (struct Proc *)param_1)); + + if (proc != NULL) + { + return proc->unk_38; + } + + return NULL; +} + +EC Menu * func_0202ffd8(ProcPtr param_1) +{ + ProcMenu * proc = static_cast((void *)func_02018df4(data_020d3dd4, (struct Proc *)param_1)); + + if (proc != NULL) + { + return proc->unk_38; + } + + return NULL; +} + +// func_0202fffc +BOOL SplitMenu::vfunc_b0(MenuItemState * arg1, s32 arg2, s32 arg3) +{ + if ((arg2 < ((arg1->unk_04) * 8)) || (arg2 >= ((arg1->unk_04 + arg1->unk_06) * 8))) + { + return FALSE; + } + + if ((arg3 < (arg1->unk_05 * 8)) || (arg3 >= ((arg1->unk_05 + arg1->unk_07) * 8))) + { + return FALSE; + } + + return TRUE; +} + +// func_0203004c +void SplitMenu::vfunc_08(void) +{ + s32 iVar1; + s32 iVar2; + s32 iVar3; + MenuItemState * pMVar4; + + iVar1 = 0; + iVar2 = iVar1; + for (pMVar4 = this->unk_0c, iVar3 = 0; iVar3 < this->unk_3a; iVar3++, pMVar4++) + { + pMVar4->unk_04 = 1; + + iVar1 = pMVar4->unk_00->vfunc_c8(pMVar4); + + if (iVar1 <= iVar2) + { + iVar1 = iVar2; + } + + iVar2 = iVar1; + } + + if (this->unk_36 == -1) + { + this->unk_36 = iVar1 + 2; + } + + for (pMVar4 = this->unk_0c, iVar3 = 0; iVar1 < this->unk_3a; iVar3++, pMVar4++) + { + pMVar4->unk_06 = this->unk_36 - 2; + } + + return; +} + +// func_020300ec +void SplitMenu::vfunc_0c(void) +{ + u32 bVar1; + s32 cVar2; + MenuItemState * pMVar3; + s32 cVar4; + s32 i; + u32 uVar6; + s32 iVar7; + + cVar2 = 0; + cVar4 = 0; + iVar7 = 0; + uVar6 = 0; + + for (i = 0, pMVar3 = this->unk_0c; i < this->unk_3a; i++, pMVar3++) + { + if (uVar6 == 0) + { + cVar2 = 0; + } + + pMVar3->unk_05 = cVar2 + 1; + + bVar1 = pMVar3->unk_00->vfunc_cc(); + + pMVar3->unk_07 = bVar1; + cVar4 = cVar2 + bVar1; + + if (uVar6 != this->unk_48 - 1) + { + cVar4 = cVar4 + pMVar3->unk_00->vfunc_d0(); + } + + uVar6 = uVar6 + 1; + + if (uVar6 == this->unk_48) + { + if (iVar7 == 0) + { + if (this->unk_37 == -1) + { + this->unk_37 = cVar4; + } + } + else if (this->unk_4a[iVar7] == -1) + { + this->unk_4a[iVar7] = cVar4; + } + + uVar6 = 0; + iVar7 = iVar7 + 1; + } + } + + if (uVar6 == 0) + { + return; + } + + if (iVar7 == 0) + { + if (this->unk_37 == -1) + { + this->unk_37 = cVar4; + } + + return; + } + + if (this->unk_4a[iVar7] == -1) + { + this->unk_4a[iVar7] = cVar4; + } + + return; +} From 2b803f8fe8ee30518f2110fe0ca993de4ad38a16 Mon Sep 17 00:00:00 2001 From: Eebit Date: Sun, 1 Feb 2026 19:11:52 -0500 Subject: [PATCH 2/5] (menu) Big renames --- config/YFEE01/arm9/relocs.txt | 16 +-- config/YFEE01/arm9/symbols.txt | 190 ++++++++++++++--------------- include/menu.hpp | 212 ++++++++++++++++----------------- include/unknown_data.h | 18 +-- include/unknown_funcs.h | 172 +++++++++++++------------- src/menu.cpp | 166 ++++++++++---------------- src/ov005/prep_main_menu.cpp | 4 +- 7 files changed, 364 insertions(+), 414 deletions(-) diff --git a/config/YFEE01/arm9/relocs.txt b/config/YFEE01/arm9/relocs.txt index 4659d97..504e97e 100644 --- a/config/YFEE01/arm9/relocs.txt +++ b/config/YFEE01/arm9/relocs.txt @@ -5168,16 +5168,16 @@ from:0x0202d440 kind:arm_call to:0x0201122c module:main from:0x0202d474 kind:arm_call to:0x02010f40 module:main from:0x0202d4a8 kind:load to:0x027e1268 module:dtcm from:0x0202d4b4 kind:arm_call to:0x020115a4 module:main -from:0x0202d570 kind:load to:0x020d3e3c module:main +from:0x0202d570 kind:load to:0x020d3e34 module:main add:8 from:0x0202d594 kind:arm_call to:0x01ffbb90 module:itcm -from:0x0202d5a0 kind:load to:0x020d3e3c module:main +from:0x0202d5a0 kind:load to:0x020d3e34 module:main add:8 from:0x0202d5a4 kind:load to:0x027e1b9c module:dtcm from:0x0202d5c8 kind:arm_call to:0x01ffbb90 module:itcm from:0x0202d5d0 kind:arm_call to:0x020115a4 module:main -from:0x0202d5dc kind:load to:0x020d3e3c module:main +from:0x0202d5dc kind:load to:0x020d3e34 module:main add:8 from:0x0202d5e0 kind:load to:0x027e1b9c module:dtcm from:0x0202d604 kind:arm_call to:0x01ffbb90 module:itcm -from:0x0202d610 kind:load to:0x020d3e3c module:main +from:0x0202d610 kind:load to:0x020d3e34 module:main add:8 from:0x0202d614 kind:load to:0x027e1b9c module:dtcm from:0x0202d63c kind:arm_call to:0x0202f7d0 module:main from:0x0202d670 kind:arm_call to:0x02018f54 module:main @@ -5263,14 +5263,14 @@ from:0x0202fab0 kind:arm_call to:0x0202f8c4 module:main from:0x0202fad8 kind:arm_call to:0x01ffc018 module:itcm from:0x0202fb08 kind:arm_call to:0x01ffbf78 module:itcm from:0x0202fb30 kind:load to:0x020d3dd4 module:main -from:0x0202fb34 kind:load to:0x020d3dc4 module:main +from:0x0202fb34 kind:load to:0x020d3dbc module:main add:8 from:0x0202fb50 kind:arm_call to:0x01ffbca0 module:itcm from:0x0202fb60 kind:arm_call to:0x020190c4 module:main from:0x0202fbac kind:arm_call to:0x0202f8c4 module:main from:0x0202fbd0 kind:arm_call to:0x01ffc018 module:itcm from:0x0202fc00 kind:arm_call to:0x01ffbf78 module:itcm from:0x0202fc28 kind:load to:0x020d3dd4 module:main -from:0x0202fc2c kind:load to:0x020d3dc4 module:main +from:0x0202fc2c kind:load to:0x020d3dbc module:main add:8 from:0x0202fcbc kind:arm_call to:0x0202f8c4 module:main from:0x0202fe1c kind:arm_call to:0x020190c4 module:main from:0x0202fe34 kind:arm_call to:0x02033f54 module:main @@ -5306,9 +5306,9 @@ from:0x0202ffe4 kind:arm_call to:0x02018df4 module:main from:0x0202fff8 kind:load to:0x020d3dd4 module:main from:0x02030214 kind:arm_call to:0x0202f7d0 module:main from:0x02030254 kind:arm_call to:0x020115a4 module:main -from:0x02030260 kind:load to:0x020d3dc4 module:main +from:0x02030260 kind:load to:0x020d3dbc module:main add:8 from:0x02030284 kind:arm_call to:0x0202f7d0 module:main -from:0x020302c8 kind:load to:0x020d3dc4 module:main +from:0x020302c8 kind:load to:0x020d3dbc module:main add:8 from:0x020302e8 kind:arm_call to:0x0202d4c4 module:main from:0x02030328 kind:load to:0x020d40bc module:main from:0x0203032c kind:load to:0x020d3f7c module:main diff --git a/config/YFEE01/arm9/symbols.txt b/config/YFEE01/arm9/symbols.txt index bff7c4c..716d77c 100644 --- a/config/YFEE01/arm9/symbols.txt +++ b/config/YFEE01/arm9/symbols.txt @@ -1553,83 +1553,83 @@ func_0202d19c kind:function(arm,size=0x120) addr:0x0202d19c func_0202d2bc kind:function(arm,size=0x1f0) addr:0x0202d2bc func_0202d4ac kind:function(arm,size=0x14) addr:0x0202d4ac func_0202d4c0 kind:function(arm,size=0x4) addr:0x0202d4c0 -func_0202d4c4 kind:function(arm,size=0xb0) addr:0x0202d4c4 -func_0202d574 kind:function(arm,size=0x34) addr:0x0202d574 -func_0202d5a8 kind:function(arm,size=0x3c) addr:0x0202d5a8 -func_0202d5e4 kind:function(arm,size=0x34) addr:0x0202d5e4 -func_0202d618 kind:function(arm,size=0x18) addr:0x0202d618 -func_0202d630 kind:function(arm,size=0x48) addr:0x0202d630 -func_0202d678 kind:function(arm,size=0x10) addr:0x0202d678 -func_0202d688 kind:function(arm,size=0x34) addr:0x0202d688 -func_0202d6bc kind:function(arm,size=0x10) addr:0x0202d6bc -func_0202d6cc kind:function(arm,size=0x18) addr:0x0202d6cc -func_0202d6e4 kind:function(arm,size=0x18) addr:0x0202d6e4 +_ZN4MenuC1Ev kind:function(arm,size=0xb0) addr:0x0202d4c4 +_ZN4MenuD1Ev kind:function(arm,size=0x34) addr:0x0202d574 +_ZN4MenuD0Ev kind:function(arm,size=0x3c) addr:0x0202d5a8 +_ZN4MenuD2Ev kind:function(arm,size=0x34) addr:0x0202d5e4 +ProcMenu_0202d618 kind:function(arm,size=0x18) addr:0x0202d618 +ProcMenu_0202d630 kind:function(arm,size=0x48) addr:0x0202d630 +ProcMenu_0202d678 kind:function(arm,size=0x10) addr:0x0202d678 +ProcMenu_0202d688 kind:function(arm,size=0x34) addr:0x0202d688 +ProcMenu_0202d6bc kind:function(arm,size=0x10) addr:0x0202d6bc +ProcMenu_0202d6cc kind:function(arm,size=0x18) addr:0x0202d6cc +ProcMenu_0202d6e4 kind:function(arm,size=0x18) addr:0x0202d6e4 func_0202d6fc kind:function(arm,size=0x90) addr:0x0202d6fc -func_0202d78c kind:function(arm,size=0x13c) addr:0x0202d78c -func_0202d8c8 kind:function(arm,size=0x80) addr:0x0202d8c8 -func_0202d948 kind:function(arm,size=0x18) addr:0x0202d948 -func_0202d960 kind:function(arm,size=0x5c) addr:0x0202d960 -func_0202d9bc kind:function(arm,size=0x5c) addr:0x0202d9bc -func_0202da18 kind:function(arm,size=0x5c) addr:0x0202da18 -func_0202da74 kind:function(arm,size=0x5c) addr:0x0202da74 +_ZN8MenuItem8vfunc_acEP13MenuItemStatellll kind:function(arm,size=0x13c) addr:0x0202d78c +_ZN8MenuItem8vfunc_c8EP13MenuItemState kind:function(arm,size=0x80) addr:0x0202d8c8 +_ZN8MenuItem8vfunc_10EP13MenuItemState kind:function(arm,size=0x18) addr:0x0202d948 +_ZN8MenuItem8vfunc_b4EP4MenuP13MenuItemState kind:function(arm,size=0x5c) addr:0x0202d960 +_ZN8MenuItem8vfunc_b8EP4MenuP13MenuItemState kind:function(arm,size=0x5c) addr:0x0202d9bc +_ZN8MenuItem8vfunc_bcEP4MenuP13MenuItemState kind:function(arm,size=0x5c) addr:0x0202da18 +_ZN8MenuItem8vfunc_c0EP4MenuP13MenuItemState kind:function(arm,size=0x5c) addr:0x0202da74 func_0202dad0 kind:function(arm,size=0x24) addr:0x0202dad0 -func_0202daf4 kind:function(arm,size=0x68) addr:0x0202daf4 -func_0202db5c kind:function(arm,size=0x68) addr:0x0202db5c -func_0202dbc4 kind:function(arm,size=0x68) addr:0x0202dbc4 -func_0202dc2c kind:function(arm,size=0x68) addr:0x0202dc2c -func_0202dc94 kind:function(arm,size=0x68) addr:0x0202dc94 -func_0202dcfc kind:function(arm,size=0x88) addr:0x0202dcfc -func_0202dd84 kind:function(arm,size=0x68) addr:0x0202dd84 -func_0202ddec kind:function(arm,size=0x820) addr:0x0202ddec -func_0202e60c kind:function(arm,size=0x34) addr:0x0202e60c -func_0202e640 kind:function(arm,size=0x34) addr:0x0202e640 -func_0202e674 kind:function(arm,size=0x34) addr:0x0202e674 -func_0202e6a8 kind:function(arm,size=0x34) addr:0x0202e6a8 -func_0202e6dc kind:function(arm,size=0x58) addr:0x0202e6dc -func_0202e734 kind:function(arm,size=0x70) addr:0x0202e734 -func_0202e7a4 kind:function(arm,size=0xd0) addr:0x0202e7a4 -func_0202e874 kind:function(arm,size=0xd8) addr:0x0202e874 -func_0202e94c kind:function(arm,size=0x8c) addr:0x0202e94c -func_0202e9d8 kind:function(arm,size=0x90) addr:0x0202e9d8 -func_0202ea68 kind:function(arm,size=0xc4) addr:0x0202ea68 -func_0202eb2c kind:function(arm,size=0xbc) addr:0x0202eb2c -func_0202ebe8 kind:function(arm,size=0x8) addr:0x0202ebe8 -func_0202ebf0 kind:function(arm,size=0x8) addr:0x0202ebf0 -func_0202ebf8 kind:function(arm,size=0x4c) addr:0x0202ebf8 -func_0202ec44 kind:function(arm,size=0x4c) addr:0x0202ec44 -func_0202ec90 kind:function(arm,size=0x130) addr:0x0202ec90 -func_0202edc0 kind:function(arm,size=0x2c) addr:0x0202edc0 -func_0202edec kind:function(arm,size=0xc0) addr:0x0202edec -func_0202eeac kind:function(arm,size=0x44) addr:0x0202eeac -func_0202eef0 kind:function(arm,size=0x48) addr:0x0202eef0 -func_0202ef38 kind:function(arm,size=0x44) addr:0x0202ef38 -func_0202ef7c kind:function(arm,size=0x44) addr:0x0202ef7c -func_0202efc0 kind:function(arm,size=0x3c) addr:0x0202efc0 -func_0202effc kind:function(arm,size=0xc) addr:0x0202effc -func_0202f008 kind:function(arm,size=0x18) addr:0x0202f008 +_ZN4Menu8vfunc_78Ev kind:function(arm,size=0x68) addr:0x0202daf4 +_ZN4Menu8vfunc_7cEv kind:function(arm,size=0x68) addr:0x0202db5c +_ZN4Menu8vfunc_80Ev kind:function(arm,size=0x68) addr:0x0202dbc4 +_ZN4Menu8vfunc_84Ev kind:function(arm,size=0x68) addr:0x0202dc2c +_ZN4Menu8vfunc_88Ev kind:function(arm,size=0x68) addr:0x0202dc94 +_ZN4Menu8vfunc_8cEv kind:function(arm,size=0x88) addr:0x0202dcfc +_ZN4Menu8vfunc_90Ev kind:function(arm,size=0x68) addr:0x0202dd84 +_ZN4Menu8vfunc_64Ev kind:function(arm,size=0x820) addr:0x0202ddec +_ZN4Menu8vfunc_bcEv kind:function(arm,size=0x34) addr:0x0202e60c +_ZN4Menu8vfunc_c0Ev kind:function(arm,size=0x34) addr:0x0202e640 +_ZN4Menu8vfunc_c4Ev kind:function(arm,size=0x34) addr:0x0202e674 +_ZN4Menu8vfunc_c8Ev kind:function(arm,size=0x34) addr:0x0202e6a8 +_ZN4Menu8vfunc_b0EP13MenuItemStatell kind:function(arm,size=0x58) addr:0x0202e6dc +_ZN4Menu8vfunc_b4Ev kind:function(arm,size=0x70) addr:0x0202e734 +_ZN4Menu8vfunc_68El kind:function(arm,size=0xd0) addr:0x0202e7a4 +_ZN4Menu8vfunc_6cEl kind:function(arm,size=0xd8) addr:0x0202e874 +_ZN4Menu8vfunc_70El kind:function(arm,size=0x8c) addr:0x0202e94c +_ZN4Menu8vfunc_74El kind:function(arm,size=0x90) addr:0x0202e9d8 +_ZN4Menu8vfunc_d8Ev kind:function(arm,size=0xc4) addr:0x0202ea68 +_ZN4Menu8vfunc_dcEv kind:function(arm,size=0xbc) addr:0x0202eb2c +_ZN4Menu8vfunc_ccEv kind:function(arm,size=0x8) addr:0x0202ebe8 +_ZN4Menu8vfunc_d0El kind:function(arm,size=0x8) addr:0x0202ebf0 +_ZN4Menu8vfunc_d4El kind:function(arm,size=0x4c) addr:0x0202ebf8 +_ZN4Menu8vfunc_f0Ellll kind:function(arm,size=0x4c) addr:0x0202ec44 +_ZN4Menu8vfunc_e8Ev kind:function(arm,size=0x130) addr:0x0202ec90 +_ZN4Menu8vfunc_f4Ellll kind:function(arm,size=0x2c) addr:0x0202edc0 +_ZN4Menu8vfunc_ecEv kind:function(arm,size=0xc0) addr:0x0202edec +_ZN4Menu8vfunc_fcEllll kind:function(arm,size=0x44) addr:0x0202eeac +_ZN4Menu8vfunc_f8EPvllll kind:function(arm,size=0x48) addr:0x0202eef0 +_ZN4Menu9vfunc_100Ellll kind:function(arm,size=0x44) addr:0x0202ef38 +_ZN4Menu9vfunc_108Ellll kind:function(arm,size=0x44) addr:0x0202ef7c +_ZN4Menu9vfunc_104EPvllll kind:function(arm,size=0x3c) addr:0x0202efc0 +_ZN4Menu9vfunc_10cEv kind:function(arm,size=0xc) addr:0x0202effc +_ZN4Menu9vfunc_110Ev kind:function(arm,size=0x18) addr:0x0202f008 func_0202f020 kind:function(arm,size=0x10) addr:0x0202f020 func_0202f030 kind:function(arm,size=0x10) addr:0x0202f030 func_0202f040 kind:function(arm,size=0x260) addr:0x0202f040 -func_0202f2a0 kind:function(arm,size=0x4) addr:0x0202f2a0 -func_0202f2a4 kind:function(arm,size=0xa8) addr:0x0202f2a4 -func_0202f34c kind:function(arm,size=0x11c) addr:0x0202f34c -func_0202f468 kind:function(arm,size=0x28) addr:0x0202f468 -func_0202f490 kind:function(arm,size=0x74) addr:0x0202f490 -func_0202f504 kind:function(arm,size=0x78) addr:0x0202f504 -func_0202f57c kind:function(arm,size=0x38) addr:0x0202f57c -func_0202f5b4 kind:function(arm,size=0x50) addr:0x0202f5b4 -func_0202f604 kind:function(arm,size=0x70) addr:0x0202f604 +_ZN4Menu9vfunc_118Ev kind:function(arm,size=0x4) addr:0x0202f2a0 +_ZN4Menu8vfunc_08Ev kind:function(arm,size=0xa8) addr:0x0202f2a4 +_ZN4Menu8vfunc_0cEv kind:function(arm,size=0x11c) addr:0x0202f34c +_ZN4Menu8vfunc_10Ev kind:function(arm,size=0x28) addr:0x0202f468 +_ZN4Menu8vfunc_14Ev kind:function(arm,size=0x74) addr:0x0202f490 +_ZN4Menu8vfunc_18Ev kind:function(arm,size=0x78) addr:0x0202f504 +_ZN4Menu8vfunc_1cEv kind:function(arm,size=0x38) addr:0x0202f57c +_ZN4Menu9vfunc_11cEv kind:function(arm,size=0x50) addr:0x0202f5b4 +_ZN4Menu9vfunc_120Ev kind:function(arm,size=0x70) addr:0x0202f604 func_0202f674 kind:function(arm,size=0x5c) addr:0x0202f674 func_0202f6d0 kind:function(arm,size=0x5c) addr:0x0202f6d0 func_0202f72c kind:function(arm,size=0xa4) addr:0x0202f72c func_0202f7d0 kind:function(arm,size=0x30) addr:0x0202f7d0 -func_0202f800 kind:function(arm,size=0x60) addr:0x0202f800 +_ZN4Menu9vfunc_124Ev kind:function(arm,size=0x60) addr:0x0202f800 func_0202f860 kind:function(arm,size=0x3c) addr:0x0202f860 -func_0202f89c kind:function(arm,size=0x28) addr:0x0202f89c +_ZN4Menu9vfunc_12cEv kind:function(arm,size=0x28) addr:0x0202f89c func_0202f8c4 kind:function(arm,size=0x158) addr:0x0202f8c4 -func_0202fa1c kind:function(arm,size=0x54) addr:0x0202fa1c -func_0202fa70 kind:function(arm,size=0xc8) addr:0x0202fa70 -func_0202fb38 kind:function(arm,size=0xf8) addr:0x0202fb38 +_ZN4Menu9vfunc_128Ev kind:function(arm,size=0x54) addr:0x0202fa1c +StartMenu kind:function(arm,size=0xc8) addr:0x0202fa70 +StartChildMenu kind:function(arm,size=0xf8) addr:0x0202fb38 func_0202fc30 kind:function(arm,size=0xec) addr:0x0202fc30 func_0202fd1c kind:function(arm,size=0xf8) addr:0x0202fd1c func_0202fe14 kind:function(arm,size=0x38) addr:0x0202fe14 @@ -1639,26 +1639,26 @@ func_0202fe9c kind:function(arm,size=0x20) addr:0x0202fe9c func_0202febc kind:function(arm,size=0x3c) addr:0x0202febc func_0202fef8 kind:function(arm,size=0x10) addr:0x0202fef8 func_0202ff08 kind:function(arm,size=0x18) addr:0x0202ff08 -func_0202ff20 kind:function(arm,size=0x10) addr:0x0202ff20 -func_0202ff30 kind:function(arm,size=0x10) addr:0x0202ff30 -func_0202ff40 kind:function(arm,size=0x10) addr:0x0202ff40 +LockMenu kind:function(arm,size=0x10) addr:0x0202ff20 +UnlockMenu kind:function(arm,size=0x10) addr:0x0202ff30 +IsMenuLocked kind:function(arm,size=0x10) addr:0x0202ff40 func_0202ff50 kind:function(arm,size=0x1c) addr:0x0202ff50 -func_0202ff6c kind:function(arm,size=0x20) addr:0x0202ff6c +IsMenuActive kind:function(arm,size=0x20) addr:0x0202ff6c func_0202ff8c kind:function(arm,size=0x28) addr:0x0202ff8c func_0202ffb4 kind:function(arm,size=0x24) addr:0x0202ffb4 func_0202ffd8 kind:function(arm,size=0x24) addr:0x0202ffd8 -func_0202fffc kind:function(arm,size=0x50) addr:0x0202fffc -func_0203004c kind:function(arm,size=0xa0) addr:0x0203004c -func_020300ec kind:function(arm,size=0x108) addr:0x020300ec -func_020301f4 kind:function(arm,size=0x70) addr:0x020301f4 -func_02030264 kind:function(arm,size=0x68) addr:0x02030264 -func_020302cc kind:function(arm,size=0x4) addr:0x020302cc -func_020302d0 kind:function(arm,size=0x4) addr:0x020302d0 -func_020302d4 kind:function(arm,size=0x4) addr:0x020302d4 -func_020302d8 kind:function(arm,size=0x4) addr:0x020302d8 -func_020302dc kind:function(arm,size=0x4) addr:0x020302dc -func_020302e0 kind:function(arm,size=0x50) addr:0x020302e0 -func_02030330 kind:function(arm,size=0x5c) addr:0x02030330 +_ZN9SplitMenu8vfunc_b0EP13MenuItemStatell kind:function(arm,size=0x50) addr:0x0202fffc +_ZN9SplitMenu8vfunc_08Ev kind:function(arm,size=0xa0) addr:0x0203004c +_ZN9SplitMenu8vfunc_0cEv kind:function(arm,size=0x108) addr:0x020300ec +_ZN8ProcMenuD0Ev kind:function(arm,size=0x70) addr:0x020301f4 +_ZN8ProcMenuD1Ev kind:function(arm,size=0x68) addr:0x02030264 +_ZN9SplitMenu9vfunc_108Ellll kind:function(arm,size=0x4) addr:0x020302cc +_ZN9SplitMenu9vfunc_100Ellll kind:function(arm,size=0x4) addr:0x020302d0 +_ZN9SplitMenu8vfunc_fcEllll kind:function(arm,size=0x4) addr:0x020302d4 +_ZN9SplitMenu8vfunc_ecEv kind:function(arm,size=0x4) addr:0x020302d8 +_ZN9SplitMenu8vfunc_e8Ev kind:function(arm,size=0x4) addr:0x020302dc +_ZN6DialogC1Ev kind:function(arm,size=0x50) addr:0x020302e0 +_ZN6Dialog9vfunc_128Ev kind:function(arm,size=0x5c) addr:0x02030330 func_0203038c kind:function(arm,size=0x30) addr:0x0203038c func_020303bc kind:function(arm,size=0x24) addr:0x020303bc func_020303e0 kind:function(arm,size=0xa8) addr:0x020303e0 @@ -1679,10 +1679,10 @@ func_02030b88 kind:function(arm,size=0x44) addr:0x02030b88 func_02030bcc kind:function(arm,size=0x110) addr:0x02030bcc func_02030cdc kind:function(arm,size=0x128) addr:0x02030cdc func_02030e04 kind:function(arm,size=0x8) addr:0x02030e04 -func_02030e0c kind:function(arm,size=0x44) addr:0x02030e0c -func_02030e50 kind:function(arm,size=0x3c) addr:0x02030e50 -func_02030e8c kind:function(arm,size=0x44) addr:0x02030e8c -func_02030ed0 kind:function(arm,size=0x3c) addr:0x02030ed0 +_ZN6DialogD0Ev kind:function(arm,size=0x44) addr:0x02030e0c +_ZN6DialogD1Ev kind:function(arm,size=0x3c) addr:0x02030e50 +_ZN10DialogBaseD0Ev kind:function(arm,size=0x44) addr:0x02030e8c +_ZN10DialogBaseD1Ev kind:function(arm,size=0x3c) addr:0x02030ed0 func_02030f0c kind:function(arm,size=0xa8) addr:0x02030f0c func_02030fb4 kind:function(arm,size=0x8c) addr:0x02030fb4 func_02031040 kind:function(arm,size=0x4) addr:0x02031040 @@ -5845,7 +5845,7 @@ data_020cacb4 kind:data(any) addr:0x020cacb4 data_020cacc0 kind:data(any) addr:0x020cacc0 data_020caccc kind:data(any) addr:0x020caccc data_020cacf4 kind:data(any) addr:0x020cacf4 -__typestr__4Menu kind:data(any) addr:0x020cacfc +_ZTS4Menu kind:data(any) addr:0x020cacfc data_020cad04 kind:data(any) addr:0x020cad04 data_020cad0c kind:data(any) addr:0x020cad0c __typestr__6Dialog kind:data(any) addr:0x020cad14 @@ -5866,7 +5866,7 @@ __typeinfo__10DialogBase kind:data(any) addr:0x020cadb8 __typeinfo__15_LinkDialogNone kind:data(any) addr:0x020cadc4 __typeinfo__10DialogItem kind:data(any) addr:0x020cadd0 __typeinfo__16_LinkDialogYesNo kind:data(any) addr:0x020caddc -__typeinfo__4Menu kind:data(any) addr:0x020cade8 +_ZTI4Menu kind:data(any) addr:0x020cade8 __typeinfo__17_LinkDialogCommon kind:data(any) addr:0x020cadf4 __typeinfo__15LinkErrorDialog kind:data(any) addr:0x020cae00 __typestr__10DialogBase kind:data(any) addr:0x020cae0c @@ -6773,13 +6773,13 @@ data_020d3d4c kind:data(any) addr:0x020d3d4c data_020d3d64 kind:data(any) addr:0x020d3d64 data_020d3d6c kind:data(any) addr:0x020d3d6c data_020d3d7c kind:data(any) addr:0x020d3d7c -__typestr__8ProcMenu kind:data(any) addr:0x020d3d8c -__typestr__9SplitMenu kind:data(any) addr:0x020d3d98 -__typeinfo__9SplitMenu kind:data(any) addr:0x020d3da4 -__typeinfo__8ProcMenu kind:data(any) addr:0x020d3db0 -__vt__8ProcMenu kind:data(any) addr:0x020d3dc4 -data_020d3dd4 kind:data(any) addr:0x020d3dd4 -data_020d3e3c kind:data(any) addr:0x020d3e3c +_ZTS8ProcMenu kind:data(any) addr:0x020d3d8c +_ZTS9SplitMenu kind:data(any) addr:0x020d3d98 +_ZTI9SplitMenu kind:data(any) addr:0x020d3da4 +_ZTI8ProcMenu kind:data(any) addr:0x020d3db0 +_ZTV8ProcMenu kind:data(any) addr:0x020d3dbc +ProcScr_ProcMenu kind:data(any) addr:0x020d3dd4 +_ZTV4Menu kind:data(any) addr:0x020d3e34 data_020d3f7c kind:data(any) addr:0x020d3f7c data_020d40bc kind:data(any) addr:0x020d40bc __typestr__6Button kind:data(any) addr:0x020d41f4 diff --git a/include/menu.hpp b/include/menu.hpp index 6283110..8a3eec3 100644 --- a/include/menu.hpp +++ b/include/menu.hpp @@ -3,6 +3,7 @@ #include "global.h" +#include "heap.hpp" #include "proc_ex.hpp" enum @@ -70,86 +71,86 @@ class Menu s8 unk_4a[4]; STRUCT_PAD(0x4E, 0x50); - Menu(); // func_0202d4c4 - - virtual void vfunc_00(void); // ? - virtual void vfunc_04(/* ? */); // func_02015368 - virtual void vfunc_08(void); // func_0202f2a4 - virtual void vfunc_0c(void); // func_0202f34c - virtual void vfunc_10(void); // func_0202f468 - virtual void vfunc_14(void); // func_0202f490 - virtual void vfunc_18(void); // func_0202f504 - virtual void vfunc_1c(void); // func_0202f57c - virtual void vfunc_20(/* ? */); // func_02015360 - virtual s32 vfunc_24(MenuItemState *, s32); // ? - virtual s32 vfunc_28(void); // ? - virtual s32 vfunc_2c(MenuItemState *, s32); // func_02015328 - virtual void vfunc_30(/* ? */); // func_02015308 - virtual s32 vfunc_34(MenuItemState *, s32); // func_02015310 - virtual void vfunc_38(/* ? */); // func_020152e8 - virtual s32 vfunc_3c(MenuItemState *, s32); // func_020152f0 - virtual void vfunc_40(/* ? */); // func_020152c8 - virtual s32 vfunc_44(MenuItemState *, s32); // func_020152d0 - virtual void vfunc_48(/* ? */); // func_020152a8 - virtual s32 vfunc_4c(MenuItemState *, s32); // func_020152b0 - virtual void vfunc_50(/* ? */); // func_02015288 - virtual s32 vfunc_54(MenuItemState *, s32); // func_02015290 - virtual s32 vfunc_58(s32); // ? - virtual void vfunc_5c(/* ? */); // func_02015270 - virtual s32 vfunc_60(void); // func_02015250 - virtual void vfunc_64(/* ? */); // func_0202ddec - virtual void vfunc_68(s32); // func_0202e7a4 - virtual void vfunc_6c(s32); // func_0202e874 - virtual void vfunc_70(s32); // func_0202e94c - virtual void vfunc_74(s32); // func_0202e9d8 - virtual s32 vfunc_78(void); // func_0202daf4 - virtual s32 vfunc_7c(void); // func_0202db5c - virtual s32 vfunc_80(void); // func_0202dbc4 - virtual s32 vfunc_84(void); // func_0202dc2c - virtual s32 vfunc_88(void); // func_0202dc94 - virtual s32 vfunc_8c(void); // func_0202dcfc - virtual s32 vfunc_90(void); // func_0202dd84 - virtual s32 vfunc_94(s32, s32); // func_02015248 - virtual s32 vfunc_98(s32, s32); // func_02015240 - virtual BOOL vfunc_9c(void); // func_02015238 - virtual BOOL vfunc_a0(void); // ? - virtual BOOL vfunc_a4(void); // func_02015228 - virtual BOOL vfunc_a8(void); // ? - virtual s32 vfunc_ac(void); // func_02015218 - virtual BOOL vfunc_b0(MenuItemState *, s32, s32); // func_0202e6dc - virtual BOOL vfunc_b4(void); // func_0202e734 - virtual void vfunc_b8(s32); // func_02015214 - virtual void vfunc_bc(void); // func_0202e60c - virtual void vfunc_c0(void); // func_0202e640 - virtual void vfunc_c4(void); // func_0202e674 - virtual void vfunc_c8(void); // func_0202e6a8 - virtual s32 vfunc_cc(void); // func_0202ebe8 - virtual void vfunc_d0(s32); // func_0202ebf0 - virtual s32 vfunc_d4(s32); // func_0202ebf8 - virtual void vfunc_d8(void); // func_0202ea68 - virtual void vfunc_dc(void); // func_0202eb2c - virtual void vfunc_e0(/* ? */); // func_02015210 - virtual void vfunc_e4(/* ? */); // func_0201520c - virtual void vfunc_e8(void); // func_0202ec90 - virtual void vfunc_ec(void); // func_0202edec - virtual void vfunc_f0(s32, s32, s32, s32); // func_0202ec44 - virtual void vfunc_f4(s32, s32, s32, s32); // func_0202edc0 - virtual void vfunc_f8(void *, s32, s32, s32, s32); // func_0202eef0 - virtual void vfunc_fc(s32, s32, s32, s32); // func_0202eeac - virtual void vfunc_100(s32, s32, s32, s32); // func_0202ef38 - virtual void vfunc_104(void *, s32, s32, s32, s32); // func_0202efc0 - virtual void vfunc_108(s32, s32, s32, s32); // func_0202ef7c - virtual s32 vfunc_10c(void); // func_0202effc - virtual void vfunc_110(/* ? */); // func_0202f008 - virtual void vfunc_114(/* ? */); // func_02028068 - virtual void vfunc_118(/* ? */); // func_0202f2a0 - virtual void vfunc_11c(void); // func_0202f5b4 - virtual void vfunc_120(void); // func_0202f604 - virtual void vfunc_124(void); // func_0202f800 - virtual void vfunc_128(void); // func_0202fa1c - virtual void vfunc_12c(void); // func_0202f89c - virtual void vfunc_130(/* ? */); // ? - virtual void vfunc_134(/* ? */); // ? + Menu(); // _ZN4MenuC1Ev + + /* 000 */ virtual void vfunc_00(void); // ? + /* 004 */ virtual void vfunc_04(/* ? */); // func_02015368 + /* 008 */ virtual void vfunc_08(void); + /* 00C */ virtual void vfunc_0c(void); + /* 010 */ virtual void vfunc_10(void); + /* 014 */ virtual void vfunc_14(void); + /* 018 */ virtual void vfunc_18(void); + /* 01C */ virtual void vfunc_1c(void); + /* 020 */ virtual void vfunc_20(/* ? */); // func_02015360 + /* 024 */ virtual s32 vfunc_24(MenuItemState *, s32); // ? + /* 028 */ virtual s32 vfunc_28(void); // ? + /* 02C */ virtual s32 vfunc_2c(MenuItemState *, s32); // func_02015328 + /* 030 */ virtual void vfunc_30(/* ? */); // func_02015308 + /* 034 */ virtual s32 vfunc_34(MenuItemState *, s32); // func_02015310 + /* 038 */ virtual void vfunc_38(/* ? */); // func_020152e8 + /* 03C */ virtual s32 vfunc_3c(MenuItemState *, s32); // func_020152f0 + /* 040 */ virtual void vfunc_40(/* ? */); // func_020152c8 + /* 044 */ virtual s32 vfunc_44(MenuItemState *, s32); // func_020152d0 + /* 048 */ virtual void vfunc_48(/* ? */); // func_020152a8 + /* 04C */ virtual s32 vfunc_4c(MenuItemState *, s32); // func_020152b0 + /* 050 */ virtual void vfunc_50(/* ? */); // func_02015288 + /* 054 */ virtual s32 vfunc_54(MenuItemState *, s32); // func_02015290 + /* 058 */ virtual s32 vfunc_58(s32); // ? + /* 05C */ virtual void vfunc_5c(/* ? */); // func_02015270 + /* 060 */ virtual s32 vfunc_60(void); // func_02015250 + /* 064 */ virtual void vfunc_64(void); + /* 068 */ virtual void vfunc_68(s32); + /* 06C */ virtual void vfunc_6c(s32); + /* 070 */ virtual void vfunc_70(s32); + /* 074 */ virtual void vfunc_74(s32); + /* 078 */ virtual s32 vfunc_78(void); + /* 07C */ virtual s32 vfunc_7c(void); + /* 080 */ virtual s32 vfunc_80(void); + /* 084 */ virtual s32 vfunc_84(void); + /* 088 */ virtual s32 vfunc_88(void); + /* 08C */ virtual s32 vfunc_8c(void); + /* 090 */ virtual s32 vfunc_90(void); + /* 094 */ virtual s32 vfunc_94(s32, s32); // func_02015248 + /* 098 */ virtual s32 vfunc_98(s32, s32); // func_02015240 + /* 09C */ virtual BOOL vfunc_9c(void); // func_02015238 + /* 0A0 */ virtual BOOL vfunc_a0(void); // ? + /* 0A4 */ virtual BOOL vfunc_a4(void); // func_02015228 + /* 0A8 */ virtual BOOL vfunc_a8(void); // ? + /* 0AC */ virtual s32 vfunc_ac(void); // func_02015218 + /* 0B0 */ virtual BOOL vfunc_b0(MenuItemState *, s32, s32); + /* 0B4 */ virtual BOOL vfunc_b4(void); + /* 0B8 */ virtual void vfunc_b8(s32); // func_02015214 + /* 0BC */ virtual void vfunc_bc(void); + /* 0C0 */ virtual void vfunc_c0(void); + /* 0C4 */ virtual void vfunc_c4(void); + /* 0C8 */ virtual void vfunc_c8(void); + /* 0CC */ virtual s32 vfunc_cc(void); + /* 0D0 */ virtual void vfunc_d0(s32); + /* 0D4 */ virtual s32 vfunc_d4(s32); + /* 0D8 */ virtual void vfunc_d8(void); + /* 0DC */ virtual void vfunc_dc(void); + /* 0E0 */ virtual void vfunc_e0(/* ? */); // func_02015210 + /* 0E4 */ virtual void vfunc_e4(/* ? */); // func_0201520c + /* 0E8 */ virtual void vfunc_e8(void); + /* 0EC */ virtual void vfunc_ec(void); + /* 0F0 */ virtual void vfunc_f0(s32, s32, s32, s32); + /* 0F4 */ virtual void vfunc_f4(s32, s32, s32, s32); + /* 0F8 */ virtual void vfunc_f8(void *, s32, s32, s32, s32); + /* 0FC */ virtual void vfunc_fc(s32, s32, s32, s32); + /* 100 */ virtual void vfunc_100(s32, s32, s32, s32); + /* 104 */ virtual void vfunc_104(void *, s32, s32, s32, s32); + /* 108 */ virtual void vfunc_108(s32, s32, s32, s32); + /* 10C */ virtual s32 vfunc_10c(void); + /* 110 */ virtual void vfunc_110(void); + /* 114 */ virtual void vfunc_114(void); // func_02028068 + /* 118 */ virtual void vfunc_118(void); + /* 11C */ virtual void vfunc_11c(void); + /* 120 */ virtual void vfunc_120(void); + /* 124 */ virtual void vfunc_124(void); + /* 128 */ virtual void vfunc_128(void); + /* 12C */ virtual void vfunc_12c(void); + /* 130 */ virtual void vfunc_130(/* ? */); // ? + /* 134 */ virtual void vfunc_134(/* ? */); // ? virtual ~Menu(); }; @@ -169,8 +170,7 @@ class MenuItem : public MenuState, public MenuResult virtual char * vfunc_04(MenuItemState *); // func_0201511c; wraps vfunc_00 virtual void vfunc_08(/* */); // func_020150f8 virtual void vfunc_0c(/* */); // func_02015100; wraps vfunc_08 - virtual s32 - vfunc_10(MenuItemState *); // func_0202d948; GetLabelColor? (1 = White, 2 = Grey, 3 = Cyan, 4 = Gold, 5 = Green) + virtual s32 vfunc_10(MenuItemState *); // GetLabelColor? (1 = White, 2 = Grey, 3 = Cyan, 4 = Gold, 5 = Green) virtual s32 vfunc_14(void); // func_020150dc; IsEnabled? virtual s32 vfunc_18(s32); // func_020150e4; Wraps vfunc_14 virtual s32 vfunc_1c(void); // func_020150bc; OnConfirm? @@ -209,14 +209,14 @@ class MenuItem : public MenuState, public MenuResult virtual void vfunc_a0(/* */); // func_02014e98 virtual void vfunc_a4(/* */); // func_02014e9c virtual void vfunc_a8(Menu *, MenuItemState *); // - virtual s32 vfunc_ac(MenuItemState *, s32, s32, s32, s32); // func_0202d78c + virtual s32 vfunc_ac(MenuItemState *, s32, s32, s32, s32); virtual void vfunc_b0(Menu *, MenuItemState *); // func_02014e94 - virtual void vfunc_b4(Menu *, MenuItemState *); // func_0202d960 - virtual void vfunc_b8(Menu *, MenuItemState *); // func_0202d9bc - virtual void vfunc_bc(Menu *, MenuItemState *); // func_0202da18 - virtual void vfunc_c0(Menu *, MenuItemState *); // func_0202da74 + virtual void vfunc_b4(Menu *, MenuItemState *); + virtual void vfunc_b8(Menu *, MenuItemState *); + virtual void vfunc_bc(Menu *, MenuItemState *); + virtual void vfunc_c0(Menu *, MenuItemState *); virtual u32 vfunc_c4(void); // func_02014e8c - virtual u32 vfunc_c8(MenuItemState *); // func_0202d8c8 + virtual u32 vfunc_c8(MenuItemState *); virtual u32 vfunc_cc(void); // func_02014e84 virtual u32 vfunc_d0(void); // func_02014e7c virtual u32 vfunc_d4(void); // func_02014e74 @@ -238,32 +238,27 @@ class MenuItemState class SplitMenu : public Menu { public: - virtual void vfunc_08(void); // func_0203004c - virtual void vfunc_0c(void); // func_020300ec - virtual BOOL vfunc_b0(MenuItemState *, s32, s32); // func_0202fffc + /* 008 */ virtual void vfunc_08(void); + /* 00C */ virtual void vfunc_0c(void); + /* 0B0 */ virtual BOOL vfunc_b0(MenuItemState *, s32, s32); - // func_020302dc - virtual void vfunc_e8(void) + /* 0E8 */ virtual void vfunc_e8(void) { } - // func_020302d8 - virtual void vfunc_ec(void) + /* 0EC */ virtual void vfunc_ec(void) { } - // func_020302d4 - virtual void vfunc_fc(s32, s32, s32, s32) + /* 0FC */ virtual void vfunc_fc(s32, s32, s32, s32) { } - // func_020302d0 - virtual void vfunc_100(s32, s32, s32, s32) + /* 100 */ virtual void vfunc_100(s32, s32, s32, s32) { } - // func_020302cc - virtual void vfunc_108(s32, s32, s32, s32) + /* 108 */ virtual void vfunc_108(s32, s32, s32, s32) { } }; @@ -274,8 +269,8 @@ EC void func_0202f7d0(Menu *); class ProcMenu : public ProcEx { public: - Menu * unk_38; - u8 unk_3c; + /* 38 */ Menu * unk_38; + /* 3C */ u8 unk_3c; ProcMenu(Menu * menu) { @@ -283,8 +278,6 @@ class ProcMenu : public ProcEx this->unk_3c = 0; } - // func_020301f4 - // func_02030264 virtual ~ProcMenu() { if (this->unk_3c == 0) @@ -301,7 +294,7 @@ class ProcMenu : public ProcEx } } - inline void func_0202d688() + inline void ProcMenu_0202d688() { this->unk_38->vfunc_e0(); this->unk_38->vfunc_d8(); @@ -322,8 +315,6 @@ class DialogBase : public Menu this->unk_50 = NULL; } - // func_02030ed0 - // func_02030e8c virtual ~DialogBase() { if (this->unk_50 != NULL) @@ -338,16 +329,13 @@ class Dialog : public DialogBase public: u32 unk_54; - // func_020302e0 Dialog(); - // func_02030e0c - // func_02030e50 virtual ~Dialog() { } - virtual void vfunc_128(void); // func_02030330 + /* 128 */ virtual void vfunc_128(void); }; class DialogYesNo : public Dialog diff --git a/include/unknown_data.h b/include/unknown_data.h index f0b9fa5..72c4c48 100644 --- a/include/unknown_data.h +++ b/include/unknown_data.h @@ -294,7 +294,7 @@ extern struct KeyState * gKeySt; // extern ??? data_020cacc0 // extern ??? data_020caccc // extern ??? data_020cacf4 -// extern ??? __typestr__4Menu +// extern ??? _ZTS4Menu // extern ??? data_020cad04 // extern ??? data_020cad0c // extern ??? __typestr__6Dialog @@ -315,7 +315,7 @@ extern struct KeyState * gKeySt; // extern ??? __typeinfo__15_LinkDialogNone // extern ??? __typeinfo__10DialogItem // extern ??? __typeinfo__16_LinkDialogYesNo -// extern ??? __typeinfo__4Menu +// extern ??? _ZTI4Menu // extern ??? __typeinfo__17_LinkDialogCommon // extern ??? __typeinfo__15LinkErrorDialog // extern ??? __typestr__10DialogBase @@ -1222,13 +1222,13 @@ extern struct ProcCmd data_020cec14[]; // extern ??? data_020d3d64 // extern ??? data_020d3d6c // extern ??? data_020d3d7c -// extern ??? __typestr__8ProcMenu -// extern ??? __typestr__9SplitMenu -// extern ??? __typeinfo__9SplitMenu -// extern ??? __typeinfo__8ProcMenu -// extern ??? __vt__8ProcMenu -// extern ??? data_020d3dd4 -// extern ??? data_020d3e3c +// extern ??? _ZTS8ProcMenu +// extern ??? _ZTS9SplitMenu +// extern ??? _ZTI9SplitMenu +// extern ??? _ZTI8ProcMenu +// extern ??? _ZTV8ProcMenu +// extern ??? ProcScr_ProcMenu +// extern ??? _ZTV4Menu // extern ??? data_020d3f7c // extern ??? data_020d40bc // extern ??? __typestr__6Button diff --git a/include/unknown_funcs.h b/include/unknown_funcs.h index 9d0a6ae..a3283f0 100644 --- a/include/unknown_funcs.h +++ b/include/unknown_funcs.h @@ -1574,83 +1574,83 @@ EC void func_0202b688(void *, u32, u32, u32); // EC ??? func_0202d2bc // EC ??? func_0202d4ac // EC ??? func_0202d4c0 -// EC ??? func_0202d4c4 -// EC ??? func_0202d574 -// EC ??? func_0202d5a8 -// EC ??? func_0202d5e4 -// EC ??? func_0202d618 -// EC ??? func_0202d630 -// EC ??? func_0202d678 -// EC ??? func_0202d688 -// EC ??? func_0202d6bc -// EC ??? func_0202d6cc -// EC ??? func_0202d6e4 +// EC ??? _ZN4MenuC1Ev +// EC ??? _ZN4MenuD1Ev +// EC ??? _ZN4MenuD0Ev +// EC ??? _ZN4MenuD2Ev +// EC ??? ProcMenu_0202d618 +// EC ??? ProcMenu_0202d630 +// EC ??? ProcMenu_0202d678 +// EC ??? ProcMenu_0202d688 +// EC ??? ProcMenu_0202d6bc +// EC ??? ProcMenu_0202d6cc +// EC ??? ProcMenu_0202d6e4 // EC ??? func_0202d6fc -// EC ??? func_0202d78c -// EC ??? func_0202d8c8 -// EC ??? func_0202d948 -// EC ??? func_0202d960 -// EC ??? func_0202d9bc -// EC ??? func_0202da18 -// EC ??? func_0202da74 +// EC ??? _ZN8MenuItem8vfunc_acEP13MenuItemStatellll +// EC ??? _ZN8MenuItem8vfunc_c8EP13MenuItemState +// EC ??? _ZN8MenuItem8vfunc_10EP13MenuItemState +// EC ??? _ZN8MenuItem8vfunc_b4EP4MenuP13MenuItemState +// EC ??? _ZN8MenuItem8vfunc_b8EP4MenuP13MenuItemState +// EC ??? _ZN8MenuItem8vfunc_bcEP4MenuP13MenuItemState +// EC ??? _ZN8MenuItem8vfunc_c0EP4MenuP13MenuItemState // EC ??? func_0202dad0 -// EC ??? func_0202daf4 -// EC ??? func_0202db5c -// EC ??? func_0202dbc4 -// EC ??? func_0202dc2c -// EC ??? func_0202dc94 -// EC ??? func_0202dcfc -// EC ??? func_0202dd84 -// EC ??? func_0202ddec -// EC ??? func_0202e60c -// EC ??? func_0202e640 -// EC ??? func_0202e674 -// EC ??? func_0202e6a8 -// EC ??? func_0202e6dc -// EC ??? func_0202e734 -// EC ??? func_0202e7a4 -// EC ??? func_0202e874 -// EC ??? func_0202e94c -// EC ??? func_0202e9d8 -// EC ??? func_0202ea68 -// EC ??? func_0202eb2c -// EC ??? func_0202ebe8 -// EC ??? func_0202ebf0 -// EC ??? func_0202ebf8 -// EC ??? func_0202ec44 -// EC ??? func_0202ec90 -// EC ??? func_0202edc0 -// EC ??? func_0202edec -// EC ??? func_0202eeac -// EC ??? func_0202eef0 -// EC ??? func_0202ef38 -// EC ??? func_0202ef7c -// EC ??? func_0202efc0 -// EC ??? func_0202effc -// EC ??? func_0202f008 +// EC ??? _ZN4Menu8vfunc_78Ev +// EC ??? _ZN4Menu8vfunc_7cEv +// EC ??? _ZN4Menu8vfunc_80Ev +// EC ??? _ZN4Menu8vfunc_84Ev +// EC ??? _ZN4Menu8vfunc_88Ev +// EC ??? _ZN4Menu8vfunc_8cEv +// EC ??? _ZN4Menu8vfunc_90Ev +// EC ??? _ZN4Menu8vfunc_64Ev +// EC ??? _ZN4Menu8vfunc_bcEv +// EC ??? _ZN4Menu8vfunc_c0Ev +// EC ??? _ZN4Menu8vfunc_c4Ev +// EC ??? _ZN4Menu8vfunc_c8Ev +// EC ??? _ZN4Menu8vfunc_b0EP13MenuItemStatell +// EC ??? _ZN4Menu8vfunc_b4Ev +// EC ??? _ZN4Menu8vfunc_68El +// EC ??? _ZN4Menu8vfunc_6cEl +// EC ??? _ZN4Menu8vfunc_70El +// EC ??? _ZN4Menu8vfunc_74El +// EC ??? _ZN4Menu8vfunc_d8Ev +// EC ??? _ZN4Menu8vfunc_dcEv +// EC ??? _ZN4Menu8vfunc_ccEv +// EC ??? _ZN4Menu8vfunc_d0El +// EC ??? _ZN4Menu8vfunc_d4El +// EC ??? _ZN4Menu8vfunc_f0Ellll +// EC ??? _ZN4Menu8vfunc_e8Ev +// EC ??? _ZN4Menu8vfunc_f4Ellll +// EC ??? _ZN4Menu8vfunc_ecEv +// EC ??? _ZN4Menu8vfunc_fcEllll +// EC ??? _ZN4Menu8vfunc_f8EPvllll +// EC ??? _ZN4Menu9vfunc_100Ellll +// EC ??? _ZN4Menu9vfunc_108Ellll +// EC ??? _ZN4Menu9vfunc_104EPvllll +// EC ??? _ZN4Menu9vfunc_10cEv +// EC ??? _ZN4Menu9vfunc_110Ev // EC ??? func_0202f020 // EC ??? func_0202f030 // EC ??? func_0202f040 -// EC ??? func_0202f2a0 -// EC ??? func_0202f2a4 -// EC ??? func_0202f34c -// EC ??? func_0202f468 -// EC ??? func_0202f490 -// EC ??? func_0202f504 -// EC ??? func_0202f57c -// EC ??? func_0202f5b4 -// EC ??? func_0202f604 +// EC ??? _ZN4Menu9vfunc_118Ev +// EC ??? _ZN4Menu8vfunc_08Ev +// EC ??? _ZN4Menu8vfunc_0cEv +// EC ??? _ZN4Menu8vfunc_10Ev +// EC ??? _ZN4Menu8vfunc_14Ev +// EC ??? _ZN4Menu8vfunc_18Ev +// EC ??? _ZN4Menu8vfunc_1cEv +// EC ??? _ZN4Menu9vfunc_11cEv +// EC ??? _ZN4Menu9vfunc_120Ev // EC ??? func_0202f674 // EC ??? func_0202f6d0 // EC ??? func_0202f72c // EC ??? func_0202f7d0 -// EC ??? func_0202f800 +// EC ??? _ZN4Menu9vfunc_124Ev // EC ??? func_0202f860 -// EC ??? func_0202f89c +// EC ??? _ZN4Menu9vfunc_12cEv // EC ??? func_0202f8c4 -// EC ??? func_0202fa1c -// EC ??? func_0202fa70 -// EC ??? func_0202fb38 +// EC ??? _ZN4Menu9vfunc_128Ev +// EC ??? StartMenu +// EC ??? StartChildMenu // EC ??? func_0202fc30 // EC ??? func_0202fd1c // EC ??? func_0202fe14 @@ -1660,26 +1660,26 @@ EC void func_0202b688(void *, u32, u32, u32); // EC ??? func_0202febc // EC ??? func_0202fef8 // EC ??? func_0202ff08 -// EC ??? func_0202ff20 -// EC ??? func_0202ff30 -// EC ??? func_0202ff40 +// EC ??? LockMenu +// EC ??? UnlockMenu +// EC ??? IsMenuLocked // EC ??? func_0202ff50 -// EC ??? func_0202ff6c +// EC ??? IsMenuActive // EC ??? func_0202ff8c // EC ??? func_0202ffb4 // EC ??? func_0202ffd8 -// EC ??? func_0202fffc -// EC ??? func_0203004c -// EC ??? func_020300ec -// EC ??? func_020301f4 -// EC ??? func_02030264 -// EC ??? func_020302cc -// EC ??? func_020302d0 -// EC ??? func_020302d4 -// EC ??? func_020302d8 -// EC ??? func_020302dc -EC void func_020302e0(void *); -// EC ??? func_02030330 +// EC ??? _ZN9SplitMenu8vfunc_b0EP13MenuItemStatell +// EC ??? _ZN9SplitMenu8vfunc_08Ev +// EC ??? _ZN9SplitMenu8vfunc_0cEv +// EC ??? _ZN8ProcMenuD0Ev +// EC ??? _ZN8ProcMenuD1Ev +// EC ??? _ZN9SplitMenu9vfunc_108Ellll +// EC ??? _ZN9SplitMenu9vfunc_100Ellll +// EC ??? _ZN9SplitMenu8vfunc_fcEllll +// EC ??? _ZN9SplitMenu8vfunc_ecEv +// EC ??? _ZN9SplitMenu8vfunc_e8Ev +EC void _ZN6DialogC1Ev(void *); +// EC ??? _ZN6Dialog9vfunc_128Ev // EC ??? func_0203038c // EC void func_020303bc(void *, char *, void *, ProcPtr, s32, s32); // EC ??? func_020303e0 @@ -1700,10 +1700,10 @@ EC void func_020302e0(void *); // EC ??? func_02030bcc // EC ??? func_02030cdc // EC ??? func_02030e04 -// EC ??? func_02030e0c -// EC ??? func_02030e50 -// EC ??? func_02030e8c -// EC ??? func_02030ed0 +// EC ??? _ZN6DialogD0Ev +// EC ??? _ZN6DialogD1Ev +// EC ??? _ZN10DialogBaseD0Ev +// EC ??? _ZN10DialogBaseD1Ev // EC ??? func_02030f0c // EC ??? func_02030fb4 // EC ??? func_02031040 diff --git a/src/menu.cpp b/src/menu.cpp index 358a3a0..1b6dfb0 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -14,7 +14,6 @@ extern struct KeyState * gKeySt; extern struct TouchState * gTouchSt; -// func_0202d4c4 Menu::Menu(void) { s32 i; @@ -54,9 +53,6 @@ Menu::Menu(void) return; } -// func_0202d574 -// func_0202d5a8 -// func_0202d5e4 Menu::~Menu() { if (this->unk_0c != NULL) @@ -65,32 +61,32 @@ Menu::~Menu() } } -EC void func_0202d618(ProcMenu * param_1) +EC void ProcMenu_0202d618(ProcMenu * proc) { - param_1->unk_38->vfunc_124(); + proc->unk_38->vfunc_124(); return; } EC void func_0202f7d0(Menu *); -EC void func_0202d630(ProcMenu * param_1) +EC void ProcMenu_0202d630(ProcMenu * proc) { - func_0202f7d0(param_1->unk_38); - param_1->unk_3c = 1; + func_0202f7d0(proc->unk_38); + proc->unk_3c = 1; - param_1->unk_38->vfunc_dc(); - param_1->unk_38->vfunc_e4(); + proc->unk_38->vfunc_dc(); + proc->unk_38->vfunc_e4(); - func_02018f54((struct Proc *)param_1, 0); + func_02018f54((struct Proc *)proc, 0); return; } EC void func_0202f6d0(Menu *); -EC void func_0202d678(ProcMenu * param_1) +EC void ProcMenu_0202d678(ProcMenu * proc) { - func_0202f6d0(param_1->unk_38); + func_0202f6d0(proc->unk_38); return; } @@ -98,31 +94,31 @@ EC void func_0202f8c4(Menu *); EC void func_0202f674(Menu *); EC void func_0202f72c(Menu *); -EC void func_0202d688(ProcMenu * param_1) +EC void ProcMenu_0202d688(ProcMenu * proc) { - param_1->unk_38->vfunc_e0(); - param_1->unk_38->vfunc_d8(); + proc->unk_38->vfunc_e0(); + proc->unk_38->vfunc_d8(); - func_0202f674(param_1->unk_38); + func_0202f674(proc->unk_38); return; } -EC void func_0202d6bc(ProcMenu * param_1) +EC void ProcMenu_0202d6bc(ProcMenu * proc) { - func_0202f72c(param_1->unk_38); + func_0202f72c(proc->unk_38); return; } -EC void func_0202d6cc(ProcMenu * param_1) +EC void ProcMenu_0202d6cc(ProcMenu * proc) { - param_1->unk_38->vfunc_120(); + proc->unk_38->vfunc_120(); return; } -EC void func_0202d6e4(ProcMenu * param_1) +EC void ProcMenu_0202d6e4(ProcMenu * proc) { - param_1->unk_38->vfunc_11c(); + proc->unk_38->vfunc_11c(); return; } @@ -137,9 +133,9 @@ EC void func_0202d6fc(Menu * param_1, s32 param_2) param_1->vfunc_e8(); } - func_02018f54((struct Proc *)param_1->unk_10, (void *)func_0202d6bc); + func_02018f54((struct Proc *)param_1->unk_10, (void *)ProcMenu_0202d6bc); - param_1->unk_10->func_0202d688(); + param_1->unk_10->ProcMenu_0202d688(); Proc_Goto(param_1->unk_10, 0, 0); @@ -156,7 +152,6 @@ struct UnkStruct_021970c4 extern struct UnkStruct_021970c4 * data_021970c4; extern struct UnkStruct_021970c4 * data_021970cc; -// func_0202d78c s32 MenuItem::vfunc_ac(MenuItemState * param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6) { s32 bVar1; @@ -193,7 +188,6 @@ s32 MenuItem::vfunc_ac(MenuItemState * param_2, s32 param_3, s32 param_4, s32 pa EC u32 func_02028e7c(UnkStruct_021970c4 *, char *, s32); -// func_0202d8c8 u32 MenuItem::vfunc_c8(MenuItemState * param_2) { u32 uVar1 = this->vfunc_c4(); @@ -211,7 +205,6 @@ u32 MenuItem::vfunc_c8(MenuItemState * param_2) return 0; } -// func_0202d948 s32 MenuItem::vfunc_10(MenuItemState * param_2) { if ((param_2->unk_09 & 7) != 1) @@ -222,7 +215,6 @@ s32 MenuItem::vfunc_10(MenuItemState * param_2) return MENU_COLOR_GRAY; } -// func_0202d960 void MenuItem::vfunc_b4(Menu * param_2, MenuItemState * param_3) { param_2->vfunc_fc(param_3->unk_04, param_3->unk_05, param_3->unk_06, param_3->unk_07); @@ -230,7 +222,6 @@ void MenuItem::vfunc_b4(Menu * param_2, MenuItemState * param_3) return; } -// func_0202d9bc void MenuItem::vfunc_b8(Menu * param_2, MenuItemState * param_3) { param_2->vfunc_108(param_3->unk_04, param_3->unk_05, param_3->unk_06, param_3->unk_07); @@ -238,7 +229,6 @@ void MenuItem::vfunc_b8(Menu * param_2, MenuItemState * param_3) return; } -// func_0202da18 void MenuItem::vfunc_bc(Menu * param_2, MenuItemState * param_3) { param_2->vfunc_100(param_3->unk_04, param_3->unk_05, param_3->unk_06, param_3->unk_07); @@ -246,7 +236,6 @@ void MenuItem::vfunc_bc(Menu * param_2, MenuItemState * param_3) return; } -// func_0202da74 void MenuItem::vfunc_c0(Menu * param_2, MenuItemState * param_3) { param_2->vfunc_fc(param_3->unk_04, param_3->unk_05, param_3->unk_06, param_3->unk_07); @@ -259,7 +248,6 @@ EC BOOL func_0202dad0(MenuItemState * param_1, Menu * param_2) return (¶m_2->unk_0c[param_2->unk_38] == param_1) & 0xff; } -// func_0202daf4 s32 Menu::vfunc_78(void) { u32 uVar2; @@ -273,7 +261,6 @@ s32 Menu::vfunc_78(void) return 0; } -// func_0202db5c s32 Menu::vfunc_7c(void) { u32 uVar2; @@ -287,7 +274,6 @@ s32 Menu::vfunc_7c(void) return 0x800; } -// func_0202dbc4 s32 Menu::vfunc_80(void) { u32 uVar2; @@ -301,7 +287,6 @@ s32 Menu::vfunc_80(void) return 0; } -// func_0202dc2c s32 Menu::vfunc_84(void) { u32 uVar2; @@ -315,7 +300,6 @@ s32 Menu::vfunc_84(void) return 0; } -// func_0202dc94 s32 Menu::vfunc_88(void) { u32 uVar2; @@ -329,7 +313,6 @@ s32 Menu::vfunc_88(void) return 0; } -// func_0202dcfc s32 Menu::vfunc_8c(void) { u32 uVar2; @@ -343,7 +326,6 @@ s32 Menu::vfunc_8c(void) return this->vfunc_4c(&this->unk_0c[this->unk_38], uVar2); } -// func_0202dd84 s32 Menu::vfunc_90(void) { u32 uVar2; @@ -362,7 +344,6 @@ EC void func_0202ff08(void); EC void func_0202fe9c(Menu *, s32); EC void func_0202febc(s32); -// func_0202ddec void Menu::vfunc_64(void) { s32 r5; @@ -643,35 +624,30 @@ void Menu::vfunc_64(void) } } -// func_0202e60c void Menu::vfunc_bc(void) { gSoundManager->unk_b0->vfunc_28(SE_SYS_CURSOL2_WIN1, 0, 0); return; } -// func_0202e640 void Menu::vfunc_c0(void) { gSoundManager->unk_b0->vfunc_28(SE_SYS_SELECT1, 0, 0); return; } -// func_0202e674 void Menu::vfunc_c4(void) { gSoundManager->unk_b0->vfunc_28(SE_SYS_CANSEL1, 0, 0); return; } -// func_0202e6a8 void Menu::vfunc_c8(void) { gSoundManager->unk_b0->vfunc_28(SE_SYS_MISS1, 0, 0); return; } -// func_0202e6dc BOOL Menu::vfunc_b0(MenuItemState * arg1, s32 arg2, s32 arg3) { if ((arg2 < ((arg1->unk_04 - 1) * 8)) || (arg2 >= ((arg1->unk_04 + arg1->unk_06 + 1) * 8))) @@ -687,7 +663,6 @@ BOOL Menu::vfunc_b0(MenuItemState * arg1, s32 arg2, s32 arg3) return TRUE; } -// func_0202e734 BOOL Menu::vfunc_b4(void) { s32 i; @@ -703,7 +678,6 @@ BOOL Menu::vfunc_b4(void) return FALSE; } -// func_0202e7a4 void Menu::vfunc_68(s32 param_2) { MenuItemState * pMVar1; @@ -758,7 +732,6 @@ void Menu::vfunc_68(s32 param_2) return; } -// func_0202e874 void Menu::vfunc_6c(s32 param_2) { s32 iVar2; @@ -811,7 +784,6 @@ void Menu::vfunc_6c(s32 param_2) EC void func_020208b0(s32, s32, s32 *, s32 *); -// func_0202e94c EC void Menu::vfunc_70(s32 param_2) { s32 iVar1; @@ -843,7 +815,6 @@ EC void Menu::vfunc_70(s32 param_2) return; } -// func_0202e9d8 EC void Menu::vfunc_74(s32 param_2) { s32 iVar1; @@ -872,7 +843,6 @@ EC void Menu::vfunc_74(s32 param_2) return; } -// func_0202ea68 void Menu::vfunc_d8(void) { s32 iVar1; @@ -908,7 +878,6 @@ void Menu::vfunc_d8(void) EC void func_02010f98(u16 *, s32, s32); -// func_0202eb2c void Menu::vfunc_dc(void) { s32 i; @@ -939,20 +908,17 @@ void Menu::vfunc_dc(void) return; } -// func_0202ebe8 s32 Menu::vfunc_cc(void) { return this->unk_47; } -// func_0202ebf0 void Menu::vfunc_d0(s32 param_2) { this->unk_47 = param_2; return; } -// func_0202ebf8 s32 Menu::vfunc_d4(s32 index) { s32 offset; @@ -981,7 +947,6 @@ struct Idk }; EC void func_0202a718(void *, s32, s32, struct Idk *); -// func_0202ec44 void Menu::vfunc_f0(s32 arg1, s32 arg2, s32 arg3, s32 arg4) { struct Idk sp; @@ -992,7 +957,6 @@ void Menu::vfunc_f0(s32 arg1, s32 arg2, s32 arg3, s32 arg4) func_0202a718(gpActiveScreenSt->tilemap[this->unk_30], arg1, arg2, &sp); } -// func_0202ec90 void Menu::vfunc_e8(void) { s32 bVar1; @@ -1041,14 +1005,12 @@ void Menu::vfunc_e8(void) EC void func_0202b260(void *, s32, s32, s32, s32); -// func_0202edc0 void Menu::vfunc_f4(s32 param_2, s32 param_3, s32 param_4, s32 param_5) { func_0202b260(gpActiveScreenSt->tilemap[this->unk_30], param_2, param_3, param_4, param_5); return; } -// func_0202edec void Menu::vfunc_ec(void) { s32 r4; @@ -1082,7 +1044,6 @@ void Menu::vfunc_ec(void) return; } -// func_0202eeac void Menu::vfunc_fc(s32 param_2, s32 param_3, s32 param_4, s32 param_5) { this->vfunc_f8(gpActiveScreenSt->tilemap[this->unk_30], param_2, param_3, param_4, param_5); @@ -1091,7 +1052,6 @@ void Menu::vfunc_fc(s32 param_2, s32 param_3, s32 param_4, s32 param_5) EC void func_0202ad68(void *, s32, s32, s32, s32, s32, s32, s32, s32); -// func_0202eef0 void Menu::vfunc_f8(void * param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6) { func_0202ad68(param_2, param_3, param_4, param_5, param_6, this->unk_1c, this->unk_20, 0, 0); @@ -1100,14 +1060,12 @@ void Menu::vfunc_f8(void * param_2, s32 param_3, s32 param_4, s32 param_5, s32 p EC void func_0202b014(void *, s32, s32, s32, s32); -// func_0202ef38 void Menu::vfunc_100(s32 param_2, s32 param_3, s32 param_4, s32 param_5) { func_0202b014(gpActiveScreenSt->tilemap[this->unk_30], param_2, param_3, param_4, param_5); return; } -// func_0202ef7c void Menu::vfunc_108(s32 param_2, s32 param_3, s32 param_4, s32 param_5) { this->vfunc_104(gpActiveScreenSt->tilemap[this->unk_30], param_2, param_3, param_4, param_5); @@ -1116,14 +1074,12 @@ void Menu::vfunc_108(s32 param_2, s32 param_3, s32 param_4, s32 param_5) EC void func_0202b1e4(void *, s32, s32, s32, s32, s32, s32); -// func_0202efc0 void Menu::vfunc_104(void * param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6) { func_0202b1e4(param_2, param_3, param_4, param_5, param_6, this->unk_1c, this->unk_20); return; } -// func_0202effc s32 Menu::vfunc_10c(void) { return this->unk_10->proc_lockCnt; @@ -1131,7 +1087,6 @@ s32 Menu::vfunc_10c(void) EC void func_0202f040(Menu *, s32, s32, s32); -// func_0202f008 void Menu::vfunc_110(void) { func_0202f040(this, 0, 0, 0); @@ -1236,13 +1191,11 @@ EC void func_0202f040(Menu * param_1, s32 param_2, s32 param_3, s32 param_4) return; } -// func_0202f2a0 void Menu::vfunc_118(void) { return; } -// func_0202f2a4 EC void Menu::vfunc_08(void) { s32 iVar1; @@ -1279,7 +1232,6 @@ EC void Menu::vfunc_08(void) return; } -// func_0202f34c void Menu::vfunc_0c(void) { u32 bVar1; @@ -1358,7 +1310,6 @@ void Menu::vfunc_0c(void) return; } -// func_0202f468 void Menu::vfunc_10(void) { this->vfunc_08(); @@ -1367,7 +1318,6 @@ void Menu::vfunc_10(void) return; } -// func_0202f490 EC void Menu::vfunc_14(void) { s32 iVar1; @@ -1386,7 +1336,6 @@ EC void Menu::vfunc_14(void) return; } -// func_0202f504 void Menu::vfunc_18(void) { MenuItemState * pMVar1; @@ -1411,7 +1360,6 @@ void Menu::vfunc_18(void) return; } -// func_0202f57c void Menu::vfunc_1c(void) { this->vfunc_10(); @@ -1421,7 +1369,6 @@ void Menu::vfunc_1c(void) return; } -// func_0202f5b4 void Menu::vfunc_11c(void) { s32 i; @@ -1434,7 +1381,6 @@ void Menu::vfunc_11c(void) return; } -// func_0202f604 void Menu::vfunc_120(void) { this->vfunc_ec(); @@ -1511,7 +1457,6 @@ EC void func_0202f7d0(Menu * param_1) return; } -// func_0202f800 void Menu::vfunc_124(void) { this->vfunc_ec(); @@ -1545,7 +1490,6 @@ EC s32 func_0202f860(Menu * param_1) return iVar4; } -// func_0202f89c void Menu::vfunc_12c(void) { this->unk_0c = static_cast(gHeap.Alloc(func_0202f860(this) * sizeof(MenuItemState))); @@ -1626,7 +1570,6 @@ EC void func_0202f8c4(Menu * param_1) EC void func_0202a5e0(void *, s32, s32); -// func_0202fa1c void Menu::vfunc_128(void) { func_0202a4dc(this->unk_18, 0); @@ -1635,9 +1578,31 @@ void Menu::vfunc_128(void) return; } -extern struct ProcCmd data_020d3dd4[]; +// clang-format off -EC void func_0202fa70(Menu * param_1, MenuItem ** param_2, s32 param_3) +struct ProcCmd ProcScr_ProcMenu[] = +{ + PROC_NAME, + PROC_SLEEP(0), + + PROC_CALL(ProcMenu_0202d6e4), + PROC_REPEAT(ProcMenu_0202d6cc), + PROC_06(0, ProcMenu_0202d6bc), + PROC_CALL(ProcMenu_0202d688), + +PROC_LABEL(0), + PROC_REPEAT(ProcMenu_0202d678), + +PROC_LABEL(1), + PROC_CALL(ProcMenu_0202d630), + PROC_REPEAT(ProcMenu_0202d618), + + PROC_END, +}; + +// clang-format on + +EC void StartMenu(Menu * param_1, MenuItem ** param_2, s32 param_3) { param_1->unk_08 = param_2; @@ -1656,20 +1621,20 @@ EC void func_0202fa70(Menu * param_1, MenuItem ** param_2, s32 param_3) if (param_1->unk_04 != NULL) { - param_1->unk_10 = new (Proc_StartBlocking(data_020d3dd4, param_1->unk_04->unk_10)) ProcMenu(param_1); + param_1->unk_10 = new (Proc_StartBlocking(ProcScr_ProcMenu, param_1->unk_04->unk_10)) ProcMenu(param_1); } else { - param_1->unk_10 = new (Proc_Start(data_020d3dd4, PROC_TREE_9)) ProcMenu(param_1); + param_1->unk_10 = new (Proc_Start(ProcScr_ProcMenu, PROC_TREE_9)) ProcMenu(param_1); } return; } -EC void func_0202fb38(Menu * param_1, MenuItem ** param_2, ProcPtr param_3, u32 param_4, u8 param_5) +EC void StartChildMenu(Menu * param_1, MenuItem ** param_2, ProcPtr param_3, u32 param_4, u8 param_5) { param_1->unk_08 = param_2; - if ((!IsRootProcess((struct Proc *)param_3)) && (func_020190c4((struct Proc *)param_3) == data_020d3dd4)) + if ((!IsRootProcess((struct Proc *)param_3)) && (func_020190c4((struct Proc *)param_3) == ProcScr_ProcMenu)) { param_1->unk_04 = static_cast(param_3)->unk_38; } @@ -1689,11 +1654,11 @@ EC void func_0202fb38(Menu * param_1, MenuItem ** param_2, ProcPtr param_3, u32 if (param_4) { - param_1->unk_10 = new (Proc_StartBlocking(data_020d3dd4, param_3)) ProcMenu(param_1); + param_1->unk_10 = new (Proc_StartBlocking(ProcScr_ProcMenu, param_3)) ProcMenu(param_1); } else { - param_1->unk_10 = new (Proc_Start(data_020d3dd4, param_3)) ProcMenu(param_1); + param_1->unk_10 = new (Proc_Start(ProcScr_ProcMenu, param_3)) ProcMenu(param_1); } } @@ -1756,7 +1721,7 @@ EC BOOL func_02033f54(ProcMenu *); EC BOOL func_0202fe14(ProcMenu * param_1) { - if (func_020190c4((struct Proc *)param_1) == data_020d3dd4) + if (func_020190c4((struct Proc *)param_1) == ProcScr_ProcMenu) { return TRUE; } @@ -1810,11 +1775,11 @@ EC void func_0202febc(s32 param_1) { if (param_1 != 0) { - Proc_ForEach(data_020d3dd4, (ProcFunc)func_0202fe88); + Proc_ForEach(ProcScr_ProcMenu, (ProcFunc)func_0202fe88); } else { - Proc_ForEach(data_020d3dd4, (ProcFunc)func_0202fe4c); + Proc_ForEach(ProcScr_ProcMenu, (ProcFunc)func_0202fe4c); } func_02033f98(); @@ -1832,24 +1797,24 @@ EC void func_02033fc4(void); EC void func_0202ff08(void) { - Proc_EndEach(data_020d3dd4); + Proc_EndEach(ProcScr_ProcMenu); func_02033fc4(); return; } -EC void func_0202ff20(Menu * param_1) +EC void LockMenu(Menu * param_1) { Proc_Lock((struct Proc *)param_1->unk_10); return; } -EC void func_0202ff30(Menu * param_1) +EC void UnlockMenu(Menu * param_1) { Proc_Release((struct Proc *)param_1->unk_10); return; } -EC BOOL func_0202ff40(Menu * param_1) +EC BOOL IsMenuLocked(Menu * param_1) { return IsProcLocked((struct Proc *)param_1->unk_10); } @@ -1859,16 +1824,16 @@ EC BOOL func_0202ff50(Menu * param_1) return func_02018f5c((struct Proc *)param_1->unk_10) != NULL; } -EC BOOL func_0202ff6c(void) +EC BOOL IsMenuActive(void) { - return Proc_Find(data_020d3dd4) != NULL; + return Proc_Find(ProcScr_ProcMenu) != NULL; } EC Menu * func_0202ff8c(ProcMenu * param_1) { if (param_1 == NULL) { - param_1 = static_cast(Proc_Find(data_020d3dd4)); + param_1 = static_cast(Proc_Find(ProcScr_ProcMenu)); } if (param_1 == NULL) @@ -1883,7 +1848,7 @@ EC Menu * func_0202ff8c(ProcMenu * param_1) EC Menu * func_0202ffb4(ProcPtr param_1) { - ProcMenu * proc = static_cast((void *)func_02018d9c(data_020d3dd4, (struct Proc *)param_1)); + ProcMenu * proc = static_cast((void *)func_02018d9c(ProcScr_ProcMenu, (struct Proc *)param_1)); if (proc != NULL) { @@ -1895,7 +1860,7 @@ EC Menu * func_0202ffb4(ProcPtr param_1) EC Menu * func_0202ffd8(ProcPtr param_1) { - ProcMenu * proc = static_cast((void *)func_02018df4(data_020d3dd4, (struct Proc *)param_1)); + ProcMenu * proc = static_cast((void *)func_02018df4(ProcScr_ProcMenu, (struct Proc *)param_1)); if (proc != NULL) { @@ -1905,7 +1870,6 @@ EC Menu * func_0202ffd8(ProcPtr param_1) return NULL; } -// func_0202fffc BOOL SplitMenu::vfunc_b0(MenuItemState * arg1, s32 arg2, s32 arg3) { if ((arg2 < ((arg1->unk_04) * 8)) || (arg2 >= ((arg1->unk_04 + arg1->unk_06) * 8))) @@ -1921,7 +1885,6 @@ BOOL SplitMenu::vfunc_b0(MenuItemState * arg1, s32 arg2, s32 arg3) return TRUE; } -// func_0203004c void SplitMenu::vfunc_08(void) { s32 iVar1; @@ -1958,7 +1921,6 @@ void SplitMenu::vfunc_08(void) return; } -// func_020300ec void SplitMenu::vfunc_0c(void) { u32 bVar1; diff --git a/src/ov005/prep_main_menu.cpp b/src/ov005/prep_main_menu.cpp index 777c1c0..dd062ff 100644 --- a/src/ov005/prep_main_menu.cpp +++ b/src/ov005/prep_main_menu.cpp @@ -402,7 +402,7 @@ EC void func_ov005_022056d8(sally::MMenu * proc) return; } -EC void func_0202fb38(Menu *, void *, ProcPtr, u32, u32); +EC void StartChildMenu(Menu *, void *, ProcPtr, u32, u32); // TODO: Member function EC void func_ov005_022057e4(sally::MMenu * proc) @@ -431,7 +431,7 @@ EC void func_ov005_022057e4(sally::MMenu * proc) // clang-format on proc->unk_38 = new sally::SallyMenu(); - func_0202fb38(proc->unk_38, data_ov005_022132ac, proc, 0, 0); + StartChildMenu(proc->unk_38, data_ov005_022132ac, proc, 0, 0); proc->unk_38->unk_43 = 0; return; From b3c19a8b84b61d90dfce3109c4f433d02f108620 Mon Sep 17 00:00:00 2001 From: Eebit Date: Sun, 1 Feb 2026 19:17:17 -0500 Subject: [PATCH 3/5] (menu) Add data delink and update Dialog vtable --- config/YFEE01/arm9/delinks.txt | 1 + config/YFEE01/arm9/relocs.txt | 2 +- config/YFEE01/arm9/symbols.txt | 2 +- include/unknown_data.h | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/config/YFEE01/arm9/delinks.txt b/config/YFEE01/arm9/delinks.txt index ae0bb55..5281b10 100644 --- a/config/YFEE01/arm9/delinks.txt +++ b/config/YFEE01/arm9/delinks.txt @@ -41,6 +41,7 @@ src/gamectrl.cpp: src/menu.cpp: .text start:0x0202d4c4 end:0x020302e0 + .data start:0x020d3d8c end:0x020d3f74 src/button.cpp: .text start:0x020346e0 end:0x020355e4 diff --git a/config/YFEE01/arm9/relocs.txt b/config/YFEE01/arm9/relocs.txt index 504e97e..1980eda 100644 --- a/config/YFEE01/arm9/relocs.txt +++ b/config/YFEE01/arm9/relocs.txt @@ -5311,7 +5311,7 @@ from:0x02030284 kind:arm_call to:0x0202f7d0 module:main from:0x020302c8 kind:load to:0x020d3dbc module:main add:8 from:0x020302e8 kind:arm_call to:0x0202d4c4 module:main from:0x02030328 kind:load to:0x020d40bc module:main -from:0x0203032c kind:load to:0x020d3f7c module:main +from:0x0203032c kind:load to:0x020d3f74 module:main add:8 from:0x02030344 kind:arm_call to:0x0202a4dc module:main from:0x02030368 kind:arm_call to:0x0202b688 module:main from:0x02030380 kind:arm_call to:0x0202b294 module:main diff --git a/config/YFEE01/arm9/symbols.txt b/config/YFEE01/arm9/symbols.txt index 716d77c..4fd9bdc 100644 --- a/config/YFEE01/arm9/symbols.txt +++ b/config/YFEE01/arm9/symbols.txt @@ -6780,7 +6780,7 @@ _ZTI8ProcMenu kind:data(any) addr:0x020d3db0 _ZTV8ProcMenu kind:data(any) addr:0x020d3dbc ProcScr_ProcMenu kind:data(any) addr:0x020d3dd4 _ZTV4Menu kind:data(any) addr:0x020d3e34 -data_020d3f7c kind:data(any) addr:0x020d3f7c +_ZTV6Dialog kind:data(any) addr:0x020d3f74 data_020d40bc kind:data(any) addr:0x020d40bc __typestr__6Button kind:data(any) addr:0x020d41f4 __typeinfo__6Button kind:data(any) addr:0x020d41fc diff --git a/include/unknown_data.h b/include/unknown_data.h index 72c4c48..6f4e15f 100644 --- a/include/unknown_data.h +++ b/include/unknown_data.h @@ -1229,7 +1229,7 @@ extern struct ProcCmd data_020cec14[]; // extern ??? _ZTV8ProcMenu // extern ??? ProcScr_ProcMenu // extern ??? _ZTV4Menu -// extern ??? data_020d3f7c +// extern ??? _ZTV6Dialog // extern ??? data_020d40bc // extern ??? __typestr__6Button // extern ??? __typeinfo__6Button From 4bd2f6500dcf62a06b3bd35c4d2b7a23e30a3df0 Mon Sep 17 00:00:00 2001 From: Eebit Date: Sun, 1 Feb 2026 19:22:33 -0500 Subject: [PATCH 4/5] (menu) Fix vtable overrides in arena and prep main menu --- src/ov000/arena.cpp | 16 ++++----- src/ov005/prep_main_menu.cpp | 70 +++++++++++++++++------------------- 2 files changed, 41 insertions(+), 45 deletions(-) diff --git a/src/ov000/arena.cpp b/src/ov000/arena.cpp index 66d72b3..e29b056 100644 --- a/src/ov000/arena.cpp +++ b/src/ov000/arena.cpp @@ -1164,11 +1164,11 @@ namespace map class BMapDialogYesNo : public DialogYesNo { public: - virtual void vfunc_00(/* */); // func_ov000_021be6d8 - virtual void vfunc_a0(/* */); // func_ov000_021be934 - virtual void vfunc_ac(/* */); // func_ov000_021be91c - virtual void vfunc_130(/* */); // func_ov000_021bea74 - virtual void vfunc_134(/* */); // func_ov000_021beab0 + /* 000 */ virtual void vfunc_00(void); // func_ov000_021be6d8 + /* 0A0 */ virtual BOOL vfunc_a0(void); // func_ov000_021be934 + /* 0AC */ virtual s32 vfunc_ac(void); // func_ov000_021be91c + /* 130 */ virtual void vfunc_130(/* ? */); // func_ov000_021bea74 + /* 134 */ virtual void vfunc_134(/* ? */); // func_ov000_021beab0 }; } // namespace map @@ -1176,14 +1176,14 @@ class BMapDialogYesNo : public DialogYesNo class DI_ArenaYes : public DialogItemYes { public: - virtual s32 vfunc_1c(void); // func_ov000_021d9940 + /* 01C */ virtual s32 vfunc_1c(void); // func_ov000_021d9940 }; class DI_ArenaNo : public DialogItemNo { public: - virtual s32 vfunc_14(void); // func_ov000_021d9938 - virtual s32 vfunc_1c(void); // func_ov000_021d9924 + /* 014 */ virtual s32 vfunc_14(void); // func_ov000_021d9938 + /* 01C */ virtual s32 vfunc_1c(void); // func_ov000_021d9924 }; EC void func_ov000_021d8d68(struct ArenaProc * proc) diff --git a/src/ov005/prep_main_menu.cpp b/src/ov005/prep_main_menu.cpp index dd062ff..5ec16f3 100644 --- a/src/ov005/prep_main_menu.cpp +++ b/src/ov005/prep_main_menu.cpp @@ -36,18 +36,18 @@ class SallyMenu : public Menu virtual ~SallyMenu(); - virtual void vfunc_00(void); - virtual s32 vfunc_24(void *, s32); - virtual s32 vfunc_28(void); - virtual s32 vfunc_58(void); - virtual void vfunc_a0(void); - virtual void vfunc_a8(void); - virtual void vfunc_e8(void); - virtual void vfunc_ec(void); - virtual void vfunc_120(void); - virtual void vfunc_124(void); - virtual void vfunc_130(/* ? */); // func_ov005_02206800 - virtual void vfunc_134(/* ? */); // func_ov005_02206814 + /* 000 */ virtual void vfunc_00(void); + /* 024 */ virtual s32 vfunc_24(void *, s32); + /* 028 */ virtual s32 vfunc_28(void); + /* 058 */ virtual s32 vfunc_58(void); + /* 0A0 */ virtual BOOL vfunc_a0(void); + /* 0A8 */ virtual BOOL vfunc_a8(void); + /* 0E8 */ virtual void vfunc_e8(void); + /* 0EC */ virtual void vfunc_ec(void); + /* 120 */ virtual void vfunc_120(void); + /* 124 */ virtual void vfunc_124(void); + /* 130 */ virtual void vfunc_130(/* ? */); // func_ov005_02206800 + /* 134 */ virtual void vfunc_134(/* ? */); // func_ov005_02206814 }; class MIS_SallyEnd : public MenuItem @@ -329,18 +329,18 @@ class SallyDialogYesNo : public DialogYesNo } } - virtual void vfunc_00(void); - virtual void vfunc_a0(void); - virtual void vfunc_c0(void); - virtual void vfunc_130(/* ? */); // func_ov005_02206700 - virtual void vfunc_134(/* ? */); // func_ov005_0220673c + /* 000 */ virtual void vfunc_00(void); + /* 0A0 */ virtual BOOL vfunc_a0(void); + /* 0C0 */ virtual void vfunc_c0(void); + /* 130 */ virtual void vfunc_130(/* ? */); // func_ov005_02206700 + /* 134 */ virtual void vfunc_134(/* ? */); // func_ov005_0220673c }; class SallyCancelDialogYesNo : public SallyDialogYesNo { - virtual void vfunc_c0(void); - virtual void vfunc_130(/* ? */); // func_ov005_02206780 - virtual void vfunc_134(/* ? */); // func_ov005_022067bc + /* 0C0 */ virtual void vfunc_c0(void); + /* 130 */ virtual void vfunc_130(/* ? */); // func_ov005_02206780 + /* 134 */ virtual void vfunc_134(/* ? */); // func_ov005_022067bc }; } // namespace sally @@ -362,7 +362,7 @@ EC void func_ov005_02205518(char * str) EC void func_020303bc(DialogYesNo *, char *, void *, ProcPtr, s32, s32); -EC void func_ov005_022055d8(sally::MMenu * proc) +EC void func_ov005_022055d8(ProcMenu * proc) { static sally::DI_SallyEndYes sSallyEndYes; static sally::DI_SallyEndNo sSallyEndNo; @@ -382,7 +382,7 @@ EC void func_ov005_022055d8(sally::MMenu * proc) return; } -EC void func_ov005_022056d8(sally::MMenu * proc) +EC void func_ov005_022056d8(ProcMenu * proc) { static sally::DI_SallyCancelYes sSallyCancelYes; static sally::DI_SallyEndNo sSallyEndNo; @@ -519,7 +519,7 @@ s32 sally::MIS_SallyEnd::vfunc_24(Menu * param_2, MenuItemState * param_3) { if ((param_3->unk_09 & 7) != 1) { - func_ov005_022055d8(static_cast(param_2->unk_10)); + func_ov005_022055d8(param_2->unk_10); return 0x40; } @@ -836,20 +836,19 @@ char * sally::MIS_SallySelect::vfunc_00(void) return func_02039e10("MSM_ユニット"); } -void sally::SallyMenu::vfunc_a0(void) +BOOL sally::SallyMenu::vfunc_a0(void) { if (GetSallyMMenu()->unk_40 != NULL) { - GetSallyMMenu()->unk_40->func_02035450(); + return GetSallyMMenu()->unk_40->func_02035450(); } - return; + return FALSE; } -void sally::SallyMenu::vfunc_a8(void) +BOOL sally::SallyMenu::vfunc_a8(void) { - GetSallyMMenu()->unk_3c->func_02035450(); - return; + return GetSallyMMenu()->unk_3c->func_02035450(); } s32 sally::SallyMenu::vfunc_58(void) @@ -862,7 +861,7 @@ s32 sally::SallyMenu::vfunc_58(void) } } - func_ov005_022055d8(static_cast(this->unk_10)); + func_ov005_022055d8(this->unk_10); return 0x40; } @@ -871,7 +870,7 @@ s32 sally::SallyMenu::vfunc_28(void) { if (data_ov005_02217560->unk_11 != 0) { - func_ov005_022056d8(static_cast(this->unk_10)); + func_ov005_022056d8(this->unk_10); return 0x80; } @@ -970,17 +969,14 @@ s32 sally::DI_SallyEndYes::vfunc_1c(void) return 0x1041; } -void sally::SallyDialogYesNo::vfunc_a0(void) +BOOL sally::SallyDialogYesNo::vfunc_a0(void) { if (GetSallyMMenu()->unk_40 != NULL) { - GetSallyMMenu()->unk_40->func_02035450(); - return; + return GetSallyMMenu()->unk_40->func_02035450(); } - GetSallyMMenu()->unk_3c->func_02035450(); - - return; + return GetSallyMMenu()->unk_3c->func_02035450(); } void sally::SallyDialogYesNo::vfunc_00(void) From 7c1175e9a166665d528aa4d90477e2e523e83d93 Mon Sep 17 00:00:00 2001 From: Eebit Date: Sun, 1 Feb 2026 19:46:59 -0500 Subject: [PATCH 5/5] (menu) Add non-virtual member functions --- config/YFEE01/arm9/symbols.txt | 20 ++-- include/menu.hpp | 20 ++-- include/unknown_funcs.h | 20 ++-- src/menu.cpp | 174 +++++++++++++++------------------ 4 files changed, 115 insertions(+), 119 deletions(-) diff --git a/config/YFEE01/arm9/symbols.txt b/config/YFEE01/arm9/symbols.txt index 4fd9bdc..577a024 100644 --- a/config/YFEE01/arm9/symbols.txt +++ b/config/YFEE01/arm9/symbols.txt @@ -1564,7 +1564,7 @@ ProcMenu_0202d688 kind:function(arm,size=0x34) addr:0x0202d688 ProcMenu_0202d6bc kind:function(arm,size=0x10) addr:0x0202d6bc ProcMenu_0202d6cc kind:function(arm,size=0x18) addr:0x0202d6cc ProcMenu_0202d6e4 kind:function(arm,size=0x18) addr:0x0202d6e4 -func_0202d6fc kind:function(arm,size=0x90) addr:0x0202d6fc +_ZN4Menu9_0202d6fcEl kind:function(arm,size=0x90) addr:0x0202d6fc _ZN8MenuItem8vfunc_acEP13MenuItemStatellll kind:function(arm,size=0x13c) addr:0x0202d78c _ZN8MenuItem8vfunc_c8EP13MenuItemState kind:function(arm,size=0x80) addr:0x0202d8c8 _ZN8MenuItem8vfunc_10EP13MenuItemState kind:function(arm,size=0x18) addr:0x0202d948 @@ -1607,9 +1607,9 @@ _ZN4Menu9vfunc_108Ellll kind:function(arm,size=0x44) addr:0x0202ef7c _ZN4Menu9vfunc_104EPvllll kind:function(arm,size=0x3c) addr:0x0202efc0 _ZN4Menu9vfunc_10cEv kind:function(arm,size=0xc) addr:0x0202effc _ZN4Menu9vfunc_110Ev kind:function(arm,size=0x18) addr:0x0202f008 -func_0202f020 kind:function(arm,size=0x10) addr:0x0202f020 -func_0202f030 kind:function(arm,size=0x10) addr:0x0202f030 -func_0202f040 kind:function(arm,size=0x260) addr:0x0202f040 +_ZN4Menu9_0202f020Ell kind:function(arm,size=0x10) addr:0x0202f020 +_ZN4Menu9_0202f030Ell kind:function(arm,size=0x10) addr:0x0202f030 +_ZN4Menu9_0202f040Elll kind:function(arm,size=0x260) addr:0x0202f040 _ZN4Menu9vfunc_118Ev kind:function(arm,size=0x4) addr:0x0202f2a0 _ZN4Menu8vfunc_08Ev kind:function(arm,size=0xa8) addr:0x0202f2a4 _ZN4Menu8vfunc_0cEv kind:function(arm,size=0x11c) addr:0x0202f34c @@ -1619,14 +1619,14 @@ _ZN4Menu8vfunc_18Ev kind:function(arm,size=0x78) addr:0x0202f504 _ZN4Menu8vfunc_1cEv kind:function(arm,size=0x38) addr:0x0202f57c _ZN4Menu9vfunc_11cEv kind:function(arm,size=0x50) addr:0x0202f5b4 _ZN4Menu9vfunc_120Ev kind:function(arm,size=0x70) addr:0x0202f604 -func_0202f674 kind:function(arm,size=0x5c) addr:0x0202f674 -func_0202f6d0 kind:function(arm,size=0x5c) addr:0x0202f6d0 -func_0202f72c kind:function(arm,size=0xa4) addr:0x0202f72c -func_0202f7d0 kind:function(arm,size=0x30) addr:0x0202f7d0 +_ZN4Menu9_0202f674Ev kind:function(arm,size=0x5c) addr:0x0202f674 +_ZN4Menu9_0202f6d0Ev kind:function(arm,size=0x5c) addr:0x0202f6d0 +_ZN4Menu9_0202f72cEv kind:function(arm,size=0xa4) addr:0x0202f72c +_ZN4Menu9_0202f7d0Ev kind:function(arm,size=0x30) addr:0x0202f7d0 _ZN4Menu9vfunc_124Ev kind:function(arm,size=0x60) addr:0x0202f800 -func_0202f860 kind:function(arm,size=0x3c) addr:0x0202f860 +_ZN4Menu9_0202f860Ev kind:function(arm,size=0x3c) addr:0x0202f860 _ZN4Menu9vfunc_12cEv kind:function(arm,size=0x28) addr:0x0202f89c -func_0202f8c4 kind:function(arm,size=0x158) addr:0x0202f8c4 +_ZN4Menu9_0202f8c4Ev kind:function(arm,size=0x158) addr:0x0202f8c4 _ZN4Menu9vfunc_128Ev kind:function(arm,size=0x54) addr:0x0202fa1c StartMenu kind:function(arm,size=0xc8) addr:0x0202fa70 StartChildMenu kind:function(arm,size=0xf8) addr:0x0202fb38 diff --git a/include/menu.hpp b/include/menu.hpp index 8a3eec3..607b46a 100644 --- a/include/menu.hpp +++ b/include/menu.hpp @@ -71,7 +71,7 @@ class Menu s8 unk_4a[4]; STRUCT_PAD(0x4E, 0x50); - Menu(); // _ZN4MenuC1Ev + Menu(); /* 000 */ virtual void vfunc_00(void); // ? /* 004 */ virtual void vfunc_04(/* ? */); // func_02015368 @@ -153,6 +153,17 @@ class Menu /* 134 */ virtual void vfunc_134(/* ? */); // ? virtual ~Menu(); + + void _0202d6fc(s32); + void _0202f020(s32, s32); + void _0202f030(s32, s32); + void _0202f040(s32, s32, s32); + void _0202f674(void); + void _0202f6d0(void); + void _0202f72c(void); + void _0202f7d0(void); + s32 _0202f860(void); + void _0202f8c4(void); }; class MenuState @@ -263,9 +274,6 @@ class SplitMenu : public Menu } }; -EC void func_0202f674(Menu *); -EC void func_0202f7d0(Menu *); - class ProcMenu : public ProcEx { public: @@ -282,7 +290,7 @@ class ProcMenu : public ProcEx { if (this->unk_3c == 0) { - func_0202f7d0(this->unk_38); + this->unk_38->_0202f7d0(); } this->unk_38->vfunc_dc(); @@ -299,7 +307,7 @@ class ProcMenu : public ProcEx this->unk_38->vfunc_e0(); this->unk_38->vfunc_d8(); - func_0202f674(this->unk_38); + this->unk_38->_0202f674(); return; } diff --git a/include/unknown_funcs.h b/include/unknown_funcs.h index a3283f0..2f64135 100644 --- a/include/unknown_funcs.h +++ b/include/unknown_funcs.h @@ -1585,7 +1585,7 @@ EC void func_0202b688(void *, u32, u32, u32); // EC ??? ProcMenu_0202d6bc // EC ??? ProcMenu_0202d6cc // EC ??? ProcMenu_0202d6e4 -// EC ??? func_0202d6fc +// EC ??? _ZN4Menu9_0202d6fcEl // EC ??? _ZN8MenuItem8vfunc_acEP13MenuItemStatellll // EC ??? _ZN8MenuItem8vfunc_c8EP13MenuItemState // EC ??? _ZN8MenuItem8vfunc_10EP13MenuItemState @@ -1628,9 +1628,9 @@ EC void func_0202b688(void *, u32, u32, u32); // EC ??? _ZN4Menu9vfunc_104EPvllll // EC ??? _ZN4Menu9vfunc_10cEv // EC ??? _ZN4Menu9vfunc_110Ev -// EC ??? func_0202f020 -// EC ??? func_0202f030 -// EC ??? func_0202f040 +// EC ??? _ZN4Menu9_0202f020Ell +// EC ??? _ZN4Menu9_0202f030Ell +// EC ??? _ZN4Menu9_0202f040Elll // EC ??? _ZN4Menu9vfunc_118Ev // EC ??? _ZN4Menu8vfunc_08Ev // EC ??? _ZN4Menu8vfunc_0cEv @@ -1640,14 +1640,14 @@ EC void func_0202b688(void *, u32, u32, u32); // EC ??? _ZN4Menu8vfunc_1cEv // EC ??? _ZN4Menu9vfunc_11cEv // EC ??? _ZN4Menu9vfunc_120Ev -// EC ??? func_0202f674 -// EC ??? func_0202f6d0 -// EC ??? func_0202f72c -// EC ??? func_0202f7d0 +// EC ??? _ZN4Menu9_0202f674Ev +// EC ??? _ZN4Menu9_0202f6d0Ev +// EC ??? _ZN4Menu9_0202f72cEv +// EC ??? _ZN4Menu9_0202f7d0Ev // EC ??? _ZN4Menu9vfunc_124Ev -// EC ??? func_0202f860 +// EC ??? _ZN4Menu9_0202f860Ev // EC ??? _ZN4Menu9vfunc_12cEv -// EC ??? func_0202f8c4 +// EC ??? _ZN4Menu9_0202f8c4Ev // EC ??? _ZN4Menu9vfunc_128Ev // EC ??? StartMenu // EC ??? StartChildMenu diff --git a/src/menu.cpp b/src/menu.cpp index 1b6dfb0..22f7283 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -67,11 +67,9 @@ EC void ProcMenu_0202d618(ProcMenu * proc) return; } -EC void func_0202f7d0(Menu *); - EC void ProcMenu_0202d630(ProcMenu * proc) { - func_0202f7d0(proc->unk_38); + proc->unk_38->_0202f7d0(); proc->unk_3c = 1; proc->unk_38->vfunc_dc(); @@ -82,31 +80,25 @@ EC void ProcMenu_0202d630(ProcMenu * proc) return; } -EC void func_0202f6d0(Menu *); - EC void ProcMenu_0202d678(ProcMenu * proc) { - func_0202f6d0(proc->unk_38); + proc->unk_38->_0202f6d0(); return; } -EC void func_0202f8c4(Menu *); -EC void func_0202f674(Menu *); -EC void func_0202f72c(Menu *); - EC void ProcMenu_0202d688(ProcMenu * proc) { proc->unk_38->vfunc_e0(); proc->unk_38->vfunc_d8(); - func_0202f674(proc->unk_38); + proc->unk_38->_0202f674(); return; } EC void ProcMenu_0202d6bc(ProcMenu * proc) { - func_0202f72c(proc->unk_38); + proc->unk_38->_0202f72c(); return; } @@ -122,22 +114,22 @@ EC void ProcMenu_0202d6e4(ProcMenu * proc) return; } -EC void func_0202d6fc(Menu * param_1, s32 param_2) +void Menu::_0202d6fc(s32 param_2) { - param_1->unk_10->unk_38->vfunc_11c(); + this->unk_10->unk_38->vfunc_11c(); - param_1->unk_47 = 4; + this->unk_47 = 4; if (param_2 != 0) { - param_1->vfunc_e8(); + this->vfunc_e8(); } - func_02018f54((struct Proc *)param_1->unk_10, (void *)ProcMenu_0202d6bc); + func_02018f54((struct Proc *)this->unk_10, (void *)ProcMenu_0202d6bc); - param_1->unk_10->ProcMenu_0202d688(); + this->unk_10->ProcMenu_0202d688(); - Proc_Goto(param_1->unk_10, 0, 0); + Proc_Goto(this->unk_10, 0, 0); return; } @@ -1085,28 +1077,26 @@ s32 Menu::vfunc_10c(void) return this->unk_10->proc_lockCnt; } -EC void func_0202f040(Menu *, s32, s32, s32); - void Menu::vfunc_110(void) { - func_0202f040(this, 0, 0, 0); + this->_0202f040(0, 0, 0); } -EC void func_0202f020(Menu * param_1, s32 param_2, s32 param_3) +void Menu::_0202f020(s32 param_2, s32 param_3) { - func_0202f040(param_1, param_2, param_3, 1); + this->_0202f040(param_2, param_3, 1); } -EC void func_0202f030(Menu * param_1, s32 param_2, s32 param_3) +void Menu::_0202f030(s32 param_2, s32 param_3) { - func_0202f040(param_1, param_2, param_3, 2); + this->_0202f040(param_2, param_3, 2); } EC void func_0202b538(u16, u16, u32, u32); EC void func_0202b624(u16, u16, u32, u32); EC void func_0202b31c(u16, u16, u32, u32); -EC void func_0202f040(Menu * param_1, s32 param_2, s32 param_3, s32 param_4) +void Menu::_0202f040(s32 param_2, s32 param_3, s32 param_4) { s32 sVar1; s32 sVar2; @@ -1137,17 +1127,17 @@ EC void func_0202f040(Menu * param_1, s32 param_2, s32 param_3, s32 param_4) break; } - pMVar8 = param_1->unk_0c; - bVar3 = pMVar8[param_1->unk_39].unk_04; - iVar6 = pMVar8[param_1->unk_39].unk_00->vfunc_cc(); + pMVar8 = this->unk_0c; + bVar3 = pMVar8[this->unk_39].unk_04; + iVar6 = pMVar8[this->unk_39].unk_00->vfunc_cc(); - pMVar9 = param_1->unk_0c; - bVar4 = pMVar8[param_1->unk_39].unk_05; - iVar11 = pMVar9[param_1->unk_38].unk_04 * 8; - iVar7 = pMVar9[param_1->unk_38].unk_00->vfunc_cc(); - iVar7 = iVar7 * 4 + pMVar9[param_1->unk_38].unk_05 * 8; + pMVar9 = this->unk_0c; + bVar4 = pMVar8[this->unk_39].unk_05; + iVar11 = pMVar9[this->unk_38].unk_04 * 8; + iVar7 = pMVar9[this->unk_38].unk_00->vfunc_cc(); + iVar7 = iVar7 * 4 + pMVar9[this->unk_38].unk_05 * 8; - if (param_1->unk_3f == 0) + if (this->unk_3f == 0) { iVar11 = iVar11 + ((bVar3 * 8 + bVar5 * -8) >> 1); iVar7 = iVar7 + (((iVar6 * 4 + bVar4 * 8) - iVar7) >> 1); @@ -1156,34 +1146,34 @@ EC void func_0202f040(Menu * param_1, s32 param_2, s32 param_3, s32 param_4) iVar11 = param_2 - 0x10 + iVar11; iVar10 = iVar10 + iVar7; - a = param_1->vfunc_10c(); + a = this->vfunc_10c(); switch (param_4) { case 0: - r3 = a ? param_1->unk_42 + 1 : param_1->unk_42; + r3 = a ? this->unk_42 + 1 : this->unk_42; func_0202b31c( iVar11, iVar10, - (param_1->unk_28 << 0xc) | (param_1->unk_41 << 0x1e) >> 0x14 | - (param_1->unk_24 >> gpActiveScreenSt->dispIo->dispcnt.bit_13_14) & 0x3ffU, + (this->unk_28 << 0xc) | (this->unk_41 << 0x1e) >> 0x14 | + (this->unk_24 >> gpActiveScreenSt->dispIo->dispcnt.bit_13_14) & 0x3ffU, r3); break; case 1: - r3 = a ? param_1->unk_42 + 1 : param_1->unk_42; + r3 = a ? this->unk_42 + 1 : this->unk_42; func_0202b538( iVar11, iVar10, - (param_1->unk_28 << 0xc) | (param_1->unk_41 << 0x1e) >> 0x14 | - (param_1->unk_24 >> gpActiveScreenSt->dispIo->dispcnt.bit_13_14) & 0x3ffU, + (this->unk_28 << 0xc) | (this->unk_41 << 0x1e) >> 0x14 | + (this->unk_24 >> gpActiveScreenSt->dispIo->dispcnt.bit_13_14) & 0x3ffU, r3); break; case 2: - r3 = a ? param_1->unk_42 + 1 : param_1->unk_42; + r3 = a ? this->unk_42 + 1 : this->unk_42; func_0202b624( iVar11, iVar10, - (param_1->unk_28 << 0xc) | (param_1->unk_41 << 0x1e) >> 0x14 | - (param_1->unk_24 >> gpActiveScreenSt->dispIo->dispcnt.bit_13_14) & 0x3ffU, + (this->unk_28 << 0xc) | (this->unk_41 << 0x1e) >> 0x14 | + (this->unk_24 >> gpActiveScreenSt->dispIo->dispcnt.bit_13_14) & 0x3ffU, r3); break; } @@ -1403,57 +1393,55 @@ void Menu::vfunc_120(void) EC void func_0202fc30(Menu * param_1, s32 param_2, s32 param_3); -// func_0202f674 -EC void func_0202f674(Menu * param_1) +void Menu::_0202f674(void) { - param_1->unk_0c[param_1->unk_38].unk_00->vfunc_b0(param_1, ¶m_1->unk_0c[param_1->unk_38]); - param_1->unk_0c[param_1->unk_38].unk_00->vfunc_78(param_1, ¶m_1->unk_0c[param_1->unk_38]); + this->unk_0c[this->unk_38].unk_00->vfunc_b0(this, &this->unk_0c[this->unk_38]); + this->unk_0c[this->unk_38].unk_00->vfunc_78(this, &this->unk_0c[this->unk_38]); return; } -// func_0202f6d0 -EC void func_0202f6d0(Menu * param_1) +void Menu::_0202f6d0(void) { - if (param_1->unk_45 != 0) + if (this->unk_45 != 0) { - func_0202fc30(param_1, 0, 1); + func_0202fc30(this, 0, 1); } - param_1->vfunc_64(); + this->vfunc_64(); - param_1->unk_0c[param_1->unk_38].unk_00->vfunc_9c(param_1, ¶m_1->unk_0c[param_1->unk_38]); + this->unk_0c[this->unk_38].unk_00->vfunc_9c(this, &this->unk_0c[this->unk_38]); return; } -EC void func_0202f72c(Menu * param_1) +void Menu::_0202f72c(void) { MenuItemState * pMVar1; s32 iVar2; - if (param_1->unk_45 != 0) + if (this->unk_45 != 0) { - func_0202fc30(param_1, 0, 1); + func_0202fc30(this, 0, 1); } - param_1->vfunc_110(); - param_1->vfunc_118(); - param_1->vfunc_114(); + this->vfunc_110(); + this->vfunc_118(); + this->vfunc_114(); - for (pMVar1 = param_1->unk_0c, iVar2 = 0; iVar2 < param_1->unk_3a; iVar2++, pMVar1++) + for (pMVar1 = this->unk_0c, iVar2 = 0; iVar2 < this->unk_3a; iVar2++, pMVar1++) { - pMVar1->unk_00->vfunc_a8(param_1, pMVar1); + pMVar1->unk_00->vfunc_a8(this, pMVar1); } - param_1->unk_39 = param_1->unk_38; - param_1->unk_3f = 0; + this->unk_39 = this->unk_38; + this->unk_3f = 0; return; } -EC void func_0202f7d0(Menu * param_1) +void Menu::_0202f7d0(void) { - param_1->unk_0c[param_1->unk_38].unk_00->vfunc_84(param_1, ¶m_1->unk_0c[param_1->unk_38]); + this->unk_0c[this->unk_38].unk_00->vfunc_84(this, &this->unk_0c[this->unk_38]); return; } @@ -1475,11 +1463,11 @@ void Menu::vfunc_124(void) return; } -EC s32 func_0202f860(Menu * param_1) +s32 Menu::_0202f860(void) { MenuItem * piVar1; - MenuItem ** piVar3 = param_1->unk_08; + MenuItem ** piVar3 = this->unk_08; s32 iVar4 = 0; for (piVar1 = *piVar3; piVar1 != NULL; piVar1 = *++piVar3) @@ -1492,11 +1480,11 @@ EC s32 func_0202f860(Menu * param_1) void Menu::vfunc_12c(void) { - this->unk_0c = static_cast(gHeap.Alloc(func_0202f860(this) * sizeof(MenuItemState))); + this->unk_0c = static_cast(gHeap.Alloc(this->_0202f860() * sizeof(MenuItemState))); return; } -EC void func_0202f8c4(Menu * param_1) +void Menu::_0202f8c4(void) { MenuItem * piVar1; MenuItem ** piVar4; @@ -1506,17 +1494,17 @@ EC void func_0202f8c4(Menu * param_1) s32 iVar2; s32 uVar11; - piVar4 = param_1->unk_08; + piVar4 = this->unk_08; - if (param_1->unk_0c == NULL) + if (this->unk_0c == NULL) { - param_1->vfunc_12c(); + this->vfunc_12c(); } iVar6 = 0; iVar5 = 0; - param_1->unk_48 = param_1->unk_49; + this->unk_48 = this->unk_49; for (piVar1 = *piVar4; piVar1 != NULL; piVar1 = *++piVar4) { @@ -1526,20 +1514,20 @@ EC void func_0202f8c4(Menu * param_1) { uVar11 = (*piVar4)->vfunc_18(iVar5); - if (!(iVar6 == 0 && param_1->unk_46 == 0 && (uVar11 & 7) == 3) && (uVar11 & 7) != 2) + if (!(iVar6 == 0 && this->unk_46 == 0 && (uVar11 & 7) == 3) && (uVar11 & 7) != 2) { - param_1->unk_0c[i].unk_00 = *piVar4; + this->unk_0c[i].unk_00 = *piVar4; - param_1->unk_0c[i].unk_09 = uVar11; - param_1->unk_0c[i].unk_08 = iVar5; + this->unk_0c[i].unk_09 = uVar11; + this->unk_0c[i].unk_08 = iVar5; - if (param_1->unk_38 == iVar5 && uVar11 == 3) + if (this->unk_38 == iVar5 && uVar11 == 3) { - param_1->unk_38++; + this->unk_38++; } else if ((uVar11 & 8) != 0) { - param_1->unk_38 = iVar6; + this->unk_38 = iVar6; } iVar6++; @@ -1549,21 +1537,21 @@ EC void func_0202f8c4(Menu * param_1) } } - if (param_1->unk_38 >= iVar6) + if (this->unk_38 >= iVar6) { - param_1->unk_38 = iVar6 - 1; + this->unk_38 = iVar6 - 1; } - param_1->unk_3a = iVar6; + this->unk_3a = iVar6; - if ((param_1->unk_48 == 0) || (param_1->unk_48 >= param_1->unk_3a)) + if ((this->unk_48 == 0) || (this->unk_48 >= this->unk_3a)) { - param_1->unk_48 = param_1->unk_3a; + this->unk_48 = this->unk_3a; } - param_1->vfunc_1c(); + this->vfunc_1c(); - param_1->unk_39 = param_1->unk_38; + this->unk_39 = this->unk_38; return; } @@ -1615,7 +1603,7 @@ EC void StartMenu(Menu * param_1, MenuItem ** param_2, s32 param_3) param_1->unk_49 = param_1->unk_48; - func_0202f8c4(param_1); + param_1->_0202f8c4(); param_1->vfunc_04(); @@ -1648,7 +1636,7 @@ EC void StartChildMenu(Menu * param_1, MenuItem ** param_2, ProcPtr param_3, u32 param_1->unk_49 = param_1->unk_48; - func_0202f8c4(param_1); + param_1->_0202f8c4(); param_1->vfunc_04(); @@ -1679,7 +1667,7 @@ EC void func_0202fc30(Menu * param_1, s32 param_2, s32 param_3) param_1->unk_36 = param_1->unk_37 = -1; } - func_0202f8c4(param_1); + param_1->_0202f8c4(); param_1->vfunc_e8(); param_1->vfunc_d8();