Custom Skeleton Fixes for various bosses and enemies (#3436)

* Skeleton Fixes for various bosses and enemies

* cleanup

* revert breakpart changes

---------

Co-authored-by: Adam Bird <archez39@me.com>
This commit is contained in:
Nicholas Estelami 2024-08-05 15:20:40 -04:00 committed by GitHub
parent 7a00658be9
commit f11f97e84e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 100 additions and 37 deletions

View File

@ -1259,6 +1259,8 @@ void SkelAnime_DrawFlexLod(PlayState* play, void** skeleton, Vec3s* jointTable,
s32 dListIndex); s32 dListIndex);
void SkelAnime_DrawSkeletonOpa(PlayState* play, SkelAnime* skelAnime, OverrideLimbDrawOpa overrideLimbDraw, void SkelAnime_DrawSkeletonOpa(PlayState* play, SkelAnime* skelAnime, OverrideLimbDrawOpa overrideLimbDraw,
PostLimbDrawOpa postLimbDraw, void* arg); PostLimbDrawOpa postLimbDraw, void* arg);
Gfx* SkelAnime_DrawSkeleton2(PlayState* play, SkelAnime* skelAnime, OverrideLimbDrawOpa overrideLimbDraw,
PostLimbDrawOpa postLimbDraw, void* arg, Gfx* gfx);
void SkelAnime_DrawOpa(PlayState* play, void** skeleton, Vec3s* jointTable, void SkelAnime_DrawOpa(PlayState* play, void** skeleton, Vec3s* jointTable,
OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, void* arg); OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, void* arg);
void SkelAnime_DrawFlexOpa(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, void SkelAnime_DrawFlexOpa(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount,

View File

@ -1405,6 +1405,8 @@ typedef struct PlayState {
/* 0x1242B */ u8 unk_1242B; /* 0x1242B */ u8 unk_1242B;
/* 0x1242C */ SceneTableEntry* loadedScene; /* 0x1242C */ SceneTableEntry* loadedScene;
/* 0x12430 */ char unk_12430[0xE8]; /* 0x12430 */ char unk_12430[0xE8];
// SOH [Custom Models] MTX tracker for flex based skeletons
Mtx** flexLimbOverrideMTX;
} PlayState; // size = 0x12518 } PlayState; // size = 0x12518
typedef struct { typedef struct {

View File

@ -148,6 +148,8 @@ void SkelAnime_DrawFlexLimbLod(PlayState* play, s32 limbIndex, void** skeleton,
newDList = limbDList = limb->dLists[lod]; newDList = limbDList = limb->dLists[lod];
play->flexLimbOverrideMTX = mtx;
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &newDList, &pos, &rot, arg)) { if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &newDList, &pos, &rot, arg)) {
Matrix_TranslateRotateZYX(&pos, &rot); Matrix_TranslateRotateZYX(&pos, &rot);
if (newDList != NULL) { if (newDList != NULL) {
@ -220,6 +222,8 @@ void SkelAnime_DrawFlexLod(PlayState* play, void** skeleton, Vec3s* jointTable,
newDList = limbDList = rootLimb->dLists[lod]; newDList = limbDList = rootLimb->dLists[lod];
play->flexLimbOverrideMTX = &mtx;
if ((overrideLimbDraw == 0) || !overrideLimbDraw(play, 1, &newDList, &pos, &rot, arg)) { if ((overrideLimbDraw == 0) || !overrideLimbDraw(play, 1, &newDList, &pos, &rot, arg)) {
Matrix_TranslateRotateZYX(&pos, &rot); Matrix_TranslateRotateZYX(&pos, &rot);
if (newDList != NULL) { if (newDList != NULL) {
@ -306,6 +310,20 @@ void SkelAnime_DrawSkeletonOpa(PlayState* play, SkelAnime* skelAnime, OverrideLi
} }
} }
Gfx* SkelAnime_DrawSkeleton2(PlayState* play, SkelAnime* skelAnime, OverrideLimbDrawOpa overrideLimbDraw,
PostLimbDrawOpa postLimbDraw, void* arg, Gfx* gfx)
{
if (skelAnime->skeletonHeader->skeletonType == SKELANIME_TYPE_NORMAL) {
return SkelAnime_Draw(play, skelAnime->skeleton, skelAnime->jointTable, overrideLimbDraw, postLimbDraw, arg, gfx);
} else if (skelAnime->skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
FlexSkeletonHeader* flexHeader = (FlexSkeletonHeader*)skelAnime->skeletonHeader;
return SkelAnime_DrawFlex(play, skelAnime->skeleton, skelAnime->jointTable, flexHeader->dListCount,
overrideLimbDraw, postLimbDraw, arg, gfx);
}
return gfx;
}
/** /**
* Draw all limbs of type `StandardLimb` in a given skeleton to the polyOpa buffer * Draw all limbs of type `StandardLimb` in a given skeleton to the polyOpa buffer
*/ */
@ -383,6 +401,8 @@ void SkelAnime_DrawFlexLimbOpa(PlayState* play, s32 limbIndex, void** skeleton,
newDList = limbDList = limb->dList; newDList = limbDList = limb->dList;
play->flexLimbOverrideMTX = limbMatricies;
if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &newDList, &pos, &rot, arg)) { if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &newDList, &pos, &rot, arg)) {
Matrix_TranslateRotateZYX(&pos, &rot); Matrix_TranslateRotateZYX(&pos, &rot);
if (newDList != NULL) { if (newDList != NULL) {

View File

@ -1288,6 +1288,10 @@ block_1:
if (*dList != NULL) { if (*dList != NULL) {
OPEN_DISPS(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx);
if (this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
MATRIX_TOMTX(*play->flexLimbOverrideMTX);
}
mtxScaleZ = 1.0f; mtxScaleZ = 1.0f;
mtxScaleY = 1.0f; mtxScaleY = 1.0f;
@ -1308,11 +1312,20 @@ block_1:
Matrix_RotateX(-(this->unk_25C[limbIndex] * 0.115f), MTXMODE_APPLY); Matrix_RotateX(-(this->unk_25C[limbIndex] * 0.115f), MTXMODE_APPLY);
} }
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), if (this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPMatrix(POLY_OPA_DISP++, *play->flexLimbOverrideMTX, G_MTX_LOAD);
} else {
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
}
gSPDisplayList(POLY_OPA_DISP++, *dList); gSPDisplayList(POLY_OPA_DISP++, *dList);
Matrix_Pop(); Matrix_Pop();
if (this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
(*play->flexLimbOverrideMTX)++;
}
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
} }
{ s32 pad; } // Required to match { s32 pad; } // Required to match

View File

@ -2015,12 +2015,26 @@ s32 BossGoma_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
Matrix_TranslateRotateZYX(pos, rot); Matrix_TranslateRotateZYX(pos, rot);
if (*dList != NULL) { if (*dList != NULL) {
if (this->skelanime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
MATRIX_TOMTX(*play->flexLimbOverrideMTX);
}
Matrix_Push(); Matrix_Push();
Matrix_Scale(this->eyeIrisScaleX, this->eyeIrisScaleY, 1.0f, MTXMODE_APPLY); Matrix_Scale(this->eyeIrisScaleX, this->eyeIrisScaleY, 1.0f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if (this->skelanime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
gSPMatrix(POLY_OPA_DISP++, *play->flexLimbOverrideMTX, G_MTX_LOAD);
} else {
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
}
gSPDisplayList(POLY_OPA_DISP++, *dList); gSPDisplayList(POLY_OPA_DISP++, *dList);
Matrix_Pop(); Matrix_Pop();
if (this->skelanime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
(*play->flexLimbOverrideMTX)++;
}
} }
doNotDrawLimb = true; doNotDrawLimb = true;
@ -2034,14 +2048,28 @@ s32 BossGoma_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
Matrix_TranslateRotateZYX(pos, rot); Matrix_TranslateRotateZYX(pos, rot);
if (*dList != NULL) { if (*dList != NULL) {
if (this->skelanime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
MATRIX_TOMTX(*play->flexLimbOverrideMTX);
}
Matrix_Push(); Matrix_Push();
Matrix_Scale(this->tailLimbsScale[limbIndex - BOSSGOMA_LIMB_TAIL4], Matrix_Scale(this->tailLimbsScale[limbIndex - BOSSGOMA_LIMB_TAIL4],
this->tailLimbsScale[limbIndex - BOSSGOMA_LIMB_TAIL4], this->tailLimbsScale[limbIndex - BOSSGOMA_LIMB_TAIL4],
this->tailLimbsScale[limbIndex - BOSSGOMA_LIMB_TAIL4], MTXMODE_APPLY); this->tailLimbsScale[limbIndex - BOSSGOMA_LIMB_TAIL4], MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if (this->skelanime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
gSPMatrix(POLY_OPA_DISP++, *play->flexLimbOverrideMTX, G_MTX_LOAD);
} else {
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
}
gSPDisplayList(POLY_OPA_DISP++, *dList); gSPDisplayList(POLY_OPA_DISP++, *dList);
Matrix_Pop(); Matrix_Pop();
if (this->skelanime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
(*play->flexLimbOverrideMTX)++;
}
} }
doNotDrawLimb = true; doNotDrawLimb = true;

View File

@ -1055,7 +1055,7 @@ void DoorWarp1_DrawBlueCrystal(DoorWarp1* this, PlayState* play) {
gDPSetPrimColor(POLY_XLU_DISP++, 0xFF, 0xFF, 200, 255, 255, (u8)this->crystalAlpha); gDPSetPrimColor(POLY_XLU_DISP++, 0xFF, 0xFF, 200, 255, 255, (u8)this->crystalAlpha);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 100, 255, (u8)this->crystalAlpha); gDPSetEnvColor(POLY_XLU_DISP++, 0, 100, 255, (u8)this->crystalAlpha);
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime, NULL, NULL,
&this->actor, POLY_XLU_DISP); &this->actor, POLY_XLU_DISP);
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
@ -1079,7 +1079,7 @@ void DoorWarp1_DrawPurpleCrystal(DoorWarp1* this, PlayState* play) {
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (u8)this->crystalAlpha); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (u8)this->crystalAlpha);
gDPSetEnvColor(POLY_XLU_DISP++, 150, 0, 100, (u8)this->crystalAlpha); gDPSetEnvColor(POLY_XLU_DISP++, 150, 0, 100, (u8)this->crystalAlpha);
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime, NULL, NULL,
&this->actor, POLY_XLU_DISP); &this->actor, POLY_XLU_DISP);
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);

View File

@ -768,7 +768,7 @@ void EnBili_Draw(Actor* thisx, PlayState* play) {
gSPSegment(POLY_XLU_DISP++, 0x09, D_809C1700); gSPSegment(POLY_XLU_DISP++, 0x09, D_809C1700);
} }
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
EnBili_OverrideLimbDraw, NULL, this, POLY_XLU_DISP); EnBili_OverrideLimbDraw, NULL, this, POLY_XLU_DISP);
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
} }

View File

@ -947,7 +947,7 @@ void EnBox_Draw(Actor* thisx, PlayState* play) {
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
gSPSegment(POLY_OPA_DISP++, 0x08, EnBox_EmptyDList(play->state.gfxCtx)); gSPSegment(POLY_OPA_DISP++, 0x08, EnBox_EmptyDList(play->state.gfxCtx));
Gfx_SetupDL_25Opa(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx);
POLY_OPA_DISP = SkelAnime_Draw(play, this->skelanime.skeleton, this->skelanime.jointTable, NULL, POLY_OPA_DISP = SkelAnime_DrawSkeleton2(play, &this->skelanime, NULL,
EnBox_PostLimbDraw, this, POLY_OPA_DISP); EnBox_PostLimbDraw, this, POLY_OPA_DISP);
} else if (this->alpha != 0) { } else if (this->alpha != 0) {
gDPPipeSync(POLY_XLU_DISP++); gDPPipeSync(POLY_XLU_DISP++);
@ -958,7 +958,7 @@ void EnBox_Draw(Actor* thisx, PlayState* play) {
} else { } else {
gSPSegment(POLY_XLU_DISP++, 0x08, func_809CA4A0(play->state.gfxCtx)); gSPSegment(POLY_XLU_DISP++, 0x08, func_809CA4A0(play->state.gfxCtx));
} }
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelanime.skeleton, this->skelanime.jointTable, NULL, POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelanime, NULL,
EnBox_PostLimbDraw, this, POLY_XLU_DISP); EnBox_PostLimbDraw, this, POLY_XLU_DISP);
} }

View File

@ -856,7 +856,7 @@ void EnBw_Draw(Actor* thisx, PlayState* play2) {
Gfx_SetupDL_25Opa(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, this->color1.r, this->color1.g, this->color1.b, this->color1.a); gDPSetEnvColor(POLY_OPA_DISP++, this->color1.r, this->color1.g, this->color1.b, this->color1.a);
gSPSegment(POLY_OPA_DISP++, 0x08, &D_80116280[2]); gSPSegment(POLY_OPA_DISP++, 0x08, &D_80116280[2]);
POLY_OPA_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, POLY_OPA_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
EnBw_OverrideLimbDraw, NULL, this, POLY_OPA_DISP); EnBw_OverrideLimbDraw, NULL, this, POLY_OPA_DISP);
} else { } else {
Gfx_SetupDL_25Xlu(play->state.gfxCtx); Gfx_SetupDL_25Xlu(play->state.gfxCtx);
@ -864,7 +864,7 @@ void EnBw_Draw(Actor* thisx, PlayState* play2) {
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 0, 0, 0, this->color1.a); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 0, 0, 0, this->color1.a);
gDPSetEnvColor(POLY_XLU_DISP++, this->color1.r, this->color1.g, this->color1.b, this->color1.a); gDPSetEnvColor(POLY_XLU_DISP++, this->color1.r, this->color1.g, this->color1.b, this->color1.a);
gSPSegment(POLY_XLU_DISP++, 0x08, &D_80116280[0]); gSPSegment(POLY_XLU_DISP++, 0x08, &D_80116280[0]);
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
EnBw_OverrideLimbDraw, NULL, this, POLY_XLU_DISP); EnBw_OverrideLimbDraw, NULL, this, POLY_XLU_DISP);
} }

View File

@ -708,14 +708,14 @@ void EnEiyer_Draw(Actor* thisx, PlayState* play) {
gSPSegment(POLY_OPA_DISP++, 0x08, &D_80116280[2]); gSPSegment(POLY_OPA_DISP++, 0x08, &D_80116280[2]);
gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
POLY_OPA_DISP = SkelAnime_Draw(play, this->skelanime.skeleton, this->skelanime.jointTable, POLY_OPA_DISP = SkelAnime_DrawSkeleton2(play, &this->skelanime,
EnEiyer_OverrideLimbDraw, NULL, this, POLY_OPA_DISP); EnEiyer_OverrideLimbDraw, NULL, this, POLY_OPA_DISP);
} else { } else {
Gfx_SetupDL_25Xlu(play->state.gfxCtx); Gfx_SetupDL_25Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, D_80116280); gSPSegment(POLY_XLU_DISP++, 0x08, D_80116280);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->actor.shape.shadowAlpha); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->actor.shape.shadowAlpha);
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelanime.skeleton, this->skelanime.jointTable, POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelanime,
EnEiyer_OverrideLimbDraw, NULL, this, POLY_XLU_DISP); EnEiyer_OverrideLimbDraw, NULL, this, POLY_XLU_DISP);
} }
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);

View File

@ -1540,7 +1540,7 @@ void EnElf_Draw(Actor* thisx, PlayState* play) {
gSPEndDisplayList(dListHead++); gSPEndDisplayList(dListHead++);
gDPSetEnvColor(POLY_XLU_DISP++, (u8)this->outerColor.r, (u8)this->outerColor.g, (u8)this->outerColor.b, gDPSetEnvColor(POLY_XLU_DISP++, (u8)this->outerColor.r, (u8)this->outerColor.g, (u8)this->outerColor.b,
(u8)(envAlpha * alphaScale)); (u8)(envAlpha * alphaScale));
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
EnElf_OverrideLimbDraw, NULL, this, POLY_XLU_DISP); EnElf_OverrideLimbDraw, NULL, this, POLY_XLU_DISP);
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);

View File

@ -837,8 +837,9 @@ void EnFirefly_Draw(Actor* thisx, PlayState* play) {
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
} }
POLY_OPA_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, POLY_OPA_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime, EnFirefly_OverrideLimbDraw, EnFirefly_PostLimbDraw,
EnFirefly_OverrideLimbDraw, EnFirefly_PostLimbDraw, &this->actor, POLY_OPA_DISP); &this->actor, POLY_OPA_DISP);
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
} }
@ -854,7 +855,7 @@ void EnFirefly_DrawInvisible(Actor* thisx, PlayState* play) {
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 255); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 255);
} }
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
EnFirefly_OverrideLimbDraw, EnFirefly_PostLimbDraw, this, POLY_XLU_DISP); EnFirefly_OverrideLimbDraw, EnFirefly_PostLimbDraw, this, POLY_XLU_DISP);
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
} }

View File

@ -858,7 +858,7 @@ void EnPartner_Draw(Actor* thisx, PlayState* play) {
gSPEndDisplayList(dListHead++); gSPEndDisplayList(dListHead++);
gDPSetEnvColor(POLY_XLU_DISP++, (u8)this->outerColor.r, (u8)this->outerColor.g, (u8)this->outerColor.b, gDPSetEnvColor(POLY_XLU_DISP++, (u8)this->outerColor.r, (u8)this->outerColor.g, (u8)this->outerColor.b,
(u8)(envAlpha * alphaScale)); (u8)(envAlpha * alphaScale));
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
EnPartner_OverrideLimbDraw, NULL, this, POLY_XLU_DISP); EnPartner_OverrideLimbDraw, NULL, this, POLY_XLU_DISP);
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);

View File

@ -267,7 +267,7 @@ void EnPoDesert_Draw(Actor* thisx, PlayState* play) {
} else { } else {
gSPSegment(POLY_XLU_DISP++, 0x0C, D_80116280 + 2); gSPSegment(POLY_XLU_DISP++, 0x0C, D_80116280 + 2);
} }
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
EnPoDesert_OverrideLimbDraw, EnPoDesert_PostLimbDraw, &this->actor, POLY_XLU_DISP); EnPoDesert_OverrideLimbDraw, EnPoDesert_PostLimbDraw, &this->actor, POLY_XLU_DISP);
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
} }

View File

@ -944,15 +944,14 @@ void EnPoField_Draw(Actor* thisx, PlayState* play) {
this->lightColor.a)); this->lightColor.a));
gSPSegment(POLY_OPA_DISP++, 0x0C, D_80116280 + 2); gSPSegment(POLY_OPA_DISP++, 0x0C, D_80116280 + 2);
POLY_OPA_DISP = POLY_OPA_DISP =
SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, SkelAnime_DrawSkeleton2(play, &this->skelAnime,
EnPoField_OverrideLimbDraw2, EnPoField_PostLimDraw2, &this->actor, POLY_OPA_DISP); EnPoField_OverrideLimbDraw2, EnPoField_PostLimDraw2, &this->actor, POLY_OPA_DISP);
} else { } else {
gSPSegment(POLY_XLU_DISP++, 0x08, gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_EnvColor(play->state.gfxCtx, this->lightColor.r, this->lightColor.g, this->lightColor.b, Gfx_EnvColor(play->state.gfxCtx, this->lightColor.r, this->lightColor.g, this->lightColor.b,
this->lightColor.a)); this->lightColor.a));
gSPSegment(POLY_XLU_DISP++, 0x0C, D_80116280); gSPSegment(POLY_XLU_DISP++, 0x0C, D_80116280);
POLY_XLU_DISP = POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
EnPoField_OverrideLimbDraw2, EnPoField_PostLimDraw2, &this->actor, POLY_XLU_DISP); EnPoField_OverrideLimbDraw2, EnPoField_PostLimDraw2, &this->actor, POLY_XLU_DISP);
} }
gDPPipeSync(POLY_OPA_DISP++); gDPPipeSync(POLY_OPA_DISP++);

View File

@ -1373,14 +1373,12 @@ void EnPoSisters_Draw(Actor* thisx, PlayState* play) {
if (this->unk_22E.a == 255 || this->unk_22E.a == 0) { if (this->unk_22E.a == 255 || this->unk_22E.a == 0) {
gDPSetEnvColor(POLY_OPA_DISP++, this->unk_22E.r, this->unk_22E.g, this->unk_22E.b, this->unk_22E.a); gDPSetEnvColor(POLY_OPA_DISP++, this->unk_22E.r, this->unk_22E.g, this->unk_22E.b, this->unk_22E.a);
gSPSegment(POLY_OPA_DISP++, 0x09, D_80116280 + 2); gSPSegment(POLY_OPA_DISP++, 0x09, D_80116280 + 2);
POLY_OPA_DISP = POLY_OPA_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime, EnPoSisters_OverrideLimbDraw,
SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnPoSisters_PostLimbDraw, &this->actor, POLY_OPA_DISP);
EnPoSisters_OverrideLimbDraw, EnPoSisters_PostLimbDraw, &this->actor, POLY_OPA_DISP);
} else { } else {
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->unk_22E.a); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->unk_22E.a);
gSPSegment(POLY_XLU_DISP++, 0x09, D_80116280); gSPSegment(POLY_XLU_DISP++, 0x09, D_80116280);
POLY_XLU_DISP = POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
EnPoSisters_OverrideLimbDraw, EnPoSisters_PostLimbDraw, &this->actor, POLY_XLU_DISP); EnPoSisters_OverrideLimbDraw, EnPoSisters_PostLimbDraw, &this->actor, POLY_XLU_DISP);
} }
if (!(this->unk_199 & 0x80)) { if (!(this->unk_199 & 0x80)) {

View File

@ -1085,12 +1085,12 @@ void EnPoh_DrawRegular(Actor* thisx, PlayState* play) {
if (this->lightColor.a == 255 || this->lightColor.a == 0) { if (this->lightColor.a == 255 || this->lightColor.a == 0) {
gDPSetEnvColor(POLY_OPA_DISP++, this->lightColor.r, this->lightColor.g, this->lightColor.b, this->lightColor.a); gDPSetEnvColor(POLY_OPA_DISP++, this->lightColor.r, this->lightColor.g, this->lightColor.b, this->lightColor.a);
gSPSegment(POLY_OPA_DISP++, 0x08, D_80116280 + 2); gSPSegment(POLY_OPA_DISP++, 0x08, D_80116280 + 2);
POLY_OPA_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, POLY_OPA_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
EnPoh_OverrideLimbDraw, EnPoh_PostLimbDraw, &this->actor, POLY_OPA_DISP); EnPoh_OverrideLimbDraw, EnPoh_PostLimbDraw, &this->actor, POLY_OPA_DISP);
} else { } else {
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->lightColor.a); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->lightColor.a);
gSPSegment(POLY_XLU_DISP++, 0x08, D_80116280); gSPSegment(POLY_XLU_DISP++, 0x08, D_80116280);
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
EnPoh_OverrideLimbDraw, EnPoh_PostLimbDraw, &this->actor, POLY_XLU_DISP); EnPoh_OverrideLimbDraw, EnPoh_PostLimbDraw, &this->actor, POLY_XLU_DISP);
} }
gDPPipeSync(POLY_OPA_DISP++); gDPPipeSync(POLY_OPA_DISP++);

View File

@ -814,7 +814,7 @@ void EnVali_Draw(Actor* thisx, PlayState* play) {
EnVali_DrawBody(this, play); EnVali_DrawBody(this, play);
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
EnVali_OverrideLimbDraw, EnVali_PostLimbDraw, this, POLY_XLU_DISP); EnVali_OverrideLimbDraw, EnVali_PostLimbDraw, this, POLY_XLU_DISP);
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);

View File

@ -640,13 +640,13 @@ void EnWeiyer_Draw(Actor* thisx, PlayState* play) {
Gfx_SetupDL_25Opa(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, &D_80116280[2]); gSPSegment(POLY_OPA_DISP++, 0x08, &D_80116280[2]);
gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255);
POLY_OPA_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, POLY_OPA_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime, EnWeiyer_OverrideLimbDraw, NULL, &this->actor,
EnWeiyer_OverrideLimbDraw, NULL, &this->actor, POLY_OPA_DISP); POLY_OPA_DISP);
} else { } else {
Gfx_SetupDL_25Xlu(play->state.gfxCtx); Gfx_SetupDL_25Xlu(play->state.gfxCtx);
gSPSegment(POLY_XLU_DISP++, 0x08, &D_80116280[0]); gSPSegment(POLY_XLU_DISP++, 0x08, &D_80116280[0]);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->actor.shape.shadowAlpha); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->actor.shape.shadowAlpha);
POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, POLY_XLU_DISP = SkelAnime_DrawSkeleton2(play, &this->skelAnime,
EnWeiyer_OverrideLimbDraw, NULL, &this->actor, POLY_XLU_DISP); EnWeiyer_OverrideLimbDraw, NULL, &this->actor, POLY_XLU_DISP);
} }

View File

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