When I first chose to make programming my career choice in life it was mainly because I spent the first half of my life playing video games. I've been playing games since I was about 4 years old. I owned many of those old Tiger handheld games with 2 shades of gray and 3 buttons, and they were amazing. And something tells me if I had a copy right now, I'd be doing that instead of writing this post.
That's probably why many younger tech-friendly kids choose this career path nowadays really. And after thousands of hours of gameplay (probably), I realized this was something that I wanted to spend at least a portion of my life doing. What no one told me was that if you want to make video games, you should probably study making video games.
If you want to make video games, you should study making video games...
For years I've jotted down game ideas that I would love to build, with the mindset that one day I'll get to do it. And believe me, they're amazing. How about a 40 hour long RPM/Action/Adventure mobile game with a deep storyline and archaic graphics? Amazing, I know. What that storyline is, I have no idea. How do I build this? Well, that's what this post is about.
Starting that journey is the hardest part
10 years of programming later and I'm still thinking of considering starting soon. Probably. But there are some problems that must be resolved first before this magical game comes to fruition. For one, I have no idea how to make a video game. I know how to program it, I think, given the logic and requirements that a game designer would give me.
If for example, I was building an RPG kind of like the original Zelda games on the Game Boy, I would start with an empty map. Which if we recall was comprised of different block regions. I'd start with a 5 x 4 grid for simplicity sake. I'd then have a pixel move around using the controller, and if the edge was reached, I'd render the next block over.
Come to think of it, that sounds like it would work. But it's that whole uncertainty thing that keeps me from continuing. That "am I doing it right?" feeling that lingers in the back of my mind.
...am I doing it right?
I've spent 10 years making websites and Windows applications and to some extent mobile applications. And that experience doesn't really transfer over well to the realm of game development.
I can make a contact page no problem. And most contact pages probably work 98% just like mine.
Games are a little different though. Maybe the following sketch is pretty close to a functional interface. Or maybe I'm way off. It's hard to say really.
No experience, maybe not a problem
Games are unlike your normal "typical" programming, and by that, I mean programming that you would do at a standard software company. You don't just fetch data from the database and display it on the screen. You have to create a platform first. And then layer on top different elements. It's as custom as you can get essentially.
For example, let's say that I wanted to build a match-x puzzle game. Aside from creating my basic splash, title and options page, and level select, I'd need a way to create levels. Or I could take a more programmatic approach and create levels dynamically, as most puzzle games do nowadays.
I'd have to set up "win" scenarios and "lose" scenarios, and in the end, most importantly see if it's "fun".
If I wanted to build a platformer, of which you can see my basic attempts right over here, I'd need to figure how long levels were, either in terms of a real-life scale equivalent, or just some random long number of pixels that I would come up with. Which is right? I'm not too sure. But it works to some extent.
If you've ever watched the documentary Indie Game which covers the life cycle of games such as Braid, Super Meat Boy and Fez, you'll notice how every single element of those games is 100% custom. The level editors are built in-house, the sprites and animations are meticulously created by these few guys and it takes years upon years to get to completion.
These guys didn't go in knowing how to make Super Meat Boy. They spent years learning how to make Super Meat Boy. So maybe the knowledge part isn't as important as the idea part.
So that's one thing I learned. Maybe I should put down the tutorials for just 5 minutes and just see what I can make with my current given skills.
So which framework is the right one
I've attempted on numerous times to attempt to learn a game engine, and each time I get about halfway through the tutorial and move on to another framework. Mainly because these IDE's are tough as nails to figure out. And I don't know if it's just me, but they never seem to work on my laptop. On average I probably spend a good 4-5 days working on getting the IDE to run the sample project. Before I jump to YouTube for a sample video. Before I give up. And they're usually super resource heavy.
Let's just take a look at a few popular ones right over here:
Those are just a few of the dozens you can find on Wikipedia, as my knowledge of the many different engines is limited. But you can see what I mean. There are many different tools you can use to make a game, and each one of those is going to require some hefty time to learn well.
But of course you always the option of building the entire thing yourself, which is for sure possible with non-3D games.
These things take some time
Just recently I read about the insane and long journey that the Steam game Brigador developers went through. The game took 5 years to make and has a very positive rating on Steam. Awesome stuff right? Hm. Well depends who you ask.
Hugh Monahan, the lead developer tells Kotaku just how this process went. And truthfully, it's pretty similar to how many startups operate. Little capital, small cramped office and years and years of work. Hugh had 12-16 hour work days and developed health issues in those 5 years.
And while Hugh doesn't go into detail as how what those 5 years were actually like, I'm sure that much of that time went into learning how to make the game. How to make fully destructible levels, and how to make the characters move just right.
Not that I ever believed that game development was easy, not at all. I've heard time and time again that it's one of the hardest fields to work in. But personally, I think it's tough to put your finger down in life and say "that's it..the next 5 years I'm going to avoid Vitamind D".
that's it...the next 5 years I'm going to avoid vitamin D
Every single video game (that's good) is completely different and custom. Whereas websites, apps and window applications essentially follow the same patterns. I can show you 100 websites, and they will all have head and body tags. But that's not true of video games. There's no "game" tag that just renders a level unfortunately. One day maybe. Note to self...
Where to next
On this blog I've done a few, more than a few, posts on JavaScript. I'm a huge fan, for a number of reasons. Mainly that you just need a text file and a keyboard and you can pretty much make anything that you can dream up with minimal resources. And nowadays, you can pretty much find the most complex applications ported over to JavaScript by people much more clever than I. First person shooter in JavaScript? You betcha.
So personally I think I'll be taking a stab at game development on the browser and see where that takes me.
So if you're interested in game development, are a programmer, and have never worked on a video game, maybe the following resources will help you out.
If you're looking to take this seriously and either work for large companies or start something huge, then maybe higher education is an option.
There are a growing number of higher education institutes beginning to focus on game development degrees. Schools like DigiPen for example specifically focus on game development, with classes such as Game Analysis, Game Mechanics, Motion Dynamics and AI For Games. Things that right now you'd have to Google and learn on your own.
If you're just a fan and want to make that cool game that you always drew out as a kid though, maybe you just need to start with that one pixel on the screen. Make it move around. Then add a background. Then make it jump. And in 5 years who knows what that pixel will be doing.
Maybe you can't really "learn" how to make video games in a sense, since every single game is completely different. If I was the designer for Pac Man for example, maybe that's not going to be enough to get me to build Sonic the Hedgehog. But if you ask me to make Pac Mac 2, then I'm the right person for the job.