Add transform tagging for moths to fix their interpolation (#460)
Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com>
This commit is contained in:
parent
d782d3dcb9
commit
473b3d3d02
|
@ -11,6 +11,7 @@
|
|||
#include "overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.h"
|
||||
#include "overlays/actors/ovl_En_Twig/z_en_twig.h"
|
||||
#include "overlays/actors/ovl_En_Honotrap/z_en_honotrap.h"
|
||||
#include "overlays/actors/ovl_En_Tanron1/z_en_tanron1.h"
|
||||
|
||||
// Decomp renames, TODO update decomp and remove these
|
||||
#define EnHonotrap_FlameGroup func_8092F878
|
||||
|
@ -1259,3 +1260,74 @@ RECOMP_PATCH void EnHonotrap_DrawFlameGroup(Actor* thisx, PlayState* play) {
|
|||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
||||
extern Gfx ovl_En_Tanron1_DL_001428[];
|
||||
extern Gfx ovl_En_Tanron1_DL_001888[];
|
||||
extern Gfx ovl_En_Tanron1_DL_001900[];
|
||||
|
||||
// @recomp Patched to interpolate the moths that circle torches.
|
||||
void func_80BB5AAC(EnTanron1* this, PlayState* play) {
|
||||
EnTanron1Struct* ptrBase = &this->unk_160[0];
|
||||
s16 i;
|
||||
u8 flag = 0;
|
||||
EnTanron1Struct* ptr = ptrBase;
|
||||
|
||||
// @recomp Get actor transform id
|
||||
u32 cur_transform_id = actor_transform_id(&this->actor);
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
Gfx_SetupDL25_Opa(play->state.gfxCtx);
|
||||
|
||||
for (i = 0; i < this->actor.params; i++, ptr++) {
|
||||
if (ptr->unk_24 == 1) {
|
||||
if (!flag) {
|
||||
gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001888);
|
||||
flag++;
|
||||
}
|
||||
Matrix_Translate(ptr->unk_00.x, ptr->unk_00.y, ptr->unk_00.z, MTXMODE_NEW);
|
||||
Matrix_RotateYS(ptr->unk_1A, MTXMODE_APPLY);
|
||||
Matrix_RotateXS(ptr->unk_18 * -1, MTXMODE_APPLY);
|
||||
Matrix_Scale(1.2f, ptr->unk_2C, 1.2f, MTXMODE_APPLY);
|
||||
|
||||
// @recomp Write matrix group for POLY_OPA
|
||||
gEXMatrixGroupDecomposedNormal(POLY_OPA_DISP++, cur_transform_id + i, G_EX_PUSH, G_MTX_MODELVIEW, G_EX_EDIT_ALLOW);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001900);
|
||||
|
||||
// @recomp Pop matrix group
|
||||
gEXPopMatrixGroup(POLY_OPA_DISP++, G_MTX_MODELVIEW);
|
||||
}
|
||||
}
|
||||
|
||||
flag = 0;
|
||||
ptr = ptrBase;
|
||||
for (i = 0; i < this->actor.params; i++, ptr++) {
|
||||
if (ptr->unk_24 == 2) {
|
||||
if (!flag) {
|
||||
gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001888);
|
||||
gDPLoadTextureBlock(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001428, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 32, 0,
|
||||
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 5, G_TX_NOLOD,
|
||||
G_TX_NOLOD);
|
||||
flag++;
|
||||
}
|
||||
|
||||
Matrix_Translate(ptr->unk_00.x, ptr->unk_00.y, ptr->unk_00.z, MTXMODE_NEW);
|
||||
Matrix_RotateYS(ptr->unk_1A, MTXMODE_APPLY);
|
||||
Matrix_RotateXS(ptr->unk_18 * -1, MTXMODE_APPLY);
|
||||
Matrix_Scale(1.0f, ptr->unk_2C, 1.0f, MTXMODE_APPLY);
|
||||
|
||||
// @recomp Write matrix group for POLY_OPA
|
||||
gEXMatrixGroupDecomposedNormal(POLY_OPA_DISP++, cur_transform_id + i, G_EX_PUSH, G_MTX_MODELVIEW, G_EX_EDIT_ALLOW);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001900);
|
||||
|
||||
// @recomp Pop matrix group
|
||||
gEXPopMatrixGroup(POLY_OPA_DISP++, G_MTX_MODELVIEW);
|
||||
}
|
||||
}
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue