Many people’s original inspiration to learn programming is their love of video games. It’s a powerful, dynamic artform and we find ourselves in a very interesting period of game development history. The creation of high-level languages and proliferation of tools oriented towards beginners means that more people are making games than ever before. This has had the knock on effect however, of an extremely saturated market for games. At time of writing the trend of ever more games being released shows no sign of stopping. Check out these statistics from Steam if you don't know what I mean.
This presents an unfortunate reality, that I feel I ought to be very straightforward about. Making a living off of making video games seems to be extremely difficult right now. Openings for big studios are extremely competitive, and the raw numbers of indie games released each year paint a bleak picture for newcomers.
So what does this mean for us, the newbie? This means it’s never been easier to make your own games, and it's also never been a harder industry to break into. This leads me to encourage you to look at game development as a way to express your creativity and learn a lot about math, logic, and graphics. Making games is a really fun hobby, and I by no means want to discourage you from enjoying game development, but I also need to warn you that it is an extremely difficult career path. Carefully consider why you want to pursue it if you choose to continue. Is it because you’re passionate about how games are made? Or is it because you like playing games? These are two very different motivations. Also, if you’re thinking you might want to test games for a living, you might be surprised to find out what that job is actually like. It's a lot more trying to break a game than playing it.
To be clear, I am not a professional game dev so take what I'm saying with a grain of salt. Also, if a career in this industry is your dream, don't let some nerd talk you out of it! Go get it!!!
With that out of the way, let's think about what has or will stop us from making our games.
Start by thinking about the kinds of games you play. Most likely, they are made by teams of hundreds of very experienced people, millions in funding, and a timeline of years to finish.
Or maybe you're more interested in indie games? Even then, these are made by dedicated people and the financial success of an indie game is not a sure thing. If nothing else, these are people who have put their financial well-being on the line for their dream.
In comparison we may be rather inexperienced, with no money to spend on the project, and while we may not have deadlines we probably can’t devote all our working hours to game dev. We probably are not the kind of people who are going to dedicate our lives to game dev at any cost. And that's okay!
For us to actually finish games we need to take a very different approach to those people, which means our games will look and play differently from the games we love, but they will be ours. We need to focus on our capabilities and resources, rather than only what we can imagine.
I've seen this over and over again in my students. They can imagine the visuals, the sound, the features, the mechanics, etc. but they can't begin to imagine how any of those things will actually get made. Especially if you are new to learning about computers, you may have the feeling that the computer is just a magic box that can make pictures and sounds and so on.
We need to undestand our skills, resources, and knowledge in order to be successful.
The computer does only one thing: math. If you don't understand what I mean by that, maybe take a detour into this topic for a bit and come back.
If you cannot imagine what kind of math you would use to model a behavior, motion, etc. in your game then you simply will not be able to create it. This is ultimately why I do not reccomend new programmers use game engines like Unity. In short, these tools are very powerful and you can trick yourself into thinking you're making progress, even though you do not understand what the engine is doing for you, or how it works. If thats you, then I'm sorry to say that you are probably going to struggle to do anything that the tool cannot do for you. We don't want to be confined to only stitching together other people's code to make our games!
So how do we make the switch to actually modeling our game ideas with math? Let me give you some examples to get your imagination going: * Your platformer character should be able to jump up and then fall back down. What math would you use to calculate the characters position? * You want to make a game like Sonic the Hedgehog, how do you calculate where on the screen the character should be as he goes through a loop-de-loop? How much does he need to rotate? * You want your player to have a flashlight, how to you figure out what things should be lit up, and which things should be in shadow?
If you can imagine what math problem each of the idea's represent, then you can make the comptuer do that math! Thats ultimately what games are!
For many of my students 'math' was a dirty word. I want to say something quickly that might change how you think about it if you feel that way too.
I was not a 'good' student. At some point the (US American) school system basically decided I was going to be unable to learn my 'times tables', and I no longer really had to pass my math classes until I got to college. My parents were upset and dissappointed in me. I felt like I must be a truly stupid person. It became a subject that was so stressful that I didn't ever want to think about it.
I failed Trigonometry the first time I took it in college because I had never really learned algebra or geometry in the first place, even though I had taken those classes.
Now, I genuinely enjoy studying math, even though I still struggle to do multiplication in my head. Let me tell you what changed my feelings.
I was lucky to get to go to college, my parents didn't get to pursue higher education. And I knew that if I screwed up the 4 years of study my father's military service had earned me then there would be no other chance for me. I was very very motivated to learn the math I needed to earn my degree but I just couldn't make it work.
However, as I started to learn programming I found myself falling in love with the subject. I'm proud to say that I did some real study while I was there, but it was because I actually started to have fun! I found out that if I understood the concept behind the math, I could write a program that would do the actual calculation for me. At that point, instead of studying on paper, I would solve my homework problems by playing with the math through via programming.
Ultimately that's no different than using a calculator, and I won't claim that I'm good at math in the typical sense, but I am able to study and use mathmatics concepts. My partner was an honors student but they say I am better at math because of my deeper study.
Maybe you asked a parent or teacher once "when will I use this in the real world?". You were right to ask that, because the way math is usually taught in schools doesn't give us the understanding we would need to meaningfully use it to do things we care about.
All this to say two things: * the way you were taught was probably not helpful to you, its not your fault. * there are other ways to learn. If you want to make games, learning math will feel good, I promise.
Once you've seen your creation come to life on the screen after tinkering with some numbers, you'll see exactly what I mean. In game development, we're doing something like applied mathematics, where if we understand the priciples we are empowered to solve problems, and we don't neccessarily need to be able to calculate each step of the process in our heads or on paper.
If I do a good job here, I hope you will actually become hungry for math knowledge because you will start to see it as something that helps you get what you want. That's why people came up with this stuff in the first place! They had problems to solve that mattered to them!
Lastly, if you feel like you're stupid, or bad at math, or a bad student, I love you. You are good enough. I'm sorry that the people who should have cared for you gave you that shame. You deserve better. Those voices will get quieter as you learn to see who you really are, rather than what they told you. Your worth as a person is not determined by your capabilities or limitations, but rather what you do with them.
If you've ever tried making video games, you'll know its really challenging just to get started. In my experience a lot of people who want to get into making games hear about engines like Unity or Godot and just go for it, and I'd guess the majority fall off after a while. I'm sure plenty of folks find success like that, but I've seen really driven people put all their energy into trying to make their first game and just kinda get stuck. That happened to me too, I'm particualarly thick headed, so I think I spent about 7ish years on an off trying to make games and feeling like I was making very very slow progress. Eventually I figured out what I was doing wrong, and now I'd say I'm very pleased with my game dev hobby. I feel like I can just kinda work on my ideas at my pace, and that I have all the fundementals I need to keep learning more.
I've had the oppourtunity to coach some younger folks on game development and I saw so many of them kind of having the same problem. So I'm guessing lots of other people have had this experience too, and I think I might be able to help. If you're willing to hear me out, stick around and I'm going to try to provide a step-by-step guide for how to make your game, and walk you through the whole thing, I think it would also be good to show the entire process of making a game from beginning to end, so stick around for that.
I think it was Mark Criley, who makes comics and does tonnes of videos talking about how to do that, I think he said "permit yourself a period of time to be an apprentice to a master", or something like that. It's stuck with me, because I think you have to have a sense of ambition or maybe just a really strong passion to learn an artform and that passion usually likes to focus on stories and beauty and what makes great art great. But its really useful, at least is has been for me, to approach something new with the feeling of 'Okay, I'm a beginner, I don't actually know anything yet, let me try to keep a really open mind." So I would encourage you to try to hold that feeling of "I don't know what will happen" and be willing to just kinda play around without being in a hurry to do something in particular.
Okay, so lets talk next about what causes us to get stuck in trying game dev. In no particular order: * Taking on too big of a concept * Trying to learn too many things at once * Missing fundemental programming and math skills (Don't panic!) * Missing study skills
Soooo, that sucks, but I really enjoy talking about this stuff, and I want to try to help. So let's see if we can figure this out.
First let's talk about trying to learn too many things at once. If you are trying to make a game, and you're learning how to do 3D modeling in Blender, learning to make music in FL Studio, Making the Game itself in Unity, but also you're still new to programming, and your math skills are not super sharp, like... What are we doing, that is SOOOO much. That is a recipie for failure, because each of those programs has a learning curve of its own, and if we don't even have things like programming figured out first it is going to be basically impossible. If you are doing this, please try a different approach. The short version of the fix here is that you should probably be using something like Pico8, where all your tools are in one place and they're easier to learn.
This leads us into the next problem, on top of trying to learn too many things we're also usually trying to take on a really complex idea, and it can cause us to feel like we're failing even when we've accomplished a lot. Early in my game dev journey, I tried making a 'marble madenss' kind of game in Unity, and I was able to make a ball that rolled around and would go up a halfpipe, or through tubes. At the time, just getting that working was a huge step for me, and I should have felt really accomplished, but instead I had all of these ideas about like, different power ups the ball would be able to have, and so instead of being proud of myself I felt really disspointed in myself that I had only gotten past the first hurdle with all that effort and then gave up. That sucks! Don't do that to yourself! Taking on a big challenge is a great way to grow your skills, but we need to have a sense of perspective, and maybe a bit a planning can give us a realistic road map and also help us keep us focused on learning one thing at a time.
If you we're ever in the US public school system, you probably can relate to the feeling that Math is annoying, hard, maybe you're not even sure how it ties into making games. I want you to know that I was garbage at math as a kid, and I still am probably the slowest adult person I know when it comes to mental math. I actually like studying math now, because it lets me make cool stuff. But also, I have a sercret for you...the funny little box does all the math for you! As long as we understand the math concepts we just have to know how to tell the computer to actually crunch the numbers for us. So, even if you feel like you're bad at math, this will very doable for you, I promise.
But we need to study math, because it is really all the computer can actually do, so whatever we want our game to do, we have to find a way to turn that into math. Game engines like Unity are powerful precsiely because they hide a lot of that math, so you can focus on other stuff. That's really helpful, but if you don't undestand what its doing for you, its really hard to fix things when they go wrong, or even to make it do something different. So its worth it to learn some of this stuff yourself. Also its actually really fun to play with math once you know how.
On that topic, another thing you were probably never taught in school was how to study, or maybe if you were the method you taught didn't work for you for some reason. Its a worthwhile skill though, I've found some things that work for me, so I'll plan to share those. There is so much to learn when it comes to making games, and being able to study effectively means wasting less time on learning a new topic, which means faster progress with your project.
I think that will be all for now. Next, I'll go into some detail about how to solve each of these problems so we can actually make some progress on our games.