
Id Software - bane
https://github.com/id-Software
======
paradigmshiv
In case anyone doubts how revolutionary some of these games were, check out
these fan letters from the Wolfenstein source:

 _As a former POW (Vietnam), I hesitated to play WOLF for over a month after
downloading as I feared flashbacks. I didn 't want to remember all that I had
been through all those years ago, when, as POW's, my friend and I decided an
escape attempt would be better than a slow death by torture and starvation.

My friend and I made crude maps and hoarded food. The day of the escape we
clubbed the guard with stones, took his gun and fought our way through two
levels of underground tunnels (only a few guards and had to crawl). I made it,
my friend didn't.

Dreams...NO! NIGHTMARES...YES!! However, the more I play WOLF the less
frequently I have nightmares. The chilling part is turning a corner and seeing
a guard with his gun drawn.

WOLF is a powerful game. Fearful as well. I believe that a person should face
the past. So... when I can play EPISODE 1 comfortably (no nightmares), I plan
on ordering the full series._

There's also a letter from a Microsoft manager requesting a multiplayer
version.

[https://github.com/id-
Software/wolf3d/blob/master/WOLFSRC/GO...](https://github.com/id-
Software/wolf3d/blob/master/WOLFSRC/GOODSTUF.TXT)

~~~
kinleyd
As you say, that is an extremely moving letter. I would never have associated
Doom with therapy - thanks for sharing. (I am a big fan of John Carmack and
the id team.)

------
kar1181
We owe a lot to John Carmack in many ways - but I hope one of his enduring
legacies will be the amount of programmers he inspired with both the games he
helped make, and the code he made available. It helped many of us to get
started somewhere.

I never ended up going into games myself, but in no small part I owe my career
to him.

As well as the Doom book, his plan files are a fascinating time capsule to go
back over, particularly if you 'came of age' during that golden age of PC
games development.

[https://github.com/ESWAT/john-carmack-plan-
archive](https://github.com/ESWAT/john-carmack-plan-archive)

~~~
DEADBEEFC0FFEE
Curious that you think it was a golden age.

~~~
barrkel
It was a golden age for the first person immersive simulation game.
Wolfenstein 3D, Doom, Quake, Thief, System Shock II, Half-Life, Deus Ex -
there was a period of classics with large improvements and innovation from one
game to the next, where game design space was explored just as the technology
to render it became available.

First person immersive sims are generally best played on the PC. When consoles
that were able to do decent graphics for a reasonable period (i.e. the pace of
hardware evolution slowed) came into their own, third person control worked
better with joypads, and for commercial reasons, PC games often ended up as a
second-rate ports of console games, with compromised controls. You really need
a mouse for first person.

~~~
dfxm12
_first person immersive simulation game_

FPS stands for First Person _Shooter_. The games you're listing don't simulate
much, even if some of those games have RPG elements.

~~~
barrkel
I know what FPS stands for, but Thief most definitely isn't a shooter, and
System Shock II is less of a shooter than a creepy exploration game. Deus Ex
is half an RPG.

FPS is too reductive. I'm using the phrase immersive sim in the same way as
these articles:

[https://www.rockpapershotgun.com/2010/06/29/dark-futures-
par...](https://www.rockpapershotgun.com/2010/06/29/dark-futures-part-1-randy-
smith/)

[https://www.pcgamer.com/history-of-the-best-immersive-
sims/](https://www.pcgamer.com/history-of-the-best-immersive-sims/)

See also Wikipedia -
[https://en.wikipedia.org/wiki/Immersive_sim](https://en.wikipedia.org/wiki/Immersive_sim)

HTH

~~~
dfxm12
No, it doesn't really help explain how Doom, Wolfenstein, or Quake, etc., are
lumped in together with games like Thief as simulations. FPS is certainly not
reductive. A game can be more than one genre, but sometimes an FPS is just an
FPS, and more than half the games you listed are pretty much just an FPS.

------
CaliforniaKarl
For some of the history of that time, I suggest checking out "Masters of Doom
: how two guys created an empire and transformed pop culture", by David
Kushner. The book is 15 years old (!!!) at this point, but I think it's still
a compelling read.

~~~
westoncb
I can second that—it's an excellent book. It put a clear image in my mind of
the sort of environment I'd like to develop software in: primarily just a
group of friends who have a shared idea of something cool they want to build
together. I've been disillusioned that that will happen at a Silicon Valley
type startup (not that it's impossible—but far more likely that the founders
will segregate themselves from employees in such a way that everyone involved
can't feel the same passion, commitment, interest, etc.—or even just the
knowledge that they're going through the same struggle at the same time. Also
the big stakes and investor pressure etc. are almost certainly gonna drain the
fun.), but I'm still hopeful I can find or create similar circumstances
elsewhere.

~~~
nsp
I have trouble believing the nyc startup scene is more egalitarian, but I’m on
my 4th startup as an early employee (#1-18ish) and the founders have always
been in the trenches. Not to invalidate your experience, just to emphasize the
role of luck in all of this.

~~~
westoncb
I've been at two startups, one in Boston and one in San Francisco. At the
Boston startup, all the founders but one were very much 'in the trenches'; the
one who wasn't was a professor splitting her time elsewhere, so it made sense.
That company was ~20 people when I joined. At the SF startup, the founder
was... (to avoid saying too much) alienating, though the whole company was
only four people for much of the time, and never more than eight or so.

In any case, the main thing I want to say is that it doesn't really matter
whether they are 'in the trenches.' You are in different realms of existence
if you own the company vs. work for it. As a founder, it's your personal
creation; as an employee, you may care about the product, but the primary
thing is your paycheck (most startup employees I've spoken with are much more
mercenary with this than myself, too). You know that if it succeeds, the
founder will become rich and famous and enter a social stratum that the
employees will still only be able to fantasize about. No one will know their
name or grant them ridiculous amounts of respect etc.

Even if none of that comes to fruition, the fact that your potential courses
(as they relate to the company) are so divided creates immediate present-term
social distance. And you lose the sense of shared struggle—or it's at least on
a much lower level.

If you're all equal owners, the feeling of going to work on your shared thing
must be very different, I imagine. I think it's probably also necessary to not
take investment (or somehow do it in a very low pressure way), in order to
have fun like the Id guys.

------
ddtaylor
Here is the famed "Fast Inverse Square Root" trick:

[https://github.com/id-Software/Quake-III-
Arena/blob/dbe4ddb1...](https://github.com/id-Software/Quake-III-
Arena/blob/dbe4ddb10315479fc00086f08e25d968b4b43c49/code/game/q_math.c#L561)

[https://en.wikipedia.org/wiki/Fast_inverse_square_root](https://en.wikipedia.org/wiki/Fast_inverse_square_root)

~~~
kchr
Thanks for lifting this up!

~~~
philbarr
My favourite part of the wiki page is:

    
    
      i  = 0x5f3759df - ( i >> 1 );  // what the fuck?

~~~
ddtaylor
I like how they rewrite the code in different ways (type punning) and keep the
"what the fuck?" comment intact.

------
westoncb
If you'd like to try out Doom now, there is an OpenGL port called Doomsday[0]
which is very complete and loyal to the original, while smoothing
out/modernizing things enough to make it genuinely fun for modern players. For
instance, you can look in all directions with 'mouse look' and jump and run
faster while pressing shift, and there are dynamic spot lights attached to
certain things (e.g. fireballs), even though the original sprites are still
the primary visual. It also supports Hexen and Heretic and adds a more modern
multiplayer interface. (Also allows swapping alternate game assets, so some
people have done mods with 3d models.)

Gameplay video:
[https://www.youtube.com/watch?v=V2Ddl4CM4ao](https://www.youtube.com/watch?v=V2Ddl4CM4ao)

[0] [http://dengine.net/](http://dengine.net/)

~~~
SmellyGeekBoy
As someone who grew up playing Doom I have to admit that video makes me uneasy
- almost like an "uncanny valley" effect. Although I can see why it might be
easier on the eyes for modern gamers and if it introduces more people to the
game then that can only be a good thing.

For those looking for a more period correct experience there's Chocolate Doom:
[https://www.chocolate-
doom.org/wiki/index.php/Chocolate_Doom](https://www.chocolate-
doom.org/wiki/index.php/Chocolate_Doom)

Though I have to admit I generally just fire up my 486 to play. I've already
had one complete playthrough of Ultimate Doom and Doom 2 this year and I'm
sure it won't be the last. :)

~~~
westoncb
Actually I get that now too when I skip through quickly. For me it's because
he mostly uses 3d character models during the video—although that's not the
default setup. I mostly just watched the beginning earlier and didn't realize
how much was using the 3d character set.

------
deckarep
I burned many hours on the original Doom, in my bedroom as a young teenager
with headphones on in the dark.

Remember the No Clipping cheat code?

Here’s the source code check to turn it on:

[https://github.com/id-
Software/DOOM/blob/77735c3ff0772609e9c...](https://github.com/id-
Software/DOOM/blob/77735c3ff0772609e9c8d29e3ce2ab42ff54d20b/linuxdoom-1.10/st_stuff.c#L429)

~~~
danieldk
Another fun (90ies) fact: the noclip cheat code (idspispopd) stands for
_Smashing Pumpkins Into Small Piles Of Putrid Debris_.

The Smashing Pumpkins paid tribute by using a Doom sample on their Melon
Collie and the Infinite Sadness album.

[http://doom.wikia.com/wiki/SPISPOPD](http://doom.wikia.com/wiki/SPISPOPD)

~~~
glenneroo
And apparently the comment includes a small typo:

// Smashing Pumpkins Into Samml Piles Of Putried Debris.

I kept wondering what "samml" meant... in German "sammeln" means to gather and
"semmel" in Austrian slang is a local kind of roll or bun.

------
vertexFarm
Id's move back in the day to open their software enough to allow a modding
community was an early stroke of genius. I still play quake mods from time to
time. It's amazing how much longevity they got out of those games, let alone
the engines.

Modding quake was one of my first great bursts of curiosity and creativity. I
really remember those days fondly.

~~~
SmellyGeekBoy
As an example, Half-Life and Counterstrike started life as Quake mods!

~~~
LambdaComplex
> Half-Life

I think you mean Team Fortress? Although Half-Life does use a modified Quake
engine, it was a commercial game that used none of the assets of Quake, so I
don't think calling it a "mod" is really appropriate.

(Side note: my username is a Half-Life reference)

------
jameskegel
This is a gift, just to have. Thanks for posting it. I have very fond memories
of playing Wolf3d years ago on DOS. It will be fun to read through the source
of the classics.

~~~
ovao
If you're looking for a high-level overview of some of id's source code
releases, check out Fabien Sanglard's guides[0]. He's also written a book that
goes into greater detail about the Wolf 3D engine.

[0]: [http://fabiensanglard.net](http://fabiensanglard.net)

~~~
megaman22
His Wolf3D book is gorgeous (full-color, lots of great screenshots and
illustrations). Well worth the price. Plus a lot of great info about the
vagaries of sound, graphics, and memory architectures on the machines of the
era.

------
ksec
There used to be sort of an Engine War in the late 90s and early 00s, Id tech,
Source Engine, Unreal. Now ID is basically gone. And it is interesting both
Valve and EPIC manage to create a platform, valve created Steam, and EPIC made
Unreal almost like de facto standard. ( Yes I know there is Unity ).

I wonder why ID didn't continue to compete with Unreal in the middleware
engine. Why Valve decide to leave what was at the time possibly the best game
engine. How Unreal went from some mediocre engine to an insanely great engine
and still improving rapidly.

Doom ( Or John Carmack ) used to be the sole cheer leader for OpenGL. I still
loved 3Dfx, Voodoo and Glide though. The API was small and fast, in an era
when Direct3D was .... really not very good. And Interesting times, Intel is
now coming back to GPU market again after i740, it was the first Graphics card
to use AGP Slot. May be instead of GPGPU which we should go back to graphics
with AGP; Advance Graphics Processor.

~~~
badsectoracula
> I wonder why ID didn't continue to compete with Unreal in the middleware
> engine.

IIRC from one of his later talks, Carmack wasn't interested in tech licensing
and it was mostly the other owners pushing the idea. I remember even before
Doom 3 was released and the Quake 3 engine was in its apex in terms of
licensing (basically the most licensed of their engines by far), their
licensing page wrote that all the support you'd get was a day with Carmack to
explain some bits.

> How Unreal went from some mediocre engine

Unreal was never a mediocre engine, even from its first release it had amazing
tools and a very flexible architecture. I'd say that even if the rendering
tech wasn't sometimes behind id (i always noticed that id would come up with a
neat new idea and the next UE would polish it up - the only time this didn't
happen was with Rage and UE4), their toolset and architecture is what made
other devs go after them and their stance to support (you'd get constant
updates and documentation and i think at some point they set up an internal
"community site" for people licensing their engine) was the icing on the cake.

------
sliken
I don't see anything new, last commit was 2012. maybe add "(2012) to the
title?

~~~
scruffyherder
It's the Zenimax buyout and John Carmack stepping down & out. It's the end of
the iD era.

~~~
exikyut
:O

:(

------
scruffyherder
DooM is not only fun, but it's great fun to play around with from the inside,
or even to port. I've helped bring Doom to the x68000, which was quite the
mission as the only compiler we had that could build 'large' executables was
GCC 1.39 which had been translated into Japanese.

But it's been fun doing ports to OS/2, DJGPP v1, Watcom C, and of course
various other Unix via the X11 code. The GPL'd code was 'cleaned up' and kind
of bugged up on the way, sadly what was released really wasnt' all that pure.

For anyone wanting something more 'pure' for MS-DOS I'd highly suggest:
Mara'akate's DooM-New

[https://bitbucket.org/maraakate/doomnew-for-
dos](https://bitbucket.org/maraakate/doomnew-for-dos)

And then there is Quake, which I compiled with the excellent MS-DOS based
TCP/IP stack WATTCP so that I could bring native TCP/IP networking to Quake.

[https://virtuallyfun.com/wordpress/2011/01/05/quake1-with-
wa...](https://virtuallyfun.com/wordpress/2011/01/05/quake1-with-wattcp-built-
with-djgpp-on-dosbox/)

And on the heels of that, I did a QuakeWorld client for MS-DOS

[https://virtuallyfun.com/wordpress/2011/01/06/quakeworld-
cli...](https://virtuallyfun.com/wordpress/2011/01/06/quakeworld-client-for-
ms-dos/)

which kind of took a life on it's own here:

[http://dk.toastednet.org/QDOS/index.html](http://dk.toastednet.org/QDOS/index.html)

And of course with the source to Quake 2 available, it only seemed proper to
port it to MS-DOS.

[https://virtuallyfun.com/wordpress/2015/06/02/porting-
quake-...](https://virtuallyfun.com/wordpress/2015/06/02/porting-quake-ii-to-
ms-dos-pt1/)

[https://virtuallyfun.com/2015/06/03/porting-quake-ii-to-
ms-d...](https://virtuallyfun.com/2015/06/03/porting-quake-ii-to-ms-dos-pt2/)

[https://virtuallyfun.com/2015/06/07/porting-quake-ii-to-
ms-d...](https://virtuallyfun.com/2015/06/07/porting-quake-ii-to-ms-dos-pt3/)

[https://virtuallyfun.com/2015/06/26/porting-quake-ii-to-
ms-d...](https://virtuallyfun.com/2015/06/26/porting-quake-ii-to-ms-dos-pt4/)

[https://virtuallyfun.com/2015/09/17/porting-quake-ii-to-
ms-d...](https://virtuallyfun.com/2015/09/17/porting-quake-ii-to-ms-dos-
pt5-3dfx-gamespy-quake-2-and-the-universe/)

So yes, there is GREAT fun to be had in the iD source.

Also don't forget some of their earlier games:

[https://github.com/CatacombGames](https://github.com/CatacombGames)

[https://github.com/FlatRockSoft/](https://github.com/FlatRockSoft/)

~~~
Nican
Some of the porting-quake links are broken. You have to add the "/wordpress"
bit.

~~~
scruffyherder
I added the mod_rewrite stuff that should have been there. Thanks for letting
me know!

------
nineteen999
Recently I saw watched his QuakeCon talk from 2013, "Principles of Light and
Rendering" at QuakeCon. It helped me solidify a lot of the basic understanding
of 3D rendering I already had and provided a lot of additional knowledge as
well.

[https://www.youtube.com/watch?v=IyUgHPs86XM](https://www.youtube.com/watch?v=IyUgHPs86XM)

------
cup-of-tea
Can I use this to play Doom 3 BFG edition on Linux? I'd love to just buy it on
Steam but sadly it's Windows only.

By the way, I love this from the readme:

> If you have obtained this source code several weeks after the time of
> release, it is likely that you can find modified and improved versions of
> the engine in various open source projects across the internet.

~~~
pjc50
See [https://www.gamingonlinux.com/articles/playing-doom-3-on-
lin...](https://www.gamingonlinux.com/articles/playing-doom-3-on-linux-
in-2017.10561)

~~~
cup-of-tea
I wish I hadn't looked. It doesn't look anywhere near as good as Doom 3 in my
memory looked. I've had this when playing old games from my childhood before.
In my memory they were perfect, beautiful. Then I looked again and my memories
were shattered. I didn't expect it to happen with Doom 3.

------
fsiefken
Thanks to the Quake engine being open source and LordHavoc's source port we
have a very efficient VR shooter running on all VR devices, like the Oculus
Go.
[https://quakewiki.org/wiki/DarkPlaces](https://quakewiki.org/wiki/DarkPlaces)

~~~
err4nt
Love seeing LordHavoc mentioned. I collaborated a little bit with LordHavoc
while helping build the open source shooter game Nexuiz (~2004-2005) and he is
truly a brilliant game engine programmer!

------
nakedne
Is there a good entry point into quake mods these days?

When I was a kid in 1996 I toyed with Quake C but really had no idea what I
was doing. I'd love to toy with mods again but not really sure if there is a
good way to get started. Most of the resources I knew of 22 years ago are gone
or significantly outdated.

~~~
badsectoracula
Check Quaddicted[1] for some singleplayer maps. The most common engine by far
is Quakespasm[2] which keeps the original style but fixes bugs, reintroduces
some features from the software renderer that were lost in the original OpenGL
version (fullbrights, lightmaps that go above 100%, non-power-of-two textures,
etc) and removes and raises some hardcoded limits. You probably also want
QuakeInjector[3], which is a "quake mod installer" that handles dependencies.
You may also want MiniQL[4] (made by me) as a more straightforward and
minimalistic launcher (you can also launch QuakeInjector from MiniQL if it is
installed in the same directory).

This is all you need for playing maps and mods. For making maps (the most
common type of mod) you'll also need a map editor - currently the most common
seems to be Tenchbroom[5], but it is far from the only option and a lot of
people use other editors, such as BSP[6], QuArK[7], GtkRadiant[8] and some
people even use either the original Worldcraft 1.3 (i think) or a modded
Hammer (from Valve) to make maps. I think some also use J.A.C.K.[9], which is
basically a Hammer clone, although i think it is abandoned now.

The map editor isn't enough, you also need the command line tools to "compile"
the map (this is how the Quake engine can support multiple and different
editors: by decoupling the tools from the engine and the individual types of
tools from each other - which to me is one of the best ways to architect and
engine and its tools, but sadly most popular engines have forgotten it). There
are several variations, depending on the features you want. But i think these
days most people are using ericw's tools[10] since they support some advanced
features from modified engines (like the BSP2 format for larger maps and
colored lightmaps).

Beyond mapping, if you want to delve in QuakeC (the game's scripting language)
you need the original QuakeC source code[11] and a QuakeC compiler - while you
can probably use the original QCC, i've seen FTEQCC[12] from the FTE engine to
be mentioned way more often. Some tutorials can be found here [13] (the
Inside3D site which was a sort of 'nexus' for QuakeC modders was shut down
some time ago and while the community create InsideQC[14] it looks like not
everything survived the transition).

[1] [https://www.quaddicted.com/](https://www.quaddicted.com/)

[2]
[http://quakespasm.sourceforge.net/download.htm](http://quakespasm.sourceforge.net/download.htm)

[3]
[https://www.quaddicted.com/tools/quake_injector](https://www.quaddicted.com/tools/quake_injector)

[4] [http://runtimeterror.com/rep/miniql](http://runtimeterror.com/rep/miniql)

[5]
[http://kristianduske.com/trenchbroom/](http://kristianduske.com/trenchbroom/)

[6] [http://www.bspquakeeditor.com/](http://www.bspquakeeditor.com/)

[7] [http://quark.sourceforge.net/](http://quark.sourceforge.net/)

[8] [http://icculus.org/gtkradiant/](http://icculus.org/gtkradiant/)

[9] [http://jack.hlfx.ru/en/](http://jack.hlfx.ru/en/)

[10] [https://ericwa.github.io/ericw-tools/](https://ericwa.github.io/ericw-
tools/)

[11]
[https://www.doomworld.com/idgames/idstuff/unsup/progs106](https://www.doomworld.com/idgames/idstuff/unsup/progs106)

[12]
[https://sourceforge.net/projects/fteqw/files/FTEQCC/](https://sourceforge.net/projects/fteqw/files/FTEQCC/)

[13]
[https://web.archive.org/web/20120526014134/http://www.inside...](https://web.archive.org/web/20120526014134/http://www.inside3d.com/showtutorial.php?id=129)

[14] [http://www.insideqc.com/](http://www.insideqc.com/)

~~~
nakedne
Awesome, thanks for all of this information. It's much appreciated!

Of the 3 quakes, which is easiest to dive into mod development?

~~~
badsectoracula
I think the first one (the list i gave is for that) since it seems to have the
most tools and documentation available out there. After that Quake 3 seems to
be the most popular, but that is multiplayer only (not that some people didn't
try to make singleplayer mods though :-P).

Also i forgot to link to the Quake Wiki:
[https://quakewiki.org/](https://quakewiki.org/)

------
chrisparton1991
There are so many interesting tidbits tucked away in the code, things the devs
had to consider that have never crossed my mind whilst playing.

For instance, the idclev cheat handling in st_stuff.c has to check if the game
is shareware and restrict level changes beyond a certain range.

~~~
kchr
I never quite grasped how that shareware check worked. Always thought the WAD
file was what you bought, not the engine/executable itself?

~~~
chrisparton1991
From doomstat.h line 60: // Game Mode - identify IWAD as shareware, retail
etc. extern GameMode_t gamemode;

I haven't done a deep dive on the code, but it looks like gamemode is set
based on something in the WAD file.

------
nailer
Have id officially stopped their policy of releasing 'current - 2' game source
as Open Source?

Shouldn't Doom 3, Quake 4 and maybe Rage 1 be up here?

~~~
chupasaurus
There are Doom 3 + BFG Edition source codes, ctrl+f "DOOM-3".

~~~
floatboth
Also, an id employee ported DOOM 3 to Vulkan

[https://github.com/DustinHLand/vkDOOM3](https://github.com/DustinHLand/vkDOOM3)

[https://www.khronos.org/assets/uploads/developers/library/20...](https://www.khronos.org/assets/uploads/developers/library/2018-gdc-
webgl-and-gltf/4-Vulkan-Getting-explicit-How-hard-is-Vulkan-really-
GDC_Mar18.pdf)

------
Scott_Sanderson
Has anyone tried compiling on os x?

~~~
scruffyherder
I've cross compiled the MS-DOS stuff from OS X. From the PowerPC days even.

If you want native doom, check out the source ports like Chocolate DooM. Doing
ports to stuff like SDL is somewhat straight forward, or you can do a Cocoa
one yourself, but I'd start with something known to work first..

~~~
jquast
Didn't Carmack himself port X11 to OS X? What is now "XQuartz".

Anyway, great work scruffy!

~~~
geocar
XQuartz is an X11 server.

[https://www.xquartz.org/](https://www.xquartz.org/)

~~~
parasubvert
Carmack did the original XFree86 3.3.x port to Mac OS X Server beta back in
1999 (Which still had the OpenStep GUI!). This eventually evolved into the
XFree86 mainline, and then into XQuartz

~~~
geocar
How strange. I could have sworn I was replying to _Didn 't Carmack himself
port it to OS X? What is now "XQuartz"._

------
thinkingkong
Where’s the commander keen?

~~~
scruffyherder
Back in 2014 John Hall found the source to some of the old stuff, including
Keen 4,5,6

[https://games.slashdot.org/story/14/09/17/133228/commander-k...](https://games.slashdot.org/story/14/09/17/133228/commander-
keen-keen-dreams-source-code-released)

The game was bought by fans, the source was released and Keen Dreams was
published on steam.

[https://github.com/keendreams/keen](https://github.com/keendreams/keen)

[https://store.steampowered.com/app/356200/Keen_Dreams/](https://store.steampowered.com/app/356200/Keen_Dreams/)

The ownership of the older stuff is quite fragmented.

~~~
acheron
Oh cool, I hadn't heard about this. Thanks!

