summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/rom5.s32
-rw-r--r--asm/rom6.s4
-rw-r--r--asm/rom_8065394.s1663
-rw-r--r--data/data2.s22
-rw-r--r--data/specials.s2
-rw-r--r--data/text/save.s10
-rw-r--r--ld_script.txt1
-rw-r--r--src/start_menu.c885
-rw-r--r--sym_bss.txt2
-rw-r--r--sym_common.txt2
-rw-r--r--sym_ewram.txt9
11 files changed, 924 insertions, 1708 deletions
diff --git a/asm/rom5.s b/asm/rom5.s
index d747afbc5..8d14ffa76 100644
--- a/asm/rom5.s
+++ b/asm/rom5.s
@@ -12423,7 +12423,7 @@ atk17_seteffectuser: @ 8080DEC
push {lr}
bl pal_fill_black
ldr r0, _08080E00
- bl sub_8071284
+ bl CreateStartMenuTask
bl ScriptContext2_Enable
pop {r0}
bx r0
@@ -17905,7 +17905,7 @@ _0808381C: .4byte gReceivedRemoteLinkPlayers
thumb_func_start sub_8083820
sub_8083820: @ 8083820
push {lr}
- bl sub_807166C
+ bl InitSaveDialog
pop {r0}
bx r0
thumb_func_end sub_8083820
@@ -18648,7 +18648,7 @@ _08083DE4: .4byte gPlayerParty
_08083DE8: .4byte gSpeciesNames
_08083DEC: .4byte gUnknown_0839B24D
_08083DF0: .4byte gUnknown_0839B255
-_08083DF4: .4byte gUnknown_03004AE8
+_08083DF4: .4byte gCallback_03004AE8
_08083DF8: .4byte sub_8083D4C
thumb_func_end sub_8083D70
@@ -18837,7 +18837,7 @@ _08083F52:
movs r0, 0
b _08083F66
.align 2, 0
-_08083F58: .4byte gUnknown_03004AE8
+_08083F58: .4byte gCallback_03004AE8
_08083F5C: .4byte gUnknown_0839B2C0
_08083F60:
bl sub_8071C20
@@ -18880,7 +18880,7 @@ unref_sub_8083F6C: @ 8083F6C
bx r1
.align 2, 0
_08083FB0: .4byte gUnknown_0839B2C0
-_08083FB4: .4byte gUnknown_03004AE8
+_08083FB4: .4byte gCallback_03004AE8
_08083FB8: .4byte sub_8083F2C
thumb_func_end unref_sub_8083F6C
@@ -30824,15 +30824,15 @@ sub_8089A8C: @ 8089A8C
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0
- bl append_byte
+ bl AppendToList
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0x1
- bl append_byte
+ bl AppendToList
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0x3
- bl append_byte
+ bl AppendToList
b _08089BC8
.align 2, 0
_08089AD0: .4byte gUnknown_0202FFA9
@@ -30872,7 +30872,7 @@ _08089AF4:
lsrs r2, 24
ldr r0, _08089B30
ldr r1, _08089B34
- bl append_byte
+ bl AppendToList
b _08089B48
.align 2, 0
_08089B24: .4byte gUnknown_0839F554
@@ -30899,7 +30899,7 @@ _08089B48:
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0
- bl append_byte
+ bl AppendToList
ldr r6, _08089BAC
adds r0, r6, 0
movs r1, 0xB
@@ -30909,7 +30909,7 @@ _08089B48:
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0x1
- bl append_byte
+ bl AppendToList
_08089B76:
ldr r0, _08089BB0
ldrb r1, [r0]
@@ -30929,7 +30929,7 @@ _08089B76:
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0x7
- bl append_byte
+ bl AppendToList
b _08089BBE
.align 2, 0
_08089BA4: .4byte gUnknown_0202FFAA
@@ -30940,12 +30940,12 @@ _08089BB4:
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0x2
- bl append_byte
+ bl AppendToList
_08089BBE:
ldr r0, _08089BD4
ldr r1, _08089BD8
movs r2, 0x3
- bl append_byte
+ bl AppendToList
_08089BC8:
pop {r3}
mov r8, r3
@@ -95868,7 +95868,7 @@ unref_sub_80A9B28: @ 80A9B28
bx r1
.align 2, 0
_080A9B6C: .4byte gUnknown_083C91F0
-_080A9B70: .4byte gUnknown_03004AE8
+_080A9B70: .4byte gCallback_03004AE8
_080A9B74: .4byte sub_80A9B78
thumb_func_end unref_sub_80A9B28
@@ -95899,7 +95899,7 @@ _080A9B8E:
movs r0, 0
b _080A9BB6
.align 2, 0
-_080A9BA8: .4byte gUnknown_03004AE8
+_080A9BA8: .4byte gCallback_03004AE8
_080A9BAC: .4byte gUnknown_083C91F0
_080A9BB0:
bl sub_8071C20
diff --git a/asm/rom6.s b/asm/rom6.s
index 038db98db..055c5db64 100644
--- a/asm/rom6.s
+++ b/asm/rom6.s
@@ -128242,7 +128242,7 @@ unref_sub_814A414: @ 814A414
bx r1
.align 2, 0
_0814A458: .4byte gUnknown_0842C29C
-_0814A45C: .4byte gUnknown_03004AE8
+_0814A45C: .4byte gCallback_03004AE8
_0814A460: .4byte sub_814A464
thumb_func_end unref_sub_814A414
@@ -128279,7 +128279,7 @@ _0814A480:
b _0814A4B2
.align 2, 0
_0814A4A0: .4byte gUnknown_02024D1E
-_0814A4A4: .4byte gUnknown_03004AE8
+_0814A4A4: .4byte gCallback_03004AE8
_0814A4A8: .4byte gUnknown_0842C29C
_0814A4AC:
bl sub_8071C20
diff --git a/asm/rom_8065394.s b/asm/rom_8065394.s
index eecd27dd9..2a08416e2 100644
--- a/asm/rom_8065394.s
+++ b/asm/rom_8065394.s
@@ -18494,1667 +18494,4 @@ _08070FAC: .4byte 0x00000801
_08070FB0: .4byte 0x00000802
thumb_func_end unref_sub_8070F90
- thumb_func_start sub_8070FB4
-sub_8070FB4: @ 8070FB4
- push {lr}
- ldr r0, _08070FCC
- movs r1, 0
- strb r1, [r0]
- bl is_c1_link_related_active
- cmp r0, 0x1
- bne _08070FD0
- bl sub_80710A0
- b _08070FE2
- .align 2, 0
-_08070FCC: .4byte gUnknown_0202E8FD
-_08070FD0:
- bl GetSafariZoneFlag
- cmp r0, 0x1
- bne _08070FDE
- bl BuildStartMenuActions_SafariZone
- b _08070FE2
-_08070FDE:
- bl BuildStartMenuActions_Normal
-_08070FE2:
- pop {r0}
- bx r0
- thumb_func_end sub_8070FB4
-
- thumb_func_start AddStartMenuAction
-AddStartMenuAction: @ 8070FE8
- push {lr}
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- ldr r0, _08070FFC
- ldr r1, _08071000
- bl append_byte
- pop {r0}
- bx r0
- .align 2, 0
-_08070FFC: .4byte gUnknown_0202E8FE
-_08071000: .4byte gUnknown_0202E8FD
- thumb_func_end AddStartMenuAction
-
- thumb_func_start BuildStartMenuActions_Normal
-BuildStartMenuActions_Normal: @ 8071004
- push {lr}
- ldr r0, _08071068
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0807101A
- movs r0, 0
- bl AddStartMenuAction
-_0807101A:
- movs r0, 0x80
- lsls r0, 4
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08071030
- movs r0, 0x1
- bl AddStartMenuAction
-_08071030:
- movs r0, 0x2
- bl AddStartMenuAction
- ldr r0, _0807106C
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0807104A
- movs r0, 0x3
- bl AddStartMenuAction
-_0807104A:
- movs r0, 0x4
- bl AddStartMenuAction
- movs r0, 0x5
- bl AddStartMenuAction
- movs r0, 0x6
- bl AddStartMenuAction
- movs r0, 0x7
- bl AddStartMenuAction
- pop {r0}
- bx r0
- .align 2, 0
-_08071068: .4byte 0x00000801
-_0807106C: .4byte 0x00000802
- thumb_func_end BuildStartMenuActions_Normal
-
- thumb_func_start BuildStartMenuActions_SafariZone
-BuildStartMenuActions_SafariZone: @ 8071070
- push {lr}
- movs r0, 0x8
- bl AddStartMenuAction
- movs r0, 0
- bl AddStartMenuAction
- movs r0, 0x1
- bl AddStartMenuAction
- movs r0, 0x2
- bl AddStartMenuAction
- movs r0, 0x4
- bl AddStartMenuAction
- movs r0, 0x6
- bl AddStartMenuAction
- movs r0, 0x7
- bl AddStartMenuAction
- pop {r0}
- bx r0
- thumb_func_end BuildStartMenuActions_SafariZone
-
- thumb_func_start sub_80710A0
-sub_80710A0: @ 80710A0
- push {lr}
- movs r0, 0x1
- bl AddStartMenuAction
- movs r0, 0x2
- bl AddStartMenuAction
- ldr r0, _080710D8
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080710C2
- movs r0, 0x3
- bl AddStartMenuAction
-_080710C2:
- movs r0, 0x9
- bl AddStartMenuAction
- movs r0, 0x6
- bl AddStartMenuAction
- movs r0, 0x7
- bl AddStartMenuAction
- pop {r0}
- bx r0
- .align 2, 0
-_080710D8: .4byte 0x00000802
- thumb_func_end sub_80710A0
-
- thumb_func_start sub_80710DC
-sub_80710DC: @ 80710DC
- push {lr}
- ldr r0, _08071108
- ldr r1, _0807110C
- ldrb r1, [r1]
- movs r2, 0xC
- movs r3, 0x1
- bl sub_8072C44
- movs r0, 0
- movs r1, 0
- movs r2, 0xA
- movs r3, 0x5
- bl MenuDrawTextWindow
- ldr r0, _08071110
- movs r1, 0x1
- movs r2, 0x1
- bl MenuPrint
- pop {r0}
- bx r0
- .align 2, 0
-_08071108: .4byte gStringVar1
-_0807110C: .4byte gUnknown_02038808
-_08071110: .4byte gOtherText_SafariStock
- thumb_func_end sub_80710DC
-
- thumb_func_start sub_8071114
-sub_8071114: @ 8071114
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r7, r0, 0
- adds r6, r1, 0
- movs r0, 0
- ldrsh r4, [r7, r0]
- ldr r1, _08071160
- mov r8, r1
- lsls r0, r4, 25
- movs r1, 0x80
- lsls r1, 18
- adds r5, r0, r1
-_0807112E:
- ldr r0, _08071164
- adds r0, r4, r0
- ldrb r0, [r0]
- lsls r0, 3
- add r0, r8
- ldr r0, [r0]
- lsrs r2, r5, 24
- movs r1, 0x17
- bl MenuPrint
- movs r0, 0x80
- lsls r0, 18
- adds r5, r0
- adds r4, 0x1
- ldr r0, _08071168
- ldrb r0, [r0]
- cmp r4, r0
- bge _0807116C
- subs r6, 0x1
- cmp r6, 0
- bne _0807112E
- strh r4, [r7]
- movs r0, 0
- b _08071170
- .align 2, 0
-_08071160: .4byte gUnknown_08376D24
-_08071164: .4byte gUnknown_0202E8FE
-_08071168: .4byte gUnknown_0202E8FD
-_0807116C:
- strh r4, [r7]
- movs r0, 0x1
-_08071170:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8071114
-
- thumb_func_start sub_807117C
-sub_807117C: @ 807117C
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r1, 0
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x5
- bhi _08071224
- lsls r0, 2
- ldr r1, _08071198
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08071198: .4byte _0807119C
- .align 2, 0
-_0807119C:
- .4byte _080711F6
- .4byte _080711B4
- .4byte _080711BA
- .4byte _080711DC
- .4byte _080711EA
- .4byte _080711FE
-_080711B4:
- bl sub_8070FB4
- b _080711F6
-_080711BA:
- ldr r0, _080711D8
- ldrb r3, [r0]
- lsls r3, 25
- movs r0, 0xC0
- lsls r0, 18
- adds r3, r0
- lsrs r3, 24
- movs r0, 0x16
- movs r1, 0
- movs r2, 0x1D
- bl MenuDrawTextWindow
- movs r0, 0
- strh r0, [r5]
- b _080711F6
- .align 2, 0
-_080711D8: .4byte gUnknown_0202E8FD
-_080711DC:
- bl GetSafariZoneFlag
- cmp r0, 0
- beq _080711F6
- bl sub_80710DC
- b _080711F6
-_080711EA:
- adds r0, r5, 0
- movs r1, 0x2
- bl sub_8071114
- cmp r0, 0
- beq _08071224
-_080711F6:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _08071224
-_080711FE:
- ldr r0, _0807121C
- ldrb r3, [r0]
- ldr r4, _08071220
- ldrb r0, [r4]
- str r0, [sp]
- movs r0, 0x6
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0x17
- movs r2, 0x2
- bl InitMenu
- strb r0, [r4]
- movs r0, 0x1
- b _08071226
- .align 2, 0
-_0807121C: .4byte gUnknown_0202E8FD
-_08071220: .4byte gUnknown_0202E8FC
-_08071224:
- movs r0, 0
-_08071226:
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_807117C
-
- thumb_func_start sub_8071230
-sub_8071230: @ 8071230
- push {r4,lr}
- sub sp, 0x4
- movs r0, 0
- mov r1, sp
- strh r0, [r1]
- adds r1, 0x2
- strh r0, [r1]
- adds r4, r1, 0
-_08071240:
- mov r0, sp
- adds r1, r4, 0
- bl sub_807117C
- cmp r0, 0
- beq _08071240
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8071230
-
- thumb_func_start task50_startmenu
-task50_startmenu: @ 8071254
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _08071280
- adds r4, r0, r1
- adds r1, r4, 0x2
- adds r0, r4, 0
- bl sub_807117C
- cmp r0, 0x1
- bne _0807127A
- movs r0, 0
- strh r0, [r4]
- adds r0, r5, 0
- bl SwitchTaskToFollowupFunc
-_0807127A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08071280: .4byte gUnknown_03004B28
- thumb_func_end task50_startmenu
-
- thumb_func_start sub_8071284
-sub_8071284: @ 8071284
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _080712AC
- bl InitMenuWindow
- ldr r4, _080712B0
- adds r0, r4, 0
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- adds r2, r5, 0
- bl SetTaskFuncWithFollowupFunc
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080712AC: .4byte gWindowConfig_81E6CE4
-_080712B0: .4byte task50_startmenu
- thumb_func_end sub_8071284
-
- thumb_func_start sub_80712B4
-sub_80712B4: @ 80712B4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _080712D4
- adds r2, r0, r1
- movs r1, 0x8
- ldrsh r0, [r2, r1]
- cmp r0, 0
- beq _080712D8
- cmp r0, 0x1
- beq _080712F0
- b _08071306
- .align 2, 0
-_080712D4: .4byte gTasks
-_080712D8:
- ldr r1, _080712E8
- ldr r0, _080712EC
- str r0, [r1]
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
- b _08071306
- .align 2, 0
-_080712E8: .4byte gUnknown_03004AE8
-_080712EC: .4byte sub_8071338
-_080712F0:
- ldr r0, _0807130C
- ldr r0, [r0]
- bl _call_via_r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08071306
- adds r0, r4, 0
- bl DestroyTask
-_08071306:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807130C: .4byte gUnknown_03004AE8
- thumb_func_end sub_80712B4
-
- thumb_func_start sub_8071310
-sub_8071310: @ 8071310
- push {lr}
- bl is_c1_link_related_active
- cmp r0, 0
- bne _08071326
- bl player_bitmagic
- bl sub_80594C0
- bl sub_80597F4
-_08071326:
- ldr r0, _08071334
- bl sub_8071284
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- .align 2, 0
-_08071334: .4byte sub_80712B4
- thumb_func_end sub_8071310
-
- thumb_func_start sub_8071338
-sub_8071338: @ 8071338
- push {r4,lr}
- ldr r4, _080713DC
- ldrh r1, [r4, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08071358
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- bl MoveMenuCursor
- ldr r1, _080713E0
- strb r0, [r1]
-_08071358:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08071372
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- bl MoveMenuCursor
- ldr r1, _080713E0
- strb r0, [r1]
-_08071372:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08071400
- movs r0, 0x5
- bl PlaySE
- ldr r1, _080713E4
- ldr r2, _080713E8
- ldr r0, _080713E0
- ldrb r0, [r0]
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r1, [r0]
- ldr r0, _080713EC
- cmp r1, r0
- bne _080713A8
- movs r0, 0
- bl pokedex_count
- lsls r0, 16
- cmp r0, 0
- beq _08071408
-_080713A8:
- ldr r3, _080713F0
- ldr r1, _080713E4
- ldr r2, _080713E8
- ldr r0, _080713E0
- ldrb r0, [r0]
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r1, [r0]
- str r1, [r3]
- ldr r0, _080713F4
- cmp r1, r0
- beq _08071408
- ldr r0, _080713F8
- cmp r1, r0
- beq _08071408
- ldr r0, _080713FC
- cmp r1, r0
- beq _08071408
- movs r0, 0x1
- movs r1, 0
- bl fade_screen
- b _08071408
- .align 2, 0
-_080713DC: .4byte gMain
-_080713E0: .4byte gUnknown_0202E8FC
-_080713E4: .4byte gUnknown_08376D24
-_080713E8: .4byte gUnknown_0202E8FE
-_080713EC: .4byte StartMenu_Pokedex
-_080713F0: .4byte gUnknown_03004AE8
-_080713F4: .4byte sub_80714FC
-_080713F8: .4byte sub_8071554
-_080713FC: .4byte sub_8071560
-_08071400:
- movs r0, 0xA
- ands r0, r1
- cmp r0, 0
- bne _0807140C
-_08071408:
- movs r0, 0
- b _08071412
-_0807140C:
- bl sub_8071C20
- movs r0, 0x1
-_08071412:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8071338
-
- thumb_func_start StartMenu_Pokedex
-StartMenu_Pokedex: @ 8071418
- push {lr}
- ldr r0, _0807142C
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08071430
- movs r0, 0
- b _08071442
- .align 2, 0
-_0807142C: .4byte gPaletteFade
-_08071430:
- movs r0, 0x29
- bl sav12_xor_increment
- bl play_some_sound
- ldr r0, _08071448
- bl SetMainCallback2
- movs r0, 0x1
-_08071442:
- pop {r1}
- bx r1
- .align 2, 0
-_08071448: .4byte sub_808C27C
- thumb_func_end StartMenu_Pokedex
-
- thumb_func_start sub_807144C
-sub_807144C: @ 807144C
- push {lr}
- ldr r0, _08071460
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08071464
- movs r0, 0
- b _08071470
- .align 2, 0
-_08071460: .4byte gPaletteFade
-_08071464:
- bl play_some_sound
- ldr r0, _08071474
- bl SetMainCallback2
- movs r0, 0x1
-_08071470:
- pop {r1}
- bx r1
- .align 2, 0
-_08071474: .4byte sub_8089A70
- thumb_func_end sub_807144C
-
- thumb_func_start sub_8071478
-sub_8071478: @ 8071478
- push {lr}
- ldr r0, _0807148C
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08071490
- movs r0, 0
- b _0807149C
- .align 2, 0
-_0807148C: .4byte gPaletteFade
-_08071490:
- bl play_some_sound
- ldr r0, _080714A0
- bl SetMainCallback2
- movs r0, 0x1
-_0807149C:
- pop {r1}
- bx r1
- .align 2, 0
-_080714A0: .4byte sub_80A53F8
- thumb_func_end sub_8071478
-
- thumb_func_start sub_80714A4
-sub_80714A4: @ 80714A4
- push {lr}
- ldr r0, _080714B8
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080714BC
- movs r0, 0
- b _080714C8
- .align 2, 0
-_080714B8: .4byte gPaletteFade
-_080714BC:
- bl play_some_sound
- ldr r0, _080714CC
- bl SetMainCallback2
- movs r0, 0x1
-_080714C8:
- pop {r1}
- bx r1
- .align 2, 0
-_080714CC: .4byte sub_80EBA5C
- thumb_func_end sub_80714A4
-
- thumb_func_start sub_80714D0
-sub_80714D0: @ 80714D0
- push {lr}
- ldr r0, _080714E4
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080714E8
- movs r0, 0
- b _080714F4
- .align 2, 0
-_080714E4: .4byte gPaletteFade
-_080714E8:
- bl play_some_sound
- ldr r0, _080714F8
- bl sub_8093110
- movs r0, 0x1
-_080714F4:
- pop {r1}
- bx r1
- .align 2, 0
-_080714F8: .4byte sub_805469C
- thumb_func_end sub_80714D0
-
- thumb_func_start sub_80714FC
-sub_80714FC: @ 80714FC
- push {lr}
- bl sub_8072DEC
- ldr r1, _08071510
- ldr r0, _08071514
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08071510: .4byte gUnknown_03004AE8
-_08071514: .4byte sub_80715A4
- thumb_func_end sub_80714FC
-
- thumb_func_start sub_8071518
-sub_8071518: @ 8071518
- push {lr}
- ldr r0, _0807152C
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08071530
- movs r0, 0
- b _08071542
- .align 2, 0
-_0807152C: .4byte gPaletteFade
-_08071530:
- bl play_some_sound
- ldr r0, _08071548
- bl SetMainCallback2
- ldr r1, _0807154C
- ldr r0, _08071550
- str r0, [r1, 0x8]
- movs r0, 0x1
-_08071542:
- pop {r1}
- bx r1
- .align 2, 0
-_08071548: .4byte CB2_InitOptionMenu
-_0807154C: .4byte gMain
-_08071550: .4byte sub_805469C
- thumb_func_end sub_8071518
-
- thumb_func_start sub_8071554
-sub_8071554: @ 8071554
- push {lr}
- bl sub_8071C20
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end sub_8071554
-
- thumb_func_start sub_8071560
-sub_8071560: @ 8071560
- push {lr}
- bl sub_8071C20
- bl sub_80C823C
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end sub_8071560
-
- thumb_func_start sub_8071570
-sub_8071570: @ 8071570
- push {lr}
- ldr r0, _08071584
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08071588
- movs r0, 0
- b _08071598
- .align 2, 0
-_08071584: .4byte gPaletteFade
-_08071588:
- bl play_some_sound
- ldr r0, _0807159C
- ldrb r0, [r0]
- ldr r1, _080715A0
- bl sub_8093130
- movs r0, 0x1
-_08071598:
- pop {r1}
- bx r1
- .align 2, 0
-_0807159C: .4byte gUnknown_03004860
-_080715A0: .4byte sub_805469C
- thumb_func_end sub_8071570
-
- thumb_func_start sub_80715A4
-sub_80715A4: @ 80715A4
- push {lr}
- bl sub_807160C
- ldr r1, _080715B8
- ldr r0, _080715BC
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_080715B8: .4byte gUnknown_03004AE8
-_080715BC: .4byte sub_80715C0
- thumb_func_end sub_80715A4
-
- thumb_func_start sub_80715C0
-sub_80715C0: @ 80715C0
- push {lr}
- bl sub_8071630
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080715F4
- cmp r0, 0x1
- ble _08071604
- cmp r0, 0x2
- beq _080715DC
- cmp r0, 0x3
- beq _080715F4
- b _08071604
-_080715DC:
- bl MenuZeroFillScreen
- bl sub_8071230
- ldr r1, _080715EC
- ldr r0, _080715F0
- str r0, [r1]
- b _08071604
- .align 2, 0
-_080715EC: .4byte gUnknown_03004AE8
-_080715F0: .4byte sub_8071338
-_080715F4:
- bl MenuZeroFillScreen
- bl sub_8064E2C
- bl ScriptContext2_Disable
- movs r0, 0x1
- b _08071606
-_08071604:
- movs r0, 0
-_08071606:
- pop {r1}
- bx r1
- thumb_func_end sub_80715C0
-
- thumb_func_start sub_807160C
-sub_807160C: @ 807160C
- push {lr}
- bl save_serialize_map
- ldr r1, _08071624
- ldr r0, _08071628
- str r0, [r1]
- ldr r1, _0807162C
- movs r0, 0
- strb r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08071624: .4byte gUnknown_030006A8
-_08071628: .4byte sub_8071794
-_0807162C: .4byte gUnknown_030006AD
- thumb_func_end sub_807160C
-
- thumb_func_start sub_8071630
-sub_8071630: @ 8071630
- push {lr}
- ldr r0, _08071648
- ldrb r0, [r0]
- cmp r0, 0
- beq _0807164C
- bl MenuUpdateWindowText
- lsls r0, 24
- cmp r0, 0
- bne _0807164C
- movs r0, 0
- b _0807165E
- .align 2, 0
-_08071648: .4byte gUnknown_030006AD
-_0807164C:
- ldr r1, _08071664
- movs r0, 0
- strb r0, [r1]
- ldr r0, _08071668
- ldr r0, [r0]
- bl _call_via_r0
- lsls r0, 24
- lsrs r0, 24
-_0807165E:
- pop {r1}
- bx r1
- .align 2, 0
-_08071664: .4byte gUnknown_030006AD
-_08071668: .4byte gUnknown_030006A8
- thumb_func_end sub_8071630
-
- thumb_func_start sub_807166C
-sub_807166C: @ 807166C
- push {lr}
- bl sub_807160C
- ldr r0, _08071680
- movs r1, 0x50
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_08071680: .4byte task50_save_game
- thumb_func_end sub_807166C
-
- thumb_func_start sub_8071684
-sub_8071684: @ 8071684
- push {r4,r5,lr}
- adds r2, r0, 0
- adds r5, r1, 0
- ldr r4, _080716B0
- adds r0, r4, 0
- adds r1, r2, 0
- bl StringExpandPlaceholders
- bl MenuDisplayMessageBox
- adds r0, r4, 0
- bl sub_8072044
- ldr r1, _080716B4
- movs r0, 0x1
- strb r0, [r1]
- ldr r0, _080716B8
- str r5, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080716B0: .4byte gStringVar4
-_080716B4: .4byte gUnknown_030006AD
-_080716B8: .4byte gUnknown_030006A8
- thumb_func_end sub_8071684
-
- thumb_func_start task50_save_game
-task50_save_game: @ 80716BC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8071630
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x1
- beq _080716E8
- cmp r1, 0x1
- bgt _080716D8
- cmp r1, 0
- beq _080716F6
- b _080716EC
-_080716D8:
- cmp r1, 0x3
- bgt _080716EC
- ldr r1, _080716E4
- movs r0, 0
- strh r0, [r1]
- b _080716EC
- .align 2, 0
-_080716E4: .4byte gScriptResult
-_080716E8:
- ldr r0, _080716FC
- strh r1, [r0]
-_080716EC:
- adds r0, r4, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_080716F6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080716FC: .4byte gScriptResult
- thumb_func_end task50_save_game
-
- thumb_func_start sub_8071700
-sub_8071700: @ 8071700
- push {lr}
- movs r0, 0
- movs r1, 0
- bl sub_80946C8
- pop {r0}
- bx r0
- thumb_func_end sub_8071700
-
- thumb_func_start sub_8071710
-sub_8071710: @ 8071710
- push {lr}
- movs r0, 0x14
- movs r1, 0x8
- movs r2, 0x1A
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- pop {r0}
- bx r0
- thumb_func_end sub_8071710
-
- thumb_func_start sub_8071724
-sub_8071724: @ 8071724
- ldr r1, _0807172C
- movs r0, 0x3C
- strb r0, [r1]
- bx lr
- .align 2, 0
-_0807172C: .4byte gUnknown_030006AC
- thumb_func_end sub_8071724
-
- thumb_func_start sub_8071730
-sub_8071730: @ 8071730
- push {lr}
- ldr r1, _08071750
- ldrb r0, [r1]
- subs r2, r0, 0x1
- strb r2, [r1]
- ldr r0, _08071754
- ldrh r1, [r0, 0x2C]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08071758
- lsls r0, r2, 24
- cmp r0, 0
- beq _0807175E
- movs r0, 0
- b _08071760
- .align 2, 0
-_08071750: .4byte gUnknown_030006AC
-_08071754: .4byte gMain
-_08071758:
- movs r0, 0x5
- bl PlaySE
-_0807175E:
- movs r0, 0x1
-_08071760:
- pop {r1}
- bx r1
- thumb_func_end sub_8071730
-
- thumb_func_start sub_8071764
-sub_8071764: @ 8071764
- push {lr}
- ldr r1, _08071780
- ldrb r0, [r1]
- cmp r0, 0
- bne _08071788
- ldr r0, _08071784
- ldrh r1, [r0, 0x2C]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0807178C
- movs r0, 0x1
- b _0807178E
- .align 2, 0
-_08071780: .4byte gUnknown_030006AC
-_08071784: .4byte gMain
-_08071788:
- subs r0, 0x1
- strb r0, [r1]
-_0807178C:
- movs r0, 0
-_0807178E:
- pop {r1}
- bx r1
- thumb_func_end sub_8071764
-
- thumb_func_start sub_8071794
-sub_8071794: @ 8071794
- push {lr}
- bl MenuZeroFillScreen
- movs r0, 0
- movs r1, 0
- bl sub_80945C0
- ldr r0, _080717B0
- ldr r1, _080717B4
- bl sub_8071684
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_080717B0: .4byte gUnknown_081C6C85
-_080717B4: .4byte sub_80717B8
- thumb_func_end sub_8071794
-
- thumb_func_start sub_80717B8
-sub_80717B8: @ 80717B8
- push {lr}
- movs r0, 0x14
- movs r1, 0x8
- movs r2, 0x1
- bl DisplayYesNoMenu
- ldr r1, _080717D0
- ldr r0, _080717D4
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_080717D0: .4byte gUnknown_030006A8
-_080717D4: .4byte sub_80717D8
- thumb_func_end sub_80717B8
-
- thumb_func_start sub_80717D8
-sub_80717D8: @ 80717D8
- push {lr}
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _080717FA
- cmp r1, 0
- bgt _080717F4
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0807183C
- b _08071848
-_080717F4:
- cmp r1, 0x1
- beq _0807183C
- b _08071848
-_080717FA:
- bl sub_8071710
- ldr r0, _0807181C
- ldrh r0, [r0]
- cmp r0, 0
- beq _0807180A
- cmp r0, 0x2
- bne _08071812
-_0807180A:
- ldr r0, _08071820
- ldrb r0, [r0]
- cmp r0, 0
- bne _0807182C
-_08071812:
- ldr r1, _08071824
- ldr r0, _08071828
- str r0, [r1]
- b _08071848
- .align 2, 0
-_0807181C: .4byte gSaveFileStatus
-_08071820: .4byte gUnknown_020297EC
-_08071824: .4byte gUnknown_030006A8
-_08071828: .4byte sub_8071850
-_0807182C:
- ldr r1, _08071834
- ldr r0, _08071838
- str r0, [r1]
- b _08071848
- .align 2, 0
-_08071834: .4byte gUnknown_030006A8
-_08071838: .4byte sub_80718E8
-_0807183C:
- bl sub_8071710
- bl sub_8071700
- movs r0, 0x2
- b _0807184A
-_08071848:
- movs r0, 0
-_0807184A:
- pop {r1}
- bx r1
- thumb_func_end sub_80717D8
-
- thumb_func_start sub_8071850
-sub_8071850: @ 8071850
- push {lr}
- ldr r0, _0807186C
- ldrb r0, [r0]
- ldr r2, _08071870
- cmp r0, 0x1
- bne _0807185E
- ldr r2, _08071874
-_0807185E:
- ldr r1, _08071878
- adds r0, r2, 0
- bl sub_8071684
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0807186C: .4byte gUnknown_020297EC
-_08071870: .4byte gUnknown_081C6CA6
-_08071874: .4byte gUnknown_081C6D26
-_08071878: .4byte sub_807187C
- thumb_func_end sub_8071850
-
- thumb_func_start sub_807187C
-sub_807187C: @ 807187C
- push {lr}
- movs r0, 0x14
- movs r1, 0x8
- movs r2, 0x1
- bl DisplayYesNoMenu
- ldr r1, _08071894
- ldr r0, _08071898
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08071894: .4byte gUnknown_030006A8
-_08071898: .4byte sub_807189C
- thumb_func_end sub_807187C
-
- thumb_func_start sub_807189C
-sub_807189C: @ 807189C
- push {lr}
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _080718BE
- cmp r1, 0
- bgt _080718B8
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _080718D4
- b _080718E0
-_080718B8:
- cmp r1, 0x1
- beq _080718D4
- b _080718E0
-_080718BE:
- bl sub_8071710
- ldr r1, _080718CC
- ldr r0, _080718D0
- str r0, [r1]
- b _080718E0
- .align 2, 0
-_080718CC: .4byte gUnknown_030006A8
-_080718D0: .4byte sub_80718E8
-_080718D4:
- bl sub_8071710
- bl sub_8071700
- movs r0, 0x2
- b _080718E2
-_080718E0:
- movs r0, 0
-_080718E2:
- pop {r1}
- bx r1
- thumb_func_end sub_807189C
-
- thumb_func_start sub_80718E8
-sub_80718E8: @ 80718E8
- push {lr}
- ldr r0, _080718F8
- ldr r1, _080718FC
- bl sub_8071684
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_080718F8: .4byte gUnknown_081C6CE1
-_080718FC: .4byte sub_8071900
- thumb_func_end sub_80718E8
-
- thumb_func_start sub_8071900
-sub_8071900: @ 8071900
- push {r4,lr}
- movs r0, 0
- bl sav12_xor_increment
- ldr r4, _08071920
- ldrb r0, [r4]
- cmp r0, 0x1
- bne _08071924
- movs r0, 0x4
- bl sub_8125D44
- lsls r0, 24
- lsrs r1, r0, 24
- movs r0, 0
- strb r0, [r4]
- b _0807192E
- .align 2, 0
-_08071920: .4byte gUnknown_020297EC
-_08071924:
- movs r0, 0
- bl sub_8125D44
- lsls r0, 24
- lsrs r1, r0, 24
-_0807192E:
- cmp r1, 0x1
- bne _08071944
- ldr r0, _0807193C
- ldr r1, _08071940
- bl sub_8071684
- b _0807194C
- .align 2, 0
-_0807193C: .4byte gUnknown_081C6D05
-_08071940: .4byte sub_8071960
-_08071944:
- ldr r0, _08071958
- ldr r1, _0807195C
- bl sub_8071684
-_0807194C:
- bl sub_8071724
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08071958: .4byte gSystemText_SaveErrorExchangeBackup
-_0807195C: .4byte sub_80719AC
- thumb_func_end sub_8071900
-
- thumb_func_start sub_8071960
-sub_8071960: @ 8071960
- push {lr}
- bl MenuUpdateWindowText
- lsls r0, 24
- cmp r0, 0
- beq _08071978
- movs r0, 0x37
- bl PlaySE
- ldr r1, _08071980
- ldr r0, _08071984
- str r0, [r1]
-_08071978:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08071980: .4byte gUnknown_030006A8
-_08071984: .4byte sub_8071988
- thumb_func_end sub_8071960
-
- thumb_func_start sub_8071988
-sub_8071988: @ 8071988
- push {lr}
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080719A6
- bl sub_8071730
- lsls r0, 24
- cmp r0, 0
- beq _080719A6
- bl sub_8071700
- movs r0, 0x1
- b _080719A8
-_080719A6:
- movs r0, 0
-_080719A8:
- pop {r1}
- bx r1
- thumb_func_end sub_8071988
-
- thumb_func_start sub_80719AC
-sub_80719AC: @ 80719AC
- push {lr}
- bl MenuUpdateWindowText
- lsls r0, 24
- cmp r0, 0
- beq _080719C4
- movs r0, 0x16
- bl PlaySE
- ldr r1, _080719CC
- ldr r0, _080719D0
- str r0, [r1]
-_080719C4:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_080719CC: .4byte gUnknown_030006A8
-_080719D0: .4byte sub_80719D4
- thumb_func_end sub_80719AC
-
- thumb_func_start sub_80719D4
-sub_80719D4: @ 80719D4
- push {lr}
- bl sub_8071764
- lsls r0, 24
- cmp r0, 0
- beq _080719E8
- bl sub_8071700
- movs r0, 0x3
- b _080719EA
-_080719E8:
- movs r0, 0
-_080719EA:
- pop {r1}
- bx r1
- thumb_func_end sub_80719D4
-
- thumb_func_start sub_80719F0
-sub_80719F0: @ 80719F0
- push {lr}
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_80719F0
-
- thumb_func_start sub_80719FC
-sub_80719FC: @ 80719FC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- mov r8, r0
- ldrb r0, [r0]
- cmp r0, 0x4
- bls _08071A0E
- b _08071B10
-_08071A0E:
- lsls r0, 2
- ldr r1, _08071A18
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08071A18: .4byte _08071A1C
- .align 2, 0
-_08071A1C:
- .4byte _08071A30
- .4byte _08071AA4
- .4byte _08071AB6
- .4byte _08071AD8
- .4byte _08071B0C
-_08071A30:
- movs r0, 0x80
- lsls r0, 19
- movs r4, 0
- strh r4, [r0]
- movs r0, 0
- bl SetVBlankCallback
- bl remove_some_task
- movs r2, 0xA0
- lsls r2, 19
- mov r0, sp
- strh r4, [r0]
- ldr r1, _08071A98
- str r0, [r1]
- str r2, [r1, 0x4]
- ldr r0, _08071A9C
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r2, 0xC0
- lsls r2, 19
- movs r3, 0xC0
- lsls r3, 9
- mov r4, sp
- movs r6, 0
- movs r5, 0x80
- lsls r5, 5
- ldr r7, _08071AA0
- movs r0, 0x81
- lsls r0, 24
- mov r12, r0
-_08071A6E:
- strh r6, [r4]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- str r7, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r2, r5
- subs r3, r5
- cmp r3, r5
- bhi _08071A6E
- strh r6, [r4]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- lsrs r0, r3, 1
- mov r2, r12
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- b _08071B10
- .align 2, 0
-_08071A98: .4byte 0x040000d4
-_08071A9C: .4byte 0x81000200
-_08071AA0: .4byte 0x81000800
-_08071AA4:
- bl ResetSpriteData
- bl ResetTasks
- bl ResetPaletteFade
- bl dp12_8087EA4
- b _08071B10
-_08071AB6:
- ldr r4, _08071AD4
- adds r0, r4, 0
- bl SetUpWindowConfig
- adds r0, r4, 0
- bl InitMenuWindow
- movs r1, 0x80
- lsls r1, 19
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- b _08071B10
- .align 2, 0
-_08071AD4: .4byte gWindowConfig_81E6CE4
-_08071AD8:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- ldr r0, _08071B00
- bl SetVBlankCallback
- ldr r3, _08071B04
- ldrh r2, [r3]
- movs r0, 0
- strh r0, [r3]
- ldr r4, _08071B08
- ldrh r0, [r4]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r4]
- strh r2, [r3]
- b _08071B10
- .align 2, 0
-_08071B00: .4byte sub_80719F0
-_08071B04: .4byte 0x04000208
-_08071B08: .4byte 0x04000200
-_08071B0C:
- movs r0, 0x1
- b _08071B1A
-_08071B10:
- mov r1, r8
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- movs r0, 0
-_08071B1A:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80719FC
-
- thumb_func_start sub_8071B28
-sub_8071B28: @ 8071B28
- push {lr}
- ldr r0, _08071B48
- bl sub_80719FC
- cmp r0, 0
- beq _08071B42
- ldr r0, _08071B4C
- movs r1, 0x50
- bl CreateTask
- ldr r0, _08071B50
- bl SetMainCallback2
-_08071B42:
- pop {r0}
- bx r0
- .align 2, 0
-_08071B48: .4byte gMain + 0x43C
-_08071B4C: .4byte sub_8071B64
-_08071B50: .4byte sub_8071B54
- thumb_func_end sub_8071B28
-
- thumb_func_start sub_8071B54
-sub_8071B54: @ 8071B54
- push {lr}
- bl RunTasks
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_8071B54
-
- thumb_func_start sub_8071B64
-sub_8071B64: @ 8071B64
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _08071B94
- adds r4, r0, r1
- ldr r0, _08071B98
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08071C14
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bhi _08071C14
- lsls r0, 2
- ldr r1, _08071B9C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08071B94: .4byte gUnknown_03004B28
-_08071B98: .4byte gPaletteFade
-_08071B9C: .4byte _08071BA0
- .align 2, 0
-_08071BA0:
- .4byte _08071BB4
- .4byte _08071BD4
- .4byte _08071BDE
- .4byte _08071BEE
- .4byte _08071C06
-_08071BB4:
- bl MenuDisplayMessageBox
- ldr r0, _08071BD0
- movs r1, 0x2
- movs r2, 0xF
- bl MenuPrint
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- b _08071BFA
- .align 2, 0
-_08071BD0: .4byte gSystemText_Saving
-_08071BD4:
- bl sub_8047A1C
- bl sub_8125E2C
- b _08071BFE
-_08071BDE:
- bl sub_8125E6C
- lsls r0, 24
- cmp r0, 0
- beq _08071C14
- bl sub_8047A34
- b _08071BFE
-_08071BEE:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
-_08071BFA:
- bl BeginNormalPaletteFade
-_08071BFE:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _08071C14
-_08071C06:
- ldr r0, _08071C1C
- ldr r0, [r0, 0x8]
- bl SetMainCallback2
- adds r0, r5, 0
- bl DestroyTask
-_08071C14:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08071C1C: .4byte gMain
- thumb_func_end sub_8071B64
-
- thumb_func_start sub_8071C20
-sub_8071C20: @ 8071C20
- push {lr}
- movs r0, 0x5
- bl PlaySE
- bl MenuZeroFillScreen
- bl sub_8064E2C
- bl ScriptContext2_Disable
- bl sub_8072DEC
- pop {r0}
- bx r0
- thumb_func_end sub_8071C20
-
- thumb_func_start append_byte
-append_byte: @ 8071C3C
- ldrb r3, [r1]
- adds r0, r3
- strb r2, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- bx lr
- thumb_func_end append_byte
-
.align 2, 0 @ Don't pad with nop.
diff --git a/data/data2.s b/data/data2.s
index f11bf184a..4f2fc9ccc 100644
--- a/data/data2.s
+++ b/data/data2.s
@@ -7937,17 +7937,17 @@ gUnknown_08376D1C:: @ 8376D1C
.byte 0x3D @ Speed
.align 2
-gUnknown_08376D24:: @ 8376D24
- .4byte SystemText_Pokedex, StartMenu_Pokedex
- .4byte SystemText_Pokemon, sub_807144C
- .4byte SystemText_BAG, sub_8071478
- .4byte SystemText_Pokenav, sub_80714A4
- .4byte SystemText_Player, sub_80714D0
- .4byte SystemText_Save, sub_80714FC
- .4byte SystemText_Option, sub_8071518
- .4byte SystemText_Exit, sub_8071554
- .4byte SystemText_Retire, sub_8071560
- .4byte SystemText_Player, sub_8071570
+gStartMenuItems:: @ 8376D24
+ .4byte SystemText_Pokedex, StartMenu_PokedexCallback
+ .4byte SystemText_Pokemon, StartMenu_PokemonCallback
+ .4byte SystemText_BAG, StartMenu_BagCallback
+ .4byte SystemText_Pokenav, StartMenu_PokenavCallback
+ .4byte SystemText_Player, StartMenu_PlayerCallback
+ .4byte SystemText_Save, StartMenu_SaveCallback
+ .4byte SystemText_Option, StartMenu_OptionCallback
+ .4byte SystemText_Exit, StartMenu_ExitCallback
+ .4byte SystemText_Retire, StartMenu_RetireCallback
+ .4byte SystemText_Player, StartMenu_PlayerLinkCallback
.align 2
gUnknown_08376D74:: @ 8376D74
diff --git a/data/specials.s b/data/specials.s
index 318534084..163fe7f7b 100644
--- a/data/specials.s
+++ b/data/specials.s
@@ -93,7 +93,7 @@ gSpecials::
.4byte sub_80C5044
.4byte sub_80C4FBC
.4byte sub_808363C
- .4byte sub_807166C
+ .4byte InitSaveDialog
.4byte sub_80C71C4
.4byte sub_80E60D8
.4byte sub_80EB7C4
diff --git a/data/text/save.s b/data/text/save.s
index 4f6f2a09a..c35432540 100644
--- a/data/text/save.s
+++ b/data/text/save.s
@@ -1,25 +1,25 @@
-gUnknown_081C6C85:: @ 81C6C85
+gSaveText_WouldYouLikeToSave:: @ 81C6C85
UnknownString_81C6C85: @ 81C6C85
.string "Would you like to save the game?$"
-gUnknown_081C6CA6:: @ 81C6CA6
+gSaveText_ThereIsAlreadyAFile:: @ 81C6CA6
UnknownString_81C6CA6: @ 81C6CA6
.string "There is already a saved file.\n"
.string "Is it okay to overwrite it?$"
-gUnknown_081C6CE1:: @ 81C6CE1
+gSaveText_DontTurnOff:: @ 81C6CE1
BattleTower_BattleRoom_Text_1C6CE1:: @ 81C6CE1
.string "SAVING...\n"
.string "DON’T TURN OFF THE POWER.$"
-gUnknown_081C6D05:: @ 81C6D05
+gSaveText_PlayerSavedTheGame:: @ 81C6D05
BattleTower_BattleRoom_Text_1C6D05:: @ 81C6D05
.string "{PLAYER} saved the game.$"
UnknownString_81C6D18: @ 81C6D18
.string "Save error...$"
-gUnknown_081C6D26:: @ 81C6D26
+gSaveText_ThereIsADifferentFile:: @ 81C6D26
UnknownString_81C6D26: @ 81C6D26
.string "There is a different game file that is\n"
.string "already saved.\p"
diff --git a/ld_script.txt b/ld_script.txt
index e9aec19af..eb1ad1128 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -65,6 +65,7 @@ SECTIONS {
src/script.o(.text);
src/scrcmd.o(.text);
asm/rom_8065394.o(.text);
+ src/start_menu.o(.text);
src/menu.o(.text);
asm/rom_8072DF8.o(.text);
src/palette.o(.text);
diff --git a/src/start_menu.c b/src/start_menu.c
new file mode 100644
index 000000000..35f8330cd
--- /dev/null
+++ b/src/start_menu.c
@@ -0,0 +1,885 @@
+#include "gba/gba.h"
+#include "global.h"
+#include "main.h"
+#include "menu.h"
+#include "palette.h"
+#include "script.h"
+#include "songs.h"
+#include "sound.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "task.h"
+
+//External functions
+extern void sub_8064E2C(void);
+extern void sub_8047A1C(void);
+extern u8 sub_8125E6C(void);
+extern void sub_8047A34(void);
+extern void sub_8125E2C(void);
+extern void remove_some_task(void);
+extern void dp12_8087EA4(void);
+extern void sav12_xor_increment(u8 index);
+extern bool8 sub_8125D44(u8); //Saving related
+extern void sub_80945C0(u8, u8);
+extern void sub_80946C8(u8, u8);
+extern void save_serialize_map(void);
+extern void play_some_sound(void);
+extern void sub_8093130(u8, void (*)(void));
+extern void sub_805469C(void);
+extern void sub_80C823C(void);
+extern void CB2_InitOptionMenu(void);
+extern void sub_8093110(void (*)(void));
+extern void sub_80EBA5C(void);
+extern void sub_80A53F8(void);
+extern void sub_8089A70(void);
+extern void sub_808C27C(void);
+extern u16 pokedex_count(u8);
+extern void fade_screen(u8, u8);
+extern bool32 is_c1_link_related_active();
+extern void sub_80594C0(void);
+extern void sub_80597F4(void);
+extern void player_bitmagic(void);
+extern bool32 GetSafariZoneFlag(void);
+extern u8 *sub_8072C44(u8 *, s32, u8, u8);
+extern u8 FlagGet(u16);
+extern bool32 is_c1_link_related_active(void);
+
+//Menu actions
+enum {
+ MENU_ACTION_POKEDEX,
+ MENU_ACTION_POKEMON,
+ MENU_ACTION_BAG,
+ MENU_ACTION_POKENAV,
+ MENU_ACTION_PLAYER,
+ MENU_ACTION_SAVE,
+ MENU_ACTION_OPTION,
+ MENU_ACTION_EXIT,
+ MENU_ACTION_RETIRE,
+ MENU_ACTION_PLAYER_LINK
+};
+
+struct MenuItem {
+ u8 *text;
+ u8 (*callback)(void);
+};
+
+extern u8 (*saveDialogCallback)(void);
+extern bool8 gUnknown_020297EC;
+extern u16 gSaveFileStatus;
+extern u8 gUnknown_030006AC;
+extern u16 gScriptResult;
+extern bool8 gUnknown_030006AD;
+extern u8 (*gCallback_03004AE8)(void);
+extern u8 gUnknown_03004860;
+extern struct MenuItem gStartMenuItems[];
+extern u8 gUnknown_02038808;
+
+EWRAM_DATA static u8 sStartMenuCursorPos = 0;
+EWRAM_DATA static u8 sNumStartMenuActions = 0;
+EWRAM_DATA static u8 sCurrentStartMenuActions[10] = {0};
+
+//Text strings
+extern u8 gSystemText_Saving[];
+extern u8 gSaveText_PlayerSavedTheGame[];
+extern u8 gSaveText_DontTurnOff[];
+extern u8 gSystemText_SaveErrorExchangeBackup[];
+extern u8 gSaveText_ThereIsAlreadyAFile[];
+extern u8 gSaveText_ThereIsADifferentFile[];
+extern u8 gSaveText_WouldYouLikeToSave[];
+extern u8 gOtherText_SafariStock[];
+
+//Public functions
+void CreateStartMenuTask(void (*func)(u8));
+void sub_80712B4(u8 taskId);
+void sub_8071310(void);
+u8 StartMenu_PokedexCallback(void);
+u8 StartMenu_PokemonCallback(void);
+u8 StartMenu_BagCallback(void);
+u8 StartMenu_PokenavCallback(void);
+u8 StartMenu_PlayerCallback(void);
+u8 StartMenu_SaveCallback(void);
+u8 StartMenu_OptionCallback(void);
+u8 StartMenu_ExitCallback(void);
+u8 StartMenu_RetireCallback(void);
+u8 StartMenu_PlayerLinkCallback(void);
+void InitSaveDialog(void);
+void sub_8071B28(void);
+void sub_8071C20(void);
+void AppendToList(u8 *list, u8 *pindex, u32 value);
+
+//Private functions
+static void BuildStartMenuActions(void);
+static void AddStartMenuAction(u8 action);
+static void BuildStartMenuActions_Normal(void);
+static void BuildStartMenuActions_SafariZone(void);
+static void BuildStartMenuActions_Link(void);
+static void DisplaySafariBallsWindow(void);
+static bool32 sub_8071114(s16 *a, u32 b);
+static bool32 sub_807117C(s16 *a, s16 *b);
+static void sub_8071230(void);
+static void Task_StartMenu(u8 taskId);
+static u8 Callback_8071338(void);
+static u8 SaveCallback1(void);
+static u8 SaveCallback2(void);
+static void sub_807160C(void);
+static u8 RunSaveDialogCallback(void);
+static void DisplaySaveMessageWithCallback(u8 *ptr, u8 (*func)(void));
+static void Task_SaveDialog(u8 taskId);
+static void sub_8071700(void);
+static void EraseSaveDialog(void);
+static void sub_8071724(void);
+static u8 sub_8071730(void);
+static u8 sub_8071764(void);
+static u8 sub_8071764(void);
+static u8 SaveDialogCB_8071794(void);
+static u8 SaveDialogCB_80717B8(void);
+static u8 SaveDialogCB_80717D8(void);
+static u8 SaveDialogCB_SaveFileExists(void);
+static u8 SaveDialogCB_DisplayOverwriteYesNoMenu(void);
+static u8 SaveDialogCB_ProcessOverwriteYesNoMenu(void);
+static u8 SaveDialogCB_SavingMessage(void);
+static u8 SaveDialogCB_DoSave(void);
+static u8 SaveDialogCB_SaveSuccess(void);
+static u8 SaveDialogCB_8071988(void);
+static u8 SaveDialogCB_80719AC(void);
+static u8 SaveDialogCB_80719D4(void);
+static void sub_80719F0(void);
+static bool32 sub_80719FC(u8 *ptr);
+static void sub_8071B54(void);
+static void Task_8071B64(u8 taskId);
+
+
+static void BuildStartMenuActions(void)
+{
+ sNumStartMenuActions = 0;
+ if(is_c1_link_related_active() == TRUE)
+ BuildStartMenuActions_Link();
+ else
+ {
+ if(GetSafariZoneFlag() == TRUE)
+ BuildStartMenuActions_SafariZone();
+ else
+ BuildStartMenuActions_Normal();
+ }
+}
+
+static void AddStartMenuAction(u8 action)
+{
+ AppendToList(sCurrentStartMenuActions, &sNumStartMenuActions, action);
+}
+
+static void BuildStartMenuActions_Normal(void)
+{
+ if(FlagGet(0x801) == TRUE)
+ AddStartMenuAction(MENU_ACTION_POKEDEX);
+ if(FlagGet(0x800) == TRUE)
+ AddStartMenuAction(MENU_ACTION_POKEMON);
+ AddStartMenuAction(MENU_ACTION_BAG);
+ if(FlagGet(0x802) == TRUE)
+ AddStartMenuAction(MENU_ACTION_POKENAV);
+ AddStartMenuAction(MENU_ACTION_PLAYER);
+ AddStartMenuAction(MENU_ACTION_SAVE);
+ AddStartMenuAction(MENU_ACTION_OPTION);
+ AddStartMenuAction(MENU_ACTION_EXIT);
+}
+
+static void BuildStartMenuActions_SafariZone(void)
+{
+ AddStartMenuAction(MENU_ACTION_RETIRE);
+ AddStartMenuAction(MENU_ACTION_POKEDEX);
+ AddStartMenuAction(MENU_ACTION_POKEMON);
+ AddStartMenuAction(MENU_ACTION_BAG);
+ AddStartMenuAction(MENU_ACTION_PLAYER);
+ AddStartMenuAction(MENU_ACTION_OPTION);
+ AddStartMenuAction(MENU_ACTION_EXIT);
+}
+
+static void BuildStartMenuActions_Link(void)
+{
+ AddStartMenuAction(MENU_ACTION_POKEMON);
+ AddStartMenuAction(MENU_ACTION_BAG);
+ if(FlagGet(0x802) == TRUE)
+ AddStartMenuAction(MENU_ACTION_POKENAV);
+ AddStartMenuAction(MENU_ACTION_PLAYER_LINK);
+ AddStartMenuAction(MENU_ACTION_OPTION);
+ AddStartMenuAction(MENU_ACTION_EXIT);
+}
+
+//Show number of safari balls left
+static void DisplaySafariBallsWindow(void)
+{
+ sub_8072C44(gStringVar1, gUnknown_02038808, 12, 1);
+ MenuDrawTextWindow(0, 0, 10, 5);
+ MenuPrint(gOtherText_SafariStock, 1, 1);
+}
+
+static bool32 sub_8071114(s16 *a, u32 b)
+{
+ s32 var = *a;
+
+ do
+ {
+ MenuPrint(gStartMenuItems[sCurrentStartMenuActions[var]].text,
+ 0x17, var * 2 + 2);
+ var++;
+ if(var >= sNumStartMenuActions)
+ {
+ *a = var;
+ return 1;
+ }
+ }
+ while(--b != 0);
+ *a = var;
+ return 0;
+}
+
+static bool32 sub_807117C(s16 *a, s16 *b)
+{
+ switch(*a)
+ {
+ case 1:
+ BuildStartMenuActions();
+ (*a)++;
+ break;
+ case 2:
+ MenuDrawTextWindow(22, 0, 29, sNumStartMenuActions * 2 + 3);
+ *b = 0;
+ (*a)++;
+ break;
+ case 3:
+ if(GetSafariZoneFlag())
+ DisplaySafariBallsWindow();
+ (*a)++;
+ break;
+ case 4:
+ if(sub_8071114(b, 2))
+ (*a)++;
+ break;
+ case 0:
+ (*a)++;
+ break;
+ case 5:
+ sStartMenuCursorPos = InitMenu(0, 0x17, 2, sNumStartMenuActions, sStartMenuCursorPos, 6);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void sub_8071230(void)
+{
+ s16 a = 0;
+ s16 b = 0;
+
+ while(sub_807117C(&a, &b) == FALSE)
+ ;
+}
+
+static void Task_StartMenu(u8 taskId)
+{
+ if(sub_807117C(gTasks[taskId].data, gTasks[taskId].data + 1) == TRUE)
+ {
+ *gTasks[taskId].data = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ }
+}
+
+void CreateStartMenuTask(void (*func)(u8))
+{
+ u8 taskId;
+
+ InitMenuWindow(&gWindowConfig_81E6CE4);
+ taskId = CreateTask(Task_StartMenu, 0x50);
+ SetTaskFuncWithFollowupFunc(taskId, Task_StartMenu, func);
+}
+
+struct MyTask {
+ TaskFunc func;
+ bool8 isActive;
+ u8 prev;
+ u8 next;
+ u8 priority;
+ s16 var1;
+};
+
+void sub_80712B4(u8 taskId)
+{
+ switch(((struct MyTask *)&gTasks[taskId])->var1)
+ {
+ case 0:
+ gCallback_03004AE8 = Callback_8071338;
+ ((struct MyTask *)&gTasks[taskId])->var1++;
+ break;
+ case 1:
+ if(gCallback_03004AE8() == 1)
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void sub_8071310(void)
+{
+ if(!is_c1_link_related_active())
+ {
+ player_bitmagic();
+ sub_80594C0();
+ sub_80597F4();
+ }
+ CreateStartMenuTask(sub_80712B4);
+ ScriptContext2_Enable();
+}
+
+static u8 Callback_8071338(void)
+{
+ if(gMain.newKeys & DPAD_UP)
+ {
+ PlaySE(SE_SELECT);
+ sStartMenuCursorPos = MoveMenuCursor(-1);
+ }
+ if(gMain.newKeys & DPAD_DOWN)
+ {
+ PlaySE(SE_SELECT);
+ sStartMenuCursorPos = MoveMenuCursor(1);
+ }
+ if(gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ if(gStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].callback == StartMenu_PokedexCallback)
+ {
+ if(pokedex_count(0) == 0)
+ return 0;
+ }
+ gCallback_03004AE8 = gStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].callback;
+ if(StartMenu_SaveCallback != gCallback_03004AE8 &&
+ StartMenu_ExitCallback != gCallback_03004AE8 &&
+ StartMenu_RetireCallback != gCallback_03004AE8)
+ fade_screen(1, 0);
+ return 0;
+ }
+ if(gMain.newKeys & (START_BUTTON | B_BUTTON))
+ {
+ sub_8071C20();
+ return 1;
+ }
+ return 0;
+}
+
+//When player selects POKEDEX
+u8 StartMenu_PokedexCallback(void)
+{
+ if(!gPaletteFade.active)
+ {
+ sav12_xor_increment(0x29);
+ play_some_sound();
+ SetMainCallback2(sub_808C27C);
+ return 1;
+ }
+ return 0;
+}
+
+//When player selects POKEMON
+u8 StartMenu_PokemonCallback(void)
+{
+ if(!gPaletteFade.active)
+ {
+ play_some_sound();
+ SetMainCallback2(sub_8089A70);
+ return 1;
+ }
+ return 0;
+}
+
+//When player selects BAG
+u8 StartMenu_BagCallback(void)
+{
+ if(!gPaletteFade.active)
+ {
+ play_some_sound();
+ SetMainCallback2(sub_80A53F8);
+ return 1;
+ }
+ return 0;
+}
+
+//When player selects POKENAV
+u8 StartMenu_PokenavCallback(void)
+{
+ if(!gPaletteFade.active)
+ {
+ play_some_sound();
+ SetMainCallback2(sub_80EBA5C);
+ return 1;
+ }
+ return 0;
+}
+
+//When player selects his/her name
+u8 StartMenu_PlayerCallback(void)
+{
+ if(!gPaletteFade.active)
+ {
+ play_some_sound();
+ sub_8093110(sub_805469C);
+ return 1;
+ }
+ return 0;
+}
+
+//When player selects SAVE
+u8 StartMenu_SaveCallback(void)
+{
+ sub_8072DEC();
+ gCallback_03004AE8 = SaveCallback1;
+ return 0;
+}
+
+//When player selects OPTION
+u8 StartMenu_OptionCallback(void)
+{
+ if(!gPaletteFade.active)
+ {
+ play_some_sound();
+ SetMainCallback2(CB2_InitOptionMenu);
+ gMain.field_8 = sub_805469C;
+ return 1;
+ }
+ return 0;
+}
+
+//When player selects EXIT
+u8 StartMenu_ExitCallback(void)
+{
+ sub_8071C20();
+ return 1;
+}
+
+//When player selects RETIRE
+u8 StartMenu_RetireCallback(void)
+{
+ sub_8071C20();
+ sub_80C823C();
+ return 1;
+}
+
+//When player selects their name in multiplayer mode
+u8 StartMenu_PlayerLinkCallback(void)
+{
+ if(!gPaletteFade.active)
+ {
+ play_some_sound();
+ sub_8093130(gUnknown_03004860, sub_805469C);
+ return 1;
+ }
+ return 0;
+}
+
+static u8 SaveCallback1(void)
+{
+ sub_807160C();
+ gCallback_03004AE8 = SaveCallback2;
+ return FALSE;
+}
+
+static u8 SaveCallback2(void)
+{
+ switch(RunSaveDialogCallback())
+ {
+ case 0:
+ return FALSE;
+ case 2:
+ MenuZeroFillScreen();
+ sub_8071230();
+ gCallback_03004AE8 = Callback_8071338;
+ return FALSE;
+ case 1:
+ case 3:
+ MenuZeroFillScreen();
+ sub_8064E2C();
+ ScriptContext2_Disable();
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void sub_807160C(void)
+{
+ save_serialize_map();
+ saveDialogCallback = SaveDialogCB_8071794;
+ gUnknown_030006AD = FALSE;
+}
+
+static u8 RunSaveDialogCallback(void)
+{
+ if(gUnknown_030006AD)
+ {
+ if(!MenuUpdateWindowText())
+ return 0;
+ }
+ gUnknown_030006AD = FALSE;
+ return saveDialogCallback();
+}
+
+void InitSaveDialog(void)
+{
+ sub_807160C();
+ CreateTask(Task_SaveDialog, 0x50);
+}
+
+static void DisplaySaveMessageWithCallback(u8 *ptr, u8 (*func)(void))
+{
+ StringExpandPlaceholders(gStringVar4, ptr);
+ MenuDisplayMessageBox();
+ sub_8072044(gStringVar4);
+ gUnknown_030006AD = TRUE;
+ saveDialogCallback = func;
+}
+
+static void Task_SaveDialog(u8 taskId)
+{
+ u8 b = RunSaveDialogCallback();
+
+ switch(b)
+ {
+ case 2:
+ case 3:
+ gScriptResult = 0;
+ break;
+ case 1:
+ gScriptResult = b;
+ break;
+ case 0:
+ return;
+ }
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+}
+
+static void sub_8071700(void)
+{
+ sub_80946C8(0, 0);
+}
+
+static void EraseSaveDialog(void)
+{
+ MenuZeroFillWindowRect(20, 8, 26, 13);
+}
+
+static void sub_8071724(void)
+{
+ gUnknown_030006AC = 0x3C;
+}
+
+
+static u8 sub_8071730(void)
+{
+ gUnknown_030006AC--;
+ if(!(gMain.heldKeys & 1))
+ {
+ if(gUnknown_030006AC)
+ return 0;
+ }
+ else
+ PlaySE(SE_SELECT);
+ return 1;
+}
+
+
+static u8 sub_8071764(void)
+{
+ if(gUnknown_030006AC == 0)
+ {
+ if(gMain.heldKeys & 1)
+ return 1;
+ }
+ else
+ gUnknown_030006AC--;
+ return 0;
+
+}
+
+static u8 SaveDialogCB_8071794(void)
+{
+ MenuZeroFillScreen();
+ sub_80945C0(0, 0);
+ //"Would you like to save the game?"
+ DisplaySaveMessageWithCallback(gSaveText_WouldYouLikeToSave, SaveDialogCB_80717B8);
+ return 0;
+}
+
+static u8 SaveDialogCB_80717B8(void)
+{
+ DisplayYesNoMenu(20, 8, 1);
+ saveDialogCallback = SaveDialogCB_80717D8;
+ return 0;
+}
+
+static u8 SaveDialogCB_80717D8(void)
+{
+ switch(ProcessMenuInputNoWrap_())
+ {
+ case 0: //YES
+ EraseSaveDialog();
+ switch(gSaveFileStatus)
+ {
+ case 0:
+ case 2:
+ if(gUnknown_020297EC == FALSE)
+ {
+ saveDialogCallback = SaveDialogCB_SaveFileExists;
+ return 0;
+ }
+ saveDialogCallback = SaveDialogCB_SavingMessage;
+ return 0;
+ default:
+ saveDialogCallback = SaveDialogCB_SaveFileExists;
+ return 0;
+ }
+ break;
+ case -1: //B button
+ case 1: //NO
+ EraseSaveDialog();
+ sub_8071700();
+ return 2;
+ }
+ return 0;
+}
+
+static u8 SaveDialogCB_SaveFileExists(void)
+{
+ DisplaySaveMessageWithCallback(
+ gUnknown_020297EC == TRUE ? gSaveText_ThereIsADifferentFile : gSaveText_ThereIsAlreadyAFile,
+ SaveDialogCB_DisplayOverwriteYesNoMenu);
+ return 0;
+}
+
+static u8 SaveDialogCB_DisplayOverwriteYesNoMenu(void)
+{
+ DisplayYesNoMenu(20, 8, 1);
+ saveDialogCallback = SaveDialogCB_ProcessOverwriteYesNoMenu;
+ return 0;
+}
+
+static u8 SaveDialogCB_ProcessOverwriteYesNoMenu(void)
+{
+ switch(ProcessMenuInputNoWrap_())
+ {
+ case 0: //YES
+ EraseSaveDialog();
+ saveDialogCallback = SaveDialogCB_SavingMessage;
+ break;
+ case -1: //B button
+ case 1: //NO
+ EraseSaveDialog();
+ sub_8071700();
+ return 2;
+ }
+ return 0;
+}
+
+static u8 SaveDialogCB_SavingMessage(void)
+{
+ //"SAVING... DON'T TURN OFF THE POWER."
+ DisplaySaveMessageWithCallback(gSaveText_DontTurnOff, SaveDialogCB_DoSave);
+ return 0;
+}
+
+static u8 SaveDialogCB_DoSave(void)
+{
+ u8 a;
+
+ sav12_xor_increment(0);
+ if(gUnknown_020297EC == TRUE)
+ {
+ a = sub_8125D44(4);
+ gUnknown_020297EC = FALSE;
+ }
+ else
+ {
+ a = sub_8125D44(0);
+ }
+
+ if(a == 1)
+ {
+ //"(Player) saved the game."
+ DisplaySaveMessageWithCallback(gSaveText_PlayerSavedTheGame, SaveDialogCB_SaveSuccess);
+ }
+ else
+ {
+ //"Save error. Please exchange the backup memory."
+ DisplaySaveMessageWithCallback(gSystemText_SaveErrorExchangeBackup, SaveDialogCB_80719AC);
+ }
+
+ sub_8071724();
+ return 0;
+}
+
+static u8 SaveDialogCB_SaveSuccess(void)
+{
+ if(MenuUpdateWindowText())
+ {
+ PlaySE(SE_SAVE);
+ saveDialogCallback = SaveDialogCB_8071988;
+ }
+ return 0;
+}
+
+static u8 SaveDialogCB_8071988(void)
+{
+ if(!IsSEPlaying() && sub_8071730())
+ {
+ sub_8071700();
+ return 1;
+ }
+ else
+ return 0;
+}
+
+static u8 SaveDialogCB_80719AC(void)
+{
+ if(MenuUpdateWindowText())
+ {
+ PlaySE(SE_BOO);
+ saveDialogCallback = SaveDialogCB_80719D4;
+ }
+ return 0;
+}
+
+static u8 SaveDialogCB_80719D4(void)
+{
+ if(!sub_8071764())
+ return 0;
+ else
+ {
+ sub_8071700();
+ return 3;
+ }
+}
+
+static void sub_80719F0(void)
+{
+ TransferPlttBuffer();
+}
+
+static bool32 sub_80719FC(u8 *ptr)
+{
+ switch(*ptr)
+ {
+ case 0:
+ {
+ u8 *addr;
+ u32 size;
+
+ REG_DISPCNT = 0;
+ SetVBlankCallback(NULL);
+ remove_some_task();
+ DmaClear16(3, PLTT, PLTT_SIZE);
+ addr = (void *)VRAM;
+ size = 0x18000;
+ while(1)
+ {
+ DmaFill16(3, 0, addr, 0x1000);
+ addr += 0x1000;
+ size -= 0x1000;
+ if(size <= 0x1000)
+ {
+ DmaFill16(3, 0, addr, size);
+ break;
+ }
+ }
+ break;
+ }
+ case 1:
+ ResetSpriteData();
+ ResetTasks();
+ ResetPaletteFade();
+ dp12_8087EA4();
+ break;
+ case 2:
+ SetUpWindowConfig(&gWindowConfig_81E6CE4);
+ InitMenuWindow(&gWindowConfig_81E6CE4);
+ REG_DISPCNT = 0x100;
+ break;
+ case 3:
+ {
+ u32 savedIme;
+
+ BlendPalettes(-1, 0x10, 0);
+ SetVBlankCallback(sub_80719F0);
+ savedIme = REG_IME;
+ REG_IME = 0;
+ REG_IE |= 1;
+ REG_IME = savedIme;
+ break;
+ }
+ case 4:
+ return TRUE;
+ }
+ (*ptr)++;
+ return FALSE;
+}
+
+void sub_8071B28(void)
+{
+ if(sub_80719FC(&gMain.state))
+ {
+ CreateTask(Task_8071B64, 0x50);
+ SetMainCallback2(sub_8071B54);
+ }
+}
+
+static void sub_8071B54(void)
+{
+ RunTasks();
+ UpdatePaletteFade();
+}
+
+static void Task_8071B64(u8 taskId)
+{
+ s16 *val = gTasks[taskId].data;
+
+ if(!gPaletteFade.active)
+ {
+ switch(*val)
+ {
+ case 0:
+ MenuDisplayMessageBox();
+ MenuPrint(gSystemText_Saving, 2, 15);
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
+ (*val)++;
+ break;
+ case 1:
+ sub_8047A1C();
+ sub_8125E2C();
+ (*val)++;
+ break;
+ case 2:
+ if(!sub_8125E6C())
+ break;
+ sub_8047A34();
+ (*val)++;
+ break;
+ case 3:
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ (*val)++;
+ break;
+ case 4:
+ SetMainCallback2(gMain.field_8);
+ DestroyTask(taskId);
+ break;
+ }
+ }
+}
+
+void sub_8071C20(void)
+{
+ PlaySE(SE_SELECT);
+ MenuZeroFillScreen();
+ sub_8064E2C();
+ ScriptContext2_Disable();
+ sub_8072DEC();
+}
+
+void AppendToList(u8 *list, u8 *pindex, u32 value)
+{
+ list[*pindex] = value;
+ (*pindex)++;
+}
diff --git a/sym_bss.txt b/sym_bss.txt
index 7947be078..30d3b10d0 100644
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -86,7 +86,7 @@ gUnknown_030005A6: @ 30005A6
.include "src/script.o"
.align 2
-gUnknown_030006A8: @ 30006A8
+saveDialogCallback: @ 30006A8
.space 0x4
gUnknown_030006AC: @ 30006AC
diff --git a/sym_common.txt b/sym_common.txt
index 2345f833c..983f9eaea 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -203,7 +203,7 @@ gSelectedMapObject: @ 3004AE0
gUnknown_03004AE4: @ 3004AE4
.space 0x4
-gUnknown_03004AE8: @ 3004AE8
+gCallback_03004AE8: @ 3004AE8
.space 0x4
gDisableMusic: @ 3004AEC
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 7b5b57589..5a2989119 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -466,14 +466,7 @@ gUnknown_0202E8F8: @ 202E8F8
gUnknown_0202E8FA: @ 202E8FA
.space 0x2
-gUnknown_0202E8FC: @ 202E8FC
- .space 0x1
-
-gUnknown_0202E8FD: @ 202E8FD
- .space 0x1
-
-gUnknown_0202E8FE: @ 202E8FE
- .space 0xA
+ .include "src/start_menu.o"
.include "src/menu.o"