From aba53c4055d9dd07183143c0e8ac418b69005d7d Mon Sep 17 00:00:00 2001 From: Sirius902 <3645979-Sirius902@users.noreply.gitlab.com> Date: Sun, 18 Oct 2020 19:04:30 -0700 Subject: [PATCH] EnIk_PostLimbDraw3 --- include/functions.h | 1 + src/code/z_actor.c | 6 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 85 ++++++++++++++++++++++++- undefined_syms.txt | 6 ++ 4 files changed, 93 insertions(+), 5 deletions(-) diff --git a/include/functions.h b/include/functions.h index d2c6bf4605..7f30e886a2 100644 --- a/include/functions.h +++ b/include/functions.h @@ -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); diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 000b012d8f..d4a4631264 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -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++; diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.c b/src/overlays/actors/ovl_En_Ik/z_en_ik.c index 50417d4986..167ed5eee9 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -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; diff --git a/undefined_syms.txt b/undefined_syms.txt index dafdd380ed..f7f2cd5eaa 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -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;