BZFlag

From Wikipedia, the free encyclopedia

BZFlag

A screenshot from version 2.0.
Latest release 2.0.10 / 2007-11-15
Written in C++
OS Cross-platform
Development status Active
Genre First-person shooter
License LGPL
Website www.bzflag.org

BZFlag (an abbreviation for Battle Zone capture the Flag) is a three dimensional first person tank shooting game. It was originally written by Chris Schoeneman for the SGI family of computers based on the classic Battlezone game. Current open source development is maintained by Tim Riker, and a team of project administrators. The project, including its source code and bug trackers, is hosted on SourceForge.net. While originally developed for SGI computers running IRIX, the game has been ported to Windows, Linux, Mac OS X, BSD, Solaris, and other platforms. It is distributed under the LGPL license, a switch from the common GPL license that it was under for many years.

BZFlag is quite popular, being the third game on SourceForge.net to reach 1 million downloads on December 11, 2004. There are around 250 servers active at any given time (although only about 10-20% have active players most of the time),[1] and as of April 23, 2008 there were over 19,300 players registered at the official BZFlag online forums[1], with roughly 200 players playing a game at any one time. BZFlag was selected as the SourceForge.net Project of the Month for April 2004.[2]

Contents

[edit] Overview

The newest game logo for version 2.0.8 and after.
The newest game logo for version 2.0.8 and after.
The old, and rather short lived, game title logo from versions 2.0 to 2.0.7
The old, and rather short lived, game title logo from versions 2.0 to 2.0.7
The older game title logo for BZFlag from versions 1.10.x and before.
The older game title logo for BZFlag from versions 1.10.x and before.

In a game of BZFlag, players drive around tanks, viewed from a first-person view, in a server-defined world (also known as a "map"), which can be modified. Tanks have the ability to drive through other tanks, but cannot travel through buildings or other world objects. The basic objective is to destroy opponents' tanks, which are tanks of another team's color. For example, green tanks are supposed to try to destroy red, purple, blue, and rogue tanks. Rogue tanks do not have any allegiances to a certain team and are therefore able to kill anybody.

There are styles of game play that modify the objective. Styles are server-based, as the server operator chooses what style to host. If there is no special style indicated by the server owner, the only objective is the above (to simply kill opponent tanks), it is called a "free for all", or "FFA" for short.

There are two other objectives and corresponding styles (three in total): a style called "capture-the-flag" (or "CTF" for short) in which tanks try to pick up an opponent's flag and bring to its own home base (a small area marked with the team's color that simply is the home of a team), or a style called "rabbit chase" in which the objective is to have every hunter (colored red and yellow)tank try to destroy a particular white tank, called the "rabbit."

Servers can change the game mode and have custom maps made to fit the properties of the game. Certain thresholds are used to catch malicious players and kick them off the server, as well as message filters, and an entire collection of other anti-cheating features.

While any connection can host a game, dial-up connections can typically host only a player or two; therefore, faster connections make up the majority of servers. The game has twelve language translations, but despite this, the majority of servers and "peak-hours" for play are dominated by the United States of America. There are a significant number of international servers, and there are players playing 24 hours per day, 7 days per week, but peak-hours tend to be based on U.S. holidays and times. There are usually about 250 to 300 servers at a time, but few servers are actually filled.

[edit] Game simplicity

The game and its supporters boast the simplicity of the game overall, from the graphics to the game play. While the game for the most part is simple, many parts are complex, such as the effects of some "flags", or performance adjustments for tanks (both good and bad), as well as what can be done in the creation of worlds for game play.

[edit] Typical releases

A typical BZFlag release contains three programs:

  • BZFS - the server host application
  • BZFlag - client application
  • BZAdmin - lightweight console administration utility

as well as manual pages (in *nix MAN format), data files, and a configuration file builder (written in HTML) to aid in using BZFS to create a server. In Microsoft Windows releases, shortcuts to BZFS are added as to provide an easy way to start a server quickly with pre-configured options.

[edit] Translations

BZFlag has been translated into 12 languages other than English: Czech, Danish, Dutch, German, Leet, Spanish, French, Italian, Kongo, Lithuanian, Portuguese, Redneck, and Swedish.

[edit] Teams

Tanks can join as one of the 4 team colors, as a rogue, or as an observer. The observer cannot play, but can move anywhere in the world and watch what the tank they are linked to is doing. Observers do not have a tank and are therefore not visible to players, but are shown in the scoreboard. The colored teams are Red, Green, Blue and Purple. Rogue players are teamless players: they are allowed to kill colored team players and other rogues. Rogue tanks are colored dark grey out the window, and yellow on the radar.

Most of the time teams are not very useful in free-for-all games. Somebody with a Genocide flag can kill a team as a whole with one shot. For that person it is only a matter of targeting the weakest member to score. The cooperation itself is difficult as well. Attacking the same target easily results in unwanted teamkills due to friendly bullets accidentally striking a teammate on the opposite side of the enemy. In addition, although rare, it is not unheard of to be attacked by a teammate due to a teammate being unaware of the team they are on, or more commonly in the case of new players, the concept of teams in the game.

In rabbit-hunt games there is a white tank, known as the "rabbit", against the orange-brown "hunters", or every other player. The hunters are considered a team, so rabbits with genocide are dangerous, and often team kills occur due to a group assault on the "rabbit."

Teams are necessary in capture-the-flag games, in which they have to protect their team flag from capture. Because rogues are occasionally allowed (as chosen by the server administrator), a rogue tank does not have any flag to defend, and in turn cannot capture flags. However, rogues usually tend to aid other teams of choice, or merely enjoy adding a distraction to all teams.

Unfortunately, people will often abuse teams and join a team intending to kill teammates. Many servers try to discourage this behavior, other than verbally, by having tanks blow up when they shoot teammates, whether intentional or accidental. If intentionally, this behaviour usually results in an autokick or even in a ban.

[edit] Artificial intelligence

BZFlag has two methods of implementing artificial intelligence: players who have selected to "autopilot" their tanks, and game-controlled robots. All robots use the same functions the human player uses. So, for example, robot and autopiloted tanks can pick up flags and use them in the same way a human player could.

Creating a good AI for BZFlag is still a challenge. A bot should, for example, be able to avoid most bullets without jumping, and if needed, should jump intelligently. The number of rules that could be implemented is huge. The current bots are not bad but cannot cope against a slightly skilled human player. If they do stay alive for long it is usually because of lag and luck.

[edit] Distribution

BZFlag is currently distributed under the GNU Lesser General Public License through the official website on SourceForge, or by other means such as the GNUWin II CD-ROM (which usually contains an older version of the game due to the active development of the game by its current maintainer, Tim Riker, and other people who decide to contribute to the project) or other CD-ROMs/distributions.

[edit] History

Versions (descending to newest)
1.5a March 27 1997
1.6 July 17 1997
1.7c June 13 1999
1.7d9 January 31 2000
1.7e0 January 25 2001
1.7e1 March 9 2001
1.7e2 April 4 2001
1.7e4 November 27 2001
1.7e6 June 18 2002
1.7g0 December 7 2002
1.7g2 June 17 2003
1.10.0 December 8 2003
1.10.2 December 22 2003
1.10.4 January 24 2004
1.10.5 April 25 2004
1.10.6 May 14 2004
1.10.8 October 5 2004
2.0 January 17 2005
2.0.2 March 18 2005
2.0.4 September 30 2005
2.0.6 April 9 2006
2.0.8 May 13 2006
2.0.10 November 15 2007
A daytime, but rather dark, shot from version 1.7d9 while a chat message is being typed. Note the non-transparent "HUD" (console), as well as the font, both contrasting with newer versions.
A daytime, but rather dark, shot from version 1.7d9 while a chat message is being typed. Note the non-transparent "HUD" (console), as well as the font, both contrasting with newer versions.

BZFlag was originally written as a project in C by Chris Schoeneman in 1992, based on the chart-topping, smash hit arcade game Battlezone. At first, BZFlag was called "bz" and despite its similarity to the game of the same title by Chris Fouts, both games were completely independent of each other. Originally, BZFlag was simply a shoot 'em up game with no other modes. However, after Schoeneman and his friend Rick Pasetto (who helped Schoeneman develop BZFlag from the beginning) became bored with the concept, they invented the capture-the-flag mode. This new mode added a requirement of strategy and skill, which was sufficient to keep interest.

In 1993, BZFlag was released to the public for the first time. This release took a new turn compared to older versions as a cheater, who edited the source code of his client to give himself powers that do not come from official releases, inspired Schoeneman and Pasetto to add "super-flags", or flags that affect a tank's performance. The first four flags were High Speed (boosted tank speed), Quick Turn (tank turned faster), Rapid Fire (shots moved faster), and Oscillation Overthruster (tank could go through objects). There was only one of each flag, and all flags had a marker on them so tanks knew what type it was. Bad and good flags were added, and the idea remains part of game play today, however, flags do not have markers and are completely unknown of their types until they are picked up by a tank (unless a tank is carrying an identify flag).

In 1997, the release of version 1.7d came with a groundbreaking new feature: an in-game public server list. Previously, players had to either set-up their own servers, know of servers, or read a list published and maintained by a third-party, but the new server list (hosted on the official BZFlag website, even today) allowed anybody to play games on servers that chose to become public.

Schoeneman eventually re-wrote BZFlag in C++ for SGI's third IndiZone competition, which won in the "Reality Engine" category. Tim Riker was later given the project prior to version 1.7e to maintain and evolve.

[edit] Server environment

Servers have environments that simulate the real world. A server's environment is three things:

  • The map in play
  • The time of day that is being simulated
  • Any weather conditions

BZFlag takes the local time from where the server is located and creates a nighttime or daytime atmosphere in the background. Servers may synchronize the local server time, or servers may allow players to change the time to any time they may desire. There will always be a few clouds in the atmosphere as clouds are a basic texture. However, the amount of clouds is not customizable.

In this 2.0 screenshot, it snows during the day while the ground is reflective, the radar and console are missing, and it is 00:41 in reality. Taken from the low-quality release of the game.
In this 2.0 screenshot, it snows during the day while the ground is reflective, the radar and console are missing, and it is 00:41 in reality. Taken from the low-quality release of the game.

Starting in version 2.0, servers are able to set weather conditions. Servers can be rainy, snowy, icy, have a reflective ground that is "slippery", have modified friction, and foggy. Little frogs can also take the place of rain or snow droplets. Contrary to other environment variables, weather conditions cannot be changed by players, and are rather controlled by server operators.

[edit] Leagues

There are numerous BZFlag leagues where dedicated players can create teams that other players can join, to become team members. These leagues have been set up and are run by one or more administrators who themselves are dedicated players. Matches for each league last thirty minutes and are played on just one specific style - with one exception. For example, the first league was the Ducati League. This league is played on random maps, red against green, with two shots, ricochet and no jumping. It is intended to test true skill due to its emphasis on bullet-evading and marksmanship, rather than obtaining good flags and simply being able to go airborne over bullets. A league very similar to this is the Pillbox League. This league is very much like the Ducati League except for a few differences in the rules. In official Pillbox League Play there is no ricochet and a player gets three shots instead of two. Another distinctive difference between the two leagues are the maps. The Pillbox League is played on the popular Pillbox map. The Ducati League uses a map that is randomly generated each time the first person joins the server. Another league however, is the GamesUnited League where matches are played on the HiX map with 3 shots, ricochet, jumping red vs. purple.

There are hundreds of teams within a number of leagues, but some leagues are inactive and some teams within the more active leagues are becoming inactive. A sampling of mainstream leagues are:

There is also a monthly One On One tournament known as the 1vs1 League.

[edit] Maps

A BZFlag server can be configured to create a basic, random map for play, or users can load custom map files. BZFlag uses a customized text based map format to define the placement of objects. While writing a map is fairly simple in this format, most people use the official map editor, BZEdit or blender for most complex maps. BZEdit is not distributed with the game, and no longer under active development. Versions of it are available at the BZFlag SourceForge.net site. Using blender in combination with a BZFlag format plug-in is the currently preferred mapping method.

As to the simplicity of maps, there are a number of basic objects in a map:

The first two objects above are self-explanatory. Teleporters are rectangular, yellow-bordered "film" looking objects that teleport a tank from one teleporter to another on a map. However, not all teleporters actually teleport. A mapmaker may choose to not have a teleporter teleport tanks by leaving out links, or simple definitions of two points for teleporters to link between. Team Bases are used for CTF style games. Full three dimensional meshes have been available in maps since the 2.0 release.

The syntax for any element starts with the name of the element, the specifics, followed by the "end" keyword. The following:

box #start (name the element)
position -50 -50 0 #the position
size 10 10 10 #the size of it, in units (x, y, z)
rotation 0 #degrees of rotation
end #all elements end with this keyword

places a box at the co-ordinates 50x50y, is 1000 cubic world units (a tank is 8.04 world units long in the game[3]), and is not rotated with respect to "north." This is a very basic example of a basic element, but conveys the general concept. Only a box follows the specific keywords above, in example, only a box requires a stated degree of rotation. Some elements, such as animation, have no set amount of lines required, as the amount of lines for some elements depends highly upon its complexity.

Complete list of map objects, followed by their descriptions:

Object (Keyword) Description
world Set certain world environment variables
options Set command line option (for BZFS)
waterLevel Set how high the water level is
dynamicColor Sets certain modifications to how colors appear in the world
textureMatrix Customizes world textures, such as their size or color (all clients have the same textures, hence this was created)
physics Customizes world physics
define Creates a list of world objects modified by group
group Modifies other world objects and their properties (for use with define)
mesh Creates a 3D mesh object, which is used for custom 3D objects.
meshbox Creates a simple box
arc Creates an arc object
cone Creates a cone object
sphere Creates a sphere object
tetra Creates a tetrahedron object
box Creates a box
pyramid Creates a pyramid
link Adds a link to a teleporter
base Creates a base (for capture-the-flag games)
weapon Creates a world weapon--a weapon (with a certain flag) the world fires at a certain time
zone Defines a "zone" in which is a partition of the world and has its own variables
teleporter Creates a new teleporter

Comments in map files start with a "#" (number sign). Whitespace in quantities over one whitespace is ignored.

[edit] Flags

In observer mode as a green tank and a rogue tank battle against each other. The rogue clearly destroys the green tank as the rogue has Guided Missiles. Taken from low-resolution mode in version 2.0
In observer mode as a green tank and a rogue tank battle against each other. The rogue clearly destroys the green tank as the rogue has Guided Missiles. Taken from low-resolution mode in version 2.0

BZFlag has three types of flags: team flags, bad flags and super flags. Team flags are only placed in a world during a capture-the-flag game, and represent the team it is colored to. Super flags are flags that can be in both free-for-all games and capture-the-flag games, but are strongly controlled by a server operator. The amount, types of super flags, as well as where they are placed can all be controlled by the operator. Super flags come in both bad and good form, and affect a tank accordingly. A bad flag may take away a certain sense of the tank: its sight, speed, or related things, while a good flag does the opposite and actually helps a tank. Good super flags are usually held until the tank is killed and explodes, or until the player driving the tank chooses to drop the flag. Bad flags are dropped after a certain amount of time (usually a few seconds), after a certain amount of "wins" (kills of other tanks that the bad flag carrier caused), or until the tank dies (which is rare). The rules for dropping bad flags are set by the operator. All super flags have a one or two letter code that is displayed next to a player's name on the scoreboard when that player has that flag. Once in a while, a new flag is introduced, which anyone can contribute to via developer contact or the wiki. Below is a table of good and bad flags, their code (next to name in parentheses), and their description:

The player fires a Guided Missile at a ground target while the opposing green team's flag is taken from their base, all while a tank has exploded slightly below.
The player fires a Guided Missile at a ground target while the opposing green team's flag is taken from their base, all while a tank has exploded slightly below.

[edit] Good flags

  • Agility (A): faster acceleration and higher top speed, usually just for a few seconds before you have to stop and start up again in order to have the same effect.
  • Burrow (BU): tank burrows underground below shooting height, but is slower and can be run-over
  • Cloaking (CL): makes tank invisible on other players' HUD; invincible to the laser flag
  • Cloaked Shot (CS): Shots that a player shoots are invisible out the window. They are still visible on radar, and the glow emitted by the shot is still visible out the window. Note that this flag is not in the current release of the game, it will be included in version 3.0.
  • Genocide (G): one shot to a tank kills that tank's entire team (the shooter can shoot himself or one of his teammates and receive such effects)
  • Guided Missile (GM): fires missiles that track a target (when locked on); Cannot lock on to players with the stealth flag.
  • High Speed (V): higher maximum velocity
  • Identify (ID): identifies what the closest flag is
  • Invisible Bullet (IB): bullets can not be seen on other tank's radar
  • Jumping (J): tank can jump (if server does not specifically disallow it)
  • Laser (L): shoots an infinite-range laser beam
  • Machine Gun (MG): fires with low reload time, but distance is extremely limited
  • Masquerade (MQ): tank is disguised as an ally tank on an enemy tank's HUD
  • Narrow (N): tank is extremely thin seen from the front and rear, thus harder to hit
  • Oscillation Overthruster (OO): tank can go through buildings and objects. While in an object, tank cannot shoot or drive backwards. The name is a reference to the cult movie The Adventures of Buckaroo Banzai Across the Eighth Dimension.
  • Phantom Zone (PZ): you can "zone" your tank by going through a teleporter and "unzone" it going through a teleporter again. When tank is "zoned", tank can walk through buildings, cannot shoot or be shot (although it can shoot and be shot by other zoned tanks), but can be destroyed by another tank with the super bullet or shockwave flag. Grass becomes purple while you are zoned. You can't drop this flag while your tank is zoned. The name is a reference to the Superman comic books.
  • Quick Turn (QT): turns faster
  • Rapid Fire (F): shots travel faster, but have less range
  • Ricochet (R): allows shots to ricochet off world objects and walls (only in non-ricochet servers)
  • Seer (SE): tank can see cloaked, stealth, and masquerading tanks as normal, as well as invisible bullets
  • Shield (SH): tank can be shot once without exploding
  • Shockwave (SW): tanks fires a lethal expanding spherical shell of server-set radius around the tank in place of firing bullets
  • Super Bullet (SB): shots go through buildings and other world objects
  • Stealth (ST): tank cannot be seen on other tanks' radar; cannot be locked on to by a GM, although it is usually still possible for it to be shot by an unguided GM.
  • Steamroller (SR): tank can kill other tanks by simply touching them
  • Thief (TH): tank is small and fast, and can steal other tanks' flags by shooting at them with a short range, fast-firing beam (thief is dropped once a flag is stolen)
  • Tiny (T): tank is smaller in length and width
  • Useless (US): no effect
  • Wings (WG): tank can jump a server-set amount of times in mid-air and can steer in air. Holding down the jump button on some servers will make you slowly rise up, although it wastes your jumps considerably

[edit] Bad flags

  • Blindness (B): can't see the outside world, but radar still works
  • Bouncy (BY): tank bounces (jumps) uncontrollably
  • Colorblindness (CB): tank cannot see colors on other tanks (everyone looks like a rogue)
  • Forward Only (FO): tank can only go forward
  • Jamming (JM): radar is jammed
  • Left Turn Only (LT): tank can only turn left
  • Momentum (M): tank has a lot of momentum and accelerates slower
  • No Jumping (NJ): tank cannot jump (if server allows jumping)
  • Obesity (O): tank becomes much wider and easier to hit
  • Right Turn Only (RT): tank can only turn right
  • Reverse Only (RO): tank can only go in reverse
  • Reverse Controls (RC): tank driving controls are reversed from their usual behavior
  • Trigger-Happy (TR): tank automatically shoots every bullet it has immediately after they reload
  • Wide-Angle (WA): tank has a fish-eye view

[edit] Team flags

  • Red Team
  • Green Team
  • Blue Team
  • Purple Team
  • Rogue Team - Rogues do not have their own bases or team flags, therefore cannot capture any flags. However, rogues can pick up another team's flag and move it, which often is done to help out one team.

[edit] Messaging

BZFlag supports 3 types of messages:

  • Messages to all, done by pressing n.
  • Messages to your team, done by pressing m.
  • Private messages, done by pressing "." (period) and then choosing a recipient using the left/right arrows. If the arrow keys don't work (and move the tank instead), try moving the mouse before pressing ".".
    It is also possible to send a message to the last person who killed the player by pressing ",".

After pressing the corresponding key, the message can be typed and sent with the ENTER key, or canceled using Ctrl-C.

It is also possible to send commands to server by pressing n and typing the command (which starts with / in a similar way to IRC commands. Notable commands: /me <text> and /quit <text>).

(Given keys are default ones. They can be changed by the user)

[edit] Development

BZFlag is written in C++ and uses OpenGL for rendering. Its audio and several other sub-systems (such as window management and file access) have been written using OS specific methods. Newer releases use SDL to perform low-level operations on all platforms except for Microsoft Windows. Textures for in-game objects are loaded from PNG files, audio from WAVs. Zlib is used to decompress data files, which is written in C.

[edit] Developers

The number of developers grows constantly. Any programmer can become a developer as long as they have demonstrated quality coding and sound judgment (by submitting code patches, being professionally known by a developer, or other significant contributions). Though there are currently 64 listed developers, a much smaller number of those are active contributors.

Developers are able to edit any of the project's files to make changes at any time. However, when a developer has made an edit that other developers do not approve, or is inappropriate for the game, they are requested to revert to the previous version of the file. Most developers monitor source edits using the mailing list available on SourceForge.net[2].

The project is maintained by Tim Riker, with help from David Trowbridge, and Sean Morrison. The game's original author, Chris Schoeneman, is no longer involved in development.

[edit] Structure

Source files are paired: each source file has a corresponding header file, where all variable declarations, as well as preprocessor statements, are kept. Source and header files are kept in their corresponding program's folder. For example, all BZFS source and header files are stored in "/source/bzfs".

[edit] Pace

Development occurs nearly every day, as there are developers from all over the world, however, the amount of source edits per day, on average, are few.

The usual timeline of development activity is as follows:

  • Work on a new release is started; development activity is moderate and edits contain new features
  • Midway through development, feature additions are slowed as bug fixes start to gain priority over new features
  • "Feature freeze" takes place, in which the new release is nearing public distribution and only bug fixes may be added, rather than new features, as to get the proposed release bug-free

While there are occasionally some exceptions, such as new features being added during a feature freeze, the above is the general plan. A new release usually comes out around one year from the previous release, with the exception of a month before or after.

[edit] Compilation

BZFlag supports compilation using GCC, Visual C++ 7.1 and later, and MinGW. Project files and other necessary compilation files for the above IDEs are distributed along with the official source packages and from the SVN repository. Other compilers can be used, but these are not officially supported.

[edit] IRC

Developers have created an IRC channel at irc.freenode.net, under channel name #BZFlag. This was intended for general BZFlag related discussion but it is mainly used for development discussion.

Another official channel, #bzchat, was created for less serious talk and off-topic conversations.

A lesser-known BZFlag related channel, controlled by unofficial parties and having no relation to development discussion, is ##ducleague on irc.freenode.net, as well. This channel is for discussions involving the original BZFlag Ducati-Style league.

[edit] Notes

[edit] References

[edit] Maps

[edit] History

[edit] Flags

[edit] External links

Wikimedia Commons has media related to: