From 6cb2d0d4363f8602116a95b68d5895159204444e Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 1 Nov 2023 16:52:41 +0000 Subject: [PATCH] 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