I love game development! I’ve done it as a hobby for years, but I’ve never completed anything I’ve wanted to share with people. I’ve contributed to mods for other games like Civilization 4 and 5. I’ve worked on some open source projects, and I’ve made some pretty simple games for myself that have proven entertaining. A couple of weeks ago I decided it was time to change all that. I challenged myself to spend a long weekend on creating a fully playable game in 4 days. Ridiculous right? Well, not with the proper tools.
The Proper Tools
I decided that to do this I would have to play to my strengths. I know and love and hate C++ with as much passion as the next developer, but I knew that to get a game going I’d have to be quick and use my strongest language: C#. Next I had to choose an engine. As fun as engine development is, when you only have 4 days to make a game, it certainly pays to get all the guts “off the shelf”. Most of the engines I have experience with are C++ engines so my knowledge of C# engines was a little rusty. I knew about Unity3D and had used it to play around with before and they’d released a new version, and they’re also free. I also considered XNA Framework, but since I was looking for rapid development I ended up choosing Unity3D since it has a rich feature set, excellent creation tools, and most of the features I wanted. It would require a lot of learning, but it seemed to me the engine would be relatively easy to pick up. Now all I needed was an idea.
Like most aspiring designers/developers I have a design document describing my Magnum Opus. I took this, found the most basic features that would make the game a game, and began plotting. I ended up throwing the idea out because it just wouldn’t do the game justice. And all my art is the epitome of “Developer Art”, so, I came up with a new plot. I decided to design a game based on the old games I used to waste hours and hours on. One that wouldn’t need a slew of graphics, and could have compelling game play in a matter of days. With a humble beginning and proper architecture a small idea like this could easily grow. I based my new game on the old Trade Wars games that populated the BBSes of my youth. Next I needed a design.
Rather than writing an entire document for a game that would be developed in 4 days (getting closer to 3 by this point) I decided to use Pivotal Tracker to jot down my ideas in the form of stories, and a spiral bound notebook to draw out gameplay screens. I described a target set of features that I would need to have the game be playable (and marginally fun) and worked out the systems that would need to exist to support these gameplay elements. With a set of features, a layout of screens, and a collection of stories on Pivotal Tracker I was now ready to dive into coding.
I expected to spend a lot of time learning how to accomplish tasks in Unity3D so I decided to start with making the behind-the-scenes systems (business logic) first in Visual Studio and creating a dll that I could reference from Unity3D. As a web developer I’m deeply committed to the separation of model from view. 😀 I developed the basic objects that would be needed in the game, modelling them as simply as possible and creating a preliminary set of basic game data in Excel and writing a quick program to export that data into XML and thereby make it easy to load and save objects. I then created the systems to act on those objects and handle simulating the game world. I didn’t go for Test Driven Development in this project but I did create a simple test project that would at least run through the basic features and make sure nothing was glaringly wrong with the game library. By the second day I had most of the systems in place to consider this a game. Now I just needed to tie it all together with user interface and hook Unity3D to my dll. I ran into a few snags integrating the dll to the Unity3D project, but nothing that was strange or badly documented. I got a little giddy when I realized how ridiculously simple Unity3D’s GUI system was and in matter of hours had all of my hand scrawled screens in the spiral bound notebook and a game state manager in Unity3D. It wasn’t pretty, but it was a user interface! I worked my way through the user interface scenes one at a time hooking up the placeholder interface to the code that lived in the dll I created. By the end of day 4 I had a playable game with all the features I originally intended plus a few more with a nasty prototype user interface, random 3D models from TurboSquid, my very own Developer Art 2D icons, and all the tools I needed to expand the game to add features later. Mission accomplished. On to the future!
So now I’m excited, I’m motivated, and I’m driven. After accomplishing a feat like that, what can’t I do? Since I accomplished this challenge I’ve added more features. I’ve added a modding system, added a bit of polish to the user interface and started work on online play features. I may even add a page to this website to track progress of the game since some folks have expressed interest.
So here are the tools I used to rapidly develop a game.