summaryrefslogtreecommitdiff
path: root/src/main_menu.c
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2021-01-31 19:07:31 -0600
committerGitHub <noreply@github.com>2021-01-31 19:07:31 -0600
commit74daf03fd70e7c71b92390c9133c9dd543bcb28d (patch)
tree8e73e4ed117b088264afe424beac03b3bb7e9c0b /src/main_menu.c
parent076ff9ce59bf7da841cfd17412196487657a7b44 (diff)
Main Menu and Scripts (#25)
* label more funcs, dump scripts/text, and decomp main menu * decomp vram func and dump more data * add forgotten file * get rid of goto in UpdateMenu
Diffstat (limited to 'src/main_menu.c')
-rw-r--r--src/main_menu.c296
1 files changed, 296 insertions, 0 deletions
diff --git a/src/main_menu.c b/src/main_menu.c
new file mode 100644
index 0000000..714ae61
--- /dev/null
+++ b/src/main_menu.c
@@ -0,0 +1,296 @@
+#include "global.h"
+
+struct MainMenu
+{
+ u32 unk0;
+ s32 unk4;
+ u32 unk8;
+ u8 padding[0x20];
+ u8 unk2C;
+ u8 unk2D;
+ u8 unk2E;
+ u8 padding2[0x30 - 0x2F];
+ u32 unk30;
+ u32 unk34;
+ u16 unk38;
+ u8 unk3A;
+ u8 unk3B;
+ s32 unk3C;
+};
+
+extern struct MainMenu *gUnknown_203B348;
+extern void* MemoryAlloc(u32 a, u32 b);
+extern void MemoryFill8(u8 *dest, u8 value, s32 size);
+void sub_8035DA0(void);
+extern void MemoryFree(void *);
+
+extern void sub_8094C14(void);
+extern void sub_8099690(u32);
+extern void sub_8035E10(void);
+extern void CreateDebugMenu(void);
+extern void sub_8036400(void);
+extern void sub_8036FDC(void);
+extern void sub_803A1E4(void);
+extern void sub_803225C(void);
+extern void sub_803A1D8(void);
+extern void sub_80398AC(void);
+extern void sub_80382A0(void);
+extern void sub_8039254(u32);
+extern void sub_8035DB4(u32);
+extern void sub_8038900(u32);
+extern void sub_803850C(u32);
+extern s32 sub_8035EEC(void);
+extern s32 sub_803941C(void);
+extern s32 sub_8036448(void);
+extern s32 sub_8032318(void);
+extern s32 sub_8039928(void);
+extern s32 sub_803A1DC(void);
+extern s32 sub_803A1E8(void);
+extern s32 sub_8038A90(void);
+extern s32 sub_80382C0(void);
+extern s32 sub_80383D4(void);
+extern s32 sub_8038630(void);
+extern s32 sub_803A2A4(void);
+
+extern void sub_8035EC0(void);
+extern void sub_80393F0(void);
+extern void sub_8036B04(void);
+extern void sub_80370D4(void);
+extern void sub_80327E4(void);
+extern void sub_80399E4(void);
+extern void nullsub_55(void);
+extern void sub_803A1EC(void);
+extern void sub_8038A5C(void);
+extern void sub_80382AC(void);
+extern void sub_80383A8(void);
+extern void sub_8038604(void);
+extern void DeleteDebugMenu(void);
+
+void InitMainMenu(void)
+{
+ if (gUnknown_203B348 == NULL) {
+ gUnknown_203B348 = MemoryAlloc(sizeof(struct MainMenu),8);
+ MemoryFill8((u8 *)gUnknown_203B348, 0, sizeof(struct MainMenu));
+ }
+ gUnknown_203B348->unk0 = 0xffdc;
+ gUnknown_203B348->unk4 = 1;
+ gUnknown_203B348->unk8 = 1;
+ gUnknown_203B348->unk38 = 0xffdc + 0x23;
+ gUnknown_203B348->unk3C = -1;
+ gUnknown_203B348->unk2E = 0;
+ gUnknown_203B348->unk2C = 1;
+ gUnknown_203B348->unk2D = 0;
+ sub_8035DA0();
+ gUnknown_203B348->unk3A = 0;
+}
+
+void sub_80357D0(void)
+{
+ if(gUnknown_203B348){
+ MemoryFree(gUnknown_203B348);
+ gUnknown_203B348 = NULL;
+ }
+}
+
+void SetUpMenu(void)
+{
+ if (gUnknown_203B348->unk0 != gUnknown_203B348->unk4) {
+ switch(gUnknown_203B348->unk4) {
+ case 1:
+ sub_8094C14();
+ sub_8099690(0);
+ sub_8035E10();
+ break;
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ sub_8039254(gUnknown_203B348->unk4);
+ break;
+ case 0xc:
+ sub_8036400();
+ break;
+ case 0x13:
+ case 0x14:
+ sub_8035DB4(gUnknown_203B348->unk4);
+ sub_8036FDC();
+ break;
+ case 0xb:
+ sub_803225C();
+ break;
+ case 0xd:
+ sub_80398AC();
+ break;
+ case 0xe:
+ sub_803A1D8();
+ break;
+ case 0xf:
+ sub_803A1E4();
+ break;
+ case 0x21:
+ case 0x22:
+ sub_8038900(gUnknown_203B348->unk4);
+ break;
+ case 0xA:
+ sub_80382A0();
+ break;
+ case 0x29:
+ case 0x2a:
+ case 0x2b:
+ case 0x2c:
+ case 0x2d:
+ case 0x2e:
+ sub_803850C(gUnknown_203B348->unk4);
+ break;
+ case 0x10:
+ CreateDebugMenu();
+ break;
+ }
+ gUnknown_203B348->unk0 = gUnknown_203B348->unk4;
+ }
+}
+
+s32 UpdateMenu(void)
+{
+ s32 iVar1;
+ s32 iVar2;
+
+ iVar2 = 0xffdc;
+ switch(gUnknown_203B348->unk4) {
+ case 1:
+ iVar2 = sub_8035EEC();
+ break;
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ iVar2 = sub_803941C();
+ break;
+ case 0xc:
+ iVar1 = sub_8036448();
+ iVar2 = 1;
+ if (iVar1 != 3) {
+ iVar2 = 0xffdc;
+ }
+ break;
+ case 0xb:
+ iVar1 = sub_8032318();
+ iVar2 = 1;
+ if (iVar1 != 3) {
+ iVar2 = 0xffdc;
+ }
+ break;
+ case 0xd:
+ iVar1 = sub_8039928();
+ iVar2 = 1;
+ if (iVar1 != 3) {
+ iVar2 = 0xffdc;
+ }
+ break;
+ case 0xe:
+ iVar1 = sub_803A1DC();
+ iVar2 = 1;
+ if (iVar1 != 3) {
+ iVar2 = 0xffdc;
+ }
+ break;
+ case 0xf:
+ iVar1 = sub_803A1E8();
+ iVar2 = 5;
+ if ((iVar1 != 3) && (iVar2 = 0xffdc, iVar1 == 2)) {
+ iVar2 = 1;
+ }
+ break;
+ case 0x21:
+ case 0x22:
+ iVar2 = sub_8038A90();
+ break;
+ case 10:
+ iVar2 = sub_80382C0();
+ break;
+ case 0x24:
+ case 0x25:
+ case 0x26:
+ case 0x27:
+ case 0x28:
+ iVar2 = sub_80383D4();
+ break;
+ case 0x29:
+ case 0x2a:
+ case 0x2b:
+ case 0x2c:
+ case 0x2d:
+ case 0x2e:
+ iVar2 = sub_8038630();
+ break;
+ case 0x10:
+ iVar2 = sub_803A2A4();
+ break;
+ }
+ if (iVar2 != 0xffdc) {
+ gUnknown_203B348->unk4 = iVar2;
+ }
+ return iVar2;
+}
+
+void CleanUpMenu(void)
+{
+ if (gUnknown_203B348->unk8 != gUnknown_203B348->unk4) {
+ switch(gUnknown_203B348->unk8) {
+ case 1:
+ sub_8035EC0();
+ break;
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ sub_80393F0();
+ break;
+ case 0xc:
+ sub_8036B04();
+ break;
+ case 0x13:
+ case 0x14:
+ sub_80370D4();
+ break;
+ case 0xb:
+ sub_80327E4();
+ break;
+ case 0xd:
+ sub_80399E4();
+ break;
+ case 0xe:
+ nullsub_55();
+ break;
+ case 0xf:
+ sub_803A1EC();
+ break;
+ case 0x21:
+ case 0x22:
+ sub_8038A5C();
+ break;
+ case 10:
+ sub_80382AC();
+ break;
+ case 0x24:
+ case 0x25:
+ case 0x26:
+ case 0x27:
+ case 0x28:
+ sub_80383A8();
+ break;
+ case 0x29:
+ case 0x2a:
+ case 0x2b:
+ case 0x2c:
+ case 0x2d:
+ case 0x2e:
+ sub_8038604();
+ break;
+ case 0x10:
+ DeleteDebugMenu();
+ break;
+ }
+ gUnknown_203B348->unk8 = gUnknown_203B348->unk4;
+ }
+}