Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit c5d1711

Browse files
committedNov 23, 2023
Skeleton Fixes for various bosses and enemies
1 parent 2075213 commit c5d1711

File tree

27 files changed

+126
-51
lines changed

27 files changed

+126
-51
lines changed
 

‎soh/include/functions.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,7 @@ s16 func_80032CB4(s16* arg0, s16 arg1, s16 arg2, s16 arg3);
503503
void BodyBreak_Alloc(BodyBreak* bodyBreak, s32 count, PlayState* play);
504504
void BodyBreak_SetInfo(BodyBreak* bodyBreak, s32 limbIndex, s32 minLimbIndex, s32 maxLimbIndex, u32 count, Gfx** dList,
505505
s16 objectId);
506-
s32 BodyBreak_SpawnParts(Actor* actor, BodyBreak* bodyBreak, PlayState* play, s16 type);
506+
s32 BodyBreak_SpawnParts(Actor* actor, BodyBreak* bodyBreak, PlayState* play, s16 type, bool isFlex);
507507
void Actor_SpawnFloorDustRing(PlayState* play, Actor* actor, Vec3f* posXZ, f32 radius, s32 amountMinusOne,
508508
f32 randAccelWeight, s16 scale, s16 scaleStep, u8 useLighting);
509509
void func_80033480(PlayState* play, Vec3f* posBase, f32 randRangeDiameter, s32 amountMinusOne, s16 scaleBase,
@@ -1259,6 +1259,8 @@ void SkelAnime_DrawFlexLod(PlayState* play, void** skeleton, Vec3s* jointTable,
12591259
s32 dListIndex);
12601260
void SkelAnime_DrawSkeletonOpa(PlayState* play, SkelAnime* skelAnime, OverrideLimbDrawOpa overrideLimbDraw,
12611261
PostLimbDrawOpa postLimbDraw, void* arg);
1262+
Gfx* SkelAnime_DrawSkeleton2(PlayState* play, SkelAnime* skelAnime, OverrideLimbDrawOpa overrideLimbDraw,
1263+
PostLimbDrawOpa postLimbDraw, void* arg, Gfx* gfx);
12621264
void SkelAnime_DrawOpa(PlayState* play, void** skeleton, Vec3s* jointTable,
12631265
OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, void* arg);
12641266
void SkelAnime_DrawFlexOpa(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount,

‎soh/include/z64.h

+4
Original file line numberDiff line numberDiff line change
@@ -1402,6 +1402,10 @@ typedef struct PlayState {
14021402
/* 0x1242B */ u8 unk_1242B;
14031403
/* 0x1242C */ SceneTableEntry* loadedScene;
14041404
/* 0x12430 */ char unk_12430[0xE8];
1405+
1406+
1407+
Mtx** flexLimbOverrideMTX;
1408+
14051409
} PlayState; // size = 0x12518
14061410

14071411
typedef struct {

‎soh/src/code/z_actor.c

+6-3
Original file line numberDiff line numberDiff line change
@@ -3555,7 +3555,7 @@ void BodyBreak_SetInfo(BodyBreak* bodyBreak, s32 limbIndex, s32 minLimbIndex, s3
35553555
bodyBreak->prevLimbIndex = limbIndex;
35563556
}
35573557

3558-
s32 BodyBreak_SpawnParts(Actor* actor, BodyBreak* bodyBreak, PlayState* play, s16 type) {
3558+
s32 BodyBreak_SpawnParts(Actor* actor, BodyBreak* bodyBreak, PlayState* play, s16 type, bool isFlex) {
35593559
EnPart* spawnedEnPart;
35603560
MtxF* mtx;
35613561
s16 objBankIndex;
@@ -3582,8 +3582,11 @@ s32 BodyBreak_SpawnParts(Actor* actor, BodyBreak* bodyBreak, PlayState* play, s1
35823582
spawnedEnPart = (EnPart*)Actor_SpawnAsChild(&play->actorCtx, actor, play, ACTOR_EN_PART, mtx->xw,
35833583
mtx->yw, mtx->zw, 0, 0, objBankIndex, type);
35843584

3585-
if (spawnedEnPart != NULL) {
3586-
Matrix_MtxFToYXZRotS(&bodyBreak->matrices[bodyBreak->count], &spawnedEnPart->actor.shape.rot, 0);
3585+
if (spawnedEnPart != NULL)
3586+
{
3587+
if (!isFlex)
3588+
Matrix_MtxFToYXZRotS(&bodyBreak->matrices[bodyBreak->count], &spawnedEnPart->actor.shape.rot, 0);
3589+
35873590
spawnedEnPart->displayList = bodyBreak->dLists[bodyBreak->count];
35883591
spawnedEnPart->actor.scale = actor->scale;
35893592
}

‎soh/src/code/z_skelanime.c

+20
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ void SkelAnime_DrawFlexLimbLod(PlayState* play, s32 limbIndex, void** skeleton,
144144

145145
newDList = limbDList = limb->dLists[lod];
146146

147+
play->flexLimbOverrideMTX = mtx;
148+
147149
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &newDList, &pos, &rot, arg)) {
148150
Matrix_TranslateRotateZYX(&pos, &rot);
149151
if (newDList != NULL) {
@@ -212,6 +214,8 @@ void SkelAnime_DrawFlexLod(PlayState* play, void** skeleton, Vec3s* jointTable,
212214

213215
newDList = limbDList = rootLimb->dLists[lod];
214216

217+
play->flexLimbOverrideMTX = &mtx;
218+
215219
if ((overrideLimbDraw == 0) || !overrideLimbDraw(play, 1, &newDList, &pos, &rot, arg)) {
216220
Matrix_TranslateRotateZYX(&pos, &rot);
217221
if (newDList != NULL) {
@@ -298,6 +302,20 @@ void SkelAnime_DrawSkeletonOpa(PlayState* play, SkelAnime* skelAnime, OverrideLi
298302
}
299303
}
300304

305+
Gfx* SkelAnime_DrawSkeleton2(PlayState* play, SkelAnime* skelAnime, OverrideLimbDrawOpa overrideLimbDraw,
306+
PostLimbDrawOpa postLimbDraw, void* arg, Gfx* gfx)
307+
{
308+
if (skelAnime->skeletonHeader->skeletonType == SKELANIME_TYPE_NORMAL) {
309+
return SkelAnime_Draw(play, skelAnime->skeleton, skelAnime->jointTable, overrideLimbDraw, postLimbDraw, arg, gfx);
310+
} else if (skelAnime->skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
311+
FlexSkeletonHeader* flexHeader = (FlexSkeletonHeader*)skelAnime->skeletonHeader;
312+
return SkelAnime_DrawFlex(play, skelAnime->skeleton, skelAnime->jointTable, flexHeader->dListCount,
313+
overrideLimbDraw, postLimbDraw, arg, gfx);
314+
}
315+
316+
return gfx;
317+
}
318+
301319
/**
302320
* Draw all limbs of type `StandardLimb` in a given skeleton to the polyOpa buffer
303321
*/
@@ -375,6 +393,8 @@ void SkelAnime_DrawFlexLimbOpa(PlayState* play, s32 limbIndex, void** skeleton,
375393

376394
newDList = limbDList = limb->dList;
377395

396+
play->flexLimbOverrideMTX = limbMatricies;
397+
378398
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &newDList, &pos, &rot, arg)) {
379399
Matrix_TranslateRotateZYX(&pos, &rot);
380400
if (newDList != NULL) {

‎soh/src/overlays/actors/ovl_Boss_Dodongo/z_boss_dodongo.c

+18-2
Original file line numberDiff line numberDiff line change
@@ -1071,6 +1071,9 @@ s32 BossDodongo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve
10711071
f32 mtxScaleY;
10721072
f32 mtxScaleZ;
10731073
BossDodongo* this = (BossDodongo*)thisx;
1074+
1075+
1076+
10741077

10751078
// required for matching
10761079
if ((limbIndex == 6) || (limbIndex == 7)) {
@@ -1083,6 +1086,10 @@ s32 BossDodongo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve
10831086
if (*dList != NULL) {
10841087
OPEN_DISPS(play->state.gfxCtx);
10851088

1089+
if (this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)
1090+
MATRIX_TOMTX(*play->flexLimbOverrideMTX);
1091+
1092+
10861093
mtxScaleZ = 1.0f;
10871094
mtxScaleY = 1.0f;
10881095

@@ -1103,12 +1110,21 @@ s32 BossDodongo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve
11031110
Matrix_RotateX(-(this->unk_25C[limbIndex] * 0.115f), MTXMODE_APPLY);
11041111
}
11051112

1106-
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
1107-
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
1113+
1114+
if (this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)
1115+
gSPMatrix(POLY_OPA_DISP++, *play->flexLimbOverrideMTX, G_MTX_LOAD);
1116+
else
1117+
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
1118+
11081119
gSPDisplayList(POLY_OPA_DISP++, *dList);
11091120
Matrix_Pop();
11101121

1122+
if (this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)
1123+
(*play->flexLimbOverrideMTX)++;
1124+
11111125
CLOSE_DISPS(play->state.gfxCtx);
1126+
1127+
11121128
}
11131129
{ s32 pad; } // Required to match
11141130
return 1;

‎soh/src/overlays/actors/ovl_Boss_Goma/z_boss_goma.c

+27-6
Original file line numberDiff line numberDiff line change
@@ -2014,13 +2014,25 @@ s32 BossGoma_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
20142014

20152015
Matrix_TranslateRotateZYX(pos, rot);
20162016

2017-
if (*dList != NULL) {
2017+
if (*dList != NULL)
2018+
{
2019+
if (this->skelanime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)
2020+
MATRIX_TOMTX(*play->flexLimbOverrideMTX);
2021+
2022+
20182023
Matrix_Push();
20192024
Matrix_Scale(this->eyeIrisScaleX, this->eyeIrisScaleY, 1.0f, MTXMODE_APPLY);
2020-
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
2021-
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
2025+
2026+
if (this->skelanime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)
2027+
gSPMatrix(POLY_OPA_DISP++, *play->flexLimbOverrideMTX, G_MTX_LOAD);
2028+
else
2029+
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
2030+
20222031
gSPDisplayList(POLY_OPA_DISP++, *dList);
20232032
Matrix_Pop();
2033+
2034+
if (this->skelanime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)
2035+
(*play->flexLimbOverrideMTX)++;
20242036
}
20252037

20262038
doNotDrawLimb = true;
@@ -2033,15 +2045,24 @@ s32 BossGoma_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
20332045
case BOSSGOMA_LIMB_TAIL1:
20342046
Matrix_TranslateRotateZYX(pos, rot);
20352047

2036-
if (*dList != NULL) {
2048+
if (*dList != NULL)
2049+
{
2050+
MATRIX_TOMTX(*play->flexLimbOverrideMTX);
2051+
20372052
Matrix_Push();
20382053
Matrix_Scale(this->tailLimbsScale[limbIndex - BOSSGOMA_LIMB_TAIL4],
20392054
this->tailLimbsScale[limbIndex - BOSSGOMA_LIMB_TAIL4],
20402055
this->tailLimbsScale[limbIndex - BOSSGOMA_LIMB_TAIL4], MTXMODE_APPLY);
2041-
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
2042-
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
2056+
2057+
//gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
2058+
//G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
2059+
2060+
gSPMatrix(POLY_OPA_DISP++, *play->flexLimbOverrideMTX, G_MTX_LOAD);
2061+
20432062
gSPDisplayList(POLY_OPA_DISP++, *dList);
20442063
Matrix_Pop();
2064+
2065+
(*play->flexLimbOverrideMTX)++;
20452066
}
20462067

20472068
doNotDrawLimb = true;

‎soh/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -1055,7 +1055,7 @@ void DoorWarp1_DrawBlueCrystal(DoorWarp1* this, PlayState* play) {
10551055
gDPSetPrimColor(POLY_XLU_DISP++, 0xFF, 0xFF, 200, 255, 255, (u8)this->crystalAlpha);
10561056
gDPSetEnvColor(POLY_XLU_DISP++, 0, 100, 255, (u8)this->crystalAlpha);
10571057

1058-
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL,
1058+
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime, NULL, NULL,
10591059
&this->actor, POLY_XLU_DISP);
10601060

10611061
CLOSE_DISPS(play->state.gfxCtx);
@@ -1079,7 +1079,7 @@ void DoorWarp1_DrawPurpleCrystal(DoorWarp1* this, PlayState* play) {
10791079
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (u8)this->crystalAlpha);
10801080
gDPSetEnvColor(POLY_XLU_DISP++, 150, 0, 100, (u8)this->crystalAlpha);
10811081

1082-
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL,
1082+
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime, NULL, NULL,
10831083
&this->actor, POLY_XLU_DISP);
10841084

10851085
CLOSE_DISPS(play->state.gfxCtx);

‎soh/src/overlays/actors/ovl_En_Bb/z_en_bb.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,8 @@ void EnBb_Death(EnBb* this, PlayState* play) {
491491
enpartType = 11;
492492
}
493493

494-
if (!BodyBreak_SpawnParts(&this->actor, &this->bodyBreak, play, enpartType)) {
494+
if (!BodyBreak_SpawnParts(&this->actor, &this->bodyBreak, play, enpartType,
495+
this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)) {
495496
return;
496497
}
497498
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0xD0);

‎soh/src/overlays/actors/ovl_En_Bili/z_en_bili.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,7 @@ void EnBili_Draw(Actor* thisx, PlayState* play) {
768768
gSPSegment(POLY_XLU_DISP++, 0x09, D_809C1700);
769769
}
770770

771-
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
771+
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
772772
EnBili_OverrideLimbDraw, NULL, this, POLY_XLU_DISP);
773773
CLOSE_DISPS(play->state.gfxCtx);
774774
}

‎soh/src/overlays/actors/ovl_En_Box/z_en_box.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -948,7 +948,7 @@ void EnBox_Draw(Actor* thisx, PlayState* play) {
948948
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
949949
gSPSegment(POLY_OPA_DISP++, 0x08, EnBox_EmptyDList(play->state.gfxCtx));
950950
Gfx_SetupDL_25Opa(play->state.gfxCtx);
951-
POLY_OPA_DISP = SkelAnime_Draw(play, this->skelanime.skeleton, this->skelanime.jointTable, NULL,
951+
POLY_OPA_DISP = SkelAnime_DrawSkeleton2(play, &this->skelanime, NULL,
952952
EnBox_PostLimbDraw, this, POLY_OPA_DISP);
953953
} else if (this->alpha != 0) {
954954
gDPPipeSync(POLY_XLU_DISP++);
@@ -959,7 +959,7 @@ void EnBox_Draw(Actor* thisx, PlayState* play) {
959959
} else {
960960
gSPSegment(POLY_XLU_DISP++, 0x08, func_809CA4A0(play->state.gfxCtx));
961961
}
962-
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelanime.skeleton, this->skelanime.jointTable, NULL,
962+
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelanime, NULL,
963963
EnBox_PostLimbDraw, this, POLY_XLU_DISP);
964964
}
965965

‎soh/src/overlays/actors/ovl_En_Bw/z_en_bw.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -856,15 +856,15 @@ void EnBw_Draw(Actor* thisx, PlayState* play2) {
856856
Gfx_SetupDL_25Opa(play->state.gfxCtx);
857857
gDPSetEnvColor(POLY_OPA_DISP++, this->color1.r, this->color1.g, this->color1.b, this->color1.a);
858858
gSPSegment(POLY_OPA_DISP++, 0x08, &D_80116280[2]);
859-
POLY_OPA_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
859+
POLY_OPA_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
860860
EnBw_OverrideLimbDraw, NULL, this, POLY_OPA_DISP);
861861
} else {
862862
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
863863
gDPPipeSync(POLY_XLU_DISP++);
864864
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 0, 0, 0, this->color1.a);
865865
gDPSetEnvColor(POLY_XLU_DISP++, this->color1.r, this->color1.g, this->color1.b, this->color1.a);
866866
gSPSegment(POLY_XLU_DISP++, 0x08, &D_80116280[0]);
867-
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
867+
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
868868
EnBw_OverrideLimbDraw, NULL, this, POLY_XLU_DISP);
869869
}
870870

‎soh/src/overlays/actors/ovl_En_Eiyer/z_en_eiyer.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -708,14 +708,14 @@ void EnEiyer_Draw(Actor* thisx, PlayState* play) {
708708
gSPSegment(POLY_OPA_DISP++, 0x08, &D_80116280[2]);
709709
gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
710710

711-
POLY_OPA_DISP = SkelAnime_Draw(play, this->skelanime.skeleton, this->skelanime.jointTable,
711+
POLY_OPA_DISP = SkelAnime_DrawSkeleton2(play, &this->skelanime,
712712
EnEiyer_OverrideLimbDraw, NULL, this, POLY_OPA_DISP);
713713
} else {
714714
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
715715
gSPSegment(POLY_XLU_DISP++, 0x08, D_80116280);
716716
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->actor.shape.shadowAlpha);
717717

718-
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelanime.skeleton, this->skelanime.jointTable,
718+
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelanime,
719719
EnEiyer_OverrideLimbDraw, NULL, this, POLY_XLU_DISP);
720720
}
721721
CLOSE_DISPS(play->state.gfxCtx);

‎soh/src/overlays/actors/ovl_En_Elf/z_en_elf.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1540,7 +1540,7 @@ void EnElf_Draw(Actor* thisx, PlayState* play) {
15401540
gSPEndDisplayList(dListHead++);
15411541
gDPSetEnvColor(POLY_XLU_DISP++, (u8)this->outerColor.r, (u8)this->outerColor.g, (u8)this->outerColor.b,
15421542
(u8)(envAlpha * alphaScale));
1543-
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
1543+
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
15441544
EnElf_OverrideLimbDraw, NULL, this, POLY_XLU_DISP);
15451545

15461546
CLOSE_DISPS(play->state.gfxCtx);

‎soh/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c

+4-3
Original file line numberDiff line numberDiff line change
@@ -837,8 +837,9 @@ void EnFirefly_Draw(Actor* thisx, PlayState* play) {
837837
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
838838
}
839839

840-
POLY_OPA_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
841-
EnFirefly_OverrideLimbDraw, EnFirefly_PostLimbDraw, &this->actor, POLY_OPA_DISP);
840+
POLY_OPA_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime, EnFirefly_OverrideLimbDraw, EnFirefly_PostLimbDraw,
841+
&this->actor, POLY_OPA_DISP);
842+
842843
CLOSE_DISPS(play->state.gfxCtx);
843844
}
844845

@@ -854,7 +855,7 @@ void EnFirefly_DrawInvisible(Actor* thisx, PlayState* play) {
854855
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 255);
855856
}
856857

857-
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
858+
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
858859
EnFirefly_OverrideLimbDraw, EnFirefly_PostLimbDraw, this, POLY_XLU_DISP);
859860
CLOSE_DISPS(play->state.gfxCtx);
860861
}

‎soh/src/overlays/actors/ovl_En_Ik/z_en_ik.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -617,7 +617,8 @@ void func_80A75790(EnIk* this) {
617617

618618
void func_80A758B0(EnIk* this, PlayState* play) {
619619
Math_SmoothStepToF(&this->actor.speedXZ, 0.0f, 1.0f, 1.0f, 0.0f);
620-
if (BodyBreak_SpawnParts(&this->actor, &this->bodyBreak, play, this->actor.params + 4)) {
620+
if (BodyBreak_SpawnParts(&this->actor, &this->bodyBreak, play, this->actor.params + 4,
621+
this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)) {
621622
this->bodyBreak.val = BODYBREAK_STATUS_FINISHED;
622623
}
623624
if (SkelAnime_Update(&this->skelAnime)) {

‎soh/src/overlays/actors/ovl_En_Partner/z_en_partner.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -858,7 +858,7 @@ void EnPartner_Draw(Actor* thisx, PlayState* play) {
858858
gSPEndDisplayList(dListHead++);
859859
gDPSetEnvColor(POLY_XLU_DISP++, (u8)this->outerColor.r, (u8)this->outerColor.g, (u8)this->outerColor.b,
860860
(u8)(envAlpha * alphaScale));
861-
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
861+
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
862862
EnPartner_OverrideLimbDraw, NULL, this, POLY_XLU_DISP);
863863

864864
CLOSE_DISPS(play->state.gfxCtx);

‎soh/src/overlays/actors/ovl_En_Po_Desert/z_en_po_desert.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ void EnPoDesert_Draw(Actor* thisx, PlayState* play) {
267267
} else {
268268
gSPSegment(POLY_XLU_DISP++, 0x0C, D_80116280 + 2);
269269
}
270-
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
270+
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
271271
EnPoDesert_OverrideLimbDraw, EnPoDesert_PostLimbDraw, &this->actor, POLY_XLU_DISP);
272272
CLOSE_DISPS(play->state.gfxCtx);
273273
}

‎soh/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c

+2-3
Original file line numberDiff line numberDiff line change
@@ -944,15 +944,14 @@ void EnPoField_Draw(Actor* thisx, PlayState* play) {
944944
this->lightColor.a));
945945
gSPSegment(POLY_OPA_DISP++, 0x0C, D_80116280 + 2);
946946
POLY_OPA_DISP =
947-
SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
947+
SkelAnime_DrawSkeleton2(play, &this->skelAnime,
948948
EnPoField_OverrideLimbDraw2, EnPoField_PostLimDraw2, &this->actor, POLY_OPA_DISP);
949949
} else {
950950
gSPSegment(POLY_XLU_DISP++, 0x08,
951951
Gfx_EnvColor(play->state.gfxCtx, this->lightColor.r, this->lightColor.g, this->lightColor.b,
952952
this->lightColor.a));
953953
gSPSegment(POLY_XLU_DISP++, 0x0C, D_80116280);
954-
POLY_XLU_DISP =
955-
SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
954+
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
956955
EnPoField_OverrideLimbDraw2, EnPoField_PostLimDraw2, &this->actor, POLY_XLU_DISP);
957956
}
958957
gDPPipeSync(POLY_OPA_DISP++);

‎soh/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c

+3-5
Original file line numberDiff line numberDiff line change
@@ -1373,14 +1373,12 @@ void EnPoSisters_Draw(Actor* thisx, PlayState* play) {
13731373
if (this->unk_22E.a == 255 || this->unk_22E.a == 0) {
13741374
gDPSetEnvColor(POLY_OPA_DISP++, this->unk_22E.r, this->unk_22E.g, this->unk_22E.b, this->unk_22E.a);
13751375
gSPSegment(POLY_OPA_DISP++, 0x09, D_80116280 + 2);
1376-
POLY_OPA_DISP =
1377-
SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
1378-
EnPoSisters_OverrideLimbDraw, EnPoSisters_PostLimbDraw, &this->actor, POLY_OPA_DISP);
1376+
POLY_OPA_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime, EnPoSisters_OverrideLimbDraw,
1377+
EnPoSisters_PostLimbDraw, &this->actor, POLY_OPA_DISP);
13791378
} else {
13801379
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->unk_22E.a);
13811380
gSPSegment(POLY_XLU_DISP++, 0x09, D_80116280);
1382-
POLY_XLU_DISP =
1383-
SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
1381+
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
13841382
EnPoSisters_OverrideLimbDraw, EnPoSisters_PostLimbDraw, &this->actor, POLY_XLU_DISP);
13851383
}
13861384
if (!(this->unk_199 & 0x80)) {

‎soh/src/overlays/actors/ovl_En_Poh/z_en_poh.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -1085,12 +1085,12 @@ void EnPoh_DrawRegular(Actor* thisx, PlayState* play) {
10851085
if (this->lightColor.a == 255 || this->lightColor.a == 0) {
10861086
gDPSetEnvColor(POLY_OPA_DISP++, this->lightColor.r, this->lightColor.g, this->lightColor.b, this->lightColor.a);
10871087
gSPSegment(POLY_OPA_DISP++, 0x08, D_80116280 + 2);
1088-
POLY_OPA_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
1088+
POLY_OPA_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
10891089
EnPoh_OverrideLimbDraw, EnPoh_PostLimbDraw, &this->actor, POLY_OPA_DISP);
10901090
} else {
10911091
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->lightColor.a);
10921092
gSPSegment(POLY_XLU_DISP++, 0x08, D_80116280);
1093-
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
1093+
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
10941094
EnPoh_OverrideLimbDraw, EnPoh_PostLimbDraw, &this->actor, POLY_XLU_DISP);
10951095
}
10961096
gDPPipeSync(POLY_OPA_DISP++);

‎soh/src/overlays/actors/ovl_En_Sb/z_en_sb.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,8 @@ void EnSb_Update(Actor* thisx, PlayState* play) {
451451
} else {
452452
this->actor.params = 1;
453453
}
454-
if (BodyBreak_SpawnParts(&this->actor, &this->bodyBreak, play, this->actor.params)) {
454+
if (BodyBreak_SpawnParts(&this->actor, &this->bodyBreak, play, this->actor.params,
455+
this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)) {
455456
if (!this->hitByWindArrow) {
456457
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x80);
457458
} else {

‎soh/src/overlays/actors/ovl_En_Skb/z_en_skb.c

+5-2
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,9 @@ void func_80AFD6CC(EnSkb* this, PlayState* play) {
384384
u8* new_var;
385385

386386
new_var = &this->unk_283;
387-
if ((this->unk_283 != 1) || BodyBreak_SpawnParts(&this->actor, &this->bodyBreak, play, 1)) {
387+
if ((this->unk_283 != 1) ||
388+
BodyBreak_SpawnParts(&this->actor, &this->bodyBreak, play, 1,
389+
this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)) {
388390
if ((*new_var) != 0) {
389391
this->unk_283 = (*new_var) | 2;
390392
}
@@ -421,7 +423,8 @@ void func_80AFD7B4(EnSkb* this, PlayState* play) {
421423
}
422424

423425
void func_80AFD880(EnSkb* this, PlayState* play) {
424-
if (BodyBreak_SpawnParts(&this->actor, &this->bodyBreak, play, 1)) {
426+
if (BodyBreak_SpawnParts(&this->actor, &this->bodyBreak, play, 1,
427+
this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)) {
425428
if (this->actor.scale.x == 0.01f) {
426429
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x10);
427430
} else if (this->actor.scale.x <= 0.015f) {

‎soh/src/overlays/actors/ovl_En_Test/z_en_test.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -1504,7 +1504,8 @@ void func_80862E6C(EnTest* this, PlayState* play) {
15041504
this->actor.home.rot.x = this->bodyBreak.count;
15051505
}
15061506

1507-
if (BodyBreak_SpawnParts(&this->actor, &this->bodyBreak, play, this->actor.params + 8)) {
1507+
if (BodyBreak_SpawnParts(&this->actor, &this->bodyBreak, play, this->actor.params + 8,
1508+
this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)) {
15081509
this->actor.child = &this->actor;
15091510
}
15101511
} else {
@@ -1630,7 +1631,8 @@ void EnTest_Rise(EnTest* this, PlayState* play) {
16301631
void func_808633E8(EnTest* this, PlayState* play) {
16311632
this->actor.params = STALFOS_TYPE_1;
16321633

1633-
if (BodyBreak_SpawnParts(&this->actor, &this->bodyBreak, play, this->actor.params)) {
1634+
if (BodyBreak_SpawnParts(&this->actor, &this->bodyBreak, play, this->actor.params,
1635+
this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)) {
16341636
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0xD0);
16351637

16361638
if (this->actor.parent != NULL) {

‎soh/src/overlays/actors/ovl_En_Tite/z_en_tite.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -764,7 +764,8 @@ void EnTite_DeathCry(EnTite* this, PlayState* play) {
764764
* Spawn EnPart and drop items
765765
*/
766766
void EnTite_FallApart(EnTite* this, PlayState* play) {
767-
if (BodyBreak_SpawnParts(&this->actor, &this->bodyBreak, play, this->actor.params + 0xB)) {
767+
if (BodyBreak_SpawnParts(&this->actor, &this->bodyBreak, play, this->actor.params + 0xB,
768+
this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)) {
768769
if (this->actor.params == TEKTITE_BLUE) {
769770
Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0xE0);
770771
} else {

‎soh/src/overlays/actors/ovl_En_Vali/z_en_vali.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -814,7 +814,7 @@ void EnVali_Draw(Actor* thisx, PlayState* play) {
814814

815815
EnVali_DrawBody(this, play);
816816

817-
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
817+
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
818818
EnVali_OverrideLimbDraw, EnVali_PostLimbDraw, this, POLY_XLU_DISP);
819819

820820
CLOSE_DISPS(play->state.gfxCtx);

‎soh/src/overlays/actors/ovl_En_Weiyer/z_en_weiyer.c

+5-3
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,8 @@ void EnWeiyer_Update(Actor* thisx, PlayState* play) {
624624

625625
s32 EnWeiyer_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx,
626626
Gfx** gfx) {
627+
return 0;
628+
627629
if (limbIndex == 1) {
628630
pos->z += 2000.0f;
629631
}
@@ -640,13 +642,13 @@ void EnWeiyer_Draw(Actor* thisx, PlayState* play) {
640642
Gfx_SetupDL_25Opa(play->state.gfxCtx);
641643
gSPSegment(POLY_OPA_DISP++, 0x08, &D_80116280[2]);
642644
gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
643-
POLY_OPA_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
644-
EnWeiyer_OverrideLimbDraw, NULL, &this->actor, POLY_OPA_DISP);
645+
646+
POLY_OPA_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime, EnWeiyer_OverrideLimbDraw, NULL, &this->actor, POLY_OPA_DISP);
645647
} else {
646648
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
647649
gSPSegment(POLY_XLU_DISP++, 0x08, &D_80116280[0]);
648650
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->actor.shape.shadowAlpha);
649-
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
651+
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
650652
EnWeiyer_OverrideLimbDraw, NULL, &this->actor, POLY_XLU_DISP);
651653
}
652654

‎soh/src/overlays/actors/ovl_En_Zf/z_en_zf.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -2252,7 +2252,7 @@ void EnZf_Draw(Actor* thisx, PlayState* play) {
22522252
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, this->alpha);
22532253
gSPSegment(POLY_OPA_DISP++, 0x09, &D_80116280[2]);
22542254

2255-
POLY_OPA_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
2255+
POLY_OPA_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
22562256
EnZf_OverrideLimbDraw, EnZf_PostLimbDraw, this, POLY_OPA_DISP);
22572257

22582258
if (this->iceTimer != 0) {
@@ -2271,7 +2271,7 @@ void EnZf_Draw(Actor* thisx, PlayState* play) {
22712271
gDPPipeSync(POLY_XLU_DISP++);
22722272
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha);
22732273
gSPSegment(POLY_XLU_DISP++, 0x09, &D_80116280[0]);
2274-
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
2274+
POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
22752275
EnZf_OverrideLimbDraw, EnZf_PostLimbDraw, this, POLY_XLU_DISP);
22762276
}
22772277
CLOSE_DISPS(play->state.gfxCtx);

0 commit comments

Comments
 (0)
Please sign in to comment.