by Jay
- 11 minute read - 2138 wordsThe header image for this post was created by Unsplash user Caspar Rubin, the original version is available here
A Quick Note
Before we start, I just wanted to say that this won’t be an “ultimate guide to being a rock star games developer” type of article. There are hundreds of those articles out there.
in fact, here’s a relevant google search
Because of that, I’m just going to go over some of the things you might need to know about, that way you don’t has as many unknown unknowns.
It’s going to be a shallow look at the stuff you’ll need to know, so it won’t go into things like implementations of path finding algorithms or the “best” programming language to use.
the quotation marks are intentional
It’s going to be text heavy and slightly opinionated. Some of the facts might not be 100% correct (especially related to what certain companies expect), but I’ve done some research to validate the information I put across.
This post will be all about the knowledge that you’ll need to work on a team of developers. It’s not about the tools that you can download to make games more rapidly, without much programming knowledge.
tools like the hugely successful RPG Maker
Both Squidgey and I will be collaborating on a post about them in the near future.
Anyway, let’s begin.
A Little History
There are a lot more independent games developers and studios these days, more so than the AAA companies.
anyone can be an indie developer
Up until the early 2000s there weren’t as many indie development companies because it was harder to get a game released on most of the major consoles.
Most game releases were overseen by one of the massive game publishers. They who would finagle a deal between one of the big three (Sony, Sega, and Nintendo) to get your game released, and most of the time the big three wouldn’t talk to individual development companies.
This was all down to licensing the game to run on the consoles.
Back in the late 70s and early 80s, anyone could publish a game for the home consoles of the time
assuming that they had the ability to manufacture the cartridges, that is
Because of this, and a number of other factors, this lead to the video games crash of 1983.
take some time to read about it at Wikipedia
As a direct result of the video game crash, Nintendo decided to lock their new console (the NES) down to approved, licensed titles. This mean that a developer had to strike up a deal directly with Nintendo in order to release a game. You would send your code to Nintendo and they would approve or deny it, based on a long list of standards.
which is almost exactly what Apple do with apps on the iOS app store
An game which passed these standards would be given the “Nintendo Seal of Approval” and released to market.
In the early 2000s, this changed. The console manufacturers starting having a bidding war (of sorts) to see how many exclusive independent games they could have on their consoles, and Microsoft created XNA to make this happen.
Nintendo and Sony followed suit by offering their tools and development kits to smaller development houses. Then the boffins created tools which allowed developers to write the code for their game once and have it build for all of the consoles.
Add to that, that anyone can release a game for Windows, Linux and Mac without a publisher being involved
although that’s harder to do
So how do you get into this industry?
Looking Back
If anyone would have asked me, when I was kid, what I wanted to be when I was older I’d have said
Jay:I want to be a Teenage Mutant Ninja Turtle
By the time I was a pre-teen, I realised that wasn’t possible
no matter how much pizza I ate
and decided that I wanted to learn all about video games development.
A quick caveat here: Games development and games design are two different fields.
Games development is all about writing the code for the game; making the actual software that the player interacts with when playing the game.
Games design is related to the overall design of the game, and how it can be played, and how it fits within the story of the writer(s).
You could also be a designer for a games development company and work on things like the look and feel of the characters, background or concept art.
I’ve intentionally left a lot of detail out of the designer role because, we’ll I don’t know much about design, and the edges of one can blur into the edges of the other.
So off I went to college and university
for non-British readers, college and university are two separate things in the UK
to learn all I could about games development.
Several years of study later, I had a degree in Computer Science with Games Development. But do you need a degree to be a games developer?
Well, Do You Need a Degree?
The short answer is: it depends.
If you want to work as a developer for a big, famous development company like EA, Bethesda or Infinity Ward
big companies like this are often called AAA (or Triple A) development companies
then you’ll, most definitely, need some sort of Computer Science or Physics degree. It might not have to be a specialist one, but you’ll definitely need some kind of CompSci of Physics degree.
Why Those Subjects?
Each company will have different hiring requirements, but most will want one of these subjects because they have the biggest overlap with the kind of work you’ll be doing on a daily basis:
- Writing code
- Maths
I’ve pluralised it, deal with it 😛
The code which runs most modern games is all heavily related to Maths and Physics. Can you imagine playing Portal or a WWW 2k18 without a good physics engine? It would be fun for a while, but would quickly get annoying.
there is a whole subreddit devoted to pointing out when physics in games goes wrong
What About The Indies or Smaller Companies?
The indies tend to also want folks with degrees, but they seem to be more willing to take a chance on someone without a traditional Computer Science of Physics background.
again, each company is different
Folks who have developed games in their own time by self educating
reading about how to develop games in their spare time, for instance
tend to do a little better with indies and smaller companies.
That’s not to say that you can’t get a job at a AAA company without a CompSci or Physics background, but it’ll be a little harder and you’ll have to show that you really know your stuff.
What Stuff?
Short answer:
what’s with the short answers?
- Maths
- Physics
- Algorithms
Algorithms
An algorithm is a step-by-step list of the actions needed to perform some action. The classical algorithms have been worked on for tens (and in some instances) thousands of years by hundreds (if not thousands) of mathematicians, and are proven ways of doing something in the most optimised way. So it’s worth knowing and handful of them (at the very least), for sure.
You’ll need to learn algorithms to show that you know of the many different ways to solve common programming problems.
Should you use A* or Djikstra to solve this path finding issue?
psst… A* is to Djikstra what C++ is to C
Should I use Beam Tracing or Cone Tracing to render this scene?
Wha are the tradeoffs of using one compression algorithm over another?
Physics
- How does a fulcrum work?
- How do I animate a pendulum so that it looks realistic?
- What forces act on a pool ball as it makes its way across the table? Does flattening the felt of the table affect that? What if the table was covered in shag carpeting?
- How heavy is a M-4 semi automatic rifle and how fast do the rounds fired from it travel?
You need to have the fundamentals of physics down, so that you can quickly turn to the formulae and work out the answers to these questions.
Maths
Both algorithms and physics use maths to explain how they work. You’ll also need to know about linear algebra (at the very least) to be able to reason your way around computer graphics.
Pixels on a screen can be thought of as a 2D graph, and we commonly use vectors to move things around on that graph. Collision detection is al about detecting which things will collide
"does what it says on the tin"
within a 2D or 3D space, and we usually use vectors to figure that out, too.
To make things more confusing, we usually generate an image in 3D on the graphics hardware the transpose this to 2D before sending the image to the screen
because our screens are 2D. We can display images with the illusion of 3D, but they’re still 2D images
So How Do I Learn All this Stuff?
Learning this stuff isn’t easy.
Learning anything new isn’t easy.
You could sign up for a class; you could buy a bunch of books; you could get a course on pluralsight/udemy.
You could do any of those, and you should look at each of those options. Different people learn in different ways.
Or you could start by building something. Start small and work your way up.
Don’t know how to program? This is a huge topic, and deserving of a whole other post, but: look at which languages there are
there are literally hundreds
and which ones are recommended for beginners.
I started in C, then did C++ and Assembler, then moved to C# and JavaScript. In human language terms, that’s like starting with Received Pronunciation, moving to Latin, then to modern, urban English.
there are developers out there who will be screaming at me for this metaphor. But, like all metaphors, it’s just right enough to give the general idea.
Perl, Python, Ruby, JavaScript, C#, Swift, these are all different languages which can be easy to pick up.
I’m not saying these are the
Pick one and build something with it - even if it’s just “Hello, World!”. once you have your head around that, start looking into things like the game loop and build up from there.
What About Resources?
There are hundreds of thousands of books, videos, classes and other stuff that you can take to learn all of this stuff. Here’s what I’ve recommended to other folks who have asked me, in the past:
For the physics stuff, I’d recommend taking a look at Game Physics Engine Development by Ian Millington. It’s written with C++ in mind, but most languages are based on C++,
which is based on C
so the code can be reproduced in almost any C-based language with very little effort. I used this book as part of my degree to get my head around how physics engines work.
For algorithms, I’d recommend starting with The Impostor’s Handbook by Rob Conroy.
I’ve written
on my personal blog
about why I think this book is so ace, quite recently, and I still stand by what I’ve said about it. It’s a great starting point, but you’ll still need to learn more algorithms for games development. For more algorithms (and more games dev topics), I would take a look at:
The Dev Blogs subreddit is a great place to learn about the business of going from an idea to publicising a finished product; but the quality can be a little hit and miss, and you need to digging through everything which was posted there in order to find something useful.
Gamasutra should be a place that you go to on a regular basis. They have all sorts of articles from developers, designers, artists and producers.
My favourite blog post/nugget of games dev knowledge wasn’t on either of those is Dave Bagget “How did game developers pack entire games into so little memory twenty five years ago?”
On top of that, take a look at Handmade Hero, which is a YouTube/Twitch project started by Casey Muratori. Casey is writing a cross platform video game, from scratch, in C++. In each video, Casey goes through every single line of code that he’s writing and how it will effect the greater code base. It’s a fascinating thing to watch.
Do you want to be a games developer? Does this article answer some of the questions that you had? Would you like more articles like this?
Are you a games developer? Which resources would you recommend to folks who are looking to enter into the industry?