Dev blog 9 - Abilities explained
Hi all!
Last week I introduced the abilities used by our units, and this week I wanted to talk a bit more about them. Our ability system has received 3 iterations. The first was done by Robert in the old engine, and after the engine switch, I reimplemented it in the Serious Engine. Finally, I revamped the entire thing to make it a bit more flexible and content-driven without the need to write any scripts. Was that a good idea or not? I dunno. It works, tho!
We start by defining an ability in a read-only resource that is taken by our game logic, which after processing spits out a bunch of actions that describe what happens to the units and environment. Conceptually, it’s kind of like recording yourself in The Talos Principle (you did play that game, right?), then watching the replay of everything you did.
Every time the player clicks on a tile to use an ability, we calculate everything, and I mean everything, that happens to the units and the game world, and store these events in a nice little queue. Then we playback these actions and you see the result. Arrows fly, rocks get destroyed, units die and are spawned, time slows down and resumes, etc.
Each ability can affect units and/or tiles, depending on how it’s configured. We have a small list of unit effects that are applied to all units caught in the area of effect of the ability. These are your standard effects, like damage, knockback, pull-in, granting status effects, etc. There is a way to define multiple sets of effects that get applied to different units as well. For instance, all enemies in the area of effect get damage and a bleed, while all friendly units on the map get healed. All of these effects can happen by using just one ability. We probably won’t have such overpowered abilities. Or will we? :)
Tile effects are things that don’t require a unit as a target, like spawning another unit, or a ground effect.

Yes, I totally created the ability mentioned in the previous paragraph. It took a whole 3 minutes.

There are 3 categories an ability falls under - Run, Attack, and Teleport. A Run ability will (obviously) move a unit by calculating waypoints to the target tile (the clicked tile). A Teleport ability is similar to Run but has only two waypoints, the first and last waypoint of the equivalent Run path. Both of these are capable of inflicting effects to units and tiles as well, and they do it by finding targets from each waypoint. The last category, Attack, just applies all effects to the selected targets.
The entire structure of abilities has a lot of tiny configurable nobs and toggles that allow us to create a wide range of Skills, Spells, and Relics. The current set of effects we can do to units is not large but still allows us to implement interesting Skills or Spells. We’re planning on expanding the list once we get a better idea of what the game needs. The combat layer is feature complete, so now we’re gearing to filling out the missing content. Our artists are doing a great job (except Ivan) at creating levels, next week they’re starting work on the monsters, and sometime after that we’re giving them abilities and AI.
Thanks for reading! This post was a lot more technical the first time I wrote it, and I might publish the more technical version somewhere after I cover some more functionality of the abilities, for any technically minded readers. Do tell me if you’re interested in reading the nitty-gritty technical details of how these are implemented (since I did that), so I can gauge interest. You can express your thoughts on our Discord server, or you can contact me on Twitter.
Random fact: The other Marko created the icon for the ability I made for this post a few years ago.
MarkoP
Last week I introduced the abilities used by our units, and this week I wanted to talk a bit more about them. Our ability system has received 3 iterations. The first was done by Robert in the old engine, and after the engine switch, I reimplemented it in the Serious Engine. Finally, I revamped the entire thing to make it a bit more flexible and content-driven without the need to write any scripts. Was that a good idea or not? I dunno. It works, tho!
We start by defining an ability in a read-only resource that is taken by our game logic, which after processing spits out a bunch of actions that describe what happens to the units and environment. Conceptually, it’s kind of like recording yourself in The Talos Principle (you did play that game, right?), then watching the replay of everything you did.
Every time the player clicks on a tile to use an ability, we calculate everything, and I mean everything, that happens to the units and the game world, and store these events in a nice little queue. Then we playback these actions and you see the result. Arrows fly, rocks get destroyed, units die and are spawned, time slows down and resumes, etc.
Each ability can affect units and/or tiles, depending on how it’s configured. We have a small list of unit effects that are applied to all units caught in the area of effect of the ability. These are your standard effects, like damage, knockback, pull-in, granting status effects, etc. There is a way to define multiple sets of effects that get applied to different units as well. For instance, all enemies in the area of effect get damage and a bleed, while all friendly units on the map get healed. All of these effects can happen by using just one ability. We probably won’t have such overpowered abilities. Or will we? :)
Tile effects are things that don’t require a unit as a target, like spawning another unit, or a ground effect.

Yes, I totally created the ability mentioned in the previous paragraph. It took a whole 3 minutes.

There are 3 categories an ability falls under - Run, Attack, and Teleport. A Run ability will (obviously) move a unit by calculating waypoints to the target tile (the clicked tile). A Teleport ability is similar to Run but has only two waypoints, the first and last waypoint of the equivalent Run path. Both of these are capable of inflicting effects to units and tiles as well, and they do it by finding targets from each waypoint. The last category, Attack, just applies all effects to the selected targets.
The entire structure of abilities has a lot of tiny configurable nobs and toggles that allow us to create a wide range of Skills, Spells, and Relics. The current set of effects we can do to units is not large but still allows us to implement interesting Skills or Spells. We’re planning on expanding the list once we get a better idea of what the game needs. The combat layer is feature complete, so now we’re gearing to filling out the missing content. Our artists are doing a great job (except Ivan) at creating levels, next week they’re starting work on the monsters, and sometime after that we’re giving them abilities and AI.
Thanks for reading! This post was a lot more technical the first time I wrote it, and I might publish the more technical version somewhere after I cover some more functionality of the abilities, for any technically minded readers. Do tell me if you’re interested in reading the nitty-gritty technical details of how these are implemented (since I did that), so I can gauge interest. You can express your thoughts on our Discord server, or you can contact me on Twitter.
Random fact: The other Marko created the icon for the ability I made for this post a few years ago.
MarkoP