summaryrefslogtreecommitdiff
path: root/src/m
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-05-19 00:27:07 +0200
committerrobojumper <robojumper@gmail.com>2025-05-19 21:52:55 +0200
commit7f3dbef3224de96d0aebc61d0842677a8eca6f15 (patch)
treeabdb5f0764071c6505f3d62f59794c11963eb50a /src/m
parentbb6fd66745a19426066f4c664fc0972634d09462 (diff)
More
Diffstat (limited to 'src/m')
-rw-r--r--src/m/m3d/m_bmdl.cpp2
-rw-r--r--src/m/m3d/m_shadow.cpp28
2 files changed, 13 insertions, 17 deletions
diff --git a/src/m/m3d/m_bmdl.cpp b/src/m/m3d/m_bmdl.cpp
index 916d6440..2515e856 100644
--- a/src/m/m3d/m_bmdl.cpp
+++ b/src/m/m3d/m_bmdl.cpp
@@ -39,7 +39,7 @@ bool bmdl_c::getNodeWorldMtxMultVecZero(u32 p1, nw4r::math::VEC3 &out) const {
}
}
-bool bmdl_c::getNodeWorldMtxMultVec(u32 p1, nw4r::math::VEC3 &in, nw4r::math::VEC3 &out) const {
+bool bmdl_c::getNodeWorldMtxMultVec(u32 p1, const nw4r::math::VEC3 &in, nw4r::math::VEC3 &out) const {
nw4r::math::MTX34 mtx;
if (!getNodeWorldMtx(p1, &mtx)) {
return false;
diff --git a/src/m/m3d/m_shadow.cpp b/src/m/m3d/m_shadow.cpp
index 903ca14f..da0246ef 100644
--- a/src/m/m3d/m_shadow.cpp
+++ b/src/m/m3d/m_shadow.cpp
@@ -514,17 +514,14 @@ bool mShadowChild_c::setGeom(const GXTexObj *texObj, const mMtx_c &mtx, const mQ
}
void mShadowChild_c::updateMtx() {
- const mQuat_c &q = GetQuat();
- const mVec3_c &pos = GetPosition();
+ // NONMATCHING
+ field_0x13C = mQuat.w;
- Set0x13C(q.w);
-
- mVec3_c a(q.v);
-
- a += pos * GetOffset();
-
- mVec3_c b(q.v);
- b -= pos * Get0x13C();
+ mVec3_c a(mQuat.v.x, mQuat.v.y, mQuat.v.z);
+ a += mPositionMaybe * GetOffset();
+
+ mVec3_c b(mQuat.v.x, mQuat.v.y, mQuat.v.z);
+ b -= mPositionMaybe * field_0x13C;
const mVec3_c *up;
if (cM::isZero((a - b).squareMagXZ())) {
@@ -536,17 +533,16 @@ void mShadowChild_c::updateMtx() {
mMtx_c mtx;
C_MTXLookAt(mtx.m, a, *up, b);
- const f32 f = Get0x13C();
+ f32 f = field_0x13C;
mFrustum.set(f, -f, -f, f, f, f + GetOffset(), mtx, true);
}
void mShadowChild_c::drawMdl() {
- // Equivalent, but stack problems and regswaps
using namespace nw4r;
- mMtx_c mtx;
+ Mtx44 mtx;
GXSetTevColor(GX_TEVREG0, sColors[mColorChanIdx]);
- C_MTXOrtho(mtx.m, field_0x13C, -field_0x13C, -field_0x13C, field_0x13C, 0.0f, 100.0f + (-mFrustum.mFar));
- GXSetProjection(mtx.m, GX_ORTHOGRAPHIC);
+ C_MTXOrtho(mtx, field_0x13C, -field_0x13C, -field_0x13C, field_0x13C, 0.0f, 100.0f + (-mFrustum.mFar));
+ GXSetProjection(mtx, GX_ORTHOGRAPHIC);
g3d::G3DState::Invalidate(0x7FF);
mMtx_c &viewMtx = mFrustum.mView;
@@ -571,7 +567,7 @@ void mShadowChild_c::drawMdl() {
g3d::DrawResMdlReplacement *pRep = mdl2 ? &mdl2->GetDrawResMdlReplacement() : nullptr;
g3d::DrawResMdlDirectly(
- resMdl, viewPosArray, nullptr, nullptr, mdl2->GetByteCode(g3d::ScnMdlSimple::BYTE_CODE_DRAW_OPA),
+ resMdl, viewPosArray, nullptr, nullptr, mdl->GetByteCode(g3d::ScnMdlSimple::BYTE_CODE_DRAW_OPA),
nullptr, pRep, g3d::RESMDL_DRAWMODE_FORCE_LIGHTOFF | g3d::RESMDL_DRAWMODE_IGNORE_MATERIAL
);
GXInvalidateVtxCache();