mirror of
https://github.com/pret/pokeheartgold.git
synced 2026-05-31 20:43:00 -05:00
state enums
This commit is contained in:
parent
a3be2701dc
commit
e4681c33ac
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
#include <nnsys.h>
|
||||
|
||||
typedef struct UnkStruct_ov01_021E8B04 UnkStruct_ov01_021E8B04;
|
||||
|
||||
typedef struct UnkStruct_FieldSysC0_SubC {
|
||||
NNSG3dRenderObj renderObj;
|
||||
NNSG3dResMdl *model;
|
||||
|
|
@ -10,11 +12,11 @@ typedef struct UnkStruct_FieldSysC0_SubC {
|
|||
} UnkStruct_FieldSysC0_SubC;
|
||||
|
||||
|
||||
void ov01_021E8970(int a0, int a1, int a2, UnkStruct_FieldSysC0_SubC *a3, void *a4);
|
||||
void *ov01_021E8B04(int a0, int a1, void *a2);
|
||||
void ov01_021E8B84(void *a0, int a1);
|
||||
void ov01_021E8B6C(void *a0);
|
||||
BOOL ov01_021E8B90(void *a0);
|
||||
void ov01_021E8A8C(void *a0, UnkStruct_FieldSysC0_SubC *a1, int a2, int a3);
|
||||
void ov01_021E8970(int modelNum, int animNum, int a2, UnkStruct_FieldSysC0_SubC *renderObj, void *fsysUnk54);
|
||||
UnkStruct_ov01_021E8B04 *ov01_021E8B04(int modelNum, int animNum, void *fsysUnk54);
|
||||
void ov01_021E8B84(UnkStruct_ov01_021E8B04 *anim, int a1);
|
||||
void ov01_021E8B6C(UnkStruct_ov01_021E8B04 *anim);
|
||||
BOOL ov01_021E8B90(UnkStruct_ov01_021E8B04 *anim);
|
||||
void ov01_021E8A8C(UnkStruct_ov01_021E8B04 *anim, UnkStruct_FieldSysC0_SubC *renderObj, int modelNum, int animNum);
|
||||
|
||||
#endif //POKEHEARTGOLD_FIELD_OVERLAY_01_021E8744_H
|
||||
|
|
|
|||
|
|
@ -12,7 +12,36 @@
|
|||
#include "fielddata/script/scr_seq/event_D17R0110.h"
|
||||
#include "demo/legend.naix"
|
||||
|
||||
// TODO: state enums
|
||||
typedef enum ClearBellAnimationState {
|
||||
CLEAR_BELL_ANIM_STATE_NUL,
|
||||
CLEAR_BELL_ANIM_STATE_RISE_BEGIN,
|
||||
CLEAR_BELL_ANIM_STATE_RISE_WAIT,
|
||||
CLEAR_BELL_ANIM_STATE_IDLE_LOOP,
|
||||
CLEAR_BELL_ANIM_STATE_SHIMMER_BEGIN,
|
||||
CLEAR_BELL_ANIM_STATE_SHIMMER_WAIT,
|
||||
} ClearBellAnimationState;
|
||||
|
||||
typedef enum LugiaEyeGlimmerTaskState {
|
||||
LUGIA_EYE_GLIMMER_TASK_STATE_RUN,
|
||||
LUGIA_EYE_GLIMMER_TASK_STATE_FINISH,
|
||||
} LugiaEyeGlimmerTaskState;
|
||||
|
||||
typedef enum UnusedHoOhAnimTaskState {
|
||||
UNUSED_HO_OH_ANIM_TASK_STATE_0,
|
||||
UNUSED_HO_OH_ANIM_TASK_STATE_1,
|
||||
UNUSED_HO_OH_ANIM_TASK_STATE_2,
|
||||
} UnusedHoOhAnimTaskState;
|
||||
|
||||
typedef enum BirdFinalApproachTaskState {
|
||||
BIRD_FINAL_APPROACH_TASK_STATE_INIT,
|
||||
BIRD_FINAL_APPROACH_TASK_STATE_CORRECT_POS,
|
||||
BIRD_FINAL_APPROACH_TASK_STATE_FLAP_DOWN,
|
||||
BIRD_FINAL_APPROACH_TASK_STATE_DELAY__ALT_ANIM,
|
||||
BIRD_FINAL_APPROACH_TASK_STATE_DELAY__CRY,
|
||||
BIRD_FINAL_APPROACH_TASK_STATE_EXPANDING_CIRCLE_EFFECT,
|
||||
BIRD_FINAL_APPROACH_TASK_STATE_WAIT_AFTER_ANIM,
|
||||
BIRD_FINAL_APPROACH_TASK_STATE_FINISH,
|
||||
} BirdFinalApproachTaskState;
|
||||
|
||||
typedef struct ClearBellCutsceneCamera {
|
||||
Field3dObjectTaskManager *field3dObjectTaskManager;
|
||||
|
|
@ -58,13 +87,13 @@ typedef struct ClearBellCutscene3dObjectTaskData {
|
|||
u8 state;
|
||||
u8 shimmerClearBellOnly;
|
||||
u16 gameVersion;
|
||||
Field3dModel unk_014;
|
||||
Field3dModel clearBellModel;
|
||||
Field3dModel clearBellRisingModel;
|
||||
Field3dModel clearBellShimmerModel;
|
||||
Field3dModel cornerBellModel;
|
||||
Field3DModelAnimation unk_044[3];
|
||||
Field3DModelAnimation clearBellAnims[2];
|
||||
Field3DModelAnimation clearbellRisingAnims[3];
|
||||
Field3DModelAnimation clearBellShimmerAnims[2];
|
||||
Field3DModelAnimation cornerBellAnims[1];
|
||||
Field3dObject unk_0BC;
|
||||
Field3dObject clearBellRisingObject;
|
||||
Field3dObject clearBellObject;
|
||||
Field3dObject cornerBellObjects[4];
|
||||
ClearBellCutscene3dObjectTaskData_SoulSilver wavesEffect;
|
||||
|
|
@ -86,7 +115,7 @@ typedef struct LegendCutsceneLugiaEyeGlimmerTaskData {
|
|||
typedef struct BirdFinalApproachTaskData {
|
||||
fx32 yDelta;
|
||||
fx32 yEnd;
|
||||
u16 beforeFirstFlapDelayTimer;
|
||||
u16 delayTimer;
|
||||
u16 animTimer;
|
||||
NNSFndAllocator allocator;
|
||||
Field3dModel model;
|
||||
|
|
@ -108,8 +137,8 @@ static void modelAnimListSetFrameIndex(Field3DModelAnimation *animation, u32 num
|
|||
static BOOL modelAnimListAdvanceNoLoop(Field3DModelAnimation *animation, u32 num);
|
||||
static void modelAnimListAdvanceLooping(Field3DModelAnimation *animation, u32 num);
|
||||
static void setBellsModelsActiveFlag(ClearBellCutscene3dObjectTaskData *taskData, int active);
|
||||
static void loadEyeGlimmer3dModel(HeapID heapId, FieldSystem *fieldSystem, LegendCutsceneLugiaEyeGlimmerTaskData *a2);
|
||||
static void unloadEyeGlimmer3dModel(LegendCutsceneLugiaEyeGlimmerTaskData *a0);
|
||||
static void loadEyeGlimmer3dModel(HeapID heapId, FieldSystem *fieldSystem, LegendCutsceneLugiaEyeGlimmerTaskData *taskData);
|
||||
static void unloadEyeGlimmer3dModel(LegendCutsceneLugiaEyeGlimmerTaskData *taskData);
|
||||
static BOOL Task_LugiaEyeGlimmer(TaskManager *taskman);
|
||||
static BOOL ov02_02251320(TaskManager *taskman);
|
||||
static BOOL Task_WaitCameraPan(TaskManager *taskman);
|
||||
|
|
@ -250,13 +279,13 @@ void LegendCutscene_EndClearBellAnim(FieldSystem *fieldSystem) {
|
|||
void LegendCutscene_ClearBellRiseFromBag(FieldSystem *fieldSystem) {
|
||||
ClearBellCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera;
|
||||
ClearBellCutscene3dObjectTaskData *draw3dTaskData = (ClearBellCutscene3dObjectTaskData *)Field3dObjectTask_GetData(cam->draw3dTask);
|
||||
draw3dTaskData->state = 1;
|
||||
draw3dTaskData->state = CLEAR_BELL_ANIM_STATE_RISE_BEGIN;
|
||||
}
|
||||
|
||||
void LegendCutscene_ClearBellShimmer(FieldSystem *fieldSystem, u8 shimmerClearBellOnly) {
|
||||
ClearBellCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera;
|
||||
ClearBellCutscene3dObjectTaskData *draw3dTaskData = (ClearBellCutscene3dObjectTaskData *)Field3dObjectTask_GetData(cam->draw3dTask);
|
||||
if (draw3dTaskData->state != 3) {
|
||||
if (draw3dTaskData->state != CLEAR_BELL_ANIM_STATE_IDLE_LOOP) {
|
||||
GF_ASSERT(FALSE);
|
||||
TaskManager_Call(fieldSystem->taskman, Task_WaitShimmerEffectAndRestart, NULL);
|
||||
return;
|
||||
|
|
@ -273,14 +302,14 @@ void ov02_02250B30(FieldSystem *fieldSystem) {
|
|||
static void startBellShimmer(FieldSystem *fieldSystem) {
|
||||
ClearBellCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera;
|
||||
ClearBellCutscene3dObjectTaskData *taskData = (ClearBellCutscene3dObjectTaskData *)Field3dObjectTask_GetData(cam->draw3dTask);
|
||||
taskData->state = 4;
|
||||
taskData->state = CLEAR_BELL_ANIM_STATE_SHIMMER_BEGIN;
|
||||
}
|
||||
|
||||
static BOOL Task_WaitShimmerEffectAndRestart(TaskManager *taskman) {
|
||||
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskman);
|
||||
ClearBellCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera;
|
||||
ClearBellCutscene3dObjectTaskData *taskData = (ClearBellCutscene3dObjectTaskData *)Field3dObjectTask_GetData(cam->draw3dTask);
|
||||
if (taskData->state == 3) {
|
||||
if (taskData->state == CLEAR_BELL_ANIM_STATE_IDLE_LOOP) {
|
||||
startBellShimmer(fieldSystem);
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -304,36 +333,36 @@ static void Field3dObjectTaskInit_ClearBellCutscene(Field3dObjectTask *task, Fie
|
|||
ClearBellCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera;
|
||||
kimonoDanceObjData->gameVersion = cam->gameVersion;
|
||||
GF_ExpHeap_FndInitAllocator(&kimonoDanceObjData->allocator, HEAP_ID_4, 0x20);
|
||||
Field3dModel_LoadFromFilesystem(&kimonoDanceObjData->unk_014, NARC_demo_legend, NARC_legend_legend_00000018_NSBMD, HEAP_ID_4);
|
||||
Field3dModel_LoadFromFilesystem(&kimonoDanceObjData->clearBellModel, NARC_demo_legend, NARC_legend_legend_00000025_NSBMD, HEAP_ID_4);
|
||||
Field3dModel_LoadFromFilesystem(&kimonoDanceObjData->clearBellRisingModel, NARC_demo_legend, NARC_legend_legend_00000018_NSBMD, HEAP_ID_4);
|
||||
Field3dModel_LoadFromFilesystem(&kimonoDanceObjData->clearBellShimmerModel, NARC_demo_legend, NARC_legend_legend_00000025_NSBMD, HEAP_ID_4);
|
||||
Field3dModel_LoadFromFilesystem(&kimonoDanceObjData->cornerBellModel, NARC_demo_legend, NARC_legend_legend_00000032_NSBMD, HEAP_ID_4);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->unk_044[0], &kimonoDanceObjData->unk_014, NARC_demo_legend, NARC_legend_legend_00000019_NSBCA, HEAP_ID_4, &kimonoDanceObjData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->unk_044[1], &kimonoDanceObjData->unk_014, NARC_demo_legend, NARC_legend_legend_00000020_NSBTP, HEAP_ID_4, &kimonoDanceObjData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->unk_044[2], &kimonoDanceObjData->unk_014, NARC_demo_legend, NARC_legend_legend_00000021_NSBTA, HEAP_ID_4, &kimonoDanceObjData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->clearBellAnims[0], &kimonoDanceObjData->clearBellModel, NARC_demo_legend, NARC_legend_legend_00000026_NSBCA, HEAP_ID_4, &kimonoDanceObjData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->clearBellAnims[1], &kimonoDanceObjData->clearBellModel, NARC_demo_legend, NARC_legend_legend_00000027_NSBTA, HEAP_ID_4, &kimonoDanceObjData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->clearbellRisingAnims[0], &kimonoDanceObjData->clearBellRisingModel, NARC_demo_legend, NARC_legend_legend_00000019_NSBCA, HEAP_ID_4, &kimonoDanceObjData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->clearbellRisingAnims[1], &kimonoDanceObjData->clearBellRisingModel, NARC_demo_legend, NARC_legend_legend_00000020_NSBTP, HEAP_ID_4, &kimonoDanceObjData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->clearbellRisingAnims[2], &kimonoDanceObjData->clearBellRisingModel, NARC_demo_legend, NARC_legend_legend_00000021_NSBTA, HEAP_ID_4, &kimonoDanceObjData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->clearBellShimmerAnims[0], &kimonoDanceObjData->clearBellShimmerModel, NARC_demo_legend, NARC_legend_legend_00000026_NSBCA, HEAP_ID_4, &kimonoDanceObjData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->clearBellShimmerAnims[1], &kimonoDanceObjData->clearBellShimmerModel, NARC_demo_legend, NARC_legend_legend_00000027_NSBTA, HEAP_ID_4, &kimonoDanceObjData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->cornerBellAnims[0], &kimonoDanceObjData->cornerBellModel, NARC_demo_legend, NARC_legend_legend_00000033_NSBTA, HEAP_ID_4, &kimonoDanceObjData->allocator);
|
||||
Field3dObject_InitFromModel(&kimonoDanceObjData->unk_0BC, &kimonoDanceObjData->unk_014);
|
||||
Field3dObject_InitFromModel(&kimonoDanceObjData->clearBellObject, &kimonoDanceObjData->clearBellModel);
|
||||
Field3dObject_AddAnimation(&kimonoDanceObjData->unk_0BC, &kimonoDanceObjData->unk_044[0]);
|
||||
Field3dObject_AddAnimation(&kimonoDanceObjData->unk_0BC, &kimonoDanceObjData->unk_044[1]);
|
||||
Field3dObject_AddAnimation(&kimonoDanceObjData->unk_0BC, &kimonoDanceObjData->unk_044[2]);
|
||||
Field3dObject_AddAnimation(&kimonoDanceObjData->clearBellObject, &kimonoDanceObjData->clearBellAnims[0]);
|
||||
Field3dObject_AddAnimation(&kimonoDanceObjData->clearBellObject, &kimonoDanceObjData->clearBellAnims[1]);
|
||||
Field3dObject_SetActiveFlag(&kimonoDanceObjData->unk_0BC, FALSE);
|
||||
Field3dObject_InitFromModel(&kimonoDanceObjData->clearBellRisingObject, &kimonoDanceObjData->clearBellRisingModel);
|
||||
Field3dObject_InitFromModel(&kimonoDanceObjData->clearBellObject, &kimonoDanceObjData->clearBellShimmerModel);
|
||||
Field3dObject_AddAnimation(&kimonoDanceObjData->clearBellRisingObject, &kimonoDanceObjData->clearbellRisingAnims[0]);
|
||||
Field3dObject_AddAnimation(&kimonoDanceObjData->clearBellRisingObject, &kimonoDanceObjData->clearbellRisingAnims[1]);
|
||||
Field3dObject_AddAnimation(&kimonoDanceObjData->clearBellRisingObject, &kimonoDanceObjData->clearbellRisingAnims[2]);
|
||||
Field3dObject_AddAnimation(&kimonoDanceObjData->clearBellObject, &kimonoDanceObjData->clearBellShimmerAnims[0]);
|
||||
Field3dObject_AddAnimation(&kimonoDanceObjData->clearBellObject, &kimonoDanceObjData->clearBellShimmerAnims[1]);
|
||||
Field3dObject_SetActiveFlag(&kimonoDanceObjData->clearBellRisingObject, FALSE);
|
||||
Field3dObject_SetActiveFlag(&kimonoDanceObjData->clearBellObject, FALSE);
|
||||
for (u8 i = 0; i < 4; ++i) {
|
||||
Field3dObject_InitFromModel(&kimonoDanceObjData->cornerBellObjects[i], &kimonoDanceObjData->cornerBellModel);
|
||||
Field3dObject_AddAnimation(&kimonoDanceObjData->cornerBellObjects[i], &kimonoDanceObjData->cornerBellAnims[0]);
|
||||
Field3dObject_SetActiveFlag(&kimonoDanceObjData->cornerBellObjects[i], FALSE);
|
||||
}
|
||||
modelAnimListSetFrameIndex(kimonoDanceObjData->unk_044, 3, 0);
|
||||
modelAnimListSetFrameIndex(kimonoDanceObjData->clearBellAnims, 2, 0);
|
||||
modelAnimListSetFrameIndex(kimonoDanceObjData->clearbellRisingAnims, 3, 0);
|
||||
modelAnimListSetFrameIndex(kimonoDanceObjData->clearBellShimmerAnims, 2, 0);
|
||||
modelAnimListSetFrameIndex(kimonoDanceObjData->cornerBellAnims, 1, 0);
|
||||
|
||||
VecFx32 pos;
|
||||
MapObject_GetPositionVec(PlayerAvatar_GetMapObject(fieldSystem->playerAvatar), &pos);
|
||||
Field3dObj_SetPosEx(&kimonoDanceObjData->unk_0BC, pos.x, pos.y, pos.z);
|
||||
Field3dObj_SetPosEx(&kimonoDanceObjData->clearBellRisingObject, pos.x, pos.y, pos.z);
|
||||
Field3dObj_SetPosEx(&kimonoDanceObjData->clearBellObject, pos.x, pos.y, pos.z);
|
||||
if (kimonoDanceObjData->gameVersion == VERSION_SOULSILVER) {
|
||||
Field3dObj_SetPosEx(&kimonoDanceObjData->cornerBellObjects[0], pos.x + FX32_CONST(128), pos.y + FX32_CONST(32), pos.z - FX32_CONST(180));
|
||||
|
|
@ -352,19 +381,19 @@ static void Field3dObjectTaskInit_ClearBellCutscene(Field3dObjectTask *task, Fie
|
|||
kimonoDanceObjData->cameraParam = sCameraParam_HeartGold;
|
||||
kimonoDanceObjData->cameraOffset = sCameraOffset_HeartGold;
|
||||
}
|
||||
kimonoDanceObjData->state = 0;
|
||||
kimonoDanceObjData->state = CLEAR_BELL_ANIM_STATE_NUL;
|
||||
}
|
||||
|
||||
static void Field3dObjectTaskDestroy_ClearBellCutscene(Field3dObjectTask *task, FieldSystem *fieldSystem, void *taskData) {
|
||||
ClearBellCutscene3dObjectTaskData *cutsceneData = (ClearBellCutscene3dObjectTaskData *)taskData;
|
||||
Field3dModelAnimation_Unload(&cutsceneData->unk_044[2], &cutsceneData->allocator);
|
||||
Field3dModelAnimation_Unload(&cutsceneData->unk_044[1], &cutsceneData->allocator);
|
||||
Field3dModelAnimation_Unload(&cutsceneData->unk_044[0], &cutsceneData->allocator);
|
||||
Field3dModelAnimation_Unload(&cutsceneData->clearBellAnims[1], &cutsceneData->allocator);
|
||||
Field3dModelAnimation_Unload(&cutsceneData->clearBellAnims[0], &cutsceneData->allocator);
|
||||
Field3dModelAnimation_Unload(&cutsceneData->clearbellRisingAnims[2], &cutsceneData->allocator);
|
||||
Field3dModelAnimation_Unload(&cutsceneData->clearbellRisingAnims[1], &cutsceneData->allocator);
|
||||
Field3dModelAnimation_Unload(&cutsceneData->clearbellRisingAnims[0], &cutsceneData->allocator);
|
||||
Field3dModelAnimation_Unload(&cutsceneData->clearBellShimmerAnims[1], &cutsceneData->allocator);
|
||||
Field3dModelAnimation_Unload(&cutsceneData->clearBellShimmerAnims[0], &cutsceneData->allocator);
|
||||
Field3dModelAnimation_Unload(&cutsceneData->cornerBellAnims[0], &cutsceneData->allocator);
|
||||
Field3dModel_Unload(&cutsceneData->unk_014);
|
||||
Field3dModel_Unload(&cutsceneData->clearBellModel);
|
||||
Field3dModel_Unload(&cutsceneData->clearBellRisingModel);
|
||||
Field3dModel_Unload(&cutsceneData->clearBellShimmerModel);
|
||||
Field3dModel_Unload(&cutsceneData->cornerBellModel);
|
||||
}
|
||||
|
||||
|
|
@ -372,35 +401,35 @@ static void Field3dObjectTaskUpdate_ClearBellCutscene(Field3dObjectTask *task, s
|
|||
ClearBellCutscene3dObjectTaskData *cutsceneData = (ClearBellCutscene3dObjectTaskData *)taskData;
|
||||
|
||||
switch (cutsceneData->state) {
|
||||
case 0:
|
||||
case CLEAR_BELL_ANIM_STATE_NUL:
|
||||
break;
|
||||
case 1:
|
||||
Field3dObject_SetActiveFlag(&cutsceneData->unk_0BC, TRUE);
|
||||
cutsceneData->state = 2;
|
||||
case CLEAR_BELL_ANIM_STATE_RISE_BEGIN:
|
||||
Field3dObject_SetActiveFlag(&cutsceneData->clearBellRisingObject, TRUE);
|
||||
cutsceneData->state = CLEAR_BELL_ANIM_STATE_RISE_WAIT;
|
||||
break;
|
||||
case 2:
|
||||
if (modelAnimListAdvanceNoLoop(cutsceneData->unk_044, 3)) {
|
||||
case CLEAR_BELL_ANIM_STATE_RISE_WAIT:
|
||||
if (modelAnimListAdvanceNoLoop(cutsceneData->clearbellRisingAnims, 3)) {
|
||||
bellShimmerReplaceGraphics(cutsceneData);
|
||||
cutsceneData->state = 3;
|
||||
cutsceneData->state = CLEAR_BELL_ANIM_STATE_IDLE_LOOP;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
modelAnimListAdvanceLooping(cutsceneData->unk_044, 3);
|
||||
case CLEAR_BELL_ANIM_STATE_IDLE_LOOP:
|
||||
modelAnimListAdvanceLooping(cutsceneData->clearbellRisingAnims, 3);
|
||||
break;
|
||||
case 4:
|
||||
Field3dObject_SetActiveFlag(&cutsceneData->unk_0BC, FALSE);
|
||||
setBellsModelsActiveFlag(cutsceneData, 1);
|
||||
modelAnimListSetFrameIndex(cutsceneData->clearBellAnims, 2, 0);
|
||||
case CLEAR_BELL_ANIM_STATE_SHIMMER_BEGIN:
|
||||
Field3dObject_SetActiveFlag(&cutsceneData->clearBellRisingObject, FALSE);
|
||||
setBellsModelsActiveFlag(cutsceneData, TRUE);
|
||||
modelAnimListSetFrameIndex(cutsceneData->clearBellShimmerAnims, 2, 0);
|
||||
modelAnimListSetFrameIndex(cutsceneData->cornerBellAnims, 1, 0);
|
||||
cutsceneData->state = 5;
|
||||
cutsceneData->state = CLEAR_BELL_ANIM_STATE_SHIMMER_WAIT;
|
||||
break;
|
||||
case 5:
|
||||
modelAnimListAdvanceLooping(cutsceneData->unk_044, 3);
|
||||
case CLEAR_BELL_ANIM_STATE_SHIMMER_WAIT:
|
||||
modelAnimListAdvanceLooping(cutsceneData->clearbellRisingAnims, 3);
|
||||
modelAnimListAdvanceNoLoop(cutsceneData->cornerBellAnims, 1);
|
||||
if (modelAnimListAdvanceNoLoop(cutsceneData->clearBellAnims, 2)) {
|
||||
setBellsModelsActiveFlag(cutsceneData, 0);
|
||||
Field3dObject_SetActiveFlag(&cutsceneData->unk_0BC, TRUE);
|
||||
cutsceneData->state = 3;
|
||||
if (modelAnimListAdvanceNoLoop(cutsceneData->clearBellShimmerAnims, 2)) {
|
||||
setBellsModelsActiveFlag(cutsceneData, FALSE);
|
||||
Field3dObject_SetActiveFlag(&cutsceneData->clearBellRisingObject, TRUE);
|
||||
cutsceneData->state = CLEAR_BELL_ANIM_STATE_IDLE_LOOP;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -409,7 +438,7 @@ static void Field3dObjectTaskUpdate_ClearBellCutscene(Field3dObjectTask *task, s
|
|||
static void Field3dObjectTaskRender_ClearBellCutscene(Field3dObjectTask *task, struct FieldSystem *fieldSystem, void *taskData) {
|
||||
ClearBellCutscene3dObjectTaskData *clearBell = (ClearBellCutscene3dObjectTaskData *)taskData;
|
||||
|
||||
Field3dObj_Draw(&clearBell->unk_0BC);
|
||||
Field3dObj_Draw(&clearBell->clearBellRisingObject);
|
||||
Field3dObj_Draw(&clearBell->clearBellObject);
|
||||
for (u8 i = 0; i < 4; ++i) {
|
||||
Field3dObj_Draw(&clearBell->cornerBellObjects[i]);
|
||||
|
|
@ -417,19 +446,19 @@ static void Field3dObjectTaskRender_ClearBellCutscene(Field3dObjectTask *task, s
|
|||
}
|
||||
|
||||
static void bellShimmerReplaceGraphics(ClearBellCutscene3dObjectTaskData *taskData) {
|
||||
Field3dObject_RemoveAnimation(&taskData->unk_0BC, &taskData->unk_044[0]);
|
||||
Field3dObject_RemoveAnimation(&taskData->unk_0BC, &taskData->unk_044[1]);
|
||||
Field3dObject_RemoveAnimation(&taskData->unk_0BC, &taskData->unk_044[2]);
|
||||
Field3dModelAnimation_Unload(&taskData->unk_044[2], &taskData->allocator);
|
||||
Field3dModelAnimation_Unload(&taskData->unk_044[1], &taskData->allocator);
|
||||
Field3dModelAnimation_Unload(&taskData->unk_044[0], &taskData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&taskData->unk_044[0], &taskData->unk_014, NARC_demo_legend, NARC_legend_legend_00000022_NSBCA, HEAP_ID_4, &taskData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&taskData->unk_044[1], &taskData->unk_014, NARC_demo_legend, NARC_legend_legend_00000023_NSBTP, HEAP_ID_4, &taskData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&taskData->unk_044[2], &taskData->unk_014, NARC_demo_legend, NARC_legend_legend_00000024_NSBTA, HEAP_ID_4, &taskData->allocator);
|
||||
Field3dObject_AddAnimation(&taskData->unk_0BC, &taskData->unk_044[0]);
|
||||
Field3dObject_AddAnimation(&taskData->unk_0BC, &taskData->unk_044[1]);
|
||||
Field3dObject_AddAnimation(&taskData->unk_0BC, &taskData->unk_044[2]);
|
||||
modelAnimListSetFrameIndex(taskData->unk_044, 3, 0);
|
||||
Field3dObject_RemoveAnimation(&taskData->clearBellRisingObject, &taskData->clearbellRisingAnims[0]);
|
||||
Field3dObject_RemoveAnimation(&taskData->clearBellRisingObject, &taskData->clearbellRisingAnims[1]);
|
||||
Field3dObject_RemoveAnimation(&taskData->clearBellRisingObject, &taskData->clearbellRisingAnims[2]);
|
||||
Field3dModelAnimation_Unload(&taskData->clearbellRisingAnims[2], &taskData->allocator);
|
||||
Field3dModelAnimation_Unload(&taskData->clearbellRisingAnims[1], &taskData->allocator);
|
||||
Field3dModelAnimation_Unload(&taskData->clearbellRisingAnims[0], &taskData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&taskData->clearbellRisingAnims[0], &taskData->clearBellRisingModel, NARC_demo_legend, NARC_legend_legend_00000022_NSBCA, HEAP_ID_4, &taskData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&taskData->clearbellRisingAnims[1], &taskData->clearBellRisingModel, NARC_demo_legend, NARC_legend_legend_00000023_NSBTP, HEAP_ID_4, &taskData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&taskData->clearbellRisingAnims[2], &taskData->clearBellRisingModel, NARC_demo_legend, NARC_legend_legend_00000024_NSBTA, HEAP_ID_4, &taskData->allocator);
|
||||
Field3dObject_AddAnimation(&taskData->clearBellRisingObject, &taskData->clearbellRisingAnims[0]);
|
||||
Field3dObject_AddAnimation(&taskData->clearBellRisingObject, &taskData->clearbellRisingAnims[1]);
|
||||
Field3dObject_AddAnimation(&taskData->clearBellRisingObject, &taskData->clearbellRisingAnims[2]);
|
||||
modelAnimListSetFrameIndex(taskData->clearbellRisingAnims, 3, 0);
|
||||
}
|
||||
|
||||
static void modelAnimListSetFrameIndex(Field3DModelAnimation *animation, u32 num, fx32 frame) {
|
||||
|
|
@ -464,31 +493,31 @@ static void setBellsModelsActiveFlag(ClearBellCutscene3dObjectTaskData *taskData
|
|||
}
|
||||
}
|
||||
|
||||
static void loadEyeGlimmer3dModel(HeapID heapId, FieldSystem *fieldSystem, LegendCutsceneLugiaEyeGlimmerTaskData *a2) {
|
||||
GF_ExpHeap_FndInitAllocator(&a2->allocator, heapId, 0x20);
|
||||
Field3dModel_LoadFromFilesystem(&a2->model, NARC_demo_legend, NARC_legend_legend_00000028_NSBMD, heapId);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&a2->anims[0], &a2->model, NARC_demo_legend, NARC_legend_legend_00000029_NSBMA, heapId, &a2->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&a2->anims[1], &a2->model, NARC_demo_legend, NARC_legend_legend_00000030_NSBTP, heapId, &a2->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&a2->anims[2], &a2->model, NARC_demo_legend, NARC_legend_legend_00000031_NSBCA, heapId, &a2->allocator);
|
||||
Field3dObject_InitFromModel(&a2->object, &a2->model);
|
||||
Field3dObject_AddAnimation(&a2->object, &a2->anims[0]);
|
||||
Field3dObject_AddAnimation(&a2->object, &a2->anims[1]);
|
||||
Field3dObject_AddAnimation(&a2->object, &a2->anims[2]);
|
||||
modelAnimListSetFrameIndex(a2->anims, 3, 0);
|
||||
static void loadEyeGlimmer3dModel(HeapID heapId, FieldSystem *fieldSystem, LegendCutsceneLugiaEyeGlimmerTaskData *taskData) {
|
||||
GF_ExpHeap_FndInitAllocator(&taskData->allocator, heapId, 0x20);
|
||||
Field3dModel_LoadFromFilesystem(&taskData->model, NARC_demo_legend, NARC_legend_legend_00000028_NSBMD, heapId);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&taskData->anims[0], &taskData->model, NARC_demo_legend, NARC_legend_legend_00000029_NSBMA, heapId, &taskData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&taskData->anims[1], &taskData->model, NARC_demo_legend, NARC_legend_legend_00000030_NSBTP, heapId, &taskData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&taskData->anims[2], &taskData->model, NARC_demo_legend, NARC_legend_legend_00000031_NSBCA, heapId, &taskData->allocator);
|
||||
Field3dObject_InitFromModel(&taskData->object, &taskData->model);
|
||||
Field3dObject_AddAnimation(&taskData->object, &taskData->anims[0]);
|
||||
Field3dObject_AddAnimation(&taskData->object, &taskData->anims[1]);
|
||||
Field3dObject_AddAnimation(&taskData->object, &taskData->anims[2]);
|
||||
modelAnimListSetFrameIndex(taskData->anims, 3, 0);
|
||||
|
||||
VecFx32 pos;
|
||||
MapObject_GetPositionVec(PlayerAvatar_GetMapObject(fieldSystem->playerAvatar), &pos);
|
||||
pos.y += FX32_CONST(100);
|
||||
pos.z -= FX32_CONST(350);
|
||||
Field3dObj_SetPosEx(&a2->object, pos.x, pos.y, pos.z);
|
||||
Field3dObject_SetActiveFlag(&a2->object, TRUE);
|
||||
Field3dObj_SetPosEx(&taskData->object, pos.x, pos.y, pos.z);
|
||||
Field3dObject_SetActiveFlag(&taskData->object, TRUE);
|
||||
}
|
||||
|
||||
static void unloadEyeGlimmer3dModel(LegendCutsceneLugiaEyeGlimmerTaskData *a0) {
|
||||
Field3dModelAnimation_Unload(&a0->anims[2], &a0->allocator);
|
||||
Field3dModelAnimation_Unload(&a0->anims[1], &a0->allocator);
|
||||
Field3dModelAnimation_Unload(&a0->anims[0], &a0->allocator);
|
||||
Field3dModel_Unload(&a0->model);
|
||||
static void unloadEyeGlimmer3dModel(LegendCutsceneLugiaEyeGlimmerTaskData *taskData) {
|
||||
Field3dModelAnimation_Unload(&taskData->anims[2], &taskData->allocator);
|
||||
Field3dModelAnimation_Unload(&taskData->anims[1], &taskData->allocator);
|
||||
Field3dModelAnimation_Unload(&taskData->anims[0], &taskData->allocator);
|
||||
Field3dModel_Unload(&taskData->model);
|
||||
}
|
||||
|
||||
static BOOL Task_LugiaEyeGlimmer(TaskManager *taskman) {
|
||||
|
|
@ -496,7 +525,7 @@ static BOOL Task_LugiaEyeGlimmer(TaskManager *taskman) {
|
|||
u32 *pState = TaskManager_GetStatePtr(taskman);
|
||||
|
||||
switch (*pState) {
|
||||
case 0:
|
||||
case LUGIA_EYE_GLIMMER_TASK_STATE_RUN:
|
||||
++unk->eyeGlimmerDelayTimer;
|
||||
if (unk->eyeGlimmerDelayTimer == 2) {
|
||||
PlaySE(SEQ_SE_GS_RUGIA_MENOHIKARI);
|
||||
|
|
@ -506,7 +535,7 @@ static BOOL Task_LugiaEyeGlimmer(TaskManager *taskman) {
|
|||
}
|
||||
Field3dObj_Draw(&unk->object);
|
||||
break;
|
||||
case 1:
|
||||
case LUGIA_EYE_GLIMMER_TASK_STATE_FINISH:
|
||||
unloadEyeGlimmer3dModel(unk);
|
||||
FreeToHeap(unk);
|
||||
return TRUE;
|
||||
|
|
@ -526,19 +555,19 @@ static BOOL ov02_02251320(TaskManager *taskman) {
|
|||
ClearBellCutscene3dObjectTaskData *taskData = Field3dObjectTask_GetData(cam->draw3dTask);
|
||||
|
||||
switch (*pState) {
|
||||
case 0:
|
||||
case UNUSED_HO_OH_ANIM_TASK_STATE_0:
|
||||
renderObj = Field3dObjectList_GetRenderObjectByID(fieldSystem->unkC0, taskData->birdModelNum);
|
||||
for (i = 0; i < 2; ++i) {
|
||||
ov01_021E8970(taskData->birdModelNum, i, 1, renderObj, fieldSystem->unk54);
|
||||
}
|
||||
for (i = 0; i < 2; ++i) {
|
||||
void *r7 = ov01_021E8B04(taskData->birdModelNum, i, fieldSystem->unk54);
|
||||
ov01_021E8B84(r7, 1);
|
||||
ov01_021E8B6C(r7);
|
||||
UnkStruct_ov01_021E8B04 *anim = ov01_021E8B04(taskData->birdModelNum, i, fieldSystem->unk54);
|
||||
ov01_021E8B84(anim, 1);
|
||||
ov01_021E8B6C(anim);
|
||||
}
|
||||
*pState = 1;
|
||||
*pState = UNUSED_HO_OH_ANIM_TASK_STATE_1;
|
||||
break;
|
||||
case 1:
|
||||
case UNUSED_HO_OH_ANIM_TASK_STATE_1:
|
||||
renderObj = Field3dObjectList_GetRenderObjectByID(fieldSystem->unkC0, taskData->birdModelNum);
|
||||
if (ov01_021E8B90(ov01_021E8B04(taskData->birdModelNum, 0, fieldSystem->unk54))) {
|
||||
for (i = 0; i < 2; ++i) {
|
||||
|
|
@ -547,10 +576,10 @@ static BOOL ov02_02251320(TaskManager *taskman) {
|
|||
for (i = 0; i < 2; ++i) {
|
||||
ov01_021E8970(taskData->birdModelNum, i + 2, 1, renderObj, fieldSystem->unk54);
|
||||
}
|
||||
*pState = 2;
|
||||
*pState = UNUSED_HO_OH_ANIM_TASK_STATE_2;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
case UNUSED_HO_OH_ANIM_TASK_STATE_2:
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -576,26 +605,26 @@ void LegendCutscene_MoveCamera(FieldSystem *fieldSystem, u8 whichScene) {
|
|||
Camera_GetAngle(fieldSystem->camera);
|
||||
}
|
||||
|
||||
void LegendCutscene_StartPanCameraTo(FieldSystem *fieldSystem, u8 a1) {
|
||||
void LegendCutscene_StartPanCameraTo(FieldSystem *fieldSystem, u8 destination) {
|
||||
int duration;
|
||||
ClearBellCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera;
|
||||
ClearBellCutscene3dObjectTaskData *taskData = (ClearBellCutscene3dObjectTaskData *)Field3dObjectTask_GetData(cam->draw3dTask);
|
||||
|
||||
CameraTranslationPathTemplate template;
|
||||
int whichPoint = a1 == 0 ? 0 : 3;
|
||||
int whichPoint = destination == 0 ? 0 : 3;
|
||||
|
||||
template.angleX = taskData->cameraParam[whichPoint].angle.x;
|
||||
template.perspectiveAngle = taskData->cameraParam[whichPoint].perspective;
|
||||
template.position = taskData->cameraOffset[whichPoint];
|
||||
template.distance = taskData->cameraParam[whichPoint].distance;
|
||||
if (cam->gameVersion == VERSION_HEARTGOLD) {
|
||||
if (a1 == 0) {
|
||||
if (destination == 0) {
|
||||
duration = 200;
|
||||
} else {
|
||||
duration = 20;
|
||||
}
|
||||
} else {
|
||||
if (a1 == 0) {
|
||||
if (destination == 0) {
|
||||
duration = 160;
|
||||
} else {
|
||||
duration = 200;
|
||||
|
|
@ -634,10 +663,10 @@ static BOOL Task_BirdFinalApproach(TaskManager *taskman) {
|
|||
int mapObjectId;
|
||||
LocalMapObject *mapObject;
|
||||
FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskman);
|
||||
BirdFinalApproachTaskData *unk = (BirdFinalApproachTaskData *)TaskManager_GetEnvironment(taskman);
|
||||
BirdFinalApproachTaskData *taskData = (BirdFinalApproachTaskData *)TaskManager_GetEnvironment(taskman);
|
||||
u32 *pState = TaskManager_GetStatePtr(taskman);
|
||||
|
||||
if (unk->gameVersion == VERSION_SOULSILVER) {
|
||||
if (taskData->gameVersion == VERSION_SOULSILVER) {
|
||||
species = SPECIES_LUGIA;
|
||||
mapObjectId = obj_D40R0107_lug_obj01;
|
||||
firstFlapDelay = 18;
|
||||
|
|
@ -653,117 +682,117 @@ static BOOL Task_BirdFinalApproach(TaskManager *taskman) {
|
|||
GF_ASSERT(mapObject != NULL);
|
||||
|
||||
switch (*pState) {
|
||||
case 0:
|
||||
GF_ExpHeap_FndInitAllocator(&unk->allocator, HEAP_ID_4, 0x20);
|
||||
Field3dModel_LoadFromFilesystem(&unk->model, NARC_demo_legend, NARC_legend_legend_00000034_NSBMD, HEAP_ID_4);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&unk->anims[0], &unk->model, NARC_demo_legend, NARC_legend_legend_00000035_NSBCA, HEAP_ID_4, &unk->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&unk->anims[1], &unk->model, NARC_demo_legend, NARC_legend_legend_00000036_NSBMA, HEAP_ID_4, &unk->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&unk->anims[2], &unk->model, NARC_demo_legend, NARC_legend_legend_00000037_NSBTP, HEAP_ID_4, &unk->allocator);
|
||||
Field3dObject_InitFromModel(&unk->object, &unk->model);
|
||||
Field3dObject_AddAnimation(&unk->object, &unk->anims[0]);
|
||||
Field3dObject_AddAnimation(&unk->object, &unk->anims[1]);
|
||||
Field3dObject_AddAnimation(&unk->object, &unk->anims[2]);
|
||||
Field3dObject_SetActiveFlag(&unk->object, FALSE);
|
||||
modelAnimListSetFrameIndex(unk->anims,3, 0);
|
||||
case BIRD_FINAL_APPROACH_TASK_STATE_INIT:
|
||||
GF_ExpHeap_FndInitAllocator(&taskData->allocator, HEAP_ID_4, 0x20);
|
||||
Field3dModel_LoadFromFilesystem(&taskData->model, NARC_demo_legend, NARC_legend_legend_00000034_NSBMD, HEAP_ID_4);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&taskData->anims[0], &taskData->model, NARC_demo_legend, NARC_legend_legend_00000035_NSBCA, HEAP_ID_4, &taskData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&taskData->anims[1], &taskData->model, NARC_demo_legend, NARC_legend_legend_00000036_NSBMA, HEAP_ID_4, &taskData->allocator);
|
||||
Field3dModelAnimation_LoadFromFilesystem(&taskData->anims[2], &taskData->model, NARC_demo_legend, NARC_legend_legend_00000037_NSBTP, HEAP_ID_4, &taskData->allocator);
|
||||
Field3dObject_InitFromModel(&taskData->object, &taskData->model);
|
||||
Field3dObject_AddAnimation(&taskData->object, &taskData->anims[0]);
|
||||
Field3dObject_AddAnimation(&taskData->object, &taskData->anims[1]);
|
||||
Field3dObject_AddAnimation(&taskData->object, &taskData->anims[2]);
|
||||
Field3dObject_SetActiveFlag(&taskData->object, FALSE);
|
||||
modelAnimListSetFrameIndex(taskData->anims,3, 0);
|
||||
{
|
||||
VecFx32 pos;
|
||||
MapObject_GetPositionVec(PlayerAvatar_GetMapObject(fieldSystem->playerAvatar), &pos);
|
||||
if (unk->gameVersion == VERSION_HEARTGOLD) {
|
||||
if (taskData->gameVersion == VERSION_HEARTGOLD) {
|
||||
pos.y += FX32_CONST(40);
|
||||
pos.z -= FX32_CONST(16);
|
||||
} else {
|
||||
pos.z -= FX32_CONST(280);
|
||||
}
|
||||
Field3dObj_SetPosEx(&unk->object, pos.x, pos.y, pos.z);
|
||||
Field3dObj_SetPosEx(&taskData->object, pos.x, pos.y, pos.z);
|
||||
}
|
||||
++(*pState);
|
||||
break;
|
||||
case 1:
|
||||
case BIRD_FINAL_APPROACH_TASK_STATE_CORRECT_POS:
|
||||
{
|
||||
VecFx32 pos;
|
||||
MapObject_GetPositionVec(mapObject, &pos);
|
||||
unk->yEnd = pos.y;
|
||||
if (unk->gameVersion == VERSION_HEARTGOLD) {
|
||||
unk->yDelta = FX32_CONST(120);
|
||||
taskData->yEnd = pos.y;
|
||||
if (taskData->gameVersion == VERSION_HEARTGOLD) {
|
||||
taskData->yDelta = FX32_CONST(120);
|
||||
} else {
|
||||
unk->yDelta = FX32_CONST(160);
|
||||
taskData->yDelta = FX32_CONST(160);
|
||||
}
|
||||
pos.y += unk->yDelta;
|
||||
pos.y += taskData->yDelta;
|
||||
MapObject_SetPositionVec(mapObject, &pos);
|
||||
}
|
||||
MapObject_SetVisible(mapObject, FALSE);
|
||||
unk->beforeFirstFlapDelayTimer = 0;
|
||||
unk->betweenFlapsDelayTimer = 0;
|
||||
taskData->delayTimer = 0;
|
||||
taskData->betweenFlapsDelayTimer = 0;
|
||||
++(*pState);
|
||||
break;
|
||||
case 2:
|
||||
++unk->beforeFirstFlapDelayTimer;
|
||||
if (unk->beforeFirstFlapDelayTimer >= firstFlapDelay) {
|
||||
if (unk->betweenFlapsDelayTimer == 0) {
|
||||
case BIRD_FINAL_APPROACH_TASK_STATE_FLAP_DOWN:
|
||||
++taskData->delayTimer;
|
||||
if (taskData->delayTimer >= firstFlapDelay) {
|
||||
if (taskData->betweenFlapsDelayTimer == 0) {
|
||||
PlaySE(flapSfx);
|
||||
unk->betweenFlapsDelayTimer = 24;
|
||||
taskData->betweenFlapsDelayTimer = 24;
|
||||
}
|
||||
--unk->betweenFlapsDelayTimer;
|
||||
--taskData->betweenFlapsDelayTimer;
|
||||
}
|
||||
{
|
||||
VecFx32 pos;
|
||||
BOOL snapped = FALSE;
|
||||
MapObject_GetPositionVec(mapObject, &pos);
|
||||
unk->yDelta -= FX32_ONE;
|
||||
if (unk->yDelta <= 0) {
|
||||
unk->yDelta = 0;
|
||||
taskData->yDelta -= FX32_ONE;
|
||||
if (taskData->yDelta <= 0) {
|
||||
taskData->yDelta = 0;
|
||||
snapped = TRUE;
|
||||
}
|
||||
pos.y = unk->yEnd + unk->yDelta;
|
||||
pos.y = taskData->yEnd + taskData->yDelta;
|
||||
MapObject_SetPositionVec(mapObject, &pos);
|
||||
if (snapped) {
|
||||
unk->beforeFirstFlapDelayTimer = 0;
|
||||
taskData->delayTimer = 0;
|
||||
++(*pState);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
++unk->beforeFirstFlapDelayTimer;
|
||||
if (unk->beforeFirstFlapDelayTimer >= 60) {
|
||||
case BIRD_FINAL_APPROACH_TASK_STATE_DELAY__ALT_ANIM:
|
||||
++taskData->delayTimer;
|
||||
if (taskData->delayTimer >= 60) {
|
||||
sub_0205F328(mapObject, 1);
|
||||
unk->beforeFirstFlapDelayTimer = 0;
|
||||
taskData->delayTimer = 0;
|
||||
++(*pState);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
++unk->beforeFirstFlapDelayTimer;
|
||||
if (unk->beforeFirstFlapDelayTimer >= 50) {
|
||||
Field3dObject_SetActiveFlag(&unk->object, TRUE);
|
||||
case BIRD_FINAL_APPROACH_TASK_STATE_DELAY__CRY:
|
||||
++taskData->delayTimer;
|
||||
if (taskData->delayTimer >= 50) {
|
||||
Field3dObject_SetActiveFlag(&taskData->object, TRUE);
|
||||
PlayCry(species, 0);
|
||||
unk->animTimer = 0;
|
||||
unk->beforeFirstFlapDelayTimer = 0;
|
||||
taskData->animTimer = 0;
|
||||
taskData->delayTimer = 0;
|
||||
++(*pState);
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
case BIRD_FINAL_APPROACH_TASK_STATE_EXPANDING_CIRCLE_EFFECT:
|
||||
{
|
||||
BOOL animDone = modelAnimListAdvanceNoLoop(unk->anims, 3);
|
||||
++unk->animTimer;
|
||||
if (animDone && unk->animTimer >= 65) {
|
||||
BOOL animDone = modelAnimListAdvanceNoLoop(taskData->anims, 3);
|
||||
++taskData->animTimer;
|
||||
if (animDone && taskData->animTimer >= 65) {
|
||||
sub_0205F328(mapObject, 0);
|
||||
unk->beforeFirstFlapDelayTimer = 0;
|
||||
taskData->delayTimer = 0;
|
||||
++(*pState);
|
||||
}
|
||||
}
|
||||
Field3dObj_Draw(&unk->object);
|
||||
Field3dObj_Draw(&taskData->object);
|
||||
break;
|
||||
case 6:
|
||||
++unk->beforeFirstFlapDelayTimer;
|
||||
if (unk->beforeFirstFlapDelayTimer >= 30) {
|
||||
case BIRD_FINAL_APPROACH_TASK_STATE_WAIT_AFTER_ANIM:
|
||||
++taskData->delayTimer;
|
||||
if (taskData->delayTimer >= 30) {
|
||||
++(*pState);
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
Field3dModelAnimation_Unload(&unk->anims[2], &unk->allocator);
|
||||
Field3dModelAnimation_Unload(&unk->anims[1], &unk->allocator);
|
||||
Field3dModelAnimation_Unload(&unk->anims[0], &unk->allocator);
|
||||
Field3dModel_Unload(&unk->model);
|
||||
FreeToHeap(unk);
|
||||
case BIRD_FINAL_APPROACH_TASK_STATE_FINISH:
|
||||
Field3dModelAnimation_Unload(&taskData->anims[2], &taskData->allocator);
|
||||
Field3dModelAnimation_Unload(&taskData->anims[1], &taskData->allocator);
|
||||
Field3dModelAnimation_Unload(&taskData->anims[0], &taskData->allocator);
|
||||
Field3dModel_Unload(&taskData->model);
|
||||
FreeToHeap(taskData);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user