From e259c526dba3349483681126dcd752dcb53e1760 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Wed, 27 Sep 2023 20:50:28 -0700 Subject: [PATCH] func_80B0D2B8 OK --- .../actors/ovl_Boss_Hakugin/z_boss_hakugin.c | 96 ++++++++++++++++++- 1 file changed, 94 insertions(+), 2 deletions(-) diff --git a/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c b/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c index 07c39c14b..a6894ea4f 100644 --- a/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c +++ b/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c @@ -994,8 +994,100 @@ void BossHakugin_Draw(Actor* thisx, PlayState* play) { } } -void func_80B0D2B8(BossHakugin* this, u8* tex, f32 tween); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Boss_Hakugin/func_80B0D2B8.s") +#if 0 +s32 D_80B0EB70[6] = { 1, 2, 3, 3, 2, 1 }; +s32 D_80B0EB88[7] = { 2, 3, 4, 4, 4, 3, 2 }; +s32 D_80B0EBA4[8] = { 2, 3, 4, 4, 4, 4, 3, 2 }; +s32 D_80B0EBC4[14] = { 2, 4, 5, 6, 7, 8, 8, 8, 8, 7, 6, 5, 4, 2 }; +s32 D_80B0EBFC[15] = { 1, -1, 1, 1, 3, 4, 1, 6, 7, 0, 9, 0xA, 0, 0xC, 0xD }; +u8 D_80B0EC38[15] = { 1, 2, 1, 0, 3, 3, 0, 3, 3, 0, 3, 3, 0, 3, 3 }; +#else +extern s32 D_80B0EB70[]; +extern s32 D_80B0EB88[]; +extern s32 D_80B0EBA4[]; +extern s32 D_80B0EBC4[]; +extern s32 D_80B0EBFC[]; +extern u8 D_80B0EC38[]; +#endif + +void func_80B0D2B8(BossHakugin* this, u8* tex, f32 arg2) { + s32 index; + s32 i; + s32 baseX; + s32 baseY; + s32 addY; + s32 x; + s32 y = -1; + Vec3f lerp; + Vec3f* parentBodyPartPos; + Vec3f* bodyPartPos; + Vec3f sp74; + Vec3f sp68; + + for (i = 0; i < 15; i++) { + if ((arg2 == 0.0f) || (y = D_80B0EBFC[i]) > BODYPART_NONE) { + bodyPartPos = &this->bodyPartsPos[i]; + if (arg2 > 0.0f) { + parentBodyPartPos = &this->bodyPartsPos[y]; + + VEC3F_LERPIMPDST(&lerp, bodyPartPos, parentBodyPartPos, arg2); + + sp74.x = lerp.x - this->actor.world.pos.x; + sp74.y = lerp.y - this->actor.world.pos.y + 76.0f + 30.0f + 30.0f + 600.0f; + sp74.z = lerp.z - this->actor.world.pos.z; + } else { + sp74.x = bodyPartPos->x - this->actor.world.pos.x; + sp74.y = bodyPartPos->y - this->actor.world.pos.y + 76.0f + 30.0f + 30.0f + 600.0f; + sp74.z = bodyPartPos->z - this->actor.world.pos.z; + } + Matrix_MultVec3f(&sp74, &sp68); + + sp68.x *= 0.7f; + sp68.y *= 0.7f; + + baseX = (u16)(s32)(sp68.x + 32.0f); + baseY = (u16)((s32)sp68.y * 64); + + if (D_80B0EC38[i] == 2) { + for (y = 0, addY = -0x180; y < 14; y++, addY += 0x40) { + for (x = -D_80B0EBC4[y]; x < D_80B0EBC4[y]; x++) { + index = baseX + x + baseY + addY; + if ((index >= 0) && (index < 0x1000)) { + tex[index] = 255; + } + } + } + } else if (D_80B0EC38[i] == 1) { + for (y = 0, addY = -0x100; y < 8; y++, addY += 0x40) { + for (x = -D_80B0EBA4[y]; x < D_80B0EBA4[y]; x++) { + index = baseX + x + baseY + addY; + if ((index >= 0) && (index < 0x1000)) { + tex[index] = 255; + } + } + } + } else if (D_80B0EC38[i] == 0) { + for (y = 0, addY = -0xC0; y < 7; y++, addY += 0x40) { + for (x = -D_80B0EB88[y]; x < D_80B0EB88[y]; x++) { + index = baseX + x + baseY + addY; + if ((index >= 0) && (index < 0x1000)) { + tex[index] = 255; + } + } + } + } else { + for (y = 0, addY = -0x80; y < 6; y++, addY += 0x40) { + for (x = -D_80B0EB70[y]; x < D_80B0EB70[y]; x++) { + index = baseX + x + baseY + addY; + if ((index >= 0) && (index < 0x1000)) { + tex[index] = 255; + } + } + } + } + } + } +} void func_80B0D69C(u8* tex, BossHakugin* this) { s32* iter = (s32*)tex;