diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.c b/src/overlays/actors/ovl_En_Ik/z_en_ik.c index acd2bca1b7..f7c9752ce1 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -21,6 +21,7 @@ void EnIk_Draw(Actor* thisx, GlobalContext* globalCtx); Actor* func_80A74674(GlobalContext* globalCtx, Actor* actor); void func_80A74714(EnIk* this); +void func_80A747C0(EnIk* this, GlobalContext* globalCtx); void func_80A7492C(EnIk* this, GlobalContext* globalCtx); void func_80A74AAC(EnIk* this); void func_80A74E2C(EnIk* this); @@ -51,6 +52,7 @@ extern AnimationHeader D_06002538; extern AnimationHeader D_060029FC; extern AnimationHeader D_060033C4; extern AnimationHeader D_0600C114; +extern AnimationHeader D_0600CD70; extern AnimationHeader D_0600DD50; extern SkeletonHeader D_0601E178; extern AnimationHeader D_060203D8; @@ -254,9 +256,41 @@ Actor* func_80A74674(GlobalContext* globalCtx, Actor* actor) { return NULL; } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A74714.s") +void func_80A74714(EnIk* this) { + f32 frames = SkelAnime_GetFrameCount(&D_0600CD70.genericHeader); + f32 frame; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A747C0.s") + if (this->actor.params >= 2) { + frame = frames - 1.0f; + } else { + frame = 0.0f; + } + + SkelAnime_ChangeAnim(&this->skelAnime, &D_0600CD70, 0.0f, frame, frames, 2, 0.0f); + this->unk_2F8 = 3; + this->actor.speedXZ = 0.0f; + EnIk_SetupAction(this, func_80A747C0); +} + +void func_80A747C0(EnIk* this, GlobalContext* globalCtx) { + Vec3f sp24; + + if (this->unk_320.base.acFlags & 2) { + sp24 = this->actor.posRot.pos; + Audio_PlayActorSound2(&this->actor, NA_SE_EN_IRONNACK_ARMOR_HIT); + sp24.y += 30.0f; + func_8003424C(globalCtx, &sp24); + this->skelAnime.animPlaybackSpeed = 1.0f; + func_800F5ACC(0x38); + } + if (this->skelAnime.animCurrentFrame == 5.0f) { + Audio_PlayActorSound2(&this->actor, NA_SE_EN_IRONNACK_WAKEUP); + } + if (SkelAnime_FrameUpdateMatrix(&this->skelAnime)) { + this->actor.flags |= 5; + func_80A74AAC(this); + } +} void func_80A7489C(EnIk* this) { f32 frames = SkelAnime_GetFrameCount(&D_0600DD50.genericHeader); diff --git a/undefined_syms.txt b/undefined_syms.txt index c7147b3c1a..7951acbd7a 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1152,12 +1152,13 @@ D_06000A60 = 0x06000A60; // z_en_ik D_02003F80 = 0x02003F80; -D_0600C114 = 0x0600C114; -D_0600DD50 = 0x0600DD50; D_06001C28 = 0x06001C28; D_06002538 = 0x06002538; D_060029FC = 0x060029FC; D_060033C4 = 0x060033C4; +D_0600C114 = 0x0600C114; +D_0600CD70 = 0x0600CD70; +D_0600DD50 = 0x0600DD50; D_0601E178 = 0x0601E178; D_060203D8 = 0x060203D8; D_060205C0 = 0x060205C0;