diff options
Diffstat (limited to 'src/main_menu_mid.c')
-rw-r--r-- | src/main_menu_mid.c | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/src/main_menu_mid.c b/src/main_menu_mid.c index 4d36edf..e6e0868 100644 --- a/src/main_menu_mid.c +++ b/src/main_menu_mid.c @@ -7,11 +7,40 @@ struct unkData u8 unk0[24]; }; +struct unkSubStruct +{ + u32 unk0; + u32 unk4; +}; + +struct unkStruct_203B34C +{ + // size: 0x1A8 + u32 unk0; + u32 unk4; + struct unkSubStruct *unk8; // Array of menu choices?? + u8 fillC[0x30 - 0xC]; + s16 unk30; + u8 fill32[0x144 - 0x32]; + struct unkData unk144[4]; + /* 0x1A4 */ u32 currMenuChoice; +}; + +extern struct unkStruct_203B34C *gUnknown_203B34C; + + extern struct MainMenu *gMainMenu; extern struct unkData gUnknown_80E59A8; +extern struct unkData gUnknown_80E59C8; extern void sub_8006518(struct unkData *); extern void sub_800641C(struct unkData *, u32, u32); +extern void *MemoryAlloc(u32, u32); +extern void MemoryFill8(u8*, u8, s32); +extern void MemoryFree(void *); + +extern u8 SetMainMenuText(); +extern void SetMainMenuItems(); void sub_8035CC0(struct unkData *dataArray, u32 index) { @@ -78,3 +107,102 @@ s32 sub_8035D74(void) { return gMainMenu->unk3C; } + +NAKED +void sub_8035D80(void *r0) +{ + asm_unified( + "\tldr r1, _08035D90\n" + "\tldr r2, [r1]\n" + "\tldr r1, [r0, 0x4]\n" + "\tldr r0, [r0]\n" + "\tstr r0, [r2, 0x30]\n" + "\tstr r1, [r2, 0x34]\n" + "\tbx lr\n" + "\t.align 2, 0\n" +"_08035D90: .4byte gMainMenu"); +} + +u8 *sub_8035D94(void) +{ + return &gMainMenu->unk30; +} + + +void sub_8035DA0(void) +{ + gMainMenu->unk30 = 0; + gMainMenu->unk34 = 0; +} + +u32 sub_8035DB4(u32 r0) +{ + u32 returnVar = 8; + switch(r0) + { + case MENU_COMMUNICATION_1: + returnVar = 0; + break; + case MENU_COMMUNICATION_2: + returnVar = 1; + break; + case 0x15: + returnVar = 2; + break; + case 0x16: + returnVar = 3; + break; + case 0x17: + returnVar = 4; + break; + case 0x18: + returnVar = 5; + break; + case 0x19: + returnVar = 6; + break; + case 0x1a: + returnVar = 7; + } + return returnVar; +} + +void DrawMainMenu(void) +{ + s32 iVar3; + + if(gUnknown_203B34C == NULL) + { + gUnknown_203B34C = MemoryAlloc(0x1A8, 8); + MemoryFill8((u8 *)gUnknown_203B34C, 0, 0x1A8); + } + + for(iVar3 = 0; iVar3 < 4; iVar3++) + { + gUnknown_203B34C->unk144[iVar3] = gUnknown_80E59C8; + } + + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B34C->unk144, 1, 1); + SetMainMenuItems(); + gUnknown_203B34C->currMenuChoice = -1; + + if(SetMainMenuText() != 0) + { + sub_8035CF4(&gUnknown_203B34C->unk4,2,0); + } + + sub_8035CF4(&gUnknown_203B34C->unk4,0,1); + gUnknown_203B34C->unk0 = 1; +} + +void CleanMainMenu(void) +{ + ResetUnusedInputStruct(); + sub_800641C(NULL, 1, 1); + if(gUnknown_203B34C != NULL) + { + MemoryFree(gUnknown_203B34C); + gUnknown_203B34C = NULL; + } +} |