This commit is contained in:
Adam Bird 2024-05-01 16:43:42 -04:00
parent ddf6f79492
commit 68f267c616
5 changed files with 37 additions and 36 deletions

View File

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

View File

@ -3599,11 +3599,11 @@ s32 BodyBreak_SpawnParts(Actor* actor, BodyBreak* bodyBreak, PlayState* play, s1
spawnedEnPart = (EnPart*)Actor_SpawnAsChild(&play->actorCtx, actor, play, ACTOR_EN_PART, mtx->xw,
mtx->yw, mtx->zw, 0, 0, objBankIndex, type);
if (spawnedEnPart != NULL)
{
if (!isFlex)
if (spawnedEnPart != NULL) {
if (!isFlex) {
Matrix_MtxFToYXZRotS(&bodyBreak->matrices[bodyBreak->count], &spawnedEnPart->actor.shape.rot, 0);
}
spawnedEnPart->displayList = bodyBreak->dLists[bodyBreak->count];
spawnedEnPart->actor.scale = actor->scale;
}

View File

@ -1276,9 +1276,6 @@ s32 BossDodongo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve
f32 mtxScaleY;
f32 mtxScaleZ;
BossDodongo* this = (BossDodongo*)thisx;
// required for matching
if ((limbIndex == 6) || (limbIndex == 7)) {
@ -1291,9 +1288,9 @@ block_1:
if (*dList != NULL) {
OPEN_DISPS(play->state.gfxCtx);
if (this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)
if (this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
MATRIX_TOMTX(*play->flexLimbOverrideMTX);
}
mtxScaleZ = 1.0f;
mtxScaleY = 1.0f;
@ -1316,20 +1313,21 @@ block_1:
}
if (this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)
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);
} else {
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
}
gSPDisplayList(POLY_OPA_DISP++, *dList);
Matrix_Pop();
if (this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)
if (this->skelAnime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
(*play->flexLimbOverrideMTX)++;
}
CLOSE_DISPS(play->state.gfxCtx);
}
{ s32 pad; } // Required to match
return 1;

View File

@ -2014,25 +2014,27 @@ s32 BossGoma_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
Matrix_TranslateRotateZYX(pos, rot);
if (*dList != NULL)
{
if (this->skelanime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)
if (*dList != NULL) {
if (this->skelanime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
MATRIX_TOMTX(*play->flexLimbOverrideMTX);
}
Matrix_Push();
Matrix_Scale(this->eyeIrisScaleX, this->eyeIrisScaleY, 1.0f, MTXMODE_APPLY);
if (this->skelanime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)
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);
} else {
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
}
gSPDisplayList(POLY_OPA_DISP++, *dList);
Matrix_Pop();
if (this->skelanime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX)
if (this->skelanime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
(*play->flexLimbOverrideMTX)++;
}
}
doNotDrawLimb = true;
@ -2045,24 +2047,29 @@ s32 BossGoma_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f
case BOSSGOMA_LIMB_TAIL1:
Matrix_TranslateRotateZYX(pos, rot);
if (*dList != NULL)
{
MATRIX_TOMTX(*play->flexLimbOverrideMTX);
if (*dList != NULL) {
if (this->skelanime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
MATRIX_TOMTX(*play->flexLimbOverrideMTX);
}
Matrix_Push();
Matrix_Scale(this->tailLimbsScale[limbIndex - BOSSGOMA_LIMB_TAIL4],
this->tailLimbsScale[limbIndex - BOSSGOMA_LIMB_TAIL4],
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);
gSPMatrix(POLY_OPA_DISP++, *play->flexLimbOverrideMTX, G_MTX_LOAD);
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);
Matrix_Pop();
(*play->flexLimbOverrideMTX)++;
if (this->skelanime.skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) {
(*play->flexLimbOverrideMTX)++;
}
}
doNotDrawLimb = true;

View File

@ -624,8 +624,6 @@ void EnWeiyer_Update(Actor* thisx, PlayState* play) {
s32 EnWeiyer_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx,
Gfx** gfx) {
return 0;
if (limbIndex == 1) {
pos->z += 2000.0f;
}