mirror of
https://github.com/zeldaret/mm.git
synced 2025-02-21 14:00:48 +00:00
Animation Cleanup Part 1: Dm Actors (#1290)
* DM cleanup * cleanup * fix pointer * rm unused anim enum * PR Suggestions * spacing * missed one * More PR Suggestions * oops
This commit is contained in:
parent
b3eae0e5b7
commit
82318a1c1b
@ -640,7 +640,7 @@ s32 Npc_UpdateTalking(PlayState* play, Actor* actor, s16* talkState, f32 interac
|
||||
void Npc_TrackPoint(Actor* actor, NpcInteractInfo* interactInfo, s16 presetIndex, s16 trackingMode);
|
||||
void func_800BD9E0(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, s16 alpha);
|
||||
void func_800BDAA0(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, s16 alpha);
|
||||
void Actor_ChangeAnimationByInfo(SkelAnime* skelAnime, AnimationInfo* animationInfo, s32 animIndex);
|
||||
void Actor_ChangeAnimationByInfo(SkelAnime* skelAnime, AnimationInfo* animInfo, s32 animIndex);
|
||||
void Actor_Noop(Actor* actor, PlayState* play);
|
||||
|
||||
void Gfx_DrawDListOpa(PlayState* play, Gfx* dlist);
|
||||
|
@ -4451,18 +4451,19 @@ s16 func_800BDB6C(Actor* actor, PlayState* play, s16 arg2, f32 arg3) {
|
||||
return arg2;
|
||||
}
|
||||
|
||||
void Actor_ChangeAnimationByInfo(SkelAnime* skelAnime, AnimationInfo* animationInfo, s32 animIndex) {
|
||||
f32 frameCount;
|
||||
void Actor_ChangeAnimationByInfo(SkelAnime* skelAnime, AnimationInfo* animInfo, s32 animIndex) {
|
||||
f32 endFrame;
|
||||
|
||||
animationInfo += animIndex;
|
||||
if (animationInfo->frameCount > 0.0f) {
|
||||
frameCount = animationInfo->frameCount;
|
||||
animInfo += animIndex;
|
||||
|
||||
if (animInfo->frameCount > 0.0f) {
|
||||
endFrame = animInfo->frameCount;
|
||||
} else {
|
||||
frameCount = Animation_GetLastFrame(&animationInfo->animation->common);
|
||||
endFrame = Animation_GetLastFrame(&animInfo->animation->common);
|
||||
}
|
||||
|
||||
Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame,
|
||||
frameCount, animationInfo->mode, animationInfo->morphFrames);
|
||||
Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame,
|
||||
animInfo->mode, animInfo->morphFrames);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -27,19 +27,26 @@ ActorInit Dm_Ah_InitVars = {
|
||||
(ActorFunc)DmAh_Draw,
|
||||
};
|
||||
|
||||
static AnimationInfoS sAnimations[] = {
|
||||
{ &object_ah_Anim_001860, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
{ &object_ah_Anim_000DDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
typedef enum {
|
||||
/* -1 */ DMAH_ANIM_NONE = -1,
|
||||
/* 0 */ DMAH_ANIM_0,
|
||||
/* 1 */ DMAH_ANIM_1,
|
||||
/* 2 */ DMAH_ANIM_MAX
|
||||
} DmAhAnimation;
|
||||
|
||||
static AnimationInfoS sAnimationInfo[DMAH_ANIM_MAX] = {
|
||||
{ &object_ah_Anim_001860, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAH_ANIM_0
|
||||
{ &object_ah_Anim_000DDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAH_ANIM_1
|
||||
};
|
||||
|
||||
s32 func_80C1D410(DmAh* this, s32 animationIndex) {
|
||||
s32 ret = false;
|
||||
s32 DmAh_ChangeAnim(DmAh* this, s32 animIndex) {
|
||||
s32 didAnimChange = false;
|
||||
|
||||
if (animationIndex != this->animationIndex) {
|
||||
this->animationIndex = animationIndex;
|
||||
ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimations, animationIndex);
|
||||
if (this->animIndex != animIndex) {
|
||||
this->animIndex = animIndex;
|
||||
didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
|
||||
}
|
||||
return ret;
|
||||
return didAnimChange;
|
||||
}
|
||||
|
||||
void func_80C1D458(DmAh* this) {
|
||||
@ -122,52 +129,54 @@ Actor* func_80C1D78C(PlayState* play) {
|
||||
return foundActor;
|
||||
}
|
||||
|
||||
void func_80C1D7FC(DmAh* this, PlayState* play) {
|
||||
s32 D_80C1DE00[] = { 0, 0, 0, 0, 0 };
|
||||
void DmAh_HandleCutscene(DmAh* this, PlayState* play) {
|
||||
s32 csAnimIndex[] = {
|
||||
DMAH_ANIM_0, DMAH_ANIM_0, DMAH_ANIM_0, DMAH_ANIM_0, DMAH_ANIM_0,
|
||||
};
|
||||
u16 cueId;
|
||||
s32 cueChannel;
|
||||
|
||||
if (play->csCtx.state != CS_STATE_IDLE) {
|
||||
if (!this->unk_29C) {
|
||||
if (!this->isCutscenePlaying) {
|
||||
this->cueId = 255;
|
||||
this->unk_29C = true;
|
||||
this->animationIndex2 = this->animationIndex;
|
||||
this->isCutscenePlaying = true;
|
||||
this->prevAnimIndex = this->animIndex;
|
||||
}
|
||||
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_562)) {
|
||||
cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_562);
|
||||
cueId = play->csCtx.actorCues[cueChannel]->id;
|
||||
if (this->cueId != (u8)cueId) {
|
||||
this->cueId = cueId;
|
||||
func_80C1D410(this, D_80C1DE00[cueId]);
|
||||
DmAh_ChangeAnim(this, csAnimIndex[cueId]);
|
||||
}
|
||||
Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
|
||||
}
|
||||
} else if (this->unk_29C) {
|
||||
this->unk_29C = false;
|
||||
func_80C1D410(this, this->animationIndex2);
|
||||
} else if (this->isCutscenePlaying) {
|
||||
this->isCutscenePlaying = false;
|
||||
DmAh_ChangeAnim(this, this->prevAnimIndex);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80C1D92C(DmAh* this, PlayState* play) {
|
||||
void DmAh_DoNothing(DmAh* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void DmAh_Init(Actor* thisx, PlayState* play) {
|
||||
DmAh* this = THIS;
|
||||
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f);
|
||||
SkelAnime_InitFlex(play, &this->skelAnime, &object_ah_Skel_009E70, NULL, this->morphTable, this->jointTable,
|
||||
SkelAnime_InitFlex(play, &this->skelAnime, &object_ah_Skel_009E70, NULL, this->jointTable, this->morphTable,
|
||||
OBJECT_AH_LIMB_MAX);
|
||||
this->animationIndex = -1;
|
||||
func_80C1D410(this, 0);
|
||||
this->animIndex = DMAH_ANIM_NONE;
|
||||
DmAh_ChangeAnim(this, DMAH_ANIM_0);
|
||||
this->actor.flags &= ~ACTOR_FLAG_1;
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->unk_27C |= 1;
|
||||
if ((play->sceneId == SCENE_YADOYA) && (play->curSpawn == 4)) {
|
||||
this->unk_280 = func_80C1D78C(play);
|
||||
func_80C1D410(this, 1);
|
||||
this->actionFunc = func_80C1D92C;
|
||||
DmAh_ChangeAnim(this, DMAH_ANIM_1);
|
||||
this->actionFunc = DmAh_DoNothing;
|
||||
} else {
|
||||
this->actionFunc = func_80C1D7FC;
|
||||
this->actionFunc = DmAh_HandleCutscene;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,8 +16,8 @@ typedef struct DmAh {
|
||||
/* 0x198 */ Vec3f unk_198;
|
||||
/* 0x1A4 */ Vec3s unk_1A4;
|
||||
/* 0x1AA */ Vec3s unk_1AA;
|
||||
/* 0x1B0 */ Vec3s morphTable[OBJECT_AH_LIMB_MAX];
|
||||
/* 0x216 */ Vec3s jointTable[OBJECT_AH_LIMB_MAX];
|
||||
/* 0x1B0 */ Vec3s jointTable[OBJECT_AH_LIMB_MAX];
|
||||
/* 0x216 */ Vec3s morphTable[OBJECT_AH_LIMB_MAX];
|
||||
/* 0x27C */ u16 unk_27C;
|
||||
/* 0x27E */ u8 cueId;
|
||||
/* 0x280 */ Actor* unk_280;
|
||||
@ -28,9 +28,9 @@ typedef struct DmAh {
|
||||
/* 0x28C */ s16 unk_28C;
|
||||
/* 0x28E */ s16 unk_28E;
|
||||
/* 0x290 */ s16 unk_290;
|
||||
/* 0x294 */ s32 animationIndex;
|
||||
/* 0x298 */ s32 animationIndex2;
|
||||
/* 0x29C */ s32 unk_29C;
|
||||
/* 0x294 */ s32 animIndex;
|
||||
/* 0x298 */ s32 prevAnimIndex;
|
||||
/* 0x29C */ s32 isCutscenePlaying;
|
||||
} DmAh; // size = 0x2A0
|
||||
|
||||
#endif // Z_DM_AH_H
|
||||
|
@ -28,47 +28,51 @@ ActorInit Dm_Al_InitVars = {
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ MADAME_AROMA_ANIM_0,
|
||||
/* 1 */ MADAME_AROMA_ANIM_1
|
||||
/* -1 */ MADAME_AROMA_ANIM_NONE = -1,
|
||||
/* 0 */ MADAME_AROMA_ANIM_0,
|
||||
/* 1 */ MADAME_AROMA_ANIM_MAX
|
||||
} DmAlAnimation;
|
||||
|
||||
static AnimationInfoS sAnimationInfo[] = {
|
||||
{ &object_al_Anim_00DBE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
static AnimationInfoS sAnimationInfo[MADAME_AROMA_ANIM_MAX] = {
|
||||
{ &object_al_Anim_00DBE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // MADAME_AROMA_ANIM_0
|
||||
};
|
||||
|
||||
s32 DmAl_ChangeAnim(DmAl* this, s32 animIndex) {
|
||||
s32 didAnimationChange = false;
|
||||
s32 didAnimChange = false;
|
||||
|
||||
if (animIndex != this->animIndex) {
|
||||
if (this->animIndex != animIndex) {
|
||||
this->animIndex = animIndex;
|
||||
didAnimationChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
|
||||
didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
|
||||
}
|
||||
return didAnimationChange;
|
||||
|
||||
return didAnimChange;
|
||||
}
|
||||
|
||||
void func_80C1BDD8(DmAl* this, PlayState* play) {
|
||||
s32 D_80C1C280[] = { 0, 0, 0, 0, 0 };
|
||||
void DmAl_HandleCutscene(DmAl* this, PlayState* play) {
|
||||
s32 csAnimIndex[] = {
|
||||
MADAME_AROMA_ANIM_0, MADAME_AROMA_ANIM_0, MADAME_AROMA_ANIM_0, MADAME_AROMA_ANIM_0, MADAME_AROMA_ANIM_0,
|
||||
};
|
||||
u16 cueId;
|
||||
s32 cueChannel;
|
||||
|
||||
if (play->csCtx.state != CS_STATE_IDLE) {
|
||||
if (!this->unk_45C) {
|
||||
if (!this->isCutscenePlaying) {
|
||||
this->cueId = 255;
|
||||
this->unk_45C = true;
|
||||
this->animIndex2 = this->animIndex;
|
||||
this->isCutscenePlaying = true;
|
||||
this->prevAnimIndex = this->animIndex;
|
||||
}
|
||||
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_562)) {
|
||||
cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_562);
|
||||
cueId = play->csCtx.actorCues[cueChannel]->id;
|
||||
if (this->cueId != (u8)cueId) {
|
||||
this->cueId = cueId;
|
||||
DmAl_ChangeAnim(this, D_80C1C280[cueId]);
|
||||
DmAl_ChangeAnim(this, csAnimIndex[cueId]);
|
||||
}
|
||||
Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
|
||||
}
|
||||
} else if (this->unk_45C) {
|
||||
this->unk_45C = false;
|
||||
DmAl_ChangeAnim(this, this->animIndex2);
|
||||
} else if (this->isCutscenePlaying) {
|
||||
this->isCutscenePlaying = false;
|
||||
DmAl_ChangeAnim(this, this->prevAnimIndex);
|
||||
}
|
||||
}
|
||||
|
||||
@ -78,11 +82,11 @@ void DmAl_Init(Actor* thisx, PlayState* play) {
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f);
|
||||
SkelAnime_InitFlex(play, &this->skelAnime, &gMadameAromaSkel, NULL, this->jointTable, this->morphTable,
|
||||
MADAME_AROMA_LIMB_MAX);
|
||||
this->animIndex = -1;
|
||||
this->animIndex = MADAME_AROMA_ANIM_NONE;
|
||||
DmAl_ChangeAnim(this, MADAME_AROMA_ANIM_0);
|
||||
this->actor.flags &= ~ACTOR_FLAG_1;
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->actionFunc = func_80C1BDD8;
|
||||
this->actionFunc = DmAl_HandleCutscene;
|
||||
}
|
||||
|
||||
void DmAl_Destroy(Actor* thisx, PlayState* play) {
|
||||
@ -106,6 +110,9 @@ s32 DmAl_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* ro
|
||||
case MADAME_AROMA_LIMB_SHAWL_RIGHT_LOWER:
|
||||
*dList = NULL;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -117,21 +124,27 @@ void DmAl_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
|
||||
case MADAME_AROMA_LIMB_SHAWL_MIDDLE:
|
||||
Matrix_Get(&this->shawlMatrices[0]);
|
||||
break;
|
||||
|
||||
case MADAME_AROMA_LIMB_SHAWL_UPPER:
|
||||
Matrix_Get(&this->shawlMatrices[1]);
|
||||
break;
|
||||
|
||||
case MADAME_AROMA_LIMB_SHAWL_LEFT_LOWER_MIDDLE:
|
||||
Matrix_Get(&this->shawlMatrices[2]);
|
||||
break;
|
||||
|
||||
case MADAME_AROMA_LIMB_SHAWL_LEFT_LOWER:
|
||||
Matrix_Get(&this->shawlMatrices[3]);
|
||||
break;
|
||||
|
||||
case MADAME_AROMA_LIMB_SHAWL_RIGHT_LOWER_MIDDLE:
|
||||
Matrix_Get(&this->shawlMatrices[4]);
|
||||
break;
|
||||
|
||||
case MADAME_AROMA_LIMB_SHAWL_RIGHT_LOWER:
|
||||
Matrix_Get(&this->shawlMatrices[5]);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -17,13 +17,8 @@ typedef struct DmAl {
|
||||
/* 0x3AE */ Vec3s morphTable[MADAME_AROMA_LIMB_MAX];
|
||||
/* 0x450 */ u8 cueId;
|
||||
/* 0x454 */ s32 animIndex;
|
||||
/* 0x458 */ s32 animIndex2;
|
||||
/* 0x45C */ s32 unk_45C;
|
||||
/* 0x458 */ s32 prevAnimIndex;
|
||||
/* 0x45C */ s32 isCutscenePlaying;
|
||||
} DmAl; // size = 0x460
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ MADAME_AROMA_ANIMATION_0,
|
||||
/* 1 */ MADAME_AROMA_ANIMATION_1
|
||||
} DmAlAnimations;
|
||||
|
||||
#endif // Z_DM_AL_H
|
||||
|
@ -17,8 +17,8 @@ void DmAn_Destroy(Actor* thisx, PlayState* play);
|
||||
void DmAn_Update(Actor* thisx, PlayState* play);
|
||||
|
||||
void func_80C1C958(DmAn* this, PlayState* play);
|
||||
void func_80C1CAB0(DmAn* this, PlayState* play);
|
||||
void func_80C1CC80(DmAn* this, PlayState* play);
|
||||
void DmAn_HandleCutscene(DmAn* this, PlayState* play);
|
||||
void DmAn_DoNothing(DmAn* this, PlayState* play);
|
||||
void func_80C1D0B0(Actor* thisx, PlayState* play);
|
||||
|
||||
ActorInit Dm_An_InitVars = {
|
||||
@ -33,29 +33,48 @@ ActorInit Dm_An_InitVars = {
|
||||
(ActorFunc)NULL,
|
||||
};
|
||||
|
||||
static AnimationInfoS sAnimationInfo[] = {
|
||||
{ &object_an1_Anim_007E08, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
{ &object_an1_Anim_0071E8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
{ &object_an4_Anim_006CC0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
{ &object_an1_Anim_013E1C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
{ &object_an4_Anim_007E3C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
|
||||
{ &object_an4_Anim_0088C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
{ &object_an4_Anim_0013C8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
|
||||
{ &object_an4_Anim_002550, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
{ &object_an4_Anim_00353C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
|
||||
{ &object_an4_Anim_004498, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
{ &object_an4_Anim_0060B4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
|
||||
{ &object_an4_Anim_00041C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
|
||||
{ &object_an4_Anim_004A78, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
|
||||
{ &object_an4_Anim_00506C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
typedef enum {
|
||||
/* -1 */ DMAN_ANIM_NONE = -1,
|
||||
/* 0x0 */ DMAN_ANIM_0,
|
||||
/* 0x1 */ DMAN_ANIM_1,
|
||||
/* 0x2 */ DMAN_ANIM_2,
|
||||
/* 0x3 */ DMAN_ANIM_3,
|
||||
/* 0x4 */ DMAN_ANIM_4,
|
||||
/* 0x5 */ DMAN_ANIM_5,
|
||||
/* 0x6 */ DMAN_ANIM_6,
|
||||
/* 0x7 */ DMAN_ANIM_7,
|
||||
/* 0x8 */ DMAN_ANIM_8,
|
||||
/* 0x9 */ DMAN_ANIM_9,
|
||||
/* 0xA */ DMAN_ANIM_10,
|
||||
/* 0xB */ DMAN_ANIM_11,
|
||||
/* 0xC */ DMAN_ANIM_12,
|
||||
/* 0xD */ DMAN_ANIM_13,
|
||||
/* 0xE */ DMAN_ANIM_MAX
|
||||
} DmAnAnimation;
|
||||
|
||||
static AnimationInfoS sAnimationInfo[DMAN_ANIM_MAX] = {
|
||||
{ &object_an1_Anim_007E08, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_0
|
||||
{ &object_an1_Anim_0071E8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_1
|
||||
{ &object_an4_Anim_006CC0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_2
|
||||
{ &object_an1_Anim_013E1C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_3
|
||||
{ &object_an4_Anim_007E3C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_4
|
||||
{ &object_an4_Anim_0088C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_5
|
||||
{ &object_an4_Anim_0013C8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_6
|
||||
{ &object_an4_Anim_002550, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_7
|
||||
{ &object_an4_Anim_00353C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_8
|
||||
{ &object_an4_Anim_004498, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_9
|
||||
{ &object_an4_Anim_0060B4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_10
|
||||
{ &object_an4_Anim_00041C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_11
|
||||
{ &object_an4_Anim_004A78, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_12
|
||||
{ &object_an4_Anim_00506C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_13
|
||||
};
|
||||
|
||||
s32 func_80C1C410(DmAn* this, PlayState* play) {
|
||||
s32 DmAn_UpdateSkelAnime(DmAn* this, PlayState* play) {
|
||||
s8 objectIndex = this->actor.objBankIndex;
|
||||
s8 objectIndex2;
|
||||
s32 ret = false;
|
||||
s32 isAnimFinished = false;
|
||||
|
||||
if (this->unk_2C8 < 2) {
|
||||
if (this->animIndex <= DMAN_ANIM_1) {
|
||||
objectIndex2 = this->actor.objBankIndex;
|
||||
} else {
|
||||
objectIndex2 = this->unk_2AC;
|
||||
@ -63,30 +82,32 @@ s32 func_80C1C410(DmAn* this, PlayState* play) {
|
||||
|
||||
if (objectIndex2 >= 0) {
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment);
|
||||
ret = SkelAnime_Update(&this->skelAnime);
|
||||
isAnimFinished = SkelAnime_Update(&this->skelAnime);
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment);
|
||||
}
|
||||
return ret;
|
||||
|
||||
return isAnimFinished;
|
||||
}
|
||||
|
||||
s32 func_80C1C4D8(DmAn* this, PlayState* play, s32 arg2) {
|
||||
s32 DmAn_ChangeAnim(DmAn* this, PlayState* play, s32 animIndex) {
|
||||
s8 objectIndex = this->actor.objBankIndex;
|
||||
s8 objectIndex2;
|
||||
s32 ret = false;
|
||||
s32 didAnimChange = false;
|
||||
|
||||
if (arg2 < 2) {
|
||||
if (animIndex <= DMAN_ANIM_1) {
|
||||
objectIndex2 = this->actor.objBankIndex;
|
||||
} else {
|
||||
objectIndex2 = this->unk_2AC;
|
||||
}
|
||||
|
||||
if ((objectIndex2 >= 0) && (arg2 != this->unk_2C8)) {
|
||||
if ((objectIndex2 >= 0) && (this->animIndex != animIndex)) {
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment);
|
||||
this->unk_2C8 = arg2;
|
||||
ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg2);
|
||||
this->animIndex = animIndex;
|
||||
didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment);
|
||||
}
|
||||
return ret;
|
||||
|
||||
return didAnimChange;
|
||||
}
|
||||
|
||||
void func_80C1C5B4(DmAn* this) {
|
||||
@ -176,8 +197,8 @@ void func_80C1C958(DmAn* this, PlayState* play) {
|
||||
SkelAnime_InitFlex(play, &this->skelAnime, &object_an1_Skel_012618, NULL, this->jointTable, this->morphTable,
|
||||
OBJECT_AN1_LIMB_MAX);
|
||||
|
||||
this->unk_2C8 = -1;
|
||||
func_80C1C4D8(this, play, 0);
|
||||
this->animIndex = DMAN_ANIM_NONE;
|
||||
DmAn_ChangeAnim(this, play, DMAN_ANIM_0);
|
||||
this->actor.flags &= ~ACTOR_FLAG_1;
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->unk_2AE |= 1;
|
||||
@ -185,25 +206,28 @@ void func_80C1C958(DmAn* this, PlayState* play) {
|
||||
|
||||
if ((play->sceneId == SCENE_YADOYA) && (play->curSpawn == 4)) {
|
||||
this->unk_2B4 = func_80C1C8E8(play);
|
||||
func_80C1C4D8(this, play, 1);
|
||||
this->actionFunc = func_80C1CC80;
|
||||
DmAn_ChangeAnim(this, play, DMAN_ANIM_1);
|
||||
this->actionFunc = DmAn_DoNothing;
|
||||
} else {
|
||||
this->actionFunc = func_80C1CAB0;
|
||||
this->actionFunc = DmAn_HandleCutscene;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void func_80C1CAB0(DmAn* this, PlayState* play) {
|
||||
s32 sp28[] = { 0, 0, 12, 2, 4, 6, 8, 10, 11, 3 };
|
||||
void DmAn_HandleCutscene(DmAn* this, PlayState* play) {
|
||||
s32 csAnimIndex[] = {
|
||||
DMAN_ANIM_0, DMAN_ANIM_0, DMAN_ANIM_12, DMAN_ANIM_2, DMAN_ANIM_4,
|
||||
DMAN_ANIM_6, DMAN_ANIM_8, DMAN_ANIM_10, DMAN_ANIM_11, DMAN_ANIM_3,
|
||||
};
|
||||
u16 cueId;
|
||||
s32 cueChannel;
|
||||
|
||||
if (play->csCtx.state != CS_STATE_IDLE) {
|
||||
if (this->unk_2D0 == 0) {
|
||||
if (!this->isCutscenePlaying) {
|
||||
this->cueId = 255;
|
||||
this->unk_2D0 = 1;
|
||||
this->unk_2D4 = 0;
|
||||
this->unk_2CC = this->unk_2C8;
|
||||
this->isCutscenePlaying = true;
|
||||
this->didAnimChangeInCs = false;
|
||||
this->prevAnimIndex = this->animIndex;
|
||||
}
|
||||
|
||||
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_557)) {
|
||||
@ -212,8 +236,8 @@ void func_80C1CAB0(DmAn* this, PlayState* play) {
|
||||
|
||||
if (this->cueId != (u8)cueId) {
|
||||
this->cueId = cueId;
|
||||
this->unk_2D4 = 1;
|
||||
func_80C1C4D8(this, play, sp28[cueId]);
|
||||
this->didAnimChangeInCs = true;
|
||||
DmAn_ChangeAnim(this, play, csAnimIndex[cueId]);
|
||||
}
|
||||
|
||||
switch (this->cueId) {
|
||||
@ -223,9 +247,10 @@ void func_80C1CAB0(DmAn* this, PlayState* play) {
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
if ((this->unk_2C8 == 12) || (this->unk_2C8 == 4) || (this->unk_2C8 == 6) || (this->unk_2C8 == 8)) {
|
||||
if ((this->animIndex == DMAN_ANIM_12) || (this->animIndex == DMAN_ANIM_4) ||
|
||||
(this->animIndex == DMAN_ANIM_6) || (this->animIndex == DMAN_ANIM_8)) {
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80C1C4D8(this, play, this->unk_2C8 + 1);
|
||||
DmAn_ChangeAnim(this, play, this->animIndex + 1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -235,14 +260,14 @@ void func_80C1CAB0(DmAn* this, PlayState* play) {
|
||||
}
|
||||
Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
|
||||
}
|
||||
} else if (this->unk_2D0 != 0) {
|
||||
this->unk_2D0 = 0;
|
||||
this->unk_2D4 = 0;
|
||||
func_80C1C4D8(this, play, this->unk_2CC);
|
||||
} else if (this->isCutscenePlaying) {
|
||||
this->isCutscenePlaying = false;
|
||||
this->didAnimChangeInCs = false;
|
||||
DmAn_ChangeAnim(this, play, this->prevAnimIndex);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80C1CC80(DmAn* this, PlayState* play) {
|
||||
void DmAn_DoNothing(DmAn* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void DmAn_Init(Actor* thisx, PlayState* play) {
|
||||
@ -264,7 +289,7 @@ void DmAn_Update(Actor* thisx, PlayState* play) {
|
||||
func_80C1C83C(this, play);
|
||||
|
||||
if (this->actor.draw != NULL) {
|
||||
func_80C1C410(this, play);
|
||||
DmAn_UpdateSkelAnime(this, play);
|
||||
func_80C1C5B4(this);
|
||||
}
|
||||
Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
|
||||
@ -280,7 +305,7 @@ void func_80C1CD80(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto
|
||||
s8 sp2B = this->actor.objBankIndex;
|
||||
s8 sp2A = this->unk_2AD;
|
||||
|
||||
if ((limbIndex == OBJECT_AN1_LIMB_05) && (this->unk_2D4 != 0)) {
|
||||
if ((limbIndex == OBJECT_AN1_LIMB_05) && this->didAnimChangeInCs) {
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
Matrix_Push();
|
||||
|
@ -30,10 +30,10 @@ typedef struct DmAn {
|
||||
/* 0x2C0 */ s16 unk_2C0;
|
||||
/* 0x2C2 */ s16 unk_2C2;
|
||||
/* 0x2C4 */ s16 unk_2C4;
|
||||
/* 0x2C8 */ s32 unk_2C8;
|
||||
/* 0x2CC */ s32 unk_2CC;
|
||||
/* 0x2D0 */ s32 unk_2D0;
|
||||
/* 0x2D4 */ s32 unk_2D4;
|
||||
/* 0x2C8 */ s32 animIndex;
|
||||
/* 0x2CC */ s32 prevAnimIndex;
|
||||
/* 0x2D0 */ s32 isCutscenePlaying;
|
||||
/* 0x2D4 */ s32 didAnimChangeInCs;
|
||||
} DmAn; // size = 0x2D8
|
||||
|
||||
#endif // Z_DM_AN_H
|
||||
|
@ -30,21 +30,40 @@ ActorInit Dm_Bal_InitVars = {
|
||||
(ActorFunc)DmBal_Draw,
|
||||
};
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &object_bal_Anim_0005FC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
|
||||
{ &object_bal_Anim_000840, 1.5f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
|
||||
{ &object_bal_Anim_000840, 1.5f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f },
|
||||
{ &object_bal_Anim_00A7DC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f },
|
||||
{ &object_bal_Anim_00B1E8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
|
||||
{ &object_bal_Anim_00B604, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
|
||||
{ &object_bal_Anim_00C498, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
|
||||
{ &object_bal_Anim_00C8D8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
|
||||
{ &object_bal_Anim_00C8D8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
|
||||
{ &object_bal_Anim_00C498, 1.0f, 23.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
|
||||
{ &object_bal_Anim_00D530, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
|
||||
{ &object_bal_Anim_000C78, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f },
|
||||
{ &object_bal_Anim_00CB78, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f },
|
||||
{ &object_bal_Anim_001804, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f },
|
||||
typedef enum {
|
||||
/* -1 */ DMBAL_ANIM_NONE = -1,
|
||||
/* 0x0 */ DMBAL_ANIM_0,
|
||||
/* 0x1 */ DMBAL_ANIM_1,
|
||||
/* 0x2 */ DMBAL_ANIM_2,
|
||||
/* 0x3 */ DMBAL_ANIM_3,
|
||||
/* 0x4 */ DMBAL_ANIM_4,
|
||||
/* 0x5 */ DMBAL_ANIM_5,
|
||||
/* 0x6 */ DMBAL_ANIM_6,
|
||||
/* 0x7 */ DMBAL_ANIM_7,
|
||||
/* 0x8 */ DMBAL_ANIM_8,
|
||||
/* 0x9 */ DMBAL_ANIM_9,
|
||||
/* 0xA */ DMBAL_ANIM_10,
|
||||
/* 0xB */ DMBAL_ANIM_11,
|
||||
/* 0xC */ DMBAL_ANIM_12,
|
||||
/* 0xD */ DMBAL_ANIM_13,
|
||||
/* 0xE */ DMBAL_ANIM_MAX
|
||||
} DmBalAnimation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[DMBAL_ANIM_MAX] = {
|
||||
{ &object_bal_Anim_0005FC, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_0
|
||||
{ &object_bal_Anim_000840, 1.5f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_1
|
||||
{ &object_bal_Anim_000840, 1.5f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // DMBAL_ANIM_2
|
||||
{ &object_bal_Anim_00A7DC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -4.0f }, // DMBAL_ANIM_3
|
||||
{ &object_bal_Anim_00B1E8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_4
|
||||
{ &object_bal_Anim_00B604, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_5
|
||||
{ &object_bal_Anim_00C498, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // DMBAL_ANIM_6
|
||||
{ &object_bal_Anim_00C8D8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_7
|
||||
{ &object_bal_Anim_00C8D8, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // DMBAL_ANIM_8
|
||||
{ &object_bal_Anim_00C498, 1.0f, 23.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // DMBAL_ANIM_9
|
||||
{ &object_bal_Anim_00D530, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // DMBAL_ANIM_10
|
||||
{ &object_bal_Anim_000C78, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, // DMBAL_ANIM_11
|
||||
{ &object_bal_Anim_00CB78, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, // DMBAL_ANIM_12
|
||||
{ &object_bal_Anim_001804, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -2.0f }, // DMBAL_ANIM_13
|
||||
};
|
||||
|
||||
void DmBal_Init(Actor* thisx, PlayState* play) {
|
||||
@ -73,7 +92,7 @@ void DmBal_SetupDoNothing(DmBal* this) {
|
||||
void DmBal_DoNothing(DmBal* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void func_80C1EAE8(DmBal* this, PlayState* play) {
|
||||
void DmBal_HandleCutscene(DmBal* this, PlayState* play) {
|
||||
static u16 sCueId = 99;
|
||||
s32 cueChannel;
|
||||
|
||||
@ -86,14 +105,19 @@ void func_80C1EAE8(DmBal* this, PlayState* play) {
|
||||
case 1:
|
||||
this->keepEyesShut = false;
|
||||
this->eyeIndex = 0;
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, DMBAL_ANIM_0);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
this->keepEyesShut = true;
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 12);
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, DMBAL_ANIM_12);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 13);
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, DMBAL_ANIM_13);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (sCueId == 3) {
|
||||
@ -165,7 +189,7 @@ void DmBal_Update(Actor* thisx, PlayState* play) {
|
||||
DmBal_SpawnPaper(this, play, &pos, &vel, -0.5f);
|
||||
}
|
||||
this->actionFunc(this, play);
|
||||
func_80C1EAE8(this, play);
|
||||
DmBal_HandleCutscene(this, play);
|
||||
func_80C1EC60(this, play);
|
||||
DmBal_UpdateEyes(this);
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
@ -175,7 +199,7 @@ s32 DmBal_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
|
||||
DmBal* this = THIS;
|
||||
Vec3s rots;
|
||||
|
||||
if (limbIndex == 6) {
|
||||
if (limbIndex == OBJECT_BAL_LIMB_06) {
|
||||
rots.x = Math_SinS(this->unk_33A) * (0x10000 / 18);
|
||||
rots.z = Math_CosS(this->unk_33A) * (0x10000 / 18);
|
||||
Matrix_RotateZYX(rots.x, 0, rots.z, MTXMODE_APPLY);
|
||||
|
@ -32,92 +32,182 @@ ActorInit Dm_Char00_InitVars = {
|
||||
(ActorFunc)DmChar00_Draw,
|
||||
};
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &gameplay_keep_Anim_02B2E8, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &gameplay_keep_Anim_029140, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_004FF4, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_0053A4, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_005B68, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_006328, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_00FB30, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_010590, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_005B68, 1.0f, 37.0f, 56.0f, 4, 0.0f },
|
||||
{ &object_delf_Anim_006328, 1.0f, 37.0f, 56.0f, 4, 0.0f },
|
||||
{ &object_delf_Anim_00E024, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_00F0D0, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_011C70, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_011FE0, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_011088, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_0118FC, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_012388, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_012738, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_013BE0, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_013E80, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_007B04, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_0080A4, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_00859C, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_008A44, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_00EB18, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_00EBB0, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_00EE30, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_012BBC, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_012EF8, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_00C248, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_00C588, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_00BDFC, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_00C0BC, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_013040, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_013378, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_0091BC, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_0094B0, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_009C4C, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_009F40, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_009010, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_0097C4, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_00A7B4, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_00C588, 1.0f, 0.0f, -1.0f, 0, -10.0f },
|
||||
{ &object_delf_Anim_004FF4, 1.0f, 0.0f, -1.0f, 2, -10.0f },
|
||||
{ &object_delf_Anim_011C70, 1.0f, 0.0f, -1.0f, 0, -10.0f },
|
||||
{ &object_delf_Anim_006B28, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_014190, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_01447C, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_003FAC, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_004798, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_0042E8, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_004C44, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_01088C, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_01498C, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_014E9C, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_00CEE0, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_00D260, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_00C690, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_00C790, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_00AF78, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_00B2B8, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_00BCD8, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_006D74, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_00706C, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_0072B0, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_007570, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_00A2A4, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_00A4B4, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_006614, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_015114, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_00CCD4, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_00046C, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_00065C, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_00377C, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_003148, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_001410, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_0010F8, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_00199C, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_003BB4, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_001754, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_0008E0, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_000A94, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_001ED4, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
{ &object_delf_Anim_001B28, 1.0f, 0.0f, -1.0f, 2, 0.0f },
|
||||
{ &object_delf_Anim_000E44, 1.0f, 0.0f, -1.0f, 0, 0.0f },
|
||||
typedef enum {
|
||||
/* -1 */ DMCHAR00_ANIM_NONE = -1,
|
||||
/* 0x00 */ DMCHAR00_ANIM_0,
|
||||
/* 0x01 */ DMCHAR00_ANIM_1,
|
||||
/* 0x02 */ DMCHAR00_ANIM_2,
|
||||
/* 0x03 */ DMCHAR00_ANIM_3,
|
||||
/* 0x04 */ DMCHAR00_ANIM_4,
|
||||
/* 0x05 */ DMCHAR00_ANIM_5,
|
||||
/* 0x06 */ DMCHAR00_ANIM_6,
|
||||
/* 0x07 */ DMCHAR00_ANIM_7,
|
||||
/* 0x08 */ DMCHAR00_ANIM_8,
|
||||
/* 0x09 */ DMCHAR00_ANIM_9,
|
||||
/* 0x0A */ DMCHAR00_ANIM_10,
|
||||
/* 0x0B */ DMCHAR00_ANIM_11,
|
||||
/* 0x0C */ DMCHAR00_ANIM_12,
|
||||
/* 0x0D */ DMCHAR00_ANIM_13,
|
||||
/* 0x0E */ DMCHAR00_ANIM_14,
|
||||
/* 0x0F */ DMCHAR00_ANIM_15,
|
||||
/* 0x10 */ DMCHAR00_ANIM_16,
|
||||
/* 0x11 */ DMCHAR00_ANIM_17,
|
||||
/* 0x12 */ DMCHAR00_ANIM_18,
|
||||
/* 0x13 */ DMCHAR00_ANIM_19,
|
||||
/* 0x14 */ DMCHAR00_ANIM_20,
|
||||
/* 0x15 */ DMCHAR00_ANIM_21,
|
||||
/* 0x16 */ DMCHAR00_ANIM_22,
|
||||
/* 0x17 */ DMCHAR00_ANIM_23,
|
||||
/* 0x18 */ DMCHAR00_ANIM_24,
|
||||
/* 0x19 */ DMCHAR00_ANIM_25,
|
||||
/* 0x1A */ DMCHAR00_ANIM_26,
|
||||
/* 0x1B */ DMCHAR00_ANIM_27,
|
||||
/* 0x1C */ DMCHAR00_ANIM_28,
|
||||
/* 0x1D */ DMCHAR00_ANIM_29,
|
||||
/* 0x1E */ DMCHAR00_ANIM_30,
|
||||
/* 0x1F */ DMCHAR00_ANIM_31,
|
||||
/* 0x20 */ DMCHAR00_ANIM_32,
|
||||
/* 0x21 */ DMCHAR00_ANIM_33,
|
||||
/* 0x22 */ DMCHAR00_ANIM_34,
|
||||
/* 0x23 */ DMCHAR00_ANIM_35,
|
||||
/* 0x24 */ DMCHAR00_ANIM_36,
|
||||
/* 0x25 */ DMCHAR00_ANIM_37,
|
||||
/* 0x26 */ DMCHAR00_ANIM_38,
|
||||
/* 0x27 */ DMCHAR00_ANIM_39,
|
||||
/* 0x28 */ DMCHAR00_ANIM_40,
|
||||
/* 0x29 */ DMCHAR00_ANIM_41,
|
||||
/* 0x2A */ DMCHAR00_ANIM_42,
|
||||
/* 0x2B */ DMCHAR00_ANIM_43,
|
||||
/* 0x2C */ DMCHAR00_ANIM_44,
|
||||
/* 0x2D */ DMCHAR00_ANIM_45,
|
||||
/* 0x2E */ DMCHAR00_ANIM_46,
|
||||
/* 0x2F */ DMCHAR00_ANIM_47,
|
||||
/* 0x30 */ DMCHAR00_ANIM_48,
|
||||
/* 0x31 */ DMCHAR00_ANIM_49,
|
||||
/* 0x32 */ DMCHAR00_ANIM_50,
|
||||
/* 0x33 */ DMCHAR00_ANIM_51,
|
||||
/* 0x34 */ DMCHAR00_ANIM_52,
|
||||
/* 0x35 */ DMCHAR00_ANIM_53,
|
||||
/* 0x36 */ DMCHAR00_ANIM_54,
|
||||
/* 0x37 */ DMCHAR00_ANIM_55,
|
||||
/* 0x38 */ DMCHAR00_ANIM_56,
|
||||
/* 0x39 */ DMCHAR00_ANIM_57,
|
||||
/* 0x3A */ DMCHAR00_ANIM_58,
|
||||
/* 0x3B */ DMCHAR00_ANIM_59,
|
||||
/* 0x3C */ DMCHAR00_ANIM_60,
|
||||
/* 0x3D */ DMCHAR00_ANIM_61,
|
||||
/* 0x3E */ DMCHAR00_ANIM_62,
|
||||
/* 0x3F */ DMCHAR00_ANIM_63,
|
||||
/* 0x40 */ DMCHAR00_ANIM_64,
|
||||
/* 0x41 */ DMCHAR00_ANIM_65,
|
||||
/* 0x42 */ DMCHAR00_ANIM_66,
|
||||
/* 0x43 */ DMCHAR00_ANIM_67,
|
||||
/* 0x44 */ DMCHAR00_ANIM_68,
|
||||
/* 0x45 */ DMCHAR00_ANIM_69,
|
||||
/* 0x46 */ DMCHAR00_ANIM_70,
|
||||
/* 0x47 */ DMCHAR00_ANIM_71,
|
||||
/* 0x48 */ DMCHAR00_ANIM_72,
|
||||
/* 0x49 */ DMCHAR00_ANIM_73,
|
||||
/* 0x4A */ DMCHAR00_ANIM_74,
|
||||
/* 0x4B */ DMCHAR00_ANIM_75,
|
||||
/* 0x4C */ DMCHAR00_ANIM_76,
|
||||
/* 0x4D */ DMCHAR00_ANIM_77,
|
||||
/* 0x4E */ DMCHAR00_ANIM_78,
|
||||
/* 0x4F */ DMCHAR00_ANIM_79,
|
||||
/* 0x50 */ DMCHAR00_ANIM_80,
|
||||
/* 0x51 */ DMCHAR00_ANIM_81,
|
||||
/* 0x52 */ DMCHAR00_ANIM_82,
|
||||
/* 0x53 */ DMCHAR00_ANIM_83,
|
||||
/* 0x54 */ DMCHAR00_ANIM_84,
|
||||
/* 0x55 */ DMCHAR00_ANIM_MAX
|
||||
} DmChar00Animation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[DMCHAR00_ANIM_MAX] = {
|
||||
{ &gameplay_keep_Anim_02B2E8, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_0
|
||||
{ &gameplay_keep_Anim_029140, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_1
|
||||
{ &object_delf_Anim_004FF4, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_2
|
||||
{ &object_delf_Anim_0053A4, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_3
|
||||
{ &object_delf_Anim_005B68, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_4
|
||||
{ &object_delf_Anim_006328, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_5
|
||||
{ &object_delf_Anim_00FB30, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_6
|
||||
{ &object_delf_Anim_010590, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_7
|
||||
{ &object_delf_Anim_005B68, 1.0f, 37.0f, 56.0f, ANIMMODE_LOOP_PARTIAL, 0.0f }, // DMCHAR00_ANIM_8
|
||||
{ &object_delf_Anim_006328, 1.0f, 37.0f, 56.0f, ANIMMODE_LOOP_PARTIAL, 0.0f }, // DMCHAR00_ANIM_9
|
||||
{ &object_delf_Anim_00E024, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_10
|
||||
{ &object_delf_Anim_00F0D0, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_11
|
||||
{ &object_delf_Anim_011C70, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_12
|
||||
{ &object_delf_Anim_011FE0, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_13
|
||||
{ &object_delf_Anim_011088, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_14
|
||||
{ &object_delf_Anim_0118FC, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_15
|
||||
{ &object_delf_Anim_012388, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_16
|
||||
{ &object_delf_Anim_012738, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_17
|
||||
{ &object_delf_Anim_013BE0, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_18
|
||||
{ &object_delf_Anim_013E80, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_19
|
||||
{ &object_delf_Anim_007B04, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_20
|
||||
{ &object_delf_Anim_0080A4, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_21
|
||||
{ &object_delf_Anim_00859C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_22
|
||||
{ &object_delf_Anim_008A44, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_23
|
||||
{ &object_delf_Anim_00EB18, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_24
|
||||
{ &object_delf_Anim_00EBB0, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_25
|
||||
{ &object_delf_Anim_00EE30, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_26
|
||||
{ &object_delf_Anim_012BBC, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_27
|
||||
{ &object_delf_Anim_012EF8, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_28
|
||||
{ &object_delf_Anim_00C248, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_29
|
||||
{ &object_delf_Anim_00C588, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_30
|
||||
{ &object_delf_Anim_00BDFC, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_31
|
||||
{ &object_delf_Anim_00C0BC, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_32
|
||||
{ &object_delf_Anim_013040, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_33
|
||||
{ &object_delf_Anim_013378, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_34
|
||||
{ &object_delf_Anim_0091BC, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_35
|
||||
{ &object_delf_Anim_0094B0, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_36
|
||||
{ &object_delf_Anim_009C4C, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_37
|
||||
{ &object_delf_Anim_009F40, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_38
|
||||
{ &object_delf_Anim_009010, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_39
|
||||
{ &object_delf_Anim_0097C4, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_40
|
||||
{ &object_delf_Anim_00A7B4, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_41
|
||||
{ &object_delf_Anim_00C588, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // DMCHAR00_ANIM_42
|
||||
{ &object_delf_Anim_004FF4, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f }, // DMCHAR00_ANIM_43
|
||||
{ &object_delf_Anim_011C70, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // DMCHAR00_ANIM_44
|
||||
{ &object_delf_Anim_006B28, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_45
|
||||
{ &object_delf_Anim_014190, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_46
|
||||
{ &object_delf_Anim_01447C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_47
|
||||
{ &object_delf_Anim_003FAC, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_48
|
||||
{ &object_delf_Anim_004798, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_49
|
||||
{ &object_delf_Anim_0042E8, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_50
|
||||
{ &object_delf_Anim_004C44, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_51
|
||||
{ &object_delf_Anim_01088C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_52
|
||||
{ &object_delf_Anim_01498C, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_53
|
||||
{ &object_delf_Anim_014E9C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_54
|
||||
{ &object_delf_Anim_00CEE0, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_55
|
||||
{ &object_delf_Anim_00D260, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_56
|
||||
{ &object_delf_Anim_00C690, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_57
|
||||
{ &object_delf_Anim_00C790, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_58
|
||||
{ &object_delf_Anim_00AF78, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_59
|
||||
{ &object_delf_Anim_00B2B8, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_60
|
||||
{ &object_delf_Anim_00BCD8, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_61
|
||||
{ &object_delf_Anim_006D74, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_62
|
||||
{ &object_delf_Anim_00706C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_63
|
||||
{ &object_delf_Anim_0072B0, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_64
|
||||
{ &object_delf_Anim_007570, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_65
|
||||
{ &object_delf_Anim_00A2A4, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_66
|
||||
{ &object_delf_Anim_00A4B4, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_67
|
||||
{ &object_delf_Anim_006614, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_68
|
||||
{ &object_delf_Anim_015114, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_69
|
||||
{ &object_delf_Anim_00CCD4, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_70
|
||||
{ &object_delf_Anim_00046C, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_71
|
||||
{ &object_delf_Anim_00065C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_72
|
||||
{ &object_delf_Anim_00377C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_73
|
||||
{ &object_delf_Anim_003148, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_74
|
||||
{ &object_delf_Anim_001410, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_75
|
||||
{ &object_delf_Anim_0010F8, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_76
|
||||
{ &object_delf_Anim_00199C, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_77
|
||||
{ &object_delf_Anim_003BB4, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_78
|
||||
{ &object_delf_Anim_001754, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_79
|
||||
{ &object_delf_Anim_0008E0, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_80
|
||||
{ &object_delf_Anim_000A94, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_81
|
||||
{ &object_delf_Anim_001ED4, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_82
|
||||
{ &object_delf_Anim_001B28, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR00_ANIM_83
|
||||
{ &object_delf_Anim_000E44, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR00_ANIM_84
|
||||
};
|
||||
|
||||
Color_RGBAf D_80AA77A8[] = {
|
||||
@ -134,18 +224,19 @@ Color_RGBAf D_80AA77D8[] = {
|
||||
|
||||
Vec3f D_80AA7808 = { 0.0f, 0.0f, 0.0f };
|
||||
|
||||
void func_80AA5580(SkelAnime* skelAnime, AnimationInfo* animation, u16 idx) {
|
||||
f32 phi_f2;
|
||||
void DmChar00_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) {
|
||||
f32 endFrame;
|
||||
|
||||
animation += idx;
|
||||
animInfo += animIndex;
|
||||
|
||||
if (animation->frameCount < 0.0f) {
|
||||
phi_f2 = Animation_GetLastFrame(animation->animation);
|
||||
if (animInfo->frameCount < 0.0f) {
|
||||
endFrame = Animation_GetLastFrame(animInfo->animation);
|
||||
} else {
|
||||
phi_f2 = animation->frameCount;
|
||||
endFrame = animInfo->frameCount;
|
||||
}
|
||||
Animation_Change(skelAnime, animation->animation, animation->playSpeed, animation->startFrame, phi_f2,
|
||||
animation->mode, animation->morphFrames);
|
||||
|
||||
Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame,
|
||||
animInfo->mode, animInfo->morphFrames);
|
||||
}
|
||||
|
||||
void func_80AA561C(DmChar00* this, PlayState* play) {
|
||||
@ -167,6 +258,9 @@ void func_80AA561C(DmChar00* this, PlayState* play) {
|
||||
case 2043:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_SURPRISE);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
switch (play->csCtx.curFrame + 20) {
|
||||
@ -183,6 +277,9 @@ void func_80AA561C(DmChar00* this, PlayState* play) {
|
||||
case 2043:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_MONDO_SURPRISE);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -226,6 +323,9 @@ void func_80AA575C(DmChar00* this, PlayState* play) {
|
||||
case 972:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_BELL_BRAKE);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (play->csCtx.curFrame == 660) {
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_MONDO_SURPRISE);
|
||||
@ -253,6 +353,9 @@ void func_80AA58CC(DmChar00* this, PlayState* play) {
|
||||
case 534:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_ATTACK);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -275,6 +378,9 @@ void func_80AA5960(DmChar00* this, PlayState* play) {
|
||||
case 244:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_ATTACK);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -290,6 +396,9 @@ void func_80AA59E4(DmChar00* this, PlayState* play) {
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
|
||||
Actor_PlaySfx(&this->actor, NA_SE_SY_WHITE_OUT_INTO_MOON);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (play->csCtx.curFrame == 125) {
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
|
||||
@ -307,6 +416,9 @@ void func_80AA5A6C(DmChar00* this, PlayState* play) {
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
|
||||
Actor_PlaySfx(&this->actor, NA_SE_SY_WHITE_OUT_INTO_MOON);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (play->csCtx.curFrame == 44) {
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
|
||||
@ -328,6 +440,9 @@ void func_80AA5AF4(DmChar00* this, PlayState* play) {
|
||||
case 550:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_BELL_BRAKE);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
switch (play->csCtx.curFrame) {
|
||||
@ -339,6 +454,9 @@ void func_80AA5AF4(DmChar00* this, PlayState* play) {
|
||||
case 454:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if ((play->csCtx.curFrame >= 500) && (play->csCtx.curFrame < 602)) {
|
||||
@ -356,6 +474,9 @@ void func_80AA5BF8(DmChar00* this, PlayState* play) {
|
||||
case 797:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_WHITE_FAIRY_DASH);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
switch (play->csCtx.curFrame) {
|
||||
@ -366,10 +487,13 @@ void func_80AA5BF8(DmChar00* this, PlayState* play) {
|
||||
case 797:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ((this->unk_261 == 53) && Animation_OnFrame(&this->skelAnime, 16.0f)) {
|
||||
if ((this->animIndex == DMCHAR00_ANIM_53) && Animation_OnFrame(&this->skelAnime, 16.0f)) {
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_BLACK_FAIRY_DASH);
|
||||
}
|
||||
}
|
||||
@ -390,6 +514,9 @@ void func_80AA5D10(DmChar00* this, PlayState* play) {
|
||||
case 130:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_NAVY_VANISH);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -405,6 +532,9 @@ void func_80AA5D6C(DmChar00* this, PlayState* play) {
|
||||
case 31:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_FAIRY_SURPRISE);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -421,6 +551,9 @@ void func_80AA5DC8(DmChar00* this, PlayState* play) {
|
||||
case 130:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_NAVY_VANISH);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -443,6 +576,9 @@ void func_80AA5E2C(DmChar00* this, PlayState* play) {
|
||||
case 215:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_DIVE_INTO_WEED);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -519,6 +655,9 @@ void func_80AA5EBC(DmChar00* this, PlayState* play) {
|
||||
func_80AA5D6C(this, play);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -540,9 +679,9 @@ void DmChar00_Init(Actor* thisx, PlayState* play) {
|
||||
|
||||
ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
|
||||
SkelAnime_Init(play, &this->skelAnime, &gameplay_keep_Skel_02AF58.sh, &gameplay_keep_Anim_029140, this->jointTable,
|
||||
this->morphTable, 7);
|
||||
this->morphTable, FAIRY_LIMB_MAX);
|
||||
ActorShape_Init(&thisx->shape, 0.0f, NULL, 15.0f);
|
||||
func_80AA5580(&this->skelAnime, sAnimationInfo, 0);
|
||||
DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR00_ANIM_0], 0);
|
||||
Actor_SetScale(thisx, 0.01f);
|
||||
this->actionFunc = func_80AA67F8;
|
||||
}
|
||||
@ -550,7 +689,7 @@ void DmChar00_Init(Actor* thisx, PlayState* play) {
|
||||
void DmChar00_Destroy(Actor* thisx, PlayState* play) {
|
||||
}
|
||||
|
||||
void func_80AA62FC(DmChar00* this, PlayState* play) {
|
||||
void DmChar00_HandleCutscene(DmChar00* this, PlayState* play) {
|
||||
u16 cueType = CS_CMD_ACTOR_CUE_113 + DMCHAR00_GET(&this->actor);
|
||||
s32 cueChannel;
|
||||
s32 pad;
|
||||
@ -564,87 +703,87 @@ void func_80AA62FC(DmChar00* this, PlayState* play) {
|
||||
|
||||
switch (play->csCtx.actorCues[cueChannel]->id) {
|
||||
case 0x1:
|
||||
this->unk_261 = 0;
|
||||
this->animIndex = DMCHAR00_ANIM_0;
|
||||
break;
|
||||
|
||||
case 0x2:
|
||||
this->unk_261 = 2;
|
||||
this->animIndex = DMCHAR00_ANIM_2;
|
||||
break;
|
||||
|
||||
case 0x3:
|
||||
this->unk_261 = 3;
|
||||
this->animIndex = DMCHAR00_ANIM_3;
|
||||
break;
|
||||
|
||||
case 0x4:
|
||||
this->unk_261 = 4;
|
||||
this->animIndex = DMCHAR00_ANIM_4;
|
||||
break;
|
||||
|
||||
case 0x5:
|
||||
this->unk_261 = 5;
|
||||
this->animIndex = DMCHAR00_ANIM_5;
|
||||
break;
|
||||
|
||||
case 0x6:
|
||||
this->unk_261 = 6;
|
||||
this->animIndex = DMCHAR00_ANIM_6;
|
||||
break;
|
||||
|
||||
case 0x7:
|
||||
this->unk_261 = 7;
|
||||
this->animIndex = DMCHAR00_ANIM_7;
|
||||
break;
|
||||
|
||||
case 0x8:
|
||||
this->unk_261 = 20;
|
||||
this->animIndex = DMCHAR00_ANIM_20;
|
||||
break;
|
||||
|
||||
case 0x9:
|
||||
this->unk_261 = 21;
|
||||
this->animIndex = DMCHAR00_ANIM_21;
|
||||
break;
|
||||
|
||||
case 0xA:
|
||||
this->unk_261 = 14;
|
||||
this->animIndex = DMCHAR00_ANIM_14;
|
||||
break;
|
||||
|
||||
case 0xB:
|
||||
this->unk_261 = 15;
|
||||
this->animIndex = DMCHAR00_ANIM_15;
|
||||
break;
|
||||
|
||||
case 0xC:
|
||||
this->unk_261 = 18;
|
||||
this->animIndex = DMCHAR00_ANIM_18;
|
||||
break;
|
||||
|
||||
case 0xD:
|
||||
this->unk_261 = 25;
|
||||
this->animIndex = DMCHAR00_ANIM_25;
|
||||
break;
|
||||
|
||||
case 0xE:
|
||||
this->unk_261 = 27;
|
||||
this->animIndex = DMCHAR00_ANIM_27;
|
||||
break;
|
||||
|
||||
case 0xF:
|
||||
this->unk_261 = 24;
|
||||
this->animIndex = DMCHAR00_ANIM_24;
|
||||
break;
|
||||
|
||||
case 0x10:
|
||||
this->unk_261 = 10;
|
||||
this->animIndex = DMCHAR00_ANIM_10;
|
||||
break;
|
||||
|
||||
case 0x11:
|
||||
this->unk_261 = 12;
|
||||
this->animIndex = DMCHAR00_ANIM_12;
|
||||
break;
|
||||
|
||||
case 0x12:
|
||||
this->unk_261 = 13;
|
||||
this->animIndex = DMCHAR00_ANIM_13;
|
||||
break;
|
||||
|
||||
case 0x13:
|
||||
this->unk_261 = 29;
|
||||
this->animIndex = DMCHAR00_ANIM_29;
|
||||
break;
|
||||
|
||||
case 0x14:
|
||||
this->unk_261 = 31;
|
||||
this->animIndex = DMCHAR00_ANIM_31;
|
||||
break;
|
||||
|
||||
case 0x15:
|
||||
this->unk_261 = 33;
|
||||
this->animIndex = DMCHAR00_ANIM_33;
|
||||
break;
|
||||
|
||||
case 0x16:
|
||||
@ -652,138 +791,138 @@ void func_80AA62FC(DmChar00* this, PlayState* play) {
|
||||
break;
|
||||
|
||||
case 0x17:
|
||||
this->unk_261 = 35;
|
||||
this->animIndex = DMCHAR00_ANIM_35;
|
||||
break;
|
||||
|
||||
case 0x18:
|
||||
this->unk_261 = 37;
|
||||
this->animIndex = DMCHAR00_ANIM_37;
|
||||
break;
|
||||
|
||||
case 0x19:
|
||||
this->unk_261 = 39;
|
||||
this->animIndex = DMCHAR00_ANIM_39;
|
||||
break;
|
||||
|
||||
case 0x1A:
|
||||
this->unk_261 = 41;
|
||||
this->animIndex = DMCHAR00_ANIM_41;
|
||||
break;
|
||||
|
||||
case 0x1B:
|
||||
this->unk_261 = 45;
|
||||
this->animIndex = DMCHAR00_ANIM_45;
|
||||
break;
|
||||
|
||||
case 0x1C:
|
||||
this->unk_261 = 46;
|
||||
this->animIndex = DMCHAR00_ANIM_46;
|
||||
break;
|
||||
|
||||
case 0x1E:
|
||||
this->unk_261 = 48;
|
||||
this->animIndex = DMCHAR00_ANIM_48;
|
||||
break;
|
||||
|
||||
case 0x1F:
|
||||
this->unk_261 = 50;
|
||||
this->animIndex = DMCHAR00_ANIM_50;
|
||||
break;
|
||||
|
||||
case 0x20:
|
||||
this->unk_261 = 52;
|
||||
this->animIndex = DMCHAR00_ANIM_52;
|
||||
break;
|
||||
|
||||
case 0x21:
|
||||
this->unk_261 = 53;
|
||||
this->animIndex = DMCHAR00_ANIM_53;
|
||||
break;
|
||||
|
||||
case 0x23:
|
||||
this->unk_261 = 55;
|
||||
this->animIndex = DMCHAR00_ANIM_55;
|
||||
break;
|
||||
|
||||
case 0x24:
|
||||
this->unk_261 = 57;
|
||||
this->animIndex = DMCHAR00_ANIM_57;
|
||||
break;
|
||||
|
||||
case 0x25:
|
||||
this->unk_261 = 58;
|
||||
this->animIndex = DMCHAR00_ANIM_58;
|
||||
break;
|
||||
|
||||
case 0x26:
|
||||
this->unk_261 = 59;
|
||||
this->animIndex = DMCHAR00_ANIM_59;
|
||||
break;
|
||||
|
||||
case 0x27:
|
||||
this->unk_261 = 61;
|
||||
this->animIndex = DMCHAR00_ANIM_61;
|
||||
break;
|
||||
|
||||
case 0x28:
|
||||
this->unk_261 = 62;
|
||||
this->animIndex = DMCHAR00_ANIM_62;
|
||||
break;
|
||||
|
||||
case 0x29:
|
||||
this->unk_261 = 64;
|
||||
this->animIndex = DMCHAR00_ANIM_64;
|
||||
break;
|
||||
|
||||
case 0x2A:
|
||||
this->unk_261 = 66;
|
||||
this->animIndex = DMCHAR00_ANIM_66;
|
||||
break;
|
||||
|
||||
case 0x2B:
|
||||
this->unk_261 = 68;
|
||||
this->animIndex = DMCHAR00_ANIM_68;
|
||||
break;
|
||||
|
||||
case 0x2C:
|
||||
this->unk_261 = 69;
|
||||
this->animIndex = DMCHAR00_ANIM_69;
|
||||
break;
|
||||
|
||||
case 0x2D:
|
||||
this->unk_261 = 70;
|
||||
this->animIndex = DMCHAR00_ANIM_70;
|
||||
break;
|
||||
|
||||
case 0x2E:
|
||||
this->unk_261 = 67;
|
||||
this->animIndex = DMCHAR00_ANIM_67;
|
||||
break;
|
||||
|
||||
case 0x2F:
|
||||
this->unk_261 = 71;
|
||||
this->animIndex = DMCHAR00_ANIM_71;
|
||||
break;
|
||||
|
||||
case 0x30:
|
||||
this->unk_261 = 73;
|
||||
this->animIndex = DMCHAR00_ANIM_73;
|
||||
break;
|
||||
|
||||
case 0x31:
|
||||
this->unk_261 = 74;
|
||||
this->animIndex = DMCHAR00_ANIM_74;
|
||||
break;
|
||||
|
||||
case 0x32:
|
||||
this->unk_261 = 75;
|
||||
this->animIndex = DMCHAR00_ANIM_75;
|
||||
break;
|
||||
|
||||
case 0x33:
|
||||
this->unk_261 = 77;
|
||||
this->animIndex = DMCHAR00_ANIM_77;
|
||||
break;
|
||||
|
||||
case 0x34:
|
||||
this->unk_261 = 78;
|
||||
this->animIndex = DMCHAR00_ANIM_78;
|
||||
break;
|
||||
|
||||
case 0x35:
|
||||
this->unk_261 = 79;
|
||||
this->animIndex = DMCHAR00_ANIM_79;
|
||||
break;
|
||||
|
||||
case 0x36:
|
||||
this->unk_261 = 80;
|
||||
this->animIndex = DMCHAR00_ANIM_80;
|
||||
break;
|
||||
|
||||
case 0x37:
|
||||
this->unk_261 = 82;
|
||||
this->animIndex = DMCHAR00_ANIM_82;
|
||||
break;
|
||||
|
||||
case 0x38:
|
||||
this->unk_261 = 83;
|
||||
this->animIndex = DMCHAR00_ANIM_83;
|
||||
break;
|
||||
|
||||
default:
|
||||
this->unk_261 = 0;
|
||||
this->animIndex = DMCHAR00_ANIM_0;
|
||||
break;
|
||||
}
|
||||
func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0);
|
||||
DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
}
|
||||
}
|
||||
Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
|
||||
@ -792,59 +931,62 @@ void func_80AA62FC(DmChar00* this, PlayState* play) {
|
||||
}
|
||||
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
switch (this->unk_261) {
|
||||
case 0x4:
|
||||
case 0x5:
|
||||
this->unk_261 += 4;
|
||||
func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0);
|
||||
switch (this->animIndex) {
|
||||
case DMCHAR00_ANIM_4:
|
||||
case DMCHAR00_ANIM_5:
|
||||
this->animIndex += 4;
|
||||
DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
this->skelAnime.curFrame = 37.0f;
|
||||
break;
|
||||
|
||||
case 0xE:
|
||||
case 0xF:
|
||||
case 0x14:
|
||||
case 0x15:
|
||||
this->unk_261 += 2;
|
||||
func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0);
|
||||
case DMCHAR00_ANIM_14:
|
||||
case DMCHAR00_ANIM_15:
|
||||
case DMCHAR00_ANIM_20:
|
||||
case DMCHAR00_ANIM_21:
|
||||
this->animIndex += 2;
|
||||
DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
break;
|
||||
|
||||
case 0xA:
|
||||
case 0x12:
|
||||
case 0x19:
|
||||
case 0x1B:
|
||||
case 0x1D:
|
||||
case 0x1F:
|
||||
case 0x21:
|
||||
case 0x23:
|
||||
case 0x25:
|
||||
case 0x27:
|
||||
case 0x2B:
|
||||
case 0x2E:
|
||||
case 0x30:
|
||||
case 0x32:
|
||||
case 0x35:
|
||||
case 0x37:
|
||||
case 0x3B:
|
||||
case 0x3E:
|
||||
case 0x40:
|
||||
case 0x42:
|
||||
case 0x47:
|
||||
case 0x4B:
|
||||
case 0x50:
|
||||
case 0x53:
|
||||
this->unk_261 += 1;
|
||||
func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0);
|
||||
case DMCHAR00_ANIM_10:
|
||||
case DMCHAR00_ANIM_18:
|
||||
case DMCHAR00_ANIM_25:
|
||||
case DMCHAR00_ANIM_27:
|
||||
case DMCHAR00_ANIM_29:
|
||||
case DMCHAR00_ANIM_31:
|
||||
case DMCHAR00_ANIM_33:
|
||||
case DMCHAR00_ANIM_35:
|
||||
case DMCHAR00_ANIM_37:
|
||||
case DMCHAR00_ANIM_39:
|
||||
case DMCHAR00_ANIM_43:
|
||||
case DMCHAR00_ANIM_46:
|
||||
case DMCHAR00_ANIM_48:
|
||||
case DMCHAR00_ANIM_50:
|
||||
case DMCHAR00_ANIM_53:
|
||||
case DMCHAR00_ANIM_55:
|
||||
case DMCHAR00_ANIM_59:
|
||||
case DMCHAR00_ANIM_62:
|
||||
case DMCHAR00_ANIM_64:
|
||||
case DMCHAR00_ANIM_66:
|
||||
case DMCHAR00_ANIM_71:
|
||||
case DMCHAR00_ANIM_75:
|
||||
case DMCHAR00_ANIM_80:
|
||||
case DMCHAR00_ANIM_83:
|
||||
this->animIndex += 1;
|
||||
DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
break;
|
||||
|
||||
case 0x2D:
|
||||
this->unk_261 = 19;
|
||||
func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0);
|
||||
case DMCHAR00_ANIM_45:
|
||||
this->animIndex = DMCHAR00_ANIM_19;
|
||||
DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
break;
|
||||
|
||||
case 0x46:
|
||||
case 0x4D:
|
||||
this->unk_261 = 0;
|
||||
func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0);
|
||||
case DMCHAR00_ANIM_70:
|
||||
case DMCHAR00_ANIM_77:
|
||||
this->animIndex = DMCHAR00_ANIM_0;
|
||||
DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -854,9 +996,9 @@ void func_80AA67F8(DmChar00* this, PlayState* play) {
|
||||
Player* player = GET_PLAYER(play);
|
||||
|
||||
if ((play->csCtx.state == CS_STATE_IDLE) && (gSaveContext.sceneLayer == 0) && (play->csCtx.scriptIndex == 1)) {
|
||||
if (this->unk_261 != 42) {
|
||||
this->unk_261 = 42;
|
||||
func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0);
|
||||
if (this->animIndex != DMCHAR00_ANIM_42) {
|
||||
this->animIndex = DMCHAR00_ANIM_42;
|
||||
DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
}
|
||||
|
||||
Math_SmoothStepToF(&this->actor.world.pos.x, 0.0f, 0.5f, 0.5f, 0.001f);
|
||||
@ -864,8 +1006,8 @@ void func_80AA67F8(DmChar00* this, PlayState* play) {
|
||||
Math_SmoothStepToF(&this->actor.world.pos.z, -560.0f, 0.5f, 20.0f, 0.001f);
|
||||
|
||||
if (player->actor.world.pos.z < -625.0f) {
|
||||
this->unk_261 = 43;
|
||||
func_80AA5580(&this->skelAnime, &sAnimationInfo[this->unk_261], 0);
|
||||
this->animIndex = DMCHAR00_ANIM_43;
|
||||
DmChar00_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
this->actionFunc = func_80AA695C;
|
||||
this->skelAnime.playSpeed = 1.5f;
|
||||
}
|
||||
@ -873,7 +1015,7 @@ void func_80AA67F8(DmChar00* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void func_80AA695C(DmChar00* this, PlayState* play) {
|
||||
if (this->unk_261 == 44) {
|
||||
if (this->animIndex == DMCHAR00_ANIM_44) {
|
||||
Math_SmoothStepToF(&this->actor.world.pos.x, 0.0f, 0.5f, 0.5f, 0.001f);
|
||||
Math_SmoothStepToF(&this->actor.world.pos.y, 30.0f, 0.5f, 0.5f, 0.001f);
|
||||
Math_SmoothStepToF(&this->actor.world.pos.z, -680.0f, 0.5f, 10.0f, 0.001f);
|
||||
@ -889,7 +1031,7 @@ void DmChar00_Update(Actor* thisx, PlayState* play) {
|
||||
|
||||
this->unk_262++;
|
||||
func_80AA5EBC(this, play);
|
||||
func_80AA62FC(this, play);
|
||||
DmChar00_HandleCutscene(this, play);
|
||||
}
|
||||
|
||||
s32 DmChar00_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx,
|
||||
@ -898,7 +1040,7 @@ s32 DmChar00_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
|
||||
f32 sp28;
|
||||
Vec3f sp1C;
|
||||
|
||||
if (limbIndex == 6) {
|
||||
if (limbIndex == FAIRY_LIMB_6) {
|
||||
sp28 = ((Math_SinS(this->unk_262 * 0x1000) * 0.1f) + 1.0f) * 0.012f * (this->actor.scale.x * (1.0f / 0.008f));
|
||||
Matrix_MultVec3f(&D_80AA7808, &sp1C);
|
||||
Matrix_Translate(sp1C.x, sp1C.y, sp1C.z, MTXMODE_NEW);
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define Z_DM_CHAR00_H
|
||||
|
||||
#include "global.h"
|
||||
#include "objects/gameplay_keep/gameplay_keep.h"
|
||||
|
||||
struct DmChar00;
|
||||
|
||||
@ -16,15 +17,15 @@ typedef void (*DmChar00ActionFunc)(struct DmChar00*, PlayState*);
|
||||
typedef struct DmChar00 {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ SkelAnime skelAnime;
|
||||
/* 0x188 */ Vec3s jointTable[7];
|
||||
/* 0x188 */ Vec3s jointTable[FAIRY_LIMB_MAX];
|
||||
/* 0x1B2 */ UNK_TYPE1 unk_1B2[0x30];
|
||||
/* 0x1E2 */ Vec3s morphTable[7];
|
||||
/* 0x1E2 */ Vec3s morphTable[FAIRY_LIMB_MAX];
|
||||
/* 0x20C */ UNK_TYPE1 unk_20C[0x30];
|
||||
/* 0x23C */ DmChar00ActionFunc actionFunc;
|
||||
/* 0x240 */ Color_RGBAf unk_240;
|
||||
/* 0x250 */ Color_RGBAf unk_250;
|
||||
/* 0x260 */ u8 cueId;
|
||||
/* 0x261 */ u8 unk_261;
|
||||
/* 0x261 */ u8 animIndex;
|
||||
/* 0x262 */ u16 unk_262;
|
||||
} DmChar00; // size = 0x264
|
||||
|
||||
|
@ -16,7 +16,7 @@ void DmChar02_Destroy(Actor* thisx, PlayState* play);
|
||||
void DmChar02_Update(Actor* thisx, PlayState* play);
|
||||
void DmChar02_Draw(Actor* thisx, PlayState* play);
|
||||
|
||||
void DmChar02_PerformCutsceneActions(DmChar02* this, PlayState* play);
|
||||
void DmChar02_HandleCutscene(DmChar02* this, PlayState* play);
|
||||
|
||||
ActorInit Dm_Char02_InitVars = {
|
||||
ACTOR_DM_CHAR02,
|
||||
@ -35,29 +35,30 @@ typedef enum {
|
||||
/* 0 */ DMCHAR02_ANIM_HIT_GROUND,
|
||||
/* 1 */ DMCHAR02_ANIM_TURN_AROUND,
|
||||
/* 2 */ DMCHAR02_ANIM_JUGGLE,
|
||||
/* 3 */ DMCHAR02_ANIM_FALL
|
||||
/* 3 */ DMCHAR02_ANIM_FALL,
|
||||
/* 4 */ DMCHAR02_ANIM_MAX
|
||||
} DmChar02Animation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &gClockTowerOcarinaOfTimeHitGroundAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gClockTowerOcarinaOfTimeTurnAroundAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gClockTowerOcarinaOfTimeJuggleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gClockTowerOcarinaOfTimeFallAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
static AnimationInfo sAnimationInfo[DMCHAR02_ANIM_MAX] = {
|
||||
{ &gClockTowerOcarinaOfTimeHitGroundAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR02_ANIM_HIT_GROUND
|
||||
{ &gClockTowerOcarinaOfTimeTurnAroundAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR02_ANIM_TURN_AROUND
|
||||
{ &gClockTowerOcarinaOfTimeJuggleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR02_ANIM_JUGGLE
|
||||
{ &gClockTowerOcarinaOfTimeFallAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR02_ANIM_FALL
|
||||
};
|
||||
|
||||
void DmChar02_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animationInfo, u16 animIndex) {
|
||||
f32 frameCount;
|
||||
void DmChar02_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) {
|
||||
f32 endFrame;
|
||||
|
||||
animationInfo += animIndex;
|
||||
animInfo += animIndex;
|
||||
|
||||
if (animationInfo->frameCount < 0.0f) {
|
||||
frameCount = Animation_GetLastFrame(animationInfo->animation);
|
||||
if (animInfo->frameCount < 0.0f) {
|
||||
endFrame = Animation_GetLastFrame(animInfo->animation);
|
||||
} else {
|
||||
frameCount = animationInfo->frameCount;
|
||||
endFrame = animInfo->frameCount;
|
||||
}
|
||||
|
||||
Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame,
|
||||
frameCount, animationInfo->mode, animationInfo->morphFrames);
|
||||
Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame,
|
||||
animInfo->mode, animInfo->morphFrames);
|
||||
}
|
||||
|
||||
void DmChar02_PlaySfxForDroppingOcarinaCutscene(DmChar02* this, PlayState* play) {
|
||||
@ -88,9 +89,9 @@ void DmChar02_Init(Actor* thisx, PlayState* play) {
|
||||
this->actor.targetArrowOffset = 3000.0f;
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
|
||||
SkelAnime_InitFlex(play, &this->skelAnime, &gClockTowerOcarinaOfTimeSkel, NULL, NULL, NULL, 0);
|
||||
DmChar02_ChangeAnim(&this->skelAnime, sAnimationInfo, 0);
|
||||
DmChar02_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR02_ANIM_HIT_GROUND], 0);
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->actionFunc = DmChar02_PerformCutsceneActions;
|
||||
this->actionFunc = DmChar02_HandleCutscene;
|
||||
} else {
|
||||
Actor_Kill(&this->actor);
|
||||
}
|
||||
@ -99,7 +100,7 @@ void DmChar02_Init(Actor* thisx, PlayState* play) {
|
||||
void DmChar02_Destroy(Actor* thisx, PlayState* play) {
|
||||
}
|
||||
|
||||
void DmChar02_PerformCutsceneActions(DmChar02* this, PlayState* play) {
|
||||
void DmChar02_HandleCutscene(DmChar02* this, PlayState* play) {
|
||||
u8 shouldChangeAnimation = true;
|
||||
s32 cueChannel;
|
||||
|
||||
|
@ -32,33 +32,38 @@ ActorInit Dm_Char03_InitVars = {
|
||||
(ActorFunc)DmChar03_Draw,
|
||||
};
|
||||
|
||||
AnimationInfo sAnimationInfo[] = {
|
||||
{ &gDekuMaskFallOverAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
typedef enum {
|
||||
/* 0 */ DMCHAR03_ANIM_FALL_OVER,
|
||||
/* 1 */ DMCHAR03_ANIM_MAX
|
||||
} DmChar03Animation;
|
||||
|
||||
AnimationInfo sAnimationInfo[DMCHAR03_ANIM_MAX] = {
|
||||
{ &gDekuMaskFallOverAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR03_ANIM_FALL_OVER
|
||||
};
|
||||
|
||||
void DmChar03_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animationInfo, u16 animIndex) {
|
||||
f32 frame;
|
||||
void DmChar03_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) {
|
||||
f32 endFrame;
|
||||
|
||||
animationInfo += animIndex;
|
||||
animInfo += animIndex;
|
||||
|
||||
if (animationInfo->frameCount < 0.0f) {
|
||||
frame = Animation_GetLastFrame(animationInfo->animation);
|
||||
if (animInfo->frameCount < 0.0f) {
|
||||
endFrame = Animation_GetLastFrame(animInfo->animation);
|
||||
} else {
|
||||
frame = animationInfo->frameCount;
|
||||
endFrame = animInfo->frameCount;
|
||||
}
|
||||
Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame, frame,
|
||||
animationInfo->mode, animationInfo->morphFrames);
|
||||
Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame,
|
||||
animInfo->mode, animInfo->morphFrames);
|
||||
}
|
||||
|
||||
void DmChar03_Init(Actor* thisx, PlayState* play) {
|
||||
DmChar03* this = THIS;
|
||||
|
||||
this->animIndex = 0;
|
||||
this->animIndex = DMCHAR03_ANIM_FALL_OVER;
|
||||
this->actor.targetArrowOffset = 3000.0f;
|
||||
this->unk_18E = false;
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
|
||||
SkelAnime_InitFlex(play, &this->skelAnime, &gDekuMaskSkel, NULL, NULL, NULL, 0);
|
||||
DmChar03_ChangeAnim(&this->skelAnime, sAnimationInfo, 0);
|
||||
DmChar03_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR03_ANIM_FALL_OVER], 0);
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->actionFunc = DmChar03_DoNothing;
|
||||
}
|
||||
@ -92,7 +97,7 @@ void DmChar03_DoNothing(DmChar03* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void func_80AAB710(DmChar03* this, PlayState* play) {
|
||||
u8 shouldChangeAnim = true;
|
||||
u8 changeAnim = true;
|
||||
|
||||
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136)) {
|
||||
s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_136);
|
||||
@ -100,27 +105,31 @@ void func_80AAB710(DmChar03* this, PlayState* play) {
|
||||
if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
|
||||
switch (play->csCtx.actorCues[cueChannel]->id) {
|
||||
case 1:
|
||||
shouldChangeAnim = false;
|
||||
changeAnim = false;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
this->animIndex = 0;
|
||||
this->animIndex = DMCHAR03_ANIM_FALL_OVER;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
this->unk_18E = false;
|
||||
shouldChangeAnim = false;
|
||||
changeAnim = false;
|
||||
Actor_Kill(&this->actor);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
Item_Give(play, ITEM_MASK_DEKU);
|
||||
shouldChangeAnim = false;
|
||||
changeAnim = false;
|
||||
this->actionFunc = func_80AAB5F8;
|
||||
break;
|
||||
|
||||
default:
|
||||
shouldChangeAnim = false;
|
||||
changeAnim = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (shouldChangeAnim) {
|
||||
if (changeAnim) {
|
||||
DmChar03_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
}
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ void DmChar04_Destroy(Actor* thisx, PlayState* play);
|
||||
void DmChar04_Update(Actor* thisx, PlayState* play);
|
||||
void DmChar04_Draw(Actor* thisx, PlayState* play);
|
||||
|
||||
void func_80AABE34(DmChar04* this, PlayState* play);
|
||||
void DmChar04_HandleCutscene(DmChar04* this, PlayState* play);
|
||||
|
||||
ActorInit Dm_Char04_InitVars = {
|
||||
ACTOR_DM_CHAR04,
|
||||
@ -30,31 +30,38 @@ ActorInit Dm_Char04_InitVars = {
|
||||
(ActorFunc)DmChar04_Draw,
|
||||
};
|
||||
|
||||
void DmChar04_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animation, u16 animIndex) {
|
||||
f32 endFrame;
|
||||
typedef enum {
|
||||
/* 0 */ DMCHAR04_ANIM_0,
|
||||
/* 1 */ DMCHAR04_ANIM_1,
|
||||
/* 2 */ DMCHAR04_ANIM_MAX
|
||||
} DmChar04Animation;
|
||||
|
||||
animation += animIndex;
|
||||
|
||||
if (animation->frameCount < 0.0f) {
|
||||
endFrame = Animation_GetLastFrame(animation->animation);
|
||||
} else {
|
||||
endFrame = animation->frameCount;
|
||||
}
|
||||
Animation_Change(skelAnime, animation->animation, animation->playSpeed, animation->startFrame, endFrame,
|
||||
animation->mode, animation->morphFrames);
|
||||
}
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &gameplay_keep_Anim_02B2E8, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gameplay_keep_Anim_029140, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
static AnimationInfo sAnimationInfo[DMCHAR04_ANIM_MAX] = {
|
||||
{ &gameplay_keep_Anim_02B2E8, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR04_ANIM_0
|
||||
{ &gameplay_keep_Anim_029140, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR04_ANIM_1
|
||||
};
|
||||
|
||||
Color_RGBAf sPrimColors[] = {
|
||||
void DmChar04_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) {
|
||||
f32 endFrame;
|
||||
|
||||
animInfo += animIndex;
|
||||
|
||||
if (animInfo->frameCount < 0.0f) {
|
||||
endFrame = Animation_GetLastFrame(animInfo->animation);
|
||||
} else {
|
||||
endFrame = animInfo->frameCount;
|
||||
}
|
||||
|
||||
Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame,
|
||||
animInfo->mode, animInfo->morphFrames);
|
||||
}
|
||||
|
||||
static Color_RGBAf sPrimColors[] = {
|
||||
{ 250.0f, 255.0f, 230.0f, 255.0f },
|
||||
{ 10.0f, 10.0f, 40.0f, 255.0f },
|
||||
{ 255.0f, 235.0f, 220.0f, 255.0f },
|
||||
};
|
||||
Color_RGBAf sEnvColors[] = {
|
||||
static Color_RGBAf sEnvColors[] = {
|
||||
{ 220.0f, 160.0f, 80.0f, 255.0f },
|
||||
{ 120.0f, 255.0f, 255.0f, 255.0f },
|
||||
{ 255.0f, 235.0f, 220.0f, 255.0f },
|
||||
@ -70,17 +77,17 @@ void DmChar04_Init(Actor* thisx, PlayState* play) {
|
||||
this->timer = this->actor.params << 0xB;
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
|
||||
SkelAnime_Init(play, &this->skelAnime, &gameplay_keep_Skel_02AF58.sh, &gameplay_keep_Anim_029140, this->jointTable,
|
||||
this->morphTable, 7);
|
||||
this->morphTable, FAIRY_LIMB_MAX);
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 15.0f);
|
||||
DmChar04_ChangeAnim(&this->skelAnime, sAnimationInfo, 0);
|
||||
DmChar04_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR04_ANIM_0], 0);
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->actionFunc = func_80AABE34;
|
||||
this->actionFunc = DmChar04_HandleCutscene;
|
||||
}
|
||||
|
||||
void DmChar04_Destroy(Actor* thisx, PlayState* play) {
|
||||
}
|
||||
|
||||
void func_80AABE34(DmChar04* this, PlayState* play) {
|
||||
void DmChar04_HandleCutscene(DmChar04* this, PlayState* play) {
|
||||
u16 cueType = CS_CMD_ACTOR_CUE_113 + this->actor.params;
|
||||
|
||||
if (Cutscene_IsCueInChannel(play, cueType)) {
|
||||
@ -90,9 +97,9 @@ void func_80AABE34(DmChar04* this, PlayState* play) {
|
||||
if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
|
||||
this->cueId = play->csCtx.actorCues[cueChannel]->id;
|
||||
if (play->csCtx.actorCues[cueChannel]->id == 1) {
|
||||
this->animIndex = 0;
|
||||
this->animIndex = DMCHAR04_ANIM_0;
|
||||
} else {
|
||||
this->animIndex = 0;
|
||||
this->animIndex = DMCHAR04_ANIM_0;
|
||||
}
|
||||
DmChar04_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
}
|
||||
@ -119,8 +126,8 @@ s32 DmChar04_OverrideLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3
|
||||
Vec3f sp1C;
|
||||
DmChar04* this = THIS;
|
||||
|
||||
if (limbIndex == 6) {
|
||||
sp28 = ((Math_SinS(this->timer << 0xC) * 0.1f) + 1.0f) * 0.012f * (this->actor.scale.x * (1.0f / 0.008f));
|
||||
if (limbIndex == FAIRY_LIMB_6) {
|
||||
sp28 = ((Math_SinS(this->timer * 0x1000) * 0.1f) + 1.0f) * 0.012f * (this->actor.scale.x * (1.0f / 0.008f));
|
||||
Matrix_MultVec3f(&D_80AAC4F0, &sp1C);
|
||||
Matrix_Translate(sp1C.x, sp1C.y, sp1C.z, MTXMODE_NEW);
|
||||
Matrix_Scale(sp28, sp28, sp28, MTXMODE_APPLY);
|
||||
@ -152,5 +159,6 @@ void DmChar04_Draw(Actor* thisx, PlayState* play) {
|
||||
gDPSetDither(POLY_XLU_DISP++, G_CD_BAYER);
|
||||
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
|
||||
DmChar04_OverrideLimbDraw, NULL, &this->actor, POLY_XLU_DISP);
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define Z_DM_CHAR04_H
|
||||
|
||||
#include "global.h"
|
||||
#include "objects/gameplay_keep/gameplay_keep.h"
|
||||
|
||||
struct DmChar04;
|
||||
|
||||
@ -10,9 +11,11 @@ typedef void (*DmChar04ActionFunc)(struct DmChar04*, PlayState*);
|
||||
typedef struct DmChar04 {
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x144 */ SkelAnime skelAnime;
|
||||
/* 0x188 */ Vec3s jointTable[15];
|
||||
/* 0x1E2 */ Vec3s morphTable[15];
|
||||
/* 0x023C */ DmChar04ActionFunc actionFunc;
|
||||
/* 0x188 */ Vec3s jointTable[FAIRY_LIMB_MAX];
|
||||
/* 0x1B2 */ UNK_TYPE1 unk_1B2[0x30];
|
||||
/* 0x1E2 */ Vec3s morphTable[FAIRY_LIMB_MAX];
|
||||
/* 0x20C */ UNK_TYPE1 unk_20C[0x30];
|
||||
/* 0x23C */ DmChar04ActionFunc actionFunc;
|
||||
/* 0x240 */ Color_RGBAf primColors;
|
||||
/* 0x250 */ Color_RGBAf envColors;
|
||||
/* 0x260 */ u8 cueId;
|
||||
|
@ -47,27 +47,37 @@ ActorInit Dm_Char05_InitVars = {
|
||||
(ActorFunc)DmChar05_Draw,
|
||||
};
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &object_dmask_Anim_001090, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &object_dmask_Anim_004288, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &object_dmask_Anim_0001A8, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &object_dmask_Anim_00017C, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &object_dmask_Anim_0011A0, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &object_dmask_Anim_0013A4, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
typedef enum {
|
||||
/* 0 */ DMCHAR05_ANIM_0,
|
||||
/* 1 */ DMCHAR05_ANIM_1,
|
||||
/* 2 */ DMCHAR05_ANIM_2,
|
||||
/* 3 */ DMCHAR05_ANIM_3,
|
||||
/* 4 */ DMCHAR05_ANIM_4,
|
||||
/* 5 */ DMCHAR05_ANIM_5,
|
||||
/* 6 */ DMCHAR05_ANIM_MAX
|
||||
} DmChar05Animation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[DMCHAR05_ANIM_MAX] = {
|
||||
{ &object_dmask_Anim_001090, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR05_ANIM_0
|
||||
{ &object_dmask_Anim_004288, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR05_ANIM_1
|
||||
{ &object_dmask_Anim_0001A8, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR05_ANIM_2
|
||||
{ &object_dmask_Anim_00017C, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR05_ANIM_3
|
||||
{ &object_dmask_Anim_0011A0, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // DMCHAR05_ANIM_4
|
||||
{ &object_dmask_Anim_0013A4, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR05_ANIM_5
|
||||
};
|
||||
|
||||
void func_80AAC5A0(SkelAnime* skelAnime, AnimationInfo* animation, u16 arg2) {
|
||||
f32 phi_f2;
|
||||
void DmChar05_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) {
|
||||
f32 endFrame;
|
||||
|
||||
animation += arg2;
|
||||
animInfo += animIndex;
|
||||
|
||||
if (animation->frameCount < 0.0f) {
|
||||
phi_f2 = Animation_GetLastFrame(animation->animation);
|
||||
if (animInfo->frameCount < 0.0f) {
|
||||
endFrame = Animation_GetLastFrame(animInfo->animation);
|
||||
} else {
|
||||
phi_f2 = animation->frameCount;
|
||||
endFrame = animInfo->frameCount;
|
||||
}
|
||||
Animation_Change(skelAnime, animation->animation, animation->playSpeed, animation->startFrame, phi_f2,
|
||||
animation->mode, animation->morphFrames);
|
||||
Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame,
|
||||
animInfo->mode, animInfo->morphFrames);
|
||||
}
|
||||
|
||||
void func_80AAC63C(Actor* thisx, PlayState* play) {
|
||||
@ -76,9 +86,9 @@ void func_80AAC63C(Actor* thisx, PlayState* play) {
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
|
||||
SkelAnime_Init(play, &this->skelAnime, &object_dmask_Skel_010B0, NULL, NULL, NULL, 0);
|
||||
if (DMCHAR05_GET(&this->actor) == DMCHAR05_0) {
|
||||
func_80AAC5A0(&this->skelAnime, &sAnimationInfo[0], 0);
|
||||
DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR05_ANIM_0], 0);
|
||||
} else {
|
||||
func_80AAC5A0(&this->skelAnime, &sAnimationInfo[1], 0);
|
||||
DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR05_ANIM_1], 0);
|
||||
}
|
||||
this->actionFunc = func_80AACC48;
|
||||
}
|
||||
@ -88,7 +98,7 @@ void func_80AAC6E4(Actor* thisx, PlayState* play) {
|
||||
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
|
||||
SkelAnime_Init(play, &this->skelAnime, &object_dmask_Skel_042B0, NULL, NULL, NULL, 0);
|
||||
func_80AAC5A0(&this->skelAnime, &sAnimationInfo[1], 0);
|
||||
DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR05_ANIM_1], 0);
|
||||
this->actionFunc = func_80AACC48;
|
||||
}
|
||||
|
||||
@ -97,7 +107,7 @@ void func_80AAC770(Actor* thisx, PlayState* play) {
|
||||
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
|
||||
SkelAnime_InitFlex(play, &this->skelAnime, &object_dmask_Skel_001D0, NULL, NULL, NULL, 0);
|
||||
func_80AAC5A0(&this->skelAnime, &sAnimationInfo[3], 0);
|
||||
DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR05_ANIM_3], 0);
|
||||
this->actionFunc = func_80AACC48;
|
||||
}
|
||||
|
||||
@ -106,7 +116,7 @@ void func_80AAC7FC(Actor* thisx, PlayState* play) {
|
||||
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
|
||||
SkelAnime_Init(play, &this->skelAnime, &object_dmask_Skel_013D0, NULL, NULL, NULL, 0);
|
||||
func_80AAC5A0(&this->skelAnime, &sAnimationInfo[4], 0);
|
||||
DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR05_ANIM_4], 0);
|
||||
this->actionFunc = func_80AACC48;
|
||||
}
|
||||
|
||||
@ -119,7 +129,7 @@ void func_80AAC888(Actor* thisx, PlayState* play) {
|
||||
void DmChar05_Init(Actor* thisx, PlayState* play) {
|
||||
DmChar05* this = THIS;
|
||||
|
||||
this->unk_18C = 0;
|
||||
this->animIndex = DMCHAR05_ANIM_0;
|
||||
this->unk_18E = 0;
|
||||
this->unk_19C = 0;
|
||||
this->unk_1A0 = 0;
|
||||
@ -308,7 +318,7 @@ void func_80AACE5C(DmChar05* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void func_80AACF04(DmChar05* this, PlayState* play) {
|
||||
u8 sp2F = true;
|
||||
u8 changeAnim = true;
|
||||
s32 cueChannel;
|
||||
|
||||
switch (DMCHAR05_GET(&this->actor)) {
|
||||
@ -319,7 +329,7 @@ void func_80AACF04(DmChar05* this, PlayState* play) {
|
||||
if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
|
||||
switch (play->csCtx.actorCues[cueChannel]->id) {
|
||||
case 1:
|
||||
sp2F = false;
|
||||
changeAnim = false;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
@ -327,27 +337,27 @@ void func_80AACF04(DmChar05* this, PlayState* play) {
|
||||
break;
|
||||
|
||||
case 3:
|
||||
this->unk_18C = 0;
|
||||
this->animIndex = DMCHAR05_ANIM_0;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
Item_Give(play, ITEM_MASK_GORON);
|
||||
sp2F = false;
|
||||
changeAnim = false;
|
||||
this->actionFunc = func_80AAC990;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
sp2F = false;
|
||||
changeAnim = false;
|
||||
Actor_Kill(&this->actor);
|
||||
break;
|
||||
|
||||
default:
|
||||
sp2F = false;
|
||||
changeAnim = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (sp2F) {
|
||||
func_80AAC5A0(&this->skelAnime, &sAnimationInfo[this->unk_18C], 0);
|
||||
if (changeAnim) {
|
||||
DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -362,36 +372,36 @@ void func_80AACF04(DmChar05* this, PlayState* play) {
|
||||
if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
|
||||
switch (play->csCtx.actorCues[cueChannel]->id) {
|
||||
case 1:
|
||||
sp2F = false;
|
||||
changeAnim = false;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
this->unk_18C = 1;
|
||||
this->animIndex = DMCHAR05_ANIM_1;
|
||||
this->unk_1B4 = 1;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
this->unk_18C = 1;
|
||||
this->animIndex = DMCHAR05_ANIM_1;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
Item_Give(play, ITEM_MASK_ZORA);
|
||||
sp2F = false;
|
||||
changeAnim = false;
|
||||
this->actionFunc = func_80AACD1C;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
sp2F = false;
|
||||
changeAnim = false;
|
||||
Actor_Kill(&this->actor);
|
||||
break;
|
||||
|
||||
default:
|
||||
sp2F = false;
|
||||
changeAnim = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (sp2F) {
|
||||
func_80AAC5A0(&this->skelAnime, &sAnimationInfo[this->unk_18C], 0);
|
||||
if (changeAnim) {
|
||||
DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -406,35 +416,35 @@ void func_80AACF04(DmChar05* this, PlayState* play) {
|
||||
if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
|
||||
switch (play->csCtx.actorCues[cueChannel]->id) {
|
||||
case 1:
|
||||
sp2F = false;
|
||||
changeAnim = false;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
this->unk_18C = 3;
|
||||
this->animIndex = DMCHAR05_ANIM_3;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
this->unk_18C = 2;
|
||||
this->animIndex = DMCHAR05_ANIM_2;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
Item_Give(play, ITEM_MASK_GIBDO);
|
||||
sp2F = false;
|
||||
changeAnim = false;
|
||||
this->actionFunc = func_80AACE10;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
sp2F = false;
|
||||
changeAnim = false;
|
||||
Actor_Kill(&this->actor);
|
||||
break;
|
||||
|
||||
default:
|
||||
sp2F = false;
|
||||
changeAnim = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (sp2F) {
|
||||
func_80AAC5A0(&this->skelAnime, &sAnimationInfo[this->unk_18C], 0);
|
||||
if (changeAnim) {
|
||||
DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -449,28 +459,28 @@ void func_80AACF04(DmChar05* this, PlayState* play) {
|
||||
if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
|
||||
switch (play->csCtx.actorCues[cueChannel]->id) {
|
||||
default:
|
||||
sp2F = false;
|
||||
changeAnim = false;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
sp2F = false;
|
||||
changeAnim = false;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
this->unk_18C = 4;
|
||||
this->animIndex = DMCHAR05_ANIM_4;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
this->unk_18C = 5;
|
||||
this->animIndex = DMCHAR05_ANIM_5;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
this->unk_18C = 5;
|
||||
this->animIndex = DMCHAR05_ANIM_5;
|
||||
break;
|
||||
}
|
||||
|
||||
if (sp2F) {
|
||||
func_80AAC5A0(&this->skelAnime, &sAnimationInfo[this->unk_18C], 0);
|
||||
if (changeAnim) {
|
||||
DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -482,9 +492,9 @@ void func_80AACF04(DmChar05* this, PlayState* play) {
|
||||
}
|
||||
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
if (this->unk_18C == 4) {
|
||||
this->unk_18C++;
|
||||
func_80AAC5A0(&this->skelAnime, &sAnimationInfo[this->unk_18C], 0);
|
||||
if (this->animIndex == DMCHAR05_ANIM_4) {
|
||||
this->animIndex++;
|
||||
DmChar05_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -29,7 +29,7 @@ typedef struct DmChar05 {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ SkelAnime skelAnime;
|
||||
/* 0x188 */ DmChar05ActionFunc actionFunc;
|
||||
/* 0x18C */ s16 unk_18C;
|
||||
/* 0x18C */ s16 animIndex;
|
||||
/* 0x18E */ u8 unk_18E;
|
||||
/* 0x18F */ u8 unk_18F;
|
||||
/* 0x190 */ Vec3f unk_190;
|
||||
|
@ -16,7 +16,7 @@ void DmChar06_Update(Actor* thisx, PlayState* play);
|
||||
void DmChar06_Draw(Actor* thisx, PlayState* play);
|
||||
|
||||
void DmChar06_SetupAction(DmChar06* this, DmChar06ActionFunc actionFunc);
|
||||
void func_80AAE6F0(DmChar06* this, PlayState* play);
|
||||
void DmChar06_HandleCutscene(DmChar06* this, PlayState* play);
|
||||
|
||||
ActorInit Dm_Char06_InitVars = {
|
||||
ACTOR_DM_CHAR06,
|
||||
@ -40,13 +40,13 @@ void DmChar06_Init(Actor* thisx, PlayState* play) {
|
||||
SET_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE);
|
||||
Actor_SetScale(&this->actor, 1.0f);
|
||||
this->alpha = 255;
|
||||
DmChar06_SetupAction(this, func_80AAE6F0);
|
||||
DmChar06_SetupAction(this, DmChar06_HandleCutscene);
|
||||
}
|
||||
|
||||
void DmChar06_Destroy(Actor* thisx, PlayState* play) {
|
||||
}
|
||||
|
||||
void func_80AAE6F0(DmChar06* this, PlayState* play) {
|
||||
void DmChar06_HandleCutscene(DmChar06* this, PlayState* play) {
|
||||
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_463)) {
|
||||
s32 cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_463);
|
||||
|
||||
|
@ -81,6 +81,7 @@ void DmChar07_Draw(Actor* thisx, PlayState* play) {
|
||||
case DMCHAR07_STAGE:
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_002CD0);
|
||||
break;
|
||||
|
||||
case DMCHAR07_CREDITS_STAGE:
|
||||
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_milkbar_Matanimheader_0105F8));
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_007918);
|
||||
@ -90,6 +91,7 @@ void DmChar07_Draw(Actor* thisx, PlayState* play) {
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_001210);
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_0016B8);
|
||||
break;
|
||||
|
||||
case DMCHAR07_SPOTLIGHTS:
|
||||
if (this->spotlightFlags & DMCHAR07_STAGE_RIGHT_SPOTLIGHT) {
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_000240);
|
||||
@ -107,17 +109,23 @@ void DmChar07_Draw(Actor* thisx, PlayState* play) {
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_0016B8);
|
||||
}
|
||||
break;
|
||||
|
||||
case DMCHAR07_DISHES:
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_010D68);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Gfx_SetupDL25_Xlu(play->state.gfxCtx);
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
switch (this->dyna.actor.params) {
|
||||
case DMCHAR07_STAGE:
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_milkbar_DL_002BA0);
|
||||
break;
|
||||
|
||||
case DMCHAR07_CREDITS_STAGE:
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_milkbar_DL_0076A0);
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_milkbar_DL_000100);
|
||||
@ -126,6 +134,7 @@ void DmChar07_Draw(Actor* thisx, PlayState* play) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_milkbar_DL_0010D0);
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_milkbar_DL_0015E0);
|
||||
break;
|
||||
|
||||
case DMCHAR07_SPOTLIGHTS:
|
||||
if (this->spotlightFlags & DMCHAR07_STAGE_RIGHT_SPOTLIGHT) {
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_000100);
|
||||
@ -143,8 +152,12 @@ void DmChar07_Draw(Actor* thisx, PlayState* play) {
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_milkbar_DL_0015E0);
|
||||
}
|
||||
break;
|
||||
|
||||
case DMCHAR07_DISHES:
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
|
@ -26,9 +26,9 @@ void DmChar08_SetupAppearCs(DmChar08* this, PlayState* play);
|
||||
void func_80AAF884(DmChar08* this, PlayState* play);
|
||||
void func_80AAFB04(DmChar08* this, PlayState* play);
|
||||
void func_80AAFB94(DmChar08* this, PlayState* play);
|
||||
void func_80AAFE88(DmChar08* this, PlayState* play);
|
||||
void DmChar08_HandleCutscene(DmChar08* this, PlayState* play);
|
||||
void func_80AB023C(DmChar08* this, PlayState* play);
|
||||
void func_80AB01E8(DmChar08* this, PlayState* play);
|
||||
void DmChar08_UpdateAnim(DmChar08* this, PlayState* play);
|
||||
void DmChar08_SpawnBubbles(DmChar08* this, PlayState* play);
|
||||
void func_80AAFCCC(DmChar08* this, PlayState* play);
|
||||
|
||||
@ -41,16 +41,6 @@ typedef enum {
|
||||
/* 5 */ TURTLE_EYEMODE_LOOK_RIGHT
|
||||
} TurtleEyeMode;
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ TURTLE_ANIM_IDLE,
|
||||
/* 1 */ TURTLE_ANIM_SWIM,
|
||||
/* 2 */ TURTLE_ANIM_FLOAT,
|
||||
/* 3 */ TURTLE_ANIM_SPEAK1,
|
||||
/* 4 */ TURTLE_ANIM_COUGH,
|
||||
/* 5 */ TURTLE_ANIM_SPEAK2,
|
||||
/* 6 */ TURTLE_ANIM_YAWN
|
||||
} TurtleAnimation;
|
||||
|
||||
ActorInit Dm_Char08_InitVars = {
|
||||
ACTOR_DM_CHAR08,
|
||||
ACTORCAT_BG,
|
||||
@ -65,14 +55,26 @@ ActorInit Dm_Char08_InitVars = {
|
||||
|
||||
#include "overlays/ovl_Dm_Char08/ovl_Dm_Char08.c"
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &gTurtleIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f },
|
||||
{ &gTurtleSwimAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f },
|
||||
{ &gTurtleFloatAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f },
|
||||
{ &gTurtleSpeak1Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f },
|
||||
{ &gTurtleCoughAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f },
|
||||
{ &gTurtleSpeak2Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f },
|
||||
{ &gTurtleYawnAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f },
|
||||
typedef enum {
|
||||
/* 0 */ TURTLE_ANIM_IDLE,
|
||||
/* 1 */ TURTLE_ANIM_SWIM,
|
||||
/* 2 */ TURTLE_ANIM_FLOAT,
|
||||
/* 3 */ TURTLE_ANIM_SPEAK1,
|
||||
/* 4 */ TURTLE_ANIM_COUGH,
|
||||
/* 5 */ TURTLE_ANIM_SPEAK2,
|
||||
/* 6 */ TURTLE_ANIM_YAWN,
|
||||
/* 7 */ TURTLE_ANIM_MAX,
|
||||
/* 99 */ TURTLE_ANIM_NONE = 99
|
||||
} TurtleAnimation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[TURTLE_ANIM_MAX] = {
|
||||
{ &gTurtleIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, // TURTLE_ANIM_IDLE
|
||||
{ &gTurtleSwimAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, // TURTLE_ANIM_SWIM
|
||||
{ &gTurtleFloatAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, // TURTLE_ANIM_FLOAT
|
||||
{ &gTurtleSpeak1Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, // TURTLE_ANIM_SPEAK1
|
||||
{ &gTurtleCoughAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, // TURTLE_ANIM_COUGH
|
||||
{ &gTurtleSpeak2Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, // TURTLE_ANIM_SPEAK2
|
||||
{ &gTurtleYawnAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -24.0f }, // TURTLE_ANIM_YAWN
|
||||
};
|
||||
|
||||
static InitChainEntry sInitChain[] = {
|
||||
@ -130,17 +132,19 @@ void DmChar08_UpdateEyes(DmChar08* this) {
|
||||
}
|
||||
}
|
||||
|
||||
void DmChar08_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animationInfo, u16 animIndex) {
|
||||
void DmChar08_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) {
|
||||
f32 endFrame;
|
||||
|
||||
animationInfo += animIndex;
|
||||
if (animationInfo->frameCount < 0.0f) {
|
||||
endFrame = Animation_GetLastFrame(animationInfo->animation);
|
||||
animInfo += animIndex;
|
||||
|
||||
if (animInfo->frameCount < 0.0f) {
|
||||
endFrame = Animation_GetLastFrame(animInfo->animation);
|
||||
} else {
|
||||
endFrame = animationInfo->frameCount;
|
||||
endFrame = animInfo->frameCount;
|
||||
}
|
||||
Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame, endFrame,
|
||||
animationInfo->mode, animationInfo->morphFrames);
|
||||
|
||||
Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame,
|
||||
animInfo->mode, animInfo->morphFrames);
|
||||
}
|
||||
|
||||
void DmChar08_Init(Actor* thisx, PlayState* play2) {
|
||||
@ -198,7 +202,7 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) {
|
||||
this->unk_1F0 = 1.0f;
|
||||
this->unk_1FF = 2;
|
||||
this->animIndex = TURTLE_ANIM_FLOAT;
|
||||
this->unk_203 = 0x63;
|
||||
this->prevAnimIndex = TURTLE_ANIM_NONE;
|
||||
this->eyeMode = TURTLE_EYEMODE_BLINK_STRAIGHT;
|
||||
this->unk_207 = 0;
|
||||
this->unk_208 = 0;
|
||||
@ -217,7 +221,7 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) {
|
||||
case SCENE_SEA:
|
||||
this->unk_1FF = 2;
|
||||
this->animIndex = TURTLE_ANIM_FLOAT;
|
||||
this->unk_203 = 0x63;
|
||||
this->prevAnimIndex = TURTLE_ANIM_NONE;
|
||||
this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
|
||||
this->unk_207 = 0;
|
||||
this->unk_208 = 0;
|
||||
@ -229,13 +233,16 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) {
|
||||
case SCENE_KONPEKI_ENT:
|
||||
this->unk_1FF = 2;
|
||||
this->animIndex = TURTLE_ANIM_FLOAT;
|
||||
this->unk_203 = 0x63;
|
||||
this->prevAnimIndex = TURTLE_ANIM_NONE;
|
||||
this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
|
||||
this->unk_207 = 0;
|
||||
this->unk_208 = 0;
|
||||
this->actionFunc = DmChar08_DoNothing;
|
||||
this->unk_1F0 = 1.0f;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
DmChar08_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
}
|
||||
@ -454,7 +461,7 @@ void func_80AAFCCC(DmChar08* this, PlayState* play) {
|
||||
void DmChar08_DoNothing(DmChar08* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void func_80AAFE88(DmChar08* this, PlayState* play) {
|
||||
void DmChar08_HandleCutscene(DmChar08* this, PlayState* play) {
|
||||
s32 cueChannel;
|
||||
s32 pad;
|
||||
f32 phi_f12;
|
||||
@ -512,6 +519,9 @@ void func_80AAFE88(DmChar08* this, PlayState* play) {
|
||||
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIG_TORTOISE_ROLL);
|
||||
this->animIndex = TURTLE_ANIM_FLOAT;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
switch (play->csCtx.actorCues[cueChannel]->id) {
|
||||
@ -556,9 +566,9 @@ void func_80AAFE88(DmChar08* this, PlayState* play) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_80AB01E8(DmChar08* this, PlayState* play) {
|
||||
if (this->animIndex != this->unk_203) {
|
||||
this->unk_203 = this->animIndex;
|
||||
void DmChar08_UpdateAnim(DmChar08* this, PlayState* play) {
|
||||
if (this->animIndex != this->prevAnimIndex) {
|
||||
this->prevAnimIndex = this->animIndex;
|
||||
DmChar08_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
}
|
||||
}
|
||||
@ -619,6 +629,9 @@ void func_80AB023C(DmChar08* this, PlayState* play) {
|
||||
case 0x1030: // Return to sleep
|
||||
this->unk_207 = 4;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -641,6 +654,9 @@ void func_80AB032C(DmChar08* this, PlayState* play) {
|
||||
this->unk_208 = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -668,6 +684,9 @@ void func_80AB032C(DmChar08* this, PlayState* play) {
|
||||
this->unk_208 = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -723,6 +742,9 @@ void func_80AB032C(DmChar08* this, PlayState* play) {
|
||||
this->unk_208 = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -757,6 +779,9 @@ void func_80AB032C(DmChar08* this, PlayState* play) {
|
||||
this->unk_208 = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -782,6 +807,9 @@ void func_80AB032C(DmChar08* this, PlayState* play) {
|
||||
this->unk_208 = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -809,6 +837,9 @@ void func_80AB032C(DmChar08* this, PlayState* play) {
|
||||
this->unk_208 = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -856,8 +887,12 @@ void func_80AB032C(DmChar08* this, PlayState* play) {
|
||||
this->unk_208 = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 10:
|
||||
switch (this->unk_208) {
|
||||
case 0:
|
||||
@ -865,6 +900,7 @@ void func_80AB032C(DmChar08* this, PlayState* play) {
|
||||
this->eyeMode = TURTLE_EYEMODE_BLINK_LEFT;
|
||||
this->unk_208++;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
this->animIndex = TURTLE_ANIM_SPEAK2;
|
||||
@ -872,6 +908,7 @@ void func_80AB032C(DmChar08* this, PlayState* play) {
|
||||
this->unk_208++;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
this->animIndex = TURTLE_ANIM_SPEAK1;
|
||||
@ -879,6 +916,7 @@ void func_80AB032C(DmChar08* this, PlayState* play) {
|
||||
this->unk_208++;
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
this->animIndex = TURTLE_ANIM_FLOAT;
|
||||
@ -887,8 +925,14 @@ void func_80AB032C(DmChar08* this, PlayState* play) {
|
||||
this->unk_208 = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -979,10 +1023,10 @@ void DmChar08_Update(Actor* thisx, PlayState* play) {
|
||||
|
||||
DmChar08_UpdateEyes(this);
|
||||
this->actionFunc(this, play);
|
||||
func_80AAFE88(this, play);
|
||||
DmChar08_HandleCutscene(this, play);
|
||||
func_80AB023C(this, play);
|
||||
func_80AB032C(this, play);
|
||||
func_80AB01E8(this, play);
|
||||
DmChar08_UpdateAnim(this, play);
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
DmChar08_SpawnBubbles(this, play);
|
||||
this->dyna.actor.world.pos.y = this->targetYPos;
|
||||
@ -1079,6 +1123,9 @@ void DmChar08_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
|
||||
Matrix_Scale((this->unk_1F0 * 0.55f) + 0.45f, (this->unk_1F0 * 0.2f) + 0.8f,
|
||||
(this->unk_1F0 * 0.55f) + 0.45f, MTXMODE_APPLY);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -31,7 +31,7 @@ typedef struct DmChar08 {
|
||||
/* 0x200 */ u8 eyeMode;
|
||||
/* 0x201 */ u8 eyeIndex;
|
||||
/* 0x202 */ u8 animIndex;
|
||||
/* 0x203 */ u8 unk_203;
|
||||
/* 0x203 */ u8 prevAnimIndex;
|
||||
/* 0x204 */ UNK_TYPE1 unk_204;
|
||||
/* 0x205 */ u8 alpha;
|
||||
/* 0x206 */ u8 unk_206;
|
||||
|
@ -16,7 +16,7 @@ void DmChar09_Update(Actor* thisx, PlayState* play);
|
||||
void DmChar09_Draw(Actor* thisx, PlayState* play);
|
||||
|
||||
void DmChar09_DoNothing(DmChar09* this, PlayState* play);
|
||||
void func_80AB2268(DmChar09* this, PlayState* play);
|
||||
void DmChar09_HandleCutscene(DmChar09* this, PlayState* play);
|
||||
|
||||
ActorInit Dm_Char09_InitVars = {
|
||||
ACTOR_DM_CHAR09,
|
||||
@ -30,23 +30,28 @@ ActorInit Dm_Char09_InitVars = {
|
||||
(ActorFunc)DmChar09_Draw,
|
||||
};
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &gBeeFlyingAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
typedef enum {
|
||||
/* 0 */ DMCHAR09_ANIM_FLYING,
|
||||
/* 1 */ DMCHAR09_ANIM_MAX
|
||||
} DmChar09Animation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[DMCHAR09_ANIM_MAX] = {
|
||||
{ &gBeeFlyingAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // DMCHAR09_ANIM_FLYING
|
||||
};
|
||||
|
||||
void DmChar09_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animationInfo, u16 animIndex) {
|
||||
f32 frameCount;
|
||||
void DmChar09_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) {
|
||||
f32 endFrame;
|
||||
|
||||
animationInfo += animIndex;
|
||||
animInfo += animIndex;
|
||||
|
||||
if (animationInfo->frameCount < 0.0f) {
|
||||
frameCount = Animation_GetLastFrame(animationInfo->animation);
|
||||
if (animInfo->frameCount < 0.0f) {
|
||||
endFrame = Animation_GetLastFrame(animInfo->animation);
|
||||
} else {
|
||||
frameCount = animationInfo->frameCount;
|
||||
endFrame = animInfo->frameCount;
|
||||
}
|
||||
|
||||
Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame,
|
||||
frameCount, animationInfo->mode, animationInfo->morphFrames);
|
||||
Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame,
|
||||
animInfo->mode, animInfo->morphFrames);
|
||||
}
|
||||
|
||||
void DmChar09_Init(Actor* thisx, PlayState* play) {
|
||||
@ -55,7 +60,7 @@ void DmChar09_Init(Actor* thisx, PlayState* play) {
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f);
|
||||
SkelAnime_Init(play, &this->skelAnime, &gBeeSkel, &gBeeFlyingAnim, this->jointTable, this->morphTable,
|
||||
OBJECT_BEE_LIMB_MAX);
|
||||
DmChar09_ChangeAnim(&this->skelAnime, sAnimationInfo, 0);
|
||||
DmChar09_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMCHAR09_ANIM_FLYING], 0);
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->unk_228 = Rand_ZeroOne() * 65535.0f;
|
||||
this->unk_22A = Rand_ZeroOne() * 65535.0f;
|
||||
@ -109,7 +114,7 @@ void func_80AB1FDC(DmChar09* this, PlayState* play) {
|
||||
this->unk_220 = 1;
|
||||
} else {
|
||||
phi_a1 = false;
|
||||
this->actionFunc = func_80AB2268;
|
||||
this->actionFunc = DmChar09_HandleCutscene;
|
||||
}
|
||||
}
|
||||
if (phi_a1) {
|
||||
@ -123,7 +128,7 @@ void func_80AB1FDC(DmChar09* this, PlayState* play) {
|
||||
void DmChar09_DoNothing(DmChar09* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void func_80AB2268(DmChar09* this, PlayState* play) {
|
||||
void DmChar09_HandleCutscene(DmChar09* this, PlayState* play) {
|
||||
Path* path;
|
||||
s32 pad;
|
||||
s32 i;
|
||||
@ -148,15 +153,21 @@ void func_80AB2268(DmChar09* this, PlayState* play) {
|
||||
case 2:
|
||||
max = 0;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
max = 1;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
max = 2;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
max = 3;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (play->csCtx.actorCues[cueChannel]->id >= 2) {
|
||||
@ -200,7 +211,7 @@ void DmChar09_Update(Actor* thisx, PlayState* play) {
|
||||
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
this->actionFunc(this, play);
|
||||
func_80AB2268(this, play);
|
||||
DmChar09_HandleCutscene(this, play);
|
||||
func_80AB24BC(this, play);
|
||||
if ((play->csCtx.state != CS_STATE_IDLE) && this->unk_22E && DMCHAR09_GET_100(thisx)) {
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_POSTMAN_WALK + SFX_FLAG);
|
||||
|
@ -17,8 +17,8 @@ void DmGm_Destroy(Actor* thisx, PlayState* play);
|
||||
void DmGm_Update(Actor* thisx, PlayState* play);
|
||||
|
||||
void func_80C248A8(DmGm* this, PlayState* play);
|
||||
void func_80C24A00(DmGm* this, PlayState* play);
|
||||
void func_80C24BD0(DmGm* this, PlayState* play);
|
||||
void DmGm_HandleCutscene(DmGm* this, PlayState* play);
|
||||
void DmGm_DoNothing(DmGm* this, PlayState* play);
|
||||
void func_80C25000(Actor* thisx, PlayState* play);
|
||||
|
||||
ActorInit Dm_Gm_InitVars = {
|
||||
@ -33,29 +33,48 @@ ActorInit Dm_Gm_InitVars = {
|
||||
(ActorFunc)NULL,
|
||||
};
|
||||
|
||||
static AnimationInfoS sAnimationInfo[] = {
|
||||
{ &object_an1_Anim_007E08, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
{ &object_an1_Anim_0071E8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
{ &object_an4_Anim_006CC0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
|
||||
{ &object_an1_Anim_013E1C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
|
||||
{ &object_an4_Anim_007E3C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
|
||||
{ &object_an4_Anim_0088C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
{ &object_an4_Anim_0013C8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
|
||||
{ &object_an4_Anim_002550, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
{ &object_an4_Anim_00353C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
|
||||
{ &object_an4_Anim_004498, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
{ &object_an4_Anim_0060B4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
|
||||
{ &object_an4_Anim_00041C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
|
||||
{ &object_an4_Anim_004A78, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
|
||||
{ &object_an4_Anim_00506C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
typedef enum {
|
||||
/* -1 */ DMGM_ANIM_NONE = -1,
|
||||
/* 0x0 */ DMGM_ANIM_0,
|
||||
/* 0x1 */ DMGM_ANIM_1,
|
||||
/* 0x2 */ DMGM_ANIM_2,
|
||||
/* 0x3 */ DMGM_ANIM_3,
|
||||
/* 0x4 */ DMGM_ANIM_4,
|
||||
/* 0x5 */ DMGM_ANIM_5,
|
||||
/* 0x6 */ DMGM_ANIM_6,
|
||||
/* 0x7 */ DMGM_ANIM_7,
|
||||
/* 0x8 */ DMGM_ANIM_8,
|
||||
/* 0x9 */ DMGM_ANIM_9,
|
||||
/* 0xA */ DMGM_ANIM_10,
|
||||
/* 0xB */ DMGM_ANIM_11,
|
||||
/* 0xC */ DMGM_ANIM_12,
|
||||
/* 0xD */ DMGM_ANIM_13,
|
||||
/* 0xE */ DMGM_ANIM_MAX
|
||||
} DmGmAnimation;
|
||||
|
||||
static AnimationInfoS sAnimationInfo[DMGM_ANIM_MAX] = {
|
||||
{ &object_an1_Anim_007E08, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_0
|
||||
{ &object_an1_Anim_0071E8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_1
|
||||
{ &object_an4_Anim_006CC0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DMGM_ANIM_2
|
||||
{ &object_an1_Anim_013E1C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DMGM_ANIM_3
|
||||
{ &object_an4_Anim_007E3C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_4
|
||||
{ &object_an4_Anim_0088C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_5
|
||||
{ &object_an4_Anim_0013C8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_6
|
||||
{ &object_an4_Anim_002550, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_7
|
||||
{ &object_an4_Anim_00353C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_8
|
||||
{ &object_an4_Anim_004498, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_9
|
||||
{ &object_an4_Anim_0060B4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_10
|
||||
{ &object_an4_Anim_00041C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_11
|
||||
{ &object_an4_Anim_004A78, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_12
|
||||
{ &object_an4_Anim_00506C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_13
|
||||
};
|
||||
|
||||
s32 func_80C24360(DmGm* this, PlayState* play) {
|
||||
s32 DmGm_UpdateSkelAnime(DmGm* this, PlayState* play) {
|
||||
s8 objectIndex = this->actor.objBankIndex;
|
||||
s8 objectIndex2;
|
||||
s32 ret = false;
|
||||
s32 isAnimFinished = false;
|
||||
|
||||
if (this->unk_2C8 < 2) {
|
||||
if (this->animIndex <= DMGM_ANIM_1) {
|
||||
objectIndex2 = this->actor.objBankIndex;
|
||||
} else {
|
||||
objectIndex2 = this->unk_2AC;
|
||||
@ -63,30 +82,32 @@ s32 func_80C24360(DmGm* this, PlayState* play) {
|
||||
|
||||
if (objectIndex2 >= 0) {
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment);
|
||||
ret = SkelAnime_Update(&this->skelAnime);
|
||||
isAnimFinished = SkelAnime_Update(&this->skelAnime);
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment);
|
||||
}
|
||||
return ret;
|
||||
|
||||
return isAnimFinished;
|
||||
}
|
||||
|
||||
s32 func_80C24428(DmGm* this, PlayState* play, s32 arg2) {
|
||||
s32 DmGm_ChangeAnim(DmGm* this, PlayState* play, s32 animIndex) {
|
||||
s8 objectIndex = this->actor.objBankIndex;
|
||||
s8 objectIndex2;
|
||||
s32 ret = false;
|
||||
s32 didAnimChange = false;
|
||||
|
||||
if (arg2 < 2) {
|
||||
if (animIndex <= DMGM_ANIM_1) {
|
||||
objectIndex2 = this->actor.objBankIndex;
|
||||
} else {
|
||||
objectIndex2 = this->unk_2AC;
|
||||
}
|
||||
|
||||
if ((objectIndex2 >= 0) && (arg2 != this->unk_2C8)) {
|
||||
if ((objectIndex2 >= 0) && (this->animIndex != animIndex)) {
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex2].segment);
|
||||
this->unk_2C8 = arg2;
|
||||
ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg2);
|
||||
this->animIndex = animIndex;
|
||||
didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIndex].segment);
|
||||
}
|
||||
return ret;
|
||||
|
||||
return didAnimChange;
|
||||
}
|
||||
|
||||
void func_80C24504(DmGm* this) {
|
||||
@ -176,8 +197,8 @@ void func_80C248A8(DmGm* this, PlayState* play) {
|
||||
SkelAnime_InitFlex(play, &this->skelAnime, &object_an1_Skel_012618, NULL, this->jointTable, this->morphTable,
|
||||
OBJECT_AN1_LIMB_MAX);
|
||||
|
||||
this->unk_2C8 = -1;
|
||||
func_80C24428(this, play, 0);
|
||||
this->animIndex = DMGM_ANIM_NONE;
|
||||
DmGm_ChangeAnim(this, play, DMGM_ANIM_0);
|
||||
this->actor.flags &= ~ACTOR_FLAG_1;
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->unk_2AE |= 1;
|
||||
@ -185,25 +206,28 @@ void func_80C248A8(DmGm* this, PlayState* play) {
|
||||
|
||||
if ((play->sceneId == SCENE_YADOYA) && (play->curSpawn == 4)) {
|
||||
this->unk_2B4 = func_80C24838(play);
|
||||
func_80C24428(this, play, 1);
|
||||
this->actionFunc = func_80C24BD0;
|
||||
DmGm_ChangeAnim(this, play, DMGM_ANIM_1);
|
||||
this->actionFunc = DmGm_DoNothing;
|
||||
} else {
|
||||
this->actionFunc = func_80C24A00;
|
||||
this->actionFunc = DmGm_HandleCutscene;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void func_80C24A00(DmGm* this, PlayState* play) {
|
||||
s32 sp28[] = { 0, 0, 12, 2, 4, 6, 8, 10, 11, 3 };
|
||||
void DmGm_HandleCutscene(DmGm* this, PlayState* play) {
|
||||
s32 csAnimIndex[] = {
|
||||
DMGM_ANIM_0, DMGM_ANIM_0, DMGM_ANIM_12, DMGM_ANIM_2, DMGM_ANIM_4,
|
||||
DMGM_ANIM_6, DMGM_ANIM_8, DMGM_ANIM_10, DMGM_ANIM_11, DMGM_ANIM_3,
|
||||
};
|
||||
u16 cueId;
|
||||
s32 cueChannel;
|
||||
|
||||
if (play->csCtx.state != CS_STATE_IDLE) {
|
||||
if (this->unk_2D0 == 0) {
|
||||
if (!this->isCutscenePlaying) {
|
||||
this->cueId = 255;
|
||||
this->unk_2D0 = 1;
|
||||
this->unk_2D4 = 0;
|
||||
this->unk_2CC = this->unk_2C8;
|
||||
this->isCutscenePlaying = true;
|
||||
this->didAnimChangeInCs = false;
|
||||
this->prevAnimIndex = this->animIndex;
|
||||
}
|
||||
|
||||
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_557)) {
|
||||
@ -212,8 +236,8 @@ void func_80C24A00(DmGm* this, PlayState* play) {
|
||||
|
||||
if (this->cueId != (u8)cueId) {
|
||||
this->cueId = cueId;
|
||||
this->unk_2D4 = 1;
|
||||
func_80C24428(this, play, sp28[cueId]);
|
||||
this->didAnimChangeInCs = true;
|
||||
DmGm_ChangeAnim(this, play, csAnimIndex[cueId]);
|
||||
}
|
||||
|
||||
switch (this->cueId) {
|
||||
@ -223,9 +247,10 @@ void func_80C24A00(DmGm* this, PlayState* play) {
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
if ((this->unk_2C8 == 12) || (this->unk_2C8 == 4) || (this->unk_2C8 == 6) || (this->unk_2C8 == 8)) {
|
||||
if ((this->animIndex == DMGM_ANIM_12) || (this->animIndex == DMGM_ANIM_4) ||
|
||||
(this->animIndex == DMGM_ANIM_6) || (this->animIndex == DMGM_ANIM_8)) {
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80C24428(this, play, this->unk_2C8 + 1);
|
||||
DmGm_ChangeAnim(this, play, this->animIndex + 1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -235,14 +260,14 @@ void func_80C24A00(DmGm* this, PlayState* play) {
|
||||
}
|
||||
Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
|
||||
}
|
||||
} else if (this->unk_2D0 != 0) {
|
||||
this->unk_2D0 = 0;
|
||||
this->unk_2D4 = 0;
|
||||
func_80C24428(this, play, this->unk_2CC);
|
||||
} else if (this->isCutscenePlaying) {
|
||||
this->isCutscenePlaying = false;
|
||||
this->didAnimChangeInCs = false;
|
||||
DmGm_ChangeAnim(this, play, this->prevAnimIndex);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80C24BD0(DmGm* this, PlayState* play) {
|
||||
void DmGm_DoNothing(DmGm* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void DmGm_Init(Actor* thisx, PlayState* play) {
|
||||
@ -264,7 +289,7 @@ void DmGm_Update(Actor* thisx, PlayState* play) {
|
||||
func_80C2478C(this, play);
|
||||
|
||||
if (this->actor.draw != NULL) {
|
||||
func_80C24360(this, play);
|
||||
DmGm_UpdateSkelAnime(this, play);
|
||||
func_80C24504(this);
|
||||
}
|
||||
Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
|
||||
@ -280,7 +305,7 @@ void DmGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
|
||||
s8 sp2B = this->actor.objBankIndex;
|
||||
s8 sp2A = this->unk_2AD;
|
||||
|
||||
if ((limbIndex == OBJECT_AN1_LIMB_05) && (this->unk_2D4 != 0)) {
|
||||
if ((limbIndex == OBJECT_AN1_LIMB_05) && this->didAnimChangeInCs) {
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
Matrix_Push();
|
||||
|
@ -30,10 +30,10 @@ typedef struct DmGm {
|
||||
/* 0x2C0 */ s16 unk_2C0;
|
||||
/* 0x2C2 */ s16 unk_2C2;
|
||||
/* 0x2C4 */ s16 unk_2C4;
|
||||
/* 0x2C8 */ s32 unk_2C8;
|
||||
/* 0x2CC */ s32 unk_2CC;
|
||||
/* 0x2D0 */ s32 unk_2D0;
|
||||
/* 0x2D4 */ s32 unk_2D4;
|
||||
/* 0x2C8 */ s32 animIndex;
|
||||
/* 0x2CC */ s32 prevAnimIndex;
|
||||
/* 0x2D0 */ s32 isCutscenePlaying;
|
||||
/* 0x2D4 */ s32 didAnimChangeInCs;
|
||||
} DmGm; // size = 0x2D8
|
||||
|
||||
#endif // Z_DM_GM_H
|
||||
|
@ -27,43 +27,52 @@ ActorInit Dm_Nb_InitVars = {
|
||||
(ActorFunc)DmNb_Draw,
|
||||
};
|
||||
|
||||
static AnimationInfoS sAnimationInfo[] = {
|
||||
{ &gNbIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
|
||||
typedef enum {
|
||||
/* -1 */ DMNB_ANIM_NONE = -1,
|
||||
/* 0 */ DMNB_ANIM_0,
|
||||
/* 1 */ DMNB_ANIM_MAX
|
||||
} DmNbAnimation;
|
||||
|
||||
static AnimationInfoS sAnimationInfo[DMNB_ANIM_MAX] = {
|
||||
{ &gNbIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMNB_ANIM_0
|
||||
};
|
||||
|
||||
s32 func_80C1DED0(DmNb* this, s32 arg1) {
|
||||
s32 ret = false;
|
||||
s32 DmNb_ChangeAnim(DmNb* this, s32 animIndex) {
|
||||
s32 didAnimChange = false;
|
||||
|
||||
if (arg1 != this->unk1F0) {
|
||||
this->unk1F0 = arg1;
|
||||
ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1);
|
||||
if (this->animIndex != animIndex) {
|
||||
this->animIndex = animIndex;
|
||||
didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
|
||||
}
|
||||
return ret;
|
||||
|
||||
return didAnimChange;
|
||||
}
|
||||
|
||||
void func_80C1DF18(DmNb* this, PlayState* play) {
|
||||
s32 sp2C[] = { 0, 0, 0, 0, 0 };
|
||||
void DmNb_HandleCutscene(DmNb* this, PlayState* play) {
|
||||
s32 csAnimIndex[] = {
|
||||
DMNB_ANIM_0, DMNB_ANIM_0, DMNB_ANIM_0, DMNB_ANIM_0, DMNB_ANIM_0,
|
||||
};
|
||||
u16 cueId;
|
||||
s32 cueChannel;
|
||||
|
||||
if (play->csCtx.state != CS_STATE_IDLE) {
|
||||
if (this->unk1F8 == 0) {
|
||||
if (!this->isCutscenePlaying) {
|
||||
this->cueId = 255;
|
||||
this->unk1F8 = 1;
|
||||
this->unk1F4 = this->unk1F0;
|
||||
this->isCutscenePlaying = true;
|
||||
this->prevAnimIndex = this->animIndex;
|
||||
}
|
||||
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_562)) {
|
||||
cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_562);
|
||||
cueId = play->csCtx.actorCues[cueChannel]->id;
|
||||
if (this->cueId != (u8)cueId) {
|
||||
this->cueId = cueId;
|
||||
func_80C1DED0(this, sp2C[cueId]);
|
||||
DmNb_ChangeAnim(this, csAnimIndex[cueId]);
|
||||
}
|
||||
Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
|
||||
}
|
||||
} else if (this->unk1F8 != 0) {
|
||||
this->unk1F8 = 0;
|
||||
func_80C1DED0(this, this->unk1F4);
|
||||
} else if (this->isCutscenePlaying) {
|
||||
this->isCutscenePlaying = false;
|
||||
DmNb_ChangeAnim(this, this->prevAnimIndex);
|
||||
}
|
||||
}
|
||||
|
||||
@ -72,11 +81,11 @@ void DmNb_Init(Actor* thisx, PlayState* play) {
|
||||
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f);
|
||||
SkelAnime_InitFlex(play, &this->skelAnime, &gNbSkel, NULL, this->jointTable, this->morphTable, NB_LIMB_MAX);
|
||||
this->unk1F0 = -1;
|
||||
func_80C1DED0(this, 0);
|
||||
this->animIndex = DMNB_ANIM_NONE;
|
||||
DmNb_ChangeAnim(this, DMNB_ANIM_0);
|
||||
this->actor.flags &= ~ACTOR_FLAG_1;
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->actionFunc = func_80C1DF18;
|
||||
this->actionFunc = DmNb_HandleCutscene;
|
||||
}
|
||||
|
||||
void DmNb_Destroy(Actor* thisx, PlayState* play) {
|
||||
|
@ -15,9 +15,9 @@ typedef struct DmNb {
|
||||
/* 0x18C */ Vec3s jointTable[NB_LIMB_MAX];
|
||||
/* 0x1BC */ Vec3s morphTable[NB_LIMB_MAX];
|
||||
/* 0x1EC */ u8 cueId;
|
||||
/* 0x1F0 */ s32 unk1F0;
|
||||
/* 0x1F4 */ s32 unk1F4;
|
||||
/* 0x1F8 */ s32 unk1F8;
|
||||
/* 0x1F0 */ s32 animIndex;
|
||||
/* 0x1F4 */ s32 prevAnimIndex;
|
||||
/* 0x1F8 */ s32 isCutscenePlaying;
|
||||
} DmNb; // size = 0x1FC
|
||||
|
||||
#endif // Z_DM_NB_H
|
||||
|
@ -16,7 +16,7 @@ void DmOpstage_Destroy(Actor* thisx, PlayState* play);
|
||||
void DmOpstage_Update(Actor* thisx, PlayState* play);
|
||||
void DmOpstage_Draw(Actor* thisx, PlayState* play);
|
||||
|
||||
void DmOpstage_FollowCutsceneScript(DmOpstage* this, PlayState* play);
|
||||
void DmOpstage_HandleCutscene(DmOpstage* this, PlayState* play);
|
||||
|
||||
ActorInit Dm_Opstage_InitVars = {
|
||||
ACTOR_DM_OPSTAGE,
|
||||
@ -42,7 +42,7 @@ void DmOpstage_Init(Actor* thisx, PlayState* play) {
|
||||
DmOpstage* this = THIS;
|
||||
|
||||
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
|
||||
DmOpstage_SetupAction(this, DmOpstage_FollowCutsceneScript);
|
||||
DmOpstage_SetupAction(this, DmOpstage_HandleCutscene);
|
||||
Actor_SetScale(&this->dyna.actor, 0.1f);
|
||||
|
||||
if (DMOPSTAGE_GET_TYPE(&this->dyna.actor) == DMOPSTAGE_TYPE_GROUND) {
|
||||
@ -69,7 +69,7 @@ void DmOpstage_Destroy(Actor* thisx, PlayState* play) {
|
||||
}
|
||||
}
|
||||
|
||||
void DmOpstage_FollowCutsceneScript(DmOpstage* this, PlayState* play) {
|
||||
void DmOpstage_HandleCutscene(DmOpstage* this, PlayState* play) {
|
||||
s32 cueChannel;
|
||||
|
||||
if (DMOPSTAGE_GET_TYPE(&this->dyna.actor) == DMOPSTAGE_TYPE_GROUND) {
|
||||
@ -134,5 +134,8 @@ void DmOpstage_Draw(Actor* thisx, PlayState* play) {
|
||||
Gfx_DrawDListOpa(play, gKeikokuDemoTallTreeStraightDL);
|
||||
Gfx_DrawDListXlu(play, gKeikokuDemoTallTreeStraightEmptyDL);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -55,9 +55,10 @@ void DmRavine_Update(Actor* thisx, PlayState* play) {
|
||||
DmRavine* this = THIS;
|
||||
RoomContext* roomCtx;
|
||||
|
||||
switch ((DmRavineState)this->state) {
|
||||
switch (this->state) {
|
||||
case DM_RAVINE_STATE_INITIALIZED:
|
||||
return;
|
||||
break;
|
||||
|
||||
case DM_RAVINE_STATE_ACTIVE:
|
||||
this->isActive = true;
|
||||
play->roomCtx.unk7A[1]++;
|
||||
@ -70,9 +71,13 @@ void DmRavine_Update(Actor* thisx, PlayState* play) {
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case DM_RAVINE_STATE_PENDING_DEATH:
|
||||
Actor_Kill(&this->actor);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,19 +30,29 @@ ActorInit Dm_Sa_InitVars = {
|
||||
(ActorFunc)DmSa_Draw,
|
||||
};
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = { { &gSkullKidTPoseAnim, 1.0f, 0, -1.0f, ANIMMODE_LOOP, 0 } };
|
||||
typedef enum {
|
||||
/* -1 */ DMSA_ANIM_NONE = -1,
|
||||
/* 0 */ DMSA_ANIM_T_POSE,
|
||||
/* 1 */ DMSA_ANIM_MAX
|
||||
} DmSaAnimation;
|
||||
|
||||
void func_80A2E960(SkelAnime* arg0, AnimationInfo* animations, u16 index) {
|
||||
f32 frameCount;
|
||||
static AnimationInfo sAnimationInfo[DMSA_ANIM_MAX] = {
|
||||
{ &gSkullKidTPoseAnim, 1.0f, 0, -1.0f, ANIMMODE_LOOP, 0 }, // DMSA_ANIM_T_POSE
|
||||
};
|
||||
|
||||
animations += index;
|
||||
if (animations->frameCount < 0.0f) {
|
||||
frameCount = Animation_GetLastFrame(animations->animation);
|
||||
void DmSa_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) {
|
||||
f32 endFrame;
|
||||
|
||||
animInfo += animIndex;
|
||||
|
||||
if (animInfo->frameCount < 0.0f) {
|
||||
endFrame = Animation_GetLastFrame(animInfo->animation);
|
||||
} else {
|
||||
frameCount = animations->frameCount;
|
||||
endFrame = animInfo->frameCount;
|
||||
}
|
||||
Animation_Change(arg0, animations->animation, animations->playSpeed, animations->startFrame, frameCount,
|
||||
animations->mode, animations->morphFrames);
|
||||
|
||||
Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame,
|
||||
animInfo->mode, animInfo->morphFrames);
|
||||
}
|
||||
|
||||
void DmSa_Init(Actor* thisx, PlayState* play) {
|
||||
@ -53,7 +63,7 @@ void DmSa_Init(Actor* thisx, PlayState* play) {
|
||||
this->actor.targetArrowOffset = 3000.0f;
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
|
||||
SkelAnime_InitFlex(play, &this->skelAnime, &gSkullKidSkel, NULL, NULL, NULL, 0);
|
||||
func_80A2E960(&this->skelAnime, sAnimationInfo, 0);
|
||||
DmSa_ChangeAnim(&this->skelAnime, &sAnimationInfo[DMSA_ANIM_T_POSE], 0);
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->actionFunc = DmSa_DoNothing;
|
||||
}
|
||||
|
@ -108,7 +108,8 @@ typedef enum {
|
||||
/* 68 */ SK_ANIM_LOOK_LEFT_START,
|
||||
/* 69 */ SK_ANIM_LOOK_LEFT_LOOP,
|
||||
/* 70 */ SK_ANIM_SNIFF,
|
||||
/* 71 */ SK_ANIM_LAUGH_AFTER_SNIFF
|
||||
/* 71 */ SK_ANIM_LAUGH_AFTER_SNIFF,
|
||||
/* 72 */ SK_ANIM_LAUGH_AFTER_MAX
|
||||
} SkullKidAnimation;
|
||||
|
||||
typedef enum {
|
||||
@ -219,79 +220,87 @@ static DamageTable sDamageTable = {
|
||||
/* Powder Keg */ DMG_ENTRY(1, 0xF),
|
||||
};
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &gSkullKidShakeHeadAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidWalkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidLookAroundAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidBentOverHeadTwitchAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidGlitchyHorseRideStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidRecliningFloatAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidCurseStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidCurseLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidLaughStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidLaughLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidHideOcarinaStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidHideOcarinaLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
static AnimationInfo sAnimationInfo[SK_ANIM_LAUGH_AFTER_MAX] = {
|
||||
{ &gSkullKidShakeHeadAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_SHAKE_HEAD
|
||||
{ &gSkullKidWalkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_WALK
|
||||
{ &gSkullKidLookAroundAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_LOOK_AROUND
|
||||
{ &gSkullKidIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_IDLE
|
||||
{ &gSkullKidIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_UNUSED_IDLE
|
||||
{ &gSkullKidBentOverHeadTwitchAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_BENT_OVER_HEAD_TWITCH
|
||||
{ &gSkullKidGlitchyHorseRideStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_GLITCHY_HORSE_RIDE_START
|
||||
{ &gSkullKidRecliningFloatAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_RECLINING_FLOAT
|
||||
{ &gSkullKidCurseStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_CURSE_START
|
||||
{ &gSkullKidCurseLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_CURSE_LOOP
|
||||
{ &gSkullKidLaughStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_LAUGH_START
|
||||
{ &gSkullKidLaughLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_LAUGH_LOOP
|
||||
{ &gSkullKidHideOcarinaStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_HIDE_OCARINA_START
|
||||
{ &gSkullKidHideOcarinaLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_HIDE_OCARINA_LOOP
|
||||
// SK_ANIM_PICK_UP_OCARINA_AND_START_PLAYING
|
||||
{ &gSkullKidPickUpOcarinaAndStartPlayingAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidPlayOcarinaAndLaughAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidPickUpOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidLookAtOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidKickOverLinkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidSearchLinkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidKickOverLinkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidSearchLinkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidHorseRideStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidHorseRideLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidRaiseMaskStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidRaiseMaskLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidLowerMaskAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidPlayOcarinaAndLaughAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_PLAY_OCARINA_AND_LAUGH
|
||||
{ &gSkullKidPickUpOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_PICK_UP_OCARINA
|
||||
{ &gSkullKidLookAtOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_LOOK_AT_OCARINA
|
||||
{ &gSkullKidKickOverLinkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_KICK_OVER_LINK
|
||||
{ &gSkullKidSearchLinkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_SEARCH_LINK
|
||||
{ &gSkullKidKickOverLinkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_UNUSED_KICK_OVER_LINK
|
||||
{ &gSkullKidSearchLinkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_UNUSED_SEARCH_LINK
|
||||
{ &gSkullKidHorseRideStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_HORSE_RIDE_START
|
||||
{ &gSkullKidHorseRideLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_HORSE_RIDE_LOOP
|
||||
{ &gSkullKidRaiseMaskStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_RAISE_MASK_START
|
||||
{ &gSkullKidRaiseMaskLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_RAISE_MASK_LOOP
|
||||
{ &gSkullKidLowerMaskAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_LOWER_MASK
|
||||
// SK_ANIM_JUMP_WHILE_HIDING_OCARINA
|
||||
{ &gSkullKidJumpWhileHidingOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidHorseRideAndRotateAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidHorseRideAndRotateAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_HORSE_RIDE_AND_ROTATE
|
||||
// SK_ANIM_PLAY_OCARINA_WHILE_FLOATING
|
||||
{ &gSkullKidPlayOcarinaWhileFloatingAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidFloatingTurnAroundAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidOcarinaJuggleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidCallDownMoonStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidCallDownMoonLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidSmackFairyStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidSmackFairyLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidHitByBubbleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidDropOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidFloatingArmsCrossedAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidDeflectAttackAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidTelescopeLookUpStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidTelescopeLookUpLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidSurpriseStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidSurpriseLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidFloatingTurnAroundAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_FLOATING_TURN_AROUND
|
||||
{ &gSkullKidOcarinaJuggleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_OCARINA_JUGGLE
|
||||
{ &gSkullKidCallDownMoonStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_CALL_DOWN_MOON_START
|
||||
{ &gSkullKidCallDownMoonLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_CALL_DOWN_MOON_LOOP
|
||||
{ &gSkullKidSmackFairyStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_SMACK_FAIRY_START
|
||||
{ &gSkullKidSmackFairyLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_SMACK_FAIRY_LOOP
|
||||
{ &gSkullKidHitByBubbleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_HIT_BY_BUBBLE
|
||||
{ &gSkullKidDropOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_DROP_OCARINA
|
||||
{ &gSkullKidFloatingArmsCrossedAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_FLOATING_ARMS_CROSSED
|
||||
{ &gSkullKidDeflectAttackAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_DEFLECT_ATTACK
|
||||
{ &gSkullKidTelescopeLookUpStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_TELESCOPE_LOOK_UP_START
|
||||
{ &gSkullKidTelescopeLookUpLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_TELESCOPE_LOOK_UP_LOOP
|
||||
{ &gSkullKidSurpriseStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_SURPRISE_START
|
||||
{ &gSkullKidSurpriseLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_SURPRISE_LOOP
|
||||
// SK_ANIM_LOOK_AROUND_FOR_GIANTS_START
|
||||
{ &gSkullKidLookAroundForGiantsStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
// SK_ANIM_LOOK_AROUND_FOR_GIANTS_LOOP
|
||||
{ &gSkullKidLookAroundForGiantsLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidHoldHeadAndShakeStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidHoldHeadAndShakeLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidHoldHeadAndShakeStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE,
|
||||
0.0f }, // SK_ANIM_HOLD_HEAD_AND_SHAKE_START
|
||||
{ &gSkullKidHoldHeadAndShakeLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_HOLD_HEAD_AND_SHAKE_LOOP
|
||||
// SK_ANIM_HOLD_HEAD_AND_SCREAM_START
|
||||
{ &gSkullKidHoldHeadAndScreamStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
// SK_ANIM_HOLD_HEAD_AND_SCREAM_LOOP
|
||||
{ &gSkullKidHoldHeadAndScreamLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidHuddleWithFairiesAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidSearchMaskSalesmanAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidHoldUpMaskStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidHoldUpMaskLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidShiverAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidDrawAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidBentOverLookUpAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidSpankAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidHipShakeAndJumpAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidPlayFluteAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidCartwheelAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidDangleFromMaskStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidDangleFromMaskStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidDangleFromMaskLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidDroppedFromMaskAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidLookUpAtGiantsAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidAshamedStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidAshamedLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidLookLeftStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidLookLeftLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidSniffAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidLaughAfterSniffAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSkullKidHuddleWithFairiesAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_HUDDLE_WITH_FAIRIES
|
||||
{ &gSkullKidSearchMaskSalesmanAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_SEARCH_MASK_SALESMAN
|
||||
{ &gSkullKidHoldUpMaskStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_HOLD_UP_MASK_START
|
||||
{ &gSkullKidHoldUpMaskLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_HOLD_UP_MASK_LOOP
|
||||
{ &gSkullKidShiverAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_SHIVER
|
||||
{ &gSkullKidDrawAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_DRAW
|
||||
{ &gSkullKidBentOverLookUpAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_BENT_OVER_LOOK_UP
|
||||
{ &gSkullKidSpankAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_SPANK
|
||||
{ &gSkullKidHipShakeAndJumpAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_HIP_SHAKE_AND_JUMP
|
||||
{ &gSkullKidPlayFluteAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_PLAY_FLUTE
|
||||
{ &gSkullKidCartwheelAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_CARTWHEEL
|
||||
{ &gSkullKidDangleFromMaskStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_LIE_FLAT
|
||||
{ &gSkullKidDangleFromMaskStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_DANGLE_FROM_MASK_START
|
||||
{ &gSkullKidDangleFromMaskLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_DANGLE_FROM_MASK_LOOP
|
||||
{ &gSkullKidDroppedFromMaskAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_DROPPED_FROM_MASK
|
||||
{ &gSkullKidLookUpAtGiantsAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_LOOK_UP_AT_GIANTS
|
||||
{ &gSkullKidAshamedStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_ASHAMED_START
|
||||
{ &gSkullKidAshamedLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_ASHAMED_LOOP
|
||||
{ &gSkullKidLookLeftStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_LOOK_LEFT_START
|
||||
{ &gSkullKidLookLeftLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_LOOK_LEFT_LOOP
|
||||
{ &gSkullKidSniffAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, 0.0f }, // SK_ANIM_SNIFF
|
||||
{ &gSkullKidLaughAfterSniffAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f }, // SK_ANIM_LAUGH_AFTER_SNIFF
|
||||
};
|
||||
|
||||
/**
|
||||
@ -315,19 +324,21 @@ void DmStk_LoadObjectForAnimation(DmStk* this, PlayState* play) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is always called with unusedExtraOffset = 0.
|
||||
*/
|
||||
void DmStk_ChangeAnim(DmStk* this, PlayState* play, SkelAnime* skelAnime, AnimationInfo* animationInfo,
|
||||
u16 unusedExtraOffset) {
|
||||
void DmStk_ChangeAnim(DmStk* this, PlayState* play, SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) {
|
||||
f32 endFrame;
|
||||
|
||||
DmStk_LoadObjectForAnimation(this, play);
|
||||
|
||||
animationInfo += unusedExtraOffset;
|
||||
animInfo += animIndex;
|
||||
|
||||
Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame,
|
||||
(animationInfo->frameCount < 0.0f) ? Animation_GetLastFrame(animationInfo->animation)
|
||||
: animationInfo->frameCount,
|
||||
animationInfo->mode, animationInfo->morphFrames);
|
||||
if (animInfo->frameCount < 0.0f) {
|
||||
endFrame = Animation_GetLastFrame(animInfo->animation);
|
||||
} else {
|
||||
endFrame = animInfo->frameCount;
|
||||
}
|
||||
|
||||
Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame,
|
||||
animInfo->mode, animInfo->morphFrames);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -418,6 +429,9 @@ void DmStk_PlaySfxForIntroCutsceneFirstPart(DmStk* this, PlayState* play) {
|
||||
case 2530:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_RIDE);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -461,6 +475,9 @@ void DmStk_PlaySfxForIntroCutsceneSecondPart(DmStk* this, PlayState* play) {
|
||||
case 173:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EN_STAL03_LAUGH_BIG);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -481,6 +498,9 @@ void DmStk_PlaySfxForObtainingMajorasMaskCutscene(DmStk* this, PlayState* play)
|
||||
case 142:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EN_EVIL_POWER);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -507,6 +527,9 @@ void DmStk_PlaySfxForCurseCutsceneFirstPart(DmStk* this, PlayState* play) {
|
||||
case 890:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EN_STAL21_PSYCHO_VOICE);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -554,9 +577,10 @@ void DmStk_PlaySfxForCurseCutsceneSecondPart(DmStk* this, PlayState* play) {
|
||||
case 217:
|
||||
Actor_PlaySfx(&player->actor, NA_SE_VO_DUMMY_136);
|
||||
break;
|
||||
}
|
||||
|
||||
if (player) {}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if ((play->csCtx.curFrame >= 263) && (play->csCtx.curFrame < 698)) {
|
||||
Actor_PlaySfx(&player->actor, NA_SE_EN_STALKIDS_BODY_LEV - SFX_FLAG);
|
||||
@ -592,6 +616,9 @@ void DmStk_PlaySfxForClockTowerIntroCutsceneVersion1(DmStk* this, PlayState* pla
|
||||
case 678:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_STRETCH);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if ((this->animIndex == SK_ANIM_OCARINA_JUGGLE) && (play->csCtx.curFrame < 700)) {
|
||||
@ -659,6 +686,9 @@ void DmStk_PlaySfxForPlayingWithFairiesCutscene(DmStk* this, PlayState* play) {
|
||||
case 230:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EN_STAL22_LAUGH_KID_L);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -676,6 +706,9 @@ void DmStk_PlaySfxForEndingCutsceneFirstPart(DmStk* this, PlayState* play) {
|
||||
case 660:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_SHAKEHEAD);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -731,6 +764,9 @@ void DmStk_PlaySfxForEndingCutsceneSecondPart(DmStk* this, PlayState* play) {
|
||||
AudioSfx_MuteBanks((1 << BANK_PLAYER) | (1 << BANK_ITEM) | (1 << BANK_ENV) | (1 << BANK_ENEMY) |
|
||||
(1 << BANK_SYSTEM) | (1 << BANK_OCARINA) | (1 << BANK_VOICE));
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (this->animIndex == SK_ANIM_SHAKE_HEAD) {
|
||||
@ -777,6 +813,9 @@ void DmStk_PlaySfxForClockTowerIntroCutsceneVersion2(DmStk* this, PlayState* pla
|
||||
case 388:
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_STRETCH);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (play->csCtx.curFrame >= 408) {
|
||||
@ -888,6 +927,9 @@ void DmStk_PlaySfxForMoonWarpCutsceneVersion1(DmStk* this, PlayState* play) {
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_ON);
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_ONGND);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -910,6 +952,9 @@ void DmStk_PlaySfxForMoonWarpCutsceneVersion2(DmStk* this, PlayState* play) {
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_MASK_ON);
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_ONGND);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -980,6 +1025,9 @@ void DmStk_PlaySfxForCutscenes(DmStk* this, PlayState* play) {
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1306,7 +1354,7 @@ void DmStk_ClockTower_WaitForDeflectionToEnd(DmStk* this, PlayState* play) {
|
||||
* Updates a variety of states based on Skull Kid's current cutscene, including his current
|
||||
* animation, his hand/mask type, his fade in/fade out state, and his current cutscene action.
|
||||
*/
|
||||
void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) {
|
||||
void DmStk_HandleCutscene(DmStk* this, PlayState* play) {
|
||||
s32 pad;
|
||||
s32 cueChannel;
|
||||
|
||||
@ -1676,6 +1724,9 @@ void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) {
|
||||
this->handType = SK_HAND_TYPE_DEFAULT;
|
||||
DmStk_ChangeAnim(this, play, &this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1781,7 +1832,7 @@ void DmStk_Update(Actor* thisx, PlayState* play) {
|
||||
DmStk_UpdateCollision(this, play);
|
||||
}
|
||||
|
||||
DmStk_UpdateCutscenes(this, play);
|
||||
DmStk_HandleCutscene(this, play);
|
||||
DmStk_PlaySfxForCutscenes(this, play);
|
||||
|
||||
// This handles the cutscene where the player takes out the Deku Pipes for the first time.
|
||||
@ -1809,6 +1860,9 @@ void DmStk_Update(Actor* thisx, PlayState* play) {
|
||||
this->dekuPipesCutsceneState = SK_DEKU_PIPES_CS_STATE_END;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// This code is responsible for making in-game time pass while using the telescope in the Astral Observatory.
|
||||
@ -1854,6 +1908,9 @@ s32 DmStk_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
|
||||
*dList = NULL;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (limbIndex == SKULL_KID_LIMB_HEAD) {
|
||||
*dList = NULL;
|
||||
@ -1924,6 +1981,9 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot
|
||||
Matrix_Pop();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
@ -1964,6 +2024,9 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, gSkullKidMajorasMask1DL);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
@ -2008,6 +2071,9 @@ void DmStk_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot
|
||||
gSPDisplayList(POLY_OPA_DISP++, gSkullKidOpenLeftHand);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
|
@ -15,7 +15,7 @@ void DmTag_Destroy(Actor* thisx, PlayState* play);
|
||||
void DmTag_Update(Actor* thisx, PlayState* play);
|
||||
|
||||
void func_80C229AC(DmTag* this, PlayState* play);
|
||||
void func_80C229EC(DmTag* this, PlayState* play);
|
||||
void DmTag_DoNothing(DmTag* this, PlayState* play);
|
||||
void func_80C229FC(DmTag* this, PlayState* play);
|
||||
|
||||
ActorInit Dm_Tag_InitVars = {
|
||||
@ -162,6 +162,9 @@ s32 func_80C224D8(DmTag* this, PlayState* play) {
|
||||
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK_SLOW;
|
||||
this->unk_1A4++;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@ -190,9 +193,13 @@ s32* func_80C22880(DmTag* this, PlayState* play) {
|
||||
return D_80C22BF0;
|
||||
}
|
||||
return D_80C22C30;
|
||||
|
||||
case 2:
|
||||
this->msgEventCallback = func_80C224D8;
|
||||
return D_80C22BFC;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@ -217,7 +224,7 @@ void func_80C229AC(DmTag* this, PlayState* play) {
|
||||
this->actor.flags |= ACTOR_FLAG_1;
|
||||
}
|
||||
|
||||
void func_80C229EC(DmTag* this, PlayState* play) {
|
||||
void DmTag_DoNothing(DmTag* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void func_80C229FC(DmTag* this, PlayState* play) {
|
||||
@ -241,7 +248,7 @@ void DmTag_Init(Actor* thisx, PlayState* play) {
|
||||
this->unk_18C = 0;
|
||||
SubS_UpdateFlags(&this->unk_18C, 4, 7);
|
||||
this->actor.flags &= ~ACTOR_FLAG_1;
|
||||
this->actionFunc = func_80C229EC;
|
||||
this->actionFunc = DmTag_DoNothing;
|
||||
} else if (this->actor.room == 2) {
|
||||
Actor_Kill(&this->actor);
|
||||
} else {
|
||||
|
@ -29,16 +29,6 @@ ActorInit Dm_Zl_InitVars = {
|
||||
(ActorFunc)DmZl_Draw,
|
||||
};
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &gDmZl4FacingAwayHandsOverEmblemLoop, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
{ &gDmZl4TurningAround2Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f },
|
||||
{ &gDmZl4HandsOverEmblemLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
{ &gDmZl4GivingItemStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f },
|
||||
{ &gDmZl4GivingItemLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
{ &gDmZl4RaisingOcarinaToPlayAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f },
|
||||
{ &gDmZl4PlayingOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ ZELDA_ANIM_FACING_AWAY,
|
||||
/* 1 */ ZELDA_ANIM_TURNING_TOWARD_PLAYER,
|
||||
@ -50,6 +40,16 @@ typedef enum {
|
||||
/* 7 */ ZELDA_ANIM_MAX
|
||||
} DmZlAnimation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[ZELDA_ANIM_MAX] = {
|
||||
{ &gDmZl4FacingAwayHandsOverEmblemLoop, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // ZELDA_ANIM_FACING_AWAY
|
||||
{ &gDmZl4TurningAround2Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f }, // ZELDA_ANIM_TURNING_TOWARD_PLAYER
|
||||
{ &gDmZl4HandsOverEmblemLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // ZELDA_ANIM_FACING_PLAYER
|
||||
{ &gDmZl4GivingItemStartAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f }, // ZELDA_ANIM_GIVING_OCARINA_START
|
||||
{ &gDmZl4GivingItemLoopAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // ZELDA_ANIM_GIVING_OCARINA
|
||||
{ &gDmZl4RaisingOcarinaToPlayAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -10.0f }, // ZELDA_ANIM_PLAYING_OCARINA_START
|
||||
{ &gDmZl4PlayingOcarinaAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f }, // ZELDA_ANIM_PLAYING_OCARINA
|
||||
};
|
||||
|
||||
static TexturePtr sMouthTextures[] = {
|
||||
gZl4MouthNeutralTex,
|
||||
gZl4MouthOpenSmilingTex,
|
||||
@ -95,18 +95,19 @@ typedef enum {
|
||||
/* 6 */ ZELDA_EYE_STATE_CLOSED2
|
||||
} DmZlEyeStates;
|
||||
|
||||
/**
|
||||
* This function is always called with unusedExtraOffset = 0.
|
||||
*/
|
||||
void DmZl_ChangeAnimation(SkelAnime* skelAnime, AnimationInfo animationInfo[], u16 unusedExtraOffset) {
|
||||
void DmZl_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) {
|
||||
f32 endFrame;
|
||||
|
||||
animationInfo += unusedExtraOffset;
|
||||
endFrame = (animationInfo->frameCount < 0.0f) ? Animation_GetLastFrame(animationInfo->animation)
|
||||
: animationInfo->frameCount;
|
||||
animInfo += animIndex;
|
||||
|
||||
Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame, endFrame,
|
||||
animationInfo->mode, animationInfo->morphFrames);
|
||||
if (animInfo->frameCount < 0.0f) {
|
||||
endFrame = Animation_GetLastFrame(animInfo->animation);
|
||||
} else {
|
||||
endFrame = animInfo->frameCount;
|
||||
}
|
||||
|
||||
Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame,
|
||||
animInfo->mode, animInfo->morphFrames);
|
||||
}
|
||||
|
||||
void DmZl_Init(Actor* thisx, PlayState* play) {
|
||||
@ -119,7 +120,7 @@ void DmZl_Init(Actor* thisx, PlayState* play) {
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
|
||||
// these three set to NULL should mean they are dynamically allocated
|
||||
SkelAnime_InitFlex(play, &this->skelAnime, &gZl4Skeleton, NULL, NULL, NULL, 0);
|
||||
DmZl_ChangeAnimation(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
DmZl_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->actionFunc = DmZl_DoNothing;
|
||||
}
|
||||
@ -130,32 +131,36 @@ void DmZl_Destroy(Actor* thisx, PlayState* play) {
|
||||
void DmZl_DoNothing(DmZl* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void DmZl_UpdateCutscene(DmZl* this, PlayState* play) {
|
||||
s32 cueChannel; // reused as animIndex
|
||||
void DmZl_HandleCutscene(DmZl* this, PlayState* play) {
|
||||
s32 cueChannel;
|
||||
s32 animIndex;
|
||||
|
||||
if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_102)) {
|
||||
cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_102);
|
||||
if (play->csCtx.curFrame == play->csCtx.actorCues[cueChannel]->startFrame) {
|
||||
s16 nextAnimIndex = ZELDA_ANIM_FACING_AWAY;
|
||||
animIndex = ZELDA_ANIM_FACING_AWAY;
|
||||
|
||||
switch (play->csCtx.actorCues[cueChannel]->id) {
|
||||
default:
|
||||
case 1:
|
||||
break;
|
||||
|
||||
case 2:
|
||||
nextAnimIndex = ZELDA_ANIM_TURNING_TOWARD_PLAYER;
|
||||
animIndex = ZELDA_ANIM_TURNING_TOWARD_PLAYER;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
nextAnimIndex = ZELDA_ANIM_GIVING_OCARINA_START;
|
||||
animIndex = ZELDA_ANIM_GIVING_OCARINA_START;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
nextAnimIndex = ZELDA_ANIM_PLAYING_OCARINA_START;
|
||||
animIndex = ZELDA_ANIM_PLAYING_OCARINA_START;
|
||||
break;
|
||||
}
|
||||
|
||||
if (nextAnimIndex != this->animIndex) {
|
||||
this->animIndex = nextAnimIndex;
|
||||
DmZl_ChangeAnimation(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
if (this->animIndex != animIndex) {
|
||||
this->animIndex = animIndex;
|
||||
DmZl_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -163,13 +168,13 @@ void DmZl_UpdateCutscene(DmZl* this, PlayState* play) {
|
||||
}
|
||||
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
cueChannel = this->animIndex;
|
||||
animIndex = cueChannel = this->animIndex;
|
||||
|
||||
if ((cueChannel == ZELDA_ANIM_TURNING_TOWARD_PLAYER) || (cueChannel == ZELDA_ANIM_GIVING_OCARINA_START) ||
|
||||
(cueChannel == ZELDA_ANIM_PLAYING_OCARINA_START)) {
|
||||
if ((animIndex == ZELDA_ANIM_TURNING_TOWARD_PLAYER) || (animIndex == ZELDA_ANIM_GIVING_OCARINA_START) ||
|
||||
(animIndex == ZELDA_ANIM_PLAYING_OCARINA_START)) {
|
||||
// these animations don't loop at the end, they lead into the next animation
|
||||
this->animIndex++;
|
||||
DmZl_ChangeAnimation(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
DmZl_ChangeAnim(&this->skelAnime, &sAnimationInfo[this->animIndex], 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -256,7 +261,7 @@ void DmZl_Update(Actor* thisx, PlayState* play) {
|
||||
|
||||
DmZl_UpdateFace(this);
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
DmZl_UpdateCutscene(this, play);
|
||||
DmZl_HandleCutscene(this, play);
|
||||
this->actionFunc(this, play);
|
||||
}
|
||||
|
||||
|
@ -10113,7 +10113,7 @@
|
||||
0x80A2E838:("DmRavine_DoNothing",),
|
||||
0x80A2E848:("DmRavine_Update",),
|
||||
0x80A2E8F4:("DmRavine_Draw",),
|
||||
0x80A2E960:("func_80A2E960",),
|
||||
0x80A2E960:("DmSa_ChangeAnim",),
|
||||
0x80A2E9FC:("DmSa_Init",),
|
||||
0x80A2EAAC:("DmSa_Destroy",),
|
||||
0x80A2EABC:("DmSa_DoNothing",),
|
||||
@ -10244,11 +10244,11 @@
|
||||
0x80A37EE0:("ObjShutter_Destroy",),
|
||||
0x80A37EF0:("ObjShutter_Update",),
|
||||
0x80A3803C:("ObjShutter_Draw",),
|
||||
0x80A38190:("DmZl_ChangeAnimation",),
|
||||
0x80A38190:("DmZl_ChangeAnim",),
|
||||
0x80A3822C:("DmZl_Init",),
|
||||
0x80A382EC:("DmZl_Destroy",),
|
||||
0x80A382FC:("DmZl_DoNothing",),
|
||||
0x80A3830C:("DmZl_UpdateCutscene",),
|
||||
0x80A3830C:("DmZl_HandleCutscene",),
|
||||
0x80A38468:("DmZl_UpdateFace",),
|
||||
0x80A385D4:("DmZl_Update",),
|
||||
0x80A3862C:("DmZl_OverrideLimbDraw",),
|
||||
@ -11497,7 +11497,7 @@
|
||||
0x80AA1AF8:("DmStk_ClockTower_AdjustHeightAndRotation",),
|
||||
0x80AA1B9C:("DmStk_ClockTower_DeflectHit",),
|
||||
0x80AA1C64:("DmStk_ClockTower_WaitForDeflectionToEnd",),
|
||||
0x80AA1D1C:("DmStk_UpdateCutscenes",),
|
||||
0x80AA1D1C:("DmStk_HandleCutscene",),
|
||||
0x80AA26CC:("DmStk_UpdateCollision",),
|
||||
0x80AA2720:("DmStk_ClockTower_IdleWithOcarina",),
|
||||
0x80AA27EC:("DmStk_ClockTower_Idle",),
|
||||
@ -11506,7 +11506,7 @@
|
||||
0x80AA2BC0:("DmStk_PostLimbDraw2",),
|
||||
0x80AA33A4:("DmStk_PostLimbDraw",),
|
||||
0x80AA33CC:("DmStk_Draw",),
|
||||
0x80AA5580:("func_80AA5580",),
|
||||
0x80AA5580:("DmChar00_ChangeAnim",),
|
||||
0x80AA561C:("func_80AA561C",),
|
||||
0x80AA5720:("func_80AA5720",),
|
||||
0x80AA575C:("func_80AA575C",),
|
||||
@ -11526,7 +11526,7 @@
|
||||
0x80AA5EBC:("func_80AA5EBC",),
|
||||
0x80AA6178:("DmChar00_Init",),
|
||||
0x80AA62EC:("DmChar00_Destroy",),
|
||||
0x80AA62FC:("func_80AA62FC",),
|
||||
0x80AA62FC:("DmChar00_HandleCutscene",),
|
||||
0x80AA67F8:("func_80AA67F8",),
|
||||
0x80AA695C:("func_80AA695C",),
|
||||
0x80AA6A04:("DmChar00_Update",),
|
||||
@ -11552,7 +11552,7 @@
|
||||
0x80AAAF2C:("DmChar02_PlaySfxForCutscenes",),
|
||||
0x80AAAF78:("DmChar02_Init",),
|
||||
0x80AAB03C:("DmChar02_Destroy",),
|
||||
0x80AAB04C:("DmChar02_PerformCutsceneActions",),
|
||||
0x80AAB04C:("DmChar02_HandleCutscene",),
|
||||
0x80AAB19C:("DmChar02_Update",),
|
||||
0x80AAB23C:("DmChar02_OverrideLimbDraw",),
|
||||
0x80AAB258:("DmChar02_PostLimbDraw",),
|
||||
@ -11575,11 +11575,11 @@
|
||||
0x80AABC40:("DmChar04_ChangeAnim",),
|
||||
0x80AABCDC:("DmChar04_Init",),
|
||||
0x80AABE24:("DmChar04_Destroy",),
|
||||
0x80AABE34:("func_80AABE34",),
|
||||
0x80AABE34:("DmChar04_HandleCutscene",),
|
||||
0x80AABF28:("DmChar04_Update",),
|
||||
0x80AABF74:("DmChar04_OverrideLimbDraw",),
|
||||
0x80AAC03C:("DmChar04_Draw",),
|
||||
0x80AAC5A0:("func_80AAC5A0",),
|
||||
0x80AAC5A0:("DmChar05_ChangeAnim",),
|
||||
0x80AAC63C:("func_80AAC63C",),
|
||||
0x80AAC6E4:("func_80AAC6E4",),
|
||||
0x80AAC770:("func_80AAC770",),
|
||||
@ -11620,7 +11620,7 @@
|
||||
0x80AAE680:("DmChar06_SetupAction",),
|
||||
0x80AAE68C:("DmChar06_Init",),
|
||||
0x80AAE6E0:("DmChar06_Destroy",),
|
||||
0x80AAE6F0:("func_80AAE6F0",),
|
||||
0x80AAE6F0:("DmChar06_HandleCutscene",),
|
||||
0x80AAE854:("DmChar06_Update",),
|
||||
0x80AAE878:("DmChar06_Draw",),
|
||||
0x80AAE9C0:("DmChar07_SetupAction",),
|
||||
@ -11645,8 +11645,8 @@
|
||||
0x80AAFBA4:("DmChar08_SpawnBubbles",),
|
||||
0x80AAFCCC:("func_80AAFCCC",),
|
||||
0x80AAFE78:("DmChar08_DoNothing",),
|
||||
0x80AAFE88:("func_80AAFE88",),
|
||||
0x80AB01E8:("func_80AB01E8",),
|
||||
0x80AAFE88:("DmChar08_HandleCutscene",),
|
||||
0x80AB01E8:("DmChar08_UpdateAnim",),
|
||||
0x80AB023C:("func_80AB023C",),
|
||||
0x80AB032C:("func_80AB032C",),
|
||||
0x80AB096C:("func_80AB096C",),
|
||||
@ -11662,7 +11662,7 @@
|
||||
0x80AB1FA0:("func_80AB1FA0",),
|
||||
0x80AB1FDC:("func_80AB1FDC",),
|
||||
0x80AB2258:("DmChar09_DoNothing",),
|
||||
0x80AB2268:("func_80AB2268",),
|
||||
0x80AB2268:("DmChar09_HandleCutscene",),
|
||||
0x80AB24BC:("func_80AB24BC",),
|
||||
0x80AB2544:("DmChar09_Update",),
|
||||
0x80AB25D8:("DmChar09_OverrideLimbDraw",),
|
||||
@ -16931,7 +16931,7 @@
|
||||
0x80C1BAC8:("EnFall2_Update",),
|
||||
0x80C1BAEC:("EnFall2_Draw",),
|
||||
0x80C1BD90:("DmAl_ChangeAnim",),
|
||||
0x80C1BDD8:("func_80C1BDD8",),
|
||||
0x80C1BDD8:("DmAl_HandleCutscene",),
|
||||
0x80C1BF08:("DmAl_Init",),
|
||||
0x80C1BFB8:("DmAl_Destroy",),
|
||||
0x80C1BFC8:("DmAl_Update",),
|
||||
@ -16939,36 +16939,36 @@
|
||||
0x80C1C064:("DmAl_PostLimbDraw",),
|
||||
0x80C1C11C:("DmAl_TransformLimbDraw",),
|
||||
0x80C1C130:("DmAl_Draw",),
|
||||
0x80C1C410:("func_80C1C410",),
|
||||
0x80C1C4D8:("func_80C1C4D8",),
|
||||
0x80C1C410:("DmAn_UpdateSkelAnime",),
|
||||
0x80C1C4D8:("DmAn_ChangeAnim",),
|
||||
0x80C1C5B4:("func_80C1C5B4",),
|
||||
0x80C1C62C:("func_80C1C62C",),
|
||||
0x80C1C83C:("func_80C1C83C",),
|
||||
0x80C1C8E8:("func_80C1C8E8",),
|
||||
0x80C1C958:("func_80C1C958",),
|
||||
0x80C1CAB0:("func_80C1CAB0",),
|
||||
0x80C1CC80:("func_80C1CC80",),
|
||||
0x80C1CAB0:("DmAn_HandleCutscene",),
|
||||
0x80C1CC80:("DmAn_DoNothing",),
|
||||
0x80C1CC90:("DmAn_Init",),
|
||||
0x80C1CCE4:("DmAn_Destroy",),
|
||||
0x80C1CCF4:("DmAn_Update",),
|
||||
0x80C1CD80:("func_80C1CD80",),
|
||||
0x80C1CEFC:("func_80C1CEFC",),
|
||||
0x80C1D0B0:("func_80C1D0B0",),
|
||||
0x80C1D410:("func_80C1D410",),
|
||||
0x80C1D410:("DmAh_ChangeAnim",),
|
||||
0x80C1D458:("func_80C1D458",),
|
||||
0x80C1D4D0:("func_80C1D4D0",),
|
||||
0x80C1D6E0:("func_80C1D6E0",),
|
||||
0x80C1D78C:("func_80C1D78C",),
|
||||
0x80C1D7FC:("func_80C1D7FC",),
|
||||
0x80C1D92C:("func_80C1D92C",),
|
||||
0x80C1D7FC:("DmAh_HandleCutscene",),
|
||||
0x80C1D92C:("DmAh_DoNothing",),
|
||||
0x80C1D93C:("DmAh_Init",),
|
||||
0x80C1DA48:("DmAh_Destroy",),
|
||||
0x80C1DA58:("DmAh_Update",),
|
||||
0x80C1DAD4:("DmAh_PostLimbDraw",),
|
||||
0x80C1DB24:("DmAh_TransformLimbDraw",),
|
||||
0x80C1DCD8:("DmAh_Draw",),
|
||||
0x80C1DED0:("func_80C1DED0",),
|
||||
0x80C1DF18:("func_80C1DF18",),
|
||||
0x80C1DED0:("DmNb_ChangeAnim",),
|
||||
0x80C1DF18:("DmNb_HandleCutscene",),
|
||||
0x80C1E048:("DmNb_Init",),
|
||||
0x80C1E0F8:("DmNb_Destroy",),
|
||||
0x80C1E108:("DmNb_Update",),
|
||||
@ -16992,7 +16992,7 @@
|
||||
0x80C1EAB4:("DmBal_Destroy",),
|
||||
0x80C1EAC4:("DmBal_SetupDoNothing",),
|
||||
0x80C1EAD8:("DmBal_DoNothing",),
|
||||
0x80C1EAE8:("func_80C1EAE8",),
|
||||
0x80C1EAE8:("DmBal_HandleCutscene",),
|
||||
0x80C1EC60:("func_80C1EC60",),
|
||||
0x80C1ED0C:("DmBal_UpdateEyes",),
|
||||
0x80C1ED64:("DmBal_SpawnPaper",),
|
||||
@ -17057,7 +17057,7 @@
|
||||
0x80C22880:("func_80C22880",),
|
||||
0x80C2291C:("func_80C2291C",),
|
||||
0x80C229AC:("func_80C229AC",),
|
||||
0x80C229EC:("func_80C229EC",),
|
||||
0x80C229EC:("DmTag_DoNothing",),
|
||||
0x80C229FC:("func_80C229FC",),
|
||||
0x80C22A40:("DmTag_Init",),
|
||||
0x80C22B30:("DmTag_Destroy",),
|
||||
@ -17100,15 +17100,15 @@
|
||||
0x80C23E44:("EnEndingHero6_Update",),
|
||||
0x80C23F14:("func_80C23F14",),
|
||||
0x80C23F6C:("EnEndingHero6_Draw",),
|
||||
0x80C24360:("func_80C24360",),
|
||||
0x80C24428:("func_80C24428",),
|
||||
0x80C24360:("DmGm_UpdateSkelAnime",),
|
||||
0x80C24428:("DmGm_ChangeAnim",),
|
||||
0x80C24504:("func_80C24504",),
|
||||
0x80C2457C:("func_80C2457C",),
|
||||
0x80C2478C:("func_80C2478C",),
|
||||
0x80C24838:("func_80C24838",),
|
||||
0x80C248A8:("func_80C248A8",),
|
||||
0x80C24A00:("func_80C24A00",),
|
||||
0x80C24BD0:("func_80C24BD0",),
|
||||
0x80C24A00:("DmGm_HandleCutscene",),
|
||||
0x80C24BD0:("DmGm_DoNothing",),
|
||||
0x80C24BE0:("DmGm_Init",),
|
||||
0x80C24C34:("DmGm_Destroy",),
|
||||
0x80C24C44:("DmGm_Update",),
|
||||
|
Loading…
x
Reference in New Issue
Block a user