How to make your first videogame

Some people have asked me for advice on how to get started making videogames, usually in the context of the gamejam I'm organizing. (which makes me so happy -- one of the main reasons I'm organizing them is to get people who haven't made games making games). This is my opinion and not gospel, so if you find something else works better for you, do that instead! You should also check out youcanmakevideogames.com, as it's a fantastic resource, and more comprehensive than this blog post. And also the big list of game making resources.

The first thing to say is that game design is entirely beyond the scope of this post. There are good places you can go to learn that (you could do worse than reading these), but what works best is trying things and seeing if they work. The next best thing is playing games and seeing how they work. It's a wonderful, endless, frustrating journey. But to start on it, you need to be able to make games.

Secondly, videogames are a tiny part of games. If you want to make games, you should definitely at least consider not making videogames. It's by no means less valid to make a boardgame, or to write the rules for a game that people play without any bits at all. It's even a good way to test out videogame ideas. You've still made games, I think games are wonderful and more people should make them, so we all win. 

But if you want to make videogames, then okay. I completely understand - I do too. Let's talk about that. The best way to start is to make small games. Make a small game, and finish it, and then make another. Start with a tiny scope, the smallest thing you can think of that will still be a game. 

Similarly, try to minimize the amount of stuff you have to learn, unless your aim is to learn stuff. Don't write your own engine, if you haven't before. Focus on the game part. Don't know how to use Photoshop? Use Paint instead. Can't compose music? Me neither - use other people's music, or make silly noises into a microphone. Don't be afraid of constraints, and of scaling your design to fit your time and knowledge - it's often to the benefit of your design.

Which isn't to say you should be afraid of having to do something new if it's necessary. Dive into it with confidence. Some stuff can be surprisingly doable, if you don't let it see your fear.

Shall we get a bit more practical now?

What tools would I recommend you use?

If you know a tool (if you are a programmer normally, for instance) then that is the best place to start. Minimize what you have to learn, and all that. So if you're a Java dev, look at Java libraries. If you can do web design well, you can make games in web pages, or if you're ace at JS, try out making a canvas thing. If you can draw, make that the focus of your games. Even if your skill is crosstitch, you can use that (if your skill is crossstitch, please make that the focus of your game, I would love to play a game with the graphics done in crosstitch).

But if not, then here's what I'd recommend for programming your game:

If you have programming experience, and want to do something 3DUnity3D

It's quick to get something working, it's powerful enough that I'm employed to use it all day, and it's simple and modular enough that you don't have to read all the (really quite decent) documentation before anything will work. You script in .Net, in C#, or in something that looks like Javascript but isn't, or in something that looks like Python but isn't. It can export to a web player that you can embed on any web page. The free version will suffice for the purpose of making a game, but you'll have to pay for luxuries like it running on an iPhone or getting to do heavy hacking on the engine itself. The downside is that it's a 3D engine and you'll have to either stick to primitive shapes or model and rig and UV unwrap and texture and animate your characters. You can use it for 2D stuff, but it's a hack you'll have to perpetrate yourself.

If you have programming experience, and want to do something 2D: Flash/AS3. 

People keep claiming it's dead, but it isn't. Not for games. AS3 is a decent Java-ey language, that's pleasant to work in. And the Flash plugin is installed in every web browser, and AIR lets you hit mobiles, and make standalone apps. My advice would be to get FlashDevelop (free!), download FlashPunk or Flixel, and work through the documentation. It'll get the basics of 2D games running, and you'll pick up Actionscript as you go. Alternatively, if you want to just write stuff in the browser, wonder.fl is a strange kind of magic.

If you don't have programming experience, but can write and/or drawRen'py

I've never actually used this! I am writing out of ignorance! But I've heard it's pretty close to writing normally, and having a (text-heavy) game result. It's designed to make visual novels, for examples of which I am obliged to refer you to Christine Love. The underlying language is Python, which is the programming language I would recommend to people who would like to be able to program. If your game fits it's constraints, then it seems like the best thing. I plan to use this this weekend, and will report back.

If you like the web, and choose your own adventure booksTwine

I have also not used this. I am not the best person to be writing this blog post. But I want to use it! It looks simple to use, comprehensible, and it spits out webpages as a result. Accessibility : win.

If you can't program, you hate writing, and you have patience : Stencyl

I have used this, and I hated using it. But that's because I can program, so I found having to not program frustrating. If you can't program, you may also find it frustrating to use, as the concepts underlying using it are the same as needed for real programming. But you'll be less lost in a sea of syntax errors, incomprehensible jargon, and vast libraries of functionality you don't understand. The setup is less onerous, and it outputs to Flash.

I should also give a shoutout to Oh My Game here, as it looks like it might be similar, but better. But despite being developed by a friend of mine (hello Erlend!) I still haven't tried it out. So this is a cautious nod.

There are lots of other tools out there. If you have one I should add to this list, let me know, and I'll add it.

As I said above, this is pretty programming centric. This is because I am basically a programmer. There's a nice index of how to produce other resources on youcanmakevideogames.com.

Other bits of advice:

Lots of people have source online for their games in any of these languages. Increpare has source for lots of Flash and Unity3D games, right next to the download links. Anna Anthropy has all her Twine sources up. Wonder.fl shows you everyone's source, right next to the player. Stencyl will show you the generated AS3 code for any game you make in it. Most Ren'py games I've downloaded seem to have the source embedded in them (Don't take it personally, babe, it just ain't your story does, I noticed). If you want to see the source to a famous Flash game, Canabalt is open source. An obligatory reminder: just because it's available to look at doesn't mean you can just copy-paste wholesale. This stuff is variously licensed, check first. But it's all good to learn from.

If you want to make something good, it's better to be consistent than to be ambitious. If you can't draw, lay things out nicely and pick good colours, and you'll get away with it (if you design it well). If you can't program, limit the complexity of the interactions that can happen. If you can't write, write as little as you can.

And if you get stuck, ask for help. Specifically, you can bug me. Or, there's excellent communities - on tigsource, on Super Friendship Club, on Way of the Pixel, on IRC, on Twitter and just generally the Internet. Most people will happily help someone who wants to learn something (but not someone who wants their homework done). And, even more marvellous is meeting other game creators in person at things like London Indies. Or, indeed, at gamejams.

Right! That's your lot. Now go and make videogames! All it requires is lots of hard work!


Fri Jan 20, 2012