From 3e782da781f70e3037929ead03565d40f7542407 Mon Sep 17 00:00:00 2001 From: Skijer Date: Wed, 29 Apr 2026 16:22:04 -0600 Subject: [PATCH 1/2] Match `Hitbox::update` Extract `bsp->radius` to a local and reorder scaledPos.y operations as in-place mutations to influence float register allocation, so the function produces identical bytes to the target. Promotes KartHitbox.cpp from NonMatching to Equivalent. --- configure.py | 2 +- src/kart/KartHitbox.cpp | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/configure.py b/configure.py index 7173f05..fb6064f 100755 --- a/configure.py +++ b/configure.py @@ -800,7 +800,7 @@ def MatchingFor(*versions): Object(NonMatching, "kart/KartPhysics.cpp"), Object(Matching, "kart/KartPhysicsInstance.cpp"), Object(NonMatching, "kart/KartDynamics.cpp"), - Object(NonMatching, "kart/KartHitbox.cpp"), + Object(Equivalent, "kart/KartHitbox.cpp"), Object(Matching, "ui/ControlGroup.cpp"), Object(Matching, "ui/MessageGroup.cpp"), diff --git a/src/kart/KartHitbox.cpp b/src/kart/KartHitbox.cpp index cdadb72..ee35042 100644 --- a/src/kart/KartHitbox.cpp +++ b/src/kart/KartHitbox.cpp @@ -21,19 +21,19 @@ MARK_FLOW_CHECK(0x805b7fbc); void Hitbox::update(const EGG::Vector3f& scale, const EGG::Quatf& rot, const EGG::Vector3f& pos, f32 totalScale, f32 hitboxElevation) { f32 postScaleHitboxElevation = 0.0f; if (scale.y < totalScale) { - float dist = totalScale - scale.y; - postScaleHitboxElevation = (dist) * this->bsp->radius; + f32 dist = totalScale - scale.y; + f32 radius = this->bsp->radius; + postScaleHitboxElevation = dist * radius; } EGG::Vector3f scaledPos = this->bsp->pos; - scaledPos.x *= scale.x; + scaledPos.y += hitboxElevation; scaledPos.z *= scale.z; - float sum = (scaledPos.y + hitboxElevation); - float summult = sum * scale.y; - scaledPos.y = (summult) + postScaleHitboxElevation; + scaledPos.y *= scale.y; + scaledPos.y += postScaleHitboxElevation; const_cast(rot).rotateVector(scaledPos, this->relPos); - + this->pos.x = this->relPos.x + pos.x; this->pos.y = this->relPos.y + pos.y; this->pos.z = this->relPos.z + pos.z; From fd58c00089d4c27ac242481ff359d290e9bab4bd Mon Sep 17 00:00:00 2001 From: Skijer Date: Mon, 11 May 2026 10:09:54 -0600 Subject: [PATCH 2/2] KartJHitbox matching --- configure.py | 2 +- src/kart/KartHitbox.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/configure.py b/configure.py index fb6064f..c6cee54 100755 --- a/configure.py +++ b/configure.py @@ -800,7 +800,7 @@ def MatchingFor(*versions): Object(NonMatching, "kart/KartPhysics.cpp"), Object(Matching, "kart/KartPhysicsInstance.cpp"), Object(NonMatching, "kart/KartDynamics.cpp"), - Object(Equivalent, "kart/KartHitbox.cpp"), + Object(Matching, "kart/KartHitbox.cpp"), Object(Matching, "ui/ControlGroup.cpp"), Object(Matching, "ui/MessageGroup.cpp"), diff --git a/src/kart/KartHitbox.cpp b/src/kart/KartHitbox.cpp index ee35042..bb1512d 100644 --- a/src/kart/KartHitbox.cpp +++ b/src/kart/KartHitbox.cpp @@ -17,7 +17,6 @@ void Hitbox::reset() { this->relPos.setZero(); } -MARK_FLOW_CHECK(0x805b7fbc); void Hitbox::update(const EGG::Vector3f& scale, const EGG::Quatf& rot, const EGG::Vector3f& pos, f32 totalScale, f32 hitboxElevation) { f32 postScaleHitboxElevation = 0.0f; if (scale.y < totalScale) {