summaryrefslogtreecommitdiff
path: root/src/debug_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/debug_menu.c')
-rw-r--r--src/debug_menu.c135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/debug_menu.c b/src/debug_menu.c
new file mode 100644
index 0000000..19561c2
--- /dev/null
+++ b/src/debug_menu.c
@@ -0,0 +1,135 @@
+#include "global.h"
+#include "debug_menu.h"
+#include "main_menu.h"
+
+struct unkData
+{
+ u8 unk0[24];
+};
+
+
+struct DebugMenu
+{
+ // size: 0x1A4
+ u8 fill0[0x140];
+ /* 0x140 */ struct unkData unk140[4];
+};
+extern struct DebugMenu *gUnknown_203B3EC;
+extern struct unkData gUnknown_80E7D40;
+
+struct MenuItem
+{
+ const char *text;
+ u32 menuAction; // action??
+};
+
+
+
+extern struct MenuItem gDebugMenuItems[8];
+extern u32 gUnknown_80E7D58[6];
+
+extern void *MemoryAlloc(u32, u32);
+extern void MemoryFree(void *);
+extern void MemoryFill8(u8 *, u8, u32);
+extern void sub_800641C(void *, u32, u32);
+
+extern void ResetUnusedInputStruct(void);
+extern u8 sub_8012FD8(struct DebugMenu *);
+extern void sub_8013114(struct DebugMenu *, s32 *);
+extern void sub_80976F8(u8);
+extern void sub_803A3BC(void);
+extern void sub_803A3A0(void);
+
+extern void SetMenuItems(void *menu, void *, u32, u32 *, struct MenuItem *entries, u32, u32, u32);
+extern void sub_8035CF4(struct DebugMenu *, u32, u32);
+extern void sub_8035CC0(struct unkData *, u32);
+
+void CreateDebugMenu(void)
+{
+ int iVar2;
+
+ if (gUnknown_203B3EC == NULL) {
+ gUnknown_203B3EC = MemoryAlloc(0x1a4, 8);
+ MemoryFill8((u8 *)gUnknown_203B3EC, 0, 0x1a4);
+ }
+ for(iVar2 = 0; iVar2 < 4; iVar2++){
+ gUnknown_203B3EC->unk140[iVar2] = gUnknown_80E7D40;
+ }
+ ResetUnusedInputStruct();
+ sub_800641C(&gUnknown_203B3EC->unk140, 1, 1);
+ SetDebugMenuItems();
+}
+
+void DeleteDebugMenu(void)
+{
+ ResetUnusedInputStruct();
+ sub_800641C(NULL, 1, 1);
+ if(gUnknown_203B3EC != NULL)
+ {
+ MemoryFree(gUnknown_203B3EC);
+ gUnknown_203B3EC = NULL;
+ }
+}
+
+u32 UpdateDebugMenu(void)
+{
+ u32 nextMenu;
+ s32 counter;
+ s32 debugMenuAction;
+
+ nextMenu = MENU_NO_SCREEN_CHANGE;
+ debugMenuAction = 11;
+
+ if (sub_8012FD8(gUnknown_203B3EC) == 0) {
+ sub_8013114(gUnknown_203B3EC, &debugMenuAction);
+ }
+
+ switch(debugMenuAction) {
+ case MENU_DEBUG_MENU_DUNGEONS:
+ nextMenu = MENU_DEBUG_DUNGEON;
+ break;
+ case MENU_DEBUG_MENU_FIELD:
+ nextMenu = MENU_DEBUG_FIELD;
+ break;
+ case MENU_DEBUG_MENU_FIELD_MAP:
+ nextMenu = MENU_DEBUG_FIELD_MAP;
+ break;
+ case MENU_DEBUG_MENU_FIELD_SCRIPT:
+ nextMenu = MENU_DEBUG_FIELD_SCRIPT;
+ break;
+ case MENU_DEBUG_MENU_DEBUG_MENU:
+ nextMenu = MENU_DEBUG_DEBUG_MENU;
+ break;
+ case MENU_DEBUG_MENU_UNKNOWN_1: // No option that correponds to this one
+ nextMenu = MENU_DEBUG_UNKNOWN_1;
+ break;
+ case MENU_DEBUG_MENU_STORAGE:
+ sub_803A3BC();
+ nextMenu = MENU_MAIN_SCREEN;
+ break;
+ case MENU_DEBUG_MENU_H_OPEN:
+ for(counter = 0; counter < 0x20; counter++){
+ sub_80976F8(counter);
+ }
+ nextMenu = MENU_MAIN_SCREEN;
+ break;
+ case 10:
+ sub_803A3A0();
+ nextMenu = MENU_MAIN_SCREEN;
+ break;
+ case 11:
+ nextMenu = MENU_NO_SCREEN_CHANGE;
+ }
+ return nextMenu;
+}
+
+void SetDebugMenuItems(void)
+{
+ SetMenuItems(gUnknown_203B3EC, gUnknown_203B3EC->unk140, 0, gUnknown_80E7D58, gDebugMenuItems, 1, 0xd, 0);
+ sub_8035CF4(gUnknown_203B3EC,0,1);
+}
+
+void sub_803A3A0(void)
+{
+ sub_8035CC0(gUnknown_203B3EC->unk140, 0);
+}