In my first post about Subsurface, I mentioned “a procedural animation system which takes care of animating the characters (which are ragdolls run by Farseer)”.
Early on I decided that I will be using ragdolls simulated by some physics engine to get the characters thrown around by water bursting through a hole in the wall or dragged around by water flowing from room to another. Letting the physics engine take control of the characters when a water current is too strong or a jet of water hits them hard enough, but how would I get the characters to react to the water when they’re controlled by the player, not a ragdoll thrown around by the physics engine?
I decided to let the physics engine be in control of the characters constantly: the characters are animated by applying varying amounts of forces to their limbs. Thanks to this, they automatically react to the world around them. For example, a water current exerts a force on the limbs that are underwater, making the characters struggle to move their legs against the current, and carrying something heavy affects the posture and walking speed of a character.
Here are some clips of the current state of the animation system. It’s still a work in progress – as you can see, the movement is still pretty comedic at times (QWOP, anyone?) and especially turning around looks really unnatural.
Here’s also a clip of our hero trying to shoot a placeholder monster with the placeholder turret he just loaded: