Squirmin' Vermin is a Third Person Shooter inspired by games such as Max Payne and Ratchet and Clank. It was a 15 week part-time school group project.
During this project, we continued work on the engine developed for Spite: Eclipse, extending its features and modifying it to suit this very different game genre.
Animation Bone Sockets and Bone Groups
In order to allow the player to equip multiple weapons, I implemented bone sockets, which allowed us to stick objects to specific bones on a skeleton.
I also implemented bone groups and animation layers, allowing us to play different animations on different bones in the hierarchy. This was needed since the player had to be able to for example walk, aim, and shoot at the same time.
I also added what we call joint controls, allowing us to add transforms to individual joints. This allows us to rotate the player character so that it looks in the direction of the camera while aiming.
Animation Blend Spaces
I implemented Unreal Engine-style Blend Spaces. This allowed for very smooth blending, as well as being a very handy way of setting up several animations within the same animation state.
To develop both the actual implementation and the tool to support it, I studied the Unreal implementation and tried to imitate the parts I thought we needed as well as possible.
To create a well-behaved blend space, a Delaunay triangulation of the animation samples is preferred. The Bowyer-Watson algorithm was used for this. While it has a slightly higher time complexity than some other triangulation algorithms, the input set is always extremely small, and the triangulation is only done during loading anyway. I had to take special care when dealing with the degenerate cases, when all points are colinear (ie there are no triangles), as well as when a sampled position is outside any triangle.
I had originally planned on making a visual node tool for the animation state machine that I developed for the previous project, but blend spaces cut down on the number of required states to such a degree that we will probably not need one. Blend spaces also interact very nicely with the previously mentioned animation layers, since different layers can have different blend spaces altogether.