diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2021-04-03 20:44:48 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-03 20:44:48 -0500 |
commit | 22fec43f1812cb863ad699b357bd593222ae140c (patch) | |
tree | 4efa162869946a9bfdbde1be498857fac3db3b39 /src/unk_menu_203B360.c | |
parent | a2d206665c6fffbd962375f262b7fbb05c7b7478 (diff) |
More menu work (#33)
* split adventure log menu out and decompile
* add most adventure log matchings w/ 2 nonmatchings and move some relevant data
* more work on other menus
* fully decomp debug stuff around 203B3F0
* more debug menu work
* fix CreatePartnerSelectionMenu nonmatch
* move more data and clean some data up
Diffstat (limited to 'src/unk_menu_203B360.c')
-rw-r--r-- | src/unk_menu_203B360.c | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/unk_menu_203B360.c b/src/unk_menu_203B360.c new file mode 100644 index 0000000..6d778c2 --- /dev/null +++ b/src/unk_menu_203B360.c @@ -0,0 +1,104 @@ +#include "global.h" +#include "input.h" +#include "main_menu.h" + +struct unkData +{ + u8 unk0[14]; + u16 unkD; + u16 unk10; + u16 unk12; + u8 *unk14; +}; + +struct unkStruct_203B360 +{ + // size: 0x1b4 + u32 currMenu; + u32 unk4; // state + u32 unk8; + u8 fill8[0x148 - 0xC]; + struct unkData unk148[4]; + u32 unk1A8; + u32 unk1AC; + u32 unk1B0; // sprite count? +}; + +extern struct unkStruct_203B360 *gUnknown_203B360; +extern struct unkData gUnknown_80E6E7C; +extern u32 gUnknown_80E6E94; +extern u32 gUnknown_80E6EAC; + +extern void *MemoryAlloc(u32, u32); +extern void MemoryFill8(u8 *, u8, u32); +extern void MemoryFree(void *); +extern void sub_8038440(); +extern void sub_8035CF4(u32 *, u32, u32); +extern void sub_800641C(void *, u32, u32); +extern void SetMenuItems(void *, void *, u32, u32 *, u32 *, u32, u32, u32); +extern u8 sub_80130A8(u32 *); +extern void sub_8013114(u32 *, u32 *); +extern void sub_80384D0(); + +void sub_80382E4(s32 param_1) +{ + s32 iVar4; + + if (gUnknown_203B360 == NULL) { + gUnknown_203B360 = MemoryAlloc(sizeof(struct unkStruct_203B360), 8); + MemoryFill8((u8 *)gUnknown_203B360, 0, sizeof(struct unkStruct_203B360)); + } + for(iVar4 = 0; iVar4 < 4; iVar4++){ + gUnknown_203B360->unk148[iVar4] = gUnknown_80E6E7C; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B360->unk148,1,1); + if (param_1 == 0x25) { + SetMenuItems(&gUnknown_203B360->unk8,gUnknown_203B360->unk148,0,&gUnknown_80E6E94,&gUnknown_80E6EAC, + 0,4,0); + } + sub_8035CF4(&gUnknown_203B360->unk8,0,1); + gUnknown_203B360->currMenu = param_1; + gUnknown_203B360->unk4 = 0; + sub_8038440(); +} + +void sub_80383A8(void) +{ + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + if (gUnknown_203B360 != 0) { + MemoryFree(gUnknown_203B360); + gUnknown_203B360 = 0; + } +} + +u32 sub_80383D4(void) +{ + u32 nextMenu; + u32 menuAction; + + menuAction = 2; + nextMenu = MENU_NO_SCREEN_CHANGE; + + if (gUnknown_203B360->unk4 == 0){ + if (sub_80130A8(&gUnknown_203B360->unk8) == '\0') { + sub_8013114(&gUnknown_203B360->unk8, &menuAction); + } + switch(menuAction) + { + case 3: + case 1: + gUnknown_203B360->unk4 = 0; + nextMenu = MENU_MAIN_SCREEN; + break; + case 2: + gUnknown_203B360->unk4 = 0; + default: + break; + } + sub_80384D0(); + } + + return nextMenu; +} |