
How Id built Wolfenstein 3D using Commander Keen tech - Impossible
https://www.gamasutra.com/view/news/344672/How_id_built_Wolfenstein_3D_using_Commander_Keen_tech.php
======
Jayschwa
Hovertank and Catacomb, the games between Keen and Wolfenstein, are both open-
sourced:

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

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

I'm the current owner of the Catacomb games, and have been working on
improving and porting them in my spare time (not publicly available yet, but
will be When It's Done). Fabien's Game Engine Black Book has been an
invaluable resource for me. I highly recommend it!

~~~
abeisgreat
How did you become the current owner? I'm very curious about how you went
about obtaining the rights.

~~~
Jayschwa
The original publisher, Softdisk sold many of its assets to Flat Rock Software
in the 2000s. Flat Rock sold off bits and pieces over the years, and the
Catacomb games were one of the last things it held [1]. In 2017, I wrote a toy
implementation of Catacomb 3D in WebGL [2]. Since the project used art that
was under copyright, I contacted Richard at Flat Rock to ask permission to use
it. That conversation eventually led to me deciding to buy the overall game
ownership from him [3].

[1]:
[https://web.archive.org/web/20150101022225/http://www.flatro...](https://web.archive.org/web/20150101022225/http://www.flatrocksoft.com/)

[2]:
[https://github.com/jayschwa/CatacombWebGL](https://github.com/jayschwa/CatacombWebGL)

[3]:
[https://web.archive.org/web/20170623155041/http://www.flatro...](https://web.archive.org/web/20170623155041/http://www.flatrocksoft.com/)

~~~
jackpirate
Wow! Mind if I ask what the price is to the rights of an old game like
Catacomb?

~~~
mysterydip
I was looking into buying that IP a few years ago, and the asking price was
affordable (I just didn't have the $ at the time so I went onto other
projects). Glad to see someone doing something with it, I think it's perfect
for a remake.

~~~
theresistor
Would you be willing to share an order of magnitude?

~~~
mysterydip
It was high four figures

------
leshokunin
It can’t be understated how much impact Wolfenstein 3D and Doom had. Commander
Keen was already quite the tech demo, with scrolling on a PC without dedicated
hardware; the most advanced platforming you’d see at the time would be Price
of Persia.

Wolf 3D felt like a next gen tech demo out of time. It was great fun, it was
violent, it looked unlike anything else (besides Ultima Underworld). Of
course, that monumental achievement looks insignificant when compared with
Doom, which single-handedly added stairs, different floors, multiplayer (!)
and modding.

Most of us here work in software. To see software so casually come in,
introduce never seen before concepts, it’s so impressive to me. I don’t think
That I know of something having quite this impact in other aspects of
software.

~~~
BurningFrog
I've played much "better" games than Doom in many ways, but never one so
revolutionary for its time, and I've never been so genuinely _afraid_ when
playing.

But seriously: Overstated! You mean overstated!

~~~
hnzix
_> so genuinely afraid_

As a little tyke I used to actually duck left of my monitor when an imp threw
a fireball with my heart thumping. Replaying as an adult I'm like wtf that's
just a lumpy mass of pixels, how could I have been so scared?

~~~
ygra
I remember watching my father play Descent and that was pretty much the first
real 3D game I've seen (Germany, so there was a bit of trouble with Doom and
Wolfenstein). And I was constantly trying to peek around corners by moving my
head.

~~~
monster99
You should all check out overload by the original descent developers.

[https://store.steampowered.com/app/448850/Overload/](https://store.steampowered.com/app/448850/Overload/)

------
doomlaser
Impressive id went through development of Quake 3 with no version control.

When I was interning at Apple back in the day I had a side project of porting
wolf3d to OS X, and it was the first occasion I had where I came to admire
John Carmack's code directly. His game source code is something I recommend
checking out to coders interested in gamedev.

Also, I have fond memories of poking around making DOS experiments in Borland
C++ as a teen.

But speaking of version control — I guess that's just how things were done in
the 90s. I read recently that not only was Final Fantasy 7 developed and
shipped without it, but Squaresoft contemporaneously lost the final
PlayStation source code and art assets. The studio contracted to port it to PC
was supplied with a mishmash of non-final code and assets.

~~~
mr_toad
Version control software was a lot more primitive and less fun to use in the
90s. On Unix you had CVS, on Windows just VSS. SVN, Mercurial and Git all came
post 2000.

~~~
hinkley
And it took SVN a couple extra years to be performant on Windows, which at the
time was still the dominant development environment in many places.

Maybe my second SVN project, we had a monorepo, Windows, and a virus scanner
(multiply pull time by five). I'd come in in the morning, log in, do an svn
up, go get coffee and say hi to the people I was collaborating with, and be
back to my desk all before it finished.

Many days I only synced to head twice because it was a pain in the ass, and
the SVN maintainers were not at all sympathetic. A new contributor
consolidated the config files and cut the number of file open operations by a
couple orders of magnitude. I don't think we ever properly thanked that guy.

~~~
dev_dull
> _A new contributor consolidated the config files and cut the number of file
> open operations by a couple orders of magnitude. I don 't think we ever
> properly thanked that guy._

Unspoken benefit of “new person” — eventually someone not desensitized to the
crap will throw up their hands and fix it.

~~~
vidarh
Sometimes it's so tiny too, but requires you to look at code that nobody else
has a reason to look at any more.

I once increased performance of a CMS by 30 percent my first day in the job
because I happened to spot a handful of lines of unnecessary string copying
while trying to figure out how the thing worked.

Everyone else could have, but none of them had any reason to look at that part
of the code because it worked.

------
cgrealy
"We didn’t have a version control system. Surprisingly, we went all the way to
Quake 3 without one, then we started using Visual Source Safe."

That is both impressive and terrifying. I'm old enough to remember when I
first started using VSS, and being amazed at how awesome source control was :D

These days, it's hard to look back at SourceSafe with anything other than
horror....

~~~
alain94040
There was a transition from the 80s to late 90s: until you had some kind of
network, the important thing was to backup your machine. Daily if you can.
Even if you had been running a local revision control on your local machine,
you wouldn't be protected enough, so backups were more important.

Once networking and servers became more prevalent, it slowly made sense that
backups turned into revision control. If your machine crashes, there is a
remote repo you can connect to and get back to where you were.

------
bluedino
>> Everybody was working witht he best PC money could buy, a high end
386DX/33MHz with 4MB of RAM

According to a May 15, 1990 issue of PC Magazine, that was a $3,500-4,000 USD
machine back then.

Used to develop Wolf3D, but only good for about 8fps when Doom (ID's next hit)
came out.

~~~
rhacker
Interestingly that's the exact PC my dad bought us when we were kids. I loved
how computers back then had a turbo button, but I could never figure out why
anyone would turn off turbo! :P

~~~
spion
I believe it was due to programs (mainly games) that relied on clock speed to
work. If you ran some of them with turbo, they were so fast they were
unplayable.

------
snvsn
"Masters of Doom: How Two Guys Created an Empire and Transformed Pop Culture"
has an excellent account of how Romero and Carmack built these games.

~~~
abraae
I've tried using that book to explain to people how "real" software
development works. How the inception of the real cool shit, the stuff that
spawns a company, is almost always 2, 3 or a small handful of people working
late, night after night, living on pizzas and cola, churning code. And how
that apparent anarchy is a more productive environment that ten pointy headed
bosses plugging away at their gantt charts and a hundred 9 to 5 developers
carrying out their orders.

~~~
untog
Not that I want to be seen defending pointy headed bosses, but I think there's
a fair amount of survivorship bias in your statement. How many groups of 2-3
people have worked late, lived on pizza and coke and produced absolute
garbage? Quite a few, but you never hear about them because they aren't
notable.

You don't have to get into pointy headed boss territory to be a successful
programmer _and_ leave the office at a respectable time every day.

~~~
SmellyGeekBoy
Are many successful game programmers in corporate environments leaving the
office at a respectable time every day? I definitely don't get that impression
at all.

At least in a 2/3 man team surviving on pizza and Coke you're not lining
someone else's pockets with millions of dollars only to be thrown out onto the
street at the end of the process.

------
bitwize
A version of Keen's tile editor was used to create maps for games as recent as
_Rise of the Triad_ , which was itself built on a modified Wolfenstein engine.

~~~
jonny_eh
> as recent as Rise of the Triad

Released December 21, 1994

~~~
gmueckl
That game got a remake a couple of years ago. I don't know if they were
referring to that.

~~~
SketchySeaBeast
If they were still using the Keen Tile Editor that'd be amazing.

~~~
bitwize
I was referring to the original -- which was still released after _Doom_ came
out.

------
filereaper
John Romero mentions this in his talk - "The Early Days of Id Software"

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

~~~
filereaper
John talks about Id's Software Principles, one of the YouTube commenters (Sean
Ramey) summarized them below:

1\. No prototypes. Just make the game. Polish as you go. Don't depend on
polish happening later. Always maintain constantly shippable code. (Large
teams require more planning though.)

2\. It's incredibly important that your game can always be run by your team.
Bulletproof your engine by providing defaults (for input data) upon load
failure.

3\. Keep your code absolutely simple. Keep looking at your functions and
figure out how you can simplify further.

4\. Great tools help make great games. Spend as much time on tools as
possible.

5\. We are our own best testing team and should never allow anyone else to
experience bugs or see the game crash. Don't waste others' time. Test
thoroughly before checking in your code.

6\. As soon as you see a bug, you fix it. Do not continue on. If you don't fix
your bugs your new code will be built on a buggy codebase and ensure an
unstable foundation.

7\. Use a development system that is superior to your target.

8\. Write your code for this game only - not for a future game. You're going
to be writing new code later because you'll be smarter.

9\. Encapsulate functionality to ensure design consistency. This minimizes
mistakes and saves design time.

10\. Try to code transparently. Tell your lead and peers exactly how you are
going to solve your current task and get feedback and advice. Do not treat
game programming like each coder is a black box. The project could go off the
rails and cause delays.

11\. Programming is a creative art form based in logic. Every programmer is
different and will code differently. It's the output that matters.

Extra advice:

1\. Only program for a few minutes and test code immediately. Try not to code
for even as long as 30 minutes. This is will help to avoid debugging because
you will catch bugs sooner, and won't have as wide an area of code to look
through for the bug.

------
LocalH
Interesting how they make sure to mention the use of 320x200 during graphic
editing to maintain proper aspect ratio, then display screenshots from the
game in improper aspect ratio

------
bcheung
Wow, those screenshots bring back memories. Used that same exact IDE to make
games when I was a kid. It was an amazing time to be programming.

------
scarface74
And notice that they used an IDE. So that kind of gives credence to the idea
and the HN meme that “10x developers don’t use IDE’s” is BS....

~~~
bonzini
You are not making an equal comparison. DOS at the time didn't have multiple
windows or multitasking. People that don't use IDEs these days still use
multiple terminals or windows.

Using the Borland C++ IDE in 1991 is way more similar to using Emacs these
days, than Visual Studio Code.

~~~
scarface74
The source code for Doom 3 (circa 2004) was released on Github - it was a
Visual Studio solution.

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

------
QuadrupleA
Great article - cool to get an inside look at tools, IDE environments, art
sketches etc.

Such an exciting time for PC games, with ID way out at the forefront - highly
recommend the Masters of Doom book mentioned in the article too, it's a deep
dive into the making and eventual impact of Doom. Great snapshot of the ID
guys and of that time period.

------
m12k
For anyone curious about the technical details, there's a decent description
of how Adaptive Tile Refresh works in the wikipedia article:
[https://en.wikipedia.org/wiki/Adaptive_tile_refresh](https://en.wikipedia.org/wiki/Adaptive_tile_refresh)

------
btilly
I remember playing Wolfenstein 3D for many hours back in grad school.

Then Doom came out, and I found out the hard way that I get motion sickness
from playing immersive games with good graphics. :-(

I've not been able to play first person shooters since. But I sure loved
Wolfenstein 3D.

~~~
lostmyoldone
Used to get severe motion sickness too until I figured out it went away at
high FPS. At least for well made games with low input latency.

With a good 1000Hz wired mouse and games I where I get _at least_ 100fps,
preferably >144fps, I don't feel anything at all when I play. Still can't
watch others play though.

~~~
btilly
My curiosity is not sufficient to test whether the same is true for me.
Particularly not since if I get immersed in the game, by the time I realize it
is happening it is too late. The potential upside just isn't there to make it
worthwhile.

However I've also found that 3-D systems that everyone else oohs over whose
operators promise don't cause motion sickness any more, always do. Really
fast. So I'm apparently on the sensitive end of motion sickness from computer
systems.

------
mobilemidget
These two titles in one sentence, make me wonder how a 3d shooter version of
Commander Keen would be with current day graphics.....

------
acjohnson55
My dad brought copies of both of these games home on floppy disk, which is
what got me into computers.

------
x3ro
Shameless plug: this reminds me of how I once spent an afternoon compiling the
open sourced version of Keen Dreams using Borland C++ 3.1 :D

[http://x3ro.de/2014/09/18/keen-dreams-
dosbox.html](http://x3ro.de/2014/09/18/keen-dreams-dosbox.html)

------
Yajirobe
What is the blue-yellow IDE/editor called?

~~~
pjmlp
It is quite clear on the figure captions, Borland C++ 3.1.

~~~
gmueckl
You could even license the UI library from Borland for use in your own
programs. And Turbo Pascal had the exact same look.

Later, there was a near clone of the Borland IDE called RHIDE which wrapped
DJGPP, a GCC port for DOS/DPMS. I had some fun times with that.

~~~
antod
_> You could even license the UI library from Borland for use in your own
programs. And Turbo Pascal had the exact same look._

Turbo Vision?

~~~
dfox
They even released the C++ version as public domain. Free Pascal uses it's own
Free Vision which is back port of the TUI support into Graphics Vision[1]
(which in turn is LGPL's reimplementation of Turbo Vision API in graphical
mode)

[1]
[https://www.math.ucdavis.edu/~mkoeppe/mkm/mkmeng.html](https://www.math.ucdavis.edu/~mkoeppe/mkm/mkmeng.html)

------
Endy
I miss Keen.

------
m3kw9
Now that’s a flex!

