summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-06-15 16:24:47 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-06-15 16:24:47 -0400
commite28c7676126d31efa690f686152be19d5b62f743 (patch)
tree256785f97e8f6c0079a1dc9f2a45e6b754df9124
parent9fb5dcdbf6a954762f68e792b69c5d83cbd9a4f5 (diff)
berry_fix_program
-rw-r--r--asm/berry_fix_program.s344
-rw-r--r--asm/title_screen.s4
-rw-r--r--common_syms/berry_fix_program.txt4
-rw-r--r--data/data_83FECCC.s5
-rw-r--r--data/data_8471F00.s71
-rw-r--r--data/graphics.s36
-rw-r--r--include/graphics.h21
-rw-r--r--ld_script.txt3
-rw-r--r--src/berry_fix_program.c191
-rw-r--r--sym_common.txt15
10 files changed, 307 insertions, 387 deletions
diff --git a/asm/berry_fix_program.s b/asm/berry_fix_program.s
deleted file mode 100644
index e24fa6c3c..000000000
--- a/asm/berry_fix_program.s
+++ /dev/null
@@ -1,344 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_815F6E0
-sub_815F6E0: @ 815F6E0
- push {r4-r6,lr}
- movs r6, 0x80
- lsls r6, 19
- movs r2, 0
- strh r2, [r6]
- ldr r1, _0815F73C @ =0x04000010
- strh r2, [r1]
- adds r1, 0x2
- strh r2, [r1]
- adds r1, 0x3E
- strh r2, [r1]
- ldr r5, _0815F740 @ =gUnknown_847A890
- lsls r4, r0, 1
- adds r4, r0
- lsls r4, 2
- adds r0, r4, r5
- ldr r0, [r0]
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- adds r0, r5, 0x4
- adds r0, r4, r0
- ldr r0, [r0]
- ldr r1, _0815F744 @ =0x0600f800
- bl LZ77UnCompVram
- adds r5, 0x8
- adds r4, r5
- ldr r0, [r4]
- movs r1, 0xA0
- lsls r1, 19
- movs r4, 0x80
- lsls r4, 1
- adds r2, r4, 0
- bl CpuSet
- ldr r1, _0815F748 @ =0x04000008
- movs r2, 0xF8
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- strh r4, [r6]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0815F73C: .4byte 0x04000010
-_0815F740: .4byte gUnknown_847A890
-_0815F744: .4byte 0x0600f800
-_0815F748: .4byte 0x04000008
- thumb_func_end sub_815F6E0
-
- thumb_func_start sub_815F74C
-sub_815F74C: @ 815F74C
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _0815F7C4 @ =0x0000ffff
- bl DisableInterrupts
- movs r0, 0x1
- bl EnableInterrupts
- bl m4aSoundVSyncOff
- movs r0, 0
- bl SetVBlankCallback
- movs r4, 0
- str r4, [sp]
- ldr r0, _0815F7C8 @ =0x040000d4
- mov r1, sp
- str r1, [r0]
- movs r1, 0xC0
- lsls r1, 19
- str r1, [r0, 0x4]
- ldr r1, _0815F7CC @ =0x85006000
- str r1, [r0, 0x8]
- ldr r1, [r0, 0x8]
- str r4, [sp]
- mov r1, sp
- str r1, [r0]
- movs r1, 0xA0
- lsls r1, 19
- str r1, [r0, 0x4]
- ldr r1, _0815F7D0 @ =0x85000100
- str r1, [r0, 0x8]
- ldr r0, [r0, 0x8]
- bl ResetSpriteData
- bl ResetTasks
- bl ScanlineEffect_Stop
- ldr r0, _0815F7D4 @ =gUnknown_3005ECC
- strb r4, [r0]
- ldr r0, _0815F7D8 @ =sub_815F7F0
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0815F7DC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0x8]
- ldr r0, _0815F7E0 @ =sub_815F7E4
- bl SetMainCallback2
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0815F7C4: .4byte 0x0000ffff
-_0815F7C8: .4byte 0x040000d4
-_0815F7CC: .4byte 0x85006000
-_0815F7D0: .4byte 0x85000100
-_0815F7D4: .4byte gUnknown_3005ECC
-_0815F7D8: .4byte sub_815F7F0
-_0815F7DC: .4byte gTasks
-_0815F7E0: .4byte sub_815F7E4
- thumb_func_end sub_815F74C
-
- thumb_func_start sub_815F7E4
-sub_815F7E4: @ 815F7E4
- push {lr}
- bl RunTasks
- pop {r0}
- bx r0
- thumb_func_end sub_815F7E4
-
- thumb_func_start sub_815F7F0
-sub_815F7F0: @ 815F7F0
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _0815F818 @ =gTasks+0x8
- adds r5, r0, r1
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0xA
- bls _0815F80C
- b _0815F9A6
-_0815F80C:
- lsls r0, 2
- ldr r1, _0815F81C @ =_0815F820
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0815F818: .4byte gTasks+0x8
-_0815F81C: .4byte _0815F820
- .align 2, 0
-_0815F820:
- .4byte _0815F84C
- .4byte _0815F856
- .4byte _0815F874
- .4byte _0815F9A6
- .4byte _0815F890
- .4byte _0815F8C8
- .4byte _0815F934
- .4byte _0815F96A
- .4byte _0815F96E
- .4byte _0815F98C
- .4byte _0815F996
-_0815F84C:
- movs r0, 0x5
- bl sub_815F6E0
- movs r0, 0x1
- b _0815F9A4
-_0815F856:
- ldr r0, _0815F870 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0815F864
- b _0815F9A6
-_0815F864:
- movs r0, 0
- bl sub_815F6E0
- movs r0, 0x2
- b _0815F9A4
- .align 2, 0
-_0815F870: .4byte gMain
-_0815F874:
- ldr r0, _0815F88C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0815F882
- b _0815F9A6
-_0815F882:
- movs r0, 0x1
- bl sub_815F6E0
- movs r0, 0x4
- b _0815F9A4
- .align 2, 0
-_0815F88C: .4byte gMain
-_0815F890:
- ldr r0, _0815F8B4 @ =gUnknown_3005EF0
- ldr r1, _0815F8B8 @ =gMultiBootProgram_BerryGlitchFix_Start
- str r1, [r0]
- ldr r2, _0815F8BC @ =gUnknown_3005EF8
- ldr r0, _0815F8C0 @ =gMultiBootProgram_BerryGlitchFix_End
- subs r0, r1
- str r0, [r2]
- ldr r0, _0815F8C4 @ =gUnknown_3005F00
- str r1, [r0, 0x28]
- adds r1, r0, 0
- adds r1, 0x4B
- movs r4, 0
- strb r4, [r1]
- bl MultiBootInit
- strh r4, [r5, 0x2]
- movs r0, 0x5
- b _0815F9A4
- .align 2, 0
-_0815F8B4: .4byte gUnknown_3005EF0
-_0815F8B8: .4byte gMultiBootProgram_BerryGlitchFix_Start
-_0815F8BC: .4byte gUnknown_3005EF8
-_0815F8C0: .4byte gMultiBootProgram_BerryGlitchFix_End
-_0815F8C4: .4byte gUnknown_3005F00
-_0815F8C8:
- ldr r0, _0815F910 @ =gUnknown_3005F00
- ldrb r6, [r0, 0x18]
- adds r4, r0, 0
- cmp r6, 0
- bne _0815F920
- ldr r0, [r4, 0x1C]
- ldr r1, _0815F914 @ =0x00020200
- ands r0, r1
- cmp r0, r1
- bne _0815F920
- ldrh r0, [r5, 0x2]
- adds r0, 0x1
- strh r0, [r5, 0x2]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB4
- ble _0815F924
- movs r0, 0x2
- bl sub_815F6E0
- ldr r0, _0815F918 @ =gUnknown_3005EF0
- ldr r1, [r0]
- adds r1, 0xC0
- ldr r0, _0815F91C @ =gUnknown_3005EF8
- ldr r2, [r0]
- subs r2, 0xC0
- movs r0, 0x1
- str r0, [sp]
- adds r0, r4, 0
- movs r3, 0x4
- bl MultiBootStartMaster
- strh r6, [r5, 0x2]
- movs r0, 0x6
- b _0815F9A4
- .align 2, 0
-_0815F910: .4byte gUnknown_3005F00
-_0815F914: .4byte 0x00020200
-_0815F918: .4byte gUnknown_3005EF0
-_0815F91C: .4byte gUnknown_3005EF8
-_0815F920:
- movs r0, 0
- strh r0, [r5, 0x2]
-_0815F924:
- adds r0, r4, 0
- bl MultiBootMain
- ldr r1, _0815F930 @ =gUnknown_3005EF4
- str r0, [r1]
- b _0815F9A6
- .align 2, 0
-_0815F930: .4byte gUnknown_3005EF4
-_0815F934:
- ldr r4, _0815F954 @ =gUnknown_3005F00
- adds r0, r4, 0
- bl MultiBootMain
- ldr r1, _0815F958 @ =gUnknown_3005EF4
- str r0, [r1]
- adds r0, r4, 0
- bl MultiBootCheckComplete
- cmp r0, 0
- beq _0815F95C
- movs r0, 0x3
- bl sub_815F6E0
- movs r0, 0x7
- b _0815F9A4
- .align 2, 0
-_0815F954: .4byte gUnknown_3005F00
-_0815F958: .4byte gUnknown_3005EF4
-_0815F95C:
- ldrb r1, [r4, 0x1E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0815F9A6
- movs r0, 0x9
- b _0815F9A4
-_0815F96A:
- movs r0, 0x8
- b _0815F9A4
-_0815F96E:
- ldr r0, _0815F988 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0815F9A6
- adds r0, r2, 0
- bl DestroyTask
- bl DoSoftReset
- b _0815F9A6
- .align 2, 0
-_0815F988: .4byte gMain
-_0815F98C:
- movs r0, 0x4
- bl sub_815F6E0
- movs r0, 0xA
- b _0815F9A4
-_0815F996:
- ldr r0, _0815F9B0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0815F9A6
- movs r0, 0
-_0815F9A4:
- strh r0, [r5]
-_0815F9A6:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0815F9B0: .4byte gMain
- thumb_func_end sub_815F7F0
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/title_screen.s b/asm/title_screen.s
index a60bc959c..07a861c86 100644
--- a/asm/title_screen.s
+++ b/asm/title_screen.s
@@ -1688,13 +1688,13 @@ sub_80796E8: @ 80796E8
cmp r0, 0
bne _080796FE
bl m4aMPlayAllStop
- ldr r0, _08079704 @ =sub_815F74C
+ ldr r0, _08079704 @ =mb_berry_fix_serve
bl SetMainCallback2
_080796FE:
pop {r0}
bx r0
.align 2, 0
-_08079704: .4byte sub_815F74C
+_08079704: .4byte mb_berry_fix_serve
thumb_func_end sub_80796E8
thumb_func_start sub_8079708
diff --git a/common_syms/berry_fix_program.txt b/common_syms/berry_fix_program.txt
new file mode 100644
index 000000000..63b3de271
--- /dev/null
+++ b/common_syms/berry_fix_program.txt
@@ -0,0 +1,4 @@
+gUnknown_3005EF0
+gUnknown_3005EF4
+gUnknown_3005EF8
+gUnknown_3005F00
diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s
index 000339fdf..e84c93578 100644
--- a/data/data_83FECCC.s
+++ b/data/data_83FECCC.s
@@ -2808,7 +2808,10 @@ gUnknown_843F8DB:: @ 843F8DB
.incbin "baserom.gba", 0x43F8DB, 0x5
gUnknown_843F8E0:: @ 843F8E0
- .incbin "baserom.gba", 0x43F8E0, 0x10
+ .4byte gUnknown_847A8D8
+ .4byte gUnknown_847A8FA
+ .4byte gUnknown_847A913
+ .4byte gUnknown_847A934
gUnknown_843F8F0:: @ 843F8F0
.incbin "baserom.gba", 0x43F8F0, 0x20
diff --git a/data/data_8471F00.s b/data/data_8471F00.s
index 8877ff4c5..d90870d14 100644
--- a/data/data_8471F00.s
+++ b/data/data_8471F00.s
@@ -231,19 +231,72 @@ gUnknown_8479748::
// berry_fix_program
-gUnknown_847A890:: @ 847A890
- .4byte gUnknown_8EA467C, gUnknown_8EA52B8, gUnknown_8EA463C
- .4byte gUnknown_8EA5664, gUnknown_8EA60C8, gUnknown_8EA5604
- .4byte gUnknown_8EA6408, gUnknown_8EA7028, gUnknown_8EA63C8
- .4byte gUnknown_8EA7320, gUnknown_8EA8118, gUnknown_8EA72E0
- .4byte gUnknown_8EA8408, gUnknown_8EA8CC8, gUnknown_8EA83C8
- .4byte gUnknown_8EA8F40, gUnknown_8EA9588, gUnknown_8EA8F00
-
- .incbin "baserom.gba", 0x47A8D8, 0x2D4
+gUnknown_847A8D8::
+ .string "{CLEAR 11}A{CLEAR 6}B{CLEAR 6}C{CLEAR 26}D{CLEAR 6}E{CLEAR 6}F{CLEAR 26}others$"
+
+gUnknown_847A8FA::
+ .string "{CLEAR 11}G{CLEAR 6}H{CLEAR 6}I{CLEAR 26}J{CLEAR 6}K{CLEAR 6}L$"
+
+gUnknown_847A913::
+ .string "{CLEAR 11}M{CLEAR 6}N{CLEAR 6}O{CLEAR 26}P{CLEAR 6}Q{CLEAR 6}R{CLEAR 6}S{CLEAR 26} $"
+
+gUnknown_847A934::
+ .string "{CLEAR 11}T{CLEAR 6}U{CLEAR 6}V{CLEAR 26}W{CLEAR 6}X{CLEAR 6}Y{CLEAR 6}Z{CLEAR 26} $"
+ .string "{CLEAR 11}a{CLEAR 6}b{CLEAR 6}c{CLEAR 26}d{CLEAR 6}e{CLEAR 6}f{CLEAR 6} {CLEAR 26}.$"
+ .string "{CLEAR 11}g{CLEAR 6}h{CLEAR 7}i{CLEAR 27}j{CLEAR 6}k{CLEAR 6}l{CLEAR 7} {CLEAR 26},$"
+ .string "{CLEAR 11}m{CLEAR 6}n{CLEAR 7}o{CLEAR 26}p{CLEAR 6}q{CLEAR 7}r{CLEAR 6}s{CLEAR 27} $"
+ .string "{CLEAR 12}t{CLEAR 6}u{CLEAR 6}v{CLEAR 26}w{CLEAR 6}x{CLEAR 6}y{CLEAR 6}z{CLEAR 26} $"
+ .string "{CLEAR 11}A{CLEAR 6}B{CLEAR 6}C{CLEAR 26}D{CLEAR 6}E{CLEAR 6}F{CLEAR 6} {CLEAR 26}.$"
+ .string "{CLEAR 11}G{CLEAR 6}H{CLEAR 6}I{CLEAR 26}J{CLEAR 6}K{CLEAR 6}L{CLEAR 6} {CLEAR 26},$"
+ .string "{CLEAR 11}M{CLEAR 6}N{CLEAR 6}O{CLEAR 26}P{CLEAR 6}Q{CLEAR 6}R{CLEAR 6}S{CLEAR 26} $"
+ .string "{CLEAR 11}T{CLEAR 6}U{CLEAR 6}V{CLEAR 26}W{CLEAR 6}X{CLEAR 6}Y{CLEAR 6}Z{CLEAR 26} $"
+ .string "{CLEAR 11}0{CLEAR 16}1{CLEAR 16}2{CLEAR 16}3{CLEAR 16}4{CLEAR 16} $"
+ .string "{CLEAR 11}5{CLEAR 16}6{CLEAR 16}7{CLEAR 16}8{CLEAR 16}9{CLEAR 16} $"
+ .string "{CLEAR 11}!{CLEAR 16}?{CLEAR 16}♂{CLEAR 16}♀{CLEAR 16}/{CLEAR 16}-$"
+ .string "{CLEAR 11}…{CLEAR 16}“{CLEAR 16}”{CLEAR 18}‘{CLEAR 18}'{CLEAR 18} $"
+ .string "ABCDE$"
+ .string "FGHIJ$"
+ .string "KLMNO$"
+ .string "PQRST$"
+ .string "UVWXY$"
+ .string "Z $"
+ .string "01234$"
+ .string "56789$"
+ .string ".,!? $"
+ .string "-/&… $"
+ .string "abcde$"
+ .string "fghij$"
+ .string "klmno$"
+ .string "pqrst$"
+ .string "uvwxy$"
+ .string "z $"
+ .string "01234$"
+ .string "56789$"
+ .string ".,!? $"
+ .string "-/&… $"
+ .string "$"
+ .string "$"
+ .string "$"
+ .string "$"
+ .string "$"
+ .string "$"
+ .string "$"
+ .string "$"
+ .string "{EXTRA 245}{EXTRA 246}{EXTRA 247}{EXTRA 248}{EXTRA 254}$"
+ .string "{EXTRA 249}{EXTRA 250}{EXTRA 252}{EXTRA 251}{EXTRA 253}$"
+ .string "{EXTRA 236}{EXTRA 237}{EXTRA 238}{EXTRA 235}{EXTRA 234}$"
+ .string "♂♀{EXTRA 212}{EXTRA 213}{EXTRA 211}$"
+ .string "{EXTRA 216}{EXTRA 217}{EXTRA 242}{EXTRA 243}{EXTRA 244}$"
+ .string "{EXTRA 218}{EXTRA 241}{EXTRA 224}{EXTRA 226}{EXTRA 227}$"
+ .string "{EXTRA 240}{EXTRA 239}{EXTRA 225}{EXTRA 214}{EXTRA 215}$"
+ .string "{EXTRA 228}{EXTRA 229}{EXTRA 230}{EXTRA 231}{EXTRA 232}$"
+ .string "{EXTRA 233}{EXTRA 220}{EXTRA 221}{EXTRA 222}{EXTRA 209}$"
+ .string "{EXTRA 210}{EXTRA 208}ょ: $"
// trainer_tower (again?)
@ 847ABAC
+.align 2
.include "data/trainer_tower/trainers.inc"
.align 2
diff --git a/data/graphics.s b/data/graphics.s
index 4a40776d9..de5272f5d 100644
--- a/data/graphics.s
+++ b/data/graphics.s
@@ -16234,58 +16234,58 @@ gTilesetPalettes_8EA1B68:: @ 8EA1B68
gTilesetTiles_8EA1D68:: @ 8EA1D68
.incbin "data/tilesets/primary/82D4A94/tiles.4bpp.lz"
-gUnknown_8EA463C:: @ 8EA463C
+gBerryFixGameboy_Pal:: @ 8EA463C
.incbin "graphics/berry_fix/gba_small.gbapal"
-gUnknown_8EA467C:: @ 8EA467C
+gBerryFixGameboy_Gfx:: @ 8EA467C
.incbin "graphics/berry_fix/gba_small.4bpp.lz"
-gUnknown_8EA52B8:: @ 8EA52B8
+gBerryFixGameboy_Tilemap:: @ 8EA52B8
.incbin "graphics/berry_fix/gba_small.bin.lz"
-gUnknown_8EA5604:: @ 8EA5604
+gBerryFixGameboyLogo_Pal:: @ 8EA5604
.incbin "graphics/berry_fix/logo.gbapal"
-gUnknown_8EA5664:: @ 8EA5664
+gBerryFixGameboyLogo_Gfx:: @ 8EA5664
.incbin "graphics/berry_fix/logo.4bpp.lz"
-gUnknown_8EA60C8:: @ 8EA60C8
+gBerryFixGameboyLogo_Tilemap:: @ 8EA60C8
.incbin "graphics/berry_fix/logo.bin.lz"
-gUnknown_8EA63C8:: @ 8EA63C8
+gBerryFixGbaTransfer_Pal:: @ 8EA63C8
.incbin "graphics/berry_fix/gba_transfer.gbapal"
-gUnknown_8EA6408:: @ 8EA6408
+gBerryFixGbaTransfer_Gfx:: @ 8EA6408
.incbin "graphics/berry_fix/gba_transfer.4bpp.lz"
-gUnknown_8EA7028:: @ 8EA7028
+gBerryFixGbaTransfer_Tilemap:: @ 8EA7028
.incbin "graphics/berry_fix/gba_transfer.bin.lz"
-gUnknown_8EA72E0:: @ 8EA72E0
+gBerryFixGbaTransferHighlight_Pal:: @ 8EA72E0
.incbin "graphics/berry_fix/gba_transfer_highlight.gbapal"
-gUnknown_8EA7320:: @ 8EA7320
+gBerryFixGbaTransferHighlight_Gfx:: @ 8EA7320
.incbin "graphics/berry_fix/gba_transfer_highlight.4bpp.lz"
-gUnknown_8EA8118:: @ 8EA8118
+gBerryFixGbaTransferHighlight_Tilemap:: @ 8EA8118
.incbin "graphics/berry_fix/gba_transfer_highlight.bin.lz"
-gUnknown_8EA83C8:: @ 8EA83C8
+gBerryFixGbaTransferError_Pal:: @ 8EA83C8
.incbin "graphics/berry_fix/gba_transfer_error.gbapal"
-gUnknown_8EA8408:: @ 8EA8408
+gBerryFixGbaTransferError_Gfx:: @ 8EA8408
.incbin "graphics/berry_fix/gba_transfer_error.4bpp.lz"
-gUnknown_8EA8CC8:: @ 8EA8CC8
+gBerryFixGbaTransferError_Tilemap:: @ 8EA8CC8
.incbin "graphics/berry_fix/gba_transfer_error.bin.lz"
-gUnknown_8EA8F00:: @ 8EA8F00
+gBerryFixWindow_Pal:: @ 8EA8F00
.incbin "graphics/berry_fix/window.gbapal"
-gUnknown_8EA8F40:: @ 8EA8F40
+gBerryFixWindow_Gfx:: @ 8EA8F40
.incbin "graphics/berry_fix/window.4bpp.lz"
-gUnknown_8EA9588:: @ 8EA9588
+gBerryFixWindow_Tilemap:: @ 8EA9588
.incbin "graphics/berry_fix/window.bin.lz"
.align 2
diff --git a/include/graphics.h b/include/graphics.h
index f48f7f8ca..98f9750d4 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -175,4 +175,25 @@ extern const u8 gUnknown_8E86BE8[];
extern const u8 gUnknown_8E86D6C[];
extern const u8 gUnknown_8E86F98[];
+// berry_fix_program
+
+extern const u8 gBerryFixGameboy_Gfx[];
+extern const u8 gBerryFixGameboy_Tilemap[];
+extern const u8 gBerryFixGameboy_Pal[];
+extern const u8 gBerryFixGameboyLogo_Gfx[];
+extern const u8 gBerryFixGameboyLogo_Tilemap[];
+extern const u8 gBerryFixGameboyLogo_Pal[];
+extern const u8 gBerryFixGbaTransfer_Gfx[];
+extern const u8 gBerryFixGbaTransfer_Tilemap[];
+extern const u8 gBerryFixGbaTransfer_Pal[];
+extern const u8 gBerryFixGbaTransferHighlight_Gfx[];
+extern const u8 gBerryFixGbaTransferHighlight_Tilemap[];
+extern const u8 gBerryFixGbaTransferHighlight_Pal[];
+extern const u8 gBerryFixGbaTransferError_Gfx[];
+extern const u8 gBerryFixGbaTransferError_Tilemap[];
+extern const u8 gBerryFixGbaTransferError_Pal[];
+extern const u8 gBerryFixWindow_Gfx[];
+extern const u8 gBerryFixWindow_Tilemap[];
+extern const u8 gBerryFixWindow_Pal[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/ld_script.txt b/ld_script.txt
index 4659879bc..f3d24a9ec 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -285,7 +285,7 @@ SECTIONS {
src/trainer_tower.o(.text);
src/unk_815EDDC.o(.text);
src/unk_815F138.o(.text);
- asm/berry_fix_program.o(.text);
+ src/berry_fix_program.o(.text);
} =0
script_data :
@@ -458,6 +458,7 @@ SECTIONS {
src/cereader_tool.o(.rodata);
src/trainer_tower.o(.rodata);
src/unk_815F138.o(.rodata);
+ src/berry_fix_program.o(.rodata);
data/data_8471F00.o(.rodata.after_trainer_tower);
src/mystery_event_msg.o(.rodata);
data/mystery_event_msg.o(.rodata);
diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c
new file mode 100644
index 000000000..f224bbc47
--- /dev/null
+++ b/src/berry_fix_program.c
@@ -0,0 +1,191 @@
+#include "global.h"
+#include "gpu_regs.h"
+#include "multiboot.h"
+#include "malloc.h"
+#include "bg.h"
+#include "graphics.h"
+#include "main.h"
+#include "sprite.h"
+#include "task.h"
+#include "scanline_effect.h"
+#include "window.h"
+#include "text.h"
+#include "help_system.h"
+#include "menu.h"
+#include "m4a.h"
+
+// Static type declarations
+
+typedef struct {
+ u8 state;
+ u8 unk1;
+ u16 unk2;
+ struct MultiBootParam mb;
+} berryfix_t;
+
+// Static RAM declarations
+
+const void * gUnknown_3005EF0;
+int gUnknown_3005EF4;
+size_t gUnknown_3005EF8;
+struct MultiBootParam gUnknown_3005F00;
+
+// Static ROM declarations
+
+static void mb_berry_fix_maincb(void);
+static void mb_berry_fix_task(u8 taskId);
+
+// .rodata
+
+static const void *const gUnknown_847A890[][3] = {
+ {
+ gBerryFixGameboy_Gfx,
+ gBerryFixGameboy_Tilemap,
+ gBerryFixGameboy_Pal
+ }, {
+ gBerryFixGameboyLogo_Gfx,
+ gBerryFixGameboyLogo_Tilemap,
+ gBerryFixGameboyLogo_Pal
+ }, {
+ gBerryFixGbaTransfer_Gfx,
+ gBerryFixGbaTransfer_Tilemap,
+ gBerryFixGbaTransfer_Pal
+ }, {
+ gBerryFixGbaTransferHighlight_Gfx,
+ gBerryFixGbaTransferHighlight_Tilemap,
+ gBerryFixGbaTransferHighlight_Pal
+ }, {
+ gBerryFixGbaTransferError_Gfx,
+ gBerryFixGbaTransferError_Tilemap,
+ gBerryFixGbaTransferError_Pal
+ }, {
+ gBerryFixWindow_Gfx,
+ gBerryFixWindow_Tilemap,
+ gBerryFixWindow_Pal
+ },
+};
+
+extern const u8 gMultiBootProgram_BerryGlitchFix_Start[0x3BF4];
+extern const u8 gMultiBootProgram_BerryGlitchFix_End[];
+
+// .text
+
+static void mb_berry_fix_print(int scene)
+{
+ REG_DISPCNT = 0;
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ REG_BLDCNT = 0;
+ LZ77UnCompVram(gUnknown_847A890[scene][0], (void *)BG_CHAR_ADDR(0));
+ LZ77UnCompVram(gUnknown_847A890[scene][1], (void *)BG_SCREEN_ADDR(31));
+ CpuCopy16(gUnknown_847A890[scene][2], (void *)BG_PLTT, 0x200);
+ REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(31) | BGCNT_TXT256x256;
+ REG_DISPCNT = DISPCNT_BG0_ON;
+}
+
+void mb_berry_fix_serve(void) // noreturn
+{
+ u8 taskId;
+ DisableInterrupts(0xFFFF);
+ EnableInterrupts(INTR_FLAG_VBLANK);
+ m4aSoundVSyncOff();
+ SetVBlankCallback(NULL);
+ DmaFill32(3, 0, (void *)VRAM, VRAM_SIZE);
+ DmaFill32(3, 0, (void *)PLTT, PLTT_SIZE);
+ ResetSpriteData();
+ ResetTasks();
+ ScanlineEffect_Stop();
+ gUnknown_3005ECC = 0;
+ taskId = CreateTask(mb_berry_fix_task, 0);
+ gTasks[taskId].data[0] = 0;
+ SetMainCallback2(mb_berry_fix_maincb);
+}
+
+static void mb_berry_fix_maincb(void)
+{
+ RunTasks();
+}
+
+static void mb_berry_fix_task(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ mb_berry_fix_print(5);
+ data[0] = 1;
+ break;
+ case 1:
+ if (JOY_NEW(A_BUTTON))
+ {
+ mb_berry_fix_print(0);
+ data[0] = 2;
+ }
+ break;
+ case 2:
+ if (JOY_NEW(A_BUTTON))
+ {
+ mb_berry_fix_print(1);
+ data[0] = 4;
+ }
+ break;
+ case 4:
+ gUnknown_3005EF0 = gMultiBootProgram_BerryGlitchFix_Start;
+ gUnknown_3005EF8 = gMultiBootProgram_BerryGlitchFix_End - gMultiBootProgram_BerryGlitchFix_Start;
+ gUnknown_3005F00.masterp = (void *)gMultiBootProgram_BerryGlitchFix_Start;
+ gUnknown_3005F00.server_type = MULTIBOOT_SERVER_TYPE_NORMAL;
+ MultiBootInit(&gUnknown_3005F00);
+ data[1] = 0;
+ data[0] = 5;
+ break;
+ case 5:
+ if (gUnknown_3005F00.probe_count == 0 && gUnknown_3005F00.response_bit & 0x2 && gUnknown_3005F00.client_bit & 0x2)
+ {
+ data[1]++;
+ if (data[1] > 180)
+ {
+ mb_berry_fix_print(2);
+ MultiBootStartMaster(&gUnknown_3005F00, gUnknown_3005EF0 + MULTIBOOT_HEADER_SIZE, gUnknown_3005EF8 - MULTIBOOT_HEADER_SIZE, 4, 1);
+ data[1] = 0;
+ data[0] = 6;
+ }
+ else
+ gUnknown_3005EF4 = MultiBootMain(&gUnknown_3005F00);
+ }
+ else
+ {
+ data[1] = 0;
+ gUnknown_3005EF4 = MultiBootMain(&gUnknown_3005F00);
+ }
+ break;
+ case 6:
+ gUnknown_3005EF4 = MultiBootMain(&gUnknown_3005F00);
+ if (MultiBootCheckComplete(&gUnknown_3005F00))
+ {
+ mb_berry_fix_print(3);
+ data[0] = 7;
+ }
+ else if (!(gUnknown_3005F00.client_bit & 2))
+ data[0] = 9;
+ break;
+ case 7:
+ data[0] = 8;
+ break;
+ case 8:
+ if (JOY_NEW(A_BUTTON))
+ {
+ DestroyTask(taskId);
+ DoSoftReset();
+ }
+ break;
+ case 9:
+ mb_berry_fix_print(4);
+ data[0] = 10;
+ break;
+ case 10:
+ if (JOY_NEW(A_BUTTON))
+ data[0] = 0;
+ break;
+ }
+}
diff --git a/sym_common.txt b/sym_common.txt
index eb4f075ba..56eed9a16 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -329,20 +329,11 @@ gUnknown_3005ECC: @ 3005ECC
.align 4
gUnknown_3005EE0: @ 3005EE0
+@ const u8 *gUnknown_3005EE0[4]
.space 0x10
-gUnknown_3005EF0: @ 3005EF0
- .space 0x4
-
-gUnknown_3005EF4: @ 3005EF4
- .space 0x4
-
-gUnknown_3005EF8: @ 3005EF8
- .space 0x8
-
-gUnknown_3005F00: @ 3005F00
- .space 0x50
-
+ .align 4
+ .include "berry_fix_program.o"
.include "m4a.o"
.include "agb_flash.o"