Finish documenting credits

This commit is contained in:
GriffinR 2021-03-29 12:39:49 -04:00
parent 62968895ca
commit 09ff1524b4
8 changed files with 442 additions and 407 deletions

View File

@ -8,6 +8,15 @@ enum {
INTROCRED_SCENERY_FROZEN, INTROCRED_SCENERY_FROZEN,
}; };
// Scenes for the Credits sequence
enum {
SCENE_OCEAN_MORNING,
SCENE_OCEAN_SUNSET,
SCENE_FOREST_RIVAL_ARRIVE,
SCENE_FOREST_CATCH_RIVAL,
SCENE_CITY_NIGHT,
};
extern u16 gIntroCredits_MovingSceneryVBase; extern u16 gIntroCredits_MovingSceneryVBase;
extern s16 gIntroCredits_MovingSceneryVOffset; extern s16 gIntroCredits_MovingSceneryVOffset;
extern s16 gIntroCredits_MovingSceneryState; extern s16 gIntroCredits_MovingSceneryState;

File diff suppressed because it is too large Load Diff

View File

@ -71,7 +71,7 @@ static void ClearVramOamPltt_LoadHofPal(void);
static void LoadHofGfx(void); static void LoadHofGfx(void);
static void InitHofBgs(void); static void InitHofBgs(void);
static bool8 CreateHofConfettiSprite(void); static bool8 CreateHofConfettiSprite(void);
static void SetCallback2AfterHallOfFameDisplay(void); static void StartCredits(void);
static bool8 sub_8175024(void); static bool8 sub_8175024(void);
static void Task_Hof_InitMonData(u8 taskId); static void Task_Hof_InitMonData(u8 taskId);
static void Task_Hof_InitTeamSaveData(u8 taskId); static void Task_Hof_InitTeamSaveData(u8 taskId);
@ -774,11 +774,11 @@ static void Task_Hof_HandleExit(u8 taskId)
if (sHofMonPtr != NULL) if (sHofMonPtr != NULL)
FREE_AND_SET_NULL(sHofMonPtr); FREE_AND_SET_NULL(sHofMonPtr);
SetCallback2AfterHallOfFameDisplay(); StartCredits();
} }
} }
static void SetCallback2AfterHallOfFameDisplay(void) static void StartCredits(void)
{ {
SetMainCallback2(CB2_StartCreditsSequence); SetMainCallback2(CB2_StartCreditsSequence);
} }

View File

@ -38,19 +38,19 @@ struct IntroCreditsSpriteMetadata
}; };
static const u16 sGrass_Pal[] = INCBIN_U16("graphics/intro/scene_2/grass.gbapal"); static const u16 sGrass_Pal[] = INCBIN_U16("graphics/intro/scene_2/grass.gbapal");
static const u16 sGrassAfternoon_Pal[] = INCBIN_U16("graphics/intro/scene_2/grass_afternoon.gbapal"); static const u16 sGrassSunset_Pal[] = INCBIN_U16("graphics/intro/scene_2/grass_sunset.gbapal");
static const u16 sGrassNight_Pal[] = INCBIN_U16("graphics/intro/scene_2/grass_night.gbapal"); static const u16 sGrassNight_Pal[] = INCBIN_U16("graphics/intro/scene_2/grass_night.gbapal");
static const u32 sGrass_Gfx[] = INCBIN_U32("graphics/intro/scene_2/grass.4bpp.lz"); static const u32 sGrass_Gfx[] = INCBIN_U32("graphics/intro/scene_2/grass.4bpp.lz");
static const u32 sGrass_Tilemap[] = INCBIN_U32("graphics/intro/scene_2/grass_map.bin.lz"); static const u32 sGrass_Tilemap[] = INCBIN_U32("graphics/intro/scene_2/grass_map.bin.lz");
static const u16 sCloudsBg_Pal[] = INCBIN_U16("graphics/intro/scene_2/clouds_bg.gbapal"); static const u16 sCloudsBg_Pal[] = INCBIN_U16("graphics/intro/scene_2/clouds_bg.gbapal");
static const u16 sCloudsBgAfternoon_Pal[] = INCBIN_U16("graphics/intro/scene_2/clouds_bg_afternoon.gbapal"); static const u16 sCloudsBgSunset_Pal[] = INCBIN_U16("graphics/intro/scene_2/clouds_bg_sunset.gbapal");
static const u32 sCloudsBg_Gfx[] = INCBIN_U32("graphics/intro/scene_2/clouds_bg.4bpp.lz"); static const u32 sCloudsBg_Gfx[] = INCBIN_U32("graphics/intro/scene_2/clouds_bg.4bpp.lz");
static const u32 sCloudsBg_Tilemap[] = INCBIN_U32("graphics/intro/scene_2/clouds_bg_map.bin.lz"); static const u32 sCloudsBg_Tilemap[] = INCBIN_U32("graphics/intro/scene_2/clouds_bg_map.bin.lz");
static const u16 sClouds_Pal[] = INCBIN_U16("graphics/intro/scene_2/clouds.gbapal"); static const u16 sClouds_Pal[] = INCBIN_U16("graphics/intro/scene_2/clouds.gbapal");
static const u16 sCloudsAfternoon_Pal[] = INCBIN_U16("graphics/intro/scene_2/clouds_afternoon.gbapal"); static const u16 sCloudsSunset_Pal[] = INCBIN_U16("graphics/intro/scene_2/clouds_sunset.gbapal");
static const u32 sClouds_Gfx[] = INCBIN_U32("graphics/intro/scene_2/clouds.4bpp.lz"); static const u32 sClouds_Gfx[] = INCBIN_U32("graphics/intro/scene_2/clouds.4bpp.lz");
static const u16 sTrees_Pal[] = INCBIN_U16("graphics/intro/scene_2/trees.gbapal"); static const u16 sTrees_Pal[] = INCBIN_U16("graphics/intro/scene_2/trees.gbapal");
static const u16 sTreesAfternoon_Pal[] = INCBIN_U16("graphics/intro/scene_2/trees_afternoon.gbapal"); static const u16 sTreesSunset_Pal[] = INCBIN_U16("graphics/intro/scene_2/trees_sunset.gbapal");
static const u32 sTrees_Gfx[] = INCBIN_U32("graphics/intro/scene_2/trees.4bpp.lz"); static const u32 sTrees_Gfx[] = INCBIN_U32("graphics/intro/scene_2/trees.4bpp.lz");
static const u32 sTrees_Tilemap[] = INCBIN_U32("graphics/intro/scene_2/trees_map.bin.lz"); static const u32 sTrees_Tilemap[] = INCBIN_U32("graphics/intro/scene_2/trees_map.bin.lz");
static const u16 sTreesSmall_Pal[] = INCBIN_U16("graphics/intro/scene_2/trees_small.gbapal"); static const u16 sTreesSmall_Pal[] = INCBIN_U16("graphics/intro/scene_2/trees_small.gbapal");
@ -97,25 +97,25 @@ static const struct CompressedSpriteSheet sSpriteSheet_Clouds[] =
{} {}
}; };
static const union AnimCmd gUnknown_085F5074[] = static const union AnimCmd sAnim_Cloud_Largest[] =
{ {
ANIMCMD_FRAME( 0, 30), ANIMCMD_FRAME( 0, 30),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_085F507C[] = static const union AnimCmd sAnim_Cloud_Large[] =
{ {
ANIMCMD_FRAME(16, 30), ANIMCMD_FRAME(16, 30),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_085F5084[] = static const union AnimCmd sAnim_Cloud_Small[] =
{ {
ANIMCMD_FRAME(20, 30), ANIMCMD_FRAME(20, 30),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_085F508C[] = static const union AnimCmd sAnim_Cloud_Smallest[] =
{ {
ANIMCMD_FRAME(22, 30), ANIMCMD_FRAME(22, 30),
ANIMCMD_END ANIMCMD_END
@ -123,10 +123,10 @@ static const union AnimCmd gUnknown_085F508C[] =
static const union AnimCmd *const sAnims_Clouds[] = static const union AnimCmd *const sAnims_Clouds[] =
{ {
gUnknown_085F5074, sAnim_Cloud_Largest,
gUnknown_085F507C, sAnim_Cloud_Large,
gUnknown_085F5084, sAnim_Cloud_Small,
gUnknown_085F508C sAnim_Cloud_Smallest
}; };
static const struct IntroCreditsSpriteMetadata sSpriteMetadata_Clouds[] = static const struct IntroCreditsSpriteMetadata sSpriteMetadata_Clouds[] =
@ -224,29 +224,29 @@ static const struct CompressedSpriteSheet sSpriteSheet_TreesSmall[] =
{} {}
}; };
static const union AnimCmd gUnknown_085F50FC[] = static const union AnimCmd sAnim_Trees_0[] =
{ {
ANIMCMD_FRAME( 0, 30), ANIMCMD_FRAME( 0, 30),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_085F5104[] = static const union AnimCmd sAnim_Trees_1[] =
{ {
ANIMCMD_FRAME(16, 30), ANIMCMD_FRAME(16, 30),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_085F510C[] = static const union AnimCmd sAnim_Trees_2[] =
{ {
ANIMCMD_FRAME(24, 30), ANIMCMD_FRAME(24, 30),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd *const sAnims_TreesSmall[] = static const union AnimCmd *const sAnims_Trees[] =
{ {
gUnknown_085F50FC, sAnim_Trees_0,
gUnknown_085F5104, sAnim_Trees_1,
gUnknown_085F510C sAnim_Trees_2
}; };
static const struct IntroCreditsSpriteMetadata sSpriteMetadata_Trees[] = static const struct IntroCreditsSpriteMetadata sSpriteMetadata_Trees[] =
@ -726,12 +726,12 @@ static void CreateTreeSprites(void);
static void CreateHouseSprites(void); static void CreateHouseSprites(void);
static void Task_BicycleBgAnimation(u8); static void Task_BicycleBgAnimation(u8);
void LoadIntroPart2Graphics(u8 scene) void LoadIntroPart2Graphics(u8 scenery)
{ {
LZ77UnCompVram(sGrass_Gfx, (void *)(BG_CHAR_ADDR(1))); LZ77UnCompVram(sGrass_Gfx, (void *)(BG_CHAR_ADDR(1)));
LZ77UnCompVram(sGrass_Tilemap, (void *)(BG_SCREEN_ADDR(15))); LZ77UnCompVram(sGrass_Tilemap, (void *)(BG_SCREEN_ADDR(15)));
LoadPalette(&sGrass_Pal, 240, sizeof(sGrass_Pal)); LoadPalette(&sGrass_Pal, 240, sizeof(sGrass_Pal));
switch (scene) switch (scenery)
{ {
case 0: case 0:
default: default:
@ -758,10 +758,10 @@ void LoadIntroPart2Graphics(u8 scene)
} }
// Note: This is only called with a=1. // Note: This is only called with a=1.
void SetIntroPart2BgCnt(u8 scene) void SetIntroPart2BgCnt(u8 scenery)
{ {
// Only called with scene = 1 // Only called with scenery = 1
switch (scene) switch (scenery)
{ {
default: default:
case 0: case 0:
@ -842,7 +842,7 @@ void LoadCreditsSceneGraphics(u8 scene)
LZ77UnCompVram(sGrass_Tilemap, (void *)(BG_SCREEN_ADDR(15))); LZ77UnCompVram(sGrass_Tilemap, (void *)(BG_SCREEN_ADDR(15)));
switch (scene) switch (scene)
{ {
case 0: case SCENE_OCEAN_MORNING:
default: default:
LoadPalette(&sGrass_Pal, 240, sizeof(sGrass_Pal)); LoadPalette(&sGrass_Pal, 240, sizeof(sGrass_Pal));
LZ77UnCompVram(sCloudsBg_Gfx, (void *)(VRAM)); LZ77UnCompVram(sCloudsBg_Gfx, (void *)(VRAM));
@ -853,27 +853,27 @@ void LoadCreditsSceneGraphics(u8 scene)
LoadPalette(&sClouds_Pal, 256, sizeof(sClouds_Pal)); LoadPalette(&sClouds_Pal, 256, sizeof(sClouds_Pal));
CreateCloudSprites(); CreateCloudSprites();
break; break;
case 1: case SCENE_OCEAN_SUNSET:
LoadPalette(&sGrassAfternoon_Pal, 240, sizeof(sGrassAfternoon_Pal)); LoadPalette(&sGrassSunset_Pal, 240, sizeof(sGrassSunset_Pal));
LZ77UnCompVram(sCloudsBg_Gfx, (void *)(VRAM)); LZ77UnCompVram(sCloudsBg_Gfx, (void *)(VRAM));
LZ77UnCompVram(sCloudsBg_Tilemap, (void *)(BG_SCREEN_ADDR(6))); LZ77UnCompVram(sCloudsBg_Tilemap, (void *)(BG_SCREEN_ADDR(6)));
LoadPalette(&sCloudsBgAfternoon_Pal, 0, sizeof(sCloudsBgAfternoon_Pal)); LoadPalette(&sCloudsBgSunset_Pal, 0, sizeof(sCloudsBgSunset_Pal));
LoadCompressedSpriteSheet(sSpriteSheet_Clouds); LoadCompressedSpriteSheet(sSpriteSheet_Clouds);
LZ77UnCompVram(sClouds_Gfx, (void *)(OBJ_VRAM0)); LZ77UnCompVram(sClouds_Gfx, (void *)(OBJ_VRAM0));
LoadPalette(&sCloudsAfternoon_Pal, 256, sizeof(sCloudsAfternoon_Pal)); LoadPalette(&sCloudsSunset_Pal, 256, sizeof(sCloudsSunset_Pal));
CreateCloudSprites(); CreateCloudSprites();
break; break;
case 2: case SCENE_FOREST_RIVAL_ARRIVE:
case 3: case SCENE_FOREST_CATCH_RIVAL:
LoadPalette(&sGrassAfternoon_Pal, 240, sizeof(sGrassAfternoon_Pal)); LoadPalette(&sGrassSunset_Pal, 240, sizeof(sGrassSunset_Pal));
LZ77UnCompVram(sTrees_Gfx, (void *)(VRAM)); LZ77UnCompVram(sTrees_Gfx, (void *)(VRAM));
LZ77UnCompVram(sTrees_Tilemap, (void *)(BG_SCREEN_ADDR(6))); LZ77UnCompVram(sTrees_Tilemap, (void *)(BG_SCREEN_ADDR(6)));
LoadPalette(&sTreesAfternoon_Pal, 0, sizeof(sTreesAfternoon_Pal)); LoadPalette(&sTreesSunset_Pal, 0, sizeof(sTreesSunset_Pal));
LoadCompressedSpriteSheet(sSpriteSheet_TreesSmall); LoadCompressedSpriteSheet(sSpriteSheet_TreesSmall);
LoadPalette(&sTreesAfternoon_Pal, 256, sizeof(sTreesAfternoon_Pal)); LoadPalette(&sTreesSunset_Pal, 256, sizeof(sTreesSunset_Pal));
CreateTreeSprites(); CreateTreeSprites();
break; break;
case 4: case SCENE_CITY_NIGHT:
LoadPalette(&sGrassNight_Pal, 240, sizeof(sGrassNight_Pal)); LoadPalette(&sGrassNight_Pal, 240, sizeof(sGrassNight_Pal));
LZ77UnCompVram(sHouses_Gfx, (void *)(VRAM)); LZ77UnCompVram(sHouses_Gfx, (void *)(VRAM));
LZ77UnCompVram(sHouses_Tilemap, (void *)(BG_SCREEN_ADDR(6))); LZ77UnCompVram(sHouses_Tilemap, (void *)(BG_SCREEN_ADDR(6)));
@ -987,11 +987,11 @@ static void Task_BicycleBgAnimation(u8 taskId)
} }
} }
void CycleSceneryPalette(u8 scene) void CycleSceneryPalette(u8 mode)
{ {
u16 x; u16 x;
u16 y; u16 y;
switch (scene) switch (mode)
{ {
case 0: case 0:
default: default:
@ -1031,6 +1031,10 @@ void CycleSceneryPalette(u8 scene)
} }
} }
#define tHasVerticalMove data[0]
#define tXOffset data[1]
#define tXPos data[2]
static void SpriteCB_MovingScenery(struct Sprite *sprite) static void SpriteCB_MovingScenery(struct Sprite *sprite)
{ {
s32 x; s32 x;
@ -1044,12 +1048,12 @@ static void SpriteCB_MovingScenery(struct Sprite *sprite)
DestroySprite(sprite); DestroySprite(sprite);
break; break;
case INTROCRED_SCENERY_NORMAL: case INTROCRED_SCENERY_NORMAL:
x = ((sprite->pos1.x << 16) | (u16)sprite->data[2]) + (u16)sprite->data[1]; x = ((sprite->pos1.x << 16) | (u16)sprite->tXPos) + (u16)sprite->tXOffset;
sprite->pos1.x = x >> 16; sprite->pos1.x = x >> 16;
sprite->data[2] = x; sprite->tXPos = x;
if (sprite->pos1.x > 0xFF) if (sprite->pos1.x > 255)
sprite->pos1.x = -0x20; sprite->pos1.x = -32;
if (sprite->data[0]) if (sprite->tHasVerticalMove)
sprite->pos2.y = -(gIntroCredits_MovingSceneryVBase + gIntroCredits_MovingSceneryVOffset); sprite->pos2.y = -(gIntroCredits_MovingSceneryVBase + gIntroCredits_MovingSceneryVOffset);
else else
sprite->pos2.y = -gIntroCredits_MovingSceneryVBase; sprite->pos2.y = -gIntroCredits_MovingSceneryVBase;
@ -1058,7 +1062,7 @@ static void SpriteCB_MovingScenery(struct Sprite *sprite)
} }
} }
static void CreateMovingScenerySprites(bool8 a, const struct IntroCreditsSpriteMetadata *metadata, const union AnimCmd *const *anims, u8 numSprites) static void CreateMovingScenerySprites(bool8 hasVerticalMove, const struct IntroCreditsSpriteMetadata *metadata, const union AnimCmd *const *anims, u8 numSprites)
{ {
u8 i; u8 i;
@ -1072,12 +1076,16 @@ static void CreateMovingScenerySprites(bool8 a, const struct IntroCreditsSpriteM
gSprites[sprite].oam.paletteNum = 0; gSprites[sprite].oam.paletteNum = 0;
gSprites[sprite].anims = anims; gSprites[sprite].anims = anims;
StartSpriteAnim(&gSprites[sprite], metadata[i].animNum); StartSpriteAnim(&gSprites[sprite], metadata[i].animNum);
gSprites[sprite].data[0] = a; gSprites[sprite].tHasVerticalMove = hasVerticalMove;
gSprites[sprite].data[1] = metadata[i].xOff; gSprites[sprite].tXOffset = metadata[i].xOff;
gSprites[sprite].data[2] = 0; gSprites[sprite].tXPos = 0;
} }
} }
#undef tHasVerticalMove
#undef tXOffset
#undef tXPos
static void CreateCloudSprites(void) static void CreateCloudSprites(void)
{ {
CreateMovingScenerySprites(FALSE, sSpriteMetadata_Clouds, sAnims_Clouds, 9); CreateMovingScenerySprites(FALSE, sSpriteMetadata_Clouds, sAnims_Clouds, 9);
@ -1085,7 +1093,7 @@ static void CreateCloudSprites(void)
static void CreateTreeSprites(void) static void CreateTreeSprites(void)
{ {
CreateMovingScenerySprites(TRUE, sSpriteMetadata_Trees, sAnims_TreesSmall, 12); CreateMovingScenerySprites(TRUE, sSpriteMetadata_Trees, sAnims_Trees, 12);
} }
static void CreateHouseSprites(void) static void CreateHouseSprites(void)