Saturday, November 29, 2008

Industry Broadcast: Podcasts of Senzee 5 Articles

A Senzee 5 podcast (Audio Article #34: Concurrency in Game Design + Why Use C++?) is now available at Industry Broadcast ( read aloud by Ryan Wiancko. There's a lot of really great stuff there, so get over there and check it out!

The audio article posted combines my entries Concurrency in Game Development and Why Do We Use C++?

Industry Broadcast is the result of Ryan's great idea to offer insight from game developers in audio format. He says -

I was toiling over one disappointing aspect of almost every one of my days: That being that I have so little time outside of my 16-20 hour work day to be a human being that I never am able to sit down and read enough of the articles being published online about the games industry. Occasionally my RSS feeder throws something at me that I just have to make time for but for the most part I see the headlines of features and articles and have to regretfully click away and focus on the 65 new emails sitting in my mail box. I thought ‘God, if I could just have an LCD in the shower with me I might actually have the ability to digest the plethora of useful information regularly being shared by the top minds in our industry.” And then an even better idea struck me: If all of this material was available in Audio Format then I, as well as fellow developers, could be listening to these amazing articles whilst working out or doing the dishes, or or or.

Ryan also maintains a personal blog here.

Sunday, November 16, 2008

Underengineering Undead

We learn more from our failures than from our successes. In A Developer's Life Stages, the first stage is The Underengineer, in part inspired by this poignant failure.

As a college freshman in late 1992, I started making an Ultima VI-like role-playing game.

In researching this post, I went through my journals from that time period to try to figure out exactly how Undead failed. One glaring issue is that ~75% of the journal was about girls, with the remainder divided among writing music, painting classes and working on the game. While totally expected for a distractible teen, given the difficulty of the task and a rapidly approaching deadline (discussed later) it's not a good indicator of eventual success of the project. Nevertheless, software development is a human activity and must coexist with other human activities. Initially, I was more interested in producing an Ultima-esque demo that would get me a job at Origin Systems.

I met a classmate in my speech class at school named Alex Kapadia. Alex had some experience with sound programming and was a game fanatic. I showed him what I'd built, he was thrilled and we began collaborating. At the time, we were playing a game called Solar Winds distributed by a small shareware company called Epic MegaGames before it shortened its name and became known as the world-class developer of Unreal and Gears of War. Each time the game ended, up popped an ad by Epic requesting developers to send in their games for publishing. We sent Undead to Epic and awaited a response. We didn't have to wait long. In early summer 1993 we knew that we would be working with Epic. We sent several versions to Epic over the following year. As it started to gel a bit, we began working more closely with them.

JOURNAL 12/06/93: Talked to Tim Sweeney (president of Epic MegaGames) today. Wow, he knows games. He gave me a lot of good suggestions. He's looking into an artist and musician for the game. He was talking some intense MONEY!!!!!!!!!!

Tim estimated that the game would make Alex and I $40,000, which was an unfathomable amount of money for me as a 19-year old.

JOURNAL 12/08/93: Today Dan Froelich, musician and composer for Epic called me. He lives in Kansas City (that's crazy!) and works for Informix. He told me a lot about how the game publishing thing works. After finals week, we'll get together.

We did end up getting together, Dan, Alex and I at Manny's, the finest Mexican restaurant in Kansas City. He told us a lot about Epic and the business of developing shareware games. He also brought beta copies of Epic's Xargon and Ken's Labyrinth, developed by wunderkind Ken Silverman.

JOURNAL 12/15/93:

From Tim Sweeney (via E-mail):
Date: Wed, 15 Dec 1993 04:28:24 -0500 (EST)
From: Tim Sweeney <70451 .633=".633""">
Subject: RE: Undead & Pinball
Message-id: <931215092823_70451 .633_fhg40-1=".633_fhg40-1""">
Content-transfer-encoding: 7BIT
Thanks! It's great that you and Dan live in the same town. I hope you'll be interested in working with Dan - he's been with us on Jill, Kiloblaster, Brix, Solar Winds, Adventure Math, and Xargon and his experience working with these projects would be helpful in addition to his music! I'm looking forward to seeing more of Undead! It's the best "first" game any author has shown us. Judging by your coding and artwork, your game has great potential and you have tremendous potential as an author. Undead still has a long way to go in developing a story, creating all the artwork, and turning it into a fun, unique, and successful shareware game, but it looks like you have the perserverence to see it through to the end. Keep up the great work!

-Tim, Epic MegaGames
(3:22 AM - normal business hours for we game developers) :-)

A House of Cards

In late 1993, we believed Undead was going to be an enormous hit. The possibilities appeared endless. Even so, I was starting to deeply fear that I wouldn't be able to finish it. Undead had grown in complexity so much that modifying it was becoming difficult. It was approaching 20,000 lines of C and assembly and because it had no higher level architecture to speak of, I was losing my ability to understand it. Disparate pieces were tightly coupled. There was no layering of subsystems. Significant numerical values were hard-coded everywhere. Every line of code I added made it harder to work with. It was like going from troweling wet concrete to chiseling hardened concrete. This was a classic case of underengineering and I was unequipped to fix it. I was scared. Instead of confronting that issue, I began obsessing over the art - most of the development time was now spent in DeluxePaint getting the art just right.

JOURNAL 03/02/94: Undead is gaining bugs as I try to fix it! Argh. And it's having memory problems -- specifically, not enough static memory.

Worse yet, I had a deadline that I hadn't yet shared with Epic. In a year, more or less, I'd be leaving the country for two years without access to a computer. Now, I suspect I could have fixed Undead's woes given enough time, but I didn't have that time.

Man on a Mission

I grew up in the Mormon (LDS) church. Although I left the church many years ago now, at the time I was devout and determined (and expected) to become a missionary (I'll write sometime later about why this was the right choice, despite my eventual leaving). Around March 1994, I called Tim and told him that I had committed to leave for a two-year mission to central Mexico sometime around September. Understandably, he wasn't happy. I'd naively assumed (wishful thinking) that I would be able to get everything done before leaving in the fall. He knew better.

JOURNAL 03/26/94: BAD NEWS. Tim Sweeney got the copy of Undead. He told me he thought it was fantastic, but that there was no way on earth I was going to get it done before August. In addition, he said it would be absolutely obsolete when I got back. 03/27/94: I didn't realize how upset I was about what Tim said about Undead not being done until I woke this morning and I had been having nightmares about it all night. Of course he's right and I knew it anyway.

Obsolescence was always on our tail and we felt its pressure even during development. The style of game that Undead represented was an Ultima VI class game when the RPG state of the art was Ultima VII and in 1993, Doom (as shareware no less!) splayed the writing on the wall for all 2D games.

Perhaps, as a project, this was doomed from the outset for many reasons. The most obvious was my leaving before it was done. Compared to what I build today, though, the game was not at all complex. It should have been straightforward to build it in a year-and-a-half. It's been said that programming ability manifests at a young age, while skill in software architecture comes much later. In the end, I knew the dark secret. It wasn't merely unfinished, it was unfinishable.

Saturday, November 15, 2008

Geek History #1

Circa 1987-1991

Connecting with old friends on Facebook lately led me to remember those early days as a teenager writing video games. It's incredible how much has changed since then. It was nearly impossible to get any information on how to program a computer, much less on how to write games. The library books were typically user and application-oriented. C and assembly books could only be had at the bookstore at ~$60 a piece. In the days before bookstores came with sitting/reading furniture, being a kid without a lot of cash, I'd go to Waldenbooks in the mall and stand there reading, absorbing as much as possible before I had to leave. Today, on the other hand, there's rarely a need to buy technical books because whatever I need can be found on the web faster and for free. Today is definitely better.

With a tiny bit of programming in school (Applesoft and Commodore BASIC) when we got our first computer (a Tandy 1000SX), I naturally started with GW-BASIC. It was too slow for the kinds of games I wanted to make - games like Ultima V and Times of Lore.

For Christmas, I asked my parents for a BASIC Compiler (a what?, they asked). It was what I'd circled for them in a magazine - Turbo Basic. I expected to drop my games in and have them run like crazy. There was a hitch, however. The Tandy 1000SX shipped with an OEM version of Microsoft's GW-BASIC that natively supported the Tandy's enhanced CGA video adapter (essentially the same as the the IBM PCjr's with the 16-color 320x200 mode). Turbo Basic didn't. So, as long as the games could be confined to the horrible four-color plain CGA, they'd compile just fine and run pretty fast. I wrote a paint program (Paint!, image below) and a couple of plain (and simple) CGA games (Alien Invasion and BreakOut!, below) in Turbo Basic. In the end, Turbo Basic was still not fast enough and four colors weren't sufficient.

More importantly, there was one specific technical issue that simply could not be solved with any sort of BASIC. I wanted a four-way scrolling world, like those in nearly every commercial game of the time. I was so desperate to make this sort of game that I spent what little money I had on a commercial library (for BASIC) that supported scrolling through assembly-language routines. It turned out that the scrolling supported by the library was simple text scrolling through the BIOS routines, wholly inadequate for what I wanted. I was extremely disappointed and called the (apparently) single-person company for a refund. He refused. There was only possible solution - to learn C.

C had (and still has) a reputation of being extremely difficult, yet it was the language most commercial games were written in. I bought Mix C - a command line compiler/linker and nothing else - for $20. Coming from BASIC, it was a difficult environment. After floundering with that for months and maybe a year, I finally broke down and bought the Turbo C compiler for $150 and spent the next two weeks trying to build a working piece of software in C. Although I didn't fully understand pointers at the end of the two weeks, I wasn't far off from a basic working knowledge of C. Good tools can make all the difference. I still couldn't figure out scrolling until I received a letter from Herman Miller that brought everything together. From that Legacy I (shown above and below) in C finally came to be. It was a collaboration between Eric Lambert (who did the maps and much of the game design) and I. In truth, it wasn't a game in the end - the player is merely able to roam the world in full 16-color Tandy splendor. That was good enough for me because we now had a new computer with 256 (!) colors. It was time to start all over.

Monday, November 03, 2008

Stages of An Entertainment Medium

Some thoughts about the lifecycle stages that entertainment media seem to have in common. Let me know your feedback and (please!) counterexamples.


The medium is brand new and typically reliant on new, immature and disruptive technologies. The cost of content creation is almost nil and, accordingly, poor quality. Content creation is the domain of individuals rather than companies. The new medium itself is revolutionary enough to sell what little content exists. Content is expensive to the consumers and margins for content creators can be large. Whatever stylistic conventions exist for content here are borrowed from other media (as film borrowed from stage, the novel borrowed from the romance). (However, because of early technical limitations, video games now look more like movies than they did in their infancy.) The conventions of the new medium begin to establish themselves and innovation is high, although craft is low.


Content quality increases somewhat and innovation is on the rise. No mechanisms are in place for quality evaluation besides word-of-mouth. Technology is still immature and further developments in technology change content. The cost of content creation is still low and corporations are displacing auteurs as the primary producers/creators of content. Much more content is sold and price remains high. Margins are large.


Highly influential quality content appears. The underlying technology matures and content form innovation wanes replaced by quality craftsmanship. Evaluation of content becomes important to consumers because of an explosion of choice. Critics, a concept of literacy and a vocabulary of criticism appear. The medium becomes mainstream and its influential content becomes a part of pop culture. References to the new medium become common in older media. Margins are enormous. An 'arms race' of craftsmanship appears and as a result, dominant content creators (corporations) competitively establish enormous barriers to entry for new participants.

Maturation & Refinement

Vast quantities of content flood the market. Content drops tremendously in price. Evaluation is absolutely crucial to weed out all but the best. Poor quality content is effectively ignored by consumers. The time it takes to consume the content is more valuable to the consumer than the price paid for the content. Margins decline as the cost of content creation spirals upward. Because of enormous cost and risk, innovation is confined to craft and polish. The medium is no longer 'new' and is vulnerable to disruptive technologies.

Eventually, there is a vast landscape of low-to-zero cost content. Only the best is ever consumed. Cost of creation is enormous and margins are slim. Related services, merchandising, advertising, product placement, endorsement employed to increase profits. Core innovation is low, craft is very high. The technology is mature and is vulnerable to disruptive technologies. More and more is spent against diminishing (though differentiating) improvements in quality.


The medium becomes a component of a more expressive and newer medium, while continuing to exist on its own.
  • Recorded audio becomes a part of movies

  • Radio (audio) - a component of television

  • Movies and recorded audio - a component of video games