summaryrefslogtreecommitdiff
path: root/src/overlays/actors/ovl_En_Daiku2
diff options
context:
space:
mode:
authorengineer124 <47598039+engineer124@users.noreply.github.com>2023-08-15 14:23:33 +1000
committerGitHub <noreply@github.com>2023-08-15 14:23:33 +1000
commit0cceee6eba249ca3671a30e5eafe5bd0a7162bf3 (patch)
tree70c8fc635ef0dc6134d1144725952d5943c4a6df /src/overlays/actors/ovl_En_Daiku2
parent33ca9daecea3e052eee418371cc2e069d7babac7 (diff)
Animation Cleanup: En_C* and En_D* Actors (#1327)
* En_C cleanup * En_D * more cleanup * name enums * missed one * PR Review * remove padding
Diffstat (limited to 'src/overlays/actors/ovl_En_Daiku2')
-rw-r--r--src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c160
-rw-r--r--src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h9
2 files changed, 106 insertions, 63 deletions
diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c
index bdb959b64..b744dbbb0 100644
--- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c
+++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c
@@ -83,7 +83,7 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) {
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 40.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_002FA0, this->jointTable,
- this->morphTable, 17);
+ this->morphTable, OBJECT_DAIKU_LIMB_MAX);
this->actor.targetMode = 0;
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
this->unk_278 = ENDAIKU2_GET_7F(&this->actor);
@@ -120,25 +120,61 @@ void EnDaiku2_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void func_80BE6408(EnDaiku2* this, s32 arg1) {
- static AnimationHeader* sAnimations[] = {
- &object_daiku_Anim_002FA0, &object_daiku_Anim_00ACD0, &object_daiku_Anim_00C92C, &object_daiku_Anim_000C44,
- &object_daiku_Anim_00C234, &object_daiku_Anim_000600, &object_daiku_Anim_001114, &object_daiku_Anim_00B690,
- &object_daiku_Anim_001A24, &object_daiku_Anim_002134, &object_daiku_Anim_00D328,
- };
- static u8 D_80BE7958[] = {
- ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP,
- ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP,
- };
- f32 sp34 = 1.0f;
-
- this->unk_276 = arg1;
- this->unk_284 = Animation_GetLastFrame(sAnimations[this->unk_276]);
- if (this->unk_276 == 3) {
- sp34 = 2.0f;
+typedef enum {
+ /* -1 */ ENDAIKU2_ANIM_NONE = -1,
+ /* 0 */ ENDAIKU2_ANIM_0,
+ /* 1 */ ENDAIKU2_ANIM_1,
+ /* 2 */ ENDAIKU2_ANIM_2,
+ /* 3 */ ENDAIKU2_ANIM_3,
+ /* 4 */ ENDAIKU2_ANIM_4,
+ /* 5 */ ENDAIKU2_ANIM_5,
+ /* 6 */ ENDAIKU2_ANIM_6,
+ /* 7 */ ENDAIKU2_ANIM_7,
+ /* 8 */ ENDAIKU2_ANIM_8,
+ /* 9 */ ENDAIKU2_ANIM_9,
+ /* 10 */ ENDAIKU2_ANIM_10,
+ /* 11 */ ENDAIKU2_ANIM_MAX,
+ /* 11 */ ENDAIKU2_ANIM_11 = ENDAIKU2_ANIM_MAX // for object_daiku_Anim_002134 set external to `EnDaiku2_ChangeAnim`
+} EnDaiAnimation;
+
+static AnimationHeader* sAnimations[ENDAIKU2_ANIM_MAX] = {
+ &object_daiku_Anim_002FA0, // ENDAIKU2_ANIM_0
+ &object_daiku_Anim_00ACD0, // ENDAIKU2_ANIM_1
+ &object_daiku_Anim_00C92C, // ENDAIKU2_ANIM_2
+ &object_daiku_Anim_000C44, // ENDAIKU2_ANIM_3
+ &object_daiku_Anim_00C234, // ENDAIKU2_ANIM_4
+ &object_daiku_Anim_000600, // ENDAIKU2_ANIM_5
+ &object_daiku_Anim_001114, // ENDAIKU2_ANIM_6
+ &object_daiku_Anim_00B690, // ENDAIKU2_ANIM_7
+ &object_daiku_Anim_001A24, // ENDAIKU2_ANIM_8
+ &object_daiku_Anim_002134, // ENDAIKU2_ANIM_9
+ &object_daiku_Anim_00D328, // ENDAIKU2_ANIM_10
+};
+
+static u8 sAnimationModes[ENDAIKU2_ANIM_MAX] = {
+ ANIMMODE_LOOP, // ENDAIKU2_ANIM_0
+ ANIMMODE_LOOP, // ENDAIKU2_ANIM_1
+ ANIMMODE_LOOP, // ENDAIKU2_ANIM_2
+ ANIMMODE_LOOP, // ENDAIKU2_ANIM_3
+ ANIMMODE_ONCE, // ENDAIKU2_ANIM_4
+ ANIMMODE_LOOP, // ENDAIKU2_ANIM_5
+ ANIMMODE_LOOP, // ENDAIKU2_ANIM_6
+ ANIMMODE_LOOP, // ENDAIKU2_ANIM_7
+ ANIMMODE_LOOP, // ENDAIKU2_ANIM_8
+ ANIMMODE_ONCE, // ENDAIKU2_ANIM_9
+ ANIMMODE_LOOP, // ENDAIKU2_ANIM_10
+};
+
+void EnDaiku2_ChangeAnim(EnDaiku2* this, s32 animIndex) {
+ f32 playSpeed = 1.0f;
+
+ this->animIndex = animIndex;
+ this->animEndFrame = Animation_GetLastFrame(sAnimations[this->animIndex]);
+ if (this->animIndex == ENDAIKU2_ANIM_3) {
+ playSpeed = 2.0f;
}
- Animation_Change(&this->skelAnime, sAnimations[this->unk_276], sp34, 0.0f, this->unk_284, D_80BE7958[this->unk_276],
- -4.0f);
+ Animation_Change(&this->skelAnime, sAnimations[this->animIndex], playSpeed, 0.0f, this->animEndFrame,
+ sAnimationModes[this->animIndex], -4.0f);
}
s32 func_80BE64C0(EnDaiku2* this, PlayState* play) {
@@ -170,7 +206,7 @@ void func_80BE65B4(EnDaiku2* this, PlayState* play) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_64_02)) {
this->unk_28A = 6;
}
- func_80BE6408(this, 8);
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_8);
break;
case 1:
@@ -178,21 +214,24 @@ void func_80BE65B4(EnDaiku2* this, PlayState* play) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_64_04)) {
this->unk_28A = 7;
}
- func_80BE6408(this, 8);
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_8);
break;
case 2:
this->unk_28A = 4;
this->unk_264 = 1.0f;
- func_80BE6408(this, 10);
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10);
+ break;
+
+ default:
break;
}
this->unk_264 = 1.0f;
if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && Flags_GetSwitch(play, this->unk_278)) {
this->unk_28A = 5;
- if (this->unk_276 != 10) {
- func_80BE6408(this, 10);
+ if (this->animIndex != ENDAIKU2_ANIM_10) {
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10);
}
}
@@ -201,7 +240,7 @@ void func_80BE65B4(EnDaiku2* this, PlayState* play) {
}
void func_80BE66E4(EnDaiku2* this, PlayState* play) {
- f32 sp9C = this->skelAnime.curFrame;
+ f32 curFrame = this->skelAnime.curFrame;
s32 sp98 = gSaveContext.save.day - 1;
s32 i;
Vec3f sp88;
@@ -214,8 +253,8 @@ void func_80BE66E4(EnDaiku2* this, PlayState* play) {
if (sp98 != 2) {
if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && Flags_GetSwitch(play, this->unk_278)) {
this->unk_28A = 5;
- if (this->unk_276 != 10) {
- func_80BE6408(this, 10);
+ if (this->animIndex != ENDAIKU2_ANIM_10) {
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10);
}
}
}
@@ -233,7 +272,7 @@ void func_80BE66E4(EnDaiku2* this, PlayState* play) {
}
Actor_OfferTalk(&this->actor, play, 80.0f);
- if ((this->unk_276 == 8) && Animation_OnFrame(&this->skelAnime, 6.0f)) {
+ if ((this->animIndex == ENDAIKU2_ANIM_8) && Animation_OnFrame(&this->skelAnime, 6.0f)) {
Actor_PlaySfx(&this->actor, NA_SE_EV_ROCK_BROKEN);
for (i = 0; i < 10; i++) {
@@ -260,22 +299,22 @@ void func_80BE66E4(EnDaiku2* this, PlayState* play) {
temp_v0 = ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.home.rot.y));
if (temp_v0 > 0x2890) {
if (sp98 != 2) {
- if ((this->unk_276 == 5) || (this->unk_276 == 9)) {
- func_80BE6408(this, 10);
- } else if ((this->unk_276 == 10) && (this->unk_284 <= sp9C)) {
- this->unk_284 = Animation_GetLastFrame(&object_daiku_Anim_002134);
- Animation_Change(&this->skelAnime, &object_daiku_Anim_002134, -1.0f, this->unk_284, 0.0f, ANIMMODE_ONCE,
- -4.0f);
- this->unk_276 = 11;
- } else if ((this->unk_276 == 11) && (sp9C <= 0.0f)) {
- func_80BE6408(this, 8);
+ if ((this->animIndex == ENDAIKU2_ANIM_5) || (this->animIndex == ENDAIKU2_ANIM_9)) {
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10);
+ } else if ((this->animIndex == ENDAIKU2_ANIM_10) && (curFrame >= this->animEndFrame)) {
+ this->animEndFrame = Animation_GetLastFrame(&object_daiku_Anim_002134);
+ Animation_Change(&this->skelAnime, &object_daiku_Anim_002134, -1.0f, this->animEndFrame, 0.0f,
+ ANIMMODE_ONCE, -4.0f);
+ this->animIndex = ENDAIKU2_ANIM_11;
+ } else if ((this->animIndex == ENDAIKU2_ANIM_11) && (curFrame <= 0.0f)) {
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_8);
}
}
} else if (sp98 != 2) {
- if ((this->unk_276 != 9) && (this->unk_276 != 10)) {
- func_80BE6408(this, 9);
- } else if ((this->unk_276 == 9) && (this->unk_284 <= sp9C)) {
- func_80BE6408(this, 10);
+ if ((this->animIndex != ENDAIKU2_ANIM_9) && (this->animIndex != ENDAIKU2_ANIM_10)) {
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_9);
+ } else if ((this->animIndex == ENDAIKU2_ANIM_9) && (curFrame >= this->animEndFrame)) {
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10);
}
}
}
@@ -287,7 +326,7 @@ void func_80BE6B40(EnDaiku2* this, PlayState* play) {
if ((day != 3) && Flags_GetSwitch(play, this->unk_278)) {
this->actionFunc = func_80BE6BC0;
} else {
- func_80BE6408(this, 5);
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_5);
this->actionFunc = func_80BE6BC0;
}
}
@@ -315,6 +354,9 @@ void func_80BE6BC0(EnDaiku2* this, PlayState* play) {
case 1:
SET_WEEKEVENTREG(WEEKEVENTREG_64_04);
break;
+
+ default:
+ break;
}
func_80BE65B4(this, play);
}
@@ -322,7 +364,7 @@ void func_80BE6BC0(EnDaiku2* this, PlayState* play) {
}
void func_80BE6CFC(EnDaiku2* this) {
- func_80BE6408(this, 3);
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_3);
this->unk_288 = 2;
this->actionFunc = func_80BE6D40;
this->unk_264 = 0.0f;
@@ -354,14 +396,14 @@ void func_80BE6D40(EnDaiku2* this, PlayState* play) {
}
void func_80BE6EB0(EnDaiku2* this) {
- func_80BE6408(this, 2);
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_2);
this->unk_274 = 0;
this->unk_288 = 3;
this->actionFunc = func_80BE6EF0;
}
void func_80BE6EF0(EnDaiku2* this, PlayState* play) {
- f32 sp5C = this->skelAnime.curFrame;
+ f32 curFrame = this->skelAnime.curFrame;
s32 pad[4];
Vec3f sp40;
s16 var;
@@ -372,7 +414,7 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) {
}
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.home.rot.y, 1, 0xBB8, 0x0);
- if (this->unk_284 <= sp5C) {
+ if (curFrame >= this->animEndFrame) {
this->unk_274 = 1;
}
@@ -387,14 +429,14 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) {
4.0f) &&
(this->path != NULL)) {
if (!func_80BE64C0(this, play)) {
- if (this->unk_276 != 3) {
- func_80BE6408(this, 3);
+ if (this->animIndex != ENDAIKU2_ANIM_3) {
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_3);
}
if ((this->unk_278 >= ENDAIKU2_GET_7F_0) && Flags_GetSwitch(play, this->unk_278)) {
this->unk_28A = 5;
- if (this->unk_276 != 10) {
- func_80BE6408(this, 10);
+ if (this->animIndex != ENDAIKU2_ANIM_10) {
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_10);
}
func_80BE65B4(this, play);
return;
@@ -425,20 +467,20 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) {
}
void func_80BE71A0(EnDaiku2* this) {
- func_80BE6408(this, 9);
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_9);
this->actionFunc = func_80BE71D8;
}
void func_80BE71D8(EnDaiku2* this, PlayState* play) {
- f32 currentFrame = this->skelAnime.curFrame;
+ f32 curFrame = this->skelAnime.curFrame;
if (func_80BE64C0(this, play)) {
func_80BE6CFC(this);
- } else if ((this->unk_276 == 9) && (this->unk_284 <= currentFrame)) {
- func_80BE6408(this, 0);
- } else if ((this->unk_276 == 0) && (this->unk_284 <= currentFrame)) {
- func_80BE6408(this, 5);
- } else if ((this->unk_276 == 5) && (this->unk_284 <= currentFrame)) {
+ } else if ((this->animIndex == ENDAIKU2_ANIM_9) && (curFrame >= this->animEndFrame)) {
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_0);
+ } else if ((this->animIndex == ENDAIKU2_ANIM_0) && (curFrame >= this->animEndFrame)) {
+ EnDaiku2_ChangeAnim(this, ENDAIKU2_ANIM_5);
+ } else if ((this->animIndex == ENDAIKU2_ANIM_5) && (curFrame >= this->animEndFrame)) {
func_80BE65B4(this, play);
}
}
@@ -468,13 +510,13 @@ void EnDaiku2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r
Gfx_SetupDL25_Opa(play->state.gfxCtx);
- if (limbIndex == 14) {
+ if (limbIndex == OBJECT_DAIKU_LIMB_0E) {
Matrix_Scale(this->unk_260, this->unk_260, this->unk_260, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, object_daiku_DL_009638);
}
- if (limbIndex == 15) {
+ if (limbIndex == OBJECT_DAIKU_LIMB_0F) {
gSPDisplayList(POLY_OPA_DISP++, object_daiku_DL_00A390);
}
diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h
index 58fc26b9a..51cd23124 100644
--- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h
+++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h
@@ -2,6 +2,7 @@
#define Z_EN_DAIKU2_H
#include "global.h"
+#include "objects/object_daiku/object_daiku.h"
struct EnDaiku2;
@@ -34,8 +35,8 @@ typedef struct EnDaiku2Effect {
typedef struct EnDaiku2 {
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
- /* 0x188 */ Vec3s jointTable[17];
- /* 0x1EE */ Vec3s morphTable[17];
+ /* 0x188 */ Vec3s jointTable[OBJECT_DAIKU_LIMB_MAX];
+ /* 0x1EE */ Vec3s morphTable[OBJECT_DAIKU_LIMB_MAX];
/* 0x254 */ EnDaiku2ActionFunc actionFunc;
/* 0x258 */ Path* path;
/* 0x25C */ s16 unk_25C;
@@ -43,12 +44,12 @@ typedef struct EnDaiku2 {
/* 0x264 */ f32 unk_264;
/* 0x268 */ Vec3f unk_268;
/* 0x274 */ s16 unk_274;
- /* 0x276 */ s16 unk_276;
+ /* 0x276 */ s16 animIndex;
/* 0x278 */ s16 unk_278;
/* 0x27A */ s16 pathIndex;
/* 0x27C */ UNK_TYPE1 unk_27C[0x4];
/* 0x280 */ s32 unk_280;
- /* 0x284 */ f32 unk_284;
+ /* 0x284 */ f32 animEndFrame;
/* 0x288 */ s16 unk_288;
/* 0x28A */ s16 unk_28A;
/* 0x28C */ EnDaiku2Effect effects[EN_DAIKU2_EFFECT_COUNT];