Modding 101: Interactables and Aspects

September 12, 2019

Introducing Modding 101 and "Interactables"

written by



If you’ve been following Cantata since I started the TIGSource devlog, you’ve probably seen mention of modding. Though it’s already come up on the forums, I haven’t done any sort of “big” post about the plans for modding and given that we’re starting to stare down the barrel of an alpha release, I think it’s time I start to shed some light on what’s planned!

To this end, I’m starting up a blog post series called “Modding 101”, which, like “Cantata 101”, will talk generally about the scope of modding in the game and what you can expect as someone who may want to mod the game (and inspire people who never thought of themselves as modders!).

Modding is a First Priority in Cantata

To start, it’s worth stating that, nearly from day one, modding has been planned for Cantata. This isn’t just a symbolic choice — games that choose to de-prioritize mod support (or defer thinking about their integration) can easily exclude themselves from the possibility of ever using mods in the future. Not all games need mods, but for Cantata, it’s been part of the core design of the game from the very beginning.

What this tangibly means is that nearly all parts of the game have been designed around the question “how can I make this moddable?”. Even if it takes an extra week or month, I’ve always been sure that what I’m doing in the game isn’t “special” — I’m always trying to give myself only the tools that modders would also have access to.

If people are interested, I can really go into what this means architecturally for the game (little use of Update loops, lots of events, “data-driven design”, etc.) in another post, but for the rest of this post I want to talk about one of the core parts of the game and how I’ve designed it to be moddable.


To start, I want to talk about Units. Or Buildings. Or Weather... Or basically, anything you can “interact with” on the map. All of the above (and more) are what I call “Interactables”. Interactables can take many forms, but they all share a few common properties like having a name, a vision range, health, a spritesheet, and... that’s about it. What they have that makes them special and moddable is an associated block of data that defines their specific behavior in the game, or, what “Aspects” they have.


Aspects are essentially small, isolateable (don’t need other Aspects) blocks of functionality that can be assigned to any given Interactable. A given Interactable can have any combination of Aspects, and the different permutations of these combination are what make Interactables look and feel more like proper things in the game.

Aspect Combinations

For example, a “Unit” is just an Interactable with a “CanMove” Aspect, which gives the Interactable the ability to move in game. If we want to give that “Unit” the ability to attack, we additionally give it the “CanAttack” Aspect. Maybe a reconassiance unit is just an Interactable with a “CanMove” Aspect (and high assigned movement range), not a lot of health, and a large vision range. A Tank could be an Interactable with with a “CanMove” Aspect (with low assigned movement range), low vision, but a “CanAttack” Aspect with high attack power and forward biased attack pattern (assigned in the CanAttack aspect).

A “building” is just an Interactable that can’t move! Stationary Artillery could be an Interactable with only a “CanAttack” Aspect and a large firing range.

Aspect Parameters

I’m alluding to it a bit in the examples, but each Aspect, in addition to defining base-level functionality, also has a set of parameters associated with it that help give that Aspect “shape” for a given Interactable. Like I said above, having a “CanAttack” Aspect gives you the ability to define a firing pattern — do you make a unit that can only attack forward? Or a building that only attacks out of its sides. For the “CanMove” Aspect, how far can this Interactable move? Can it move through water?

Each Aspect has its own set of parameters that you can define on a per-Interactable basis, giving you a ton of flexibility in designing your own Interactables. All this will be properly documented once the alpha is live, but for now I hope that this gives you a taste of what will be possible in combining Aspects and Aspect parameters. I can’t wait to see what crazy stuff people come up with.

What Aspects Can I Use?

For now, these are the current Aspects in the game, some of which are self-explanatory and some that will need further elaboration later on:

  • CanMove
  • CanAttack
  • CanBeSupplied
  • CanSupply
  • CanSpawn
  • CanBuild
  • TimedLife
  • CanLoadUnload

One current limitation to this system is players won’t be able to necessarily create their own Aspects, and will need to choose from the provided list that the game supports. That said, the Aspect system is robust and flexible, so new Aspects can be easily added to the game if something specific gets a lot of demand. This list will also grow as the game continues to develop, so over time I expect this list to grow past what’s listed above.

How Do I Make Interactables?

Creating new Interactables in this way will also be incredibly easy, and will use simple text/image files stored in Cantata’s game directory on your machine.

Said differently, you won’t need to know any coding to do this!

What I’d really like to do is make a hosted website dedicated to creating/sharing all things related to Cantata modding (beyond just Interactables), so that people can “mod” the game from only a web browser and not even need the game itself to make buildings/units/terrains/etc, but all things in time.

I’ll end this post here and hope it’s inspired some people to start thinking about what interesting Interactables they may want to make! For now though, thanks for reading!

Next time, we’ll be talking about Terrains!