diff options
| author | Derek Hensley <hensley.derek58@gmail.com> | 2023-10-21 13:58:39 -0700 |
|---|---|---|
| committer | Derek Hensley <hensley.derek58@gmail.com> | 2023-10-21 13:58:39 -0700 |
| commit | e0fc8a614f3b5983cf7c03bbe331dd67ddc4463e (patch) | |
| tree | 465c384e5f44c1b617c7ad4813fa678d1f68f25c | |
| parent | 747661a4fc65acb188ecbbcdce1c2853305b59c7 (diff) | |
Bodyparts + other clean up
| -rw-r--r-- | src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c | 184 | ||||
| -rw-r--r-- | src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.h | 25 | ||||
| -rw-r--r-- | tools/disasm/variables.txt | 6 |
3 files changed, 153 insertions, 62 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 e922cf5ca..ced75a201 100644 --- a/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c +++ b/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.c @@ -18,6 +18,7 @@ #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UNFRIENDLY | ACTOR_FLAG_10 | ACTOR_FLAG_20) #define THIS ((BossHakugin*)thisx) + #define GOHT_LIMB_FLAG(limbIndex) (1 << ((limbIndex)-1)) void BossHakugin_Init(Actor* thisx, PlayState* play2); @@ -365,7 +366,7 @@ static ColliderCylinderInit sCylinderInit = { { 170, 40, 0, { 0, 0, 0 } }, }; -static DamageTable D_80B0EA60 = { +static DamageTable sDamageTable = { /* Deku Nut */ DMG_ENTRY(0, 0x0), /* Deku Stick */ DMG_ENTRY(1, 0x0), /* Horse trample */ DMG_ENTRY(1, 0x0), @@ -400,24 +401,59 @@ static DamageTable D_80B0EA60 = { /* Powder Keg */ DMG_ENTRY(1, 0xC), }; -static CollisionCheckInfoInit D_80B0EA80 = { 30, 80, 100, MASS_IMMOVABLE }; +static CollisionCheckInfoInit sColChkInfoInit = { 30, 80, 100, MASS_IMMOVABLE }; TexturePtr D_80B0EA88 = gGohtMetalPlateWithCirclePatternTex; -s8 D_80B0EA8C[] = { -1, -1, 0, -1, -1, -1, 3, -1, 4, 5, -1, 6, -1, 7, 8, 1, 2, - -1, -1, -1, -1, 9, 10, -1, -1, 11, -1, -1, 12, 13, -1, -1, 14 }; +static s8 sLimbToBodyParts[GOHT_LIMB_MAX] = { + BODYPART_NONE, // GOHT_LIMB_NONE + BODYPART_NONE, // GOHT_LIMB_ROOT + GOHT_BODYPART_PELVIS, // GOHT_LIMB_PELVIS + BODYPART_NONE, // GOHT_LIMB_THORAX_ROOT + BODYPART_NONE, // GOHT_LIMB_THORAX_WRAPPER + BODYPART_NONE, // GOHT_LIMB_FRONT_RIGHT_LEG_ROOT + GOHT_BODYPART_FRONT_RIGHT_UPPER_LEG, // GOHT_LIMB_FRONT_RIGHT_UPPER_LEG + BODYPART_NONE, // GOHT_LIMB_FRONT_RIGHT_LOWER_LEG_ROOT + GOHT_BODYPART_FRONT_RIGHT_LOWER_LEG, // GOHT_LIMB_FRONT_RIGHT_LOWER_LEG + GOHT_BODYPART_FRONT_RIGHT_HOOF, // GOHT_LIMB_FRONT_RIGHT_HOOF + BODYPART_NONE, // GOHT_LIMB_FRONT_LEFT_LEG_ROOT + GOHT_BODYPART_FRONT_LEFT_UPPER_LEG, // GOHT_LIMB_FRONT_LEFT_UPPER_LEG + BODYPART_NONE, // GOHT_LIMB_FRONT_LEFT_LOWER_LEG_ROOT + GOHT_BODYPART_FRONT_LEFT_LOWER_LEG, // GOHT_LIMB_FRONT_LEFT_LOWER_LEG + GOHT_BODYPART_FRONT_LEFT_HOOF, // GOHT_LIMB_FRONT_LEFT_HOOF + GOHT_BODYPART_THORAX, // GOHT_LIMB_THORAX + GOHT_BODYPART_HEAD, // GOHT_LIMB_HEAD + BODYPART_NONE, // GOHT_LIMB_JAW_ROOT + BODYPART_NONE, // GOHT_LIMB_JAW + BODYPART_NONE, // GOHT_LIMB_BACK_RIGHT_LEG_ROOT + BODYPART_NONE, // GOHT_LIMB_BACK_RIGHT_LEG_WRAPPER + GOHT_BODYPART_BACK_RIGHT_THIGH, // GOHT_LIMB_BACK_RIGHT_THIGH + GOHT_BODYPART_BACK_RIGHT_SHIN, // GOHT_LIMB_BACK_RIGHT_SHIN + BODYPART_NONE, // GOHT_LIMB_BACK_RIGHT_PASTERN_ROOT + BODYPART_NONE, // GOHT_LIMB_BACK_RIGHT_PASTERN + GOHT_BODYPART_BACK_RIGHT_HOOF, // GOHT_LIMB_BACK_RIGHT_HOOF + BODYPART_NONE, // GOHT_LIMB_BACK_LEFT_LEG_ROOT + BODYPART_NONE, // GOHT_LIMB_BACK_LEFT_LEG_WRAPPER + GOHT_BODYPART_BACK_LEFT_THIGH, // GOHT_LIMB_BACK_LEFT_THIGH + GOHT_BODYPART_BACK_LEFT_SHIN, // GOHT_LIMB_BACK_LEFT_SHIN + BODYPART_NONE, // GOHT_LIMB_BACK_LEFT_PASTERN_ROOT + BODYPART_NONE, // GOHT_LIMB_BACK_LEFT_PASTERN + GOHT_BODYPART_BACK_LEFT_HOOF, // GOHT_LIMB_BACK_LEFT_HOOF +}; + s32 D_80B0EAB0[5] = { GOHT_LIMB_BACK_LEFT_THIGH, GOHT_LIMB_BACK_RIGHT_PASTERN, GOHT_LIMB_JAW_ROOT, GOHT_LIMB_FRONT_LEFT_LOWER_LEG, GOHT_LIMB_FRONT_RIGHT_UPPER_LEG, }; + Color_RGBA8 D_80B0EAC4 = { 250, 250, 250, 255 }; Color_RGBA8 D_80B0EAC8 = { 180, 180, 180, 255 }; Color_RGB8 D_80B0EACC = { 0, 150, 255 }; Color_RGB8 D_80B0EAD0 = { 0, 255, 255 }; void BossHakugin_Init(Actor* thisx, PlayState* play2) { - static s32 D_80B0EAD4 = 0; - static InitChainEntry D_80B0EAD8[] = { + static s32 sTextureDesegmented = false; + static InitChainEntry sInitChain[] = { ICHAIN_S8(hintId, 27, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 27, ICHAIN_CONTINUE), ICHAIN_U8(targetMode, TARGET_MODE_5, ICHAIN_CONTINUE), @@ -429,11 +465,11 @@ void BossHakugin_Init(Actor* thisx, PlayState* play2) { s32 pad; s32 i; - Actor_ProcessInitChain(&this->actor, D_80B0EAD8); + Actor_ProcessInitChain(&this->actor, sInitChain); SkelAnime_InitFlex(play, &this->skelAnime, &gGohtSkel, &gGohtRunAnim, this->jointTable, this->morphTable, GOHT_LIMB_MAX); - if (!D_80B0EAD4) { - D_80B0EAD4 = true; + if (!sTextureDesegmented) { + sTextureDesegmented = true; D_80B0EA88 = Lib_SegmentedToVirtual(D_80B0EA88); } @@ -475,7 +511,7 @@ void BossHakugin_Init(Actor* thisx, PlayState* play2) { this->unk_09F8[i].unk_18 = -1; } - CollisionCheck_SetInfo(&this->actor.colChkInfo, &D_80B0EA60, &D_80B0EA80); + CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); this->unk_01A0 = this->actor.shape.rot.y; this->unk_01B0 = 0xFFFFFFFF; @@ -517,9 +553,8 @@ void BossHakugin_Destroy(Actor* thisx, PlayState* play) { } s32 func_80B0573C(Vec3f* arg0) { - f32 magnitude; + f32 magnitude = Math3D_Vec3fMagnitude(arg0); - magnitude = Math3D_Vec3fMagnitude(arg0); if (magnitude < 0.0001f) { return false; } @@ -531,10 +566,9 @@ s32 func_80B0573C(Vec3f* arg0) { void func_80B057A4(Vec3f* arg0, Vec3f* arg1, f32 arg2) { Vec3f sp34; Vec3f sp28; - f32 temp_fa0; + f32 temp_fa0 = (arg0->x * arg1->x) + (arg0->y * arg1->y) + (arg0->z * arg1->z); f32 var_fv1; - temp_fa0 = (arg0->x * arg1->x) + (arg0->y * arg1->y) + (arg0->z * arg1->z); if (fabsf(temp_fa0) < 1.0f) { var_fv1 = Math_FAcosF(temp_fa0); } else if (temp_fa0 >= 1.0f) { @@ -663,14 +697,13 @@ void func_80B05D4C(BossHakugin* this) { } void func_80B05EE0(BossHakugin* this, PlayState* play) { - s16 atan; + s16 atan = Math_Atan2S_XY(this->actor.world.pos.z, this->actor.world.pos.x); Vec3f warpPos; Vec3f heartPos; f32 sp50; f32 sin; f32 cos; - atan = Math_Atan2S_XY(this->actor.world.pos.z, this->actor.world.pos.x); if (atan > 0x4000) { warpPos.x = 1400.0f; warpPos.y = 0.0f; @@ -947,13 +980,12 @@ void func_80B06F48(BossHakugin* this, PlayState* play) { BossHakuginFhgFlashUnkStruct* iter2; BossHakuginFhgFlashUnkStruct* iter3; Vec3f spA0; - s32 sp9C; + s32 sp9C = this->unk_0191 + 3; s32 var_s4; s32 i; s32 j; s32 pad; - sp9C = this->unk_0191 + 3; if (sp9C >= ARRAY_COUNT(this->unk_3158[0])) { sp9C = 0; } @@ -1006,9 +1038,8 @@ void func_80B06F48(BossHakugin* this, PlayState* play) { } s32 func_80B0728C(BossHakugin* this) { - s16 rand; + s16 rand = (Rand_Next() >> 0x12) + 0x4000; - rand = ((Rand_Next() >> 0x12) + 0x4000); this->unk_0198 += rand; if (this->unk_01A8 == 5) { if (Math_SmoothStepToS(&this->unk_01A6, -0x900, 4, 0x200, 0x80) == 0) { @@ -1045,7 +1076,7 @@ void func_80B07450(BossHakugin* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, 0.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_ICEB_FOOTSTEP_OLD); - Math_Vec3f_Copy(&pos, &this->bodyPartsPos[D_80B0EA8C[GOHT_LIMB_FRONT_LEFT_HOOF]]); + Math_Vec3f_Copy(&pos, &this->bodyPartsPos[sLimbToBodyParts[GOHT_LIMB_FRONT_LEFT_HOOF]]); if (this->actor.xzDistToPlayer < 1500.0f) { temp = (1500.0f - this->actor.xzDistToPlayer) * (1.0f / 1500.0f); func_80B05A64(this, play, 17000, 6.5f * temp, 10); @@ -1053,13 +1084,13 @@ void func_80B07450(BossHakugin* this, PlayState* play) { func_80B06C08(this); } else if (Animation_OnFrame(&this->skelAnime, 2.0f)) { - Math_Vec3f_Copy(&pos, &this->bodyPartsPos[D_80B0EA8C[GOHT_LIMB_BACK_LEFT_HOOF]]); + Math_Vec3f_Copy(&pos, &this->bodyPartsPos[sLimbToBodyParts[GOHT_LIMB_BACK_LEFT_HOOF]]); func_80B06B20(this, &pos); } else if (Animation_OnFrame(&this->skelAnime, 3.0f)) { - Math_Vec3f_Copy(&pos, &this->bodyPartsPos[D_80B0EA8C[GOHT_LIMB_FRONT_RIGHT_HOOF]]); + Math_Vec3f_Copy(&pos, &this->bodyPartsPos[sLimbToBodyParts[GOHT_LIMB_FRONT_RIGHT_HOOF]]); func_80B06D38(this, play); } else if (Animation_OnFrame(&this->skelAnime, 11.0f)) { - Math_Vec3f_Copy(&pos, &this->bodyPartsPos[D_80B0EA8C[GOHT_LIMB_BACK_RIGHT_HOOF]]); + Math_Vec3f_Copy(&pos, &this->bodyPartsPos[sLimbToBodyParts[GOHT_LIMB_BACK_RIGHT_HOOF]]); func_80B06B20(this, &pos); } else { return; @@ -1143,7 +1174,7 @@ void func_80B07B88(BossHakugin* this, PlayState* play) { if (this->unk_0196 == 10) { this->unk_0196 = 0; this->unk_01E4 = 0.0f; - Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 3, 0.7f, 0.5f); + Actor_SpawnIceEffects(play, &this->actor, this->bodyPartsPos, GOHT_BODYPART_MAX, 3, 0.7f, 0.5f); } } @@ -2043,19 +2074,19 @@ typedef struct { static s32 D_80B0EB24[5] = { 0, 15, 26, 33, 36 }; static BossHakuginStruct_B0A8C4 D_80B0EB38[] = { - { 0, 0x28000 }, { 4, 0x1A0 }, { 7, 0x3400 }, { 0xE, 0xD0000000 }, { 0xA, 0x01A00000 }, { 1, 0x08104002 }, + { 0, GOHT_LIMB_FLAG(GOHT_LIMB_HEAD) | GOHT_LIMB_FLAG(GOHT_LIMB_JAW) }, + { 4, GOHT_LIMB_FLAG(GOHT_LIMB_FRONT_RIGHT_UPPER_LEG) | GOHT_LIMB_FLAG(GOHT_LIMB_FRONT_RIGHT_LOWER_LEG) | + GOHT_LIMB_FLAG(GOHT_LIMB_FRONT_RIGHT_HOOF) }, + { 7, GOHT_LIMB_FLAG(GOHT_LIMB_FRONT_LEFT_UPPER_LEG) | GOHT_LIMB_FLAG(GOHT_LIMB_FRONT_LEFT_LOWER_LEG) | + GOHT_LIMB_FLAG(GOHT_LIMB_FRONT_LEFT_HOOF) }, + { 14, GOHT_LIMB_FLAG(GOHT_LIMB_BACK_LEFT_SHIN) | GOHT_LIMB_FLAG(GOHT_LIMB_BACK_LEFT_PASTERN) | + GOHT_LIMB_FLAG(GOHT_LIMB_BACK_LEFT_HOOF) }, + { 10, GOHT_LIMB_FLAG(GOHT_LIMB_BACK_RIGHT_SHIN) | GOHT_LIMB_FLAG(GOHT_LIMB_BACK_RIGHT_PASTERN) | + GOHT_LIMB_FLAG(GOHT_LIMB_BACK_RIGHT_HOOF) }, + { 1, GOHT_LIMB_FLAG(GOHT_LIMB_PELVIS) | GOHT_LIMB_FLAG(GOHT_LIMB_THORAX) | + GOHT_LIMB_FLAG(GOHT_LIMB_BACK_RIGHT_THIGH) | GOHT_LIMB_FLAG(GOHT_LIMB_BACK_LEFT_THIGH) }, }; -// static BossHakuginStruct_B0A8C4 D_80B0EB38[] = { -// { 0, GOHT_LIMB_FLAG(GOHT_LIMB_HEAD) | GOHT_LIMB_FLAG(GOHT_LIMB_JAW) }, -// { 4, GOHT_LIMB_FLAG(GOHT_LIMB_FRONT_RIGHT_UPPER_LEG) | GOHT_LIMB_FLAG(GOHT_LIMB_FRONT_RIGHT_LOWER_LEG) | -// GOHT_LIMB_FLAG(GOHT_LIMB_FRONT_RIGHT_HOOF) }, { 7, GOHT_LIMB_FLAG(GOHT_LIMB_FRONT_LEFT_UPPER_LEG) | -// GOHT_LIMB_FLAG(GOHT_LIMB_FRONT_LEFT_LOWER_LEG) | GOHT_LIMB_FLAG(GOHT_LIMB_FRONT_LEFT_HOOF)}, { 14, -// GOHT_LIMB_FLAG(GOHT_LIMB_BACK_LEFT_SHIN) | GOHT_LIMB_FLAG(GOHT_LIMB_BACK_LEFT_PASTERN) | -// GOHT_LIMB_FLAG(GOHT_LIMB_BACK_LEFT_HOOF)}, { 10, GOHT_LIMB_FLAG(GOHT_LIMB_BACK_RIGHT_SHIN) | -// GOHT_LIMB_FLAG(GOHT_LIMB_BACK_RIGHT_PASTERN) | GOHT_LIMB_FLAG(GOHT_LIMB_BACK_RIGHT_HOOF)}, { 1, -// GOHT_LIMB_FLAG(GOHT_LIMB_PELVIS) | GOHT_LIMB_FLAG(GOHT_LIMB_THORAX) | GOHT_LIMB_FLAG(GOHT_LIMB_BACK_RIGHT_THIGH) -// | GOHT_LIMB_FLAG(GOHT_LIMB_BACK_LEFT_THIGH)}, -// }; + void func_80B0A8C4(BossHakugin* this, PlayState* play) { EnBom* bomb; Vec3s* test; @@ -2314,6 +2345,7 @@ void func_80B0B548(BossHakugin* this, PlayState* play) { if (unk_str->unk_14.base.atFlags & AT_HIT) { Player* player = GET_PLAYER(play); + this->unk_018C = 1; Player_PlaySfx(player, NA_SE_EN_COMMON_E_BALL_HIT); unk_str->unk_14.base.atFlags &= ~AT_HIT; @@ -2442,7 +2474,9 @@ void BossHakugin_Update(Actor* thisx, PlayState* play) { Actor_OffsetOfPointInActorCoords(&this->actor, &this->unk_044C, &player->actor.world.pos); this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 450.0f, 89.100006f, 0.0f, 0x1D); // flags + Actor_UpdateBgCheckInfo(play, &this->actor, 450.0f, 89.100006f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); func_800BE3D0(&this->actor, this->actor.shape.rot.y, &sp70); Math_ScaledStepToS(&this->actor.shape.rot.x, sp70.x, 0x100); Math_ScaledStepToS(&this->actor.shape.rot.z, sp70.z, 0x100); @@ -2535,7 +2569,7 @@ void BossHakugin_Update(Actor* thisx, PlayState* play) { s32 BossHakugin_OverrideLimbDraw(struct PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { static s32 D_80B0EB68 = 4; - static s32 D_80B0EB6C = 6; + static s32 D_80B0EB6C = GOHT_LIMB_FRONT_RIGHT_UPPER_LEG; BossHakugin* this = THIS; if (this->actionFunc == func_80B0A8C4) { @@ -2579,7 +2613,7 @@ void BossHakugin_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s s16 angle; Collider_UpdateSpheres(limbIndex, &this->unk_0484); - bodyPartIndex = D_80B0EA8C[limbIndex]; + bodyPartIndex = sLimbToBodyParts[limbIndex]; if (bodyPartIndex > BODYPART_NONE) { for (i = 0; i < ARRAY_COUNT(this->unk_04A4); i++) { if (this->unk_0484.elements[i].dim.limb == limbIndex) { @@ -2829,7 +2863,7 @@ void func_80B0CF24(BossHakugin* this, PlayState* play) { void BossHakugin_Draw(Actor* thisx, PlayState* play) { s32 pad; BossHakugin* this = THIS; - u8* tex = GRAPH_ALLOC(play->state.gfxCtx, sizeof(u8[64][64])); + u8* tex = GRAPH_ALLOC(play->state.gfxCtx, GOHT_SHADOW_TEX_SIZE); OPEN_DISPS(play->state.gfxCtx); @@ -2840,8 +2874,8 @@ void BossHakugin_Draw(Actor* thisx, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); - Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), this->unk_01DC, - this->unk_01E0, this->unk_01E4, this->unk_0196); + Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, GOHT_BODYPART_MAX, this->unk_01DC, this->unk_01E0, + this->unk_01E4, this->unk_0196); SkinMatrix_Vec3fMtxFMultXYZ(&play->viewProjectionMtxF, &this->unk_0380, &this->unk_0458); SkinMatrix_Vec3fMtxFMultXYZ(&play->viewProjectionMtxF, &this->unk_3734[0], &this->unk_0464); @@ -2880,8 +2914,42 @@ 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, 10, 0, 12, 13 }; -u8 D_80B0EC38[15] = { 1, 2, 1, 0, 3, 3, 0, 3, 3, 0, 3, 3, 0, 3, 3 }; + +static s32 sParentShadowBodyParts[GOHT_BODYPART_MAX] = { + GOHT_BODYPART_THORAX, // GOHT_BODYPART_PELVIS + BODYPART_NONE, // GOHT_BODYPART_THORAX + GOHT_BODYPART_THORAX, // GOHT_BODYPART_HEAD + GOHT_BODYPART_THORAX, // GOHT_BODYPART_FRONT_RIGHT_UPPER_LEG + GOHT_BODYPART_FRONT_RIGHT_UPPER_LEG, // GOHT_BODYPART_FRONT_RIGHT_LOWER_LEG + GOHT_BODYPART_FRONT_RIGHT_LOWER_LEG, // GOHT_BODYPART_FRONT_RIGHT_HOOF + GOHT_BODYPART_THORAX, // GOHT_BODYPART_FRONT_LEFT_UPPER_LEG + GOHT_BODYPART_FRONT_LEFT_UPPER_LEG, // GOHT_BODYPART_FRONT_LEFT_LOWER_LEG + GOHT_BODYPART_FRONT_LEFT_LOWER_LEG, // GOHT_BODYPART_FRONT_LEFT_HOOF + GOHT_BODYPART_PELVIS, // GOHT_BODYPART_BACK_RIGHT_THIGH + GOHT_BODYPART_BACK_RIGHT_THIGH, // GOHT_BODYPART_BACK_RIGHT_SHIN + GOHT_BODYPART_BACK_RIGHT_SHIN, // GOHT_BODYPART_BACK_RIGHT_HOOF + GOHT_BODYPART_PELVIS, // GOHT_BODYPART_BACK_LEFT_THIGH + GOHT_BODYPART_BACK_LEFT_THIGH, // GOHT_BODYPART_BACK_LEFT_SHIN + GOHT_BODYPART_BACK_LEFT_SHIN // GOHT_BODYPART_BACK_LEFT_HOOF +}; + +static u8 sShadowSizes[GOHT_BODYPART_MAX] = { + 1, // GOHT_BODYPART_PELVIS + 2, // GOHT_BODYPART_THORAX + 1, // GOHT_BODYPART_HEAD + 0, // GOHT_BODYPART_FRONT_RIGHT_UPPER_LEG + 3, // GOHT_BODYPART_FRONT_RIGHT_LOWER_LEG + 3, // GOHT_BODYPART_FRONT_RIGHT_HOOF + 0, // GOHT_BODYPART_FRONT_LEFT_UPPER_LEG + 3, // GOHT_BODYPART_FRONT_LEFT_LOWER_LEG + 3, // GOHT_BODYPART_FRONT_LEFT_HOOF + 0, // GOHT_BODYPART_BACK_RIGHT_THIGH + 3, // GOHT_BODYPART_BACK_RIGHT_SHIN + 3, // GOHT_BODYPART_BACK_RIGHT_HOOF + 0, // GOHT_BODYPART_BACK_LEFT_THIGH + 3, // GOHT_BODYPART_BACK_LEFT_SHIN + 3 // GOHT_BODYPART_BACK_LEFT_HOOF +}; void BossHakugin_FillShadowTex(BossHakugin* this, u8* tex, f32 weight) { s32 index; @@ -2890,15 +2958,15 @@ void BossHakugin_FillShadowTex(BossHakugin* this, u8* tex, f32 weight) { s32 baseY; s32 addY; s32 x; - s32 y = -1; + s32 y = BODYPART_NONE; Vec3f lerp; Vec3f* parentBodyPartPos; Vec3f* bodyPartPos; Vec3f pos; Vec3f startVec; - for (i = 0; i < ARRAY_COUNT(this->bodyPartsPos); i++) { - if ((weight == 0.0f) || (y = D_80B0EBFC[i]) > BODYPART_NONE) { + for (i = 0; i < GOHT_BODYPART_MAX; i++) { + if ((weight == 0.0f) || (y = sParentShadowBodyParts[i]) > BODYPART_NONE) { bodyPartPos = &this->bodyPartsPos[i]; if (weight > 0.0f) { parentBodyPartPos = &this->bodyPartsPos[y]; @@ -2921,29 +2989,29 @@ void BossHakugin_FillShadowTex(BossHakugin* this, u8* tex, f32 weight) { baseX = (u16)(s32)(startVec.x + 32.0f); baseY = (u16)((s32)startVec.y * 64); - if (D_80B0EC38[i] == 2) { + if (sShadowSizes[i] == 2) { for (y = 0, addY = -0x180; y < ARRAY_COUNT(D_80B0EBC4); y++, addY += 0x40) { for (x = -D_80B0EBC4[y]; x < D_80B0EBC4[y]; x++) { index = baseX + x + baseY + addY; - if ((index >= 0) && (index < 0x1000)) { + if ((index >= 0) && (index < GOHT_SHADOW_TEX_SIZE)) { tex[index] = 255; } } } - } else if (D_80B0EC38[i] == 1) { + } else if (sShadowSizes[i] == 1) { for (y = 0, addY = -0x100; y < ARRAY_COUNT(D_80B0EBA4); y++, addY += 0x40) { for (x = -D_80B0EBA4[y]; x < D_80B0EBA4[y]; x++) { index = baseX + x + baseY + addY; - if ((index >= 0) && (index < 0x1000)) { + if ((index >= 0) && (index < GOHT_SHADOW_TEX_SIZE)) { tex[index] = 255; } } } - } else if (D_80B0EC38[i] == 0) { + } else if (sShadowSizes[i] == 0) { for (y = 0, addY = -0xC0; y < ARRAY_COUNT(D_80B0EB88); y++, addY += 0x40) { for (x = -D_80B0EB88[y]; x < D_80B0EB88[y]; x++) { index = baseX + x + baseY + addY; - if ((index >= 0) && (index < 0x1000)) { + if ((index >= 0) && (index < GOHT_SHADOW_TEX_SIZE)) { tex[index] = 255; } } @@ -2952,7 +3020,7 @@ void BossHakugin_FillShadowTex(BossHakugin* this, u8* tex, f32 weight) { for (y = 0, addY = -0x80; y < ARRAY_COUNT(D_80B0EB70); y++, addY += 0x40) { for (x = -D_80B0EB70[y]; x < D_80B0EB70[y]; x++) { index = baseX + x + baseY + addY; - if ((index >= 0) && (index < 0x1000)) { + if ((index >= 0) && (index < GOHT_SHADOW_TEX_SIZE)) { tex[index] = 255; } } @@ -2966,7 +3034,7 @@ void BossHakugin_GenShadowTex(u8* tex, BossHakugin* this) { s32* iter = (s32*)tex; s16 i; - for (i = 0; i < (s32)((sizeof(u8[64][64])) / sizeof(s32)); i++, iter++) { + for (i = 0; i < (s32)(GOHT_SHADOW_TEX_SIZE / sizeof(s32)); i++, iter++) { *iter = 0; } @@ -3003,8 +3071,8 @@ void BossHakugin_DrawShadowTex(u8* tex, BossHakugin* this, PlayState* play) { Matrix_Scale(4.25f, 1.0f, 4.25f, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gShadowMaterialDL); - gDPLoadTextureBlock(POLY_OPA_DISP++, tex, G_IM_FMT_I, G_IM_SIZ_8b, 64, 64, 0, G_TX_NOMIRROR | G_TX_CLAMP, - G_TX_NOMIRROR | G_TX_CLAMP, 6, 6, G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTextureBlock(POLY_OPA_DISP++, tex, G_IM_FMT_I, G_IM_SIZ_8b, GOHT_SHADOW_TEX_WIDTH, GOHT_SHADOW_TEX_HEIGHT, 0, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 6, 6, G_TX_NOLOD, G_TX_NOLOD); gSPDisplayList(POLY_OPA_DISP++, gShadowModelDL); CLOSE_DISPS(gfxCtx); diff --git a/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.h b/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.h index 3d9d80986..cd38dc044 100644 --- a/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.h +++ b/src/overlays/actors/ovl_Boss_Hakugin/z_boss_hakugin.h @@ -6,6 +6,10 @@ struct BossHakugin; +#define GOHT_SHADOW_TEX_WIDTH 64 +#define GOHT_SHADOW_TEX_HEIGHT 64 +#define GOHT_SHADOW_TEX_SIZE ((s32)sizeof(u8[GOHT_SHADOW_TEX_HEIGHT][GOHT_SHADOW_TEX_WIDTH])) + typedef void (*BossHakuginActionFunc)(struct BossHakugin*, PlayState*); typedef struct BossHakuginEffect { @@ -34,6 +38,25 @@ typedef struct BossHakuginFhgFlashUnkStruct { /* 0x12 */ s16 unk_12; } BossHakuginFhgFlashUnkStruct; // size = 0x14 +typedef enum GohtBodyPart { + /* 0 */ GOHT_BODYPART_PELVIS, + /* 1 */ GOHT_BODYPART_THORAX, + /* 2 */ GOHT_BODYPART_HEAD, + /* 3 */ GOHT_BODYPART_FRONT_RIGHT_UPPER_LEG, + /* 4 */ GOHT_BODYPART_FRONT_RIGHT_LOWER_LEG, + /* 5 */ GOHT_BODYPART_FRONT_RIGHT_HOOF, + /* 6 */ GOHT_BODYPART_FRONT_LEFT_UPPER_LEG, + /* 7 */ GOHT_BODYPART_FRONT_LEFT_LOWER_LEG, + /* 8 */ GOHT_BODYPART_FRONT_LEFT_HOOF, + /* 9 */ GOHT_BODYPART_BACK_RIGHT_THIGH, + /* 10 */ GOHT_BODYPART_BACK_RIGHT_SHIN, + /* 11 */ GOHT_BODYPART_BACK_RIGHT_HOOF, + /* 12 */ GOHT_BODYPART_BACK_LEFT_THIGH, + /* 13 */ GOHT_BODYPART_BACK_LEFT_SHIN, + /* 14 */ GOHT_BODYPART_BACK_LEFT_HOOF, + /* 15 */ GOHT_BODYPART_MAX +} GohtBodyPart; + typedef struct BossHakugin { /* 0x0000 */ Actor actor; /* 0x0144 */ SkelAnime skelAnime; @@ -81,7 +104,7 @@ typedef struct BossHakugin { /* 0x037A */ Vec3s unk_037A; /* 0x0380 */ Vec3f unk_0380; /* 0x038C */ Vec3f unk_038C; - /* 0x0398 */ Vec3f bodyPartsPos[15]; + /* 0x0398 */ Vec3f bodyPartsPos[GOHT_BODYPART_MAX]; /* 0x044C */ Vec3f unk_044C; /* 0x0458 */ Vec3f unk_0458; /* 0x0464 */ Vec3f unk_0464; diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 1711af990..b59c0be52 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -13444,7 +13444,7 @@ 0x80B0EA60:("D_80B0EA60","UNK_TYPE1","",0x1), 0x80B0EA80:("D_80B0EA80","UNK_TYPE1","",0x1), 0x80B0EA88:("D_80B0EA88","UNK_TYPE4","",0x4), - 0x80B0EA8C:("D_80B0EA8C","s8","[]", 0x20), + 0x80B0EA8C:("sLimbToBodyParts","s8","[]", 0x20), 0x80B0EAAC:("D_80B0EAAC","UNK_TYPE1","",0x1), 0x80B0EAB0:("D_80B0EAB0","UNK_TYPE1","",0x1), 0x80B0EAC4:("D_80B0EAC4","UNK_TYPE1","",0x1), @@ -13467,8 +13467,8 @@ 0x80B0EB88:("D_80B0EB88","UNK_TYPE4","",0x4), 0x80B0EBA4:("D_80B0EBA4","UNK_TYPE4","",0x4), 0x80B0EBC4:("D_80B0EBC4","UNK_TYPE4","",0x4), - 0x80B0EBFC:("D_80B0EBFC","UNK_TYPE4","",0x4), - 0x80B0EC38:("D_80B0EC38","UNK_TYPE1","",0x1), + 0x80B0EBFC:("sParentShadowBodyParts","UNK_TYPE4","",0x4), + 0x80B0EC38:("sShadowSizes","UNK_TYPE1","",0x1), 0x80B0EC50:("D_80B0EC50","f32","",0x4), 0x80B0EC54:("D_80B0EC54","f32","",0x4), 0x80B0EC58:("D_80B0EC58","f32","",0x4), |
