summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-03-28 21:03:06 -0700
committerGitHub <noreply@github.com>2018-03-28 21:03:06 -0700
commitc3572de5bb5173b12a8aa5a0ddbfa766bf037c67 (patch)
tree92d522cdfc07fbb62712b3f16c657dc13762ff77
parent2ecbe252a29b9d58bfd2df82c01f94be7b69a7b0 (diff)
parent3f4c717d5cdc8eccd66fea3b4c8bcb7c827aeb34 (diff)
Merge pull request #232 from HrPeanut/start_menu
Start menu
-rw-r--r--asm/cable_club.s2
-rw-r--r--asm/field_control_avatar.s2
-rw-r--r--asm/map_name_popup.s2
-rw-r--r--asm/script_menu.s2
-rw-r--r--asm/start_menu.s2101
-rw-r--r--data/event_scripts.s2
-rw-r--r--data/rom_8011DC0.s6
-rw-r--r--data/scripts/maps/BattleFrontier_BattlePyramidEmptySquare.inc4
-rw-r--r--data/specials.inc2
-rw-r--r--data/strings.s6
-rw-r--r--data/text/save.inc12
-rw-r--r--include/event_scripts.h2
-rw-r--r--include/item_menu.h2
-rw-r--r--include/link.h1
-rw-r--r--include/load_save.h2
-rw-r--r--include/menu.h14
-rw-r--r--include/start_menu.h10
-rw-r--r--include/strings.h17
-rw-r--r--include/text.h6
-rw-r--r--ld_script.txt1
-rw-r--r--src/menu.c100
-rw-r--r--src/overworld.c4
-rw-r--r--src/start_menu.c1331
-rw-r--r--sym_common.txt2
24 files changed, 1353 insertions, 2280 deletions
diff --git a/asm/cable_club.s b/asm/cable_club.s
index 0bdda588e..e6fbd1886 100644
--- a/asm/cable_club.s
+++ b/asm/cable_club.s
@@ -1729,7 +1729,7 @@ _080B3248:
thumb_func_start sub_80B3254
sub_80B3254: @ 80B3254
push {lr}
- bl sub_809FF80
+ bl SaveGame
pop {r0}
bx r0
thumb_func_end sub_80B3254
diff --git a/asm/field_control_avatar.s b/asm/field_control_avatar.s
index c1c96272f..7e25c45da 100644
--- a/asm/field_control_avatar.s
+++ b/asm/field_control_avatar.s
@@ -326,7 +326,7 @@ _0809C13A:
beq _0809C15C
movs r0, 0x6
bl PlaySE
- bl sub_809FA9C
+ bl ShowStartMenu
_0809C14E:
movs r0, 0x1
b _0809C172
diff --git a/asm/map_name_popup.s b/asm/map_name_popup.s
index 76edd1f1f..d4775389a 100644
--- a/asm/map_name_popup.s
+++ b/asm/map_name_popup.s
@@ -8,7 +8,7 @@
thumb_func_start sub_80D47D4
sub_80D47D4: @ 80D47D4
push {lr}
- bl sub_80A0934
+ bl HideStartMenu
bl ShowMapNamePopup
movs r0, 0x1
pop {r1}
diff --git a/asm/script_menu.s b/asm/script_menu.s
index 7317317a3..0624dba83 100644
--- a/asm/script_menu.s
+++ b/asm/script_menu.s
@@ -836,7 +836,7 @@ _080E24C6:
adds r1, r4, 0
adds r2, r7, 0
movs r3, 0x11
- bl sub_819A024
+ bl PrintPlayerNameOnWindow
adds r0, r6, 0
mov r1, r8
movs r2, 0
diff --git a/asm/start_menu.s b/asm/start_menu.s
deleted file mode 100644
index 275d2124e..000000000
--- a/asm/start_menu.s
+++ /dev/null
@@ -1,2101 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start PrintStartMenuActions
-PrintStartMenuActions: @ 809F7C0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- mov r8, r0
- adds r6, r1, 0
- ldrb r2, [r0]
- ldr r0, =sStartMenuItems
- mov r9, r0
- ldr r1, =gStringVar4
- mov r10, r1
-_0809F7DA:
- ldr r0, =sCurrentStartMenuActions
- lsls r2, 24
- asrs r4, r2, 24
- adds r5, r4, r0
- ldrb r0, [r5]
- lsls r3, r0, 3
- mov r0, r9
- adds r0, 0x4
- adds r0, r3, r0
- ldr r1, [r0]
- ldr r0, =StartMenu_PlayerName
- adds r7, r2, 0
- cmp r1, r0
- bne _0809F828
- bl GetStartMenuWindowId
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r5]
- lsls r1, 3
- add r1, r9
- ldr r1, [r1]
- lsls r3, r4, 4
- adds r3, 0x9
- lsls r3, 16
- lsrs r3, 16
- movs r2, 0x8
- bl sub_819A024
- b _0809F858
- .pool
-_0809F828:
- mov r1, r9
- adds r0, r3, r1
- ldr r1, [r0]
- mov r0, r10
- bl StringExpandPlaceholders
- bl GetStartMenuWindowId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r4, 4
- adds r1, 0x9
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp]
- movs r1, 0xFF
- str r1, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x1
- mov r2, r10
- movs r3, 0x8
- bl PrintTextOnWindow
-_0809F858:
- movs r0, 0x80
- lsls r0, 17
- adds r1, r7, r0
- lsrs r2, r1, 24
- asrs r1, 24
- ldr r0, =sNumStartMenuActions
- ldrb r0, [r0]
- cmp r1, r0
- bge _0809F87C
- subs r6, 0x1
- cmp r6, 0
- bne _0809F7DA
- mov r1, r8
- strb r2, [r1]
- movs r0, 0
- b _0809F882
- .pool
-_0809F87C:
- mov r0, r8
- strb r2, [r0]
- movs r0, 0x1
-_0809F882:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end PrintStartMenuActions
-
- thumb_func_start sub_809F894
-sub_809F894: @ 809F894
- push {r4,lr}
- sub sp, 0xC
- ldr r0, =gUnknown_02037619
- movs r1, 0
- ldrsb r1, [r0, r1]
- adds r2, r0, 0
- cmp r1, 0x5
- bhi _0809F98C
- lsls r0, r1, 2
- ldr r1, =_0809F8B8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0809F8B8:
- .4byte _0809F8D0
- .4byte _0809F8D8
- .4byte _0809F8E4
- .4byte _0809F90C
- .4byte _0809F930
- .4byte _0809F94C
-_0809F8D0:
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
- b _0809F98C
-_0809F8D8:
- bl BuildStartMenuActions
- ldr r1, =gUnknown_02037619
- b _0809F940
- .pool
-_0809F8E4:
- bl sub_81973A4
- ldr r0, =sNumStartMenuActions
- ldrb r0, [r0]
- bl sub_81979C4
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl NewMenuHelpers_DrawStdWindowFrame
- ldr r1, =gUnknown_02037619
- movs r0, 0
- strb r0, [r1, 0x1]
- b _0809F940
- .pool
-_0809F90C:
- bl GetSafariZoneFlag
- cmp r0, 0
- beq _0809F918
- bl DisplaySafariBallsWindow
-_0809F918:
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- beq _0809F926
- bl DisplayPyramidFloorWindow
-_0809F926:
- ldr r1, =gUnknown_02037619
- b _0809F940
- .pool
-_0809F930:
- ldr r4, =gUnknown_02037619+1
- adds r0, r4, 0
- movs r1, 0x2
- bl PrintStartMenuActions
- cmp r0, 0
- beq _0809F98C
- subs r1, r4, 0x1
-_0809F940:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0809F98C
- .pool
-_0809F94C:
- bl GetStartMenuWindowId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x10
- str r1, [sp]
- ldr r1, =sNumStartMenuActions
- ldrb r1, [r1]
- str r1, [sp, 0x4]
- ldr r4, =sStartMenuCursorPos
- ldrb r1, [r4]
- str r1, [sp, 0x8]
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x9
- bl sub_81983AC
- strb r0, [r4]
- bl GetStartMenuWindowId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl CopyWindowToVram
- movs r0, 0x1
- b _0809F98E
- .pool
-_0809F98C:
- movs r0, 0
-_0809F98E:
- add sp, 0xC
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_809F894
-
- thumb_func_start sub_809F998
-sub_809F998: @ 809F998
- push {lr}
- ldr r1, =gUnknown_02037619
- movs r0, 0
- strb r0, [r1]
- strb r0, [r1, 0x1]
-_0809F9A2:
- bl sub_809F894
- cmp r0, 0
- beq _0809F9A2
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_809F998
-
- thumb_func_start task50_startmenu
-task50_startmenu: @ 809F9B4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_809F894
- cmp r0, 0x1
- bne _0809F9C8
- adds r0, r4, 0
- bl SwitchTaskToFollowupFunc
-_0809F9C8:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end task50_startmenu
-
- thumb_func_start sub_809F9D0
-sub_809F9D0: @ 809F9D0
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r1, =gUnknown_02037619
- movs r0, 0
- strb r0, [r1]
- strb r0, [r1, 0x1]
- ldr r4, =task50_startmenu
- 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
- .pool
- thumb_func_end sub_809F9D0
-
- thumb_func_start sub_809FA00
-sub_809FA00: @ 809FA00
- push {lr}
- bl sub_809F894
- cmp r0, 0
- beq _0809FA12
- bl sub_80AF688
- movs r0, 0x1
- b _0809FA14
-_0809FA12:
- movs r0, 0
-_0809FA14:
- pop {r1}
- bx r1
- thumb_func_end sub_809FA00
-
- thumb_func_start sub_809FA18
-sub_809FA18: @ 809FA18
- ldr r1, =gUnknown_02037619
- movs r0, 0
- strb r0, [r1]
- strb r0, [r1, 0x1]
- ldr r1, =gUnknown_03005DB0
- ldr r0, =sub_809FA00
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_809FA18
-
- thumb_func_start sub_809FA34
-sub_809FA34: @ 809FA34
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _0809FA58
- cmp r0, 0x1
- beq _0809FA7C
- b _0809FA92
- .pool
-_0809FA58:
- bl InUnionRoom
- cmp r0, 0x1
- bne _0809FA64
- bl var_800D_set_xB
-_0809FA64:
- ldr r1, =gUnknown_03005DF4
- ldr r0, =HandleStartMenuInput
- str r0, [r1]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _0809FA92
- .pool
-_0809FA7C:
- ldr r0, =gUnknown_03005DF4
- ldr r0, [r0]
- bl _call_via_r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0809FA92
- adds r0, r5, 0
- bl DestroyTask
-_0809FA92:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_809FA34
-
- thumb_func_start sub_809FA9C
-sub_809FA9C: @ 809FA9C
- push {lr}
- bl is_c1_link_related_active
- cmp r0, 0
- bne _0809FAB2
- bl FreezeMapObjects
- bl sub_808B864
- bl sub_808BCF4
-_0809FAB2:
- ldr r0, =sub_809FA34
- bl sub_809F9D0
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_809FA9C
-
- thumb_func_start HandleStartMenuInput
-HandleStartMenuInput: @ 809FAC4
- push {r4,lr}
- ldr r4, =gMain
- ldrh r1, [r4, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0809FAE4
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- bl MoveMenuCursor
- ldr r1, =sStartMenuCursorPos
- strb r0, [r1]
-_0809FAE4:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809FAFE
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- bl MoveMenuCursor
- ldr r1, =sStartMenuCursorPos
- strb r0, [r1]
-_0809FAFE:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0809FB98
- movs r0, 0x5
- bl PlaySE
- ldr r1, =sStartMenuItems
- ldr r2, =sCurrentStartMenuActions
- ldr r0, =sStartMenuCursorPos
- ldrb r0, [r0]
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r1, [r0]
- ldr r0, =StartMenu_Pokedex
- cmp r1, r0
- bne _0809FB34
- movs r0, 0
- bl GetNationalPokedexCount
- lsls r0, 16
- cmp r0, 0
- beq _0809FBA0
-_0809FB34:
- ldr r3, =gUnknown_03005DF4
- ldr r1, =sStartMenuItems
- ldr r2, =sCurrentStartMenuActions
- ldr r0, =sStartMenuCursorPos
- 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, =StartMenu_Save
- cmp r1, r0
- beq _0809FBA0
- ldr r0, =StartMenu_Exit
- cmp r1, r0
- beq _0809FBA0
- ldr r0, =StartMenu_SafariZoneRetire
- cmp r1, r0
- beq _0809FBA0
- ldr r0, =StartMenu_BattlePyramidRetire
- cmp r1, r0
- beq _0809FBA0
- movs r0, 0x1
- movs r1, 0
- bl FadeScreen
- b _0809FBA0
- .pool
-_0809FB98:
- movs r0, 0xA
- ands r0, r1
- cmp r0, 0
- bne _0809FBA4
-_0809FBA0:
- movs r0, 0
- b _0809FBAE
-_0809FBA4:
- bl RemoveExtraStartMenuWindows
- bl sub_80A0934
- movs r0, 0x1
-_0809FBAE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end HandleStartMenuInput
-
- thumb_func_start StartMenu_Pokedex
-StartMenu_Pokedex: @ 809FBB4
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809FBCC
- movs r0, 0
- b _0809FBE6
- .pool
-_0809FBCC:
- movs r0, 0x29
- bl IncrementGameStat
- bl play_some_sound
- bl RemoveExtraStartMenuWindows
- bl overworld_free_bg_tilemaps
- ldr r0, =sub_80BB534
- bl SetMainCallback2
- movs r0, 0x1
-_0809FBE6:
- pop {r1}
- bx r1
- .pool
- thumb_func_end StartMenu_Pokedex
-
- thumb_func_start StartMenu_Pokemon
-StartMenu_Pokemon: @ 809FBF0
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809FC08
- movs r0, 0
- b _0809FC1C
- .pool
-_0809FC08:
- bl play_some_sound
- bl RemoveExtraStartMenuWindows
- bl overworld_free_bg_tilemaps
- ldr r0, =CB2_PartyMenuFromStartMenu
- bl SetMainCallback2
- movs r0, 0x1
-_0809FC1C:
- pop {r1}
- bx r1
- .pool
- thumb_func_end StartMenu_Pokemon
-
- thumb_func_start StartMenu_Bag
-StartMenu_Bag: @ 809FC24
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809FC3C
- movs r0, 0
- b _0809FC50
- .pool
-_0809FC3C:
- bl play_some_sound
- bl RemoveExtraStartMenuWindows
- bl overworld_free_bg_tilemaps
- ldr r0, =CB2_BagMenuFromStartMenu
- bl SetMainCallback2
- movs r0, 0x1
-_0809FC50:
- pop {r1}
- bx r1
- .pool
- thumb_func_end StartMenu_Bag
-
- thumb_func_start StartMenu_PokeNav
-StartMenu_PokeNav: @ 809FC58
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809FC70
- movs r0, 0
- b _0809FC84
- .pool
-_0809FC70:
- bl play_some_sound
- bl RemoveExtraStartMenuWindows
- bl overworld_free_bg_tilemaps
- ldr r0, =CB2_PokeNav
- bl SetMainCallback2
- movs r0, 0x1
-_0809FC84:
- pop {r1}
- bx r1
- .pool
- thumb_func_end StartMenu_PokeNav
-
- thumb_func_start StartMenu_PlayerName
-StartMenu_PlayerName: @ 809FC8C
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0809FCF4
- bl play_some_sound
- bl RemoveExtraStartMenuWindows
- bl overworld_free_bg_tilemaps
- bl is_c1_link_related_active
- cmp r0, 0
- bne _0809FCB6
- bl InUnionRoom
- cmp r0, 0
- beq _0809FCC8
-_0809FCB6:
- ldr r0, =CB2_ReturnToFieldWithOpenMenu
- bl sub_80C4DDC
- b _0809FCEA
- .pool
-_0809FCC8:
- ldr r0, =0x000008d2
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0809FCE4
- ldr r0, =CB2_ReturnToFieldWithOpenMenu
- bl sub_80C51C4
- b _0809FCEA
- .pool
-_0809FCE4:
- ldr r0, =CB2_ReturnToFieldWithOpenMenu
- bl sub_80C4DDC
-_0809FCEA:
- movs r0, 0x1
- b _0809FCF6
- .pool
-_0809FCF4:
- movs r0, 0
-_0809FCF6:
- pop {r1}
- bx r1
- thumb_func_end StartMenu_PlayerName
-
- thumb_func_start StartMenu_Save
-StartMenu_Save: @ 809FCFC
- push {lr}
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- beq _0809FD0C
- bl RemoveExtraStartMenuWindows
-_0809FD0C:
- ldr r1, =gUnknown_03005DF4
- ldr r0, =sub_809FE28
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end StartMenu_Save
-
- thumb_func_start StartMenu_Option
-StartMenu_Option: @ 809FD20
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809FD38
- movs r0, 0
- b _0809FD52
- .pool
-_0809FD38:
- bl play_some_sound
- bl RemoveExtraStartMenuWindows
- bl overworld_free_bg_tilemaps
- ldr r0, =CB2_InitOptionMenu
- bl SetMainCallback2
- ldr r1, =gMain
- ldr r0, =CB2_ReturnToFieldWithOpenMenu
- str r0, [r1, 0x8]
- movs r0, 0x1
-_0809FD52:
- pop {r1}
- bx r1
- .pool
- thumb_func_end StartMenu_Option
-
- thumb_func_start StartMenu_Exit
-StartMenu_Exit: @ 809FD64
- push {lr}
- bl RemoveExtraStartMenuWindows
- bl sub_80A0934
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end StartMenu_Exit
-
- thumb_func_start StartMenu_SafariZoneRetire
-StartMenu_SafariZoneRetire: @ 809FD74
- push {lr}
- bl RemoveExtraStartMenuWindows
- bl sub_80A0934
- bl SafariZoneRetirePrompt
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end StartMenu_SafariZoneRetire
-
- thumb_func_start StartMenu_LinkModePlayerName
-StartMenu_LinkModePlayerName: @ 809FD88
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809FDA0
- movs r0, 0
- b _0809FDB4
- .pool
-_0809FDA0:
- bl play_some_sound
- bl overworld_free_bg_tilemaps
- ldr r0, =gUnknown_03005DB4
- ldrb r0, [r0]
- ldr r1, =CB2_ReturnToFieldWithOpenMenu
- bl sub_80C4E74
- movs r0, 0x1
-_0809FDB4:
- pop {r1}
- bx r1
- .pool
- thumb_func_end StartMenu_LinkModePlayerName
-
- thumb_func_start StartMenu_BattlePyramidRetire
-StartMenu_BattlePyramidRetire: @ 809FDC0
- ldr r1, =gUnknown_03005DF4
- ldr r0, =sub_809FE9C
- str r0, [r1]
- movs r0, 0
- bx lr
- .pool
- thumb_func_end StartMenu_BattlePyramidRetire
-
- thumb_func_start sub_809FDD4
-sub_809FDD4: @ 809FDD4
- push {lr}
- movs r0, 0
- movs r1, 0
- bl sub_8197DF8
- bl sub_80984F4
- ldr r0, =sub_809FA34
- bl sub_809F9D0
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_809FDD4
-
- thumb_func_start StartMenu_BattlePyramidBag
-StartMenu_BattlePyramidBag: @ 809FDF4
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809FE0C
- movs r0, 0
- b _0809FE20
- .pool
-_0809FE0C:
- bl play_some_sound
- bl RemoveExtraStartMenuWindows
- bl overworld_free_bg_tilemaps
- ldr r0, =sub_81C4EFC
- bl SetMainCallback2
- movs r0, 0x1
-_0809FE20:
- pop {r1}
- bx r1
- .pool
- thumb_func_end StartMenu_BattlePyramidBag
-
- thumb_func_start sub_809FE28
-sub_809FE28: @ 809FE28
- push {lr}
- bl sub_809FF28
- ldr r1, =gUnknown_03005DF4
- ldr r0, =sub_809FE44
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_809FE28
-
- thumb_func_start sub_809FE44
-sub_809FE44: @ 809FE44
- push {lr}
- bl sub_809FF4C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0809FE7C
- cmp r0, 0x1
- ble _0809FE94
- cmp r0, 0x2
- beq _0809FE60
- cmp r0, 0x3
- beq _0809FE7C
- b _0809FE94
-_0809FE60:
- movs r0, 0
- movs r1, 0
- bl sub_8197DF8
- bl sub_809F998
- ldr r1, =gUnknown_03005DF4
- ldr r0, =HandleStartMenuInput
- str r0, [r1]
- b _0809FE94
- .pool
-_0809FE7C:
- movs r0, 0
- movs r1, 0x1
- bl sub_8197DF8
- bl sub_80984F4
- bl ScriptContext2_Disable
- bl sub_81A9EC8
- movs r0, 0x1
- b _0809FE96
-_0809FE94:
- movs r0, 0
-_0809FE96:
- pop {r1}
- bx r1
- thumb_func_end sub_809FE44
-
- thumb_func_start sub_809FE9C
-sub_809FE9C: @ 809FE9C
- push {lr}
- bl sub_80A0340
- ldr r1, =gUnknown_03005DF4
- ldr r0, =sub_809FED4
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_809FE9C
-
- thumb_func_start sub_809FEB8
-sub_809FEB8: @ 809FEB8
- push {lr}
- bl sub_809F998
- ldr r1, =gUnknown_03005DF4
- ldr r0, =HandleStartMenuInput
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_809FEB8
-
- thumb_func_start sub_809FED4
-sub_809FED4: @ 809FED4
- push {lr}
- bl sub_809FF4C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0809FEEC
- cmp r0, 0x1
- ble _0809FF20
- cmp r0, 0x2
- beq _0809FF00
- b _0809FF20
-_0809FEEC:
- bl RemoveExtraStartMenuWindows
- ldr r1, =gUnknown_03005DF4
- ldr r0, =sub_809FEB8
- str r0, [r1]
- b _0809FF20
- .pool
-_0809FF00:
- movs r0, 0
- movs r1, 0x1
- bl sub_8197DF8
- bl sub_80984F4
- bl ScriptContext2_Disable
- ldr r0, =BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88
- bl ScriptContext1_SetupScript
- movs r0, 0x1
- b _0809FF22
- .pool
-_0809FF20:
- movs r0, 0
-_0809FF22:
- pop {r1}
- bx r1
- thumb_func_end sub_809FED4
-
- thumb_func_start sub_809FF28
-sub_809FF28: @ 809FF28
- push {lr}
- bl save_serialize_map
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A00A0
- str r0, [r1]
- ldr r1, =gUnknown_02037621
- movs r0, 0
- strb r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_809FF28
-
- thumb_func_start sub_809FF4C
-sub_809FF4C: @ 809FF4C
- push {lr}
- bl sub_8197224
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- beq _0809FF78
- ldr r1, =gUnknown_02037621
- movs r0, 0
- strb r0, [r1]
- ldr r0, =gUnknown_0203761C
- ldr r0, [r0]
- bl _call_via_r0
- lsls r0, 24
- lsrs r0, 24
- b _0809FF7A
- .pool
-_0809FF78:
- movs r0, 0
-_0809FF7A:
- pop {r1}
- bx r1
- thumb_func_end sub_809FF4C
-
- thumb_func_start sub_809FF80
-sub_809FF80: @ 809FF80
- push {lr}
- bl sub_809FF28
- ldr r0, =task50_save_game
- movs r1, 0x50
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_809FF80
-
- thumb_func_start sub_809FF98
-sub_809FF98: @ 809FF98
- push {r4,lr}
- adds r2, r0, 0
- adds r4, r1, 0
- ldr r0, =gStringVar4
- adds r1, r2, 0
- bl StringExpandPlaceholders
- movs r0, 0
- movs r1, 0x1
- bl sub_819786C
- movs r0, 0x1
- bl AddTextPrinterForMessage_2
- ldr r1, =gUnknown_02037621
- movs r0, 0x1
- strb r0, [r1]
- ldr r0, =gUnknown_0203761C
- str r4, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_809FF98
-
- thumb_func_start task50_save_game
-task50_save_game: @ 809FFD0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_809FF4C
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x1
- beq _0809FFFC
- cmp r1, 0x1
- bgt _0809FFEC
- cmp r1, 0
- beq _080A000A
- b _080A0000
-_0809FFEC:
- cmp r1, 0x3
- bgt _080A0000
- ldr r1, =gSpecialVar_Result
- movs r0, 0
- strh r0, [r1]
- b _080A0000
- .pool
-_0809FFFC:
- ldr r0, =gSpecialVar_Result
- strh r1, [r0]
-_080A0000:
- adds r0, r4, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_080A000A:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task50_save_game
-
- thumb_func_start sub_80A0014
-sub_80A0014: @ 80A0014
- push {lr}
- movs r0, 0
- movs r1, 0x1
- bl sub_8197434
- pop {r0}
- bx r0
- thumb_func_end sub_80A0014
-
- thumb_func_start sub_80A0024
-sub_80A0024: @ 80A0024
- push {lr}
- bl sub_80A0888
- pop {r0}
- bx r0
- thumb_func_end sub_80A0024
-
- thumb_func_start sub_80A0030
-sub_80A0030: @ 80A0030
- ldr r1, =gUnknown_02037620
- movs r0, 0x3C
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_80A0030
-
- thumb_func_start sub_80A003C
-sub_80A003C: @ 80A003C
- push {lr}
- ldr r1, =gUnknown_02037620
- ldrb r0, [r1]
- subs r2, r0, 0x1
- strb r2, [r1]
- ldr r0, =gMain
- ldrh r1, [r0, 0x2C]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080A0064
- lsls r0, r2, 24
- cmp r0, 0
- beq _080A006A
- movs r0, 0
- b _080A006C
- .pool
-_080A0064:
- movs r0, 0x5
- bl PlaySE
-_080A006A:
- movs r0, 0x1
-_080A006C:
- pop {r1}
- bx r1
- thumb_func_end sub_80A003C
-
- thumb_func_start sub_80A0070
-sub_80A0070: @ 80A0070
- push {lr}
- ldr r1, =gUnknown_02037620
- ldrb r0, [r1]
- cmp r0, 0
- bne _080A0094
- ldr r0, =gMain
- ldrh r1, [r0, 0x2C]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080A0098
- movs r0, 0x1
- b _080A009A
- .pool
-_080A0094:
- subs r0, 0x1
- strb r0, [r1]
-_080A0098:
- movs r0, 0
-_080A009A:
- pop {r1}
- bx r1
- thumb_func_end sub_80A0070
-
- thumb_func_start sub_80A00A0
-sub_80A00A0: @ 80A00A0
- push {lr}
- bl GetStartMenuWindowId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl sub_819746C
- bl remove_start_menu_window_maybe
- bl sub_80A06B4
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- beq _080A00D4
- ldr r0, =BattleFrontier_BattlePyramidEmptySquare_Text_252CA7
- ldr r1, =sub_80A00EC
- bl sub_809FF98
- b _080A00DC
- .pool
-_080A00D4:
- ldr r0, =gUnknown_082C87B4
- ldr r1, =sub_80A00EC
- bl sub_809FF98
-_080A00DC:
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A00A0
-
- thumb_func_start sub_80A00EC
-sub_80A00EC: @ 80A00EC
- push {lr}
- bl sub_8197930
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A0108
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A00EC
-
- thumb_func_start sub_80A0108
-sub_80A0108: @ 80A0108
- push {lr}
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _080A012A
- cmp r1, 0
- bgt _080A0124
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _080A0168
- b _080A0174
-_080A0124:
- cmp r1, 0x1
- beq _080A0168
- b _080A0174
-_080A012A:
- ldr r0, =gSaveFileStatus
- ldrh r0, [r0]
- cmp r0, 0
- beq _080A0136
- cmp r0, 0x2
- bne _080A013E
-_080A0136:
- ldr r0, =gDifferentSaveFile
- ldrb r0, [r0]
- cmp r0, 0
- bne _080A0158
-_080A013E:
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A017C
- str r0, [r1]
- b _080A0174
- .pool
-_080A0158:
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A0234
- str r0, [r1]
- b _080A0174
- .pool
-_080A0168:
- bl sub_80A0024
- bl sub_80A0014
- movs r0, 0x2
- b _080A0176
-_080A0174:
- movs r0, 0
-_080A0176:
- pop {r1}
- bx r1
- thumb_func_end sub_80A0108
-
- thumb_func_start sub_80A017C
-sub_80A017C: @ 80A017C
- push {lr}
- ldr r0, =gDifferentSaveFile
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080A019C
- ldr r0, =gUnknown_082C8845
- ldr r1, =sub_80A01B4
- bl sub_809FF98
- b _080A01A4
- .pool
-_080A019C:
- ldr r0, =gUnknown_082C87D5
- ldr r1, =sub_80A01D0
- bl sub_809FF98
-_080A01A4:
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A017C
-
- thumb_func_start sub_80A01B4
-sub_80A01B4: @ 80A01B4
- push {lr}
- movs r0, 0x1
- bl sub_8197948
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A01EC
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A01B4
-
- thumb_func_start sub_80A01D0
-sub_80A01D0: @ 80A01D0
- push {lr}
- bl sub_8197930
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A01EC
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A01D0
-
- thumb_func_start sub_80A01EC
-sub_80A01EC: @ 80A01EC
- push {lr}
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _080A020E
- cmp r1, 0
- bgt _080A0208
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _080A0220
- b _080A022C
-_080A0208:
- cmp r1, 0x1
- beq _080A0220
- b _080A022C
-_080A020E:
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A0234
- str r0, [r1]
- b _080A022C
- .pool
-_080A0220:
- bl sub_80A0024
- bl sub_80A0014
- movs r0, 0x2
- b _080A022E
-_080A022C:
- movs r0, 0
-_080A022E:
- pop {r1}
- bx r1
- thumb_func_end sub_80A01EC
-
- thumb_func_start sub_80A0234
-sub_80A0234: @ 80A0234
- push {lr}
- ldr r0, =gUnknown_082C8810
- ldr r1, =sub_80A024C
- bl sub_809FF98
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A0234
-
- thumb_func_start sub_80A024C
-sub_80A024C: @ 80A024C
- push {r4,lr}
- movs r0, 0
- bl IncrementGameStat
- bl sub_81A9E90
- ldr r4, =gDifferentSaveFile
- ldrb r0, [r4]
- cmp r0, 0x1
- bne _080A0274
- movs r0, 0x4
- bl TrySavingData
- lsls r0, 24
- lsrs r1, r0, 24
- movs r0, 0
- strb r0, [r4]
- b _080A027E
- .pool
-_080A0274:
- movs r0, 0
- bl TrySavingData
- lsls r0, 24
- lsrs r1, r0, 24
-_080A027E:
- cmp r1, 0x1
- bne _080A0294
- ldr r0, =gUnknown_082C8832
- ldr r1, =sub_80A02B0
- bl sub_809FF98
- b _080A029C
- .pool
-_080A0294:
- ldr r0, =gUnknown_082C892A
- ldr r1, =sub_80A02FC
- bl sub_809FF98
-_080A029C:
- bl sub_80A0030
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A024C
-
- thumb_func_start sub_80A02B0
-sub_80A02B0: @ 80A02B0
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080A02CA
- movs r0, 0x37
- bl PlaySE
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A02D8
- str r0, [r1]
-_080A02CA:
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A02B0
-
- thumb_func_start sub_80A02D8
-sub_80A02D8: @ 80A02D8
- push {lr}
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080A02F6
- bl sub_80A003C
- lsls r0, 24
- cmp r0, 0
- beq _080A02F6
- bl sub_80A0024
- movs r0, 0x1
- b _080A02F8
-_080A02F6:
- movs r0, 0
-_080A02F8:
- pop {r1}
- bx r1
- thumb_func_end sub_80A02D8
-
- thumb_func_start sub_80A02FC
-sub_80A02FC: @ 80A02FC
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080A0316
- movs r0, 0x16
- bl PlaySE
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A0324
- str r0, [r1]
-_080A0316:
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A02FC
-
- thumb_func_start sub_80A0324
-sub_80A0324: @ 80A0324
- push {lr}
- bl sub_80A0070
- lsls r0, 24
- cmp r0, 0
- beq _080A0338
- bl sub_80A0024
- movs r0, 0x3
- b _080A033A
-_080A0338:
- movs r0, 0
-_080A033A:
- pop {r1}
- bx r1
- thumb_func_end sub_80A0324
-
- thumb_func_start sub_80A0340
-sub_80A0340: @ 80A0340
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A035C
- str r0, [r1]
- ldr r1, =gUnknown_02037621
- movs r0, 0
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_80A0340
-
- thumb_func_start sub_80A035C
-sub_80A035C: @ 80A035C
- push {lr}
- bl GetStartMenuWindowId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl sub_819746C
- bl remove_start_menu_window_maybe
- ldr r0, =BattleFrontier_BattlePyramidEmptySquare_Text_252CFB
- ldr r1, =sub_80A0388
- bl sub_809FF98
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A035C
-
- thumb_func_start sub_80A0388
-sub_80A0388: @ 80A0388
- push {lr}
- movs r0, 0x1
- bl sub_8197948
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A03A4
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A0388
-
- thumb_func_start sub_80A03A4
-sub_80A03A4: @ 80A03A4
- push {lr}
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _080A03C6
- cmp r1, 0
- bgt _080A03C0
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _080A03CA
- b _080A03D2
-_080A03C0:
- cmp r1, 0x1
- beq _080A03CA
- b _080A03D2
-_080A03C6:
- movs r0, 0x2
- b _080A03D4
-_080A03CA:
- bl sub_80A0014
- movs r0, 0x1
- b _080A03D4
-_080A03D2:
- movs r0, 0
-_080A03D4:
- pop {r1}
- bx r1
- thumb_func_end sub_80A03A4
-
- thumb_func_start sub_80A03D8
-sub_80A03D8: @ 80A03D8
- push {lr}
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_80A03D8
-
- thumb_func_start sub_80A03E4
-sub_80A03E4: @ 80A03E4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- mov r8, r0
- ldrb r0, [r0]
- cmp r0, 0x4
- bls _080A03F6
- b _080A04FC
-_080A03F6:
- lsls r0, 2
- ldr r1, =_080A0404
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080A0404:
- .4byte _080A0418
- .4byte _080A0490
- .4byte _080A04A2
- .4byte _080A04D4
- .4byte _080A04F8
-_080A0418:
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0
- bl SetVBlankCallback
- bl ScanlineEffect_Stop
- movs r2, 0xA0
- lsls r2, 19
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r1, =0x040000d4
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- ldr r0, =0x81000200
- 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, =0x81000800
- movs r0, 0x81
- lsls r0, 24
- mov r12, r0
-_080A045A:
- 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 _080A045A
- 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 _080A04FC
- .pool
-_080A0490:
- bl ResetSpriteData
- bl ResetTasks
- bl ResetPaletteFade
- bl ScanlineEffect_Clear
- b _080A04FC
-_080A04A2:
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, =gUnknown_085105A8
- movs r0, 0
- movs r2, 0x1
- bl InitBgsFromTemplates
- ldr r0, =gUnknown_085105AC
- bl InitWindows
- movs r0, 0
- movs r1, 0x8
- movs r2, 0xE0
- bl box_border_load_tiles_and_pal
- movs r0, 0xF0
- bl sub_81978B0
- b _080A04FC
- .pool
-_080A04D4:
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- ldr r0, =sub_80A03D8
- bl SetVBlankCallback
- movs r0, 0x1
- bl EnableInterrupts
- b _080A04FC
- .pool
-_080A04F8:
- movs r0, 0x1
- b _080A0506
-_080A04FC:
- mov r1, r8
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- movs r0, 0
-_080A0506:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80A03E4
-
- thumb_func_start sub_80A0514
-sub_80A0514: @ 80A0514
- push {lr}
- ldr r0, =gMain+0x438
- bl sub_80A03E4
- cmp r0, 0
- beq _080A052E
- ldr r0, =sub_80A0550
- movs r1, 0x50
- bl CreateTask
- ldr r0, =sub_80A0540
- bl SetMainCallback2
-_080A052E:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A0514
-
- thumb_func_start sub_80A0540
-sub_80A0540: @ 80A0540
- push {lr}
- bl RunTasks
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_80A0540
-
- thumb_func_start sub_80A0550
-sub_80A0550: @ 80A0550
- push {r4-r6,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r5, r0, r1
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080A0570
- b _080A06A8
-_080A0570:
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0x6
- bls _080A057A
- b _080A06A8
-_080A057A:
- lsls r0, 2
- ldr r1, =_080A0590
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080A0590:
- .4byte _080A05AC
- .4byte _080A0630
- .4byte _080A063C
- .4byte _080A065C
- .4byte _080A0670
- .4byte _080A0688
- .4byte _080A0698
-_080A05AC:
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r2, =gText_SavingDontTurnOffPower
- movs r4, 0
- str r4, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r6, 0x1
- str r6, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x1
- movs r3, 0xFF
- bl AddTextPrinterParameterized
- movs r0, 0
- movs r1, 0x8
- movs r2, 0xE
- bl sub_8098858
- movs r0, 0
- bl PutWindowTilemap
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- movs r0, 0x1
- negs r0, r0
- str r4, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _080A0620
- bl InUnionRoom
- cmp r0, 0
- beq _080A0620
- bl sub_800A07C
- cmp r0, 0
- beq _080A061C
- strh r6, [r5]
- b _080A06A8
- .pool
-_080A061C:
- movs r0, 0x5
- b _080A06A6
-_080A0620:
- ldr r0, =gSoftResetDisabled
- movs r1, 0x1
- strb r1, [r0]
- movs r0, 0x1
- b _080A06A6
- .pool
-_080A0630:
- bl sub_8076D5C
- bl sub_8153430
- movs r0, 0x2
- b _080A06A6
-_080A063C:
- bl sub_8153474
- lsls r0, 24
- cmp r0, 0
- beq _080A06A8
- bl sav2_gender2_inplace_and_xFE
- movs r0, 0x3
- strh r0, [r5]
- ldr r1, =gSoftResetDisabled
- movs r0, 0
- strb r0, [r1]
- b _080A06A8
- .pool
-_080A065C:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- movs r0, 0x4
- b _080A06A6
-_080A0670:
- bl FreeAllWindowBuffers
- ldr r0, =gMain
- ldr r0, [r0, 0x8]
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
- b _080A06A8
- .pool
-_080A0688:
- ldr r0, =sub_8153688
- movs r1, 0x5
- bl CreateTask
- movs r0, 0x6
- b _080A06A6
- .pool
-_080A0698:
- ldr r0, =sub_8153688
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _080A06A8
- movs r0, 0x3
-_080A06A6:
- strh r0, [r5]
-_080A06A8:
- add sp, 0x10
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A0550
-
- thumb_func_start sub_80A06B4
-sub_80A06B4: @ 80A06B4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- ldr r0, =gUnknown_085105BC
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp, 0xC]
- str r1, [sp, 0x10]
- ldr r0, =0x00000861
- mov r10, r0
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _080A06EC
- add r0, sp, 0xC
- ldrb r1, [r0, 0x4]
- subs r1, 0x2
- lsls r1, 24
- lsrs r1, 24
- ldr r2, =0xffffff00
- ldr r0, [sp, 0x10]
- ands r0, r2
- orrs r0, r1
- str r0, [sp, 0x10]
-_080A06EC:
- ldr r6, =gUnknown_02037622
- add r0, sp, 0xC
- bl AddWindow
- strb r0, [r6]
- ldrb r0, [r6]
- movs r1, 0
- bl NewMenuHelpers_DrawStdWindowFrame
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- movs r1, 0x4
- mov r9, r1
- cmp r0, 0
- bne _080A0710
- movs r0, 0x8
- mov r9, r0
-_080A0710:
- movs r4, 0x1
- ldr r5, =gStringVar4
- movs r0, 0x3
- adds r1, r5, 0
- movs r2, 0x6
- bl sub_819A344
- ldrb r0, [r6]
- str r4, [sp]
- movs r1, 0xFF
- mov r8, r1
- str r1, [sp, 0x4]
- movs r7, 0
- str r7, [sp, 0x8]
- movs r1, 0x1
- adds r2, r5, 0
- movs r3, 0
- bl PrintTextOnWindow
- movs r4, 0x11
- ldrb r0, [r6]
- ldr r2, =gText_SavingPlayer
- str r4, [sp]
- mov r1, r8
- str r1, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- movs r3, 0
- bl PrintTextOnWindow
- movs r0, 0
- adds r1, r5, 0
- mov r2, r9
- bl sub_819A344
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0x70
- bl GetStringRightAlignXOffset
- adds r2, r0, 0
- ldrb r0, [r6]
- lsls r2, 16
- lsrs r2, 16
- adds r1, r5, 0
- movs r3, 0x11
- bl sub_819A024
- movs r4, 0x21
- ldrb r0, [r6]
- ldr r2, =gText_SavingBadges
- str r4, [sp]
- mov r1, r8
- str r1, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- movs r3, 0
- bl PrintTextOnWindow
- movs r0, 0x4
- adds r1, r5, 0
- mov r2, r9
- bl sub_819A344
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0x70
- bl GetStringRightAlignXOffset
- adds r2, r0, 0
- ldrb r0, [r6]
- lsls r3, r2, 24
- lsrs r3, 24
- str r4, [sp]
- mov r1, r8
- str r1, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- adds r2, r5, 0
- bl PrintTextOnWindow
- mov r0, r10
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080A0802
- movs r4, 0x31
- ldrb r0, [r6]
- ldr r2, =gText_SavingPokedex
- str r4, [sp]
- mov r1, r8
- str r1, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- movs r3, 0
- bl PrintTextOnWindow
- movs r0, 0x1
- adds r1, r5, 0
- mov r2, r9
- bl sub_819A344
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0x70
- bl GetStringRightAlignXOffset
- adds r2, r0, 0
- ldrb r0, [r6]
- lsls r3, r2, 24
- lsrs r3, 24
- str r4, [sp]
- mov r1, r8
- str r1, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- adds r2, r5, 0
- bl PrintTextOnWindow
-_080A0802:
- adds r4, 0x10
- ldrb r0, [r6]
- ldr r2, =gText_SavingTime
- lsls r4, 24
- lsrs r4, 24
- str r4, [sp]
- mov r1, r8
- str r1, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- movs r3, 0
- bl PrintTextOnWindow
- movs r0, 0x2
- adds r1, r5, 0
- mov r2, r9
- bl sub_819A344
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0x70
- bl GetStringRightAlignXOffset
- adds r2, r0, 0
- ldrb r0, [r6]
- lsls r3, r2, 24
- lsrs r3, 24
- str r4, [sp]
- mov r1, r8
- str r1, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- adds r2, r5, 0
- bl PrintTextOnWindow
- ldrb r0, [r6]
- movs r1, 0x2
- bl CopyWindowToVram
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A06B4
-
- thumb_func_start sub_80A0888
-sub_80A0888: @ 80A0888
- push {r4,lr}
- ldr r4, =gUnknown_02037622
- ldrb r0, [r4]
- movs r1, 0
- bl sub_819746C
- ldrb r0, [r4]
- bl RemoveWindow
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A0888
-
- thumb_func_start sub_80A08A4
-sub_80A08A4: @ 80A08A4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =sub_8153688
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _080A08C0
- adds r0, r4, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_080A08C0:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A08A4
-
- thumb_func_start sub_80A08CC
-sub_80A08CC: @ 80A08CC
- push {r4,r5,lr}
- ldr r0, =sub_8153688
- movs r1, 0x5
- bl CreateTask
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r5
- movs r1, 0x1
- strh r1, [r0, 0xC]
- ldr r0, =sub_80A08A4
- movs r1, 0x6
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- strh r4, [r1, 0xA]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A08CC
-
- thumb_func_start sub_80A0914
-sub_80A0914: @ 80A0914
- push {lr}
- bl GetStartMenuWindowId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_819746C
- bl remove_start_menu_window_maybe
- bl sub_80984F4
- bl ScriptContext2_Disable
- pop {r0}
- bx r0
- thumb_func_end sub_80A0914
-
- thumb_func_start sub_80A0934
-sub_80A0934: @ 80A0934
- push {lr}
- movs r0, 0x5
- bl PlaySE
- bl sub_80A0914
- pop {r0}
- bx r0
- thumb_func_end sub_80A0934
-
- thumb_func_start AppendToList
-AppendToList: @ 80A0944
- ldrb r3, [r1]
- adds r0, r3
- strb r2, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- bx lr
- thumb_func_end AppendToList
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/event_scripts.s b/data/event_scripts.s
index 42c5aa1ad..f4e6b1086 100644
--- a/data/event_scripts.s
+++ b/data/event_scripts.s
@@ -835,7 +835,7 @@ SlateportCity_BattleTentLobby_EventScript_27134F:: @ 827134F
SootopolisCity_MysteryEventsHouse_1F_EventScript_27134F:: @ 827134F
TrainerHill_Entrance_EventScript_27134F:: @ 827134F
VerdanturfTown_BattleTentLobby_EventScript_27134F:: @ 827134F
- special sub_809FF80
+ special SaveGame
waitstate
return
diff --git a/data/rom_8011DC0.s b/data/rom_8011DC0.s
index df212a640..bcc7dcd1b 100644
--- a/data/rom_8011DC0.s
+++ b/data/rom_8011DC0.s
@@ -2506,13 +2506,13 @@ gUnknown_082F2D40:: @ 82F2D40
.4byte gText_RegisteredTextChanged
.byte 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00
- .4byte gText_AlreadySavedFile
+ .4byte gText_AlreadySavedFile_Unused
.byte 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00
- .4byte gText_SavingDontTurnOff
+ .4byte gText_SavingDontTurnOff_Unused
.byte 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00
- .4byte gText_PlayerSavedGame
+ .4byte gText_PlayerSavedGame_Unused
.byte 0x02, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00
.4byte gText_IfLeaderLeavesChatEnds
diff --git a/data/scripts/maps/BattleFrontier_BattlePyramidEmptySquare.inc b/data/scripts/maps/BattleFrontier_BattlePyramidEmptySquare.inc
index c2b70944b..b7dc59257 100644
--- a/data/scripts/maps/BattleFrontier_BattlePyramidEmptySquare.inc
+++ b/data/scripts/maps/BattleFrontier_BattlePyramidEmptySquare.inc
@@ -180,12 +180,12 @@ BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88:: @ 8252C88
BattleFrontier_BattlePyramidEmptySquare_Text_252C8D: @ 8252C8D
.string "This is a sample message.$"
-BattleFrontier_BattlePyramidEmptySquare_Text_252CA7:: @ 8252CA7
+gText_BattlePyramidConfirmRest:: @ 8252CA7
.string "Your BATTLE PYRAMID quest will be\n"
.string "saved so that you may quit for now.\l"
.string "Is that okay?$"
-BattleFrontier_BattlePyramidEmptySquare_Text_252CFB:: @ 8252CFB
+gText_BattlePyramidConfirmRetire:: @ 8252CFB
.string "Are you sure you want to quit your\n"
.string "PYRAMID quest?$"
diff --git a/data/specials.inc b/data/specials.inc
index 62dd9717e..6c6c1b7be 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -104,7 +104,7 @@ gSpecials:: @ 81DBA64
def_special sub_80F8D24
def_special sub_80F8C7C
def_special sub_80B3000
- def_special sub_809FF80
+ def_special SaveGame
def_special sub_80FAFF8
def_special easy_chat_input_maybe
def_special sub_811EECC
diff --git a/data/strings.s b/data/strings.s
index 75b430dd1..ace85665c 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -3704,13 +3704,13 @@ gText_LeaderLeftEndingChat:: @ 85ED2FA
gText_RegisteredTextChanged:: @ 85ED325
.string "The registered text has been changed.\nIs it okay to save the game?$"
-gText_AlreadySavedFile:: @ 85ED368
+gText_AlreadySavedFile_Unused:: @ 85ED368
.string "There is already a saved file.\nIs it okay to overwrite it?$"
-gText_SavingDontTurnOff:: @ 85ED3A3
+gText_SavingDontTurnOff_Unused:: @ 85ED3A3
.string "SAVING…\nDON’T TURN OFF THE POWER.$"
-gText_PlayerSavedGame:: @ 85ED3C5
+gText_PlayerSavedGame_Unused:: @ 85ED3C5
.string "{SPECIAL_F7 0x00} saved the game.$"
gText_IfLeaderLeavesChatEnds:: @ 85ED3D8
diff --git a/data/text/save.inc b/data/text/save.inc
index d909489ac..b252d61eb 100644
--- a/data/text/save.inc
+++ b/data/text/save.inc
@@ -1,18 +1,18 @@
-gUnknown_082C87B4:: @ 82C87B4
+gText_ConfirmSave:: @ 82C87B4
.string "Would you like to save the game?$"
-gUnknown_082C87D5:: @ 82C87D5
+gText_AlreadySavedFile:: @ 82C87D5
.string "There is already a saved file.\n"
.string "Is it okay to overwrite it?$"
-gUnknown_082C8810:: @ 82C8810
+gText_SavingDontTurnOff:: @ 82C8810
.string "SAVING…\n"
.string "DON’T TURN OFF THE POWER.$"
-gUnknown_082C8832:: @ 82C8832
+gText_PlayerSavedGame:: @ 82C8832
.string "{PLAYER} saved the game.$"
-gUnknown_082C8845:: @ 82C8845
+gText_DifferentSaveFile:: @ 82C8845
.string "WARNING!\p"
.string "There is a different game file that\n"
.string "is already saved.\p"
@@ -22,7 +22,7 @@ gUnknown_082C8845:: @ 82C8845
.string "Are you sure you want to save now\n"
.string "and overwrite the other save file?$"
-gUnknown_082C892A:: @ 82C892A
+gText_SaveError:: @ 82C892A
.string "Save error.\p"
.string "Please exchange the\n"
.string "backup memory.$"
diff --git a/include/event_scripts.h b/include/event_scripts.h
index 4c5dfd544..ba137cf3b 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -382,6 +382,8 @@ extern const u8 SecretBase_RedCave1_Text_2751E1[];
extern const u8 SecretBase_RedCave1_Text_2754F6[];
extern const u8 SecretBase_RedCave1_Text_2758CC[];
+extern const u8 BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88[];
+
//field effects
extern const u8 FieryPath_EventScript_2908FD[];
extern const u8 EventScript_290CAE[];
diff --git a/include/item_menu.h b/include/item_menu.h
index 9cffaa6c7..e49aeb861 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -55,4 +55,6 @@ void sub_81AAC50(void);
void sub_81AAC70(void);
void bag_menu_mail_related(void);
+void CB2_BagMenuFromStartMenu(void);
+
#endif //GUARD_item_menu_H
diff --git a/include/link.h b/include/link.h
index 0fa4d39c2..051370897 100644
--- a/include/link.h
+++ b/include/link.h
@@ -257,6 +257,7 @@ void sub_800AAF4(void);
void sub_800AF18(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
void sub_800B348(void);
void sub_800B3A4(u32 who);
+bool32 sub_800A07C(void);
extern u16 gLinkPartnersHeldKeys[6];
extern u32 gLinkDebugSeed;
diff --git a/include/load_save.h b/include/load_save.h
index 92c99fd90..460cdf6f3 100644
--- a/include/load_save.h
+++ b/include/load_save.h
@@ -21,5 +21,7 @@ void LoadSerializedGame(void);
void LoadPlayerBag(void);
void SavePlayerBag(void);
void SetSaveBlocksPointers(u16);
+void sub_8076D5C(void);
+void sav2_gender2_inplace_and_xFE(void);
#endif // GUARD_LOAD_SAVE_H
diff --git a/include/menu.h b/include/menu.h
index c2f15422a..cec2f018d 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -1,3 +1,4 @@
+
#ifndef GUARD_MENU_H
#define GUARD_MENU_H
@@ -27,8 +28,9 @@ void NewMenuHelpers_DrawDialogueFrame(u8, u8);
void sub_819746C(u8 windowId, bool8 copyToVram);
void NewMenuHelpers_DrawStdWindowFrame(u8, u8);
u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 speed, void (*callback)(struct TextSubPrinter *, u16), u8 fgColor, u8 bgColor, u8 shadowColor);
+void PrintPlayerNameOnWindow(u8, const u8*, u16, u16);
void DisplayItemMessageOnField(u8 taskId, const u8 *src, TaskFunc callback);
-void sub_8197434(u8 a0, u8 a1);
+void sub_8197434(u8 windowId, bool8 copyToVram);
void SetStandardWindowBorderStyle(u8 a0, u8 a1);
void sub_8197930(void);
u8 GetPlayerTextSpeed(void);
@@ -67,6 +69,16 @@ void AddItemMenuActionTextPrinters (u8, u8, u8, u8, u8, u8, u8, const struct Men
void sub_8198DBC(u8, u8, u8, u8, u8, u8, u8, const struct MenuAction*, const u8*);
u8 sub_8199944(u8, u8, u8, u8, u8);
u8 sub_8199134(s8, s8);
+u8 GetStartMenuWindowId(void);
void sub_819A2BC(u8, u8);
+u8 MoveMenuCursor(s8 cursorDelta);
+void NewMenuHelpers_DrawStdWindowFrame(u8 windowId, bool8 CopyToVram);
+u8 sub_81979C4(u8 a1);
+u8 sub_81983AC(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numChoices, u8 initialCursorPos);
+void sub_819786C(u8 windowId, bool8 copyToVram);
+void AddTextPrinterForMessage_2(bool8 allowSkippingDelayWithButtonPress);
+void RemoveStartMenuWindow(void);
+void sub_8197948(u8 initialCursorPos);
+void sub_819A344(u8 a0, u8 *dest, u8 color);
#endif // GUARD_MENU_H
diff --git a/include/start_menu.h b/include/start_menu.h
index 6c7cb3237..5551b149d 100644
--- a/include/start_menu.h
+++ b/include/start_menu.h
@@ -1,6 +1,16 @@
#ifndef GUARD_START_MENU_H
#define GUARD_START_MENU_H
+extern bool8 (*gMenuCallback)(void); // Defined in sym_common.txt
+
+void sub_809FA18(void);
+void sub_809FA34(u8 taskId);
+void ShowStartMenu(void);
+void sub_809FDD4(void);
+void SaveGame(void);
+void sub_80A0514(void);
+void sub_80A08CC(void);
+void HideStartMenu(void);
void AppendToList(u8* list, u8* pos, u8 newEntry);
#endif // GUARD_START_MENU_H
diff --git a/include/strings.h b/include/strings.h
index ceb994900..cb76279f8 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -197,6 +197,23 @@ extern const u8 gText_Peak[];
extern const u8 gText_SafariBallStock[];
extern const u8 gText_BattlePyramidFloor[];
+// save menu texts
+extern const u8 gText_ConfirmSave[];
+extern const u8 gText_DifferentSaveFile[];
+extern const u8 gText_AlreadySavedFile[];
+extern const u8 gText_SavingDontTurnOff[];
+extern const u8 gText_PlayerSavedGame[];
+extern const u8 gText_SaveError[];
+extern const u8 gText_SavingDontTurnOffPower[];
+extern const u8 gText_SavingPlayer[];
+extern const u8 gText_SavingBadges[];
+extern const u8 gText_SavingPokedex[];
+extern const u8 gText_SavingTime[];
+
+// Battle pyramid menu texts
+extern const u8 gText_BattlePyramidConfirmRest[];
+extern const u8 gText_BattlePyramidConfirmRetire[];
+
// option menu texts
extern const u8 gText_TextSpeedSlow[];
extern const u8 gText_TextSpeedMid[];
diff --git a/include/text.h b/include/text.h
index 81c066426..2566b51b7 100644
--- a/include/text.h
+++ b/include/text.h
@@ -82,6 +82,12 @@
#define TEXT_COLOR_TRANSPARENT 0x0
#define TEXT_COLOR_WHITE 0x1
#define TEXT_COLOR_DARK_GREY 0x2
+// 0x3
+#define TEXT_COLOR_RED 0x4
+// 0x5
+#define TEXT_COLOR_GREEN 0x6
+// 0x7
+#define TEXT_COLOR_BLUE 0x8
// battle placeholders are located in battle_message.h
diff --git a/ld_script.txt b/ld_script.txt
index 7ead2a863..aeb739376 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -107,7 +107,6 @@ SECTIONS {
src/clock.o(.text);
src/reset_rtc_screen.o(.text);
src/start_menu.o(.text);
- asm/start_menu.o(.text);
src/tileset_anims.o(.text);
src/palette.o(.text);
src/sound.o(.text);
diff --git a/src/menu.c b/src/menu.c
index b20ab5164..0aaf2d186 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -25,11 +25,11 @@
#define STD_WINDOW_PALETTE_NUM 14
#define STD_WINDOW_BASE_TILE_NUM 0x214
-struct SomeUnkStruct_60F0D4
+struct MoveMenuInfoIcon
{
- u8 unk1;
- u8 unk2;
- u16 unk3;
+ u8 width;
+ u8 height;
+ u16 offset;
};
struct Menu
@@ -48,7 +48,7 @@ struct Menu
bool8 APressMuted;
};
-static EWRAM_DATA u8 gUnknown_0203CD8C = 0;
+static EWRAM_DATA u8 gStartMenuWindowId = 0;
static EWRAM_DATA u8 gUnknown_0203CD8D = 0;
static EWRAM_DATA struct Menu gUnknown_0203CD90 = {0};
static EWRAM_DATA u16 gUnknown_0203CD9C = 0;
@@ -76,34 +76,36 @@ static const struct WindowTemplate gUnknown_0860F0A8 =
const u16 gUnknown_0860F0B0[] = INCBIN_U16("graphics/interface/860F0B0.gbapal");
const u8 gUnknown_0860F0D0[] = { 15, 1, 2 };
-const struct SomeUnkStruct_60F0D4 gUnknown_0860F0D4[] =
-{
- { 12, 12, 0x00 },
- { 32, 12, 0x20 },
- { 32, 12, 0x64 },
- { 32, 12, 0x60 },
- { 32, 12, 0x80 },
- { 32, 12, 0x48 },
- { 32, 12, 0x44 },
- { 32, 12, 0x6C },
- { 32, 12, 0x68 },
- { 32, 12, 0x88 },
- { 32, 12, 0xA4 },
- { 32, 12, 0x24 },
- { 32, 12, 0x28 },
- { 32, 12, 0x2C },
- { 32, 12, 0x40 },
- { 32, 12, 0x84 },
- { 32, 12, 0x4C },
- { 32, 12, 0xA0 },
- { 32, 12, 0x8C },
- { 42, 12, 0xA8 },
- { 42, 12, 0xC0 },
- { 42, 12, 0xC8 },
- { 42, 12, 0xE0 },
- { 42, 12, 0xE8 },
- { 8, 8, 0xAE },
- { 8, 8, 0xAF },
+
+// Table of move info icon offsets in graphics/interface_fr/menu.png
+const struct MoveMenuInfoIcon gMoveMenuInfoIcons[] =
+{ // { width, height, offset }
+ { 12, 12, 0x00 }, // Unused
+ { 32, 12, 0x20 }, // Normal icon
+ { 32, 12, 0x64 }, // Fight icon
+ { 32, 12, 0x60 }, // Flying icon
+ { 32, 12, 0x80 }, // Poison icon
+ { 32, 12, 0x48 }, // Ground icon
+ { 32, 12, 0x44 }, // Rock icon
+ { 32, 12, 0x6C }, // Bug icon
+ { 32, 12, 0x68 }, // Ghost icon
+ { 32, 12, 0x88 }, // Steel icon
+ { 32, 12, 0xA4 }, // ??? (Mystery) icon
+ { 32, 12, 0x24 }, // Fire icon
+ { 32, 12, 0x28 }, // Water icon
+ { 32, 12, 0x2C }, // Grass icon
+ { 32, 12, 0x40 }, // Electric icon
+ { 32, 12, 0x84 }, // Psychic icon
+ { 32, 12, 0x4C }, // Ice icon
+ { 32, 12, 0xA0 }, // Dragon icon
+ { 32, 12, 0x8C }, // Dark icon
+ { 42, 12, 0xA8 }, // -Type- icon
+ { 42, 12, 0xC0 }, // -Power- icon
+ { 42, 12, 0xC8 }, // -Accuracy- icon
+ { 42, 12, 0xE0 }, // -PP- icon
+ { 42, 12, 0xE8 }, // -Effect- icon
+ { 8, 8, 0xAE }, // Unused (Small white pokeball)
+ { 8, 8, 0xAF }, // Unused (Small dark pokeball)
};
// Forward declarations
@@ -125,7 +127,7 @@ extern void task_free_buf_after_copying_tile_data_to_vram(u8 taskId);
void sub_81971D0(void)
{
InitWindows(gUnknown_0860F098);
- gUnknown_0203CD8C = 0xFF;
+ gStartMenuWindowId = 0xFF;
gUnknown_0203CD8D = 0xFF;
}
@@ -471,22 +473,22 @@ u8 GetPlayerTextSpeed(void)
u8 sub_81979C4(u8 a1)
{
- if (gUnknown_0203CD8C == 0xFF)
- gUnknown_0203CD8C = sub_8198AA4(0, 0x16, 1, 7, (a1 * 2) + 2, 0xF, 0x139);
- return gUnknown_0203CD8C;
+ if (gStartMenuWindowId == 0xFF)
+ gStartMenuWindowId = sub_8198AA4(0, 0x16, 1, 7, (a1 * 2) + 2, 0xF, 0x139);
+ return gStartMenuWindowId;
}
u8 GetStartMenuWindowId(void)
{
- return gUnknown_0203CD8C;
+ return gStartMenuWindowId;
}
-void remove_start_menu_window_maybe(void)
+void RemoveStartMenuWindow(void)
{
- if (gUnknown_0203CD8C != 0xFF)
+ if (gStartMenuWindowId != 0xFF)
{
- RemoveWindow(gUnknown_0203CD8C);
- gUnknown_0203CD8C = 0xFF;
+ RemoveWindow(gStartMenuWindowId);
+ gStartMenuWindowId = 0xFF;
}
}
@@ -1988,7 +1990,7 @@ void sub_8199F74(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 spee
AddTextPrinter(&printer, speed, callback);
}
-void sub_819A024(u8 windowId, const u8 *src, u16 a2, u16 a3)
+void PrintPlayerNameOnWindow(u8 windowId, const u8 *src, u16 x, u16 y)
{
int count = 0;
while (gSaveBlock2Ptr->playerName[count] != EOS)
@@ -1996,7 +1998,7 @@ void sub_819A024(u8 windowId, const u8 *src, u16 a2, u16 a3)
StringExpandPlaceholders(gStringVar4, src);
- PrintTextOnWindow(windowId, 1, gStringVar4, a2, a3, 0xFF, 0);
+ PrintTextOnWindow(windowId, 1, gStringVar4, x, y, 0xFF, 0);
}
//Screw this function, it's long and unreferenced and ugh
@@ -2364,22 +2366,22 @@ void sub_819A2BC(u8 palOffset, u8 palId)
void blit_move_info_icon(u8 windowId, u8 iconId, u16 x, u16 y)
{
- BlitBitmapRectToWindow(windowId, gFireRedMenuElements_Gfx + gUnknown_0860F0D4[iconId].unk3 * 32, 0, 0, 128, 128, x, y, gUnknown_0860F0D4[iconId].unk1, gUnknown_0860F0D4[iconId].unk2);
+ BlitBitmapRectToWindow(windowId, gFireRedMenuElements_Gfx + gMoveMenuInfoIcons[iconId].offset * 32, 0, 0, 128, 128, x, y, gMoveMenuInfoIcons[iconId].width, gMoveMenuInfoIcons[iconId].height);
}
-void sub_819A344(u8 a0, u8 *a1, u8 a2)
+void sub_819A344(u8 a0, u8 *dest, u8 color)
{
s32 curFlag;
s32 flagCount;
u8 *endOfString;
- u8 *string = a1;
+ u8 *string = dest;
*(string++) = EXT_CTRL_CODE_BEGIN;
*(string++) = EXT_CTRL_CODE_COLOR;
- *(string++) = a2;
+ *(string++) = color;
*(string++) = EXT_CTRL_CODE_BEGIN;
*(string++) = EXT_CTRL_CODE_SHADOW;
- *(string++) = a2 + 1;
+ *(string++) = color + 1;
switch (a0)
{
diff --git a/src/overworld.c b/src/overworld.c
index 6ee338cb8..920f6f8f1 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -161,7 +161,7 @@ extern void FieldEffectActiveListClear(void);
extern void SetUpFieldTasks(void);
extern void sub_81BE6B8(void);
extern void sub_80AAFA4(void);
-extern void sub_809FA9C(void);
+extern void ShowStartMenu(void);
extern void sub_80AEE84(void);
extern void mapldr_default(void);
extern void npc_paltag_set_load(u8);
@@ -2795,7 +2795,7 @@ static void sub_8087510(void)
static void sub_808751C(void)
{
PlaySE(SE_WIN_OPEN);
- sub_809FA9C();
+ ShowStartMenu();
ScriptContext2_Enable();
}
diff --git a/src/start_menu.c b/src/start_menu.c
index d076d307d..c248ca86b 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -8,6 +8,31 @@
#include "text.h"
#include "strings.h"
#include "bg.h"
+#include "field_effect.h"
+#include "task.h"
+#include "overworld.h"
+#include "link.h"
+#include "battle_frontier_2.h"
+#include "rom_818CFC8.h"
+#include "field_specials.h"
+#include "field_map_obj_helpers.h"
+#include "script.h"
+#include "main.h"
+#include "sound.h"
+#include "pokedex.h"
+#include "field_weather.h"
+#include "palette.h"
+#include "item_menu.h"
+#include "option_menu.h"
+#include "event_scripts.h"
+#include "save.h"
+#include "gpu_regs.h"
+#include "scanline_effect.h"
+#include "text_window.h"
+#include "load_save.h"
+#include "international_string_util.h"
+#include "constants/songs.h"
+#include "field_player_avatar.h"
// Menu actions
enum
@@ -27,49 +52,99 @@ enum
MENU_ACTION_PYRAMID_BAG
};
-extern bool32 is_c1_link_related_active(void);
-extern bool32 InUnionRoom(void);
-extern bool8 InBattlePike(void);
-extern bool8 InBattlePyramid(void);
-extern bool8 InMultiBattleRoom(void);
-extern void NewMenuHelpers_DrawStdWindowFrame(u8 windowId, u8 a1);
-extern void sub_8198070(u8 windowId, u8 a1);
-
-// this file's functions
-static void BuildStartMenuActions_LinkMode(void);
-static void BuildStartMenuActions_UnionRoom(void);
-static void BuildStartMenuActions_SafariZone(void);
-static void BuildStartMenuActions_BattlePike(void);
-static void BuildStartMenuActions_BattlePyramid(void);
-static void BuildStartMenuActions_MultiBattleRoom(void);
-static void BuildStartMenuActions_Normal(void);
-bool8 StartMenu_Pokedex(void);
-bool8 StartMenu_Pokemon(void);
-bool8 StartMenu_Bag(void);
-bool8 StartMenu_PokeNav(void);
-bool8 StartMenu_PlayerName(void);
-bool8 StartMenu_Save(void);
-bool8 StartMenu_Option(void);
-bool8 StartMenu_Exit(void);
-bool8 StartMenu_SafariZoneRetire(void);
-bool8 StartMenu_LinkModePlayerName(void);
-bool8 StartMenu_BattlePyramidRetire(void);
-bool8 StartMenu_BattlePyramidBag(void);
-
-// EWRAM vars
-EWRAM_DATA u8 sSafariBallsWindowId = 0;
-EWRAM_DATA u8 sBattlePyramidFloorWindowId = 0;
-EWRAM_DATA u8 sStartMenuCursorPos = 0;
-EWRAM_DATA u8 sNumStartMenuActions = 0;
-EWRAM_DATA u8 sCurrentStartMenuActions[9] = {0};
-EWRAM_DATA u8 gUnknown_02037619[2] = {0};
-EWRAM_DATA bool8 (*gUnknown_0203761C)(void) = NULL;
-EWRAM_DATA u8 gUnknown_02037620 = 0;
-EWRAM_DATA u8 gUnknown_02037621 = 0;
-EWRAM_DATA u8 gUnknown_02037622 = 0;
-
-// const rom data
-static const struct WindowTemplate gSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8};
+// Save status
+enum
+{
+ SAVE_IN_PROGRESS,
+ SAVE_SUCCESS,
+ SAVE_CANCELED,
+ SAVE_ERROR
+};
+
+EWRAM_DATA static u8 sSafariBallsWindowId = 0;
+EWRAM_DATA static u8 sBattlePyramidFloorWindowId = 0;
+EWRAM_DATA static u8 sStartMenuCursorPos = 0;
+EWRAM_DATA static u8 sNumStartMenuActions = 0;
+EWRAM_DATA static u8 sCurrentStartMenuActions[9] = {0};
+EWRAM_DATA static u8 sUnknown_02037619[2] = {0};
+
+EWRAM_DATA static u8 (*sSaveDialogCallback)(void) = NULL;
+EWRAM_DATA static u8 sSaveDialogTimer = 0;
+EWRAM_DATA static bool8 sSavingComplete = FALSE;
+EWRAM_DATA static u8 sSaveInfoWindowId = 0;
+
+// Extern variables
+extern u8 gDifferentSaveFile;
+extern u16 gSaveFileStatus;
+extern u8 gUnknown_03005DB4;
+
+// Extern functions in uncompiled files
+extern void sub_80AF688(void);
+extern void var_800D_set_xB(void);
+extern void sub_808B864(void);
+extern void sub_80BB534(void);
+extern void play_some_sound(void);
+extern void CB2_PartyMenuFromStartMenu(void);
+extern void CB2_PokeNav(void);
+extern void sub_80C4DDC(void (*)(void));
+extern void sub_80C51C4(void (*)(void));
+extern void sub_80C4E74(u8, void (*)(void));
+extern void sub_81C4EFC(void);
+extern void sub_80984F4(void);
+extern void sub_81A9EC8(void);
+extern void save_serialize_map(void);
+extern void sub_81A9E90(void);
+
+// Menu action callbacks
+static bool8 StartMenuPokedexCallback(void);
+static bool8 StartMenuPokemonCallback(void);
+static bool8 StartMenuBagCallback(void);
+static bool8 StartMenuPokeNavCallback(void);
+static bool8 StartMenuPlayerNameCallback(void);
+static bool8 StartMenuSaveCallback(void);
+static bool8 StartMenuOptionCallback(void);
+static bool8 StartMenuExitCallback(void);
+static bool8 StartMenuSafariZoneRetireCallback(void);
+static bool8 StartMenuLinkModePlayerNameCallback(void);
+static bool8 StartMenuBattlePyramidRetireCallback(void);
+static bool8 StartMenuBattlePyramidBagCallback(void);
+
+// Menu callbacks
+static bool8 SaveStartCallback(void);
+static bool8 SaveCallback(void);
+static bool8 BattlePyramidRetireStartCallback(void);
+static bool8 BattlePyramidRetireReturnCallback(void);
+static bool8 BattlePyramidRetireCallback(void);
+static bool8 HandleStartMenuInput(void);
+
+// Save dialog callbacks
+static u8 SaveConfirmSaveCallback(void);
+static u8 SaveYesNoCallback(void);
+static u8 SaveConfirmInputCallback(void);
+static u8 SaveFileExistsCallback(void);
+static u8 SaveConfirmOverwriteNoCallback(void);
+static u8 SaveConfirmOverwriteCallback(void);
+static u8 SaveOverwriteInputCallback(void);
+static u8 SaveSavingMessageCallback(void);
+static u8 SaveDoSaveCallback(void);
+static u8 SaveSuccessCallback(void);
+static u8 SaveReturnSuccessCallback(void);
+static u8 SaveErrorCallback(void);
+static u8 SaveReturnErrorCallback(void);
+static u8 BattlePyramidConfirmRetireCallback(void);
+static u8 BattlePyramidRetireYesNoCallback(void);
+static u8 BattlePyramidRetireInputCallback(void);
+
+// Task callbacks
+static void StartMenuTask(u8 taskId);
+static void SaveGameTask(u8 taskId);
+static void sub_80A0550(u8 taskId);
+static void sub_80A08A4(u8 taskId);
+
+// Some other callback
+static bool8 sub_809FA00(void);
+
+static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8};
static const u8* const sPyramindFloorNames[] =
{
@@ -83,27 +158,27 @@ static const u8* const sPyramindFloorNames[] =
gText_Peak
};
-static const struct WindowTemplate gPyramidFloorWindowTemplate_2 = {0, 1, 1, 0xA, 4, 0xF, 8};
-static const struct WindowTemplate gPyramidFloorWindowTemplate_1 = {0, 1, 1, 0xC, 4, 0xF, 8};
-
-const struct MenuAction sStartMenuItems[] =
-{
- {gText_MenuPokedex, {.u8_void = StartMenu_Pokedex}},
- {gText_MenuPokemon, {.u8_void = StartMenu_Pokemon}},
- {gText_MenuBag, {.u8_void = StartMenu_Bag}},
- {gText_MenuPokenav, {.u8_void = StartMenu_PokeNav}},
- {gText_MenuPlayer, {.u8_void = StartMenu_PlayerName}},
- {gText_MenuSave, {.u8_void = StartMenu_Save}},
- {gText_MenuOption, {.u8_void = StartMenu_Option}},
- {gText_MenuExit, {.u8_void = StartMenu_Exit}},
- {gText_MenuRetire, {.u8_void = StartMenu_SafariZoneRetire}},
- {gText_MenuPlayer, {.u8_void = StartMenu_LinkModePlayerName}},
- {gText_MenuRest, {.u8_void = StartMenu_Save}},
- {gText_MenuRetire, {.u8_void = StartMenu_BattlePyramidRetire}},
- {gText_MenuBag, {.u8_void = StartMenu_BattlePyramidBag}}
+static const struct WindowTemplate sPyramidFloorWindowTemplate_2 = {0, 1, 1, 0xA, 4, 0xF, 8};
+static const struct WindowTemplate sPyramidFloorWindowTemplate_1 = {0, 1, 1, 0xC, 4, 0xF, 8};
+
+static const struct MenuAction sStartMenuItems[] =
+{
+ {gText_MenuPokedex, {.u8_void = StartMenuPokedexCallback}},
+ {gText_MenuPokemon, {.u8_void = StartMenuPokemonCallback}},
+ {gText_MenuBag, {.u8_void = StartMenuBagCallback}},
+ {gText_MenuPokenav, {.u8_void = StartMenuPokeNavCallback}},
+ {gText_MenuPlayer, {.u8_void = StartMenuPlayerNameCallback}},
+ {gText_MenuSave, {.u8_void = StartMenuSaveCallback}},
+ {gText_MenuOption, {.u8_void = StartMenuOptionCallback}},
+ {gText_MenuExit, {.u8_void = StartMenuExitCallback}},
+ {gText_MenuRetire, {.u8_void = StartMenuSafariZoneRetireCallback}},
+ {gText_MenuPlayer, {.u8_void = StartMenuLinkModePlayerNameCallback}},
+ {gText_MenuRest, {.u8_void = StartMenuSaveCallback}},
+ {gText_MenuRetire, {.u8_void = StartMenuBattlePyramidRetireCallback}},
+ {gText_MenuBag, {.u8_void = StartMenuBattlePyramidBagCallback}}
};
-const struct BgTemplate gUnknown_085105A8[] =
+static const struct BgTemplate sUnknown_085105A8[] =
{
{
.bg = 0,
@@ -116,15 +191,47 @@ const struct BgTemplate gUnknown_085105A8[] =
}
};
-const struct WindowTemplate gUnknown_085105AC[] =
+static const struct WindowTemplate sUnknown_085105AC[] =
{
{0, 2, 0xF, 0x1A, 4, 0xF, 0x194},
DUMMY_WIN_TEMPLATE
};
-const struct WindowTemplate gUnknown_085105BC = {0, 1, 1, 0xE, 0xA, 0xF, 8};
+static const struct WindowTemplate sSaveInfoWindowTemplate = {0, 1, 1, 0xE, 0xA, 0xF, 8};
+
+// Local functions
+static void BuildStartMenuActions(void);
+static void AddStartMenuAction(u8 action);
+static void BuildNormalStartMenu(void);
+static void BuildSafariZoneStartMenu(void);
+static void BuildLinkModeStartMenu(void);
+static void BuildUnionRoomStartMenu(void);
+static void BuildBattlePikeStartMenu(void);
+static void BuildBattlePyramidStartMenu(void);
+static void BuildMultiBattleRoomStartMenu(void);
+static void ShowSafariBallsWindow(void);
+static void ShowPyramidFloorWindow(void);
+static void RemoveExtraStartMenuWindows(void);
+static bool32 PrintStartMenuActions(s8 *pIndex, u32 count);
+static bool32 InitStartMenuStep(void);
+static void InitStartMenu(void);
+static void CreateStartMenuTask(TaskFunc followupFunc);
+static void InitSave(void);
+static u8 RunSaveCallback(void);
+static void ShowSaveMessage(const u8 *message, u8 (*saveCallback)(void));
+static void sub_80A0014(void);
+static void HideSaveInfoWindow(void);
+static void SaveStartTimer(void);
+static bool8 SaveSuccesTimer(void);
+static bool8 SaveErrorTimer(void);
+static void InitBattlePyramidRetire(void);
+static void sub_80A03D8(void);
+static bool32 sub_80A03E4(u8 *par1);
+static void sub_80A0540(void);
+static void ShowSaveInfoWindow(void);
+static void RemoveSaveInfoWindow(void);
+static void HideStartMenuWindow(void);
-// code
void SetDexPokemonPokenavFlags(void) // unused
{
FlagSet(FLAG_SYS_POKEDEX_GET);
@@ -132,46 +239,70 @@ void SetDexPokemonPokenavFlags(void) // unused
FlagSet(FLAG_SYS_POKENAV_GET);
}
-void BuildStartMenuActions(void)
+static void BuildStartMenuActions(void)
{
sNumStartMenuActions = 0;
+
if (is_c1_link_related_active() == TRUE)
- BuildStartMenuActions_LinkMode();
+ {
+ BuildLinkModeStartMenu();
+ }
else if (InUnionRoom() == TRUE)
- BuildStartMenuActions_UnionRoom();
+ {
+ BuildUnionRoomStartMenu();
+ }
else if (GetSafariZoneFlag() == TRUE)
- BuildStartMenuActions_SafariZone();
+ {
+ BuildSafariZoneStartMenu();
+ }
else if (InBattlePike())
- BuildStartMenuActions_BattlePike();
+ {
+ BuildBattlePikeStartMenu();
+ }
else if (InBattlePyramid())
- BuildStartMenuActions_BattlePyramid();
+ {
+ BuildBattlePyramidStartMenu();
+ }
else if (InMultiBattleRoom())
- BuildStartMenuActions_MultiBattleRoom();
+ {
+ BuildMultiBattleRoomStartMenu();
+ }
else
- BuildStartMenuActions_Normal();
+ {
+ BuildNormalStartMenu();
+ }
}
-void AddStartMenuAction(u8 action)
+static void AddStartMenuAction(u8 action)
{
AppendToList(sCurrentStartMenuActions, &sNumStartMenuActions, action);
}
-static void BuildStartMenuActions_Normal(void)
+static void BuildNormalStartMenu(void)
{
if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE)
+ {
AddStartMenuAction(MENU_ACTION_POKEDEX);
+ }
if (FlagGet(FLAG_SYS_POKEMON_GET) == TRUE)
+ {
AddStartMenuAction(MENU_ACTION_POKEMON);
+ }
+
AddStartMenuAction(MENU_ACTION_BAG);
+
if (FlagGet(FLAG_SYS_POKENAV_GET) == 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)
+static void BuildSafariZoneStartMenu(void)
{
AddStartMenuAction(MENU_ACTION_RETIRE_SAFARI);
AddStartMenuAction(MENU_ACTION_POKEDEX);
@@ -182,29 +313,37 @@ static void BuildStartMenuActions_SafariZone(void)
AddStartMenuAction(MENU_ACTION_EXIT);
}
-static void BuildStartMenuActions_LinkMode(void)
+static void BuildLinkModeStartMenu(void)
{
AddStartMenuAction(MENU_ACTION_POKEMON);
AddStartMenuAction(MENU_ACTION_BAG);
+
if (FlagGet(FLAG_SYS_POKENAV_GET) == TRUE)
+ {
AddStartMenuAction(MENU_ACTION_POKENAV);
+ }
+
AddStartMenuAction(MENU_ACTION_PLAYER_LINK);
AddStartMenuAction(MENU_ACTION_OPTION);
AddStartMenuAction(MENU_ACTION_EXIT);
}
-static void BuildStartMenuActions_UnionRoom(void)
+static void BuildUnionRoomStartMenu(void)
{
AddStartMenuAction(MENU_ACTION_POKEMON);
AddStartMenuAction(MENU_ACTION_BAG);
+
if (FlagGet(FLAG_SYS_POKENAV_GET) == TRUE)
+ {
AddStartMenuAction(MENU_ACTION_POKENAV);
+ }
+
AddStartMenuAction(MENU_ACTION_PLAYER);
AddStartMenuAction(MENU_ACTION_OPTION);
AddStartMenuAction(MENU_ACTION_EXIT);
}
-static void BuildStartMenuActions_BattlePike(void)
+static void BuildBattlePikeStartMenu(void)
{
AddStartMenuAction(MENU_ACTION_POKEDEX);
AddStartMenuAction(MENU_ACTION_POKEMON);
@@ -213,7 +352,7 @@ static void BuildStartMenuActions_BattlePike(void)
AddStartMenuAction(MENU_ACTION_EXIT);
}
-static void BuildStartMenuActions_BattlePyramid(void)
+static void BuildBattlePyramidStartMenu(void)
{
AddStartMenuAction(MENU_ACTION_POKEMON);
AddStartMenuAction(MENU_ACTION_PYRAMID_BAG);
@@ -224,7 +363,7 @@ static void BuildStartMenuActions_BattlePyramid(void)
AddStartMenuAction(MENU_ACTION_EXIT);
}
-static void BuildStartMenuActions_MultiBattleRoom(void)
+static void BuildMultiBattleRoomStartMenu(void)
{
AddStartMenuAction(MENU_ACTION_POKEMON);
AddStartMenuAction(MENU_ACTION_PLAYER);
@@ -232,74 +371,1056 @@ static void BuildStartMenuActions_MultiBattleRoom(void)
AddStartMenuAction(MENU_ACTION_EXIT);
}
-void DisplaySafariBallsWindow(void)
+static void ShowSafariBallsWindow(void)
{
- sSafariBallsWindowId = AddWindow(&gSafariBallsWindowTemplate);
+ sSafariBallsWindowId = AddWindow(&sSafariBallsWindowTemplate);
PutWindowTilemap(sSafariBallsWindowId);
- NewMenuHelpers_DrawStdWindowFrame(sSafariBallsWindowId, 0);
+ NewMenuHelpers_DrawStdWindowFrame(sSafariBallsWindowId, FALSE);
ConvertIntToDecimalStringN(gStringVar1, gNumSafariBalls, STR_CONV_MODE_RIGHT_ALIGN, 2);
StringExpandPlaceholders(gStringVar4, gText_SafariBallStock);
PrintTextOnWindow(sSafariBallsWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL);
CopyWindowToVram(sSafariBallsWindowId, 2);
}
-void DisplayPyramidFloorWindow(void)
+static void ShowPyramidFloorWindow(void)
{
- // TODO: fix location
- if (gSaveBlock2Ptr->field_CAA[4] == 7)
- sBattlePyramidFloorWindowId = AddWindow(&gPyramidFloorWindowTemplate_1);
+ if (gSaveBlock2Ptr->field_CAA[4] == 7) // TODO: fix location
+ {
+ sBattlePyramidFloorWindowId = AddWindow(&sPyramidFloorWindowTemplate_1);
+ }
else
- sBattlePyramidFloorWindowId = AddWindow(&gPyramidFloorWindowTemplate_2);
+ {
+ sBattlePyramidFloorWindowId = AddWindow(&sPyramidFloorWindowTemplate_2);
+ }
+
PutWindowTilemap(sBattlePyramidFloorWindowId);
- NewMenuHelpers_DrawStdWindowFrame(sBattlePyramidFloorWindowId, 0);
+ NewMenuHelpers_DrawStdWindowFrame(sBattlePyramidFloorWindowId, FALSE);
StringCopy(gStringVar1, sPyramindFloorNames[gSaveBlock2Ptr->field_CAA[4]]);
StringExpandPlaceholders(gStringVar4, gText_BattlePyramidFloor);
PrintTextOnWindow(sBattlePyramidFloorWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL);
CopyWindowToVram(sBattlePyramidFloorWindowId, 2);
}
-void RemoveExtraStartMenuWindows(void)
+static void RemoveExtraStartMenuWindows(void)
{
if (GetSafariZoneFlag())
{
- sub_8198070(sSafariBallsWindowId, 0);
+ sub_8198070(sSafariBallsWindowId, FALSE);
CopyWindowToVram(sSafariBallsWindowId, 2);
RemoveWindow(sSafariBallsWindowId);
}
if (InBattlePyramid())
{
- sub_8198070(sBattlePyramidFloorWindowId, 0);
+ sub_8198070(sBattlePyramidFloorWindowId, FALSE);
RemoveWindow(sBattlePyramidFloorWindowId);
}
}
-/*
-// Prints n menu items starting at *index
-static bool32 PrintStartMenuItemsMultistep(s16 *index, u32 n)
+static bool32 PrintStartMenuActions(s8 *pIndex, u32 count)
{
- s8 _index = *index;
-
+ s8 index = *pIndex;
+
do
{
- if (sStartMenuItems[sCurrentStartMenuActions[_index]].func.u8_void == StartMenu_PlayerName)
+ if (sStartMenuItems[sCurrentStartMenuActions[index]].func.u8_void == StartMenuPlayerNameCallback) {
+ PrintPlayerNameOnWindow(GetStartMenuWindowId(), sStartMenuItems[sCurrentStartMenuActions[index]].text, 8, (index << 4) + 9);
+ }
+ else {
+ StringExpandPlaceholders(gStringVar4, sStartMenuItems[sCurrentStartMenuActions[index]].text);
+ PrintTextOnWindow(GetStartMenuWindowId(), 1, gStringVar4, 8, (index << 4) + 9, 0xFF, NULL);
+ }
+
+ index++;
+ if (index >= sNumStartMenuActions) {
+ *pIndex = index;
+ return TRUE;
+ }
+
+ count--;
+ }
+ while (count != 0);
+
+ *pIndex = index;
+ return FALSE;
+}
+
+static bool32 InitStartMenuStep(void)
+{
+ s8 value = sUnknown_02037619[0];
+
+ switch (value)
+ {
+ case 0:
+ sUnknown_02037619[0]++;
+ break;
+ case 1:
+ BuildStartMenuActions();
+ sUnknown_02037619[0]++;
+ break;
+ case 2:
+ sub_81973A4();
+ NewMenuHelpers_DrawStdWindowFrame(sub_81979C4(sNumStartMenuActions), FALSE);
+ sUnknown_02037619[1] = 0;
+ sUnknown_02037619[0]++;
+ break;
+ case 3:
+ if (GetSafariZoneFlag() != FALSE)
+ {
+ ShowSafariBallsWindow();
+ }
+ if (InBattlePyramid() != FALSE)
+ {
+ ShowPyramidFloorWindow();
+ }
+ sUnknown_02037619[0]++;
+ break;
+ case 4:
+ if (PrintStartMenuActions(&sUnknown_02037619[1], 2) == FALSE)
{
+ break;
+ }
+ sUnknown_02037619[0]++;
+ break;
+ case 5:
+ sStartMenuCursorPos = sub_81983AC(GetStartMenuWindowId(), 1, 0, 9, 16, sNumStartMenuActions, sStartMenuCursorPos);
+ CopyWindowToVram(GetStartMenuWindowId(), TRUE);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void InitStartMenu(void)
+{
+ sUnknown_02037619[0] = 0;
+ sUnknown_02037619[1] = 0;
+ while (!InitStartMenuStep());
+}
+
+static void StartMenuTask(u8 taskId)
+{
+ if (InitStartMenuStep() == TRUE)
+ {
+ SwitchTaskToFollowupFunc(taskId);
+ }
+}
+
+static void CreateStartMenuTask(TaskFunc followupFunc)
+{
+ u8 taskId;
+
+ sUnknown_02037619[0] = 0;
+ sUnknown_02037619[1] = 0;
+ taskId = CreateTask(StartMenuTask, 0x50);
+ SetTaskFuncWithFollowupFunc(taskId, StartMenuTask, followupFunc);
+}
+
+static bool8 sub_809FA00(void)
+{
+ if (InitStartMenuStep() == FALSE)
+ {
+ return FALSE;
+ }
+
+ sub_80AF688();
+ return TRUE;
+}
+
+void sub_809FA18(void) // Called from field_screen.s
+{
+ sUnknown_02037619[0] = 0;
+ sUnknown_02037619[1] = 0;
+ gUnknown_03005DB0 = sub_809FA00;
+}
+
+void sub_809FA34(u8 taskId) // Referenced in field_screen.s and rom_8011DC0.s
+{
+ struct Task* task = &gTasks[taskId];
+ switch(task->data[0])
+ {
+ case 0:
+ if (InUnionRoom() == TRUE)
+ {
+ var_800D_set_xB();
}
- else
+
+ gMenuCallback = HandleStartMenuInput;
+ task->data[0]++;
+ break;
+ case 1:
+ if (gMenuCallback() == TRUE)
{
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void ShowStartMenu(void) // Called from overworld.c and field_control_avatar.s
+{
+ if (!is_c1_link_related_active())
+ {
+ FreezeMapObjects();
+ sub_808B864();
+ sub_808BCF4();
+ }
+ CreateStartMenuTask(sub_809FA34);
+ ScriptContext2_Enable();
+}
+static bool8 HandleStartMenuInput(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 (sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func.u8_void == StartMenuPokedexCallback)
+ {
+ if (GetNationalPokedexCount(0) == 0) {
+ return FALSE;
+ }
+ }
+
+ gMenuCallback = sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func.u8_void;
+
+ if (gMenuCallback != StartMenuSaveCallback
+ && gMenuCallback != StartMenuExitCallback
+ && gMenuCallback != StartMenuSafariZoneRetireCallback
+ && gMenuCallback != StartMenuBattlePyramidRetireCallback)
+ {
+ FadeScreen(1, 0);
+ }
+
+ return FALSE;
+ }
+
+ if (gMain.newKeys & (START_BUTTON | B_BUTTON))
+ {
+ RemoveExtraStartMenuWindows();
+ HideStartMenu();
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 StartMenuPokedexCallback(void)
+{
+ if (!gPaletteFade.active)
+ {
+ IncrementGameStat(GAME_STAT_CHECKED_POKEDEX);
+ play_some_sound();
+ RemoveExtraStartMenuWindows();
+ overworld_free_bg_tilemaps();
+ SetMainCallback2(sub_80BB534); // Display pokedex
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 StartMenuPokemonCallback(void)
+{
+ if (!gPaletteFade.active)
+ {
+ play_some_sound();
+ RemoveExtraStartMenuWindows();
+ overworld_free_bg_tilemaps();
+ SetMainCallback2(CB2_PartyMenuFromStartMenu); // Display party menu
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 StartMenuBagCallback(void)
+{
+ if (!gPaletteFade.active)
+ {
+ play_some_sound();
+ RemoveExtraStartMenuWindows();
+ overworld_free_bg_tilemaps();
+ SetMainCallback2(CB2_BagMenuFromStartMenu); // Display bag menu
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 StartMenuPokeNavCallback(void)
+{
+ if (!gPaletteFade.active)
+ {
+ play_some_sound();
+ RemoveExtraStartMenuWindows();
+ overworld_free_bg_tilemaps();
+ SetMainCallback2(CB2_PokeNav); // Display PokeNav
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 StartMenuPlayerNameCallback(void)
+{
+ if (!gPaletteFade.active)
+ {
+ play_some_sound();
+ RemoveExtraStartMenuWindows();
+ overworld_free_bg_tilemaps();
+
+ if (is_c1_link_related_active() || InUnionRoom())
+ {
+ sub_80C4DDC(CB2_ReturnToFieldWithOpenMenu); // Display trainer card
+ }
+ else if (FlagGet(FLAG_SYS_FRONTIER_PASS))
+ {
+ sub_80C51C4(CB2_ReturnToFieldWithOpenMenu); // Display frontier pass
+ }
+ else
+ {
+ sub_80C4DDC(CB2_ReturnToFieldWithOpenMenu); // Display trainer card
}
- } while (++_index > sNumStartMenuActions);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 StartMenuSaveCallback(void)
+{
+ if (InBattlePyramid())
+ {
+ RemoveExtraStartMenuWindows();
+ }
+
+ gMenuCallback = SaveStartCallback; // Display save menu
+
+ return FALSE;
+}
+
+static bool8 StartMenuOptionCallback(void)
+{
+ if (!gPaletteFade.active)
+ {
+ play_some_sound();
+ RemoveExtraStartMenuWindows();
+ overworld_free_bg_tilemaps();
+ SetMainCallback2(CB2_InitOptionMenu); // Display option menu
+ gMain.savedCallback = CB2_ReturnToFieldWithOpenMenu;
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 StartMenuExitCallback(void)
+{
+ RemoveExtraStartMenuWindows();
+ HideStartMenu(); // Hide start menu
+
+ return TRUE;
+}
+
+static bool8 StartMenuSafariZoneRetireCallback(void)
+{
+ RemoveExtraStartMenuWindows();
+ HideStartMenu();
+ SafariZoneRetirePrompt();
+
+ return TRUE;
+}
+
+static bool8 StartMenuLinkModePlayerNameCallback(void)
+{
+ if (!gPaletteFade.active)
+ {
+ play_some_sound();
+ overworld_free_bg_tilemaps();
+ sub_80C4E74(gUnknown_03005DB4, CB2_ReturnToFieldWithOpenMenu);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 StartMenuBattlePyramidRetireCallback(void)
+{
+ gMenuCallback = BattlePyramidRetireStartCallback; // Confirm retire
+
+ return FALSE;
+}
+
+void sub_809FDD4(void) // Called from battle_frontier_2.s
+{
+ sub_8197DF8(0, FALSE);
+ sub_80984F4();
+ CreateStartMenuTask(sub_809FA34);
+ ScriptContext2_Enable();
+}
+
+static bool8 StartMenuBattlePyramidBagCallback(void)
+{
+ if (!gPaletteFade.active)
+ {
+ play_some_sound();
+ RemoveExtraStartMenuWindows();
+ overworld_free_bg_tilemaps();
+ SetMainCallback2(sub_81C4EFC); // Display battle pyramid bag
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 SaveStartCallback(void)
+{
+ InitSave();
+ gMenuCallback = SaveCallback;
- if (--n == 0)
+ return FALSE;
+}
+
+static bool8 SaveCallback(void)
+{
+ switch (RunSaveCallback())
{
- *index = _index;
+ case SAVE_IN_PROGRESS:
+ return FALSE;
+ case SAVE_CANCELED: // Back to start menu
+ sub_8197DF8(0, FALSE);
+ InitStartMenu();
+ gMenuCallback = HandleStartMenuInput;
return FALSE;
+ case SAVE_SUCCESS:
+ case SAVE_ERROR: // Close start menu
+ sub_8197DF8(0, TRUE);
+ sub_80984F4();
+ ScriptContext2_Disable();
+ sub_81A9EC8();
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 BattlePyramidRetireStartCallback(void)
+{
+ InitBattlePyramidRetire();
+ gMenuCallback = BattlePyramidRetireCallback;
+
+ return FALSE;
+}
+
+static bool8 BattlePyramidRetireReturnCallback(void)
+{
+ InitStartMenu();
+ gMenuCallback = HandleStartMenuInput;
+
+ return FALSE;
+}
+
+static bool8 BattlePyramidRetireCallback(void)
+{
+ switch (RunSaveCallback())
+ {
+ case SAVE_SUCCESS: // No (Stay in battle pyramid)
+ RemoveExtraStartMenuWindows();
+ gMenuCallback = BattlePyramidRetireReturnCallback;
+ return FALSE;
+ case SAVE_IN_PROGRESS:
+ return FALSE;
+ case SAVE_CANCELED: // Yes (Retire from battle pyramid)
+ sub_8197DF8(0, TRUE);
+ sub_80984F4();
+ ScriptContext2_Disable();
+ ScriptContext1_SetupScript(BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void InitSave(void)
+{
+ save_serialize_map();
+ sSaveDialogCallback = SaveConfirmSaveCallback;
+ sSavingComplete = FALSE;
+}
+
+static u8 RunSaveCallback(void)
+{
+ // True if text is still printing
+ if (sub_8197224() == TRUE)
+ {
+ return SAVE_IN_PROGRESS;
+ }
+
+ sSavingComplete = FALSE;
+ return sSaveDialogCallback();
+}
+
+void SaveGame(void) // Called from cable_club.s
+{
+ InitSave();
+ CreateTask(SaveGameTask, 0x50);
+}
+
+static void ShowSaveMessage(const u8 *message, u8 (*saveCallback)(void))
+{
+ StringExpandPlaceholders(gStringVar4, message);
+ sub_819786C(0, TRUE);
+ AddTextPrinterForMessage_2(TRUE);
+ sSavingComplete = TRUE;
+ sSaveDialogCallback = saveCallback;
+}
+
+static void SaveGameTask(u8 taskId)
+{
+ u8 status = RunSaveCallback();
+
+ switch (status)
+ {
+ case SAVE_CANCELED:
+ case SAVE_ERROR:
+ gSpecialVar_Result = 0;
+ break;
+ case SAVE_SUCCESS:
+ gSpecialVar_Result = status;
+ break;
+ case SAVE_IN_PROGRESS:
+ return;
+ }
+
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+}
+
+static void sub_80A0014(void)
+{
+ sub_8197434(0, TRUE);
+}
+
+static void HideSaveInfoWindow(void)
+{
+ RemoveSaveInfoWindow();
+}
+
+static void SaveStartTimer(void)
+{
+ sSaveDialogTimer = 60;
+}
+
+static bool8 SaveSuccesTimer(void)
+{
+ sSaveDialogTimer--;
+
+ if (gMain.heldKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ return TRUE;
+ }
+ else if (sSaveDialogTimer == 0)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 SaveErrorTimer(void)
+{
+ if (sSaveDialogTimer != 0)
+ {
+ sSaveDialogTimer--;
+ }
+ else if (gMain.heldKeys & A_BUTTON)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static u8 SaveConfirmSaveCallback(void)
+{
+ sub_819746C(GetStartMenuWindowId(), FALSE);
+ RemoveStartMenuWindow();
+ ShowSaveInfoWindow();
+
+ if (InBattlePyramid())
+ {
+ ShowSaveMessage(gText_BattlePyramidConfirmRest, SaveYesNoCallback);
+ }
+ else
+ {
+ ShowSaveMessage(gText_ConfirmSave, SaveYesNoCallback);
+ }
+
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveYesNoCallback(void)
+{
+ sub_8197930(); // Show Yes/No menu
+ sSaveDialogCallback = SaveConfirmInputCallback;
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveConfirmInputCallback(void)
+{
+ switch (ProcessMenuInputNoWrap_())
+ {
+ case 0: // Yes
+ switch (gSaveFileStatus)
+ {
+ case 0:
+ case 2:
+ if (gDifferentSaveFile == FALSE)
+ {
+ sSaveDialogCallback = SaveFileExistsCallback;
+ return SAVE_IN_PROGRESS;
+ }
+
+ sSaveDialogCallback = SaveSavingMessageCallback;
+ return SAVE_IN_PROGRESS;
+ default:
+ sSaveDialogCallback = SaveFileExistsCallback;
+ return SAVE_IN_PROGRESS;
+ }
+ case -1: // B Button
+ case 1: // No
+ HideSaveInfoWindow();
+ sub_80A0014();
+ return SAVE_CANCELED;
+ }
+
+ return SAVE_IN_PROGRESS;
+}
+
+// A different save file exists
+static u8 SaveFileExistsCallback(void)
+{
+ if (gDifferentSaveFile == TRUE)
+ {
+ ShowSaveMessage(gText_DifferentSaveFile, SaveConfirmOverwriteNoCallback);
+ }
+ else
+ {
+ ShowSaveMessage(gText_AlreadySavedFile, SaveConfirmOverwriteCallback);
+ }
+
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveConfirmOverwriteNoCallback(void)
+{
+ sub_8197948(1); // Show Yes/No menu (No selected as default)
+ sSaveDialogCallback = SaveOverwriteInputCallback;
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveConfirmOverwriteCallback(void)
+{
+ sub_8197930(); // Show Yes/No menu
+ sSaveDialogCallback = SaveOverwriteInputCallback;
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveOverwriteInputCallback(void)
+{
+ switch (ProcessMenuInputNoWrap_())
+ {
+ case 0: // Yes
+ sSaveDialogCallback = SaveSavingMessageCallback;
+ return SAVE_IN_PROGRESS;
+ case -1: // B Button
+ case 1: // No
+ HideSaveInfoWindow();
+ sub_80A0014();
+ return SAVE_CANCELED;
+ }
+
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveSavingMessageCallback(void)
+{
+ ShowSaveMessage(gText_SavingDontTurnOff, SaveDoSaveCallback);
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveDoSaveCallback(void)
+{
+ u8 saveStatus;
+
+ IncrementGameStat(GAME_STAT_SAVED_GAME);
+ sub_81A9E90();
+
+ if (gDifferentSaveFile == TRUE)
+ {
+ saveStatus = TrySavingData(SAVE_OVERWRITE_DIFFERENT_FILE);
+ gDifferentSaveFile = FALSE;
+ }
+ else
+ {
+ saveStatus = TrySavingData(SAVE_NORMAL);
+ }
+
+ if (saveStatus == 1) // Save succeded
+ {
+ ShowSaveMessage(gText_PlayerSavedGame, SaveSuccessCallback);
+ }
+ else // Save error
+ {
+ ShowSaveMessage(gText_SaveError, SaveErrorCallback);
+ }
+
+ SaveStartTimer();
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveSuccessCallback(void)
+{
+ if (!IsTextPrinterActive(0))
+ {
+ PlaySE(SE_SAVE);
+ sSaveDialogCallback = SaveReturnSuccessCallback;
+ }
+
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveReturnSuccessCallback(void)
+{
+ if (!IsSEPlaying() && SaveSuccesTimer())
+ {
+ HideSaveInfoWindow();
+ return SAVE_SUCCESS;
+ }
+ else
+ {
+ return SAVE_IN_PROGRESS;
+ }
+}
+
+static u8 SaveErrorCallback(void)
+{
+ if (!IsTextPrinterActive(0))
+ {
+ PlaySE(SE_BOO);
+ sSaveDialogCallback = SaveReturnErrorCallback;
+ }
+
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveReturnErrorCallback(void)
+{
+ if (!SaveErrorTimer())
+ {
+ return SAVE_IN_PROGRESS;
}
else
{
- *index = _index;
+ HideSaveInfoWindow();
+ return SAVE_ERROR;
+ }
+}
+
+static void InitBattlePyramidRetire(void)
+{
+ sSaveDialogCallback = BattlePyramidConfirmRetireCallback;
+ sSavingComplete = FALSE;
+}
+
+static u8 BattlePyramidConfirmRetireCallback(void)
+{
+ sub_819746C(GetStartMenuWindowId(), FALSE);
+ RemoveStartMenuWindow();
+ ShowSaveMessage(gText_BattlePyramidConfirmRetire, BattlePyramidRetireYesNoCallback);
+
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 BattlePyramidRetireYesNoCallback(void)
+{
+ sub_8197948(1); // Show Yes/No menu (No selected as default)
+ sSaveDialogCallback = BattlePyramidRetireInputCallback;
+
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 BattlePyramidRetireInputCallback(void)
+{
+ switch (ProcessMenuInputNoWrap_())
+ {
+ case 0: // Yes
+ return SAVE_CANCELED;
+ case -1: // B Button
+ case 1: // No
+ sub_80A0014();
+ return SAVE_SUCCESS;
+ }
+
+ return SAVE_IN_PROGRESS;
+}
+
+static void sub_80A03D8(void)
+{
+ TransferPlttBuffer();
+}
+
+static bool32 sub_80A03E4(u8 *par1)
+{
+ switch (*par1)
+ {
+ case 0:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0);
+ SetVBlankCallback(NULL);
+ ScanlineEffect_Stop();
+ DmaClear16(3, PLTT, PLTT_SIZE);
+ DmaFillLarge16(3, 0, (void *)(VRAM + 0x0), 0x18000, 0x1000);
+ break;
+ case 1:
+ ResetSpriteData();
+ ResetTasks();
+ ResetPaletteFade();
+ ScanlineEffect_Clear();
+ break;
+ case 2:
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, sUnknown_085105A8, ARRAY_COUNT(sUnknown_085105A8));
+ InitWindows(sUnknown_085105AC);
+ box_border_load_tiles_and_pal(0, 8, 224);
+ sub_81978B0(240);
+ break;
+ case 3:
+ ShowBg(0);
+ BlendPalettes(-1, 16, 0);
+ SetVBlankCallback(sub_80A03D8);
+ EnableInterrupts(1);
+ break;
+ case 4:
return TRUE;
}
-}*/
+
+ (*par1)++;
+ return FALSE;
+}
+
+void sub_80A0514(void) // Called from cable_club.s
+{
+ if (sub_80A03E4(&gMain.state))
+ {
+ CreateTask(sub_80A0550, 0x50);
+ SetMainCallback2(sub_80A0540);
+ }
+}
+
+static void sub_80A0540(void)
+{
+ RunTasks();
+ UpdatePaletteFade();
+}
+
+static void sub_80A0550(u8 taskId)
+{
+ s16 *step = gTasks[taskId].data;
+
+ if (!gPaletteFade.active)
+ {
+ switch (*step)
+ {
+ case 0:
+ FillWindowPixelBuffer(0, 17);
+ AddTextPrinterParameterized(0,
+ 1,
+ gText_SavingDontTurnOffPower,
+ 255,
+ NULL,
+ 2,
+ 1,
+ 3);
+ sub_8098858(0, 8, 14);
+ PutWindowTilemap(0);
+ CopyWindowToVram(0, 3);
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+
+ if (gWirelessCommType != 0 && InUnionRoom())
+ {
+ if (sub_800A07C())
+ {
+ *step = 1;
+ }
+ else
+ {
+ *step = 5;
+ }
+ }
+ else
+ {
+ gSoftResetDisabled = 1;
+ *step = 1;
+ }
+ break;
+ case 1:
+ sub_8076D5C();
+ sub_8153430();
+ *step = 2;
+ break;
+ case 2:
+ if (sub_8153474())
+ {
+ sav2_gender2_inplace_and_xFE();
+ *step = 3;
+ gSoftResetDisabled = 0;
+ }
+ break;
+ case 3:
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ *step = 4;
+ break;
+ case 4:
+ FreeAllWindowBuffers();
+ SetMainCallback2(gMain.savedCallback);
+ DestroyTask(taskId);
+ break;
+ case 5:
+ CreateTask(sub_8153688, 0x5);
+ *step = 6;
+ break;
+ case 6:
+ if (!FuncIsActiveTask(sub_8153688))
+ {
+ *step = 3;
+ }
+ break;
+ }
+ }
+}
+
+static void ShowSaveInfoWindow(void)
+{
+ struct WindowTemplate saveInfoWindow = sSaveInfoWindowTemplate;
+ u8 gender;
+ u8 color;
+ u32 xOffset;
+ u32 yOffset;
+
+ if (!FlagGet(FLAG_SYS_POKEDEX_GET))
+ {
+ saveInfoWindow.height -= 2;
+ }
+
+ sSaveInfoWindowId = AddWindow(&saveInfoWindow);
+ NewMenuHelpers_DrawStdWindowFrame(sSaveInfoWindowId, FALSE);
+
+ gender = gSaveBlock2Ptr->playerGender;
+ color = TEXT_COLOR_RED; // Red when female, blue when male.
+
+ if (gender == MALE)
+ {
+ color = TEXT_COLOR_BLUE;
+ }
+
+ // Print region name
+ yOffset = 1;
+ sub_819A344(3, gStringVar4, TEXT_COLOR_GREEN);
+ PrintTextOnWindow(sSaveInfoWindowId, 1, gStringVar4, 0, yOffset, 0xFF, NULL);
+
+ // Print player name
+ yOffset = 0x11;
+ PrintTextOnWindow(sSaveInfoWindowId, 1, gText_SavingPlayer, 0, yOffset, 0xFF, NULL);
+ sub_819A344(0, gStringVar4, color);
+ xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70);
+ PrintPlayerNameOnWindow(sSaveInfoWindowId, gStringVar4, xOffset, yOffset);
+
+ // Print badge count
+ yOffset = 0x21;
+ PrintTextOnWindow(sSaveInfoWindowId, 1, gText_SavingBadges, 0, yOffset, 0xFF, NULL);
+ sub_819A344(4, gStringVar4, color);
+ xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70);
+ PrintTextOnWindow(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL);
+
+ if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE)
+ {
+ // Print pokedex count
+ yOffset = 0x31;
+ PrintTextOnWindow(sSaveInfoWindowId, 1, gText_SavingPokedex, 0, yOffset, 0xFF, NULL);
+ sub_819A344(1, gStringVar4, color);
+ xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70);
+ PrintTextOnWindow(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL);
+ }
+
+ // Print play time
+ yOffset += 0x10;
+ PrintTextOnWindow(sSaveInfoWindowId, 1, gText_SavingTime, 0, yOffset, 0xFF, NULL);
+ sub_819A344(2, gStringVar4, color);
+ xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70);
+ PrintTextOnWindow(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL);
+
+ CopyWindowToVram(sSaveInfoWindowId, 2);
+}
+
+static void RemoveSaveInfoWindow(void)
+{
+ sub_819746C(sSaveInfoWindowId, FALSE);
+ RemoveWindow(sSaveInfoWindowId);
+}
+
+static void sub_80A08A4(u8 taskId)
+{
+ if (!FuncIsActiveTask(sub_8153688))
+ {
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ }
+}
+
+void sub_80A08CC(void) // Referenced in data/specials.inc and data/scripts/maps/BattleFrontier_BattleTowerLobby.inc
+{
+ u8 taskId = CreateTask(sub_8153688, 0x5);
+ gTasks[taskId].data[2] = 1;
+ gTasks[CreateTask(sub_80A08A4, 0x6)].data[1] = taskId;
+}
+
+static void HideStartMenuWindow(void)
+{
+ sub_819746C(GetStartMenuWindowId(), TRUE);
+ RemoveStartMenuWindow();
+ sub_80984F4();
+ ScriptContext2_Disable();
+}
+
+void HideStartMenu(void) // Called from map_name_popup.s
+{
+ PlaySE(SE_SELECT);
+ HideStartMenuWindow();
+}
+
+void AppendToList(u8 *list, u8 *pos, u8 newEntry)
+{
+ list[*pos] = newEntry;
+ (*pos)++;
+} \ No newline at end of file
diff --git a/sym_common.txt b/sym_common.txt
index 01772fa5a..6f6a8da32 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -70,7 +70,7 @@ gUnknown_03005DEC: @ 3005DEC
gSelectedMapObject: @ 3005DF0
.space 0x4
-gUnknown_03005DF4: @ 3005DF4
+gMenuCallback: @ 3005DF4
.space 0x4
.include "sound.o"