Devblog 34: Reflections

Month Twenty Four

It has been just over two years since I started working on the project full time. This seems like the right moment to reflect upon the journey so far. The most important thing has been creating an international team capable of delivering the game. The team has achieved a lot together, as the creative and technical challenges required of building a Real Time Strategy game are, to say the least, non-trivial. The next milestone will be finding a publisher, which will secure the final phase of development.

I asked Jamie and James how they thought professional programming compares to games development, and they said the same thing. Regular IT is often simpler and more straightforward. With games development, the first draft of work is never the last. Complex problems require iterative solutions. Most tasks are novel, and in spite of the three of us having plenty of traditional programming experience, none of it has prepared us for the difficult and esoteric nature of the work.

In games development creative and technical processes merge. One case in point is how artwork develops over time, adapting to circumstance. Below are two concepts for lizard androids. The first one is older, and seemed fine at the time. However, it was not visually distinct enough in-game, and so the shape needed to change. As usual, Michal rose to the challenge, creating beautiful and unique concepts.

Trying to resolve errors in complex systems, like networking, fog of war, and pathfinding, requires bespoke tools and unusual tricks. James and I were working on pathfinding recently, and he realised the easiest way to understand what was happening was to make the code asynchronous. This allows us to add delays, consequently we can watch the pathfinding logic unfurl in real time.

Usually, breakpoints and debug messages are all that a programmer needs to fix errors, but in this case that wasn’t good enough. It was also helpful to override ToString functions, displaying key object data at a glance while debugging (instead of rummaging through the guts of object instances each time I was confronted with a list of them). Not to mention the complexities involved with network testing (Olaf).

The project has come a long way over the past two years, and it still has a long way to go. But we’re in a strong position to complete the game I set out to realise. This would have been impossible without the hard work each member of the team has contributed.