When you're first starting out in game development, it can be very difficult to decide on which tools, languages, and frameworks to use. There are a ton of choices out there and a whole slew of opinions to wade through. My team and I always found it particularly helpful when other gaming companies revealed the development environment setup they found useful.
Despite having 10+ years programming and designing experience in other fields, I felt like a newb when I started developing games. Our first project, Furdiburb (a virtual pet adventure game), was started in 2009, exclusively at the time, for Android. Java was the only available language for the fledgling platform, and so we went with it. Being a 2D game we (incorrectly) chose to develop without OpenGL against a non-hardware accelerated canvas. As Furdi grew in popularity so did the project. We eventually found ourselves dealing with performance and portability concerns. We could have saved ourselves a lot of pain had we been able to learn from other developers which frameworks to use or avoid.
Finding A Better Way
After completing Furdiburb and very slowly porting the game to iOS (using playn), we decided to move on to Game #2 (Eras of Alchemy). We wanted to move away from Java in the hopes of wider-spread cross-platform development while leaving the door open for console development in the future.
And so the search began. I spent nearly a month comparing frameworks, tools, and engines, and in the end, my team and I settled on a new way of development that we are quite happy with now. I won't get into why we chose these. The frameworks are constantly changing, and the reason for making a decision a year ago may no longer be valid at this moment. Instead, the rest of the article will simply describe what we use and why we use it.
These are the things we use for programming our games. This is just the way we do things. Many different combinations of tools and frameworks are perfectly valid if not better.
All of the frameworks we've chosen are either open source or have publicly available code. This has been a great help so far as we've been able to make custom tweaks and emergency fixes when necessary.
Cocos2d-x – All of our cross-platform development is done against the open source Cocos2d-x framework. For Eras of Alchemy, we used version 2. For our next game, we are using the latest version 3, which includes a major overhaul of the API and performance improvements. Overall, Cocos2d-x 2D performance is great and the documentation is decent.
Spine – We use Spine for our animations, and so we include their C-based Cocos2d-x plugin.
SQLite – Cocos2d-x offers a data storage solution, but we prefer to use SQLite for better read/write access and performance.
C++ – Cocos2d-x supports multiple languages, but we chose to use C++ since we feel it is the most cross-platform friendly language available at the moment.
C – Occasionally you may want to integrate an open source API. Some of them are written in C.
Java – We still have to use Java, but only on Android for integrating IAP, ads, and OS-specific functionality. Communication between the languages is done via JNI.
Objective-C – Same as with Java, we use Objective-C for iOS-specific functionality.
Scripting – This includes shell scripting and other scripting languages. All devs have to write scripts from time to time, but we rarely talk about it. It's relatively easy, but it's often time consuming if you're like me and don't remember the syntax due to lack of use. We write scripts for compiling code, automating audio conversion, level building automation, and texture packing.
Xcode – Everybody told us that Xcode is terrible! So I tried it, and I have to say, it's currently my favorite development environment. I won't say why because I don't want to start an IDE war! We use Xcode for cross-platform development as well as for Apple specific programming.
Eclipse – A sluggish monster of an IDE, but quite a good one in my opinion. We use Eclipse for all Java and Android related development including deployment and debugging. Android is pushing Android Studio instead of Eclipse now, but we haven't had the time, nor the incentive, to switch over yet.
Visual Studio – Also a great IDE. We use it for Microsoft related programming, debugging, and deployment.
Even if you're a one-person team, you should use version control! Everyone makes mistakes, and any hard-drive may mysteriously die. We're a team of three, and so from day one, version control was necessary. There are quite a few solutions out there, but these are the ones we use:
SVN – I like SVN. It does everything I need it to do (merging, syncing, history, etc.) but without a high learning curve.
Git – Many of the open source frameworks we rely on use Git. We use Git to stay up-to-date with them and occasionally make our own branches when a quick fix is necessary.
Apparently you need computers to make video games! Initially all development was done on Linux machines (I <3 Kubuntu), but it eventually became very inefficient to deal with two or three computers (or even multi-boot machines) once we started developing for iOS. So we caved (I <3 Linux) and got some iMacs, which have actually been enjoyable to work on. Luckily, the command line is essentially the same on OSX as it is on Linux, so many of our scripts carried over unchanged.
Adobe Creative Suite – No major surprises here. Our artist mostly uses Illustrator and Photoshop.
Spine – Can't recommend this skeletal animation tool enough. Skeletal animation saves you on disk space as compared with traditional frame-by-frame animation. It also saves you development time with powerful features such as animation mixing, character skinning, and deformable meshes.
Texture Packer – You'll probably want to pack your images into larger textures for better performance. We chose Texture Packer for this, and we use their command line functionality to automate the packing process.
bmGlyph – If you plan on using bitmap fonts (rather than runtime Truetype Fonts) then you'll need a bitmap font generator. We chose the OSX compatible bmGlyph, which has served us well.
The tools we use to design our levels or layout graphics.
No Editor! – When we can get away with it we don't use an editor. We just code it up! It sounds crazy and inefficient, but if your team is really small, sometimes you can save time by not coding up an editor for a one time task.
Custom Editors – Sometimes we code up a clunky in-game editor to layout graphics or set up a level. And by clunky, I mean unpolished, since we're the only ones who ever use it.
R.U.B.E. – For our next game, we almost developed an in-game editor until we stumbled across R.U.B.E, which stands for Really Useful Box2D Editor. This super useful tool has saved us a ton of time, but if we ever decide to release a level editor, we'll have to develop our own.
Music and Audio
ffmpeg – I'm a huge fan of ffmpeg. It's awesome! We mostly use it along with a script to convert our audio to appropriate formats for each target platform.
Cakewalk Sonar – This is a powerful program for making music with a difficult learning curve in the beginning.
Garritan Personal Orchestra – If you want orchestral VSTs (instruments), Garritan has high quality sounds. We use this in conjunction with Sonar.
Audacity – A good audio editor and recording tool.
The following we no longer use, but would still recommended:
Anvil Studio – This is a good program if you've trained classically with an instrument and are comfortable with reading/manipulating notes, times, measures, and want to create MIDIs.
Linux Multimedia Studio – LMMS is a nice simple program. Out of the box, you can make great techno/electronic sounding music. This doesn't require you to know how to read music notes.
There are tons of ways to make games these days. This is the way we've chosen to make our cross-platform 2D games, and so far, we're quite happy with it. Our most recent game shipped on Android (Google Play, Kindle, and Nook), iOS, and Windows Phone. Using the same set of tools and frameworks, we plan on expanding to PC, Mac, and Linux with the release of our next game.
Founded in 2010 by two guys and a gal, our goal is to make the world a happier place, one app at a time. We are currently working on our next game, a twin-stick shmup with a feathery twist for PC/Mac/Linux called A Quiver of Crows.