summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-07-03 14:01:03 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-07-03 14:01:03 -0400
commit3b83565a7e49d13a295a7415dc52f68e738bc1cb (patch)
tree9dca3bb51206460f59b06db5be9c71142d60e6aa
parent4f63b54a6b4e697402e2243e02998b8f2521a717 (diff)
intro: through sub_80ED140
-rw-r--r--asm/intro.s582
-rw-r--r--src/intro.c243
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);
+ }
+}