address review comments, part 1

This commit is contained in:
PikalaxALT 2024-03-19 07:37:08 -04:00
parent 8206b746d1
commit 450a1c8042
No known key found for this signature in database
GPG Key ID: C7E3D40F3BAC7AEB
7 changed files with 261 additions and 236 deletions

View File

@ -8,6 +8,12 @@
#include "unk_02023694.h"
#include "unk_02014DA0.h"
enum IntroMovieSceneState {
INTRO_MOVIE_SCENE_INIT,
INTRO_MOVIE_SCENE_RUN,
INTRO_MOVIE_SCENE_CLEANUP,
};
typedef struct IntroMovieScene1Data {
u8 state;
u8 needFreeGfx;

View File

@ -57,51 +57,51 @@ typedef struct UnkImageStruct {
int vramTransfer;
} UnkImageStruct;
void sub_02023EA4(Sprite *, int);
void sub_02023EA4(Sprite *sprite, int a1);
struct Sprite *CreateSprite(const struct SpriteTemplate *template);
void Set2dSpriteAnimActiveFlag(Sprite *, int);
void Set2dSpriteAnimActiveFlag(Sprite *sprite, int a1);
SpriteList *SpriteList_Create(struct SpriteListParam *param);
void SpriteList_Delete(SpriteList *);
void sub_0202457C(SpriteList *);
void Sprite_Delete(Sprite *);
void Sprite_SetMatrix(Sprite *, VecFx32 *);
NNSG2dImagePaletteProxy *sub_02024B34(Sprite *);
NNS_G2D_VRAM_TYPE Sprite_GetVramType(Sprite*);
void sub_0202487C(Sprite*, u8);
void Set2dSpriteVisibleFlag(Sprite *, int);
void sub_02024868(Sprite *, int);
VecFx32 *Sprite_GetMatrixPtr(Sprite *);
VecFx32* sub_020248B0(Sprite*);
void sub_020247F4(Sprite*, VecFx32*);
void sub_02024818(Sprite*, u32);
u16 sub_020248B4(Sprite*);
void sub_02024890(Sprite*, u8);
void sub_020247E4(Sprite*, VecFx32*);
void sub_02024B38(Sprite*, BOOL);
void sub_02024B78(Sprite* sprite, GXOamMode mode);
GXOamMode sub_02024BAC(Sprite* sprite);
u32 sub_02024C9C(Sprite*);
u32 Get2dSpriteAnimSeqNo(Sprite*);
void Set2dSpriteAnimSeqNo(Sprite *, int);
void TryChange2dSpriteAnimSeqNo(Sprite *, int);
u16 Get2dSpriteCurrentAnimSeqNo(Sprite *);
void Sprite_ResetAnimCtrlState(Sprite*);
void Sprite_SetAnimCtrlCurrentFrame(Sprite*, u16);
u16 Sprite_GetAnimCtrlCurrentFrame(Sprite*);
BOOL Get2dSpriteVisibleFlag(Sprite*);
void Sprite_SetPalOffset(Sprite*, u8);
void Sprite_TickCellOrMulticellAnimation(Sprite*, fx32);
void Sprite_SetPalIndex(Sprite*, int);
void sub_02024A48(Sprite*, int);
int Sprite_GetPalIndex(Sprite*);
void sub_02024AA8(void *, s32);
u8 Sprite_GetPalOffset(Sprite*);
void Sprite_SetPriority(Sprite*, u8);
u8 Sprite_GetPriority(Sprite*);
void Sprite_SetDrawPriority(Sprite*, u16);
u16 Sprite_GetDrawPriority(Sprite*);
NNSG2dImageProxy *sub_02024B1C(Sprite *);
int Sprite_IsCellAnimationRunning(Sprite *);
NNSG2dCellAnimation *sub_02024CB8(Sprite *a0);
void SpriteList_Delete(SpriteList *spriteList);
void sub_0202457C(SpriteList *spriteList);
void Sprite_Delete(Sprite *sprite);
void Sprite_SetMatrix(Sprite *sprite, VecFx32 *vec);
NNSG2dImagePaletteProxy *sub_02024B34(Sprite *sprite);
NNS_G2D_VRAM_TYPE Sprite_GetVramType(Sprite *sprite);
void sub_0202487C(Sprite *sprite, u8 a1);
void Set2dSpriteVisibleFlag(Sprite *sprite, int a1);
void sub_02024868(Sprite *sprite, int a1);
VecFx32 *Sprite_GetMatrixPtr(Sprite *sprite);
VecFx32* sub_020248B0(Sprite *sprite);
void sub_020247F4(Sprite *sprite, VecFx32 *vec);
void sub_02024818(Sprite *sprite, u32 a1);
u16 sub_020248B4(Sprite *sprite);
void sub_02024890(Sprite *sprite, u8 a1);
void sub_020247E4(Sprite *sprite, VecFx32 *vec);
void sub_02024B38(Sprite *sprite, BOOL a1);
void sub_02024B78(Sprite *sprite, GXOamMode mode);
GXOamMode sub_02024BAC(Sprite *sprite);
u32 sub_02024C9C(Sprite *sprite);
u32 Get2dSpriteAnimSeqNo(Sprite *sprite);
void Set2dSpriteAnimSeqNo(Sprite *sprite, int a1);
void TryChange2dSpriteAnimSeqNo(Sprite *sprite, int a1);
u16 Get2dSpriteCurrentAnimSeqNo(Sprite *sprite);
void Sprite_ResetAnimCtrlState(Sprite *sprite);
void Sprite_SetAnimCtrlCurrentFrame(Sprite *sprite, u16 a1);
u16 Sprite_GetAnimCtrlCurrentFrame(Sprite *sprite);
BOOL Get2dSpriteVisibleFlag(Sprite *sprite);
void Sprite_SetPalOffset(Sprite *sprite, u8 a1);
void Sprite_TickCellOrMulticellAnimation(Sprite *sprite, fx32 a1);
void Sprite_SetPalIndex(Sprite *sprite, int a1);
void sub_02024A48(Sprite *sprite, int a1);
int Sprite_GetPalIndex(Sprite *sprite);
void sub_02024AA8(Sprite *sprite, s32 a1);
u8 Sprite_GetPalOffset(Sprite *sprite);
void Sprite_SetPriority(Sprite *sprite, u8 a1);
u8 Sprite_GetPriority(Sprite *sprite);
void Sprite_SetDrawPriority(Sprite *sprite, u16 a1);
u16 Sprite_GetDrawPriority(Sprite *sprite);
NNSG2dImageProxy *sub_02024B1C(Sprite *sprite);
int Sprite_IsCellAnimationRunning(Sprite *sprite);
NNSG2dCellAnimation *sub_02024CB8(Sprite *sprite);
#endif //POKEHEARTGOLD_UNK_02023694_H

View File

@ -42,7 +42,7 @@ static inline void G2_SetWndOutsidePlane(int wnd, BOOL effect) {
tmp = ((reg_G2_WINOUT & ~REG_G2_WINOUT_WINOUT_MASK) | ((u32)wnd << REG_G2_WINOUT_WINOUT_SHIFT));
if (effect) {
tmp |= (0x20 << REG_G2_WINOUT_WINOUT_SHIFT); // EFCT
tmp |= (0x20 << REG_G2_WINOUT_WINOUT_SHIFT);
}
reg_G2_WINOUT = (u16)tmp;
@ -134,7 +134,7 @@ static inline void G2_SetWnd0InsidePlane(int wnd, BOOL effect) {
tmp = ((reg_G2_WININ & ~REG_G2_WININ_WIN0IN_MASK) | ((u32)wnd << REG_G2_WININ_WIN0IN_SHIFT));
if (effect) {
tmp |= (0x20 << REG_G2_WININ_WIN0IN_SHIFT); // EFCT
tmp |= (0x20 << REG_G2_WININ_WIN0IN_SHIFT);
}
reg_G2_WININ = (u16)tmp;
@ -146,7 +146,7 @@ static inline void G2_SetWnd1InsidePlane(int wnd, BOOL effect) {
tmp = ((reg_G2_WININ & ~REG_G2_WININ_WIN1IN_MASK) | ((u32)wnd << REG_G2_WININ_WIN1IN_SHIFT));
if (effect) {
tmp |= (0x20 << REG_G2_WININ_WIN1IN_SHIFT); // EFCT
tmp |= (0x20 << REG_G2_WININ_WIN1IN_SHIFT);
}
reg_G2_WININ = (u16)tmp;
@ -159,7 +159,7 @@ static inline void G2S_SetWnd0InsidePlane(int wnd, BOOL effect) {
((u32)wnd << REG_G2S_DB_WININ_WIN0IN_SHIFT));
if (effect) {
tmp |= (0x20 << REG_G2S_DB_WININ_WIN0IN_SHIFT); // EFCT
tmp |= (0x20 << REG_G2S_DB_WININ_WIN0IN_SHIFT);
}
reg_G2S_DB_WININ = (u16)tmp;
@ -171,7 +171,7 @@ static inline void G2S_SetWnd1InsidePlane(int wnd, BOOL effect) {
tmp = ((reg_G2S_DB_WININ & ~REG_G2S_DB_WININ_WIN1IN_MASK) | ((u32)wnd << REG_G2S_DB_WININ_WIN1IN_SHIFT));
if (effect) {
tmp |= (0x20 << REG_G2S_DB_WININ_WIN1IN_SHIFT); // EFCT
tmp |= (0x20 << REG_G2S_DB_WININ_WIN1IN_SHIFT);
}
reg_G2S_DB_WININ = (u16)tmp;
@ -184,7 +184,7 @@ static inline void G2S_SetWndOutsidePlane(int wnd, BOOL effect) {
((u32)wnd << REG_G2S_DB_WINOUT_WINOUT_SHIFT));
if (effect) {
tmp |= (0x20 << REG_G2S_DB_WINOUT_WINOUT_SHIFT); // EFCT
tmp |= (0x20 << REG_G2S_DB_WINOUT_WINOUT_SHIFT);
}
reg_G2S_DB_WINOUT = (u16)tmp;

View File

@ -17,6 +17,12 @@
#include "unk_02022588.h"
#include "unk_02023694.h"
enum IntroMovieOverlayState {
INTRO_MOVIE_INIT,
INTRO_MOVIE_RUN,
INTRO_MOVIE_DONE
};
BOOL IntroMovie_Init(OVY_MANAGER *man, int *state);
BOOL IntroMovie_Main(OVY_MANAGER *man, int *state);
BOOL IntroMovie_Exit(OVY_MANAGER *man, int *state);
@ -77,12 +83,12 @@ BOOL IntroMovie_Main(OVY_MANAGER *man, int *state) {
}
switch (*state) {
case 0:
case INTRO_MOVIE_INIT:
data->scene1Data.skipAllowedPtr = &data->skipAllowed;
sub_02004EC4(2, SEQ_GS_TITLE, 1);
++(*state);
break;
case 1:
case INTRO_MOVIE_RUN:
if (sIntroMovieSceneFuncs[data->sceneNumber](data, IntroMovie_GetSceneDataPtr(data))) {
++data->sceneNumber;
data->sceneStep = 0;
@ -94,7 +100,7 @@ BOOL IntroMovie_Main(OVY_MANAGER *man, int *state) {
++data->sceneTimer;
}
break;
case 2:
case INTRO_MOVIE_DONE:
return TRUE;
default:
GF_ASSERT(FALSE);

View File

@ -9,6 +9,20 @@
#include "system.h"
#include "demo/opening/gs_opening.naix"
enum IntroScene1State {
INTRO_SCENE1_APPEAR_COPYRIGHT,
INTRO_SCENE1_WAIT_COPYRIGHT,
INTRO_SCENE1_WAIT_FADEOUT_COPYRIGHT,
INTRO_SCENE1_WAIT_APPEAR_GAMEFREAK,
INTRO_SCENE1_WAIT_GAMEFREAK,
INTRO_SCENE1_APPEAR_BG_IMAGE,
INTRO_SCENE1_WAIT_START_BG_SCROLL,
INTRO_SCENE1_WAIT_BG_SCROLL,
INTRO_SCENE1_WAIT_APPEAR_BIRD,
INTRO_SCENE1_DELAY90_START_FADEOUT,
INTRO_SCENE1_WAIT_FADEOUT,
};
// Copyright, Gamefreak logo, and sunrise
void IntroMovie_Scene1_VBlankCB(void *pVoid);
@ -32,16 +46,16 @@ BOOL IntroMovie_Scene1(IntroMovieOvyData *data, void *pVoid) {
}
switch (sceneData->state) {
case 0:
case INTRO_MOVIE_SCENE_INIT:
IntroMovie_Scene1_Init(data, sceneData);
++sceneData->state;
break;
case 1:
case INTRO_MOVIE_SCENE_RUN:
if (IntroMovie_Scene1_Main(data, sceneData, IntroMovie_GetTotalFrameCount(data))) {
++sceneData->state;
}
break;
case 2:
case INTRO_MOVIE_SCENE_CLEANUP:
IntroMovie_Scene1_Exit(data, sceneData);
return TRUE;
}
@ -77,25 +91,25 @@ BOOL IntroMovie_Scene1_Main(IntroMovieOvyData *data, IntroMovieScene1Data *scene
IntroMovieBgLinearAnims *bgAnimCnt = IntroMovie_GetBgLinearAnimsController(data);
u8 timer = IntroMovie_GetSceneStepTimer(data);
switch (IntroMovie_GetSceneStep(data)) {
case 0: // Copyright appear
case INTRO_SCENE1_APPEAR_COPYRIGHT: // Copyright appear
BgSetPosTextAndCommit(bgConfig, GF_BG_LYR_MAIN_0, BG_POS_OP_SET_Y, 0x80);
GfGfx_EngineATogglePlanes(GX_PLANEMASK_BG0, GF_PLANE_TOGGLE_ON);
GfGfx_EngineBTogglePlanes(GX_PLANEMASK_BG0, GF_PLANE_TOGGLE_ON);
IntroMovie_AdvanceSceneStep(data);
break;
case 1: // Wait 30 frames then start fade out
case INTRO_SCENE1_WAIT_COPYRIGHT: // Wait 30 frames then start fade out
if (timer >= 30) {
IntroMovie_StartBlendFadeEffect(&bgAnimCnt->blend[0], 1, 0x20, 60, 1, 0);
IntroMovie_StartBlendFadeEffect(&bgAnimCnt->blend[1], 1, 0x20, 60, 1, 1);
IntroMovie_AdvanceSceneStep(data);
}
break;
case 2: // Wait for fade out (60 frames)
case INTRO_SCENE1_WAIT_FADEOUT_COPYRIGHT: // Wait for fade out (60 frames)
if (bgAnimCnt->blend[0].finished && bgAnimCnt->blend[1].finished) {
IntroMovie_AdvanceSceneStep(data);
}
break;
case 3: // Delay 20 frames then appear GameFreak logo
case INTRO_SCENE1_WAIT_APPEAR_GAMEFREAK: // Delay 20 frames then appear GameFreak logo
if (timer >= 20) {
*sceneData->skipAllowedPtr = TRUE;
GfGfx_EngineBTogglePlanes(GX_PLANEMASK_BG0, GF_PLANE_TOGGLE_OFF);
@ -105,18 +119,18 @@ BOOL IntroMovie_Scene1_Main(IntroMovieOvyData *data, IntroMovieScene1Data *scene
IntroMovie_AdvanceSceneStep(data);
}
break;
case 4: // Delay 110 frames
case INTRO_SCENE1_WAIT_GAMEFREAK: // Delay 110 frames
if (timer >= 110) {
IntroMovie_AdvanceSceneStep(data);
}
break;
case 5: // Appear sunrise or sunset background
case INTRO_SCENE1_APPEAR_BG_IMAGE: // Appear sunrise or sunset background
GfGfx_EngineATogglePlanes((GXPlaneMask)(GX_PLANEMASK_BG1 | GX_PLANEMASK_BG2 | GX_PLANEMASK_BG3), GF_PLANE_TOGGLE_ON);
GfGfx_EngineBTogglePlanes(GX_PLANEMASK_BG3, GF_PLANE_TOGGLE_ON);
Set2dSpriteVisibleFlag(sceneData->sunSprite, TRUE);
IntroMovie_AdvanceSceneStep(data);
break;
case 6: // Start scrolling background
case INTRO_SCENE1_WAIT_START_BG_SCROLL: // Start scrolling background
if (timer >= 1) {
IntroMovie_StartBlendFadeEffect(&bgAnimCnt->blend[0], 1, 0x1E, 0x50, 1, 1);
IntroMovie_StartBlendFadeEffect(&bgAnimCnt->blend[1], 2, 0x1E, 0x50, 1, 0);
@ -126,24 +140,24 @@ BOOL IntroMovie_Scene1_Main(IntroMovieOvyData *data, IntroMovieScene1Data *scene
IntroMovie_AdvanceSceneStep(data);
}
break;
case 7: // Wait blend and scroll effects (240 frames)
case INTRO_SCENE1_WAIT_BG_SCROLL: // Wait blend and scroll effects (240 frames)
if (bgAnimCnt->blend[0].finished && bgAnimCnt->blend[1].finished && IntroMovie_WaitBgScrollAnim(bgAnimCnt->scroll, GF_BG_LYR_MAIN_1) && IntroMovie_WaitBgScrollAnim(bgAnimCnt->scroll, GF_BG_LYR_MAIN_2)) {
IntroMovie_AdvanceSceneStep(data);
}
break;
case 8: // Delay 128 frames then start box legendary anim
case INTRO_SCENE1_WAIT_APPEAR_BIRD: // Delay 128 frames then start box legendary anim
if (timer >= 128) {
IntroMovie_StartSpriteAnimAndMakeVisible(sceneData->birdSprite, TRUE);
IntroMovie_AdvanceSceneStep(data);
}
break;
case 9: // Run anim 90 frames then start fade to white
case INTRO_SCENE1_DELAY90_START_FADEOUT: // Run anim 90 frames then start fade to white
if (timer >= 90) {
BeginNormalPaletteFade(0, 0, 0, RGB_WHITE, 65, 1, HEAP_ID_INTRO_MOVIE);
IntroMovie_AdvanceSceneStep(data);
}
break;
case 10: // Wait fade to white (65 frames)
case INTRO_SCENE1_WAIT_FADEOUT: // Wait fade to white (65 frames)
if (IsPaletteFadeFinished()) {
return TRUE;
}
@ -183,145 +197,137 @@ void IntroMovie_Scene1_InitBgs(IntroMovieOvyData *data) {
}
{
BgTemplate bgTemplate = {
0, 0,
GF_BG_BUF_SIZE_256x256_4BPP,
0x00000000,
GF_BG_SCR_SIZE_256x256,
GX_BG_COLORMODE_16,
0,
1,
0,
0,
0,
0,
0
BgTemplate bgTemplate = {
.x = 0, .y = 0,
.bufferSize = GF_BG_BUF_SIZE_256x256_4BPP,
.baseTile = 0x00000000,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x0000,
.charBase = GX_BG_CHARBASE_0x04000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 0,
.areaOver = GX_BG_AREAOVER_XLU,
.mosaic = FALSE
};
InitBgFromTemplate(bgConfig, GF_BG_LYR_SUB_0, &bgTemplate, 0);
}
{
BgTemplate bgTemplate = {
0, 0,
GF_BG_BUF_SIZE_256x256_4BPP,
0x00000000,
GF_BG_SCR_SIZE_256x256,
GX_BG_COLORMODE_16,
1,
1,
0,
1,
0,
0,
0
BgTemplate bgTemplate = {
.x = 0, .y = 0,
.bufferSize = GF_BG_BUF_SIZE_256x256_4BPP,
.baseTile = 0x00000000,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x0800,
.charBase = GX_BG_CHARBASE_0x04000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 1,
.areaOver = GX_BG_AREAOVER_XLU,
.mosaic = FALSE
};
InitBgFromTemplate(bgConfig, GF_BG_LYR_SUB_1, &bgTemplate, 0);
}
{
BgTemplate bgTemplate = {
0, 0,
GF_BG_BUF_SIZE_256x256_4BPP,
0x00000000,
GF_BG_SCR_SIZE_256x256,
GX_BG_COLORMODE_16,
2,
3,
0,
2,
0,
0,
0
BgTemplate bgTemplate = {
.x = 0, .y = 0,
.bufferSize = GF_BG_BUF_SIZE_256x256_4BPP,
.baseTile = 0x00000000,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x1000,
.charBase = GX_BG_CHARBASE_0x0c000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 2,
.areaOver = GX_BG_AREAOVER_XLU,
.mosaic = FALSE
};
InitBgFromTemplate(bgConfig, GF_BG_LYR_SUB_2, &bgTemplate, 0);
}
{
BgTemplate bgTemplate = {
0, 0,
GF_BG_BUF_SIZE_256x256_4BPP,
0x00000000,
GF_BG_SCR_SIZE_256x256,
GX_BG_COLORMODE_16,
3,
4,
0,
3,
0,
0,
0
BgTemplate bgTemplate = {
.x = 0, .y = 0,
.bufferSize = GF_BG_BUF_SIZE_256x256_4BPP,
.baseTile = 0x00000000,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x1800,
.charBase = GX_BG_CHARBASE_0x10000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 3,
.areaOver = GX_BG_AREAOVER_XLU,
.mosaic = FALSE
};
InitBgFromTemplate(bgConfig, GF_BG_LYR_SUB_3, &bgTemplate, 0);
}
{
BgTemplate bgTemplate = {
0, 0,
GF_BG_BUF_SIZE_256x256_4BPP,
0x00000000,
GF_BG_SCR_SIZE_256x256,
GX_BG_COLORMODE_16,
0,
1,
0,
0,
0,
0,
0
BgTemplate bgTemplate = {
.x = 0, .y = 0,
.bufferSize = GF_BG_BUF_SIZE_256x256_4BPP,
.baseTile = 0x00000000,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x0000,
.charBase = GX_BG_CHARBASE_0x04000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 0,
.areaOver = GX_BG_AREAOVER_XLU,
.mosaic = FALSE
};
InitBgFromTemplate(bgConfig, GF_BG_LYR_MAIN_0, &bgTemplate, 0);
}
{
BgTemplate bgTemplate = {
0, 0,
GF_BG_BUF_SIZE_256x256_4BPP,
0x00000000,
GF_BG_SCR_SIZE_256x256,
GX_BG_COLORMODE_16,
1,
2,
0,
1,
0,
0,
0
BgTemplate bgTemplate = {
.x = 0, .y = 0,
.bufferSize = GF_BG_BUF_SIZE_256x256_4BPP,
.baseTile = 0x00000000,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x0800,
.charBase = GX_BG_CHARBASE_0x08000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 1,
.areaOver = GX_BG_AREAOVER_XLU,
.mosaic = FALSE
};
InitBgFromTemplate(bgConfig, GF_BG_LYR_MAIN_1, &bgTemplate, 0);
}
{
BgTemplate bgTemplate = {
0, 0,
GF_BG_BUF_SIZE_256x256_4BPP,
0x00000000,
GF_BG_SCR_SIZE_256x256,
GX_BG_COLORMODE_16,
2,
2,
0,
2,
0,
0,
0
BgTemplate bgTemplate = {
.x = 0, .y = 0,
.bufferSize = GF_BG_BUF_SIZE_256x256_4BPP,
.baseTile = 0x00000000,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x1000,
.charBase = GX_BG_CHARBASE_0x08000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 2,
.areaOver = GX_BG_AREAOVER_XLU,
.mosaic = FALSE
};
InitBgFromTemplate(bgConfig, GF_BG_LYR_MAIN_2, &bgTemplate, 0);
}
{
BgTemplate bgTemplate = {
0, 0,
GF_BG_BUF_SIZE_256x256_4BPP,
0x00000000,
GF_BG_SCR_SIZE_256x256,
GX_BG_COLORMODE_16,
3,
2,
0,
3,
0,
0,
0
BgTemplate bgTemplate = {
.x = 0, .y = 0,
.bufferSize = GF_BG_BUF_SIZE_256x256_4BPP,
.baseTile = 0x00000000,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x1800,
.charBase = GX_BG_CHARBASE_0x08000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 3,
.areaOver = GX_BG_AREAOVER_XLU,
.mosaic = FALSE
};
InitBgFromTemplate(bgConfig, GF_BG_LYR_MAIN_3, &bgTemplate, 0);
}

View File

@ -11,6 +11,17 @@
#include "unk_02022588.h"
#include "demo/opening/gs_opening.naix"
enum IntroScene2State {
INTRO_SCENE2_START_FLYIN,
INTRO_SCENE2_FLYIN,
INTRO_SCENE2_START_SLOW_PAN_ETHAN,
INTRO_SCENE2_SLOW_PAN_ETHAN,
INTRO_SCENE2_FAST_PAN_TO_LYRA,
INTRO_SCENE2_SLOW_PAN_LYRA,
INTRO_SCENE2_CIRCLE_WIPE_OUT,
INTRO_SCENE2_END,
};
void IntroMovie_Scene2_VBlankCB(void *pVoid);
void IntroMovie_Scene2_Init(IntroMovieOvyData *data, IntroMovieScene2Data *sceneData);
BOOL IntroMovie_Scene2_Main(IntroMovieOvyData *data, IntroMovieScene2Data *sceneData, int a2);
@ -48,16 +59,16 @@ BOOL IntroMovie_Scene2(IntroMovieOvyData *data, void *pVoid) {
}
switch (sceneData->state) {
case 0:
case INTRO_MOVIE_SCENE_INIT:
IntroMovie_Scene2_Init(data, sceneData);
++sceneData->state;
break;
case 1:
case INTRO_MOVIE_SCENE_RUN:
if (IntroMovie_Scene2_Main(data, sceneData, IntroMovie_GetTotalFrameCount(data))) {
++sceneData->state;
}
break;
case 2:
case INTRO_MOVIE_SCENE_CLEANUP:
IntroMovie_Scene2_Exit(data, sceneData);
return TRUE;
}
@ -103,12 +114,12 @@ BOOL IntroMovie_Scene2_Main(IntroMovieOvyData *data, IntroMovieScene2Data *scene
IntroMovieBgLinearAnims *bgAnimCnt = IntroMovie_GetBgLinearAnimsController(data);
u8 stepTimer = IntroMovie_GetSceneStepTimer(data);
switch (IntroMovie_GetSceneStep(data)) {
case 0:
case INTRO_SCENE2_START_FLYIN:
BeginNormalPaletteFade(0, 1, 1, RGB_WHITE, 3, 1, HEAP_ID_INTRO_MOVIE);
sceneData->flowerIndex = 0;
IntroMovie_AdvanceSceneStep(data);
break;
case 1:
case INTRO_SCENE2_FLYIN:
if (sceneData->flowerIndex < NELEMS(sIntroMovie_Scene2_FlowerSpriteAppearTiming) && sIntroMovie_Scene2_FlowerSpriteAppearTiming[sceneData->flowerIndex] == stepTimer) {
IntroMovie_StartSpriteAnimAndMakeVisible(sceneData->flowerSprites[sceneData->flowerIndex], TRUE);
++sceneData->flowerIndex;
@ -122,7 +133,7 @@ BOOL IntroMovie_Scene2_Main(IntroMovieOvyData *data, IntroMovieScene2Data *scene
IntroMovie_AdvanceSceneStep(data);
}
break;
case 2:
case INTRO_SCENE2_START_SLOW_PAN_ETHAN:
if (IntroMovie_WaitBgScrollAnim(bgAnimCnt->scroll, GF_BG_LYR_MAIN_1) && IntroMovie_WaitBgScrollAnim(bgAnimCnt->scroll, GF_BG_LYR_MAIN_0) && IntroMovie_Scene2_WaitSpritePanEffect(sceneData, 0) && IntroMovie_Scene2_WaitSpritePanEffect(sceneData, 1) && IsPaletteFadeFinished()) {
IntroMovie_StartBgScroll_NotVBlank(bgConfig, bgAnimCnt->scroll, GF_BG_LYR_MAIN_1, 0x20, 0, 0x5A);
IntroMovie_StartBgScroll_NotVBlank(bgConfig, bgAnimCnt->scroll, GF_BG_LYR_MAIN_0, 0x20, 0, 0x5A);
@ -131,7 +142,7 @@ BOOL IntroMovie_Scene2_Main(IntroMovieOvyData *data, IntroMovieScene2Data *scene
IntroMovie_AdvanceSceneStep(data);
}
break;
case 3:
case INTRO_SCENE2_SLOW_PAN_ETHAN:
if (IntroMovie_WaitBgScrollAnim(bgAnimCnt->scroll, GF_BG_LYR_MAIN_1) && IntroMovie_WaitBgScrollAnim(bgAnimCnt->scroll, GF_BG_LYR_MAIN_0) && IntroMovie_Scene2_WaitSpritePanEffect(sceneData, 0) && IntroMovie_Scene2_WaitSpritePanEffect(sceneData, 1)) {
IntroMovie_StartBgScroll_NotVBlank(bgConfig, bgAnimCnt->scroll, GF_BG_LYR_MAIN_1, 0x40, 0, 7);
IntroMovie_StartBgScroll_NotVBlank(bgConfig, bgAnimCnt->scroll, GF_BG_LYR_MAIN_0, 0x40, 0, 7);
@ -140,7 +151,7 @@ BOOL IntroMovie_Scene2_Main(IntroMovieOvyData *data, IntroMovieScene2Data *scene
IntroMovie_AdvanceSceneStep(data);
}
break;
case 4:
case INTRO_SCENE2_FAST_PAN_TO_LYRA:
if (IntroMovie_WaitBgScrollAnim(bgAnimCnt->scroll, GF_BG_LYR_MAIN_1) && IntroMovie_WaitBgScrollAnim(bgAnimCnt->scroll, GF_BG_LYR_MAIN_0) && IntroMovie_Scene2_WaitSpritePanEffect(sceneData, 0) && IntroMovie_Scene2_WaitSpritePanEffect(sceneData, 1)) {
IntroMovie_StartBgScroll_NotVBlank(bgConfig, bgAnimCnt->scroll, GF_BG_LYR_MAIN_1, 0x20, 0, 0x42);
IntroMovie_StartBgScroll_NotVBlank(bgConfig, bgAnimCnt->scroll, GF_BG_LYR_MAIN_0, 0x20, 0, 0x42);
@ -149,7 +160,7 @@ BOOL IntroMovie_Scene2_Main(IntroMovieOvyData *data, IntroMovieScene2Data *scene
IntroMovie_AdvanceSceneStep(data);
}
break;
case 5:
case INTRO_SCENE2_SLOW_PAN_LYRA:
if (IntroMovie_WaitBgScrollAnim(bgAnimCnt->scroll, GF_BG_LYR_MAIN_1) && IntroMovie_WaitBgScrollAnim(bgAnimCnt->scroll, GF_BG_LYR_MAIN_0) && IntroMovie_Scene2_WaitSpritePanEffect(sceneData, 0) && IntroMovie_Scene2_WaitSpritePanEffect(sceneData, 1)) {
IntroMovie_StartBgScroll_NotVBlank(bgConfig, bgAnimCnt->scroll, GF_BG_LYR_MAIN_1, 0, -0x80, 10);
IntroMovie_StartBgScroll_NotVBlank(bgConfig, bgAnimCnt->scroll, GF_BG_LYR_MAIN_0, 0, -0x40, 5);
@ -158,13 +169,13 @@ BOOL IntroMovie_Scene2_Main(IntroMovieOvyData *data, IntroMovieScene2Data *scene
IntroMovie_AdvanceSceneStep(data);
}
break;
case 6:
case INTRO_SCENE2_CIRCLE_WIPE_OUT:
if (IntroMovie_WaitBgScrollAnim(bgAnimCnt->scroll, GF_BG_LYR_MAIN_1) && IntroMovie_WaitBgScrollAnim(bgAnimCnt->scroll, GF_BG_LYR_MAIN_0) && IntroMovie_Scene2_WaitSpritePanEffect(sceneData, 0) && IntroMovie_Scene2_WaitSpritePanEffect(sceneData, 1)) {
IntroMovie_BeginCircleWipeEffect(data, 1, 1, 8);
IntroMovie_AdvanceSceneStep(data);
}
break;
case 7:
case INTRO_SCENE2_END:
if (IntroMovie_WaitCircleWipeEffect(data)) {
return TRUE;
}
@ -213,72 +224,68 @@ void IntroMovie_Scene2_InitBgs(IntroMovieOvyData *data) {
{
BgTemplate bgTemplate = {
0, 0,
GF_BG_BUF_SIZE_256x256_4BPP,
0,
GF_BG_SCR_SIZE_256x256,
GX_BG_COLORMODE_16,
0,
1,
0,
0,
0,
0,
0
.x = 0, .y = 0,
.bufferSize = GF_BG_BUF_SIZE_256x256_4BPP,
.baseTile = 0,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x0000,
.charBase = GX_BG_CHARBASE_0x04000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 0,
.areaOver = GX_BG_AREAOVER_XLU,
.mosaic = FALSE
};
InitBgFromTemplate(bgConfig, GF_BG_LYR_SUB_0, &bgTemplate, GX_BGMODE_0);
}
{
BgTemplate bgTemplate = {
0, 0,
GF_BG_BUF_SIZE_256x256_4BPP,
0,
GF_BG_SCR_SIZE_256x256,
GX_BG_COLORMODE_16,
0,
2,
0,
0,
0,
0,
0
.x = 0, .y = 0,
.bufferSize = GF_BG_BUF_SIZE_256x256_4BPP,
.baseTile = 0,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x0000,
.charBase = GX_BG_CHARBASE_0x08000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 0,
.areaOver = GX_BG_AREAOVER_XLU,
.mosaic = FALSE
};
InitBgFromTemplate(bgConfig, GF_BG_LYR_MAIN_0, &bgTemplate, GX_BGMODE_0);
}
{
BgTemplate bgTemplate = {
0, 0,
GF_BG_BUF_SIZE_512x512_4BPP,
0,
GF_BG_SCR_SIZE_512x512,
GX_BG_COLORMODE_16,
1,
2,
0,
1,
0,
0,
0
.x = 0, .y = 0,
.bufferSize = GF_BG_BUF_SIZE_512x512_4BPP,
.baseTile = 0,
.size = GF_BG_SCR_SIZE_512x512,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x0800,
.charBase = GX_BG_CHARBASE_0x08000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 1,
.areaOver = GX_BG_AREAOVER_XLU,
.mosaic = FALSE
};
InitBgFromTemplate(bgConfig, GF_BG_LYR_MAIN_1, &bgTemplate, GX_BGMODE_0);
}
{
BgTemplate bgTemplate = {
0, 0,
GF_BG_BUF_SIZE_256x256_4BPP,
0,
GF_BG_SCR_SIZE_256x256,
GX_BG_COLORMODE_16,
5,
2,
0,
2,
0,
0,
0
.x = 0, .y = 0,
.bufferSize = GF_BG_BUF_SIZE_256x256_4BPP,
.baseTile = 0,
.size = GF_BG_SCR_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x2800,
.charBase = GX_BG_CHARBASE_0x08000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 2,
.areaOver = GX_BG_AREAOVER_XLU,
.mosaic = FALSE
};
InitBgFromTemplate(bgConfig, GF_BG_LYR_MAIN_2, &bgTemplate, GX_BGMODE_0);
}

View File

@ -132,16 +132,16 @@ BOOL IntroMovie_Scene3(IntroMovieOvyData *data, void *pVoid) {
}
switch (sceneData->state) {
case 0:
case INTRO_MOVIE_SCENE_INIT:
IntroMovie_Scene3_Init(data, sceneData);
++sceneData->state;
break;
case 1:
case INTRO_MOVIE_SCENE_RUN:
if (IntroMovie_Scene3_Main(data, sceneData, IntroMovie_GetTotalFrameCount(data))) {
++sceneData->state;
}
break;
case 2:
case INTRO_MOVIE_SCENE_CLEANUP:
IntroMovie_Scene3_Exit(data, sceneData);
return TRUE;
}
@ -186,9 +186,9 @@ void IntroMovie_Scene3_Show2DGfx(IntroMovieScene3Data *sceneData, BgConfig *bgCo
BOOL IntroMovie_Scene3_Main(IntroMovieOvyData *data, IntroMovieScene3Data *sceneData, int totalFrames) {
u8 stepTimer;
BgConfig *bgConfig = IntroMovie_GetBgConfig(data); // r7
IntroMovieBgLinearAnims *bgAnimCnt = IntroMovie_GetBgLinearAnimsController(data); // r4
stepTimer = IntroMovie_GetSceneStepTimer(data); // sp10
BgConfig *bgConfig = IntroMovie_GetBgConfig(data);
IntroMovieBgLinearAnims *bgAnimCnt = IntroMovie_GetBgLinearAnimsController(data);
stepTimer = IntroMovie_GetSceneStepTimer(data);
IntroMovie_Scene3_Animate3DMap(sceneData);
switch (IntroMovie_GetSceneStep(data)) {
case 0: // Show New Bark