Can you write a game in one week?
Do you have half a dozen unfinished game projects lying around? Have you switched tools or programming languages more than once trying to get that first game finished? Does it feel like your enthusiasm for a new game project takes off like a rocket ship, but then dwindles and crashes into the ground with too little to show for it?
If so, don’t despair: there are many issues to overcome, so getting started is understandably hard.
The problem
If you have put time into writing a game of your own, and you haven’t been able to complete it, there are three main likely reasons:
1. The most basic possible problem is that you may not have the required technical knowledge. Are you stumbling at the math, algorithms, programming, or the details of the tool you are using to build the game? If so, this is the problem. It will take work, but this is actually an easy problem to solve: you need to put in the time to learn those tools. There is plenty of help for this online, and you can probably solve this in a few months. It is important that you choose a technology adequate to your background and inclination: if you hate math and programming, your profile is probably more that of a game designer, so you’d better use a tool like Game Salad to play around with your own game prototypes without coding. But if you want to become a full-blown games developer, you need focus on a core programming technology. There are many options: C#, Javascript and HTML5, or even C++ with OpenGL if you want to maximize your chances of working in the next PS4 blockbuster. Once on track, stick with it for at least a few months until you can make basic things using it. Don’t try to invent or innovate – just clone classic simple games until you feel comfortable doing that.
2. Once the technical hurdle is out of the way, a very common mistake is picking a challenge that is too big for the available resources. Don’t bite more than you can chew. In the most glaring cases, you and your buddy have single-handedly been trying to create an MMORPG in a 10,000-star galaxy: it’s obvious it is not going to happen. But even if you realize the limitations at hand and cut the scope back, many people still fail to understand the real resource availability. If your motivation is rocket-high when you start the project, but dies off in 3-4 weeks, then you can only tackle games that can be done in that timeframe! With the first week dedicated to brainstorming crazy ideas, and the last one necessary to prepare a decent release version, this means you only have 1-2 weeks of work to put in the game. Bye-bye 100-level games, hello nice single-level infinite runners and three-difficulty-levels casual game-toys. And don’t worry, you will be able to complete larger projects later one, you just first need to realize where you are today in order to get unstuck!
3. Finally, the most difficult issue to identify and overcome: you may not be completing your game projects because you lack a clear vision of the game. Not only you: many, many developers, and even teams, can spend months or even years tolling away at things moving around on a screen, with no clear idea of what they’re building. And of course, most of the time, the things moving on the screen do not spontaneously converge into a compelling gameplay experience. One surprisingly common way this issue manifests is the developer working more on the engine than in the game. Engine development may be hard, but it’s clear: adding that new pixel shader with environment reflection, implementing a new hierarchical animation system, or adding support for a new platform. This all beats not knowing what to program the game characters to do, or the horrible feeling of not knowing how to decide what to do. If you are here: (a) congratulations, you are stuck at the creative part of the challenge, and (b) get ready! because this is the most gratifying challenge, but also the toughest. You need to sit back, gain perspective, and focus on visualizing the game clearly in your mind.
Most initiatives that aim to teach games development only help with the first part above. They teach the technical details, but they don’t look at the whole game-creation phenomenon, and they don’t provide you with answers to the difficult questions raised by the project size and concept. No wonder they fail to get you to complete your first game!
My plan
It took me many years to learn game development, and I often cringe when I see how people get and remain stuck without even knowing why. Time to do something: I’m going to run an article series to help you get started. Just follow along, we are going to write a small but cool game. I am going to share all the thinking, all the code, and all the steps. You will learn everything that’s necessary to take a game project from fuzzy idea to finished playable game, and you will be able to use what you have learned in the projects you take on after this.
It’s gonna be quick, too: we are going to do everything in just one week. I have chosen to do something very concentrated, because the course wouldn’t be effective if you don’t finish it, and making it just one week long makes it much more likely that you will follow through to the end. We are going to start next Monday: I will be working on the game daily, and I will write about the progress made each day. I will be including the code, graphics, videos, etc… so that no part of the process goes unexplained. If you have any doubt about it, just ask here.
By the end of the week, we will have created a small game that looks and plays great, and this will give you the knowledge and confidence to start and finish games based on your own creativity.
The details
I will start writing the game and posting daily on Monday August 26 (next Monday). The project will take until somewhere between Friday and Sunday. I might have to skip some day due to things getting in the way, but I’ll try to avoid it. There’s something sexy about doing the whole thing in seven days.
The game is going to be for OS X and Windows (hello multiplatform development from the get-go). We are going to use C, which is a first step towards learning C++ (the sensible thing to learn for a long-term game-development career). We are going to avoid using pointers though, which is the toughest part of C (hello easy-to-learn C). And finally, we are going to use OpenGL for the graphics (hello learning the basics of the 3D API that dominates the industry).
Tomorrow I will post how to set up your development environment to follow along. It’s not difficult and it’s free of charge: Visual C++ Express on Windows, Xcode on OS X. You can probably do it on Linux too, post on the comments if you have trouble setting it up there and we will probably be able to collectively find a solution.
And on Saturday or Sunday, I will post again with all the details of the game we are going to write. It’s a vertical sci-fi-themed scroller and shoot-em-up, with a twist. I’m going to use graphics openly available online to make things easy and still have some cool-looking game at the end. I didn’t want to just take and clone some classical game so that there will be some design challenges – which will hopefully result in a more instructional project.
I will be writing the game as we go. I plan to use 300 or 400 lines of simple code from previous projects, just to set up the display & sound, read input, and load resources. I’ll post it for you to use. I’m hoping the whole game won’t go beyond 2,000 lines of code, and will try to keep it short for maximum learning accessibility.
The biggest challenge for me is ironing out the gameplay details and making something reasonably fun in just one week. I could have worked on this to remove the risk before starting public development, but then the process wouldn’t be “live”, there would be fewer public mistakes to learn from, and it would be much less exciting!
So coming up next: the technical instructions, the detailed game concept, and the actual “live development” next week. Be sure to follow the blog, or if you want to be notified when new articles to help you become a games developer are ready, just fill in the form below:
Really looking forward to this!! Good luck – we’ll be watching!
This sounds great. I’ll be following along.
Josh, Scott, thanks, I look forward to it myself.
Hiya, great idea for a blog, do you have a twitter account that I can follow?
SmoMo, I’m jonbho on Twitter (http://twitter.com/jonbho). Will add a more prominent link to this on the blog, thanks!
I’m in the process of writing my first game after finishing my first year of a computer science degree, this will be a great project to follow :-). Looking forward to it!
Oh, this is gold, man! Thank you for your time/experience into this project! I’ll follow you!
As an intermediate developer with a few games under my belt I’m super excited to see what you come up with. I’ve made some small games in short periods of time before and I think it’s awesome to expose the process to newer devs.
Hell, I’m sure I’ll also learn a ton from your blog. Super excited man. Thanks
How are you going to do the whole “live development” thing ? Is it going to be all via text or are you going to do livestream ?
Anyway,this is the best idea of actually teaching people how to get started ,I can’t wait for it to begin ;).
Awesome – very inspiring to see games developers “giving back” in this way. I’ll be following for sure; always wanted to learn C in a practical way but never had the first idea where to begin!
You sir, deserve a medal.
I’m really looking forward to this project. I’m going to attempt to setup everything under linux so that this game would be cross-platform.
Thank you for giving us this opportunity.
Could you use github to record the whole process
“LIve development” will be done by me posting an article a day with the details, stages, source code, graphics, screenshots and videos. I will probably update the article multiple times a day.
Linux support will hopefully work out easily, via GLFW.
Thank you all for your kind words.
Ce, re github: great idea. Let me try to set it up.
Thanks for this tutorial. I wish you used SDL2. 🙂
“I plan to use 300 or 400 lines of simple code from previous projects”
Please be sure to explain these 400 lines.
Great idea! I’ll definitely be following along! Your first post about why game projects often lose steam perfectly described my buddy and I’s situation. Thanks for shedding light on that.
This will be an interesting devlog to follow 🙂
I can relate to some of that for sure. I actually have all the skills necessary to finish a slightly complex game, but this sentence really made me feel a slight pinch on my left kidney:
” If your motivation is rocket-high when you start the project, but dies off in 3-4 weeks, then you can only tackle games that can be done in that timeframe!”
Yes. I can make 3d models thus, in theory, I can make all 3d models my game requires. I can make music thus, in theory, I can compose and record all the game’s soundtrack. And so on… These are all delusions.
OK, so having the skills is not enough to finish a game. However, it also seems that working only when you’re motivated is a limitation that can be overcome with organization. I mean, in my real job I’m not always motivated but I do it anyway. Maybe with a good dose of organization, one could work beyond the initial motivation drive. Although that might defeat the original purpose of having fun, if you’re doing this as a hobby.
I’m a hobbyist, so I’m only working on smaller games for a while now. But it does hurt to see that big pet project abandoned.
Good to hear about GLFW. I’ll likely start following along in Linux and see how that works out.
[…] http://jonbho.net/2013/08/22/can-you-write-a-game-in-one-week/ […]