I think I’m at a point now where I can usefully discuss the problem of choosing the basis on which to develop a game. This summer I’ve been working on games in Unity, and in my spare time I’ve been using GameMaker: Studio. I also have several years of experience with XNA and raw DirectX and recently, MonoGame.
I started writing games in Flash a decade ago now, but desperately wanted to make 3D games. Back then, all 3D games were written in C++ or C. In fact, my first ever exposure to a full sized game’s code was the GPLed Quake II, which I modded. I assumed that it was only possible to make large games in native code, and perhaps it was even true then.
It took a while after this for it to dawn on me that for 2D games, one doesn’t need native efficiency at all, and if a game is running slowly it’s probably bad design than the tool you’re using.
This summer especially using C# with Unity, I was surprised at how efficiently I could run quite complicated games. Even on a low-end laptop, I was seeing a solid 60 fps on anything I wrote, as long as I put a bit of thought into how it would execute.
Separately, in the evenings, I’ve been working on a game with GameMaker: Studio. This was inspired mostly by the discovery that a lot of my favourite 2D games were written in GMS and a sudden desire to create 2D games from start to end. I suspect I will continue to use GMS for Ludum Dares.
However, GMS has some issues, after which I converted my game to MonoGame. I’ll go into more detail on that in a future post.
So, allow me to weigh up the pros and cons of various different game development tools. All this assumes comfort in switching between imperative languages.
C++ (with OpenGL or DirectX)
For 2D games, the extra efficiency is probably not worth the boilerplate code one has to write to get a game like this running. For one guy, or a small team, it’s an interesting exercise writing a game engine from scratch, but essentially pointless.
For a complicated 3D game, you probably do need efficiency on the rendering side of things, but then it’s a lot more complicated to write the engine so it’s still not worth doing it yourself.
This approach is also a lot more difficult to port to different platforms, even if written with that in mind from the start.
That said, I think it’s very useful to understand how DirectX and OpenGL work in a broad sense, even if you only ever use much higher level tools like GMS. In particular, the rendering pipeline and transformation matrices are essential knowledge.
XNA with C#
XNA is dead. The only platform it now works for is Windows. Why not try
For those who don’t know, MonoGame is essentially a rewritten, portable XNA. I hope in future it will expand beyond XNA (it has to some extent already) but for the time being, the way to learn it is just to read the XNA documentation.
Full disclosure: I’ve only been using it for a few days. But so far, it’s been incredibly flexible and easily fast enough for my needs.
I am lead to believe it should be easy to convert even shaders to whatever platform I like, though I’ve yet to try this.
Unity is really the big success in indie development in the last few years. It is a great tool and there are great games using Unity out there. However, despite recent advances, I’d probably recommend against it for 2D games. There is not enough control over what is drawn when for my liking, and the idea of using GameObjects for things in the game doesn’t necessarily translate well for tiles etc.
That said, there’s a huge community of people who’ve almost certainly tried to do whatever you want before, so anything can be done at a stretch. There are even low level functions like the GL class, but if you find yourself using those a lot it’s probably the wrong tool for you.
I used Game Maker about 10 years ago, and didn’t like it, and then came back to it recently. It’s improved a lot, and there is a vibrant community. However, most of the community is based on doing very simple things. The advanced tools in GMS like the shaders and surfaces are good, but there comes a point when it’s easier to make games in a slightly lower level environment. The thing that got me in the end was object sorting: if I want sets of objects to be sorted differently for different stages of drawing, that becomes very hackish in GMS but is trivial in MonoGame, say.
Flash probably isn’t dead yet, and I’ve no doubt many people still play online Flash games. However, it’s not in the heyday it was when I made games with it, and it’s not going to gain any more traction as far as I can see. Better to jump ship to HTML5 or WebGL based games if you are intent on browser games.
I have no extensive experience with Unreal, or with Haxe and all the webgl/html5 stuff that seems to be taking off. I’m sure it’s all good though.
I’ve worked with several other tools from different companies and though I’m sure it’s perfectly possible to make excellent games with them, I think for professional and near-professional hobbyists it’s best to steer clear of tools aimed purely at casual hobbyists or with immature communities. I’m talking about things like Leadwerks and anything by The Game Creators.
Software like Adventure Game Studio and RPG Maker is excellent if you want to make the games it’s designed for, but they are all a bit samey and trying to push these tools too their limits often makes odd and not necessarily satisfying games.