diff --git a/include/functions.h b/include/functions.h index 52559cda58..c86b2b444e 100644 --- a/include/functions.h +++ b/include/functions.h @@ -2262,7 +2262,7 @@ void func_800F4C58(Vec3f*, u16, u8); void func_800F574C(f32 arg0, UNK_TYPE arg2); void func_800F595C(u16); void func_800F59E8(u16); -// ? func_800F5ACC(?); +void func_800F5ACC(u32 bgmID); void func_800F5B58(); void func_800F5C64(u16); // ? func_800F5CF8(?); 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 7444e655a2..e3f5ab534d 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -12,7 +12,6 @@ #define THIS ((EnIk*)thisx) -typedef void (*EnIkActionFunc)(struct EnIk*, GlobalContext*); typedef void (*EnIkDrawFunc)(struct EnIk*, GlobalContext*); void EnIk_Init(Actor* thisx, GlobalContext* globalCtx); @@ -22,11 +21,16 @@ void EnIk_Draw(Actor* thisx, GlobalContext* globalCtx); void func_80A74398(EnIk* this, GlobalContext* globalCtx); void func_80A74714(EnIk* this); +void func_80A7489C(EnIk* this); +void func_80A7492C(EnIk* this, GlobalContext* globalCtx); void func_80A75FA0(Actor* thisx, GlobalContext* globalCtx); void func_80A76798(Actor* thisx, GlobalContext* globalCtx); +void func_80A76BF4(); void func_80A780D0(EnIk* this, GlobalContext* globalCtx); +void func_80A78160(EnIk* this, GlobalContext* globalCtx); extern AnimationHeader D_0600C114; +extern AnimationHeader D_0600DD50; extern SkeletonHeader D_0601E178; extern ColliderCylinderInit D_80A78340; @@ -62,7 +66,10 @@ void EnIk_Destroy(Actor* thisx, GlobalContext* globalCtx) { Collider_DestroyQuad(globalCtx, &this->unk_36C); } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A74390.s") +// EnIk_SetupAction +void func_80A74390(EnIk* this, EnIkActionFunc actionFunc) { + this->actionFunc = actionFunc; +} #ifdef NON_MATCHING void func_80A74398(EnIk* this, GlobalContext* globalCtx) { @@ -130,7 +137,15 @@ void func_80A74398(EnIk* this, GlobalContext* globalCtx) { #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A747C0.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A7489C.s") +void func_80A7489C(EnIk* this) { + f32 frames = SkelAnime_GetFrameCount(&D_0600DD50.genericHeader); + + this->actor.flags |= 5; + this->unk_2F8 = 4; + this->actor.speedXZ = 0.0f; + SkelAnime_ChangeAnim(&this->skelAnime, &D_0600DD50, 0.0f, 0.0f, frames, 0, 4.0f); + func_80A74390(this, func_80A7492C); +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A7492C.s") @@ -182,7 +197,11 @@ void func_80A74398(EnIk* this, GlobalContext* globalCtx) { #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A76798.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A76BF4.s") +// starts middle boss bgm +void func_80A76BF4() { + // NA_BGM_MIDDLE_BOSS + func_800F5ACC(0x38); +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A76C14.s") @@ -266,9 +285,28 @@ void EnIk_Draw(Actor* thisx, GlobalContext* globalCtx) { } } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A780D0.s") +void func_80A780D0(EnIk* this, GlobalContext* globalCtx) { + if (this->actor.params == 0) { + if (!(gSaveContext.eventChkInf[3] & 0x800)) { + this->actor.update = EnIk_Update; + this->actor.draw = EnIk_Draw; + Actor_SetScale(&this->actor, 0.01f); + } else { + func_80A78160(this, globalCtx); + func_80A76BF4(); + } + } + osSyncPrintf("En_Ik_inConfrontion_Init : %d !!!!!!!!!!!!!!!!\n", this->actor.params); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A78160.s") +void func_80A78160(EnIk* this, GlobalContext* globalCtx) { + this->actor.update = func_80A75FA0; + this->actor.draw = func_80A76798; + this->actor.flags |= 5; + gSaveContext.eventChkInf[3] |= 0x800; + Actor_SetScale(this, 0.012f); + func_80A7489C(this); +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A781CC.s") diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.h b/src/overlays/actors/ovl_En_Ik/z_en_ik.h index b9c29fee4e..4da5d282b4 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.h +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.h @@ -6,16 +6,20 @@ struct EnIk; +typedef void (*EnIkActionFunc)(struct EnIk*, GlobalContext*); + typedef struct EnIk { /* 0x0000 */ Actor actor; /* 0x014C */ SkelAnime skelAnime; /* 0x0190 */ Vec3s limbDrawTable[30]; /* 0x0244 */ Vec3s transitionDrawTable[30]; - /* 0x02F8 */ char unk_2F8[0x04]; + /* 0x02F8 */ s8 unk_2F8; + /* 0x02F9 */ char unk_2F9[0x03]; /* 0x02FC */ s8 unk_2FC; /* 0x02FD */ char unk_2FD[0x05]; /* 0x0302 */ s16 switchFlags; - /* 0x0304 */ char unk_304[0x1C]; + /* 0x0304 */ EnIkActionFunc actionFunc; + /* 0x0308 */ char unk_308[0x18]; /* 0x0320 */ ColliderCylinder unk_320; /* 0x036C */ ColliderQuad unk_36C; /* 0x03EC */ ColliderTris unk_3EC; diff --git a/undefined_syms.txt b/undefined_syms.txt index 5d29e5446d..8d4cfbdc8c 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1109,8 +1109,9 @@ D_060009D0 = 0x060009D0; D_06000A60 = 0x06000A60; // z_en_ik -D_0601E178 = 0x0601E178; D_0600C114 = 0x0600C114; +D_0600DD50 = 0x0600DD50; +D_0601E178 = 0x0601E178; // z_en_insect D_04035590 = 0x04035590;