summaryrefslogtreecommitdiff
path: root/src/title_screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/title_screen.c')
-rw-r--r--src/title_screen.c202
1 files changed, 176 insertions, 26 deletions
diff --git a/src/title_screen.c b/src/title_screen.c
index 2d6b6cf15..af78893b9 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -54,12 +54,13 @@ static void SetGpuRegsForTitleScreenRun(void);
static void SetTitleScreenScene_Restart(s16 * data);
static void SetTitleScreenScene_Cry(s16 * data);
static void Task_TitleScreen_SlideWin0(u8 taskId);
-static void Task_TitleScreen_PaletteSomething(u8 taskId);
+static void Task_TitleScreen_BlinkPressStart(u8 taskId);
static void SignalEndTitleScreenPaletteSomethingTask(void);
static void UpdateScanlineEffectRegBuffer(s16 a0);
static void ScheduleStopScanlineEffect(void);
static void LoadMainTitleScreenPalsAndResetBgs(void);
static void CB2_FadeOutTransitionToSaveClearScreen(void);
+static void SpriteCallback_TitleScreenFlameOrLeaf(struct Sprite * sprite);
static void CB2_FadeOutTransitionToBerryFix(void);
static void LoadSpriteGfxAndPals(void);
static void Task_FlameOrLeafSpawner(u8 taskId);
@@ -74,13 +75,23 @@ static void SpriteCallback_Slash(struct Sprite * sprite);
// bg3
static const u8 sBorderBgTiles[] = INCBIN_U8("data/graphics/title_screen/unk_83BF58C.4bpp.lz");
+#if defined(FIRERED)
static const u8 sBorderBgMap[] = INCBIN_U8("data/graphics/title_screen/unk_83BF5A8.bin.lz");
+#elif defined(LEAFGREEN)
+static const u8 sBorderBgMap[] = INCBIN_U8("data/graphics/title_screen/lg_border_bg.bin.lz");
+#endif
//sprites
-static const u8 sSlashSpriteTiles[] = INCBIN_U8("data/graphics/title_screen/unk_83bf64c.4bpp.lz");
+static const u32 sSlashSpriteTiles[] = INCBIN_U32("data/graphics/title_screen/unk_83bf64c.4bpp.lz");
+#if defined(FIRERED)
static const u16 sSlashSpritePals[] = INCBIN_U16("data/graphics/title_screen/unk_83bf77c.gbapal");
-static const u8 sFireSpriteTiles[] = INCBIN_U8("data/graphics/title_screen/unk_83bf79c.4bpp.lz");
-static const u8 sBlankFireSpriteTiles[] = INCBIN_U8("data/graphics/title_screen/unk_83bfa14.4bpp.lz");
+static const u32 sFireSpriteTiles[] = INCBIN_U32("data/graphics/title_screen/unk_83bf79c.4bpp.lz");
+static const u32 sBlankFireSpriteTiles[] = INCBIN_U32("data/graphics/title_screen/unk_83bfa14.4bpp.lz");
+#elif defined(LEAFGREEN)
+static const u16 sSlashSpritePals[] = INCBIN_U16("data/graphics/title_screen/unk_lg_83bf764.gbapal");
+static const u32 sLeafSpriteTiles[] = INCBIN_U32("data/graphics/title_screen/unk_lg_83bf784.4bpp.lz");
+static const u32 sBlankLeafSpriteTiles[] = INCBIN_U32("data/graphics/title_screen/unk_lg_83bf89c.4bpp.lz");
+#endif
static const struct OamData sOamData_FlameOrLeaf = {
.objMode = ST_OAM_OBJ_NORMAL,
@@ -91,6 +102,7 @@ static const struct OamData sOamData_FlameOrLeaf = {
.paletteNum = 0
};
+#if defined(FIRERED)
static const union AnimCmd sSpriteAnims_FlameOrLeaf_0[] = {
ANIMCMD_FRAME(0x00, 3),
ANIMCMD_FRAME(0x04, 6),
@@ -118,6 +130,27 @@ static const union AnimCmd *const sSpriteAnimTable_FlameOrLeaf[] = {
sSpriteAnims_FlameOrLeaf_1
};
+#elif defined(LEAFGREEN)
+static const union AnimCmd sSpriteAnims_FlameOrLeaf_0[] = {
+ ANIMCMD_FRAME(0x00, 8),
+ ANIMCMD_FRAME(0x04, 8),
+ ANIMCMD_FRAME(0x08, 8),
+ ANIMCMD_FRAME(0x0c, 8),
+ ANIMCMD_FRAME(0x10, 8),
+ ANIMCMD_FRAME(0x14, 8),
+ ANIMCMD_FRAME(0x18, 8),
+ ANIMCMD_FRAME(0x1c, 8),
+ ANIMCMD_FRAME(0x20, 8),
+ ANIMCMD_FRAME(0x24, 8),
+ ANIMCMD_FRAME(0x28, 8),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd *const sSpriteAnimTable_FlameOrLeaf[] = {
+ sSpriteAnims_FlameOrLeaf_0
+};
+#endif
+
static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State1 = {
.tileTag = 0,
.paletteTag = 0,
@@ -128,6 +161,7 @@ static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State1 = {
.callback = SpriteCallbackDummy
};
+#if defined(FIRERED)
static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State0 = {
.tileTag = 1,
.paletteTag = 0,
@@ -137,8 +171,25 @@ static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State0 = {
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
+#elif defined(LEAFGREEN)
+static const struct OamData sOamData_LG_83BF950 = {
+ .shape = SPRITE_SHAPE(32x16),
+ .size = SPRITE_SIZE(32x16),
+ .priority = 3
+};
+
+static const struct SpriteTemplate sSpriteTemplate_FlameOrLeaf_State0 = {
+ .tileTag = 1,
+ .paletteTag = 0,
+ .oam = &sOamData_LG_83BF950,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+#endif
-static const struct OamData sOamData_UnknownTemptySprite = {
+static const struct OamData sOamData_UnknownEmptySprite = {
.objMode = ST_OAM_OBJ_NORMAL,
.shape = ST_OAM_V_RECTANGLE,
.size = ST_OAM_SIZE_3,
@@ -150,7 +201,7 @@ static const struct OamData sOamData_UnknownTemptySprite = {
static const struct SpriteTemplate sUnknownEmptySprite = {
.tileTag = 2,
.paletteTag = 2,
- .oam = &sOamData_UnknownTemptySprite,
+ .oam = &sOamData_UnknownEmptySprite,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -221,23 +272,39 @@ static void (*const sSceneFuncs[])(s16 * data) = {
SetTitleScreenScene_Cry
};
+#if defined(FIRERED)
+static const struct CompressedSpriteSheet sSpriteSheets[] = {
+ {sFireSpriteTiles, 0x500, 0},
+ {sBlankFireSpriteTiles, 0x500, 1},
+ {gGraphics_TitleScreen_BlankObjTiles, 0x400, 2},
+ {sSlashSpriteTiles, 0x800, 3}
+};
+#elif defined(LEAFGREEN)
static const struct CompressedSpriteSheet sSpriteSheets[] = {
- {(const void *)sFireSpriteTiles, 0x500, 0},
- {(const void *)sBlankFireSpriteTiles, 0x500, 1},
- {(const void *)gGraphics_TitleScreen_BlankObjTiles, 0x400, 2},
- {(const void *)sSlashSpriteTiles, 0x800, 3}
+ {sLeafSpriteTiles, 0x580, 0},
+ {sBlankLeafSpriteTiles, 0x100, 1},
+ {gGraphics_TitleScreen_BlankObjTiles, 0x400, 2},
+ {sSlashSpriteTiles, 0x800, 3}
};
+#endif
static const struct SpritePalette sSpritePals[] = {
{sSlashSpritePals, 0},
- {gGraphics_TitleScreen_FirePals, 2},
+ {gGraphics_TitleScreen_FireOrLeafPals, 2},
{}
};
+#if defined(FIRERED)
static const u8 gUnknown_83BFBD4[] = {
0x04, 0x10, 0x1a, 0x20, 0x30, 0xc8, 0xd8, 0xe0, 0xe8, 0x3c, 0x4c, 0x5c, 0x6c, 0x80, 0x90
};
+#elif defined(LEAFGREEN)
+static const u16 gUnknown_LG_83BFA10[] = {
+ 40, 80, 110, 60, 90, 70, 100, 50
+};
+#endif
+
void CB2_InitTitleScreen(void)
{
switch (gMain.state)
@@ -263,12 +330,12 @@ void CB2_InitTitleScreen(void)
sTitleScreenTimerTaskId = 0xFF;
break;
case 1:
- LoadPalette(gGraphics_TitleScreen_PokemonFireRedLogoPals, 0, 0x1A0);
- DecompressAndCopyTileDataToVram(0, gGraphics_TitleScreen_PokemonFireRedLogoTiles, 0, 0, 0);
- DecompressAndCopyTileDataToVram(0, gGraphics_TitleScreen_PokemonFireRedLogoMap, 0, 0, 1);
- LoadPalette(gGraphics_TitleScreen_CharizardPals, 0xD0, 0x20);
- DecompressAndCopyTileDataToVram(1, gGraphics_TitleScreen_CharizardTiles, 0, 0, 0);
- DecompressAndCopyTileDataToVram(1, gGraphics_TitleScreen_CharizardMap, 0, 0, 1);
+ LoadPalette(gGraphics_TitleScreen_GameTitleLogoPals, 0, 0x1A0);
+ DecompressAndCopyTileDataToVram(0, gGraphics_TitleScreen_GameTitleLogoTiles, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(0, gGraphics_TitleScreen_GameTitleLogoMap, 0, 0, 1);
+ LoadPalette(gGraphics_TitleScreen_BoxArtMonPals, 0xD0, 0x20);
+ DecompressAndCopyTileDataToVram(1, gGraphics_TitleScreen_BoxArtMonTiles, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, gGraphics_TitleScreen_BoxArtMonMap, 0, 0, 1);
LoadPalette(gGraphics_TitleScreen_BackgroundPals, 0xF0, 0x20);
DecompressAndCopyTileDataToVram(2, gGraphics_TitleScreen_CopyrightPressStartTiles, 0, 0, 0);
DecompressAndCopyTileDataToVram(2, gGraphics_TitleScreen_CopyrightPressStartMap, 0, 0, 1);
@@ -486,7 +553,7 @@ static void SetTitleScreenScene_FadeIn(s16 * data)
BlendPalettes(r4, 0x10, RGB(30, 30, 31));
BeginNormalPaletteFade(r4, 1, 0x10, 0x00, RGB(30, 30, 31));
ShowBg(0);
- CpuCopy16(gGraphics_TitleScreen_CharizardPals, gPlttBufferUnfaded + 0xD0, 0x20);
+ CpuCopy16(gGraphics_TitleScreen_BoxArtMonPals, gPlttBufferUnfaded + 0xD0, 0x20);
sub_80717A8(0x2000, 1, 0x0F, 0x00, RGB(30, 30, 31), 0, 0);
data[1]++;
}
@@ -509,7 +576,7 @@ static void SetTitleScreenScene_Run(s16 * data)
{
case 0:
HelpSystem_SetSomeVariable2(1);
- CreateTask(Task_TitleScreen_PaletteSomething, 0);
+ CreateTask(Task_TitleScreen_BlinkPressStart, 0);
CreateTask(Task_FlameOrLeafSpawner, 5);
SetGpuRegsForTitleScreenRun();
data[6] = CreateSlashSprite();
@@ -569,7 +636,7 @@ static void SetTitleScreenScene_Restart(s16 * data)
case 2:
if (IsNotWaitingForBGMStop() && !gPaletteFade.active)
{
- DestroyTask(FindTaskIdByFunc(Task_TitleScreen_PaletteSomething));
+ DestroyTask(FindTaskIdByFunc(Task_TitleScreen_BlinkPressStart));
data[2] = 0;
data[1]++;
}
@@ -578,7 +645,7 @@ static void SetTitleScreenScene_Restart(s16 * data)
data[2]++;
if (data[2] >= 20)
{
- DestroyTask(FindTaskIdByFunc(Task_TitleScreen_PaletteSomething));
+ DestroyTask(FindTaskIdByFunc(Task_TitleScreen_BlinkPressStart));
data[1]++;
}
break;
@@ -692,7 +759,7 @@ static void Task_TitleScreen_SlideWin0(u8 taskId)
}
}
-static void Task_TitleScreen_PaletteSomething(u8 taskId)
+static void Task_TitleScreen_BlinkPressStart(u8 taskId)
{
s16 * data = gTasks[taskId].data;
s32 i;
@@ -738,7 +805,7 @@ static void Task_TitleScreen_PaletteSomething(u8 taskId)
static void SignalEndTitleScreenPaletteSomethingTask(void)
{
- u8 taskId = FindTaskIdByFunc(Task_TitleScreen_PaletteSomething);
+ u8 taskId = FindTaskIdByFunc(Task_TitleScreen_BlinkPressStart);
gTasks[taskId].data[15] = TRUE;
}
@@ -796,8 +863,8 @@ static void LoadMainTitleScreenPalsAndResetBgs(void)
sub_8071898();
ResetPaletteFadeControl();
- LoadPalette(gGraphics_TitleScreen_PokemonFireRedLogoPals, 0x00, 0x1A0);
- LoadPalette(gGraphics_TitleScreen_CharizardPals, 0xD0, 0x20);
+ LoadPalette(gGraphics_TitleScreen_GameTitleLogoPals, 0x00, 0x1A0);
+ LoadPalette(gGraphics_TitleScreen_BoxArtMonPals, 0xD0, 0x20);
LoadPalette(gGraphics_TitleScreen_BackgroundPals, 0xF0, 0x20);
LoadPalette(gGraphics_TitleScreen_BackgroundPals, 0xE0, 0x20);
ResetBgPositions();
@@ -876,6 +943,7 @@ static void SpriteCallback_TitleScreenFlameOrLeaf(struct Sprite * sprite)
#endif
}
+#if defined(FIRERED)
static bool32 CreateFlameOrLeafSprite(s32 x, s32 y, s32 xspeed, s32 yspeed, bool32 templateId)
{
u8 spriteId;
@@ -951,6 +1019,88 @@ static void Task_FlameOrLeafSpawner(u8 taskId)
}
}
+#elif defined(LEAFGREEN)
+
+static void CreateFlameOrLeafSprite(s32 y0, s32 x1, s32 y1)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State1, 0xF0, y0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = 0xF00;
+ gSprites[spriteId].data[1] = x1;
+ gSprites[spriteId].data[2] = y0 << 4;
+ gSprites[spriteId].data[3] = y1;
+ gSprites[spriteId].callback = SpriteCallback_TitleScreenFlameOrLeaf;
+ }
+}
+
+static void SpriteCallback_LG_8079800(struct Sprite * sprite)
+{
+ sprite->pos1.x -= 7;
+ if (sprite->pos1.x < -16)
+ {
+ sprite->pos1.x = 0x100;
+ sprite->data[7]++;
+ if (sprite->data[7] >= NELEMS(gUnknown_LG_83BFA10))
+ sprite->data[7] = 0;
+ sprite->pos1.y = gUnknown_LG_83BFA10[sprite->data[7]];
+ }
+}
+
+static void sub_LG_8079844(void)
+{
+ int i;
+ u8 spriteId;
+ for (i = 0; i < 4; i++)
+ {
+ spriteId = CreateSprite(&sSpriteTemplate_FlameOrLeaf_State0, 0x100 + 0x28 * i, gUnknown_LG_83BFA10[i], 0xFF);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[7] = i;
+ gSprites[spriteId].callback = SpriteCallback_LG_8079800;
+ }
+ }
+}
+
+static void Task_FlameOrLeafSpawner(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+ s32 rval;
+ s32 r6;
+ s32 r4;
+ s32 r0;
+
+ switch (data[0])
+ {
+ case 0:
+ sub_LG_8079844();
+ TitleScreen_srand(taskId, 3, 30840);
+ data[0]++;
+ break;
+ case 1:
+ data[1]++;
+ if (data[1] >= data[2])
+ {
+ data[1] = 0;
+ data[2] = (TitleScreen_rand(taskId, 3) % 6) + 6;
+ rval = TitleScreen_rand(taskId, 3) % 30;
+ r6 = 16;
+ if (rval >= 6)
+ {
+ r6 = 48;
+ if (rval < 12)
+ r6 = 24;
+ }
+ r4 = (TitleScreen_rand(taskId, 3) % 4) - 2;
+ r0 = (TitleScreen_rand(taskId, 3) % 88) + 32;
+ CreateFlameOrLeafSprite(r0, r6, r4);
+ }
+ break;
+ }
+}
+
+#endif //FRLG
+
static void TitleScreen_srand(u8 taskId, u8 field, u16 seed)
{
SetWordTaskArg(taskId, field, seed);
@@ -979,7 +1129,7 @@ static void SetPalOnOrCreateBlankSprite(bool32 mode)
if (mode)
{
palIdx = IndexOfSpritePaletteTag(2);
- LoadPalette(gGraphics_TitleScreen_FirePals, palIdx * 16 + 0x100, 0x20);
+ LoadPalette(gGraphics_TitleScreen_FireOrLeafPals, palIdx * 16 + 0x100, 0x20);
}
else
CreateBlankSprite();