Guide to Gamedev

Some helpful resources

I originally wrote this article for a newsletter in 2015, but I think there’s a lot of good and still-relevant knowledge in it that can help out anyone interested in game development, or is stuck trying to find good resources to use. Enjoy!

Game Engines/Frameworks

Using a game engine is by far the easiest way to get started, and using a game framework will make your life a lot easier if you want lower level control. An engine handles most if not all of the “background” work for you, like setting up a window in the OS, opening an OpenGL or DirectX renderer, drawing sprites or 3D models in the correct order, and so on, allowing you to focus on the game itself. They provide an editor as well, which allows you to set up the actors and objects and resources in your game with an easy-to-use GUI. A framework is simply a code library, which abstracts some of these things (like low-level OpenGL and DirectX calls) and leaves it to you to create your own editor. Here are some of the most popular (and free!) engines/frameworks at the moment:

Engines:

Unity3D:
http://unity3d.com/
Notable Games:
Ori and the Blind Forest, Rust, Slender, Fallout Shelter

A great, popular, and free (for small companies/developers) 3D/2D game engine. I use this engine frequently, and there is a myriad of tutorials online! You will program in either C# or “UnityScript” (Unity’s version of JavaScript), and your game will be able to be exported to an unheard of number of platforms (including Windows/Mac/Linux, game consoles, mobile, and web!).

Unreal Engine 4:
https://www.unrealengine.com/what-is-unreal-engine-4
Notable Games:
Street Fighter V, Fable Legends, Ark: Survival Evolved

A fantastic engine and now free (with a small royalty if you sell your game)! It’s extremely powerful, and actually pretty easy to get into. Scripting is done using a visual editor and C++ code, and its entire C++ codebase is open source as well! It doesn’t have as many export options as Unity yet, but it still covers Windows/Mac/Linux, iOS and Android, and web!

Frameworks:

MonoGame:
http://www.monogame.net/
Notable Games:
Fez, Bastion

This is a fantastic and open-source framework for C#, and it’s based on the now discontinued Microsoft XNA Framework. If you’re looking to create your own small 2D game from scratch as a learning exercise, I cannot recommend this enough.

SFML:
http://www.sfml-dev.org/

This is a great framework that’s based on SDL, and fantastic if you want to create a small project in C++.

Cocos2D:
http://cocos2d.org/

I haven’t used this myself, but it’s another popular 2D game framework similar to XNA and geared for Java developers.

LÖVE:
https://love2d.org/

Another 2D framework that I haven’t used, but it’s popular and uses the Lua scripting language.

Libraries:

SDL:
https://www.libsdl.org/

SDL is a staple in the 2D game making community. It’s a low-level C++ library, and if you accept the challenge of creating a game from scratch using this, you will be rewarded with a strong understanding of how a game engine ticks (since you’ll write it yourself!).

OpenGL/DirectX:

These two rendering libraries are about as low-level as you can get without needing to write hardware-specific code. Your project will be written in C++, you’ll probably include SDL for input and audio hooks, and you will have an intense satisfaction and a very deep understanding of everything it takes to make a game.

If you’re using a framework or low-level library to make any game more complex than Pong, you’ll realize early on that you need to figure out a way to organize and structure your own code! There wasn’t a lot written on this topic until very recently. I highly recommend Robert Nystrom’s book Game Programming Patterns, which is free to view on his website!

Free/Inexpensive Art Tools and Resources

If you’re making a game, you need a way to create the assets in the game! Or at least a place to find some free assets to use.

Tools:

GIMP:
http://www.gimp.org/

A great free, open source, image editing program. Basically an alternative to Photoshop, and I actually prefer using GIMP myself.

Blender:
http://www.blender.org/

Another free and open source program that you can use to make 3D models. It’s intimidating at first, but I created a fairly popular and easy to follow tutorial on how to use it to make models for games (http://www.zakjr.com/blog/blender-to-unity-workflow-part-1/). You can also find a lot of tutorials on Youtube and through Google.

JFXR:
http://jfxr.frozenfractal.com/#

An awesome tool that you can use to quickly make sound effects for your games. It’s great for game jams and making prototype/placeholder SFX.

MIDI Music Generator:
http://www.abundant-music.com/

Whether or not you’re musically talented, this is a great tool. I used it to make the music for my game Sail (http://www.zakjr.com/portfolio/sail.html).

Audacity:
http://audacity.sourceforge.net/

This is a great free audio editing tool. I often use it to edit sound effects created by JFXR, or to chop up music tracks that I create.

LMMS:
https://lmms.io/

I use FL Studio for making/recording/mixing music, but LMMS is a decent free alternative.

Resources:

Kenney.nl:
http://kenney.nl/assets

This awesome guy gives away a ton of great art and other assets for free! The license allows you to use the assets however you like, so you can even use them in commercial projects if you want.

Unity Asset Store:
https://www.assetstore.unity3d.com/en/

The best way to access this is through the interface in the Unity editor itself, but you can also get to it through a web browser. It has nearly everything under the sun, and a good chunk of it is free.

Blendswap:
http://www.blendswap.com/

I haven’t used this site very much, but you can find 3D models here (although you might have to edit them in Blender a bit to get them to work well with your game).

OpenGameArt:
http://opengameart.org/

A good collection of free art, mostly 2D.

Useful websites

Unity – Learn:
http://unity3d.com/learn

Unity’s official site, with useful tutorials for getting the hang of the engine. When you’re starting out, the tutorial projects are especially useful. They will take you through making a few simple games start to finish.

Gamasutra:
http://www.gamasutra.com/

Awesome website with a ton of articles ranging from higher-level design theory to low-level technical stuff. It also has lots of articles and news on the business side of game making.

Reddit:
http://reddit.com

If you’re a Redditor, there are several useful subreddits related to game development!

  • /r/gamedev: Great resource for general game development ideas and discussion. The sidebar also has some really useful links!
  • /r/Unity3D and /r/unrealengine: Useful tips, discussion, and showcases of people’s work in these engines.
  • /r/INAT: INAT stands for “I Need A Team”, and it’s a place to find people to work with. It’s for hobbyists and novices who are working together on small projects for free/fun.
  • /r/gamejams Good place to find info on game jams upcoming or currently going on.
Ludum Dare:
http://ludumdare.com/compo/

A global game jam that I and thousands of other developers regularly participate in! A “game jam” is a limited time (typically 48 hours) competition that is usually based around a theme. People of all skill levels take the challenge; many submit their first game ever and many are industry veterans! There’s no official prize for winning, but you can get attention if you do well, and the biggest thing is that you’ll end up with a small finished project and pride (which is actually a pretty big deal; it’s deceptively hard to finish projects!). The community is fantastic as well; it’s full of friendly and supportive people.

DuckDuckGo (or Google):

If you run into problems with your code and have dislocated your finger after clicking through your project for the tenth time, search engines will often bring you to a relevant StackOverflow page or an engine answers page or an API documentation wiki. Often times you’ll find someone who had the same exact issue!

Getting Started

Now that you have this list of resources, I’d recommend getting started with either UE4/Unity or one of the frameworks I mentioned, depending on whether you’re super eager to get a game done quickly or more interested in developing a deeper understanding of how games tick. It might also help to choose based on what programming languages you’re already familiar with! No matter which of these engines or frameworks you choose, you’ll find plenty of documentation and tutorials online that will help you to learn the APIs and get going. Start by making something small, like a Pong or Galaga or Tetris clone, and then go on from there! Doing game jams like Ludum Dare is a great way to build skills, blow off steam, have fun, and try crazy new things.

Making games takes a lot of effort, but it’s incredibly fun and amazingly rewarding, especially when you see someone else having fun playing your game for the first time!