1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-02-21 14:25:22 +00:00

Document animations

This commit is contained in:
feacur 2024-11-10 03:55:31 +01:00
parent ba0bb1094d
commit 40203d0143
4 changed files with 79 additions and 73 deletions

View file

@ -2,17 +2,17 @@
<!-- Goron -->
<File Name="object_oF1d_map" Segment="6">
<!-- animations -->
<Animation Name="gGoronAnim_000750" Offset="0x750"/>
<Animation Name="gGoronAnim_000D5C" Offset="0xD5C"/>
<Animation Name="gGoronAnim_00161C" Offset="0x161C"/>
<Animation Name="gGoronAnim_001A00" Offset="0x1A00"/>
<Animation Name="gGoronAnim_0021D0" Offset="0x21D0"/>
<Animation Name="gGoronAnim_0029A8" Offset="0x29A8"/>
<Animation Name="gGoronAnim_002D80" Offset="0x2D80"/>
<Animation Name="gGoronAnim_003768" Offset="0x3768"/>
<Animation Name="gGoronAnim_0038E4" Offset="0x38E4"/>
<Animation Name="gGoronAnim_004930" Offset="0x4930"/>
<Animation Name="gGoronAnim_010590" Offset="0x10590"/>
<Animation Name="gGoronSobbingLoopAnim" Offset="0x750"/>
<Animation Name="gGoronShakingLoopAnim" Offset="0xD5C"/>
<Animation Name="gGoronUncurlToProneAnim" Offset="0x161C"/>
<Animation Name="gGoronProneLoopAnim" Offset="0x1A00"/>
<Animation Name="gGoronScratchingLoopAnim" Offset="0x21D0"/>
<Animation Name="gGoronWalkingLoopAnim" Offset="0x29A8"/>
<Animation Name="gGoronEyedropsTakenAnim" Offset="0x2D80"/>
<Animation Name="gGoronCryingLoopAnim" Offset="0x3768"/>
<Animation Name="gGoronEyeropsLoopAnim" Offset="0x38E4"/>
<Animation Name="gGoronUncurlSitStandAnim" Offset="0x4930"/>
<Animation Name="gGoronSidestepLoopAnim" Offset="0x10590"/>
<!-- skeleton, limb none -->
<Skeleton Name="gGoronSkel" Type="Flex" LimbType="Standard" Offset="0xFEF0"/>

View file

@ -254,7 +254,7 @@ void func_8097CEEC(DemoGo* this, PlayState* play) {
}
void func_8097CF20(DemoGo* this, PlayState* play, s32 arg2) {
AnimationHeader* animation = &gGoronAnim_0029A8;
AnimationHeader* animation = &gGoronWalkingLoopAnim;
if (arg2 != 0) {
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_LOOP,
-8.0f);
@ -328,7 +328,7 @@ void DemoGo_Update(Actor* thisx, PlayState* play) {
void DemoGo_Init(Actor* thisx, PlayState* play) {
DemoGo* this = (DemoGo*)thisx;
AnimationHeader* animation = &gGoronAnim_004930;
AnimationHeader* animation = &gGoronUncurlSitStandAnim;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &gGoronSkel, NULL, NULL, NULL, 0);

View file

@ -69,17 +69,17 @@ static ColliderCylinderInit sCylinderInit = {
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
typedef enum EnGoAnimation {
/* 0 */ ENGO_ANIM_0,
/* 1 */ ENGO_ANIM_1,
/* 2 */ ENGO_ANIM_2,
/* 3 */ ENGO_ANIM_3
/* 0 */ ENGO_ANIM_UNCURL_SIT_STAND_IDLE, // default idle
/* 1 */ ENGO_ANIM_UNCURL_SIT_STAND,
/* 2 */ ENGO_ANIM_WALKING_LOOP,
/* 3 */ ENGO_ANIM_SIDESTEP_LOOP
} EnGoAnimation;
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 },
{ &gGoronAnim_010590, 1.0f, ANIMMODE_LOOP_INTERP, -10.0f },
{ &gGoronUncurlSitStandAnim, 0.0f, ANIMMODE_LOOP_INTERP, 0.0f },
{ &gGoronUncurlSitStandAnim, 0.0f, ANIMMODE_LOOP_INTERP, -10.0f },
{ &gGoronWalkingLoopAnim, 1.0f, ANIMMODE_LOOP_INTERP, -10.0f },
{ &gGoronSidestepLoopAnim, 1.0f, ANIMMODE_LOOP_INTERP, -10.0f },
};
void EnGo_SetupAction(EnGo* this, EnGoActionFunc actionFunc) {
@ -455,8 +455,8 @@ void EnGo_ReverseAnimation(EnGo* this) {
void EnGo_UpdateShadow(EnGo* this) {
s16 shadowAlpha;
f32 currentFrame = this->skelAnime.curFrame;
s16 shadowAlphaTarget = (this->skelAnime.animation == &gGoronAnim_004930 && currentFrame > 32.0f) ||
this->skelAnime.animation != &gGoronAnim_004930
s16 shadowAlphaTarget = (this->skelAnime.animation == &gGoronUncurlSitStandAnim && currentFrame > 32.0f) ||
this->skelAnime.animation != &gGoronUncurlSitStandAnim
? 255
: 0;
@ -643,7 +643,7 @@ void EnGo_Init(Actor* thisx, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_5;
}
EnGo_ChangeAnim(this, ENGO_ANIM_0);
EnGo_ChangeAnim(this, ENGO_ANIM_UNCURL_SIT_STAND_IDLE);
this->actor.attentionRangeType = ATTENTION_RANGE_6;
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
this->actor.gravity = -1.0f;
@ -661,7 +661,7 @@ void EnGo_Init(Actor* thisx, PlayState* play) {
}
break;
case 0x10:
this->skelAnime.curFrame = Animation_GetLastFrame(&gGoronAnim_004930);
this->skelAnime.curFrame = Animation_GetLastFrame(&gGoronUncurlSitStandAnim);
Actor_SetScale(&this->actor, 0.01f);
EnGo_SetupAction(this, EnGo_FireGenericActionFunc);
break;
@ -840,7 +840,7 @@ void func_80A405CC(EnGo* this, PlayState* play) {
f32 lastFrame;
f32 frame;
lastFrame = Animation_GetLastFrame(&gGoronAnim_004930);
lastFrame = Animation_GetLastFrame(&gGoronUncurlSitStandAnim);
Math_SmoothStepToF(&this->skelAnime.playSpeed, PARAMS_GET_NOSHIFT(this->actor.params, 4, 4) == 0x90 ? 0.5f : 1.0f,
0.1f, 1000.0f, 0.1f);
@ -866,7 +866,7 @@ void EnGo_BiggoronActionFunc(EnGo* this, PlayState* play) {
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
} else {
if (INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_EYE_DROPS) {
EnGo_ChangeAnim(this, ENGO_ANIM_2);
EnGo_ChangeAnim(this, ENGO_ANIM_WALKING_LOOP);
this->unk_21E = 100;
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
EnGo_SetupAction(this, EnGo_Eyedrops);
@ -928,13 +928,13 @@ void func_80A408D8(EnGo* this, PlayState* play) {
}
void func_80A40A54(EnGo* this, PlayState* play) {
f32 float1 = ((f32)0x8000 / Animation_GetLastFrame(&gGoronAnim_010590));
f32 float1 = ((f32)0x8000 / Animation_GetLastFrame(&gGoronSidestepLoopAnim));
f32 float2 = this->skelAnime.curFrame * float1;
this->actor.speed = Math_SinS((s16)float2);
if (EnGo_FollowPath(this, play) && this->unk_218 == 0) {
EnGo_ChangeAnim(this, ENGO_ANIM_1);
this->skelAnime.curFrame = Animation_GetLastFrame(&gGoronAnim_004930);
EnGo_ChangeAnim(this, ENGO_ANIM_UNCURL_SIT_STAND);
this->skelAnime.curFrame = Animation_GetLastFrame(&gGoronUncurlSitStandAnim);
this->actor.speed = 0.0f;
EnGo_SetupAction(this, EnGo_BiggoronActionFunc);
}
@ -942,7 +942,7 @@ void func_80A40A54(EnGo* this, PlayState* play) {
void func_80A40B1C(EnGo* this, PlayState* play) {
if (GET_INFTABLE(INFTABLE_EB)) {
EnGo_ChangeAnim(this, ENGO_ANIM_3);
EnGo_ChangeAnim(this, ENGO_ANIM_SIDESTEP_LOOP);
EnGo_SetupAction(this, func_80A40A54);
} else {
EnGo_BiggoronActionFunc(this, play);
@ -1015,8 +1015,8 @@ void EnGo_Eyedrops(EnGo* this, PlayState* play) {
void func_80A40DCC(EnGo* this, PlayState* play) {
if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) {
EnGo_ChangeAnim(this, ENGO_ANIM_1);
this->skelAnime.curFrame = Animation_GetLastFrame(&gGoronAnim_004930);
EnGo_ChangeAnim(this, ENGO_ANIM_UNCURL_SIT_STAND);
this->skelAnime.curFrame = Animation_GetLastFrame(&gGoronUncurlSitStandAnim);
Message_CloseTextbox(play);
EnGo_SetupAction(this, EnGo_GetItem);
EnGo_GetItem(this, play);

View file

@ -118,29 +118,35 @@ static f32 sPlayerTrackingYOffsets[14][2] = {
};
typedef enum EnGo2Animation {
/* 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
/* 0 */ ENGO2_ANIM_UNCURL_SIT_STAND_IDLE, // default idle
/* 1 */ ENGO2_ANIM_UNCURL_SIT_STAND,
/* 2 */ ENGO2_ANIM_WALKING_LOOP,
/* 3 */ ENGO2_ANIM_SIDESTEP_LOOP,
/* 4 */ ENGO2_ANIM_CRYING_LOOP,
/* 5 */ ENGO2_ANIM_EYEDROPS_LOOP,
/* 6 */ ENGO2_ANIM_EYEDROPS_TAKEN,
/* 7 */ ENGO2_ANIM_UNCURL_PRONE_UNUSED,
/* 8 */ ENGO2_ANIM_PRONE_LOOP_UNUSED,
/* 9 */ ENGO2_ANIM_SCRATCHING_LOOP,
/* 10 */ ENGO2_ANIM_UNCURL_SIT_STAND_BIG,
/* 11 */ ENGO2_ANIM_SOBBING_LOOP,
/* 12 */ ENGO2_ANIM_SHAKING_LOOP
} 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 },
{ &gGoronAnim_002D80, 1.0f, 0.0f, -1.0f, 0x02, -8.0f }, { &gGoronAnim_00161C, 1.0f, 0.0f, -1.0f, 0x00, -8.0f },
{ &gGoronAnim_001A00, 1.0f, 0.0f, -1.0f, 0x00, -8.0f }, { &gGoronAnim_0021D0, 1.0f, 0.0f, -1.0f, 0x00, -8.0f },
{ &gGoronAnim_004930, 0.0f, 0.0f, -1.0f, 0x01, -8.0f }, { &gGoronAnim_000750, 1.0f, 0.0f, -1.0f, 0x00, -8.0f },
{ &gGoronAnim_000D5C, 1.0f, 0.0f, -1.0f, 0x00, -8.0f },
{ &gGoronUncurlSitStandAnim, 0.0f, 0.0f, -1.0f, 0x00, 0.0f },
{ &gGoronUncurlSitStandAnim, 0.0f, 0.0f, -1.0f, 0x00, -8.0f },
{ &gGoronWalkingLoopAnim, 1.0f, 0.0f, -1.0f, 0x00, -8.0f },
{ &gGoronSidestepLoopAnim, 1.0f, 0.0f, -1.0f, 0x00, -8.0f },
{ &gGoronCryingLoopAnim, 1.0f, 0.0f, -1.0f, 0x00, -8.0f },
{ &gGoronEyeropsLoopAnim, 1.0f, 0.0f, -1.0f, 0x02, -8.0f },
{ &gGoronEyedropsTakenAnim, 1.0f, 0.0f, -1.0f, 0x02, -8.0f },
{ &gGoronUncurlToProneAnim, 1.0f, 0.0f, -1.0f, 0x00, -8.0f },
{ &gGoronProneLoopAnim, 1.0f, 0.0f, -1.0f, 0x00, -8.0f },
{ &gGoronScratchingLoopAnim, 1.0f, 0.0f, -1.0f, 0x00, -8.0f },
{ &gGoronUncurlSitStandAnim, 0.0f, 0.0f, -1.0f, 0x01, -8.0f },
{ &gGoronSobbingLoopAnim, 1.0f, 0.0f, -1.0f, 0x00, -8.0f },
{ &gGoronShakingLoopAnim, 1.0f, 0.0f, -1.0f, 0x00, -8.0f },
};
static EnGo2DustEffectData sDustEffectData[2][4] = {
@ -1099,7 +1105,7 @@ void func_80A45288(EnGo2* this, PlayState* play) {
void func_80A45360(EnGo2* this, f32* alpha) {
f32 alphaTarget =
(this->skelAnime.animation == &gGoronAnim_004930) && (this->skelAnime.curFrame <= 32.0f) ? 0.0f : 255.0f;
(this->skelAnime.animation == &gGoronUncurlSitStandAnim) && (this->skelAnime.curFrame <= 32.0f) ? 0.0f : 255.0f;
Math_ApproachF(alpha, alphaTarget, 0.4f, 100.0f);
this->actor.shape.shadowAlpha = (u8)(u32)*alpha;
@ -1126,12 +1132,12 @@ void func_80A454CC(EnGo2* this) {
case GORON_CITY_ENTRANCE:
case GORON_CITY_STAIRWELL:
case GORON_DMT_FAIRY_HINT:
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_9);
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_SCRATCHING_LOOP);
break;
case GORON_DMT_BIGGORON:
if (INV_CONTENT(ITEM_TRADE_ADULT) >= ITEM_BROKEN_GORONS_SWORD &&
INV_CONTENT(ITEM_TRADE_ADULT) <= ITEM_EYE_DROPS) {
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_4);
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_CRYING_LOOP);
break;
}
FALLTHROUGH;
@ -1270,7 +1276,7 @@ void EnGo2_EyeMouthTexState(EnGo2* this) {
}
void EnGo2_SitDownAnimation(EnGo2* this) {
if ((this->skelAnime.playSpeed != 0.0f) && (this->skelAnime.animation == &gGoronAnim_004930)) {
if ((this->skelAnime.playSpeed != 0.0f) && (this->skelAnime.animation == &gGoronUncurlSitStandAnim)) {
if (this->skelAnime.playSpeed > 0.0f && this->skelAnime.curFrame == 14.0f) {
if (PARAMS_GET_S(this->actor.params, 0, 5) != GORON_DMT_BIGGORON) {
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SIT_DOWN);
@ -1300,10 +1306,10 @@ void EnGo2_GetDustData(EnGo2* this, s32 index2) {
void EnGo2_RollingAnimation(EnGo2* this, PlayState* play) {
if (PARAMS_GET_S(this->actor.params, 0, 5) == GORON_DMT_BIGGORON) {
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_10);
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_UNCURL_SIT_STAND_BIG);
this->skelAnime.playSpeed = -0.5f;
} else {
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_1);
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_UNCURL_SIT_STAND);
this->skelAnime.playSpeed = -1.0f;
}
EnGo2_SwapInitialFrameAnimFrameCount(this);
@ -1323,17 +1329,17 @@ void EnGo2_WakeUp(EnGo2* this, PlayState* play) {
}
if (PARAMS_GET_S(this->actor.params, 0, 5) == GORON_DMT_BIGGORON) {
OnePointCutscene_Init(play, 4200, -99, &this->actor, CAM_ID_MAIN);
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_10);
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_UNCURL_SIT_STAND_BIG);
this->skelAnime.playSpeed = 0.5f;
} else {
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_1);
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_UNCURL_SIT_STAND);
this->skelAnime.playSpeed = 1.0f;
}
this->actionFunc = func_80A46B40;
}
void EnGo2_GetItemAnimation(EnGo2* this, PlayState* play) {
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_1);
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_UNCURL_SIT_STAND);
this->unk_211 = true;
this->actionFunc = func_80A46B40;
this->skelAnime.playSpeed = 0.0f;
@ -1399,7 +1405,7 @@ s32 EnGo2_IsGoronDmtBombFlower(EnGo2* this) {
return false;
}
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_3);
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_SIDESTEP_LOOP);
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
this->isAwake = false;
this->trackingMode = NPC_TRACKING_NONE;
@ -1454,21 +1460,21 @@ void EnGo2_GoronLinkAnimation(EnGo2* this, PlayState* play) {
if (PARAMS_GET_S(this->actor.params, 0, 5) == 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 = ENGO2_ANIM_12;
if (this->skelAnime.animation != &gGoronShakingLoopAnim) {
animation = ENGO2_ANIM_SHAKING_LOOP;
this->eyeMouthTexState = 0;
}
}
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 = ENGO2_ANIM_11;
if (this->skelAnime.animation != &gGoronSobbingLoopAnim) {
animation = ENGO2_ANIM_SOBBING_LOOP;
this->eyeMouthTexState = 1;
}
}
if (this->skelAnime.animation == &gGoronAnim_000750) {
if (this->skelAnime.animation == &gGoronSobbingLoopAnim) {
if (this->skelAnime.curFrame == 20.0f) {
Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CRY);
}
@ -1542,7 +1548,7 @@ void EnGo2_Init(Actor* thisx, PlayState* play) {
EnGo2_SetColliderDim(this);
EnGo2_SetShape(this);
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_0);
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_UNCURL_SIT_STAND_IDLE);
this->actor.gravity = -1.0f;
this->alpha = this->actor.shape.shadowAlpha = 0;
this->reverse = 0;
@ -1832,7 +1838,7 @@ void EnGo2_SetGetItem(EnGo2* this, PlayState* play) {
void EnGo2_BiggoronEyedrops(EnGo2* this, PlayState* play) {
switch (this->goronState) {
case 0:
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_5);
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_EYEDROPS_LOOP);
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
this->actor.shape.rot.y += 0x5B0;
this->trackingMode = NPC_TRACKING_NONE;
@ -1851,7 +1857,7 @@ void EnGo2_BiggoronEyedrops(EnGo2* this, PlayState* play) {
}
} else {
func_800F4524(&gSfxDefaultPos, NA_SE_EN_GOLON_GOOD_BIG, 60);
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_6);
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_EYEDROPS_TAKEN);
Message_ContinueTextbox(play, 0x305A);
this->eyeMouthTexState = 3;
this->goronState++;
@ -1863,7 +1869,7 @@ void EnGo2_BiggoronEyedrops(EnGo2* this, PlayState* play) {
this->eyeMouthTexState = 0;
}
if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_1);
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_UNCURL_SIT_STAND);
this->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED;
this->trackingMode = NPC_TRACKING_HEAD_AND_TORSO;
this->skelAnime.playSpeed = 0.0f;
@ -1914,7 +1920,7 @@ void EnGo2_GoronFireGenericAction(EnGo2* this, PlayState* play) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
EnGo2_GoronFireCamera(this, play);
play->msgCtx.msgMode = MSGMODE_PAUSED;
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_2);
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ENGO2_ANIM_WALKING_LOOP);
this->waypoint = 1;
this->skelAnime.playSpeed = 2.0f;
func_80A44D84(this);