diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-15 16:24:47 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-15 16:24:47 -0400 |
commit | e28c7676126d31efa690f686152be19d5b62f743 (patch) | |
tree | 256785f97e8f6c0079a1dc9f2a45e6b754df9124 | |
parent | 9fb5dcdbf6a954762f68e792b69c5d83cbd9a4f5 (diff) |
berry_fix_program
-rw-r--r-- | asm/berry_fix_program.s | 344 | ||||
-rw-r--r-- | asm/title_screen.s | 4 | ||||
-rw-r--r-- | common_syms/berry_fix_program.txt | 4 | ||||
-rw-r--r-- | data/data_83FECCC.s | 5 | ||||
-rw-r--r-- | data/data_8471F00.s | 71 | ||||
-rw-r--r-- | data/graphics.s | 36 | ||||
-rw-r--r-- | include/graphics.h | 21 | ||||
-rw-r--r-- | ld_script.txt | 3 | ||||
-rw-r--r-- | src/berry_fix_program.c | 191 | ||||
-rw-r--r-- | sym_common.txt | 15 |
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" |