decomp UpdateSaveMenu

This commit is contained in:
Seth Barberee
2023-02-12 09:24:48 -08:00
parent ba733a79c5
commit b361b8519a
2 changed files with 117 additions and 256 deletions

View File

@@ -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}

View File

@@ -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;
}