summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/title_screen.s687
-rw-r--r--data/title_screen.s88
-rw-r--r--include/graphics.h13
-rw-r--r--include/intro.h6
-rw-r--r--include/main.h1
-rw-r--r--include/main_menu.h6
-rw-r--r--include/palette.h3
-rw-r--r--ld_script.txt1
-rw-r--r--src/title_screen.c468
9 files changed, 481 insertions, 792 deletions
diff --git a/asm/title_screen.s b/asm/title_screen.s
index 293a289ce..47a1b30a9 100644
--- a/asm/title_screen.s
+++ b/asm/title_screen.s
@@ -5,693 +5,6 @@
.text
- 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}
diff --git a/data/title_screen.s b/data/title_screen.s
deleted file mode 100644
index e0186afe3..000000000
--- a/data/title_screen.s
+++ /dev/null
@@ -1,88 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2
-gUnknown_83BF64C:: @ 83BF64C
- .incbin "data/graphics/title_screen/unk_83bf64c.4bpp.lz"
-
-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
- spr_template 0, 0, gOamData_83BFAB4, gSpriteAnimTable_83BFAFC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
-gUnknown_83BFB1C:: @ 83BFB1C
- spr_template 1, 0, gOamData_83BFAB4, gSpriteAnimTable_83BFAFC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
-gOamData_83BFB34::
- .4byte 0xc0008000, 0x00000000
-
-gUnknown_83BFB3C:: @ 83BFB3C
- spr_template 2, 2, gOamData_83BFB34, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
-gOamData_83BFB54::
- .4byte 0xc0000800, 0x00000000
-
-gUnknown_83BFB5C:: @ 83BFB5C
- spr_template 3, 2, gOamData_83BFB54, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
-gUnknown_83BFB74:: @ 83BFB74
- .4byte 0x000009f0
- .4byte 0x000011e5
- .4byte 0x000021da
- .4byte 0x000031cf
-
-gUnknown_83BFB84:: @ 83BFB84
- .4byte sub_8078C9C
- .4byte sub_8078D24
- .4byte sub_8078DA4
- .4byte sub_8078FC4
- .4byte sub_80790CC
- .4byte sub_80791C0
-
-gUnknown_83BFB9C:: @ 83BFB9C
- 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
- obj_pal gUnknown_83BF77C, 0
- obj_pal gUnknown_8EAE488, 2
- null_obj_pal
-
-gUnknown_83BFBD4:: @ 83BFBD4
- .incbin "baserom.gba", 0x3BFBD4, 0xF
diff --git a/include/graphics.h b/include/graphics.h
index e8503609e..bd25f4d1a 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 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[];
+extern const u16 gUnknown_8EAE488[];
+extern const u8 gUnknown_8EAE4A8[];
+
#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 b66ff04d8..d326909ff 100644
--- a/include/main.h
+++ b/include/main.h
@@ -66,6 +66,7 @@ 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..feac1f11f 100644
--- a/include/palette.h
+++ b/include/palette.h
@@ -71,7 +71,10 @@ 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);
extern struct PaletteFadeControl gPaletteFade;
diff --git a/ld_script.txt b/ld_script.txt
index 20e1db897..48e59a76a 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -407,7 +407,6 @@ SECTIONS {
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);
src/item_menu_icons.o(.rodata);
diff --git a/src/title_screen.c b/src/title_screen.c
index 9e779bb7b..32324ec7a 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -8,7 +8,32 @@
#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 "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
EWRAM_DATA u8 gUnknown_2037F30 = 0;
@@ -22,28 +47,190 @@ void sub_8078C9C(s16 * data);
void sub_8078D24(s16 * data);
void sub_8078DA4(s16 * data);
void sub_8078FC4(s16 * data);
+void sub_80790A0(void);
void sub_80790CC(s16 * data);
void sub_80791C0(s16 * data);
-void sub_8079708(void);
+void sub_80792C8(u8 taskId);
+void sub_807941C(u8 taskId);
+void sub_8079528(void);
+void sub_8079550(s16 a0);
void sub_8079620(void);
void sub_8079648(void);
+void sub_80796CC(void);
+void sub_80796E8(void);
+void sub_8079708(void);
+void sub_8079840(u8 taskId);
+u32 sub_80799F0(void);
void sub_8079A10(s16 a0);
+u8 sub_8079A40(void);
+void sub_8079A88(u8 spriteId);
+bool32 sub_8079AA8(u8 spriteId);
+// bg3
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[];
+
+//sprites
+const u8 gUnknown_83BF64C[] = INCBIN_U8("data/graphics/title_screen/unk_83bf64c.4bpp.lz");
+const u16 gUnknown_83BF77C[] = INCBIN_U16("data/graphics/title_screen/unk_83bf77c.gbapal");
+const u8 gUnknown_83BF79C[] = INCBIN_U8("data/graphics/title_screen/unk_83bf79c.4bpp.lz");
+const u8 gUnknown_83BFA14[] = INCBIN_U8("data/graphics/title_screen/unk_83bfa14.4bpp.lz");
+
+const struct OamData gOamData_83BFAB4 = {
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .shape = ST_OAM_SQUARE,
+ .size = ST_OAM_SIZE_1,
+ .tileNum = 0,
+ .priority = 3,
+ .paletteNum = 0
+};
+
+const union AnimCmd gSpriteAnims_83BFABC[] = {
+ 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
+};
+
+const union AnimCmd gSpriteAnims_83BFAE8[] = {
+ ANIMCMD_FRAME(0x18, 6),
+ ANIMCMD_FRAME(0x1c, 6),
+ ANIMCMD_FRAME(0x20, 6),
+ ANIMCMD_FRAME(0x24, 6),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_83BFAFC[] = {
+ gSpriteAnims_83BFABC,
+ gSpriteAnims_83BFAE8
+};
+
+const struct SpriteTemplate gUnknown_83BFB04 = {
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gOamData_83BFAB4,
+ .anims = gSpriteAnimTable_83BFAFC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+const struct SpriteTemplate gUnknown_83BFB1C = {
+ .tileTag = 1,
+ .paletteTag = 0,
+ .oam = &gOamData_83BFAB4,
+ .anims = gSpriteAnimTable_83BFAFC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+const struct OamData gOamData_83BFB34 = {
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .shape = ST_OAM_V_RECTANGLE,
+ .size = ST_OAM_SIZE_3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0
+};
+
+const struct SpriteTemplate gUnknown_83BFB3C = {
+ .tileTag = 2,
+ .paletteTag = 2,
+ .oam = &gOamData_83BFB34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+const struct OamData gOamData_83BFB54 = {
+ .objMode = ST_OAM_OBJ_WINDOW,
+ .shape = ST_OAM_SQUARE,
+ .size = ST_OAM_SIZE_3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0
+};
+
+const struct SpriteTemplate gUnknown_83BFB5C = {
+ .tileTag = 3,
+ .paletteTag = 2,
+ .oam = &gOamData_83BFB54,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+const struct BgTemplate gUnknown_83BFB74[] = {
+ {
+ .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
+ }
+};
+
+void (*const gUnknown_83BFB84[])(s16 * data) = {
+ sub_8078C9C,
+ sub_8078D24,
+ sub_8078DA4,
+ sub_8078FC4,
+ sub_80790CC,
+ sub_80791C0
+};
+
+const struct CompressedSpriteSheet gUnknown_83BFB9C[] = {
+ {(const void *)gUnknown_83BF79C, 0x500, 0},
+ {(const void *)gUnknown_83BFA14, 0x500, 1},
+ {(const void *)gUnknown_8EAE4A8, 0x400, 2},
+ {(const void *)gUnknown_83BF64C, 0x800, 3}
+};
+
+const struct SpritePalette gUnknown_83BFBBC[] = {
+ {gUnknown_83BF77C, 0},
+ {gUnknown_8EAE488, 2},
+ {}
+};
+
+const u8 gUnknown_83BFBD4[] = {
+ 0x04, 0x10, 0x1a, 0x20, 0x30, 0xc8, 0xd8, 0xe0, 0xe8, 0x3c, 0x4c, 0x5c, 0x6c, 0x80, 0x90
+};
void CB2_InitTitleScreen(void)
{
@@ -155,7 +342,7 @@ void sub_8078C24(u8 taskId)
sub_8079620();
sub_8079648();
sub_8079A10(data[5]);
- sub_8078C90(data, 3);
+ sub_8078C90(data, TITLESCREENSCENE_RUN);
}
else
{
@@ -188,5 +375,254 @@ void sub_8078C9C(s16 * data)
ScanlineEffect_SetParams(params);
- sub_8078C90(data, 1);
+ sub_8078C90(data, TITLESCREENSCENE_FLASHSPRITE);
+}
+
+void sub_8078D24(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;
+ sub_8079550(0x80);
+ data[1]++;
+ break;
+ case 1:
+ data[2] -= 4;
+ sub_8079550(data[2]);
+ if (data[2] < 0)
+ {
+ gScanlineEffect.state = 3;
+ data[1]++;
+ }
+ break;
+ case 2:
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ sub_8078C90(data, TITLESCREENSCENE_FADEIN);
+ }
+}
+
+void sub_8078DA4(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(sub_80792C8, 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 << sub_80799F0()) | 0x00001FFF;
+ BlendPalettes(r4, 0x10, RGB(30, 30, 31));
+ BeginNormalPaletteFade(r4, 1, 0x10, 0x00, RGB(30, 30, 31));
+ ShowBg(0);
+ CpuCopy16(gUnknown_8EAD5E8, 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)
+ {
+ sub_8078C90(data, TITLESCREENSCENE_RUN);
+ }
+ break;
+ }
+}
+
+#define KEYSTROKE_DELSAVE (B_BUTTON | SELECT_BUTTON | DPAD_UP)
+#define KEYSTROKE_BERRY_FIX (B_BUTTON | SELECT_BUTTON)
+
+void sub_8078FC4(s16 * data)
+{
+ switch (data[1])
+ {
+ case 0:
+ HelpSystem_SetSomeVariable2(1);
+ CreateTask(sub_807941C, 0);
+ CreateTask(sub_8079840, 5);
+ sub_80790A0();
+ data[6] = sub_8079A40();
+ sub_812B484();
+ data[1]++;
+ // fallthrough
+ case 1:
+ if (JOY_HELD(KEYSTROKE_DELSAVE) == KEYSTROKE_DELSAVE)
+ {
+ sub_8079A88(data[6]);
+ DestroyTask(FindTaskIdByFunc(sub_8078C24));
+ SetMainCallback2(sub_80796CC);
+ }
+ else if (JOY_HELD(KEYSTROKE_BERRY_FIX) == KEYSTROKE_BERRY_FIX)
+ {
+ sub_8079A88(data[6]);
+ DestroyTask(FindTaskIdByFunc(sub_8078C24));
+ SetMainCallback2(sub_80796E8);
+ }
+ else if (JOY_NEW(A_BUTTON | START_BUTTON))
+ {
+ sub_8078C90(data, TITLESCREENSCENE_CRY);
+ }
+ else if (!FuncIsActiveTask(sub_8078BEC))
+ {
+ sub_8078C90(data, TITLESCREENSCEEN_RESTART);
+ }
+ break;
+ }
+}
+
+void sub_80790A0(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);
+}
+
+void sub_80790CC(s16 * data)
+{
+ switch (data[1])
+ {
+ case 0:
+ sub_8079A88(data[6]);
+ data[1]++;
+ break;
+ case 1:
+ if (!gPaletteFade.active && !sub_8079AA8(data[6]))
+ {
+ FadeOutMapMusic(10);
+ BeginNormalPaletteFade(0xFFFFFFFF, 3, 0, 0x10, RGB_BLACK);
+ sub_8079528();
+ data[1]++;
+ }
+ break;
+ case 2:
+ if (IsNotWaitingForBGMStop() && !gPaletteFade.active)
+ {
+ DestroyTask(FindTaskIdByFunc(sub_807941C));
+ data[2] = 0;
+ data[1]++;
+ }
+ break;
+ case 3:
+ data[2]++;
+ if (data[2] >= 20)
+ {
+ DestroyTask(FindTaskIdByFunc(sub_807941C));
+ data[1]++;
+ }
+ break;
+ case 4:
+ sub_812B478();
+ DestroyTask(FindTaskIdByFunc(sub_8078C24));
+ SetMainCallback2(sub_80EC864);
+ break;
+ }
+}
+
+void sub_80791C0(s16 * data)
+{
+ switch (data[1])
+ {
+ case 0:
+ if (!gPaletteFade.active)
+ {
+ PlayCry1(TITLE_SPECIES, 0);
+ sub_8079A88(data[6]);
+ data[2] = 0;
+ data[1]++;
+ }
+ break;
+ case 1:
+ if (data[2] < 90)
+ data[2]++;
+ else if (!sub_8079AA8(data[6]))
+ {
+ BeginNormalPaletteFade(0x0FFFFFFF, 0, 0, 0x10, RGB_WHITE);
+ sub_8079528();
+ 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(sub_8078C24));
+ }
+ break;
+ }
}