The following is what I consider the bare minimum list of things that you need to look for when you are starting a game project.
- Build system
- Revision Control System
- Supporting libraries or engine
There are many things people like outside of the above list, but the minimal ingredients that should get you going are listed above. The other thing that I want to be clear on is one of my quirks: I hate software that needs to be installed or version matched. I much prefer tools and libraries that are essentially independent.
Many times in the games industry the build system is considered a task for junior engineers, however I find that some of the people I respect the most in the industry realize how important a healthy build system is and give it the attention it deserves. The difference a consistent, correct and fast build system makes is the life line of a production. Selecting the right build system can be a challenge. What do I need?
- Required: Correct C++ builds with dependencies, ability to expand to arbitrary data
- Nice to have: Test support, Cross platform support, multi-core builds
- Not currently relevant but might be in the future: Distributed builds
Power of two games had a great post listing the challenges that they went through with SCons. That post was a bit of an inspiration for me to evaluate the above listed build systems. I plan on writing a script to generate some projects so I can compare the usage in all the above (even though Noel already posted his). I will post that when I have a bit more progress. I’m planning on starting with CMake since it can generate the most options and then adding in JAM/KJAm since they look the most promising.
Revision Control System
Doing a project without revision control is like jumping out of an airplane without a parachute. With freely available revision control systems no project should go without revision control. Ideally your revision control should be on a remote server and backed up (just in case you have a fire or some other tragic data circumstance like a drive failure).
Although there are a few revision control systems out there, to me their are only two choices: Perforce and Subversion. I have years of experience with Perforce and since I am working on my own, their free version works for me so the cost of the commercial version isn’t a factor yet. However, I have heard of more success using Subversion for remote development as Perforce works better when connected to the server. Simply as a learning exercise I think I am going to start my project with Subversion.
Supporting Libraries or Engine
The libraries or engine that you choose to use is mostly based on the type of game that you are building and the amount of features you want to build for yourself. My main intention with this site is to live by a “get it done” kind of motto, so my choices will be based on what I think is the fastest way for me to get started. I believe that most games, regardless of what they evolve to, can initially be prototyped in 2D so I am going to start with that kind of game.
The PopCap game framework has almost everything that I need: 2D Sprite rendering, Music, Audio, Font rendering, wide platform support. The only downside is that it is only for Windows. But hey…if I make something that sells I could always license the Mac version or write it myself.
Outside of the Popcap framework there are a few other libraries that I am interested in that fit my “works without support library” rules.
- LUA: For scripting and faster iteration, I am interested in adding in Lua scripting support to my game
- Box2D: For physics. This might be over kill and I will have to see if I need this or not for my game concept
- SQLite: For saves/game data. Again might be over kill but would be a good learning project
I will be investigating what build system to use based on correctness and iteration times. The revision control system will be Subversion and I will be starting the project using the PopCap framework.