summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/rom_813BA94.s8
-rw-r--r--asm/save_failed_screen.s779
-rw-r--r--data/data2.s10
-rw-r--r--ld_script.txt2
-rw-r--r--src/save_failed_screen.c474
-rw-r--r--src/starter_choose.c8
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);