diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-07-03 14:01:03 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-07-03 14:01:03 -0400 |
commit | 3b83565a7e49d13a295a7415dc52f68e738bc1cb (patch) | |
tree | 9dca3bb51206460f59b06db5be9c71142d60e6aa | |
parent | 4f63b54a6b4e697402e2243e02998b8f2521a717 (diff) |
intro: through sub_80ED140
-rw-r--r-- | asm/intro.s | 582 | ||||
-rw-r--r-- | src/intro.c | 243 |
2 files changed, 241 insertions, 584 deletions
diff --git a/asm/intro.s b/asm/intro.s index 024f65e73..dd561950f 100644 --- a/asm/intro.s +++ b/asm/intro.s @@ -5,588 +5,6 @@ .text - thumb_func_start sub_80ECCA8 -sub_80ECCA8: @ 80ECCA8 - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldrb r0, [r4, 0x4] - cmp r0, 0x5 - bhi _080ECD54 - lsls r0, 2 - ldr r1, _080ECCC0 @ =_080ECCC4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080ECCC0: .4byte _080ECCC4 - .align 2, 0 -_080ECCC4: - .4byte _080ECCDC - .4byte _080ECCE6 - .4byte _080ECCF6 - .4byte _080ECD18 - .4byte _080ECD20 - .4byte _080ECD3E -_080ECCDC: - bl sub_80EDED8 - movs r0, 0 - strh r0, [r4, 0x12] - b _080ECD36 -_080ECCE6: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x27 - bls _080ECD54 - b _080ECD36 -_080ECCF6: - ldr r1, _080ECD14 @ =0x00003f44 - movs r0, 0x50 - bl SetGpuReg - movs r0, 0x30 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - movs r1, 0x10 - movs r2, 0x10 - movs r3, 0 - bl StartBlendTask - b _080ECD36 - .align 2, 0 -_080ECD14: .4byte 0x00003f44 -_080ECD18: - movs r0, 0x2 - bl ShowBg - b _080ECD36 -_080ECD20: - bl IsBlendTaskActive - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080ECD54 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - strh r5, [r4, 0x12] -_080ECD36: - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _080ECD54 -_080ECD3E: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x32 - bls _080ECD54 - ldr r1, _080ECD5C @ =sub_80ECD60 - adds r0, r4, 0 - bl sub_80ECAA8 -_080ECD54: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080ECD5C: .4byte sub_80ECD60 - thumb_func_end sub_80ECCA8 - - thumb_func_start sub_80ECD60 -sub_80ECD60: @ 80ECD60 - push {r4-r6,lr} - sub sp, 0x8 - adds r6, r0, 0 - ldrb r0, [r6, 0x4] - cmp r0, 0x7 - bls _080ECD6E - b _080ECE96 -_080ECD6E: - lsls r0, 2 - ldr r1, _080ECD78 @ =_080ECD7C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080ECD78: .4byte _080ECD7C - .align 2, 0 -_080ECD7C: - .4byte _080ECD9C - .4byte _080ECDC4 - .4byte _080ECDCC - .4byte _080ECE10 - .4byte _080ECE26 - .4byte _080ECE52 - .4byte _080ECE64 - .4byte _080ECE78 -_080ECD9C: - ldr r1, _080ECDC0 @ =0x00003f50 - movs r0, 0x50 - bl SetGpuReg - movs r5, 0x10 - str r5, [sp] - movs r4, 0 - str r4, [sp, 0x4] - movs r0, 0 - movs r1, 0x10 - movs r2, 0x10 - movs r3, 0 - bl StartBlendTask - strh r4, [r6, 0x8] - strh r5, [r6, 0xA] - strh r4, [r6, 0x12] - b _080ECE70 - .align 2, 0 -_080ECDC0: .4byte 0x00003f50 -_080ECDC4: - bl sub_80EDF68 - str r0, [r6, 0x14] - b _080ECE70 -_080ECDCC: - bl IsBlendTaskActive - lsls r0, 24 - cmp r0, 0 - bne _080ECE96 - adds r1, r6, 0 - adds r1, 0x3C - movs r0, 0x20 - str r0, [sp] - movs r0, 0x40 - str r0, [sp, 0x4] - movs r0, 0 - movs r2, 0x38 - movs r3, 0x6 - bl BlitBitmapToWindow - ldr r0, _080ECE0C @ =0x0000043c - adds r1, r6, r0 - movs r0, 0x90 - str r0, [sp] - movs r0, 0x10 - str r0, [sp, 0x4] - movs r0, 0 - movs r2, 0 - movs r3, 0x28 - bl BlitBitmapToWindow - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - b _080ECE70 - .align 2, 0 -_080ECE0C: .4byte 0x0000043c -_080ECE10: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _080ECE96 - ldr r0, [r6, 0x14] - bl DestroySprite - strh r4, [r6, 0x12] - b _080ECE70 -_080ECE26: - ldrh r0, [r6, 0x12] - adds r0, 0x1 - strh r0, [r6, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x5A - bls _080ECE96 - movs r0, 0x50 - movs r1, 0x4 - bl SetGpuRegBits - movs r0, 0x14 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - movs r0, 0x10 - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl StartBlendTask - b _080ECE70 -_080ECE52: - bl IsBlendTaskActive - lsls r0, 24 - cmp r0, 0 - bne _080ECE96 - movs r0, 0x2 - bl HideBg - b _080ECE70 -_080ECE64: - bl ResetSpriteData - bl FreeAllSpritePalettes - movs r0, 0 - strh r0, [r6, 0x12] -_080ECE70: - ldrb r0, [r6, 0x4] - adds r0, 0x1 - strb r0, [r6, 0x4] - b _080ECE96 -_080ECE78: - ldrh r0, [r6, 0x12] - adds r0, 0x1 - strh r0, [r6, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x14 - bls _080ECE96 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - ldr r1, _080ECEA0 @ =sub_80ECEA4 - adds r0, r6, 0 - bl sub_80ECAA8 -_080ECE96: - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080ECEA0: .4byte sub_80ECEA4 - thumb_func_end sub_80ECD60 - - thumb_func_start sub_80ECEA4 -sub_80ECEA4: @ 80ECEA4 - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - ldrb r0, [r5, 0x4] - cmp r0, 0x5 - bls _080ECEB2 - b _080ED094 -_080ECEB2: - lsls r0, 2 - ldr r1, _080ECEBC @ =_080ECEC0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080ECEBC: .4byte _080ECEC0 - .align 2, 0 -_080ECEC0: - .4byte _080ECED8 - .4byte _080ECF64 - .4byte _080ECFA4 - .4byte _080ECFD8 - .4byte _080ED000 - .4byte _080ED064 -_080ECED8: - movs r0, 0 - bl SetVBlankCallback - ldr r0, _080ECF48 @ =gUnknown_8402D34 - movs r1, 0x10 - movs r2, 0x20 - bl LoadPalette - ldr r0, _080ECF4C @ =gUnknown_84048CC - movs r1, 0x20 - movs r2, 0x20 - bl LoadPalette - ldr r2, _080ECF50 @ =0x00007fff - movs r0, 0x6 - movs r1, 0x10 - bl BlendPalettes - ldr r1, _080ECF54 @ =gUnknown_840BB88 - movs r0, 0 - movs r2, 0x2 - bl InitBgsFromTemplates - ldr r1, _080ECF58 @ =gUnknown_84048EC - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _080ECF5C @ =gUnknown_8404F7C - movs r0, 0x1 - str r0, [sp] - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - movs r0, 0x1 - bl ShowBg - movs r0, 0 - bl HideBg - movs r0, 0x2 - bl HideBg - movs r0, 0x3 - bl HideBg - bl sub_80EEBE4 - ldr r0, _080ECF60 @ =sub_80EC9EC - bl SetVBlankCallback - b _080ECFF0 - .align 2, 0 -_080ECF48: .4byte gUnknown_8402D34 -_080ECF4C: .4byte gUnknown_84048CC -_080ECF50: .4byte 0x00007fff -_080ECF54: .4byte gUnknown_840BB88 -_080ECF58: .4byte gUnknown_84048EC -_080ECF5C: .4byte gUnknown_8404F7C -_080ECF60: .4byte sub_80EC9EC -_080ECF64: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _080ECF72 - b _080ED094 -_080ECF72: - ldr r1, _080ECF9C @ =gUnknown_8402D54 - str r0, [sp] - movs r0, 0 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _080ECFA0 @ =gUnknown_8403FE8 - movs r0, 0x1 - str r0, [sp] - movs r0, 0 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - bl ResetBgPositions - movs r0, 0x1 - bl ShowBg - b _080ECFF0 - .align 2, 0 -_080ECF9C: .4byte gUnknown_8402D54 -_080ECFA0: .4byte gUnknown_8403FE8 -_080ECFA4: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - cmp r0, 0 - bne _080ED094 - movs r0, 0 - bl ShowBg - ldr r0, _080ECFD0 @ =sub_80ED0AC - movs r1, 0 - bl CreateTask - movs r1, 0x2 - negs r1, r1 - ldr r0, _080ECFD4 @ =0x00007fff - str r0, [sp] - movs r0, 0x6 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - b _080ECFF0 - .align 2, 0 -_080ECFD0: .4byte sub_80ED0AC -_080ECFD4: .4byte 0x00007fff -_080ECFD8: - ldr r0, _080ECFF8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _080ED094 - ldr r0, _080ECFFC @ =0x00000115 - bl m4aSongNumStart - strh r4, [r5, 0x12] -_080ECFF0: - ldrb r0, [r5, 0x4] - adds r0, 0x1 - strb r0, [r5, 0x4] - b _080ED094 - .align 2, 0 -_080ECFF8: .4byte gPaletteFade -_080ECFFC: .4byte 0x00000115 -_080ED000: - ldrh r0, [r5, 0x12] - adds r0, 0x1 - strh r0, [r5, 0x12] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x14 - bne _080ED01A - ldr r0, _080ED054 @ =sub_80ED140 - movs r1, 0 - bl CreateTask - bl sub_80ED118 -_080ED01A: - ldrh r0, [r5, 0x12] - cmp r0, 0x1D - bls _080ED094 - movs r0, 0x2 - negs r0, r0 - ldr r2, _080ED058 @ =0x00007fff - movs r1, 0x10 - bl BlendPalettes - ldr r0, _080ED05C @ =sub_80ED0AC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r0, _080ED054 @ =sub_80ED140 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r1, _080ED060 @ =sub_80ED188 - adds r0, r5, 0 - bl sub_80ECAA8 - b _080ED094 - .align 2, 0 -_080ED054: .4byte sub_80ED140 -_080ED058: .4byte 0x00007fff -_080ED05C: .4byte sub_80ED0AC -_080ED060: .4byte sub_80ED188 -_080ED064: - ldr r0, _080ED09C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080ED094 - ldr r0, _080ED0A0 @ =sub_80ED0AC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r0, _080ED0A4 @ =sub_80ED140 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r1, _080ED0A8 @ =sub_80ED188 - adds r0, r5, 0 - bl sub_80ECAA8 -_080ED094: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080ED09C: .4byte gPaletteFade -_080ED0A0: .4byte sub_80ED0AC -_080ED0A4: .4byte sub_80ED140 -_080ED0A8: .4byte sub_80ED188 - thumb_func_end sub_80ECEA4 - - thumb_func_start sub_80ED0AC -sub_80ED0AC: @ 80ED0AC - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080ED114 @ =gTasks+0x8 - adds r4, r1, r0 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - ble _080ED0EC - movs r1, 0 - strh r1, [r4] - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _080ED0DE - strh r1, [r4, 0x2] -_080ED0DE: - movs r0, 0x2 - ldrsh r1, [r4, r0] - lsls r1, 15 - movs r0, 0 - movs r2, 0 - bl ChangeBgY -_080ED0EC: - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080ED10C - movs r1, 0x90 - lsls r1, 1 - adds r0, r1, 0 - ldrh r1, [r4, 0x6] - adds r0, r1 - strh r0, [r4, 0x6] - movs r0, 0x6 - ldrsh r1, [r4, r0] - movs r0, 0 - movs r2, 0x2 - bl ChangeBgY -_080ED10C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ED114: .4byte gTasks+0x8 - thumb_func_end sub_80ED0AC - - thumb_func_start sub_80ED118 -sub_80ED118: @ 80ED118 - push {lr} - ldr r0, _080ED138 @ =sub_80ED0AC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080ED13C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0x1 - strh r0, [r1, 0xC] - pop {r0} - bx r0 - .align 2, 0 -_080ED138: .4byte sub_80ED0AC -_080ED13C: .4byte gTasks - thumb_func_end sub_80ED118 - - thumb_func_start sub_80ED140 -sub_80ED140: @ 80ED140 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080ED184 @ =gTasks+0x8 - adds r1, r0 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - ble _080ED17E - movs r0, 0 - strh r0, [r1] - ldrh r2, [r1, 0x2] - movs r3, 0x2 - ldrsh r0, [r1, r3] - cmp r0, 0x1 - bgt _080ED170 - adds r0, r2, 0x1 - strh r0, [r1, 0x2] -_080ED170: - movs r0, 0x2 - ldrsh r1, [r1, r0] - lsls r1, 15 - movs r0, 0x1 - movs r2, 0 - bl ChangeBgY -_080ED17E: - pop {r0} - bx r0 - .align 2, 0 -_080ED184: .4byte gTasks+0x8 - thumb_func_end sub_80ED140 - thumb_func_start sub_80ED188 sub_80ED188: @ 80ED188 push {r4-r7,lr} diff --git a/src/intro.c b/src/intro.c index 216605be7..51fbbac74 100644 --- a/src/intro.c +++ b/src/intro.c @@ -21,9 +21,13 @@ struct IntroSequenceData void (*field_0000)(struct IntroSequenceData *); u8 field_0004; u8 field_0005; - u8 filler_0006[0xC]; + u8 filler_0006[2]; + u16 field_0008; + u16 field_000A; + u8 field_000C[6]; u16 field_0012; - u8 filler_0014[0x28]; + struct Sprite * field_0014; + u8 filler_0018[0x24]; u8 field_003C[0x400]; u8 field_043C[0x400]; u8 filler_083C[0x2080]; @@ -42,9 +46,18 @@ void sub_80ECAF0(struct IntroSequenceData * ptr); void sub_80ECB98(struct IntroSequenceData * ptr); void sub_80ECC3C(struct IntroSequenceData * ptr); void sub_80ECCA8(struct IntroSequenceData * ptr); +void sub_80ECD60(struct IntroSequenceData * ptr); +void sub_80ECEA4(struct IntroSequenceData * ptr); +void sub_80ED0AC(u8 taskId); +void sub_80ED118(void); +void sub_80ED140(u8 taskId); +void sub_80ED188(struct IntroSequenceData * ptr); void sub_80EDBE8(struct IntroSequenceData * ptr); void sub_80EDC40(void); void sub_80EDDF0(void); +void sub_80EDED8(void); +struct Sprite * sub_80EDF68(void); +void sub_80EEBE4(void); extern const u32 gMultiBootProgram_PokemonColosseum_Start[]; @@ -57,10 +70,18 @@ extern const u8 gUnknown_8402668[]; extern const u16 gUnknown_840270C[]; extern const u8 gUnknown_840272C[]; extern const u8 gUnknown_84028F8[]; +extern const u16 gUnknown_8402D34[]; +extern const u8 gUnknown_8402D54[]; +extern const u8 gUnknown_8403FE8[]; +extern const u16 gUnknown_84048CC[]; +extern const u8 gUnknown_84048EC[]; +extern const u8 gUnknown_8404F7C[]; extern const struct BgTemplate gUnknown_840BB80[2]; +extern const struct BgTemplate gUnknown_840BB88[2]; extern const struct WindowTemplate gUnknown_840BBA8[]; + void sub_80EC5A4(void) { LoadOam(); @@ -351,3 +372,221 @@ void sub_80ECC3C(struct IntroSequenceData * this) break; } } + +void sub_80ECCA8(struct IntroSequenceData * this) +{ + switch (this->field_0004) + { + case 0: + sub_80EDED8(); + this->field_0012 = 0; + this->field_0004++; + break; + case 1: + this->field_0012++; + if (this->field_0012 >= 40) + this->field_0004++; + break; + case 2: + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD); + StartBlendTask(0, 16, 16, 0, 48, 0); + this->field_0004++; + break; + case 3: + ShowBg(2); + this->field_0004++; + break; + case 4: + if (!IsBlendTaskActive()) + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + this->field_0012 = 0; + this->field_0004++; + } + break; + case 5: + this->field_0012++; + if (this->field_0012 > 50) + sub_80ECAA8(this, sub_80ECD60); + break; + } +} + +void sub_80ECD60(struct IntroSequenceData * this) +{ + switch (this->field_0004) + { + case 0: + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD); + StartBlendTask(0, 16, 16, 0, 16, 0); + this->field_0008 = 0; + this->field_000A = 16; + this->field_0012 = 0; + this->field_0004++; + break; + case 1: + this->field_0014 = sub_80EDF68(); + this->field_0004++; + break; + case 2: + if (!IsBlendTaskActive()) + { + BlitBitmapToWindow(0, this->field_003C, 0x38, 0x06, 0x20, 0x40); + BlitBitmapToWindow(0, this->field_043C, 0x00, 0x28, 0x90, 0x10); + CopyWindowToVram(0, 2); + this->field_0004++; + } + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + DestroySprite(this->field_0014); + this->field_0012 = 0; + this->field_0004++; + } + break; + case 4: + this->field_0012++; + if (this->field_0012 > 90) + { + SetGpuRegBits(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2); + StartBlendTask(16, 0, 0, 16, 20, 0); + this->field_0004++; + } + break; + case 5: + if (!IsBlendTaskActive()) + { + HideBg(2); + this->field_0004++; + } + break; + case 6: + ResetSpriteData(); + FreeAllSpritePalettes(); + this->field_0012 = 0; + this->field_0004++; + break; + case 7: + this->field_0012++; + if (this->field_0012 > 20) + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + sub_80ECAA8(this, sub_80ECEA4); + } + break; + } +} + +void sub_80ECEA4(struct IntroSequenceData * this) +{ + switch (this->field_0004) + { + case 0: + SetVBlankCallback(NULL); + LoadPalette(gUnknown_8402D34, 0x10, 0x20); + LoadPalette(gUnknown_84048CC, 0x20, 0x20); + BlendPalettes(0x06, 0x10, RGB_WHITE); + InitBgsFromTemplates(0, gUnknown_840BB88, NELEMS(gUnknown_840BB88)); + DecompressAndCopyTileDataToVram(1, gUnknown_84048EC, 0, 0, 0); + DecompressAndCopyTileDataToVram(1, gUnknown_8404F7C, 0, 0, 1); + ShowBg(1); + HideBg(0); + HideBg(2); + HideBg(3); + sub_80EEBE4(); + SetVBlankCallback(sub_80EC9EC); + this->field_0004++; + break; + case 1: + if (!FreeTempTileDataBuffersIfPossible()) + { + DecompressAndCopyTileDataToVram(0, gUnknown_8402D54, 0, 0, 0); + DecompressAndCopyTileDataToVram(0, gUnknown_8403FE8, 0, 0, 1); + ResetBgPositions(); + ShowBg(1); + this->field_0004++; + } + break; + case 2: + if (!FreeTempTileDataBuffersIfPossible()) + { + ShowBg(0); + CreateTask(sub_80ED0AC, 0); + BeginNormalPaletteFade(0x00000006, -2, 16, 0, RGB_WHITE); + this->field_0004++; + } + break; + case 3: + if (!gPaletteFade.active) + { + m4aSongNumStart(BGM_FRLG_OPENING); + this->field_0012 = 0; + this->field_0004++; + } + break; + case 4: + this->field_0012++; + if (this->field_0012 == 20) + { + CreateTask(sub_80ED140, 0); + sub_80ED118(); + } + if (this->field_0012 >= 30) + { + BlendPalettes(-2, 16, RGB_WHITE); + DestroyTask(FindTaskIdByFunc(sub_80ED0AC)); + DestroyTask(FindTaskIdByFunc(sub_80ED140)); + sub_80ECAA8(this, sub_80ED188); + } + break; + case 5: + if (!gPaletteFade.active) + { + DestroyTask(FindTaskIdByFunc(sub_80ED0AC)); + DestroyTask(FindTaskIdByFunc(sub_80ED140)); + sub_80ECAA8(this, sub_80ED188); + } + break; + } +} + +void sub_80ED0AC(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + data[0]++; + if (data[0] > 5) + { + data[0] = 0; + data[1]++; + if (data[1] > 2) + data[1] = 0; + ChangeBgY(0, data[1] << 15, 0); + } + if (data[2]) + { + data[3] += 0x120; + ChangeBgY(0, data[3], 2); + } +} + +void sub_80ED118(void) +{ + u8 taskId = FindTaskIdByFunc(sub_80ED0AC); + gTasks[taskId].data[2] = TRUE; +} + +void sub_80ED140(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + data[0]++; + if (data[0] > 3) + { + data[0] = 0; + if (data[1] < 2) + data[1]++; + ChangeBgY(1, data[1] << 15, 0); + } +} |