mirror of
https://github.com/zeldaret/oot.git
synced 2025-01-14 12:17:08 +00:00
Cleanup around some generic animation info structs (#1059)
* Name generic anim info structs and cleanup usage * Make `EnDaiku` use generic struct * Add `/* decimalid */` comments to all added enums * small fixes * Two more generic animinfo structs * Cleanup usage of newly generic structs * Cleanup x2 usage of newly generic structs * `transitionRate` -> `morphFrames` * Properly name generic anim structs (attempt to at least) * `anim` -> `animation` * fixes * run formatter * Use consistent prototypes for each actor's ChangeAnim helper * run formatter * minor cleanup * Run formatter * `Animation_ChangeInfo` -> `Animation_ChangeByInfo`
This commit is contained in:
parent
d3a8ade6ba
commit
11917bf640
31 changed files with 675 additions and 467 deletions
|
@ -509,7 +509,7 @@ void func_80034BA0(GlobalContext* globalCtx, SkelAnime* skelAnime, OverrideLimbD
|
|||
void func_80034CC4(GlobalContext* globalCtx, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw,
|
||||
PostLimbDraw postLimbDraw, Actor* actor, s16 alpha);
|
||||
s16 func_80034DD4(Actor* actor, GlobalContext* globalCtx, s16 arg2, f32 arg3);
|
||||
void func_80034EC0(SkelAnime* skelAnime, struct_80034EC0_Entry* animations, s32 index);
|
||||
void Animation_ChangeByInfo(SkelAnime* skelAnime, AnimationInfo* animationInfo, s32 index);
|
||||
void func_80034F54(GlobalContext* globalCtx, s16* arg1, s16* arg2, s32 arg3);
|
||||
void Actor_Noop(Actor* actor, GlobalContext* globalCtx);
|
||||
void Gfx_DrawDListOpa(GlobalContext* globalCtx, Gfx* dlist);
|
||||
|
|
|
@ -1297,23 +1297,34 @@ typedef enum {
|
|||
DPM_UNK3 = 3
|
||||
} DynaPolyMoveFlag;
|
||||
|
||||
// Some animation related structure
|
||||
typedef struct {
|
||||
/* 0x00 */ AnimationHeader* animation;
|
||||
/* 0x04 */ f32 playbackSpeed;
|
||||
/* 0x04 */ f32 playSpeed;
|
||||
/* 0x08 */ f32 startFrame;
|
||||
/* 0x0C */ f32 frameCount;
|
||||
/* 0x10 */ u8 mode;
|
||||
/* 0x14 */ f32 transitionRate;
|
||||
} struct_80034EC0_Entry; // size = 0x18
|
||||
/* 0x14 */ f32 morphFrames;
|
||||
} AnimationInfo; // size = 0x18
|
||||
|
||||
// Another animation related structure
|
||||
typedef struct {
|
||||
/* 0x00 */ AnimationHeader* animation;
|
||||
/* 0x04 */ f32 frameCount;
|
||||
/* 0x08 */ u8 mode;
|
||||
/* 0x0C */ f32 transitionRate;
|
||||
} struct_D_80AA1678; // size = 0x10
|
||||
/* 0x0C */ f32 morphFrames;
|
||||
} AnimationFrameCountInfo; // size = 0x10
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ AnimationHeader* animation;
|
||||
/* 0x04 */ f32 playSpeed;
|
||||
/* 0x08 */ u8 mode;
|
||||
/* 0x0C */ f32 morphFrames;
|
||||
} AnimationSpeedInfo; // size = 0x10
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ AnimationHeader* animation;
|
||||
/* 0x04 */ u8 mode;
|
||||
/* 0x08 */ f32 morphFrames;
|
||||
} AnimationMinimalInfo; // size = 0xC
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s16 unk_00;
|
||||
|
|
|
@ -3857,19 +3857,19 @@ s16 func_80034DD4(Actor* actor, GlobalContext* globalCtx, s16 arg2, f32 arg3) {
|
|||
return arg2;
|
||||
}
|
||||
|
||||
void func_80034EC0(SkelAnime* skelAnime, struct_80034EC0_Entry* animations, s32 index) {
|
||||
void Animation_ChangeByInfo(SkelAnime* skelAnime, AnimationInfo* animationInfo, s32 index) {
|
||||
f32 frameCount;
|
||||
|
||||
animations += index;
|
||||
animationInfo += index;
|
||||
|
||||
if (animations->frameCount > 0.0f) {
|
||||
frameCount = animations->frameCount;
|
||||
if (animationInfo->frameCount > 0.0f) {
|
||||
frameCount = animationInfo->frameCount;
|
||||
} else {
|
||||
frameCount = Animation_GetLastFrame(animations->animation);
|
||||
frameCount = Animation_GetLastFrame(animationInfo->animation);
|
||||
}
|
||||
|
||||
Animation_Change(skelAnime, animations->animation, animations->playbackSpeed, animations->startFrame, frameCount,
|
||||
animations->mode, animations->transitionRate);
|
||||
Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame,
|
||||
frameCount, animationInfo->mode, animationInfo->morphFrames);
|
||||
}
|
||||
|
||||
void func_80034F54(GlobalContext* globalCtx, s16* arg1, s16* arg2, s32 arg3) {
|
||||
|
|
|
@ -84,33 +84,40 @@ static DamageTable sDamageTable[] = {
|
|||
/* Unknown 2 */ DMG_ENTRY(0, 0x0),
|
||||
};
|
||||
|
||||
static struct_D_80AA1678 sAnimations[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENCS_ANIM_0,
|
||||
/* 1 */ ENCS_ANIM_1,
|
||||
/* 2 */ ENCS_ANIM_2,
|
||||
/* 3 */ ENCS_ANIM_3
|
||||
} EnCsAnimation;
|
||||
|
||||
static AnimationFrameCountInfo sAnimationInfo[] = {
|
||||
{ &gGraveyardKidWalkAnim, 1.0f, ANIMMODE_ONCE, -10.0f },
|
||||
{ &gGraveyardKidSwingStickUpAnim, 1.0f, ANIMMODE_ONCE, -10.0f },
|
||||
{ &gGraveyardKidGrabStickTwoHandsAnim, 1.0f, ANIMMODE_ONCE, -10.0f },
|
||||
{ &gGraveyardKidIdleAnim, 1.0f, ANIMMODE_ONCE, -10.0f },
|
||||
};
|
||||
|
||||
void EnCs_SetAnimFromIndex(EnCs* this, s32 animIndex, s32* currentAnimIndex) {
|
||||
void EnCs_ChangeAnim(EnCs* this, s32 index, s32* currentIndex) {
|
||||
f32 morphFrames;
|
||||
|
||||
if ((*currentAnimIndex < 0) || (animIndex == *currentAnimIndex)) {
|
||||
if ((*currentIndex < 0) || (index == *currentIndex)) {
|
||||
morphFrames = 0.0f;
|
||||
} else {
|
||||
morphFrames = sAnimations[animIndex].transitionRate;
|
||||
morphFrames = sAnimationInfo[index].morphFrames;
|
||||
}
|
||||
|
||||
if (sAnimations[animIndex].frameCount >= 0.0f) {
|
||||
Animation_Change(&this->skelAnime, sAnimations[animIndex].animation, sAnimations[animIndex].frameCount, 0.0f,
|
||||
Animation_GetLastFrame(sAnimations[animIndex].animation), sAnimations[animIndex].mode,
|
||||
if (sAnimationInfo[index].frameCount >= 0.0f) {
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[index].animation, sAnimationInfo[index].frameCount, 0.0f,
|
||||
Animation_GetLastFrame(sAnimationInfo[index].animation), sAnimationInfo[index].mode,
|
||||
morphFrames);
|
||||
} else {
|
||||
Animation_Change(&this->skelAnime, sAnimations[animIndex].animation, sAnimations[animIndex].frameCount,
|
||||
Animation_GetLastFrame(sAnimations[animIndex].animation), 0.0f, sAnimations[animIndex].mode,
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[index].animation, sAnimationInfo[index].frameCount,
|
||||
Animation_GetLastFrame(sAnimationInfo[index].animation), 0.0f, sAnimationInfo[index].mode,
|
||||
morphFrames);
|
||||
}
|
||||
|
||||
*currentAnimIndex = animIndex;
|
||||
*currentIndex = index;
|
||||
}
|
||||
|
||||
void EnCs_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
@ -132,9 +139,9 @@ void EnCs_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
CollisionCheck_SetInfo2(&this->actor.colChkInfo, sDamageTable, &sColChkInfoInit2);
|
||||
Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 0.0f, 0.0f, 0.0f, 4);
|
||||
|
||||
Animation_Change(&this->skelAnime, sAnimations[0].animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimations[0].animation), sAnimations[0].mode,
|
||||
sAnimations[0].transitionRate);
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[ENCS_ANIM_0].animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimationInfo[ENCS_ANIM_0].animation), sAnimationInfo[ENCS_ANIM_0].mode,
|
||||
sAnimationInfo[ENCS_ANIM_0].morphFrames);
|
||||
|
||||
this->actor.targetMode = 6;
|
||||
this->path = this->actor.params & 0xFF;
|
||||
|
@ -143,7 +150,7 @@ void EnCs_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
this->currentAnimIndex = -1;
|
||||
this->actor.gravity = -1.0f;
|
||||
|
||||
EnCs_SetAnimFromIndex(this, 0, &this->currentAnimIndex);
|
||||
EnCs_ChangeAnim(this, ENCS_ANIM_0, &this->currentAnimIndex);
|
||||
|
||||
this->actionFunc = EnCs_Walk;
|
||||
this->walkSpeed = 1.0f;
|
||||
|
@ -165,11 +172,11 @@ s32 EnCs_GetTalkState(EnCs* this, GlobalContext* globalCtx) {
|
|||
if (Message_ShouldAdvance(globalCtx)) {
|
||||
if (globalCtx->msgCtx.choiceIndex == 0) {
|
||||
this->actor.textId = 0x2026;
|
||||
EnCs_SetAnimFromIndex(this, 3, &this->currentAnimIndex);
|
||||
EnCs_ChangeAnim(this, ENCS_ANIM_3, &this->currentAnimIndex);
|
||||
talkState = 2;
|
||||
} else {
|
||||
this->actor.textId = 0x2024;
|
||||
EnCs_SetAnimFromIndex(this, 1, &this->currentAnimIndex);
|
||||
EnCs_ChangeAnim(this, ENCS_ANIM_1, &this->currentAnimIndex);
|
||||
talkState = 2;
|
||||
}
|
||||
}
|
||||
|
@ -230,11 +237,11 @@ void EnCs_HandleTalking(EnCs* this, GlobalContext* globalCtx) {
|
|||
this->talkState = EnCs_GetTalkState(this, globalCtx);
|
||||
} else if (Actor_ProcessTalkRequest(&this->actor, globalCtx)) {
|
||||
if ((this->actor.textId == 0x2022) || ((this->actor.textId != 0x2022) && (this->actor.textId != 0x2028))) {
|
||||
EnCs_SetAnimFromIndex(this, 3, &this->currentAnimIndex);
|
||||
EnCs_ChangeAnim(this, ENCS_ANIM_3, &this->currentAnimIndex);
|
||||
}
|
||||
|
||||
if ((this->actor.textId == 0x2023) || (this->actor.textId == 0x2028)) {
|
||||
EnCs_SetAnimFromIndex(this, 1, &this->currentAnimIndex);
|
||||
EnCs_ChangeAnim(this, ENCS_ANIM_1, &this->currentAnimIndex);
|
||||
}
|
||||
|
||||
if (this->actor.textId == 0x2023) {
|
||||
|
@ -335,18 +342,18 @@ void EnCs_Walk(EnCs* this, GlobalContext* globalCtx) {
|
|||
if (rnd == 0) {
|
||||
if (gSaveContext.itemGetInf[3] & 0x400) {
|
||||
animIndex = 2.0f * Rand_ZeroOne();
|
||||
animIndex = (animIndex == 0) ? 2 : 1;
|
||||
animIndex = (animIndex == 0) ? ENCS_ANIM_2 : ENCS_ANIM_1;
|
||||
} else {
|
||||
animIndex = 2;
|
||||
animIndex = ENCS_ANIM_2;
|
||||
}
|
||||
|
||||
this->actionFunc = EnCs_Wait;
|
||||
} else {
|
||||
animIndex = 0;
|
||||
animIndex = ENCS_ANIM_0;
|
||||
}
|
||||
}
|
||||
|
||||
EnCs_SetAnimFromIndex(this, animIndex, &this->currentAnimIndex);
|
||||
EnCs_ChangeAnim(this, animIndex, &this->currentAnimIndex);
|
||||
}
|
||||
|
||||
if (this->talkState == 0) {
|
||||
|
@ -379,12 +386,12 @@ void EnCs_Wait(EnCs* this, GlobalContext* globalCtx) {
|
|||
this->animLoopCount--;
|
||||
animIndex = this->currentAnimIndex;
|
||||
} else {
|
||||
animIndex = 0;
|
||||
animIndex = ENCS_ANIM_0;
|
||||
this->actionFunc = EnCs_Walk;
|
||||
}
|
||||
}
|
||||
|
||||
EnCs_SetAnimFromIndex(this, animIndex, &this->currentAnimIndex);
|
||||
EnCs_ChangeAnim(this, animIndex, &this->currentAnimIndex);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -392,7 +399,7 @@ void EnCs_Talk(EnCs* this, GlobalContext* globalCtx) {
|
|||
Player* player = GET_PLAYER(globalCtx);
|
||||
|
||||
if (SkelAnime_Update(&this->skelAnime) != 0) {
|
||||
EnCs_SetAnimFromIndex(this, this->currentAnimIndex, &this->currentAnimIndex);
|
||||
EnCs_ChangeAnim(this, this->currentAnimIndex, &this->currentAnimIndex);
|
||||
}
|
||||
|
||||
this->flag |= 1;
|
||||
|
@ -402,7 +409,7 @@ void EnCs_Talk(EnCs* this, GlobalContext* globalCtx) {
|
|||
func_80034A14(&this->actor, &this->npcInfo, 0, 4);
|
||||
|
||||
if (this->talkState == 0) {
|
||||
EnCs_SetAnimFromIndex(this, 0, &this->currentAnimIndex);
|
||||
EnCs_ChangeAnim(this, ENCS_ANIM_0, &this->currentAnimIndex);
|
||||
this->actionFunc = EnCs_Walk;
|
||||
this->flag &= ~1;
|
||||
}
|
||||
|
|
|
@ -4,21 +4,6 @@
|
|||
|
||||
#define FLAGS (ACTOR_FLAG_0 | ACTOR_FLAG_3 | ACTOR_FLAG_4)
|
||||
|
||||
typedef struct {
|
||||
AnimationHeader* anim;
|
||||
f32 unk_4;
|
||||
u8 mode;
|
||||
f32 transitionRate;
|
||||
} EnDaikuAnimation;
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ ENDAIKU_ANIM_SHOUT,
|
||||
/* 1 */ ENDAIKU_ANIM_STAND,
|
||||
/* 2 */ ENDAIKU_ANIM_CELEBRATE,
|
||||
/* 3 */ ENDAIKU_ANIM_RUN,
|
||||
/* 4 */ ENDAIKU_ANIM_SIT
|
||||
} EnDaikuAnimationIdx;
|
||||
|
||||
typedef struct {
|
||||
Vec3f eyePosDeltaLocal;
|
||||
s32 maxFramesActive;
|
||||
|
@ -125,7 +110,15 @@ static DamageTable sDamageTable = {
|
|||
/* Unknown 2 */ DMG_ENTRY(0, 0x0),
|
||||
};
|
||||
|
||||
static EnDaikuAnimation sAnimations[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENDAIKU_ANIM_SHOUT,
|
||||
/* 1 */ ENDAIKU_ANIM_STAND,
|
||||
/* 2 */ ENDAIKU_ANIM_CELEBRATE,
|
||||
/* 3 */ ENDAIKU_ANIM_RUN,
|
||||
/* 4 */ ENDAIKU_ANIM_SIT
|
||||
} EnDaikuAnimation;
|
||||
|
||||
static AnimationFrameCountInfo sAnimationInfo[] = {
|
||||
{ &object_daiku_Anim_001AB0, 1.0f, 0, 0 }, { &object_daiku_Anim_007DE0, 1.0f, 0, 0 },
|
||||
{ &object_daiku_Anim_00885C, 1.0f, 0, 0 }, { &object_daiku_Anim_000C44, 1.0f, 0, 0 },
|
||||
{ &object_daiku_Anim_008164, 1.0f, 0, 0 },
|
||||
|
@ -138,19 +131,19 @@ static EnDaikuEscapeSubCamParam sEscapeSubCamParams[] = {
|
|||
{ { -40, 60, 60 }, 120 },
|
||||
};
|
||||
|
||||
void EnDaiku_Change(EnDaiku* this, s32 animIndex, s32* currentAnimIndex) {
|
||||
f32 transitionRate;
|
||||
void EnDaiku_ChangeAnim(EnDaiku* this, s32 index, s32* currentIndex) {
|
||||
f32 morphFrames;
|
||||
|
||||
if (*currentAnimIndex < 0 || *currentAnimIndex == animIndex) {
|
||||
transitionRate = 0.0f;
|
||||
if (*currentIndex < 0 || *currentIndex == index) {
|
||||
morphFrames = 0.0f;
|
||||
} else {
|
||||
transitionRate = sAnimations[animIndex].transitionRate;
|
||||
morphFrames = sAnimationInfo[index].morphFrames;
|
||||
}
|
||||
|
||||
Animation_Change(&this->skelAnime, sAnimations[animIndex].anim, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimations[animIndex].anim), sAnimations[animIndex].mode, transitionRate);
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[index].animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimationInfo[index].animation), sAnimationInfo[index].mode, morphFrames);
|
||||
|
||||
*currentAnimIndex = animIndex;
|
||||
*currentIndex = index;
|
||||
}
|
||||
|
||||
void EnDaiku_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
@ -191,8 +184,9 @@ void EnDaiku_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
|
||||
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit2);
|
||||
|
||||
Animation_Change(&this->skelAnime, sAnimations[0].anim, 1.0f, 0.0f, Animation_GetLastFrame(sAnimations[0].anim),
|
||||
sAnimations[0].mode, sAnimations[0].transitionRate);
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[ENDAIKU_ANIM_SHOUT].animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimationInfo[ENDAIKU_ANIM_SHOUT].animation),
|
||||
sAnimationInfo[ENDAIKU_ANIM_SHOUT].mode, sAnimationInfo[ENDAIKU_ANIM_SHOUT].morphFrames);
|
||||
|
||||
Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 0.0f, 0.0f, 0.0f, 4);
|
||||
|
||||
|
@ -203,15 +197,15 @@ void EnDaiku_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
this->initPos = this->actor.world.pos;
|
||||
|
||||
if (globalCtx->sceneNum == SCENE_GERUDOWAY) {
|
||||
EnDaiku_Change(this, ENDAIKU_ANIM_STAND, &this->currentAnimIndex);
|
||||
EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_STAND, &this->currentAnimIndex);
|
||||
this->stateFlags |= ENDAIKU_STATEFLAG_1 | ENDAIKU_STATEFLAG_2;
|
||||
this->actionFunc = EnDaiku_Jailed;
|
||||
} else {
|
||||
if ((this->actor.params & 3) == 1 || (this->actor.params & 3) == 3) {
|
||||
EnDaiku_Change(this, ENDAIKU_ANIM_SIT, &this->currentAnimIndex);
|
||||
EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_SIT, &this->currentAnimIndex);
|
||||
this->stateFlags |= ENDAIKU_STATEFLAG_1;
|
||||
} else {
|
||||
EnDaiku_Change(this, ENDAIKU_ANIM_SHOUT, &this->currentAnimIndex);
|
||||
EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_SHOUT, &this->currentAnimIndex);
|
||||
this->stateFlags |= ENDAIKU_STATEFLAG_1 | ENDAIKU_STATEFLAG_2;
|
||||
}
|
||||
|
||||
|
@ -369,7 +363,7 @@ void EnDaiku_Jailed(EnDaiku* this, GlobalContext* globalCtx) {
|
|||
if (gerudo == NULL) {
|
||||
this->stateFlags |= ENDAIKU_STATEFLAG_GERUDODEFEATED;
|
||||
this->stateFlags &= ~ENDAIKU_STATEFLAG_GERUDOFIGHTING;
|
||||
EnDaiku_Change(this, ENDAIKU_ANIM_CELEBRATE, &this->currentAnimIndex);
|
||||
EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_CELEBRATE, &this->currentAnimIndex);
|
||||
this->actionFunc = EnDaiku_WaitFreedom;
|
||||
} else if (!(this->stateFlags & ENDAIKU_STATEFLAG_GERUDOFIGHTING) && !gerudo->invisible) {
|
||||
this->stateFlags |= ENDAIKU_STATEFLAG_GERUDOFIGHTING;
|
||||
|
@ -402,7 +396,7 @@ void EnDaiku_InitEscape(EnDaiku* this, GlobalContext* globalCtx) {
|
|||
s32 exitLoop;
|
||||
|
||||
Audio_PlayFanfare(NA_BGM_APPEAR);
|
||||
EnDaiku_Change(this, ENDAIKU_ANIM_RUN, &this->currentAnimIndex);
|
||||
EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_RUN, &this->currentAnimIndex);
|
||||
this->stateFlags &= ~(ENDAIKU_STATEFLAG_1 | ENDAIKU_STATEFLAG_2);
|
||||
|
||||
gSaveContext.eventChkInf[9] |= 1 << (this->actor.params & 3);
|
||||
|
|
|
@ -93,26 +93,34 @@ static DamageTable sDamageTable = {
|
|||
/* Unknown 2 */ DMG_ENTRY(0, 0x0),
|
||||
};
|
||||
|
||||
static struct_D_80AA1678 sAnimations[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENDAIKUKAKARIKO_ANIM_0,
|
||||
/* 1 */ ENDAIKUKAKARIKO_ANIM_1,
|
||||
/* 2 */ ENDAIKUKAKARIKO_ANIM_2,
|
||||
/* 3 */ ENDAIKUKAKARIKO_ANIM_3,
|
||||
/* 4 */ ENDAIKUKAKARIKO_ANIM_4,
|
||||
/* 5 */ ENDAIKUKAKARIKO_ANIM_5
|
||||
} EnDaikuKakarikoAnimation;
|
||||
|
||||
static AnimationFrameCountInfo sAnimationInfo[] = {
|
||||
{ &object_daiku_Anim_001AB0, 1.0f, 2, -7.0f }, { &object_daiku_Anim_007DE0, 1.0f, 0, -7.0f },
|
||||
{ &object_daiku_Anim_00885C, 1.0f, 0, -7.0f }, { &object_daiku_Anim_000C44, 1.0f, 0, -7.0f },
|
||||
{ &object_daiku_Anim_000600, 1.0f, 0, -7.0f }, { &object_daiku_Anim_008164, 1.0f, 0, -7.0f },
|
||||
};
|
||||
|
||||
void EnDaikuKakariko_SetAnimFromIndex(EnDaikuKakariko* this, s32 animIndex, s32* currentAnimIndex) {
|
||||
void EnDaikuKakariko_ChangeAnim(EnDaikuKakariko* this, s32 index, s32* currentIndex) {
|
||||
f32 morphFrames;
|
||||
|
||||
if ((*currentAnimIndex < 0) || (animIndex == *currentAnimIndex)) {
|
||||
if ((*currentIndex < 0) || (index == *currentIndex)) {
|
||||
morphFrames = 0.0f;
|
||||
} else {
|
||||
morphFrames = sAnimations[animIndex].transitionRate;
|
||||
morphFrames = sAnimationInfo[index].morphFrames;
|
||||
}
|
||||
|
||||
Animation_Change(&this->skelAnime, sAnimations[animIndex].animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimations[animIndex].animation), sAnimations[animIndex].mode,
|
||||
morphFrames);
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[index].animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimationInfo[index].animation), sAnimationInfo[index].mode, morphFrames);
|
||||
|
||||
*currentAnimIndex = animIndex;
|
||||
*currentIndex = index;
|
||||
}
|
||||
|
||||
void EnDaikuKakariko_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
@ -156,8 +164,9 @@ void EnDaikuKakariko_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInit);
|
||||
|
||||
Animation_Change(&this->skelAnime, sAnimations->animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimations->animation), sAnimations->mode, sAnimations->transitionRate);
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[ENDAIKUKAKARIKO_ANIM_0].animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimationInfo[ENDAIKUKAKARIKO_ANIM_0].animation),
|
||||
sAnimationInfo[ENDAIKUKAKARIKO_ANIM_0].mode, sAnimationInfo[ENDAIKUKAKARIKO_ANIM_0].morphFrames);
|
||||
|
||||
Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 0.0f, 0.0f, 0.0f, 4);
|
||||
|
||||
|
@ -172,20 +181,20 @@ void EnDaikuKakariko_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
}
|
||||
|
||||
if (this->flags & 0x10) {
|
||||
EnDaikuKakariko_SetAnimFromIndex(this, 3, &this->currentAnimIndex);
|
||||
EnDaikuKakariko_ChangeAnim(this, ENDAIKUKAKARIKO_ANIM_3, &this->currentAnimIndex);
|
||||
this->actionFunc = EnDaikuKakariko_Run;
|
||||
} else {
|
||||
if (this->flags & 8) {
|
||||
if (((this->actor.params & 3) == CARPENTER_SABOORO) || ((this->actor.params & 3) == CARPENTER_SHIRO)) {
|
||||
EnDaikuKakariko_SetAnimFromIndex(this, 5, &this->currentAnimIndex);
|
||||
EnDaikuKakariko_ChangeAnim(this, ENDAIKUKAKARIKO_ANIM_5, &this->currentAnimIndex);
|
||||
this->flags |= 0x800;
|
||||
} else {
|
||||
EnDaikuKakariko_SetAnimFromIndex(this, 1, &this->currentAnimIndex);
|
||||
EnDaikuKakariko_ChangeAnim(this, ENDAIKUKAKARIKO_ANIM_1, &this->currentAnimIndex);
|
||||
}
|
||||
|
||||
this->skelAnime.curFrame = (s32)(Rand_ZeroOne() * this->skelAnime.endFrame);
|
||||
} else {
|
||||
EnDaikuKakariko_SetAnimFromIndex(this, 0, &this->currentAnimIndex);
|
||||
EnDaikuKakariko_ChangeAnim(this, ENDAIKUKAKARIKO_ANIM_0, &this->currentAnimIndex);
|
||||
this->skelAnime.curFrame = (s32)(Rand_ZeroOne() * this->skelAnime.endFrame);
|
||||
}
|
||||
|
||||
|
@ -271,21 +280,21 @@ void EnDaikuKakariko_HandleTalking(EnDaikuKakariko* this, GlobalContext* globalC
|
|||
|
||||
void EnDaikuKakariko_Talk(EnDaikuKakariko* this, GlobalContext* globalCtx) {
|
||||
if (SkelAnime_Update(&this->skelAnime)) {
|
||||
EnDaikuKakariko_SetAnimFromIndex(this, 3, &this->currentAnimIndex);
|
||||
EnDaikuKakariko_ChangeAnim(this, ENDAIKUKAKARIKO_ANIM_3, &this->currentAnimIndex);
|
||||
}
|
||||
|
||||
EnDaikuKakariko_HandleTalking(this, globalCtx);
|
||||
|
||||
if (this->talkState == 0) {
|
||||
if (this->flags & 0x10) {
|
||||
EnDaikuKakariko_SetAnimFromIndex(this, 3, &this->currentAnimIndex);
|
||||
EnDaikuKakariko_ChangeAnim(this, ENDAIKUKAKARIKO_ANIM_3, &this->currentAnimIndex);
|
||||
this->flags &= ~0x0300;
|
||||
this->actionFunc = EnDaikuKakariko_Run;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(this->flags & 8)) {
|
||||
EnDaikuKakariko_SetAnimFromIndex(this, 0, &this->currentAnimIndex);
|
||||
EnDaikuKakariko_ChangeAnim(this, ENDAIKUKAKARIKO_ANIM_0, &this->currentAnimIndex);
|
||||
}
|
||||
|
||||
if ((this->flags & 0x800) == 0) {
|
||||
|
@ -301,12 +310,12 @@ void EnDaikuKakariko_Wait(EnDaikuKakariko* this, GlobalContext* globalCtx) {
|
|||
EnDaikuKakariko_HandleTalking(this, globalCtx);
|
||||
|
||||
if (SkelAnime_Update(&this->skelAnime)) {
|
||||
EnDaikuKakariko_SetAnimFromIndex(this, 0, &this->currentAnimIndex);
|
||||
EnDaikuKakariko_ChangeAnim(this, ENDAIKUKAKARIKO_ANIM_0, &this->currentAnimIndex);
|
||||
}
|
||||
|
||||
if (this->talkState != 0) {
|
||||
if (!(this->flags & 8)) {
|
||||
EnDaikuKakariko_SetAnimFromIndex(this, 4, &this->currentAnimIndex);
|
||||
EnDaikuKakariko_ChangeAnim(this, ENDAIKUKAKARIKO_ANIM_4, &this->currentAnimIndex);
|
||||
}
|
||||
|
||||
if (!(this->flags & 0x800)) {
|
||||
|
@ -323,7 +332,7 @@ void EnDaikuKakariko_StopRunning(EnDaikuKakariko* this, GlobalContext* globalCtx
|
|||
this->timer--;
|
||||
|
||||
if (this->timer <= 0) {
|
||||
EnDaikuKakariko_SetAnimFromIndex(this, 3, &this->currentAnimIndex);
|
||||
EnDaikuKakariko_ChangeAnim(this, ENDAIKUKAKARIKO_ANIM_3, &this->currentAnimIndex);
|
||||
this->actionFunc = EnDaikuKakariko_Run;
|
||||
} else {
|
||||
this->skelAnime.curFrame = this->skelAnime.startFrame;
|
||||
|
@ -334,7 +343,7 @@ void EnDaikuKakariko_StopRunning(EnDaikuKakariko* this, GlobalContext* globalCtx
|
|||
|
||||
if (this->talkState != 0) {
|
||||
this->flags |= 0x200;
|
||||
EnDaikuKakariko_SetAnimFromIndex(this, 4, &this->currentAnimIndex);
|
||||
EnDaikuKakariko_ChangeAnim(this, ENDAIKUKAKARIKO_ANIM_4, &this->currentAnimIndex);
|
||||
this->actionFunc = EnDaikuKakariko_Talk;
|
||||
}
|
||||
}
|
||||
|
@ -372,7 +381,7 @@ void EnDaikuKakariko_Run(EnDaikuKakariko* this, GlobalContext* globalCtx) {
|
|||
|
||||
if (this->flags & 0x400) {
|
||||
this->timer = 2;
|
||||
EnDaikuKakariko_SetAnimFromIndex(this, 0, &this->currentAnimIndex);
|
||||
EnDaikuKakariko_ChangeAnim(this, ENDAIKUKAKARIKO_ANIM_0, &this->currentAnimIndex);
|
||||
this->actionFunc = EnDaikuKakariko_StopRunning;
|
||||
return;
|
||||
}
|
||||
|
@ -393,7 +402,7 @@ void EnDaikuKakariko_Run(EnDaikuKakariko* this, GlobalContext* globalCtx) {
|
|||
|
||||
if (this->flags & 0x400) {
|
||||
this->timer = 2;
|
||||
EnDaikuKakariko_SetAnimFromIndex(this, 0, &this->currentAnimIndex);
|
||||
EnDaikuKakariko_ChangeAnim(this, ENDAIKUKAKARIKO_ANIM_0, &this->currentAnimIndex);
|
||||
this->actionFunc = EnDaikuKakariko_StopRunning;
|
||||
return;
|
||||
}
|
||||
|
@ -437,7 +446,7 @@ void EnDaikuKakariko_Run(EnDaikuKakariko* this, GlobalContext* globalCtx) {
|
|||
|
||||
if (this->talkState != 0) {
|
||||
this->flags |= 0x200;
|
||||
EnDaikuKakariko_SetAnimFromIndex(this, 4, &this->currentAnimIndex);
|
||||
EnDaikuKakariko_ChangeAnim(this, ENDAIKUKAKARIKO_ANIM_4, &this->currentAnimIndex);
|
||||
this->actionFunc = EnDaikuKakariko_Talk;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -120,13 +120,13 @@ static InitChainEntry sInitChain[] = {
|
|||
ICHAIN_F32(targetArrowOffset, 30, ICHAIN_STOP),
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ AnimationHeader* anim;
|
||||
/* 0x04 */ u8 mode;
|
||||
/* 0x08 */ f32 transitionRate;
|
||||
} DnsAnimInfo; // size = 0xC
|
||||
typedef enum {
|
||||
/* 0 */ ENDNS_ANIM_0,
|
||||
/* 1 */ ENDNS_ANIM_1,
|
||||
/* 2 */ ENDNS_ANIM_2
|
||||
} EnDnsAnimation;
|
||||
|
||||
static DnsAnimInfo sAnimInfo[] = {
|
||||
static AnimationMinimalInfo sAnimationInfo[] = {
|
||||
{ &gBusinessScrubNervousIdleAnim, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gBusinessScrubAnim_4404, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gBusinessScrubNervousTransitionAnim, ANIMMODE_ONCE, 0.0f },
|
||||
|
@ -173,13 +173,13 @@ void EnDns_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
|||
Collider_DestroyCylinder(globalCtx, &this->collider);
|
||||
}
|
||||
|
||||
void EnDns_Change(EnDns* this, u8 arg1) {
|
||||
void EnDns_ChangeAnim(EnDns* this, u8 index) {
|
||||
s16 frameCount;
|
||||
|
||||
frameCount = Animation_GetLastFrame(sAnimInfo[arg1].anim);
|
||||
this->unk_2BA = arg1; // Not used anywhere else?
|
||||
Animation_Change(&this->skelAnime, sAnimInfo[arg1].anim, 1.0f, 0.0f, (f32)frameCount, sAnimInfo[arg1].mode,
|
||||
sAnimInfo[arg1].transitionRate);
|
||||
frameCount = Animation_GetLastFrame(sAnimationInfo[index].animation);
|
||||
this->unk_2BA = index; // Not used anywhere else?
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[index].animation, 1.0f, 0.0f, (f32)frameCount,
|
||||
sAnimationInfo[index].mode, sAnimationInfo[index].morphFrames);
|
||||
}
|
||||
|
||||
/* Item give checking functions */
|
||||
|
@ -315,7 +315,7 @@ void func_809EFB40(EnDns* this) {
|
|||
void EnDns_SetupWait(EnDns* this, GlobalContext* globalCtx) {
|
||||
if (this->skelAnime.curFrame == this->skelAnime.endFrame) {
|
||||
this->actionFunc = EnDns_Wait;
|
||||
EnDns_Change(this, 0);
|
||||
EnDns_ChangeAnim(this, ENDNS_ANIM_0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -411,7 +411,7 @@ void func_809EFF98(EnDns* this, GlobalContext* globalCtx) {
|
|||
this->dropCollectible = 1;
|
||||
this->maintainCollider = 0;
|
||||
this->actor.flags &= ~ACTOR_FLAG_0;
|
||||
EnDns_Change(this, 1);
|
||||
EnDns_ChangeAnim(this, ENDNS_ANIM_1);
|
||||
this->actionFunc = EnDns_SetupBurrow;
|
||||
}
|
||||
} else {
|
||||
|
@ -419,7 +419,7 @@ void func_809EFF98(EnDns* this, GlobalContext* globalCtx) {
|
|||
this->dropCollectible = 1;
|
||||
this->maintainCollider = 0;
|
||||
this->actor.flags &= ~ACTOR_FLAG_0;
|
||||
EnDns_Change(this, 1);
|
||||
EnDns_ChangeAnim(this, ENDNS_ANIM_1);
|
||||
this->actionFunc = EnDns_SetupBurrow;
|
||||
}
|
||||
}
|
||||
|
@ -428,7 +428,7 @@ void func_809F008C(EnDns* this, GlobalContext* globalCtx) {
|
|||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(globalCtx)) {
|
||||
this->maintainCollider = 0;
|
||||
this->actor.flags &= ~ACTOR_FLAG_0;
|
||||
EnDns_Change(this, 1);
|
||||
EnDns_ChangeAnim(this, ENDNS_ANIM_1);
|
||||
this->actionFunc = EnDns_SetupBurrow;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,7 +55,18 @@ static ColliderCylinderInit sCylinderInit = {
|
|||
|
||||
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, 50 };
|
||||
|
||||
static struct_80034EC0_Entry sAnimations[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENDOG_ANIM_0,
|
||||
/* 1 */ ENDOG_ANIM_1,
|
||||
/* 2 */ ENDOG_ANIM_2,
|
||||
/* 3 */ ENDOG_ANIM_3,
|
||||
/* 4 */ ENDOG_ANIM_4,
|
||||
/* 5 */ ENDOG_ANIM_5,
|
||||
/* 6 */ ENDOG_ANIM_6,
|
||||
/* 7 */ ENDOG_ANIM_7
|
||||
} EnDogAnimation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &gDogWalkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gDogWalkAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -6.0f },
|
||||
{ &gDogRunAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -6.0f },
|
||||
|
@ -120,34 +131,34 @@ s32 EnDog_PlayAnimAndSFX(EnDog* this) {
|
|||
this->behavior = this->nextBehavior;
|
||||
switch (this->behavior) {
|
||||
case DOG_WALK:
|
||||
animation = 1;
|
||||
animation = ENDOG_ANIM_1;
|
||||
break;
|
||||
case DOG_RUN:
|
||||
animation = 2;
|
||||
animation = ENDOG_ANIM_2;
|
||||
break;
|
||||
case DOG_BARK:
|
||||
animation = 3;
|
||||
animation = ENDOG_ANIM_3;
|
||||
break;
|
||||
case DOG_SIT:
|
||||
animation = 4;
|
||||
animation = ENDOG_ANIM_4;
|
||||
break;
|
||||
case DOG_BOW:
|
||||
animation = 6;
|
||||
animation = ENDOG_ANIM_6;
|
||||
break;
|
||||
}
|
||||
func_80034EC0(&this->skelAnime, sAnimations, animation);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, animation);
|
||||
}
|
||||
|
||||
switch (this->behavior) {
|
||||
case DOG_SIT:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 5);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENDOG_ANIM_5);
|
||||
this->behavior = this->nextBehavior = DOG_SIT_2;
|
||||
}
|
||||
break;
|
||||
case DOG_BOW:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 7);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENDOG_ANIM_7);
|
||||
this->behavior = this->nextBehavior = DOG_BOW_2;
|
||||
}
|
||||
break;
|
||||
|
@ -235,7 +246,7 @@ void EnDog_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gDogSkel, NULL, this->jointTable, this->morphTable, 13);
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 0);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENDOG_ANIM_0);
|
||||
|
||||
if ((this->actor.params & 0x8000) == 0) {
|
||||
this->actor.params = (this->actor.params & 0xF0FF) | ((((this->actor.params & 0x0F00) >> 8) + 1) << 8);
|
||||
|
|
|
@ -58,7 +58,25 @@ static CollisionCheckInfoInit2 sColChkInfoInit = {
|
|||
0, 0, 0, 0, MASS_IMMOVABLE,
|
||||
};
|
||||
|
||||
static struct_80034EC0_Entry sAnimations[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENDU_ANIM_0,
|
||||
/* 1 */ ENDU_ANIM_1,
|
||||
/* 2 */ ENDU_ANIM_2,
|
||||
/* 3 */ ENDU_ANIM_3,
|
||||
/* 4 */ ENDU_ANIM_4,
|
||||
/* 5 */ ENDU_ANIM_5,
|
||||
/* 6 */ ENDU_ANIM_6,
|
||||
/* 7 */ ENDU_ANIM_7,
|
||||
/* 8 */ ENDU_ANIM_8,
|
||||
/* 9 */ ENDU_ANIM_9,
|
||||
/* 10 */ ENDU_ANIM_10,
|
||||
/* 11 */ ENDU_ANIM_11,
|
||||
/* 12 */ ENDU_ANIM_12,
|
||||
/* 13 */ ENDU_ANIM_13,
|
||||
/* 14 */ ENDU_ANIM_14
|
||||
} EnDuAnimation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &gDaruniaIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gDaruniaIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
{ &gDaruniaItemGiveAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
|
@ -227,25 +245,32 @@ void func_809FE000(CsCmdActorAction* csAction, Vec3f* dst) {
|
|||
}
|
||||
|
||||
void func_809FE040(EnDu* this) {
|
||||
s32 animationIndices[] = { 8, 8, 8, 8, 9, 10, 10, 13 };
|
||||
s32 animationIndices[] = {
|
||||
ENDU_ANIM_8, ENDU_ANIM_8, ENDU_ANIM_8, ENDU_ANIM_8, ENDU_ANIM_9, ENDU_ANIM_10, ENDU_ANIM_10, ENDU_ANIM_13,
|
||||
};
|
||||
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
this->unk_1E6++;
|
||||
if (this->unk_1E6 >= 8) {
|
||||
this->unk_1E6 = 0;
|
||||
}
|
||||
func_80034EC0(&this->skelAnime, sAnimations, animationIndices[this->unk_1E6]);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, animationIndices[this->unk_1E6]);
|
||||
}
|
||||
}
|
||||
|
||||
void func_809FE104(EnDu* this) {
|
||||
s32 animationIndices[] = { 8, 8, 11, 12 };
|
||||
s32 animationIndices[] = {
|
||||
ENDU_ANIM_8,
|
||||
ENDU_ANIM_8,
|
||||
ENDU_ANIM_11,
|
||||
ENDU_ANIM_12,
|
||||
};
|
||||
|
||||
if (this->unk_1E6 < 4) {
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
this->unk_1E6++;
|
||||
if (this->unk_1E6 < 4) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, animationIndices[this->unk_1E6]);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, animationIndices[this->unk_1E6]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -264,7 +289,7 @@ void EnDu_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
Actor_Kill(&this->actor);
|
||||
return;
|
||||
}
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 0);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENDU_ANIM_0);
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->actor.targetMode = 1;
|
||||
this->unk_1F4.unk_00 = 0;
|
||||
|
@ -428,11 +453,11 @@ void func_809FE890(EnDu* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
if (this->unk_1EA != csAction->action) {
|
||||
if (csAction->action == 1) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 1);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENDU_ANIM_1);
|
||||
}
|
||||
if (csAction->action == 7 || csAction->action == 8) {
|
||||
this->unk_1E6 = 0;
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 7);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENDU_ANIM_7);
|
||||
}
|
||||
this->unk_1EA = csAction->action;
|
||||
if (this->unk_1EA == 7) {
|
||||
|
@ -481,7 +506,7 @@ void func_809FEB08(EnDu* this, GlobalContext* globalCtx) {
|
|||
|
||||
if (this->unk_1E8 == 1) {
|
||||
func_8002DF54(globalCtx, &this->actor, 7);
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 1);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENDU_ANIM_1);
|
||||
EnDu_SetupAction(this, func_809FE3C0);
|
||||
return;
|
||||
}
|
||||
|
@ -493,7 +518,7 @@ void func_809FEB08(EnDu* this, GlobalContext* globalCtx) {
|
|||
EnDu_SetupAction(this, func_809FE3C0);
|
||||
}
|
||||
Message_StartTextbox(globalCtx, this->actor.textId, NULL);
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 14);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENDU_ANIM_14);
|
||||
this->unk_1F4.unk_00 = 1;
|
||||
}
|
||||
|
||||
|
@ -531,7 +556,7 @@ void EnDu_Update(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
if (this->skelAnime.animation == &gDaruniaDancingEndAnim &&
|
||||
Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 1);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENDU_ANIM_1);
|
||||
}
|
||||
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
|
|
|
@ -192,7 +192,15 @@ static ColliderJntSphInit sJntSphInit = {
|
|||
|
||||
static CollisionCheckInfoInit2 sColChkInit = { 24, 2, 25, 25, MASS_IMMOVABLE };
|
||||
|
||||
static struct_80034EC0_Entry sAnimations[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENFD_ANIM_0,
|
||||
/* 1 */ ENFD_ANIM_1,
|
||||
/* 2 */ ENFD_ANIM_2,
|
||||
/* 3 */ ENFD_ANIM_3,
|
||||
/* 4 */ ENFD_ANIM_4
|
||||
} EnFdAnimation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &gFlareDancerCastingFireAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE_INTERP, 0.0f },
|
||||
{ &gFlareDancerBackflipAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE_INTERP, -10.0f },
|
||||
{ &gFlareDancerGettingUpAnim, 0.0f, 0.0f, -1.0f, ANIMMODE_ONCE_INTERP, -10.0f },
|
||||
|
@ -471,7 +479,7 @@ void EnFd_Reappear(EnFd* this, GlobalContext* globalCtx) {
|
|||
this->coreActive = false;
|
||||
this->actor.scale.y = 0.0f;
|
||||
this->fadeAlpha = 255.0f;
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 0);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENFD_ANIM_0);
|
||||
Audio_PlayActorSound2(&this->actor, NA_SE_EN_FLAME_LAUGH);
|
||||
this->actionFunc = EnFd_SpinAndGrow;
|
||||
}
|
||||
|
@ -483,7 +491,7 @@ void EnFd_SpinAndGrow(EnFd* this, GlobalContext* globalCtx) {
|
|||
this->actor.world.rot.y ^= 0x8000;
|
||||
this->actor.flags |= ACTOR_FLAG_0;
|
||||
this->actor.speedXZ = 8.0f;
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 1);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENFD_ANIM_1);
|
||||
this->actionFunc = EnFd_JumpToGround;
|
||||
} else {
|
||||
this->actor.scale.y = this->skelAnime.curFrame * (0.01f / this->skelAnime.animLength);
|
||||
|
@ -497,7 +505,7 @@ void EnFd_JumpToGround(EnFd* this, GlobalContext* globalCtx) {
|
|||
this->actor.velocity.y = 0.0f;
|
||||
this->actor.speedXZ = 0.0f;
|
||||
this->actor.world.rot.y = this->actor.shape.rot.y;
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 2);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENFD_ANIM_2);
|
||||
this->actionFunc = EnFd_Land;
|
||||
}
|
||||
}
|
||||
|
@ -511,7 +519,7 @@ void EnFd_Land(EnFd* this, GlobalContext* globalCtx) {
|
|||
this->runRadius = Math_Vec3f_DistXYZ(&this->actor.world.pos, &this->actor.home.pos);
|
||||
EnFd_GetPosAdjAroundCircle(&adjPos, this, this->runRadius, this->runDir);
|
||||
this->actor.world.rot.y = Math_FAtan2F(adjPos.x, adjPos.z) * (0x8000 / M_PI);
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 4);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENFD_ANIM_4);
|
||||
this->actionFunc = EnFd_SpinAndSpawnFire;
|
||||
}
|
||||
}
|
||||
|
@ -559,7 +567,7 @@ void EnFd_SpinAndSpawnFire(EnFd* this, GlobalContext* globalCtx) {
|
|||
this->curYawToInitPos = this->runDir < 0 ? 0xFFFF : 0;
|
||||
this->circlesToComplete = (globalCtx->state.frames & 7) + 2;
|
||||
this->spinTimer = Rand_S16Offset(30, 120);
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 3);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENFD_ANIM_3);
|
||||
this->actionFunc = EnFd_Run;
|
||||
}
|
||||
}
|
||||
|
@ -567,7 +575,7 @@ void EnFd_SpinAndSpawnFire(EnFd* this, GlobalContext* globalCtx) {
|
|||
|
||||
/**
|
||||
* Run around in a circle with the center being the initial position, and
|
||||
* the radius being the distance from the initial postion to the nearest
|
||||
* the radius being the distance from the initial position to the nearest
|
||||
* threat (bomb or player).
|
||||
*/
|
||||
void EnFd_Run(EnFd* this, GlobalContext* globalCtx) {
|
||||
|
@ -581,7 +589,7 @@ void EnFd_Run(EnFd* this, GlobalContext* globalCtx) {
|
|||
this->actor.world.rot.y ^= 0x8000;
|
||||
this->actor.velocity.y = 6.0f;
|
||||
this->actor.speedXZ = 0.0f;
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 1);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENFD_ANIM_1);
|
||||
this->actionFunc = EnFd_JumpToGround;
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -65,7 +65,13 @@ static ColliderJntSphInit sJntSphInit = {
|
|||
|
||||
static CollisionCheckInfoInit2 D_80A1FB94 = { 8, 2, 25, 25, MASS_IMMOVABLE };
|
||||
|
||||
static struct_80034EC0_Entry D_80A1FBA0[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENFW_ANIM_0,
|
||||
/* 1 */ ENFW_ANIM_1,
|
||||
/* 2 */ ENFW_ANIM_2
|
||||
} EnFwAnimation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &gFlareDancerCoreInitRunCycleAnim, 0.0f, 0.0f, -1.0f, ANIMMODE_ONCE_INTERP, 0.0f },
|
||||
{ &gFlareDancerCoreRunCycleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE_INTERP, -8.0f },
|
||||
{ &gFlareDancerCoreEndRunCycleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP_INTERP, -8.0f },
|
||||
|
@ -186,7 +192,7 @@ void EnFw_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gFlareDancerCoreSkel, NULL, this->jointTable, this->morphTable,
|
||||
11);
|
||||
func_80034EC0(&this->skelAnime, D_80A1FBA0, 0);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENFW_ANIM_0);
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f);
|
||||
Collider_InitJntSph(globalCtx, &this->collider);
|
||||
Collider_SetJntSph(globalCtx, &this->collider, &this->actor, &sJntSphInit, this->sphs);
|
||||
|
@ -220,7 +226,7 @@ void EnFw_Run(EnFw* this, GlobalContext* globalCtx) {
|
|||
if (this->skelAnime.animation == &gFlareDancerCoreInitRunCycleAnim) {
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) == 0) {
|
||||
this->runRadius = Math_Vec3f_DistXYZ(&this->actor.world.pos, &this->actor.parent->world.pos);
|
||||
func_80034EC0(&this->skelAnime, D_80A1FBA0, 2);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENFW_ANIM_2);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -336,7 +342,7 @@ void EnFw_TurnToParentInitPos(EnFw* this, GlobalContext* globalCtx) {
|
|||
this->actor.velocity.y = 14.0f;
|
||||
this->actor.home.pos = this->actor.world.pos;
|
||||
Audio_PlayActorSound2(&this->actor, NA_SE_EN_STAL_JUMP);
|
||||
func_80034EC0(&this->skelAnime, D_80A1FBA0, 1);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENFW_ANIM_1);
|
||||
this->actionFunc = EnFw_JumpToParentInitPos;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,14 +69,14 @@ static CollisionCheckInfoInit2 sColChkInfoInit = {
|
|||
0, 0, 0, 0, MASS_IMMOVABLE,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
AnimationHeader* animation;
|
||||
f32 playSpeed;
|
||||
u8 mode;
|
||||
f32 morphRate;
|
||||
typedef enum {
|
||||
/* 0 */ ENGO_ANIM_0,
|
||||
/* 1 */ ENGO_ANIM_1,
|
||||
/* 2 */ ENGO_ANIM_2,
|
||||
/* 3 */ ENGO_ANIM_3
|
||||
} EnGoAnimation;
|
||||
|
||||
static EnGoAnimation sAnimationEntries[] = {
|
||||
static AnimationSpeedInfo sAnimationInfo[] = {
|
||||
{ &gGoronAnim_004930, 0.0f, ANIMMODE_LOOP_INTERP, 0.0f },
|
||||
{ &gGoronAnim_004930, 0.0f, ANIMMODE_LOOP_INTERP, -10.0f },
|
||||
{ &gGoronAnim_0029A8, 1.0f, ANIMMODE_LOOP_INTERP, -10.0f },
|
||||
|
@ -347,11 +347,11 @@ s32 func_80A3ED24(GlobalContext* globalCtx, EnGo* this, struct_80034A14_arg1* ar
|
|||
}
|
||||
}
|
||||
|
||||
void EnGo_ChangeAnimation(EnGo* this, s32 animIndex) {
|
||||
Animation_Change(&this->skelAnime, sAnimationEntries[animIndex].animation,
|
||||
sAnimationEntries[animIndex].playSpeed * ((this->actor.params & 0xF0) == 0x90 ? 0.5f : 1.0f), 0.0f,
|
||||
Animation_GetLastFrame(sAnimationEntries[animIndex].animation), sAnimationEntries[animIndex].mode,
|
||||
sAnimationEntries[animIndex].morphRate);
|
||||
void EnGo_ChangeAnim(EnGo* this, s32 index) {
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[index].animation,
|
||||
sAnimationInfo[index].playSpeed * ((this->actor.params & 0xF0) == 0x90 ? 0.5f : 1.0f), 0.0f,
|
||||
Animation_GetLastFrame(sAnimationInfo[index].animation), sAnimationInfo[index].mode,
|
||||
sAnimationInfo[index].morphFrames);
|
||||
}
|
||||
|
||||
s32 EnGo_IsActorSpawned(EnGo* this, GlobalContext* globalCtx) {
|
||||
|
@ -639,7 +639,7 @@ void EnGo_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
this->actor.flags &= ~ACTOR_FLAG_5;
|
||||
}
|
||||
|
||||
EnGo_ChangeAnimation(this, 0);
|
||||
EnGo_ChangeAnim(this, ENGO_ANIM_0);
|
||||
this->actor.targetMode = 6;
|
||||
this->unk_1E0.unk_00 = 0;
|
||||
this->actor.gravity = -1.0f;
|
||||
|
@ -859,7 +859,7 @@ void EnGo_BiggoronActionFunc(EnGo* this, GlobalContext* globalCtx) {
|
|||
this->unk_1E0.unk_00 = 0;
|
||||
} else {
|
||||
if (INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_EYEDROPS) {
|
||||
EnGo_ChangeAnimation(this, 2);
|
||||
EnGo_ChangeAnim(this, ENGO_ANIM_2);
|
||||
this->unk_21E = 100;
|
||||
this->unk_1E0.unk_00 = 0;
|
||||
EnGo_SetupAction(this, EnGo_Eyedrops);
|
||||
|
@ -924,7 +924,7 @@ void func_80A40A54(EnGo* this, GlobalContext* globalCtx) {
|
|||
|
||||
this->actor.speedXZ = Math_SinS((s16)float2);
|
||||
if (EnGo_FollowPath(this, globalCtx) && this->unk_218 == 0) {
|
||||
EnGo_ChangeAnimation(this, 1);
|
||||
EnGo_ChangeAnim(this, ENGO_ANIM_1);
|
||||
this->skelAnime.curFrame = Animation_GetLastFrame(&gGoronAnim_004930);
|
||||
this->actor.speedXZ = 0.0f;
|
||||
EnGo_SetupAction(this, EnGo_BiggoronActionFunc);
|
||||
|
@ -933,7 +933,7 @@ void func_80A40A54(EnGo* this, GlobalContext* globalCtx) {
|
|||
|
||||
void func_80A40B1C(EnGo* this, GlobalContext* globalCtx) {
|
||||
if (gSaveContext.infTable[14] & 0x800) {
|
||||
EnGo_ChangeAnimation(this, 3);
|
||||
EnGo_ChangeAnim(this, ENGO_ANIM_3);
|
||||
EnGo_SetupAction(this, func_80A40A54);
|
||||
} else {
|
||||
EnGo_BiggoronActionFunc(this, globalCtx);
|
||||
|
@ -1006,7 +1006,7 @@ void EnGo_Eyedrops(EnGo* this, GlobalContext* globalCtx) {
|
|||
|
||||
void func_80A40DCC(EnGo* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_1E0.unk_00 == 2) {
|
||||
EnGo_ChangeAnimation(this, 1);
|
||||
EnGo_ChangeAnim(this, ENGO_ANIM_1);
|
||||
this->skelAnime.curFrame = Animation_GetLastFrame(&gGoronAnim_004930);
|
||||
Message_CloseTextbox(globalCtx);
|
||||
EnGo_SetupAction(this, EnGo_GetItem);
|
||||
|
|
|
@ -125,7 +125,23 @@ static f32 D_80A482D8[14][2] = {
|
|||
{ 20.0f, 20.0f }, { 20.0f, 20.0f }, { 20.0f, 20.0f }, { 20.0f, 20.0f },
|
||||
};
|
||||
|
||||
static struct_80034EC0_Entry sAnimations[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENGO2_ANIM_0,
|
||||
/* 1 */ ENGO2_ANIM_1,
|
||||
/* 2 */ ENGO2_ANIM_2,
|
||||
/* 3 */ ENGO2_ANIM_3,
|
||||
/* 4 */ ENGO2_ANIM_4,
|
||||
/* 5 */ ENGO2_ANIM_5,
|
||||
/* 6 */ ENGO2_ANIM_6,
|
||||
/* 7 */ ENGO2_ANIM_7,
|
||||
/* 8 */ ENGO2_ANIM_8,
|
||||
/* 9 */ ENGO2_ANIM_9,
|
||||
/* 10 */ ENGO2_ANIM_10,
|
||||
/* 11 */ ENGO2_ANIM_11,
|
||||
/* 12 */ ENGO2_ANIM_12
|
||||
} EnGo2Animation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &gGoronAnim_004930, 0.0f, 0.0f, -1.0f, 0x00, 0.0f }, { &gGoronAnim_004930, 0.0f, 0.0f, -1.0f, 0x00, -8.0f },
|
||||
{ &gGoronAnim_0029A8, 1.0f, 0.0f, -1.0f, 0x00, -8.0f }, { &gGoronAnim_010590, 1.0f, 0.0f, -1.0f, 0x00, -8.0f },
|
||||
{ &gGoronAnim_003768, 1.0f, 0.0f, -1.0f, 0x00, -8.0f }, { &gGoronAnim_0038E4, 1.0f, 0.0f, -1.0f, 0x02, -8.0f },
|
||||
|
@ -1097,11 +1113,11 @@ void func_80A454CC(EnGo2* this) {
|
|||
case GORON_CITY_ENTRANCE:
|
||||
case GORON_CITY_STAIRWELL:
|
||||
case GORON_DMT_FAIRY_HINT:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 9);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_9);
|
||||
break;
|
||||
case GORON_DMT_BIGGORON:
|
||||
if (INV_CONTENT(ITEM_TRADE_ADULT) >= ITEM_SWORD_BROKEN && INV_CONTENT(ITEM_TRADE_ADULT) <= ITEM_EYEDROPS) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 4);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_4);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -1265,10 +1281,10 @@ void EnGo2_GetDustData(EnGo2* this, s32 index2) {
|
|||
void EnGo2_RollingAnimation(EnGo2* this, GlobalContext* globalCtx) {
|
||||
if ((this->actor.params & 0x1F) == GORON_DMT_BIGGORON) {
|
||||
this->actor.flags &= ~ACTOR_FLAG_0;
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 10);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_10);
|
||||
this->skelAnime.playSpeed = -0.5f;
|
||||
} else {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 1);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_1);
|
||||
this->skelAnime.playSpeed = -1.0f;
|
||||
}
|
||||
EnGo2_SwapInitialFrameAnimFrameCount(this);
|
||||
|
@ -1288,17 +1304,17 @@ void EnGo2_WakeUp(EnGo2* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
if ((this->actor.params & 0x1F) == GORON_DMT_BIGGORON) {
|
||||
OnePointCutscene_Init(globalCtx, 4200, -99, &this->actor, MAIN_CAM);
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 10);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_10);
|
||||
this->skelAnime.playSpeed = 0.5f;
|
||||
} else {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 1);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_1);
|
||||
this->skelAnime.playSpeed = 1.0f;
|
||||
}
|
||||
this->actionFunc = func_80A46B40;
|
||||
}
|
||||
|
||||
void EnGo2_GetItemAnimation(EnGo2* this, GlobalContext* globalCtx) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 1);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_1);
|
||||
this->unk_211 = true;
|
||||
this->actionFunc = func_80A46B40;
|
||||
this->skelAnime.playSpeed = 0.0f;
|
||||
|
@ -1361,7 +1377,7 @@ s32 EnGo2_IsGoronDmtBombFlower(EnGo2* this) {
|
|||
return false;
|
||||
}
|
||||
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 3);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_3);
|
||||
this->unk_194.unk_00 = 0;
|
||||
this->isAwake = false;
|
||||
this->unk_26E = 1;
|
||||
|
@ -1409,13 +1425,13 @@ s32 EnGo2_IsRolling(EnGo2* this) {
|
|||
}
|
||||
|
||||
void EnGo2_GoronLinkAnimation(EnGo2* this, GlobalContext* globalCtx) {
|
||||
s32 animation = 13;
|
||||
s32 animation = ARRAY_COUNT(sAnimationInfo);
|
||||
|
||||
if ((this->actor.params & 0x1F) == GORON_CITY_LINK) {
|
||||
if ((this->actor.textId == 0x3035 && this->unk_20C == 0) ||
|
||||
(this->actor.textId == 0x3036 && this->unk_20C == 0)) {
|
||||
if (this->skelAnime.animation != &gGoronAnim_000D5C) {
|
||||
animation = 12;
|
||||
animation = ENGO2_ANIM_12;
|
||||
this->eyeMouthTexState = 0;
|
||||
}
|
||||
}
|
||||
|
@ -1423,7 +1439,7 @@ void EnGo2_GoronLinkAnimation(EnGo2* this, GlobalContext* globalCtx) {
|
|||
if ((this->actor.textId == 0x3032 && this->unk_20C == 12) || (this->actor.textId == 0x3033) ||
|
||||
(this->actor.textId == 0x3035 && this->unk_20C == 6)) {
|
||||
if (this->skelAnime.animation != &gGoronAnim_000750) {
|
||||
animation = 11;
|
||||
animation = ENGO2_ANIM_11;
|
||||
this->eyeMouthTexState = 1;
|
||||
}
|
||||
}
|
||||
|
@ -1434,8 +1450,8 @@ void EnGo2_GoronLinkAnimation(EnGo2* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
}
|
||||
|
||||
if (animation != 13) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, animation);
|
||||
if (animation != ARRAY_COUNT(sAnimationInfo)) {
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, animation);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1501,7 +1517,7 @@ void EnGo2_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
EnGo2_SetColliderDim(this);
|
||||
EnGo2_SetShape(this);
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 0);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_0);
|
||||
this->actor.gravity = -1.0f;
|
||||
this->alpha = this->actor.shape.shadowAlpha = 0;
|
||||
this->reverse = 0;
|
||||
|
@ -1783,7 +1799,7 @@ void EnGo2_SetGetItem(EnGo2* this, GlobalContext* globalCtx) {
|
|||
void EnGo2_BiggoronEyedrops(EnGo2* this, GlobalContext* globalCtx) {
|
||||
switch (this->goronState) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 5);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_5);
|
||||
this->actor.flags &= ~ACTOR_FLAG_0;
|
||||
this->actor.shape.rot.y += 0x5B0;
|
||||
this->unk_26E = 1;
|
||||
|
@ -1802,7 +1818,7 @@ void EnGo2_BiggoronEyedrops(EnGo2* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
} else {
|
||||
func_800F4524(&D_801333D4, NA_SE_EN_GOLON_GOOD_BIG, 60);
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 6);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_6);
|
||||
Message_ContinueTextbox(globalCtx, 0x305A);
|
||||
this->eyeMouthTexState = 3;
|
||||
this->goronState++;
|
||||
|
@ -1814,7 +1830,7 @@ void EnGo2_BiggoronEyedrops(EnGo2* this, GlobalContext* globalCtx) {
|
|||
this->eyeMouthTexState = 0;
|
||||
}
|
||||
if (Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_CLOSING) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 1);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_1);
|
||||
this->actor.flags |= ACTOR_FLAG_0;
|
||||
this->unk_26E = 2;
|
||||
this->skelAnime.playSpeed = 0.0f;
|
||||
|
@ -1865,7 +1881,7 @@ void EnGo2_GoronFireGenericAction(EnGo2* this, GlobalContext* globalCtx) {
|
|||
if (Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_CLOSING) {
|
||||
EnGo2_GoronFireCamera(this, globalCtx);
|
||||
globalCtx->msgCtx.msgMode = MSGMODE_PAUSED;
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 2);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_2);
|
||||
this->waypoint = 1;
|
||||
this->skelAnime.playSpeed = 2.0f;
|
||||
func_80A44D84(this);
|
||||
|
|
|
@ -175,7 +175,7 @@ typedef enum {
|
|||
/* 26 */ ENHY_ANIM_26
|
||||
} EnHyAnimationIndex;
|
||||
|
||||
static struct_80034EC0_Entry sAnimationInfo[] = {
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
/* ENHY_ANIM_0 */ { &gObjOsAnim_092C, 1.0f, 0.0f, -1.0f, 0x00, 0.0f },
|
||||
/* ENHY_ANIM_1 */ { &gObjOsAnim_0228, 1.0f, 0.0f, -1.0f, 0x00, 0.0f },
|
||||
/* ENHY_ANIM_2 */ { &gObjOsAnim_4CF4, 1.0f, 0.0f, -1.0f, 0x00, 0.0f },
|
||||
|
@ -581,7 +581,7 @@ s16 func_80A70058(GlobalContext* globalCtx, Actor* thisx) {
|
|||
case 0x70F2:
|
||||
case 0x70F3:
|
||||
if (this->skelAnime.animation != &gObjOsAnim_33B4) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationInfo, ENHY_ANIM_23);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENHY_ANIM_23);
|
||||
Audio_PlayFanfare(NA_BGM_ITEM_GET | 0x900);
|
||||
}
|
||||
break;
|
||||
|
@ -594,7 +594,7 @@ s16 func_80A70058(GlobalContext* globalCtx, Actor* thisx) {
|
|||
case 0x70F2:
|
||||
case 0x70F3:
|
||||
Rupees_ChangeBy(beggarRewards[this->actor.textId - 0x70F0]);
|
||||
func_80034EC0(&this->skelAnime, sAnimationInfo, ENHY_ANIM_17);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENHY_ANIM_17);
|
||||
Player_UpdateBottleHeld(globalCtx, GET_PLAYER(globalCtx), ITEM_BOTTLE, PLAYER_AP_BOTTLE);
|
||||
break;
|
||||
case 0x7016:
|
||||
|
@ -904,7 +904,7 @@ void EnHy_InitImpl(EnHy* this, GlobalContext* globalCtx) {
|
|||
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sColCylInit);
|
||||
EnHy_InitCollider(this);
|
||||
CollisionCheck_SetInfo2(&this->actor.colChkInfo, NULL, &sColChkInfoInit);
|
||||
func_80034EC0(&this->skelAnime, sAnimationInfo, sModelInfo[this->actor.params & 0x7F].animInfoIndex);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, sModelInfo[this->actor.params & 0x7F].animInfoIndex);
|
||||
|
||||
if ((globalCtx->sceneNum == SCENE_MARKET_ALLEY) || (globalCtx->sceneNum == SCENE_MARKET_DAY)) {
|
||||
this->actor.flags &= ~ACTOR_FLAG_4;
|
||||
|
@ -967,14 +967,14 @@ void EnHy_InitImpl(EnHy* this, GlobalContext* globalCtx) {
|
|||
void func_80A710F8(EnHy* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_1E8.unk_00 != 0) {
|
||||
if (this->skelAnime.animation != &gObjOsAnim_0BFC) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationInfo, ENHY_ANIM_26);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENHY_ANIM_26);
|
||||
}
|
||||
} else if (gSaveContext.eventInf[3] & 1) {
|
||||
if (this->skelAnime.animation != &gObjOsAnim_0FE4) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationInfo, ENHY_ANIM_25);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENHY_ANIM_25);
|
||||
}
|
||||
} else if (this->skelAnime.animation != &gObjOsAnim_12E8) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationInfo, ENHY_ANIM_24);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENHY_ANIM_24);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1003,7 +1003,7 @@ void EnHy_DoNothing(EnHy* this, GlobalContext* globalCtx) {
|
|||
|
||||
void func_80A712C0(EnHy* this, GlobalContext* globalCtx) {
|
||||
if ((this->actor.xzDistToPlayer <= 100.0f) && (this->path != NULL)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationInfo, ENHY_ANIM_7);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENHY_ANIM_7);
|
||||
this->actor.speedXZ = 0.4f;
|
||||
this->actionFunc = func_80A7134C;
|
||||
}
|
||||
|
@ -1016,11 +1016,11 @@ void func_80A7134C(EnHy* this, GlobalContext* globalCtx) {
|
|||
f32 distSq;
|
||||
|
||||
if ((this->skelAnime.animation == &gObjOsAnim_2160) && (this->unk_1E8.unk_00 != 0)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationInfo, ENHY_ANIM_8);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENHY_ANIM_8);
|
||||
}
|
||||
|
||||
if ((this->skelAnime.animation == &gObjOsAnim_265C) && (this->unk_1E8.unk_00 == 0)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationInfo, ENHY_ANIM_7);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENHY_ANIM_7);
|
||||
}
|
||||
|
||||
this->actor.speedXZ = 0.4f;
|
||||
|
|
|
@ -60,7 +60,20 @@ static CollisionCheckInfoInit2 sColChkInfoInit = {
|
|||
0, 0, 0, 0, MASS_IMMOVABLE,
|
||||
};
|
||||
|
||||
static struct_D_80AA1678 sAnimationInfo[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENIN_ANIM_0,
|
||||
/* 1 */ ENIN_ANIM_1,
|
||||
/* 2 */ ENIN_ANIM_2,
|
||||
/* 3 */ ENIN_ANIM_3,
|
||||
/* 4 */ ENIN_ANIM_4,
|
||||
/* 5 */ ENIN_ANIM_5,
|
||||
/* 6 */ ENIN_ANIM_6,
|
||||
/* 7 */ ENIN_ANIM_7,
|
||||
/* 8 */ ENIN_ANIM_8,
|
||||
/* 9 */ ENIN_ANIM_9
|
||||
} EnInAnimation;
|
||||
|
||||
static AnimationFrameCountInfo sAnimationInfo[] = {
|
||||
{ &object_in_Anim_001CC0, 1.0f, ANIMMODE_LOOP, 0.0f }, { &object_in_Anim_001CC0, 1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
{ &object_in_Anim_013C6C, 1.0f, ANIMMODE_LOOP, 0.0f }, { &object_in_Anim_013C6C, 1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
{ &object_in_Anim_000CB0, 1.0f, ANIMMODE_LOOP, 0.0f }, { &object_in_Anim_0003B4, 1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
|
@ -331,10 +344,10 @@ void func_80A79690(SkelAnime* skelAnime, EnIn* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
}
|
||||
|
||||
void func_80A796EC(EnIn* this, s32 arg1) {
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[arg1].animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimationInfo[arg1].animation), sAnimationInfo[arg1].mode,
|
||||
sAnimationInfo[arg1].transitionRate);
|
||||
void EnIn_ChangeAnim(EnIn* this, s32 index) {
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[index].animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimationInfo[index].animation), sAnimationInfo[index].mode,
|
||||
sAnimationInfo[index].morphFrames);
|
||||
}
|
||||
|
||||
s32 func_80A7975C(EnIn* this, GlobalContext* globalCtx) {
|
||||
|
@ -511,18 +524,18 @@ void func_80A79FB0(EnIn* this, GlobalContext* globalCtx) {
|
|||
|
||||
switch (func_80A79830(this, globalCtx)) {
|
||||
case 1:
|
||||
func_80A796EC(this, 9);
|
||||
EnIn_ChangeAnim(this, ENIN_ANIM_9);
|
||||
this->actionFunc = func_80A7A4BC;
|
||||
break;
|
||||
case 3:
|
||||
func_80A796EC(this, 7);
|
||||
EnIn_ChangeAnim(this, ENIN_ANIM_7);
|
||||
this->actionFunc = func_80A7A4BC;
|
||||
if (!(gSaveContext.eventChkInf[1] & 0x100)) {
|
||||
this->actor.params = 5;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
func_80A796EC(this, 8);
|
||||
EnIn_ChangeAnim(this, ENIN_ANIM_8);
|
||||
this->eyeIndex = 3;
|
||||
this->actionFunc = func_80A7A4BC;
|
||||
break;
|
||||
|
@ -559,34 +572,34 @@ void func_80A79FB0(EnIn* this, GlobalContext* globalCtx) {
|
|||
switch (gSaveContext.eventInf[0] & 0xF) {
|
||||
case 0:
|
||||
case 2:
|
||||
func_80A796EC(this, 2);
|
||||
EnIn_ChangeAnim(this, ENIN_ANIM_2);
|
||||
this->actionFunc = func_80A7A4C8;
|
||||
gSaveContext.eventInf[0] = 0;
|
||||
break;
|
||||
case 1:
|
||||
this->actor.targetMode = 3;
|
||||
func_80A796EC(this, 2);
|
||||
EnIn_ChangeAnim(this, ENIN_ANIM_2);
|
||||
this->actionFunc = func_80A7A568;
|
||||
func_80088B34(0x3C);
|
||||
break;
|
||||
case 3:
|
||||
func_80A796EC(this, 4);
|
||||
EnIn_ChangeAnim(this, ENIN_ANIM_4);
|
||||
this->actionFunc = func_80A7A770;
|
||||
break;
|
||||
case 4:
|
||||
func_80A796EC(this, 6);
|
||||
EnIn_ChangeAnim(this, ENIN_ANIM_6);
|
||||
this->unk_1EC = 8;
|
||||
this->actionFunc = func_80A7A940;
|
||||
break;
|
||||
case 5:
|
||||
case 6:
|
||||
this->actor.targetMode = 3;
|
||||
func_80A796EC(this, 6);
|
||||
EnIn_ChangeAnim(this, ENIN_ANIM_6);
|
||||
this->unk_1EC = 8;
|
||||
this->actionFunc = func_80A7AA40;
|
||||
break;
|
||||
case 7:
|
||||
func_80A796EC(this, 2);
|
||||
EnIn_ChangeAnim(this, ENIN_ANIM_2);
|
||||
this->actionFunc = func_80A7A848;
|
||||
break;
|
||||
}
|
||||
|
@ -687,7 +700,7 @@ void func_80A7A770(EnIn* this, GlobalContext* globalCtx) {
|
|||
} else if (this->unk_308.unk_00 == 2) {
|
||||
Rupees_ChangeBy(-50);
|
||||
this->actor.flags &= ~ACTOR_FLAG_16;
|
||||
func_80A796EC(this, 3);
|
||||
EnIn_ChangeAnim(this, ENIN_ANIM_3);
|
||||
this->actionFunc = func_80A7A848;
|
||||
gSaveContext.eventInf[0] = (gSaveContext.eventInf[0] & ~0x0F) | 7;
|
||||
this->unk_308.unk_00 = 0;
|
||||
|
@ -802,7 +815,7 @@ void func_80A7ABD4(EnIn* this, GlobalContext* globalCtx) {
|
|||
this->actor.textId = 0x203C;
|
||||
Message_StartTextbox(globalCtx, this->actor.textId, NULL);
|
||||
this->unk_308.unk_00 = 1;
|
||||
func_80A796EC(this, 3);
|
||||
EnIn_ChangeAnim(this, ENIN_ANIM_3);
|
||||
} else {
|
||||
globalCtx->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
|
||||
this->unk_308.unk_00 = 0;
|
||||
|
|
|
@ -88,7 +88,44 @@ static EnKoSkeleton sSkeleton[2] = {
|
|||
{ OBJECT_KW1, /* gKw1Skel */ 0x060000F0 },
|
||||
};
|
||||
|
||||
static struct_80034EC0_Entry sOsAnimeTable[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENKO_ANIM_0,
|
||||
/* 1 */ ENKO_ANIM_1,
|
||||
/* 2 */ ENKO_ANIM_2,
|
||||
/* 3 */ ENKO_ANIM_3,
|
||||
/* 4 */ ENKO_ANIM_4,
|
||||
/* 5 */ ENKO_ANIM_5,
|
||||
/* 6 */ ENKO_ANIM_6,
|
||||
/* 7 */ ENKO_ANIM_7,
|
||||
/* 8 */ ENKO_ANIM_8,
|
||||
/* 9 */ ENKO_ANIM_9,
|
||||
/* 10 */ ENKO_ANIM_10,
|
||||
/* 11 */ ENKO_ANIM_11,
|
||||
/* 12 */ ENKO_ANIM_12,
|
||||
/* 13 */ ENKO_ANIM_13,
|
||||
/* 14 */ ENKO_ANIM_14,
|
||||
/* 15 */ ENKO_ANIM_15,
|
||||
/* 16 */ ENKO_ANIM_16,
|
||||
/* 17 */ ENKO_ANIM_17,
|
||||
/* 18 */ ENKO_ANIM_18,
|
||||
/* 19 */ ENKO_ANIM_19,
|
||||
/* 20 */ ENKO_ANIM_20,
|
||||
/* 21 */ ENKO_ANIM_21,
|
||||
/* 22 */ ENKO_ANIM_22,
|
||||
/* 23 */ ENKO_ANIM_23,
|
||||
/* 24 */ ENKO_ANIM_24,
|
||||
/* 25 */ ENKO_ANIM_25,
|
||||
/* 26 */ ENKO_ANIM_26,
|
||||
/* 27 */ ENKO_ANIM_27,
|
||||
/* 28 */ ENKO_ANIM_28,
|
||||
/* 29 */ ENKO_ANIM_29,
|
||||
/* 30 */ ENKO_ANIM_30,
|
||||
/* 31 */ ENKO_ANIM_31,
|
||||
/* 32 */ ENKO_ANIM_32,
|
||||
/* 33 */ ENKO_ANIM_33
|
||||
} EnKoAnimation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &gObjOsAnim_8F6C, 1.0f, 2.0f, 14.0f, ANIMMODE_LOOP_PARTIAL, 0.0f },
|
||||
{ &gObjOsAnim_8F6C, 0.0f, 1.0f, 1.0f, ANIMMODE_LOOP_PARTIAL, 0.0f },
|
||||
{ &gObjOsAnim_9B64, 0.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
|
||||
|
@ -126,19 +163,19 @@ static struct_80034EC0_Entry sOsAnimeTable[] = {
|
|||
};
|
||||
|
||||
static u8 sOsAnimeLookup[13][5] = {
|
||||
/* ENKO_TYPE_CHILD_0 */ { 0x08, 0x09, 0x09, 0x0E, 0x0B },
|
||||
/* ENKO_TYPE_CHILD_1 */ { 0x02, 0x0C, 0x02, 0x0D, 0x0D },
|
||||
/* ENKO_TYPE_CHILD_2 */ { 0x0B, 0x0B, 0x0B, 0x0F, 0x09 },
|
||||
/* ENKO_TYPE_CHILD_3 */ { 0x00, 0x10, 0x10, 0x11, 0x12 },
|
||||
/* ENKO_TYPE_CHILD_4 */ { 0x13, 0x13, 0x14, 0x0A, 0x09 },
|
||||
/* ENKO_TYPE_CHILD_5 */ { 0x03, 0x03, 0x03, 0x03, 0x03 },
|
||||
/* ENKO_TYPE_CHILD_6 */ { 0x04, 0x16, 0x16, 0x04, 0x17 },
|
||||
/* ENKO_TYPE_CHILD_7 */ { 0x18, 0x10, 0x10, 0x19, 0x10 },
|
||||
/* ENKO_TYPE_CHILD_8 */ { 0x1A, 0x0F, 0x0F, 0x1A, 0x0F },
|
||||
/* ENKO_TYPE_CHILD_9 */ { 0x03, 0x03, 0x03, 0x1B, 0x1B },
|
||||
/* ENKO_TYPE_CHILD_10 */ { 0x02, 0x02, 0x02, 0x02, 0x16 },
|
||||
/* ENKO_TYPE_CHILD_11 */ { 0x0E, 0x0E, 0x0E, 0x0E, 0x0E },
|
||||
/* ENKO_TYPE_CHILD_FADO */ { 0x05, 0x05, 0x05, 0x05, 0x05 },
|
||||
/* ENKO_TYPE_CHILD_0 */ { ENKO_ANIM_8, ENKO_ANIM_9, ENKO_ANIM_9, ENKO_ANIM_14, ENKO_ANIM_11 },
|
||||
/* ENKO_TYPE_CHILD_1 */ { ENKO_ANIM_2, ENKO_ANIM_12, ENKO_ANIM_2, ENKO_ANIM_13, ENKO_ANIM_13 },
|
||||
/* ENKO_TYPE_CHILD_2 */ { ENKO_ANIM_11, ENKO_ANIM_11, ENKO_ANIM_11, ENKO_ANIM_15, ENKO_ANIM_9 },
|
||||
/* ENKO_TYPE_CHILD_3 */ { ENKO_ANIM_0, ENKO_ANIM_16, ENKO_ANIM_16, ENKO_ANIM_17, ENKO_ANIM_18 },
|
||||
/* ENKO_TYPE_CHILD_4 */ { ENKO_ANIM_19, ENKO_ANIM_19, ENKO_ANIM_20, ENKO_ANIM_10, ENKO_ANIM_9 },
|
||||
/* ENKO_TYPE_CHILD_5 */ { ENKO_ANIM_3, ENKO_ANIM_3, ENKO_ANIM_3, ENKO_ANIM_3, ENKO_ANIM_3 },
|
||||
/* ENKO_TYPE_CHILD_6 */ { ENKO_ANIM_4, ENKO_ANIM_22, ENKO_ANIM_22, ENKO_ANIM_4, ENKO_ANIM_23 },
|
||||
/* ENKO_TYPE_CHILD_7 */ { ENKO_ANIM_24, ENKO_ANIM_16, ENKO_ANIM_16, ENKO_ANIM_25, ENKO_ANIM_16 },
|
||||
/* ENKO_TYPE_CHILD_8 */ { ENKO_ANIM_26, ENKO_ANIM_15, ENKO_ANIM_15, ENKO_ANIM_26, ENKO_ANIM_15 },
|
||||
/* ENKO_TYPE_CHILD_9 */ { ENKO_ANIM_3, ENKO_ANIM_3, ENKO_ANIM_3, ENKO_ANIM_27, ENKO_ANIM_27 },
|
||||
/* ENKO_TYPE_CHILD_10 */ { ENKO_ANIM_2, ENKO_ANIM_2, ENKO_ANIM_2, ENKO_ANIM_2, ENKO_ANIM_22 },
|
||||
/* ENKO_TYPE_CHILD_11 */ { ENKO_ANIM_14, ENKO_ANIM_14, ENKO_ANIM_14, ENKO_ANIM_14, ENKO_ANIM_14 },
|
||||
/* ENKO_TYPE_CHILD_FADO */ { ENKO_ANIM_5, ENKO_ANIM_5, ENKO_ANIM_5, ENKO_ANIM_5, ENKO_ANIM_5 },
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
|
@ -627,12 +664,12 @@ s32 func_80A97D68(EnKo* this, GlobalContext* globalCtx) {
|
|||
|
||||
if (this->unk_1E8.unk_00 != 0) {
|
||||
if ((this->skelAnime.animation == &gObjOsAnim_6A60) == false) {
|
||||
func_80034EC0(&this->skelAnime, sOsAnimeTable, 0x20);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_32);
|
||||
}
|
||||
arg3 = 2;
|
||||
} else {
|
||||
if ((this->skelAnime.animation == &gObjOsAnim_7830) == false) {
|
||||
func_80034EC0(&this->skelAnime, sOsAnimeTable, 0x21);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_33);
|
||||
}
|
||||
arg3 = 1;
|
||||
}
|
||||
|
@ -680,13 +717,13 @@ s32 func_80A97F70(EnKo* this, GlobalContext* globalCtx) {
|
|||
|
||||
if (this->unk_1E8.unk_00 != 0) {
|
||||
if ((this->skelAnime.animation == &gObjOsAnim_8F6C) == false) {
|
||||
func_80034EC0(&this->skelAnime, sOsAnimeTable, 0x1D);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_29);
|
||||
}
|
||||
func_80034F54(globalCtx, this->unk_2E4, this->unk_304, 16);
|
||||
arg3 = 2;
|
||||
} else {
|
||||
if ((this->skelAnime.animation == &gObjOsAnim_7D94) == false) {
|
||||
func_80034EC0(&this->skelAnime, sOsAnimeTable, 0x1E);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_30);
|
||||
}
|
||||
arg3 = 1;
|
||||
}
|
||||
|
@ -700,14 +737,14 @@ s32 func_80A98034(EnKo* this, GlobalContext* globalCtx) {
|
|||
|
||||
if (this->unk_1E8.unk_00 != 0) {
|
||||
if ((this->skelAnime.animation == &gObjOsAnim_8F6C) == false) {
|
||||
func_80034EC0(&this->skelAnime, sOsAnimeTable, 0x1D);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_29);
|
||||
}
|
||||
func_80034F54(globalCtx, this->unk_2E4, this->unk_304, 16);
|
||||
result = EnKo_IsWithinTalkAngle(this);
|
||||
arg3 = (result == true) ? 2 : 1;
|
||||
} else {
|
||||
if ((this->skelAnime.animation == &gObjOsAnim_879C) == false) {
|
||||
func_80034EC0(&this->skelAnime, sOsAnimeTable, 0x1F);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_31);
|
||||
}
|
||||
arg3 = 1;
|
||||
result = EnKo_IsWithinTalkAngle(this);
|
||||
|
@ -1113,7 +1150,7 @@ void func_80A99048(EnKo* this, GlobalContext* globalCtx) {
|
|||
this->collider.base.ocFlags1 |= 0x40;
|
||||
}
|
||||
this->forestQuestState = EnKo_GetForestQuestState2(this);
|
||||
func_80034EC0(&this->skelAnime, sOsAnimeTable, sOsAnimeLookup[ENKO_TYPE][this->forestQuestState]);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, sOsAnimeLookup[ENKO_TYPE][this->forestQuestState]);
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
func_80A98CD8(this);
|
||||
this->modelAlpha = 0.0f;
|
||||
|
@ -1134,7 +1171,7 @@ void func_80A99048(EnKo* this, GlobalContext* globalCtx) {
|
|||
|
||||
void func_80A99384(EnKo* this, GlobalContext* globalCtx) {
|
||||
if (ENKO_TYPE == ENKO_TYPE_CHILD_FADO && this->unk_1E8.unk_00 != 0 && this->actor.textId == 0x10B9) {
|
||||
func_80034EC0(&this->skelAnime, sOsAnimeTable, 7);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_7);
|
||||
this->actionFunc = func_80A99438;
|
||||
} else if (ENKO_TYPE == ENKO_TYPE_CHILD_FADO && this->unk_1E8.unk_00 == 2) {
|
||||
this->actionFunc = func_80A99504;
|
||||
|
@ -1145,12 +1182,12 @@ void func_80A99384(EnKo* this, GlobalContext* globalCtx) {
|
|||
|
||||
void func_80A99438(EnKo* this, GlobalContext* globalCtx) {
|
||||
if (ENKO_TYPE == ENKO_TYPE_CHILD_FADO && this->unk_1E8.unk_00 == 2) {
|
||||
func_80034EC0(&this->skelAnime, sOsAnimeTable, 6);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_6);
|
||||
this->actionFunc = func_80A99504;
|
||||
globalCtx->msgCtx.stateTimer = 4;
|
||||
globalCtx->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
|
||||
} else if (this->unk_1E8.unk_00 == 0 || this->actor.textId != 0x10B9) {
|
||||
func_80034EC0(&this->skelAnime, sOsAnimeTable, 6);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENKO_ANIM_6);
|
||||
this->actionFunc = func_80A99384;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,7 +56,13 @@ static ColliderCylinderInit sCylinderInit = {
|
|||
|
||||
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
|
||||
|
||||
static struct_80034EC0_Entry sAnimations[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENKZ_ANIM_0,
|
||||
/* 1 */ ENKZ_ANIM_1,
|
||||
/* 2 */ ENKZ_ANIM_2
|
||||
} EnKzAnimation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &gKzIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gKzIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
{ &gKzMweepAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
|
@ -321,7 +327,7 @@ void EnKz_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
Actor_SetScale(&this->actor, 0.01);
|
||||
this->actor.targetMode = 3;
|
||||
this->unk_1E0.unk_00 = 0;
|
||||
func_80034EC0(&this->skelanime, sAnimations, 0);
|
||||
Animation_ChangeByInfo(&this->skelanime, sAnimationInfo, ENKZ_ANIM_0);
|
||||
|
||||
if (gSaveContext.eventChkInf[3] & 8) {
|
||||
EnKz_SetMovedPos(this, globalCtx);
|
||||
|
@ -347,7 +353,7 @@ void EnKz_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
void EnKz_PreMweepWait(EnKz* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_1E0.unk_00 == 2) {
|
||||
func_80034EC0(&this->skelanime, sAnimations, 2);
|
||||
Animation_ChangeByInfo(&this->skelanime, sAnimationInfo, ENKZ_ANIM_2);
|
||||
this->unk_1E0.unk_00 = 0;
|
||||
this->actionFunc = EnKz_SetupMweep;
|
||||
} else {
|
||||
|
@ -387,7 +393,7 @@ void EnKz_Mweep(EnKz* this, GlobalContext* globalCtx) {
|
|||
initPos.z += 260.0f;
|
||||
Gameplay_CameraSetAtEye(globalCtx, this->cutsceneCamera, &pos, &initPos);
|
||||
if ((EnKz_FollowPath(this, globalCtx) == 1) && (this->waypoint == 0)) {
|
||||
func_80034EC0(&this->skelanime, sAnimations, 1);
|
||||
Animation_ChangeByInfo(&this->skelanime, sAnimationInfo, ENKZ_ANIM_1);
|
||||
Inventory_ReplaceItem(globalCtx, ITEM_LETTER_RUTO, ITEM_BOTTLE);
|
||||
EnKz_SetMovedPos(this, globalCtx);
|
||||
gSaveContext.eventChkInf[3] |= 8;
|
||||
|
|
|
@ -60,7 +60,14 @@ static ColliderCylinderInit sCylinderInit = {
|
|||
|
||||
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
|
||||
|
||||
static struct_D_80AA1678 sAnimationInfo[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENMA1_ANIM_0,
|
||||
/* 1 */ ENMA1_ANIM_1,
|
||||
/* 2 */ ENMA1_ANIM_2,
|
||||
/* 3 */ ENMA1_ANIM_3
|
||||
} EnMa1Animation;
|
||||
|
||||
static AnimationFrameCountInfo sAnimationInfo[] = {
|
||||
{ &gMalonChildIdleAnim, 1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gMalonChildIdleAnim, 1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
{ &gMalonChildSingAnim, 1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
|
@ -214,11 +221,11 @@ void EnMa1_UpdateEyes(EnMa1* this) {
|
|||
}
|
||||
}
|
||||
|
||||
void EnMa1_ChangeAnimation(EnMa1* this, UNK_TYPE idx) {
|
||||
f32 frameCount = Animation_GetLastFrame(sAnimationInfo[idx].animation);
|
||||
void EnMa1_ChangeAnim(EnMa1* this, s32 index) {
|
||||
f32 frameCount = Animation_GetLastFrame(sAnimationInfo[index].animation);
|
||||
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[idx].animation, 1.0f, 0.0f, frameCount, sAnimationInfo[idx].mode,
|
||||
sAnimationInfo[idx].transitionRate);
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[index].animation, 1.0f, 0.0f, frameCount,
|
||||
sAnimationInfo[index].mode, sAnimationInfo[index].morphFrames);
|
||||
}
|
||||
|
||||
void func_80AA0AF4(EnMa1* this, GlobalContext* globalCtx) {
|
||||
|
@ -275,10 +282,10 @@ void EnMa1_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
if (!(gSaveContext.eventChkInf[1] & 0x10) || CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) {
|
||||
this->actionFunc = func_80AA0D88;
|
||||
EnMa1_ChangeAnimation(this, 2);
|
||||
EnMa1_ChangeAnim(this, ENMA1_ANIM_2);
|
||||
} else {
|
||||
this->actionFunc = func_80AA0F44;
|
||||
EnMa1_ChangeAnimation(this, 2);
|
||||
EnMa1_ChangeAnim(this, ENMA1_ANIM_2);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -292,11 +299,11 @@ void EnMa1_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
|||
void func_80AA0D88(EnMa1* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_1E8.unk_00 != 0) {
|
||||
if (this->skelAnime.animation != &gMalonChildIdleAnim) {
|
||||
EnMa1_ChangeAnimation(this, 1);
|
||||
EnMa1_ChangeAnim(this, ENMA1_ANIM_1);
|
||||
}
|
||||
} else {
|
||||
if (this->skelAnime.animation != &gMalonChildSingAnim) {
|
||||
EnMa1_ChangeAnimation(this, 3);
|
||||
EnMa1_ChangeAnim(this, ENMA1_ANIM_3);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -334,11 +341,11 @@ void func_80AA0F44(EnMa1* this, GlobalContext* globalCtx) {
|
|||
|
||||
if (this->unk_1E8.unk_00 != 0) {
|
||||
if (this->skelAnime.animation != &gMalonChildIdleAnim) {
|
||||
EnMa1_ChangeAnimation(this, 1);
|
||||
EnMa1_ChangeAnim(this, ENMA1_ANIM_1);
|
||||
}
|
||||
} else {
|
||||
if (this->skelAnime.animation != &gMalonChildSingAnim) {
|
||||
EnMa1_ChangeAnimation(this, 3);
|
||||
EnMa1_ChangeAnim(this, ENMA1_ANIM_3);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -54,7 +54,15 @@ static ColliderCylinderInit sCylinderInit = {
|
|||
|
||||
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
|
||||
|
||||
static struct_D_80AA1678 sAnimationInfo[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENMA2_ANIM_0,
|
||||
/* 1 */ ENMA2_ANIM_1,
|
||||
/* 2 */ ENMA2_ANIM_2,
|
||||
/* 3 */ ENMA2_ANIM_3,
|
||||
/* 4 */ ENMA2_ANIM_4
|
||||
} EnMa2Animation;
|
||||
|
||||
static AnimationFrameCountInfo sAnimationInfo[] = {
|
||||
{ &gMalonAdultIdleAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, { &gMalonAdultIdleAnim, 1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
{ &gMalonAdultStandStillAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, { &gMalonAdultSingAnim, 1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gMalonAdultSingAnim, 1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
|
@ -178,11 +186,11 @@ void EnMa2_UpdateEyes(EnMa2* this) {
|
|||
}
|
||||
}
|
||||
|
||||
void EnMa2_ChangeAnim(EnMa2* this, s32 idx) {
|
||||
f32 frameCount = Animation_GetLastFrame(sAnimationInfo[idx].animation);
|
||||
void EnMa2_ChangeAnim(EnMa2* this, s32 index) {
|
||||
f32 frameCount = Animation_GetLastFrame(sAnimationInfo[index].animation);
|
||||
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[idx].animation, 1.0f, 0.0f, frameCount, sAnimationInfo[idx].mode,
|
||||
sAnimationInfo[idx].transitionRate);
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[index].animation, 1.0f, 0.0f, frameCount,
|
||||
sAnimationInfo[index].mode, sAnimationInfo[index].morphFrames);
|
||||
}
|
||||
|
||||
void func_80AA1DB4(EnMa2* this, GlobalContext* globalCtx) {
|
||||
|
@ -213,18 +221,18 @@ void EnMa2_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
switch (func_80AA1B58(this, globalCtx)) {
|
||||
case 1:
|
||||
EnMa2_ChangeAnim(this, 2);
|
||||
EnMa2_ChangeAnim(this, ENMA2_ANIM_2);
|
||||
this->actionFunc = func_80AA2018;
|
||||
break;
|
||||
case 2:
|
||||
EnMa2_ChangeAnim(this, 3);
|
||||
EnMa2_ChangeAnim(this, ENMA2_ANIM_3);
|
||||
this->actionFunc = func_80AA204C;
|
||||
break;
|
||||
case 3:
|
||||
if (gSaveContext.infTable[8] & 0x2000) {
|
||||
EnMa2_ChangeAnim(this, 0);
|
||||
EnMa2_ChangeAnim(this, ENMA2_ANIM_0);
|
||||
} else {
|
||||
EnMa2_ChangeAnim(this, 3);
|
||||
EnMa2_ChangeAnim(this, ENMA2_ANIM_3);
|
||||
}
|
||||
this->actionFunc = func_80AA2018;
|
||||
break;
|
||||
|
|
|
@ -21,7 +21,6 @@ void func_80AA2E54(EnMa3* this, GlobalContext* globalCtx);
|
|||
s32 func_80AA2EC8(EnMa3* this, GlobalContext* globalCtx);
|
||||
s32 func_80AA2F28(EnMa3* this);
|
||||
void EnMa3_UpdateEyes(EnMa3* this);
|
||||
void EnMa3_ChangeAnim(EnMa3* this, s32 arg1);
|
||||
void func_80AA3200(EnMa3* this, GlobalContext* globalCtx);
|
||||
|
||||
const ActorInit En_Ma3_InitVars = {
|
||||
|
@ -58,7 +57,15 @@ static ColliderCylinderInit sCylinderInit = {
|
|||
|
||||
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
|
||||
|
||||
static struct_D_80AA1678 sAnimationInfo[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENMA3_ANIM_0,
|
||||
/* 1 */ ENMA3_ANIM_1,
|
||||
/* 2 */ ENMA3_ANIM_2,
|
||||
/* 3 */ ENMA3_ANIM_3,
|
||||
/* 4 */ ENMA3_ANIM_4
|
||||
} EnMa3Animation;
|
||||
|
||||
static AnimationFrameCountInfo sAnimationInfo[] = {
|
||||
{ &gMalonAdultIdleAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, { &gMalonAdultIdleAnim, 1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
{ &gMalonAdultStandStillAnim, 1.0f, ANIMMODE_LOOP, 0.0f }, { &gMalonAdultSingAnim, 1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gMalonAdultSingAnim, 1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
|
@ -224,11 +231,11 @@ void EnMa3_UpdateEyes(EnMa3* this) {
|
|||
}
|
||||
}
|
||||
|
||||
void EnMa3_ChangeAnim(EnMa3* this, s32 idx) {
|
||||
f32 frameCount = Animation_GetLastFrame(sAnimationInfo[idx].animation);
|
||||
void EnMa3_ChangeAnim(EnMa3* this, s32 index) {
|
||||
f32 frameCount = Animation_GetLastFrame(sAnimationInfo[index].animation);
|
||||
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[idx].animation, 1.0f, 0.0f, frameCount, sAnimationInfo[idx].mode,
|
||||
sAnimationInfo[idx].transitionRate);
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[index].animation, 1.0f, 0.0f, frameCount,
|
||||
sAnimationInfo[index].mode, sAnimationInfo[index].morphFrames);
|
||||
}
|
||||
|
||||
void EnMa3_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
@ -243,11 +250,11 @@ void EnMa3_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
switch (func_80AA2EC8(this, globalCtx)) {
|
||||
case 0:
|
||||
EnMa3_ChangeAnim(this, 0);
|
||||
EnMa3_ChangeAnim(this, ENMA3_ANIM_0);
|
||||
this->actionFunc = func_80AA3200;
|
||||
break;
|
||||
case 1:
|
||||
EnMa3_ChangeAnim(this, 0);
|
||||
EnMa3_ChangeAnim(this, ENMA3_ANIM_0);
|
||||
this->actionFunc = func_80AA3200;
|
||||
break;
|
||||
case 2:
|
||||
|
|
|
@ -55,7 +55,24 @@ static ColliderCylinderInit sCylinderInit = {
|
|||
|
||||
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
|
||||
|
||||
static struct_80034EC0_Entry sAnimations[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENMD_ANIM_0,
|
||||
/* 1 */ ENMD_ANIM_1,
|
||||
/* 2 */ ENMD_ANIM_2,
|
||||
/* 3 */ ENMD_ANIM_3,
|
||||
/* 4 */ ENMD_ANIM_4,
|
||||
/* 5 */ ENMD_ANIM_5,
|
||||
/* 6 */ ENMD_ANIM_6,
|
||||
/* 7 */ ENMD_ANIM_7,
|
||||
/* 8 */ ENMD_ANIM_8,
|
||||
/* 9 */ ENMD_ANIM_9,
|
||||
/* 10 */ ENMD_ANIM_10,
|
||||
/* 11 */ ENMD_ANIM_11,
|
||||
/* 12 */ ENMD_ANIM_12,
|
||||
/* 13 */ ENMD_ANIM_13,
|
||||
} EnMdAnimation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &gMidoHandsOnHipsIdleAnim, 0.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gMidoHandsOnHipsIdleAnim, 0.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
{ &gMidoRaiseHand1Anim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
|
||||
|
@ -85,11 +102,11 @@ void func_80AAA250(EnMd* this) {
|
|||
void func_80AAA274(EnMd* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 2);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_2);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 3);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_3);
|
||||
this->unk_20A++;
|
||||
}
|
||||
}
|
||||
|
@ -98,11 +115,11 @@ void func_80AAA274(EnMd* this) {
|
|||
void func_80AAA308(EnMd* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 4);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_4);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 5);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_5);
|
||||
this->unk_20A++;
|
||||
}
|
||||
}
|
||||
|
@ -111,19 +128,19 @@ void func_80AAA308(EnMd* this) {
|
|||
void func_80AAA39C(EnMd* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 2);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_2);
|
||||
func_80AAA250(this);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 7);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_7);
|
||||
this->unk_20A++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 8);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_8);
|
||||
this->unk_20A++;
|
||||
}
|
||||
}
|
||||
|
@ -132,11 +149,11 @@ void func_80AAA39C(EnMd* this) {
|
|||
void func_80AAA474(EnMd* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 7);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_7);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 10);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_10);
|
||||
this->unk_20A++;
|
||||
}
|
||||
}
|
||||
|
@ -145,12 +162,12 @@ void func_80AAA474(EnMd* this) {
|
|||
void func_80AAA508(EnMd* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 2);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_2);
|
||||
func_80AAA250(this);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 10);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_10);
|
||||
this->unk_20A++;
|
||||
}
|
||||
}
|
||||
|
@ -159,11 +176,11 @@ void func_80AAA508(EnMd* this) {
|
|||
void func_80AAA5A4(EnMd* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 9);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_9);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 6);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_6);
|
||||
this->unk_20A++;
|
||||
}
|
||||
}
|
||||
|
@ -172,12 +189,12 @@ void func_80AAA5A4(EnMd* this) {
|
|||
void func_80AAA638(EnMd* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 9);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_9);
|
||||
func_80AAA250(this);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 10);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_10);
|
||||
this->unk_20A++;
|
||||
}
|
||||
}
|
||||
|
@ -186,11 +203,11 @@ void func_80AAA638(EnMd* this) {
|
|||
void func_80AAA6D4(EnMd* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 11);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_11);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 6);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_6);
|
||||
this->unk_20A++;
|
||||
}
|
||||
}
|
||||
|
@ -199,11 +216,11 @@ void func_80AAA6D4(EnMd* this) {
|
|||
void func_80AAA768(EnMd* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 12);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_12);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 3);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_3);
|
||||
this->unk_20A++;
|
||||
}
|
||||
}
|
||||
|
@ -212,11 +229,11 @@ void func_80AAA768(EnMd* this) {
|
|||
void func_80AAA7FC(EnMd* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 13);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_13);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 6);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_6);
|
||||
this->unk_20A++;
|
||||
}
|
||||
}
|
||||
|
@ -225,12 +242,12 @@ void func_80AAA7FC(EnMd* this) {
|
|||
void func_80AAA890(EnMd* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 7);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_7);
|
||||
func_80AAA250(this);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 10);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_10);
|
||||
this->unk_20A++;
|
||||
}
|
||||
}
|
||||
|
@ -323,7 +340,7 @@ void func_80AAAA24(EnMd* this) {
|
|||
break;
|
||||
}
|
||||
} else if (this->skelAnime.animation != &gMidoHandsOnHipsIdleAnim) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 10);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_10);
|
||||
func_80AAA92C(this, 0);
|
||||
}
|
||||
|
||||
|
@ -622,7 +639,7 @@ void EnMd_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
return;
|
||||
}
|
||||
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 0);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENMD_ANIM_0);
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->actor.targetMode = 6;
|
||||
this->alpha = 255;
|
||||
|
|
|
@ -108,14 +108,7 @@ static DamageTable sDamageTable = {
|
|||
/* Unknown 2 */ DMG_ENTRY(0, 0x0),
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ AnimationHeader* animation;
|
||||
/* 0x04 */ f32 playSpeed;
|
||||
/* 0x08 */ u8 mode;
|
||||
/* 0x0C */ f32 morphFrames;
|
||||
} EnMmAnimEntry; // size = 0x10
|
||||
|
||||
static EnMmAnimEntry sAnimationEntries[] = {
|
||||
static AnimationSpeedInfo sAnimationInfo[] = {
|
||||
{ &gRunningManRunAnim, 1.0f, ANIMMODE_LOOP, -7.0f }, { &gRunningManSitStandAnim, -1.0f, ANIMMODE_ONCE, -7.0f },
|
||||
{ &gRunningManSitWaitAnim, 1.0f, ANIMMODE_LOOP, -7.0f }, { &gRunningManSitStandAnim, 1.0f, ANIMMODE_ONCE, -7.0f },
|
||||
{ &gRunningManSprintAnim, 1.0f, ANIMMODE_LOOP, -7.0f }, { &gRunningManExcitedAnim, 1.0f, ANIMMODE_LOOP, -12.0f },
|
||||
|
@ -140,28 +133,26 @@ static InitChainEntry sInitChain[] = {
|
|||
ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_STOP),
|
||||
};
|
||||
|
||||
void EnMm_ChangeAnimation(EnMm* this, s32 newAnimIndex, s32* curAnimIndex) {
|
||||
void EnMm_ChangeAnim(EnMm* this, s32 index, s32* currentIndex) {
|
||||
f32 morphFrames;
|
||||
|
||||
if ((*curAnimIndex < 0) || (newAnimIndex == *curAnimIndex)) {
|
||||
if ((*currentIndex < 0) || (index == *currentIndex)) {
|
||||
morphFrames = 0.0f;
|
||||
} else {
|
||||
morphFrames = sAnimationEntries[newAnimIndex].morphFrames;
|
||||
morphFrames = sAnimationInfo[index].morphFrames;
|
||||
}
|
||||
|
||||
if (sAnimationEntries[newAnimIndex].playSpeed >= 0.0f) {
|
||||
Animation_Change(&this->skelAnime, sAnimationEntries[newAnimIndex].animation,
|
||||
sAnimationEntries[newAnimIndex].playSpeed, 0.0f,
|
||||
Animation_GetLastFrame(sAnimationEntries[newAnimIndex].animation),
|
||||
sAnimationEntries[newAnimIndex].mode, morphFrames);
|
||||
if (sAnimationInfo[index].playSpeed >= 0.0f) {
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[index].animation, sAnimationInfo[index].playSpeed, 0.0f,
|
||||
Animation_GetLastFrame(sAnimationInfo[index].animation), sAnimationInfo[index].mode,
|
||||
morphFrames);
|
||||
} else {
|
||||
Animation_Change(&this->skelAnime, sAnimationEntries[newAnimIndex].animation,
|
||||
sAnimationEntries[newAnimIndex].playSpeed,
|
||||
Animation_GetLastFrame(sAnimationEntries[newAnimIndex].animation), 0.0f,
|
||||
sAnimationEntries[newAnimIndex].mode, morphFrames);
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[index].animation, sAnimationInfo[index].playSpeed,
|
||||
Animation_GetLastFrame(sAnimationInfo[index].animation), 0.0f, sAnimationInfo[index].mode,
|
||||
morphFrames);
|
||||
}
|
||||
|
||||
*curAnimIndex = newAnimIndex;
|
||||
*currentIndex = index;
|
||||
}
|
||||
|
||||
void EnMm_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
@ -178,9 +169,9 @@ void EnMm_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, sColChkInfoInit);
|
||||
|
||||
Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 0.0f, 0.0f, 0.0f, 4);
|
||||
Animation_Change(&this->skelAnime, sAnimationEntries[RM_ANIM_RUN].animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimationEntries[RM_ANIM_RUN].animation),
|
||||
sAnimationEntries[RM_ANIM_RUN].mode, sAnimationEntries[RM_ANIM_RUN].morphFrames);
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[RM_ANIM_RUN].animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimationInfo[RM_ANIM_RUN].animation), sAnimationInfo[RM_ANIM_RUN].mode,
|
||||
sAnimationInfo[RM_ANIM_RUN].morphFrames);
|
||||
|
||||
this->path = this->actor.params & 0xFF;
|
||||
this->unk_1F0 = 2;
|
||||
|
@ -192,11 +183,11 @@ void EnMm_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
if (func_80AADA70() == 1) {
|
||||
this->mouthTexIndex = RM_MOUTH_OPEN;
|
||||
EnMm_ChangeAnimation(this, RM_ANIM_RUN, &this->curAnimIndex);
|
||||
EnMm_ChangeAnim(this, RM_ANIM_RUN, &this->curAnimIndex);
|
||||
this->actionFunc = func_80AAE598;
|
||||
} else {
|
||||
this->mouthTexIndex = RM_MOUTH_CLOSED;
|
||||
EnMm_ChangeAnimation(this, RM_ANIM_SIT_WAIT, &this->curAnimIndex);
|
||||
EnMm_ChangeAnim(this, RM_ANIM_SIT_WAIT, &this->curAnimIndex);
|
||||
this->actionFunc = func_80AAE294;
|
||||
}
|
||||
}
|
||||
|
@ -234,7 +225,7 @@ s32 func_80AADAA0(EnMm* this, GlobalContext* globalCtx) {
|
|||
if (globalCtx->msgCtx.choiceIndex == 0) {
|
||||
player->actor.textId = 0x202D;
|
||||
this->unk_254 &= ~1;
|
||||
EnMm_ChangeAnimation(this, RM_ANIM_HAPPY, &this->curAnimIndex);
|
||||
EnMm_ChangeAnim(this, RM_ANIM_HAPPY, &this->curAnimIndex);
|
||||
} else {
|
||||
player->actor.textId = 0x202C;
|
||||
gSaveContext.infTable[23] |= 0x1000;
|
||||
|
@ -256,7 +247,7 @@ s32 func_80AADAA0(EnMm* this, GlobalContext* globalCtx) {
|
|||
if (Message_ShouldAdvance(globalCtx)) {
|
||||
if ((player->actor.textId == 0x202E) || (player->actor.textId == 0x202C)) {
|
||||
this->unk_254 |= 1;
|
||||
EnMm_ChangeAnimation(this, RM_ANIM_SIT_WAIT, &this->curAnimIndex);
|
||||
EnMm_ChangeAnim(this, RM_ANIM_SIT_WAIT, &this->curAnimIndex);
|
||||
}
|
||||
sp1C = 0;
|
||||
}
|
||||
|
@ -302,7 +293,7 @@ void func_80AADCD0(EnMm* this, GlobalContext* globalCtx) {
|
|||
|
||||
if (this->curAnimIndex != 5) {
|
||||
if ((this->actor.textId == 0x202A) || (this->actor.textId == 0x202B)) {
|
||||
EnMm_ChangeAnimation(this, RM_ANIM_EXCITED, &this->curAnimIndex);
|
||||
EnMm_ChangeAnim(this, RM_ANIM_EXCITED, &this->curAnimIndex);
|
||||
func_80078884(NA_SE_SY_TRE_BOX_APPEAR);
|
||||
}
|
||||
}
|
||||
|
@ -411,7 +402,7 @@ void func_80AAE224(EnMm* this, GlobalContext* globalCtx) {
|
|||
this->unk_254 |= 1;
|
||||
this->unk_1E0 = 0;
|
||||
this->actor.speedXZ = 0.0f;
|
||||
EnMm_ChangeAnimation(this, RM_ANIM_SIT_WAIT, &this->curAnimIndex);
|
||||
EnMm_ChangeAnim(this, RM_ANIM_SIT_WAIT, &this->curAnimIndex);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -452,7 +443,7 @@ void func_80AAE294(EnMm* this, GlobalContext* globalCtx) {
|
|||
|
||||
if ((floorYNorm > 0.9848f) || (floorYNorm < -0.9848f)) {
|
||||
if (this->sitTimer > 30) {
|
||||
EnMm_ChangeAnimation(this, RM_ANIM_SIT, &this->curAnimIndex);
|
||||
EnMm_ChangeAnim(this, RM_ANIM_SIT, &this->curAnimIndex);
|
||||
this->actionFunc = func_80AAE224;
|
||||
} else {
|
||||
this->sitTimer++;
|
||||
|
@ -485,10 +476,10 @@ void func_80AAE50C(EnMm* this, GlobalContext* globalCtx) {
|
|||
this->actionFunc = func_80AAE294;
|
||||
|
||||
if (gSaveContext.itemGetInf[3] & 0x800) {
|
||||
EnMm_ChangeAnimation(this, RM_ANIM_SPRINT, &this->curAnimIndex);
|
||||
EnMm_ChangeAnim(this, RM_ANIM_SPRINT, &this->curAnimIndex);
|
||||
this->mouthTexIndex = RM_MOUTH_CLOSED;
|
||||
} else {
|
||||
EnMm_ChangeAnimation(this, RM_ANIM_RUN, &this->curAnimIndex);
|
||||
EnMm_ChangeAnim(this, RM_ANIM_RUN, &this->curAnimIndex);
|
||||
this->mouthTexIndex = RM_MOUTH_OPEN;
|
||||
}
|
||||
|
||||
|
@ -504,7 +495,7 @@ void func_80AAE598(EnMm* this, GlobalContext* globalCtx) {
|
|||
this->unk_1E0 = 3;
|
||||
this->actionFunc = func_80AAE50C;
|
||||
this->unk_254 &= ~1;
|
||||
EnMm_ChangeAnimation(this, RM_ANIM_STAND, &this->curAnimIndex);
|
||||
EnMm_ChangeAnim(this, RM_ANIM_STAND, &this->curAnimIndex);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -67,14 +67,7 @@ static ColliderCylinderInit sCylinderInit = {
|
|||
{ 18, 63, 0, { 0, 0, 0 } },
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ AnimationHeader* animation;
|
||||
/* 0x04 */ f32 playSpeed;
|
||||
/* 0x08 */ u8 mode;
|
||||
/* 0x0C */ f32 morphFrames;
|
||||
} EnMm2AnimEntry; // size = 0x10
|
||||
|
||||
static EnMm2AnimEntry sAnimationEntries[] = {
|
||||
static AnimationSpeedInfo sAnimationInfo[] = {
|
||||
{ &gRunningManRunAnim, 1.0f, ANIMMODE_LOOP, -7.0f }, { &gRunningManSitStandAnim, -1.0f, ANIMMODE_ONCE, -7.0f },
|
||||
{ &gRunningManSitWaitAnim, 1.0f, ANIMMODE_LOOP, -7.0f }, { &gRunningManSitStandAnim, 1.0f, ANIMMODE_ONCE, -7.0f },
|
||||
{ &gRunningManSprintAnim, 1.0f, ANIMMODE_LOOP, -7.0f }, { &gRunningManExcitedAnim, 1.0f, ANIMMODE_LOOP, -12.0f },
|
||||
|
@ -85,27 +78,25 @@ static InitChainEntry sInitChain[] = {
|
|||
ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_STOP),
|
||||
};
|
||||
|
||||
void EnMm2_ChangeAnimation(EnMm2* this, s32 animationIndex, s32* previousAnimation) {
|
||||
void EnMm2_ChangeAnim(EnMm2* this, s32 index, s32* currentIndex) {
|
||||
f32 phi_f0;
|
||||
|
||||
if ((*previousAnimation < 0) || (animationIndex == *previousAnimation)) {
|
||||
if ((*currentIndex < 0) || (index == *currentIndex)) {
|
||||
phi_f0 = 0.0f;
|
||||
} else {
|
||||
phi_f0 = sAnimationEntries[animationIndex].morphFrames;
|
||||
phi_f0 = sAnimationInfo[index].morphFrames;
|
||||
}
|
||||
|
||||
if (sAnimationEntries[animationIndex].playSpeed >= 0.0f) {
|
||||
Animation_Change(&this->skelAnime, sAnimationEntries[animationIndex].animation,
|
||||
sAnimationEntries[animationIndex].playSpeed, 0.0f,
|
||||
(f32)Animation_GetLastFrame(sAnimationEntries[animationIndex].animation),
|
||||
sAnimationEntries[animationIndex].mode, phi_f0);
|
||||
if (sAnimationInfo[index].playSpeed >= 0.0f) {
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[index].animation, sAnimationInfo[index].playSpeed, 0.0f,
|
||||
(f32)Animation_GetLastFrame(sAnimationInfo[index].animation), sAnimationInfo[index].mode,
|
||||
phi_f0);
|
||||
} else {
|
||||
Animation_Change(&this->skelAnime, sAnimationEntries[animationIndex].animation,
|
||||
sAnimationEntries[animationIndex].playSpeed,
|
||||
(f32)Animation_GetLastFrame(sAnimationEntries[animationIndex].animation), 0.0f,
|
||||
sAnimationEntries[animationIndex].mode, phi_f0);
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[index].animation, sAnimationInfo[index].playSpeed,
|
||||
(f32)Animation_GetLastFrame(sAnimationInfo[index].animation), 0.0f, sAnimationInfo[index].mode,
|
||||
phi_f0);
|
||||
}
|
||||
*previousAnimation = animationIndex;
|
||||
*currentIndex = index;
|
||||
}
|
||||
|
||||
void func_80AAEF70(EnMm2* this, GlobalContext* globalCtx) {
|
||||
|
@ -137,9 +128,9 @@ void EnMm2_Init(Actor* thisx, GlobalContext* globalCtx2) {
|
|||
Actor_ProcessInitChain(&this->actor, sInitChain);
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 21.0f);
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gRunningManSkel, NULL, this->jointTable, this->morphTable, 16);
|
||||
Animation_Change(&this->skelAnime, sAnimationEntries[RM2_ANIM_SIT_WAIT].animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimationEntries[RM2_ANIM_SIT_WAIT].animation),
|
||||
sAnimationEntries[RM2_ANIM_SIT_WAIT].mode, sAnimationEntries[RM2_ANIM_SIT_WAIT].morphFrames);
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[RM2_ANIM_SIT_WAIT].animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimationInfo[RM2_ANIM_SIT_WAIT].animation),
|
||||
sAnimationInfo[RM2_ANIM_SIT_WAIT].mode, sAnimationInfo[RM2_ANIM_SIT_WAIT].morphFrames);
|
||||
this->previousAnimation = RM2_ANIM_SIT_WAIT;
|
||||
Collider_InitCylinder(globalCtx, &this->collider);
|
||||
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
|
||||
|
@ -197,7 +188,7 @@ void func_80AAF2BC(EnMm2* this, GlobalContext* globalCtx) {
|
|||
void func_80AAF330(EnMm2* this, GlobalContext* globalCtx) {
|
||||
if (SkelAnime_Update(&this->skelAnime)) {
|
||||
this->actionFunc = func_80AAF2BC;
|
||||
EnMm2_ChangeAnimation(this, 0, &this->previousAnimation);
|
||||
EnMm2_ChangeAnim(this, RM2_ANIM_RUN, &this->previousAnimation);
|
||||
this->mouthTexIndex = RM2_MOUTH_OPEN;
|
||||
if (!(this->unk_1F4 & 2)) {
|
||||
Message_CloseTextbox(globalCtx);
|
||||
|
@ -266,7 +257,7 @@ void func_80AAF5EC(EnMm2* this, GlobalContext* globalCtx) {
|
|||
SkelAnime_Update(&this->skelAnime);
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
|
||||
this->unk_1F4 &= ~1;
|
||||
EnMm2_ChangeAnimation(this, 3, &this->previousAnimation);
|
||||
EnMm2_ChangeAnim(this, RM2_ANIM_STAND, &this->previousAnimation);
|
||||
this->actionFunc = func_80AAF330;
|
||||
}
|
||||
}
|
||||
|
@ -290,7 +281,7 @@ void func_80AAF668(EnMm2* this, GlobalContext* globalCtx) {
|
|||
if (!(gSaveContext.eventInf[1] & 1)) {
|
||||
this->unk_1F4 |= 2;
|
||||
this->unk_1F4 &= ~1;
|
||||
EnMm2_ChangeAnimation(this, 3, &this->previousAnimation);
|
||||
EnMm2_ChangeAnim(this, RM2_ANIM_STAND, &this->previousAnimation);
|
||||
this->actionFunc = func_80AAF330;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,7 +69,22 @@ static CollisionCheckInfoInit2 sColChkInfoInit = {
|
|||
0, 0, 0, 0, MASS_IMMOVABLE,
|
||||
};
|
||||
|
||||
static struct_D_80AA1678 sAnimationInfo[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENSA_ANIM1_0,
|
||||
/* 1 */ ENSA_ANIM1_1,
|
||||
/* 2 */ ENSA_ANIM1_2,
|
||||
/* 3 */ ENSA_ANIM1_3,
|
||||
/* 4 */ ENSA_ANIM1_4,
|
||||
/* 5 */ ENSA_ANIM1_5,
|
||||
/* 6 */ ENSA_ANIM1_6,
|
||||
/* 7 */ ENSA_ANIM1_7,
|
||||
/* 8 */ ENSA_ANIM1_8,
|
||||
/* 9 */ ENSA_ANIM1_9,
|
||||
/* 10 */ ENSA_ANIM1_10,
|
||||
/* 11 */ ENSA_ANIM1_11
|
||||
} EnSaAnimation1;
|
||||
|
||||
static AnimationFrameCountInfo sAnimationInfo1[] = {
|
||||
{ &gSariaWaitArmsToSideAnim, 1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gSariaLookUpArmExtendedAnim, 1.0f, ANIMMODE_ONCE, -10.0f },
|
||||
{ &gSariaWaveAnim, 1.0f, ANIMMODE_LOOP, -10.0f },
|
||||
|
@ -84,7 +99,20 @@ static struct_D_80AA1678 sAnimationInfo[] = {
|
|||
{ &gSariaPlayingOcarinaAnim, 1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
};
|
||||
|
||||
static struct_80034EC0_Entry sAnimations[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENSA_ANIM2_0,
|
||||
/* 1 */ ENSA_ANIM2_1,
|
||||
/* 2 */ ENSA_ANIM2_2,
|
||||
/* 3 */ ENSA_ANIM2_3,
|
||||
/* 4 */ ENSA_ANIM2_4,
|
||||
/* 5 */ ENSA_ANIM2_5,
|
||||
/* 6 */ ENSA_ANIM2_6,
|
||||
/* 7 */ ENSA_ANIM2_7,
|
||||
/* 8 */ ENSA_ANIM2_8,
|
||||
/* 9 */ ENSA_ANIM2_9
|
||||
} EnSaAnimation2;
|
||||
|
||||
static AnimationInfo sAnimationInfo2[] = {
|
||||
{ &gSariaTransitionHandsSideToChestToSideAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
|
||||
{ &gSariaTransitionHandsSideToBackAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -4.0f },
|
||||
{ &gSariaRightArmExtendedWaitAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
|
||||
|
@ -210,11 +238,11 @@ f32 func_80AF5894(EnSa* this) {
|
|||
void func_80AF58B8(EnSa* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 3);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo2, ENSA_ANIM2_3);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 2);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo2, ENSA_ANIM2_2);
|
||||
this->unk_20A++;
|
||||
}
|
||||
break;
|
||||
|
@ -224,11 +252,11 @@ void func_80AF58B8(EnSa* this) {
|
|||
void func_80AF594C(EnSa* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 8);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo2, ENSA_ANIM2_8);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 9);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo2, ENSA_ANIM2_9);
|
||||
this->unk_20A++;
|
||||
}
|
||||
break;
|
||||
|
@ -238,11 +266,11 @@ void func_80AF594C(EnSa* this) {
|
|||
void func_80AF59E0(EnSa* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 1);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo2, ENSA_ANIM2_1);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 7);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo2, ENSA_ANIM2_7);
|
||||
this->unk_20A++;
|
||||
}
|
||||
break;
|
||||
|
@ -252,12 +280,12 @@ void func_80AF59E0(EnSa* this) {
|
|||
void func_80AF5A74(EnSa* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 1);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo2, ENSA_ANIM2_1);
|
||||
func_80AF5894(this);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 9);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo2, ENSA_ANIM2_9);
|
||||
this->unk_20A++;
|
||||
}
|
||||
break;
|
||||
|
@ -267,11 +295,11 @@ void func_80AF5A74(EnSa* this) {
|
|||
void func_80AF5B10(EnSa* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 6);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo2, ENSA_ANIM2_6);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 4);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo2, ENSA_ANIM2_4);
|
||||
this->unk_20A++;
|
||||
}
|
||||
break;
|
||||
|
@ -281,12 +309,12 @@ void func_80AF5B10(EnSa* this) {
|
|||
void func_80AF5BA4(EnSa* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 6);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo2, ENSA_ANIM2_6);
|
||||
func_80AF5894(this);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 9);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo2, ENSA_ANIM2_9);
|
||||
this->unk_20A++;
|
||||
}
|
||||
break;
|
||||
|
@ -296,11 +324,11 @@ void func_80AF5BA4(EnSa* this) {
|
|||
void func_80AF5C40(EnSa* this) {
|
||||
switch (this->unk_20A) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 5);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo2, ENSA_ANIM2_5);
|
||||
this->unk_20A++;
|
||||
case 1:
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 0);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo2, ENSA_ANIM2_0);
|
||||
this->unk_20A++;
|
||||
}
|
||||
break;
|
||||
|
@ -338,10 +366,10 @@ void func_80AF5CE4(EnSa* this) {
|
|||
}
|
||||
}
|
||||
|
||||
void EnSa_ChangeAnim(EnSa* this, s32 action) {
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[action].animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimationInfo[action].animation), sAnimationInfo[action].mode,
|
||||
sAnimationInfo[action].transitionRate);
|
||||
void EnSa_ChangeAnim(EnSa* this, s32 index) {
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo1[index].animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sAnimationInfo1[index].animation), sAnimationInfo1[index].mode,
|
||||
sAnimationInfo1[index].morphFrames);
|
||||
}
|
||||
|
||||
s32 func_80AF5DFC(EnSa* this, GlobalContext* globalCtx) {
|
||||
|
@ -454,16 +482,16 @@ void EnSa_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
switch (func_80AF5DFC(this, globalCtx)) {
|
||||
case 2:
|
||||
EnSa_ChangeAnim(this, 0xB);
|
||||
EnSa_ChangeAnim(this, ENSA_ANIM1_11);
|
||||
this->actionFunc = func_80AF6448;
|
||||
break;
|
||||
case 5:
|
||||
EnSa_ChangeAnim(this, 0xB);
|
||||
EnSa_ChangeAnim(this, ENSA_ANIM1_11);
|
||||
this->actionFunc = func_80AF683C;
|
||||
break;
|
||||
case 1:
|
||||
this->actor.gravity = -1.0f;
|
||||
EnSa_ChangeAnim(this, 0);
|
||||
EnSa_ChangeAnim(this, ENSA_ANIM1_0);
|
||||
this->actionFunc = func_80AF6448;
|
||||
break;
|
||||
case 4:
|
||||
|
@ -471,13 +499,13 @@ void EnSa_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
this->actor.gravity = -1.0f;
|
||||
globalCtx->csCtx.segment = SEGMENTED_TO_VIRTUAL(gSpot04Cs_10E20);
|
||||
gSaveContext.cutsceneTrigger = 1;
|
||||
EnSa_ChangeAnim(this, 4);
|
||||
EnSa_ChangeAnim(this, ENSA_ANIM1_4);
|
||||
this->actionFunc = func_80AF68E4;
|
||||
break;
|
||||
case 3:
|
||||
this->unk_210 = 0;
|
||||
this->actor.gravity = -1.0f;
|
||||
EnSa_ChangeAnim(this, 0);
|
||||
EnSa_ChangeAnim(this, ENSA_ANIM1_0);
|
||||
this->actionFunc = func_80AF68E4;
|
||||
break;
|
||||
case 0:
|
||||
|
@ -569,7 +597,7 @@ void func_80AF6448(EnSa* this, GlobalContext* globalCtx) {
|
|||
if (this->skelAnime.animation == &gSariaStopPlayingOcarinaAnim) {
|
||||
this->skelAnime.playSpeed = -1.0f;
|
||||
if ((s32)this->skelAnime.curFrame == 0) {
|
||||
EnSa_ChangeAnim(this, 6);
|
||||
EnSa_ChangeAnim(this, ENSA_ANIM1_6);
|
||||
}
|
||||
}
|
||||
if (this->unk_1E0.unk_00 != 0 && globalCtx->sceneNum == SCENE_SPOT05) {
|
||||
|
@ -670,11 +698,11 @@ void func_80AF68E4(EnSa* this, GlobalContext* globalCtx) {
|
|||
void func_80AF6B20(EnSa* this, GlobalContext* globalCtx) {
|
||||
if (globalCtx->sceneNum == SCENE_SPOT05) {
|
||||
Item_Give(globalCtx, ITEM_SONG_SARIA);
|
||||
EnSa_ChangeAnim(this, 6);
|
||||
EnSa_ChangeAnim(this, ENSA_ANIM1_6);
|
||||
}
|
||||
|
||||
if (globalCtx->sceneNum == SCENE_SPOT04) {
|
||||
EnSa_ChangeAnim(this, 4);
|
||||
EnSa_ChangeAnim(this, ENSA_ANIM1_4);
|
||||
this->actor.world.pos = this->actor.home.pos;
|
||||
this->actor.world.rot = this->unk_21A;
|
||||
this->mouthIndex = 0;
|
||||
|
@ -694,7 +722,7 @@ void EnSa_Update(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
if (this->skelAnime.animation == &gSariaOcarinaToMouthAnim &&
|
||||
this->skelAnime.curFrame >= Animation_GetLastFrame(&gSariaOcarinaToMouthAnim)) {
|
||||
EnSa_ChangeAnim(this, 6);
|
||||
EnSa_ChangeAnim(this, ENSA_ANIM1_6);
|
||||
}
|
||||
|
||||
if (this->actionFunc != func_80AF68E4) {
|
||||
|
|
|
@ -233,13 +233,7 @@ static s32 sOcarinaGameRewards[] = {
|
|||
GI_RUPEE_RED,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
AnimationHeader* animation;
|
||||
u8 mode;
|
||||
f32 morphFrames;
|
||||
} SkullkidAnimationEntry;
|
||||
|
||||
static SkullkidAnimationEntry sSkullKidAnimations[] = {
|
||||
static AnimationMinimalInfo sAnimationInfo[] = {
|
||||
{ &gSkullKidBackflipAnim, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidShootNeedleAnim, ANIMMODE_ONCE, 0.0f },
|
||||
{ &gSkullKidPlayFluteAnim, ANIMMODE_LOOP, 0.0f },
|
||||
|
@ -291,12 +285,12 @@ static InitChainEntry sInitChain[] = {
|
|||
|
||||
static s32 D_80B01EA0; // gets set if ACTOR_FLAG_8 is set
|
||||
|
||||
void EnSkj_ChangeAnim(EnSkj* this, u8 animIndex) {
|
||||
f32 endFrame = Animation_GetLastFrame(sSkullKidAnimations[animIndex].animation);
|
||||
void EnSkj_ChangeAnim(EnSkj* this, u8 index) {
|
||||
f32 endFrame = Animation_GetLastFrame(sAnimationInfo[index].animation);
|
||||
|
||||
this->animIndex = animIndex;
|
||||
Animation_Change(&this->skelAnime, sSkullKidAnimations[animIndex].animation, 1.0f, 0.0f, endFrame,
|
||||
sSkullKidAnimations[animIndex].mode, sSkullKidAnimations[animIndex].morphFrames);
|
||||
this->animIndex = index;
|
||||
Animation_Change(&this->skelAnime, sAnimationInfo[index].animation, 1.0f, 0.0f, endFrame,
|
||||
sAnimationInfo[index].mode, sAnimationInfo[index].morphFrames);
|
||||
}
|
||||
|
||||
void EnSkj_SetupAction(EnSkj* this, u8 action) {
|
||||
|
|
|
@ -104,7 +104,18 @@ static ColliderJntSphInit sJntSphInit = {
|
|||
sJntSphElementsInit,
|
||||
};
|
||||
|
||||
static struct_80034EC0_Entry sAnimations[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENST_ANIM_0,
|
||||
/* 1 */ ENST_ANIM_1,
|
||||
/* 2 */ ENST_ANIM_2,
|
||||
/* 3 */ ENST_ANIM_3,
|
||||
/* 4 */ ENST_ANIM_4,
|
||||
/* 5 */ ENST_ANIM_5,
|
||||
/* 6 */ ENST_ANIM_6,
|
||||
/* 7 */ ENST_ANIM_7
|
||||
} EnStAnimation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &object_st_Anim_000304, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP_INTERP, 0.0f },
|
||||
{ &object_st_Anim_005B98, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE_INTERP, -8.0f },
|
||||
{ &object_st_Anim_000304, 4.0f, 0.0f, -1.0f, ANIMMODE_ONCE_INTERP, -8.0f },
|
||||
|
@ -234,24 +245,24 @@ void EnSt_AddBlurSpace(EnSt* this) {
|
|||
}
|
||||
|
||||
void EnSt_SetWaitingAnimation(EnSt* this) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 3);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENST_ANIM_3);
|
||||
}
|
||||
|
||||
void EnSt_SetReturnToCeilingAnimation(EnSt* this) {
|
||||
Audio_PlayActorSound2(&this->actor, NA_SE_EN_STALTU_UP);
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 2);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENST_ANIM_2);
|
||||
}
|
||||
|
||||
void EnSt_SetLandAnimation(EnSt* this) {
|
||||
this->actor.world.pos.y = this->actor.floorHeight + this->floorHeightOffset;
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 4);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENST_ANIM_4);
|
||||
this->sfxTimer = 0;
|
||||
this->animFrames = this->skelAnime.animLength;
|
||||
}
|
||||
|
||||
void EnSt_SetDropAnimAndVel(EnSt* this) {
|
||||
if (this->takeDamageSpinTimer == 0) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 4);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENST_ANIM_4);
|
||||
this->animFrames = this->skelAnime.animLength;
|
||||
}
|
||||
this->sfxTimer = 0;
|
||||
|
@ -440,7 +451,7 @@ s32 EnSt_CheckHitBackside(EnSt* this, GlobalContext* globalCtx) {
|
|||
|
||||
this->swayTimer = this->stunTimer = 0;
|
||||
this->gaveDamageSpinTimer = 1;
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 3);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENST_ANIM_3);
|
||||
this->takeDamageSpinTimer = this->skelAnime.animLength;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 0xC8, 0, this->takeDamageSpinTimer);
|
||||
if (Actor_ApplyDamage(&this->actor)) {
|
||||
|
@ -769,7 +780,7 @@ void EnSt_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 14.0f);
|
||||
SkelAnime_Init(globalCtx, &this->skelAnime, &object_st_Skel_005298, NULL, this->jointTable, this->morphTable, 30);
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 0);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENST_ANIM_0);
|
||||
this->blureIdx = EnSt_CreateBlureEffect(globalCtx);
|
||||
EnSt_InitColliders(this, globalCtx);
|
||||
if (thisx->params == 2) {
|
||||
|
@ -817,14 +828,14 @@ void EnSt_WaitOnGround(EnSt* this, GlobalContext* globalCtx) {
|
|||
if (this->takeDamageSpinTimer != 0) {
|
||||
this->takeDamageSpinTimer--;
|
||||
if (this->takeDamageSpinTimer == 0) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 3);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENST_ANIM_3);
|
||||
}
|
||||
}
|
||||
|
||||
if (this->animFrames != 0) {
|
||||
this->animFrames--;
|
||||
if (this->animFrames == 0) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 3);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENST_ANIM_3);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -849,14 +860,14 @@ void EnSt_LandOnGround(EnSt* this, GlobalContext* globalCtx) {
|
|||
if (this->animFrames != 0) {
|
||||
this->animFrames--;
|
||||
if (this->animFrames == 0) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 3);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENST_ANIM_3);
|
||||
}
|
||||
}
|
||||
|
||||
if (this->takeDamageSpinTimer != 0) {
|
||||
this->takeDamageSpinTimer--;
|
||||
if (this->takeDamageSpinTimer == 0) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 3);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENST_ANIM_3);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -879,7 +890,7 @@ void EnSt_MoveToGround(EnSt* this, GlobalContext* globalCtx) {
|
|||
if (this->takeDamageSpinTimer != 0) {
|
||||
this->takeDamageSpinTimer--;
|
||||
if (this->takeDamageSpinTimer == 0) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 5);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENST_ANIM_5);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,14 @@ static ColliderJntSphInit sJntSphInit = {
|
|||
|
||||
static CollisionCheckInfoInit2 D_80B0F074 = { 1, 2, 25, 25, MASS_IMMOVABLE };
|
||||
|
||||
static struct_80034EC0_Entry D_80B0F080[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENSW_ANIM_0,
|
||||
/* 1 */ ENSW_ANIM_1,
|
||||
/* 2 */ ENSW_ANIM_2,
|
||||
/* 3 */ ENSW_ANIM_3
|
||||
} EnSwAnimation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &object_st_Anim_000304, 1.0f, 0.0f, -1.0f, 0x01, 0.0f },
|
||||
{ &object_st_Anim_000304, 1.0f, 0.0f, -1.0f, 0x01, -8.0f },
|
||||
{ &object_st_Anim_0055A8, 1.0f, 0.0f, -1.0f, 0x01, -8.0f },
|
||||
|
@ -229,7 +236,7 @@ void EnSw_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
}
|
||||
|
||||
SkelAnime_Init(globalCtx, &this->skelAnime, &object_st_Skel_005298, NULL, this->jointTable, this->morphTable, 30);
|
||||
func_80034EC0(&this->skelAnime, D_80B0F080, 0);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENSW_ANIM_0);
|
||||
ActorShape_Init(&thisx->shape, 0.0f, NULL, 0.0f);
|
||||
Collider_InitJntSph(globalCtx, &this->collider);
|
||||
Collider_SetJntSph(globalCtx, &this->collider, &this->actor, &sJntSphInit, this->sphs);
|
||||
|
|
|
@ -87,14 +87,7 @@ static DamageTable sDamageTable = {
|
|||
/* Unknown 2 */ DMG_ENTRY(0, 0x0),
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
AnimationHeader* anim;
|
||||
f32 unk_4;
|
||||
u8 mode;
|
||||
f32 transitionRate;
|
||||
} EnToryoAnimation;
|
||||
|
||||
static EnToryoAnimation sEnToryoAnimation = { &object_toryo_Anim_000E50, 1.0f, 0, 0 };
|
||||
static AnimationSpeedInfo sEnToryoAnimation = { &object_toryo_Anim_000E50, 1.0f, 0, 0 };
|
||||
|
||||
static Vec3f sMultVec = { 800.0f, 1000.0f, 0.0f };
|
||||
|
||||
|
@ -131,9 +124,9 @@ void EnToryo_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
|
||||
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
|
||||
Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 0.0f, 0.0f, 0.0f, 4);
|
||||
Animation_Change(&this->skelAnime, sEnToryoAnimation.anim, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sEnToryoAnimation.anim), sEnToryoAnimation.mode,
|
||||
sEnToryoAnimation.transitionRate);
|
||||
Animation_Change(&this->skelAnime, sEnToryoAnimation.animation, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(sEnToryoAnimation.animation), sEnToryoAnimation.mode,
|
||||
sEnToryoAnimation.morphFrames);
|
||||
this->stateFlags |= 8;
|
||||
this->actor.targetMode = 6;
|
||||
this->actionFunc = func_80B20914;
|
||||
|
|
|
@ -129,7 +129,7 @@ typedef enum {
|
|||
/* 33 */ ZL4_ANIM_33
|
||||
} EnZl4Animation;
|
||||
|
||||
static struct_80034EC0_Entry sAnimationEntries[] = {
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
/* 0 */ /* standing idle */ { &gChildZeldaAnim_000654, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
/* 1 */ /* moves to introduce herself */ { &gChildZeldaAnim_00E5C8, 1.0f, 0.0f, -1.0f, ANIMMODE_ONCE, -1.0f },
|
||||
/* 2 */ /* introducing herself */ { &gChildZeldaAnim_00EBC4, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -1.0f },
|
||||
|
@ -362,7 +362,7 @@ void EnZl4_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gChildZeldaSkel, NULL, this->jointTable, this->morphTable, 18);
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 18.0f);
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_21);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_21);
|
||||
Collider_InitCylinder(globalCtx, &this->collider);
|
||||
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
|
||||
CollisionCheck_SetInfo2(&this->actor.colChkInfo, NULL, &sColChkInfoInit);
|
||||
|
@ -372,19 +372,19 @@ void EnZl4_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
this->eyeExpression = this->mouthExpression = ZL4_MOUTH_NEUTRAL;
|
||||
|
||||
if (gSaveContext.sceneSetupIndex >= 4) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_0);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_0);
|
||||
this->actionFunc = EnZl4_TheEnd;
|
||||
} else if (gSaveContext.eventChkInf[4] & 1) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_0);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_0);
|
||||
this->actionFunc = EnZl4_Idle;
|
||||
} else {
|
||||
if (gSaveContext.entranceIndex != 0x5F0) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_21);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_21);
|
||||
this->csState = ZL4_CS_WAIT;
|
||||
this->talkState = 0;
|
||||
} else {
|
||||
EnZl4_SetupFromLegendCs(this, globalCtx);
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_0);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_0);
|
||||
this->csState = ZL4_CS_LEGEND;
|
||||
this->talkState = 0;
|
||||
}
|
||||
|
@ -403,7 +403,7 @@ s32 EnZl4_SetNextAnim(EnZl4* this, s32 nextAnim) {
|
|||
if (!Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
return false;
|
||||
}
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, nextAnim);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, nextAnim);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -498,7 +498,7 @@ s32 EnZl4_CsMeetPlayer(EnZl4* this, GlobalContext* globalCtx) {
|
|||
case 6:
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
|
||||
EnZl4_SetCsCameraAngle(globalCtx, 2);
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_22);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_22);
|
||||
this->mouthExpression = ZL4_MOUTH_NEUTRAL;
|
||||
this->talkTimer2 = 0;
|
||||
this->talkState++;
|
||||
|
@ -534,7 +534,7 @@ s32 EnZl4_CsAskStone(EnZl4* this, GlobalContext* globalCtx) {
|
|||
break;
|
||||
} else if (globalCtx->msgCtx.choiceIndex == 0) {
|
||||
EnZl4_SetCsCameraAngle(globalCtx, 4);
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_28);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_28);
|
||||
this->blinkTimer = 0;
|
||||
this->eyeExpression = ZL4_EYES_SQUINT;
|
||||
this->mouthExpression = ZL4_MOUTH_HAPPY;
|
||||
|
@ -542,7 +542,7 @@ s32 EnZl4_CsAskStone(EnZl4* this, GlobalContext* globalCtx) {
|
|||
this->talkState = 7;
|
||||
} else {
|
||||
EnZl4_SetCsCameraAngle(globalCtx, 2);
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_9);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_9);
|
||||
this->mouthExpression = ZL4_MOUTH_WORRIED;
|
||||
Message_StartTextbox(globalCtx, 0x7031, NULL);
|
||||
this->talkState++;
|
||||
|
@ -558,7 +558,7 @@ s32 EnZl4_CsAskStone(EnZl4* this, GlobalContext* globalCtx) {
|
|||
case 5:
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
|
||||
globalCtx->msgCtx.msgMode = MSGMODE_PAUSED;
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_9);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_9);
|
||||
this->mouthExpression = ZL4_MOUTH_WORRIED;
|
||||
EnZl4_ReverseAnimation(this);
|
||||
this->talkState = 6;
|
||||
|
@ -579,7 +579,7 @@ s32 EnZl4_CsAskStone(EnZl4* this, GlobalContext* globalCtx) {
|
|||
break;
|
||||
} else if (globalCtx->msgCtx.choiceIndex == 0) {
|
||||
EnZl4_SetCsCameraAngle(globalCtx, 4);
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_28);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_28);
|
||||
this->blinkTimer = 0;
|
||||
this->eyeExpression = ZL4_EYES_SQUINT;
|
||||
this->mouthExpression = ZL4_MOUTH_HAPPY;
|
||||
|
@ -587,7 +587,7 @@ s32 EnZl4_CsAskStone(EnZl4* this, GlobalContext* globalCtx) {
|
|||
this->talkState = 7;
|
||||
} else {
|
||||
EnZl4_SetCsCameraAngle(globalCtx, 2);
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_9);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_9);
|
||||
this->mouthExpression = ZL4_MOUTH_WORRIED;
|
||||
Message_StartTextbox(globalCtx, 0x7031, NULL);
|
||||
this->talkState = 4;
|
||||
|
@ -603,7 +603,7 @@ s32 EnZl4_CsAskStone(EnZl4* this, GlobalContext* globalCtx) {
|
|||
case 8:
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
|
||||
EnZl4_SetCsCameraMove(globalCtx, 2);
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_0);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_0);
|
||||
this->blinkTimer = 0;
|
||||
this->eyeExpression = ZL4_EYES_NEUTRAL;
|
||||
this->mouthExpression = ZL4_MOUTH_NEUTRAL;
|
||||
|
@ -620,7 +620,7 @@ s32 EnZl4_CsAskStone(EnZl4* this, GlobalContext* globalCtx) {
|
|||
break;
|
||||
case 10:
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_5);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_5);
|
||||
this->eyeExpression = ZL4_EYES_OPEN;
|
||||
this->mouthExpression = ZL4_MOUTH_SURPRISED;
|
||||
Message_StartTextbox(globalCtx, 0x70FE, NULL);
|
||||
|
@ -641,7 +641,7 @@ s32 EnZl4_CsAskName(EnZl4* this, GlobalContext* globalCtx) {
|
|||
case 1:
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
|
||||
EnZl4_SetCsCameraAngle(globalCtx, 6);
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_1);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_1);
|
||||
this->blinkTimer = 11;
|
||||
this->eyeExpression = ZL4_EYES_SQUINT;
|
||||
this->mouthExpression = ZL4_MOUTH_NEUTRAL;
|
||||
|
@ -656,7 +656,7 @@ s32 EnZl4_CsAskName(EnZl4* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
case 3:
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_16);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_16);
|
||||
this->blinkTimer = 0;
|
||||
this->eyeExpression = ZL4_EYES_NEUTRAL;
|
||||
globalCtx->msgCtx.msgMode = MSGMODE_PAUSED;
|
||||
|
@ -672,7 +672,7 @@ s32 EnZl4_CsAskName(EnZl4* this, GlobalContext* globalCtx) {
|
|||
case 5:
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
|
||||
EnZl4_SetCsCameraMove(globalCtx, 3);
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_0);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_0);
|
||||
globalCtx->msgCtx.msgMode = MSGMODE_PAUSED;
|
||||
this->talkTimer2 = 0;
|
||||
this->talkState = 6;
|
||||
|
@ -687,7 +687,7 @@ s32 EnZl4_CsAskName(EnZl4* this, GlobalContext* globalCtx) {
|
|||
break;
|
||||
case 7:
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_6);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_6);
|
||||
this->mouthExpression = ZL4_MOUTH_HAPPY;
|
||||
Message_StartTextbox(globalCtx, 0x2075, NULL);
|
||||
this->talkState++;
|
||||
|
@ -707,7 +707,7 @@ s32 EnZl4_CsAskName(EnZl4* this, GlobalContext* globalCtx) {
|
|||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(globalCtx)) {
|
||||
if (globalCtx->msgCtx.choiceIndex == 0) {
|
||||
EnZl4_SetCsCameraMove(globalCtx, 4);
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_33);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_33);
|
||||
this->mouthExpression = ZL4_MOUTH_NEUTRAL;
|
||||
globalCtx->msgCtx.msgMode = MSGMODE_PAUSED;
|
||||
this->talkTimer2 = 0;
|
||||
|
@ -723,7 +723,7 @@ s32 EnZl4_CsAskName(EnZl4* this, GlobalContext* globalCtx) {
|
|||
break;
|
||||
case 11:
|
||||
if (DECR(this->talkTimer1) == 0) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_11);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_11);
|
||||
this->blinkTimer = 11;
|
||||
this->eyeExpression = ZL4_EYES_LOOK_RIGHT;
|
||||
this->mouthExpression = ZL4_MOUTH_WORRIED;
|
||||
|
@ -740,7 +740,7 @@ s32 EnZl4_CsAskName(EnZl4* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
case 13:
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_6);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_6);
|
||||
this->blinkTimer = 3;
|
||||
this->eyeExpression = ZL4_EYES_NEUTRAL;
|
||||
this->mouthExpression = ZL4_MOUTH_HAPPY;
|
||||
|
@ -822,7 +822,7 @@ s32 EnZl4_CsTellLegend(EnZl4* this, GlobalContext* globalCtx) {
|
|||
Message_StartTextbox(globalCtx, 0x7005, NULL);
|
||||
this->talkState = 9;
|
||||
} else {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_5);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_5);
|
||||
this->mouthExpression = ZL4_MOUTH_SURPRISED;
|
||||
Message_StartTextbox(globalCtx, 0x7038, NULL);
|
||||
this->talkState++;
|
||||
|
@ -835,7 +835,7 @@ s32 EnZl4_CsTellLegend(EnZl4* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
case 6:
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_33);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_33);
|
||||
this->mouthExpression = ZL4_MOUTH_NEUTRAL;
|
||||
Message_StartTextbox(globalCtx, 0x7037, NULL);
|
||||
this->talkState++;
|
||||
|
@ -855,7 +855,7 @@ s32 EnZl4_CsTellLegend(EnZl4* this, GlobalContext* globalCtx) {
|
|||
break;
|
||||
case 9:
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_26);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_26);
|
||||
Message_StartTextbox(globalCtx, 0x2078, NULL);
|
||||
this->talkState++;
|
||||
}
|
||||
|
@ -913,7 +913,7 @@ s32 EnZl4_CsLookWindow(EnZl4* this, GlobalContext* globalCtx) {
|
|||
} else {
|
||||
func_800AA000(0.0f, 0xA0, 0xA, 0x28);
|
||||
func_8002DF54(globalCtx, &this->actor, 1);
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_30);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_30);
|
||||
EnZl4_SetCsCameraAngle(globalCtx, 11);
|
||||
Message_StartTextbox(globalCtx, 0x7039, NULL);
|
||||
this->talkState++;
|
||||
|
@ -970,7 +970,7 @@ s32 EnZl4_CsWarnAboutGanon(EnZl4* this, GlobalContext* globalCtx) {
|
|||
case 4:
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
|
||||
EnZl4_SetCsCameraAngle(globalCtx, 12);
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_23);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_23);
|
||||
this->blinkTimer = 0;
|
||||
this->eyeExpression = ZL4_EYES_NEUTRAL;
|
||||
this->mouthExpression = ZL4_MOUTH_SURPRISED;
|
||||
|
@ -994,14 +994,14 @@ s32 EnZl4_CsWarnAboutGanon(EnZl4* this, GlobalContext* globalCtx) {
|
|||
if (!((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_CHOICE) && Message_ShouldAdvance(globalCtx))) {
|
||||
break;
|
||||
} else if (globalCtx->msgCtx.choiceIndex == 0) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_31);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_31);
|
||||
this->blinkTimer = 11;
|
||||
this->eyeExpression = ZL4_EYES_SQUINT;
|
||||
this->mouthExpression = ZL4_MOUTH_HAPPY;
|
||||
Message_StartTextbox(globalCtx, 0x703B, NULL);
|
||||
this->talkState = 11;
|
||||
} else {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_13);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_13);
|
||||
this->blinkTimer = 11;
|
||||
this->eyeExpression = ZL4_EYES_LOOK_LEFT;
|
||||
this->mouthExpression = ZL4_MOUTH_WORRIED;
|
||||
|
@ -1020,7 +1020,7 @@ s32 EnZl4_CsWarnAboutGanon(EnZl4* this, GlobalContext* globalCtx) {
|
|||
break;
|
||||
case 9:
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_14);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_14);
|
||||
globalCtx->msgCtx.msgMode = MSGMODE_PAUSED;
|
||||
this->talkState++;
|
||||
}
|
||||
|
@ -1048,7 +1048,7 @@ s32 EnZl4_CsWarnAboutGanon(EnZl4* this, GlobalContext* globalCtx) {
|
|||
s32 EnZl4_CsMakePlan(EnZl4* this, GlobalContext* globalCtx) {
|
||||
switch (this->talkState) {
|
||||
case 0:
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_18);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_18);
|
||||
this->blinkTimer = 0;
|
||||
this->eyeExpression = ZL4_EYES_NEUTRAL;
|
||||
this->mouthExpression = ZL4_MOUTH_WORRIED;
|
||||
|
@ -1065,7 +1065,7 @@ s32 EnZl4_CsMakePlan(EnZl4* this, GlobalContext* globalCtx) {
|
|||
case 2:
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
|
||||
EnZl4_SetCsCameraAngle(globalCtx, 13);
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_19);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_19);
|
||||
this->blinkTimer = 0;
|
||||
this->eyeExpression = ZL4_EYES_NEUTRAL;
|
||||
this->mouthExpression = ZL4_MOUTH_SURPRISED;
|
||||
|
@ -1080,7 +1080,7 @@ s32 EnZl4_CsMakePlan(EnZl4* this, GlobalContext* globalCtx) {
|
|||
case 4:
|
||||
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(globalCtx)) {
|
||||
Message_StartTextbox(globalCtx, 0x207D, NULL);
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_7);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_7);
|
||||
this->blinkTimer = 0;
|
||||
this->eyeExpression = ZL4_EYES_NEUTRAL;
|
||||
this->mouthExpression = ZL4_MOUTH_NEUTRAL;
|
||||
|
@ -1107,7 +1107,7 @@ s32 EnZl4_CsMakePlan(EnZl4* this, GlobalContext* globalCtx) {
|
|||
break;
|
||||
case 7:
|
||||
if (Actor_HasParent(&this->actor, globalCtx)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_0);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_0);
|
||||
this->talkState++;
|
||||
} else {
|
||||
func_8002F434(&this->actor, globalCtx, GI_LETTER_ZELDA, fabsf(this->actor.xzDistToPlayer) + 1.0f,
|
||||
|
@ -1129,7 +1129,7 @@ void EnZl4_Cutscene(EnZl4* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
break;
|
||||
case ZL4_CS_START:
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_3);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_3);
|
||||
this->blinkTimer = 0;
|
||||
this->eyeExpression = ZL4_EYES_NEUTRAL;
|
||||
this->mouthExpression = ZL4_MOUTH_SURPRISED;
|
||||
|
@ -1205,7 +1205,7 @@ void EnZl4_TheEnd(EnZl4* this, GlobalContext* globalCtx) {
|
|||
Vec3f pos;
|
||||
|
||||
if (SkelAnime_Update(&this->skelAnime) && (this->skelAnime.animation == &gChildZeldaAnim_010DF8)) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, ZL4_ANIM_4);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_4);
|
||||
}
|
||||
if (EnZl4_InMovingAnim(this)) {
|
||||
EnZl4_SetMove(this, globalCtx);
|
||||
|
@ -1225,7 +1225,7 @@ void EnZl4_TheEnd(EnZl4* this, GlobalContext* globalCtx) {
|
|||
this->actor.world.pos = this->actor.home.pos = pos;
|
||||
}
|
||||
if (this->lastAction != npcAction->action) {
|
||||
func_80034EC0(&this->skelAnime, sAnimationEntries, animIndex[npcAction->action]);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, animIndex[npcAction->action]);
|
||||
this->lastAction = npcAction->action;
|
||||
}
|
||||
this->actor.velocity.x = 0.0f;
|
||||
|
|
|
@ -309,7 +309,18 @@ const ActorInit En_Zo_InitVars = {
|
|||
(ActorFunc)EnZo_Draw,
|
||||
};
|
||||
|
||||
static struct_80034EC0_Entry sAnimations[] = {
|
||||
typedef enum {
|
||||
/* 0 */ ENZO_ANIM_0,
|
||||
/* 1 */ ENZO_ANIM_1,
|
||||
/* 2 */ ENZO_ANIM_2,
|
||||
/* 3 */ ENZO_ANIM_3,
|
||||
/* 4 */ ENZO_ANIM_4,
|
||||
/* 5 */ ENZO_ANIM_5,
|
||||
/* 6 */ ENZO_ANIM_6,
|
||||
/* 7 */ ENZO_ANIM_7
|
||||
} EnZoAnimation;
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &gZoraIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, -8.0f },
|
||||
{ &gZoraIdleAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gZoraSurfaceAnim, 0.0f, 1.0f, 1.0f, ANIMMODE_ONCE, 0.0f },
|
||||
|
@ -526,31 +537,31 @@ s32 EnZo_PlayerInProximity(EnZo* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
|
||||
void EnZo_SetAnimation(EnZo* this) {
|
||||
s32 animId = 8;
|
||||
s32 animId = ARRAY_COUNT(sAnimationInfo);
|
||||
|
||||
if (this->skelAnime.animation == &gZoraHandsOnHipsTappingFootAnim ||
|
||||
this->skelAnime.animation == &gZoraOpenArmsAnim) {
|
||||
if (this->unk_194.unk_00 == 0) {
|
||||
if (this->actionFunc == EnZo_Standing) {
|
||||
animId = 0;
|
||||
animId = ENZO_ANIM_0;
|
||||
} else {
|
||||
animId = 3;
|
||||
animId = ENZO_ANIM_3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (this->unk_194.unk_00 != 0 && this->actor.textId == 0x4006 &&
|
||||
this->skelAnime.animation != &gZoraHandsOnHipsTappingFootAnim) {
|
||||
animId = 6;
|
||||
animId = ENZO_ANIM_6;
|
||||
}
|
||||
|
||||
if (this->unk_194.unk_00 != 0 && this->actor.textId == 0x4007 && this->skelAnime.animation != &gZoraOpenArmsAnim) {
|
||||
animId = 7;
|
||||
animId = ENZO_ANIM_7;
|
||||
}
|
||||
|
||||
if (animId != 8) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, animId);
|
||||
if (animId == 3) {
|
||||
if (animId != ARRAY_COUNT(sAnimationInfo)) {
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, animId);
|
||||
if (animId == ENZO_ANIM_3) {
|
||||
this->skelAnime.curFrame = this->skelAnime.endFrame;
|
||||
this->skelAnime.playSpeed = 0.0f;
|
||||
}
|
||||
|
@ -571,7 +582,7 @@ void EnZo_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
return;
|
||||
}
|
||||
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 2);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENZO_ANIM_2);
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->actor.targetMode = 6;
|
||||
this->dialogRadius = this->collider.dim.radius + 30.0f;
|
||||
|
@ -584,7 +595,7 @@ void EnZo_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
if (this->actor.yDistToWater < 54.0f || (this->actor.params & 0x3F) == 8) {
|
||||
this->actor.shape.shadowDraw = ActorShadow_DrawCircle;
|
||||
this->actor.shape.shadowScale = 24.0f;
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 1);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENZO_ANIM_1);
|
||||
this->canSpeak = true;
|
||||
this->alpha = 255.0f;
|
||||
this->actionFunc = EnZo_Standing;
|
||||
|
@ -630,7 +641,7 @@ void EnZo_Surface(EnZo* this, GlobalContext* globalCtx) {
|
|||
if (this->actor.yDistToWater < 54.0f) {
|
||||
Audio_PlayActorSound2(&this->actor, NA_SE_EV_OUT_OF_WATER);
|
||||
EnZo_SpawnSplashes(this);
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 3);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENZO_ANIM_3);
|
||||
this->actor.flags |= ACTOR_FLAG_0;
|
||||
this->actionFunc = EnZo_TreadWater;
|
||||
this->actor.velocity.y = 0.0f;
|
||||
|
@ -665,7 +676,7 @@ void EnZo_TreadWater(EnZo* this, GlobalContext* globalCtx) {
|
|||
this->timeToDive = Rand_S16Offset(40, 40);
|
||||
} else if (DECR(this->timeToDive) == 0) {
|
||||
f32 startFrame;
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 4);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENZO_ANIM_4);
|
||||
this->canSpeak = false;
|
||||
this->unk_64C = 1;
|
||||
this->actionFunc = EnZo_Dive;
|
||||
|
@ -696,7 +707,7 @@ void EnZo_Dive(EnZo* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
|
||||
if ((s16)this->alpha == 0) {
|
||||
func_80034EC0(&this->skelAnime, sAnimations, 2);
|
||||
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENZO_ANIM_2);
|
||||
this->actor.world.pos = this->actor.home.pos;
|
||||
this->alpha = 0.0f;
|
||||
this->actionFunc = EnZo_Submerged;
|
||||
|
|
|
@ -27,8 +27,8 @@ typedef struct {
|
|||
|
||||
u32 EffectSsStick_Init(GlobalContext* globalCtx, u32 index, EffectSs* this, void* initParamsx) {
|
||||
StickDrawInfo drawInfo[] = {
|
||||
{ OBJECT_LINK_BOY, gLinkAdultBrokenGiantsKnifeBladeDL }, // adult, broken sword
|
||||
{ OBJECT_LINK_CHILD, gLinkChildLinkDekuStickDL }, // child, broken stick
|
||||
{ OBJECT_LINK_BOY, gLinkAdultBrokenGiantsKnifeBladeDL }, // adult, broken sword
|
||||
{ OBJECT_LINK_CHILD, gLinkChildLinkDekuStickDL }, // child, broken stick
|
||||
};
|
||||
StickDrawInfo* ageInfoEntry = gSaveContext.linkAge + drawInfo;
|
||||
EffectSsStickInitParams* initParams = (EffectSsStickInitParams*)initParamsx;
|
||||
|
|
Loading…
Reference in a new issue