diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2016-10-09 17:50:46 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2016-10-09 15:50:46 -0700 |
commit | 0a32b5feb1ae85d0f8e27c5f5d199e1b931b0776 (patch) | |
tree | 018a8aed83dda20a6c58dd5c7a86f5a09936924c | |
parent | dbf4f101961b3c8705ebe4554f67fb5b7c0249dd (diff) |
decompile start menu code (#57)
* initial decompilation
* fix sub_80712B4
* finish decompiling start menu code
* refactor
* refactor some more
* make some variables static
* change spaces to tab
-rw-r--r-- | asm/rom5.s | 32 | ||||
-rw-r--r-- | asm/rom6.s | 4 | ||||
-rw-r--r-- | asm/rom_8065394.s | 1663 | ||||
-rw-r--r-- | data/data2.s | 22 | ||||
-rw-r--r-- | data/specials.s | 2 | ||||
-rw-r--r-- | data/text/save.s | 10 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/start_menu.c | 885 | ||||
-rw-r--r-- | sym_bss.txt | 2 | ||||
-rw-r--r-- | sym_common.txt | 2 | ||||
-rw-r--r-- | sym_ewram.txt | 9 |
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" |