While this prototype isn't actually a game, I wanted to see how much I could do by animating entirely through code. It was also fun to dust off my 3D modeling, uh, "skills" - once again, simpler is almost always better!
Each one of the band members is made up of springs. For simple body parts, like the arm and the head, there's just one spring in motion. The arm springs to a goal rotation, while the head just tries to get back to center (with code pushing the spring down every "beat").
More complex motions, like the body, are on two springs - one on top and one on bottom. Originally I was going to have the body pivoted from the bottom to make facing the top point easier - but would have made moving the bottom more complex. Instead the body moves to the average of the two points, and then rotates to match the line between them.
Rather than a complex system for the beats and actions, everything is running off simple XML files. I made a simple "keystroke" recorder, which writes the up and down of keys while playing the song. Then, I applied those "tracks" to each one of the parts. For instance, the mouths open on "key down", and close on "key up", while the arms only move on "key down". There's also an auto generating file that sends events every x seconds (used for the main beat, and attached to hip swaying, head bobbing, feet tapping, even eye blinking). It was the simplest (and most extensible) solution, and works surprisingly well.
Basically there was a lot of learnings from this prototype! It was really fun adding all of the little touches too - like making them lean in while singing (which switches the butt to sway more than the shoulders). If you're wondering why there's two left-handed players, it's because I didn't even think through which handed-ness I was making the model, but instinctively flipped it for "Paul"...only to make him right handed.