summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-07-04 10:42:22 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-07-04 10:42:22 -0400
commit2f671f9bd2b1785d1e6be135ddd638daadac62c4 (patch)
tree89212157d56aca044223f670a6af6e0d94ea3613 /src
parent168109aa9e04b2384a0b70214d2a834cb967def6 (diff)
intro: sub_80EDC40
Diffstat (limited to 'src')
-rw-r--r--src/intro.c285
1 files changed, 281 insertions, 4 deletions
diff --git a/src/intro.c b/src/intro.c
index 944f661dc..19e59401f 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -14,6 +14,9 @@
#include "save.h"
#include "sound.h"
#include "new_game.h"
+#include "title_screen.h"
+#include "decompress.h"
+#include "util.h"
#include "constants/songs.h"
struct IntroSequenceData
@@ -21,17 +24,18 @@ struct IntroSequenceData
void (*field_0000)(struct IntroSequenceData *);
u8 field_0004;
u8 field_0005;
- u8 filler_0006[2];
+ u8 field_0006;
u16 field_0008;
u16 field_000A;
- u8 field_000C[6];
+ u8 filler_000C[6];
u16 field_0012;
struct Sprite * field_0014;
struct Sprite * field_0018;
struct Sprite * field_001C;
struct Sprite * field_0020;
struct Sprite * field_0024;
- u8 filler_0028[0x14];
+ struct Sprite * field_0028[4];
+ u8 filler_0038[0x4];
u8 field_003C[0x400];
u8 field_043C[0x400];
u8 filler_083C[0x2080];
@@ -40,6 +44,27 @@ struct IntroSequenceData
EWRAM_DATA struct GcmbStruct gUnknown_203AAD4 = {0};
EWRAM_DATA u16 gUnknown_203AB00 = 0;
EWRAM_DATA u16 gUnknown_203AB02 = 0;
+EWRAM_DATA u16 gUnknown_203AB04 = 0;
+EWRAM_DATA u16 gUnknown_203AB06 = 0;
+EWRAM_DATA u16 gUnknown_203AB08 = 0;
+EWRAM_DATA u16 gUnknown_203AB0A = 0;
+EWRAM_DATA u16 gUnknown_203AB0C = 0;
+EWRAM_DATA u16 gUnknown_203AB0E = 0;
+EWRAM_DATA u16 gUnknown_203AB10 = 0;
+EWRAM_DATA u16 gUnknown_203AB12 = 0;
+EWRAM_DATA u16 gUnknown_203AB14 = 0;
+EWRAM_DATA u16 gUnknown_203AB16 = 0;
+EWRAM_DATA u16 gUnknown_203AB18 = 0;
+EWRAM_DATA u16 gUnknown_203AB1A = 0;
+EWRAM_DATA u16 gUnknown_203AB1C = 0;
+EWRAM_DATA u16 gUnknown_203AB1E = 0;
+EWRAM_DATA u16 gUnknown_203AB20 = 0;
+EWRAM_DATA u16 gUnknown_203AB22 = 0;
+EWRAM_DATA u16 gUnknown_203AB24 = 0;
+EWRAM_DATA u16 gUnknown_203AB26 = 0;
+EWRAM_DATA u32 gUnknown_203AB28 = 0;
+EWRAM_DATA u16 gUnknown_203AB2C = 0;
+EWRAM_DATA u16 gUnknown_203AB2E = 0;
void sub_80EC870(void);
void sub_80EC9D4(void);
@@ -68,12 +93,15 @@ void sub_80ED714(u8 taskId);
void sub_80ED7D4(struct IntroSequenceData * ptr);
void sub_80ED818(struct Sprite * sprite);
void sub_80ED898(struct IntroSequenceData * ptr);
+void sub_80EDAF0(struct IntroSequenceData * ptr);
+void sub_80EDB70(struct IntroSequenceData * ptr);
+void sub_80EDBAC(struct IntroSequenceData * ptr);
void sub_80EDBE8(struct IntroSequenceData * ptr);
-void sub_80ED40C(u8 taskId);
void sub_80EDC40(void);
void sub_80EDDF0(void);
void sub_80EDED8(void);
struct Sprite * sub_80EDF68(void);
+void sub_80EDF94(struct IntroSequenceData * ptr);
void sub_80EE1C4(struct Sprite * sprite);
void sub_80EE200(u8 taskId);
void sub_80EE29C(struct Sprite * sprite);
@@ -82,7 +110,12 @@ void sub_80EE4DC(struct Sprite * sprite);
void sub_80EE4F8(struct IntroSequenceData * ptr);
void sub_80EE528(struct Sprite * sprite, u16 a1, u16 a2, u16 a3);
bool32 sub_80EE5C8(struct IntroSequenceData * ptr);
+void sub_80EE5E4(struct IntroSequenceData * ptr);
+void sub_80EE6A4(struct IntroSequenceData * ptr);
+bool8 sub_80EE850(struct IntroSequenceData * ptr);
void sub_80EE8E4(struct Sprite * sprite);
+void sub_80EE970(struct Sprite * sprite, s16 a1, u16 a2, u8 a3);
+void sub_80EEA94(struct IntroSequenceData * ptr);
void sub_80EEBE4(void);
extern const u32 gMultiBootProgram_PokemonColosseum_Start[];
@@ -1205,3 +1238,247 @@ void sub_80ED818(struct Sprite * sprite)
break;
}
}
+
+void sub_80ED898(struct IntroSequenceData * this)
+{
+ switch (this->field_0004)
+ {
+ case 0:
+ this->field_0012 = 0;
+ this->field_0004++;
+ break;
+ case 1:
+ this->field_0012++;
+ if (this->field_0012 > 30)
+ {
+ sub_80EE5E4(this);
+ this->field_0004++;
+ }
+ break;
+ case 2:
+ if (!sub_80EE850(this))
+ {
+ this->field_0012 = 0;
+ this->field_0004++;
+ }
+ break;
+ case 3:
+ this->field_0012++;
+ if (this->field_0012 > 30)
+ {
+ sub_80ED760();
+ sub_80EDF94(this);
+ this->field_0012 = 0;
+ this->field_0004++;
+ }
+ break;
+ case 4:
+ if (this->field_0006)
+ {
+ sub_80EE6A4(this);
+ this->field_0004++;
+ }
+ break;
+ case 5:
+ if (!sub_80EE850(this))
+ {
+ sub_80ED788();
+ this->field_0012 = 0;
+ this->field_0004++;
+ }
+ break;
+ case 6:
+ this->field_0012++;
+ if (this->field_0012 > 16)
+ {
+ sub_80EE970(this->field_0018, 8, 12, 5);
+ this->field_0004++;
+ }
+ break;
+ case 7:
+ if (!sub_80EE850(this))
+ {
+ sub_80EE970(this->field_0018, 8, 12, 5);
+ this->field_0004++;
+ }
+ break;
+ case 8:
+ if (!sub_80EE850(this))
+ {
+ this->field_0012 = 0;
+ this->field_0004++;
+ }
+ break;
+ case 9:
+ this->field_0012++;
+ if (this->field_0012 > 20)
+ {
+ sub_80EEA94(this);
+ this->field_0012 = 0;
+ this->field_0004++;
+ }
+ break;
+ case 10:
+ if (!sub_80ED7B0())
+ {
+ sub_80ED760();
+ sub_80EDAF0(this);
+ this->field_0004++;
+ }
+ break;
+ case 11:
+ HideBg(0);
+ this->field_0012 = 0;
+ this->field_0004++;
+ break;
+ case 12:
+ this->field_0012++;
+ if (this->field_0012 == 48)
+ BeginNormalPaletteFade(0x00000006, 2, 0, 16, RGB_WHITE);
+ if (this->field_0012 > 120)
+ {
+ sub_80EDB70(this);
+ sub_80EDBAC(this);
+ this->field_0004++;
+ this->field_0012 = 0;
+ }
+ break;
+ case 13:
+ this->field_0012++;
+ if (this->field_0012 > 8)
+ {
+ CpuFill16(RGB_WHITE, gPlttBufferUnfaded + 16, 64);
+ BeginNormalPaletteFade(0xFFFFFFFE, -2, 0, 16, RGB_BLACK);
+ this->field_0004++;
+ }
+ break;
+ case 14:
+ if (!gPaletteFade.active)
+ {
+ this->field_0012 = 0;
+ this->field_0004++;
+ }
+ break;
+ case 15:
+ this->field_0012++;
+ if (this->field_0012 > 60)
+ sub_80ECAA8(this, sub_80EDBE8);
+ break;
+ default:
+ if (JOY_NEW(R_BUTTON))
+ {
+ BlendPalettes(0xFFFF0064, 0, RGB_WHITE);
+ this->field_0018->pos2.x = 0;
+ this->field_0018->pos1.x = 0xB4;
+ this->field_0004 = 1;
+ this->field_0012 = 30;
+ }
+ break;
+ }
+}
+
+void sub_80EDAD8(struct Sprite * sprite)
+{
+ CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode);
+}
+
+void sub_80EDAF0(struct IntroSequenceData * this)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ int x = (i & 1) * 48 + 49;
+ int y = (i / 2) * 64 + 72;
+ u8 spriteId = CreateSprite(&gUnknown_840BE4C, x, y, 8);
+ if (spriteId != MAX_SPRITES)
+ {
+ StartSpriteAnim(&gSprites[spriteId], i);
+ this->field_0028[i] = &gSprites[spriteId];
+ if (i & 1)
+ this->field_0028[i]->oam.shape = ST_OAM_V_RECTANGLE;
+ sub_80EDAD8(this->field_0028[i]);
+ }
+ }
+}
+
+void sub_80EDB70(struct IntroSequenceData * this)
+{
+ this->field_0018->pos1.x += this->field_0018->pos2.x;
+ this->field_0018->pos1.y += this->field_0018->pos2.y;
+ sub_8007FFC(this->field_0018, 0, 0x2A);
+ this->field_0018->callback = SpriteCallbackDummy;
+ StartSpriteAffineAnim(this->field_0018, 1);
+}
+
+void nullsub_83(struct Sprite * sprite)
+{
+
+}
+
+void sub_80EDBAC(struct IntroSequenceData * this)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ StartSpriteAffineAnim(this->field_0028[i], 1);
+ this->field_0028[i]->callback = nullsub_83;
+ sub_8007FFC(this->field_0028[i], gUnknown_840BBB8[i][0], gUnknown_840BBB8[i][1]);
+ }
+}
+
+void sub_80EDBE8(struct IntroSequenceData * this)
+{
+ switch (this->field_0004)
+ {
+ case 0:
+ FillPalette(RGB_BLACK, 0, 0x400);
+ this->field_0004++;
+ break;
+ case 1:
+ if (!FreeTempTileDataBuffersIfPossible())
+ {
+ DestroyTask(this->field_0005);
+ Free(this);
+ DisableInterrupts(INTR_FLAG_HBLANK);
+ SetHBlankCallback(NULL);
+ SetMainCallback2(CB2_InitTitleScreen);
+ }
+ break;
+ }
+}
+
+void sub_80EDC40(void)
+{
+ int i;
+ u8 spriteId;
+
+ for (i = 0; i < NELEMS(gUnknown_840BBC0); i++)
+ {
+ LoadCompressedSpriteSheet(&gUnknown_840BBC0[i]);
+ }
+ LoadSpritePalettes(gUnknown_840BBE8);
+ gUnknown_203AB0E = 0x60;
+ gUnknown_203AB10 = 0x10;
+ gUnknown_203AB12 = 0x07;
+ gUnknown_203AB14 = 0x05;
+ gUnknown_203AB16 = 0x08;
+ gUnknown_203AB18 = 0x5A;
+ gUnknown_203AB1A = 0x78;
+ gUnknown_203AB1E = 0x01;
+ gUnknown_203AB20 = 0x01;
+ gUnknown_203AB22 = 0x05;
+ gUnknown_203AB24 = 0x05;
+ if (gUnknown_203AB28 == 0)
+ gUnknown_203AB28 = 0x151B9245;
+ spriteId = CreateSprite(&gUnknown_840BC6C, 0xF8, 0x37, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = 0xF80;
+ gSprites[spriteId].data[1] = 0x370;
+ gSprites[spriteId].data[2] = gUnknown_203AB0E;
+ gSprites[spriteId].data[3] = gUnknown_203AB10;
+ StoreWordInTwoHalfwords(&gSprites[spriteId].data[6], gUnknown_203AB28);
+ }
+}