diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-07-01 22:10:35 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-07-01 22:10:35 -0400 |
commit | 2c953c5baf05d12a829cb73664c9a95f660f1548 (patch) | |
tree | 82543acf54c6996fb2d58abf0eb45771c446cdcd | |
parent | 74d771ef90a3189bd2da1b35f6b42a1fa8f51e67 (diff) |
Redo partial decomp of intro (force push)
-rw-r--r-- | asm/intro.s | 702 | ||||
-rw-r--r-- | baserom.ips | bin | 2401339 -> 2401107 bytes | |||
-rw-r--r-- | include/libgcnmultiboot.h | 17 | ||||
-rw-r--r-- | include/link.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/intro.c | 289 |
6 files changed, 309 insertions, 702 deletions
diff --git a/asm/intro.s b/asm/intro.s index 24b7bb9b6..99a67a6a5 100644 --- a/asm/intro.s +++ b/asm/intro.s @@ -5,708 +5,6 @@ .text - thumb_func_start sub_80EC5A4 -sub_80EC5A4: @ 80EC5A4 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_80EC5A4 - - thumb_func_start sub_80EC5B8 -sub_80EC5B8: @ 80EC5B8 - push {lr} - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _080EC5CA - ldr r0, _080EC5D0 @ =sub_80EC870 - bl SetMainCallback2 -_080EC5CA: - pop {r0} - bx r0 - .align 2, 0 -_080EC5D0: .4byte sub_80EC870 - thumb_func_end sub_80EC5B8 - - thumb_func_start load_copyright_graphics -load_copyright_graphics: @ 80EC5D4 - push {r4-r6,lr} - adds r3, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - lsls r3, 16 - lsrs r3, 16 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - ldr r0, _080EC610 @ =gUnknown_8402280 - movs r6, 0xC0 - lsls r6, 19 - adds r3, r6 - adds r1, r3, 0 - bl LZ77UnCompVram - ldr r0, _080EC614 @ =gUnknown_84024E4 - adds r4, r6 - adds r1, r4, 0 - bl LZ77UnCompVram - ldr r0, _080EC618 @ =gUnknown_8402260 - adds r1, r5, 0 - movs r2, 0x20 - bl LoadPalette - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080EC610: .4byte gUnknown_8402280 -_080EC614: .4byte gUnknown_84024E4 -_080EC618: .4byte gUnknown_8402260 - thumb_func_end load_copyright_graphics - - thumb_func_start SerialCb_CopyrightScreen -SerialCb_CopyrightScreen: @ 80EC61C - push {lr} - ldr r0, _080EC628 @ =gUnknown_203AAD4 - bl GameCubeMultiBoot_HandleSerialInterrupt - pop {r0} - bx r0 - .align 2, 0 -_080EC628: .4byte gUnknown_203AAD4 - thumb_func_end SerialCb_CopyrightScreen - - thumb_func_start sub_80EC62C -sub_80EC62C: @ 80EC62C - push {r4-r6,lr} - sub sp, 0xC - ldr r0, _080EC64C @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r5, r0, r1 - ldrb r4, [r5] - cmp r4, 0x8C - bne _080EC640 - b _080EC778 -_080EC640: - cmp r4, 0x8C - bgt _080EC650 - cmp r4, 0 - beq _080EC65E - b _080EC732 - .align 2, 0 -_080EC64C: .4byte gMain -_080EC650: - cmp r4, 0x8D - bne _080EC656 - b _080EC7A4 -_080EC656: - cmp r4, 0x8E - bne _080EC65C - b _080EC808 -_080EC65C: - b _080EC732 -_080EC65E: - movs r0, 0 - bl SetVBlankCallback - 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 r1, 0xA0 - lsls r1, 19 - ldr r2, _080EC74C @ =0x00007fff - adds r0, r2, 0 - strh r0, [r1] - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0x10 - movs r1, 0 - bl SetGpuReg - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - add r0, sp, 0x4 - strh r4, [r0] - ldr r1, _080EC750 @ =0x040000d4 - str r0, [r1] - movs r0, 0xC0 - lsls r0, 19 - str r0, [r1, 0x4] - ldr r0, _080EC754 @ =0x8100c000 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - str r4, [sp, 0x8] - add r0, sp, 0x8 - str r0, [r1] - movs r0, 0xE0 - lsls r0, 19 - str r0, [r1, 0x4] - ldr r0, _080EC758 @ =0x85000100 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - add r0, sp, 0x4 - strh r4, [r0] - str r0, [r1] - ldr r0, _080EC75C @ =0x05000002 - str r0, [r1, 0x4] - ldr r0, _080EC760 @ =0x810001ff - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - bl ResetPaletteFade - movs r1, 0xE0 - lsls r1, 6 - movs r0, 0 - movs r2, 0 - bl load_copyright_graphics - bl ScanlineEffect_Stop - bl ResetTasks - bl ResetSpriteData - bl FreeAllSpritePalettes - movs r0, 0x1 - negs r0, r0 - ldr r1, _080EC764 @ =0x0000ffff - str r1, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - movs r1, 0xE0 - lsls r1, 3 - movs r0, 0x8 - bl SetGpuReg - movs r0, 0x1 - bl EnableInterrupts - ldr r0, _080EC768 @ =sub_80EC5A4 - bl SetVBlankCallback - movs r1, 0xA0 - lsls r1, 1 - movs r0, 0 - bl SetGpuReg - ldr r0, _080EC76C @ =SerialCb_CopyrightScreen - bl SetSerialCallback - ldr r0, _080EC770 @ =gUnknown_203AAD4 - bl GameCubeMultiBoot_Init -_080EC732: - bl UpdatePaletteFade - ldr r0, _080EC774 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - ldrb r1, [r0] - adds r1, 0x1 - strb r1, [r0] - ldr r0, _080EC770 @ =gUnknown_203AAD4 - bl GameCubeMultiBoot_Main - b _080EC812 - .align 2, 0 -_080EC74C: .4byte 0x00007fff -_080EC750: .4byte 0x040000d4 -_080EC754: .4byte 0x8100c000 -_080EC758: .4byte 0x85000100 -_080EC75C: .4byte 0x05000002 -_080EC760: .4byte 0x810001ff -_080EC764: .4byte 0x0000ffff -_080EC768: .4byte sub_80EC5A4 -_080EC76C: .4byte SerialCb_CopyrightScreen -_080EC770: .4byte gUnknown_203AAD4 -_080EC774: .4byte gMain -_080EC778: - ldr r4, _080EC7A0 @ =gUnknown_203AAD4 - adds r0, r4, 0 - bl GameCubeMultiBoot_Main - ldrb r0, [r4, 0x2] - cmp r0, 0x1 - beq _080EC812 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - b _080EC812 - .align 2, 0 -_080EC7A0: .4byte gUnknown_203AAD4 -_080EC7A4: - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _080EC812 - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - ldr r5, _080EC7E4 @ =gUnknown_203AAD4 - ldrb r0, [r5, 0x2] - cmp r0, 0 - beq _080EC7F4 - ldrb r0, [r5, 0x2] - cmp r0, 0x2 - bne _080EC7FE - ldr r6, _080EC7E8 @ =0x020000ac - ldr r4, [r6] - ldr r0, _080EC7EC @ =0x65366347 - cmp r4, r0 - bne _080EC7DC - ldr r0, _080EC7F0 @ =gMultiBootProgram_PokemonColosseum_Start - movs r1, 0x80 - lsls r1, 18 - movs r2, 0xA0 - lsls r2, 9 - bl CpuSet - str r4, [r6] -_080EC7DC: - adds r0, r5, 0 - bl GameCubeMultiBoot_ExecuteProgram - b _080EC7FE - .align 2, 0 -_080EC7E4: .4byte gUnknown_203AAD4 -_080EC7E8: .4byte 0x020000ac -_080EC7EC: .4byte 0x65366347 -_080EC7F0: .4byte gMultiBootProgram_PokemonColosseum_Start -_080EC7F4: - bl GameCubeMultiBoot_Quit - ldr r0, _080EC804 @ =SerialCB - bl SetSerialCallback -_080EC7FE: - movs r0, 0 - b _080EC814 - .align 2, 0 -_080EC804: .4byte SerialCB -_080EC808: - bl sub_800B388 - ldr r0, _080EC81C @ =sub_80EC5B8 - bl SetMainCallback2 -_080EC812: - movs r0, 0x1 -_080EC814: - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080EC81C: .4byte sub_80EC5B8 - thumb_func_end sub_80EC62C - - thumb_func_start c2_copyright_1 -c2_copyright_1: @ 80EC820 - push {lr} - bl sub_80EC62C - lsls r0, 24 - cmp r0, 0 - bne _080EC858 - bl ResetMenuAndMonGlobals - bl Save_ResetSaveCounters - movs r0, 0 - bl Save_LoadGameData - ldr r0, _080EC85C @ =gSaveFileStatus - ldrh r0, [r0] - cmp r0, 0 - beq _080EC846 - cmp r0, 0x2 - bne _080EC84A -_080EC846: - bl Sav2_ClearSetDefault -_080EC84A: - ldr r0, _080EC860 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x15] - lsls r0, 31 - lsrs r0, 31 - bl SetPokemonCryStereo -_080EC858: - pop {r0} - bx r0 - .align 2, 0 -_080EC85C: .4byte gSaveFileStatus -_080EC860: .4byte gSaveBlock2Ptr - thumb_func_end c2_copyright_1 - - thumb_func_start sub_80EC864 -sub_80EC864: @ 80EC864 - push {lr} - bl sub_80EC62C - pop {r0} - bx r0 - thumb_func_end sub_80EC864 - - thumb_func_start sub_80EC870 -sub_80EC870: @ 80EC870 - push {r4,lr} - sub sp, 0xC - ldr r0, _080EC88C @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - ldrb r4, [r0] - cmp r4, 0x1 - beq _080EC944 - cmp r4, 0x1 - bgt _080EC890 - cmp r4, 0 - beq _080EC8A0 - b _080EC894 - .align 2, 0 -_080EC88C: .4byte gMain -_080EC890: - cmp r4, 0x2 - beq _080EC988 -_080EC894: - ldr r0, _080EC928 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - movs r1, 0 - strb r1, [r0] -_080EC8A0: - movs r0, 0 - bl SetVBlankCallback - movs r0, 0 - movs r1, 0 - bl SetGpuReg - ldr r0, _080EC92C @ =gHeap - movs r1, 0xE0 - lsls r1, 9 - bl InitHeap - bl ResetTasks - bl ResetSpriteData - bl ResetPaletteFade - bl ResetTempTileDataBuffers - bl sub_80ECA00 - add r1, sp, 0x4 - movs r0, 0 - strh r0, [r1] - ldr r1, _080EC930 @ =0x040000d4 - add r0, sp, 0x4 - str r0, [r1] - movs r0, 0xC0 - lsls r0, 19 - str r0, [r1, 0x4] - ldr r0, _080EC934 @ =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, _080EC938 @ =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, _080EC93C @ =0x81000200 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r2, 0x80 - lsls r2, 3 - movs r0, 0 - movs r1, 0 - bl FillPalette - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _080EC940 @ =gUnknown_840BB80 - movs r0, 0 - movs r2, 0x2 - bl InitBgsFromTemplates - b _080EC9B8 - .align 2, 0 -_080EC928: .4byte gMain -_080EC92C: .4byte gHeap -_080EC930: .4byte 0x040000d4 -_080EC934: .4byte 0x8100c000 -_080EC938: .4byte 0x85000100 -_080EC93C: .4byte 0x81000200 -_080EC940: .4byte gUnknown_840BB80 -_080EC944: - ldr r0, _080EC978 @ =gUnknown_8402630 - movs r1, 0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _080EC97C @ =gUnknown_8402650 - movs r0, 0 - str r0, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _080EC980 @ =gUnknown_8402668 - str r4, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r0, _080EC984 @ =gUnknown_840270C - movs r1, 0xD0 - movs r2, 0x20 - bl LoadPalette - b _080EC9B8 - .align 2, 0 -_080EC978: .4byte gUnknown_8402630 -_080EC97C: .4byte gUnknown_8402650 -_080EC980: .4byte gUnknown_8402668 -_080EC984: .4byte gUnknown_840270C -_080EC988: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - cmp r0, 0 - bne _080EC9C6 - bl sub_80ECA70 - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - ldr r0, _080EC9B0 @ =sub_80EC9D4 - bl SetMainCallback2 - ldr r0, _080EC9B4 @ =sub_80EC9EC - bl SetVBlankCallback - b _080EC9C6 - .align 2, 0 -_080EC9B0: .4byte sub_80EC9D4 -_080EC9B4: .4byte sub_80EC9EC -_080EC9B8: - ldr r1, _080EC9D0 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080EC9C6: - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EC9D0: .4byte gMain - thumb_func_end sub_80EC870 - - thumb_func_start sub_80EC9D4 -sub_80EC9D4: @ 80EC9D4 - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_80EC9D4 - - thumb_func_start sub_80EC9EC -sub_80EC9EC: @ 80EC9EC - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_80EC9EC - - thumb_func_start sub_80ECA00 -sub_80ECA00: @ 80ECA00 - 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 - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuRegBits - pop {r0} - bx r0 - thumb_func_end sub_80ECA00 - - thumb_func_start sub_80ECA70 -sub_80ECA70: @ 80ECA70 - push {r4,lr} - ldr r0, _080ECA9C @ =0x000028bc - bl Alloc - adds r4, r0, 0 - ldr r1, _080ECAA0 @ =sub_80ECAF0 - bl sub_80ECAA8 - ldr r0, _080ECAA4 @ =sub_80ECAB0 - movs r1, 0x3 - bl CreateTask - strb r0, [r4, 0x5] - ldrb r0, [r4, 0x5] - movs r1, 0 - adds r2, r4, 0 - bl SetWordTaskArg - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ECA9C: .4byte 0x000028bc -_080ECAA0: .4byte sub_80ECAF0 -_080ECAA4: .4byte sub_80ECAB0 - thumb_func_end sub_80ECA70 - - thumb_func_start sub_80ECAA8 -sub_80ECAA8: @ 80ECAA8 - str r1, [r0] - movs r1, 0 - strb r1, [r0, 0x4] - bx lr - thumb_func_end sub_80ECAA8 - - thumb_func_start sub_80ECAB0 -sub_80ECAB0: @ 80ECAB0 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl GetWordTaskArg - adds r4, r0, 0 - ldr r0, _080ECAE8 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0xD - ands r0, r1 - cmp r0, 0 - beq _080ECAD8 - ldr r0, [r4] - ldr r1, _080ECAEC @ =sub_80EDBE8 - cmp r0, r1 - beq _080ECAD8 - adds r0, r4, 0 - bl sub_80ECAA8 -_080ECAD8: - ldr r1, [r4] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ECAE8: .4byte gMain -_080ECAEC: .4byte sub_80EDBE8 - thumb_func_end sub_80ECAB0 - - thumb_func_start sub_80ECAF0 -sub_80ECAF0: @ 80ECAF0 - push {r4,r5,lr} - sub sp, 0xC - adds r5, r0, 0 - ldrb r0, [r5, 0x4] - cmp r0, 0 - beq _080ECB02 - cmp r0, 0x1 - beq _080ECB78 - b _080ECB8A -_080ECB02: - ldr r0, _080ECB68 @ =gUnknown_840BBA8 - bl InitWindows - ldr r0, _080ECB6C @ =gUnknown_840272C - ldr r1, _080ECB70 @ =0x0000043c - adds r4, r5, r1 - adds r1, r4, 0 - bl LZ77UnCompWram - ldr r0, _080ECB74 @ =gUnknown_84028F8 - adds r1, r5, 0 - adds r1, 0x3C - bl LZ77UnCompWram - movs r0, 0x20 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x11 - str r0, [sp, 0x8] - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect - movs r0, 0 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0x90 - str r0, [sp] - movs r0, 0x10 - str r0, [sp, 0x4] - movs r0, 0 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x28 - bl BlitBitmapToWindow - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r5, 0x4] - adds r0, 0x1 - strb r0, [r5, 0x4] - b _080ECB8A - .align 2, 0 -_080ECB68: .4byte gUnknown_840BBA8 -_080ECB6C: .4byte gUnknown_840272C -_080ECB70: .4byte 0x0000043c -_080ECB74: .4byte gUnknown_84028F8 -_080ECB78: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _080ECB8A - ldr r1, _080ECB94 @ =sub_80ECB98 - adds r0, r5, 0 - bl sub_80ECAA8 -_080ECB8A: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080ECB94: .4byte sub_80ECB98 - thumb_func_end sub_80ECAF0 - thumb_func_start sub_80ECB98 sub_80ECB98: @ 80ECB98 push {r4,r5,lr} diff --git a/baserom.ips b/baserom.ips Binary files differindex 95538d30e..11c3b7f62 100644 --- a/baserom.ips +++ b/baserom.ips diff --git a/include/libgcnmultiboot.h b/include/libgcnmultiboot.h new file mode 100644 index 000000000..7d347df05 --- /dev/null +++ b/include/libgcnmultiboot.h @@ -0,0 +1,17 @@ +#ifndef GUARD_LIBGCMMULTIBOOT_H +#define GUARD_LIBGCNMULTIBOOT_H + +struct GcmbStruct +{ + u16 gcmb_field_0; + vu8 gcmb_field_2; + u8 filler3[0x2C - 0x3]; +}; + +void GameCubeMultiBoot_Main(struct GcmbStruct *pStruct); +void GameCubeMultiBoot_ExecuteProgram(struct GcmbStruct *pStruct); +void GameCubeMultiBoot_Init(struct GcmbStruct *pStruct); +void GameCubeMultiBoot_HandleSerialInterrupt(struct GcmbStruct *pStruct); +void GameCubeMultiBoot_Quit(void); + +#endif // GUARD_LIBGCNMULTIBOOT_H diff --git a/include/link.h b/include/link.h index 0ec32d8a0..e1a4e106b 100644 --- a/include/link.h +++ b/include/link.h @@ -207,5 +207,7 @@ void sub_80098D8(void); void CloseLink(void); bool8 sub_800A4BC(void); bool32 sub_800B270(void); +void sub_800B388(void); +void sub_8054A28(void); #endif // GUARD_LINK_H diff --git a/ld_script.txt b/ld_script.txt index 22672e178..f2f738c84 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -210,6 +210,7 @@ SECTIONS { asm/battle_tower.o(.text); asm/battle_controller_oak.o(.text); asm/player_pc.o(.text); + src/intro.o(.text); asm/intro.o(.text); asm/battle_anim_special.o(.text); asm/hall_of_fame.o(.text); diff --git a/src/intro.c b/src/intro.c new file mode 100644 index 000000000..42d2af471 --- /dev/null +++ b/src/intro.c @@ -0,0 +1,289 @@ +#include "global.h" +#include "m4a.h" +#include "malloc.h" +#include "bg.h" +#include "palette.h" +#include "main.h" +#include "gpu_regs.h" +#include "task.h" +#include "scanline_effect.h" +#include "libgcnmultiboot.h" +#include "new_menu_helpers.h" +#include "link.h" +#include "menu.h" +#include "save.h" +#include "new_game.h" + +struct IntroSequenceData +{ + void (*field_0000)(struct IntroSequenceData *); + u8 field_0004; + u8 field_0005; + u8 filler_0006[0x36]; + u8 field_003C[0x400]; + u8 field_043C[0x400]; + u8 filler_083C[0x2080]; +}; // size: 0x28BC + +EWRAM_DATA struct GcmbStruct gUnknown_203AAD4 = {0}; + +void sub_80EC870(void); +void sub_80EC9D4(void); +void sub_80EC9EC(void); +void sub_80ECA00(void); +void sub_80ECA70(void); +void sub_80ECAB0(u8 taskId); +void sub_80ECAA8(struct IntroSequenceData * ptr, void (*cb)(struct IntroSequenceData *)); +void sub_80ECAF0(struct IntroSequenceData * ptr); +void sub_80ECB98(struct IntroSequenceData * ptr); +void sub_80EDBE8(struct IntroSequenceData * ptr); + +extern const u32 gMultiBootProgram_PokemonColosseum_Start[]; + +extern const u8 gUnknown_8402260[]; +extern const u8 gUnknown_8402280[]; +extern const u8 gUnknown_84024E4[]; +extern const u16 gUnknown_8402630[]; +extern const u8 gUnknown_8402650[]; +extern const u8 gUnknown_8402668[]; +extern const u16 gUnknown_840270C[]; +extern const u8 gUnknown_840272C[]; +extern const u8 gUnknown_84028F8[]; + +extern const struct BgTemplate gUnknown_840BB80[2]; +extern const struct WindowTemplate gUnknown_840BBA8[]; + +void sub_80EC5A4(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_80EC5B8(void) +{ + if (!UpdatePaletteFade()) + SetMainCallback2(sub_80EC870); +} + +void load_copyright_graphics(u16 a, u16 b, u16 c) +{ + LZ77UnCompVram(gUnknown_8402280, (void *)BG_VRAM + a); + LZ77UnCompVram(gUnknown_84024E4, (void *)BG_VRAM + b); + LoadPalette(gUnknown_8402260, c, 0x20); +} + +void SerialCb_CopyrightScreen(void) +{ + GameCubeMultiBoot_HandleSerialInterrupt(&gUnknown_203AAD4); +} + +bool8 sub_80EC62C(void) +{ + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + ((vu16*)PLTT)[0] = RGB_WHITE; + SetGpuReg(REG_OFFSET_DISPCNT, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + DmaFill16(3, 0, VRAM, VRAM_SIZE); + DmaFill32(3, 0, OAM, OAM_SIZE); + DmaFill16(3, 0, PLTT + sizeof(vu16), PLTT_SIZE - sizeof(vu16)); + ResetPaletteFade(); + load_copyright_graphics(0, 0x3800, 0); + ScanlineEffect_Stop(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes();BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0xFFFF); + SetGpuReg(REG_OFFSET_BG0CNT, 0x700); + EnableInterrupts(INTR_FLAG_VBLANK); + SetVBlankCallback(sub_80EC5A4); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON); + SetSerialCallback(SerialCb_CopyrightScreen); + GameCubeMultiBoot_Init(&gUnknown_203AAD4); + // fallthrough + default: + UpdatePaletteFade(); + gMain.state++; + GameCubeMultiBoot_Main(&gUnknown_203AAD4); + break; + case 140: + GameCubeMultiBoot_Main(&gUnknown_203AAD4); + if (gUnknown_203AAD4.gcmb_field_2 != 1) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gMain.state++; + } + break; + case 141: + if (!UpdatePaletteFade()) + { + gMain.state++; + if (gUnknown_203AAD4.gcmb_field_2 != 0) + { + if (gUnknown_203AAD4.gcmb_field_2 == 2) + { + if (*((u32 *)0x020000AC) == 0x65366347) + { + CpuCopy16(gMultiBootProgram_PokemonColosseum_Start, (void *)EWRAM_START, 0x28000); + *((u32 *)0x020000AC) = 0x65366347; + } + GameCubeMultiBoot_ExecuteProgram(&gUnknown_203AAD4); + } + } + else + { + GameCubeMultiBoot_Quit(); + SetSerialCallback(SerialCB); + } + return FALSE; + } + break; + case 142: + sub_800B388(); + SetMainCallback2(sub_80EC5B8); + break; + } + return TRUE; +} + +void c2_copyright_1(void) +{ + if (!sub_80EC62C()) + { + ResetMenuAndMonGlobals(); + Save_ResetSaveCounters(); + Save_LoadGameData(0); + if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_INVALID) + Sav2_ClearSetDefault(); + SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); + } +} + +void sub_80EC864(void) +{ + sub_80EC62C(); +} + +void sub_80EC870(void) +{ + switch (gMain.state) + { + default: + gMain.state = 0; + // fallthrough + case 0: + SetVBlankCallback(NULL); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + InitHeap(gHeap, HEAP_SIZE); + ResetTasks(); + ResetSpriteData(); + ResetPaletteFade(); + ResetTempTileDataBuffers(); + sub_80ECA00(); + DmaFill16(3, 0, VRAM, VRAM_SIZE); + DmaFill32(3, 0, OAM, OAM_SIZE); + DmaFill16(3, 0, PLTT, PLTT_SIZE); + FillPalette(0, 0, 0x400); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_840BB80, NELEMS(gUnknown_840BB80)); + break; + case 1: + LoadPalette(gUnknown_8402630, 0x00, 0x20); + DecompressAndCopyTileDataToVram(3, gUnknown_8402650, 0, 0, 0); + DecompressAndCopyTileDataToVram(3, gUnknown_8402668, 0, 0, 1); + LoadPalette(gUnknown_840270C, 0xD0, 0x20); + break; + case 2: + if (!FreeTempTileDataBuffersIfPossible()) + { + sub_80ECA70(); + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + SetMainCallback2(sub_80EC9D4); + SetVBlankCallback(sub_80EC9EC); + } + return; + } + gMain.state++; +} + +void sub_80EC9D4(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_80EC9EC(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_80ECA00(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); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); +} + +void sub_80ECA70(void) +{ + struct IntroSequenceData * ptr = Alloc(sizeof(struct IntroSequenceData)); + sub_80ECAA8(ptr, sub_80ECAF0); + ptr->field_0005 = CreateTask(sub_80ECAB0, 3); + SetWordTaskArg(ptr->field_0005, 0, (uintptr_t)ptr); +} + +void sub_80ECAA8(struct IntroSequenceData * ptr, void (*cb)(struct IntroSequenceData *)) +{ + ptr->field_0000 = cb; + ptr->field_0004 = 0; +} + +void sub_80ECAB0(u8 taskId) +{ + struct IntroSequenceData * ptr = (void *)GetWordTaskArg(taskId, 0); + if (JOY_NEW(A_BUTTON | START_BUTTON | SELECT_BUTTON) && ptr->field_0000 != sub_80EDBE8) + sub_80ECAA8(ptr, sub_80EDBE8); + ptr->field_0000(ptr); +} + +void sub_80ECAF0(struct IntroSequenceData * this) +{ + switch (this->field_0004) + { + case 0: + InitWindows(gUnknown_840BBA8); + LZ77UnCompWram(gUnknown_840272C, this->field_043C); + LZ77UnCompWram(gUnknown_84028F8, this->field_003C); + FillBgTilemapBufferRect(2, 0x000, 0, 0, 32, 32, 0x11); + FillWindowPixelBuffer(0, 0x00); + BlitBitmapToWindow(0, this->field_043C, 0, 40, 144, 16); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); + this->field_0004++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + sub_80ECAA8(this, sub_80ECB98); + break; + } +} |