In the beginning there was Pong, Asteroids, and PacMan. One game that really stood out, from a technical perspective, was Battlezone. Launched in the early 1980’s, Battlezone was a 3D, vector based game in which a player drove a tank around a grid shooting other tanks and avoiding incoming shells. Over time, the concept of the game was ported to faster hardware and many operating systems. The most popular derivative of that game concept, BZFlag, is SourceForge.net’s April 2004 project of the month. BZFlag is a fantastic game. It’s multiplayer, it has great graphics, it runs on all major platforms (Irix, Linux, BSD, Windows, Mac OS X, etc), it has a fanatical following and it is, of course, completely Open Source. With over 812,000 copies of BZFlag downloaded from SF.net, BZFlag is one popular game. Ranked in the top 50 projects on the site (out of 82,000), the SF.net team is proud to make BZFlag project of the month.
Description of project:
BZFlag is a free multiplayer, multiplatform 3D tank battle game. The name stands for Battle Zone capture Flag. It runs on Irix, Linux, *BSD, Windows, Mac OS X, and other platforms. It uses OpenGL and runs best on hardware-accelerated systems, but supports software-only machines.
- Development Status: 5 – Production/Stable, 6 – Mature
- Environment: Cocoa (MacOS X), Win32 (MS Windows), X11 Applications
- Intended Audience: Developers, End Users/Desktop
- License: GNU Library or Lesser General Public License (LGPL)
- Natural Language: Czech, Danish, Dutch, English, French, German, Italian, Portuguese, Spanish, Swedish
- Operating System: MacOS X, Windows, IRIX, Linux, SunOS/Solaris, *BSD
- Programming Language: C, C++
- Topic: First Person Shooters, Simulation
How did you get started?
Tim: Chris Schoeneman started writing the game for fun and rewrote it in C++ for one of SGI’s IndiZone competitions. It won, and Chris got a free Indy workstation. I got involved while working for Caldera Systems. I was looking for games to add to OpenLinux and found BZFlag. I starting making changes for Linux, setting up the SourceForge.net project, and talking to Chris about licensing options. Chris ended up handing the project over to me.
Jeff: I was first involved in getting the game working on Windows back in 1996-1997, back when it was not even open source. I then dropped out until sometime in 2002 when I came back and made the first Windows map editor. Since then I’ve been trying to improve the graphics and keep the Windows platform alive. I also administer the semi-official community bulletin board.
Dave B: In early 2001 I happened upon BZFlag on SourceForge. I played for a couple months, realized I was never going to be a good player, and decided to start coding as an alternative.
David T: My start was writing the first 3D world editor in about 2000, which Jeff Myers then picked up and ported to Windows. I think it was late 2001 that I began to work on BZFlag itself.
Sean: I came across BZFlag in 2002 after seeing an announcement about a port of the game to Mac OS X. I downloaded and installed it, and 20 minutes later, I was playing the game. The community was small enough that I quickly became familiar with other players, including some of the developers. After a few months of playing, I noticed how active some of the developers were. I then learned where the developer activity was (#BZFlag on IRC’s freenode). I listened, I learned some more, and my involvement took off from there.
What is the intended audience?
Anyone wanting to kill a little time. Folks tired of the typical blood and guts mindless shooter, who are looking for a lighter and friendlier sense of community.
How many people do you believe are using your software?
We are averaging about 100 players online at any given time of the day. Many more than that have it downloaded and installed. There are about 53,000 players in the statistics. Many of those are bots or the same player with multiple nicks. Some of those are only listed once when more than one player uses the nick. Some sites run internal servers for which we have no statistics.
There are more than 350 users registered on the BZFlag forum site. There are around 50 people on the IRC channel, 61 members on the users mailing list, 46 members on the dev mailing list, and 50 members of the SF.net project.
My guess is there are a few thousand regular players and many more that try it out from time to time.
What are a couple of notable examples of how people are using your software?
Tim: We have a text client called bzadmin that is used for administration. One server admin (Nidhoggr) has it running on his phone.
Jeff: Some people have made some incredibly impressive maps. One guy did Stonehenge; another did a full European castle, all out of boxes and pyramids.
Dave B: I always amazed to join a game and find folks with ridiculously high scores, scores that had to be the work of a good five or more hours of work.
What gave you an indication that your project was becoming successful?
Tim: When folks started asking for T-shirts.
David T: When a friend of mine told me, “I didn’t know you wrote that!”
Sean: When a close friend began telling me about this great open source game that they had found and started playing called BZFlag. Of course, a couple of Slashdot postings and holding a position in SF.net’s “Most Active” top ten projects for many weeks was a great sign too.
What has been your biggest surprise?
Tim: The amazing amount different options there are for hardware and drivers that can support OpenGL applications.
Jeff: How many people will download and play a free game. And the community that arises out of it.
Dave B: How many folks know who you are when you jump on a game and start playing. Feature requests, bugs, attaboys are a common occurrence while playing. It’s a really good community experience.
Sean: Probably when one of the other core developers, Dave Brosius, found a link through Google to a page at Brigham Young University showing that BZFlag was being used as a core application framework for their course on artificial intelligence.
What has been your biggest challenge?
David T: Most of the older OpenGL implementations each support a subset of the spec, so we have miles of code implementing workarounds for buggy hardware.
Jeff: The refactoring of 10+-year-old code, and having to deal with a “do it yourself” type of design, when there are so many other great toolkits and engines out there now.
Dave B: Coordinating development. Its hard to built a quorum of important stuff. Folks tend to work on what they know, or what they think is important, often in isolation.
Sean: The distributed nature of working on a project where the other developers are temporally and physically separated, with various agendas, skill sets, and understandings often make it rather difficult to make “big picture” forward-thinking changes. Using older, more mature, and mostly portable application code makes new BZFlag developers go through a rather steep learning curve as they become familiar with the code base, hence much of the development by new contributors (and sometimes even by the seasoned developers) tends to be on smaller pet projects, code polishing, bug fixes, or relatively contained enhancements. The varying levels of experience and familiarity of software design methodologies make for lots of discussions on how things need to change to improve. Making changes to the code in ways that will help it remain vital for many years to come generally requires some degree of coordination and persistence. Getting everyone to agree on those changes and work together and getting them done is the hard part.
Why do you think your project has been so well received?
It’s a free 3D action game, simple to learn and difficult to master.
Where do you see your project going?
Tim: We are adding a central user database to make leagues and other group issues easy to administer. We hope to build a karma system that enables the community to guard against cheats and abuses.
Jeff: Graphically BZFlag will become more comparable with current gamer expectations. The last release, 1.10.4, had a great number of graphical and texture enhancements. Some people said they didn’t even recognize it. I also see the code becoming more modular, making it easier to incorporate new technologies and easier to maintain.
David T: We’re starting to see more developer collaboration. Until now, most things have been individual projects. Now that we’re coming close to exhausting what’s possible with that, people are getting together and starting to think out some of the bigger problems. I’m not sure what the result will be, but I’m excited to find out.
What’s on your project wish list?
Tim: More time to hack on the code.
Jeff: A “real” 3D engine such as the most Excellent Ogre.
Sean: I’d love to see more active developers and coordinated effort. Having massive detailed worlds with beautiful realistic graphics, where the players can really get submersed in the gaming experience with dozens of other players, would be sweet.
What are you most proud of?
Tim: BZFlag has continued to gain in popularity since I started as maintainer. It has not been an easy road, and we are not moving as fast as we’d like, but we are making constant progress.
Jeff: The fact that there have been 16,000+ downloads of the last Windows high-res version.
If you could change something about the project, what would it be?
Tim: Extract out the OpenGL code from the game code. This is starting to happen. The code for the robots was not well thought out and it is difficult to add on to now. We are moving toward cleaning this up.
Jeff: Agreed. I’d break the code into separate projects, and allow for multiple game types, each loaded as a runtime module from C++ or Python. I’d make everyone get a hardware 3D card (it is the 21st century for cripes sake). We’d get some of the management of the project delegated to different people who have ownership of sections of the code, such as game play, graphics, sound, and each platform.
Sean: I’d make sure that the tanks could not jump — that only makes the players not die when they are supposed to. Or perhaps, I’d try find a way to compensate the developers for their hard work, time, and effort. 😉 Heh, okay, so on a more serious note — I’d probably work toward laying down more clear future goals and directions for the project, improving the overall codebase design, and making it easier for new developers to get involved and contribute effectively.
How do you coordinate the project?
Most of our developers hang out on IRC. There are active developers on most of the different platforms that continually monitor code changes to ensure that all platforms keep building. We use SF.net to track bugs and requests from folks who are more on the fringes. We have no automated testing at present, though it is being discussed.
We have tools and bots that integrate with and interrogate services on the Web, including SourceForge, so a plethora of information is available via few keystrokes on demand. Commits to CVS are automatically announced to the IRC channel and via e-mail in near real-time though Micah Dowty’s (a.k.a. scanline) useful CIA open source notification system.
Do you work on the project full-time, or do you have another job?
Nobody works on the code full-time.
If you work on the project part-time, how much time would you say you spend, per week, on it?
Jeff: Being an admin of the message boards, I’m never really allowed to “leave” the project, but I spend probably 2 to 30 hours a week, depending on how “into” a current thing I am.
David T: It really depends on the week. Some weeks get no time, others can be ashigh as 30 or 40 hours, if I’m really interested in something.
Sean: I probably burn at least an hour a day and lots of time on the weekends, but it varies a lot day to day and week to week. I generally tend to try to contribute at least an hour or two most weekdays just to keep involved and informed. I might spend as little as perhaps 10 hours any given week though some weeks go well over 40 hours. It depends on what I’m working on, my motivation, and other distractions in life. Average over the past year has been about 20-30 hours a week.
What is your development environment like?
GNU tool suite
DDD from time to time
valgrind and other tools occasionally
Primary development –
AMD XP 2800+ 1.5GB DDR RAM
Visual Studio .Net 2003
Visual Studio 6
Boundschecker if needed
And for the occasional Linux build –
AMD XP 1900+
GCC 3.3.2 and Anjuta for editing
Sean: My primary workstation and developer platform is Apple’s Mac OS X. I’ll occasionally hop onto a Gentoo Linux or IRIX box to test builds or perform tests. For building, the system compiler is gcc and the debugger is gdb. We maintain an XCode project on the Mac platform, so I’m occassionally using that, though the Makefile autotools build system works great as well. As for writing code, it’s all about GNU Emacs.
- 1.7e2 was a rather significant version as it was, unless I’m mistaken, the one commonly available after the first major BZFlag slashdotting.
- 1.7g2 for me represented the stability that resulted from the myriad of bug fixes and subtle improvements (i.e. lots of polish) to the game.
- 1.10.0 shipped in December 2003 and was the first version to be incompatible with older servers and clients. In the months that have passed since then we have managed to move the community over to the new protocol.
- 1.10.4 in January 2004 provided a major revamping of how BZFlag looks, giving both players and developers a hint of just how much room there is for improvement visually.
- 1.11 changed the protocol again, and will have the central registration in it when it ships as a 1.12.x release. It will ship when it’s ready.
- 1.12 is the next major planned release. It’s in active development under the auspices of 1.11 developer versions. When? Good question.
How can others contribute?
There is a TODO list for the client and server code in C++. The new central server code is written in PHP and we need help there as well. Come to #BZFlag on irc.freenode.net and ask. There’s lots to do, for all levels of folks.
- Get the code from SF.
- Tell IRC or mailing list what you want to work on.
- Generate patches.
- Post them to the Patches area on SF.
- Team members will review them and apply them to CVS.