From 19ccd68a75ae7f9a2926d7c16402ee0844d5af8f Mon Sep 17 00:00:00 2001 From: elijah-thomas774 Date: Sun, 8 Mar 2026 22:05:58 -0400 Subject: [PATCH] timingB and createHeap 100% --- include/d/a/e/d_a_en_base.h | 3 +++ include/m/m3d/m_anmmdl.h | 7 +++++++ src/REL/d/a/e/d_a_e_remly.cpp | 27 +++++++++++++++++++++++++-- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/include/d/a/e/d_a_en_base.h b/include/d/a/e/d_a_en_base.h index 48c9f920..81ef2761 100644 --- a/include/d/a/e/d_a_en_base.h +++ b/include/d/a/e/d_a_en_base.h @@ -77,6 +77,9 @@ public: void fn_80030400(m3d::mdl_c &, u8, bool, u8); void fn_800306d0(); void fn_80030700(); + + static void fn_80030980(m3d::mdl_c &, s32, bool markDirty); + void fn_80030c20(u32 flags, f32, f32, f32, f32); s32 someEnemyDamageCollisionStuffMaybe(dColliderLinkedList &list, u16 *pOutFlags); diff --git a/include/m/m3d/m_anmmdl.h b/include/m/m3d/m_anmmdl.h index cb8ec945..29cf6e2e 100644 --- a/include/m/m3d/m_anmmdl.h +++ b/include/m/m3d/m_anmmdl.h @@ -60,6 +60,13 @@ public: void setAnmFile(void *data) { mAnmFile = nw4r::g3d::ResFile(data); } + nw4r::g3d::ResFile getAnmFile() { + return mAnmFile; + } + + nw4r::g3d::ResFile getMdlFile() { + return mMdlFile; + } protected: nw4r::g3d::ResFile mMdlFile; diff --git a/src/REL/d/a/e/d_a_e_remly.cpp b/src/REL/d/a/e/d_a_e_remly.cpp index 4538ae90..7ad1addd 100644 --- a/src/REL/d/a/e/d_a_e_remly.cpp +++ b/src/REL/d/a/e/d_a_e_remly.cpp @@ -23,6 +23,7 @@ #include "m/m_mtx.h" #include "m/m_quat.h" #include "m/m_vec.h" +#include "nw4r/g3d/res/g3d_resanmtexpat.h" #include "nw4r/g3d/res/g3d_resfile.h" #include "nw4r/g3d/res/g3d_resmdl.h" #include "nw4r/g3d/res/g3d_resnode.h" @@ -81,10 +82,32 @@ STATE_DEFINE(dAcEremly_c, NightRet); STATE_DEFINE(dAcEremly_c, NightJumpAttack); STATE_DEFINE(dAcEremly_c, BirthWait); -void dAcEremly_c::callback_c::timingB(u32 nodeId, nw4r::g3d::WorldMtxManip *result, nw4r::g3d::ResMdl) {} +void dAcEremly_c::callback_c::timingB(u32 nodeId, nw4r::g3d::WorldMtxManip *result, nw4r::g3d::ResMdl resMdl) { + static u32 headNode = resMdl.GetResNode("head").GetID(); + + if (nodeId == headNode) { + mMtx_c m; + result->GetMtx(m); + m.ZXYrotM(mAng); + result->SetMtx(m); + } +} bool dAcEremly_c::createHeap() { - nw4r::g3d::ResFile res(getOarcResFile("Remly")); + TRY_CREATE(mMdl.create(*this, getOarcResFile("Remly"), "Remly", "RemlyWalk", 0x133)); + fn_80030980(mMdl.getModel(), 1, false); + + mMdl.getModel().setCallback(&mMdlCallback); + + nw4r::g3d::ResFile res = mMdl.getMdlFile(); + nw4r::g3d::ResMdl resMdl = mMdl.getModel().getResMdl(); + nw4r::g3d::ResAnmTexPat resTexPat = res.GetResAnmTexPat("RemlyWink"); + + bool result; + TRY_CREATE2(mTexPat.create(resMdl, resTexPat, &mAllocator, nullptr, 1)); + mMdl.getModel().setAnm(mTexPat); + + return true; } int dAcEremly_c::actorCreate() {