The Man Behind the Curtain
The Man Behind The Curtain



	The Man Behind The Curtain
	January 31st, 2015


I love peeking behind the scenes. I like knowing how things were made. 
I think most people do really, it's something built-in to humans.
Historically, video games don't give out the source code. And why should 
they - after all, a game is made for players. You're supposed to be 
having fun playing it, not trying to peek behind the curtain.
But for us programmers, there's a few gems out there. A small number of 
commercial games do have source code releases. I've been meaning 
for a while to do a round-up of them, so here it is.
Somewhat disappointingly, almost all of these are PC games. Finding source 
code to console or arcade games is incredibly rare, and a shame, as I 
think many programmers don't realize the different approaches to 
programming that exist on non-PC platforms.
Many of these games have improved community versions based off of these original source 
drops, which I've deliberately not linked to as I want to show the 
games as they originally were, not ported to SDL or whatever. So please 
bear in mind, if you're after a more modern upgrade, there may well be 
one out there somewhere.
Wherever possible, I've linked to the original source drops as released by 
the original developer. Where that is not possible, I've re-hosted the original 
files locally. (sometimes re-zipping for convenience, to avoid the numerous 
self-extracting EXEs that people like to use)
Many of these games are included in Fabien Sanglard's excellent series
of informative and very well-written code reviews. I've added links to the code reviews 
where appropriate. If you want to know more about how a game works (and isn't that 
why you're here, after all?), go check it out.
You'll also notice that many of the games are from the id Software/Apogee 
lineage. This is not a co-incidence. id should be congratulated for their 
open attitude to releasing their older source. The source to older commercial 
games has little commercial value any more, and often will be lost entirely. 
Surely it's better that someone can learn something from it, rather than it 
being lost to the mists of time? It is, however, a shame that so many of 
the releases are all FPSs.
!!! Disclaimer:
    This is not an exhaustive list, and further more I don't really want it 
    to be. I've deliberately only included games that I like and feel are 
    important enough to be mentioned here. So if there's some obscure commercial 
    game you like that's not listed, tough. Hey it's my blog, I'll put what 
    I want on it. Get your own blog and put it there :)
So without further ado, starting chronologically:
Colossal Cave Adventure (1976)


Developer
William Crowther 
and Don Woods
Publisher
Various.
Platform
PDP-10 and friends.

"You are in a maze of twisty little passages, all alike."
A slight cheat perhaps - it's debatable if this is technically a commercial game. It 
certainly has been sold commercially though, and it's of such historic significance 
that I'm listing it anyway.
In case you didn't know, this game is why adventure games are called "adventure" 
games - they're all named after this.
The original version was in Fortran, so it's going to be hard work for modern coders 
to pick through. Later versions were in C, so perhaps try those too.

Source code: http://rickadams.org/adventure/

Catacomb (1989)


Developer
John Carmack
Publisher
Softdisk
Platform
Apple II / DOS

Not to be confused with the later "Catacomb 3D" (see below), this game is an 
early 2D incarnation. Developed by John Carmack before id Software formed, this 
is written entirely in Turbo Pascal. While commonplace at the time, it 
fell out of favor once C started to dominate.

Source code (DOS):
http://github.com/FlatRockSoft/Catacomb

Prince Of Persia (1989)


Developer
Jordan Mechner
Publisher
Brøderbund
Platform
Apple II / DOS / many more
Code review
fabiensanglard.net

Prince Of Persia wowed gamers with its (for the time) revolutionary fluid animation, 
Hollywood-style storytelling, and exciting exploration.
Like many games of the time, this is written entirely in assembly language, 
making it hard for modern readers to figure out what's going on.
If you haven't already, please watch
Jordan Mechner's excellent GDC talk
where he details the making of this fantastic game. Go do it now.

Source code (Apple II):
http://github.com/jmechner/Prince-of-Persia-Apple-II

SimCity (1989)


Developer
Maxis
Publisher
Maxis / Brøderbund
Platform
All

SimCity basically invented a whole genre when it came out. The heart of its city simulation 
revolves around using cellular-automata-inspired algorithms, operating on the various municipal 
properties. This makes a good example of having to pop open the source code to really figure 
out the actual workings of the gameplay mechanics.
The source to the 1990 Unix port was released in 2008 as part of the OLPC project.

Source code (Unix version):
http://weblogs.asp.net/bsimser/simcity-source-code-released-to-the-wild-let-the-ports-begin

Hovertank 3D / Catacomb 3D (1991)


Developer
Id Software
Platform
DOS

This marks the first of the id Software 3D series. Both of these games use the same 
raycasting technique refined in the later Wolfenstein game, but Hovertank had yet to 
include texture mapping.

Source code:
http://github.com/FlatRockSoft/Catacomb3D
http://github.com/FlatRockSoft/Hovertank3D

Star Control II (1992)


Developer
Toys for Bob
Publisher
Accolade
Platform
DOS / 3D0

Star Control 2 is just... well.. it's just different. It dates from an 
earlier age, when games weren't expected to fit neatly into preconceived 
genres. Like so many contemporary games, it has an unmistakable "90s VGA" 
feel to it, with colors picked not because they looked nice but because 
they were in the default DPaint palette.
I recommend reading The Escapist's review
for a modern look back at it.
The source presented below is derived from the 3D0 port, because the original PC source 
was lost. Unfortunately this is an all too common occurrence, with many old 
games simply disappearing once everyone leaves the company.

Source code (3D0):
http://sourceforge.net/projects/sc2/files/UQM/0.1/

Wolfenstein 3D / Blake Stone (1992/3)


Developer
Id Software
Publisher
3D Realms
Platform
DOS

While based on the earlier Catacomb engine, Wolf3D marked a notable upgrade, featuring 
VGA graphics. But at its heart, it was just plain more fun.
Like many of id's releases, the source code is (relatively) readable 
for modern eyes, although the core parts are written in 16-bit assembly 
language (something its sequel Doom managed to stay away from).
Of particular note is the method they use for drawing vertical lines, 
where they actually dynamically generate different drawing 
functions for each possible wall height.
Fabien has a guide on getting the original source to compile
using the original development tools.
Blake Stone, an Apogee spin-off title based on the same engine, was 
released in 1993, one week before Doom. As you can imagine, it struggled 
to gain attention and faded off into obscurity afterwards.

Wolf3D source code:
http://github.com/id-Software/wolf3d
Blake Stone source code:
http://www.apogeesoftware.com/uncategorized/apogee-releases-blake-stone-source-code

Doom (1993)


Developer
Id Software
Publisher
GT Interactive
Platform
DOS
Code review
fabiensanglard.net

In many ways, Doom is the ultimate engine to study. At the time of release, 
it broke new ground in every way possible; a fully-immersive first-person world, 
not limited to a flat plane like its predecessor Wolfenstein. It had lighting, 
texture mapping, and invented DeathMatch.
But perhaps its most significant contribution is popularizing the idea 
of the "engine". Before Doom, games tended to be tied very tightly with 
their data. Doom encouraged the idea of the data-driven game - an engine 
detached from its source assets. This allowed the newly-developing mod 
community to take it in entirely new directions (see for example, 
Aliens TC or 
Fistful Of Doom).

Source code:
http://github.com/id-Software/DOOM

Descent (1994)


Developer
Parallax Software
Publisher
Interplay Productions
Platform
DOS

In the wake of 1993's Doom, many companies were rushing about trying to play 
catch-up, resulting in a wave of "Doom clones". One company, Parallax, 
managed to create something completely different.
Descent allowed the player to fly a ship through a maze of underground 
passages. Its innovative portal technology allowed it to feature full 3D, 
with rooms not limited to Doom's 2.5D (something that id Software's 
Quake would not feature until a year later).

Source code:
http://www.codersnotes.com/files/gamesrc/d1srcpc.zip

Gravity Force 2 (1994)


Developer
Jens Andersson and Jan Kronqvist
Publisher
Shareware
Platform
Amiga

Anyone of a certain age may well remember this. Amiga Power once rated it the 2nd-best game of all time.
Perhaps this isn't really a commercial game. It's debatable. It was released as 
paid shareware, and then later (due to its popularity) licensed to be given 
away free on an Amiga Power coverdisk. I'm including it as, to be honest, 
there's very few games of the era that give away any source code at all. 
So if you want to see how a 16-bit game was made, here's where you might look.
GF2 still has a homepage (see the link below). Be sure to check out 
this interview with the authors

Source code:
http://www.lysator.liu.se/~jensa/gf2/

Heretic / Hexen (1994/5)


Developer
Raven Software
Publisher
Id Software / GT Interactive
Platform
DOS

Many Doom-clones littered the market in the wake of Doom's fallout, but 
Raven's offerings are unique for two reasons: 1) for actually licensing 
the Doom engine, and 2) for actually being any good.
Notable improvements over Doom include (famously) the ability to look up 
and down, but only a little. Hexen also used a custom scripting language for 
its game events, something that was a relatively new idea at the time, 
but has since gone on to be commonplace. It also popularized 
the "hub-world" system of level progression.

Source code:
http://sourceforge.net/projects/heretic/

Rise Of The Triad: Dark War (1995)


Developer
Apogee Software
Publisher
Apogee Software / FormGen
Platform
DOS

ROTT was an odd beast. It derives from the Wolfenstein 3D engine, and it's 
interesting to see how they managed to work around the limitations of their 
flat-world Wolf3D engine to create height-ish effects.
Although Apogee tried to stick as many bells and whistles on it as 
possible, it simply couldn't compete once 1993's Doom was released. Still, 
it was a lot of fun. PC Gamer summed it up well:

It didn't ask you to aim up or down, quick save every few minutes, or 
worry about fiddling with graphics settings. It did, however, beg you 
to explode, shoot, and instagib everything.


Source code:
http://www.codersnotes.com/files/gamesrc/rottsource.zip

Marathon 2: Durandal (1995)


Developer
Bungie Software
Publisher
Bungie Software
Platform
Apple Macintosh / Windows 95

The Marathon series were famous at the time for basically being about the only 
games available on the Apple Macintosh. And to be honest, well... I think it's
fair to say they fall into the category of "Doom clone". 3 months after its 
release, id Software released the famous "qtest" build of Quake, which 
allowed players to get a teaser of what was coming.
Macs at the time were often thought to be only used by writers and artists, and 
despite Marathon's best efforts, that image largely stuck. The small company 
that made it did however go on to have moderate success on other platforms.

Source code:
http://www.codersnotes.com/files/gamesrc/marathon2_src.tar.gz

Duke Nukem 3D / Shadow Warrior (1996)


Developer
3D Realms
Publisher
GT Interactive Software
Platform
DOS
Code review
fabiensanglard.net

Out of the many Doom clones, the 3D Realms games are some of the 
few to try and take the technology in new directions.
Powered by Ken Silverman's famous Build Engine, they 
added many new features such as sloped floors, rooms-above-rooms, mirrors.
Unfortunately, while it pulls of some very impressive technical feats, the 
source code itself is... well... let's try and be nice and polite here, awful. I've 
looked at it several times and still have literally no idea what any of 
it does. Luckily Fabien's code review manages 
to shed some light on it.
For more information on the Build Engine, see the author's homepage.

Duke Nukem 3D source code:
http://www.codersnotes.com/files/gamesrc/duke3dsource.zip
Shadow Warrior source code:
http://www.codersnotes.com/files/gamesrc/Shadow_Warrior_1.2_Source_Code.zip
Build engine source code:
http://advsys.net/ken/buildsrc/default.htm

Quake 1/2/3 (1996-1999)


Developer
Id Software
Publisher
GT Interactive / Activision
Platform
DOS / Windows / others
Code review
fabiensanglard.net (Quake 1)
fabiensanglard.net (Quake 3)

I'm not going to write much about Quake. You probably already know most of it. Its 
landmark software renderer allowed a full 3D texture mapped world, with no 2.5D hacks or cheating.
Perhaps there are some less known things about its source though. As far as 
I know, this is the first commercial game to be compiled with an open-source 
compiler (DJGPP for DOS, an early gcc port).
It came with its own scripting language, "Quake C" (later 
lcc for Quake 3). This was 
created not to ease development, but specifically so that players could make 
their own custom modifications. This, along with Doom's PWAD system, helped 
to launch the mod community.
Quake 1 had a innovative surface caching mechanism to cache the shading results. 
Once 3D accelerators became common however, this fell out of fashion. I wonder 
if it's time for a revisit? id's later game "Rage" used a similar idea.
One other notable thing about Quake is that it was absolutely rock-solid. 
Both the rasterizing and collision detection never glitched or slipped, 
unlike many contemporary games for years after.

Quake source code:
http://github.com/id-Software/Quake
Quake 2 source code:
http://github.com/id-Software/Quake-2
Quake 3 source code:
http://github.com/id-Software/Quake-III-Arena

Abuse (1996)


Developer
Crack dot Com
Publisher
Electronic Arts / Origin Systems
Platform
DOS / Linux / Mac

I like Abuse. (wait, that sounds wrong).
It caused a mild stir when it came out due to several innovations. It had 
a really cool mouse+keyboard joint control scheme, which was kinda new at 
the time. It had dynamic lighting, which for a platformer was unheard of.
But that's not what I liked most. From a programmer's point of view, 
the most interesting thing in the game is the "visual Lisp" system that it contains.
The entire game is scripted in a custom Lisp-like language. So things like enemy 
behaviors are fully configurable at runtime, rather than being compiled in.
Even more interesting perhaps is the way events can be hooked up inside the 
(built-in!) map editor: you can visually drag lines from a switch to a door, 
or from a tripwire to a enemy-spawner. Including adding in AND/OR gates, all 
visually as hidden level objects. It's certainly something I've not seen in other editors.
Unfortunately, I don't think it was a great commercial success, and only 
two years later was released as open-source. The second Crack Dot Com 
game, Golgotha, was also released as open-source, including all the art assets.

Abuse source code:
http://www.codersnotes.com/files/gamesrc/abuse_pd.tgz
Golgotha source code:
http://abuse.zoy.org/wiki/download

Aliens versus Predator (1999)


Developer
Rebellion Developments
Publisher
Fox Interactive / Electronic Arts / Sierra On-Line
Platform
Windows / Mac

Honestly, I'm just hugely relieved to see a FPS listed here that isn't based off id Software's engines.
While it didn't have much in the way of technical innovation, the single-player campaign was a blast.
This remains a good example of a non-idTech engine.

Source code:
http://www.codersnotes.com/files/gamesrc/avptools.zip

Freespace 2 (1999)


Developer
Volition, Inc.
Publisher
Interplay Entertainment
Platform
Windows

Technically a descendent of the Descent franchise but not really, FreeSpace 2 is 
an entirely space-based single and multi-player flight-combat game.
FreeSpace 2 is an excellent example of how opening up the source code has 
allowed the game's lifespan to continue on for years after it otherwise would 
have died out, with various content packs and engine upgrades being released.

Source code:
http://www.codersnotes.com/files/gamesrc/fs2source.zip

The Operative: No One Lives Forever (2000)


Developer
Monolith Productions
Publisher
Fox Interactive 
/ Sierra Entertainment
/ MacPlay
Platform
Windows / Mac / PlayStation 2

The LithTech engine has a long history, although has often taken a backseat 
to the more famous Quake and Unreal engines.
I haven't poked around in the NOLF source too much, but I suspect it may 
only be the source code to the game part, and not the actual LithTech engine 
itself. Certainly, despite this game being released for the PlayStation 2, 
there's no chance to see the workings of a PlayStation 2 game in there.
I feel this is a shame - developing for the PS2 would be considered 
completely alien for many programmers nowadays, benefiting from a much 
more data-oriented approach than today's APIs allow.

Source code:
http://www.codersnotes.com/files/gamesrc/NOLFSource003.zip

MechCommander 2 (2001)


Developer
FASA Interactive
Publisher
Microsoft
Platform
Windows

The idea of Microsoft and open-source historically haven't gone together. But, 
they're starting to relax a little in their old age.
Still, it's nice to see that big companies are starting to adopt a more 
open attitude to things that otherwise have zero commercial value for 
them but immense historical value.
Last year even saw the release of the source code to early versions 
of MS-DOS
and Word,
something unthinkable 30 years ago.

Source code:
http://www.microsoft.com/downloads/details.aspx?FamilyID=6d790cde-c3e5-46be-b3a5-729581269a9c&DisplayLang=en

Doom 3 (2004)


Developer
Id Software
Publisher
Activision
Platform
Windows / Mac / Linux / Xbox / PS3
Code review
fabiensanglard.net

Doom 3 remains one of the best examples to look at if you want to 
study a modern AAA game engine.
At the time of its release, it innovated in many areas. Its method of baking 
high-res source models onto low-res game assets is now standard in 
all commercial games.
The source has many other interesting finds - its physics system alone is worth 
a look to see how it attains continuous collision detection.
This is the first of the id engines to be written in C++ instead of C. One thing 
about all the older id engines is that they had a very clear simplicity to them 
due to it. Doom 3 manages to keep that, but it does mark a notable change in 
direction. Comparing id's C++ style to other C++ engines is this list certainly 
reveals different approaches.
Doom 3 was also (in)famous for using stencil shadows for all its lighting. It's 
debatable as to whether this was an "interesting experiment" or something that 
should have been pursued further, but the fill-rate costs associated with it 
mean that almost all games nowadays tend to prefer shadow maps instead. Still, 
perhaps that will come around again one day.
Fabien Anglard's excellent code review is well worth the read, as usual.

Source code:
http://github.com/id-Software/DOOM-3
    BFG edition source code:
http://github.com/id-Software/DOOM-3-BFG

Gish (2004)


Developer
Cryptic Sea
Publisher
Chronic Logic / Stardock
Platform
Windows / Linux

Gish was notable for its unique blobby-physics gameplay (as well as its unusual time 
signatures...), so it's nice to be able to pick apart the source and find out how 
it was done. No third-party physics engines here.
Many people commented on Casey Muratori's Handmade Hero project 
recently to say how "no-one would write a real game like that". Well here's an example 
of someone doing just that with good success.
It's interesting that Gish is written entirely in C - something that doesn't happen 
much nowadays. While it's not the neatest code I've ever seen, it's a very good 
example of how a game doesn't have to be a giant sprawling codebase with hundreds 
of external dependencies.

Source code:
http://crypticsea.blogspot.com/2010/05/gish-open-source.html

Canabalt (2009)


Developer
Adam Saltsman
Publisher
Semi-Secret / Beatshapers / Kittehface
Platform
Flash / iOS / PSP / Android / Ouya

It's not the most complex game, but does it need to be? If you want to learn how 
to write a game, start with something simpler. Here it is.
Prototyped in only 5 days, and ported to iOS in 10, Canabalt shows how you 
build up a simple idea into something worthwhile. In many ways, it's a return to the 
8-bit days when new genres could be invented every week. It's a shame therefore that 
there have been so many clones of it, with people preferring to stick with someone 
else's idea rather than grow their own.
Canabalt showed how simple things could be if we let them. Learn from it, 
and use it to launch your own dreams.

Source code:
http://github.com/ericjohnson/canabalt-ios
Release notes:
blog.semisecretsoftware.com


Ones I missed
UPDATE: Thanks to the many eagle-eyed readers who, after reading this, flocked to mention some 
other games I missed out. I may do a proper update for them, but here's a brief list:

Jagged Alliance 2
Homeworld
Aquaria
Star Wars Jedi Knight: Jedi Academy / Jedi Outcast
Arx Fatalis
Penumbra Overture
Meridian 59
Commander Keen: Keen Dreams

I'll try and track down proper links for them.
Runners up
There's a few other games I should mention. These have not had a source-code 
release; instead they have been reverse engineered by fans. While this doesn't
provide the same information as the actual source code, it can still be worth a look:

Another World - http://fabiensanglard.net/anotherWorld_code_review/
    If nothing else, for the love of god please watch the excellent GDC making-of talk.
Heart of the Alien - http://hota.sourceforge.net (sequel to the above).
Strike Commander - http://fabiensanglard.net/reverse_engineering_strike_commander/index.php
Little Big Adventure -https://code.google.com/p/twin-e/

Disqualified
And lastly, the following games have had their source-code leaked 
illegally, so I won't give them any further attention:

Half Life 2
Falcon 4.0
ReVolt
Turrican III
Mr. Nutz: Hoppin' Mad
Trespasser (oh all-right, go read the code review.)




