havok stubs and ksys::phys work

This commit is contained in:
theo3 2021-11-29 00:00:56 -08:00
parent e09eb09f66
commit 87e8bafae2
43 changed files with 1440 additions and 170 deletions

View File

@ -48,4 +48,7 @@ target_link_libraries(uking PRIVATE evfl)
add_subdirectory(lib/xlink2)
target_link_libraries(uking PRIVATE xlink2)
add_subdirectory(lib/hkStubs)
target_link_libraries(uking PRIVATE hkStubs)
add_subdirectory(src)

View File

@ -82947,28 +82947,28 @@ Address,Quality,Size,Name
0x0000007100f8c4e4,U,000092,
0x0000007100f8c540,U,000008,
0x0000007100f8c548,U,000140,
0x0000007100f8c5d4,U,000492,
0x0000007100f8c5d4,W,000492,_ZN4ksys4phys9RigidBodyC1EjjP12hkpRigidBodyRKN4sead14SafeStringBaseIcEEPNS4_4HeapEb
0x0000007100f8c7c0,U,000160,
0x0000007100f8c860,U,000160,
0x0000007100f8c900,U,000168,
0x0000007100f8c9a8,U,000168,
0x0000007100f8ca50,U,000584,
0x0000007100f8cc98,U,000172,
0x0000007100f8cd44,U,000552,
0x0000007100f8cd44,U,000552,phys::RigidBody::initMotion
0x0000007100f8cf6c,U,000052,
0x0000007100f8cfa0,U,000424,
0x0000007100f8d148,U,000144,
0x0000007100f8d148,O,000144,_ZN4ksys4phys9RigidBody13setMotionFlagENS1_10MotionFlagE
0x0000007100f8d1d8,U,000032,
0x0000007100f8d1f8,U,000012,
0x0000007100f8d204,U,000012,
0x0000007100f8d210,U,000012,
0x0000007100f8d21c,U,000236,
0x0000007100f8d1f8,O,000012,_ZNK4ksys4phys9RigidBody14sub_7100F8D1F8Ev
0x0000007100f8d204,O,000012,_ZNK4ksys4phys9RigidBody14sub_7100F8D204Ev
0x0000007100f8d210,O,000012,_ZNK4ksys4phys9RigidBody14sub_7100F8D210Ev
0x0000007100f8d21c,m,000236,_ZN4ksys4phys9RigidBody14sub_7100F8D21CEv
0x0000007100f8d308,U,000888,
0x0000007100f8d680,U,000140,
0x0000007100f8d70c,U,000156,
0x0000007100f8d7a8,U,000152,
0x0000007100f8d840,U,001156,
0x0000007100f8dcc4,U,000056,collisionStuffMaybe::x
0x0000007100f8dcc4,O,000056,_ZNK4ksys4phys9RigidBody13getMotionInfoEv
0x0000007100f8dcfc,U,001044,
0x0000007100f8e110,U,000748,
0x0000007100f8e3fc,U,000816,
@ -82976,17 +82976,17 @@ Address,Quality,Size,Name
0x0000007100f8e7b4,U,000052,
0x0000007100f8e7e8,U,000724,
0x0000007100f8eabc,U,000384,
0x0000007100f8ec3c,U,000312,
0x0000007100f8ed74,U,000196,physicsSetVelocityAndAngularVelocityMaybe
0x0000007100f8ec3c,U,000312,RigidBody::setLinearVelocity
0x0000007100f8ed74,U,000196,RigidBody::setAngularVelocity
0x0000007100f8ee38,U,000024,
0x0000007100f8ee50,U,000048,
0x0000007100f8ee80,U,000384,
0x0000007100f8f000,U,000012,
0x0000007100f8f00c,U,000080,
0x0000007100f8f05c,U,000080,
0x0000007100f8f0ac,U,000008,
0x0000007100f8f0b4,U,000012,
0x0000007100f8f0c0,U,000008,
0x0000007100f8f0ac,O,000008,_ZN4ksys4phys9RigidBody14setContactMaskEj
0x0000007100f8f0b4,O,000012,_ZN4ksys4phys9RigidBody13setContactAllEv
0x0000007100f8f0c0,O,000008,_ZN4ksys4phys9RigidBody14setContactNoneEv
0x0000007100f8f0c8,U,000176,
0x0000007100f8f178,U,000064,
0x0000007100f8f1b8,U,000012,
@ -83257,11 +83257,11 @@ Address,Quality,Size,Name
0x0000007100f99050,U,000008,
0x0000007100f99058,U,000204,
0x0000007100f99124,U,000092,
0x0000007100f99180,U,000188,
0x0000007100f9923c,U,000188,
0x0000007100f992f8,U,000188,
0x0000007100f993b4,U,000188,
0x0000007100f99470,U,000188,
0x0000007100f99180,O,000188,_ZN4ksys4phys16RigidBodyFactory12createSphereEPNS0_18RigidBodyParamViewEPN4sead4HeapE
0x0000007100f9923c,O,000188,_ZN4ksys4phys16RigidBodyFactory13createCapsuleEPNS0_18RigidBodyParamViewEPN4sead4HeapE
0x0000007100f992f8,O,000188,_ZN4ksys4phys16RigidBodyFactory14createCylinderEPNS0_18RigidBodyParamViewEPN4sead4HeapE
0x0000007100f993b4,O,000188,_ZN4ksys4phys16RigidBodyFactory19createWaterCylinderEPNS0_18RigidBodyParamViewEPN4sead4HeapE
0x0000007100f99470,O,000188,_ZN4ksys4phys16RigidBodyFactory9createBoxEPNS0_18RigidBodyParamViewEPN4sead4HeapE
0x0000007100f9952c,U,000188,
0x0000007100f995e8,U,000188,
0x0000007100f996a4,U,000188,
@ -83569,20 +83569,20 @@ Address,Quality,Size,Name
0x0000007100fab688,U,000276,
0x0000007100fab79c,U,000008,
0x0000007100fab7a4,U,000184,
0x0000007100fab85c,U,000332,
0x0000007100fab9a8,U,000184,
0x0000007100faba60,U,000008,
0x0000007100faba68,U,000060,
0x0000007100fabac4,U,000064,
0x0000007100fabb04,U,000072,
0x0000007100fabb4c,U,000060,
0x0000007100fabb88,U,000192,
0x0000007100fabc48,U,000140,
0x0000007100fabcd4,U,000008,
0x0000007100fabcdc,U,000008,
0x0000007100fab85c,m,000332,_ZN4ksys4phys12CapsuleShape4initEPN4sead4HeapE
0x0000007100fab9a8,O,000184,_ZN4ksys4phys11CapsuleBody5cloneEPN4sead4HeapE
0x0000007100faba60,O,000008,_ZNK4ksys4phys11CapsuleBody9getRadiusEv
0x0000007100faba68,O,000060,_ZNK4ksys4phys11CapsuleBody11getVerticesEPN4sead7Vector3IfEES5_
0x0000007100fabac4,O,000064,_ZN4ksys4phys11CapsuleBodyD1Ev
0x0000007100fabb04,O,000072,_ZN4ksys4phys11CapsuleBodyD0Ev
0x0000007100fabb4c,m,000060,_ZN4ksys4phys11CapsuleBody9setRadiusEf
0x0000007100fabb88,O,000192,_ZN4ksys4phys11CapsuleBody11setVerticesERKN4sead7Vector3IfEES6_
0x0000007100fabc48,m,000140,_ZNK4ksys4phys11CapsuleBody9getVolumeEv
0x0000007100fabcd4,O,000008,_ZN4ksys4phys11CapsuleBody8getShapeEv
0x0000007100fabcdc,O,000008,_ZNK4ksys4phys11CapsuleBody8getShapeEv
0x0000007100fabce4,U,000252,
0x0000007100fabde0,U,000160,
0x0000007100fabe80,U,000192,
0x0000007100fabe80,m,000192,_ZN4ksys4phys11CapsuleBody14sub_7100FABE80EPN4sead7Vector3IfEES5_RK9hkVector4
0x0000007100fabf40,U,000204,
0x0000007100fac00c,U,000092,
0x0000007100fac068,U,000008,
@ -83851,13 +83851,13 @@ Address,Quality,Size,Name
0x0000007100fb918c,U,000492,ActorPhysics::setModel
0x0000007100fb9378,U,001456,
0x0000007100fb9928,U,000468,
0x0000007100fb9afc,U,000032,ActorPhysics::setFlag2
0x0000007100fb9b1c,U,000024,ActorPhysics::clothVisibleStuff
0x0000007100fb9b34,U,000016,
0x0000007100fb9b44,U,000016,
0x0000007100fb9b54,U,000088,ActorPhysics::clothVisibleStuff_0
0x0000007100fb9bac,U,000128,
0x0000007100fb9c2c,U,000040,
0x0000007100fb9afc,O,000032,_ZN4ksys4phys11InstanceSet8setFlag2Ev
0x0000007100fb9b1c,O,000024,_ZN4ksys4phys11InstanceSet17clothVisibleStuffEv
0x0000007100fb9b34,O,000016,_ZN4ksys4phys11InstanceSet9setInDemoEv
0x0000007100fb9b44,O,000016,_ZN4ksys4phys11InstanceSet11resetInDemoEv
0x0000007100fb9b54,O,000088,_ZN4ksys4phys11InstanceSet19clothVisibleStuff_0Ei
0x0000007100fb9bac,O,000128,_ZN4ksys4phys11InstanceSet14sub_7100FB9BACEPS1_
0x0000007100fb9c2c,O,000040,_ZNK4ksys4phys11InstanceSet14sub_7100FB9C2CEv
0x0000007100fb9c54,U,000208,ActorPhysics::calcMaybe
0x0000007100fb9d24,U,000140,
0x0000007100fb9db0,U,000224,
@ -83870,17 +83870,17 @@ Address,Quality,Size,Name
0x0000007100fba508,U,000096,
0x0000007100fba568,U,000596,ActorPhysics::setMtx_x
0x0000007100fba7bc,U,000512,
0x0000007100fba9bc,U,000128,
0x0000007100fba9bc,O,000128,_ZN4ksys4phys11InstanceSet14sub_7100FBA9BCEv
0x0000007100fbaa3c,U,000140,
0x0000007100fbaac8,U,000160,
0x0000007100fbab68,U,000228,
0x0000007100fbac4c,U,000148,
0x0000007100fbace0,U,000148,
0x0000007100fbad74,U,000104,
0x0000007100fbace0,O,000148,_ZN4ksys4phys11InstanceSet14sub_7100FBACE0ENS0_12ContactLayerE
0x0000007100fbad74,O,000104,_ZN4ksys4phys11InstanceSet14sub_7100FBAD74Ev
0x0000007100fbaddc,U,000256,
0x0000007100fbaedc,U,000060,
0x0000007100fbaedc,O,000060,_ZNK4ksys4phys11InstanceSet14sub_7100FBAEDCEii
0x0000007100fbaf18,U,000244,
0x0000007100fbb00c,U,000384,
0x0000007100fbb00c,M,000384,_ZN4ksys4phys11InstanceSet14sub_7100FBB00CEPNS0_9RigidBodyEPNS0_14RigidBodyParamE
0x0000007100fbb18c,U,000272,
0x0000007100fbb29c,U,000216,
0x0000007100fbb374,U,000172,
@ -83891,16 +83891,16 @@ Address,Quality,Size,Name
0x0000007100fbb7bc,U,000348,ActorPhysics::findBodyByName_0
0x0000007100fbb918,U,000392,
0x0000007100fbbaa0,U,000392,ActorPhysics::findX
0x0000007100fbbc28,U,000080,
0x0000007100fbbc78,U,000292,
0x0000007100fbbd9c,U,000292,
0x0000007100fbbc28,O,000080,_ZNK4ksys4phys11InstanceSet14sub_7100FBBC28ERKN4sead14SafeStringBaseIcEE
0x0000007100fbbc78,O,000292,_ZNK4ksys4phys11InstanceSet14sub_7100FBBC78ERKN4sead14SafeStringBaseIcEE
0x0000007100fbbd9c,O,000292,_ZNK4ksys4phys11InstanceSet14sub_7100FBBD9CERKN4sead14SafeStringBaseIcEE
0x0000007100fbbec0,U,000004,nullsub_4244
0x0000007100fbbec4,U,002420,
0x0000007100fbc838,U,000088,
0x0000007100fbc890,U,000936,
0x0000007100fbcc38,U,001012,
0x0000007100fbd02c,U,000600,
0x0000007100fbd284,U,000160,
0x0000007100fbd284,O,000160,_ZN4ksys4phys11InstanceSet14sub_7100FBD284ERKN4sead8Matrix34IfEE
0x0000007100fbd324,U,000108,
0x0000007100fbd390,U,000092,
0x0000007100fbd3ec,U,000036,
@ -83911,7 +83911,7 @@ Address,Quality,Size,Name
0x0000007100fbd94c,U,000056,
0x0000007100fbd984,U,000132,
0x0000007100fbda08,U,000036,
0x0000007100fbda2c,U,000304,
0x0000007100fbda2c,O,000304,_ZNK4ksys4phys11InstanceSet14sub_7100FBDA2CERKN4sead14SafeStringBaseIcEE
0x0000007100fbdb5c,U,000052,
0x0000007100fbdb90,U,000072,
0x0000007100fbdbd8,U,000076,
@ -95349,15 +95349,15 @@ Address,Quality,Size,Name
0x00000071012ae830,U,001508,
0x00000071012aee14,U,002304,
0x00000071012af714,U,001036,
0x00000071012afb20,U,000028,
0x00000071012afb3c,U,000004,nullsub_4775
0x00000071012afb40,U,000004,j__ZdlPv_1290
0x00000071012afb44,U,000008,
0x00000071012afb4c,U,000008,
0x00000071012afb54,U,000008,
0x00000071012afb5c,U,000020,
0x00000071012afb70,U,000020,
0x00000071012afb84,U,000032,
0x00000071012afb20,O,000028,_ZN4ksys4phys14MotionAccessorC1EPNS0_9RigidBodyE
0x00000071012afb3c,O,000004,_ZN4ksys4phys14MotionAccessorD1Ev
0x00000071012afb40,O,000004,_ZN4ksys4phys14MotionAccessorD0Ev
0x00000071012afb44,O,000008,_ZNK4ksys4phys14MotionAccessor13getMotionInfoEv
0x00000071012afb4c,O,000008,_ZNK4ksys4phys14MotionAccessor9getMotionEv
0x00000071012afb54,O,000008,_ZN4ksys4phys14MotionAccessor13setMotionFlagENS0_9RigidBody10MotionFlagE
0x00000071012afb5c,O,000020,_ZNK4ksys4phys14MotionAccessor12hasMotionSetENS0_9RigidBody10MotionFlagE
0x00000071012afb70,O,000020,_ZNK4ksys4phys14MotionAccessor17hasMotionDisabledENS0_9RigidBody10MotionFlagE
0x00000071012afb84,O,000032,_ZN4ksys4phys14MotionAccessor17disableMotionFlagENS0_9RigidBody10MotionFlagE
0x00000071012afba4,U,000112,
0x00000071012afc14,U,000092,
0x00000071012afc70,U,000048,HavokResource::ctor
@ -102883,7 +102883,7 @@ Address,Quality,Size,Name
0x000000710157f5c8,U,000108,
0x000000710157f634,U,000272,
0x000000710157f744,U,000052,
0x000000710157f778,U,000020,
0x000000710157f778,L,000020,hkpWorldObject::checkReadOnly
0x000000710157f78c,U,000492,
0x000000710157f978,U,000468,
0x000000710157fb4c,U,000012,
@ -102951,7 +102951,7 @@ Address,Quality,Size,Name
0x00000071015821d8,U,000344,
0x0000007101582330,U,000352,
0x0000007101582490,U,000384,
0x0000007101582610,U,000348,
0x0000007101582610,L,000348,hkSweptTransformUtil::freezeMotionState
0x000000710158276c,U,000352,
0x00000071015828cc,U,000036,
0x00000071015828f0,U,000148,
@ -103230,7 +103230,7 @@ Address,Quality,Size,Name
0x000000710158b814,U,000032,_ZN2nn3nex15DDLDeclarations4LoadEv
0x000000710158b834,U,000060,
0x000000710158b8b4,U,000064,
0x000000710158b8f4,U,000172,
0x000000710158b8f4,L,000172,hkRotation::set
0x000000710158b9a0,U,000212,
0x000000710158ba74,U,000280,
0x000000710158bb8c,U,000608,
@ -103285,7 +103285,7 @@ Address,Quality,Size,Name
0x000000710158da68,U,000020,
0x000000710158da7c,U,000004,nullsub_5081
0x000000710158da80,U,000080,
0x000000710158dad0,U,000040,
0x000000710158dad0,L,000040,hkStringPtr::operatorEQ
0x000000710158daf8,U,000048,
0x000000710158db28,U,000020,
0x000000710158db3c,U,000468,
@ -103330,7 +103330,7 @@ Address,Quality,Size,Name
0x000000710158f19c,U,000240,
0x000000710158f28c,U,000144,
0x000000710158f31c,U,000016,
0x000000710158f32c,U,000228,
0x000000710158f32c,L,000228,hkUFloat8::operatorEQ
0x000000710158f410,U,000152,
0x000000710158f4a8,U,000092,
0x000000710158f504,U,001264,
@ -103872,7 +103872,7 @@ Address,Quality,Size,Name
0x00000071015bdab4,U,000608,
0x00000071015bdd14,U,000876,
0x00000071015be080,U,000084,
0x00000071015be0d4,U,000008,
0x00000071015be0d4,L,000008,hkpConvexShape::isConvex
0x00000071015be0dc,U,000040,
0x00000071015be104,U,000012,
0x00000071015be110,U,000056,
@ -103907,7 +103907,7 @@ Address,Quality,Size,Name
0x00000071015bf7c8,U,001764,
0x00000071015bfeac,U,000872,
0x00000071015c0214,U,000792,
0x00000071015c052c,U,000076,
0x00000071015c052c,L,000076,hkpCapsuleShape::hkpCapsuleShape
0x00000071015c0578,U,000060,
0x00000071015c05b4,U,000012,
0x00000071015c05c0,U,000024,
@ -105025,7 +105025,7 @@ Address,Quality,Size,Name
0x00000071015fbe7c,U,000096,
0x00000071015fbedc,U,000064,
0x00000071015fbf1c,U,000064,
0x00000071015fbf5c,U,000056,
0x00000071015fbf5c,L,000056,hkpFixedRigidMotion::hkpFixedRigidMotion
0x00000071015fbf94,U,000004,nullsub_5162
0x00000071015fbf98,U,000140,
0x00000071015fc024,U,000004,nullsub_5163
@ -105036,7 +105036,7 @@ Address,Quality,Size,Name
0x00000071015fc098,U,000012,
0x00000071015fc0a4,U,000176,
0x00000071015fc154,U,000364,
0x00000071015fc2c0,U,000364,
0x00000071015fc2c0,L,000364,hkpPhantom::firePhantomAdded
0x00000071015fc42c,U,000364,
0x00000071015fc598,U,001312,
0x00000071015fcab8,U,000156,
@ -105045,16 +105045,16 @@ Address,Quality,Size,Name
0x00000071015fcc98,U,000432,
0x00000071015fce48,U,000088,
0x00000071015fcea0,U,000148,
0x00000071015fcf34,U,000188,
0x00000071015fcf34,L,000188,hkpRigidBodyCinfo::hkpRigidBodyCinfo
0x00000071015fcff0,U,000288,
0x00000071015fd110,U,000360,
0x00000071015fd278,U,000460,
0x00000071015fd444,U,000320,
0x00000071015fd584,U,000272,
0x00000071015fd694,U,000280,
0x00000071015fd7ac,U,000240,
0x00000071015fd7ac,L,000240,hkpEntity::hkpEntity
0x00000071015fd89c,U,000288,
0x00000071015fd9bc,U,000276,
0x00000071015fd9bc,L,000276,hkpEntity::setCachedShapeData
0x00000071015fdad0,U,000916,
0x00000071015fde64,U,000072,
0x00000071015fdeac,U,000088,
@ -105062,10 +105062,10 @@ Address,Quality,Size,Name
0x00000071015fdfec,U,000176,
0x00000071015fe09c,U,000144,
0x00000071015fe12c,U,000028,
0x00000071015fe148,U,000144,
0x00000071015fe148,L,000144,hkpEntity::activate
0x00000071015fe1d8,U,000040,
0x00000071015fe200,U,000220,
0x00000071015fe2dc,U,001056,
0x00000071015fe2dc,L,001056,hkpEntity::deallocateInternalArrays
0x00000071015fe6fc,U,000016,
0x00000071015fe70c,U,000052,
0x00000071015fe740,U,000052,
@ -105083,11 +105083,11 @@ Address,Quality,Size,Name
0x00000071016003e8,U,000364,
0x0000007101600554,U,000088,
0x00000071016005ac,U,001300,
0x0000007101600ac0,U,000008,
0x0000007101600ac8,U,001932,
0x0000007101600ac0,L,000008,hkpWorld::queueOperation
0x0000007101600ac8,L,001932,hkpWorld::updateCollisionFilterOnEntity
0x0000007101601254,U,000828,
0x0000007101601590,U,000308,
0x00000071016016c4,U,000224,
0x00000071016016c4,L,000224,hkpWorld::reenableCollisionBetweenEntityPair
0x00000071016017a4,U,000464,
0x0000007101601974,U,001748,
0x0000007101602048,U,000276,
@ -105096,9 +105096,9 @@ Address,Quality,Size,Name
0x00000071016024c4,U,000412,
0x0000007101602660,U,000712,
0x0000007101602928,U,000060,
0x0000007101602964,U,000360,
0x0000007101602964,L,000360,hkpWorld::addPhantom
0x0000007101602acc,U,001248,
0x0000007101602fac,U,000416,
0x0000007101602fac,L,000416,hkpWorld::removePhantom
0x000000710160314c,U,000096,
0x00000071016031ac,U,000076,
0x00000071016031f8,U,000096,
@ -105125,7 +105125,7 @@ Address,Quality,Size,Name
0x0000007101603890,U,000004,nullsub_5166
0x0000007101603894,U,001088,
0x0000007101603cd4,U,000008,
0x0000007101603cdc,U,004924,
0x0000007101603cdc,L,004924,_ZN8hkpWorldC1Ev
0x0000007101605018,U,000384,
0x0000007101605198,U,000204,
0x0000007101605264,U,000224,
@ -105138,8 +105138,8 @@ Address,Quality,Size,Name
0x0000007101605ae4,U,000232,
0x0000007101605bcc,U,000404,
0x0000007101605d60,U,000232,
0x0000007101605e48,U,000012,
0x0000007101605e54,U,000012,
0x0000007101605e48,U,000012,hkpWorld::internal_executePendingOperations
0x0000007101605e54,U,000012,hkpWorld::internal_executePendingBodyOperation
0x0000007101605e60,U,000108,
0x0000007101605ecc,U,000248,
0x0000007101605fc4,U,000004,nullsub_5167
@ -105166,11 +105166,11 @@ Address,Quality,Size,Name
0x00000071016063e4,U,000328,
0x000000710160652c,U,000216,
0x0000007101606604,U,000084,
0x0000007101606658,U,000148,
0x0000007101606658,L,000148,hkpMotion::hkpMotion
0x00000071016066ec,U,000144,
0x000000710160677c,U,000036,
0x00000071016067a0,U,000076,
0x00000071016067ec,U,000052,
0x00000071016067ec,L,000052,hkpMotion::getMass
0x0000007101606820,U,000008,
0x0000007101606828,U,000020,
0x000000710160683c,U,000016,
@ -105183,7 +105183,7 @@ Address,Quality,Size,Name
0x00000071016068a4,U,000012,
0x00000071016068b0,U,000024,
0x00000071016068c8,U,000156,
0x0000007101606964,U,000008,
0x0000007101606964,L,000008,hkpMotion::setDeactivationClass
0x000000710160696c,U,000136,
0x00000071016069f4,U,000084,
0x0000007101606a48,U,000132,
@ -105210,11 +105210,11 @@ Address,Quality,Size,Name
0x0000007101607d74,U,000092,
0x0000007101607dd0,U,000068,
0x0000007101607e14,U,000232,
0x0000007101607efc,U,000344,
0x0000007101607efc,L,000344,hkpWorldCinfo::hkpWorldCinfo
0x0000007101608054,U,000032,
0x0000007101608074,U,000244,
0x0000007101608168,U,000084,
0x00000071016081bc,U,000968,
0x00000071016081bc,L,000968,hkpWorldOperationUtil::updateEntityBP
0x0000007101608584,U,000452,
0x0000007101608748,U,000432,
0x00000071016088f8,U,000416,
@ -105236,10 +105236,10 @@ Address,Quality,Size,Name
0x000000710160af54,U,000064,
0x000000710160af94,U,001240,
0x000000710160b46c,U,000816,
0x000000710160b79c,U,001552,
0x000000710160b79c,L,001552,hkpWorldOperationUtil::setRigidBodyMotionType
0x000000710160bdac,U,000640,
0x000000710160c02c,U,000376,
0x000000710160c1a4,U,001284,
0x000000710160c1a4,L,001284,hkpWorldOperationUtil::replaceMotionObject
0x000000710160c6a8,U,000640,
0x000000710160c928,U,000060,
0x000000710160c964,U,000388,
@ -105285,17 +105285,17 @@ Address,Quality,Size,Name
0x000000710160eb78,U,000180,
0x000000710160ec2c,U,000004,nullsub_5174
0x000000710160ec30,U,000088,
0x000000710160ec88,U,000096,
0x000000710160ece8,U,000044,
0x000000710160ec88,L,000096,hkpMultiThreadedSimulation::create
0x000000710160ece8,L,000044,hkpMultiThreadedSimulation_registerSelf
0x000000710160ed14,U,000136,
0x000000710160ed9c,U,001340,
0x000000710160f2d8,U,002200,
0x000000710160f2d8,L,002200,hkpMultiThreadedSimulation::finishMtStep
0x000000710160fb70,U,000036,
0x000000710160fb94,U,000012,
0x000000710160fba0,U,000012,
0x000000710160fbac,U,000004,nullsub_5175
0x000000710160fbb0,U,000004,nullsub_5176
0x000000710160fbb4,U,000520,
0x000000710160fbb4,L,000520,hkpMultiThreadedSimulation::addToiEventWithCriticalSectionLoc
0x000000710160fdbc,U,001088,
0x00000071016101fc,U,000736,
0x00000071016104dc,U,001708,
@ -105313,31 +105313,31 @@ Address,Quality,Size,Name
0x0000007101611744,U,000096,
0x00000071016117a4,U,000280,
0x00000071016118bc,U,000208,
0x000000710161198c,U,000436,
0x0000007101611b40,U,001160,
0x0000007101611fc8,U,000172,
0x000000710161198c,L,000436,createDynamicRigidMotion
0x0000007101611b40,L,001160,hkpRigidBody::hkpRigidBody
0x0000007101611fc8,L,000172,hkpRigidBody::enableDeactivation
0x0000007101612074,U,000052,
0x00000071016120a8,U,000020,
0x00000071016120bc,U,000104,
0x0000007101612124,U,000372,
0x0000007101612298,U,000016,
0x00000071016122a8,U,000008,
0x00000071016122b0,U,000820,
0x00000071016125e4,U,000128,
0x0000007101612664,U,000664,
0x00000071016128fc,U,000448,
0x0000007101612298,L,000016,hkpRigidBody::isDeactivationEnabled
0x00000071016122a8,L,000008,hkpRigidBody::getMotionState
0x00000071016122b0,L,000820,hkpRigidBody::clone
0x00000071016125e4,L,000128,hkpRigidBody::setMotionType
0x0000007101612664,L,000664,hkpRigidBody::setShape
0x00000071016128fc,L,000448,hkpRigidBody::updateShape
0x0000007101612abc,U,000208,
0x0000007101612b8c,U,000032,
0x0000007101612bac,U,000272,
0x0000007101612cbc,U,000048,
0x0000007101612cec,U,000048,
0x0000007101612d1c,U,000048,
0x0000007101612b8c,L,000032,hkpRigidBody::getStoredDynamicMotion
0x0000007101612bac,L,000272,hkpRigidBody::updateBroadphaseAndResetCollisionInformationOfWarpedBody
0x0000007101612cbc,L,000048,hkpRigidBody::setPosition
0x0000007101612cec,L,000048,hkpRigidBody::setPositionAndRotation
0x0000007101612d1c,U,000048,hkpRigidBody::setTransform
0x0000007101612d4c,U,000020,
0x0000007101612d60,U,000020,
0x0000007101612d74,U,000020,
0x0000007101612d88,U,000020,
0x0000007101612d88,L,000020,hkpRigidBody::setInertiaInvLocal
0x0000007101612d9c,U,000076,
0x0000007101612de8,U,000112,
0x0000007101612de8,L,000112,hkpKeyframedRigidMotion::dtor
0x0000007101612e58,U,000192,
0x0000007101612f18,U,000004,nullsub_5177
0x0000007101612f1c,U,000004,nullsub_5178
@ -105490,9 +105490,9 @@ Address,Quality,Size,Name
0x000000710161b19c,U,000508,
0x000000710161b398,U,000508,
0x000000710161b594,U,000508,
0x000000710161b790,U,000508,
0x000000710161b98c,U,000508,
0x000000710161bb88,U,000508,
0x000000710161b790,L,000508,hkpWorldCallbackUtil::fireEntityShapeSet
0x000000710161b98c,L,000508,hkpWorldCallbackUtil::fireEntitySetMotionType
0x000000710161bb88,L,000508,hkpWorldCallbackUtil::firePhantomAdded
0x000000710161bd84,U,000508,
0x000000710161bf80,U,000508,
0x000000710161c17c,U,000508,
@ -105513,7 +105513,7 @@ Address,Quality,Size,Name
0x000000710161e304,U,000524,
0x000000710161e510,U,000524,
0x000000710161e71c,U,000524,
0x000000710161e928,U,000508,
0x000000710161e928,L,000508,hkpWorldCallbackUtil::fireInactiveEntityMoved
0x000000710161eb24,U,000512,
0x000000710161ed24,U,000512,
0x000000710161ef24,U,000512,
@ -105528,7 +105528,7 @@ Address,Quality,Size,Name
0x000000710161fd40,U,000072,
0x000000710161fd88,U,000252,
0x000000710161fe84,U,000152,
0x000000710161ff1c,U,001608,
0x000000710161ff1c,L,001608,hkpSimulation::collideEntitiesBroadPhaseDiscrete
0x0000007101620564,U,000996,
0x0000007101620948,U,000148,
0x00000071016209dc,U,000404,
@ -105637,10 +105637,10 @@ Address,Quality,Size,Name
0x0000007101624d50,U,000084,
0x0000007101624da4,U,000032,
0x0000007101624dc4,U,000188,
0x0000007101624e80,U,003460,
0x0000007101624e80,L,003460,hkpWorldOperationQueue::queueOperation
0x0000007101625c04,U,000056,
0x0000007101625c3c,U,000508,
0x0000007101625e38,U,004644,
0x0000007101625e38,L,004644,hkpWorldOperationQueue::executeAllPending
0x000000710162705c,U,000092,
0x00000071016270b8,U,000360,
0x0000007101627220,U,000344,
@ -105676,8 +105676,8 @@ Address,Quality,Size,Name
0x000000710162c518,U,002492,
0x000000710162ced4,U,000232,
0x000000710162cfbc,U,000684,
0x000000710162d268,U,000232,
0x000000710162d350,U,000232,
0x000000710162d268,L,000232,hkpEntityCallbackUtil::fireEntityShapeSet
0x000000710162d350,L,000232,hkpEntityCallbackUtil::fireEntitySetMotionType
0x000000710162d438,U,000232,
0x000000710162d520,U,000356,
0x000000710162d684,U,000356,
@ -105711,7 +105711,7 @@ Address,Quality,Size,Name
0x000000710162e998,U,000096,
0x000000710162e9f8,U,000960,
0x000000710162edb8,U,000872,
0x000000710162f120,U,000268,
0x000000710162f120,L,000268,hkpContinuousSimulation::advanceTime
0x000000710162f22c,U,000460,
0x000000710162f3f8,U,000920,
0x000000710162f790,U,000492,
@ -106054,9 +106054,9 @@ Address,Quality,Size,Name
0x000000710166dccc,U,000160,
0x000000710166dd6c,U,000160,
0x000000710166de0c,U,000184,
0x000000710166dec4,U,000012,
0x000000710166ded0,U,000040,
0x000000710166def8,U,000080,
0x000000710166dec4,L,000012,hkpShapeDisplayBuilder::hkpShapeDisplayBuilderEnvironment::hkpShapeDisplayBuilderEnvironment
0x000000710166ded0,L,000040,hkpShapeDisplayBuilder::hkpShapeDisplayBuilder
0x000000710166def8,L,000080,hkpShapeDisplayBuilder::buildDisplayGeometries
0x000000710166df48,U,002124,
0x000000710166e794,U,000244,
0x000000710166e888,U,001268,
@ -106075,7 +106075,7 @@ Address,Quality,Size,Name
0x00000071016718cc,U,001284,
0x0000007101671dd0,U,001000,
0x00000071016721b8,U,000092,
0x0000007101672214,U,000084,
0x0000007101672214,U,000084,hkpUserShapeDisplayBuilder::dtor
0x0000007101672268,U,000080,
0x00000071016722b8,U,000224,
0x0000007101672398,U,000084,
@ -106108,7 +106108,7 @@ Address,Quality,Size,Name
0x0000007101674958,U,000084,
0x00000071016749ac,U,000460,
0x0000007101674b78,U,000096,
0x0000007101674bd8,U,000124,
0x0000007101674bd8,L,000124,hkpPhysicsContext::hkpPhysicsContext
0x0000007101674c54,U,000376,
0x0000007101674dcc,U,000208,
0x0000007101674e9c,U,000008,
@ -106126,9 +106126,9 @@ Address,Quality,Size,Name
0x0000007101675104,U,000096,
0x0000007101675164,U,000152,
0x00000071016751fc,U,000832,
0x000000710167553c,U,000576,
0x000000710167553c,L,000576,hkpPhysicsContext::addForInspection
0x000000710167577c,U,000152,
0x0000007101675814,U,000248,
0x0000007101675814,L,000248,hkpPhysicsContext::addWorld
0x000000710167590c,U,000004,
0x0000007101675910,U,000008,
0x0000007101675918,U,000036,
@ -106139,17 +106139,17 @@ Address,Quality,Size,Name
0x00000071016759a4,U,000036,
0x00000071016759c8,U,000016,
0x00000071016759d8,U,000016,
0x00000071016759e8,U,000108,
0x00000071016759e8,L,000108,hkpPhysicsContext::constraintAddedCallback
0x0000007101675a54,U,000108,
0x0000007101675ac0,U,000088,
0x0000007101675ac0,L,000088,hkpPhysicsContext::constraintRemovedCallback
0x0000007101675b18,U,000088,
0x0000007101675b70,U,000036,
0x0000007101675b70,L,000036,hkpPhysicsContext::actionAddedCallback
0x0000007101675b94,U,000036,
0x0000007101675bb8,U,000016,
0x0000007101675bb8,L,000016,hkpPhysicsContext::actionRemovedCallback
0x0000007101675bc8,U,000016,
0x0000007101675bd8,U,000144,
0x0000007101675c68,U,000088,
0x0000007101675cc0,U,000012,
0x0000007101675cc0,U,000012,hkpPhysicsContext::getType
0x0000007101675ccc,U,000012,
0x0000007101675cd8,U,000088,
0x0000007101675d30,U,000004,nullsub_5221
@ -106221,7 +106221,7 @@ Address,Quality,Size,Name
0x000000710167811c,U,000148,
0x00000071016781b0,U,000516,
0x00000071016783b4,U,000392,
0x000000710167853c,U,000364,
0x000000710167853c,L,000364,hkpCharacterRigidBody::hkpCharacterRigidBody
0x00000071016786a8,U,000088,
0x0000007101678700,U,000328,
0x0000007101678848,U,000008,
@ -106402,7 +106402,7 @@ Address,Quality,Size,Name
0x000000710167e99c,U,000008,
0x000000710167e9a4,U,000096,
0x000000710167ea04,U,000212,
0x000000710167ead8,U,000060,
0x000000710167ead8,L,000060,hkpSweptTransformDisplayViewer::registerViewer
0x000000710167eb14,U,000088,
0x000000710167eb6c,U,000436,
0x000000710167ed20,U,000088,
@ -106421,7 +106421,7 @@ Address,Quality,Size,Name
0x000000710167f1f8,U,000072,
0x000000710167f240,U,000004,
0x000000710167f244,U,000008,
0x000000710167f24c,U,001620,
0x000000710167f24c,L,001620,hkpSweptTransformDisplayViewer::entityAddedCallback
0x000000710167f8a0,U,000008,
0x000000710167f8a8,U,000344,
0x000000710167fa00,U,000008,
@ -107025,7 +107025,7 @@ Address,Quality,Size,Name
0x000000710169c43c,U,000008,
0x000000710169c444,U,000164,
0x000000710169c4e8,U,000548,
0x000000710169c70c,U,000624,hkSerializeUtil::savePackfile
0x000000710169c70c,L,000624,hkSerializeUtil::savePackfile
0x000000710169c97c,U,000588,
0x000000710169cbc8,U,000156,
0x000000710169cc64,U,000020,
@ -107042,14 +107042,14 @@ Address,Quality,Size,Name
0x000000710169d084,U,000044,
0x000000710169d0b0,U,000048,
0x000000710169d0e0,U,000184,
0x000000710169d198,U,000428,hkNativePackfileUtils::validatePackfileHeader
0x000000710169d198,L,000428,hkNativePackfileUtils::validatePackfileHeader
0x000000710169d344,U,000544,
0x000000710169d564,U,001192,hkNativePackfileUtils::loadInPlace
0x000000710169d564,L,001192,hkNativePackfileUtils::loadInPlace
0x000000710169da0c,U,000216,
0x000000710169dae4,U,000032,
0x000000710169db04,U,000044,
0x000000710169db30,U,000172,
0x000000710169dbdc,U,000256,hkCreateBuiltInTypeRegistry
0x000000710169dbdc,L,000256,hkCreateBuiltInTypeRegistry
0x000000710169dcdc,U,000084,
0x000000710169dd30,U,000016,
0x000000710169dd40,U,000016,
@ -107332,13 +107332,13 @@ Address,Quality,Size,Name
0x00000071016b0e70,U,004444,
0x00000071016b1fcc,U,000968,
0x00000071016b2394,U,000008,
0x00000071016b239c,U,000136,
0x00000071016b239c,L,000136,hkVisualDebugger::hkVisualDebugger
0x00000071016b2424,U,000244,
0x00000071016b2518,U,000944,
0x00000071016b28c8,U,000688,
0x00000071016b2b78,U,000500,
0x00000071016b2d6c,U,000088,
0x00000071016b2dc4,U,000196,
0x00000071016b2dc4,L,000196,hkVisualDebugger::addTrackedObjects
0x00000071016b2e88,U,000216,
0x00000071016b2f60,U,000240,
0x00000071016b3050,U,000152,
@ -107367,7 +107367,7 @@ Address,Quality,Size,Name
0x00000071016b3a58,U,000004,nullsub_5256
0x00000071016b3a5c,U,000236,
0x00000071016b3b48,U,000088,
0x00000071016b3ba0,U,000364,
0x00000071016b3ba0,L,000364,hkProcessFactory::registerProcess
0x00000071016b3d0c,U,000212,
0x00000071016b3de0,U,000152,
0x00000071016b3e78,U,000156,

Can't render this file because it is too large.

View File

@ -0,0 +1,25 @@
project(hkStubs CXX ASM)
add_library(hkStubs OBJECT
Havok/Common/Base/Container/String/hkStringPtr.h
Havok/Common/Base/Types/hkBaseTypes.h
Havok/Common/Base/hkBase.h
Havok/Common/Base/Math/hkMath.h
Havok/Common/Base/Math/Vector/hkVector4.h
Havok/Common/Base/Object/hkBaseObject.h
Havok/Common/Base/Object/hkReferencedObject.h
Havok/Physics/Collide/Shape/hkpShape.h
Havok/Physics/Collide/Shape/Convex/hkpConvexShape.h
Havok/Physics/Collide/Shape/Convex/Capsule/hkpCapsuleShape.h
Havok/Physics/Collide/Shape/HeightField/hkpSphereRepShape.h
Havok/Physics/Dynamics/Entity/hkpEntity.h
Havok/Physics/Dynamics/Entity/hkpRigidBody.h
Havok/Physics/Dynamics/World/hkpWorld.h
Havok/Physics/Dynamics/World/hkpWorld.cpp
Havok/Physics/Dynamics/World/hkpWorldEntity.h
)
target_compile_options(hkStubs PRIVATE -fno-exceptions)
target_compile_options(hkStubs PRIVATE -fno-strict-aliasing)
target_compile_options(hkStubs PRIVATE -Wno-invalid-offsetof)
target_include_directories(hkStubs PUBLIC ./)

View File

@ -0,0 +1,11 @@
#pragma once
class hkStringPtr {
public:
hkStringPtr();
hkStringPtr& operator=(const char* s);
private:
const char* m_stringAndFlag;
};

View File

@ -0,0 +1,15 @@
#pragma once
class hkVector4 {
public:
hkVector4() {}
hkVector4(hkReal x, hkReal y, hkReal z, hkReal w = 0) {
v[0] = x;
v[1] = y;
v[2] = z;
v[3] = w;
}
m128 v;
void sub_7100FABE80(const hkVector4&, const hkVector4&);
};

View File

@ -0,0 +1,5 @@
#pragma once
#include <Havok/Common/Base/Types/hkBaseTypes.h>
#include <Havok/Common/Base/Math/Vector/hkVector4.h>

View File

@ -0,0 +1,8 @@
#pragma once
#include <Havok/Common/Base/hkBase.h>
class hkBaseObject {
public:
virtual ~hkBaseObject() {}
};

View File

@ -0,0 +1,10 @@
#pragma once
#include <Havok/Common/Base/Object/hkBaseObject.h>
class hkReferencedObject : public hkBaseObject {
public:
virtual ~hkReferencedObject() {}
virtual const void* getClassType() const;
};

View File

@ -0,0 +1,64 @@
#pragma once
using hkFloat32 = float;
using hkDouble64 = double;
using hkReal = hkFloat32;
using hkChar = signed char;
using hkInt8 = signed char;
using hkInt16 = signed short;
using hkInt32 = signed int;
using hkUchar = unsigned char;
using hkUint8 = unsigned char;
using hkUint16 = unsigned short;
using hkUint32 = unsigned int;
using hkUint64 = unsigned long long;
using m128 = __attribute((vector_size(16))) float;
class hkHalf {
public:
hkHalf() {}
explicit hkHalf(const float& f) {
int t = ((const int*)&f)[0];
m_value = hkInt16(t >> 16);
}
hkHalf& operator=(const float& f) {
int t = ((const int*)&f)[0];
m_value = hkInt16(t >> 16);
return *this;
}
hkHalf& operator=(const hkHalf& o) {
m_value = o.m_value;
return *this;
}
bool operator==(const hkHalf& o) const { return (m_value == o.m_value); }
void store(float* f) const {
hkUint32* i = (hkUint32*)f;
i[0] = m_value << 16;
}
void setZero() { m_value = 0; }
void setOne() { m_value = 0x3F80; }
operator float() const {
union {
int i;
float f;
} u;
u.i = (m_value << 16);
return u.f;
}
hkInt16 getInt16() const { return m_value; }
private:
hkInt16 m_value;
};

View File

@ -0,0 +1,9 @@
#pragma once
#include <Havok/Common/Base/Object/hkBaseObject.h>
#include <Havok/Common/Base/Object/hkReferencedObject.h>
#include <Havok/Common/Base/Types/hkBaseTypes.h>
#include <Havok/Common/Base/Math/hkMath.h>
#include <Havok/Common/Base/Container/String/hkStringPtr.h>

View File

@ -0,0 +1,10 @@
#pragma once
#include <Havok/Common/Base/hkBase.h>
#include <Havok/Physics/Collide/Shape/hkpShape.h>
class hkpCapsuleShape : public hkpShape {
public:
hkpCapsuleShape(const hkVector4& vertexA, const hkVector4& vertexB, hkReal radius);
virtual ~hkpCapsuleShape();
};

View File

@ -0,0 +1,6 @@
#pragma once
#include <Havok/Physics/Collide/Shape/hkpShape.h>
// TODO
class hkpConvexShape {};

View File

@ -0,0 +1,6 @@
#pragma once
#include <Havok/Physics/Collide/Shape/hkpShape.h>
// TODO
class hkpSphereRepShape {};

View File

@ -0,0 +1,14 @@
#pragma once
#include <Havok/Common/Base/Object/hkReferencedObject.h>
class hkpShape : public hkReferencedObject {
public:
virtual ~hkpShape();
virtual hkReal getMaximumProjection(const hkVector4& direction) const;
hkUchar filler[0x8];
hkUint64 m_type;
hkUchar filler2[0x30];
};

View File

@ -0,0 +1,25 @@
#pragma once
#include <Havok/Physics/Dynamics/World/hkpWorldEntity.h>
class hkpMotion {
public:
virtual ~hkpMotion();
hkUchar _0[0xc0];
/* 0xc8 */ hkHalf m_motionState__m_timeFactor;
/* */ hkUchar _cc[0x128 - 0xcc];
/* 0x128 */ void* _128;
};
struct hkpMaxSizeMotion : hkpMotion {
hkUchar fill[0x140 - sizeof(hkpMotion)];
}; // 0x140
class hkpEntity : public hkpWorldEntity {
public:
virtual ~hkpEntity();
/* */ hkUchar _133[0x150 - 0x133];
/* 0x150 */ hkpMaxSizeMotion m_motion;
};

View File

@ -0,0 +1,9 @@
#pragma once
#include <Havok/Physics/Dynamics/Entity/hkpEntity.h>
class hkpRigidBody : public hkpEntity {
public:
virtual ~hkpRigidBody();
void enableDeactivation(bool _enableDeactivation);
};

View File

@ -0,0 +1,3 @@
#include "Havok/Physics/Dynamics/World/hkpWorld.h"
hkpWorld::hkpWorld() {}

View File

@ -0,0 +1,5 @@
#pragma once
class hkpWorld {
hkpWorld();
};

View File

@ -0,0 +1,21 @@
#pragma once
#include <Havok/Physics/Collide/Shape/hkpShape.h>
class hkpWorldEntity : public hkReferencedObject {
public:
virtual ~hkpWorldEntity() {}
void setUserData(void* data) { m_userData = data; }
void setName(const char* name) { m_name = name; }
/* */ hkUchar _8[0x18 - 0x8];
/* 0x018 */ void* m_userData;
/* */ hkUchar _20[0x88 - 0x20];
/* 0x088 */ hkReal _88;
/* */ hkUchar _8c[0xb0 - 0x8c];
/* 0x0b0 */ hkStringPtr m_name;
/* */ hkUchar _b8[0x132 - 0xb8];
/* 0x132 */ hkUchar _132;
};

View File

@ -1,4 +1,6 @@
target_sources(uking PRIVATE
physInstanceSet.cpp
physInstanceSet.h
Cloth/physClothParam.cpp
Cloth/physClothParam.h
Ragdoll/physRagdollConfig.cpp
@ -7,10 +9,26 @@ target_sources(uking PRIVATE
Ragdoll/physRagdollParam.h
RigidBody/physEdgeRigidBodyParam.cpp
RigidBody/physEdgeRigidBodyParam.h
RigidBody/physMotionAccessor.cpp
RigidBody/physMotionAccessor.h
RigidBody/physRigidBody.cpp
RigidBody/physRigidBody.h
RigidBody/physRigidBodyFactory.cpp
RigidBody/physRigidBodyFactory.h
RigidBody/physRigidBodyParam.cpp
RigidBody/physRigidBodyParam.h
RigidBody/physRigidBodySetParam.cpp
RigidBody/physRigidBodySetParam.h
RigidBody/Shape/physBoxShape.cpp
RigidBody/Shape/physBoxShape.h
RigidBody/Shape/physCapsuleShape.cpp
RigidBody/Shape/physCapsuleShape.h
RigidBody/Shape/physCylinderShape.cpp
RigidBody/Shape/physCylinderShape.h
RigidBody/Shape/physSphereShape.cpp
RigidBody/Shape/physSphereShape.h
RigidBody/Shape/physWaterCylinderShape.cpp
RigidBody/Shape/physWaterCylinderShape.h
SupportBone/physSupportBoneParam.cpp
SupportBone/physSupportBoneParam.h
SupportBone/physSupportBoneResource.cpp
@ -28,6 +46,8 @@ target_sources(uking PRIVATE
System/physDefines.h
System/physMaterialTable.cpp
System/physMaterialTable.h
System/physMemSystem.cpp
System/physMemSystem.h
System/physParamSet.cpp
System/physParamSet.h
System/physRagdollControllerKeyList.h

View File

@ -0,0 +1,27 @@
#pragma once
#include "KingSystem/Physics/RigidBody/physRigidBody.h"
namespace ksys::phys {
class BoxView;
struct BoxBody {
virtual ~BoxBody();
RigidBody* init(u32 flag, RigidBodyParamView* view, sead::Heap* heap);
};
struct BoxShape {
BoxBody* init(sead::Heap* heap);
};
class BoxView : public RigidBodyParamView {
SEAD_RTTI_OVERRIDE(BoxView, RigidBodyParamView)
public:
u8 _90;
float _94;
BoxShape shape;
};
} // namespace ksys::phys

View File

@ -0,0 +1,118 @@
#include "KingSystem/Physics/RigidBody/Shape/physCapsuleShape.h"
#include <Havok/Physics/Collide/Shape/Convex/Capsule/hkpCapsuleShape.h>
#include <heap/seadHeap.h>
#include <math/seadMathCalcCommon.h>
namespace ksys::phys {
CapsuleBody* CapsuleShape::init(sead::Heap* heap) {
void* ptr = heap->tryAlloc(sizeof(hkpCapsuleShape), 0x10);
if (ptr == nullptr)
return nullptr;
auto* hk_shape =
new (ptr) hkpCapsuleShape(hkVector4(vertex_a.x, vertex_a.y, vertex_a.z),
hkVector4(vertex_b.x, vertex_b.y, vertex_b.z), radius);
auto* body = new (heap) CapsuleBody(vertex_a, vertex_b, radius, _20, _28, _30, _34, hk_shape);
if (_38) {
body->unk.shape_type = 1 << 23;
}
body->unk._10 = nullptr;
hk_shape->m_type = body->unk.shape_type;
return body;
}
CapsuleBody* CapsuleBody::clone(sead::Heap* heap) {
CapsuleShape shape;
shape._20 = 0;
shape._28 = sead::SafeString::cEmptyString.cstr();
shape._30 = 0;
shape._34 = 0;
shape._38 = false;
shape.radius = radius;
shape.vertex_a = vertex_a;
shape.vertex_b = vertex_b;
CapsuleBody* body = shape.init(heap);
body->unk.shape_type = unk.shape_type;
body->unk._10 = nullptr;
if (body->shape != nullptr)
body->shape->m_type = unk.shape_type;
return body;
}
f32 CapsuleBody::getRadius() const {
return radius;
}
void CapsuleBody::getVertices(sead::Vector3f* va, sead::Vector3f* vb) const {
if (va != nullptr)
*va = vertex_a;
if (vb != nullptr)
*vb = vertex_b;
}
CapsuleBody::~CapsuleBody() {
if (shape != nullptr) {
::operator delete(shape);
shape = nullptr;
}
}
bool CapsuleBody::setRadius(f32 r) {
if (r <= 0.0f || r == radius) {
return false;
}
radius = r;
flags.set(Flag::Modified);
return true;
}
bool CapsuleBody::setVertices(const sead::Vector3f& va, const sead::Vector3f& vb) {
if (vertex_a == va && vertex_b == vb) {
return false;
}
vertex_a = va;
vertex_b = vb;
flags.set(Flag::Modified);
return true;
}
f32 CapsuleBody::getVolume() const {
f32 dy = vertex_a.y - vertex_b.y;
f32 dx = vertex_a.x - vertex_b.x;
f32 dz = vertex_a.z - vertex_b.z;
f32 dist = sqrtf(dx * dx + dy * dy + dz * dz);
f32 pi_r_sq = radius * radius * sead::Mathf::pi();
f32 c = (radius * 4.0f) / 3.0f;
return pi_r_sq * (dist + c);
}
hkpShape* CapsuleBody::getShape() {
return shape;
}
const hkpShape* CapsuleBody::getShape() const {
return shape;
}
void CapsuleBody::sub_7100FABE80(sead::Vector3f* veca, sead::Vector3f* vecb,
const hkVector4& rb_vec) {
if (veca != nullptr) {
hkVector4 tmp;
tmp.sub_7100FABE80(rb_vec, hkVector4(vertex_a.x, vertex_a.y, vertex_a.z));
veca->x = tmp.v[0];
veca->y = tmp.v[1];
veca->z = tmp.v[2];
}
if (vecb != nullptr) {
hkVector4 tmp;
tmp.sub_7100FABE80(rb_vec, hkVector4(vertex_b.x, vertex_b.y, vertex_b.z));
vecb->x = tmp.v[0];
vecb->y = tmp.v[1];
vecb->z = tmp.v[2];
}
}
} // namespace ksys::phys

View File

@ -0,0 +1,78 @@
#pragma once
#include <math/seadVector.h>
#include <prim/seadTypedBitFlag.h>
#include <thread/seadAtomic.h>
#include "KingSystem/Physics/RigidBody/physRigidBody.h"
class hkpShape;
class hkVector4;
namespace ksys::phys {
class CapsuleView;
struct CapsuleShape;
struct CapsuleBody {
enum class Flag {
Modified = 1 << 0,
};
struct Unk {
Unk(u32 a1, const char* a2, u32 a3, u32 a4, u32 a5);
virtual ~Unk();
u32 shape_type = 0;
const char* _10;
};
CapsuleBody(const sead::Vector3f& va, const sead::Vector3f& vb, f32 r, u32 a4, const char* a5,
u32 a6, u32 a7, hkpShape* a8)
: vertex_a(va), vertex_b(vb), radius(r), unk(a4, a5, a6, a7, 0), shape(a8) {}
virtual ~CapsuleBody();
virtual hkpShape* getShape();
virtual const hkpShape* getShape() const;
virtual void updateChanges();
virtual void scaleVerts(f32 scale);
RigidBody* init(u32 flag, RigidBodyParamView* view, sead::Heap* heap);
CapsuleBody* clone(sead::Heap* heap);
f32 getRadius() const;
void getVertices(sead::Vector3f* va, sead::Vector3f* vb) const;
bool setRadius(f32 r);
bool setVertices(const sead::Vector3f& va, const sead::Vector3f& vb);
f32 getVolume() const;
void sub_7100FABE80(sead::Vector3f* veca, sead::Vector3f* vecb, const hkVector4& rb_vec);
sead::Vector3f vertex_a;
sead::TypedBitFlag<Flag, sead::Atomic<u32>> flags{};
sead::Vector3f vertex_b;
f32 radius;
Unk unk;
hkpShape* shape;
};
struct CapsuleShape {
CapsuleBody* init(sead::Heap* heap);
sead::Vector3f vertex_a;
sead::Vector3f vertex_b;
f32 radius;
u32 _1c;
u32 _20;
const char* _28;
u32 _30;
u32 _34;
bool _38;
};
class CapsuleView : public RigidBodyParamView {
SEAD_RTTI_OVERRIDE(CapsuleView, RigidBodyParamView)
public:
u8 _90;
float _94;
CapsuleShape shape;
};
} // namespace ksys::phys

View File

@ -0,0 +1,27 @@
#pragma once
#include "KingSystem/Physics/RigidBody/physRigidBody.h"
namespace ksys::phys {
class CylinderView;
struct CylinderBody {
virtual ~CylinderBody();
RigidBody* init(u32 flag, RigidBodyParamView* view, sead::Heap* heap);
};
struct CylinderShape {
CylinderBody* init(sead::Heap* heap);
};
class CylinderView : public RigidBodyParamView {
SEAD_RTTI_OVERRIDE(CylinderView, RigidBodyParamView)
public:
u8 _90;
float _94;
CylinderShape shape;
};
} // namespace ksys::phys

View File

@ -0,0 +1,27 @@
#pragma once
#include "KingSystem/Physics/RigidBody/physRigidBody.h"
namespace ksys::phys {
class SphereView;
struct SphereBody {
virtual ~SphereBody();
RigidBody* init(u32 flag, RigidBodyParamView* view, sead::Heap* heap);
};
struct SphereShape {
SphereBody* init(sead::Heap* heap);
};
class SphereView : public RigidBodyParamView {
SEAD_RTTI_OVERRIDE(SphereView, RigidBodyParamView)
public:
u8 _90;
float _94;
SphereShape shape;
};
} // namespace ksys::phys

View File

@ -0,0 +1,27 @@
#pragma once
#include "KingSystem/Physics/RigidBody/physRigidBody.h"
namespace ksys::phys {
class WaterCylinderView;
struct WaterCylinderBody {
virtual ~WaterCylinderBody();
RigidBody* init(u32 flag, RigidBodyParamView* view, sead::Heap* heap);
};
struct WaterCylinderShape {
WaterCylinderBody* init(sead::Heap* heap);
};
class WaterCylinderView : public RigidBodyParamView {
SEAD_RTTI_OVERRIDE(WaterCylinderView, RigidBodyParamView)
public:
u8 _90;
float _94;
WaterCylinderShape shape;
};
} // namespace ksys::phys

View File

@ -0,0 +1,34 @@
#include "KingSystem/Physics/RigidBody/physMotionAccessor.h"
#include "KingSystem/Physics/RigidBody/physRigidBody.h"
namespace ksys::phys {
MotionAccessor::MotionAccessor(RigidBody* body) : mBody(body) {}
MotionAccessor::~MotionAccessor() = default;
MotionType MotionAccessor::getMotionInfo() const {
return mBody->getMotionInfo();
}
hkpMotion* MotionAccessor::getMotion() const {
return mBody->getMotion();
}
void MotionAccessor::setMotionFlag(RigidBody::MotionFlag flag) {
mBody->setMotionFlag(flag);
}
bool MotionAccessor::hasMotionSet(RigidBody::MotionFlag flag) const {
return mBody->getMotionFlags().isOn(flag);
}
bool MotionAccessor::hasMotionDisabled(RigidBody::MotionFlag flag) const {
return mBody->getMotionFlags().isOff(flag);
}
void MotionAccessor::disableMotionFlag(RigidBody::MotionFlag flag) {
mBody->resetMotionFlagDirect(flag);
}
} // namespace ksys::phys

View File

@ -0,0 +1,28 @@
#pragma once
#include <basis/seadTypes.h>
#include "KingSystem/Physics/RigidBody/physRigidBody.h"
class hkpMotion;
namespace ksys::phys {
class MotionAccessor {
SEAD_RTTI_BASE(MotionAccessor)
public:
explicit MotionAccessor(RigidBody* body);
virtual ~MotionAccessor();
MotionType getMotionInfo() const;
hkpMotion* getMotion() const;
void setMotionFlag(RigidBody::MotionFlag flag);
bool hasMotionSet(RigidBody::MotionFlag flag) const;
bool hasMotionDisabled(RigidBody::MotionFlag flag) const;
void disableMotionFlag(RigidBody::MotionFlag flag);
private:
RigidBody* mBody;
void* _10 = nullptr;
};
} // namespace ksys::phys

View File

@ -0,0 +1,86 @@
#include "KingSystem/Physics/RigidBody/physRigidBody.h"
#include <Havok/Physics/Dynamics/Entity/hkpRigidBody.h>
#include "KingSystem/Physics/System/physMemSystem.h"
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) {
if (!name.isEmpty()) {
hk_body->setName(name.cstr());
}
hk_body->setUserData(this);
hk_body->m_motion._128 = nullptr;
hk_body->m_motion.m_motionState__m_timeFactor.setOne();
hk_body->enableDeactivation(true);
hk_body->_88 = 0.1f;
if (mFlags.isOn(Flag1::MassScaling)) {
hk_body->_132 |= 1;
}
mFlags.change(Flag1::_80, _b4 == 5);
mFlags.change(Flag1::MassScaling, mass_scaling);
mFlags.change(Flag1::_10, a7);
mFlags.set(Flag1::_100);
}
void RigidBody::setMotionFlag(MotionFlag flag) {
auto lock = sead::makeScopedLock(mCS);
mMotionFlags.set(flag);
if (mFlags.isOff(Flag1::_20) && mFlags.isOff(Flag1::_2)) {
mFlags.set(Flag1::_2);
MemSystem::instance()->_160->sub_7100FA6C8C(mFlags.isOn(Flag1::MassScaling), this);
}
}
bool RigidBody::sub_7100F8D1F8() const {
return mFlags.isOn(Flag1::_8);
}
bool RigidBody::sub_7100F8D204() const {
return mMotionFlags.isOn(MotionFlag::_1);
}
bool RigidBody::sub_7100F8D210() const {
return mMotionFlags.isOn(MotionFlag::_2);
}
// NON_MATCHING: mFlags is loaded differently
void RigidBody::sub_7100F8D21C() {
auto lock = sead::makeScopedLock(mCS);
if (mMotionFlags.isOn(MotionFlag::_1)) {
mMotionFlags.reset(MotionFlag::_1);
mMotionFlags.set(MotionFlag::_2);
} else if (mFlags.isOn(Flag1::_8)) {
setMotionFlag(MotionFlag::_2);
}
}
MotionType RigidBody::getMotionInfo() const {
if (mMotionFlags.isOn(MotionFlag::Dynamic))
return MotionType::Dynamic;
if (mMotionFlags.isOn(MotionFlag::Keyframed))
return MotionType::Keyframed;
if (mMotionFlags.isOn(MotionFlag::Fixed))
return MotionType::Fixed;
return mHkBodyMgr.getMotionInfo();
}
void RigidBody::setContactMask(u32 value) {
mContactMask.setDirect(value);
}
void RigidBody::setContactAll() {
mContactMask.makeAllOne();
}
void RigidBody::setContactNone() {
mContactMask.makeAllZero();
}
} // namespace ksys::phys

View File

@ -0,0 +1,106 @@
#pragma once
#include <container/seadPtrArray.h>
#include <heap/seadDisposer.h>
#include <prim/seadRuntimeTypeInfo.h>
#include <prim/seadTypedBitFlag.h>
#include <thread/seadAtomic.h>
#include <thread/seadCriticalSection.h>
#include "KingSystem/Physics/RigidBody/physRigidBodyParam.h"
#include "KingSystem/Physics/System/physDefines.h"
#include "KingSystem/Utils/Types.h"
class hkpRigidBody;
class hkpMotion;
namespace ksys::phys {
class MotionAccessor;
class RigidBase {
public:
virtual ~RigidBase();
};
class RigidBody : public sead::IDisposer, public RigidBase {
SEAD_RTTI_BASE(RigidBody)
public:
struct HkBodyMgr {
explicit HkBodyMgr(hkpRigidBody* body);
virtual ~HkBodyMgr();
MotionType getMotionInfo() const;
void* p;
};
enum class Flag1 {
MassScaling = 1 << 0,
_2 = 1 << 1,
_4 = 1 << 2,
_8 = 1 << 3,
_10 = 1 << 4,
_20 = 1 << 5,
_40 = 1 << 6,
_80 = 1 << 7,
_100 = 1 << 8,
};
enum class MotionFlag {
_1 = 1 << 0,
_2 = 1 << 1,
Dynamic = 1 << 2,
Keyframed = 1 << 3,
Fixed = 1 << 4,
_20 = 1 << 5,
};
RigidBody(u32 a, u32 mass_scaling, hkpRigidBody* hk_body, const sead::SafeString& name,
sead::Heap* heap, bool a7);
virtual ~RigidBody();
void sub_7100F8CFA0();
void setMotionFlag(MotionFlag);
bool sub_7100F8D1F8() const;
bool sub_7100F8D204() const;
bool sub_7100F8D210() const;
void sub_7100F8D21C();
void sub_7100F8D680();
MotionType getMotionInfo() const;
u32 addContactLayer(ContactLayer);
u32 removeContactLayer(ContactLayer);
void setContactMask(u32);
void setContactAll();
void setContactNone();
void setCollideGround(bool);
void setCollideWater(bool);
void sub_7100F8F51C();
void sub_7100F8F8CC(ContactLayer, GroundHit, void*);
void sub_7100F8F9E8(u32*, void*);
void sub_7100F8FA44(ContactLayer, u32);
hkpMotion* getMotion() const;
bool isMassScaling() const { return mFlags.isOn(Flag1::MassScaling); }
const auto& getMotionFlags() const { return mMotionFlags; }
void resetMotionFlagDirect(const MotionFlag flag) { mMotionFlags.reset(flag); }
private:
sead::CriticalSection mCS;
sead::TypedBitFlag<Flag1, sead::Atomic<u32>> mFlags{};
sead::TypedBitFlag<MotionFlag, sead::Atomic<u32>> mMotionFlags{};
sead::BitFlag32 mContactMask{};
hkpRigidBody* mHkBody;
void* mActor = nullptr;
void* _88 = nullptr;
void* _90 = nullptr;
u16 _98 = 0;
HkBodyMgr mHkBodyMgr;
f32 _b0 = 0.0f;
u32 _b4;
MotionAccessor* mMotionAccessor = nullptr;
u16 _c0 = 0;
void* _c8 = nullptr;
void* _d0;
};
KSYS_CHECK_SIZE_NX150(RigidBody, 0xD8);
} // namespace ksys::phys

View File

@ -0,0 +1,56 @@
#include "KingSystem/Physics/RigidBody/physRigidBodyFactory.h"
#include "KingSystem/Physics/RigidBody/Shape/physBoxShape.h"
#include "KingSystem/Physics/RigidBody/Shape/physCapsuleShape.h"
#include "KingSystem/Physics/RigidBody/Shape/physCylinderShape.h"
#include "KingSystem/Physics/RigidBody/Shape/physSphereShape.h"
#include "KingSystem/Physics/RigidBody/Shape/physWaterCylinderShape.h"
namespace ksys::phys {
RigidBody* RigidBodyFactory::createSphere(RigidBodyParamView* view, sead::Heap* heap) {
if (view->isDynamicSensor())
view->motion_type = MotionType::Keyframed;
auto* v = sead::DynamicCast<SphereView>(view);
SphereBody* body = v->shape.init(heap);
return body->init(1, view, heap);
}
RigidBody* RigidBodyFactory::createCapsule(RigidBodyParamView* view, sead::Heap* heap) {
if (view->isDynamicSensor())
view->motion_type = MotionType::Keyframed;
auto* v = sead::DynamicCast<CapsuleView>(view);
CapsuleBody* body = v->shape.init(heap);
return body->init(1, view, heap);
}
RigidBody* RigidBodyFactory::createCylinder(RigidBodyParamView* view, sead::Heap* heap) {
if (view->isDynamicSensor())
view->motion_type = MotionType::Keyframed;
auto* v = sead::DynamicCast<CylinderView>(view);
CylinderBody* body = v->shape.init(heap);
return body->init(1, view, heap);
}
RigidBody* RigidBodyFactory::createWaterCylinder(RigidBodyParamView* view, sead::Heap* heap) {
if (view->isDynamicSensor())
view->motion_type = MotionType::Keyframed;
auto* v = sead::DynamicCast<WaterCylinderView>(view);
WaterCylinderBody* body = v->shape.init(heap);
return body->init(1, view, heap);
}
RigidBody* RigidBodyFactory::createBox(RigidBodyParamView* view, sead::Heap* heap) {
if (view->isDynamicSensor())
view->motion_type = MotionType::Keyframed;
auto* v = sead::DynamicCast<BoxView>(view);
BoxBody* body = v->shape.init(heap);
return body->init(1, view, heap);
}
} // namespace ksys::phys

View File

@ -0,0 +1,26 @@
#pragma once
#include <basis/seadTypes.h>
namespace sead {
class Heap;
} // namespace sead
namespace ksys::phys {
class RigidBody;
struct RigidBodyParamView;
class RigidBodyFactory {
public:
static RigidBody* createSphere(RigidBodyParamView* view, sead::Heap* heap);
static RigidBody* createCapsule(RigidBodyParamView* view, sead::Heap* heap);
static RigidBody* createCylinder(RigidBodyParamView* view, sead::Heap* heap);
static RigidBody* createWaterCylinder(RigidBodyParamView* view, sead::Heap* heap);
static RigidBody* createBox(RigidBodyParamView* view, sead::Heap* heap);
static RigidBody* createWaterBox(RigidBodyParamView* view, sead::Heap* heap);
static RigidBody* createPolytope(RigidBodyParamView* view, sead::Heap* heap);
static RigidBody* createCollection(RigidBodyParamView* view, sead::Heap* heap);
};
} // namespace ksys::phys

View File

@ -49,37 +49,42 @@ struct ShapeParam;
struct RigidBodyParamView {
SEAD_RTTI_BASE(RigidBodyParamView)
public:
const char* name;
u32 _10;
MotionType motion_type;
float mass;
sead::Vector3f inertia;
sead::Vector3f center_of_mass;
float linear_damping;
float angular_damping;
u8 _3c[8];
float max_linear_velocity;
float max_angular_velocity_rad;
float max_impulse;
float col_impulse_scale;
float friction_scale;
float restitution_scale;
float water_buoyancy_scale;
float water_flow_effective_rate;
float magne_mass_scaling_factor;
bool gap68;
bool toi;
bool always_character_mass_scaling;
bool gap6B[13];
ContactLayer contact_layer;
GroundHit groundhit;
u32 info_5e0;
u32 contact_mask;
u32 flags;
bool ignore_normal_for_impulse;
bool no_hit_ground;
bool no_hit_water;
bool no_char_standing_on;
const char* name = "no name";
u32 _10 = -1;
MotionType motion_type = MotionType::Dynamic;
float mass = 1.0f;
sead::Vector3f inertia = sead::Vector3f::ones;
sead::Vector3f center_of_mass = sead::Vector3f::zero;
float linear_damping = 0.0f;
float angular_damping = 0.05f;
f32 _3c = 1.0f;
f32 _40 = 1.0f;
float max_linear_velocity = 200.0f;
float max_angular_velocity_rad = 200.0f;
float max_impulse = -1.0f;
float col_impulse_scale = 1.0f;
float friction_scale = 1.0f;
float restitution_scale = 1.0f;
float water_buoyancy_scale = 1.0f;
float water_flow_effective_rate = 1.0f;
float magne_mass_scaling_factor = 1.0f;
bool gap68 = true;
bool toi = false;
bool always_character_mass_scaling = false;
void* p = nullptr;
ContactLayer contact_layer = ContactLayer::EntityObject;
GroundHit groundhit = GroundHit::HitAll;
u32 info_5e0 = 0;
u32 contact_mask = 0;
u32 flags = 0x80000000;
bool ignore_normal_for_impulse = false;
bool no_hit_ground = false;
bool no_hit_water = false;
bool no_char_standing_on = false;
bool isDynamicSensor() const {
return isSensorLayer(contact_layer) == 1 && motion_type == MotionType::Dynamic;
}
};
KSYS_CHECK_SIZE_NX150(RigidBodyParamView, 0x90);

View File

@ -2,7 +2,7 @@
namespace ksys::phys {
bool isSensorLayer(ContactLayer layer) {
u32 isSensorLayer(ContactLayer layer) {
return layer > ContactLayer::EntityEnd;
}

View File

@ -164,7 +164,7 @@ enum class MotionType {
Unknown = 3,
};
bool isSensorLayer(ContactLayer layer);
u32 isSensorLayer(ContactLayer layer);
u32 makeContactLayerMask(ContactLayer layer);
u32 getContactLayerBase(ContactLayerType type);
u32 getContactLayerBaseRelativeValue(ContactLayer layer);

View File

@ -0,0 +1,21 @@
#pragma once
#include <basis/seadTypes.h>
#include <heap/seadDisposer.h>
namespace ksys::phys {
class RigidBody;
class MemSystem {
SEAD_SINGLETON_DISPOSER(MemSystem)
public:
struct Struct160 {
void sub_7100FA6C8C(bool, RigidBody*);
};
u8 _20[0x140];
Struct160* _160;
};
} // namespace ksys::phys

View File

@ -0,0 +1,211 @@
#include "KingSystem/Physics/physInstanceSet.h"
namespace ksys::phys {
void InstanceSet::setFlag2() {
mFlags.set(Flag::_2);
if (_d8 != nullptr) {
mFlags.set(Flag::_2);
mFlags.set(Flag::DisableDraw);
}
}
void InstanceSet::clothVisibleStuff() {
if (_d8 != nullptr) {
mFlags.set(Flag::DisableDraw);
}
}
void InstanceSet::setInDemo() {
mFlags.set(Flag::InDemo);
}
void InstanceSet::resetInDemo() {
mFlags.reset(Flag::InDemo);
}
void InstanceSet::clothVisibleStuff_0(s32 setting) {
if (mFlags.isOn(Flag::InDemo))
return;
switch (setting) {
case -2:
mFlags.reset(Flag::Cloth2);
mFlags.set(Flag::Cloth1);
break;
case -1:
mFlags.reset(Flag::Cloth3);
mFlags.reset(Flag::Cloth2);
mFlags.reset(Flag::Cloth1);
mFlags.set(Flag::Cloth2);
mFlags.set(Flag::Cloth3);
break;
case 0:
mFlags.reset(Flag::Cloth1);
mFlags.reset(Flag::Cloth2);
mFlags.set(Flag::Cloth3);
break;
case 1:
mFlags.reset(Flag::Cloth1);
mFlags.reset(Flag::Cloth2);
mFlags.reset(Flag::Cloth3);
break;
}
}
void InstanceSet::sub_7100FB9BAC(InstanceSet* other) {
if (other == nullptr)
return;
u32 idx = other->sub_7100FB9C2C();
clothVisibleStuff_0(idx);
}
u32 InstanceSet::sub_7100FB9C2C() const {
u32 idx;
if (mFlags.isOn(Flag::Cloth1)) {
idx = -2;
} else if (mFlags.isOn(Flag::Cloth2)) {
idx = -1;
} else if (mFlags.isOn(Flag::Cloth3)) {
idx = 0;
} else {
idx = 1;
}
return idx;
}
void InstanceSet::sub_7100FBA9BC() {
for (auto& rb : mRigidBodySets) {
rb.sub_7100FA97FC();
}
for (auto& body : mList) {
body->sub_7100F8CFA0();
}
if (mCollisionController != nullptr)
mCollisionController->sub_7100F5EC30();
}
void InstanceSet::sub_7100FBACE0(phys::ContactLayer layer) {
bool sensor = phys::isSensorLayer(layer);
for (auto& rb : mRigidBodySets) {
rb.disableCollisionMaybe(layer);
}
if (sensor)
return;
if (mRagdollController != nullptr)
mRagdollController->sub_7101221728(layer);
if (mCollisionController != nullptr)
mCollisionController->enableCollisionMaybe_0(layer);
}
void InstanceSet::sub_7100FBAD74() {
for (auto& rb : mRigidBodySets) {
rb.disableAllContact();
}
if (mRagdollController != nullptr) {
mRagdollController->sub_71012217A8();
}
if (mCollisionController != nullptr) {
mCollisionController->sub_7100F60604();
}
}
void* InstanceSet::sub_7100FBAEDC(s32 idx1, s32 idx2) const {
if (mRigidBodySets.size() <= idx1)
return nullptr;
return mRigidBodySets[idx1]->getRigidBody(idx2);
}
// NON_MATCHING
void InstanceSet::sub_7100FBB00C(phys::RigidBody* body, phys::RigidBodyParam* param) {
if (body == nullptr)
return;
phys::RigidBodyParamView view;
param->getParams(&view);
if (view.contact_layer == phys::ContactLayer::SensorCustomReceiver) {
body->sub_7100F8F9E8(&view.flags, _188[body->isMassScaling()]);
} else if (view.info_5e0) {
body->sub_7100F8FA44(view.contact_layer, view.info_5e0);
} else {
body->sub_7100F8F8CC(view.contact_layer, view.groundhit, _188[body->isMassScaling()]);
}
body->setCollideGround(view.no_hit_ground == 0);
body->setCollideWater(view.no_hit_water == 0);
body->sub_7100F8F51C();
}
void* InstanceSet::sub_7100FBBC28(const sead::SafeString& name) const {
for (auto& rb : mRigidBodySets) {
void* p = rb.findXByName(name);
if (p != nullptr)
return p;
}
return nullptr;
}
s32 InstanceSet::sub_7100FBBC78(const sead::SafeString& name) const {
s32 idx = 0;
for (auto& info : mContactInfos) {
if (name == info.mName)
return idx;
idx++;
}
return -1;
}
s32 InstanceSet::sub_7100FBBD9C(const sead::SafeString& name) const {
s32 idx = 0;
for (auto& info : mCollisionInfos) {
if (name == info.mName)
return idx;
idx++;
}
return -1;
}
void InstanceSet::sub_7100FBD284(const sead::Matrix34f& mtx) {
if (mFlags.isOff(Flag::_1))
return;
if (mFlags.isOn(Flag::_80000000)) {
sub_7100FBC890(mtx, true, false);
} else {
mFlags.reset(Flag::_8);
if (mFlags.isOn(Flag::_2))
setMtxAndScale(mtx, false, false, mScale);
}
mFlags.reset(Flag::_80000000);
if (mRagdollController == nullptr)
return;
if (mRagdollController->sub_7101221CC4() == 0)
sub_7100FBC890(mtx, false, false);
}
s32 InstanceSet::sub_7100FBDA2C(const sead::SafeString& name) const {
if (mRagdollBlendWt == nullptr)
return -1;
s32 idx = mRagdollBlendWt->findStateIdx(name);
if (idx >= 0)
return idx + 2;
if (name == "full_dynamic") {
return 1;
}
if (name == "full_key_framed") {
return 0;
}
return -1;
}
} // namespace ksys::phys

View File

@ -0,0 +1,124 @@
#pragma once
#include <container/seadListImpl.h>
#include <container/seadPtrArray.h>
#include <hostio/seadHostIONode.h>
#include "KingSystem/ActorSystem/actActor.h"
#include "KingSystem/Physics/RigidBody/physRigidBody.h"
#include "KingSystem/Physics/RigidBody/physRigidBodyParam.h"
namespace ksys::res {
class RagdollBlendWeight {
public:
s32 findStateIdx(const sead::SafeString& name) const;
};
} // namespace ksys::res
namespace ksys::phys {
class Ragdoll {};
class RagdollController {
public:
u32 sub_7101221CC4();
void sub_7101221728(ContactLayer);
void sub_71012217A8();
};
class CollisionController {
public:
void sub_7100F5EC30();
void sub_7100F60604();
void enableCollisionMaybe_0(ContactLayer);
};
struct CollisionInfo {
u8 filler[0x50];
sead::SafeString mName;
};
struct ContactInfo {
u8 filler[0x8];
sead::SafeString mName;
};
class RigidBodySet {
public:
void disableAllContact();
void sub_7100FA97FC();
void disableCollisionMaybe(ContactLayer);
void* findXByName(const sead::SafeString& name) const;
RigidBody* getRigidBody() const { return mBodies[0]; }
RigidBody* getRigidBody(s32 idx) const { return mBodies[idx]; }
private:
u8 _0[0x18];
sead::PtrArray<RigidBody> mBodies;
};
class InstanceSet : public sead::hostio::Node {
public:
enum class Flag : u32 {
_1 = 1 << 0,
_2 = 1 << 1,
_8 = 1 << 3,
DisableDraw = 1 << 2,
_200000 = 1 << 21,
Cloth1 = 1 << 22,
Cloth2 = 1 << 23,
Cloth3 = 1 << 24,
InDemo = 1 << 25,
_80000000 = 1u << 31,
};
void setFlag2();
void clothVisibleStuff();
void setInDemo();
void resetInDemo();
void clothVisibleStuff_0(s32 setting);
void sub_7100FB9BAC(InstanceSet* other);
u32 sub_7100FB9C2C() const;
void sub_7100FBA9BC();
void sub_7100FBACE0(ContactLayer layer);
void sub_7100FBAD74();
void* sub_7100FBAEDC(s32 rigidbody_idx, s32 ragdoll_idx) const;
void sub_7100FBB00C(RigidBody* body, RigidBodyParam* param);
void setMtxAndScale(const sead::Matrix34f& mtx, bool a2, bool a3, f32 scale);
void sub_7100FBB4B4();
void* findX(const sead::SafeString& a1, const sead::SafeString& a2) const;
void* sub_7100FBBC28(const sead::SafeString& name) const;
s32 sub_7100FBBC78(const sead::SafeString& name) const;
s32 sub_7100FBBD9C(const sead::SafeString& name) const;
void sub_7100FBD284(const sead::Matrix34f& mtx);
void sub_7100FBC890(const sead::Matrix34f& mtx, bool a2, bool a3);
s32 sub_7100FBDA2C(const sead::SafeString& name) const;
private:
u8 _8[0x18];
sead::TypedBitFlag<Flag> mFlags;
void* _28;
f32 mScale;
u8 _34[0x40 - 0x34];
sead::PtrArray<RigidBodySet> mRigidBodySets;
sead::PtrArray<CollisionInfo> mCollisionInfos;
sead::PtrArray<ContactInfo> mContactInfos;
u8 _70[0x10];
CollisionController* mCollisionController;
u8 _88[8];
RagdollController* mRagdollController;
u8 _98[0xb8 - 0x98];
res::RagdollBlendWeight* mRagdollBlendWt;
u8 _c0[0xd8 - 0xc0];
void* _d8;
u8 _e0[0x148 - 0xe0];
sead::TList<RigidBody*> mList;
u8 _160[0x188 - 0x160];
void* _188[2];
};
KSYS_CHECK_SIZE_NX150(InstanceSet, 0x198);
} // namespace ksys::phys