mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-24 09:44:17 -05:00
decomp UpdateSaveMenu
This commit is contained in:
@@ -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}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user