1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-11-11 03:39:59 +00:00

EnIk_PostLimbDraw3

This commit is contained in:
Sirius902 2020-10-18 19:04:30 -07:00
parent f7cd4e20e9
commit aba53c4055
4 changed files with 93 additions and 5 deletions

View file

@ -472,6 +472,7 @@ Actor* func_80032AF0(GlobalContext* globalCtx, ActorContext* actorCtx, Actor** a
Actor* Actor_Find(ActorContext* actorCtx, s32 actorId, s32 actorType);
void func_80032C7C(GlobalContext* globalCtx, Actor* actor);
void func_80032E24(struct_80032E24* arg0, s32 arg1, GlobalContext* globalCtx);
void func_80032F54(struct_80032E24* arg0, s32 arg1, s32 arg2, s32 arg3, u32 arg4, Gfx** dList, s16 arg6);
s32 func_8003305C(Actor* actor, struct_80032E24* arg1, GlobalContext* globalCtx, s16 params);
void func_80033260(GlobalContext* globalCtx, Actor* actor, Vec3f* arg2, f32 arg3, s32 arg4, f32 arg5, s16 arg6,
s16 arg7, u8 arg8);

View file

@ -3075,12 +3075,12 @@ void func_80032E24(struct_80032E24* arg0, s32 arg1, GlobalContext* globalCtx) {
}
}
void func_80032F54(struct_80032E24* arg0, s32 arg1, s32 arg2, s32 arg3, u32 arg4, s32* arg5, s16 arg6) {
void func_80032F54(struct_80032E24* arg0, s32 arg1, s32 arg2, s32 arg3, u32 arg4, Gfx** dList, s16 arg6) {
GlobalContext* globalCtx = Effect_GetGlobalCtx();
if ((globalCtx->actorCtx.unk_00 == 0) && (arg0->unk_10 > 0)) {
if ((arg1 >= arg2) && (arg3 >= arg1) && (*arg5 != 0)) {
arg0->unk_0C[arg0->unk_10] = *arg5;
if ((arg1 >= arg2) && (arg3 >= arg1) && (*dList != 0)) {
arg0->unk_0C[arg0->unk_10] = *dList;
Matrix_Get(&arg0->unk_00[arg0->unk_10]);
arg0->unk_04[arg0->unk_10] = arg6;
arg0->unk_10++;

View file

@ -69,8 +69,14 @@ extern AnimationHeader D_0600C114;
extern AnimationHeader D_0600CD70;
extern AnimationHeader D_0600DD50;
extern AnimationHeader D_0600ED24;
extern Gfx D_06016BE0[];
extern Gfx D_06016CD8[];
extern Gfx D_06016D88[];
extern Gfx D_06016EE8[];
extern Gfx D_06016F88[];
extern Gfx D_06018E78[];
extern Gfx D_06019100[];
extern Gfx D_06019E08[];
extern SkeletonHeader D_0601E178;
extern AnimationHeader D_060203D8;
extern SkeletonHeader D_060205C0;
@ -836,8 +842,83 @@ s32 EnIk_OverrideLimbDraw3(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList,
return 0;
}
void EnIk_PostLimbDraw3(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* actor);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/EnIk_PostLimbDraw3.s")
void EnIk_PostLimbDraw3(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* actor) {
Vec3f spF4;
Vec3f spE8;
EnIk* this = (EnIk*)actor;
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_en_ik_inFight.c", 0x4B1);
if (this->unk_2FB & 1) {
func_80032F54(&this->unk_308, limbIndex, 0x1A, 0x1B, 0x1C, dList, -1);
}
if (limbIndex == 0xC) {
gSPMatrix(oGfxCtx->polyXlu.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_en_ik_inFight.c", 0x4C1),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
if (this->actor.params != 0) {
gSPDisplayList(oGfxCtx->polyXlu.p++, D_06019E08);
} else {
gSPDisplayList(oGfxCtx->polyXlu.p++, D_06016D88);
}
} else if (limbIndex == 0x11) {
s32 i;
Vec3f sp9C[3];
Vec3f sp78[3];
Matrix_MultVec3f(&D_80A7847C, &this->unk_36C.dim.quad[1]);
Matrix_MultVec3f(&D_80A78488, &this->unk_36C.dim.quad[0]);
Matrix_MultVec3f(&D_80A78494, &this->unk_36C.dim.quad[3]);
Matrix_MultVec3f(&D_80A784A0, &this->unk_36C.dim.quad[2]);
func_80062734(&this->unk_36C, &this->unk_36C.dim.quad[0], &this->unk_36C.dim.quad[1],
&this->unk_36C.dim.quad[2], &this->unk_36C.dim.quad[3]);
Matrix_MultVec3f(&D_80A7847C, &spF4);
Matrix_MultVec3f(&D_80A78488, &spE8);
if (this->unk_2FE > 0) {
EffectBlure_AddVertex(Effect_GetByIndex(this->blureIdx), &spF4, &spE8);
} else if (this->unk_2FE == 0) {
EffectBlure_AddSpace(Effect_GetByIndex(this->blureIdx));
this->unk_2FE = -1;
}
if (this->unk_2F8 == 9) {
for (i = 0; i < ARRAY_COUNT(sp78); i++) {
Matrix_MultVec3f(&D_80A784AC[i], &sp9C[i]);
Matrix_MultVec3f(&D_80A784D0[i], &sp78[i]);
}
func_800627A0(&this->unk_3EC, 0, &sp9C[0], &sp9C[1], &sp9C[2]);
func_800627A0(&this->unk_3EC, 1, &sp78[0], &sp78[1], &sp78[2]);
}
}
switch (limbIndex) {
case 0x16:
gSPMatrix(oGfxCtx->polyXlu.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_en_ik_inFight.c", 0x4F6),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(oGfxCtx->polyXlu.p++, D_06016F88);
break;
case 0x18:
gSPMatrix(oGfxCtx->polyXlu.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_en_ik_inFight.c", 0x4FB),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(oGfxCtx->polyXlu.p++, D_06016EE8);
break;
case 0x1A:
if (!(this->unk_2FA & 1)) {
gSPMatrix(oGfxCtx->polyXlu.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_en_ik_inFight.c", 0x501),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(oGfxCtx->polyXlu.p++, D_06016BE0);
}
break;
case 0x1B:
if (!(this->unk_2FA & 1)) {
gSPMatrix(oGfxCtx->polyXlu.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_en_ik_inFight.c", 0x508),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(oGfxCtx->polyXlu.p++, D_06016CD8);
}
break;
}
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_en_ik_inFight.c", 0x50E);
}
void func_80A76798(Actor* thisx, GlobalContext* globalCtx) {
EnIk* this = THIS;

View file

@ -1185,8 +1185,14 @@ D_0600C114 = 0x0600C114;
D_0600CD70 = 0x0600CD70;
D_0600DD50 = 0x0600DD50;
D_0600ED24 = 0x0600ED24;
D_06016BE0 = 0x06016BE0;
D_06016CD8 = 0x06016CD8;
D_06016D88 = 0x06016D88;
D_06016EE8 = 0x06016EE8;
D_06016F88 = 0x06016F88;
D_06018E78 = 0x06018E78;
D_06019100 = 0x06019100;
D_06019E08 = 0x06019E08;
D_0601E178 = 0x0601E178;
D_060203D8 = 0x060203D8;
D_060205C0 = 0x060205C0;