From 6cb2d0d4363f8602116a95b68d5895159204444e Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 16:52:41 +0000 Subject: [PATCH 01/28] first few funcs --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 72 +++++++++++++++++-- src/overlays/actors/ovl_En_Okuta/z_en_okuta.h | 16 ++++- 2 files changed, 80 insertions(+), 8 deletions(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 8c8e3ce41..e2b5fbcc7 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -121,25 +121,87 @@ extern UNK_TYPE D_0600466C; #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E084.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E0F0.s") +void func_8086E0F0(EnOkuta* this, PlayState* arg1) { + if (this->unk18C == 10) { + this->unk18C = 0; + this->unk254 = 0.0f; + Actor_SpawnIceEffects(arg1, &this->actor, this->bodyPartsPos, 0xA, 2, 0.3f, 0.2f); + this->collider.base.colType = 0; + } +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E168.s") + +#if 0 +static Color_RGBA8 D_80870928 = {255, 255, 255, 255}; +static Color_RGBA8 D_8087092C = {255, 150, 150, 150}; + +void func_8086E214(Vec3f* pos, Vec3f* velocity, s16 scaleStep, PlayState* play) { + func_800B0DE0(play, pos, velocity, &gZeroVec3f, &D_80870928, &D_8087092C, 400, scaleStep); +} +#else #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E214.s") +#endif #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E27C.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E2C0.s") +void func_8086E2C0(EnOkuta* this, PlayState* play) { + f32 temp_fv0; + Vec3f sp28; + + temp_fv0 = this->actor.world.pos.y - this->actor.home.pos.y; + if ((((u32) play->gameplayFrames % 7) == 0) && (temp_fv0 < 50.0f) && (temp_fv0 >= -20.0f)) { + sp28.x = this->actor.world.pos.x; + sp28.y = this->actor.home.pos.y; + sp28.z = this->actor.world.pos.z; + EffectSsGRipple_Spawn(play, &sp28, 250, 650, 0); + } +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E378.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E3B8.s") +void func_8086E3B8(EnOkuta* this, PlayState* play) { + Vec3f pos; + Vec3f velocity; + f32 sp3C; + f32 sp38; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E4FC.s") + sp3C = Math_SinS(this->actor.shape.rot.y); + sp38 = Math_CosS(this->actor.shape.rot.y); + pos.x = this->actor.world.pos.x + (25.0f * sp3C); + pos.y = this->actor.world.pos.y - 6.0f; + pos.z = this->actor.world.pos.z + (25.0f * sp38); + if (Actor_Spawn(&play->actorCtx, play, 8, pos.x, pos.y, pos.z, this->actor.shape.rot.x, + this->actor.shape.rot.y, this->actor.shape.rot.z, this->actor.params + 0x10) != NULL) { + pos.x = this->actor.world.pos.x + (40.0f * sp3C); + pos.z = this->actor.world.pos.z + (40.0f * sp38); + pos.y = this->actor.world.pos.y; + velocity.x = 1.5f * sp3C; + velocity.y = 0.0f; + velocity.z = 1.5f * sp38; + func_8086E214(&pos, &velocity, 0x14, play); + } + Actor_PlaySfx(&this->actor, 0x387E); +} + +void func_8086E4FC(EnOkuta* this) { + this->actor.draw = NULL; + this->actor.flags &= ~1; + this->actionFunc = func_8086E52C; + this->actor.world.pos.y = this->actor.home.pos.y; +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E52C.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E5E8.s") +void func_8086E5E8(EnOkuta* this, s32 arg1) { + this->actor.draw = EnOkuta_Draw; + this->actor.shape.rot.y = this->actor.yawTowardsPlayer; + this->actor.flags |= 1; + Animation_PlayOnce(&this->skelAnime, &D_0600466C); + func_8086E168(this, arg1); + this->actionFunc = func_8086E658; +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E658.s") diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h index 93a68ae38..1cd08e89e 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h @@ -9,9 +9,19 @@ typedef void (*EnOkutaActionFunc)(struct EnOkuta*, PlayState*); typedef struct EnOkuta { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x44]; + /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ EnOkutaActionFunc actionFunc; - /* 0x18C */ char unk_18C[0x1A8]; -} EnOkuta; // size = 0x334 + /* 0x18C */ u8 unk18C; + /* 0x18D */ char pad18D; + /* 0x18E */ s16 unk18E; + /* 0x190 */ s16 unk190; + /* 0x192 */ Vec3s jointTable[16]; + /* 0x1F2 */ Vec3s morphTable[16]; + /* 0x252 */ char pad252[2]; + /* 0x254 */ f32 unk254; + /* 0x258 */ char pad258[0x18]; + /* 0x270 */ Vec3f bodyPartsPos[0xA]; + /* 0x2E8 */ ColliderCylinder collider; +} EnOkuta; #endif // Z_EN_OKUTA_H From b7f4919085c0fa6b94fbcff5e81eb29d79219107 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 17:04:51 +0000 Subject: [PATCH 02/28] func_8086E084 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 10 +++++++++- src/overlays/actors/ovl_En_Okuta/z_en_okuta.h | 6 ++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index e2b5fbcc7..4f50d353e 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -119,7 +119,15 @@ extern UNK_TYPE D_0600466C; #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/EnOkuta_Destroy.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E084.s") +void func_8086E084(EnOkuta* this) { + this->unk18C = 0xA; + this->unk258 = 0.6f; + this->unk25C = 0.90000004f; + this->unk18E = 0x50; + this->collider.base.colType = 3; + this->unk254 = 1.0f; + Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80); +} void func_8086E0F0(EnOkuta* this, PlayState* arg1) { if (this->unk18C == 10) { diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h index 1cd08e89e..014df2db2 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h @@ -19,9 +19,11 @@ typedef struct EnOkuta { /* 0x1F2 */ Vec3s morphTable[16]; /* 0x252 */ char pad252[2]; /* 0x254 */ f32 unk254; - /* 0x258 */ char pad258[0x18]; + /* 0x258 */ f32 unk258; + /* 0x25C */ f32 unk25C; + /* 0x260 */ char pad260[0x10]; /* 0x270 */ Vec3f bodyPartsPos[0xA]; /* 0x2E8 */ ColliderCylinder collider; -} EnOkuta; +} EnOkuta; #endif // Z_EN_OKUTA_H From 121888a41e9659886150a48b6bc67fd01b9c8af0 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 17:08:42 +0000 Subject: [PATCH 03/28] func_8086E168 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 4f50d353e..3e26cefba 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -138,7 +138,13 @@ void func_8086E0F0(EnOkuta* this, PlayState* arg1) { } } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E168.s") +void func_8086E168(EnOkuta* this, PlayState* play) { + s32 i; + + for (i = 0; i < 10; i++) { + EffectSsBubble_Spawn(play, &this->actor.world.pos, -10.0f, 10.0f, 30.0f, 0.25f); + } +} #if 0 From b1353328eeabea344af0c2269a5ce0054e9fcd85 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 17:15:10 +0000 Subject: [PATCH 04/28] func_8086E27C --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 3e26cefba..511d65ebc 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -158,7 +158,9 @@ void func_8086E214(Vec3f* pos, Vec3f* velocity, s16 scaleStep, PlayState* play) #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E214.s") #endif -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E27C.s") +void func_8086E27C(EnOkuta* this, PlayState* play) { + EffectSsGSplash_Spawn(play, &this->actor.home.pos, NULL, NULL, 0, 1300); +} void func_8086E2C0(EnOkuta* this, PlayState* play) { f32 temp_fv0; From dc846a914e3db2c0b10a28023e1b690c7ae12c02 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 17:19:41 +0000 Subject: [PATCH 05/28] func_8086E378 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 511d65ebc..d3e692187 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -175,7 +175,17 @@ void func_8086E2C0(EnOkuta* this, PlayState* play) { } } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E378.s") +f32 func_8086E378(EnOkuta* this) { + f32 temp_fa0; + f32 temp_fv1; + + temp_fv1 = this->actor.world.pos.y + this->actor.playerHeightRel + 60.0f; + temp_fa0 = this->actor.home.pos.y; + if (temp_fa0 < temp_fv1) { + return temp_fa0; + } + return temp_fv1; +} void func_8086E3B8(EnOkuta* this, PlayState* play) { Vec3f pos; From 68aab45d4480797ef61df62d6a48178970d5adfe Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 17:20:27 +0000 Subject: [PATCH 06/28] remove cast --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index d3e692187..1262ebef8 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -167,7 +167,7 @@ void func_8086E2C0(EnOkuta* this, PlayState* play) { Vec3f sp28; temp_fv0 = this->actor.world.pos.y - this->actor.home.pos.y; - if ((((u32) play->gameplayFrames % 7) == 0) && (temp_fv0 < 50.0f) && (temp_fv0 >= -20.0f)) { + if (((play->gameplayFrames % 7) == 0) && (temp_fv0 < 50.0f) && (temp_fv0 >= -20.0f)) { sp28.x = this->actor.world.pos.x; sp28.y = this->actor.home.pos.y; sp28.z = this->actor.world.pos.z; From 2782c4a913b055e4e357ddb691a4fda68a3bcde9 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 18:31:28 +0000 Subject: [PATCH 07/28] init and func_8086E52C --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 98 ++++++++++++++++--- 1 file changed, 85 insertions(+), 13 deletions(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 1262ebef8..579361db8 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -6,6 +6,8 @@ #include "z_en_okuta.h" +#include "objects/object_okuta/object_okuta.h" + #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY) #define THIS ((EnOkuta*)thisx) @@ -16,6 +18,7 @@ void EnOkuta_Update(Actor* thisx, PlayState* play); void EnOkuta_Draw(Actor* thisx, PlayState* play); void func_8086E52C(EnOkuta* this, PlayState* play); +void func_8086E5E8(EnOkuta* this, PlayState* play); void func_8086E658(EnOkuta* this, PlayState* play); void func_8086E7E8(EnOkuta* this, PlayState* play); void func_8086E948(EnOkuta* this, PlayState* play); @@ -27,6 +30,7 @@ void func_8086F4B0(EnOkuta* this, PlayState* play); void func_8086F57C(EnOkuta* this, PlayState* play); void func_8086F694(EnOkuta* this, PlayState* play); + #if 0 ActorInit En_Okuta_InitVars = { /**/ ACTOR_EN_OKUTA, @@ -113,9 +117,63 @@ extern UNK_TYPE D_06003958; extern UNK_TYPE D_06003B24; extern UNK_TYPE D_06003EE4; extern UNK_TYPE D_06004204; -extern UNK_TYPE D_0600466C; +extern AnimationHeader D_0600466C; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/EnOkuta_Init.s") +void func_8086E4FC(EnOkuta*); /* extern */ +void func_808700C0(Actor* this, PlayState* play); /* extern */ + +extern SkeletonHeader D_060033D0; + +void EnOkuta_Init(Actor* thisx, PlayState* play2) { + EnOkuta* this = (EnOkuta*)thisx; + PlayState* play = play2; + WaterBox* sp3C; + f32 sp38; + s32 sp34; + + Actor_ProcessInitChain(&this->actor, D_80870920); + this->unk190 = (this->actor.params >> 8) & 0xFF; + thisx->params &= 0xFF; + if ((this->actor.params == 0) || (this->actor.params == 1)) { + SkelAnime_Init(play, &this->skelAnime, &D_060033D0, &D_0600466C, this->jointTable, this->morphTable, 16); + Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &D_808708CC); + CollisionCheck_SetInfo(&this->actor.colChkInfo, &D_80870900, &D_808708F8); + if ((this->unk190 == 0xFF) || (this->unk190 == 0)) { + this->unk190 = 1; + } + this->actor.floorHeight = BgCheck_EntityRaycastFloor5(&play->colCtx, &this->actor.floorPoly, &sp34, + &this->actor, &this->actor.world.pos); + if ((!WaterBox_GetSurface1_2(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &sp38, + &sp3C)) || + (sp38 <= this->actor.floorHeight)) { + Actor_Kill(&this->actor); + } else { + this->actor.home.pos.y = sp38; + } + if (this->actor.params == 1) { + this->collider.base.colType = 0xC; + this->collider.base.acFlags |= 4; + } + this->actor.targetMode = 5; + func_8086E4FC(this); + } else { + ActorShape_Init(&this->actor.shape, 1100.0f, ActorShadow_DrawCircle, 18.0f); + this->actor.flags &= ~1; + this->actor.flags |= 0x10; + Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &D_808708A0); + func_800BC154(play, &play->actorCtx, &this->actor, 6); + this->unk18E = 0x16; + this->actor.shape.rot.y = 0; + this->actor.world.rot.x = -this->actor.shape.rot.x; + this->actor.shape.rot.x = 0; + this->actionFunc = func_8086F694; + this->actor.update = func_808700C0; + this->actor.speed = 10.0f; + } +} +/* Warning: struct EnTorch2 is not defined (only forward-declared) */ + +// #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/EnOkuta_Init.s") #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/EnOkuta_Destroy.s") @@ -146,17 +204,15 @@ void func_8086E168(EnOkuta* this, PlayState* play) { } } +// static Color_RGBA8 D_80870928 = {255, 255, 255, 255}; +// static Color_RGBA8 D_8087092C = {150, 150, 150, 255}; -#if 0 -static Color_RGBA8 D_80870928 = {255, 255, 255, 255}; -static Color_RGBA8 D_8087092C = {255, 150, 150, 150}; +extern Color_RGBA8 D_80870928; +extern Color_RGBA8 D_8087092C; void func_8086E214(Vec3f* pos, Vec3f* velocity, s16 scaleStep, PlayState* play) { func_800B0DE0(play, pos, velocity, &gZeroVec3f, &D_80870928, &D_8087092C, 400, scaleStep); } -#else -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E214.s") -#endif void func_8086E27C(EnOkuta* this, PlayState* play) { EffectSsGSplash_Spawn(play, &this->actor.home.pos, NULL, NULL, 0, 1300); @@ -198,8 +254,8 @@ void func_8086E3B8(EnOkuta* this, PlayState* play) { pos.x = this->actor.world.pos.x + (25.0f * sp3C); pos.y = this->actor.world.pos.y - 6.0f; pos.z = this->actor.world.pos.z + (25.0f * sp38); - if (Actor_Spawn(&play->actorCtx, play, 8, pos.x, pos.y, pos.z, this->actor.shape.rot.x, - this->actor.shape.rot.y, this->actor.shape.rot.z, this->actor.params + 0x10) != NULL) { + if (Actor_Spawn(&play->actorCtx, play, 8, pos.x, pos.y, pos.z, this->actor.shape.rot.x, this->actor.shape.rot.y, + this->actor.shape.rot.z, this->actor.params + 0x10) != NULL) { pos.x = this->actor.world.pos.x + (40.0f * sp3C); pos.z = this->actor.world.pos.z + (40.0f * sp38); pos.y = this->actor.world.pos.y; @@ -218,14 +274,30 @@ void func_8086E4FC(EnOkuta* this) { this->actor.world.pos.y = this->actor.home.pos.y; } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E52C.s") +void func_8086E52C(EnOkuta* this, PlayState* play) { + s32 angle; -void func_8086E5E8(EnOkuta* this, s32 arg1) { + this->actor.world.pos.y = this->actor.home.pos.y; + + if ((this->actor.xzDistToPlayer < 480.0f) && (this->actor.xzDistToPlayer > 200.0f)) { + if (this->actor.params == 0) { + func_8086E5E8(this, play); + return; + } + angle = ABS_ALT((s16) (this->actor.yawTowardsPlayer - this->actor.world.rot.y)); + + if ((angle < 0x4000) && (play->bButtonAmmoPlusOne == 0)) { + func_8086E5E8(this, play); + } + } +} + +void func_8086E5E8(EnOkuta* this, PlayState* play) { this->actor.draw = EnOkuta_Draw; this->actor.shape.rot.y = this->actor.yawTowardsPlayer; this->actor.flags |= 1; Animation_PlayOnce(&this->skelAnime, &D_0600466C); - func_8086E168(this, arg1); + func_8086E168(this, play); this->actionFunc = func_8086E658; } From 4d52acfbdb0b0fb064555c40a64b20adf3e7a0a9 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 18:37:15 +0000 Subject: [PATCH 08/28] destroy and func_8086E658 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 38 ++++++++++++++++--- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 579361db8..c81dfc8e4 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -125,7 +125,7 @@ void func_808700C0(Actor* this, PlayState* play); /* extern */ extern SkeletonHeader D_060033D0; void EnOkuta_Init(Actor* thisx, PlayState* play2) { - EnOkuta* this = (EnOkuta*)thisx; + EnOkuta* this = THIS; PlayState* play = play2; WaterBox* sp3C; f32 sp38; @@ -171,11 +171,11 @@ void EnOkuta_Init(Actor* thisx, PlayState* play2) { this->actor.speed = 10.0f; } } -/* Warning: struct EnTorch2 is not defined (only forward-declared) */ -// #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/EnOkuta_Init.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/EnOkuta_Destroy.s") +void EnOkuta_Destroy(Actor* thisx, PlayState* play) { + EnOkuta* this = THIS; + Collider_DestroyCylinder(play, &this->collider); +} void func_8086E084(EnOkuta* this) { this->unk18C = 0xA; @@ -301,7 +301,33 @@ void func_8086E5E8(EnOkuta* this, PlayState* play) { this->actionFunc = func_8086E658; } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E658.s") +void func_8086E658(EnOkuta* this, PlayState* play) { + f32 temp_fv0; + + if (SkelAnime_Update(&this->skelAnime) != 0) { + if ((this->actor.xzDistToPlayer < 160.0f) && (this->actor.params == 0)) { + func_8086E7A8(this); + } else { + func_8086E8E8(this); + } + } else { + temp_fv0 = this->skelAnime.curFrame; + if (temp_fv0 <= 4.0f) { + Actor_SetScale(&this->actor, temp_fv0 * 0.25f * 0.01f); + } else if (Animation_OnFrame(&this->skelAnime, 5.0f) != 0) { + Actor_SetScale(&this->actor, 0.01f); + } + } + if (Animation_OnFrame(&this->skelAnime, 2.0f) != 0) { + Actor_PlaySfx(&this->actor, 0x38C2U); + } + if (Animation_OnFrame(&this->skelAnime, 12.0f) != 0) { + Actor_PlaySfx(&this->actor, 0x38C3U); + } + if ((Animation_OnFrame(&this->skelAnime, 3.0f) != 0) || (Animation_OnFrame(&this->skelAnime, 15.0f) != 0)) { + func_8086E27C(this, play); + } +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E7A8.s") From e5181afb395879ea8d6e3a55da81d428751fe2bb Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 18:44:30 +0000 Subject: [PATCH 09/28] func_8086E7A8 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index c81dfc8e4..d8901c1f5 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -20,7 +20,9 @@ void EnOkuta_Draw(Actor* thisx, PlayState* play); void func_8086E52C(EnOkuta* this, PlayState* play); void func_8086E5E8(EnOkuta* this, PlayState* play); void func_8086E658(EnOkuta* this, PlayState* play); +void func_8086E7A8(EnOkuta* this); void func_8086E7E8(EnOkuta* this, PlayState* play); +void func_8086E8E8(EnOkuta* this); void func_8086E948(EnOkuta* this, PlayState* play); void func_8086EC00(EnOkuta* this, PlayState* play); void func_8086EF14(EnOkuta* this, PlayState* play); @@ -319,17 +321,20 @@ void func_8086E658(EnOkuta* this, PlayState* play) { } } if (Animation_OnFrame(&this->skelAnime, 2.0f) != 0) { - Actor_PlaySfx(&this->actor, 0x38C2U); + Actor_PlaySfx(&this->actor, 0x38C2); } if (Animation_OnFrame(&this->skelAnime, 12.0f) != 0) { - Actor_PlaySfx(&this->actor, 0x38C3U); + Actor_PlaySfx(&this->actor, 0x38C3); } if ((Animation_OnFrame(&this->skelAnime, 3.0f) != 0) || (Animation_OnFrame(&this->skelAnime, 15.0f) != 0)) { func_8086E27C(this, play); } } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E7A8.s") +void func_8086E7A8(EnOkuta* this) { + Animation_PlayOnce(&this->skelAnime, (AnimationHeader* ) &D_06003B24); + this->actionFunc = func_8086E7E8; +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E7E8.s") From 701ad58e68ec6de22afd7d77aa937a6ace9713fc Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 18:46:53 +0000 Subject: [PATCH 10/28] func_8086E7E8 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index d8901c1f5..f2480fa89 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -336,7 +336,27 @@ void func_8086E7A8(EnOkuta* this) { this->actionFunc = func_8086E7E8; } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E7E8.s") +void func_8086E7E8(EnOkuta* this, PlayState* play) { + f32 temp_fv0; + + Math_ApproachF(&this->actor.world.pos.y, this->actor.home.pos.y, 0.5f, 30.0f); + if (SkelAnime_Update(&this->skelAnime) != 0) { + Actor_PlaySfx(&this->actor, 0x38C5); + func_8086E168(this, play); + func_8086E4FC(this); + } else { + temp_fv0 = this->skelAnime.curFrame; + if (temp_fv0 >= 4.0f) { + Actor_SetScale(&this->actor, (6.0f - temp_fv0) * 0.5f * 0.01f); + } + } + if (Animation_OnFrame(&this->skelAnime, 2.0f) != 0) { + Actor_PlaySfx(&this->actor, 0x38C4); + } + if (Animation_OnFrame(&this->skelAnime, 4.0f) != 0) { + func_8086E27C(this, play); + } +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E8E8.s") From 4bcb6ee4fbb6dde53e535210970357ab93e00307 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 18:49:16 +0000 Subject: [PATCH 11/28] func_8086E8E8 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index f2480fa89..ed793be4a 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -358,7 +358,15 @@ void func_8086E7E8(EnOkuta* this, PlayState* play) { } } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E8E8.s") +void func_8086E8E8(EnOkuta* this) { + Animation_PlayLoop(&this->skelAnime, (AnimationHeader* ) &D_06003EE4); + if (this->actionFunc == func_8086EC00) { + this->unk18E = 8; + } else { + this->unk18E = 0; + } + this->actionFunc = func_8086E948; +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E948.s") From 09e37611ae7e720b25158c9e600dcdfa18ac6959 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 18:59:32 +0000 Subject: [PATCH 12/28] func_8086E948 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index ed793be4a..cc267bad6 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -24,6 +24,7 @@ void func_8086E7A8(EnOkuta* this); void func_8086E7E8(EnOkuta* this, PlayState* play); void func_8086E8E8(EnOkuta* this); void func_8086E948(EnOkuta* this, PlayState* play); +void func_8086EAE0(EnOkuta* this, PlayState* play); void func_8086EC00(EnOkuta* this, PlayState* play); void func_8086EF14(EnOkuta* this, PlayState* play); void func_8086EFE8(EnOkuta* this, PlayState* play); @@ -368,7 +369,38 @@ void func_8086E8E8(EnOkuta* this) { this->actionFunc = func_8086E948; } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086E948.s") +void func_8086E948(EnOkuta* this, PlayState* play) { + s16 temp_v0; + + if (this->actor.params == 0) { + this->actor.world.pos.y = this->actor.home.pos.y; + } else { + this->actor.world.pos.y = func_8086E378(this); + } + + SkelAnime_Update(&this->skelAnime); + + if (Animation_OnFrame(&this->skelAnime, 0.0f) != 0) { + if (this->unk18E != 0) { + this->unk18E--; + } + } + + if (Animation_OnFrame(&this->skelAnime, 0.5f) != 0) { + Actor_PlaySfx(&this->actor, 0x38C1); + } + + if ((this->actor.xzDistToPlayer > 560.0f) || ((this->actor.xzDistToPlayer < 160.0f) && (this->actor.params == 0))) { + func_8086E7A8(this); + return; + } + + temp_v0 = Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0xE38, 0x38E); + + if ((ABS_ALT(temp_v0) < 0x38E) && ((this->actor.params == 0 && (this->unk18E == 0) && (this->actor.playerHeightRel < 120.0f)) || ((this->actor.params == 1) && ((this->unk18E == 0) || (this->actor.xzDistToPlayer < 150.0f))))) { + func_8086EAE0(this, play); + } +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086EAE0.s") From 9c31a21f5422cf6fe3a1efbb400bbde2d799b903 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 19:20:21 +0000 Subject: [PATCH 13/28] func_8086EAE0 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 22 ++++++++++++++++++- src/overlays/actors/ovl_En_Okuta/z_en_okuta.h | 3 ++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index cc267bad6..ce1aeda76 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -402,7 +402,27 @@ void func_8086E948(EnOkuta* this, PlayState* play) { } } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086EAE0.s") +void func_8086EAE0(EnOkuta* this, PlayState* play) { + + Animation_PlayOnce(&this->skelAnime, (AnimationHeader* ) &D_0600044C); + if (this->actionFunc != func_8086EC00) { + if (this->actor.params == 0) { + this->unk18E = this->unk190; + } else { + this->unk18E = ((560.0f - this->actor.xzDistToPlayer) * 0.005f) + 1.0f; + } + } + if (this->actor.params == 0) { + this->unk260 = this->actor.playerHeightRel + 20.0f; + this->unk260 = CLAMP_MIN(this->unk260, 10.0f); + + if (this->unk260 > 50.0f) { + func_8086E27C(this, play); + Actor_PlaySfx(&this->actor, 0x38C2); + } + } + this->actionFunc = func_8086EC00; +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086EC00.s") diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h index 014df2db2..4edb40136 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h @@ -21,7 +21,8 @@ typedef struct EnOkuta { /* 0x254 */ f32 unk254; /* 0x258 */ f32 unk258; /* 0x25C */ f32 unk25C; - /* 0x260 */ char pad260[0x10]; + /* 0x260 */ f32 unk260; + /* 0x268 */ char pad268[0xC]; /* 0x270 */ Vec3f bodyPartsPos[0xA]; /* 0x2E8 */ ColliderCylinder collider; } EnOkuta; From e0ea231265e0d53b31e54dbe61aad25c1a46901c Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 22:02:58 +0000 Subject: [PATCH 14/28] func_8086EE8C --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index ce1aeda76..ca0145ff2 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -426,7 +426,14 @@ void func_8086EAE0(EnOkuta* this, PlayState* play) { #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086EC00.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086EE8C.s") +void func_8086EE8C(EnOkuta* this) { + Animation_MorphToPlayOnce(&this->skelAnime, (AnimationHeader*)&D_06004204, -5.0f); + Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 0xB); + this->collider.base.acFlags &= 0xFFFE; + Actor_SetScale(&this->actor, 0.01f); + Actor_PlaySfx(&this->actor, 0x38C6U); + this->actionFunc = func_8086EF14; +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086EF14.s") From 47fa1f8f4e9f9ca527ea9c2b4032263f228a6972 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 22:06:08 +0000 Subject: [PATCH 15/28] func_8086EF14 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index ca0145ff2..f3a3464a3 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -27,6 +27,7 @@ void func_8086E948(EnOkuta* this, PlayState* play); void func_8086EAE0(EnOkuta* this, PlayState* play); void func_8086EC00(EnOkuta* this, PlayState* play); void func_8086EF14(EnOkuta* this, PlayState* play); +void func_8086EF90(EnOkuta* this); void func_8086EFE8(EnOkuta* this, PlayState* play); void func_8086F434(EnOkuta* this, PlayState* play); void func_8086F4B0(EnOkuta* this, PlayState* play); @@ -435,7 +436,17 @@ void func_8086EE8C(EnOkuta* this) { this->actionFunc = func_8086EF14; } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086EF14.s") +void func_8086EF14(EnOkuta* this, PlayState* play) { + if (SkelAnime_Update(&this->skelAnime) != 0) { + if (this->actor.colChkInfo.health == 0) { + func_8086EF90(this); + } else { + this->collider.base.acFlags |= 1; + func_8086E8E8(this); + } + } + Math_ApproachF(&this->actor.world.pos.y, this->actor.home.pos.y, 0.5f, 5.0f); +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086EF90.s") From 7cfdd79bc0ce2d12138778bc6246d7497f70a762 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 22:09:22 +0000 Subject: [PATCH 16/28] func_8086EF90 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index f3a3464a3..700f169f7 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -448,7 +448,12 @@ void func_8086EF14(EnOkuta* this, PlayState* play) { Math_ApproachF(&this->actor.world.pos.y, this->actor.home.pos.y, 0.5f, 5.0f); } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086EF90.s") +void func_8086EF90(EnOkuta* this) { + Animation_MorphToPlayOnce(&this->skelAnime, (AnimationHeader*)&D_06003958, -3.0f); + this->unk18E = 0; + this->actor.flags &= ~1; + this->actionFunc = func_8086EFE8; +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086EFE8.s") From 743ebd42316ab03bac79637dacadbf56b4c73690 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 23:22:14 +0000 Subject: [PATCH 17/28] func_8086EFE8 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 49 ++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 700f169f7..e0a56e60e 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -455,7 +455,54 @@ void func_8086EF90(EnOkuta* this) { this->actionFunc = func_8086EFE8; } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086EFE8.s") +extern Vec3f D_80870930; +extern Color_RGBA8 D_8087093C; +extern Color_RGBA8 D_80870940; + +void func_8086EFE8(EnOkuta* this, PlayState* play) { + Vec3f velocity; + Vec3f pos; + s32 i; + + if (SkelAnime_Update(&this->skelAnime)) { + this->unk18E++; + } + Math_ApproachF(&this->actor.world.pos.y, this->actor.home.pos.y, 0.5f, 5.0f); + if (this->unk18E == 5) { + pos.x = this->actor.world.pos.x; + pos.y = this->actor.world.pos.y + 40.0f; + pos.z = this->actor.world.pos.z; + velocity.x = 0.0f; + velocity.y = -0.5f; + velocity.z = 0.0f; + func_8086E214(&pos, &velocity, -0x14, play); + Actor_PlaySfx(&this->actor, 0x38C7); + } + if (Animation_OnFrame(&this->skelAnime, 15.0f)) { + func_8086E27C(this, play); + Actor_PlaySfx(&this->actor, 0x38C3); + } + if (this->unk18E < 3) { + Actor_SetScale(&this->actor, ((this->unk18E * 0.25f) + 1.0f) * 0.01f); + } else if (this->unk18E < 6) { + Actor_SetScale(&this->actor, (1.5f - ((this->unk18E - 2) * 0.2333f)) * 0.01f); + } else if (this->unk18E < 11) { + Actor_SetScale(&this->actor, (((this->unk18E - 5) * 0.04f) + 0.8f) * 0.01f); + } else { + if (Math_StepToF(&this->actor.scale.x, 0.0f, 0.0005f) != 0) { + SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, 0x38C5); + Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0xA0); + for (i = 0; i < 20; i++) { + velocity.x = (Rand_ZeroOne() - 0.5f) * 7.0f; + velocity.y = Rand_ZeroOne() * 7.0f; + velocity.z = (Rand_ZeroOne() - 0.5f) * 7.0f; + EffectSsDtBubble_SpawnCustomColor(play, &this->actor.world.pos, &velocity, &D_80870930, &D_8087093C, &D_80870940, (s16) Rand_S16Offset(100, 50), 25, 0); + } + Actor_Kill(&this->actor); + } + this->actor.scale.y = this->actor.scale.z = this->actor.scale.x; + } +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086F2FC.s") From f97f633eb93790b9f9048a083e64ca6d45541975 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 23:43:00 +0000 Subject: [PATCH 18/28] func_8086F2FC --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 22 ++++++++++++++++++- src/overlays/actors/ovl_En_Okuta/z_en_okuta.h | 4 +++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index e0a56e60e..df6125275 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -504,7 +504,27 @@ void func_8086EFE8(EnOkuta* this, PlayState* play) { } } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086F2FC.s") +void func_8086F2FC(EnOkuta* this, PlayState* play) { + + this->unk18E = 0xA; + Actor_SetColorFilter(&this->actor, 0x8000, 0x80FF, 0, 0xA); + this->actor.child = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, 0x143, this->actor.world.pos.x, this->actor.world.pos.y + (this->skelAnime.jointTable->y * this->actor.scale.y) + (25.0f * this->unk268), this->actor.world.pos.z, 0, this->actor.home.rot.y, 0, 3); + + if (this->actor.child != NULL) { + this->actor.flags &= ~1; + this->actor.flags |= 0x10; + this->actor.child->csId = this->actor.csId; + this->actionFunc = func_8086F434; + return; + } + func_8086E084(this); + if (!Actor_ApplyDamage(&this->actor)) { + Enemy_StartFinishingBlow(play, &this->actor); + this->collider.base.acFlags &= 0xFFFE; + this->unk18E = 3; + } + this->actionFunc = func_8086F4B0; +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086F434.s") diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h index 4edb40136..c073b65bf 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h @@ -22,7 +22,9 @@ typedef struct EnOkuta { /* 0x258 */ f32 unk258; /* 0x25C */ f32 unk25C; /* 0x260 */ f32 unk260; - /* 0x268 */ char pad268[0xC]; + /* 0x264 */ char pad264[0x4]; + /* 0x268 */ f32 unk268; + /* 0x26C */ char pad26C[0x4]; /* 0x270 */ Vec3f bodyPartsPos[0xA]; /* 0x2E8 */ ColliderCylinder collider; } EnOkuta; From 9de7f8c10e3b3031b83890b28d7d1ea85c717fc2 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 23:45:35 +0000 Subject: [PATCH 19/28] func_8086F434 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index df6125275..44a22fb2f 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -526,7 +526,17 @@ void func_8086F2FC(EnOkuta* this, PlayState* play) { this->actionFunc = func_8086F4B0; } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086F434.s") +void func_8086F434(EnOkuta* this, PlayState* play) { + + this->actor.colorFilterTimer = 0xA; + if (!this->actor.child || !this->actor.child->update) { + this->actor.flags |= 1; + if (Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y, 10.0f) != 0) { + this->actor.flags &= ~0x10; + func_8086E8E8(this); + } + } +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086F4B0.s") From 9285072224051da6d238c811d20cf036932f2019 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 23:49:18 +0000 Subject: [PATCH 20/28] func_8086F4B0 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 44a22fb2f..b1162dbbd 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -191,11 +191,11 @@ void func_8086E084(EnOkuta* this) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 80); } -void func_8086E0F0(EnOkuta* this, PlayState* arg1) { +void func_8086E0F0(EnOkuta* this, PlayState* play) { if (this->unk18C == 10) { this->unk18C = 0; this->unk254 = 0.0f; - Actor_SpawnIceEffects(arg1, &this->actor, this->bodyPartsPos, 0xA, 2, 0.3f, 0.2f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, 0xA, 2, 0.3f, 0.2f); this->collider.base.colType = 0; } } @@ -538,7 +538,16 @@ void func_8086F434(EnOkuta* this, PlayState* play) { } } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086F4B0.s") +void func_8086F4B0(EnOkuta* this, PlayState* play) { + + if (this->unk18E != 0) { + this->unk18E--; + } + if (this->unk18E == 0) { + func_8086E0F0(this, play); + func_8086EE8C(this); + } +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086F4F4.s") From 0409d249beb8e3a84e15b462dcdc0d0fb3603a8c Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 23:53:43 +0000 Subject: [PATCH 21/28] func_8086F4F4 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index b1162dbbd..3e2b3b1d7 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -549,7 +549,11 @@ void func_8086F4B0(EnOkuta* this, PlayState* play) { } } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086F4F4.s") +void func_8086F4F4(EnOkuta* this) { + Animation_Change(&this->skelAnime, (AnimationHeader* ) &D_06004204, 1.0f, 0.0f, Animation_GetLastFrame(&D_06004204) - 3.0f, 2, -3.0f); + this->unk18E = 0x14; + this->actionFunc = func_8086F57C; +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086F57C.s") From 6c91a031692313044a521e88c8607efece3ee6e5 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Thu, 2 Nov 2023 00:00:19 +0000 Subject: [PATCH 22/28] func_8086F57C --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 3e2b3b1d7..22cd0fb7a 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -555,7 +555,25 @@ void func_8086F4F4(EnOkuta* this) { this->actionFunc = func_8086F57C; } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086F57C.s") +void func_8086F57C(EnOkuta* this, PlayState* play) { + + this->unk18E--; + Math_ScaledStepToS(&this->actor.shape.rot.x, 0, 0x400); + + if (SkelAnime_Update(&this->skelAnime)) { + Animation_Change(&this->skelAnime, (AnimationHeader* ) &D_06004204, 1.0f, 0.0f, Animation_GetLastFrame(&D_06004204) - 3.0f, 2, -3.0f); + } + + if (this->unk18E < 10) { + this->actor.shape.rot.y += (s16) (8192.0f * Math_SinF(this->unk18E * 0.15707964f)); + } else { + this->actor.shape.rot.y += 0x2000; + } + + if (this->unk18E == 0) { + func_8086E8E8(this); + } +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086F694.s") From 3e5e264859adce8917a2b072616ab5a6f7a8da48 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Thu, 2 Nov 2023 00:19:51 +0000 Subject: [PATCH 23/28] func_8086F694 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 22cd0fb7a..2ff6005ae 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -559,7 +559,7 @@ void func_8086F57C(EnOkuta* this, PlayState* play) { this->unk18E--; Math_ScaledStepToS(&this->actor.shape.rot.x, 0, 0x400); - + if (SkelAnime_Update(&this->skelAnime)) { Animation_Change(&this->skelAnime, (AnimationHeader* ) &D_06004204, 1.0f, 0.0f, Animation_GetLastFrame(&D_06004204) - 3.0f, 2, -3.0f); } @@ -575,7 +575,43 @@ void func_8086F57C(EnOkuta* this, PlayState* play) { } } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086F694.s") +void func_8086F694(EnOkuta* this, PlayState* play) { + Vec3f sp54; + Player* player; + Vec3s sp48; + + player = GET_PLAYER(play); + this->unk18E--; + if (this->unk18E < 0) { + this->actor.velocity.y -= 0.5f; + this->actor.world.rot.x = Math_Atan2S_XY(sqrtf((this->actor.velocity.x * this->actor.velocity.x) + (this->actor.velocity.z * this->actor.velocity.z)), this->actor.velocity.y); + } + + this->actor.home.rot.z += 0x1554; + if ((this->actor.bgCheckFlags & 8) || (this->actor.bgCheckFlags & 1) || (this->actor.bgCheckFlags & 0x10) || (this->collider.base.atFlags & 2) || (this->collider.base.acFlags & 2) || (this->collider.base.ocFlags1 & 2) || (this->actor.floorHeight == -32000.0f)) { + if (player->currentShield == 1 && (this->collider.base.atFlags & 2) && (this->collider.base.atFlags & 0x10) && (this->collider.base.atFlags & 4)) { + this->collider.base.atFlags &= 0xFFE9; + this->collider.base.atFlags |= 8; + this->collider.info.toucher.dmgFlags = 0x400000; + this->collider.info.toucher.damage = 2; + Matrix_MtxFToYXZRot(&player->shieldMf, &sp48, 0); + this->actor.world.rot.y = sp48.y + 0x8000; + this->unk18E = 22; + } else { + sp54.x = this->actor.world.pos.x; + sp54.y = this->actor.world.pos.y + 11.0f; + sp54.z = this->actor.world.pos.z; + EffectSsHahen_SpawnBurst(play, &sp54, 6.0f, 0, 1, 2, 15, 5, 10, (Gfx* ) &D_06003250); + SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 0x14, 0x38C0); + if ((this->collider.base.atFlags & 2) && (this->collider.base.atFlags & 0x10) && !(this->collider.base.atFlags & 4) && (this->actor.params == 0x11)) { + func_800B8D98(play, &this->actor, 8.0f, this->actor.world.rot.y, 6.0f); + } + Actor_Kill(&this->actor); + } + } else if (this->unk18E == -300) { + Actor_Kill(&this->actor); + } +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086F8FC.s") From a5fa523b1272693c74cb3ed9824bdbf6904ba356 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Thu, 2 Nov 2023 00:44:38 +0000 Subject: [PATCH 24/28] func_8086F8FC --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 48 ++++++++++++++++++- src/overlays/actors/ovl_En_Okuta/z_en_okuta.h | 4 +- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 2ff6005ae..d8996de7c 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -508,7 +508,7 @@ void func_8086F2FC(EnOkuta* this, PlayState* play) { this->unk18E = 0xA; Actor_SetColorFilter(&this->actor, 0x8000, 0x80FF, 0, 0xA); - this->actor.child = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, 0x143, this->actor.world.pos.x, this->actor.world.pos.y + (this->skelAnime.jointTable->y * this->actor.scale.y) + (25.0f * this->unk268), this->actor.world.pos.z, 0, this->actor.home.rot.y, 0, 3); + this->actor.child = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, 0x143, this->actor.world.pos.x, this->actor.world.pos.y + (this->skelAnime.jointTable->y * this->actor.scale.y) + (25.0f * this->headScale.y), this->actor.world.pos.z, 0, this->actor.home.rot.y, 0, 3); if (this->actor.child != NULL) { this->actor.flags &= ~1; @@ -613,7 +613,51 @@ void func_8086F694(EnOkuta* this, PlayState* play) { } } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086F8FC.s") +void func_8086F8FC(EnOkuta* this) { + f32 curFrame; + + curFrame = this->skelAnime.curFrame; + if (this->actionFunc == func_8086E658) { + if (curFrame < 8.0f) { + this->headScale.x = this->headScale.y = this->headScale.z = 1.0f; + } else if (curFrame < 10.0f) { + this->headScale.x = this->headScale.z = 1.0f; + this->headScale.y = (((curFrame - 7.0f) * 0.4f) + 1.0f); + } else if (curFrame < 14.0f) { + this->headScale.x = this->headScale.z = ((curFrame - 9.0f) * 0.075f) + 1.0f; + this->headScale.y = 1.8f - ((curFrame - 9.0f) * 0.25f); + } else { + this->headScale.x = this->headScale.z = 1.3f - ((curFrame - 13.0f) * 0.05f); + this->headScale.y = ((curFrame - 13.0f) * 0.0333f) + 0.8f; + } + } else if (this->actionFunc == func_8086E7E8) { + if (curFrame < 3.0f) { + this->headScale.y = 1.0f; + } else if (curFrame < 4.0f) { + this->headScale.y = (curFrame - 2.0f) + 1.0f; + } else { + this->headScale.y = 2.0f - ((curFrame - 3.0f) * 0.333f); + } + this->headScale.x = this->headScale.z = 1.0f; + } else if (this->actionFunc == func_8086EC00) { + if (curFrame < 5.0f) { + this->headScale.x = this->headScale.y = this->headScale.z = (curFrame * 0.125f) + 1.0f; + } else if (curFrame < 7.0f) { + this->headScale.x = this->headScale.y = this->headScale.z = 1.5f - ((curFrame - 4.0f) * 0.35f); + } else if (curFrame < 17.0f) { + this->headScale.x = this->headScale.z = ((curFrame - 6.0f) * 0.05f) + 0.8f; + this->headScale.y = 0.8f; + } else { + this->headScale.x = this->headScale.z = 1.3f - ((curFrame - 16.0f) * 0.1f); + this->headScale.y = ((curFrame - 16.0f) * 0.0666f) + 0.8f; + } + } else if (this->actionFunc == func_8086E948) { + this->headScale.x = this->headScale.z = 1.0f; + this->headScale.y = (Math_SinF(0.19634955f * curFrame) * 0.2f) + 1.0f; + } else { + this->headScale.x = this->headScale.y = this->headScale.z = 1.0f; + } +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086FCA4.s") diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h index c073b65bf..f0a18e31e 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.h @@ -22,9 +22,7 @@ typedef struct EnOkuta { /* 0x258 */ f32 unk258; /* 0x25C */ f32 unk25C; /* 0x260 */ f32 unk260; - /* 0x264 */ char pad264[0x4]; - /* 0x268 */ f32 unk268; - /* 0x26C */ char pad26C[0x4]; + /* 0x264 */ Vec3f headScale; /* 0x270 */ Vec3f bodyPartsPos[0xA]; /* 0x2E8 */ ColliderCylinder collider; } EnOkuta; From 976cd0111962fdd1c66f190c5ac43c211a25fb23 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Thu, 2 Nov 2023 01:06:57 +0000 Subject: [PATCH 25/28] func_8086FCA4 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index d8996de7c..b5a07b6c3 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -659,7 +659,28 @@ void func_8086F8FC(EnOkuta* this) { } } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_8086FCA4.s") +void func_8086FCA4(EnOkuta* this, PlayState* play) { + + if ((this->collider.base.acFlags & 2) && ((this->collider.base.acFlags = (u8) (this->collider.base.acFlags & 0xFFFD), (this->unk18C != 0xA)) || !(this->collider.info.acHitInfo->toucher.dmgFlags & 0xDB0B3))) { + Actor_SetDropFlag(&this->actor, &this->collider.info); + func_8086E0F0(this, play); + if (this->actor.colChkInfo.damageEffect == 3) { + func_8086F2FC(this, play); + } else { + if (this->actor.colChkInfo.damageEffect == 4) { + this->unk254 = 4.0f; + this->unk258 = 0.6f; + this->unk18C = 0x14; + Actor_Spawn(&play->actorCtx, play, 0xA2, this->collider.info.bumper.hitPos.x, this->collider.info.bumper.hitPos.y, this->collider.info.bumper.hitPos.z, 0, 0, 0, 4); + } + + if (!Actor_ApplyDamage(&this->actor)) { + Enemy_StartFinishingBlow(play, &this->actor); + } + func_8086EE8C(this); + } + } +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/EnOkuta_Update.s") From 36f0ad7106e3035e8e78e89b8fed9a8e6ec91a83 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Thu, 2 Nov 2023 02:08:28 +0000 Subject: [PATCH 26/28] EnOkuta_Update and func_808700C0 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 86 ++++++++++++++++++- 1 file changed, 83 insertions(+), 3 deletions(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index b5a07b6c3..14f33cb06 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -124,7 +124,7 @@ extern UNK_TYPE D_06004204; extern AnimationHeader D_0600466C; void func_8086E4FC(EnOkuta*); /* extern */ -void func_808700C0(Actor* this, PlayState* play); /* extern */ +void func_808700C0(Actor* thisx, PlayState* play); /* extern */ extern SkeletonHeader D_060033D0; @@ -682,9 +682,89 @@ void func_8086FCA4(EnOkuta* this, PlayState* play) { } } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/EnOkuta_Update.s") +extern s16 D_808708EE; +extern s16 D_808708EC; + +void EnOkuta_Update(Actor* thisx, PlayState* play2) { + PlayState* play = play2; + EnOkuta* this = THIS; + s32 pad[2]; + + if (this->actor.params == 0) { + func_8086FCA4(this, play); + } else { + if ((this->collider.base.atFlags & 2) || (this->collider.base.acFlags & 2)) { + if (this->collider.base.atFlags & 2) { + func_800B8D98(play, &this->actor, 8.0f, this->actor.world.rot.y, 6.0f); + } + func_8086F4F4(this); + } + } + this->actionFunc(this, play); + if (this->actionFunc != func_8086F434) { + func_8086F8FC(this); + this->collider.dim.height = ((D_808708EE * this->headScale.y) - this->collider.dim.yShift) * this->actor.scale.y * 100.0f; + Collider_UpdateCylinder(&this->actor, &this->collider); + if ((this->actionFunc == func_8086E658) || (this->actionFunc == func_8086E7E8)) { + this->collider.dim.pos.y = this->actor.world.pos.y + (this->skelAnime.jointTable->y * this->actor.scale.y); + this->collider.dim.radius = D_808708EC * this->actor.scale.x * 100.0f; + } + if (this->actor.draw) { + if (this->actor.params == 1) { + CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); + } + if (this->collider.base.acFlags & 1) { + CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); + } + CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); + func_8086E2C0(this, play); + } + Actor_SetFocus(&this->actor, 15.0f); + if (this->unk254 > 0.0f) { + if (this->unk18C != 10) { + Math_StepToF(&this->unk254, 0.0f, 0.05f); + this->unk258 = (this->unk254 + 1.0f) * 0.3f; + this->unk258 = CLAMP_MAX(this->unk258, 0.6f); + } else if (Math_StepToF(&this->unk25C, 0.6f, 0.015000001f) == 0) { + Actor_PlaySfx_Flagged(&this->actor, 0x20B2); + } + } + } +} + +void func_808700C0(Actor* thisx, PlayState* play) { + s32 pad; + EnOkuta* this = THIS; + Player* player = GET_PLAYER(play); + Vec3f sp38; + s32 sp34; + + sp34 = false; + if (!(player->stateFlags1 & 0x300002C2)) { + this->actionFunc(this, play); + Actor_MoveWithoutGravity(&this->actor); + Math_Vec3f_Copy(&sp38, &this->actor.world.pos); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 15.0f, 30.0f, 7); + if ((this->actor.bgCheckFlags & 8) && SurfaceType_IsIgnoredByProjectiles(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId)) { + sp34 = true; + this->actor.bgCheckFlags &= 0xFFF7; + } + if ((this->actor.bgCheckFlags & 1) && SurfaceType_IsIgnoredByProjectiles(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) { + sp34 = true; + this->actor.bgCheckFlags &= 0xFFFE; + } + if (sp34 && !(this->actor.bgCheckFlags & 9)) { + Math_Vec3f_Copy(&this->actor.world.pos, &sp38); + } + Collider_UpdateCylinder(&this->actor, &this->collider); + this->actor.flags |= 0x01000000; + CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); + CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); + CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); + } +} + -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_808700C0.s") #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_80870254.s") From c2180861fa8279df9f02b54fa32f63dbfc049784 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Thu, 2 Nov 2023 02:18:22 +0000 Subject: [PATCH 27/28] move declarations --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 14f33cb06..997db7814 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -17,6 +17,7 @@ void EnOkuta_Destroy(Actor* thisx, PlayState* play); void EnOkuta_Update(Actor* thisx, PlayState* play); void EnOkuta_Draw(Actor* thisx, PlayState* play); +void func_8086E4FC(EnOkuta* this); void func_8086E52C(EnOkuta* this, PlayState* play); void func_8086E5E8(EnOkuta* this, PlayState* play); void func_8086E658(EnOkuta* this, PlayState* play); @@ -33,6 +34,7 @@ void func_8086F434(EnOkuta* this, PlayState* play); void func_8086F4B0(EnOkuta* this, PlayState* play); void func_8086F57C(EnOkuta* this, PlayState* play); void func_8086F694(EnOkuta* this, PlayState* play); +void func_808700C0(Actor* thisx, PlayState* play); #if 0 @@ -123,9 +125,6 @@ extern UNK_TYPE D_06003EE4; extern UNK_TYPE D_06004204; extern AnimationHeader D_0600466C; -void func_8086E4FC(EnOkuta*); /* extern */ -void func_808700C0(Actor* thisx, PlayState* play); /* extern */ - extern SkeletonHeader D_060033D0; void EnOkuta_Init(Actor* thisx, PlayState* play2) { From 1a7c546644e31b673cca0ea231dc5ccf3bca3153 Mon Sep 17 00:00:00 2001 From: inspectredc Date: Thu, 2 Nov 2023 02:33:27 +0000 Subject: [PATCH 28/28] func_80870254 --- src/overlays/actors/ovl_En_Okuta/z_en_okuta.c | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 997db7814..2e12fb599 100644 --- a/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -763,9 +763,41 @@ void func_808700C0(Actor* thisx, PlayState* play) { } } +s32 func_80870254(EnOkuta* this, f32 curFrame, Vec3f* scale) { - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_80870254.s") + if (this->actionFunc == func_8086E948) { + scale->z = scale->y = 1.0f; + scale->x = (Math_SinF(0.19634955f * curFrame) * 0.4f) + 1.0f; + } else if (this->actionFunc == func_8086EC00) { + if (curFrame < 5.0f) { + scale->z = 1.0f; + scale->x = scale->y = (curFrame * 0.25f) + 1.0f; + } else if (curFrame < 7.0f) { + scale->z = (curFrame - 4.0f) * 0.5f + 1.0f; + scale->x = scale->y = 2.0f - (curFrame - 4.0f) * 0.5f; + } else { + scale->z = 2.0f - ((curFrame - 6.0f) * 0.0769f); + scale->x = scale->y = 1.0f; + } + } else if (this->actionFunc == func_8086EFE8) { + if ((curFrame >= 35.0f) || (curFrame < 25.0f)) { + return 0; + } + if (curFrame < 27.0f) { + scale->z = 1.0f; + scale->x = scale->y = ((curFrame - 24.0f) * 0.5f) + 1.0f; + } else if (curFrame < 30.0f) { + scale->z = (curFrame - 26.0f) * 0.333f + 1.0f; + scale->x = scale->y = 2.0f - (curFrame - 26.0f) * 0.333f; + } else { + scale->z = 2.0f - ((curFrame - 29.0f) * 0.2f); + scale->x = scale->y = 1.0f; + } + } else { + return false; + } + return true; +} #pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Okuta/func_808704DC.s")