As you all know this time of the year is all about reflection and contemplation. Reflection about the year that passed and about the year ahead. For most normal people this concerns matters such as life, love and health. Not for nerds like me, however. I like to contemplate about the ideal code structure and our general design philosophy ;). Allow me to share some of my thoughts with you in this quite technical and long blog post.
As you all know we are building a game that is supposed to last. This is not a 'release and then forget' application. We want to keep maintaining, expanding and improving the game for years to come. It is here to stay, at least that is our intention. This has consequences for how we build the game, of course. Our code is not meant to be quick and dirty, because that will come to haunt us in the future when we are redesigning and expanding certain features. Trust me, I know ;). This is what happened to Call of Combat v1 also to some extend, making it hard to fix bug and introduce new features.
In short, we want to do it properly, which means:
- Code that is easy to understand and maintain
- Modular code (making it easy to add new features and game mechanics)
- Flexible and not too dependent on one framework or another
- Bug-free and easy to test code (this will come to haunt me for sure :P)
So how are we going to do this? It is all rather technical, so I won't go into too much detail, but allow me to reflect a bit on our choices so far. As you all know we've been using Unity3D as our game engine of choice. All the nuts and bolts stuff that I had to develop from scratch in the old Call of Combat are conveniently part of Unity3D already. Think of stuff like path finding of soldiers, animations, line-of-sight calculations, loading of 3D models, etc. It really is a pretty awesome framework and is used by independent developers all over the world :).
We've been prototyping actively with Unity3D over the last half year or so and are very happy with our choice. We implemented lots of features already in our main prototype, but these past few months also allowed us to familiarize ourselves more with Unity3D and the many aspects of developing in it. So far in our prototype we've basically touched all the main subjects that make a game like Call of Combat: 3D graphics, multiplayer, animations, map design, cover, controls, hotkeys and UI development. It has been an invaluable learning experience.
Our conclusion is that Unity3D out-of-the-box is perfect for rapidly creating prototypes and smaller games. However, as the complexity grows (and it inevitably will in a multiplayer game like ours!), it becomes somewhat harder to keep things tidy, understandable and modular. It really is designed to be able to hash out prototypes quickly. This does not mean we believe Unity3D is not good for our game. It just means we need to make sure we use techniques to structure everything sensibly (for those interested: we're using techniques like inversion-of-control and dependency injection to achieve this).
That has been my main task these last few weeks: taking all the lessons from our existing prototype, reflecting on a durable structure for a releasable game and making the necessary changes (refactoring as programmers call it) to make existing features from our prototype adhere to that new structure. This probably sound incredibly vague to non-programmers, but trust me this step has been critical for the project and it is a logical consequence of the prototyping we've been doing so far. Prototypes are meant to do exactly this after all: provide insights into how to best build a solid and flexible application that is ready for a public release.
Now, as all this effort has been on the core system there are no sexy screenshots for me to show right now. Rest assured though, while this critical 'redesign' work has been taking place on the core code base, work has also continued unabatedly on in-game art (3D), the new website, and building a great team to make all this happen. I am sure updates on all that will follow in the coming weeks as well!
Gotta say, I'm pretty excited about all this ;). We are in a position now that barely one year ago (when I pulled the plug on the old game) I would not even be able to dream of. Thanks for all the support guys (and girls) and a happy 2014 to all of you! A critical year for the game we love no doubt!
Florian (aka KAding)