diff options
-rw-r--r-- | asm/title_screen.s | 462 | ||||
-rw-r--r-- | data/field_weather.s | 3 | ||||
-rw-r--r-- | data/graphics.s | 5 | ||||
-rw-r--r-- | data/graphics/title_screen/unk_83BF58C.png | bin | 0 -> 78 bytes | |||
-rw-r--r-- | data/graphics/title_screen/unk_83BF5A8.bin | 1 | ||||
-rw-r--r-- | data/graphics/title_screen/unk_83bf64c.png | bin | 0 -> 188 bytes | |||
-rw-r--r-- | data/graphics/title_screen/unk_83bf79c.png | bin | 0 -> 539 bytes | |||
-rw-r--r-- | data/graphics/title_screen/unk_83bfa14.png | bin | 0 -> 150 bytes | |||
-rw-r--r-- | data/title_screen.s | 80 | ||||
-rw-r--r-- | graphics/title_screen/unk_8eae4a8.png | bin | 0 -> 148 bytes | |||
-rw-r--r-- | include/main.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/title_screen.c | 192 |
13 files changed, 269 insertions, 477 deletions
diff --git a/asm/title_screen.s b/asm/title_screen.s index e62cc9a9f..293a289ce 100644 --- a/asm/title_screen.s +++ b/asm/title_screen.s @@ -5,468 +5,6 @@ .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} 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..f62234529 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -16379,11 +16379,12 @@ gUnknown_8EAE0B4:: @ 8EAE0B4 gUnknown_8EAE374:: @ 8EAE374 .incbin "baserom.gba", 0xEAE374, 0x114 + @ title_screen gUnknown_8EAE488:: @ 8EAE488 - .incbin "baserom.gba", 0xEAE488, 0x20 @UNKNOWN + .incbin "graphics/title_screen/unk_8eae488.gbapal" gUnknown_8EAE4A8:: @ 8EAE4A8 - .incbin "baserom.gba", 0xEAE4A8, 0x80 + .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 Binary files differnew file mode 100644 index 000000000..895457c3c --- /dev/null +++ b/data/graphics/title_screen/unk_83BF58C.png 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 Binary files differnew file mode 100644 index 000000000..3c9b7630d --- /dev/null +++ b/data/graphics/title_screen/unk_83bf64c.png diff --git a/data/graphics/title_screen/unk_83bf79c.png b/data/graphics/title_screen/unk_83bf79c.png Binary files differnew file mode 100644 index 000000000..246252bed --- /dev/null +++ b/data/graphics/title_screen/unk_83bf79c.png diff --git a/data/graphics/title_screen/unk_83bfa14.png b/data/graphics/title_screen/unk_83bfa14.png Binary files differnew file mode 100644 index 000000000..f4f030a5b --- /dev/null +++ b/data/graphics/title_screen/unk_83bfa14.png diff --git a/data/title_screen.s b/data/title_screen.s index 93d0f2f83..e0186afe3 100644 --- a/data/title_screen.s +++ b/data/title_screen.s @@ -1,34 +1,88 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" .section .rodata .align 2 -gUnknown_83BF58C:: @ 83BF58C - .incbin "baserom.gba", 0x3BF58C, 0x1C +gUnknown_83BF64C:: @ 83BF64C + .incbin "data/graphics/title_screen/unk_83bf64c.4bpp.lz" -gUnknown_83BF5A8:: @ 83BF5A8 - .incbin "baserom.gba", 0x3BF5A8, 0x55C +gUnknown_83BF77C:: + .incbin "data/graphics/title_screen/unk_83bf77c.gbapal" + +gUnknown_83BF79C:: + .incbin "data/graphics/title_screen/unk_83bf79c.4bpp.lz" + +gUnknown_83BFA14:: + .incbin "data/graphics/title_screen/unk_83bfa14.4bpp.lz" + +gOamData_83BFAB4:: + .4byte 0x40000000, 0x00000c00 + +gSpriteAnims_83BFABC:: + obj_image_anim_frame 0x0, 0x3 + obj_image_anim_frame 0x4, 0x6 + obj_image_anim_frame 0x8, 0x6 + obj_image_anim_frame 0xc, 0x6 + obj_image_anim_frame 0x10, 0x6 + obj_image_anim_frame 0x14, 0x6 + obj_image_anim_frame 0x18, 0x6 + obj_image_anim_frame 0x1c, 0x6 + obj_image_anim_frame 0x20, 0x6 + obj_image_anim_frame 0x24, 0x6 + obj_image_anim_end + +gSpriteAnims_83BFAE8:: + obj_image_anim_frame 0x18, 0x6 + obj_image_anim_frame 0x1c, 0x6 + obj_image_anim_frame 0x20, 0x6 + obj_image_anim_frame 0x24, 0x6 + obj_image_anim_end + +gSpriteAnimTable_83BFAFC:: + .4byte gSpriteAnims_83BFABC + .4byte gSpriteAnims_83BFAE8 gUnknown_83BFB04:: @ 83BFB04 - .incbin "baserom.gba", 0x3BFB04, 0x18 + spr_template 0, 0, gOamData_83BFAB4, gSpriteAnimTable_83BFAFC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy gUnknown_83BFB1C:: @ 83BFB1C - .incbin "baserom.gba", 0x3BFB1C, 0x20 + spr_template 1, 0, gOamData_83BFAB4, gSpriteAnimTable_83BFAFC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy + +gOamData_83BFB34:: + .4byte 0xc0008000, 0x00000000 gUnknown_83BFB3C:: @ 83BFB3C - .incbin "baserom.gba", 0x3BFB3C, 0x20 + spr_template 2, 2, gOamData_83BFB34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy + +gOamData_83BFB54:: + .4byte 0xc0000800, 0x00000000 gUnknown_83BFB5C:: @ 83BFB5C - .incbin "baserom.gba", 0x3BFB5C, 0x18 + spr_template 3, 2, gOamData_83BFB54, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy gUnknown_83BFB74:: @ 83BFB74 - .incbin "baserom.gba", 0x3BFB74, 0x10 + .4byte 0x000009f0 + .4byte 0x000011e5 + .4byte 0x000021da + .4byte 0x000031cf gUnknown_83BFB84:: @ 83BFB84 - .incbin "baserom.gba", 0x3BFB84, 0x18 + .4byte sub_8078C9C + .4byte sub_8078D24 + .4byte sub_8078DA4 + .4byte sub_8078FC4 + .4byte sub_80790CC + .4byte sub_80791C0 gUnknown_83BFB9C:: @ 83BFB9C - .incbin "baserom.gba", 0x3BFB9C, 0x20 + obj_tiles gUnknown_83BF79C, 0x500, 0 + obj_tiles gUnknown_83BFA14, 0x500, 1 + obj_tiles gUnknown_8EAE4A8, 0x400, 2 + obj_tiles gUnknown_83BF64C, 0x800, 3 gUnknown_83BFBBC:: @ 83BFBBC - .incbin "baserom.gba", 0x3BFBBC, 0x18 + obj_pal gUnknown_83BF77C, 0 + obj_pal gUnknown_8EAE488, 2 + null_obj_pal gUnknown_83BFBD4:: @ 83BFBD4 - .incbin "baserom.gba", 0x3BFBD4, 0x2FE8 + .incbin "baserom.gba", 0x3BFBD4, 0xF diff --git a/graphics/title_screen/unk_8eae4a8.png b/graphics/title_screen/unk_8eae4a8.png Binary files differnew file mode 100644 index 000000000..d98563aef --- /dev/null +++ b/graphics/title_screen/unk_8eae4a8.png diff --git a/include/main.h b/include/main.h index a250475cb..b66ff04d8 100644 --- a/include/main.h +++ b/include/main.h @@ -65,6 +65,7 @@ void ClearPokemonCrySongs(void); void RestoreSerialTimer3IntrHandlers(void); void SetVBlankCounter1Ptr(u32 *ptr); void DisableVBlankCounter1(void); +void StartTimer1(void); extern const char RomHeaderGameCode[4]; extern const char RomHeaderSoftwareVersion; diff --git a/ld_script.txt b/ld_script.txt index d9506d33f..20e1db897 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -115,6 +115,7 @@ SECTIONS { src/task.o(.text); asm/reshow_battle_screen.o(.text); asm/battle_anim_status_effects.o(.text); + src/title_screen.o(.text); asm/title_screen.o(.text); src/reset_save_heap.o(.text); asm/field_weather.o(.text); @@ -405,6 +406,7 @@ SECTIONS { data/battle_anim.o(.rodata); data/map_events.o(.rodata); data/battle_anim_status_effects.o(.rodata); + src/title_screen.o(.rodata); data/title_screen.o(.rodata); data/field_weather.o(.rodata); data/data_835B488.o(.rodata); diff --git a/src/title_screen.c b/src/title_screen.c new file mode 100644 index 000000000..9e779bb7b --- /dev/null +++ b/src/title_screen.c @@ -0,0 +1,192 @@ +#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 "constants/songs.h" + +EWRAM_DATA u8 gUnknown_2037F30 = 0; + +void sub_8078B34(void); +void sub_8078B9C(void); +void sub_8078BB4(void); +void sub_8078BEC(u8 taskId); +void sub_8078C24(u8 taskId); +void sub_8078C90(s16 * data, u8 a1); +void sub_8078C9C(s16 * data); +void sub_8078D24(s16 * data); +void sub_8078DA4(s16 * data); +void sub_8078FC4(s16 * data); +void sub_80790CC(s16 * data); +void sub_80791C0(s16 * data); +void sub_8079708(void); +void sub_8079620(void); +void sub_8079648(void); +void sub_8079A10(s16 a0); + +const u8 gUnknown_83BF58C[] = INCBIN_U8("data/graphics/title_screen/unk_83BF58C.4bpp.lz"); +const u8 gUnknown_83BF5A8[] = INCBIN_U8("data/graphics/title_screen/unk_83BF5A8.bin.lz"); +extern const struct BgTemplate gUnknown_83BFB74[4]; +extern const void (*const gUnknown_83BFB84[])(s16 * data); + +/*graphics.h*/ +extern const u16 gUnknown_8EAB6C4[]; +extern const u8 gUnknown_8EAB8C4[]; +extern const u8 gUnknown_8EAD390[]; +extern const u16 gUnknown_8EAD5E8[]; +extern const u8 gUnknown_8EAD608[]; +extern const u8 gUnknown_8EADEE4[]; +extern const u16 gUnknown_8EAE094[]; +extern const u8 gUnknown_8EAE0B4[]; +extern const u8 gUnknown_8EAE374[]; + +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(); + sub_8078B34(); + 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, gUnknown_83BFB74, NELEMS(gUnknown_83BFB74)); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + gUnknown_2037F30 = 0xFF; + break; + case 1: + LoadPalette(gUnknown_8EAB6C4, 0, 0x1A0); + DecompressAndCopyTileDataToVram(0, gUnknown_8EAB8C4, 0, 0, 0); + DecompressAndCopyTileDataToVram(0, gUnknown_8EAD390, 0, 0, 1); + LoadPalette(gUnknown_8EAD5E8, 0xD0, 0x20); + DecompressAndCopyTileDataToVram(1, gUnknown_8EAD608, 0, 0, 0); + DecompressAndCopyTileDataToVram(1, gUnknown_8EADEE4, 0, 0, 1); + LoadPalette(gUnknown_8EAE094, 0xF0, 0x20); + DecompressAndCopyTileDataToVram(2, gUnknown_8EAE0B4, 0, 0, 0); + DecompressAndCopyTileDataToVram(2, gUnknown_8EAE374, 0, 0, 1); + LoadPalette(gUnknown_8EAE094, 0xE0, 0x20); + DecompressAndCopyTileDataToVram(3, gUnknown_83BF58C, 0, 0, 0); + DecompressAndCopyTileDataToVram(3, gUnknown_83BF5A8, 0, 0, 1); + sub_8079708(); + break; + case 2: + if (!FreeTempTileDataBuffersIfPossible()) + { + BlendPalettes(0x0000FFFF, 0x10, RGB_BLACK); + CreateTask(sub_8078C24, 4); + gUnknown_2037F30 = CreateTask(sub_8078BEC, 2); + SetVBlankCallback(sub_8078BB4); + SetMainCallback2(sub_8078B9C); + m4aSongNumStart(BGM_FRLG_TITLE); + } + return; + } + gMain.state++; +} + +void sub_8078B34(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); +} + +void sub_8078B9C(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_8078BB4(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + ScanlineEffect_InitHBlankDmaTransfer(); + + if (gUnknown_2037F30 != 0xFF) + gTasks[gUnknown_2037F30].data[0]++; +} + +void sub_8078BEC(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (data[0] >= 2700) + { + gUnknown_2037F30 = 0xFF; + DestroyTask(taskId); + } +} + +void sub_8078C24(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) + { + sub_8079620(); + sub_8079648(); + sub_8079A10(data[5]); + sub_8078C90(data, 3); + } + else + { + gUnknown_83BFB84[data[0]](data); + } +} + +void sub_8078C90(s16 * data, u8 a1) +{ + data[1] = 0; + data[0] = a1; +} + +void sub_8078C9C(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); + + sub_8078C90(data, 1); +} |