diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 3b44e44e..e80304c1 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -82947,7 +82947,7 @@ Address,Quality,Size,Name 0x0000007100f8c4e4,U,000092, 0x0000007100f8c540,U,000008, 0x0000007100f8c548,U,000140, -0x0000007100f8c5d4,W,000492,_ZN4ksys4phys9RigidBodyC1EjjP12hkpRigidBodyRKN4sead14SafeStringBaseIcEEPNS4_4HeapEb +0x0000007100f8c5d4,O,000492,_ZN4ksys4phys9RigidBodyC1EjjP12hkpRigidBodyRKN4sead14SafeStringBaseIcEEPNS4_4HeapEb 0x0000007100f8c7c0,U,000160, 0x0000007100f8c860,U,000160, 0x0000007100f8c900,U,000168, diff --git a/src/KingSystem/Physics/RigidBody/physRigidBody.cpp b/src/KingSystem/Physics/RigidBody/physRigidBody.cpp index 1129f972..e228cde2 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBody.cpp +++ b/src/KingSystem/Physics/RigidBody/physRigidBody.cpp @@ -7,21 +7,21 @@ namespace ksys::phys { // NON_MATCHING RigidBody::RigidBody(u32 a, u32 mass_scaling, hkpRigidBody* hk_body, const sead::SafeString& name, sead::Heap* heap, bool a7) - : mHkBody(hk_body), mHkBodyMgr(hk_body), _b4(a) { + : mCS(heap), mHkBody(hk_body), mHkBodyMgr(hk_body), _b4(a) { if (!name.isEmpty()) { - hk_body->setName(name.cstr()); + mHkBody->setName(name.cstr()); } - hk_body->setUserData(reinterpret_cast(this)); - hk_body->m_motion.m_savedMotion = nullptr; - hk_body->m_motion.m_motionState.m_timeFactor.setOne(); - hk_body->enableDeactivation(true); - hk_body->getCollidableRw()->m_allowedPenetrationDepth = 0.1f; - if (mFlags.isOn(Flag1::MassScaling)) { - hk_body->m_responseModifierFlags |= 1; + mHkBody->setUserData(reinterpret_cast(this)); + mHkBody->m_motion.m_savedMotion = nullptr; + mHkBody->m_motion.m_motionState.m_timeFactor.setOne(); + mHkBody->enableDeactivation(true); + mHkBody->getCollidableRw()->m_allowedPenetrationDepth = 0.1f; + if (mFlags.isOff(Flag1::MassScaling)) { + mHkBody->m_responseModifierFlags |= 1; } mFlags.change(Flag1::_80, _b4 == 5); - mFlags.change(Flag1::MassScaling, mass_scaling); + mFlags.change(Flag1::MassScaling, mass_scaling == 1); mFlags.change(Flag1::_10, a7); mFlags.set(Flag1::_100); } diff --git a/src/KingSystem/Physics/RigidBody/physRigidBody.h b/src/KingSystem/Physics/RigidBody/physRigidBody.h index af6e39fc..48e3736d 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBody.h +++ b/src/KingSystem/Physics/RigidBody/physRigidBody.h @@ -19,7 +19,7 @@ class MotionAccessor; class RigidBase { public: - virtual ~RigidBase(); + virtual ~RigidBase() = 0; }; class RigidBody : public sead::IDisposer, public RigidBase { @@ -56,7 +56,21 @@ public: RigidBody(u32 a, u32 mass_scaling, hkpRigidBody* hk_body, const sead::SafeString& name, sead::Heap* heap, bool a7); - virtual ~RigidBody(); + ~RigidBody() override; + + // FIXME: types and names + virtual void m4(); + virtual void m5(); + virtual void m6(); + virtual void m7(); + virtual void m8(); + // FIXME: should be pure + virtual void m9(); + virtual void m10(); + virtual void m11(); + virtual void m12(); + virtual void m13(); + virtual void m14(); void sub_7100F8CFA0(); void setMotionFlag(MotionFlag); @@ -94,10 +108,11 @@ private: void* _90 = nullptr; u16 _98 = 0; HkBodyMgr mHkBodyMgr; - f32 _b0 = 0.0f; - u32 _b4; + f32 _b0 = 1.0f; + u32 _b4 = 0; MotionAccessor* mMotionAccessor = nullptr; u16 _c0 = 0; + u16 _c2 = 0; void* _c8 = nullptr; }; KSYS_CHECK_SIZE_NX150(RigidBody, 0xD0);