The fix was to give each solid mooving part a unique physics body inside the skeleton (something I'd wanted to add as preparation for rag doll anyway). Whenever a physics body is present, the skeletal animation system passes any animation motion to the physics body, rather than directly repositioning the attached objects (i.e. the platforms). The maths to calculate a smooth rotation motion vector for an arbitrary point in the skeleton was not pleasant. It was at this point though that I hit a total road block on my old Maya plugin - there was no fine grain control over where game objects were attached, or which properties (solid, ethereal, immovable, etc) applied to which shapes in a skeleton. With the new plugin I covered last time, I can not only describe exactly where they go, but it's so easy to use, I can enjoy it.
Anyway here's a quick video of the result - I can now create large animated machines for Milkshake to play with, and like everything else, they can be hooked up to other game elements like switches: (click for the movie - the switch output is hooked to a multiply node (x2) then to an addition node (-1) and then into the animation controller speed inputs to get it to reverse all the animations)
The biggest outstanding issue is high-friction physics - something I totally underestimated. You see, most of the physics solver approaches I've played with (successive impulse, LCP) fall down horribly in high friction scenarios. As soon as you crank up the friction force to a point that Milkshake doesn't slide around on a moving platform, he also magically gains the power to force himself through walls (as the friction force overpowers the penetration correction force - and if you raise the penetration correction force to compensate, not only does the friction get even stronger (as friction is proportional to normal force incident on the point of contact), but objects just start bouncing off everything due to the enormous response forces). I quickly found myself in a horribly interconnected web of force balancing - I'd change a parameter or calculation to fix one scenario, only to totally break another one that I didn't notice for a day or so.
To give myself a little more confidence trying out new physics solutions, I've written a physics test script which runs through a few minutes of tests (pushing lots of different configurations of blocks, riding moving platforms, walking into different sized gaps, etc) so I could quickly see how a given change effects all the aspects of the gameplay I was interested in.
The video above is taken using my current physics prototype (similar to the Tomb Raider Legend solver, but using a decaying friction term) - I still need to add anisotropic friction for the main character and solve friction handling in stacks of blocks - but other than that, it looks promising. Still, if anyone has any insights into handling high-friction physics - drop me a line.
Cheers!
But I can't really help you at this time in the night (or morning...) so I'll stop writing here (for now).