December 14, 2013

My “Doom” 20th Anniversary Stories

The way I got into the software business (besides learning to code) was to use every piece of software I could find and send the developers tons and tons of notes and bug reports. It turns out developers liked this, and it gained me a lot of opportunities. One of them was porting Doom and Quake to NEXTSTEP.

For the 20th anniversary of Doom I looked up my history with Id and John Carmack. This was my first letter to Id—please remember, this was more than 20 years ago, so I was just an arrogant kid at the time not the arrogant adult I am now:

From: William Shipley <>
Subject: DOOM & Need a NeXT advocate?
Date: May 4, 1993 at 3:23:10 AM PDT

Howdy there,

You probably don't know me, but I'm a NeXT developer in the Seattle area.  I'm also a big fan of Id.  (In fact, I actually purchased Wolfenstein 3-D even BEFORE I bought a PC.)

I just read on the group that you guys are developing DOOM on the NeXT.  Not knowing what DOOM was, I grabbed the demo shots from your archive and checked them out in SoftPC.


Drool and drool.  I will pay any amount of money for this game.

I have two propositions to make:

(1) I have a number of contacts at NeXT, and a fair degree of support and access to information.  It strikes me that, as game developers from the PC world, you might not have the love and affection from NeXT that I think you guys deserve.  (For example, do you have a Developer's Advocate?  Tech support?)

So, here's the offer: If there's something you need (that doesn't cost money); ie if you have a tech question or need some information or something, you can ask me, and I'll see if I can get it.  Can't promise results, but what can it hurt?

No fee, no catch.  I'm actually interested in writing games myself (got a few in the design phase), but I've been caught up in the NeXT "mission critical apps" wave.  So I figure maybe I can do the next best thing, and try to help you guys out.

(2) Please, let me beta-test the game for the NeXT (or the PC, even).  I have a network of two NeXTs in my house--one NeXTstation color and one 040 cube, as well as a 486 box.  I also have access to a NeXTdimension, a NeXTstation Color Turbo, and an NS/Intel box.

I've been a beta-tester for NeXT, Inc (on NeXTSTEP 2.0, DBKit, and NEXTSTEP 3.0 and now 3.1), and for Lighthouse Design (on Diagram!, Concurrence, and TaskMaster).  I'm also a developer, so I can actually make intelligent suggestions and somewhat knowledgable guesses as to what might cause bugs.

Finally, I love games.  I basically bought my 486 just so I could play games on it.  (In fact, it was Wolfenstein-3D that made me finally cave in and spend the money.)

-William Shipley
The Omni Group

PS: I am not an employee of NeXT, although I just finished a contract for them.

Shawn Green at Id wrote me back the next morning, saying I should sign an NDA. I kept bugging him for months until he finally sent one to me, and in July of 1993 I got a really early build of Doom and played it a ton and sent in a bunch of feedback. (Unfortunately somewhere in the last 20 years the Mail application stopped processing NeXTmail attachments, so all I have is the headers for many of my old mail messages from the '90s.)

In December of 1993 Id did a public release of the Doom alpha on NEXTSTEP before the DOS version, which I'm betting encouraged many nones of people to buy NeXT boxes. But it was a nice gesture, anyways—we NeXTers really needed all the publicity we could get.

Carmack and I mailed each other about technical stuff for almost a year after that, and in maybe August of 1994 we had an exchange which I am forced to recount from rough memories: I wrote Carmack a message which apparently had the subject line "Doom diddly doom!" and said something like, hey, since you wrote this game on NEXTSTEP but don't want to waste your time tuning it up for that platform (it kind of ran in a pseudo-PC-emulation layer) can Omni do it for you and release it for free?

And Carmack responded, the way he does, by just sending me all the source code. I don't think there were any other words in the message, but this could be my mind making the story better with time. Let's just agree it was just a single zipped file with all the Doom source, OK? A few hours later he wrote another message with that went something like, "Hey, uh, the business guy here is freaking out I sent you that, so don't, like, give that source code to anyone else or he'll have to sue you to oblivion."

But that's it. That's how we became the guys who ported Doom and Doom 2 to NEXTSTEP.

Since then, of course, he has become famous for releasing source code to his games, which I assume causes the business guys to always tear their hair out. I tell this story again and again, whenever people ask me to sign NDAs or agree to complicated contracts. Because the smartest people in the world aren't protective of their creations. They know they can always make more, and they know that life isn't a zero-sum game.

Carmack's code at the time was kind of amazing. In the most complimentary way possible, I call Carmack a "coding insect." Like how a bee knows how to build a hive, Carmack codes with a complete picture in his head of what parts he needs to make a whole. Back then with every generation game engine he'd start over from scratch—I mean really from scratch, not namby-pamby "I rewrote some of the code and called it scratch." Since his engines ran on a variety of machines and OSes, he wrote every damn function himself. Carmack needs to log something? Carmack writes a logging function. New generation of engine? New logging function. EVERYTHING from SCRATCH.

Because I was young, super-anal, and wasn't on SSRIs back then, I once asked Carmack why he didn't use libraries for common functions that he could share between engine revisions. Carmack's a super-nice guy, but on this one instance he used the "Well, I think my methods work pretty well..." defense. I never suggested coding style changes again.

But, really, for him it made no sense to share code, because, like a bee, it was just as fast to write new code. The template was in his head, he types really REALLY fast—why bother importing something?

Don't take this to mean his code was spaghetti—it was actually some of the easiest-to-understand code I've ever worked with. It has an almost indescribable quality of "obviousness." Like, you know when a really good teacher explains something, it seems obvious? That's what his code was like. I mean, OF COURSE there's a loop where you service the pending events and call a refresh on the UI layer.

(In case my off-the-cuff example there seems too obvious, I'd like to point out that we once ported a game where it ended up all the 3D layout was being done as a side-effect of a top-level call to "updateMenus()". It's hard to keep code clear.)

Carmack had family in Seattle and on one visit he dropped by our "office" (an old house) and showed us his next engine, which he called "Quake." He had a level from Doom with some semi-random textures in it.

It was the first real-time true-3D software POV engine ever done. It looked like the $10,000 Silicon Graphics machines of the time, except he'd done it all on a normal PC without a graphics card. We were amazed. This was, we knew, the future of gaming.

At the time Id's idea for Quake was you were, like, a Norse god, but so was everyone else, and all you did was run around and jam your axe into people, because there was only one weapon.

Pretty Boring

Thank god they changed that.

Omni went on to port fifteen or so games after Doom. The Doom port we did for free. Carmack wanted us to sell it and make money off our work, but if I recall we ended up giving the port away for free without the data files (wads!) so people just had to buy the DOS version to play it.

We did some other ports for free as well, because back when OS X was new it wasn't at all clear that the Cocoa layer would win out over the Carbon layer. (Most people thought not.) It had been my life's mission (since 1987) to make sure that NEXTSTEP technology got into the mainstream, and OS X was our last and only hope. We knew games were crucial for a platform‘s wide adoption (c.f. iOS), and Steve didn't like games, so it was up to us.

Early on in Quake's life we did some porting work on the its engine to get it working with Rhapsody / OS X (especially sound), and we sent the source code back to Id. Lots of games were built on a licensed Quake engine back then, so a lot of the companies that paid us to port their games would send us their source code, and there'd be a subdirectory in there (I believe created by Tim Wood) that had all the stuff we'd written to get the original engine to work on OS X.

So someone at Omni (usually Tim) would, like, recompile the code they sent us and often as not the game would pretty much work. We'd be like, "Yah, phew, that was SUPER-hard, we're going to have to charge DOUBLE EXTRA for that port, since you MAILED US BACK OUR CODE THAT LARGELY JUST WORKED."

Carmack recently left Id, and is now working with Oculus, the people making the 3D virtual reality headsets that have generated so much buzz. I'm excited that he’s working on something we've been dreaming about for thirty years. If anyone can bring VR to the masses, it's John Carmack.

Also, dude, could you hook me up with a beta unit? I have a Mac and I know some people at Apple if it helps.

Labels: , ,