summaryrefslogtreecommitdiff
path: root/src
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 /src
parent4f63b54a6b4e697402e2243e02998b8f2521a717 (diff)
intro: through sub_80ED140
Diffstat (limited to 'src')
-rw-r--r--src/intro.c243
1 files changed, 241 insertions, 2 deletions
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);
+ }
+}