diff --git a/include/z_en_hy_code.h b/include/z_en_hy_code.h index 192e9183c8..2b5d46d578 100644 --- a/include/z_en_hy_code.h +++ b/include/z_en_hy_code.h @@ -30,6 +30,7 @@ typedef enum EnHyLimb { //! TODO: Better animaion enum names when animations are documented typedef enum { + /* -1 */ ENHY_ANIM_NONE = -1, /* 0 */ ENHY_ANIM_AOB_0, /* 1 */ ENHY_ANIM_BOJ_1, /* 2 */ ENHY_ANIM_BOJ_2, diff --git a/src/code/z_en_hy_code.c b/src/code/z_en_hy_code.c index d59d31000e..02666fc4cf 100644 --- a/src/code/z_en_hy_code.c +++ b/src/code/z_en_hy_code.c @@ -11,28 +11,28 @@ #include "objects/object_boj/object_boj.h" #include "objects/object_os_anime/object_os_anime.h" -static AnimationInfoS sAnimationInfo[] = { - { &gMamamuYanUnusedIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_boj_Anim_001494, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_boj_Anim_001494, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, - { &object_boj_Anim_001908, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_boj_Anim_001908, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, - { &object_boj_Anim_0008C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gBbaIdleHoldingBagAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_bji_Anim_000FDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_bji_Anim_000AB0, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, - { &object_bji_Anim_00066C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_boj_Anim_00071C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_os_anime_Anim_001EE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_boj_Anim_00DED8, 1.5f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_boj_Anim_00F920, 1.5f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_boj_Anim_00FC1C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_boj_Anim_00FEE4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_boj_Anim_010330, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_boj_Anim_00FC1C, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, - { &object_boj_Anim_00FEE4, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, - { &object_boj_Anim_010330, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, - { &object_boj_Anim_005D9C, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, +static AnimationInfoS sAnimationInfo[ENHY_ANIM_MAX] = { + { &gMamamuYanUnusedIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_AOB_0 + { &object_boj_Anim_001494, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_1 + { &object_boj_Anim_001494, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_2 + { &object_boj_Anim_001908, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_3 + { &object_boj_Anim_001908, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_4 + { &object_boj_Anim_0008C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_5 + { &gBbaIdleHoldingBagAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BBA_6 + { &object_bji_Anim_000FDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BJI_7 + { &object_bji_Anim_000AB0, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BJI_8 + { &object_bji_Anim_00066C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BJI_9 + { &object_boj_Anim_00071C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_10 + { &object_os_anime_Anim_001EE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_OS_ANIME_11 + { &object_boj_Anim_00DED8, 1.5f, 0, -1, ANIMMODE_ONCE, 0 }, // ENHY_ANIM_BOJ_12 + { &object_boj_Anim_00F920, 1.5f, 0, -1, ANIMMODE_ONCE, 0 }, // ENHY_ANIM_BOJ_13 + { &object_boj_Anim_00FC1C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_14 + { &object_boj_Anim_00FEE4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_15 + { &object_boj_Anim_010330, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_16 + { &object_boj_Anim_00FC1C, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_17 + { &object_boj_Anim_00FEE4, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_18 + { &object_boj_Anim_010330, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_19 + { &object_boj_Anim_005D9C, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_20 }; s8 gEnHyLimbToBodyParts[ENHY_LIMB_MAX] = { @@ -91,20 +91,20 @@ u8 gEnHyShadowSizes[ENHY_BODYPART_MAX] = { }; s32 EnHy_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) { - s16 frameCount; - s32 isChanged = false; + s16 endFrame; + s32 didAnimChange = false; - if (animIndex >= ENHY_ANIM_AOB_0 && animIndex < ENHY_ANIM_MAX) { - isChanged = true; - frameCount = sAnimationInfo[animIndex].frameCount; - if (frameCount < 0) { - frameCount = Animation_GetLastFrame(&sAnimationInfo[animIndex].animation->common); + if ((animIndex > ENHY_ANIM_NONE) && (animIndex < ENHY_ANIM_MAX)) { + didAnimChange = true; + endFrame = sAnimationInfo[animIndex].frameCount; + if (endFrame < 0) { + endFrame = Animation_GetLastFrame(&sAnimationInfo[animIndex].animation->common); } Animation_Change(skelAnime, sAnimationInfo[animIndex].animation, sAnimationInfo[animIndex].playSpeed, - sAnimationInfo[animIndex].startFrame, frameCount, sAnimationInfo[animIndex].mode, + sAnimationInfo[animIndex].startFrame, endFrame, sAnimationInfo[animIndex].mode, sAnimationInfo[animIndex].morphFrames); } - return isChanged; + return didAnimChange; } EnDoor* EnHy_FindNearestDoor(Actor* actor, PlayState* play) { 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 a3b8bc1a29..80d1bef15d 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -26,11 +26,6 @@ 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 DmChar08_HandleCutscene(DmChar08* this, PlayState* play); -void func_80AB023C(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); typedef enum { /* 0 */ TURTLE_EYEMODE_BLINK_LEFT, @@ -415,6 +410,9 @@ void func_80AAFCCC(DmChar08* this, PlayState* play) { this->unk_206 = 0; } break; + + default: + break; } } else { switch (this->unk_206) { @@ -433,6 +431,9 @@ void func_80AAFCCC(DmChar08* this, PlayState* play) { this->unk_206 = 0; } break; + + default: + break; } } return; @@ -453,8 +454,14 @@ void func_80AAFCCC(DmChar08* this, PlayState* play) { this->unk_206 = 0; } break; + + default: + break; } break; + + default: + break; } } diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index b6f8198c1c..c6e0e4269b 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -307,7 +307,7 @@ s32 func_808A0E28(DoorShutter* this, PlayState* play) { } } } - return false; + return 0; } void func_808A0F88(DoorShutter* this, PlayState* play) { @@ -328,7 +328,7 @@ void func_808A0F88(DoorShutter* this, PlayState* play) { } else { CutsceneManager_Queue(this->csId); } - } else if (func_808A0E28(this, play)) { + } else if (func_808A0E28(this, play) != 0) { Player* player = GET_PLAYER(play); player->doorType = PLAYER_DOORTYPE_TALKING; @@ -483,7 +483,7 @@ void func_808A1548(DoorShutter* this, PlayState* play) { } else { CutsceneManager_Queue(this->csId); } - } else if (func_808A0E28(this, play)) { + } else if (func_808A0E28(this, play) != 0) { Player* player = GET_PLAYER(play); player->doorType = PLAYER_DOORTYPE_TALKING; diff --git a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c index 407c6ea668..ad92104980 100644 --- a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c +++ b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c @@ -195,6 +195,9 @@ void EnCne01_Talk(EnHy* this, PlayState* play) { this->actionFunc = this->prevActionFunc; this->prevActionFunc = NULL; break; + + default: + break; } } diff --git a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c index 1f096bdf59..5b7b74db10 100644 --- a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c +++ b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c @@ -60,9 +60,6 @@ ActorInit En_Col_Man_InitVars = { (ActorFunc)NULL, }; -static Color_RGBA8 primColor = { 60, 50, 20, 255 }; -static Color_RGBA8 envColor = { 40, 30, 30, 255 }; - void EnColMan_Init(Actor* thisx, PlayState* play) { EnColMan* this = THIS; @@ -77,10 +74,12 @@ void EnColMan_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 10.0f); func_80AFDD60(this); break; + case EN_COL_MAN_FALLING_ROCK: ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 10.0f); func_80AFDF60(this); break; + case EN_COL_MAN_CUTSCENE_BOMB: case EN_COL_MAN_GAMEPLAY_BOMB: func_80AFE234(this); @@ -156,6 +155,8 @@ void func_80AFDF60(EnColMan* this) { } void func_80AFDFB4(EnColMan* this, PlayState* play) { + static Color_RGBA8 sPrimColor = { 60, 50, 20, 255 }; + static Color_RGBA8 sEnvColor = { 40, 30, 30, 255 }; s32 i; Vec3f velocity; Vec3f accel; @@ -180,7 +181,7 @@ void func_80AFDFB4(EnColMan* this, PlayState* play) { accel.z = 0.0f; accel.x = 0.0f; - func_800B0EB0(play, &this->actor.world.pos, &velocity, &accel, &primColor, &envColor, + func_800B0EB0(play, &this->actor.world.pos, &velocity, &accel, &sPrimColor, &sEnvColor, Rand_ZeroFloat(50.0f) + 60.0f, 30, Rand_ZeroFloat(5.0f) + 20.0f); } diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.c b/src/overlays/actors/ovl_En_Cow/z_en_cow.c index feb0a8e549..6d72a49fa1 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -127,13 +127,14 @@ void EnCow_Init(Actor* thisx, PlayState* play) { this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, EN_COW_TYPE_TAIL); - this->animationTimer = Rand_ZeroFloat(1000.0f) + 40.0f; - this->animationCycle = 0; + this->animTimer = Rand_ZeroFloat(1000.0f) + 40.0f; + this->animCycle = 0; this->actor.targetMode = 6; gHorsePlayedEponasSong = false; func_801A5080(4); break; + case EN_COW_TYPE_TAIL: SkelAnime_InitFlex(play, &this->skelAnime, &gCowTailSkel, NULL, this->jointTable, this->morphTable, COW_TAIL_LIMB_MAX); @@ -146,7 +147,10 @@ void EnCow_Init(Actor* thisx, PlayState* play) { EnCow_SetTailPos(this); this->actor.flags &= ~ACTOR_FLAG_1; - this->animationTimer = Rand_ZeroFloat(1000.0f) + 40.0f; + this->animTimer = Rand_ZeroFloat(1000.0f) + 40.0f; + break; + + default: break; } @@ -167,10 +171,10 @@ void EnCow_Destroy(Actor* thisx, PlayState* play) { } void EnCow_UpdateAnimation(EnCow* this, PlayState* play) { - if (this->animationTimer > 0) { - this->animationTimer--; + if (this->animTimer > 0) { + this->animTimer--; } else { - this->animationTimer = Rand_ZeroFloat(500.0f) + 40.0f; + this->animTimer = Rand_ZeroFloat(500.0f) + 40.0f; Animation_Change(&this->skelAnime, &gCowChewAnim, 1.0f, this->skelAnime.curFrame, Animation_GetLastFrame(&gCowChewAnim), ANIMMODE_ONCE, 1.0f); } @@ -178,23 +182,23 @@ void EnCow_UpdateAnimation(EnCow* this, PlayState* play) { if (!(this->flags & EN_COW_FLAG_PLAYER_HAS_APPROACHED)) { this->flags |= EN_COW_FLAG_PLAYER_HAS_APPROACHED; if (this->skelAnime.animation == &gCowChewAnim) { - this->animationTimer = 0; + this->animTimer = 0; } } } - this->animationCycle++; - if (this->animationCycle > 0x30) { - this->animationCycle = 0; + this->animCycle++; + if (this->animCycle > 0x30) { + this->animCycle = 0; } - if (this->animationCycle < 0x20) { - this->actor.scale.x = ((Math_SinS(this->animationCycle * 0x400) * (1.0f / 100.0f)) + 1.0f) * 0.01f; + if (this->animCycle < 0x20) { + this->actor.scale.x = ((Math_SinS(this->animCycle * 0x400) * (1.0f / 100.0f)) + 1.0f) * 0.01f; } else { this->actor.scale.x = 0.01f; } - if (this->animationCycle > 0x10) { - this->actor.scale.y = ((Math_SinS((this->animationCycle * 0x400) - 0x4000) * (1.0f / 100.0f)) + 1.0f) * 0.01f; + if (this->animCycle > 0x10) { + this->actor.scale.y = ((Math_SinS((this->animCycle * 0x400) - 0x4000) * (1.0f / 100.0f)) + 1.0f) * 0.01f; } else { this->actor.scale.y = 0.01f; } @@ -310,10 +314,10 @@ void EnCow_Idle(EnCow* this, PlayState* play) { } void EnCow_DoTail(EnCow* this, PlayState* play) { - if (this->animationTimer > 0) { - this->animationTimer--; + if (this->animTimer > 0) { + this->animTimer--; } else { - this->animationTimer = Rand_ZeroFloat(200.0f) + 40.0f; + this->animTimer = Rand_ZeroFloat(200.0f) + 40.0f; Animation_Change(&this->skelAnime, &gCowTailIdleAnim, 1.0f, this->skelAnime.curFrame, Animation_GetLastFrame(&gCowTailIdleAnim), ANIMMODE_ONCE, 1.0f); } @@ -323,7 +327,7 @@ void EnCow_DoTail(EnCow* this, PlayState* play) { if (!(this->flags & EN_COW_FLAG_PLAYER_HAS_APPROACHED)) { this->flags |= EN_COW_FLAG_PLAYER_HAS_APPROACHED; if (this->skelAnime.animation == &gCowTailIdleAnim) { - this->animationTimer = 0; + this->animTimer = 0; } } } diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.h b/src/overlays/actors/ovl_En_Cow/z_en_cow.h index 200ec5bec1..b4a88a6fcd 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.h +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.h @@ -27,8 +27,8 @@ typedef struct EnCow { /* 0x0244 */ Vec3s morphTable[COW_LIMB_MAX]; /* 0x0268 */ Vec3s headTilt; /* 0x026E */ u16 flags; - /* 0x0270 */ u16 animationTimer; - /* 0x0272 */ u16 animationCycle; + /* 0x0270 */ u16 animTimer; + /* 0x0272 */ u16 animCycle; /* 0x0274 */ EnCowActionFunc actionFunc; } EnCow; // size = 0x278 diff --git a/src/overlays/actors/ovl_En_Crow/z_en_crow.c b/src/overlays/actors/ovl_En_Crow/z_en_crow.c index 021c55631d..1cd89043e8 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -159,11 +159,11 @@ void EnCrow_SetupFlyIdle(EnCrow* this) { void EnCrow_FlyIdle(EnCrow* this, PlayState* play) { Player* player = GET_PLAYER(play); f32 dist; - s32 onInitialAnimFrame; + s32 onAnimFirstFrame; s16 yaw; SkelAnime_Update(&this->skelAnime); - onInitialAnimFrame = Animation_OnFrame(&this->skelAnime, 0.0f); + onAnimFirstFrame = Animation_OnFrame(&this->skelAnime, 0.0f); this->actor.speed = (Rand_ZeroOne() * 1.5f) + 3.0f; if ((this->actor.parent != NULL) && (this->actor.parent->home.rot.z == 0)) { @@ -181,7 +181,7 @@ void EnCrow_FlyIdle(EnCrow* this, PlayState* play) { this->yawTarget = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); } - if ((Math_SmoothStepToS(&this->actor.shape.rot.y, this->yawTarget, 5, 0x300, 0x10) == 0) && onInitialAnimFrame && + if ((Math_SmoothStepToS(&this->actor.shape.rot.y, this->yawTarget, 5, 0x300, 0x10) == 0) && onAnimFirstFrame && (Rand_ZeroOne() < 0.1f)) { yaw = (Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos) - this->actor.shape.rot.y); @@ -201,7 +201,7 @@ void EnCrow_FlyIdle(EnCrow* this, PlayState* play) { this->pitchTarget = Rand_S16Offset(0x800, 0x800); } - if ((Math_SmoothStepToS(&this->actor.shape.rot.x, this->pitchTarget, 0xA, 0x100, 8) == 0) && onInitialAnimFrame && + if (!Math_SmoothStepToS(&this->actor.shape.rot.x, this->pitchTarget, 0xA, 0x100, 8) && onAnimFirstFrame && (Rand_ZeroOne() < 0.1f)) { if (this->actor.home.pos.y < this->actor.world.pos.y) { this->pitchTarget -= Rand_S16Offset(0x400, 0x400); diff --git a/src/overlays/actors/ovl_En_Dai/z_en_dai.c b/src/overlays/actors/ovl_En_Dai/z_en_dai.c index afe72d120c..4477a8b8db 100644 --- a/src/overlays/actors/ovl_En_Dai/z_en_dai.c +++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.c @@ -5,7 +5,6 @@ */ #include "z_en_dai.h" -#include "objects/object_dai/object_dai.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_2000000) @@ -127,50 +126,64 @@ s32 func_80B3E5B4(EnDai* this, PlayState* play) { return 0; } -s32 func_80B3E5DC(EnDai* this, s32 arg1) { - static AnimationInfoS sAnimationInfo[] = { - { &object_dai_Anim_0079E4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_dai_Anim_0079E4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_dai_Anim_007354, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_dai_Anim_000CEC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_dai_Anim_0069DC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_dai_Anim_00563C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_dai_Anim_00563C, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_dai_Anim_002E58, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_dai_Anim_006590, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - }; +typedef enum { + /* -1 */ ENDAI_ANIM_NONE = -1, + /* 0 */ ENDAI_ANIM_0, + /* 1 */ ENDAI_ANIM_1, + /* 2 */ ENDAI_ANIM_2, + /* 3 */ ENDAI_ANIM_3, + /* 4 */ ENDAI_ANIM_4, + /* 5 */ ENDAI_ANIM_5, + /* 6 */ ENDAI_ANIM_6, + /* 7 */ ENDAI_ANIM_7, + /* 8 */ ENDAI_ANIM_8, + /* 9 */ ENDAI_ANIM_MAX +} EnDaiAnimation; - s32 phi_v1 = false; - s32 ret = false; +static AnimationInfoS sAnimationInfo[ENDAI_ANIM_MAX] = { + { &object_dai_Anim_0079E4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDAI_ANIM_0 + { &object_dai_Anim_0079E4, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDAI_ANIM_1 + { &object_dai_Anim_007354, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDAI_ANIM_2 + { &object_dai_Anim_000CEC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDAI_ANIM_3 + { &object_dai_Anim_0069DC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDAI_ANIM_4 + { &object_dai_Anim_00563C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENDAI_ANIM_5 + { &object_dai_Anim_00563C, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDAI_ANIM_6 + { &object_dai_Anim_002E58, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDAI_ANIM_7 + { &object_dai_Anim_006590, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDAI_ANIM_8 +}; - switch (arg1) { - case 0: - case 1: - if ((this->unk_A70 != 0) && (this->unk_A70 != 1)) { - phi_v1 = true; +s32 EnDai_ChangeAnim(EnDai* this, s32 animIndex) { + s32 changeAnim = false; + s32 didAnimChange = false; + + switch (animIndex) { + case ENDAI_ANIM_0: + case ENDAI_ANIM_1: + if ((this->animIndex != ENDAI_ANIM_0) && (this->animIndex != ENDAI_ANIM_1)) { + changeAnim = true; } break; - case 5: - case 6: - if ((this->unk_A70 != 5) && (this->unk_A70 != 6)) { - phi_v1 = true; + case ENDAI_ANIM_5: + case ENDAI_ANIM_6: + if ((this->animIndex != ENDAI_ANIM_5) && (this->animIndex != ENDAI_ANIM_6)) { + changeAnim = true; } break; default: - if (arg1 != this->unk_A70) { - phi_v1 = true; + if (this->animIndex != animIndex) { + changeAnim = true; } break; } - if (phi_v1) { - this->unk_A70 = arg1; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1); + if (changeAnim) { + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); } - return ret; + return didAnimChange; } s32 func_80B3E69C(EnDai* this, PlayState* play) { @@ -239,19 +252,19 @@ static s32 D_80B3FC8C[] = { 0x920C0F0C, 0x930C1211, 0x5520100E, 0x0C940C12, 0x10000000, }; +static f32 D_80B3FCB4[] = { + 1.0f, 6.0f, 16.0f, 19.0f, 46.0f, 48.0f, 50.0f, 52.0f, 54.0f, 1.0f, 6.0f, 36.0f, +}; + +static f32 D_80B3FCE4[] = { + 5.0f, 15.0f, 18.0f, 45.0f, 47.0f, 49.0f, 51.0f, 53.0f, 55.0f, 5.0f, 35.0f, 45.0f, +}; + +static s16 D_80B3FD14[] = { + 4, 5, 2, 0, 4, 5, 2, 5, 4, 4, 5, 2, +}; + s16 func_80B3E8BC(EnDai* this, s32 cueId) { - static f32 D_80B3FCB4[] = { - 1.0f, 6.0f, 16.0f, 19.0f, 46.0f, 48.0f, 50.0f, 52.0f, 54.0f, 1.0f, 6.0f, 36.0f, - }; - - static f32 D_80B3FCE4[] = { - 5.0f, 15.0f, 18.0f, 45.0f, 47.0f, 49.0f, 51.0f, 53.0f, 55.0f, 5.0f, 35.0f, 45.0f, - }; - - static s16 D_80B3FD14[] = { - 4, 5, 2, 0, 4, 5, 2, 5, 4, 4, 5, 2, - }; - s32 i; s32 end; @@ -266,7 +279,7 @@ s16 func_80B3E8BC(EnDai* this, s32 cueId) { } while (i < end) { - if ((D_80B3FCB4[i] <= this->skelAnime.curFrame) && (D_80B3FCE4[i] >= this->skelAnime.curFrame)) { + if ((this->skelAnime.curFrame >= D_80B3FCB4[i]) && (this->skelAnime.curFrame <= D_80B3FCE4[i])) { return D_80B3FD14[i]; } i++; @@ -285,7 +298,7 @@ s32 func_80B3E96C(EnDai* this, PlayState* play) { ((this->unk_1DC == 0) || Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame))) { switch (this->unk_1DC) { case 0: - func_80B3E5DC(this, 2); + EnDai_ChangeAnim(this, ENDAI_ANIM_2); this->unk_1DC++; break; @@ -293,22 +306,25 @@ s32 func_80B3E96C(EnDai* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_SNOWSTORM_HARD); Actor_Spawn(&play->actorCtx, play, ACTOR_EN_WEATHER_TAG, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0x1388, 0x708, 0x3E8, 0); - func_80B3E5DC(this, 3); + EnDai_ChangeAnim(this, ENDAI_ANIM_3); this->unk_1DC++; break; case 2: - func_80B3E5DC(this, 4); + EnDai_ChangeAnim(this, ENDAI_ANIM_4); this->unk_1DC++; break; case 3: - func_80B3E5DC(this, 1); + EnDai_ChangeAnim(this, ENDAI_ANIM_1); this->unk_1F0 = D_80B3FBF0; this->unk_1FC = D_80B3FBF0; this->unk_1DC = 0; this->unk_1DA = Rand_S16Offset(20, 20); break; + + default: + break; } } else if (this->unk_1DC == 2) { sp50.x = sp50.y = 0.0f; @@ -336,30 +352,30 @@ void func_80B3EC10(f32 arg0, Vec3f arg1, f32 arg2, Vec3f arg3, f32 arg4, Vec3f* arg5->z = ((arg3.z - arg1.z) * temp_f0) + arg1.z; } +static f32 D_80B3FD2C[] = { + 6.0f, 11.0f, 15.0f, 0.0f, 12.0f, 17.0f, 0.0f, 3.0f, +}; + +static f32 D_80B3FD4C[] = { + 8.0f, 15.0f, 24.0f, 4.0f, 17.0f, 26.0f, 3.0f, 7.0f, +}; + +static s16 D_80B3FD6C[] = { + 1, 1, 1, 2, 2, 2, 3, 3, +}; + +static Vec3f D_80B3FD7C[] = { + { 1.0f, 1.0f, 1.0f }, { 1.0f, 0.8f, 0.8f }, { 1.0f, 1.1f, 1.1f }, { 1.0f, 1.3f, 1.3f }, { 1.0f, 0.7f, 0.9f }, + { 1.0f, 0.8f, 0.9f }, { 1.0f, 0.7f, 0.9f }, { 1.0f, 0.8f, 0.9f }, { 1.0f, 1.0f, 1.0f }, +}; + s32 func_80B3EC84(EnDai* this) { - static f32 D_80B3FD2C[] = { - 6.0f, 11.0f, 15.0f, 0.0f, 12.0f, 17.0f, 0.0f, 3.0f, - }; - - static f32 D_80B3FD4C[] = { - 8.0f, 15.0f, 24.0f, 4.0f, 17.0f, 26.0f, 3.0f, 7.0f, - }; - - static s16 D_80B3FD6C[] = { - 1, 1, 1, 2, 2, 2, 3, 3, - }; - - static Vec3f D_80B3FD7C[] = { - { 1.0f, 1.0f, 1.0f }, { 1.0f, 0.8f, 0.8f }, { 1.0f, 1.1f, 1.1f }, { 1.0f, 1.3f, 1.3f }, { 1.0f, 0.7f, 0.9f }, - { 1.0f, 0.8f, 0.9f }, { 1.0f, 0.7f, 0.9f }, { 1.0f, 0.8f, 0.9f }, { 1.0f, 1.0f, 1.0f }, - }; - s32 i; s32 ret = false; for (i = 0; i < ARRAY_COUNT(D_80B3FD6C); i++) { - if ((this->unk_1DC == D_80B3FD6C[i]) && (D_80B3FD2C[i] < this->skelAnime.curFrame) && - (D_80B3FD4C[i] >= this->skelAnime.curFrame)) { + if ((this->unk_1DC == D_80B3FD6C[i]) && (this->skelAnime.curFrame > D_80B3FD2C[i]) && + (this->skelAnime.curFrame <= D_80B3FD4C[i])) { func_80B3EC10(D_80B3FD2C[i], D_80B3FD7C[i], D_80B3FD4C[i], D_80B3FD7C[i + 1], this->skelAnime.curFrame, &this->unk_1F0); ret = true; @@ -370,20 +386,20 @@ s32 func_80B3EC84(EnDai* this) { return ret; } +static f32 D_80B3FDE8[] = { 22.0f, 0.0f, 0.0f }; + +static f32 D_80B3FDF4[] = { 29.0f, 3.0f, 9.0f }; + +static s16 D_80B3FE00[] = { 1, 2, 3 }; + +static Vec3f D_80B3FE08[] = { + { 1.0f, 1.0f, 1.0f }, + { 1.0f, 1.2f, 1.2f }, + { 1.0f, 0.7f, 0.8f }, + { 1.0f, 1.0f, 1.0f }, +}; + s32 func_80B3ED88(EnDai* this) { - static f32 D_80B3FDE8[] = { 22.0f, 0.0f, 0.0f }; - - static f32 D_80B3FDF4[] = { 29.0f, 3.0f, 9.0f }; - - static s16 D_80B3FE00[] = { 1, 2, 3 }; - - static Vec3f D_80B3FE08[] = { - { 1.0f, 1.0f, 1.0f }, - { 1.0f, 1.2f, 1.2f }, - { 1.0f, 0.7f, 0.8f }, - { 1.0f, 1.0f, 1.0f }, - }; - s32 i; s32 ret = false; @@ -415,7 +431,7 @@ void func_80B3EEDC(EnDai* this, PlayState* play) { if ((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY)) { - func_80B3E5DC(this, 1); + EnDai_ChangeAnim(this, ENDAI_ANIM_1); this->actionFunc = func_80B3EE8C; } else if (!(player->stateFlags2 & PLAYER_STATE2_8000000)) { func_80B3E96C(this, play); @@ -440,9 +456,9 @@ void func_80B3F00C(EnDai* this, PlayState* play) { Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8); } -void func_80B3F044(EnDai* this, PlayState* play) { - static s32 D_80B3FE38[] = { - 0, 0, 6, 7, 8, +void EnDai_HandleCutscene(EnDai* this, PlayState* play) { + static s32 sCsAnimIndex[] = { + ENDAI_ANIM_0, ENDAI_ANIM_0, ENDAI_ANIM_6, ENDAI_ANIM_7, ENDAI_ANIM_8, }; s32 cueChannel = 0; s32 cueId; @@ -451,7 +467,7 @@ void func_80B3F044(EnDai* this, PlayState* play) { cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_472); cueId = play->csCtx.actorCues[cueChannel]->id; if (this->cueId != (u8)cueId) { - func_80B3E5DC(this, D_80B3FE38[cueId]); + EnDai_ChangeAnim(this, sCsAnimIndex[cueId]); switch (cueId) { case 1: this->unk_1E0 = 0.0f; @@ -464,6 +480,9 @@ void func_80B3F044(EnDai* this, PlayState* play) { case 3: this->unk_1CE &= ~0x80; break; + + default: + break; } } this->cueId = cueId; @@ -505,6 +524,9 @@ void func_80B3F044(EnDai* this, PlayState* play) { } this->unk_1D6 = func_80B3E8BC(this, this->cueId); break; + + default: + break; } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); @@ -514,9 +536,10 @@ void EnDai_Init(Actor* thisx, PlayState* play) { EnDai* this = THIS; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 0.0f); - SkelAnime_InitFlex(play, &this->skelAnime, &object_dai_Skel_0130D0, NULL, this->jointTable, this->morphTable, 19); - this->unk_A70 = -1; - func_80B3E5DC(this, 0); + SkelAnime_InitFlex(play, &this->skelAnime, &object_dai_Skel_0130D0, NULL, this->jointTable, this->morphTable, + OBJECT_DAI_LIMB_MAX); + this->animIndex = ENDAI_ANIM_NONE; + EnDai_ChangeAnim(this, ENDAI_ANIM_0); Actor_SetScale(&this->actor, 0.2f); this->actor.targetMode = 10; this->unk_1F0 = D_80B3FBF0; @@ -553,7 +576,7 @@ void EnDai_Update(Actor* thisx, PlayState* play) { Player* player = GET_PLAYER(play); if (!func_80B3E7C8(this, play) && func_80B3E69C(this, play)) { - func_80B3F044(this, play); + EnDai_HandleCutscene(this, play); SkelAnime_Update(&this->skelAnime); func_80B3E834(this); func_80B3E460(this); @@ -578,11 +601,11 @@ s32 EnDai_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p *dList = NULL; } - if (limbIndex == 11) { + if (limbIndex == OBJECT_DAI_LIMB_0B) { Matrix_MultVec3f(&gZeroVec3f, &this->unk_1E4); } - if (limbIndex == 10) { + if (limbIndex == OBJECT_DAI_LIMB_0A) { *dList = NULL; } @@ -597,7 +620,7 @@ void EnDai_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, MtxF sp24; switch (limbIndex) { - case 11: + case OBJECT_DAI_LIMB_0B: D_80B3FE4C.x = sREG(0); D_80B3FE4C.y = sREG(1); D_80B3FE4C.z = sREG(2); @@ -608,9 +631,12 @@ void EnDai_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, this->unk_1D4 = BINANG_SUB(sp64.y, 0x4000); break; - case 10: + case OBJECT_DAI_LIMB_0A: Matrix_Get(&this->unk_18C); break; + + default: + break; } } @@ -618,19 +644,22 @@ void EnDai_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx, Gfx** EnDai* this = THIS; switch (limbIndex) { - case 9: + case OBJECT_DAI_LIMB_09: if (this->unk_1CE & 0x100) { func_80B3EC84(this); } Matrix_Scale(this->unk_1F0.x, this->unk_1F0.y, this->unk_1F0.z, MTXMODE_APPLY); break; - case 2: + case OBJECT_DAI_LIMB_02: if (this->unk_1CE & 0x100) { func_80B3ED88(this); } Matrix_Scale(this->unk_1FC.x, this->unk_1FC.y, this->unk_1FC.z, MTXMODE_APPLY); break; + + default: + break; } } @@ -677,7 +706,6 @@ void func_80B3F920(EnDai* this, PlayState* play) { object_dai_Tex_0107B0, object_dai_Tex_010FB0, object_dai_Tex_0117B0, object_dai_Tex_010FB0, object_dai_Tex_011FB0, object_dai_Tex_0127B0, }; - s32 pad; this->unk_1CE |= 0x40; diff --git a/src/overlays/actors/ovl_En_Dai/z_en_dai.h b/src/overlays/actors/ovl_En_Dai/z_en_dai.h index 35928388f1..90456b833d 100644 --- a/src/overlays/actors/ovl_En_Dai/z_en_dai.h +++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.h @@ -2,6 +2,7 @@ #define Z_EN_DAI_H #include "global.h" +#include "objects/object_dai/object_dai.h" struct EnDai; @@ -39,11 +40,11 @@ typedef struct EnDai { /* 0x1E4 */ Vec3f unk_1E4; /* 0x1F0 */ Vec3f unk_1F0; /* 0x1FC */ Vec3f unk_1FC; - /* 0x208 */ Vec3s jointTable[19]; - /* 0x27A */ Vec3s morphTable[19]; + /* 0x208 */ Vec3s jointTable[OBJECT_DAI_LIMB_MAX]; + /* 0x27A */ Vec3s morphTable[OBJECT_DAI_LIMB_MAX]; /* 0x2EC */ EnDaiEffect effects[EN_DAI_EFFECT_COUNT]; /* 0xA6C */ s32 unk_A6C; - /* 0xA70 */ s32 unk_A70; + /* 0xA70 */ s32 animIndex; } EnDai; // size = 0xA74 #endif // Z_EN_DAI_H diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c index 00a912adc4..bfdf704a87 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -5,7 +5,6 @@ */ #include "z_en_daiku.h" -#include "objects/object_daiku/object_daiku.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) @@ -57,15 +56,42 @@ static ColliderCylinderInit sCylinderInit = { { 20, 60, 0, { 0, 0, 0 } }, }; -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_00BEAC, +typedef enum { + /* -1 */ ENDAIKU_ANIM_NONE = -1, + /* 0 */ ENDAIKU_ANIM_0, + /* 1 */ ENDAIKU_ANIM_1, + /* 2 */ ENDAIKU_ANIM_2, + /* 3 */ ENDAIKU_ANIM_3, + /* 4 */ ENDAIKU_ANIM_4, + /* 5 */ ENDAIKU_ANIM_5, + /* 6 */ ENDAIKU_ANIM_6, + /* 7 */ ENDAIKU_ANIM_7, + /* 8 */ ENDAIKU_ANIM_8, + /* 9 */ ENDAIKU_ANIM_MAX +} EnDaiAnimation; + +static AnimationHeader* sAnimations[ENDAIKU_ANIM_MAX] = { + &object_daiku_Anim_002FA0, // ENDAIKU_ANIM_0 + &object_daiku_Anim_00ACD0, // ENDAIKU_ANIM_1 + &object_daiku_Anim_00C92C, // ENDAIKU_ANIM_2 + &object_daiku_Anim_000C44, // ENDAIKU_ANIM_3 + &object_daiku_Anim_00C234, // ENDAIKU_ANIM_4 + &object_daiku_Anim_000600, // ENDAIKU_ANIM_5 + &object_daiku_Anim_001114, // ENDAIKU_ANIM_6 + &object_daiku_Anim_00B690, // ENDAIKU_ANIM_7 + &object_daiku_Anim_00BEAC, // ENDAIKU_ANIM_8 }; -static u8 sAnimationModes[] = { - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE, +static u8 sAnimationModes[ENDAIKU_ANIM_MAX] = { + ANIMMODE_LOOP, // ENDAIKU_ANIM_0 + ANIMMODE_LOOP, // ENDAIKU_ANIM_1 + ANIMMODE_LOOP, // ENDAIKU_ANIM_2 + ANIMMODE_LOOP, // ENDAIKU_ANIM_3 + ANIMMODE_ONCE, // ENDAIKU_ANIM_4 + ANIMMODE_LOOP, // ENDAIKU_ANIM_5 + ANIMMODE_LOOP, // ENDAIKU_ANIM_6 + ANIMMODE_ONCE, // ENDAIKU_ANIM_7 + ANIMMODE_ONCE, // ENDAIKU_ANIM_8 }; void EnDaiku_Init(Actor* thisx, PlayState* play) { @@ -105,17 +131,20 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) { case ENDAIKU_PARAM_FF_1: SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_002FA0, - this->jointTable, this->morphTable, 17); + this->jointTable, this->morphTable, OBJECT_DAIKU_LIMB_MAX); break; case ENDAIKU_PARAM_FF_2: SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_00B690, - this->jointTable, this->morphTable, 17); + this->jointTable, this->morphTable, OBJECT_DAIKU_LIMB_MAX); break; case ENDAIKU_PARAM_FF_3: SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_001114, - this->jointTable, this->morphTable, 17); + this->jointTable, this->morphTable, OBJECT_DAIKU_LIMB_MAX); + break; + + default: break; } @@ -128,9 +157,10 @@ void EnDaiku_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void func_8094373C(EnDaiku* this, s32 arg1) { - this->unk_284 = Animation_GetLastFrame(sAnimations[arg1]); - Animation_Change(&this->skelAnime, sAnimations[arg1], 1.0f, 0.0f, this->unk_284, sAnimationModes[arg1], -4.0f); +void EnDaiku_ChangeAnim(EnDaiku* this, s32 animIndex) { + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); + Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, 0.0f, this->animEndFrame, + sAnimationModes[animIndex], -4.0f); } void func_809437C8(EnDaiku* this) { @@ -147,15 +177,18 @@ void func_80943820(EnDaiku* this) { switch (this->unk_278) { case 0: case 1: - func_8094373C(this, 0); + EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_0); break; case 2: - func_8094373C(this, 7); + EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_7); break; case 3: - func_8094373C(this, 6); + EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_6); + break; + + default: break; } @@ -167,7 +200,7 @@ void func_80943820(EnDaiku* this) { } void func_809438F8(EnDaiku* this, PlayState* play) { - f32 currentFrame = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; s32 pad; s32 day = gSaveContext.save.day - 1; s32 pad2; @@ -188,11 +221,11 @@ void func_809438F8(EnDaiku* this, PlayState* play) { return; } - if ((this->unk_278 == ENDAIKU_PARAM_FF_2) && (this->unk_284 <= currentFrame)) { + if ((this->unk_278 == ENDAIKU_PARAM_FF_2) && (curFrame >= this->animEndFrame)) { if (Rand_ZeroOne() < 0.5f) { - func_8094373C(this, 7); + EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_7); } else { - func_8094373C(this, 8); + EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_8); } } @@ -235,13 +268,13 @@ void func_80943BC0(EnDaiku* this) { } void func_80943BDC(EnDaiku* this, PlayState* play) { - f32 currentFrame = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; - if ((this->unk_278 == ENDAIKU_PARAM_FF_2) && (this->unk_284 <= currentFrame)) { + if ((this->unk_278 == ENDAIKU_PARAM_FF_2) && (curFrame >= this->animEndFrame)) { if (Rand_ZeroOne() < 0.5f) { - func_8094373C(this, 7); + EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_7); } else { - func_8094373C(this, 8); + EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_8); } } @@ -291,7 +324,7 @@ void EnDaiku_Update(Actor* thisx, PlayState* play) { s32 EnDaiku_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnDaiku* this = THIS; - if (limbIndex == 15) { + if (limbIndex == OBJECT_DAIKU_LIMB_0F) { rot->x += this->unk_260; rot->z += this->unk_25E; } @@ -310,11 +343,11 @@ void EnDaiku_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro OPEN_DISPS(play->state.gfxCtx); - if (limbIndex == 15) { + if (limbIndex == OBJECT_DAIKU_LIMB_0F) { gSPDisplayList(POLY_OPA_DISP++, D_809440D4[this->unk_278]); } - if ((this->unk_278 == ENDAIKU_PARAM_FF_3) && (limbIndex == 8)) { + if ((this->unk_278 == ENDAIKU_PARAM_FF_3) && (limbIndex == OBJECT_DAIKU_LIMB_08)) { gSPDisplayList(POLY_OPA_DISP++, object_daiku_DL_008EC8); } diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h index ff88c8c9af..60275bbfa9 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h @@ -2,6 +2,7 @@ #define Z_EN_DAIKU_H #include "global.h" +#include "objects/object_daiku/object_daiku.h" struct EnDaiku; @@ -22,8 +23,8 @@ typedef enum { typedef struct EnDaiku { /* 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 */ EnDaikuActionFunc actionFunc; /* 0x258 */ Path* path; /* 0x25C */ s16 unk_25C; @@ -39,7 +40,7 @@ typedef struct EnDaiku { /* 0x27E */ s16 unk_27E; /* 0x280 */ s16 unk_280; /* 0x282 */ s16 unk_282; - /* 0x284 */ f32 unk_284; + /* 0x284 */ f32 animEndFrame; /* 0x288 */ s16 pathIndex; /* 0x28A */ s16 unk_28A; /* 0x28C */ s16 unk_28C; 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 bdb959b64a..b744dbbb0f 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; +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; - this->unk_276 = arg1; - this->unk_284 = Animation_GetLastFrame(sAnimations[this->unk_276]); - if (this->unk_276 == 3) { - sp34 = 2.0f; +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 58fc26b9a5..51cd23124f 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]; diff --git a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c index e9bb777c61..da8ea8b85f 100644 --- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c +++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c @@ -343,7 +343,7 @@ void EnDekubaba_Wait(EnDekubaba* this, PlayState* play) { this->actor.world.pos.z = this->actor.home.pos.z; this->actor.world.pos.y = this->actor.home.pos.y + 14.0f * this->size; - if ((this->timer == 0) && (this->actor.xzDistToPlayer < 200.0f * this->size) && + if ((this->timer == 0) && (this->actor.xzDistToPlayer < (200.0f * this->size)) && (fabsf(this->actor.playerHeightRel) < 30.0f * this->size)) { EnDekubaba_SetupGrow(this); } @@ -430,7 +430,7 @@ void EnDekubaba_Grow(EnDekubaba* this, PlayState* play) { 1, HAHEN_OBJECT_DEFAULT, 10, NULL); if (this->timer == 0) { - if (Math_Vec3f_DistXZ(&this->actor.home.pos, &player->actor.world.pos) < 240.0f * this->size) { + if (Math_Vec3f_DistXZ(&this->actor.home.pos, &player->actor.world.pos) < (240.0f * this->size)) { EnDekubaba_SetupPrepareLunge(this); } else { EnDekubaba_SetupRetract(this); @@ -942,7 +942,7 @@ void EnDekubaba_SetupStunnedVertical(EnDekubaba* this) { if (this->timer == 1) { Animation_Change(&this->skelAnime, &gDekuBabaFastChompAnim, 4.0f, 0.0f, Animation_GetLastFrame(&gDekuBabaFastChompAnim), ANIMMODE_LOOP, -3.0f); - this->timer = 0x28; + this->timer = 40; } else { Animation_Change(&this->skelAnime, &gDekuBabaFastChompAnim, 0.0f, 0.0f, Animation_GetLastFrame(&gDekuBabaFastChompAnim), ANIMMODE_LOOP, -3.0f); diff --git a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c index 1057da6fa8..e0cba18b09 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c @@ -671,22 +671,22 @@ s32 EnDekunuts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec f32 arg1; f32 arg2; f32 arg3; - f32 currentFrame; + f32 curFrame; if (this->actionFunc == func_808BDA4C) { if (limbIndex == DEKU_SCRUB_LIMB_SNOUT) { - currentFrame = this->skelAnime.curFrame; - if (currentFrame <= 6.0f) { - arg2 = 1.0f - (currentFrame * 0.0833f); - arg1 = (currentFrame * 0.1167f) + 1.0f; - arg3 = (currentFrame * 0.1167f) + 1.0f; - } else if (currentFrame <= 7.0f) { - currentFrame -= 6.0f; - arg2 = 0.5f + currentFrame; - arg1 = 1.7f - (currentFrame * 0.7f); - arg3 = 1.7f - (currentFrame * 0.7f); - } else if (currentFrame <= 10.0f) { - arg2 = 1.5f - ((currentFrame - 7.0f) * 0.1667f); + curFrame = this->skelAnime.curFrame; + if (curFrame <= 6.0f) { + arg2 = 1.0f - (curFrame * 0.0833f); + arg1 = (curFrame * 0.1167f) + 1.0f; + arg3 = (curFrame * 0.1167f) + 1.0f; + } else if (curFrame <= 7.0f) { + curFrame -= 6.0f; + arg2 = 0.5f + curFrame; + arg1 = 1.7f - (curFrame * 0.7f); + arg3 = 1.7f - (curFrame * 0.7f); + } else if (curFrame <= 10.0f) { + arg2 = 1.5f - ((curFrame - 7.0f) * 0.1667f); arg1 = 1.0f; arg3 = 1.0f; } else { diff --git a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c index 3a6302411c..8b87ce39e3 100644 --- a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c +++ b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c @@ -15,20 +15,10 @@ void EnDemoheishi_Destroy(Actor* thisx, PlayState* play); void EnDemoheishi_Update(Actor* thisx, PlayState* play); void EnDemoheishi_Draw(Actor* thisx, PlayState* play); -void EnDemoheishi_ChangeAnim(EnDemoheishi* this, s32 animIndex); void EnDemoheishi_SetupIdle(EnDemoheishi* this); void EnDemoheishi_Idle(EnDemoheishi* this, PlayState* play); void EnDemoheishi_SetupTalk(EnDemoheishi* this); void EnDemoheishi_Talk(EnDemoheishi* this, PlayState* play); -s32 EnDemoheishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx); - -typedef enum { - /* 0 */ DEMOHEISHI_ANIM_STAND_HAND_ON_HIP, - /* 1 */ DEMOHEISHI_ANIM_CHEER_WITH_SPEAR, - /* 2 */ DEMOHEISHI_ANIM_WAVE, - /* 3 */ DEMOHEISHI_ANIM_SIT_AND_REACH, - /* 4 */ DEMOHEISHI_ANIM_STAND_UP -} EnDemoheishiAnimation; ActorInit En_Demo_heishi_InitVars = { ACTOR_EN_DEMO_HEISHI, @@ -83,18 +73,35 @@ void EnDemoheishi_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->colliderCylinder); } -void EnDemoheishi_ChangeAnim(EnDemoheishi* this, s32 animIndex) { - static AnimationHeader* sAnimations[] = { - &gSoldierStandHandOnHip, &gSoldierCheerWithSpear, &gSoldierWave, &gSoldierSitAndReach, &gSoldierStandUp, - }; - static u8 sAnimationModes[] = { - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_LOOP, - ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, - }; +typedef enum { + /* 0 */ DEMOHEISHI_ANIM_STAND_HAND_ON_HIP, + /* 1 */ DEMOHEISHI_ANIM_CHEER_WITH_SPEAR, + /* 2 */ DEMOHEISHI_ANIM_WAVE, + /* 3 */ DEMOHEISHI_ANIM_SIT_AND_REACH, + /* 4 */ DEMOHEISHI_ANIM_STAND_UP, + /* 5 */ DEMOHEISHI_ANIM_MAX +} EnDemoheishiAnimation; +static AnimationHeader* sAnimations[DEMOHEISHI_ANIM_MAX] = { + &gSoldierStandHandOnHip, // DEMOHEISHI_ANIM_STAND_HAND_ON_HIP + &gSoldierCheerWithSpear, // DEMOHEISHI_ANIM_CHEER_WITH_SPEAR + &gSoldierWave, // DEMOHEISHI_ANIM_WAVE + &gSoldierSitAndReach, // DEMOHEISHI_ANIM_SIT_AND_REACH + &gSoldierStandUp, // DEMOHEISHI_ANIM_STAND_UP +}; + +static u8 sAnimationModes[DEMOHEISHI_ANIM_MAX] = { + ANIMMODE_LOOP, // DEMOHEISHI_ANIM_STAND_HAND_ON_HIP + ANIMMODE_LOOP, // DEMOHEISHI_ANIM_CHEER_WITH_SPEAR + ANIMMODE_LOOP, // DEMOHEISHI_ANIM_WAVE + ANIMMODE_LOOP, // DEMOHEISHI_ANIM_SIT_AND_REACH + ANIMMODE_ONCE, // DEMOHEISHI_ANIM_STAND_UP +}; + +void EnDemoheishi_ChangeAnim(EnDemoheishi* this, s32 animIndex) { this->animIndex = animIndex; - this->frameCount = Animation_GetLastFrame(sAnimations[animIndex]); - Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->frameCount, + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); + Animation_Change(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.0f, this->animEndFrame, sAnimationModes[this->animIndex], -10.0f); } diff --git a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.h b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.h index 9d9714b959..8c1a576f51 100644 --- a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.h +++ b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.h @@ -22,7 +22,7 @@ typedef struct EnDemoheishi { /* 0x262 */ s16 headRotZTarget; /* 0x264 */ s32 animIndex; /* 0x268 */ s16 timer; - /* 0x26C */ f32 frameCount; + /* 0x26C */ f32 animEndFrame; /* 0x270 */ s16 isTalking; /* 0x272 */ s16 textIdIndex; /* 0x274 */ ColliderCylinder colliderCylinder; diff --git a/src/overlays/actors/ovl_En_Dg/z_en_dg.c b/src/overlays/actors/ovl_En_Dg/z_en_dg.c index 1e6af02ac1..b35f4d5c57 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -185,33 +185,41 @@ typedef enum { /* 16 */ DOG_ANIM_MAX } DogAnimation; -static AnimationInfoS sAnimationInfo[] = { - { &gDogWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, { &gDogWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -6 }, - { &gDogRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, { &gDogBarkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -6 }, - { &gDogSitAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -6 }, { &gDogSitAnim, 1.0f, 0, -1, ANIMMODE_LOOP_PARTIAL, -6 }, - { &gDogLyingDownAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -6 }, { &gDogLyingDownLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -6 }, - { &gDogLyingDownAnim, 1.0f, 0, 27, ANIMMODE_ONCE, -6 }, { &gDogLyingDownAnim, 1.0f, 28, -1, ANIMMODE_ONCE, -6 }, - { &gDogLyingDownAnim, 1.0f, 54, 54, ANIMMODE_ONCE, -6 }, { &gDogWalkAnim, -1.5f, -1, 0, ANIMMODE_LOOP, -6 }, - { &gDogJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, { &gDogLongJumpAnim, 1.2f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDogJumpAttackAnim, 1.2f, 0, -1, ANIMMODE_ONCE, 0 }, { &gDogWalkAnim, 0.5f, 0, -1, ANIMMODE_LOOP, 0 }, +static AnimationInfoS sAnimationInfo[DOG_ANIM_MAX] = { + { &gDogWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DOG_ANIM_WALK_AFTER_TALKING + { &gDogWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -6 }, // DOG_ANIM_WALK + { &gDogRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DOG_ANIM_RUN + { &gDogBarkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -6 }, // DOG_ANIM_BARK + { &gDogSitAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -6 }, // DOG_ANIM_SIT_DOWN_ONCE + { &gDogSitAnim, 1.0f, 0, -1, ANIMMODE_LOOP_PARTIAL, -6 }, // DOG_ANIM_SIT_DOWN + { &gDogLyingDownAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -6 }, // DOG_ANIM_LYING_DOWN_START_1 + { &gDogLyingDownLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -6 }, // DOG_ANIM_LYING_DOWN_LOOP + { &gDogLyingDownAnim, 1.0f, 0, 27, ANIMMODE_ONCE, -6 }, // DOG_ANIM_LYING_DOWN_START_2 + { &gDogLyingDownAnim, 1.0f, 28, -1, ANIMMODE_ONCE, -6 }, // DOG_ANIM_LYING_DOWN_START_3 + { &gDogLyingDownAnim, 1.0f, 54, 54, ANIMMODE_ONCE, -6 }, // DOG_ANIM_LYING_DOWN_START_4 + { &gDogWalkAnim, -1.5f, -1, 0, ANIMMODE_LOOP, -6 }, // DOG_ANIM_WALK_BACKWARDS + { &gDogJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DOG_ANIM_JUMP + { &gDogLongJumpAnim, 1.2f, 0, -1, ANIMMODE_ONCE, 0 }, // DOG_ANIM_LONG_JUMP + { &gDogJumpAttackAnim, 1.2f, 0, -1, ANIMMODE_ONCE, 0 }, // DOG_ANIM_JUMP_ATTACK + { &gDogWalkAnim, 0.5f, 0, -1, ANIMMODE_LOOP, 0 }, // DOG_ANIM_SWIM }; static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneForward, 1000, ICHAIN_STOP), }; -void EnDg_ChangeAnim(SkelAnime* skelAnime, AnimationInfoS* animationInfo, s32 animIndex) { - f32 frameCount; +void EnDg_ChangeAnim(SkelAnime* skelAnime, AnimationInfoS* animInfo, s32 animIndex) { + f32 endFrame; - animationInfo += animIndex; - if (animationInfo->frameCount < 0) { - frameCount = Animation_GetLastFrame(animationInfo->animation); + animInfo += animIndex; + if (animInfo->frameCount < 0) { + endFrame = Animation_GetLastFrame(animInfo->animation); } else { - frameCount = animationInfo->frameCount; + endFrame = animInfo->frameCount; } - Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed + (BREG(88) * 0.1f), - animationInfo->startFrame, frameCount, animationInfo->mode, animationInfo->morphFrames); + Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed + (BREG(88) * 0.1f), animInfo->startFrame, + endFrame, animInfo->mode, animInfo->morphFrames); } void EnDg_UpdateCollision(EnDg* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c index 47c6c2567b..8e2b9b382d 100644 --- a/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c +++ b/src/overlays/actors/ovl_En_Dnh/z_en_dnh.c @@ -54,8 +54,13 @@ ActorInit En_Dnh_InitVars = { (ActorFunc)EnDnh_Draw, }; -static AnimationInfoS sAnimationInfo[] = { - { &gKoumeKioskHeadMoving, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, +typedef enum { + /* 0 */ ENDNH_ANIM_HEAD_MOVING, + /* 1 */ ENDNH_ANIM_MAX +} EnDnhAnimation; + +static AnimationInfoS sAnimationInfo[ENDNH_ANIM_MAX] = { + { &gKoumeKioskHeadMoving, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNH_ANIM_HEAD_MOVING }; static TexturePtr sEyeTextures[] = { @@ -133,8 +138,9 @@ void EnDnh_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); SkelAnime_Init(play, &this->skelAnime, &gKoumeKioskSkeleton, NULL, this->jointTable, this->morphTable, KOUME_KIOSK_LIMB_MAX); - SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, 0); + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, ENDNH_ANIM_HEAD_MOVING); this->actor.shape.yOffset = 1100.0f; + if (gSaveContext.save.entrance != ENTRANCE(TOURIST_INFORMATION, 1)) { SubS_SetOfferMode(&this->unk18C, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk198 = 0; @@ -142,9 +148,11 @@ void EnDnh_Init(Actor* thisx, PlayState* play) { SubS_SetOfferMode(&this->unk18C, SUBS_OFFER_MODE_AUTO, SUBS_OFFER_MODE_MASK); this->unk198 = CHECK_EVENTINF(EVENTINF_35) ? 2 : 1; } + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_SAVED_KOUME)) { this->actor.draw = NULL; } + this->msgEventCallback = func_80A50D40; this->unk194 = 0; this->actionFunc = EnDnh_DoNothing; diff --git a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c index 041eb54b05..f9dd65a46a 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c @@ -5,9 +5,6 @@ */ #include "z_en_dnk.h" -#include "objects/object_dnk/object_dnk.h" -#include "objects/object_hintnuts/object_hintnuts.h" -#include "objects/object_dekunuts/object_dekunuts.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) @@ -17,7 +14,7 @@ void EnDnk_Init(Actor* thisx, PlayState* play); void EnDnk_Destroy(Actor* thisx, PlayState* play); void EnDnk_Update(Actor* thisx, PlayState* play); -void func_80A51890(EnDnk* this, PlayState* play); +void EnDnk_HandleCutscene(EnDnk* this, PlayState* play); void EnDnk_DoNothing(EnDnk* this, PlayState* play); void func_80A52018(Actor* thisx, PlayState* play); void func_80A52134(EnDnk* this, PlayState* play); @@ -93,66 +90,108 @@ static DamageTable sDamageTable = { /* Powder Keg */ DMG_ENTRY(1, 0x0), }; -static AnimationInfoS sAnimationInfo[] = { - { &gDekuPalaceGuardStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuPalaceGuardStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPalaceGuardWaitAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPalaceGuardAttackAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPalaceGuardDigAnim, 1.0f, -1, -1, ANIMMODE_ONCE, 0 }, - { &gDekuPalaceGuardDigAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPalaceGuardJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPalaceGuardWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gDekuPalaceGuardWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPalaceGuardHappyAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_hintnuts_Anim_000168, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_hintnuts_Anim_0024CC, 1.0f, -1, -1, ANIMMODE_ONCE, 0 }, - { &object_hintnuts_Anim_0024CC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_hintnuts_Anim_0026C4, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_hintnuts_Anim_002894, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_hintnuts_Anim_002B90, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_hintnuts_Anim_002F7C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_hintnuts_Anim_002F7C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_hintnuts_Anim_003128, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_hintnuts_Anim_003128, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_hintnuts_Anim_0029BC, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_hintnuts_Anim_002E84, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuScrubSpitAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuScrubDamageAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuScrubDieAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuScrubUnburrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuScrubLookAroundAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuScrubUpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuScrubIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gDekuScrubIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuScrubPantingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuScrubRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gDekuScrubRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuScrubStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, +typedef enum { + /* -1 */ ENDNK_ANIM_NONE = -1, + /* 0 */ ENDNK_ANIM_0, + /* 1 */ ENDNK_ANIM_1, + /* 2 */ ENDNK_ANIM_2, + /* 3 */ ENDNK_ANIM_3, + /* 4 */ ENDNK_ANIM_4, + /* 5 */ ENDNK_ANIM_5, + /* 6 */ ENDNK_ANIM_6, + /* 7 */ ENDNK_ANIM_7, + /* 8 */ ENDNK_ANIM_8, + /* 9 */ ENDNK_ANIM_9, + /* 10 */ ENDNK_ANIM_10, + /* 11 */ ENDNK_ANIM_11, + /* 12 */ ENDNK_ANIM_12, + /* 13 */ ENDNK_ANIM_13, + /* 14 */ ENDNK_ANIM_14, + /* 15 */ ENDNK_ANIM_15, + /* 16 */ ENDNK_ANIM_16, + /* 17 */ ENDNK_ANIM_17, + /* 18 */ ENDNK_ANIM_18, + /* 19 */ ENDNK_ANIM_19, + /* 20 */ ENDNK_ANIM_20, + /* 21 */ ENDNK_ANIM_21, + /* 22 */ ENDNK_ANIM_22, + /* 23 */ ENDNK_ANIM_23, + /* 24 */ ENDNK_ANIM_24, + /* 25 */ ENDNK_ANIM_25, + /* 26 */ ENDNK_ANIM_26, + /* 27 */ ENDNK_ANIM_27, + /* 28 */ ENDNK_ANIM_28, + /* 29 */ ENDNK_ANIM_29, + /* 30 */ ENDNK_ANIM_30, + /* 31 */ ENDNK_ANIM_31, + /* 32 */ ENDNK_ANIM_32, + /* 33 */ ENDNK_ANIM_33, + /* 34 */ ENDNK_ANIM_34, + /* 35 */ ENDNK_ANIM_35, + /* 36 */ ENDNK_ANIM_MAX +} EnDnkAnimation; + +static AnimationInfoS sAnimationInfo[ENDNK_ANIM_MAX] = { + { &gDekuPalaceGuardStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENDNK_ANIM_0 + { &gDekuPalaceGuardStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_1 + { &gDekuPalaceGuardWaitAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_2 + { &gDekuPalaceGuardAttackAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_3 + { &gDekuPalaceGuardDigAnim, 1.0f, -1, -1, ANIMMODE_ONCE, 0 }, // ENDNK_ANIM_4 + { &gDekuPalaceGuardDigAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_5 + { &gDekuPalaceGuardJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_6 + { &gDekuPalaceGuardWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNK_ANIM_7 + { &gDekuPalaceGuardWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_8 + { &gDekuPalaceGuardHappyAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_9 + { &object_hintnuts_Anim_000168, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_10 + { &object_hintnuts_Anim_0024CC, 1.0f, -1, -1, ANIMMODE_ONCE, 0 }, // ENDNK_ANIM_11 + { &object_hintnuts_Anim_0024CC, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_12 + { &object_hintnuts_Anim_0026C4, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_13 + { &object_hintnuts_Anim_002894, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_14 + { &object_hintnuts_Anim_002B90, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_15 + { &object_hintnuts_Anim_002F7C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNK_ANIM_16 + { &object_hintnuts_Anim_002F7C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_17 + { &object_hintnuts_Anim_003128, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNK_ANIM_18 + { &object_hintnuts_Anim_003128, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_19 + { &object_hintnuts_Anim_0029BC, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_20 + { &object_hintnuts_Anim_002E84, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_21 + { &gDekuScrubSpitAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_22 + { &gDekuScrubDamageAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_23 + { &gDekuScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENDNK_ANIM_24 + { &gDekuScrubBurrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_25 + { &gDekuScrubDieAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_26 + { &gDekuScrubUnburrowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_27 + { &gDekuScrubLookAroundAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_28 + { &gDekuScrubUpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // ENDNK_ANIM_29 + { &gDekuScrubIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNK_ANIM_30 + { &gDekuScrubIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_31 + { &gDekuScrubPantingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_32 + { &gDekuScrubRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNK_ANIM_33 + { &gDekuScrubRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // ENDNK_ANIM_34 + { &gDekuScrubStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENDNK_ANIM_35 }; -s32 func_80A514F0(SkelAnime* skelAnime, s16 animIndex) { - s16 frame; - s16 frameCount; - s32 sp30 = false; +s32 EnDnk_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) { + s16 startFrame; + s16 endFrame; + s32 didAnimChange = false; if (animIndex >= 0) { if (animIndex < ARRAY_COUNT(sAnimationInfo)) { - sp30 = true; - frameCount = sAnimationInfo[animIndex].frameCount; - if (frameCount < 0) { - frameCount = Animation_GetLastFrame(sAnimationInfo[animIndex].animation); + didAnimChange = true; + endFrame = sAnimationInfo[animIndex].frameCount; + if (endFrame < 0) { + endFrame = Animation_GetLastFrame(sAnimationInfo[animIndex].animation); } - frame = sAnimationInfo[animIndex].startFrame; - if (frame < 0) { - frame = frameCount; + startFrame = sAnimationInfo[animIndex].startFrame; + if (startFrame < 0) { + startFrame = endFrame; } - Animation_Change(skelAnime, sAnimationInfo[animIndex].animation, sAnimationInfo[animIndex].playSpeed, frame, - frameCount, sAnimationInfo[animIndex].mode, sAnimationInfo[animIndex].morphFrames); + Animation_Change(skelAnime, sAnimationInfo[animIndex].animation, sAnimationInfo[animIndex].playSpeed, + startFrame, endFrame, sAnimationInfo[animIndex].mode, + sAnimationInfo[animIndex].morphFrames); } } - return sp30; + return didAnimChange; } s32 func_80A515C4(EnDnk* this) { @@ -180,19 +219,19 @@ void func_80A51648(EnDnk* this, PlayState* play) { case ENDNK_GET_3_0: SkelAnime_Init(play, &this->skelAnime, &gDekuPalaceGuardSkel, NULL, this->jointTable, this->morphTable, DEKU_PALACE_GUARD_LIMB_MAX); - func_80A514F0(&this->skelAnime, 7); + EnDnk_ChangeAnim(&this->skelAnime, ENDNK_ANIM_7); break; case ENDNK_GET_3_1: SkelAnime_Init(play, &this->skelAnime, &object_hintnuts_Skel_0023B8.sh, NULL, this->jointTable, - this->morphTable, 10); - func_80A514F0(&this->skelAnime, 18); + this->morphTable, OBJECT_HINTNUTS_LIMB_MAX); + EnDnk_ChangeAnim(&this->skelAnime, ENDNK_ANIM_18); break; case ENDNK_GET_3_2: SkelAnime_Init(play, &this->skelAnime, &gDekuScrubSkel, NULL, this->jointTable, this->morphTable, DEKU_SCRUB_LIMB_MAX); - func_80A514F0(&this->skelAnime, 35); + EnDnk_ChangeAnim(&this->skelAnime, ENDNK_ANIM_35); break; } @@ -202,7 +241,7 @@ void func_80A51648(EnDnk* this, PlayState* play) { if (ENDNK_GET_3C(&this->actor) == 4) { this->actor.flags &= ~ACTOR_FLAG_1; this->actor.flags |= (ACTOR_FLAG_10 | ACTOR_FLAG_20); - this->actionFunc = func_80A51890; + this->actionFunc = EnDnk_HandleCutscene; Actor_SetScale(&this->actor, 0.1f); } else { this->actor.flags &= ~ACTOR_FLAG_1; @@ -212,7 +251,7 @@ void func_80A51648(EnDnk* this, PlayState* play) { } } -void func_80A51890(EnDnk* this, PlayState* play) { +void EnDnk_HandleCutscene(EnDnk* this, PlayState* play) { if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_126)) { Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_126)); } @@ -284,7 +323,7 @@ void func_80A51AA4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto Vec3f sp44; Vec3s sp3C; - if (limbIndex == 2) { + if (limbIndex == DEKU_PALACE_GUARD_LIMB_HEAD) { Matrix_MultVec3f(&sp50, &sp44); Matrix_Get(&sp5C); Matrix_MtxFToYXZRot(&sp5C, &sp3C, false); @@ -360,7 +399,9 @@ void func_80A51DA4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto Vec3f sp44; Vec3s sp3C; - if (limbIndex == 2) { + // Note: Also for `limbIndex == OBJECT_HINTNUTS_LIMB_02` + // Assumes `OBJECT_HINTNUTS_LIMB_02` is the same value as `DEKU_SCRUB_LIMB_HEAD` + if (limbIndex == DEKU_SCRUB_LIMB_HEAD) { Matrix_MultVec3f(&sp50, &sp44); Matrix_Get(&sp5C); Matrix_MtxFToYXZRot(&sp5C, &sp3C, false); @@ -419,6 +460,9 @@ void func_80A52018(Actor* thisx, PlayState* play) { case ENDNK_GET_3_2: func_80A51FC0(this, play); break; + + default: + break; } } @@ -439,6 +483,9 @@ void func_80A52074(EnDnk* this, PlayState* play) { case 493: Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_APPEAR); break; + + default: + break; } if ((play->csCtx.curFrame >= 198) && (play->csCtx.curFrame < 438)) { diff --git a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h index 57467b3f18..ba870d67b2 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h @@ -2,6 +2,9 @@ #define Z_EN_DNK_H #include "global.h" +#include "objects/object_dnk/object_dnk.h" +#include "objects/object_hintnuts/object_hintnuts.h" +#include "objects/object_dekunuts/object_dekunuts.h" struct EnDnk; @@ -18,15 +21,17 @@ typedef enum { /* 4 */ ENDNK_GET_3_4 } EnDnkParam; +#define DNK_LIMB_MAX MAX(MAX((s32)DEKU_PALACE_GUARD_LIMB_MAX, (s32)OBJECT_HINTNUTS_LIMB_MAX), (s32)DEKU_SCRUB_LIMB_MAX) + typedef struct EnDnk { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ EnDnkActionFunc actionFunc; /* 0x18C */ UNK_TYPE1 unk_18C[0x4]; /* 0x190 */ ColliderCylinder collider; - /* 0x1DC */ Vec3s jointTable[11]; - /* 0x21E */ Vec3s morphTable[11]; - /* 0x260 */ Gfx* unk_260[11]; + /* 0x1DC */ Vec3s jointTable[DNK_LIMB_MAX]; + /* 0x21E */ Vec3s morphTable[DNK_LIMB_MAX]; + /* 0x260 */ Gfx* unk_260[DEKU_PALACE_GUARD_LIMB_MAX]; /* 0x28C */ u16 unk_28C; /* 0x28E */ s8 unk_28E; /* 0x290 */ s16 unk_290; diff --git a/src/overlays/actors/ovl_En_Dno/z_en_dno.c b/src/overlays/actors/ovl_En_Dno/z_en_dno.c index bfe4c7e161..d31d6c02f9 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -44,6 +44,7 @@ s32 EnDno_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p void EnDno_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx); typedef enum { + /* -1 */ EN_DNO_ANIM_NONE = -1, /* 0 */ EN_DNO_ANIM_START_RACE_START, /* 1 */ EN_DNO_ANIM_START_RACE_END, /* 2 */ EN_DNO_ANIM_FLY, @@ -63,30 +64,31 @@ typedef enum { /* 16 */ EN_DNO_ANIM_IMPLORE_START, /* 17 */ EN_DNO_ANIM_SHOCK_START, /* 18 */ EN_DNO_ANIM_SHOCK_LOOP, - /* 19 */ EN_DNO_ANIM_GRIEVE + /* 19 */ EN_DNO_ANIM_GRIEVE, + /* 20 */ EN_DNO_ANIM_MAX } EnDnoAnimation; -static AnimationSpeedInfo sAnimations[] = { - { &gDekuButlerStartRaceStartAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerStartRaceEndAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerFlyAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, - { &gDekuButlerFarewellAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerGreetingAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerGreetingWithCandleAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerPrayerLoopAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, - { &gDekuButlerCloseParasolAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerOpenParasolAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerImploreLoopAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, - { &gDekuButlerImploreEndAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerTalkAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, - { &gDekuButlerTalkWithParasolAndCandleAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, - { &gDekuButlerIdleAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, - { &gDekuButlerIdleWithCandleAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, - { &gDekuButlerPrayerStartAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerImploreStartAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerShockStartAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, - { &gDekuButlerShockLoopAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, - { &gDekuButlerGrieveAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, +static AnimationSpeedInfo sAnimationSpeedInfo[EN_DNO_ANIM_MAX] = { + { &gDekuButlerStartRaceStartAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_START_RACE_START + { &gDekuButlerStartRaceEndAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_START_RACE_END + { &gDekuButlerFlyAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_FLY + { &gDekuButlerFarewellAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_FAREWELL + { &gDekuButlerGreetingAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_GREETING + { &gDekuButlerGreetingWithCandleAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_GREETING_WITH_CANDLE + { &gDekuButlerPrayerLoopAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_PRAYER_LOOP + { &gDekuButlerCloseParasolAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_CLOSE_PARASOL + { &gDekuButlerOpenParasolAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_OPEN_PARASOL + { &gDekuButlerImploreLoopAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_IMPLORE_LOOP + { &gDekuButlerImploreEndAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_IMPLORE_END + { &gDekuButlerTalkAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_TALK + { &gDekuButlerTalkWithParasolAndCandleAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_TALK_WITH_PARSOL_AND_CANDLE + { &gDekuButlerIdleAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_IDLE + { &gDekuButlerIdleWithCandleAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_IDLE_WITH_CANDLE + { &gDekuButlerPrayerStartAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_PRAYER_START + { &gDekuButlerImploreStartAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_IMPLORE_START + { &gDekuButlerShockStartAnim, 1.0f, ANIMMODE_ONCE, 0.0f }, // EN_DNO_ANIM_SHOCK_START + { &gDekuButlerShockLoopAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_SHOCK_LOOP + { &gDekuButlerGrieveAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, // EN_DNO_ANIM_GRIEVE }; ActorInit En_Dno_InitVars = { @@ -236,10 +238,10 @@ void EnDno_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, thisx, &sCylinderInit); Actor_UpdateBgCheckInfo(play, thisx, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); - Animation_Change(&this->skelAnime, sAnimations[EN_DNO_ANIM_IDLE_WITH_CANDLE].animation, 1.0f, 0.0f, - Animation_GetLastFrame(sAnimations[EN_DNO_ANIM_IDLE_WITH_CANDLE].animation), - sAnimations[EN_DNO_ANIM_IDLE_WITH_CANDLE].mode, - sAnimations[EN_DNO_ANIM_IDLE_WITH_CANDLE].morphFrames); + Animation_Change(&this->skelAnime, sAnimationSpeedInfo[EN_DNO_ANIM_IDLE_WITH_CANDLE].animation, 1.0f, 0.0f, + Animation_GetLastFrame(sAnimationSpeedInfo[EN_DNO_ANIM_IDLE_WITH_CANDLE].animation), + sAnimationSpeedInfo[EN_DNO_ANIM_IDLE_WITH_CANDLE].mode, + sAnimationSpeedInfo[EN_DNO_ANIM_IDLE_WITH_CANDLE].morphFrames); this->unk_3BE = 0x3E93; this->unk_3C0 = 60.0f; this->unk_3B0 = 0; @@ -252,8 +254,8 @@ void EnDno_Init(Actor* thisx, PlayState* play) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20) || CHECK_WEEKEVENTREG(WEEKEVENTREG_93_02)) { Actor_Kill(thisx); } else { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE_WITH_CANDLE, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + EN_DNO_ANIM_IDLE_WITH_CANDLE, &this->animIndex); thisx->room = -1; gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP; this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo); @@ -267,7 +269,7 @@ void EnDno_Init(Actor* thisx, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { Actor_Kill(thisx); } else { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE, &this->animIndex); this->unk_460 = SubS_FindActor(play, NULL, ACTORCAT_NPC, ACTOR_EN_DNQ); if (this->unk_460 == NULL) { @@ -296,7 +298,7 @@ void EnDno_Destroy(Actor* thisx, PlayState* play) { void func_80A71B04(EnDno* this, PlayState* play) { this->unk_452 = 0; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_GRIEVE, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_GRIEVE, &this->animIndex); this->actionFunc = EnDno_DoNothing; } @@ -309,15 +311,15 @@ void func_80A71B68(EnDno* this, PlayState* play) { if (CHECK_QUEST_ITEM(QUEST_SONG_SONATA)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_27_01)) { if (!(this->unk_3B0 & 0x20)) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_PRAYER_LOOP, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_PRAYER_LOOP, &this->animIndex); this->actor.shape.rot.y = Actor_WorldYawTowardActor(&this->actor, this->unk_460); } } else { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE, &this->animIndex); } } else { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE, &this->animIndex); } this->actionFunc = func_80A71C3C; } @@ -326,23 +328,26 @@ void func_80A71C3C(EnDno* this, PlayState* play) { switch (this->animIndex) { case EN_DNO_ANIM_IMPLORE_LOOP: case EN_DNO_ANIM_IMPLORE_START: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IMPLORE_END, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IMPLORE_END, + &this->animIndex); break; case EN_DNO_ANIM_FAREWELL: case EN_DNO_ANIM_IMPLORE_END: if (this->skelAnime.curFrame == this->skelAnime.endFrame) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE, + &this->animIndex); } break; case EN_DNO_ANIM_TALK: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_PRAYER_START, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_PRAYER_START, + &this->animIndex); break; case EN_DNO_ANIM_PRAYER_START: if (this->skelAnime.curFrame == this->skelAnime.endFrame) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_PRAYER_LOOP, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_PRAYER_LOOP, &this->animIndex); } @@ -350,6 +355,9 @@ void func_80A71C3C(EnDno* this, PlayState* play) { Math_SmoothStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardActor(&this->actor, this->unk_460), 2, 0xE38, 0x222); break; + + default: + break; } if ((this->animIndex == EN_DNO_ANIM_IDLE) && (this->actor.xzDistToPlayer <= 120.0f)) { @@ -404,8 +412,8 @@ void func_80A71F18(EnDno* this, PlayState* play) { Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xE38)) { switch (this->textId) { case 0x80B: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IMPLORE_START, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + EN_DNO_ANIM_IMPLORE_START, &this->animIndex); case 0x811: Message_StartTextbox(play, this->textId, &this->actor); @@ -414,15 +422,18 @@ void func_80A71F18(EnDno* this, PlayState* play) { case 0x80C: case 0x80F: if (this->animIndex == EN_DNO_ANIM_IDLE) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_GREETING, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_GREETING, &this->animIndex); } else if ((this->animIndex == EN_DNO_ANIM_GREETING) && (this->skelAnime.curFrame == this->skelAnime.endFrame)) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_TALK, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_TALK, &this->animIndex); Message_StartTextbox(play, this->textId, &this->actor); } break; + + default: + break; } } break; @@ -432,8 +443,8 @@ void func_80A71F18(EnDno* this, PlayState* play) { switch (this->animIndex) { case EN_DNO_ANIM_IMPLORE_START: if (this->skelAnime.curFrame == this->skelAnime.endFrame) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IMPLORE_LOOP, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + EN_DNO_ANIM_IMPLORE_LOOP, &this->animIndex); } Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardActor(&this->actor, this->unk_460), 0x71C); @@ -442,11 +453,14 @@ void func_80A71F18(EnDno* this, PlayState* play) { case EN_DNO_ANIM_IMPLORE_END: if (this->skelAnime.curFrame == this->skelAnime.endFrame) { Message_CloseTextbox(play); - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE, &this->animIndex); func_80A71B68(this, play); } break; + + default: + break; } } break; @@ -459,15 +473,15 @@ void func_80A71F18(EnDno* this, PlayState* play) { switch (this->animIndex) { case EN_DNO_ANIM_IMPLORE_START: if (this->skelAnime.curFrame == this->skelAnime.endFrame) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IMPLORE_LOOP, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + EN_DNO_ANIM_IMPLORE_LOOP, &this->animIndex); } break; case EN_DNO_ANIM_IMPLORE_LOOP: if (Message_ShouldAdvance(play)) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IMPLORE_END, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + EN_DNO_ANIM_IMPLORE_END, &this->animIndex); play->msgCtx.msgMode = 0x44; } break; @@ -475,11 +489,14 @@ void func_80A71F18(EnDno* this, PlayState* play) { case EN_DNO_ANIM_IMPLORE_END: if (this->skelAnime.curFrame == this->skelAnime.endFrame) { Message_CloseTextbox(play); - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE, &this->animIndex); func_80A71B68(this, play); } break; + + default: + break; } break; @@ -497,11 +514,11 @@ void func_80A71F18(EnDno* this, PlayState* play) { case 0x80E: if (this->animIndex == EN_DNO_ANIM_TALK) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_FAREWELL, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_FAREWELL, &this->animIndex); } else if (this->animIndex == EN_DNO_ANIM_FAREWELL) { if (this->skelAnime.curFrame == this->skelAnime.endFrame) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE, &this->animIndex); } } else if ((this->animIndex == EN_DNO_ANIM_IDLE) && Message_ShouldAdvance(play)) { @@ -526,16 +543,19 @@ void func_80A71F18(EnDno* this, PlayState* play) { switch (this->animIndex) { case EN_DNO_ANIM_TALK: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_PRAYER_START, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + EN_DNO_ANIM_PRAYER_START, &this->animIndex); break; case EN_DNO_ANIM_PRAYER_START: if (this->skelAnime.curFrame == this->skelAnime.endFrame) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_PRAYER_LOOP, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + EN_DNO_ANIM_PRAYER_LOOP, &this->animIndex); } break; + + default: + break; } break; @@ -545,6 +565,9 @@ void func_80A71F18(EnDno* this, PlayState* play) { func_80A71B68(this, play); } break; + + default: + break; } break; } @@ -552,7 +575,8 @@ void func_80A71F18(EnDno* this, PlayState* play) { void func_80A72438(EnDno* this, PlayState* play) { this->unk_452 = 1; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE_WITH_CANDLE, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE_WITH_CANDLE, + &this->animIndex); this->actor.textId = 0; if (Flags_GetSwitch(play, EN_DNO_GET_RACE_STARTED_SWITCH_FLAG(&this->actor))) { this->unk_454 = 1.0f; @@ -599,7 +623,7 @@ void func_80A725F8(EnDno* this, PlayState* play) { case 0: if (this->animIndex == EN_DNO_ANIM_IDLE_WITH_CANDLE) { if (Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x2D8)) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_GREETING_WITH_CANDLE, &this->animIndex); } } else if ((this->animIndex == EN_DNO_ANIM_GREETING_WITH_CANDLE) && @@ -611,8 +635,8 @@ void func_80A725F8(EnDno* this, PlayState* play) { } else { Message_StartTextbox(play, 0x800, &this->actor); } - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE_WITH_CANDLE, - &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, + EN_DNO_ANIM_IDLE_WITH_CANDLE, &this->animIndex); } break; @@ -626,6 +650,9 @@ void func_80A725F8(EnDno* this, PlayState* play) { case 3: Message_StartTextbox(play, 0x804, &this->actor); break; + + default: + break; } break; @@ -647,7 +674,7 @@ void func_80A725F8(EnDno* this, PlayState* play) { } if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_TALK_WITH_PARSOL_AND_CANDLE, &this->animIndex); Message_StartTextbox(play, 0x803, &this->actor); } @@ -664,7 +691,7 @@ void func_80A725F8(EnDno* this, PlayState* play) { play->msgCtx.msgMode = 0x44; this->unk_452 = 1; this->unk_454 = 0.0f; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_OPEN_PARASOL, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_OPEN_PARASOL, &this->animIndex); } break; @@ -691,7 +718,7 @@ void func_80A725F8(EnDno* this, PlayState* play) { case 0x804: if (this->animIndex == EN_DNO_ANIM_IDLE_WITH_CANDLE) { if (Message_ShouldAdvance(play)) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_GREETING_WITH_CANDLE, &this->animIndex); if (!(this->unk_3B0 & 0x40)) { func_80A72CF8(this, play); @@ -720,7 +747,8 @@ void func_80A725F8(EnDno* this, PlayState* play) { } void func_80A72AE4(EnDno* this, PlayState* play) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_START_RACE_START, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_START_RACE_START, + &this->animIndex); func_80A714B4(this, play); this->actionFunc = func_80A72B3C; } @@ -747,7 +775,8 @@ void func_80A72BA4(EnDno* this, PlayState* play) { } void func_80A72C04(EnDno* this, PlayState* play) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_START_RACE_START, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_START_RACE_START, + &this->animIndex); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; this->actor.flags &= ~(ACTOR_FLAG_1 | ACTOR_FLAG_8); Math_Vec3f_Copy(&this->unk_334, &this->actor.world.pos); @@ -826,26 +855,29 @@ s32 EnDno_ActorPathing_Move(PlayState* play, ActorPathing* actorPath) { } void func_80A730A0(EnDno* this, PlayState* play) { - s32 phi_a2; + s32 nextAnimIndex; if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - phi_a2 = -1; + nextAnimIndex = EN_DNO_ANIM_NONE; switch (this->animIndex) { case EN_DNO_ANIM_START_RACE_START: if (this->unk_44E >= 20) { - phi_a2 = EN_DNO_ANIM_START_RACE_END; + nextAnimIndex = EN_DNO_ANIM_START_RACE_END; } else { this->unk_44E = 20; } break; case EN_DNO_ANIM_START_RACE_END: - phi_a2 = EN_DNO_ANIM_FLY; + nextAnimIndex = EN_DNO_ANIM_FLY; + break; + + default: break; } - if (phi_a2 >= 0) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, phi_a2, &this->animIndex); + if (nextAnimIndex > EN_DNO_ANIM_NONE) { + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, nextAnimIndex, &this->animIndex); } } @@ -891,11 +923,12 @@ void func_80A732C8(EnDno* this, PlayState* play) { if (Math_ScaledStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 0x71C)) { this->unk_3B0 |= 4; this->unk_44E = 3; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_CLOSE_PARASOL, &this->animIndex); + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_CLOSE_PARASOL, + &this->animIndex); } } else if (this->unk_44E == 3) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_IDLE_WITH_CANDLE, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_IDLE_WITH_CANDLE, &this->animIndex); func_80A72438(this, play); } else { @@ -915,8 +948,8 @@ void func_80A732C8(EnDno* this, PlayState* play) { } void func_80A73408(EnDno* this, PlayState* play) { - s32 phi_a2; - u8 sp33 = true; + s32 nextAnimIndex; + u8 changeAnim = true; s32 cueChannel; if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_475)) { @@ -924,21 +957,21 @@ void func_80A73408(EnDno* this, PlayState* play) { if (this->cueId != play->csCtx.actorCues[cueChannel]->id) { switch (play->csCtx.actorCues[cueChannel]->id) { case 1: - phi_a2 = 13; + nextAnimIndex = EN_DNO_ANIM_IDLE; break; case 2: - phi_a2 = 17; + nextAnimIndex = EN_DNO_ANIM_SHOCK_START; break; default: - phi_a2 = 0; - sp33 = false; + nextAnimIndex = EN_DNO_ANIM_START_RACE_START; + changeAnim = false; break; } - if (sp33) { - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, phi_a2, &this->animIndex); + if (changeAnim) { + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, nextAnimIndex, &this->animIndex); } } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); @@ -947,7 +980,7 @@ void func_80A73408(EnDno* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { switch (this->animIndex) { case EN_DNO_ANIM_SHOCK_START: - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_SHOCK_LOOP, + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimationSpeedInfo, EN_DNO_ANIM_SHOCK_LOOP, &this->animIndex); break; @@ -983,7 +1016,7 @@ s32 EnDno_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p EnDno* this = THIS; *dList = NULL; - if (limbIndex == 9) { + if (limbIndex == DEKU_BUTLER_LIMB_EYES) { rot->x += this->unk_466; } return false; @@ -1001,36 +1034,47 @@ void EnDno_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, if (*dList != NULL) { switch (this->unk_452) { case 0: - if ((limbIndex != 25) && (limbIndex != 26) && (limbIndex != 13) && (limbIndex != 15) && - (limbIndex != 16) && (limbIndex != 14)) { + if ((limbIndex != DEKU_BUTLER_LIMB_CANDLE) && (limbIndex != DEKU_BUTLER_LIMB_CANDLE_WICK) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_HANDLE) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_LOWER_PETALS) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_MIDDLE_PETALS) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_UPPER_PETALS)) { phi_v0 = true; } break; case 1: - if ((limbIndex != 26) && (limbIndex != 13) && (limbIndex != 15) && (limbIndex != 16) && - (limbIndex != 14)) { + if ((limbIndex != DEKU_BUTLER_LIMB_CANDLE_WICK) && (limbIndex != DEKU_BUTLER_LIMB_PARASOL_HANDLE) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_LOWER_PETALS) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_MIDDLE_PETALS) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_UPPER_PETALS)) { phi_v0 = true; } break; case 2: - if ((limbIndex != 15) && (limbIndex != 16)) { + if ((limbIndex != DEKU_BUTLER_LIMB_PARASOL_LOWER_PETALS) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_MIDDLE_PETALS)) { phi_v0 = true; } break; case 3: - if ((limbIndex != 16) && (limbIndex != 14)) { + if ((limbIndex != DEKU_BUTLER_LIMB_PARASOL_MIDDLE_PETALS) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_UPPER_PETALS)) { phi_v0 = true; } break; case 4: - if ((limbIndex != 15) && (limbIndex != 14)) { + if ((limbIndex != DEKU_BUTLER_LIMB_PARASOL_LOWER_PETALS) && + (limbIndex != DEKU_BUTLER_LIMB_PARASOL_UPPER_PETALS)) { phi_v0 = true; } break; + + default: + break; } } @@ -1038,7 +1082,7 @@ void EnDno_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx); - if (limbIndex == 13) { + if (limbIndex == DEKU_BUTLER_LIMB_PARASOL_HANDLE) { Matrix_Scale(this->unk_454, this->unk_454, this->unk_454, MTXMODE_APPLY); Matrix_RotateXS(this->unk_45C, MTXMODE_APPLY); } @@ -1051,7 +1095,7 @@ void EnDno_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, CLOSE_DISPS(play->state.gfxCtx); } - if ((this->unk_3B0 & 1) && (limbIndex == 26)) { + if ((this->unk_3B0 & 1) && (limbIndex == DEKU_BUTLER_LIMB_CANDLE_WICK)) { u32 frames; OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c index 0ef492e9c8..82a7bc5f7f 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c @@ -93,36 +93,37 @@ typedef enum { /* 22 */ DEKU_PRINCESS_ANIM_BOUNCE_START, /* 23 */ DEKU_PRINCESS_ANIM_BOUNCE_LOOP, /* 24 */ DEKU_PRINCESS_ANIM_GLARE_START, - /* 25 */ DEKU_PRINCESS_ANIM_GLARE_LOOP -} EnDnpAnimation; + /* 25 */ DEKU_PRINCESS_ANIM_GLARE_LOOP, + /* 26 */ DEKU_PRINCESS_ANIM_MAX +} DekuPrincessAnimation; -static AnimationInfoS sAnimationInfo[] = { - { &gDekuPrincessJumpKickAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPrincessHurryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gDekuPrincessHurryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessHurryEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPrincessScoldAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPrincessLaughStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPrincessLaughLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessTurnAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuPrincessBowAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessThinkStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPrincessThinkLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessArmsTogetherStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPrincessArmsTogetherLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessGreetingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gDekuPrincessIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gDekuPrincessAngryStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPrincessAngryLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuPrincessBounceStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuPrincessBounceLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuPrincessGlareStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuPrincessGlareLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, +static AnimationInfoS sAnimationInfo[DEKU_PRINCESS_ANIM_MAX] = { + { &gDekuPrincessJumpKickAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_PRINCESS_ANIM_JUMP_KICK + { &gDekuPrincessHurryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DEKU_PRINCESS_ANIM_HURRY + { &gDekuPrincessHurryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_CUTSCENE_HURRY + { &gDekuPrincessHurryEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_PRINCESS_ANIM_HURRY_END + { &gDekuPrincessScoldAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_PRINCESS_ANIM_SCOLD + { &gDekuPrincessLaughStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_PRINCESS_ANIM_LAUGH_START + { &gDekuPrincessLaughLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_LAUGH_LOOP + { &gDekuPrincessTurnAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DEKU_PRINCESS_ANIM_TURN_AROUND + { &gDekuPrincessBowAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_BOW + { &gDekuPrincessRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_RUN + { &gDekuPrincessThinkStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_PRINCESS_ANIM_THINK_START + { &gDekuPrincessThinkLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_THINK_LOOP + { &gDekuPrincessArmsTogetherStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_PRINCESS_ANIM_ARMS_TOGETHER_START + { &gDekuPrincessArmsTogetherLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_ARMS_TOGETHER_LOOP + { &gDekuPrincessGreetingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_GREETING + { &gDekuPrincessIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DEKU_PRINCESS_ANIM_IDLE + { &gDekuPrincessIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_CUTSCENE_IDLE + { &gDekuPrincessWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_UNUSED_WALK + { &gDekuPrincessWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DEKU_PRINCESS_ANIM_WALK + { &gDekuPrincessAngryStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_PRINCESS_ANIM_ANGRY_START + { &gDekuPrincessAngryLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_ANGRY_LOOP + { &gDekuPrincessJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_PRINCESS_ANIM_JUMP + { &gDekuPrincessBounceStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DEKU_PRINCESS_ANIM_BOUNCE_START + { &gDekuPrincessBounceLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_BOUNCE_LOOP + { &gDekuPrincessGlareStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DEKU_PRINCESS_ANIM_GLARE_START + { &gDekuPrincessGlareLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_PRINCESS_ANIM_GLARE_LOOP }; static s32 D_80B3DE58[] = { @@ -173,14 +174,14 @@ s32 func_80B3CA20(EnDnp* this) { } s32 EnDnp_ChangeAnim(EnDnp* this, s32 animIndex) { - s32 ret = false; + s32 didAnimChange = false; - if (animIndex != this->animIndex) { + if (this->animIndex != animIndex) { this->animIndex = animIndex; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); } - return ret; + return didAnimChange; } void func_80B3CC80(EnDnp* this, PlayState* play) { @@ -287,7 +288,7 @@ s32 func_80B3D044(EnDnp* this, PlayState* play) { } void func_80B3D11C(EnDnp* this, PlayState* play) { - static s32 sCsAnimations[] = { + static s32 sCsAnimIndex[] = { DEKU_PRINCESS_ANIM_JUMP_KICK, DEKU_PRINCESS_ANIM_CUTSCENE_IDLE, DEKU_PRINCESS_ANIM_GREETING, DEKU_PRINCESS_ANIM_THINK_START, DEKU_PRINCESS_ANIM_WALK, DEKU_PRINCESS_ANIM_ARMS_TOGETHER_START, DEKU_PRINCESS_ANIM_LAUGH_START, DEKU_PRINCESS_ANIM_TURN_AROUND, DEKU_PRINCESS_ANIM_CUTSCENE_HURRY, @@ -306,7 +307,7 @@ void func_80B3D11C(EnDnp* this, PlayState* play) { cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_101); cueId = play->csCtx.actorCues[cueChannel]->id; if (this->cueId != (u8)cueId) { - EnDnp_ChangeAnim(this, sCsAnimations[cueId]); + EnDnp_ChangeAnim(this, sCsAnimIndex[cueId]); if (this->animIndex == DEKU_PRINCESS_ANIM_CUTSCENE_IDLE) { this->unk_322 |= 8; } else { diff --git a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c index 4e47902f7f..b84545f12e 100644 --- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c +++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c @@ -59,27 +59,52 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 1, 0, 0, 0, MASS_IMMOVABLE }; -static AnimationInfoS sAnimationInfo[] = { - { &gDekuKingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gDekuKingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuKingSurpriseAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuKingJumpedOnStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuKingJumpedOnLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuKingJumpedOnEndAnim, 0.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuKingJumpedOnEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuKingLyingDownTwitchAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuKingWailLoopAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuKingFootStampStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuKingFootStampLoopAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuKingWailStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuKingMarchAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuKingSpinScepterAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gDekuKingIntimidateAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuKingPointScepterAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuKingJumpAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuKingLaughAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &gDekuKingFootStampLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gDekuKingLaughAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, +typedef enum { + /* -1 */ DEKU_KING_ANIM_NONE = -1, + /* 0 */ DEKU_KING_ANIM_IDLE, + /* 1 */ DEKU_KING_ANIM_IDLE_MORPH, + /* 2 */ DEKU_KING_ANIM_SURPRISE, + /* 3 */ DEKU_KING_ANIM_JUMPED_ON_START, + /* 4 */ DEKU_KING_ANIM_JUMPED_ON_LOOP, + /* 5 */ DEKU_KING_ANIM_JUMPED_ON_END, + /* 6 */ DEKU_KING_ANIM_JUMPED_ON_END_MORPH, + /* 7 */ DEKU_KING_ANIM_LYING_DOWN_TWITCH, + /* 8 */ DEKU_KING_ANIM_WAIL, + /* 9 */ DEKU_KING_ANIM_FOOT_STAMP_START, + /* 10 */ DEKU_KING_ANIM_FOOT_STAMP_ONCE, + /* 11 */ DEKU_KING_ANIM_WAIL_START, + /* 12 */ DEKU_KING_ANIM_MARCH, + /* 13 */ DEKU_KING_ANIM_SPIN_SCEPTER, + /* 14 */ DEKU_KING_ANIM_INTIMIDATE, + /* 15 */ DEKU_KING_ANIM_POINT_SCEPTER, + /* 16 */ DEKU_KING_ANIM_JUMP, + /* 17 */ DEKU_KING_ANIM_LAUGH_ONCE, + /* 18 */ DEKU_KING_ANIM_FOOT_STAMP_LOOP, + /* 19 */ DEKU_KING_ANIM_LAUGH_LOOP, + /* 36 */ ENDNQ_ANIM_MAX +} EnDnkAnimation; + +static AnimationInfoS sAnimationInfo[ENDNQ_ANIM_MAX] = { + { &gDekuKingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DEKU_KING_ANIM_IDLE + { &gDekuKingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_KING_ANIM_IDLE_MORPH + { &gDekuKingSurpriseAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_KING_ANIM_SURPRISE + { &gDekuKingJumpedOnStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DEKU_KING_ANIM_JUMPED_ON_START + { &gDekuKingJumpedOnLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_KING_ANIM_JUMPED_ON_LOOP + { &gDekuKingJumpedOnEndAnim, 0.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DEKU_KING_ANIM_JUMPED_ON_END + { &gDekuKingJumpedOnEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_KING_ANIM_JUMPED_ON_END_MORPH + { &gDekuKingLyingDownTwitchAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_KING_ANIM_LYING_DOWN_TWITCH + { &gDekuKingWailLoopAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_KING_ANIM_WAIL + { &gDekuKingFootStampStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_KING_ANIM_FOOT_STAMP_START + { &gDekuKingFootStampLoopAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_KING_ANIM_FOOT_STAMP_ONCE + { &gDekuKingWailStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_KING_ANIM_WAIL_START + { &gDekuKingMarchAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DEKU_KING_ANIM_MARCH + { &gDekuKingSpinScepterAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DEKU_KING_ANIM_SPIN_SCEPTER + { &gDekuKingIntimidateAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_KING_ANIM_INTIMIDATE + { &gDekuKingPointScepterAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_KING_ANIM_POINT_SCEPTER + { &gDekuKingJumpAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_KING_ANIM_JUMP + { &gDekuKingLaughAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, // DEKU_KING_ANIM_LAUGH_ONCE + { &gDekuKingFootStampLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_KING_ANIM_FOOT_STAMP_LOOP + { &gDekuKingLaughAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DEKU_KING_ANIM_LAUGH_LOOP }; s32 EnDnq_ValidatePictograph(PlayState* play, Actor* thisx) { @@ -87,30 +112,30 @@ s32 EnDnq_ValidatePictograph(PlayState* play, Actor* thisx) { 480.0f, 0x38E3); } -s32 func_80A5257C(EnDnq* this, s32 arg1) { - s32 phi_v1 = false; - s32 ret = false; +s32 EnDnq_ChangeAnim(EnDnq* this, s32 animIndex) { + s32 changeAnim = false; + s32 didAnimChange = false; - if ((arg1 == 0) || (arg1 == 1)) { - switch (this->unk_398) { - case 0: - case 1: + if ((animIndex == DEKU_KING_ANIM_IDLE) || (animIndex == DEKU_KING_ANIM_IDLE_MORPH)) { + switch (this->animIndex) { + case DEKU_KING_ANIM_IDLE: + case DEKU_KING_ANIM_IDLE_MORPH: break; default: - phi_v1 = true; + changeAnim = true; break; } - } else if (arg1 != this->unk_398) { - phi_v1 = true; + } else if (this->animIndex != animIndex) { + changeAnim = true; } - if (phi_v1) { - this->unk_398 = arg1; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1); + if (changeAnim) { + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); } - return ret; + return didAnimChange; } void func_80A52604(EnDnq* this, PlayState* play) { @@ -143,45 +168,48 @@ s32 func_80A52648(EnDnq* this, PlayState* play) { s32 func_80A526F8(EnDnq* this) { if (this->unk_386 == 0) { - func_80A5257C(this, 8); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_WAIL); this->unk_38C = ((s32)(Rand_ZeroOne() * 100.0f) % 4) + 3; this->unk_388 = 0; this->unk_386 = 1; } else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - switch (this->unk_398) { - case 8: + switch (this->animIndex) { + case DEKU_KING_ANIM_WAIL: if (DECR(this->unk_38C) == 0) { - func_80A5257C(this, 9); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_FOOT_STAMP_START); } break; - case 9: - func_80A5257C(this, 10); + case DEKU_KING_ANIM_FOOT_STAMP_START: + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_FOOT_STAMP_ONCE); this->unk_38C = ((s32)(Rand_ZeroOne() * 100.0f) % 3) + 2; break; - case 10: + case DEKU_KING_ANIM_FOOT_STAMP_ONCE: if (DECR(this->unk_38C) == 0) { this->unk_388++; if ((this->unk_38C != 0) || (this->unk_388 < 2)) { - func_80A5257C(this, 11); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_WAIL_START); } else { - func_80A5257C(this, 17); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_LAUGH_ONCE); this->unk_38C = 4; } } break; - case 11: - func_80A5257C(this, 8); + case DEKU_KING_ANIM_WAIL_START: + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_WAIL); this->unk_38C = ((s32)(Rand_ZeroOne() * 100.0f) % 4) + 3; break; - case 17: + case DEKU_KING_ANIM_LAUGH_ONCE: if (DECR(this->unk_38C) == 0) { this->unk_386 = 0; } break; + + default: + break; } if (this->unk_386 != 0) { @@ -197,7 +225,7 @@ s32 func_80A52944(EnDnq* this) { s16 phi_v1 = 0; if (this->unk_386 == 0) { - func_80A5257C(this, 12); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_MARCH); this->unk_38C = 1; this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y; this->unk_386 = 1; @@ -206,7 +234,7 @@ s32 func_80A52944(EnDnq* this) { } else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { this->unk_386++; if (this->unk_386 >= 6) { - func_80A5257C(this, 12); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_MARCH); this->unk_386 = 1; phi_v1 = this->unk_38C * 0x2000; } else if (this->unk_386 <= 3) { @@ -214,7 +242,7 @@ s32 func_80A52944(EnDnq* this) { this->skelAnime.curFrame = 0.0f; phi_v1 = this->unk_38C * 0x2000; } else { - func_80A5257C(this, 13); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_SPIN_SCEPTER); this->skelAnime.curFrame = 0.0f; } this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y; @@ -227,7 +255,8 @@ s32 func_80A52944(EnDnq* this) { s32 func_80A52A78(EnDnq* this, PlayState* play) { static s32 D_80A535DC[] = { - 17, 12, 14, 13, 16, + DEKU_KING_ANIM_LAUGH_ONCE, DEKU_KING_ANIM_MARCH, DEKU_KING_ANIM_INTIMIDATE, + DEKU_KING_ANIM_SPIN_SCEPTER, DEKU_KING_ANIM_JUMP, }; if (this->unk_38A == 0) { @@ -247,7 +276,7 @@ s32 func_80A52A78(EnDnq* this, PlayState* play) { this->unk_388 += 3; this->unk_388 %= 5; } - func_80A5257C(this, D_80A535DC[this->unk_388]); + EnDnq_ChangeAnim(this, D_80A535DC[this->unk_388]); this->skelAnime.curFrame = 0.0f; } @@ -257,36 +286,39 @@ s32 func_80A52A78(EnDnq* this, PlayState* play) { s32 func_80A52B68(EnDnq* this, PlayState* play) { Player* player = GET_PLAYER(play); - u16 temp = play->msgCtx.currentTextId; + u16 textId = play->msgCtx.currentTextId; if ((player->stateFlags1 & PLAYER_STATE1_40) && (player->talkActor == &this->picto.actor)) { - switch (temp) { + switch (textId) { case 0x89B: - func_80A5257C(this, 18); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_FOOT_STAMP_LOOP); break; case 0x89E: - func_80A5257C(this, 19); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_LAUGH_LOOP); break; case 0x898: case 0x89F: - func_80A5257C(this, 16); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_JUMP); break; case 0x899: case 0x89D: - func_80A5257C(this, 14); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_INTIMIDATE); break; case 0x89A: case 0x89C: - func_80A5257C(this, 15); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_POINT_SCEPTER); + break; + + default: break; } this->unk_39C = 1; } else if (this->unk_39C != 0) { - func_80A5257C(this, 0); + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_IDLE); this->unk_39C = 0; this->unk_37E = 0; this->unk_386 = 0; @@ -388,9 +420,11 @@ void func_80A52FB8(EnDnq* this, PlayState* play) { } } -void func_80A53038(EnDnq* this, PlayState* play) { - static s32 D_80A535FC[] = { - 0, 1, 2, 3, 5, 6, +void EnDnq_HandleCutscene(EnDnq* this, PlayState* play) { + static s32 sCsAnimIndex[] = { + DEKU_KING_ANIM_IDLE, DEKU_KING_ANIM_IDLE_MORPH, + DEKU_KING_ANIM_SURPRISE, DEKU_KING_ANIM_JUMPED_ON_START, + DEKU_KING_ANIM_JUMPED_ON_END, DEKU_KING_ANIM_JUMPED_ON_END_MORPH, }; s32 cueChannel; u32 cueId; @@ -399,17 +433,18 @@ void func_80A53038(EnDnq* this, PlayState* play) { cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_105); cueId = play->csCtx.actorCues[cueChannel]->id; if (this->cueId != (u8)cueId) { - func_80A5257C(this, D_80A535FC[cueId]); + EnDnq_ChangeAnim(this, sCsAnimIndex[cueId]); this->cueId = cueId; } - if ((this->unk_398 == 4) && Animation_OnFrame(&this->skelAnime, 2.0f)) { + if ((this->animIndex == DEKU_KING_ANIM_JUMPED_ON_LOOP) && Animation_OnFrame(&this->skelAnime, 2.0f)) { Actor_PlaySfx(&this->picto.actor, NA_SE_EN_KINGNUTS_DAMAGE); } - if (((this->unk_398 == 3) || (this->unk_398 == 6)) && + if (((this->animIndex == DEKU_KING_ANIM_JUMPED_ON_START) || + (this->animIndex == DEKU_KING_ANIM_JUMPED_ON_END_MORPH)) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_80A5257C(this, this->unk_398 + 1); + EnDnq_ChangeAnim(this, this->animIndex + 1); } Cutscene_ActorTranslateAndYaw(&this->picto.actor, play, cueChannel); @@ -422,8 +457,8 @@ void EnDnq_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->picto.actor.shape, 0.0f, NULL, 14.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gDekuKingSkel, NULL, this->jointTable, this->morphTable, DEKU_KING_LIMB_MAX); - this->unk_398 = -1; - func_80A5257C(this, 0); + this->animIndex = DEKU_KING_ANIM_NONE; + EnDnq_ChangeAnim(this, DEKU_KING_ANIM_IDLE); Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->picto.actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); Actor_SetScale(&this->picto.actor, 0.02f); @@ -450,7 +485,7 @@ void EnDnq_Update(Actor* thisx, PlayState* play) { EnDnq* this = THIS; if (!func_80A52D44(this, play) && func_80A52648(this, play)) { - func_80A53038(this, play); + EnDnq_HandleCutscene(this, play); SkelAnime_Update(&this->skelAnime); } else { this->actionFunc(this, play); diff --git a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.h b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.h index 6ede37a556..ddb6616a28 100644 --- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.h +++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.h @@ -29,7 +29,7 @@ typedef struct EnDnq { /* 0x38C */ s16 unk_38C; /* 0x390 */ f32 unk_390; /* 0x394 */ f32 unk_394; - /* 0x398 */ s32 unk_398; + /* 0x398 */ s32 animIndex; /* 0x39C */ s32 unk_39C; /* 0x3A0 */ UNK_TYPE1 unk_3A0[0x4]; /* 0x3A4 */ s32 unk_3A4; diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.c b/src/overlays/actors/ovl_En_Dns/z_en_dns.c index 9d5c6ae489..e04d2bf4d6 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -19,20 +19,6 @@ void func_8092D330(EnDns* this, PlayState* play); void EnDns_DoNothing(EnDns* this, PlayState* play); void func_8092D4D8(EnDns* this, PlayState* play); -typedef enum { - /* 0 */ EN_DNS_ANIM_IDLE_1, - /* 1 */ EN_DNS_ANIM_IDLE_2, - /* 2 */ EN_DNS_ANIM_WALK_1, - /* 3 */ EN_DNS_ANIM_WALK_2, - /* 4 */ EN_DNS_ANIM_SURPRISE_START, - /* 5 */ EN_DNS_ANIM_SURPRISE_LOOP, - /* 6 */ EN_DNS_ANIM_RUN_START, - /* 7 */ EN_DNS_ANIM_RUN_LOOP, - /* 8 */ EN_DNS_ANIM_DANCE, - /* 9 */ EN_DNS_ANIM_FLIP, - /* 10 */ EN_DNS_ANIM_MAX -} EnDnsAnimation; - static s32 D_8092DCB0[] = { 0x00172000, 0x050E082F, 0x0C100E08, 0x200C1000, 0x00172000, 0x050E0830, 0x0C100E08, 0x210C1000, 0x00172000, 0x050E0831, 0x0C100E08, 0x220C1000, 0x00172000, 0x050E0832, 0x0C100E08, 0x230C1000, @@ -73,60 +59,75 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 1, 0, 0, 0, MASS_IMMOVABLE }; -static AnimationInfoS sAnimationInfo[] = { - { &gKingsChamberDekuGuardIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gKingsChamberDekuGuardIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gKingsChamberDekuGuardWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gKingsChamberDekuGuardWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &gKingsChamberDekuGuardSurpriseStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gKingsChamberDekuGuardSurpriseLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gKingsChamberDekuGuardRunStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gKingsChamberDekuGuardRunLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &gKingsChamberDekuGuardDanceAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &gKingsChamberDekuGuardFlipAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, +typedef enum { + /* -1 */ EN_DNS_ANIM_NONE = -1, + /* 0 */ EN_DNS_ANIM_IDLE, + /* 1 */ EN_DNS_ANIM_IDLE_MORPH, + /* 2 */ EN_DNS_ANIM_WALK, + /* 3 */ EN_DNS_ANIM_WALK_MORPH, + /* 4 */ EN_DNS_ANIM_SURPRISE_START, + /* 5 */ EN_DNS_ANIM_SURPRISE_LOOP, + /* 6 */ EN_DNS_ANIM_RUN_START, + /* 7 */ EN_DNS_ANIM_RUN_LOOP, + /* 8 */ EN_DNS_ANIM_DANCE, + /* 9 */ EN_DNS_ANIM_FLIP, + /* 10 */ EN_DNS_ANIM_MAX +} EnDnsAnimation; + +static AnimationInfoS sAnimationInfo[EN_DNS_ANIM_MAX] = { + { &gKingsChamberDekuGuardIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_DNS_ANIM_IDLE + { &gKingsChamberDekuGuardIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // EN_DNS_ANIM_IDLE_MORPH + { &gKingsChamberDekuGuardWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_DNS_ANIM_WALK + { &gKingsChamberDekuGuardWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // EN_DNS_ANIM_WALK_MORPH + { &gKingsChamberDekuGuardSurpriseStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_DNS_ANIM_SURPRISE_START + { &gKingsChamberDekuGuardSurpriseLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_DNS_ANIM_SURPRISE_LOOP + { &gKingsChamberDekuGuardRunStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_DNS_ANIM_RUN_START + { &gKingsChamberDekuGuardRunLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // EN_DNS_ANIM_RUN_LOOP + { &gKingsChamberDekuGuardDanceAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_DNS_ANIM_DANCE + { &gKingsChamberDekuGuardFlipAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // EN_DNS_ANIM_FLIP }; void func_8092C5C0(EnDns* this) { s32 pad; - if (((this->animIndex == EN_DNS_ANIM_WALK_1) || (this->animIndex == EN_DNS_ANIM_WALK_2) || + if (((this->animIndex == EN_DNS_ANIM_WALK) || (this->animIndex == EN_DNS_ANIM_WALK_MORPH) || (this->animIndex == EN_DNS_ANIM_RUN_START) || (this->animIndex == EN_DNS_ANIM_RUN_LOOP)) && (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 3.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK); } } -s32 func_8092C63C(EnDns* this, s32 arg1) { - s32 phi_v1 = false; - s32 ret = false; +s32 EnDns_ChangeAnim(EnDns* this, s32 animIndex) { + s32 changeAnim = false; + s32 didAnimChange = false; - switch (arg1) { - case EN_DNS_ANIM_IDLE_1: - case EN_DNS_ANIM_IDLE_2: - if ((this->animIndex != EN_DNS_ANIM_IDLE_1) && (this->animIndex != EN_DNS_ANIM_IDLE_2)) { - phi_v1 = true; + switch (animIndex) { + case EN_DNS_ANIM_IDLE: + case EN_DNS_ANIM_IDLE_MORPH: + if ((this->animIndex != EN_DNS_ANIM_IDLE) && (this->animIndex != EN_DNS_ANIM_IDLE_MORPH)) { + changeAnim = true; } break; - case EN_DNS_ANIM_WALK_1: - case EN_DNS_ANIM_WALK_2: - if ((this->animIndex != EN_DNS_ANIM_WALK_1) && (this->animIndex != EN_DNS_ANIM_WALK_2)) { - phi_v1 = true; + case EN_DNS_ANIM_WALK: + case EN_DNS_ANIM_WALK_MORPH: + if ((this->animIndex != EN_DNS_ANIM_WALK) && (this->animIndex != EN_DNS_ANIM_WALK_MORPH)) { + changeAnim = true; } break; default: - if (this->animIndex != arg1) { - phi_v1 = true; + if (this->animIndex != animIndex) { + changeAnim = true; } } - if (phi_v1) { - this->animIndex = arg1; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1); + if (changeAnim) { + this->animIndex = animIndex; + didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); } - return ret; + return didAnimChange; } void func_8092C6FC(EnDns* this, PlayState* play) { @@ -200,9 +201,10 @@ s32* func_8092C9BC(EnDns* this, PlayState* play) { case ENDNS_GET_7_3: return &D_8092DCB0[12]; - } - return 0; + default: + return NULL; + } } s32 EnDns_GetCueType(EnDns* this) { @@ -218,9 +220,10 @@ s32 EnDns_GetCueType(EnDns* this) { case ENDNS_GET_7_3: return CS_CMD_ACTOR_CUE_468; - } - return 0; + default: + return 0; + } } s32 func_8092CAD0(EnDns* this, PlayState* play) { @@ -231,10 +234,10 @@ s32 func_8092CAD0(EnDns* this, PlayState* play) { SubS_SetOfferMode(&this->unk_2C6, SUBS_OFFER_MODE_NONE, SUBS_OFFER_MODE_MASK); this->unk_2C6 &= ~0x10; if (ENDNS_GET_4000(&this->actor)) { - this->unk_2F0 = 0.0f; + this->animCurFrame = 0.0f; if (this->unk_2D2 != 0) { - this->unk_2F0 = this->skelAnime.curFrame; - func_8092C63C(this, EN_DNS_ANIM_WALK_1); + this->animCurFrame = this->skelAnime.curFrame; + EnDns_ChangeAnim(this, EN_DNS_ANIM_WALK); } this->unk_2DA = this->actor.world.rot.y; } @@ -305,13 +308,13 @@ s32 func_8092CCEC(EnDns* this, PlayState* play) { s32 func_8092CE38(EnDns* this) { static s32 D_8092DE00[] = { EN_DNS_ANIM_DANCE, EN_DNS_ANIM_DANCE, EN_DNS_ANIM_FLIP }; - s16 frame; + s16 rotVelocity; s32 pad; Vec3f sp2C; s32 ret = false; if ((this->unk_2C6 & 0x200) || Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_8092C63C(this, D_8092DE00[this->unk_2D2]); + EnDns_ChangeAnim(this, D_8092DE00[this->unk_2D2]); this->unk_2C6 &= ~0x200; this->skelAnime.curFrame = 0.0f; if (this->unk_2D2 == 2) { @@ -330,10 +333,10 @@ s32 func_8092CE38(EnDns* this) { this->actor.shape.rot.y = this->actor.world.rot.y; Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_JUMP); } else if (this->skelAnime.curFrame < 13.0f) { - frame = this->skelAnime.curFrame; + rotVelocity = this->skelAnime.curFrame; this->actor.shape.rot.y = this->actor.world.rot.y; - frame *= 2520; - this->actor.shape.rot.y += frame; + rotVelocity *= 0x9D8; + this->actor.shape.rot.y += rotVelocity; this->unk_2E4 -= -(40.0f / 13.0f); } } else { @@ -404,11 +407,11 @@ void func_8092D1B8(EnDns* this, PlayState* play) { Audio_PlaySfx(NA_SE_SY_FOUND); SET_EVENTINF(EVENTINF_15); this->unk_2F4 = func_8092CCEC; - func_8092C63C(this, EN_DNS_ANIM_WALK_1); + EnDns_ChangeAnim(this, EN_DNS_ANIM_WALK); this->actionFunc = EnDns_DoNothing; } else if (CHECK_EVENTINF(EVENTINF_16)) { func_8092CCEC(this, play); - func_8092C63C(this, EN_DNS_ANIM_WALK_1); + EnDns_ChangeAnim(this, EN_DNS_ANIM_WALK); this->actionFunc = func_8092D330; } Math_ApproachS(&this->actor.shape.rot.y, sp22, 3, 0x2AA8); @@ -450,16 +453,16 @@ void func_8092D4D8(EnDns* this, PlayState* play) { if (ENDNS_GET_4000(&this->actor) && (this->unk_2D2 == 0)) { if (func_8092CE38(this)) { - func_8092C63C(this, EN_DNS_ANIM_WALK_1); + EnDns_ChangeAnim(this, EN_DNS_ANIM_WALK); } } else if (func_8010BF58(&this->actor, play, this->unk_1E0, this->unk_2F4, &this->unk_1DC)) { SubS_SetOfferMode(&this->unk_2C6, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK); this->unk_2F4 = NULL; if (ENDNS_GET_4000(&this->actor)) { if (!CHECK_EVENTINF(EVENTINF_15)) { - this->skelAnime.curFrame = this->unk_2F0; + this->skelAnime.curFrame = this->animCurFrame; this->actor.world.rot.y = this->unk_2DA; - func_8092C63C(this, EN_DNS_ANIM_DANCE); + EnDns_ChangeAnim(this, EN_DNS_ANIM_DANCE); } this->unk_2CC = 0; this->unk_2CE = 0; @@ -471,10 +474,10 @@ void func_8092D4D8(EnDns* this, PlayState* play) { } } -void func_8092D5E8(EnDns* this, PlayState* play) { - static s32 D_8092DE0C[] = { - EN_DNS_ANIM_IDLE_1, - EN_DNS_ANIM_IDLE_1, +void EnDns_HandleCutscene(EnDns* this, PlayState* play) { + static s32 sCsAnimIndex[] = { + EN_DNS_ANIM_IDLE, + EN_DNS_ANIM_IDLE, EN_DNS_ANIM_SURPRISE_START, EN_DNS_ANIM_RUN_START, }; @@ -485,13 +488,13 @@ void func_8092D5E8(EnDns* this, PlayState* play) { cueChannel = Cutscene_GetCueChannel(play, this->cueType); cueId = play->csCtx.actorCues[cueChannel]->id; if (this->cueId != (u8)cueId) { - func_8092C63C(this, D_8092DE0C[cueId]); + EnDns_ChangeAnim(this, sCsAnimIndex[cueId]); this->cueId = cueId; } if (((this->animIndex == EN_DNS_ANIM_SURPRISE_START) || (this->animIndex == EN_DNS_ANIM_RUN_START)) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_8092C63C(this, this->animIndex + 1); + EnDns_ChangeAnim(this, this->animIndex + 1); } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); @@ -509,8 +512,8 @@ void EnDns_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 18.0f); SkelAnime_Init(play, &this->skelAnime, &gKingsChamberDekuGuardSkel, NULL, this->jointTable, this->morphTable, KINGS_CHAMBER_DEKU_GUARD_LIMB_MAX); - this->animIndex = -1; - func_8092C63C(this, EN_DNS_ANIM_WALK_1); + this->animIndex = EN_DNS_ANIM_NONE; + EnDns_ChangeAnim(this, EN_DNS_ANIM_WALK); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); Actor_SetScale(&this->actor, 0.01f); @@ -541,7 +544,7 @@ void EnDns_Update(Actor* thisx, PlayState* play) { EnDns* this = THIS; if (!func_8092CAD0(this, play) && func_8092CB98(this, play)) { - func_8092D5E8(this, play); + EnDns_HandleCutscene(this, play); SkelAnime_Update(&this->skelAnime); func_8092C5C0(this); } else { diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.h b/src/overlays/actors/ovl_En_Dns/z_en_dns.h index ade8b61747..5b926f9db8 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.h +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.h @@ -28,7 +28,7 @@ typedef struct EnDns { /* 0x1D8 */ u8 cueId; /* 0x1DC */ s32 unk_1DC; /* 0x1E0 */ s32* unk_1E0; - /* 0x1E4 */ Gfx* unk_1E4[13]; + /* 0x1E4 */ Gfx* unk_1E4[KINGS_CHAMBER_DEKU_GUARD_LIMB_MAX]; /* 0x218 */ Vec3f unk_218; /* 0x224 */ Vec3s unk_224; /* 0x22A */ Vec3s jointTable[KINGS_CHAMBER_DEKU_GUARD_LIMB_MAX]; @@ -50,7 +50,7 @@ typedef struct EnDns { /* 0x2E4 */ f32 unk_2E4; /* 0x2E8 */ UNK_TYPE1 unk_2E8[0x4]; /* 0x2EC */ f32 unk_2EC; - /* 0x2F0 */ f32 unk_2F0; + /* 0x2F0 */ f32 animCurFrame; /* 0x2F4 */ EnDnsFunc unk_2F4; /* 0x2F8 */ s32 animIndex; /* 0x2FC */ s32 unk_2FC; diff --git a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c index 0f0025a4ab..6b141e2819 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c @@ -8,7 +8,6 @@ #include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "overlays/actors/ovl_En_Bombf/z_en_bombf.h" #include "overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.h" -#include "objects/object_dodongo/object_dodongo.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_400) @@ -297,7 +296,7 @@ void EnDodongo_Init(Actor* thisx, PlayState* play) { Math_Vec3f_Copy(&this->unk_314, &gOneVec3f); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 48.0f); SkelAnime_Init(play, &this->skelAnime, &object_dodongo_Skel_008318, &object_dodongo_Anim_004C20, this->jointTable, - this->morphTable, 31); + this->morphTable, OBJECT_DODONGO_LIMB_MAX); CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); Collider_InitAndSetJntSph(play, &this->collider2, &this->actor, &sJntSphInit2, this->collider2Elements); Collider_InitAndSetJntSph(play, &this->collider1, &this->actor, &sJntSphInit1, this->collider1Elements); @@ -803,20 +802,20 @@ void func_80877E60(EnDodongo* this, PlayState* play) { void func_80878354(EnDodongo* this) { s32 pad; - AnimationHeader* sp18; + AnimationHeader* anim; s16 yDiff = this->actor.yawTowardsPlayer - this->actor.shape.rot.y; this->unk_306 = (0xFFFF - ABS_ALT(yDiff)) / 15; if (yDiff >= 0) { - sp18 = &object_dodongo_Anim_0042C4; + anim = &object_dodongo_Anim_0042C4; this->unk_306 = -this->unk_306; } else { - sp18 = &object_dodongo_Anim_003B14; + anim = &object_dodongo_Anim_003B14; } Actor_PlaySfx(&this->actor, NA_SE_EN_DODO_J_TAIL); - Animation_PlayOnceSetSpeed(&this->skelAnime, sp18, 2.0f); + Animation_PlayOnceSetSpeed(&this->skelAnime, anim, 2.0f); this->timer = 0; this->collider1.base.atFlags |= AT_ON; this->unk_304 = -1; @@ -1066,9 +1065,9 @@ void EnDodongo_Update(Actor* thisx, PlayState* play2) { s32 EnDodongo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnDodongo* this = THIS; - if (limbIndex == 1) { + if (limbIndex == OBJECT_DODONGO_LIMB_01) { pos->z += 1000.0f; - } else if ((limbIndex == 15) || (limbIndex == 16)) { + } else if ((limbIndex == OBJECT_DODONGO_LIMB_0F) || (limbIndex == OBJECT_DODONGO_LIMB_10)) { Matrix_Scale(this->unk_314.x, this->unk_314.y, this->unk_314.z, MTXMODE_APPLY); } @@ -1121,16 +1120,17 @@ void EnDodongo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* Matrix_MultZero(&this->bodyPartsPos[sLimbToBodyParts[limbIndex]]); } - if (limbIndex == 7) { + if (limbIndex == OBJECT_DODONGO_LIMB_07) { Matrix_MultVec3f(&D_80879370, &this->unk_308); Matrix_MultVec3f(&D_8087937C, &this->bodyPartsPos[DODONGO_BODYPART_0]); Matrix_MultZero(&this->actor.focus.pos); Matrix_MultVecY(-200.0f, &this->bodyPartsPos[DODONGO_BODYPART_1]); - } else if (limbIndex == 13) { + } else if (limbIndex == OBJECT_DODONGO_LIMB_0D) { Matrix_MultVecX(1600.0f, &this->unk_320); } - if ((limbIndex == 30) && (this->actionFunc == func_80878424) && (this->timer != this->unk_304)) { + if ((limbIndex == OBJECT_DODONGO_LIMB_1E) && (this->actionFunc == func_80878424) && + (this->timer != this->unk_304)) { EffectBlure_AddVertex(Effect_GetByIndex(this->unk_338), &this->unk_320, &this->bodyPartsPos[DODONGO_BODYPART_4]); this->unk_304 = this->timer; diff --git a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.h b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.h index be3095410b..33e5805391 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.h +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.h @@ -2,6 +2,7 @@ #define Z_EN_DODONGO_H #include "global.h" +#include "objects/object_dodongo/object_dodongo.h" struct EnDodongo; @@ -23,8 +24,8 @@ typedef enum DodongoBodyPart { typedef struct EnDodongo { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; - /* 0x188 */ Vec3s jointTable[31]; - /* 0x242 */ Vec3s morphTable[31]; + /* 0x188 */ Vec3s jointTable[OBJECT_DODONGO_LIMB_MAX]; + /* 0x242 */ Vec3s morphTable[OBJECT_DODONGO_LIMB_MAX]; /* 0x2FC */ EnDodongoActionFunc actionFunc; /* 0x300 */ u8 drawDmgEffType; /* 0x302 */ s16 timer; diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c index df7b1b3849..1450eb8bbb 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -353,17 +353,48 @@ static InitChainEntry sInitChain[] = { ICHAIN_U16(shape.rot.z, 0, ICHAIN_STOP), }; -static AnimationHeader* sAnimations[] = { - &gameplay_keep_Anim_020658, &gameplay_keep_Anim_022CA8, &gameplay_keep_Anim_020658, &gameplay_keep_Anim_022E68, - &gameplay_keep_Anim_0204B4, &gameplay_keep_Anim_022BE8, &gameplay_keep_Anim_022D90, &gameplay_keep_Anim_022BE8, - &gameplay_keep_Anim_022FF0, &gameplay_keep_Anim_0205A0, +static AnimationHeader* sAnimations[2 * PLAYER_FORM_MAX] = { + // left + &gameplay_keep_Anim_020658, // PLAYER_FORM_FIERCE_DEITY + &gameplay_keep_Anim_022CA8, // PLAYER_FORM_GORON + &gameplay_keep_Anim_020658, // PLAYER_FORM_ZORA + &gameplay_keep_Anim_022E68, // PLAYER_FORM_DEKU + &gameplay_keep_Anim_0204B4, // PLAYER_FORM_HUMAN + // right + &gameplay_keep_Anim_022BE8, // PLAYER_FORM_FIERCE_DEITY + &gameplay_keep_Anim_022D90, // PLAYER_FORM_GORON + &gameplay_keep_Anim_022BE8, // PLAYER_FORM_ZORA + &gameplay_keep_Anim_022FF0, // PLAYER_FORM_DEKU + &gameplay_keep_Anim_0205A0, // PLAYER_FORM_HUMAN }; -static u8 sAnimOpenFrames[10] = { - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +static u8 sAnimOpenFrames[2 * PLAYER_FORM_MAX] = { + // left + 25, // PLAYER_FORM_FIERCE_DEITY + 25, // PLAYER_FORM_GORON + 25, // PLAYER_FORM_ZORA + 25, // PLAYER_FORM_DEKU + 25, // PLAYER_FORM_HUMAN + // right + 25, // PLAYER_FORM_FIERCE_DEITY + 25, // PLAYER_FORM_GORON + 25, // PLAYER_FORM_ZORA + 25, // PLAYER_FORM_DEKU + 25, // PLAYER_FORM_HUMAN }; -static u8 sAnimCloseFrames[10] = { - 60, 60, 60, 70, 70, 60, 60, 60, 60, 70, +static u8 sAnimCloseFrames[2 * PLAYER_FORM_MAX] = { + // left + 60, // PLAYER_FORM_FIERCE_DEITY + 60, // PLAYER_FORM_GORON + 60, // PLAYER_FORM_ZORA + 70, // PLAYER_FORM_DEKU + 70, // PLAYER_FORM_HUMAN + // right + 60, // PLAYER_FORM_FIERCE_DEITY + 60, // PLAYER_FORM_GORON + 60, // PLAYER_FORM_ZORA + 60, // PLAYER_FORM_DEKU + 70, // PLAYER_FORM_HUMAN }; static Gfx* D_808679A4[14][2] = { @@ -638,8 +669,9 @@ s32 EnDoor_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* (transitionEntry->sides[0].room == transitionEntry->sides[1].room)) { s32 pad; - temp = (this->knobDoor.dyna.actor.shape.rot.y + this->knobDoor.skelAnime.jointTable[3].z + rot->z) - - Math_Vec3f_Yaw(&play->view.eye, &this->knobDoor.dyna.actor.world.pos); + temp = + (this->knobDoor.dyna.actor.shape.rot.y + this->knobDoor.skelAnime.jointTable[DOOR_LIMB_3].z + rot->z) - + Math_Vec3f_Yaw(&play->view.eye, &this->knobDoor.dyna.actor.world.pos); *dList = (ABS_ALT(temp) < 0x4000) ? dl[0] : dl[1]; } else { diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c index 69773f8212..e1e7197d96 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c @@ -25,13 +25,6 @@ void EnDragon_SetupAttack(EnDragon* this); void EnDragon_Attack(EnDragon* this, PlayState* play); void EnDragon_Dead(EnDragon* this, PlayState* play); -typedef enum { - /* 0 */ DEEP_PYTHON_ANIM_SMALL_SIDE_SWAY, - /* 1 */ DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY, - /* 2 */ DEEP_PYTHON_ANIM_VERTICAL_SWAY, - /* 3 */ DEEP_PYTHON_ANIM_IDLE -} DeepPythonAnimation; - typedef enum { /* 0 */ DEEP_PYTHON_EXTEND_STATE_NOT_FULLY_EXTENDED, /* 1 */ DEEP_PYTHON_EXTEND_STATE_FULLY_EXTENDED, @@ -256,26 +249,39 @@ void EnDragon_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyJntSph(play, &this->collider); } -static AnimationHeader* sAnimations[] = { - &gDeepPythonSmallSideSwayAnim, - &gDeepPythonLargeSideSwayAnim, - &gDeepPythonVerticalSwayAnim, - &gDeepPythonSmallSideSwayAnim, +typedef enum { + /* 0 */ DEEP_PYTHON_ANIM_SMALL_SIDE_SWAY, + /* 1 */ DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY, + /* 2 */ DEEP_PYTHON_ANIM_VERTICAL_SWAY, + /* 3 */ DEEP_PYTHON_ANIM_IDLE, + /* 4 */ DEEP_PYTHON_ANIM_MAX +} DeepPythonAnimation; + +static AnimationHeader* sAnimations[DEEP_PYTHON_ANIM_MAX] = { + &gDeepPythonSmallSideSwayAnim, // DEEP_PYTHON_ANIM_SMALL_SIDE_SWAY + &gDeepPythonLargeSideSwayAnim, // DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY + &gDeepPythonVerticalSwayAnim, // DEEP_PYTHON_ANIM_VERTICAL_SWAY + &gDeepPythonSmallSideSwayAnim, // DEEP_PYTHON_ANIM_IDLE }; -static u8 sAnimationModes[] = { ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE, ANIMMODE_ONCE }; +static u8 sAnimationModes[DEEP_PYTHON_ANIM_MAX] = { + ANIMMODE_LOOP, // DEEP_PYTHON_ANIM_SMALL_SIDE_SWAY + ANIMMODE_LOOP, // DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY + ANIMMODE_ONCE, // DEEP_PYTHON_ANIM_VERTICAL_SWAY + ANIMMODE_ONCE, // DEEP_PYTHON_ANIM_IDLE +}; void EnDragon_ChangeAnim(EnDragon* this, s32 animIndex) { f32 startFrame; this->animIndex = animIndex; - this->endFrame = Animation_GetLastFrame(sAnimations[animIndex]); + this->animEndFrame = Animation_GetLastFrame(sAnimations[animIndex]); startFrame = 0.0f; if (this->animIndex == DEEP_PYTHON_ANIM_IDLE) { - startFrame = this->endFrame; + startFrame = this->animEndFrame; } - Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, startFrame, this->endFrame, + Animation_Change(&this->skelAnime, sAnimations[animIndex], 1.0f, startFrame, this->animEndFrame, sAnimationModes[this->animIndex], -4.0f); } @@ -370,7 +376,7 @@ void EnDragon_SetupExtend(EnDragon* this) { void EnDragon_Extend(EnDragon* this, PlayState* play) { Player* player = GET_PLAYER(play); - f32 currentFrame = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; s16 yaw; EnDragon_SpawnBubbles(this, play, this->jawPos); @@ -410,7 +416,7 @@ void EnDragon_Extend(EnDragon* this, PlayState* play) { Math_SmoothStepToS(&this->jawZRotation, 0, 5, 0xBB8, 0x14); SkelAnime_Update(&this->skelAnime); if (this->state == DEEP_PYTHON_EXTEND_STATE_FULLY_EXTENDED) { - if (currentFrame < this->endFrame) { + if (curFrame < this->animEndFrame) { return; } @@ -420,7 +426,7 @@ void EnDragon_Extend(EnDragon* this, PlayState* play) { yaw = ABS_ALT(BINANG_SUB(Math_Vec3f_Yaw(&this->jawPos, &player->actor.world.pos), this->actor.shape.rot.y)); if (yaw < 0x5000) { // Player is in front of the jaw - if ((this->endFrame <= currentFrame) && (this->largeSwayWaitTimer == 0)) { + if ((curFrame >= this->animEndFrame) && (this->largeSwayWaitTimer == 0)) { if (this->animIndex != DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY) { EnDragon_ChangeAnim(this, DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY); } @@ -433,7 +439,7 @@ void EnDragon_Extend(EnDragon* this, PlayState* play) { // Player is in behind the jaw if (this->state == DEEP_PYTHON_EXTEND_STATE_REPEAT_LARGE_SWAY) { EnDragon_ChangeAnim(this, DEEP_PYTHON_ANIM_SMALL_SIDE_SWAY); - this->largeSwayWaitTimer = Rand_ZeroFloat(20.0f) + this->endFrame; + this->largeSwayWaitTimer = Rand_ZeroFloat(20.0f) + this->animEndFrame; this->state = DEEP_PYTHON_EXTEND_STATE_REPEAT_SMALL_SWAY; } @@ -562,7 +568,7 @@ void EnDragon_SetupAttack(EnDragon* this) { void EnDragon_Attack(EnDragon* this, PlayState* play) { Player* player = GET_PLAYER(play); - f32 currentFrame = this->skelAnime.curFrame; + f32 curFrame = this->skelAnime.curFrame; Vec3f pos; // used as both the extended position and the camera eye Vec3f subCamAt; @@ -603,7 +609,7 @@ void EnDragon_Attack(EnDragon* this, PlayState* play) { Math_ApproachF(&this->actor.world.pos.y, pos.y, 0.3f, 200.0f); Math_ApproachF(&this->actor.world.pos.z, pos.z, 0.3f, 200.0f); - if ((this->state <= DEEP_PYTHON_ATTACK_STATE_START) && (this->endFrame <= currentFrame)) { + if ((this->state <= DEEP_PYTHON_ATTACK_STATE_START) && (curFrame >= this->animEndFrame)) { Actor_PlaySfx(&this->actor, NA_SE_EN_UTSUBO_BITE); if (this->animIndex != DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY) { EnDragon_ChangeAnim(this, DEEP_PYTHON_ANIM_LARGE_SIDE_SWAY); @@ -612,7 +618,7 @@ void EnDragon_Attack(EnDragon* this, PlayState* play) { this->state++; } - if (((this->state != DEEP_PYTHON_ATTACK_STATE_START) && (this->endFrame <= currentFrame)) || + if (((this->state != DEEP_PYTHON_ATTACK_STATE_START) && (curFrame >= this->animEndFrame)) || (!(player->stateFlags2 & PLAYER_STATE2_80)) || ((this->collider.elements[0].info.bumperFlags & BUMP_HIT)) || (this->collider.elements[1].info.bumperFlags & BUMP_HIT) || (this->collider.elements[2].info.bumperFlags & BUMP_HIT)) { @@ -625,7 +631,7 @@ void EnDragon_Attack(EnDragon* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_100000; - if ((this->state != DEEP_PYTHON_ATTACK_STATE_START) && (this->endFrame <= currentFrame)) { + if ((this->state != DEEP_PYTHON_ATTACK_STATE_START) && (curFrame >= this->animEndFrame)) { this->timer = 3; this->actionFunc = EnDragon_RetreatOnceTimerEnds; } else { @@ -639,7 +645,7 @@ void EnDragon_SetupDead(EnDragon* this, PlayState* play) { CutsceneManager_Queue(this->deathCsId); } else { CutsceneManager_StartWithPlayerCs(this->deathCsId, &this->actor); - this->endFrame = Animation_GetLastFrame(&gDeepPythonSmallSideSwayAnim); + this->animEndFrame = Animation_GetLastFrame(&gDeepPythonSmallSideSwayAnim); Animation_Change(&this->skelAnime, &gDeepPythonSmallSideSwayAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f); this->timer = 20; this->actionFunc = EnDragon_Dead; diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h index a35c8fa9b7..fa09793892 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h @@ -53,8 +53,7 @@ typedef struct EnDragon { /* 0x2C8 */ s16 subCamId; /* 0x2CA */ s16 grabTimer; // Counts up from the time a grab starts until the time the actor begins attacking /* 0x2CC */ s16 unk_2CC; // Initialized, but never used - /* 0x2CE */ UNK_TYPE1 unk_2CE[0x2]; - /* 0x2D0 */ f32 endFrame; + /* 0x2D0 */ f32 animEndFrame; /* 0x2D4 */ f32 scale; /* 0x2D8 */ UNK_TYPE1 unk_2D8[0x4]; /* 0x2DC */ ColliderJntSph collider; diff --git a/src/overlays/actors/ovl_En_Drs/z_en_drs.c b/src/overlays/actors/ovl_En_Drs/z_en_drs.c index 9fc28c9528..da2f0571dd 100644 --- a/src/overlays/actors/ovl_En_Drs/z_en_drs.c +++ b/src/overlays/actors/ovl_En_Drs/z_en_drs.c @@ -51,7 +51,14 @@ static ColliderCylinderInit sCylinderInit = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; -static AnimationInfoS sAnimationInfo = { &gWeddingDressMannequinIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }; +typedef enum { + /* 0 */ WEDDING_DRESS_MANNEQUIN_ANIM_IDLE, + /* 1 */ WEDDING_DRESS_MANNEQUIN_ANIM_MAX +} WeddingDressMannequinAnimation; + +static AnimationInfoS sAnimationInfo[WEDDING_DRESS_MANNEQUIN_ANIM_MAX] = { + { &gWeddingDressMannequinIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // WEDDING_DRESS_MANNEQUIN_ANIM_IDLE +}; void EnDrs_CollisionUpdate(EnDrs* this, PlayState* play) { Collider_UpdateCylinder(&this->actor, &this->collider); @@ -65,7 +72,7 @@ void EnDrs_Setup(EnDrs* this, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gWeddingDressMannequinSkel, NULL, this->jointTable, this->morphTable, WEDDING_DRESS_MANNEQUIN_LIMB_MAX); - SubS_ChangeAnimationByInfoS(&this->skelAnime, &sAnimationInfo, 0); + SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, WEDDING_DRESS_MANNEQUIN_ANIM_IDLE); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); Actor_SetScale(&this->actor, 0.01f); diff --git a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c index 6a2eea9d23..22312a7c25 100644 --- a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c +++ b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c @@ -32,14 +32,19 @@ ActorInit En_Ds2n_InitVars = { (ActorFunc)EnDs2n_Draw, }; -static AnimationInfo sAnimationInfo[] = { - { &gDs2nIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, +typedef enum { + /* 0 */ ENDS2N_ANIM_IDLE, + /* 1 */ ENDS2N_ANIM_MAX +} EnDs2nAnimation; + +static AnimationInfo sAnimationInfo[ENDS2N_ANIM_MAX] = { + { &gDs2nIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f }, // ENDS2N_ANIM_IDLE }; void EnDs2n_SetupIdle(EnDs2n* this) { this->blinkTimer = 20; this->blinkState = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0); + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENDS2N_ANIM_IDLE); this->actionFunc = EnDs2n_Idle; } diff --git a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c index 06b4308a06..14f08c5319 100644 --- a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c +++ b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c @@ -85,16 +85,20 @@ void EnDyExtra_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); } +static Color_RGBA8 D_80A61740[] = { + { 255, 255, 170, 255 }, { 255, 170, 255, 255 }, { 255, 255, 170, 255 }, + { 170, 255, 255, 255 }, { 255, 255, 170, 255 }, +}; + +static Color_RGBA8 D_80A61754[] = { + { 255, 100, 0, 255 }, { 255, 0, 100, 255 }, { 100, 255, 0, 255 }, { 0, 100, 255, 255 }, { 255, 230, 0, 255 } +}; + +static u8 D_80A61768[] = { + 2, 1, 1, 2, 0, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2, 0, 0, +}; + void EnDyExtra_Draw(Actor* thisx, PlayState* play) { - static Color_RGBA8 D_80A61740[] = { - { 255, 255, 170, 255 }, { 255, 170, 255, 255 }, { 255, 255, 170, 255 }, - { 170, 255, 255, 255 }, { 255, 255, 170, 255 }, - }; - static Color_RGBA8 D_80A61754[] = { - { 255, 100, 0, 255 }, { 255, 0, 100, 255 }, { 100, 255, 0, 255 }, { 0, 100, 255, 255 }, { 255, 230, 0, 255 } - }; - static u8 D_80A61768[] = { 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, - 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x01, 0x02, 0x00, 0x00 }; EnDyExtra* this = THIS; s32 pad; GraphicsContext* gfxCtx = play->state.gfxCtx; diff --git a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c index 150fafc608..6af86aaad7 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c @@ -282,7 +282,7 @@ void EnFirefly_SetupFlyIdle(EnFirefly* this) { } void EnFirefly_FlyIdle(EnFirefly* this, PlayState* play) { - s32 isSkelAnimeUpdated; + s32 onAnimFirstFrame; f32 rand; SkelAnime_Update(&this->skelAnime); @@ -290,11 +290,11 @@ void EnFirefly_FlyIdle(EnFirefly* this, PlayState* play) { this->timer--; } - isSkelAnimeUpdated = Animation_OnFrame(&this->skelAnime, 0.0f); + onAnimFirstFrame = Animation_OnFrame(&this->skelAnime, 0.0f); this->actor.speed = (Rand_ZeroOne() * 1.5f) + 1.5f; if (!EnFirefly_ReturnToPerch(this, play) && !EnFirefly_SeekTorch(this, play)) { - if (isSkelAnimeUpdated) { + if (onAnimFirstFrame) { rand = Rand_ZeroOne(); if (rand < 0.5f) { diff --git a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c index ffe28b2b31..7798abf967 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -296,15 +296,15 @@ void func_808D0CE4(EnFloormas* this) { } void func_808D0D70(EnFloormas* this, PlayState* play) { - s32 temp_v0; + s32 onAnimFirstFrame; SkelAnime_Update(&this->skelAnime); - temp_v0 = Animation_OnFrame(&this->skelAnime, 0.0f); - if ((temp_v0 != 0) && (this->unk_18E != 0)) { + onAnimFirstFrame = Animation_OnFrame(&this->skelAnime, 0.0f); + if (onAnimFirstFrame && (this->unk_18E != 0)) { this->unk_18E--; } - if ((temp_v0 != 0) || Animation_OnFrame(&this->skelAnime, 12.0f) || Animation_OnFrame(&this->skelAnime, 24.0f) || + if (onAnimFirstFrame || Animation_OnFrame(&this->skelAnime, 12.0f) || Animation_OnFrame(&this->skelAnime, 24.0f) || Animation_OnFrame(&this->skelAnime, 36.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_FALL_WALK); } diff --git a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c index e7f14e8a8c..5ee8a68e0f 100644 --- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c +++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c @@ -750,7 +750,7 @@ void EnMushi2_Init(Actor* thisx, PlayState* play) { if (ENMUSHI2_GET_3(&this->actor) == ENMUSHI2_0) { func_80A68A78(this, play); } - this->actor.shape.rot.y += Rand_S16Offset(-2000, 4000); + this->actor.shape.rot.y += Rand_S16Offset(-0x7D0, 0xFA0); this->actor.home.rot.y = this->actor.shape.rot.y; this->actor.world.rot.y = this->actor.shape.rot.y; func_80A68F24(this); diff --git a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c index 7c5fdce365..26f5b4e24c 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c @@ -326,9 +326,9 @@ void EnSsh_Stunned(EnSsh* this, PlayState* play) { if (this->stunTimer < 30) { if (this->stunTimer & 1) { - this->actor.shape.rot.y += 2000; + this->actor.shape.rot.y += 0x7D0; } else { - this->actor.shape.rot.y -= 2000; + this->actor.shape.rot.y -= 0x7D0; } } } diff --git a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c index 5e22503887..c3cdc7e5ed 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -479,10 +479,10 @@ void func_80C11538(EnThiefbird* this) { void func_80C11590(EnThiefbird* this, PlayState* play) { Player* player = GET_PLAYER(play); - s32 sp38; + s32 onAnimFirstFrame; SkelAnime_Update(&this->skelAnime); - sp38 = Animation_OnFrame(&this->skelAnime, 0.0f); + onAnimFirstFrame = Animation_OnFrame(&this->skelAnime, 0.0f); this->actor.speed = (Rand_ZeroOne() * 1.5f) + 3.0f; if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { @@ -493,7 +493,7 @@ void func_80C11590(EnThiefbird* this, PlayState* play) { } } - if (!Math_SmoothStepToS(&this->actor.shape.rot.y, this->unk_192, 5, 0x300, 0x10) && (sp38 != 0) && + if (!Math_SmoothStepToS(&this->actor.shape.rot.y, this->unk_192, 5, 0x300, 0x10) && onAnimFirstFrame && (Rand_ZeroOne() < 0.1f)) { s16 yaw = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos) - this->actor.shape.rot.y; @@ -513,7 +513,7 @@ void func_80C11590(EnThiefbird* this, PlayState* play) { this->unk_190 = Rand_S16Offset(2048, 2048); } - if (!Math_SmoothStepToS(&this->actor.shape.rot.x, this->unk_190, 10, 0x100, 8) && (sp38 != 0) && + if (!Math_SmoothStepToS(&this->actor.shape.rot.x, this->unk_190, 10, 0x100, 8) && onAnimFirstFrame && (Rand_ZeroOne() < 0.1f)) { if (this->actor.home.pos.y < this->actor.world.pos.y) { this->unk_190 -= Rand_S16Offset(0x400, 0x400); diff --git a/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c b/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c index 340618db73..51dee7da0f 100644 --- a/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c +++ b/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c @@ -253,7 +253,7 @@ void EnTuboTrap_Idle(EnTuboTrap* this, PlayState* play) { } void EnTuboTrap_Levitate(EnTuboTrap* this, PlayState* play) { - this->actor.shape.rot.y += 5000; + this->actor.shape.rot.y += 0x1388; Math_ApproachF(&this->actor.world.pos.y, this->targetHeight, 0.8f, 3.0f); if (fabsf(this->actor.world.pos.y - this->targetHeight) < 10.0f) { @@ -279,7 +279,7 @@ void EnTuboTrap_FlyAtPlayer(EnTuboTrap* this, PlayState* play) { Math_ApproachF(&this->actor.gravity, -3.0f, 0.2f, 0.5f); } - this->actor.shape.rot.y += 5000; + this->actor.shape.rot.y += 0x1388; EnTuboTrap_HandleImpact(this, play); } diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 1e594aaa09..951d985389 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -6088,9 +6088,9 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { s32 temp = this->transformation - 1; PlayerAnimationHeader* anim; f32 temp_fv0; // sp5C - KnobDoorActor* doorHandle = (KnobDoorActor*)door; + KnobDoorActor* knobDoor = (KnobDoorActor*)door; - doorHandle->animIndex = this->transformation; + knobDoor->animIndex = this->transformation; if (this->doorDirection < 0) { if (this->transformation == PLAYER_FORM_FIERCE_DEITY) { @@ -6101,7 +6101,7 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { anim = D_8085D118[temp]; } } else { - doorHandle->animIndex += 5; + knobDoor->animIndex += PLAYER_FORM_MAX; if (this->transformation == PLAYER_FORM_FIERCE_DEITY) { anim = D_8085BE84[PLAYER_ANIMGROUP_10][this->modelAnimType]; @@ -6116,15 +6116,14 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { this->stateFlags2 |= PLAYER_STATE2_800000; func_8082DE14(play, this); if (this->doorDirection < 0) { - this->actor.shape.rot.y = doorHandle->dyna.actor.shape.rot.y; + this->actor.shape.rot.y = knobDoor->dyna.actor.shape.rot.y; } else { - this->actor.shape.rot.y = doorHandle->dyna.actor.shape.rot.y - 0x8000; + this->actor.shape.rot.y = knobDoor->dyna.actor.shape.rot.y - 0x8000; } this->currentYaw = this->actor.shape.rot.y; temp_fv0 = this->doorDirection * 22.0f; - func_80835BF8(&doorHandle->dyna.actor.world.pos, doorHandle->dyna.actor.shape.rot.y, temp_fv0, - &this->actor.world.pos); + func_80835BF8(&knobDoor->dyna.actor.world.pos, knobDoor->dyna.actor.shape.rot.y, temp_fv0, &this->actor.world.pos); func_8082EC9C(play, this, anim); if (this->doorTimer != 0) { @@ -6134,19 +6133,19 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { func_8082DAD4(this); func_8082E920(play, this, ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_80 | ANIM_FLAG_200); - doorHandle->playOpenAnim = true; + knobDoor->playOpenAnim = true; if (this->doorType != PLAYER_DOORTYPE_FAKE) { CollisionPoly* poly; s32 bgId; Vec3f pos; - s32 enDoorType = ENDOOR_GET_TYPE(&doorHandle->dyna.actor); + s32 enDoorType = ENDOOR_GET_TYPE(&knobDoor->dyna.actor); this->stateFlags1 |= PLAYER_STATE1_20000000; if (this->actor.category == ACTORCAT_PLAYER) { Actor_DeactivateLens(play); - func_80835BF8(&doorHandle->dyna.actor.world.pos, doorHandle->dyna.actor.shape.rot.y, -temp_fv0, &pos); - pos.y = doorHandle->dyna.actor.world.pos.y + 10.0f; + func_80835BF8(&knobDoor->dyna.actor.world.pos, knobDoor->dyna.actor.shape.rot.y, -temp_fv0, &pos); + pos.y = knobDoor->dyna.actor.world.pos.y + 10.0f; BgCheck_EntityRaycastFloor5(&play->colCtx, &poly, &bgId, &this->actor, &pos); if (Player_HandleExitsAndVoids(play, this, poly, BGCHECK_SCENE)) { @@ -6157,8 +6156,8 @@ void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { this->unk_AE7 = 38.0f * D_8085C3E8; mainCam = Play_GetCamera(play, CAM_ID_MAIN); - Camera_ChangeDoorCam(mainCam, &doorHandle->dyna.actor, - play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&doorHandle->dyna.actor)] + Camera_ChangeDoorCam(mainCam, &knobDoor->dyna.actor, + play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&knobDoor->dyna.actor)] .sides[(this->doorDirection > 0) ? 0 : 1] .bgCamIndex, 0.0f, this->unk_AE7, 26.0f * D_8085C3E8, 10.0f * D_8085C3E8); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 1b8b9880a8..3e8e246dba 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -7118,7 +7118,7 @@ 0x8092C550:("DemoShd_Update",), 0x8092C560:("DemoShd_Draw",), 0x8092C5C0:("func_8092C5C0",), - 0x8092C63C:("func_8092C63C",), + 0x8092C63C:("EnDns_ChangeAnim",), 0x8092C6FC:("func_8092C6FC",), 0x8092C740:("func_8092C740",), 0x8092C86C:("func_8092C86C",), @@ -7136,7 +7136,7 @@ 0x8092D320:("func_8092D320",), 0x8092D330:("func_8092D330",), 0x8092D4D8:("func_8092D4D8",), - 0x8092D5E8:("func_8092D5E8",), + 0x8092D5E8:("EnDns_HandleCutscene",), 0x8092D6C0:("EnDns_Init",), 0x8092D820:("EnDns_Destroy",), 0x8092D84C:("EnDns_Update",), @@ -7502,7 +7502,7 @@ 0x80942D34:("EnGoroiwa_Draw",), 0x809434B0:("EnDaiku_Init",), 0x80943710:("EnDaiku_Destroy",), - 0x8094373C:("func_8094373C",), + 0x8094373C:("EnDaiku_ChangeAnim",), 0x809437C8:("func_809437C8",), 0x80943820:("func_80943820",), 0x809438F8:("func_809438F8",), @@ -10574,10 +10574,10 @@ 0x80A510E0:("EnDnh_Update",), 0x80A51168:("func_80A51168",), 0x80A511B4:("EnDnh_Draw",), - 0x80A514F0:("func_80A514F0",), + 0x80A514F0:("EnDnk_ChangeAnim",), 0x80A515C4:("func_80A515C4",), 0x80A51648:("func_80A51648",), - 0x80A51890:("func_80A51890",), + 0x80A51890:("EnDnk_HandleCutscene",), 0x80A518DC:("func_80A518DC",), 0x80A518EC:("EnDnk_Init",), 0x80A519A8:("EnDnk_Destroy",), @@ -10592,7 +10592,7 @@ 0x80A52074:("func_80A52074",), 0x80A52134:("func_80A52134",), 0x80A52530:("EnDnq_ValidatePictograph",), - 0x80A5257C:("func_80A5257C",), + 0x80A5257C:("EnDnq_ChangeAnim",), 0x80A52604:("func_80A52604",), 0x80A52648:("func_80A52648",), 0x80A526F8:("func_80A526F8",), @@ -10604,7 +10604,7 @@ 0x80A52D44:("func_80A52D44",), 0x80A52DC8:("func_80A52DC8",), 0x80A52FB8:("func_80A52FB8",), - 0x80A53038:("func_80A53038",), + 0x80A53038:("EnDnq_HandleCutscene",), 0x80A5313C:("EnDnq_Init",), 0x80A53258:("EnDnq_Destroy",), 0x80A53284:("EnDnq_Update",), @@ -13640,7 +13640,7 @@ 0x80B3E168:("func_80B3E168",), 0x80B3E460:("func_80B3E460",), 0x80B3E5B4:("func_80B3E5B4",), - 0x80B3E5DC:("func_80B3E5DC",), + 0x80B3E5DC:("EnDai_ChangeAnim",), 0x80B3E69C:("func_80B3E69C",), 0x80B3E7C8:("func_80B3E7C8",), 0x80B3E834:("func_80B3E834",), @@ -13653,7 +13653,7 @@ 0x80B3EEDC:("func_80B3EEDC",), 0x80B3EF90:("func_80B3EF90",), 0x80B3F00C:("func_80B3F00C",), - 0x80B3F044:("func_80B3F044",), + 0x80B3F044:("EnDai_HandleCutscene",), 0x80B3F318:("EnDai_Init",), 0x80B3F494:("EnDai_Destroy",), 0x80B3F4A4:("EnDai_Update",), @@ -16117,7 +16117,7 @@ 0x80BE61D0:("func_80BE61D0",), 0x80BE6228:("EnDaiku2_Init",), 0x80BE63DC:("EnDaiku2_Destroy",), - 0x80BE6408:("func_80BE6408",), + 0x80BE6408:("EnDaiku2_ChangeAnim",), 0x80BE64C0:("func_80BE64C0",), 0x80BE65B4:("func_80BE65B4",), 0x80BE66E4:("func_80BE66E4",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 482947b96e..9e122fed28 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -7965,7 +7965,7 @@ 0x8092DD54:("D_8092DD54","UNK_PTR","",0x4), 0x8092DD60:("sAnimations","UNK_TYPE1","",0x1), 0x8092DE00:("D_8092DE00","UNK_TYPE1","",0x1), - 0x8092DE0C:("D_8092DE0C","UNK_TYPE1","",0x1), + 0x8092DE0C:("sCsAnimIndex","UNK_TYPE1","",0x1), 0x8092DE1C:("D_8092DE1C","UNK_TYPE1","",0x1), 0x8092DE30:("D_8092DE30","f32","",0x4), 0x8092DE34:("D_8092DE34","f32","",0x4), @@ -11563,7 +11563,7 @@ 0x80A5349C:("sAnimationInfo","UNK_TYPE1","",0x1), 0x80A535DC:("D_80A535DC","UNK_TYPE1","",0x1), 0x80A535F0:("D_80A535F0","UNK_TYPE4","",0x4), - 0x80A535FC:("D_80A535FC","UNK_TYPE1","",0x1), + 0x80A535FC:("sCsAnimIndex","UNK_TYPE1","",0x1), 0x80A53620:("jtbl_80A53620","UNK_PTR","",0x4), 0x80A53648:("jtbl_80A53648","UNK_PTR","",0x4), 0x80A53B50:("Bg_Keikoku_Saku_InitVars","UNK_TYPE1","",0x1), @@ -14161,7 +14161,7 @@ 0x80B3DCAC:("D_80B3DCAC","UNK_TYPE1","",0x1), 0x80B3DCB8:("sAnimations","UNK_TYPE1","",0x1), 0x80B3DE58:("D_80B3DE58","UNK_TYPE1","",0x1), - 0x80B3DE74:("sCsAnimations","UNK_TYPE1","",0x1), + 0x80B3DE74:("sCsAnimIndex","UNK_TYPE1","",0x1), 0x80B3DEAC:("sEyeTextures","UNK_TYPE1","",0x1), 0x80B3DEC0:("D_80B3DEC0","f32","",0x4), 0x80B3DEC4:("D_80B3DEC4","f32","",0x4), @@ -14183,7 +14183,7 @@ 0x80B3FDF4:("D_80B3FDF4","UNK_TYPE4","",0x4), 0x80B3FE00:("D_80B3FE00","UNK_TYPE2","",0x2), 0x80B3FE08:("D_80B3FE08","UNK_TYPE4","",0x4), - 0x80B3FE38:("D_80B3FE38","UNK_TYPE1","",0x1), + 0x80B3FE38:("sCsAnimIndex","UNK_TYPE1","",0x1), 0x80B3FE4C:("D_80B3FE4C","f32","",0x4), 0x80B3FE50:("D_80B3FE50","f32","",0x4), 0x80B3FE54:("D_80B3FE54","f32","",0x4), @@ -15939,7 +15939,7 @@ 0x80BE78F0:("sTextIds","s16","",0x1), 0x80BE7900:("D_80BE7900","UNK_TYPE1","",0x1), 0x80BE792C:("sAnimations","AnimationHeader*","",0x1), - 0x80BE7958:("D_80BE7958","UNK_TYPE1","",0x1), + 0x80BE7958:("sAnimationModes","UNK_TYPE1","",0x1), 0x80BE7970:("D_80BE7970","f32","",0x4), 0x80BE7974:("D_80BE7974","f32","",0x4), 0x80BE7978:("D_80BE7978","f32","",0x4),