Today I want to talk about animation. When we first started Rads & Relics, we had barely any animation. Characters would instantly teleport from one location to another, or if there was a big attack, everyone’s health would just go down instantly, without any clear indication why. Animation is not just a visual element; it helps players understand how their actions affect the game world.

This week we’ve been focused on character animation, so I wanted to share two different paradigms that we’ve been experimenting with: traditional animation (also called cel animation) and rigged/skeleton animation. I’ll share the pros and cons of these methods and how you might implement either in Godot.

Animation Requirements

To help set the stage, let’s lay out what we’re trying to accomplish. We have a number of different units (both player and enemy units). Each of these units should have a number of generic animations (idle, walk, attack, etc.) and possibly some animations that are unique to that character (e.g., a slime has an “engulf” animation). We have a secondary requirement that we want characters to be customizable: if you equip a helmet or sword, we’d like to show that on the character throughout all of their animations.

Traditional / Cel Animation

This is the classic style of animation where you draw each frame by hand. When the frames are combined in quick succession, they create the illusion of smooth motion. Here’s an example of a “block” animation using traditional animation.

Block-animation

Doing animation this way has a number of benefits. It gives the artist full control over each frame of the animation. You can exaggerate motion or tweak timing for aesthetic effect. Each character feels unique as they are all drawn independently.

However, the biggest problem with this approach is that it is time-consuming. The number of required animations increases exponentially as we add more units, poses, gear, etc. This is heavy not only on the artist, but on the game size as more and more custom animations have to be saved to disk and loaded at runtime.

In Godot

Godot provides the AnimatedSprite2D, which is really meant for this kind of animation. You can import individual frames or full sprite sheets and assign multiple animations, control timing, and more.

Rigged Animation

Rigged animation uses a hierarchy of parts (head, arms, legs, etc.) connected via a skeleton. Instead of drawing every frame, you animate by rotating and positioning these parts, like you would a puppet.

This approach allows for much greater reusability across units. If all units share the same skeleton, we only need to define the “run” animation once and we can reuse it everywhere. It also makes it easier to add gear by just attaching it to the appropriate place in the hierarchy.

The main downside to rigged animation is that it looks more robotic, more mechanical. Once everything is boiled down to angles and distances, you lose a lot of that feeling that comes with hand-drawn animation.

In Godot

Godot supports full skeletal animation via Skeleton2D and Bone2D nodes, or in some simple cases you can get away with just using the parent/child hierarchy. We’re using AnimationPlayer to coordinate node transformations (rotation, position, scale) to animate characters. This gives us the flexibility to rig characters in modular pieces and animate them efficiently.

Conclusion

In Rads & Relics, we’re experimenting using a mix of animation styles. For the important characters and important actions, we’re using traditional animations. But for things that are common or used across many characters, we are creating rigged animations. This is a bit more work upfront because we need to support both in parallel, but it will ultimately help us achieve the aesthetic we’re aiming for without spending excessive time on minor animation variations.

State of the Game

  • Progress Since Last Week
    • Implemented a new status effect system (burns, stuns, poison, etc.)
    • Introduced new enemies with unique abilities (including a boss enemy)
    • Overhauled the overworld system with a new map
  • Coming Up
    • Adding new cards and abilities to support a Fire Mage archetype