diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-07-31 12:32:57 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-07-31 12:32:57 -0400 |
commit | e96ecee460c5cd0c3139432ebbb191a36ad31912 (patch) | |
tree | 71e2180b6c7c40c6a013bcc3e5c6c6d447cb0bd4 | |
parent | ea8f529f2d5bb520b83d5b7721dc47ba1b489d45 (diff) |
title_screen through sub_80791C0
-rw-r--r-- | asm/title_screen.s | 687 | ||||
-rw-r--r-- | data/title_screen.s | 88 | ||||
-rw-r--r-- | include/graphics.h | 13 | ||||
-rw-r--r-- | include/intro.h | 6 | ||||
-rw-r--r-- | include/main.h | 1 | ||||
-rw-r--r-- | include/main_menu.h | 6 | ||||
-rw-r--r-- | include/palette.h | 3 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/title_screen.c | 468 |
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; + } } |