I joined the Warriors team back in 2019 to support development of the final major update to the original, single-player version of the game. Following that release I was immediately put to work on a new online multiplayer version, mostly built from scratch and with its own set of unique challenges.

In this new version, I was in charge of facilitating the arena battles themselves and everything that would happen in them. I implemented every action and skill available to players and bots, and the overall battle flow (turn phases and such). The original hotseat version of the game featured 1v1 battles with tile-based movement on a straight line, limiting the players’ movement options to moving forward, moving backwards or staying put. In contrast, the new version would have to support online battles with up to 8 players on arenas constructed from arbitrarily linked tiles, for which I was tasked with implementing a pathfinding system.

Since the tiles and linkages could be placed arbitrarily by the designer, and did not conform to a grid, the system had to be node-based. I had each node hold references to up to eight different links. To maintain my sanity, I automated this for the entire arena. The automation didn’t always work perfectly, so I made extensive use of Unity’s gizmos and editor scripting features to review the results and tweak them manually if necessary.

I was also tasked with creating a new AI system for the game. [2025 note: no, not that kind of AI]. The new version presented new challenges, and with its focus on larger scale online battles, it had to have competent bots. These not only filled out the match when not enough human players were available, but also had to take the place of human players who unexpectedly disconnected or otherwise had to quit the match. Admittedly, my approach here may have been overkill: I implemented a version of the GOAP (goal oriented action planning) model, which meant that the AI behaviors were very sophisticated and goal-driven, perhaps even too sophisticated and too much work to keep track of and debug. The system also had some special requirements. The AI agents had to be able to make decisions based on the current world state and the actions available to them. This meant that the current state of the game had to be distilled to a set of quantifiable parameters, and every skill and action in the game (including walking) had a built in projection of how it would affect that state. This obviously created some extra work, and also had other drawbacks. In some cases I had to make special exceptions and work around the GOAP model to get the bots to behave according to the designer’s wishes. In hindsight, while this fascinating model has been a selling point for some very high-end games, a simpler, designer-facing system might have been more appropriate in our case. But it did work eventually.