Redo partial decomp of intro (force push)

This commit is contained in:
PikalaxALT
2019-07-01 22:10:35 -04:00
parent 74d771ef90
commit 2c953c5baf
6 changed files with 309 additions and 702 deletions
-702
View File
@@ -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}
BIN
View File
Binary file not shown.
+17
View File
@@ -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
+2
View File
@@ -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
+1
View File
@@ -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);
+289
View File
@@ -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;
}
}