One of the leading mantras for SideTracked! is the idea that “anything you can do, I can do better”! This goes for everything from character abilities, stats, items, and weapons. Anything that an NPC or creature can do, well… you can do it better. To drive home this point, let’s imagine you’re fighting some monster - say, a fire golem. This golem just so happens to shoot fireballs. You think to yourself “Heck! That’s an awesome ability, I sure do wish I could shoot fireballs!” Hypothetically speaking, according to our mantra, you (the player) should be able to become a better golem than the golem itself - not just equip a new player model, but adopt all its abilities and attributes.

Mechanics as to how a player can pull off identity theft may vary. A player might use a potion, spell, item, or become cursed. Regardless, there is one thing in common: You, the player, are now doing something that an NPC does - shoot fireballs.

There are a couple of different ways that game developers may allow a player to mimic the behavior of an NPC. They may have duplicate systems for shooting fireballs - one for the player and one for the NPC which mimic each other. The downside to this approach is that there’s a lot of duplicate code and data. Another common approach is to make no distinction between players and NPC’s and to use the same systems for both. This helps prevent duplicate code, data, and systems and just so happens to be how we do things.

In SideTracked!, all creatures (i.e., players, animals, monsters) are technically the same according to our codebase. the only difference between an NPC and a player is where character input is coming from. This has a couple of implications:

  • We, the developers, don’t need to do anything special for a player to become better than an NPC. If a player wants to morph into a dragon they had just slain, we could easily add a potion or ability that switches out the player models, abilities, for that of the NPC they had just slain.
  • We (or a mod) could allow Players to “possess” an NPC by switching out that NPC’s input controller for that of the player.
  • An NPC could theoretically be controlled via machine learning and fully play the game from start to finish.
  • It’s harder for us to make NPC AI as we need to mimic player input (but we feel that the extra versatility that the system gives us offsets this point).

Currently, we have implemented player input and simple monster AI. We’re excited about what the future holds and what we can do with this system. Versatility is of the utmost importance throughout development. As such, we always try to design our systems so that there are few technical restrictions limiting design.

Our design decision for making NPC’s and players the same might not fit all games. It comes with many downsides like increased resource consumption (does every dragon need an inventory?). However, we hope that the features this system brings will be well worth a couple of extra megabytes of ram consumption.