diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2021-04-19 21:55:40 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-19 23:55:40 -0500 |
commit | f65dee5a143bd543c74c010d7252eb76893ee243 (patch) | |
tree | d343e826c63f8b501d37873c3c7bc1f010819deb /src/main_menu_mid.c | |
parent | d316d1e359c7672277a9cf644acd4e40170f5968 (diff) |
Wonder mail and some boss dialogues (#36)
* more wonder mail and main menu work
* Lots of things.. doc'ing, decomping, and other things
* continue decomping boss scenes
* up to Suicune
* up to Mewtwo dialogue
* up to Raquaza
* fix spelling error on Rayquaza and decomp a few more
* up to groudon
* divide > shift
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; + } +} |