summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/menu.c2
-rw-r--r--src/title_screen.c368
2 files changed, 308 insertions, 62 deletions
diff --git a/src/menu.c b/src/menu.c
index a4e5d9065..ba98ff057 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -654,7 +654,7 @@ u8 *sub_8072C44(u8 *a1, s32 a2, u8 a3, u8 a4)
return AlignInt2(gMenuWindowPtr, a1, a2, a3, a4);
}
-u8 *sub_8072C74(u8 *a1, u8 *a2, u8 a3, u8 a4)
+u8 *sub_8072C74(u8 *a1, const u8 *a2, u8 a3, u8 a4)
{
return AlignString(gMenuWindowPtr, a1, a2, a3, a4);
}
diff --git a/src/title_screen.c b/src/title_screen.c
index 35f3d049c..86ca1c365 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -19,32 +19,270 @@ extern struct MusicPlayerInfo gMPlay_BGM;
extern u8 gUnknown_0202F7E4;
extern u16 gUnknown_030041B4;
extern u16 gUnknown_030042C0;
-extern u8 gUnknown_08393210[];
-extern u8 gUnknown_08393250[];
-extern u8 gUnknown_083939EC[];
-extern u8 gUnknown_08393BF8[];
-extern u16 gUnknown_08393E64[];
-extern struct SpriteTemplate gSpriteTemplate_8393ECC;
-extern struct SpriteTemplate gSpriteTemplate_8393EE4;
-extern struct SpriteSheet gUnknown_08393EFC;
-extern struct SpriteTemplate gSpriteTemplate_8393F74;
-extern struct SpriteSheet gUnknown_08393F8C;
-extern const struct SpritePalette gUnknown_08393F9C[];
-extern struct SpriteTemplate gSpriteTemplate_8393FC0;
-extern struct SpriteSheet gUnknown_08393FD8;
-extern u8 gUnknown_08E9D8CC[];
-extern u8 gUnknown_08E9F624[];
-extern u8 gUnknown_08E9F7E4[];
+extern const u8 gUnknown_08E9D8CC[];
+extern const u16 gUnknown_08E9F624[];
+extern const u8 gUnknown_08E9F7E4[];
+extern const u8 gVersionTiles[];
+extern const u8 gTitleScreenPressStart_Gfx[];
+extern const u16 gTitleScreenLogoShinePalette[];
-static void MainCB2(void);
-static void Task_TitleScreenPhase1(u8);
-static void Task_TitleScreenPhase2(u8);
-static void Task_TitleScreenPhase3(u8);
-static void CB2_GoToMainMenu(void);
-static void CB2_GoToClearSaveDataScreen(void);
-static void CB2_GoToResetRtcScreen(void);
-static void CB2_GoToCopyrightScreen(void);
-static void UpdateLegendaryMarkingColor(u8);
+#ifdef SAPPHIRE
+static const u16 sLegendaryMonPalettes[][16] =
+{
+ INCBIN_U16("graphics/title_screen/kyogre_dark.gbapal"),
+ INCBIN_U16("graphics/title_screen/kyogre_glow.gbapal"),
+};
+static const u8 sLegendaryMonPixelData[] = INCBIN_U8("graphics/title_screen/kyogre.4bpp.lz");
+static const u8 sLegendaryMonTilemap[] = INCBIN_U8("graphics/title_screen/kyogre_map.bin.lz");
+static const u8 sBackdropTilemap[] = INCBIN_U8("graphics/title_screen/water_map.bin.lz");
+#else
+static const u16 sLegendaryMonPalettes[][16] =
+{
+ INCBIN_U16("graphics/title_screen/groudon_dark.gbapal"),
+ INCBIN_U16("graphics/title_screen/groudon_glow.gbapal"),
+};
+static const u8 sLegendaryMonPixelData[] = INCBIN_U8("graphics/title_screen/groudon.4bpp.lz");
+static const u8 sLegendaryMonTilemap[] = INCBIN_U8("graphics/title_screen/groudon_map.bin.lz");
+static const u8 sBackdropTilemap[] = INCBIN_U8("graphics/title_screen/lava_map.bin.lz");
+#endif
+static const u8 sLogoShineTiles[] = INCBIN_U8("graphics/title_screen/logo_shine.4bpp.lz");
+const u16 gUnknown_08393E64[] =
+{
+ 0x10,
+ 0x110,
+ 0x210,
+ 0x310,
+ 0x410,
+ 0x510,
+ 0x610,
+ 0x710,
+ 0x810,
+ 0x910,
+ 0xA10,
+ 0xB10,
+ 0xC10,
+ 0xD10,
+ 0xE10,
+ 0xF10,
+ 0x100F,
+ 0x100E,
+ 0x100D,
+ 0x100C,
+ 0x100B,
+ 0x100A,
+ 0x1009,
+ 0x1008,
+ 0x1007,
+ 0x1006,
+ 0x1005,
+ 0x1004,
+ 0x1003,
+ 0x1002,
+ 0x1001,
+ 0x1000,
+};
+static const struct OamData sVersionBannerLeftOamData =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 1,
+ .shape = 1,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const struct OamData sVersionBannerRightOamData =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 1,
+ .shape = 1,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const union AnimCmd sVersionBannerLeftAnimSequence[] =
+{
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd sVersionBannerRightAnimSequence[] =
+{
+ ANIMCMD_FRAME(64, 30),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const sVersionBannerLeftAnimTable[] =
+{
+ sVersionBannerLeftAnimSequence,
+};
+static const union AnimCmd *const sVersionBannerRightAnimTable[] =
+{
+ sVersionBannerRightAnimSequence,
+};
+static const struct SpriteTemplate sVersionBannerLeftSpriteTemplate =
+{
+ .tileTag = 1000,
+ .paletteTag = 1000,
+ .oam = &sVersionBannerLeftOamData,
+ .anims = sVersionBannerLeftAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallback_VersionBannerLeft,
+};
+static const struct SpriteTemplate sVersionBannerRightSpriteTemplate =
+{
+ .tileTag = 1000,
+ .paletteTag = 1000,
+ .oam = &sVersionBannerRightOamData,
+ .anims = sVersionBannerRightAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallback_VersionBannerRight,
+};
+static const struct SpriteSheet gUnknown_08393EFC[] =
+{
+ {gVersionTiles, 0x1000, 1000},
+ {NULL},
+};
+static const struct OamData gOamData_8393F0C =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 1,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const union AnimCmd gSpriteAnim_8393F14[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_8393F1C[] =
+{
+ ANIMCMD_FRAME(4, 4),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_8393F24[] =
+{
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_8393F2C[] =
+{
+ ANIMCMD_FRAME(12, 4),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_8393F34[] =
+{
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_8393F3C[] =
+{
+ ANIMCMD_FRAME(20, 4),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_8393F44[] =
+{
+ ANIMCMD_FRAME(24, 4),
+ ANIMCMD_END,
+};
+static const union AnimCmd gSpriteAnim_8393F4C[] =
+{
+ ANIMCMD_FRAME(28, 4),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const sStartCopyrightBannerAnimTable[] =
+{
+ gSpriteAnim_8393F14,
+ gSpriteAnim_8393F1C,
+ gSpriteAnim_8393F24,
+ gSpriteAnim_8393F2C,
+ gSpriteAnim_8393F34,
+ gSpriteAnim_8393F3C,
+ gSpriteAnim_8393F44,
+ gSpriteAnim_8393F4C,
+};
+static const struct SpriteTemplate sStartCopyrightBannerSpriteTemplate =
+{
+ .tileTag = 1001,
+ .paletteTag = 1001,
+ .oam = &gOamData_8393F0C,
+ .anims = sStartCopyrightBannerAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallback_PressStartCopyrightBanner,
+};
+static const struct SpriteSheet gUnknown_08393F8C[] =
+{
+ {gTitleScreenPressStart_Gfx, 0x520, 1001},
+ {NULL},
+};
+const struct SpritePalette sPokemonLogoShinePalette[] =
+{
+ {gTitleScreenLogoShinePalette, 1001},
+ {NULL},
+};
+static const struct OamData sPokemonLogoShineOamData =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const union AnimCmd sPokemonLogoShineAnimSequence[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const sPokemonLogoShineAnimTable[] =
+{
+ sPokemonLogoShineAnimSequence,
+};
+static const struct SpriteTemplate sPokemonLogoShineSpriteTemplate =
+{
+ .tileTag = 1002,
+ .paletteTag = 1001,
+ .oam = &sPokemonLogoShineOamData,
+ .anims = sPokemonLogoShineAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallback_PokemonLogoShine,
+};
+static const struct SpriteSheet sPokemonLogoShineSpriteSheet[] =
+{
+ {sLogoShineTiles, 0x800, 1002},
+ {NULL},
+};
#define _RGB(r, g, b) ((((b) & 31) << 10) + (((g) & 31) << 5) + ((r) & 31))
@@ -66,6 +304,16 @@ static void UpdateLegendaryMarkingColor(u8);
#define RESET_RTC_BUTTON_COMBO (B_BUTTON | SELECT_BUTTON | DPAD_LEFT)
#define A_B_START_SELECT (A_BUTTON | B_BUTTON | START_BUTTON | SELECT_BUTTON)
+static void MainCB2(void);
+static void Task_TitleScreenPhase1(u8);
+static void Task_TitleScreenPhase2(u8);
+static void Task_TitleScreenPhase3(u8);
+static void CB2_GoToMainMenu(void);
+static void CB2_GoToClearSaveDataScreen(void);
+static void CB2_GoToResetRtcScreen(void);
+static void CB2_GoToCopyrightScreen(void);
+static void UpdateLegendaryMarkingColor(u8);
+
void SpriteCallback_VersionBannerLeft(struct Sprite *sprite)
{
struct Task *task = &gTasks[sprite->data1];
@@ -134,7 +382,7 @@ static void CreatePressStartBanner(s16 x, s16 y)
x -= 32;
for (i = 0; i < 3; i++, x += 32)
{
- spriteId = CreateSprite(&gSpriteTemplate_8393F74, x, y, 0);
+ spriteId = CreateSprite(&sStartCopyrightBannerSpriteTemplate, x, y, 0);
StartSpriteAnim(&gSprites[spriteId], i);
gSprites[spriteId].data0 = 1;
}
@@ -148,7 +396,7 @@ static void CreateCopyrightBanner(s16 x, s16 y)
x -= 64;
for (i = 0; i < 5; i++, x += 32)
{
- spriteId = CreateSprite(&gSpriteTemplate_8393F74, x, y, 0);
+ spriteId = CreateSprite(&sStartCopyrightBannerSpriteTemplate, x, y, 0);
StartSpriteAnim(&gSprites[spriteId], i + 3);
}
}
@@ -193,7 +441,7 @@ void SpriteCallback_PokemonLogoShine(struct Sprite *sprite)
static void StartPokemonLogoShine(bool8 flashBackground)
{
- u8 spriteId = CreateSprite(&gSpriteTemplate_8393FC0, 0, 68, 0);
+ u8 spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, 0, 68, 0);
gSprites[spriteId].oam.objMode = 2;
gSprites[spriteId].data0 = flashBackground;
@@ -208,11 +456,9 @@ static void VBlankCB(void)
REG_BG1VOFS = gUnknown_030041B4;
}
-enum
-{
- TD_COUNTER,
- TD_SKIP,
-};
+
+#define tCounter data[0]
+#define tSkipToNext data[1]
void CB2_InitTitleScreen(void)
{
@@ -245,28 +491,28 @@ void CB2_InitTitleScreen(void)
LZ77UnCompVram(gUnknown_08E9D8CC, (void *)VRAM);
LZ77UnCompVram(gUnknown_08E9F7E4, (void *)(VRAM + 0x4800));
LoadPalette(gUnknown_08E9F624, 0, 0x1C0);
- LZ77UnCompVram(gUnknown_08393250, (void *)(VRAM + 0x8000));
- LZ77UnCompVram(gUnknown_083939EC, (void *)(VRAM + 0xC000));
- LZ77UnCompVram(gUnknown_08393BF8, (void *)(VRAM + 0xC800));
- LoadPalette(gUnknown_08393210, 0xE0, 0x40);
+ LZ77UnCompVram(sLegendaryMonPixelData, (void *)(VRAM + 0x8000));
+ LZ77UnCompVram(sLegendaryMonTilemap, (void *)(VRAM + 0xC000));
+ LZ77UnCompVram(sBackdropTilemap, (void *)(VRAM + 0xC800));
+ LoadPalette(sLegendaryMonPalettes, 0xE0, sizeof(sLegendaryMonPalettes));
remove_some_task();
ResetTasks();
ResetSpriteData();
FreeAllSpritePalettes();
gReservedSpritePaletteCount = 14;
- LoadCompressedObjectPic(&gUnknown_08393EFC);
- LoadCompressedObjectPic(&gUnknown_08393F8C);
- LoadCompressedObjectPic(&gUnknown_08393FD8);
+ LoadCompressedObjectPic(&gUnknown_08393EFC[0]);
+ LoadCompressedObjectPic(&gUnknown_08393F8C[0]);
+ LoadCompressedObjectPic(&sPokemonLogoShineSpriteSheet[0]);
LoadPalette(gUnknown_08E9F624, 0x100, 0x1C0);
- LoadSpritePalette(&gUnknown_08393F9C[0]);
+ LoadSpritePalette(&sPokemonLogoShinePalette[0]);
gMain.state = 2;
break;
case 2:
{
u8 taskId = CreateTask(Task_TitleScreenPhase1, 0);
- gTasks[taskId].data[TD_COUNTER] = 0x100;
- gTasks[taskId].data[TD_SKIP] = FALSE;
+ gTasks[taskId].tCounter = 256;
+ gTasks[taskId].tSkipToNext = FALSE;
gTasks[taskId].data[2] = -16;
gTasks[taskId].data[3] = -32;
gUnknown_0202F7E4 = taskId;
@@ -337,17 +583,17 @@ static void Task_TitleScreenPhase1(u8 taskId)
//Skip to next phase when A, B, Start, or Select is pressed
if ((gMain.newKeys & A_B_START_SELECT) || gTasks[taskId].data[1] != 0)
{
- gTasks[taskId].data[TD_SKIP] = TRUE;
- gTasks[taskId].data[TD_COUNTER] = 0;
+ gTasks[taskId].tSkipToNext = TRUE;
+ gTasks[taskId].tCounter = 0;
}
- if (gTasks[taskId].data[TD_COUNTER] != 0)
+ if (gTasks[taskId].tCounter != 0)
{
- u16 frameNum = gTasks[taskId].data[TD_COUNTER];
+ u16 frameNum = gTasks[taskId].tCounter;
if (frameNum == 160 || frameNum == 64)
StartPokemonLogoShine(TRUE);
- gTasks[taskId].data[TD_COUNTER]--;
+ gTasks[taskId].tCounter--;
}
else
{
@@ -361,17 +607,17 @@ static void Task_TitleScreenPhase1(u8 taskId)
REG_BLDY = 0;
//Create left side of version banner
- spriteId = CreateSprite(&gSpriteTemplate_8393ECC, 0x62, 0x1A, 0);
+ spriteId = CreateSprite(&sVersionBannerLeftSpriteTemplate, 0x62, 0x1A, 0);
gSprites[spriteId].invisible = TRUE;
gSprites[spriteId].data1 = taskId;
//Create right side of version banner
- spriteId = CreateSprite(&gSpriteTemplate_8393EE4, 0xA2, 0x1A, 0);
+ spriteId = CreateSprite(&sVersionBannerRightSpriteTemplate, 0xA2, 0x1A, 0);
gSprites[spriteId].invisible = TRUE;
gSprites[spriteId].data1 = taskId;
gTasks[taskId].data[5] = 88;
- gTasks[taskId].data[TD_COUNTER] = 144;
+ gTasks[taskId].tCounter = 144;
gTasks[taskId].func = Task_TitleScreenPhase2;
}
}
@@ -380,17 +626,17 @@ static void Task_TitleScreenPhase1(u8 taskId)
static void Task_TitleScreenPhase2(u8 taskId)
{
//Skip to next phase when A, B, Start, or Select is pressed
- if ((gMain.newKeys & A_B_START_SELECT) || gTasks[taskId].data[TD_SKIP])
+ if ((gMain.newKeys & A_B_START_SELECT) || gTasks[taskId].tSkipToNext)
{
- gTasks[taskId].data[TD_SKIP] = TRUE;
- gTasks[taskId].data[TD_COUNTER] = 0;
+ gTasks[taskId].tSkipToNext = TRUE;
+ gTasks[taskId].tCounter = 0;
}
- if (gTasks[taskId].data[TD_COUNTER] != 0)
- gTasks[taskId].data[TD_COUNTER]--;
+ if (gTasks[taskId].tCounter != 0)
+ gTasks[taskId].tCounter--;
else
{
- gTasks[taskId].data[TD_SKIP] = TRUE;
+ gTasks[taskId].tSkipToNext = TRUE;
REG_DISPCNT = DISPCNT_MODE_1
| DISPCNT_OBJ_1D_MAP
| DISPCNT_BG0_ON
@@ -403,7 +649,7 @@ static void Task_TitleScreenPhase2(u8 taskId)
gTasks[taskId].func = Task_TitleScreenPhase3;
}
- if (!(gTasks[taskId].data[TD_COUNTER] & 1) && gTasks[taskId].data[3] != 0)
+ if (!(gTasks[taskId].tCounter & 1) && gTasks[taskId].data[3] != 0)
gTasks[taskId].data[3]++;
//Slide Pokemon logo up
@@ -437,14 +683,14 @@ static void Task_TitleScreenPhase3(u8 taskId)
else
{
REG_BG2Y = 0;
- gTasks[taskId].data[TD_COUNTER]++;
- if (gTasks[taskId].data[TD_COUNTER] & 1)
+ gTasks[taskId].tCounter++;
+ if (gTasks[taskId].tCounter & 1)
{
gTasks[taskId].data[4]++;
gUnknown_030041B4 = gTasks[taskId].data[4];
gUnknown_030042C0 = 0;
}
- UpdateLegendaryMarkingColor(gTasks[taskId].data[TD_COUNTER]);
+ UpdateLegendaryMarkingColor(gTasks[taskId].tCounter);
if ((gMPlay_BGM.status & 0xFFFF) == 0)
{
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0xFFFF);