diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2016-12-16 19:45:30 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2016-12-16 16:45:30 -0800 |
commit | c7fe3c43880f2099db3830c488de14dff0914f2e (patch) | |
tree | 11afa22fefd752bd567191766ffd8b2611412c4f | |
parent | 4967d2b5d66274a4740baf1f0bef9d134eced129 (diff) |
decompile save_failed_screen.c except for two functions (#130)
* begin decompiling save_failed_screen.c
* add revision differences for sub_8146E50
* decompile sub_8147048
* help
* get sub_8147324 to almost match except for a single instruction
* finish decompiling save_failed_screen.c except for two nonmatching functions
-rw-r--r-- | asm/rom_813BA94.s | 8 | ||||
-rw-r--r-- | asm/save_failed_screen.s | 779 | ||||
-rw-r--r-- | data/data2.s | 10 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/save_failed_screen.c | 474 | ||||
-rw-r--r-- | src/starter_choose.c | 8 |
6 files changed, 489 insertions, 792 deletions
diff --git a/asm/rom_813BA94.s b/asm/rom_813BA94.s index 7e966cf91..d38466f97 100644 --- a/asm/rom_813BA94.s +++ b/asm/rom_813BA94.s @@ -14564,14 +14564,14 @@ _08143D24: ldr r1, _08143DD0 @ =gReservedSpritePaletteCount movs r0, 0x8 strb r0, [r1] - ldr r0, _08143DD4 @ =gUnknown_083F66F0 + ldr r0, _08143DD4 @ =gBirchHelpGfx movs r1, 0xC0 lsls r1, 19 bl LZ77UnCompVram ldr r0, _08143DD8 @ =gBirchGrassTilemap ldr r1, _08143DDC @ =0x06003800 bl LZ77UnCompVram - ldr r0, _08143DE0 @ =gUnknown_083F62EC + 0x2 + ldr r0, _08143DE0 @ =gBirchBagGrassPal + 0x2 movs r1, 0x1 movs r2, 0x3E bl LoadPalette @@ -14640,10 +14640,10 @@ _08143D88: _08143DC8: .4byte gMain _08143DCC: .4byte 0x0000043c _08143DD0: .4byte gReservedSpritePaletteCount -_08143DD4: .4byte gUnknown_083F66F0 +_08143DD4: .4byte gBirchHelpGfx _08143DD8: .4byte gBirchGrassTilemap _08143DDC: .4byte 0x06003800 -_08143DE0: .4byte gUnknown_083F62EC + 0x2 +_08143DE0: .4byte gBirchBagGrassPal + 0x2 _08143DE4: .4byte 0x0201e000 _08143DE8: .4byte 0x000007ff _08143DEC: .4byte 0x0201f800 diff --git a/asm/save_failed_screen.s b/asm/save_failed_screen.s deleted file mode 100644 index a114bbea3..000000000 --- a/asm/save_failed_screen.s +++ /dev/null @@ -1,779 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start fullscreen_save_activate -fullscreen_save_activate: @ 8146E10 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08146E30 @ =sub_8146E50 - bl SetMainCallback2 - ldr r0, _08146E34 @ =gUnknown_0203933C - strh r4, [r0] - ldr r1, _08146E38 @ =gUnknown_0203933E - movs r0, 0 - strh r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08146E30: .4byte sub_8146E50 -_08146E34: .4byte gUnknown_0203933C -_08146E38: .4byte gUnknown_0203933E - thumb_func_end fullscreen_save_activate - - thumb_func_start sub_8146E3C -sub_8146E3C: @ 8146E3C - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_8146E3C - - thumb_func_start sub_8146E50 -sub_8146E50: @ 8146E50 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - ldr r0, _08146FB0 @ =gMain - ldr r1, _08146FB4 @ =0x0000043c - adds r7, r0, r1 - ldrb r0, [r7] - cmp r0, 0 - beq _08146E6C - cmp r0, 0x1 - bne _08146E6C - b _0814701C -_08146E6C: - movs r0, 0 - bl SetVBlankCallback - movs r0, 0x80 - lsls r0, 19 - mov r9, r0 - movs r1, 0 - strh r1, [r0] - ldr r6, _08146FB8 @ =REG_BG3CNT - strh r1, [r6] - adds r0, 0xC - mov r8, r0 - strh r1, [r0] - subs r0, 0x2 - strh r1, [r0] - ldr r5, _08146FBC @ =REG_BG0CNT - strh r1, [r5] - adds r0, 0x12 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - subs r0, 0x6 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - subs r0, 0x6 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - subs r0, 0x6 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - add r0, sp, 0x4 - strh r1, [r0] - ldr r2, _08146FC0 @ =0x040000d4 - str r0, [r2] - movs r1, 0xC0 - lsls r1, 19 - str r1, [r2, 0x4] - ldr r0, _08146FC4 @ =0x8100c000 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r4, 0 - str r4, [sp, 0x8] - add r0, sp, 0x8 - str r0, [r2] - movs r0, 0xE0 - lsls r0, 19 - str r0, [r2, 0x4] - ldr r0, _08146FC8 @ =0x85000100 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - add r0, sp, 0x4 - strh r4, [r0] - str r0, [r2] - movs r0, 0xA0 - lsls r0, 19 - str r0, [r2, 0x4] - ldr r0, _08146FCC @ =0x81000200 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - ldr r0, _08146FD0 @ =gUnknown_083F66F0 - bl LZ77UnCompVram - ldr r0, _08146FD4 @ =gBirchBagTilemap - ldr r1, _08146FD8 @ =0x06003000 - bl LZ77UnCompVram - ldr r0, _08146FDC @ =gBirchGrassTilemap - ldr r1, _08146FE0 @ =0x06003800 - bl LZ77UnCompVram - ldr r0, _08146FE4 @ =gUnknown_08411980 - ldr r1, _08146FE8 @ =0x06010020 - bl LZ77UnCompVram - bl ResetSpriteData - bl ResetTasks - bl ResetPaletteFade - ldr r0, _08146FEC @ =gUnknown_083F62EC - movs r1, 0 - movs r2, 0x40 - bl LoadPalette - ldr r0, _08146FF0 @ =gUnknown_08411960 - movs r1, 0x80 - lsls r1, 1 - movs r2, 0x20 - bl LoadPalette - ldr r0, _08146FF4 @ =gWindowConfig_81E6C3C - bl SetUpWindowConfig - ldr r0, _08146FF8 @ =gWindowConfig_81E6CE4 - bl InitMenuWindow - .if REVISION >= 1 - movs r0, 0xD - movs r1, 0x6 - movs r2, 0x10 - movs r3, 0x9 - .else - movs r0, 0xD - movs r1, 0x8 - movs r2, 0x10 - movs r3, 0xB - .endif - bl MenuDrawTextWindow - .if REVISION >= 1 - movs r0, 0x1 - movs r1, 0xA - movs r2, 0x1C - movs r3, 0x13 - .else - movs r0, 0x1 - movs r1, 0xC - movs r2, 0x1C - movs r3, 0x13 - .endif - bl MenuDrawTextWindow - ldr r0, _08146FFC @ =gSystemText_SaveFailedBackupCheck - .if REVISION >= 1 - movs r1, 0x2 - movs r2, 0xB - .else - movs r1, 0x2 - movs r2, 0xD - .endif - bl MenuPrint - movs r0, 0x1 - negs r0, r0 - str r4, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r3, _08147000 @ =0x04000208 - ldrh r2, [r3] - strh r4, [r3] - ldr r4, _08147004 @ =0x04000200 - ldrh r0, [r4] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r4] - strh r2, [r3] - ldr r2, _08147008 @ =REG_DISPSTAT - ldrh r0, [r2] - movs r1, 0x8 - orrs r0, r1 - strh r0, [r2] - ldr r0, _0814700C @ =sub_8146E3C - bl SetVBlankCallback - ldr r1, _08147010 @ =0x00000703 - adds r0, r1, 0 - strh r0, [r6] - ldr r1, _08147014 @ =0x00000602 - adds r0, r1, 0 - mov r1, r8 - strh r0, [r1] - ldr r1, _08147018 @ =0x00001f08 - adds r0, r1, 0 - strh r0, [r5] - movs r1, 0xEA - lsls r1, 5 - adds r0, r1, 0 - mov r1, r9 - strh r0, [r1] - ldrb r0, [r7] - adds r0, 0x1 - strb r0, [r7] - b _08147032 - .align 2, 0 -_08146FB0: .4byte gMain -_08146FB4: .4byte 0x0000043c -_08146FB8: .4byte REG_BG3CNT -_08146FBC: .4byte REG_BG0CNT -_08146FC0: .4byte 0x040000d4 -_08146FC4: .4byte 0x8100c000 -_08146FC8: .4byte 0x85000100 -_08146FCC: .4byte 0x81000200 -_08146FD0: .4byte gUnknown_083F66F0 -_08146FD4: .4byte gBirchBagTilemap -_08146FD8: .4byte 0x06003000 -_08146FDC: .4byte gBirchGrassTilemap -_08146FE0: .4byte 0x06003800 -_08146FE4: .4byte gUnknown_08411980 -_08146FE8: .4byte 0x06010020 -_08146FEC: .4byte gUnknown_083F62EC -_08146FF0: .4byte gUnknown_08411960 -_08146FF4: .4byte gWindowConfig_81E6C3C -_08146FF8: .4byte gWindowConfig_81E6CE4 -_08146FFC: .4byte gSystemText_SaveFailedBackupCheck -_08147000: .4byte 0x04000208 -_08147004: .4byte 0x04000200 -_08147008: .4byte REG_DISPSTAT -_0814700C: .4byte sub_8146E3C -_08147010: .4byte 0x00000703 -_08147014: .4byte 0x00000602 -_08147018: .4byte 0x00001f08 -_0814701C: - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _08147032 - ldr r0, _08147040 @ =sub_8147048 - bl SetMainCallback2 - ldr r0, _08147044 @ =sub_8147218 - bl SetVBlankCallback -_08147032: - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08147040: .4byte sub_8147048 -_08147044: .4byte sub_8147218 - thumb_func_end sub_8146E50 - - thumb_func_start sub_8147048 -sub_8147048: @ 8147048 - push {r4,r5,lr} - movs r4, 0 - ldr r0, _081470C8 @ =gUnknown_0203933E - movs r1, 0x1 - strh r1, [r0] - ldr r1, _081470CC @ =gUnknown_03005EA8 - ldr r0, [r1] - cmp r0, 0 - beq _081470A6 - adds r5, r1, 0 -_0814705C: - ldr r0, [r5] - bl sub_814737C - lsls r0, 24 - cmp r0, 0 - bne _0814710C - .if REVISION >= 1 - movs r0, 0x1 - movs r1, 0xA - movs r2, 0x1C - movs r3, 0x13 - .else - movs r0, 0x1 - movs r1, 0xC - movs r2, 0x1C - movs r3, 0x13 - .endif - bl MenuDrawTextWindow - ldr r0, _081470D0 @ =gSystemText_CheckCompleteSaveAttempt - .if REVISION >= 1 - movs r1, 0x2 - movs r2, 0xB - .else - movs r1, 0x2 - movs r2, 0xD - .endif - bl MenuPrint - ldr r0, _081470D4 @ =gUnknown_0203933C - ldrb r0, [r0] - bl sub_8125C3C - ldr r0, [r5] - cmp r0, 0 - beq _08147096 - ldr r0, _081470D8 @ =gSystemText_SaveFailedBackupCheck - .if REVISION >= 1 - movs r1, 0x2 - movs r2, 0xB - .else - movs r1, 0x2 - movs r2, 0xD - .endif - bl MenuPrint -_08147096: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, [r5] - cmp r0, 0 - beq _081470A6 - cmp r4, 0x2 - bls _0814705C -_081470A6: - cmp r4, 0x3 - bne _081470E4 - .if REVISION >= 1 - movs r0, 0x1 - movs r1, 0xA - movs r2, 0x1C - movs r3, 0x13 - .else - movs r0, 0x1 - movs r1, 0xC - movs r2, 0x1C - movs r3, 0x13 - .endif - bl MenuDrawTextWindow - ldr r0, _081470DC @ =gSystemText_BackupDamagedGameContinue - .if REVISION >= 1 - movs r1, 0x2 - movs r2, 0xB - .else - movs r1, 0x2 - movs r2, 0xD - .endif - bl MenuPrint - ldr r0, _081470E0 @ =sub_81471A4 - bl SetMainCallback2 - b _0814713E - .align 2, 0 -_081470C8: .4byte gUnknown_0203933E -_081470CC: .4byte gUnknown_03005EA8 -_081470D0: .4byte gSystemText_CheckCompleteSaveAttempt -_081470D4: .4byte gUnknown_0203933C -_081470D8: .4byte gSystemText_SaveFailedBackupCheck -_081470DC: .4byte gSystemText_BackupDamagedGameContinue -_081470E0: .4byte sub_81471A4 -_081470E4: - .if REVISION >= 1 - movs r0, 0x1 - movs r1, 0xA - movs r2, 0x1C - movs r3, 0x13 - .else - movs r0, 0x1 - movs r1, 0xC - movs r2, 0x1C - movs r3, 0x13 - .endif - bl MenuDrawTextWindow - ldr r0, _08147104 @ =gUnknown_03005EBC - ldr r0, [r0] - cmp r0, 0 - bne _08147134 - ldr r0, _08147108 @ =gSystemText_SaveCompletedGameEnd - .if REVISION >= 1 - movs r1, 0x2 - movs r2, 0xB - .else - movs r1, 0x2 - movs r2, 0xD - .endif - bl MenuPrint - b _0814713E - .align 2, 0 -_08147104: .4byte gUnknown_03005EBC -_08147108: .4byte gSystemText_SaveCompletedGameEnd -_0814710C: - .if REVISION >= 1 - movs r0, 0x1 - movs r1, 0xA - movs r2, 0x1C - movs r3, 0x13 - .else - movs r0, 0x1 - movs r1, 0xC - movs r2, 0x1C - movs r3, 0x13 - .endif - bl MenuDrawTextWindow - ldr r0, _0814712C @ =gSystemText_BackupDamagedGameContinue - .if REVISION >= 1 - movs r1, 0x2 - movs r2, 0xB - .else - movs r1, 0x2 - movs r2, 0xD - .endif - bl MenuPrint - ldr r0, _08147130 @ =sub_8147154 - bl SetMainCallback2 - b _08147144 - .align 2, 0 -_0814712C: .4byte gSystemText_BackupDamagedGameContinue -_08147130: .4byte sub_8147154 -_08147134: - ldr r0, _0814714C @ =gSystemText_SaveCompletedPressA - .if REVISION >= 1 - movs r1, 0x2 - movs r2, 0xB - .else - movs r1, 0x2 - movs r2, 0xD - .endif - bl MenuPrint -_0814713E: - ldr r0, _08147150 @ =sub_81471A4 - bl SetMainCallback2 -_08147144: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0814714C: .4byte gSystemText_SaveCompletedPressA -_08147150: .4byte sub_81471A4 - thumb_func_end sub_8147048 - - thumb_func_start sub_8147154 -sub_8147154: @ 8147154 - push {lr} - ldr r1, _08147190 @ =gUnknown_0203933E - movs r0, 0 - strh r0, [r1] - ldr r0, _08147194 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0814718A - .if REVISION >= 1 - movs r0, 0x1 - movs r1, 0xA - movs r2, 0x1C - movs r3, 0x13 - .else - movs r0, 0x1 - movs r1, 0xC - movs r2, 0x1C - movs r3, 0x13 - .endif - bl MenuDrawTextWindow - ldr r0, _08147198 @ =gSystemText_GameplayEnded - .if REVISION >= 1 - movs r1, 0x2 - movs r2, 0xB - .else - movs r1, 0x2 - movs r2, 0xD - .endif - bl MenuPrint - ldr r0, _0814719C @ =sub_8146E3C - bl SetVBlankCallback - ldr r0, _081471A0 @ =sub_81471A4 - bl SetMainCallback2 -_0814718A: - pop {r0} - bx r0 - .align 2, 0 -_08147190: .4byte gUnknown_0203933E -_08147194: .4byte gMain -_08147198: .4byte gSystemText_GameplayEnded -_0814719C: .4byte sub_8146E3C -_081471A0: .4byte sub_81471A4 - thumb_func_end sub_8147154 - - thumb_func_start sub_81471A4 -sub_81471A4: @ 81471A4 - push {lr} - sub sp, 0x4 - ldr r0, _081471DC @ =gUnknown_0203933E - movs r2, 0 - strh r2, [r0] - ldr r0, _081471E0 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _081471D4 - movs r0, 0x1 - negs r0, r0 - str r2, [sp] - movs r1, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _081471E4 @ =sub_8146E3C - bl SetVBlankCallback - ldr r0, _081471E8 @ =sub_81471EC - bl SetMainCallback2 -_081471D4: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_081471DC: .4byte gUnknown_0203933E -_081471E0: .4byte gMain -_081471E4: .4byte sub_8146E3C -_081471E8: .4byte sub_81471EC - thumb_func_end sub_81471A4 - - thumb_func_start sub_81471EC -sub_81471EC: @ 81471EC - push {r4,r5,lr} - bl UpdatePaletteFade - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _08147212 - ldr r5, _08147208 @ =gUnknown_03005EBC - ldr r0, [r5] - cmp r0, 0 - bne _0814720C - bl DoSoftReset - b _08147212 - .align 2, 0 -_08147208: .4byte gUnknown_03005EBC -_0814720C: - bl SetMainCallback2 - str r4, [r5] -_08147212: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81471EC - - thumb_func_start sub_8147218 -sub_8147218: @ 8147218 - push {r4,r5,lr} - ldr r0, _08147290 @ =gMain - mov r12, r0 - ldr r0, [r0, 0x24] - lsrs r4, r0, 3 - movs r0, 0x7 - ands r4, r0 - ldr r0, _08147294 @ =gUnknown_08411940 - ldr r1, [r0, 0x4] - ldr r0, [r0] - mov r2, r12 - str r0, [r2, 0x3C] - str r1, [r2, 0x40] - ldrh r1, [r2, 0x3E] - ldr r0, _08147298 @ =0xfffffe00 - ands r0, r1 - movs r1, 0x70 - orrs r0, r1 - strh r0, [r2, 0x3E] - mov r1, r12 - adds r1, 0x3C - .if REVISION >= 1 - movs r0, 0x38 - .else - movs r0, 0x48 - .endif - strb r0, [r1] - ldr r0, _0814729C @ =gUnknown_0203933E - ldrh r0, [r0] - cmp r0, 0 - beq _081472A8 - ldr r3, _081472A0 @ =gUnknown_08411948 - lsls r2, r4, 1 - adds r2, r4 - adds r0, r2, r3 - mov r4, r12 - adds r4, 0x40 - ldrb r5, [r0] - ldrh r1, [r4] - ldr r0, _081472A4 @ =0xfffffc00 - ands r0, r1 - orrs r0, r5 - strh r0, [r4] - adds r0, r3, 0x2 - adds r0, r2, r0 - ldrb r1, [r0] - lsls r1, 4 - adds r3, 0x1 - adds r2, r3 - ldrb r0, [r2] - lsls r0, 3 - orrs r1, r0 - mov r3, r12 - adds r3, 0x3F - movs r0, 0x1F - ands r1, r0 - lsls r1, 1 - ldrb r2, [r3] - movs r0, 0x3F - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - b _081472B8 - .align 2, 0 -_08147290: .4byte gMain -_08147294: .4byte gUnknown_08411940 -_08147298: .4byte 0xfffffe00 -_0814729C: .4byte gUnknown_0203933E -_081472A0: .4byte gUnknown_08411948 -_081472A4: .4byte 0xfffffc00 -_081472A8: - mov r2, r12 - adds r2, 0x40 - ldrh r1, [r2] - ldr r0, _081472D8 @ =0xfffffc00 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strh r0, [r2] -_081472B8: - ldr r0, _081472DC @ =gMain + 0x3C - movs r1, 0xE0 - lsls r1, 19 - movs r2, 0x1 - bl CpuFastSet - ldr r1, _081472E0 @ =gUnknown_0203933E - ldrh r0, [r1, 0x2] - cmp r0, 0 - beq _081472D0 - subs r0, 0x1 - strh r0, [r1, 0x2] -_081472D0: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081472D8: .4byte 0xfffffc00 -_081472DC: .4byte gMain + 0x3C -_081472E0: .4byte gUnknown_0203933E - thumb_func_end sub_8147218 - - thumb_func_start sub_81472E4 -sub_81472E4: @ 81472E4 - push {r4,lr} - lsls r0, 16 - lsrs r0, 16 - ldr r4, _08147308 @ =0x02000000 - movs r3, 0x80 - lsls r3, 5 - movs r1, 0 - adds r2, r4, 0 - bl ReadFlash - movs r1, 0 - ldr r2, _0814730C @ =0x000003ff -_081472FC: - ldr r0, [r4] - cmp r0, 0 - beq _08147310 - movs r0, 0x1 - b _0814731E - .align 2, 0 -_08147308: .4byte 0x02000000 -_0814730C: .4byte 0x000003ff -_08147310: - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - adds r4, 0x4 - cmp r1, r2 - bls _081472FC - movs r0, 0 -_0814731E: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81472E4 - - thumb_func_start sub_8147324 -sub_8147324: @ 8147324 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 16 - lsrs r6, r0, 16 - movs r0, 0 - ldr r1, _08147374 @ =0x00000fff - mov r8, r1 - ldr r7, _08147378 @ =ProgramFlashByte -_08147336: - movs r4, 0 - adds r5, r0, 0x1 -_0814733A: - ldr r3, [r7] - adds r0, r6, 0 - adds r1, r4, 0 - movs r2, 0 - bl _call_via_r3 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r8 - bls _0814733A - adds r0, r6, 0 - bl sub_81472E4 - lsls r0, 24 - lsrs r1, r0, 24 - lsls r0, r5, 16 - lsrs r0, 16 - cmp r1, 0 - beq _08147366 - cmp r0, 0x81 - bls _08147336 -_08147366: - adds r0, r1, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08147374: .4byte 0x00000fff -_08147378: .4byte ProgramFlashByte - thumb_func_end sub_8147324 - - thumb_func_start sub_814737C -sub_814737C: @ 814737C - push {r4-r6,lr} - adds r5, r0, 0 - movs r6, 0 -_08147382: - movs r4, 0x1 - lsls r4, r6 - adds r0, r5, 0 - ands r0, r4 - cmp r0, 0 - beq _0814739C - adds r0, r6, 0 - bl sub_8147324 - lsls r0, 24 - cmp r0, 0 - bne _0814739C - bics r5, r4 -_0814739C: - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x1F - bls _08147382 - cmp r5, 0 - beq _081473AE - movs r0, 0x1 - b _081473B0 -_081473AE: - movs r0, 0 -_081473B0: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_814737C - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data2.s b/data/data2.s index 129e3eee0..de7160a12 100644 --- a/data/data2.s +++ b/data/data2.s @@ -23970,7 +23970,8 @@ gTraderDecorations:: @ 83F62E8 .byte DECOR_TIRE .byte DECOR_PRETTY_FLOWERS -gUnknown_083F62EC:: @ 83F62EC + .align 2 +gBirchBagGrassPal:: @ 83F62EC .incbin "graphics/misc/birch_bag.gbapal" .incbin "graphics/misc/birch_grass.gbapal" @@ -23990,7 +23991,8 @@ gBirchBagTilemap:: @ 83F636C gBirchGrassTilemap:: @ 83F64F8 .incbin "graphics/misc/birch_grass_map.bin.lz" -gUnknown_083F66F0:: @ 83F66F0 + .align 2 +gBirchHelpGfx:: @ 83F66F0 .incbin "graphics/misc/birch_help.4bpp.lz" .align 2 @@ -30188,10 +30190,10 @@ gUnknown_08411940:: @ 8411940 gUnknown_08411948:: @ 8411948 .incbin "baserom.gba", 0x00411948, 0x18 -gUnknown_08411960:: @ 8411960 +gSaveFailedClockPal:: @ 8411960 .incbin "graphics/misc/clock_small.gbapal" -gUnknown_08411980:: @ 8411980 +gSaveFailedClockGfx:: @ 8411980 .incbin "graphics/misc/clock_small.4bpp.lz" @ 8411A10 diff --git a/ld_script.txt b/ld_script.txt index f970dd23f..1292738a1 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -190,7 +190,7 @@ SECTIONS { src/diploma.o(.text); src/berry_tag_screen.o(.text); asm/mystery_event_menu.o(.text); - asm/save_failed_screen.o(.text); + src/save_failed_screen.o(.text); asm/rom_81473B8.o(.text); src/clear_save_data_menu.o(.text); asm/rom_8148B8C.o(.text); diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c new file mode 100644 index 000000000..c35118858 --- /dev/null +++ b/src/save_failed_screen.c @@ -0,0 +1,474 @@ +#include "global.h" +#include "main.h" +#include "sprite.h" +#include "palette.h" +#include "task.h" +#include "text.h" +#include "menu.h" +#include "save.h" +#include "m4a.h" +#include "gba/flash_internal.h" + +extern u8 unk_2000000[]; + +extern u16 gUnknown_0203933C; +extern u16 gUnknown_0203933E; +extern u32 gUnknown_03005EA8; +extern u32 gUnknown_03005EBC; + +extern u8 gBirchHelpGfx[]; + +extern u8 gSystemText_SaveFailedBackupCheck[]; +extern u8 gSystemText_CheckCompleteSaveAttempt[]; +extern u8 gSystemText_BackupDamagedGameContinue[]; +extern u8 gSystemText_SaveCompletedPressA[]; +extern u8 gSystemText_SaveCompletedGameEnd[]; +extern u8 gSystemText_GameplayEnded[]; + +extern u8 gBirchGrassTilemap[]; +extern u8 gBirchBagTilemap[]; + +extern const u8 gSaveFailedClockGfx[]; +extern const u8 gSaveFailedClockPal[]; +extern u8 gBirchBagGrassPal[]; + +void sub_8146E50(void); +void sub_8147048(void); +void sub_8147154(void); +void sub_81471A4(void); +void sub_81471EC(void); +void sub_8147218(void); +bool8 sub_814737C(u32); + +void fullscreen_save_activate(u8 var) +{ + SetMainCallback2(sub_8146E50); + gUnknown_0203933C = var; + gUnknown_0203933E = 0; +} + +void sub_8146E3C(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_8146E50(void) +{ + u16 ime; + + switch(gMain.state) + { + case 0: + default: + SetVBlankCallback(0); + REG_DISPCNT = 0; + REG_BG3CNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + DmaFill16(3, 0, VRAM, VRAM_SIZE); + DmaFill32(3, 0, OAM, OAM_SIZE); + DmaFill16(3, 0, PLTT, PLTT_SIZE); + LZ77UnCompVram(&gBirchHelpGfx, (void *)VRAM); + LZ77UnCompVram(&gBirchBagTilemap, (void *)(VRAM + 0x3000)); + LZ77UnCompVram(&gBirchGrassTilemap, (void *)(VRAM + 0x3800)); + LZ77UnCompVram(&gSaveFailedClockGfx, (void *)(VRAM + 0x10020)); + ResetSpriteData(); + ResetTasks(); + ResetPaletteFade(); + LoadPalette(&gBirchBagGrassPal, 0, 0x40); + LoadPalette(&gSaveFailedClockPal, 0x100, 0x20); + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + // in revision 1.0, the text window is too small, causing text to overflow and create garbage. this is fixed in later revisions. +#if (REVISION >= 1) + MenuDrawTextWindow(13, 6, 16, 9); + MenuDrawTextWindow(1, 10, 28, 19); + MenuPrint(gSystemText_SaveFailedBackupCheck, 2, 11); +#else + MenuDrawTextWindow(13, 8, 16, 11); + MenuDrawTextWindow(1, 12, 28, 19); + MenuPrint(gSystemText_SaveFailedBackupCheck, 2, 13); +#endif + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + ime = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = ime; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + SetVBlankCallback(sub_8146E3C); + REG_BG3CNT = 0x703; + REG_BG2CNT = 0x602; + REG_BG0CNT = 0x1f08; + REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG3_ON | DISPCNT_BG2_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_MODE_0; + gMain.state++; + break; + case 1: + if(!UpdatePaletteFade()) + { + SetMainCallback2(sub_8147048); + SetVBlankCallback(sub_8147218); + } + break; + } +} + +void sub_8147048(void) +{ + u8 clockVal = 0; + + gUnknown_0203933E = 1; + + if(gUnknown_03005EA8) + { + while(1) // _0814705C + { + if(!sub_814737C(gUnknown_03005EA8)) + { + #if (REVISION >= 1) + MenuDrawTextWindow(1, 10, 28, 19); + MenuPrint(gSystemText_CheckCompleteSaveAttempt, 2, 11); + #else + MenuDrawTextWindow(1, 12, 28, 19); + MenuPrint(gSystemText_CheckCompleteSaveAttempt, 2, 13); + #endif + sub_8125C3C(gUnknown_0203933C); + + if(gUnknown_03005EA8) + #if (REVISION >= 1) + MenuPrint(gSystemText_SaveFailedBackupCheck, 2, 11); + #else + MenuPrint(gSystemText_SaveFailedBackupCheck, 2, 13); + #endif + + clockVal++; + + if(!gUnknown_03005EA8 || clockVal > 2) + break; // go to _081470A6 + + continue; + } + goto gotoLabel2; + } + } + if(clockVal == 3) // _081470A6 + { + #if (REVISION >= 1) + MenuDrawTextWindow(1, 10, 28, 19); + MenuPrint(gSystemText_BackupDamagedGameContinue, 2, 11); + #else + MenuDrawTextWindow(1, 12, 28, 19); + MenuPrint(gSystemText_BackupDamagedGameContinue, 2, 13); + #endif + SetMainCallback2(sub_81471A4); + goto gotoLabel; // this calls sub_81471A4 for some reason. + } + else // _081470E4 + { + #if (REVISION >= 1) + MenuDrawTextWindow(1, 10, 28, 19); + #else + MenuDrawTextWindow(1, 12, 28, 19); + #endif + + if(!gUnknown_03005EBC) // cant continue game. + { + #if (REVISION >= 1) + MenuPrint(gSystemText_SaveCompletedGameEnd, 2, 11); + #else + MenuPrint(gSystemText_SaveCompletedGameEnd, 2, 13); + #endif + goto gotoLabel; + } + else // can continue game. + goto gotoLabel3; + } + // no matter what I do, i can't get rid of these gotos. They were seemingly labeled at the end by the developer and jumped to manually depending on the result. +gotoLabel2: // _0814710C +#if (REVISION >= 1) + MenuDrawTextWindow(1, 10, 28, 19); + MenuPrint(gSystemText_BackupDamagedGameContinue, 2, 11); +#else + MenuDrawTextWindow(1, 12, 28, 19); + MenuPrint(gSystemText_BackupDamagedGameContinue, 2, 13); +#endif + SetMainCallback2(sub_8147154); + return; + +gotoLabel3: +#if (REVISION >= 1) + MenuPrint(gSystemText_SaveCompletedPressA, 2, 11); +#else + MenuPrint(gSystemText_SaveCompletedPressA, 2, 13); +#endif + +gotoLabel: // _0814713E + SetMainCallback2(sub_81471A4); // seemingly called twice? +} + +void sub_8147154(void) +{ + gUnknown_0203933E = 0; + + if(gMain.newKeys & A_BUTTON) + { + #if (REVISION >= 1) + MenuDrawTextWindow(1, 10, 28, 19); + MenuPrint(gSystemText_GameplayEnded, 2, 11); + #else + MenuDrawTextWindow(1, 12, 28, 19); + MenuPrint(gSystemText_GameplayEnded, 2, 13); + #endif + SetVBlankCallback(sub_8146E3C); + SetMainCallback2(sub_81471A4); + } +} + +void sub_81471A4(void) +{ + u8 zero; + + gUnknown_0203933E = zero = 0; + + if(gMain.newKeys & A_BUTTON) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, zero, 16, 0); + SetVBlankCallback(sub_8146E3C); + SetMainCallback2(sub_81471EC); + } +} + +void sub_81471EC(void) +{ + if(!UpdatePaletteFade()) + { + if(!gUnknown_03005EBC) + DoSoftReset(); + else + { + SetMainCallback2((MainCallback)gUnknown_03005EBC); + gUnknown_03005EBC = 0; + } + } +} + +// do later +__attribute__((naked)) +void sub_8147218(void) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + ldr r0, _08147290 @ =gMain\n\ + mov r12, r0\n\ + ldr r0, [r0, 0x24]\n\ + lsrs r4, r0, 3\n\ + movs r0, 0x7\n\ + ands r4, r0\n\ + ldr r0, _08147294 @ =gUnknown_08411940\n\ + ldr r1, [r0, 0x4]\n\ + ldr r0, [r0]\n\ + mov r2, r12\n\ + str r0, [r2, 0x3C]\n\ + str r1, [r2, 0x40]\n\ + ldrh r1, [r2, 0x3E]\n\ + ldr r0, _08147298 @ =0xfffffe00\n\ + ands r0, r1\n\ + movs r1, 0x70\n\ + orrs r0, r1\n\ + strh r0, [r2, 0x3E]\n\ + mov r1, r12\n\ + adds r1, 0x3C\n\ + @.if REVISION >= 1\n\ + @movs r0, 0x38\n\ + @.else\n\ + movs r0, 0x48\n\ + @.endif\n\ + strb r0, [r1]\n\ + ldr r0, _0814729C @ =gUnknown_0203933E\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + beq _081472A8\n\ + ldr r3, _081472A0 @ =gUnknown_08411948\n\ + lsls r2, r4, 1\n\ + adds r2, r4\n\ + adds r0, r2, r3\n\ + mov r4, r12\n\ + adds r4, 0x40\n\ + ldrb r5, [r0]\n\ + ldrh r1, [r4]\n\ + ldr r0, _081472A4 @ =0xfffffc00\n\ + ands r0, r1\n\ + orrs r0, r5\n\ + strh r0, [r4]\n\ + adds r0, r3, 0x2\n\ + adds r0, r2, r0\n\ + ldrb r1, [r0]\n\ + lsls r1, 4\n\ + adds r3, 0x1\n\ + adds r2, r3\n\ + ldrb r0, [r2]\n\ + lsls r0, 3\n\ + orrs r1, r0\n\ + mov r3, r12\n\ + adds r3, 0x3F\n\ + movs r0, 0x1F\n\ + ands r1, r0\n\ + lsls r1, 1\n\ + ldrb r2, [r3]\n\ + movs r0, 0x3F\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r3]\n\ + b _081472B8\n\ + .align 2, 0\n\ +_08147290: .4byte gMain\n\ +_08147294: .4byte gUnknown_08411940\n\ +_08147298: .4byte 0xfffffe00\n\ +_0814729C: .4byte gUnknown_0203933E\n\ +_081472A0: .4byte gUnknown_08411948\n\ +_081472A4: .4byte 0xfffffc00\n\ +_081472A8:\n\ + mov r2, r12\n\ + adds r2, 0x40\n\ + ldrh r1, [r2]\n\ + ldr r0, _081472D8 @ =0xfffffc00\n\ + ands r0, r1\n\ + movs r1, 0x1\n\ + orrs r0, r1\n\ + strh r0, [r2]\n\ +_081472B8:\n\ + ldr r0, _081472DC @ =gMain + 0x3C\n\ + movs r1, 0xE0\n\ + lsls r1, 19\n\ + movs r2, 0x1\n\ + bl CpuFastSet\n\ + ldr r1, _081472E0 @ =gUnknown_0203933E\n\ + ldrh r0, [r1, 0x2]\n\ + cmp r0, 0\n\ + beq _081472D0\n\ + subs r0, 0x1\n\ + strh r0, [r1, 0x2]\n\ +_081472D0:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_081472D8: .4byte 0xfffffc00\n\ +_081472DC: .4byte gMain + 0x3C\n\ +_081472E0: .4byte gUnknown_0203933E\n\ + .syntax divided"); +} + +bool8 sub_81472E4(u16 var) +{ + u32 *ptr = unk_2000000; + u16 i; + + ReadFlash(var, 0, ptr, 4096); + + for(i = 0; i < 0x400; i++, ptr++) + if(*ptr) + return TRUE; + + return FALSE; +} + +#ifdef NONMATCHING +bool8 sub_8147324(u16 arg0) { + u16 i2; + u16 i; + bool8 success; + + i = 0; + while (TRUE) { + u32 next; + + i2 = 0; + next = i + 1; + + for (; i2 < 0x1000; i2++) { + ProgramFlashByte(arg0, i2, 0); + } + + if (!(success = sub_81472E4(arg0), (i = next)) || i >= 130) // matches except it checks r0 instead of r1. both are the same value, but the compiler prefers r1 for some reason. + break; + } + + return success; +} +#else +__attribute__((naked)) +bool8 sub_8147324(u16 arg0) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + movs r0, 0\n\ + ldr r1, _08147374 @ =0x00000fff\n\ + mov r8, r1\n\ + ldr r7, _08147378 @ =ProgramFlashByte\n\ +_08147336:\n\ + movs r4, 0\n\ + adds r5, r0, 0x1\n\ +_0814733A:\n\ + ldr r3, [r7]\n\ + adds r0, r6, 0\n\ + adds r1, r4, 0\n\ + movs r2, 0\n\ + bl _call_via_r3\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + cmp r4, r8 @ compare i to var.\n\ + bls _0814733A\n\ + adds r0, r6, 0\n\ + bl sub_81472E4\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + lsls r0, r5, 16\n\ + lsrs r0, 16\n\ + cmp r1, 0\n\ + beq _08147366\n\ + cmp r0, 0x81\n\ + bls _08147336\n\ +_08147366:\n\ + adds r0, r1, 0 @ add var64 to the result from sub_81472E4(var)?\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_08147374: .4byte 0x00000fff\n\ +_08147378: .4byte ProgramFlashByte\n\ + .syntax divided"); +} +#endif + +bool8 sub_814737C(u32 var) +{ + u16 i; + + for(i = 0; i < 0x20; i++) + if(var & (1 << i) && !sub_8147324(i)) + var &= ~(1 << i); + + if(var == 0) + return FALSE; + else + return TRUE; +} diff --git a/src/starter_choose.c b/src/starter_choose.c index 341f73e4c..2750705b8 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -20,12 +20,12 @@ struct MonCoords extern void * const gUnknown_081FAF4C[]; extern const u8 gStarterChoose_PokeballCoords[][2]; -extern u8 gUnknown_083F66F0[]; +extern u8 gBirchHelpGfx[]; extern u8 gBirchBagTilemap[]; extern u8 gBirchGrassTilemap[]; extern struct SpriteSheet gUnknown_083F7794; extern struct SpriteSheet gUnknown_083F77A4; -extern u8 gUnknown_083F62EC[]; +extern u8 gBirchBagGrassPal[]; extern const u8 gStarterChoose_LabelCoords[][2]; extern u16 gStarterMons[]; extern union AffineAnimCmd *gUnknown_083F778C[]; @@ -108,7 +108,7 @@ void CB2_ChooseStarter(void) DmaFill32(3, 0, OAM, OAM_SIZE); DmaFill16(3, 0, PLTT, PLTT_SIZE); - LZ77UnCompVram(&gUnknown_083F66F0, (void *)VRAM); + LZ77UnCompVram(&gBirchHelpGfx, (void *)VRAM); LZ77UnCompVram(&gBirchBagTilemap, (void *)(VRAM + 0x3000)); LZ77UnCompVram(&gBirchGrassTilemap, (void *)(VRAM + 0x3800)); remove_some_task(); @@ -116,7 +116,7 @@ void CB2_ChooseStarter(void) ResetSpriteData(); ResetPaletteFade(); FreeAllSpritePalettes(); - LoadPalette(gUnknown_083F62EC, 0, 0x40); + LoadPalette(gBirchBagGrassPal, 0, 0x40); LoadCompressedObjectPic(&gUnknown_083F7794); LoadCompressedObjectPic(&gUnknown_083F77A4); LoadSpritePalettes(gUnknown_083F77B4); |