I am proud to announce Handmade Quake, a series dedicated to the art and engineering of 3D video game programming.
Handmade Quake will be a series of videos and blogs where I rebuild the original Quake from scratch, line by line, system by system. It is named Handmade Quake thanks to the inspiration of the Handmade Dev community, and following the spirit of their manifesto, we will be starting with a blank Visual Studio project, nothing pre-written at all, and file by file, will turn it into the source code that id Software released to the world in late 1999.
The main goal for this project is to show you how full video games are actually built. As I was working towards my master’s degree in video game technology, I was surprised at the lack of high-quality materials, either in book form or online. Books tended to be light on info, usually teaching a language at the same time as discussing games, so they weren’t able to go into detail in either topic. Others talk exclusively about game development, but either provide no source code or basic demos that just don’t get into much depth at all, and are not intended to be played as games themselves. Basically – I want to learn about games, so show me a game!
Quake is a landmark in video game history. It practically defined the first person shooter genre on its own. It made a fully 3D real-time world possible on a 486 processor almost 20 years ago. It was cool, it was exciting, it was scary (depending on who you talk to). id Software then went on to license the engine to other companies – one of which, Valve, used it to make Half-Life, Half-Life 2, and then the Source engine. So it’s quite likely you’re playing games today that are direct descendents of Quake. There may even be some original lines of code still in there!
As a AAA title, Quake needed to solve a ton of problems. Software rendering, raw audio, memory management, networking, file I/O, input, map loading, and then running the entire simulation while you’re playing – these are all difficult challenges that are rarely addressed in detail. I want to provide you with a framework for looking at it through this classic gaming lens.
So, how will Handmade Quake work? The aim of this series is to be modular rather than linear. I say this because it’s quite possible this could stretch into hundreds of videos before it’s all said and done. If you’re curious about a system discussed in video #100, it seems unreasonable to tell you that the only way to truly understand it is to go through videos #1-99. That’s not a realistic request. It probably won’t be 100% possible to follow this exactly, but here is my three step plan for each system.
Step 1 will be the theoretical foundation for each system. We will discuss the problem that Quake faced, the part it needed to do its job, and about how that problem would be solved in a general sense. We will then “plan out” an API to solve this problem for us. I use quotes because we’re not actually creating anything, we’re using the solution Quake provides. But by looking at the problem, we can understand why they went the way they did, and how their solution is good – and to be frank, sometimes their solutions are messy too, and that’s a conversation we can have too.
Step 2 is implementation of the API we designed. To assist in keeping the videos modular, and to make them a more educational process, we will not put the implementation directly into Quake. Instead, we will implement it in its own project, so we can see it running on its own. This will make it even easier to examine the system on its own, and to be even more objective about what’s good and bad about it. This is where things may be tricky – I can’t very well render a scene without a window, as an example – but it will be much more beneficial still.
Step 3 is integration into Quake itself. We plug it into the source code, we attach it to the existing code, and we see it running in the main game. We admire the handiwork that has gone into everything – and then we move on to the next system.
The end goal should be a series that is relatively easy for you to skip around in. We’ll end up with dozens of systems, certainly, but they’ll be separate systems that you can hold onto as inspiration for your own projects down the road.
If you’re looking for some action steps on how to prepare for the series, let me give you a few.
First, subscribe to my YouTube channel so that you don’t miss anything. I’m aiming at a couple videos a week, but I don’t have a set schedule just yet. This way you’ll keep up to speed on where we are in the process. I’ve just put up a shorter preview series showing how to build the Quake source code once you download it from id’s Github account. This is not a necessary step for the main series – we’re starting from scratch, remember – but it’s pretty cool to know how to build the game yourself. Here’s the playlist for that series: Building Quake from source code.
Second, sign up to my email list. This will give you direct access to me. If many people are having similar problems, I’ll address those problems through here. If you have a question, you’ll have my email address. Email me – I promise to read every email I get, and unless I’m getting hundreds of emails a day, I’ll do my best to respond as well. The signup is on the left side of the screen, and here it is as well:
The series will likely be starting right around the beginning of 2016. With that being the 20 year anniversary of the release of Quake, and a busy Christmas ahead of me, that seems like a great time to get going. So sign up on YouTube and by email, and get ready. This is going to be the year that we all get serious about our engine programming skills!
Great idea! Looking forward to it!
This is just an awesome idea. I subscribed to the chan. The mailing list form didn’t work for me though, might wanna fix that first 🙂
Sounds cool!
What level of programming knowledge/experience is recommended for someone to be able to follow along?
This looks very interesting. I would love to learn how to make a video game from scratch.
So excited for this, thanks for doing it!
Becoming a quake dev… My inner youth just died of happiness.
As a side note for anyone interested in taking Quake apart and analyzing its pieces I recommend reading “Ramblings In Realtime” by Michael Abrash where You can find fine graphics optimization details.
http://www.bluesnews.com/abrash/
Great resource, thanks!
It would be nice to write it on top of SDL2 to make it easier to port to other systems. +1 for Linux support.
Really looking forward to this! Been thinking about it since I first read the C64 manual 25 years ago or so. However, always got caught up in other areas of software development. Maybe caused by lack of determination, or simply lack of intelligence, who knows :). In any case – will follow this series with great interest. Merry Christmas and thank you in advance!
Very much looking forward to it! Thanks.
Good luck you glorious bastard. I very well think this means that you are just building an engine, not really all the assets in the game, which would be another 2-5 years of your time 😉
This is awesome! I’ve always wanted to thoroughly analyze one of ID’s open source engines. Thanks for doing this.
Looking forward to this series.
Awesome… have been looking for a series like this for quite awhile. Really appreciate what you are doing!
You’re awesome for making this, can’t wait!
Thanks for the service.