I’ve been working on improving the damage system for the bots so that when a limb gets damaged enough it stops being usable. Originally I wanted to do this by dangling the bot from essentially an invisible hanger, then to slowly chip away at bones until the whole thing just kinda flopps over. However, I think that isn’t quite as possible/easy as I thought it once was. So my goal now is to manually add in some “damaged animations” to handle this kinda situation. Then I’ll add some blending in between them.
Today I was starting to work on these damaged animations and I spent around an hour not knowing that I don’t know left from right:
I made the damaged walk forward “with left arm broken” animations last night. Turns out it was the right arm the whole time….
What should happen is that the left arm should stay raised (then I would make that a physics object so it would hang down).
I also improved the control rig for said animations.

This lets me can do some nice twists as needed:
Finally I’ve converted the project to c++ to let me do some more clever things with what gets damaged on the bot. Specifically I can flip specific bones to kinematic if I need to, flip specific bodies to simulated (which you could kinda do in blueprints). But the big thing was to be able to grab all bone names from any given physics asset.
TArray<FName> UBlackLaceCLib::GetPhysicsBodyBoneNames(USkeletalMeshComponent* SkeletalMeshComponent)
{
TArray<FName> BoneNames;
if (!IsValid(SkeletalMeshComponent))
{
return BoneNames;
}
UPhysicsAsset* PhysicsAsset = SkeletalMeshComponent->GetPhysicsAsset();
if (!IsValid(PhysicsAsset))
{
return BoneNames;
}
for (USkeletalBodySetup* BodySetup : PhysicsAsset->SkeletalBodySetups)
{
if (!IsValid(BodySetup))
{
continue;
}
BoneNames.Add(BodySetup->BoneName);
}
return BoneNames;
}
Which honestly its not that complicated but for some reason you just can’t do this in blueprints.
Why do I need this functionality? Well its to enable adding in a location damage component for the bots. Essentially this component will call the function above to make an array of body parts that can be damaged and their individual health. Then the component has a “body part destroyed” event which the patrol bot can bind to. This lets me capture what got hit and ragdoll that specific body part.
Outside of improving the bot animations I’m still working on making a cohesive art pass but I’m still pondering what that means/how to demonstrate it etc.