diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2021-05-15 16:59:55 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-15 18:59:55 -0500 |
commit | f402e46cd3c8b7236673d6edbae77903a7cc0618 (patch) | |
tree | 37a19f3ab35a73c29d4d6da565741beaf7bb547f /src/main_menu.c | |
parent | f65dee5a143bd543c74c010d7252eb76893ee243 (diff) |
Sese's April/May Dump (#37)
* splitting lots of pokemon square and labeling lots of other things
* actually commit this stuff
* more moving data and things
* more screen work
* split out some pokemon dungeon data
* lots of data work
* push more data work
* split kecleon, decomp another kanghaskhan func, and try to doc UpdateBGControl more
* lots of item work
* label more item things
* subtype -> category and doc types/category
Diffstat (limited to 'src/main_menu.c')
-rw-r--r-- | src/main_menu.c | 257 |
1 files changed, 242 insertions, 15 deletions
diff --git a/src/main_menu.c b/src/main_menu.c index e590334..62dc4d9 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -2,6 +2,8 @@ #include "debug_menu.h" #include "main_menu.h" #include "adventure_log.h" +#include "input.h" +#include "menu.h" // NOTE: 0x13 and 0x14 // Communication Screen? @@ -35,9 +37,9 @@ extern void CreateWonderMailMenu(void); extern void CreateLoadScreen(u32); extern s32 sub_8035DB4(u32); extern void CreateRescuePasswordMenu(u32); -extern void sub_803850C(u32); +extern void CreateSaveMenu(u32); extern s32 UpdateMainMenu(void); -extern s32 sub_803941C(void); +extern s32 UpdateLoadScreenMenu(void); extern s32 UpdateTradeItemsMenu(void); extern s32 UpdateFriendRescueMenu(void); extern s32 UpdateWonderMailMenu(void); @@ -45,7 +47,7 @@ extern s32 UpdateDualSlotMenu(void); extern s32 UpdateWirelessCommsMenu(void); extern s32 UpdateRescuePasswordMenu(void); extern s32 sub_80383D4(void); -extern s32 sub_8038630(void); +extern s32 UpdateSaveMenu(void); extern void CleanMainMenu(void); extern void CleanLoadScreen(void); @@ -57,7 +59,49 @@ extern void CleanDualSlotMenu(void); extern void CleanWirelessCommsMenu(void); extern void CleanRescuePasswordMenu(void); extern void sub_80383A8(void); -extern void sub_8038604(void); +extern void CleanSaveMenu(void); + +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 bool8 SetMainMenuText(); +extern void SetMainMenuItems(); + +struct unkStruct_Menu +{ + // size 0x50; + u8 fil0[0x4C]; + u8 unk4C; + u8 fill4D[0x50 - 0x4D]; +}; + +extern void sub_8012D60(struct unkStruct_Menu *, const struct MenuItem *, u32, u32, u32, u32); +extern void sub_8012E04(struct unkStruct_Menu *, const struct MenuItem *, u32, u32, u32, u32); + void InitMainMenu(void) { @@ -65,7 +109,7 @@ void InitMainMenu(void) gMainMenu = MemoryAlloc(sizeof(struct MainMenu),8); MemoryFill8((u8 *)gMainMenu, 0, sizeof(struct MainMenu)); } - gMainMenu->currMenu = 0xffdc; + gMainMenu->currMenu = MENU_NO_SCREEN_CHANGE; gMainMenu->nextMenu = MENU_MAIN_SCREEN; gMainMenu->lastMenu = MENU_MAIN_SCREEN; gMainMenu->unk38 = -1; @@ -97,7 +141,7 @@ void SetUpMenu(void) case MENU_AWAITING_RESCUE: case MENU_CONTINUE: case MENU_DELETE_SAVE_PROMPT: - case 9: + case MENU_DELETE_SAVE_CONFIRM: CreateLoadScreen(gMainMenu->nextMenu); break; case MENU_TRADE_ITEMS: @@ -131,8 +175,8 @@ void SetUpMenu(void) case 0x2b: case 0x2c: case 0x2d: - case 0x2e: - sub_803850C(gMainMenu->nextMenu); + case MENU_DELETE_SAVE: + CreateSaveMenu(gMainMenu->nextMenu); break; case MENU_DEBUG: CreateDebugMenu(); @@ -155,8 +199,8 @@ s32 UpdateMenu(void) case MENU_AWAITING_RESCUE: case MENU_CONTINUE: case MENU_DELETE_SAVE_PROMPT: - case 9: - nextMenu = sub_803941C(); + case MENU_DELETE_SAVE_CONFIRM: + nextMenu = UpdateLoadScreenMenu(); break; case MENU_TRADE_ITEMS: iVar1 = UpdateTradeItemsMenu(); @@ -212,8 +256,8 @@ s32 UpdateMenu(void) case 0x2b: case 0x2c: case 0x2d: - case 0x2e: - nextMenu = sub_8038630(); + case MENU_DELETE_SAVE: + nextMenu = UpdateSaveMenu(); break; case MENU_DEBUG: nextMenu = UpdateDebugMenu(); @@ -235,7 +279,7 @@ void CleanUpMenu(void) case MENU_AWAITING_RESCUE: case MENU_CONTINUE: case MENU_DELETE_SAVE_PROMPT: - case 9: + case MENU_DELETE_SAVE_CONFIRM: CleanLoadScreen(); break; case MENU_TRADE_ITEMS: @@ -276,8 +320,8 @@ void CleanUpMenu(void) case 0x2b: case 0x2c: case 0x2d: - case 0x2e: - sub_8038604(); + case MENU_DELETE_SAVE: + CleanSaveMenu(); break; case MENU_DEBUG: DeleteDebugMenu(); @@ -305,3 +349,186 @@ void sub_8035C1C(void) gMainMenu->sub.unk2C = 1; gMainMenu->sub.unk2D = 0; } + +void +SetMenuItems(struct unkStruct_Menu *param_1, struct unkData *unkData, int param_3, const struct unkData *param_4, const struct MenuItem *param_5, char param_6 ,u32 param_7, u32 unused_8) +{ + unkData[param_3] = *param_4; + ResetUnusedInputStruct(); + sub_800641C(unkData,1,1); + if (param_6 != '\0') { + sub_8012D60(¶m_1[param_3],param_5,0,0,param_7,param_3); + } + else { + sub_8012E04(¶m_1[param_3],param_5,0,0,0,param_3); + } + param_1[param_3].unk4C = 1; +} + +void sub_8035CC0(struct unkData *dataArray, u32 index) +{ + sub_8006518(dataArray); + dataArray[index] = gUnknown_80E59A8; + ResetUnusedInputStruct(); + sub_800641C(dataArray, 1, 1); +} + +NAKED +void sub_8035CF4(void * Menu, u32 index, u8 r2) +{ + asm_unified("\tpush {lr}\n" + "\tadds r3, r0, 0\n" + "\tlsls r0, r1, 2\n" + "\tadds r0, r1\n" + "\tlsls r0, 4\n" + "\tadds r0, r3\n" + "\tadds r1, r0, 0\n" + "\tadds r1, 0x4C\n" + "\tstrb r2, [r1]\n" + "\tadds r2, r0, 0\n" + "\tadds r2, 0x4D\n" + "\tmovs r1, 0x1\n" + "\tstrb r1, [r2]\n" + "\tsubs r1, 0x2\n" + "\tstr r1, [r0, 0x48]\n" + "\tbl sub_8012EBC\n" + "\tpop {r0}\n" + "\tbx r0"); +} + +void sub_8035D1C(void) +{ + gMainMenu->unk38 = -1; +} + +void sub_8035D30(s32 r0) +{ + gMainMenu->unk38 = r0; +} + +s16 sub_8035D3C(void) +{ + return gMainMenu->unk38; +} + +struct MainMenu *GetMainMenu(void) +{ + return gMainMenu; +} + +void sub_8035D58(void) +{ + gMainMenu->unk3C = -1; +} + +void sub_8035D68(s32 r0) +{ + gMainMenu->unk3C = r0; +} + +s32 sub_8035D74(void) +{ + return gMainMenu->unk3C; +} + + +// Unused +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; +} + +s32 sub_8035DB4(u32 currMenu) +{ + s32 returnVar = 8; + switch(currMenu) + { + 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(sizeof(struct unkStruct_203B34C), 8); + MemoryFill8((u8 *)gUnknown_203B34C, 0, sizeof(struct unkStruct_203B34C)); + } + + 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()) + { + 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; + } +} + |