intro: sub_80EDC40

This commit is contained in:
PikalaxALT
2019-07-04 10:42:22 -04:00
parent 168109aa9e
commit 2f671f9bd2
3 changed files with 282 additions and 636 deletions
+281 -4
View File
@@ -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);
}
}