History of BZFlag
(as told by ChrisSchoeneman)
BZFlag began back in 1992 while I was a Masters student at the Cornell Program of Computer Graphics. I was an intern at SGI for the summers of '90 and '91, working on a prototype Indigo during the second summer which was a blast. So by 1992, IRIS GL was an old friend.
At the Cornell PCG, essentially the only computers available were HP 700 series workstations. While CRX-24Z graphics wasn't too bad (around XS24-Z performance), HP's graphics library, Starbase, wasn't quite as easy to use as IRIS GL. In the words of fellow student Rick Pasetto, "Starbase sucks rocks." As a result, very few students wrote interactive graphics tools to assist their research. If you wanted to make an image you usually had to at least ray trace it.
So Rick and I wrote an IRIS GL-like layer on top of Starbase which we called WM (it was originally for window management). To encourage the other students to use it I wrote a number of small demo programs, small being the key word here. The fact that you could open a window and render to it with only a dozen lines of code ensured WM's success. I think it was finally retired by 1999, replaced by OpenGL.
I began to write BZFlag as a simple demo but soon abandoned it after producing a program that was supposed to let you drive around a virtual world but instead had a bizarre warping effect because I goofed up the order of my transformations. I had by then also realized how much more work was involved and had other stuff to do.
So there it sat, unused, for a few months until another student browsing the WM demo directory found it and said it looked cool and that I should finish it. So in a week long marathon of programming BZFlag took shape. The earliest complete version had two notable bugs. The first was that each player had his very own random world; it was soon discovered that hiding behind a pyramid didn't work because the pyramid wasn't even there in the other player's world. Once that was fixed, the second bug became clear: it was impossible to play. I had tried to base the BZFlag world on the real world, so the playing field was 10km on a side and shots moved at around Mach 1. It took forever to get from one end of the board to the other and you couldn't even see a shot before it hit you. So we scrapped some realism in favor of playability. After a few more tweaks, we had a pretty fun game.
At this point the game resembled bz by Chris Fouts. This is no surprise because both games are based on the old Atari arcade game BattleZone. In fact, BZFlag was called bz back then because no one in the PCG knew of the existence of Chris Fouts' bz. Yes, that's right, BZFlag was written with no knowledge of bz. The two games share no code and were designed and written independently. They owe their similarities to their BattleZone heritage.
It didn't take too long to get bored with the basic shoot-'em-up game. We quickly came up with the capture-the-flag mode and designed the new world it's played in. This kept our interest for quite a while (it's still my favorite mode). Strategy now played a role. You still needed good tactics to keep yourself alive, but you had to have a team strategy to excel.
After one of the students hacked the code to make his tank super-powerful (blatantly so; he wasn't trying to fool us) we invented superflags. The first four super flags were: high speed, quick turn, rapid fire, and oscillation overthruster. Originally, there was one of each flag and each had an identifying mark so you knew what it was before you grabbed it. When more superflag ideas came up (including the concept of bad flags) we dropped the marks and made the flags appear randomly. This was around May 1993 and the game has remained substantially the same ever since. I rewrote the game in C++ (from C) for SGI's third IndiZone contest. BZFlag won in the Reality Engine category, earning me a nice little home computer (a Indigo2 200MHz R4400, with a 20" monitor, 64MB, a CD-ROM, DAT, 2GB disk, and High Impact graphics with 4 TRAMs).