summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/clear_save_data_screen.s6
-rw-r--r--asm/title_screen.s2310
-rw-r--r--data/field_weather.s3
-rw-r--r--data/graphics.s45
-rw-r--r--data/graphics/title_screen/unk_83BF58C.pngbin0 -> 78 bytes
-rw-r--r--data/graphics/title_screen/unk_83BF5A8.bin1
-rw-r--r--data/graphics/title_screen/unk_83bf64c.pngbin0 -> 188 bytes
-rw-r--r--data/graphics/title_screen/unk_83bf77c.pal19
-rw-r--r--data/graphics/title_screen/unk_83bf79c.pngbin0 -> 539 bytes
-rw-r--r--data/graphics/title_screen/unk_83bfa14.pngbin0 -> 150 bytes
-rw-r--r--data/title_screen.s34
-rw-r--r--graphics/title_screen/unk_8eab6c4.pal259
-rw-r--r--graphics/title_screen/unk_8eab8c4.pngbin0 -> 5614 bytes
-rw-r--r--graphics/title_screen/unk_8ead390.binbin0 -> 1280 bytes
-rw-r--r--graphics/title_screen/unk_8ead5e8.pal19
-rw-r--r--graphics/title_screen/unk_8ead608.pngbin0 -> 1792 bytes
-rw-r--r--graphics/title_screen/unk_8eadee4.binbin0 -> 1280 bytes
-rw-r--r--graphics/title_screen/unk_8eae094.pal19
-rw-r--r--graphics/title_screen/unk_8eae0b4.pngbin0 -> 597 bytes
-rw-r--r--graphics/title_screen/unk_8eae374.binbin0 -> 1280 bytes
-rw-r--r--graphics/title_screen/unk_8eae488.pal19
-rw-r--r--graphics/title_screen/unk_8eae4a8.pngbin0 -> 148 bytes
-rw-r--r--graphics_file_rules.mk4
-rw-r--r--include/berry_fix_program.h6
-rw-r--r--include/clear_save_data_screen.h6
-rw-r--r--include/graphics.h13
-rw-r--r--include/intro.h6
-rw-r--r--include/main.h2
-rw-r--r--include/main_menu.h6
-rw-r--r--include/palette.h4
-rw-r--r--ld_script.txt4
-rw-r--r--src/title_screen.c1056
-rw-r--r--sym_ewram.txt5
-rw-r--r--tools/aif2pcm/Makefile5
-rw-r--r--tools/bin2c/Makefile5
-rw-r--r--tools/gbafix/Makefile5
-rw-r--r--tools/jsonproc/Makefile2
-rw-r--r--tools/mapjson/Makefile5
-rw-r--r--tools/preproc/Makefile5
-rw-r--r--tools/ramscrgen/Makefile5
-rw-r--r--tools/rsfont/Makefile5
-rw-r--r--tools/scaninc/Makefile5
42 files changed, 1506 insertions, 2382 deletions
diff --git a/asm/clear_save_data_screen.s b/asm/clear_save_data_screen.s
index f6cd11410..5d9d2ac03 100644
--- a/asm/clear_save_data_screen.s
+++ b/asm/clear_save_data_screen.s
@@ -26,8 +26,8 @@ sub_80F558C: @ 80F558C
bx r0
thumb_func_end sub_80F558C
- thumb_func_start sub_80F55A0
-sub_80F55A0: @ 80F55A0
+ thumb_func_start CB2_SaveClearScreen_Init
+CB2_SaveClearScreen_Init: @ 80F55A0
push {r4,lr}
ldr r4, _080F55D0 @ =gUnknown_203AB54
movs r0, 0x4
@@ -52,7 +52,7 @@ sub_80F55A0: @ 80F55A0
_080F55D0: .4byte gUnknown_203AB54
_080F55D4: .4byte sub_80F55DC
_080F55D8: .4byte sub_80F5574
- thumb_func_end sub_80F55A0
+ thumb_func_end CB2_SaveClearScreen_Init
thumb_func_start sub_80F55DC
sub_80F55DC: @ 80F55DC
diff --git a/asm/title_screen.s b/asm/title_screen.s
deleted file mode 100644
index e62cc9a9f..000000000
--- a/asm/title_screen.s
+++ /dev/null
@@ -1,2310 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start CB2_InitTitleScreen
-CB2_InitTitleScreen: @ 8078914
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r0, _08078930 @ =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- ldrb r6, [r0]
- cmp r6, 0x1
- beq _080789F0
- cmp r6, 0x1
- bgt _08078934
- cmp r6, 0
- beq _08078946
- b _0807893A
- .align 2, 0
-_08078930: .4byte gMain
-_08078934:
- cmp r6, 0x2
- bne _0807893A
- b _08078AC0
-_0807893A:
- ldr r0, _080789D0 @ =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_08078946:
- movs r0, 0
- bl SetVBlankCallback
- bl StartTimer1
- ldr r0, _080789D4 @ =gHeap
- movs r1, 0xE0
- lsls r1, 9
- bl InitHeap
- bl ResetTasks
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- bl ResetPaletteFade
- bl sub_8078B34
- add r1, sp, 0x4
- movs r0, 0
- strh r0, [r1]
- ldr r1, _080789D8 @ =0x040000d4
- add r0, sp, 0x4
- str r0, [r1]
- movs r0, 0xC0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, _080789DC @ =0x8100c000
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r2, 0
- str r2, [sp, 0x8]
- add r0, sp, 0x8
- str r0, [r1]
- movs r0, 0xE0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, _080789E0 @ =0x85000100
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- add r0, sp, 0x4
- strh r2, [r0]
- str r0, [r1]
- movs r0, 0xA0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, _080789E4 @ =0x81000200
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _080789E8 @ =gUnknown_83BFB74
- movs r0, 0
- movs r2, 0x4
- bl InitBgsFromTemplates
- movs r1, 0x82
- lsls r1, 5
- movs r0, 0
- bl SetGpuRegBits
- ldr r1, _080789EC @ =gUnknown_2037F30
- movs r0, 0xFF
- strb r0, [r1]
- b _08078B18
- .align 2, 0
-_080789D0: .4byte gMain
-_080789D4: .4byte gHeap
-_080789D8: .4byte 0x040000d4
-_080789DC: .4byte 0x8100c000
-_080789E0: .4byte 0x85000100
-_080789E4: .4byte 0x81000200
-_080789E8: .4byte gUnknown_83BFB74
-_080789EC: .4byte gUnknown_2037F30
-_080789F0:
- ldr r0, _08078A94 @ =gUnknown_8EAB6C4
- movs r2, 0xD0
- lsls r2, 1
- movs r1, 0
- bl LoadPalette
- ldr r1, _08078A98 @ =gUnknown_8EAB8C4
- movs r4, 0
- str r4, [sp]
- movs r0, 0
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- ldr r1, _08078A9C @ =gUnknown_8EAD390
- str r6, [sp]
- movs r0, 0
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- ldr r0, _08078AA0 @ =gUnknown_8EAD5E8
- movs r1, 0xD0
- movs r2, 0x20
- bl LoadPalette
- ldr r1, _08078AA4 @ =gUnknown_8EAD608
- str r4, [sp]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- ldr r1, _08078AA8 @ =gUnknown_8EADEE4
- str r6, [sp]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- ldr r5, _08078AAC @ =gUnknown_8EAE094
- adds r0, r5, 0
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldr r1, _08078AB0 @ =gUnknown_8EAE0B4
- str r4, [sp]
- movs r0, 0x2
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- ldr r1, _08078AB4 @ =gUnknown_8EAE374
- str r6, [sp]
- movs r0, 0x2
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- adds r0, r5, 0
- movs r1, 0xE0
- movs r2, 0x20
- bl LoadPalette
- ldr r1, _08078AB8 @ =gUnknown_83BF58C
- str r4, [sp]
- movs r0, 0x3
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- ldr r1, _08078ABC @ =gUnknown_83BF5A8
- str r6, [sp]
- movs r0, 0x3
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- bl sub_8079708
- b _08078B18
- .align 2, 0
-_08078A94: .4byte gUnknown_8EAB6C4
-_08078A98: .4byte gUnknown_8EAB8C4
-_08078A9C: .4byte gUnknown_8EAD390
-_08078AA0: .4byte gUnknown_8EAD5E8
-_08078AA4: .4byte gUnknown_8EAD608
-_08078AA8: .4byte gUnknown_8EADEE4
-_08078AAC: .4byte gUnknown_8EAE094
-_08078AB0: .4byte gUnknown_8EAE0B4
-_08078AB4: .4byte gUnknown_8EAE374
-_08078AB8: .4byte gUnknown_83BF58C
-_08078ABC: .4byte gUnknown_83BF5A8
-_08078AC0:
- bl FreeTempTileDataBuffersIfPossible
- lsls r0, 24
- cmp r0, 0
- bne _08078B26
- ldr r0, _08078B00 @ =0x0000ffff
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- ldr r0, _08078B04 @ =sub_8078C24
- movs r1, 0x4
- bl CreateTask
- ldr r0, _08078B08 @ =sub_8078BEC
- movs r1, 0x2
- bl CreateTask
- ldr r1, _08078B0C @ =gUnknown_2037F30
- strb r0, [r1]
- ldr r0, _08078B10 @ =sub_8078BB4
- bl SetVBlankCallback
- ldr r0, _08078B14 @ =sub_8078B9C
- bl SetMainCallback2
- movs r0, 0x8B
- lsls r0, 1
- bl m4aSongNumStart
- b _08078B26
- .align 2, 0
-_08078B00: .4byte 0x0000ffff
-_08078B04: .4byte sub_8078C24
-_08078B08: .4byte sub_8078BEC
-_08078B0C: .4byte gUnknown_2037F30
-_08078B10: .4byte sub_8078BB4
-_08078B14: .4byte sub_8078B9C
-_08078B18:
- ldr r1, _08078B30 @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_08078B26:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08078B30: .4byte gMain
- thumb_func_end CB2_InitTitleScreen
-
- thumb_func_start sub_8078B34
-sub_8078B34: @ 8078B34
- push {lr}
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1C
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1E
- movs r1, 0
- bl SetGpuReg
- pop {r0}
- bx r0
- thumb_func_end sub_8078B34
-
- thumb_func_start sub_8078B9C
-sub_8078B9C: @ 8078B9C
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_8078B9C
-
- thumb_func_start sub_8078BB4
-sub_8078BB4: @ 8078BB4
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- bl ScanlineEffect_InitHBlankDmaTransfer
- ldr r1, _08078BE4 @ =gUnknown_2037F30
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _08078BE0
- ldr r2, _08078BE8 @ =gTasks
- adds r1, r0, 0
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
-_08078BE0:
- pop {r0}
- bx r0
- .align 2, 0
-_08078BE4: .4byte gUnknown_2037F30
-_08078BE8: .4byte gTasks
- thumb_func_end sub_8078BB4
-
- thumb_func_start sub_8078BEC
-sub_8078BEC: @ 8078BEC
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _08078C18 @ =gTasks+0x8
- adds r0, r1
- movs r3, 0
- ldrsh r1, [r0, r3]
- ldr r0, _08078C1C @ =0x00000a8b
- cmp r1, r0
- ble _08078C12
- ldr r1, _08078C20 @ =gUnknown_2037F30
- movs r0, 0xFF
- strb r0, [r1]
- adds r0, r2, 0
- bl DestroyTask
-_08078C12:
- pop {r0}
- bx r0
- .align 2, 0
-_08078C18: .4byte gTasks+0x8
-_08078C1C: .4byte 0x00000a8b
-_08078C20: .4byte gUnknown_2037F30
- thumb_func_end sub_8078BEC
-
- thumb_func_start sub_8078C24
-sub_8078C24: @ 8078C24
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08078C6C @ =gTasks+0x8
- adds r4, r1, r0
- ldr r0, _08078C70 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0xB
- ands r0, r1
- cmp r0, 0
- beq _08078C74
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x3
- beq _08078C74
- cmp r0, 0x4
- beq _08078C74
- cmp r0, 0x5
- beq _08078C74
- bl sub_8079620
- bl sub_8079648
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- bl sub_8079A10
- adds r0, r4, 0
- movs r1, 0x3
- bl sub_8078C90
- b _08078C86
- .align 2, 0
-_08078C6C: .4byte gTasks+0x8
-_08078C70: .4byte gMain
-_08078C74:
- ldr r0, _08078C8C @ =gUnknown_83BFB84
- movs r2, 0
- ldrsh r1, [r4, r2]
- lsls r1, 2
- adds r1, r0
- ldr r1, [r1]
- adds r0, r4, 0
- bl _call_via_r1
-_08078C86:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08078C8C: .4byte gUnknown_83BFB84
- thumb_func_end sub_8078C24
-
- thumb_func_start sub_8078C90
-sub_8078C90: @ 8078C90
- lsls r1, 24
- lsrs r1, 24
- movs r2, 0
- strh r2, [r0, 0x2]
- strh r1, [r0]
- bx lr
- thumb_func_end sub_8078C90
-
- thumb_func_start sub_8078C9C
-sub_8078C9C: @ 8078C9C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x10
- mov r8, r0
- movs r0, 0
- bl HideBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- ldr r0, _08078D14 @ =0x04000054
- str r0, [sp]
- ldr r0, _08078D18 @ =0xa2600001
- str r0, [sp, 0x4]
- mov r1, sp
- movs r5, 0
- movs r0, 0x1
- strb r0, [r1, 0x8]
- mov r0, sp
- strb r5, [r0, 0x9]
- add r0, sp, 0xC
- strh r5, [r0]
- ldr r4, _08078D1C @ =gScanlineEffectRegBuffers
- ldr r6, _08078D20 @ =0x010000a0
- adds r1, r4, 0
- adds r2, r6, 0
- bl CpuSet
- mov r0, sp
- adds r0, 0xE
- strh r5, [r0]
- movs r1, 0xF0
- lsls r1, 3
- adds r4, r1
- adds r1, r4, 0
- adds r2, r6, 0
- bl CpuSet
- ldr r0, [sp]
- ldr r1, [sp, 0x4]
- ldr r2, [sp, 0x8]
- bl ScanlineEffect_SetParams
- mov r0, r8
- movs r1, 0x1
- bl sub_8078C90
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08078D14: .4byte 0x04000054
-_08078D18: .4byte 0xa2600001
-_08078D1C: .4byte gScanlineEffectRegBuffers
-_08078D20: .4byte 0x010000a0
- thumb_func_end sub_8078C9C
-
- thumb_func_start sub_8078D24
-sub_8078D24: @ 8078D24
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _08078D5C
- cmp r0, 0x1
- bgt _08078D3A
- cmp r0, 0
- beq _08078D40
- b _08078D9C
-_08078D3A:
- cmp r0, 0x2
- beq _08078D84
- b _08078D9C
-_08078D40:
- movs r0, 0x50
- movs r1, 0x82
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x80
- strh r0, [r4, 0x4]
- movs r0, 0x80
- bl sub_8079550
- b _08078D78
-_08078D5C:
- ldrh r0, [r4, 0x4]
- subs r0, 0x4
- strh r0, [r4, 0x4]
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- bl sub_8079550
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bge _08078D9C
- ldr r1, _08078D80 @ =gScanlineEffect
- movs r0, 0x3
- strb r0, [r1, 0x15]
-_08078D78:
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- b _08078D9C
- .align 2, 0
-_08078D80: .4byte gScanlineEffect
-_08078D84:
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- adds r0, r4, 0
- movs r1, 0x2
- bl sub_8078C90
-_08078D9C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8078D24
-
- thumb_func_start sub_8078DA4
-sub_8078DA4: @ 8078DA4
- push {r4-r7,lr}
- sub sp, 0xC
- adds r6, r0, 0
- movs r1, 0x2
- ldrsh r0, [r6, r1]
- cmp r0, 0x9
- bls _08078DB4
- b _08078FB6
-_08078DB4:
- lsls r0, 2
- ldr r1, _08078DC0 @ =_08078DC4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08078DC0: .4byte _08078DC4
- .align 2, 0
-_08078DC4:
- .4byte _08078DEC
- .4byte _08078DF2
- .4byte _08078E24
- .4byte _08078E40
- .4byte _08078E80
- .4byte _08078EA4
- .4byte _08078ED4
- .4byte _08078EF8
- .4byte _08078F24
- .4byte _08078F98
-_08078DEC:
- movs r0, 0
- strh r0, [r6, 0x4]
- b _08078F80
-_08078DF2:
- ldrh r0, [r6, 0x4]
- adds r0, 0x1
- strh r0, [r6, 0x4]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xA
- bgt _08078E02
- b _08078FB6
-_08078E02:
- ldr r0, _08078E20 @ =gPlttBufferUnfaded + 0x1A0
- movs r1, 0x10
- bl TintPalette_GrayScale2
- movs r0, 0x80
- lsls r0, 6
- movs r1, 0
- str r1, [sp]
- movs r1, 0x9
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- b _08078F80
- .align 2, 0
-_08078E20: .4byte gPlttBufferUnfaded + 0x1A0
-_08078E24:
- ldr r0, _08078E3C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08078E36
- b _08078FB6
-_08078E36:
- strh r0, [r6, 0x4]
- b _08078F80
- .align 2, 0
-_08078E3C: .4byte gPaletteFade
-_08078E40:
- ldrh r0, [r6, 0x4]
- adds r0, 0x1
- strh r0, [r6, 0x4]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x24
- bgt _08078E50
- b _08078FB6
-_08078E50:
- ldr r0, _08078E78 @ =sub_80792C8
- movs r1, 0x3
- bl CreateTask
- movs r0, 0x80
- lsls r0, 6
- movs r1, 0x4
- negs r1, r1
- ldr r2, _08078E7C @ =0x00007fde
- str r2, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r2, 0x1
- movs r3, 0x10
- bl sub_80717A8
- strh r4, [r6, 0x4]
- b _08078F80
- .align 2, 0
-_08078E78: .4byte sub_80792C8
-_08078E7C: .4byte 0x00007fde
-_08078E80:
- movs r0, 0
- bl sub_807185C
- adds r3, r0, 0
- cmp r3, 0
- beq _08078E8E
- b _08078FB6
-_08078E8E:
- movs r0, 0x80
- lsls r0, 6
- movs r1, 0x4
- negs r1, r1
- ldr r2, _08078EA0 @ =0x00007fde
- str r2, [sp]
- str r3, [sp, 0x4]
- str r3, [sp, 0x8]
- b _08078F78
- .align 2, 0
-_08078EA0: .4byte 0x00007fde
-_08078EA4:
- ldrh r0, [r6, 0x4]
- adds r0, 0x1
- strh r0, [r6, 0x4]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- bgt _08078EB4
- b _08078FB6
-_08078EB4:
- movs r0, 0
- strh r0, [r6, 0x4]
- movs r0, 0x80
- lsls r0, 6
- movs r1, 0x4
- negs r1, r1
- ldr r2, _08078ED0 @ =0x00007fde
- str r2, [sp]
- movs r2, 0
- str r2, [sp, 0x4]
- str r2, [sp, 0x8]
- movs r2, 0x1
- movs r3, 0x10
- b _08078F7C
- .align 2, 0
-_08078ED0: .4byte 0x00007fde
-_08078ED4:
- movs r0, 0
- bl sub_807185C
- adds r3, r0, 0
- cmp r3, 0
- bne _08078FB6
- movs r0, 0x80
- lsls r0, 6
- movs r1, 0x4
- negs r1, r1
- ldr r2, _08078EF4 @ =0x00007fde
- str r2, [sp]
- str r3, [sp, 0x4]
- str r3, [sp, 0x8]
- b _08078F78
- .align 2, 0
-_08078EF4: .4byte 0x00007fde
-_08078EF8:
- ldrh r0, [r6, 0x4]
- adds r0, 0x1
- strh r0, [r6, 0x4]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _08078FB6
- movs r0, 0
- strh r0, [r6, 0x4]
- movs r0, 0x80
- lsls r0, 6
- movs r1, 0x3
- negs r1, r1
- ldr r2, _08078F20 @ =0x00007fde
- str r2, [sp]
- movs r2, 0
- str r2, [sp, 0x4]
- str r2, [sp, 0x8]
- movs r3, 0x10
- b _08078F7C
- .align 2, 0
-_08078F20: .4byte 0x00007fde
-_08078F24:
- movs r0, 0
- bl sub_807185C
- adds r7, r0, 0
- cmp r7, 0
- bne _08078FB6
- movs r0, 0x1
- strh r0, [r6, 0xA]
- bl sub_80799F0
- movs r4, 0x80
- lsls r4, 9
- lsls r4, r0
- ldr r0, _08078F88 @ =0x00001fff
- orrs r4, r0
- ldr r5, _08078F8C @ =0x00007fde
- adds r0, r4, 0
- movs r1, 0x10
- adds r2, r5, 0
- bl BlendPalettes
- str r5, [sp]
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r0, 0
- bl ShowBg
- ldr r0, _08078F90 @ =gUnknown_8EAD5E8
- ldr r1, _08078F94 @ =gPlttBufferUnfaded + 0x1A0
- movs r2, 0x10
- bl CpuSet
- movs r0, 0x80
- lsls r0, 6
- str r5, [sp]
- str r7, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
-_08078F78:
- movs r2, 0xF
- movs r3, 0
-_08078F7C:
- bl sub_80717A8
-_08078F80:
- ldrh r0, [r6, 0x2]
- adds r0, 0x1
- strh r0, [r6, 0x2]
- b _08078FB6
- .align 2, 0
-_08078F88: .4byte 0x00001fff
-_08078F8C: .4byte 0x00007fde
-_08078F90: .4byte gUnknown_8EAD5E8
-_08078F94: .4byte gPlttBufferUnfaded + 0x1A0
-_08078F98:
- movs r0, 0
- bl sub_807185C
- cmp r0, 0
- bne _08078FB6
- ldr r0, _08078FC0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08078FB6
- adds r0, r6, 0
- movs r1, 0x3
- bl sub_8078C90
-_08078FB6:
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08078FC0: .4byte gPaletteFade
- thumb_func_end sub_8078DA4
-
- thumb_func_start sub_8078FC4
-sub_8078FC4: @ 8078FC4
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _08078FD6
- cmp r0, 0x1
- beq _08079004
- b _08079094
-_08078FD6:
- movs r0, 0x1
- bl HelpSystem_SetSomeVariable2
- ldr r0, _0807902C @ =sub_807941C
- movs r1, 0
- bl CreateTask
- ldr r0, _08079030 @ =sub_8079840
- movs r1, 0x5
- bl CreateTask
- bl sub_80790A0
- bl sub_8079A40
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0xC]
- bl sub_812B484
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
-_08079004:
- ldr r2, _08079034 @ =gMain
- ldrh r1, [r2, 0x2C]
- movs r0, 0x46
- ands r0, r1
- cmp r0, 0x46
- bne _08079040
- ldrb r0, [r4, 0xC]
- bl sub_8079A88
- ldr r0, _08079038 @ =sub_8078C24
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- ldr r0, _0807903C @ =sub_80796CC
- bl SetMainCallback2
- b _08079094
- .align 2, 0
-_0807902C: .4byte sub_807941C
-_08079030: .4byte sub_8079840
-_08079034: .4byte gMain
-_08079038: .4byte sub_8078C24
-_0807903C: .4byte sub_80796CC
-_08079040:
- movs r0, 0x6
- ands r0, r1
- cmp r0, 0x6
- bne _0807906C
- ldrb r0, [r4, 0xC]
- bl sub_8079A88
- ldr r0, _08079064 @ =sub_8078C24
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- ldr r0, _08079068 @ =sub_80796E8
- bl SetMainCallback2
- b _08079094
- .align 2, 0
-_08079064: .4byte sub_8078C24
-_08079068: .4byte sub_80796E8
-_0807906C:
- ldrh r1, [r2, 0x2E]
- movs r0, 0x9
- ands r0, r1
- cmp r0, 0
- beq _08079080
- adds r0, r4, 0
- movs r1, 0x5
- bl sub_8078C90
- b _08079094
-_08079080:
- ldr r0, _0807909C @ =sub_8078BEC
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _08079094
- adds r0, r4, 0
- movs r1, 0x4
- bl sub_8078C90
-_08079094:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807909C: .4byte sub_8078BEC
- thumb_func_end sub_8078FC4
-
- thumb_func_start sub_80790A0
-sub_80790A0: @ 80790A0
- push {lr}
- movs r1, 0x80
- lsls r1, 8
- movs r0, 0
- bl SetGpuRegBits
- ldr r1, _080790C8 @ =0x00003f1f
- movs r0, 0x4A
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0x81
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0xD
- bl SetGpuReg
- pop {r0}
- bx r0
- .align 2, 0
-_080790C8: .4byte 0x00003f1f
- thumb_func_end sub_80790A0
-
- thumb_func_start sub_80790CC
-sub_80790CC: @ 80790CC
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bhi _080791B0
- lsls r0, 2
- ldr r1, _080790E4 @ =_080790E8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080790E4: .4byte _080790E8
- .align 2, 0
-_080790E8:
- .4byte _080790FC
- .4byte _08079104
- .4byte _0807913C
- .4byte _08079170
- .4byte _08079198
-_080790FC:
- ldrb r0, [r4, 0xC]
- bl sub_8079A88
- b _0807918C
-_08079104:
- ldr r0, _08079138 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080791B0
- ldrb r0, [r4, 0xC]
- bl sub_8079AA8
- adds r5, r0, 0
- cmp r5, 0
- bne _080791B0
- movs r0, 0xA
- bl FadeOutMapMusic
- movs r0, 0x1
- negs r0, r0
- str r5, [sp]
- movs r1, 0x3
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- bl sub_8079528
- b _0807918C
- .align 2, 0
-_08079138: .4byte gPaletteFade
-_0807913C:
- bl IsNotWaitingForBGMStop
- lsls r0, 24
- cmp r0, 0
- beq _080791B0
- ldr r0, _08079168 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _080791B0
- ldr r0, _0807916C @ =sub_807941C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- strh r5, [r4, 0x4]
- b _0807918C
- .align 2, 0
-_08079168: .4byte gPaletteFade
-_0807916C: .4byte sub_807941C
-_08079170:
- ldrh r0, [r4, 0x4]
- adds r0, 0x1
- strh r0, [r4, 0x4]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x13
- ble _080791B0
- ldr r0, _08079194 @ =sub_807941C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0807918C:
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- b _080791B0
- .align 2, 0
-_08079194: .4byte sub_807941C
-_08079198:
- bl sub_812B478
- ldr r0, _080791B8 @ =sub_8078C24
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- ldr r0, _080791BC @ =sub_80EC864
- bl SetMainCallback2
-_080791B0:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080791B8: .4byte sub_8078C24
-_080791BC: .4byte sub_80EC864
- thumb_func_end sub_80790CC
-
- thumb_func_start sub_80791C0
-sub_80791C0: @ 80791C0
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _08079204
- cmp r0, 0x1
- bgt _080791D8
- cmp r0, 0
- beq _080791DE
- b _080792A6
-_080791D8:
- cmp r0, 0x2
- beq _08079248
- b _080792A6
-_080791DE:
- ldr r0, _08079200 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _080792A6
- .ifdef FIRERED
- movs r0, 0x6 @ CHARIZARD
- .else
- movs r0, 0x3 @ VENUSAUR
- .endif
- movs r1, 0
- bl PlayCry1
- ldrb r0, [r4, 0xC]
- bl sub_8079A88
- strh r5, [r4, 0x4]
- b _08079238
- .align 2, 0
-_08079200: .4byte gPaletteFade
-_08079204:
- ldrh r1, [r4, 0x4]
- movs r2, 0x4
- ldrsh r0, [r4, r2]
- cmp r0, 0x59
- bgt _08079214
- adds r0, r1, 0x1
- strh r0, [r4, 0x4]
- b _080792A6
-_08079214:
- ldrb r0, [r4, 0xC]
- bl sub_8079AA8
- cmp r0, 0
- bne _080792A6
- ldr r0, _08079240 @ =0x0fffffff
- ldr r1, _08079244 @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- bl sub_8079528
- movs r0, 0x4
- bl FadeOutBGM
-_08079238:
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- b _080792A6
- .align 2, 0
-_08079240: .4byte 0x0fffffff
-_08079244: .4byte 0x00007fff
-_08079248:
- ldr r0, _080792B0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080792A6
- bl SeedRngAndSetTrainerId
- bl SetSaveBlocksPointers
- bl ResetMenuAndMonGlobals
- bl Save_ResetSaveCounters
- movs r0, 0
- bl Save_LoadGameData
- ldr r0, _080792B4 @ =gSaveFileStatus
- ldrh r0, [r0]
- cmp r0, 0
- beq _08079276
- cmp r0, 0x2
- bne _0807927A
-_08079276:
- bl Sav2_ClearSetDefault
-_0807927A:
- ldr r0, _080792B8 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x15]
- lsls r0, 31
- lsrs r0, 31
- bl SetPokemonCryStereo
- ldr r0, _080792BC @ =gHeap
- movs r1, 0xE0
- lsls r1, 9
- bl InitHeap
- ldr r0, _080792C0 @ =sub_800C300
- bl SetMainCallback2
- ldr r0, _080792C4 @ =sub_8078C24
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080792A6:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080792B0: .4byte gPaletteFade
-_080792B4: .4byte gSaveFileStatus
-_080792B8: .4byte gSaveBlock2Ptr
-_080792BC: .4byte gHeap
-_080792C0: .4byte sub_800C300
-_080792C4: .4byte sub_8078C24
- thumb_func_end sub_80791C0
-
- thumb_func_start sub_80792C8
-sub_80792C8: @ 80792C8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _080792EC @ =gTasks+0x8
- adds r4, r0, r1
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x5
- bls _080792E2
- b _08079414
-_080792E2:
- lsls r0, 2
- ldr r1, _080792F0 @ =_080792F4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080792EC: .4byte gTasks+0x8
-_080792F0: .4byte _080792F4
- .align 2, 0
-_080792F4:
- .4byte _0807930C
- .4byte _08079344
- .4byte _08079368
- .4byte _0807937C
- .4byte _080793BC
- .4byte _08079404
-_0807930C:
- movs r1, 0x80
- lsls r1, 6
- movs r0, 0
- bl SetGpuRegBits
- movs r0, 0x48
- movs r1, 0x3F
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0x37
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0xA0
- bl SetGpuReg
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x80
- lsls r0, 7
- movs r1, 0
- movs r2, 0
- bl BlendPalettes
- b _080793AA
-_08079344:
- movs r1, 0xC0
- lsls r1, 1
- adds r0, r1, 0
- ldrh r1, [r4, 0x2]
- adds r0, r1
- strh r0, [r4, 0x2]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r4, 0x4]
- cmp r0, 0xEF
- ble _08079364
- movs r0, 0xF0
- strh r0, [r4, 0x4]
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_08079364:
- ldrh r1, [r4, 0x4]
- b _080793F6
-_08079368:
- ldrh r0, [r4, 0x6]
- adds r0, 0x1
- strh r0, [r4, 0x6]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x9
- ble _08079414
- movs r0, 0
- strh r0, [r4, 0x6]
- b _080793AA
-_0807937C:
- movs r0, 0x4A
- movs r1, 0x3B
- bl SetGpuReg
- ldr r1, _080793B4 @ =0x0000f0f0
- movs r0, 0x40
- bl SetGpuReg
- ldr r1, _080793B8 @ =0xffff1000
- movs r0, 0x2
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x80
- lsls r0, 8
- movs r1, 0
- movs r2, 0
- bl BlendPalettes
- movs r1, 0xF0
- lsls r1, 4
- adds r0, r1, 0
- strh r0, [r4, 0x2]
-_080793AA:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _08079414
- .align 2, 0
-_080793B4: .4byte 0x0000f0f0
-_080793B8: .4byte 0xffff1000
-_080793BC:
- ldr r1, _08079400 @ =0xfffffe80
- adds r0, r1, 0
- ldrh r1, [r4, 0x2]
- adds r0, r1
- strh r0, [r4, 0x2]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r4, 0x4]
- cmp r0, 0
- bgt _080793DA
- movs r0, 0
- strh r0, [r4, 0x4]
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_080793DA:
- movs r0, 0x4
- ldrsh r1, [r4, r0]
- negs r1, r1
- lsls r1, 8
- movs r0, 0x2
- movs r2, 0
- bl ChangeBgX
- ldrh r1, [r4, 0x4]
- lsls r1, 8
- movs r0, 0xF0
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
-_080793F6:
- movs r0, 0x40
- bl SetGpuReg
- b _08079414
- .align 2, 0
-_08079400: .4byte 0xfffffe80
-_08079404:
- movs r1, 0x80
- lsls r1, 6
- movs r0, 0
- bl ClearGpuRegBits
- adds r0, r5, 0
- bl DestroyTask
-_08079414:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80792C8
-
- thumb_func_start sub_807941C
-sub_807941C: @ 807941C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _08079460 @ =gTasks+0x8
- adds r5, r0, r1
- movs r1, 0x1E
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _08079444
- ldr r0, _08079464 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08079444
- movs r0, 0x1
- strh r0, [r5, 0x1C]
-_08079444:
- movs r3, 0x1C
- ldrsh r0, [r5, r3]
- cmp r0, 0
- beq _08079468
- ldr r0, _08079464 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08079468
- adds r0, r2, 0
- bl DestroyTask
- b _08079510
- .align 2, 0
-_08079460: .4byte gTasks+0x8
-_08079464: .4byte gPaletteFade
-_08079468:
- movs r1, 0x2
- ldrsh r0, [r5, r1]
- ldrh r2, [r5, 0x2]
- cmp r0, 0
- bne _08079476
- movs r0, 0x3C
- b _08079478
-_08079476:
- movs r0, 0x1E
-_08079478:
- strh r0, [r5, 0x4]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- lsls r0, 16
- asrs r0, 16
- movs r3, 0x4
- ldrsh r1, [r5, r3]
- cmp r0, r1
- blt _08079510
- movs r0, 0
- strh r0, [r5]
- movs r0, 0x1
- eors r0, r2
- strh r0, [r5, 0x2]
- lsls r0, 16
- cmp r0, 0
- beq _080794CC
- ldr r2, _080794C0 @ =gPlttBufferUnfaded
- ldr r4, _080794C4 @ =gUnknown_8EAE094
- ldr r1, _080794C8 @ =gPlttBufferFaded
- movs r0, 0xF1
- lsls r0, 1
- adds r1, r0
- adds r2, r0
- movs r3, 0x4
-_080794AC:
- ldrh r0, [r4, 0xC]
- strh r0, [r2]
- ldrh r0, [r4, 0xC]
- strh r0, [r1]
- adds r1, 0x2
- adds r2, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _080794AC
- b _080794F2
- .align 2, 0
-_080794C0: .4byte gPlttBufferUnfaded
-_080794C4: .4byte gUnknown_8EAE094
-_080794C8: .4byte gPlttBufferFaded
-_080794CC:
- movs r3, 0
- ldr r2, _08079518 @ =gPlttBufferUnfaded
- ldr r0, _0807951C @ =gUnknown_8EAE094
- ldr r1, _08079520 @ =gPlttBufferFaded
- adds r4, r0, 0x2
- movs r0, 0xF1
- lsls r0, 1
- adds r1, r0
- adds r2, r0
-_080794DE:
- ldrh r0, [r4]
- strh r0, [r2]
- ldrh r0, [r4]
- strh r0, [r1]
- adds r4, 0x2
- adds r1, 0x2
- adds r2, 0x2
- adds r3, 0x1
- cmp r3, 0x4
- ble _080794DE
-_080794F2:
- movs r1, 0x1C
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _08079510
- movs r0, 0x80
- lsls r0, 8
- ldr r2, _08079524 @ =gPaletteFade
- ldrh r1, [r2, 0x4]
- lsls r1, 21
- lsrs r1, 27
- ldrh r2, [r2, 0x6]
- lsls r2, 17
- lsrs r2, 17
- bl BlendPalettes
-_08079510:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08079518: .4byte gPlttBufferUnfaded
-_0807951C: .4byte gUnknown_8EAE094
-_08079520: .4byte gPlttBufferFaded
-_08079524: .4byte gPaletteFade
- thumb_func_end sub_807941C
-
- thumb_func_start sub_8079528
-sub_8079528: @ 8079528
- push {lr}
- ldr r0, _08079548 @ =sub_807941C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0807954C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0x1
- strh r0, [r1, 0x26]
- pop {r0}
- bx r0
- .align 2, 0
-_08079548: .4byte sub_807941C
-_0807954C: .4byte gTasks
- thumb_func_end sub_8079528
-
- thumb_func_start sub_8079550
-sub_8079550: @ 8079550
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r5, r0, 16
- asrs r4, r5, 16
- cmp r4, 0
- blt _08079574
- ldr r3, _08079618 @ =gScanlineEffectRegBuffers
- lsls r2, r4, 1
- ldr r0, _0807961C @ =gScanlineEffect
- ldrb r1, [r0, 0x14]
- lsls r0, r1, 4
- subs r0, r1
- lsls r0, 7
- adds r2, r0
- adds r2, r3
- movs r0, 0x10
- strh r0, [r2]
-_08079574:
- movs r3, 0
- mov r8, r5
- adds r6, r4, 0
- ldr r0, _08079618 @ =gScanlineEffectRegBuffers
- mov r12, r0
- ldr r7, _0807961C @ =gScanlineEffect
- movs r5, 0xF
- lsls r2, r6, 1
- adds r4, r2, 0
-_08079586:
- adds r0, r6, r3
- cmp r0, 0
- blt _0807959A
- ldrb r1, [r7, 0x14]
- lsls r0, r1, 4
- subs r0, r1
- lsls r0, 7
- adds r0, r4, r0
- add r0, r12
- strh r5, [r0]
-_0807959A:
- subs r0, r6, r3
- cmp r0, 0
- blt _080795AE
- ldrb r1, [r7, 0x14]
- lsls r0, r1, 4
- subs r0, r1
- lsls r0, 7
- adds r0, r2, r0
- add r0, r12
- strh r5, [r0]
-_080795AE:
- subs r5, 0x1
- subs r2, 0x2
- adds r4, 0x2
- adds r3, 0x1
- cmp r3, 0xF
- ble _08079586
- mov r1, r8
- asrs r0, r1, 16
- adds r3, r0, 0
- adds r3, 0x10
- cmp r3, 0x9F
- bgt _080795E6
- ldr r6, _08079618 @ =gScanlineEffectRegBuffers
- ldr r5, _0807961C @ =gScanlineEffect
- movs r4, 0
-_080795CC:
- cmp r3, 0
- blt _080795E0
- lsls r2, r3, 1
- ldrb r1, [r5, 0x14]
- lsls r0, r1, 4
- subs r0, r1
- lsls r0, 7
- adds r2, r0
- adds r2, r6
- strh r4, [r2]
-_080795E0:
- adds r3, 0x1
- cmp r3, 0x9F
- ble _080795CC
-_080795E6:
- mov r1, r8
- asrs r0, r1, 16
- adds r3, r0, 0
- subs r3, 0x10
- cmp r3, 0
- blt _0807960E
- ldr r6, _08079618 @ =gScanlineEffectRegBuffers
- ldr r5, _0807961C @ =gScanlineEffect
- movs r4, 0
-_080795F8:
- lsls r2, r3, 1
- ldrb r1, [r5, 0x14]
- lsls r0, r1, 4
- subs r0, r1
- lsls r0, 7
- adds r2, r0
- adds r2, r6
- strh r4, [r2]
- subs r3, 0x1
- cmp r3, 0
- bge _080795F8
-_0807960E:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08079618: .4byte gScanlineEffectRegBuffers
-_0807961C: .4byte gScanlineEffect
- thumb_func_end sub_8079550
-
- thumb_func_start sub_8079620
-sub_8079620: @ 8079620
- push {lr}
- ldr r1, _08079644 @ =gScanlineEffect
- ldrb r0, [r1, 0x15]
- cmp r0, 0
- beq _0807962E
- movs r0, 0x3
- strb r0, [r1, 0x15]
-_0807962E:
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- pop {r0}
- bx r0
- .align 2, 0
-_08079644: .4byte gScanlineEffect
- thumb_func_end sub_8079620
-
- thumb_func_start sub_8079648
-sub_8079648: @ 8079648
- push {r4,lr}
- ldr r0, _080796BC @ =sub_80792C8
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _0807965C
- bl DestroyTask
-_0807965C:
- bl sub_8071898
- bl ResetPaletteFadeControl
- ldr r0, _080796C0 @ =gUnknown_8EAB6C4
- movs r2, 0xD0
- lsls r2, 1
- movs r1, 0
- bl LoadPalette
- ldr r0, _080796C4 @ =gUnknown_8EAD5E8
- movs r1, 0xD0
- movs r2, 0x20
- bl LoadPalette
- ldr r4, _080796C8 @ =gUnknown_8EAE094
- adds r0, r4, 0
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- adds r0, r4, 0
- movs r1, 0xE0
- movs r2, 0x20
- bl LoadPalette
- bl ResetBgPositions
- movs r1, 0xE0
- lsls r1, 8
- movs r0, 0
- bl ClearGpuRegBits
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080796BC: .4byte sub_80792C8
-_080796C0: .4byte gUnknown_8EAB6C4
-_080796C4: .4byte gUnknown_8EAD5E8
-_080796C8: .4byte gUnknown_8EAE094
- thumb_func_end sub_8079648
-
- thumb_func_start sub_80796CC
-sub_80796CC: @ 80796CC
- push {lr}
- bl UpdatePaletteFade
- lsls r0, 24
- cmp r0, 0
- bne _080796DE
- ldr r0, _080796E4 @ =sub_80F55A0
- bl SetMainCallback2
-_080796DE:
- pop {r0}
- bx r0
- .align 2, 0
-_080796E4: .4byte sub_80F55A0
- thumb_func_end sub_80796CC
-
- thumb_func_start sub_80796E8
-sub_80796E8: @ 80796E8
- push {lr}
- bl UpdatePaletteFade
- lsls r0, 24
- cmp r0, 0
- bne _080796FE
- bl m4aMPlayAllStop
- ldr r0, _08079704 @ =mb_berry_fix_serve
- bl SetMainCallback2
-_080796FE:
- pop {r0}
- bx r0
- .align 2, 0
-_08079704: .4byte mb_berry_fix_serve
- thumb_func_end sub_80796E8
-
- thumb_func_start sub_8079708
-sub_8079708: @ 8079708
- push {r4,r5,lr}
- movs r5, 0
- ldr r4, _08079728 @ =gUnknown_83BFB9C
-_0807970E:
- adds r0, r4, 0
- bl LoadCompressedSpriteSheet
- adds r4, 0x8
- adds r5, 0x1
- cmp r5, 0x3
- bls _0807970E
- ldr r0, _0807972C @ =gUnknown_83BFBBC
- bl LoadSpritePalettes
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08079728: .4byte gUnknown_83BFB9C
-_0807972C: .4byte gUnknown_83BFBBC
- thumb_func_end sub_8079708
-
- thumb_func_start sub_8079730
-sub_8079730: @ 8079730
- push {r4,lr}
- adds r4, r0, 0
- adds r2, r4, 0
- adds r2, 0x2E
- ldrh r0, [r4, 0x2E]
- ldrh r1, [r2, 0x2]
- subs r0, r1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r4, 0x20]
- movs r1, 0x8
- negs r1, r1
- cmp r0, r1
- blt _08079774
- ldrh r0, [r2, 0x6]
- ldrh r1, [r2, 0x4]
- adds r0, r1
- strh r0, [r2, 0x4]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r4, 0x22]
- subs r0, 0x10
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xB8
- bhi _08079774
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0807977C
-_08079774:
- adds r0, r4, 0
- bl DestroySprite
- b _080797A6
-_0807977C:
- ldrh r1, [r2, 0xE]
- movs r3, 0xE
- ldrsh r0, [r2, r3]
- cmp r0, 0
- beq _080797A6
- subs r0, r1, 0x1
- strh r0, [r2, 0xE]
- lsls r0, 16
- cmp r0, 0
- bne _080797A6
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnim
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
-_080797A6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8079730
-
- thumb_func_start sub_80797AC
-sub_80797AC: @ 80797AC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r4, r0, 0
- adds r5, r1, 0
- mov r8, r2
- adds r7, r3, 0
- ldr r0, [sp, 0x18]
- cmp r0, 0
- beq _080797C8
- ldr r0, _080797C4 @ =gUnknown_83BFB04
- b _080797CA
- .align 2, 0
-_080797C4: .4byte gUnknown_83BFB04
-_080797C8:
- ldr r0, _08079828 @ =gUnknown_83BFB1C
-_080797CA:
- lsls r1, r4, 16
- asrs r1, 16
- lsls r2, r5, 16
- asrs r2, 16
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _08079834
- ldr r0, _0807982C @ =gSprites
- mov r12, r0
- lsls r0, r1, 4
- adds r0, r1
- lsls r6, r0, 2
- mov r1, r12
- adds r2, r6, r1
- lsls r0, r4, 4
- movs r1, 0
- strh r0, [r2, 0x2E]
- mov r0, r8
- strh r0, [r2, 0x30]
- lsls r0, r5, 4
- strh r0, [r2, 0x32]
- strh r7, [r2, 0x34]
- strh r1, [r2, 0x36]
- mov r3, r8
- muls r3, r7
- adds r0, r3, 0
- cmp r3, 0
- bge _0807980C
- adds r0, 0xF
-_0807980C:
- asrs r0, 4
- lsls r0, 4
- subs r0, r3, r0
- strh r0, [r2, 0x38]
- mov r1, sp
- ldrh r1, [r1, 0x18]
- strh r1, [r2, 0x3A]
- mov r0, r12
- adds r0, 0x1C
- adds r0, r6, r0
- ldr r1, _08079830 @ =sub_8079730
- str r1, [r0]
- movs r0, 0x1
- b _08079836
- .align 2, 0
-_08079828: .4byte gUnknown_83BFB1C
-_0807982C: .4byte gSprites
-_08079830: .4byte sub_8079730
-_08079834:
- movs r0, 0
-_08079836:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80797AC
-
- thumb_func_start sub_8079840
-sub_8079840: @ 8079840
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _08079868 @ =gTasks+0x8
- adds r6, r0, r1
- movs r1, 0
- ldrsh r0, [r6, r1]
- cmp r0, 0
- beq _0807986C
- cmp r0, 0x1
- beq _08079884
- b _0807998A
- .align 2, 0
-_08079868: .4byte gTasks+0x8
-_0807986C:
- ldr r2, _08079880 @ =0x00007878
- adds r0, r5, 0
- movs r1, 0x3
- bl sub_807999C
- ldrh r0, [r6]
- adds r0, 0x1
- strh r0, [r6]
- b _0807998A
- .align 2, 0
-_08079880: .4byte 0x00007878
-_08079884:
- ldrh r0, [r6, 0x2]
- adds r0, 0x1
- strh r0, [r6, 0x2]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0x4
- ldrsh r1, [r6, r2]
- cmp r0, r1
- blt _0807998A
- movs r0, 0
- strh r0, [r6, 0x2]
- adds r0, r5, 0
- movs r1, 0x3
- bl sub_80799B4
- movs r0, 0x12
- strh r0, [r6, 0x4]
- adds r0, r5, 0
- movs r1, 0x3
- bl sub_80799B4
- lsls r0, 16
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r0
- lsrs r1, 16
- subs r1, 0x2
- mov r8, r1
- adds r0, r5, 0
- movs r1, 0x3
- bl sub_80799B4
- lsls r0, 16
- movs r1, 0xE0
- lsls r1, 11
- ands r1, r0
- lsrs r1, 16
- adds r7, r1, 0
- subs r7, 0x10
- adds r0, r5, 0
- movs r1, 0x3
- bl sub_80799B4
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- adds r0, 0x74
- mov r9, r0
- adds r0, r5, 0
- movs r1, 0x3
- bl sub_80799B4
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF0
- bl __umodsi3
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r5, 0
- movs r1, 0x3
- bl sub_80799B4
- movs r2, 0
- lsls r0, 16
- movs r1, 0xF0
- lsls r1, 12
- ands r1, r0
- lsrs r1, 16
- cmp r1, 0x7
- bls _0807991C
- movs r2, 0x1
-_0807991C:
- str r2, [sp]
- adds r0, r4, 0
- mov r1, r9
- mov r2, r8
- adds r3, r7, 0
- bl sub_80797AC
- movs r4, 0
-_0807992C:
- ldr r1, _08079998 @ =gUnknown_83BFBD4
- adds r1, r4, r1
- movs r2, 0xA
- ldrsh r0, [r6, r2]
- ldrb r1, [r1]
- adds r0, r1
- movs r1, 0x1
- str r1, [sp]
- mov r1, r9
- mov r2, r8
- adds r3, r7, 0
- bl sub_80797AC
- adds r0, r5, 0
- movs r1, 0x3
- bl sub_80799B4
- lsls r0, 16
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r0
- lsrs r1, 16
- subs r1, 0x2
- mov r8, r1
- adds r0, r5, 0
- movs r1, 0x3
- bl sub_80799B4
- lsls r0, 16
- movs r1, 0xE0
- lsls r1, 11
- ands r1, r0
- lsrs r1, 16
- adds r7, r1, 0
- subs r7, 0x10
- adds r4, 0x1
- cmp r4, 0xE
- ble _0807992C
- ldrh r0, [r6, 0xA]
- adds r0, 0x1
- strh r0, [r6, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3
- ble _0807998A
- movs r0, 0
- strh r0, [r6, 0xA]
-_0807998A:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08079998: .4byte gUnknown_83BFBD4
- thumb_func_end sub_8079840
-
- thumb_func_start sub_807999C
-sub_807999C: @ 807999C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 16
- lsrs r2, 16
- bl SetWordTaskArg
- pop {r0}
- bx r0
- thumb_func_end sub_807999C
-
- thumb_func_start sub_80799B4
-sub_80799B4: @ 80799B4
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetWordTaskArg
- adds r6, r0, 0
- ldr r0, _080799E8 @ =0x41c64e6d
- muls r0, r6
- ldr r1, _080799EC @ =0x00006073
- adds r6, r0, r1
- adds r0, r4, 0
- adds r1, r5, 0
- adds r2, r6, 0
- bl SetWordTaskArg
- lsrs r0, r6, 16
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080799E8: .4byte 0x41c64e6d
-_080799EC: .4byte 0x00006073
- thumb_func_end sub_80799B4
-
- thumb_func_start sub_80799F0
-sub_80799F0: @ 80799F0
- push {lr}
- ldr r0, _08079A0C @ =gUnknown_83BFB3C
- movs r1, 0x18
- movs r2, 0x90
- movs r3, 0
- bl CreateSprite
- movs r0, 0x2
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_08079A0C: .4byte gUnknown_83BFB3C
- thumb_func_end sub_80799F0
-
- thumb_func_start sub_8079A10
-sub_8079A10: @ 8079A10
- push {lr}
- cmp r0, 0
- beq _08079A38
- movs r0, 0x2
- bl IndexOfSpritePaletteTag
- adds r1, r0, 0
- lsls r1, 24
- ldr r0, _08079A34 @ =gUnknown_8EAE488
- lsrs r1, 4
- movs r2, 0x80
- lsls r2, 17
- adds r1, r2
- lsrs r1, 16
- movs r2, 0x20
- bl LoadPalette
- b _08079A3C
- .align 2, 0
-_08079A34: .4byte gUnknown_8EAE488
-_08079A38:
- bl sub_80799F0
-_08079A3C:
- pop {r0}
- bx r0
- thumb_func_end sub_8079A10
-
- thumb_func_start sub_8079A40
-sub_8079A40: @ 8079A40
- push {r4,lr}
- ldr r0, _08079A7C @ =gUnknown_83BFB5C
- movs r1, 0x20
- negs r1, r1
- movs r2, 0x1B
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- adds r4, r1, 0
- cmp r1, 0x40
- beq _08079A74
- ldr r3, _08079A80 @ =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r3, 0
- adds r1, 0x1C
- adds r1, r0, r1
- ldr r2, _08079A84 @ =sub_8079AD8
- str r2, [r1]
- adds r0, r3
- movs r1, 0x87
- lsls r1, 2
- strh r1, [r0, 0x30]
-_08079A74:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08079A7C: .4byte gUnknown_83BFB5C
-_08079A80: .4byte gSprites
-_08079A84: .4byte sub_8079AD8
- thumb_func_end sub_8079A40
-
- thumb_func_start sub_8079A88
-sub_8079A88: @ 8079A88
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _08079AA0
- ldr r0, _08079AA4 @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x32]
-_08079AA0:
- pop {r0}
- bx r0
- .align 2, 0
-_08079AA4: .4byte gSprites
- thumb_func_end sub_8079A88
-
- thumb_func_start sub_8079AA8
-sub_8079AA8: @ 8079AA8
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- bne _08079AB6
- movs r0, 0
- b _08079ACE
-_08079AB6:
- ldr r1, _08079AD4 @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- movs r2, 0x2E
- ldrsh r1, [r0, r2]
- movs r0, 0x2
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
-_08079ACE:
- pop {r1}
- bx r1
- .align 2, 0
-_08079AD4: .4byte gSprites
- thumb_func_end sub_8079AA8
-
- thumb_func_start sub_8079AD8
-sub_8079AD8: @ 8079AD8
- push {lr}
- adds r2, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r2, r1]
- cmp r0, 0x1
- beq _08079B24
- cmp r0, 0x1
- bgt _08079B74
- cmp r0, 0
- bne _08079B74
- movs r1, 0x32
- ldrsh r0, [r2, r1]
- cmp r0, 0
- beq _08079B04
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x2
- strh r0, [r2, 0x2E]
-_08079B04:
- ldrh r0, [r2, 0x30]
- subs r0, 0x1
- strh r0, [r2, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _08079B74
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x5
- negs r1, r1
- ands r1, r0
- strb r1, [r3]
- movs r0, 0x1
- strh r0, [r2, 0x2E]
- b _08079B74
-_08079B24:
- ldrh r0, [r2, 0x20]
- adds r0, 0x9
- strh r0, [r2, 0x20]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x43
- bne _08079B38
- ldrh r0, [r2, 0x22]
- subs r0, 0x7
- strh r0, [r2, 0x22]
-_08079B38:
- movs r0, 0x20
- ldrsh r1, [r2, r0]
- cmp r1, 0x94
- bne _08079B46
- ldrh r0, [r2, 0x22]
- adds r0, 0x7
- strh r0, [r2, 0x22]
-_08079B46:
- movs r0, 0x88
- lsls r0, 1
- cmp r1, r0
- ble _08079B74
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x32
- ldrsh r1, [r2, r0]
- cmp r1, 0
- beq _08079B68
- movs r0, 0x2
- strh r0, [r2, 0x2E]
- b _08079B74
-_08079B68:
- ldr r0, _08079B78 @ =0x0000ffe0
- strh r0, [r2, 0x20]
- movs r0, 0x87
- lsls r0, 2
- strh r0, [r2, 0x30]
- strh r1, [r2, 0x2E]
-_08079B74:
- pop {r0}
- bx r0
- .align 2, 0
-_08079B78: .4byte 0x0000ffe0
- thumb_func_end sub_8079AD8
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/field_weather.s b/data/field_weather.s
index a25e44344..517480d9a 100644
--- a/data/field_weather.s
+++ b/data/field_weather.s
@@ -1,6 +1,9 @@
.section .rodata
.align 2
+gUnknown_83BFBE4:: @ 83BFBE4
+ .incbin "baserom.gba", 0x3BFBE4, 0x2FD8
+
gUnknown_83C2BBC:: @ 83C2BBC
.incbin "baserom.gba", 0x3C2BBC, 0x4
diff --git a/data/graphics.s b/data/graphics.s
index 83d14001d..4b00c1c4b 100644
--- a/data/graphics.s
+++ b/data/graphics.s
@@ -16352,38 +16352,39 @@ gUnknown_8EAAB98:: @ 8EAAB98
gUnknown_8EAB30C:: @ 8EAB30C
.incbin "baserom.gba", 0xEAB30C, 0x3B8
-gUnknown_8EAB6C4:: @ 8EAB6C4
- .incbin "baserom.gba", 0xEAB6C4, 0x200 @UNKNOWN
+ @ title_screen
+gGraphics_TitleScreen_PokemonFireRedLogoPals:: @ 8EAB6C4
+ .incbin "graphics/title_screen/unk_8eab6c4.gbapal"
-gUnknown_8EAB8C4:: @ 8EAB8C4
- .incbin "baserom.gba", 0xEAB8C4, 0x1ACC
+gGraphics_TitleScreen_PokemonFireRedLogoTiles:: @ 8EAB8C4
+ .incbin "graphics/title_screen/unk_8eab8c4.8bpp.lz"
-gUnknown_8EAD390:: @ 8EAD390
- .incbin "baserom.gba", 0xEAD390, 0x258
+gGraphics_TitleScreen_PokemonFireRedLogoMap:: @ 8EAD390
+ .incbin "graphics/title_screen/unk_8ead390.bin.lz"
-gUnknown_8EAD5E8:: @ 8EAD5E8
- .incbin "baserom.gba", 0xEAD5E8, 0x20 @UNKNOWN
+gGraphics_TitleScreen_CharizardPals:: @ 8EAD5E8
+ .incbin "graphics/title_screen/unk_8ead5e8.gbapal"
-gUnknown_8EAD608:: @ 8EAD608
- .incbin "baserom.gba", 0xEAD608, 0x8DC
+gGraphics_TitleScreen_CharizardTiles:: @ 8EAD608
+ .incbin "graphics/title_screen/unk_8ead608.4bpp.lz"
-gUnknown_8EADEE4:: @ 8EADEE4
- .incbin "baserom.gba", 0xEADEE4, 0x1B0
+gGraphics_TitleScreen_CharizardMap:: @ 8EADEE4
+ .incbin "graphics/title_screen/unk_8eadee4.bin.lz"
-gUnknown_8EAE094:: @ 8EAE094
- .incbin "baserom.gba", 0xEAE094, 0x20 @UNKNOWN
+gGraphics_TitleScreen_BackgroundPals:: @ 8EAE094
+ .incbin "graphics/title_screen/unk_8eae094.gbapal"
-gUnknown_8EAE0B4:: @ 8EAE0B4
- .incbin "baserom.gba", 0xEAE0B4, 0x2C0
+gGraphics_TitleScreen_CopyrightPressStartTiles:: @ 8EAE0B4
+ .incbin "graphics/title_screen/unk_8eae0b4.4bpp.lz"
-gUnknown_8EAE374:: @ 8EAE374
- .incbin "baserom.gba", 0xEAE374, 0x114
+gGraphics_TitleScreen_CopyrightPressStartMap:: @ 8EAE374
+ .incbin "graphics/title_screen/unk_8eae374.bin.lz"
-gUnknown_8EAE488:: @ 8EAE488
- .incbin "baserom.gba", 0xEAE488, 0x20 @UNKNOWN
+gGraphics_TitleScreen_FirePals:: @ 8EAE488
+ .incbin "graphics/title_screen/unk_8eae488.gbapal"
-gUnknown_8EAE4A8:: @ 8EAE4A8
- .incbin "baserom.gba", 0xEAE4A8, 0x80
+gGraphics_TitleScreen_BlankObjTiles:: @ 8EAE4A8
+ .incbin "graphics/title_screen/unk_8eae4a8.4bpp.lz"
gUnknown_8EAE528:: @ 8EAE528
.incbin "baserom.gba", 0xEAE528, 0x20 @UNKNOWN
diff --git a/data/graphics/title_screen/unk_83BF58C.png b/data/graphics/title_screen/unk_83BF58C.png
new file mode 100644
index 000000000..895457c3c
--- /dev/null
+++ b/data/graphics/title_screen/unk_83BF58C.png
Binary files differ
diff --git a/data/graphics/title_screen/unk_83BF5A8.bin b/data/graphics/title_screen/unk_83BF5A8.bin
new file mode 100644
index 000000000..375fbeb7a
--- /dev/null
+++ b/data/graphics/title_screen/unk_83BF5A8.bin
@@ -0,0 +1 @@
+àààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààà \ No newline at end of file
diff --git a/data/graphics/title_screen/unk_83bf64c.png b/data/graphics/title_screen/unk_83bf64c.png
new file mode 100644
index 000000000..260e00a01
--- /dev/null
+++ b/data/graphics/title_screen/unk_83bf64c.png
Binary files differ
diff --git a/data/graphics/title_screen/unk_83bf77c.pal b/data/graphics/title_screen/unk_83bf77c.pal
new file mode 100644
index 000000000..815547f37
--- /dev/null
+++ b/data/graphics/title_screen/unk_83bf77c.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+82 205 180
+0 0 0
+255 255 189
+255 246 139
+255 213 65
+255 172 0
+197 164 49
+115 180 139
+98 189 156
+90 197 164
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+82 205 180
diff --git a/data/graphics/title_screen/unk_83bf79c.png b/data/graphics/title_screen/unk_83bf79c.png
new file mode 100644
index 000000000..66a57a899
--- /dev/null
+++ b/data/graphics/title_screen/unk_83bf79c.png
Binary files differ
diff --git a/data/graphics/title_screen/unk_83bfa14.png b/data/graphics/title_screen/unk_83bfa14.png
new file mode 100644
index 000000000..f4f030a5b
--- /dev/null
+++ b/data/graphics/title_screen/unk_83bfa14.png
Binary files differ
diff --git a/data/title_screen.s b/data/title_screen.s
deleted file mode 100644
index 93d0f2f83..000000000
--- a/data/title_screen.s
+++ /dev/null
@@ -1,34 +0,0 @@
- .section .rodata
- .align 2
-gUnknown_83BF58C:: @ 83BF58C
- .incbin "baserom.gba", 0x3BF58C, 0x1C
-
-gUnknown_83BF5A8:: @ 83BF5A8
- .incbin "baserom.gba", 0x3BF5A8, 0x55C
-
-gUnknown_83BFB04:: @ 83BFB04
- .incbin "baserom.gba", 0x3BFB04, 0x18
-
-gUnknown_83BFB1C:: @ 83BFB1C
- .incbin "baserom.gba", 0x3BFB1C, 0x20
-
-gUnknown_83BFB3C:: @ 83BFB3C
- .incbin "baserom.gba", 0x3BFB3C, 0x20
-
-gUnknown_83BFB5C:: @ 83BFB5C
- .incbin "baserom.gba", 0x3BFB5C, 0x18
-
-gUnknown_83BFB74:: @ 83BFB74
- .incbin "baserom.gba", 0x3BFB74, 0x10
-
-gUnknown_83BFB84:: @ 83BFB84
- .incbin "baserom.gba", 0x3BFB84, 0x18
-
-gUnknown_83BFB9C:: @ 83BFB9C
- .incbin "baserom.gba", 0x3BFB9C, 0x20
-
-gUnknown_83BFBBC:: @ 83BFBBC
- .incbin "baserom.gba", 0x3BFBBC, 0x18
-
-gUnknown_83BFBD4:: @ 83BFBD4
- .incbin "baserom.gba", 0x3BFBD4, 0x2FE8
diff --git a/graphics/title_screen/unk_8eab6c4.pal b/graphics/title_screen/unk_8eab6c4.pal
new file mode 100644
index 000000000..48c794761
--- /dev/null
+++ b/graphics/title_screen/unk_8eab6c4.pal
@@ -0,0 +1,259 @@
+JASC-PAL
+0100
+256
+0 255 41
+0 0 0
+255 238 16
+246 222 41
+246 238 246
+255 246 24
+246 246 41
+246 246 246
+246 255 255
+255 246 255
+32 0 255
+106 65 156
+32 0 238
+246 222 24
+246 222 32
+255 238 41
+255 238 49
+255 255 16
+255 255 24
+255 255 246
+255 255 255
+123 106 156
+24 41 32
+32 32 74
+32 0 230
+115 82 164
+16 0 246
+106 82 172
+246 238 32
+255 230 24
+246 230 41
+246 238 41
+246 230 49
+246 238 49
+255 246 32
+255 246 41
+255 255 32
+255 255 41
+32 24 32
+32 32 41
+197 156 41
+197 164 41
+156 156 156
+164 164 156
+172 172 172
+180 189 180
+41 0 230
+189 189 189
+197 189 189
+197 197 197
+205 205 213
+8 8 197
+246 230 24
+246 230 32
+255 238 24
+255 238 32
+32 32 32
+32 41 32
+41 32 32
+41 41 32
+49 32 32
+49 41 32
+41 32 41
+49 32 41
+24 41 41
+32 32 90
+16 24 106
+24 32 98
+41 32 82
+41 32 98
+41 41 82
+41 41 98
+0 0 115
+8 8 131
+32 24 115
+32 24 131
+32 41 115
+41 41 115
+32 41 131
+41 41 131
+57 41 41
+57 41 49
+57 49 41
+57 57 57
+65 41 41
+74 41 41
+65 57 57
+74 57 57
+57 74 74
+65 65 74
+82 74 82
+82 57 131
+82 90 82
+90 90 90
+90 98 98
+98 98 106
+115 106 106
+131 98 115
+139 98 106
+139 115 98
+180 139 57
+172 131 65
+156 115 90
+156 131 82
+115 82 139
+123 82 131
+115 98 131
+131 98 123
+115 123 123
+123 123 131
+139 131 139
+148 123 131
+205 172 24
+213 172 16
+205 164 32
+213 172 32
+222 189 24
+230 189 16
+213 189 32
+222 189 32
+230 205 24
+230 205 32
+230 213 32
+238 222 32
+180 148 57
+189 156 49
+180 148 74
+180 172 90
+156 148 123
+139 148 139
+164 148 115
+172 156 106
+197 156 49
+205 180 49
+197 172 90
+205 189 82
+222 205 49
+230 222 49
+205 205 74
+222 213 65
+49 0 230
+213 213 213
+222 230 230
+222 230 230
+255 0 246
+255 0 255
+16 8 197
+16 16 189
+32 16 164
+41 16 164
+32 16 180
+41 16 189
+8 8 205
+8 16 205
+24 8 213
+24 16 205
+41 8 213
+41 16 213
+49 8 213
+57 16 213
+16 8 230
+24 8 230
+24 16 230
+24 24 230
+8 8 246
+8 16 246
+16 8 246
+16 16 246
+32 8 230
+32 16 230
+32 8 238
+32 8 246
+41 8 230
+41 16 230
+49 16 230
+49 8 238
+32 32 156
+24 32 172
+41 41 156
+41 32 164
+74 49 180
+82 49 172
+82 65 164
+90 74 164
+24 32 189
+57 41 189
+41 32 213
+57 32 213
+74 41 189
+90 57 189
+74 49 197
+74 41 205
+49 49 49
+197 197 197
+189 189 189
+156 156 156
+172 172 172
+139 139 139
+115 115 115
+255 255 255
+16 16 16
+98 98 98
+246 246 246
+82 82 82
+230 230 230
+213 213 213
+0 0 0
+255 255 255
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/title_screen/unk_8eab8c4.png b/graphics/title_screen/unk_8eab8c4.png
new file mode 100644
index 000000000..9d9cd68f1
--- /dev/null
+++ b/graphics/title_screen/unk_8eab8c4.png
Binary files differ
diff --git a/graphics/title_screen/unk_8ead390.bin b/graphics/title_screen/unk_8ead390.bin
new file mode 100644
index 000000000..2987c5cfa
--- /dev/null
+++ b/graphics/title_screen/unk_8ead390.bin
Binary files differ
diff --git a/graphics/title_screen/unk_8ead5e8.pal b/graphics/title_screen/unk_8ead5e8.pal
new file mode 100644
index 000000000..0832e8306
--- /dev/null
+++ b/graphics/title_screen/unk_8ead5e8.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 255
+0 0 0
+82 205 180
+255 0 255
+255 0 255
+255 0 255
+32 0 0
+49 0 0
+65 0 0
+90 0 0
+123 32 0
+156 32 0
+180 49 0
+205 65 0
+222 90 0
+230 123 0
diff --git a/graphics/title_screen/unk_8ead608.png b/graphics/title_screen/unk_8ead608.png
new file mode 100644
index 000000000..c9a0dc8eb
--- /dev/null
+++ b/graphics/title_screen/unk_8ead608.png
Binary files differ
diff --git a/graphics/title_screen/unk_8eadee4.bin b/graphics/title_screen/unk_8eadee4.bin
new file mode 100644
index 000000000..0c309689e
--- /dev/null
+++ b/graphics/title_screen/unk_8eadee4.bin
Binary files differ
diff --git a/graphics/title_screen/unk_8eae094.pal b/graphics/title_screen/unk_8eae094.pal
new file mode 100644
index 000000000..f7f14d45d
--- /dev/null
+++ b/graphics/title_screen/unk_8eae094.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 139
+0 0 0
+123 123 123
+197 197 197
+222 222 222
+255 255 255
+0 0 0
+123 123 123
+197 197 197
+222 222 222
+255 255 255
+65 180 164
+139 0 0
+172 24 0
+213 57 0
+255 90 0
diff --git a/graphics/title_screen/unk_8eae0b4.png b/graphics/title_screen/unk_8eae0b4.png
new file mode 100644
index 000000000..0b4e69015
--- /dev/null
+++ b/graphics/title_screen/unk_8eae0b4.png
Binary files differ
diff --git a/graphics/title_screen/unk_8eae374.bin b/graphics/title_screen/unk_8eae374.bin
new file mode 100644
index 000000000..9bab57cc0
--- /dev/null
+++ b/graphics/title_screen/unk_8eae374.bin
Binary files differ
diff --git a/graphics/title_screen/unk_8eae488.pal b/graphics/title_screen/unk_8eae488.pal
new file mode 100644
index 000000000..7a29ab72c
--- /dev/null
+++ b/graphics/title_screen/unk_8eae488.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+82 205 180
+189 197 205
+164 164 172
+123 131 131
+213 213 222
+255 246 74
+255 213 32
+164 131 24
+246 164 24
+131 90 16
+106 98 90
+65 57 41
+230 82 16
+205 41 0
+139 8 8
+246 246 246
diff --git a/graphics/title_screen/unk_8eae4a8.png b/graphics/title_screen/unk_8eae4a8.png
new file mode 100644
index 000000000..682c22432
--- /dev/null
+++ b/graphics/title_screen/unk_8eae4a8.png
Binary files differ
diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk
index 20d2efc21..40d04abe7 100644
--- a/graphics_file_rules.mk
+++ b/graphics_file_rules.mk
@@ -23,6 +23,7 @@ SLOTMACHINEGFXDIR := graphics/slot_machine
TEACHYTVGFXDIR := graphics/teachy_tv
SSANNEGFXDIR := graphics/ss_anne
ITEMPCGFXDIR := graphics/item_pc
+TITLESCREENGFXDIR := graphics/title_screen
types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark
contest_types := cool beauty cute smart tough
@@ -493,3 +494,6 @@ $(SSANNEGFXDIR)/unk_8479A38.4bpp: %.4bpp: %.png
$(ITEMPCGFXDIR)/unk_8E85090.4bpp: %.4bpp: %.png
$(GFX) $< $@ -num_tiles 82
+
+$(TITLESCREENGFXDIR)/unk_8ead608.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -num_tiles 135
diff --git a/include/berry_fix_program.h b/include/berry_fix_program.h
new file mode 100644
index 000000000..fc0748fd9
--- /dev/null
+++ b/include/berry_fix_program.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_BERRY_FIX_PROGRAM_H
+#define GUARD_BERRY_FIX_PROGRAM_H
+
+void mb_berry_fix_serve(void);
+
+#endif //GUARD_BERRY_FIX_PROGRAM_H
diff --git a/include/clear_save_data_screen.h b/include/clear_save_data_screen.h
new file mode 100644
index 000000000..d5d2665ae
--- /dev/null
+++ b/include/clear_save_data_screen.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_CLEAR_SAVE_DATA_SCREEN_H
+#define GUARD_CLEAR_SAVE_DATA_SCREEN_H
+
+void CB2_SaveClearScreen_Init(void);
+
+#endif //GUARD_CLEAR_SAVE_DATA_SCREEN_H
diff --git a/include/graphics.h b/include/graphics.h
index e8503609e..f6c2ddd4a 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -961,4 +961,17 @@ extern const u8 gFile_graphics_items_icon_palettes_sapphire_palette[];
extern const u8 gFile_graphics_items_icons_return_to_field_arrow_sheet[];
extern const u8 gFile_graphics_items_icon_palettes_return_to_field_arrow_palette[];
+// title_screen
+extern const u16 gGraphics_TitleScreen_PokemonFireRedLogoPals[];
+extern const u8 gGraphics_TitleScreen_PokemonFireRedLogoTiles[];
+extern const u8 gGraphics_TitleScreen_PokemonFireRedLogoMap[];
+extern const u16 gGraphics_TitleScreen_CharizardPals[];
+extern const u8 gGraphics_TitleScreen_CharizardTiles[];
+extern const u8 gGraphics_TitleScreen_CharizardMap[];
+extern u16 gGraphics_TitleScreen_BackgroundPals[]; // If this is const, title_screen.c does not match
+extern const u8 gGraphics_TitleScreen_CopyrightPressStartTiles[];
+extern const u8 gGraphics_TitleScreen_CopyrightPressStartMap[];
+extern const u16 gGraphics_TitleScreen_FirePals[];
+extern const u8 gGraphics_TitleScreen_BlankObjTiles[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/intro.h b/include/intro.h
new file mode 100644
index 000000000..f01c81a9e
--- /dev/null
+++ b/include/intro.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_INTRO_H
+#define GUARD_INTRO_H
+
+void sub_80EC864(void);
+
+#endif //GUARD_INTRO_H
diff --git a/include/main.h b/include/main.h
index a250475cb..d326909ff 100644
--- a/include/main.h
+++ b/include/main.h
@@ -65,6 +65,8 @@ void ClearPokemonCrySongs(void);
void RestoreSerialTimer3IntrHandlers(void);
void SetVBlankCounter1Ptr(u32 *ptr);
void DisableVBlankCounter1(void);
+void StartTimer1(void);
+void SeedRngAndSetTrainerId(void);
extern const char RomHeaderGameCode[4];
extern const char RomHeaderSoftwareVersion;
diff --git a/include/main_menu.h b/include/main_menu.h
new file mode 100644
index 000000000..2a0cd81d5
--- /dev/null
+++ b/include/main_menu.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_MAIN_MENU_H
+#define GUARD_MAIN_MENU_H
+
+void sub_800C300(void);
+
+#endif //GUARD_MAIN_MENU_H
diff --git a/include/palette.h b/include/palette.h
index 06b9b1f6f..300236d1e 100644
--- a/include/palette.h
+++ b/include/palette.h
@@ -71,7 +71,11 @@ void BlendPalettes(u32, u8, u16);
void BlendPalettesUnfaded(u32, u8, u16);
void sub_80716F8(const u16 *, u16 *, u16, u8);
void TintPalette_GrayScale(u16 *, u16);
+void TintPalette_GrayScale2(u16 *, u16);
void TintPalette_SepiaTone(u16 *, u16);
+void sub_80717A8(u32, s8, u8, u8, u16, u8, u8);
+bool32 sub_807185C(u8);
+void sub_8071898(void);
extern struct PaletteFadeControl gPaletteFade;
diff --git a/ld_script.txt b/ld_script.txt
index 36c882c32..08aecb323 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -115,7 +115,7 @@ SECTIONS {
src/task.o(.text);
asm/reshow_battle_screen.o(.text);
asm/battle_anim_status_effects.o(.text);
- asm/title_screen.o(.text);
+ src/title_screen.o(.text);
src/reset_save_heap.o(.text);
asm/field_weather.o(.text);
asm/field_weather_effects.o(.text);
@@ -405,7 +405,7 @@ SECTIONS {
data/battle_anim.o(.rodata);
data/map_events.o(.rodata);
data/battle_anim_status_effects.o(.rodata);
- data/title_screen.o(.rodata);
+ src/title_screen.o(.rodata);
data/field_weather.o(.rodata);
data/data_835B488.o(.rodata);
src/item_menu_icons.o(.rodata);
diff --git a/src/title_screen.c b/src/title_screen.c
new file mode 100644
index 000000000..f4086b2ff
--- /dev/null
+++ b/src/title_screen.c
@@ -0,0 +1,1056 @@
+#include "global.h"
+#include "malloc.h"
+#include "palette.h"
+#include "gpu_regs.h"
+#include "bg.h"
+#include "task.h"
+#include "main.h"
+#include "new_menu_helpers.h"
+#include "m4a.h"
+#include "scanline_effect.h"
+#include "graphics.h"
+#include "help_system.h"
+#include "intro.h"
+#include "load_save.h"
+#include "sound.h"
+#include "new_game.h"
+#include "save.h"
+#include "main_menu.h"
+#include "clear_save_data_screen.h"
+#include "berry_fix_program.h"
+#include "decompress.h"
+#include "constants/songs.h"
+#include "constants/species.h"
+
+enum TitleScreenScene
+{
+ TITLESCREENSCENE_INIT = 0,
+ TITLESCREENSCENE_FLASHSPRITE,
+ TITLESCREENSCENE_FADEIN,
+ TITLESCREENSCENE_RUN,
+ TITLESCREENSCEEN_RESTART,
+ TITLESCREENSCENE_CRY
+};
+
+#if defined(FIRERED)
+#define TITLE_SPECIES SPECIES_CHARIZARD
+#elif defined(LEAFGREEN)
+#define TITLE_SPECIES SPECIES_VENUSAUR
+#endif
+
+static EWRAM_DATA u8 sTitleScreenTimerTaskId = 0;
+
+static void ResetGpuRegs(void);
+static void CB2_TitleScreenRun(void);
+static void VBlankCB(void);
+static void Task_TitleScreenTimer(u8 taskId);
+static void Task_TitleScreenMain(u8 taskId);
+static void SetTitleScreenScene(s16 * data, u8 a1);
+static void SetTitleScreenScene_Init(s16 * data);
+static void SetTitleScreenScene_FlashSprite(s16 * data);
+static void SetTitleScreenScene_FadeIn(s16 * data);
+static void SetTitleScreenScene_Run(s16 * data);
+static void SetGpuRegsForTitleScreenRun(void);
+static void SetTitleScreenScene_Restart(s16 * data);
+static void SetTitleScreenScene_Cry(s16 * data);
+static void Task_TitleScreen_SlideWin0(u8 taskId);
+static void Task_TitleScreen_PaletteSomething(u8 taskId);
+static void SignalEndTitleScreenPaletteSomethingTask(void);
+static void UpdateScanlineEffectRegBuffer(s16 a0);
+static void ScheduleStopScanlineEffect(void);
+static void LoadMainTitleScreenPalsAndResetBgs(void);
+static void CB2_FadeOutTransitionToSaveClearScreen(void);
+static void CB2_FadeOutTransitionToBerryFix(void);
+static void LoadSpriteGfxAndPals(void);
+static void Task_FlameOrLeafSpawner(u8 taskId);
+static void TitleScreen_srand(u8 taskId, u8 field, u16 seed);
+static u16 TitleScreen_rand(u8 taskId, u8 field);
+static u32 CreateBlankSprite(void);
+static void SetPalOnOrCreateBlankSprite(bool32 a0);
+static u8 CreateSlashSprite(void);
+static void ScheduleHideSlashSprite(u8 spriteId);
+static bool32 IsSlashSpriteHidden(u8 spriteId);
+static void SpriteCallback_Slash(struct Sprite * sprite);
+
+// bg3
+static const u8 sBorderBgTiles[] = INCBIN_U8("data/graphics/title_screen/unk_83BF58C.4bpp.lz");
+static const u8 sBorderBgMap[] = INCBIN_U8("data/graphics/title_screen/unk_83BF5A8.bin.lz");
+
+//sprites
+static const u8 sSlashSpriteTiles[] = INCBIN_U8("data/graphics/title_screen/unk_83bf64c.4bpp.lz");
+static const u16 sSlashSpritePals[] = INCBIN_U16("data/graphics/title_screen/unk_83bf77c.gbapal");
+static const u8 sFireSpriteTiles[] = INCBIN_U8("data/graphics/title_screen/unk_83bf79c.4bpp.lz");
+static const u8 sBlankFireSpriteTiles[] = INCBIN_U8("data/graphics/title_screen/unk_83bfa14.4bpp.lz");
+
+static const struct OamData sOamData_FlameOrLeaf = {
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .shape = ST_OAM_SQUARE,
+ .size = ST_OAM_SIZE_1,
+ .tileNum = 0,
+ .priority = 3,
+ .paletteNum = 0
+};
+
+static const union AnimCmd sSpriteAnims_FlameOrLeaf_0[] = {
+ ANIMCMD_FRAME(0x00, 3),
+ ANIMCMD_FRAME(0x04, 6),
+ ANIMCMD_FRAME(0x08, 6),
+ ANIMCMD_FRAME(0x0c, 6),
+ ANIMCMD_FRAME(0x10, 6),
+ ANIMCMD_FRAME(0x14, 6),
+ ANIMCMD_FRAME(0x18, 6),
+ ANIMCMD_FRAME(0x1c, 6),
+ ANIMCMD_FRAME(0x20, 6),
+ ANIMCMD_FRAME(0x24, 6),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnims_FlameOrLeaf_1[] = {
+ ANIMCMD_FRAME(0x18, 6),
+ ANIMCMD_FRAME(0x1c, 6),
+ ANIMCMD_FRAME(0x20, 6),
+ ANIMCMD_FRAME(0x24, 6),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_FlameOrLeaf[] = {
+ sSpriteAnims_FlameOrLeaf_0,
+ sSpriteAnims_FlameOrLeaf_1
+};
+
+static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State1 = {
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &sOamData_FlameOrLeaf,
+ .anims = sSpriteAnimTable_FlameOrLeaf,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State0 = {
+ .tileTag = 1,
+ .paletteTag = 0,
+ .oam = &sOamData_FlameOrLeaf,
+ .anims = sSpriteAnimTable_FlameOrLeaf,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct OamData sOamData_UnknownTemptySprite = {
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .shape = ST_OAM_V_RECTANGLE,
+ .size = ST_OAM_SIZE_3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0
+};
+
+static const struct SpriteTemplate sUnknownEmptySprite = {
+ .tileTag = 2,
+ .paletteTag = 2,
+ .oam = &sOamData_UnknownTemptySprite,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct OamData sOamData_SlashSprite = {
+ .objMode = ST_OAM_OBJ_WINDOW,
+ .shape = ST_OAM_SQUARE,
+ .size = ST_OAM_SIZE_3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0
+};
+
+static const struct SpriteTemplate sSlashSpriteTemplate = {
+ .tileTag = 3,
+ .paletteTag = 2,
+ .oam = &sOamData_SlashSprite,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct BgTemplate sBgTemplates[] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 1, // 8bpp
+ .priority = 0,
+ .baseTile = 0
+ }, {
+ .bg = 1,
+ .charBaseIndex = 1,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0, // 4bpp
+ .priority = 1,
+ .baseTile = 0
+ }, {
+ .bg = 2,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 29,
+ .screenSize = 0,
+ .paletteMode = 0, // 4bpp
+ .priority = 2,
+ .baseTile = 0
+ }, {
+ .bg = 3,
+ .charBaseIndex = 3,
+ .mapBaseIndex = 28,
+ .screenSize = 0,
+ .paletteMode = 0, // 4bpp
+ .priority = 3,
+ .baseTile = 0
+ }
+};
+
+static void (*const sSceneFuncs[])(s16 * data) = {
+ SetTitleScreenScene_Init,
+ SetTitleScreenScene_FlashSprite,
+ SetTitleScreenScene_FadeIn,
+ SetTitleScreenScene_Run,
+ SetTitleScreenScene_Restart,
+ SetTitleScreenScene_Cry
+};
+
+static const struct CompressedSpriteSheet sSpriteSheets[] = {
+ {(const void *)sFireSpriteTiles, 0x500, 0},
+ {(const void *)sBlankFireSpriteTiles, 0x500, 1},
+ {(const void *)gGraphics_TitleScreen_BlankObjTiles, 0x400, 2},
+ {(const void *)sSlashSpriteTiles, 0x800, 3}
+};
+
+static const struct SpritePalette sSpritePals[] = {
+ {sSlashSpritePals, 0},
+ {gGraphics_TitleScreen_FirePals, 2},
+ {}
+};
+
+static const u8 gUnknown_83BFBD4[] = {
+ 0x04, 0x10, 0x1a, 0x20, 0x30, 0xc8, 0xd8, 0xe0, 0xe8, 0x3c, 0x4c, 0x5c, 0x6c, 0x80, 0x90
+};
+
+void CB2_InitTitleScreen(void)
+{
+ switch (gMain.state)
+ {
+ default:
+ gMain.state = 0;
+ // fallthrough
+ case 0:
+ SetVBlankCallback(NULL);
+ StartTimer1();
+ InitHeap(gHeap, HEAP_SIZE);
+ ResetTasks();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ ResetPaletteFade();
+ ResetGpuRegs();
+ DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE);
+ DmaFill32(3, 0, (void *)OAM, OAM_SIZE);
+ DmaFill16(3, 0, (void *)PLTT, PLTT_SIZE);
+ ResetBgsAndClearDma3BusyFlags(FALSE);
+ InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates));
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
+ sTitleScreenTimerTaskId = 0xFF;
+ break;
+ case 1:
+ LoadPalette(gGraphics_TitleScreen_PokemonFireRedLogoPals, 0, 0x1A0);
+ DecompressAndCopyTileDataToVram(0, gGraphics_TitleScreen_PokemonFireRedLogoTiles, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(0, gGraphics_TitleScreen_PokemonFireRedLogoMap, 0, 0, 1);
+ LoadPalette(gGraphics_TitleScreen_CharizardPals, 0xD0, 0x20);
+ DecompressAndCopyTileDataToVram(1, gGraphics_TitleScreen_CharizardTiles, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, gGraphics_TitleScreen_CharizardMap, 0, 0, 1);
+ LoadPalette(gGraphics_TitleScreen_BackgroundPals, 0xF0, 0x20);
+ DecompressAndCopyTileDataToVram(2, gGraphics_TitleScreen_CopyrightPressStartTiles, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(2, gGraphics_TitleScreen_CopyrightPressStartMap, 0, 0, 1);
+ LoadPalette(gGraphics_TitleScreen_BackgroundPals, 0xE0, 0x20);
+ DecompressAndCopyTileDataToVram(3, sBorderBgTiles, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(3, sBorderBgMap, 0, 0, 1);
+ LoadSpriteGfxAndPals();
+ break;
+ case 2:
+ if (!FreeTempTileDataBuffersIfPossible())
+ {
+ BlendPalettes(0x0000FFFF, 0x10, RGB_BLACK);
+ CreateTask(Task_TitleScreenMain, 4);
+ sTitleScreenTimerTaskId = CreateTask(Task_TitleScreenTimer, 2);
+ SetVBlankCallback(VBlankCB);
+ SetMainCallback2(CB2_TitleScreenRun);
+ m4aSongNumStart(BGM_FRLG_TITLE);
+ }
+ return;
+ }
+ gMain.state++;
+}
+
+static void ResetGpuRegs(void)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0);
+}
+
+static void CB2_TitleScreenRun(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void VBlankCB(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ ScanlineEffect_InitHBlankDmaTransfer();
+
+ if (sTitleScreenTimerTaskId != 0xFF)
+ gTasks[sTitleScreenTimerTaskId].data[0]++;
+}
+
+static void Task_TitleScreenTimer(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ if (data[0] >= 2700)
+ {
+ sTitleScreenTimerTaskId = 0xFF;
+ DestroyTask(taskId);
+ }
+}
+
+static void Task_TitleScreenMain(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ if (JOY_NEW(A_BUTTON | B_BUTTON | START_BUTTON)
+ && data[0] != 3 && data[0] != 4 && data[0] != 5)
+ {
+ ScheduleStopScanlineEffect();
+ LoadMainTitleScreenPalsAndResetBgs();
+ SetPalOnOrCreateBlankSprite(data[5]);
+ SetTitleScreenScene(data, TITLESCREENSCENE_RUN);
+ }
+ else
+ {
+ sSceneFuncs[data[0]](data);
+ }
+}
+
+static void SetTitleScreenScene(s16 * data, u8 a1)
+{
+ data[1] = 0;
+ data[0] = a1;
+}
+
+static void SetTitleScreenScene_Init(s16 * data)
+{
+ struct ScanlineEffectParams params;
+
+ HideBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+
+ params.dmaDest = (volatile void *)REG_ADDR_BLDY;
+ params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
+ params.initState = 1;
+ params.unused9 = 0;
+
+ CpuFill16(0, gScanlineEffectRegBuffers[0], 0x140);
+ CpuFill16(0, gScanlineEffectRegBuffers[1], 0x140);
+
+ ScanlineEffect_SetParams(params);
+
+ SetTitleScreenScene(data, TITLESCREENSCENE_FLASHSPRITE);
+}
+
+static void SetTitleScreenScene_FlashSprite(s16 * data)
+{
+ switch (data[1])
+ {
+ case 0:
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_LIGHTEN);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ data[2] = 0x80;
+ UpdateScanlineEffectRegBuffer(data[2]);
+ data[1]++;
+ break;
+ case 1:
+ data[2] -= 4;
+ UpdateScanlineEffectRegBuffer(data[2]);
+ if (data[2] < 0)
+ {
+ gScanlineEffect.state = 3;
+ data[1]++;
+ }
+ break;
+ case 2:
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetTitleScreenScene(data, TITLESCREENSCENE_FADEIN);
+ }
+}
+
+static void SetTitleScreenScene_FadeIn(s16 * data)
+{
+ u32 r4;
+ switch (data[1])
+ {
+ case 0:
+ data[2] = 0;
+ data[1]++;
+ break;
+ case 1:
+ data[2]++;
+ if (data[2] > 10)
+ {
+ TintPalette_GrayScale2(gPlttBufferUnfaded + 0xD0, 0x10);
+ BeginNormalPaletteFade(0x00002000, 9, 0x10, 0, RGB_BLACK);
+ data[1]++;
+ }
+ break;
+ case 2:
+ if (!gPaletteFade.active)
+ {
+ data[2] = 0;
+ data[1]++;
+ }
+ break;
+ case 3:
+ data[2]++;
+ if (data[2] > 36)
+ {
+ CreateTask(Task_TitleScreen_SlideWin0, 3);
+ sub_80717A8(0x2000, -4, 0x01, 0x10, RGB(30, 30, 31), 0, 0);
+ data[2] = 0;
+ data[1]++;
+ }
+ break;
+ case 4:
+ if (!sub_807185C(0))
+ {
+ sub_80717A8(0x2000, -4, 0x0F, 0x00, RGB(30, 30, 31), 0, 0);
+ data[1]++;
+ }
+ break;
+ case 5:
+ data[2]++;
+ if (data[2] > 20)
+ {
+ data[2] = 0;
+ sub_80717A8(0x2000, -4, 0x01, 0x10, RGB(30, 30, 31), 0, 0);
+ data[1]++;
+ }
+ break;
+ case 6:
+ if (!sub_807185C(0))
+ {
+ sub_80717A8(0x2000, -4, 0x0F, 0x00, RGB(30, 30, 31), 0, 0);
+ data[1]++;
+ }
+ break;
+ case 7:
+ data[2]++;
+ if (data[2] > 20)
+ {
+ data[2] = 0;
+ sub_80717A8(0x2000, -3, 0x00, 0x10, RGB(30, 30, 31), 0, 0);
+ data[1]++;
+ }
+ break;
+ case 8:
+ if (!sub_807185C(0))
+ {
+ data[5] = 1;
+ r4 = (0x10000 << CreateBlankSprite()) | 0x00001FFF;
+ BlendPalettes(r4, 0x10, RGB(30, 30, 31));
+ BeginNormalPaletteFade(r4, 1, 0x10, 0x00, RGB(30, 30, 31));
+ ShowBg(0);
+ CpuCopy16(gGraphics_TitleScreen_CharizardPals, gPlttBufferUnfaded + 0xD0, 0x20);
+ sub_80717A8(0x2000, 1, 0x0F, 0x00, RGB(30, 30, 31), 0, 0);
+ data[1]++;
+ }
+ break;
+ case 9:
+ if (!sub_807185C(0) && !gPaletteFade.active)
+ {
+ SetTitleScreenScene(data, TITLESCREENSCENE_RUN);
+ }
+ break;
+ }
+}
+
+#define KEYSTROKE_DELSAVE (B_BUTTON | SELECT_BUTTON | DPAD_UP)
+#define KEYSTROKE_BERRY_FIX (B_BUTTON | SELECT_BUTTON)
+
+static void SetTitleScreenScene_Run(s16 * data)
+{
+ switch (data[1])
+ {
+ case 0:
+ HelpSystem_SetSomeVariable2(1);
+ CreateTask(Task_TitleScreen_PaletteSomething, 0);
+ CreateTask(Task_FlameOrLeafSpawner, 5);
+ SetGpuRegsForTitleScreenRun();
+ data[6] = CreateSlashSprite();
+ sub_812B484();
+ data[1]++;
+ // fallthrough
+ case 1:
+ if (JOY_HELD(KEYSTROKE_DELSAVE) == KEYSTROKE_DELSAVE)
+ {
+ ScheduleHideSlashSprite(data[6]);
+ DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain));
+ SetMainCallback2(CB2_FadeOutTransitionToSaveClearScreen);
+ }
+ else if (JOY_HELD(KEYSTROKE_BERRY_FIX) == KEYSTROKE_BERRY_FIX)
+ {
+ ScheduleHideSlashSprite(data[6]);
+ DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain));
+ SetMainCallback2(CB2_FadeOutTransitionToBerryFix);
+ }
+ else if (JOY_NEW(A_BUTTON | START_BUTTON))
+ {
+ SetTitleScreenScene(data, TITLESCREENSCENE_CRY);
+ }
+ else if (!FuncIsActiveTask(Task_TitleScreenTimer))
+ {
+ SetTitleScreenScene(data, TITLESCREENSCEEN_RESTART);
+ }
+ break;
+ }
+}
+
+static void SetGpuRegsForTitleScreenRun(void)
+{
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
+ SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0x3F, 0x1F));
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_LIGHTEN);
+ SetGpuReg(REG_OFFSET_BLDY, 13);
+}
+
+static void SetTitleScreenScene_Restart(s16 * data)
+{
+ switch (data[1])
+ {
+ case 0:
+ ScheduleHideSlashSprite(data[6]);
+ data[1]++;
+ break;
+ case 1:
+ if (!gPaletteFade.active && !IsSlashSpriteHidden(data[6]))
+ {
+ FadeOutMapMusic(10);
+ BeginNormalPaletteFade(0xFFFFFFFF, 3, 0, 0x10, RGB_BLACK);
+ SignalEndTitleScreenPaletteSomethingTask();
+ data[1]++;
+ }
+ break;
+ case 2:
+ if (IsNotWaitingForBGMStop() && !gPaletteFade.active)
+ {
+ DestroyTask(FindTaskIdByFunc(Task_TitleScreen_PaletteSomething));
+ data[2] = 0;
+ data[1]++;
+ }
+ break;
+ case 3:
+ data[2]++;
+ if (data[2] >= 20)
+ {
+ DestroyTask(FindTaskIdByFunc(Task_TitleScreen_PaletteSomething));
+ data[1]++;
+ }
+ break;
+ case 4:
+ sub_812B478();
+ DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain));
+ SetMainCallback2(sub_80EC864);
+ break;
+ }
+}
+
+static void SetTitleScreenScene_Cry(s16 * data)
+{
+ switch (data[1])
+ {
+ case 0:
+ if (!gPaletteFade.active)
+ {
+ PlayCry1(TITLE_SPECIES, 0);
+ ScheduleHideSlashSprite(data[6]);
+ data[2] = 0;
+ data[1]++;
+ }
+ break;
+ case 1:
+ if (data[2] < 90)
+ data[2]++;
+ else if (!IsSlashSpriteHidden(data[6]))
+ {
+ BeginNormalPaletteFade(0x0FFFFFFF, 0, 0, 0x10, RGB_WHITE);
+ SignalEndTitleScreenPaletteSomethingTask();
+ FadeOutBGM(4);
+ data[1]++;
+ }
+ break;
+ case 2:
+ if (!gPaletteFade.active)
+ {
+ SeedRngAndSetTrainerId();
+ SetSaveBlocksPointers();
+ ResetMenuAndMonGlobals();
+ Save_ResetSaveCounters();
+ Save_LoadGameData(0);
+ if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_INVALID)
+ Sav2_ClearSetDefault();
+ SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound);
+ InitHeap(gHeap, HEAP_SIZE);
+ SetMainCallback2(sub_800C300);
+ DestroyTask(FindTaskIdByFunc(Task_TitleScreenMain));
+ }
+ break;
+ }
+}
+
+static void Task_TitleScreen_SlideWin0(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ SetGpuReg(REG_OFFSET_WININ, WIN_RANGE(0x00, 0x3F));
+ SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0x00, 0x37));
+ SetGpuReg(REG_OFFSET_WIN0V, 0xA0);
+ SetGpuReg(REG_OFFSET_WIN0H, 0x00);
+ BlendPalettes(0x00004000, 0, RGB_BLACK);
+ data[0]++;
+ break;
+ case 1:
+ data[1] += 0x180;
+ data[2] = data[1] >> 4;
+ if (data[2] >= 0xF0)
+ {
+ data[2] = 0xF0;
+ data[0]++;
+ }
+ SetGpuReg(REG_OFFSET_WIN0H, data[2]);
+ break;
+ case 2:
+ data[3]++;
+ if (data[3] >= 10)
+ {
+ data[3] = 0;
+ data[0]++;
+ }
+ break;
+ case 3:
+ SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0, 0x3B));
+ SetGpuReg(REG_OFFSET_WIN0H, 0xF0F0);
+ ChangeBgX(2, -0xF000, 0);
+ BlendPalettes(0x00008000, 0, RGB_BLACK);
+ data[1] = 0xF00;
+ data[0]++;
+ break;
+ case 4:
+ data[1] -= 0x180;
+ data[2] = data[1] >> 4;
+ if (data[2] <= 0)
+ {
+ data[2] = 0;
+ data[0]++;
+ }
+ ChangeBgX(2, -data[2] << 8, 0);
+ SetGpuReg(REG_OFFSET_WIN0H, (data[2] << 8) | 0xF0);
+ break;
+ case 5:
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+static void Task_TitleScreen_PaletteSomething(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+ s32 i;
+
+ if (data[15] && gPaletteFade.active)
+ data[14] = 1;
+ if (data[14] && !gPaletteFade.active)
+ DestroyTask(taskId);
+ else
+ {
+ if (!data[1])
+ data[2] = 60;
+ else
+ data[2] = 30;
+ data[0]++;
+ if (data[0] >= data[2])
+ {
+ data[0] = 0;
+ data[1] ^= 1;
+ if (data[1])
+ {
+ for (i = 0; i < 5; i++)
+ {
+ gPlttBufferUnfaded[0xF1 + i] = gGraphics_TitleScreen_BackgroundPals[6];
+ gPlttBufferFaded[0xF1 + i] = gGraphics_TitleScreen_BackgroundPals[6];
+ }
+ }
+ else
+ {
+ for (i = 0; i < 5; i++)
+ {
+ gPlttBufferUnfaded[0xF1 + i] = gGraphics_TitleScreen_BackgroundPals[1 + i];
+ gPlttBufferFaded[0xF1 + i] = gGraphics_TitleScreen_BackgroundPals[1 + i];
+ }
+ }
+ if (data[14])
+ {
+ BlendPalettes(0x00008000, gPaletteFade.y, gPaletteFade.blendColor);
+ }
+ }
+ }
+}
+
+static void SignalEndTitleScreenPaletteSomethingTask(void)
+{
+ u8 taskId = FindTaskIdByFunc(Task_TitleScreen_PaletteSomething);
+ gTasks[taskId].data[15] = TRUE;
+}
+
+static void UpdateScanlineEffectRegBuffer(s16 a0)
+{
+ s32 i;
+
+ if (a0 >= 0)
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][a0] = 16;
+ }
+
+ for (i = 0; i < 16; i++)
+ {
+ if (a0 + i >= 0)
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][a0 + i] = 15 - i;
+ }
+ if (a0 - i >= 0)
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][a0 - i] = 15 - i;
+ }
+ }
+ for (i = a0 + 16; i < 160; i++)
+ {
+ if (i >= 0)
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = 0;
+ }
+ }
+ for (i = a0 - 16; i >= 0; i--)
+ {
+ if (i >= 0)
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = 0;
+ }
+ }
+}
+
+static void ScheduleStopScanlineEffect(void)
+{
+ if (gScanlineEffect.state)
+ gScanlineEffect.state = 3;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+}
+
+static void LoadMainTitleScreenPalsAndResetBgs(void)
+{
+ u8 taskId;
+
+ taskId = FindTaskIdByFunc(Task_TitleScreen_SlideWin0);
+ if (taskId != 0xFF)
+ DestroyTask(taskId);
+
+ sub_8071898();
+ ResetPaletteFadeControl();
+ LoadPalette(gGraphics_TitleScreen_PokemonFireRedLogoPals, 0x00, 0x1A0);
+ LoadPalette(gGraphics_TitleScreen_CharizardPals, 0xD0, 0x20);
+ LoadPalette(gGraphics_TitleScreen_BackgroundPals, 0xF0, 0x20);
+ LoadPalette(gGraphics_TitleScreen_BackgroundPals, 0xE0, 0x20);
+ ResetBgPositions();
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(0);
+ ShowBg(3);
+}
+
+static void CB2_FadeOutTransitionToSaveClearScreen(void)
+{
+ if (!UpdatePaletteFade())
+ SetMainCallback2(CB2_SaveClearScreen_Init);
+}
+
+static void CB2_FadeOutTransitionToBerryFix(void)
+{
+ if (!UpdatePaletteFade())
+ {
+ m4aMPlayAllStop();
+ SetMainCallback2(mb_berry_fix_serve);
+ }
+}
+
+static void LoadSpriteGfxAndPals(void)
+{
+ s32 i;
+
+ for (i = 0; i < NELEMS(sSpriteSheets); i++)
+ LoadCompressedSpriteSheet(&sSpriteSheets[i]);
+ LoadSpritePalettes(sSpritePals);
+}
+
+static void SpriteCallback_TitleScreenFlameOrLeaf(struct Sprite * sprite)
+{
+ s16 * data = sprite->data;
+ sprite->data[0] -= data[1];
+ sprite->pos1.x = sprite->data[0] >> 4;
+ if (sprite->pos1.x < -8)
+ {
+ DestroySprite(sprite);
+ return;
+ }
+ data[2] += data[3];
+ sprite->pos1.y = data[2] >> 4;
+ if (sprite->pos1.y < 0x10 || sprite->pos1.y > 0xc8)
+ {
+ DestroySprite(sprite);
+ return;
+ }
+#if defined(FIRERED)
+ if (sprite->animEnded)
+ {
+ DestroySprite(sprite);
+ return;
+ }
+ if (data[7] != 0 && --data[7] == 0)
+ {
+ StartSpriteAnim(sprite, 0);
+ sprite->invisible = FALSE;
+ }
+#elif defined(LEAFGREEN)
+ if (!data[5])
+ {
+ s32 r2;
+ s32 r1;
+ data[6]++;
+ r2 = data[1] * data[6];
+ r1 = data[6] * data[3];
+ r2 = (r2 * r2) >> 4;
+ r1 = (r1 * r1) >> 4;
+ if (r2 + r1 >= 0x510)
+ data[5] = TRUE;
+ }
+#endif
+}
+
+static bool32 CreateFlameOrLeafSprite(s32 x, s32 y, s32 xspeed, s32 yspeed, bool32 templateId)
+{
+ u8 spriteId;
+ if (templateId)
+ {
+ spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State1, x, y, 0);
+ }
+ else
+ {
+ spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State0, x, y, 0);
+ }
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = x << 4;
+ gSprites[spriteId].data[1] = xspeed;
+ gSprites[spriteId].data[2] = y << 4;
+ gSprites[spriteId].data[3] = yspeed;
+ gSprites[spriteId].data[4] = 0;
+ gSprites[spriteId].data[5] = (xspeed * yspeed) % 16;
+ gSprites[spriteId].data[6] = templateId;
+ gSprites[spriteId].callback = SpriteCallback_TitleScreenFlameOrLeaf;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void Task_FlameOrLeafSpawner(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+ s32 x, y, xspeed, yspeed, templateId;
+ s32 i;
+
+ switch (data[0])
+ {
+ case 0:
+ TitleScreen_srand(taskId, 3, 30840);
+ data[0]++;
+ break;
+ case 1:
+ data[1]++;
+ if (data[1] >= data[2])
+ {
+ data[1] = 0;
+ TitleScreen_rand(taskId, 3);
+ data[2] = 18;
+ xspeed = (TitleScreen_rand(taskId, 3) % 4) - 2;
+ yspeed = (TitleScreen_rand(taskId, 3) % 8) - 16;
+ y = (TitleScreen_rand(taskId, 3) % 3) + 0x74;
+ x = TitleScreen_rand(taskId, 3) % 240;
+ CreateFlameOrLeafSprite(
+ x,
+ y,
+ xspeed,
+ yspeed,
+ (TitleScreen_rand(taskId, 3) % 16) < 8 ? 0 : 1
+ );
+ for (i = 0; i < 15; i++)
+ {
+ CreateFlameOrLeafSprite(
+ data[5] + gUnknown_83BFBD4[i],
+ y,
+ xspeed,
+ yspeed,
+ 1
+ );
+ xspeed = (TitleScreen_rand(taskId, 3) % 4) - 2;
+ yspeed = (TitleScreen_rand(taskId, 3) % 8) - 16;
+ }
+ data[5]++;
+ if (data[5] > 3)
+ data[5] = 0;
+ }
+ }
+}
+
+static void TitleScreen_srand(u8 taskId, u8 field, u16 seed)
+{
+ SetWordTaskArg(taskId, field, seed);
+}
+
+static u16 TitleScreen_rand(u8 taskId, u8 field)
+{
+ u32 rngval;
+
+ rngval = GetWordTaskArg(taskId, field);
+ rngval = rngval * 1103515245 + 24691;
+ SetWordTaskArg(taskId, field, rngval);
+ return rngval >> 16;
+}
+
+static u32 CreateBlankSprite(void)
+{
+ CreateSprite(&sUnknownEmptySprite, 0x18, 0x90, 0);
+ return IndexOfSpritePaletteTag(2);
+}
+
+static void SetPalOnOrCreateBlankSprite(bool32 mode)
+{
+ u32 palIdx;
+
+ if (mode)
+ {
+ palIdx = IndexOfSpritePaletteTag(2);
+ LoadPalette(gGraphics_TitleScreen_FirePals, palIdx * 16 + 0x100, 0x20);
+ }
+ else
+ CreateBlankSprite();
+}
+
+static u8 CreateSlashSprite(void)
+{
+ u8 spriteId = CreateSprite(&sSlashSpriteTemplate, -0x20, 0x1B, 1);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].callback = SpriteCallback_Slash;
+ gSprites[spriteId].data[1] = 540;
+ }
+ return spriteId;
+}
+
+static void ScheduleHideSlashSprite(u8 spriteId)
+{
+ if (spriteId != MAX_SPRITES)
+ gSprites[spriteId].data[2] = TRUE;
+}
+
+static bool32 IsSlashSpriteHidden(u8 spriteId)
+{
+ if (spriteId != MAX_SPRITES)
+ return gSprites[spriteId].data[0] ^ 2 ? TRUE : FALSE;
+ else
+ return FALSE;
+}
+
+static void SpriteCallback_Slash(struct Sprite * sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (sprite->data[2])
+ {
+ sprite->invisible = TRUE;
+ sprite->data[0] = 2;
+ }
+ sprite->data[1]--;
+ if (sprite->data[1] == 0)
+ {
+ sprite->invisible = FALSE;
+ sprite->data[0] = 1;
+ }
+ break;
+ case 1:
+ sprite->pos1.x += 9;
+ if (sprite->pos1.x == 67)
+ {
+ sprite->pos1.y -= 7;
+ }
+ if (sprite->pos1.x == 148)
+ {
+ sprite->pos1.y += 7;
+ }
+ if (sprite->pos1.x > 272)
+ {
+ sprite->invisible = TRUE;
+ if (sprite->data[2])
+ sprite->data[0] = 2;
+ else
+ {
+ sprite->pos1.x = -0x20;
+ sprite->data[1] = 540;
+ sprite->data[0] = 0;
+ }
+ }
+ break;
+ case 2:
+ break;
+ }
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 07d5703b2..865957a6b 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -769,9 +769,10 @@ gUnknown_2037F24: @ 2037F24
gUnknown_2037F28: @ 2037F28
.space 0x8
-gUnknown_2037F30: @ 2037F30
- .space 0x4
+ .align 2
+ .include "src/title_screen.o"
+ .align 2
gUnknown_2037F34: @ 2037F34
.space 0x200
diff --git a/tools/aif2pcm/Makefile b/tools/aif2pcm/Makefile
index e5cb6ad31..af7d19fe9 100644
--- a/tools/aif2pcm/Makefile
+++ b/tools/aif2pcm/Makefile
@@ -6,7 +6,10 @@ LIBS = -lm
SRCS = main.c extended.c
-.PHONY: clean
+.PHONY: all clean
+
+all: aif2pcm
+ @:
aif2pcm: $(SRCS)
$(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS)
diff --git a/tools/bin2c/Makefile b/tools/bin2c/Makefile
index 73f78980e..ab11e1b61 100644
--- a/tools/bin2c/Makefile
+++ b/tools/bin2c/Makefile
@@ -2,10 +2,13 @@ CC = gcc
CFLAGS = -Wall -Wextra -Werror -std=c11 -O2
-.PHONY: clean
+.PHONY: all clean
SRCS = bin2c.c
+all: bin2c
+ @:
+
bin2c: $(SRCS)
$(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS)
diff --git a/tools/gbafix/Makefile b/tools/gbafix/Makefile
index f12c8cc4f..5b410da08 100644
--- a/tools/gbafix/Makefile
+++ b/tools/gbafix/Makefile
@@ -1,8 +1,11 @@
CC = gcc
-.PHONY: clean
+.PHONY: all clean
SRCS = gbafix.c
+all: gbafix
+ @:
+
gbafix: $(SRCS)
$(CC) $(SRCS) -o $@ $(LDFLAGS)
diff --git a/tools/jsonproc/Makefile b/tools/jsonproc/Makefile
index b415e7b41..721da1025 100644
--- a/tools/jsonproc/Makefile
+++ b/tools/jsonproc/Makefile
@@ -8,7 +8,7 @@ SRCS := jsonproc.cpp
HEADERS := jsonproc.h inja.hpp nlohmann/json.hpp
-.PHONY: clean
+.PHONY: all clean
all: jsonproc
@:
diff --git a/tools/mapjson/Makefile b/tools/mapjson/Makefile
index d09acad50..9a49be506 100644
--- a/tools/mapjson/Makefile
+++ b/tools/mapjson/Makefile
@@ -6,7 +6,10 @@ SRCS := json11.cpp mapjson.cpp
HEADERS := mapjson.h
-.PHONY: clean
+.PHONY: all clean
+
+all: mapjson
+ @:
mapjson: $(SRCS) $(HEADERS)
$(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS)
diff --git a/tools/preproc/Makefile b/tools/preproc/Makefile
index 3d3275819..63dedda1f 100644
--- a/tools/preproc/Makefile
+++ b/tools/preproc/Makefile
@@ -8,7 +8,10 @@ SRCS := asm_file.cpp c_file.cpp charmap.cpp preproc.cpp string_parser.cpp \
HEADERS := asm_file.h c_file.h char_util.h charmap.h preproc.h string_parser.h \
utf8.h
-.PHONY: clean
+.PHONY: all clean
+
+all: preproc
+ @:
preproc: $(SRCS) $(HEADERS)
$(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS)
diff --git a/tools/ramscrgen/Makefile b/tools/ramscrgen/Makefile
index 9aa309aa1..858db1a77 100644
--- a/tools/ramscrgen/Makefile
+++ b/tools/ramscrgen/Makefile
@@ -6,7 +6,10 @@ SRCS := main.cpp sym_file.cpp elf.cpp
HEADERS := ramscrgen.h sym_file.h elf.h char_util.h
-.PHONY: clean
+.PHONY: all clean
+
+all: ramscrgen
+ @:
ramscrgen: $(SRCS) $(HEADERS)
$(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS)
diff --git a/tools/rsfont/Makefile b/tools/rsfont/Makefile
index 582be7b88..abe1cab51 100644
--- a/tools/rsfont/Makefile
+++ b/tools/rsfont/Makefile
@@ -6,7 +6,10 @@ LIBS = -lpng -lz
SRCS = main.c convert_png.c util.c font.c
-.PHONY: clean
+.PHONY: all clean
+
+all: rsfont
+ @:
rsfont: $(SRCS) convert_png.h gfx.h global.h util.h font.h
$(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS)
diff --git a/tools/scaninc/Makefile b/tools/scaninc/Makefile
index 53c9d0060..1516f159c 100644
--- a/tools/scaninc/Makefile
+++ b/tools/scaninc/Makefile
@@ -6,7 +6,10 @@ SRCS = scaninc.cpp c_file.cpp asm_file.cpp source_file.cpp
HEADERS := scaninc.h asm_file.h c_file.h source_file.h
-.PHONY: clean
+.PHONY: all clean
+
+all: scaninc
+ @:
scaninc: $(SRCS) $(HEADERS)
$(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS)