diff options
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; +} |