diff --git a/include/functions.h b/include/functions.h index 55d59ec455..9a4decc25d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -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); diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 35dbc8361d..843b0eafd9 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -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); } /** diff --git a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c index ddd012426b..ec2de16adc 100644 --- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c +++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c @@ -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; } } diff --git a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h index b1e16f6e0e..733d656ea4 100644 --- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h +++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.h @@ -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 diff --git a/src/overlays/actors/ovl_Dm_Al/z_dm_al.c b/src/overlays/actors/ovl_Dm_Al/z_dm_al.c index a7e3e49938..ef6367ca2b 100644 --- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.c +++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.c @@ -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; } diff --git a/src/overlays/actors/ovl_Dm_Al/z_dm_al.h b/src/overlays/actors/ovl_Dm_Al/z_dm_al.h index 3c77ed6c38..084af062b2 100644 --- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.h +++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.h @@ -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 diff --git a/src/overlays/actors/ovl_Dm_An/z_dm_an.c b/src/overlays/actors/ovl_Dm_An/z_dm_an.c index 86d57660fa..9535a0b98c 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -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(); diff --git a/src/overlays/actors/ovl_Dm_An/z_dm_an.h b/src/overlays/actors/ovl_Dm_An/z_dm_an.h index 6908e9342e..c1e85d3eb1 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.h +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.h @@ -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 diff --git a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c index c6d93945b7..98d827868f 100644 --- a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c +++ b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c @@ -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); diff --git a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c index fe4a83a919..97d892f9e9 100644 --- a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c +++ b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c @@ -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); diff --git a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h index b4679647be..05c53dc8ff 100644 --- a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h +++ b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.h @@ -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 diff --git a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c index 231f76d6c7..23a045e0d3 100644 --- a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c +++ b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c @@ -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; diff --git a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c index cb71b85150..9f30d43438 100644 --- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c +++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c @@ -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); } } diff --git a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c index 3375b522d5..22a01491b4 100644 --- a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c +++ b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c @@ -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); } diff --git a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h index c3d809c63a..52e196da90 100644 --- a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h +++ b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.h @@ -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; diff --git a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c index e3dcec9114..192e040a90 100644 --- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c +++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c @@ -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; diff --git a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h index 84f7c3e3eb..62500ec9cb 100644 --- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h +++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h @@ -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; diff --git a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c index 591249c779..52d3c316d3 100644 --- a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c +++ b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c @@ -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); diff --git a/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c b/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c index c5c06958e1..2ad9f0c9b5 100644 --- a/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c +++ b/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c @@ -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); diff --git a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c index b5a19670dc..5d5009877b 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -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; } } diff --git a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h index 9fdbade434..22d23da904 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.h @@ -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; diff --git a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c index 587ca059dd..24362cd993 100644 --- a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c +++ b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c @@ -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); diff --git a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c index 139d80bc3f..2ebe67e4ce 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -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(); diff --git a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h index 8b6b3f652c..e54ee07eef 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.h @@ -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 diff --git a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c index 0eb622b494..327f258687 100644 --- a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c +++ b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c @@ -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) { diff --git a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h index 7bb7b39cde..560f1b2592 100644 --- a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h +++ b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.h @@ -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 diff --git a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c index 0f6334db36..b13fbd9d72 100644 --- a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c +++ b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.c @@ -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; } } diff --git a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c index 42a846357b..ca8f40aa5f 100644 --- a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c +++ b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.c @@ -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; } } diff --git a/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c b/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c index 83f635777f..945a47472c 100644 --- a/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c +++ b/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c @@ -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; } diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c index afb9796a9c..acfd72b767 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -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); diff --git a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c index 8ad4033662..584edd42ed 100644 --- a/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c +++ b/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.c @@ -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 { diff --git a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c index 30d1cb3ef5..a5c678647b 100644 --- a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c +++ b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c @@ -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); } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 557c278c7e..c9bdddf048 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -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",),