diff --git a/asm/unk_menu_203B364.s b/asm/unk_menu_203B364.s index d0a2b6e2a..d5e091f0f 100644 --- a/asm/unk_menu_203B364.s +++ b/asm/unk_menu_203B364.s @@ -5,259 +5,6 @@ .text - thumb_func_start UpdateSaveMenu -UpdateSaveMenu: - push {r4-r6,lr} - sub sp, 0x18 - ldr r5, _080386A8 - movs r0, 0x3 - str r0, [sp, 0x14] - ldr r6, _080386AC - ldr r0, [r6] - ldr r4, [r0, 0x4] - cmp r4, 0x1 - bne _08038646 - b _08038798 -_08038646: - cmp r4, 0x1 - bcc _0803864C - b _08038824 -_0803864C: - adds r0, 0x8 - bl sub_8012FD8 - movs r5, 0 - str r5, [sp, 0x10] - bl sub_80140F8 - bl sub_8011C1C - adds r1, r0, 0 - add r0, sp, 0x10 - bl WriteSavetoPak - adds r4, r0, 0 - bl sub_8014114 - cmp r4, 0 - beq _080386B8 - cmp r4, 0x1 - beq _08038738 - ldr r0, [r6] - movs r4, 0xA4 - lsls r4, 1 - adds r0, r4 - movs r1, 0 - bl sub_8035CC0 - ldr r1, [r6] - ldr r0, [r1] - cmp r0, 0x2E - bne _08038750 - adds r0, r1, 0 - adds r0, 0x8 - adds r1, r4 - ldr r3, _080386B0 - ldr r2, _080386B4 - str r2, [sp] - str r5, [sp, 0x4] - movs r2, 0x6 - str r2, [sp, 0x8] - str r5, [sp, 0xC] - movs r2, 0 - bl SetMenuItems - b _0803876E - .align 2, 0 -_080386A8: .4byte 0x0000ffdc -_080386AC: .4byte gUnknown_203B364 -_080386B0: .4byte gUnknown_80E6F38 -_080386B4: .4byte gUnknown_80E7114 -_080386B8: - ldr r0, [r6] - movs r1, 0xA4 - lsls r1, 1 - adds r0, r1 - movs r1, 0 - bl sub_8035CC0 - ldr r1, [r6] - ldr r0, [r1] - cmp r0, 0x2E - bne _080386F8 - adds r0, r1, 0 - adds r0, 0x8 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r2 - ldr r3, _080386F0 - ldr r2, _080386F4 - str r2, [sp] - str r5, [sp, 0x4] - movs r2, 0x6 - str r2, [sp, 0x8] - str r5, [sp, 0xC] - movs r2, 0 - bl SetMenuItems - b _08038716 - .align 2, 0 -_080386F0: .4byte gUnknown_80E6F38 -_080386F4: .4byte gUnknown_80E70CC -_080386F8: - adds r0, r1, 0 - adds r0, 0x8 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r2 - ldr r3, _08038728 - ldr r2, _0803872C - str r2, [sp] - str r5, [sp, 0x4] - movs r2, 0x6 - str r2, [sp, 0x8] - str r5, [sp, 0xC] - movs r2, 0 - bl SetMenuItems -_08038716: - ldr r4, _08038730 - ldr r1, [r4] - ldr r0, [r1] - cmp r0, 0x2D - bne _08038734 - movs r0, 0x1 - str r0, [r1, 0x4] - movs r0, 0x13 - b _08038826 - .align 2, 0 -_08038728: .4byte gUnknown_80E6F38 -_0803872C: .4byte gUnknown_80E6FBC -_08038730: .4byte gUnknown_203B364 -_08038734: - adds r0, r1, 0 - b _08038772 -_08038738: - ldr r0, _0803874C - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_80141B4 - ldr r1, [r6] - movs r0, 0x5 - b _08038780 - .align 2, 0 -_0803874C: .4byte gUnknown_80E7178 -_08038750: - adds r0, r1, 0 - adds r0, 0x8 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r2 - ldr r3, _08038788 - ldr r2, _0803878C - str r2, [sp] - str r5, [sp, 0x4] - movs r2, 0x6 - str r2, [sp, 0x8] - str r5, [sp, 0xC] - movs r2, 0 - bl SetMenuItems -_0803876E: - ldr r4, _08038790 - ldr r0, [r4] -_08038772: - adds r0, 0x8 - movs r1, 0 - movs r2, 0x1 - bl sub_8035CF4 - ldr r1, [r4] - movs r0, 0x1 -_08038780: - str r0, [r1, 0x4] - ldr r5, _08038794 - b _08038824 - .align 2, 0 -_08038788: .4byte gUnknown_80E6F38 -_0803878C: .4byte gUnknown_80E701C -_08038790: .4byte gUnknown_203B364 -_08038794: .4byte 0x0000ffdc -_08038798: - adds r0, 0x8 - bl sub_80130A8 - lsls r0, 24 - cmp r0, 0 - bne _080387AE - ldr r0, [r6] - adds r0, 0x8 - add r1, sp, 0x14 - bl sub_8013114 -_080387AE: - ldr r0, [sp, 0x14] - cmp r0, 0x3 - beq _0803881C - cmp r0, 0x3 - bhi _080387BE - cmp r0, 0x2 - beq _080387C2 - b _08038820 -_080387BE: - cmp r0, 0x4 - bne _08038820 -_080387C2: - ldr r4, _080387D8 - ldr r1, [r4] - ldr r0, [r1] - cmp r0, 0x29 - beq _080387D0 - cmp r0, 0x2E - bne _080387DC -_080387D0: - movs r0, 0x1 - str r0, [r1, 0x4] - movs r5, 0x1 - b _08038820 - .align 2, 0 -_080387D8: .4byte gUnknown_203B364 -_080387DC: - cmp r0, 0x2D - bne _080387E8 - movs r0, 0x1 - str r0, [r1, 0x4] - movs r5, 0x13 - b _08038820 -_080387E8: - cmp r0, 0x2C - bne _080387F4 - movs r0, 0x1 - str r0, [r1, 0x4] - movs r5, 0x1F - b _08038820 -_080387F4: - bl GetMainMenu - adds r0, 0x3A - ldrb r0, [r0] - cmp r0, 0 - beq _0803880A - ldr r1, [r4] - movs r0, 0x1 - str r0, [r1, 0x4] - movs r5, 0x35 - b _08038820 -_0803880A: - ldr r0, [r4] - movs r1, 0x1 - str r1, [r0, 0x4] - ldr r0, [r0] - movs r5, 0xB - cmp r0, 0x2B - bne _08038820 - movs r5, 0xD - b _08038820 -_0803881C: - ldr r0, [r6] - str r4, [r0, 0x4] -_08038820: - bl sub_80388C4 -_08038824: - adds r0, r5, 0 -_08038826: - add sp, 0x18 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end UpdateSaveMenu - thumb_func_start sub_8038830 sub_8038830: push {r4,r5,lr} diff --git a/src/unk_menu_203B364.c b/src/unk_menu_203B364.c index c4dcd62fc..c64e83595 100644 --- a/src/unk_menu_203B364.c +++ b/src/unk_menu_203B364.c @@ -4,6 +4,7 @@ #include "main_menu.h" #include "memory.h" #include "text.h" +#include "save.h" struct unkStruct_203B360 { @@ -25,6 +26,11 @@ extern struct UnkTextStruct2 gUnknown_80E6F20; extern struct UnkTextStruct2 gUnknown_80E6F38; extern struct MenuItem gUnknown_80E7090[]; extern struct MenuItem gUnknown_80E6F50[]; +extern struct MenuItem gUnknown_80E70CC; +extern struct MenuItem gUnknown_80E6FBC; +extern struct MenuItem gUnknown_80E7114; +extern struct MenuItem gUnknown_80E701C; +extern u8 gUnknown_80E7178[]; extern void sub_8038440(); extern void sub_8035CF4(u32 *, u32, u32); @@ -33,17 +39,23 @@ extern u8 sub_80130A8(u32 *); extern void sub_8013114(u32 *, u32 *); extern void sub_80384D0(); extern void sub_8038830(); +extern void sub_80388C4(void); +extern u8 sub_8012FD8(u32 *); +extern void sub_8014114(); +extern void sub_80140F8(void); +extern void sub_8035CC0(struct UnkTextStruct2 *, u32); +extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); void CreateSaveMenu(s32 currMenu) { - s32 iVar4; + s32 index; if (gUnknown_203B364 == NULL) { gUnknown_203B364 = MemoryAlloc(sizeof(struct unkStruct_203B360),8); MemoryFill8((u8 *)gUnknown_203B364,0,sizeof(struct unkStruct_203B360)); } - for(iVar4 = 0; iVar4 < 4; iVar4++){ - gUnknown_203B364->unk148[iVar4] = gUnknown_80E6F20; + for(index = 0; index < 4; index++){ + gUnknown_203B364->unk148[index] = gUnknown_80E6F20; } ResetUnusedInputStruct(); sub_800641C(gUnknown_203B364->unk148,1,1); @@ -74,3 +86,105 @@ void CleanSaveMenu(void) } } +s32 UpdateSaveMenu(void) +{ + int saveStatus; + struct MainMenu *mainMenu; + u32 menu; + u32 uStack_18; + u32 action; + + menu = MENU_NO_SCREEN_CHANGE; + action = 3; + + switch(gUnknown_203B364->unk4) + { + default: + case 2: + menu = MENU_NO_SCREEN_CHANGE; + break; + case 0: + sub_8012FD8(&gUnknown_203B364->unk8); + uStack_18 = 0; + sub_80140F8(); + saveStatus = WriteSavetoPak(&uStack_18,sub_8011C1C()); + sub_8014114(); + switch(saveStatus) + { + case SAVE_COMPLETED: + sub_8035CC0(gUnknown_203B364->unk148,0); + if (gUnknown_203B364->currMenu == MENU_DELETE_SAVE) { + SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38, + &gUnknown_80E70CC,0,6,0); + } + else { + SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38, + &gUnknown_80E6FBC,0,6,0); + } + if (gUnknown_203B364->currMenu == 0x2d) { + gUnknown_203B364->unk4 = 1; + return MENU_COMMUNICATION_1; + } + sub_8035CF4(&gUnknown_203B364->unk8,0,1); + gUnknown_203B364->unk4 = 1; + break; + case SAVE_NOT_WRTTEN: + sub_80141B4(gUnknown_80E7178,0,0,0); + gUnknown_203B364->unk4 = 5; + break; + default: + sub_8035CC0(gUnknown_203B364->unk148,0); + if (gUnknown_203B364->currMenu == MENU_DELETE_SAVE) { + SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38, + &gUnknown_80E7114,0,6,0); + } + else { + SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38, + &gUnknown_80E701C,0,6,0); + } + sub_8035CF4(&gUnknown_203B364->unk8,0,1); + gUnknown_203B364->unk4 = 1; + break; + } + menu = MENU_NO_SCREEN_CHANGE; + break; + case 1: + if (sub_80130A8(&gUnknown_203B364->unk8) == '\0') { + sub_8013114(&gUnknown_203B364->unk8,&action); + } + switch(action) + { + case 2: + case 4: + if ((gUnknown_203B364->currMenu == 0x29) || (gUnknown_203B364->currMenu == MENU_DELETE_SAVE)) { + gUnknown_203B364->unk4 = 1; + menu = MENU_MAIN_SCREEN; + } + else if (gUnknown_203B364->currMenu == 0x2d) { + gUnknown_203B364->unk4 = 1; + menu = MENU_COMMUNICATION_1; + } + else if (gUnknown_203B364->currMenu == 0x2c) { + gUnknown_203B364->unk4 = 1; + menu = 0x1f; + } + else { + mainMenu = GetMainMenu(); + if (mainMenu->unk3A != 0) { + gUnknown_203B364->unk4 = 1; + menu = 0x35; + } + else { + gUnknown_203B364->unk4 = 1; + menu = gUnknown_203B364->currMenu == 0x2b ? MENU_WONDER_MAIL : MENU_FRIEND_RESCUE; + } + } + break; + case 3: + gUnknown_203B364->unk4 = 1; + break; + } + sub_80388C4(); + } + return menu; +}