summaryrefslogtreecommitdiff
path: root/src/main_menu.c
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2021-05-15 16:59:55 -0700
committerGitHub <noreply@github.com>2021-05-15 18:59:55 -0500
commitf402e46cd3c8b7236673d6edbae77903a7cc0618 (patch)
tree37a19f3ab35a73c29d4d6da565741beaf7bb547f /src/main_menu.c
parentf65dee5a143bd543c74c010d7252eb76893ee243 (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.c257
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(&param_1[param_3],param_5,0,0,param_7,param_3);
+ }
+ else {
+ sub_8012E04(&param_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;
+ }
+}
+