mirror of
https://github.com/izzy2lost/2ship2harkinian-Android.git
synced 2026-06-19 01:20:08 -07:00
Animation Cleanup: En_C* and En_D* Actors (#1327)
* En_C cleanup * En_D * more cleanup * name enums * missed one * PR Review * remove padding
This commit is contained in:
@@ -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,
|
||||
|
||||
+31
-31
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -195,6 +195,9 @@ void EnCne01_Talk(EnHy* this, PlayState* play) {
|
||||
this->actionFunc = this->prevActionFunc;
|
||||
this->prevActionFunc = NULL;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user