## NAME

BZFlag - a tank battle game

## SYNOPSIS

bzflag [-badwords filterfile] [-config filename] [-configdir directoryname] [-d | -debug] [-date mm/dd/yyyy] [-dir | -directory directory] [-e | -echo] [-ea | -echoAnsi] [-h | -help | --help] [-latitude latitude] [-list list-server-url] [-locale locale] [-longitude longitude] [-m | -mute] [-motd URL] [-multisample] [-nolist] [-nomotd] [-notime] [-solo number-of-robots] [-team {automatic | red | green | blue | purple | rogue}] [-time hh:mm:ss] [-v | -version | --version] [-view {normal | stereo | stacked | three | anaglyph}] [-window width x height[{+|-}x{+|-}y]] [-zbuffer {on | off}] [[callsign[:password]@]server[:port]]

## DESCRIPTION

BZFlag is a 3D multi-player tank battle game that allows users to play against each other in a networked environment. There are five teams: red, green, blue, purple and rogue (rogue tanks are black). Destroying a player on another team scores a win, while being destroyed or destroying a teammate scores a loss. Rogues have no teammates (not even other rogues), so they cannot shoot teammates and they do not have a team score.

There are three main styles of play: capture-the-flag, free-for-all, and rabbit-chase. In capture-the-flag, each team (except rogues) has a team base and each team with at least one player has a team flag. The object is to capture an enemy team's flag by bringing it to your team's base. This destroys every player on the captured team, subtracts one from that team's score, and adds one to your team's score. In free-for-all, there are no team flags or team bases. The object is simply to get as high a score as possible. In rabbit-chase, the lead player is chosen as the target for all other players. When the rabbit (target) is destroyed, the live player with the next highest score becomes the rabbit. The object is to remain the rabbit for as long as possible. The rabbit is marked as a white tank.

## Joining a Game

To get quickly started, select the "Join Game" menu in the BZFlag client using the arrow keys on your keyboard. Choose the "Select a Server" link and pick one of the servers near the top of the menu. This should take you back to the "Join Game" menu where you should then provide a callsign. Select the "Connect". Within a few seconds you should be on that server ready to play.

BZFlag includes a global registration system that allows players to register a callsign that defines them uniquely on the BZFlag network. Some servers require registration for all users, some require it to obtain administrative abilities. If you attempt to use a callsign that is already registered, you may be denied access to a server. See https://forums.bzflag.org/ for details regarding callsign registration and to check on available names. Once registered, you will be able to provide your password in the "Join Game" menu and have it used for authentication. You are encouraged to register your callsign.

There are generally public BZFlag servers running around the clock all around the world, available over the Internet. Similarly, private servers can be set up for running local network games. See the bzfs manual page (bzfs.6) for details on starting a new server, public or private.

## Options

-badwords filterFile
  Specify a file containing bad words to be replaced with !@#$%^&* characters when they appear in chat.
-d or -debug
  Adds some diagnostic output. Can be specified multiple times to increase verbosity.
-dir or -directory directory
  Looks for data files in directory first. This defaults to a directory named data in the current directory. If not found there, the game looks for data files in the current directory, then in the default installation location @INSTALL_DATA_DIR@.
-config
  Specify the configuration file to load. The name is relative to the default configuration directory. This is usually only used by developers.
-configdir
  Specify the configuration directory to use. This will be the default config directory used by this instance of the game. This is really only needed if you can not use the default directory.
-date mm/dd/yyyy
  Specifies the date for positioning celestial objects. This option is available only when bzflag is compiled with debugging enabled.
-e, -echo
  Copies all message window output to the shell on *nux and OSX, to stdout.txt on windows
-ea, -echoAnsi
  Copies all message window output like -echo preserving the ANSI color coding on *nix, same as -echo on windows.
-h, -help, --help
  Prints a concise list of the bzflag command line options.
-latitude latitude
  Uses latitude when computing celestial object positions.
-list url
  Look for list servers using url. A built-in url is used by default (the same url is the default for bzfs). If url is default then the url is reset to the built-in url (the url is remembered across invocations of bzflag). list servers keep a list of bzfs servers accessible from the internet and are queried when using the Find Server menu.
-locale locale
  Set the locale used to display messages, menus, hud alerts, etc.
-longitude longitude
  Uses longitude when computing celestial object positions.
-m, -mute
  Disables sound.
-motd URL
  Specify an alternate URL for the message of the day displayed when bzflag starts. https://www.bzflag.org/motd.php is the default. See -nomotd.
-multisample
  Uses a multisample buffer for rendering. If multisampling isn't available then the application will terminate.
-nolist
  Disables list server querying. See -list.
-nomotd
  Disables queries for the message of the day when bzflag starts.
-notime
  Removes a previously set fixed time for celestial object positions. See -time.
-solo number-of-robots
  When you join a game, you'll also cause number-of-robots robots to join too. This is an experimental option and the robots are extremely stupid players. Robots are added to teams at random.
-team team-name
  Chooses the player's team. If there are no team positions available and the team-name is set to be automatic, the player will try to join as an observer.
-time hh:mm:ss
  Specifies the local time used for positioning celestial objects, which will remain fixed rather than move through the sky as the day advances. Use -notime to undo this setting.
-v, -version, --version
  Prints the version number of the executable.
-view {normal | stereo | stacked | three | anaglyph}
  Chooses one of the possible display options. Normal will render a single view to the entire screen. Stereo will try to allocate a stereo (in-a-window) capable buffer and then draw a single view in stereo. Your system must support stereo-in-a-window buffers. Three will render the front view to the upper right quadrant of the display, a left view to the lower left quadrant, and a right view to the lower right quadrant. This is intended for systems capable of driving multiple monitors from various areas of the display surface, yielding a wrap around view. stacked will render the two right eye view on the upper half of the display and the left eye on the lower half. anaglyph supports red-cyan stereo viewing glasses. Note that setting an unsupported view option will often lead to BZFlag not running successfully. To correct this, run with -view normal.
-window width x height
  Runs the application in a window instead of full screen. Specify the width and height of the window after the option.
-zbuffer {on | off}
  When off is chosen the game will not attempt to allocate a depth (z) buffer and will use a different rendering technique for hidden surface removal. Some systems may be capable of using a higher screen resolution if a depth buffer isn't allocated.
[callsign[:password]@]server[:port]
  Specifies the callsign you want, and the host running the bzfs server. Multiple independent games can be run on a single network, or even on different ports on a single computer. Which server and port you choose decides which game you enter. The callsign and the port are optional. If you don't specify a port the standard server port will be used, and if you don't specify a callsign the callsign used for the previous game is used. If that cannot be found then bzflag will prompt for a callsign when joining a game.

## Controls

Tanks are controlled by moving the mouse within the large yellow box in the main view. When the mouse is inside the small yellow box, the tank is motionless. The large box is the limit of the tank's speed.

Shots are fired by pressing the R left mouse button. The type of shot fired depends on what flag the tank has. Normal shots last about 3.5 seconds. Reloading also takes 3.5 seconds for normal shots.

Pressing the R middle mouse button drops a flag. Nothing will happen if the tank has no flag or is not allowed to drop the flag for some reason (e.g. it's a bad flag). Flags are picked up by driving over them. A dropped flag gets tossed straight up; it falls to the ground in about 3 seconds.

Pressing the R right mouse button identifies the closest player centered in the view. If your tank has the guided missile super-flag, this will also lock the missile on target. However, the target must be carefully centered for the missile to lock.

When the server allows jumping or if the tank has the jumping flag, the R Tab key jumps. Tanks can jump onto buildings, however there is no way to shoot downward (or upward) with a regular shot. The guided missile and the shock wave are two ways of destroying a tank on or from a building.

The current radar range can be changed by pressing the R 1, R 2, or R 3 keys above the alphabetic keys for low, medium, and long range, respectively. The R f key toggles the flag help display, which describes the flag in the tank's possession. Displaying help does not pause the game.

The R Pause key pauses and resumes play. When paused, the tank cannot be destroyed nor can its shots destroy other players. The reload countdown is suspended and the radar and view are blanked when paused. A paused tank has a transparent black sphere surrounding it. Since a paused tank is invulnerable a player could cheat by pausing just before being destroyed, so there's a brief delay before the pause takes effect. This delay is long enough to make pausing effectively useless for cheating. Pressing R Pause before the pause takes effect cancels the pause request.

The R Delete key initiates a self destruct sequence. You will see a countdown that can be stopped by pressing R Delete once more. Otherwise, you tank will self destruct. This can be useful if your tank gets stuck and there is no other tank around to shoot you.

The list of players and scores is displayed when your tank is paused or dead. Pressing the R s key toggles the score display when alive and not paused.

The R b key toggles binoculars, which gives a close up view of distant objects. The R 9 key toggles Otto, the automatic pilot, on and off. R t key toggles the frame rate display and the R y key toggle the frame time display. The time of day can be changed with the R plus and R minus keys, which advance and reverse the time by 5 minutes, respectively. The time of day in the game is initialized to the system's clock. In addition, the latitude and longitude are used to calculate the positions of celestial objects.

The R Esc key shows the game menu. Use the R Enter and arrow keys to navigate the menu and the R Esc key to return to the previous menu or hide the main menu. The menus allow you to start a new server, join a game, leave a game and enter another, change the rendering options, change the display resolution, change the sound volume, remap the meanings of keys, browse online help, and quit the game.

The display resolution is not always available for changing. If it is, use the R t key to test a selected resolution; it will be loaded for a few seconds and then the previous resolution restored. Press the R Enter key to permanently select a new resolution. When you quit the game, the resolution is restored to what it was before the game started.

Options are recorded between game sessions in the .bzf/<version>/config.cfg file in the user's home directory. This file has a simple name/value pair format. This file is completely rewritten by the game after each session.

You can send typed messages to other players by pressing the R m or R n keys. The R m key will send a message to your teammates only. Rogue players cannot send these messages. The R n key will send a message to all the other players. After pressing the key, just type your message and press enter or Control-D. To cancel a message, you can enter a blank message or press Delete, Escape, or Control-C. Be careful with the Escape key; pressing Escape once will cancel the message, pressing it again will show the main menu. Backspace will delete the most recently typed character. The Tab key doesn't add a tab to the message but instead causes the tank to jump (as usual). You can also send a direct message to a single player by pressing the R , or R . keys. The R , key will send your message to your 'nemesis', i.e. the last player who killed you or was killed by you. The R . key will send a private message to another player. You can choose the recipient by using the left and right arrow keys. R o toggles the quick-admin interface. Use the arrow keys to select a command, and then fill in the necessary parameters

## Scoring

An individual's score is the difference between that player's wins and losses. A win is scored for each enemy tank destroyed. A loss is scored for each teammate destroyed and for each time the player is destroyed. The score sheet displays each player's score and the number of wins and losses.

A team's score is calculated differently depending on the game style. In the capture-the-flag style, the team score is the number of enemy flags captured minus the number of times the team's flag was captured. Capturing your own flag (by taking it onto an enemy base) counts as a loss. In the free-for-all style, the team score is sum of the wins of all the players on the team minus the sum of the losses of all the players on the team. In the rabbit-chase style, scoring is similar to free-for-all.

The score sheet also lists the number times you have destroyed or been destroyed by each other player under the Kills heading. This lets you compare your one-on-one performance against other players.

## Teleporters

The server can be configured to place teleporters in the game. A teleporter is a tall black transparent object that instantaneously moves any object (tanks and shots) passing through it to some other teleporter. The teleporter connections are fixed for the entire game. In the capture-the-flag style the connections are always the same. In the free-for-all style the connections are random and reversible (going back through where you come out puts you back where you started).

Each side of a teleporter teleports independently of the other side. However, it's possible for each side to go to the other. This is a through-teleporter and it's almost as if it weren't there. It's also possible for a side to teleport to itself. This is a reverse-teleporter. Shooting at a reverse teleporter is likely to be self-destructive. Shooting a laser at a reverse teleporter is invariably fatal.

## Radar

The radar is displayed on the left side of the control panel. It provides a satellite view of the game. Buildings and the outer wall are light blue. Team bases are outlined squares in the team colors. Teleporters are short yellow lines. Tanks are dots the in the tank's team color, except for rogues which are yellow. The size of a tank's dot is a rough indication of the tank's altitude: higher tanks have larger dots. Flags are small crosses. Team flags have the team color while super-flags are white. Shots are small white dots (except laser beams which are line segments and shock waves which are circles).

The tank always appears in the center of the radar and the radar display rotates with the tank so that forward is always up. There's a small tick mark indicating forward. The left and right extremes of the current view are represented by a yellow V whose tip is at the center of the radar. North is indicated by the letter N.

## Heads Up Display

The heads-up-display, or HUD, has several displays. First, there are two boxes in the center of the view. As explained above, these delimit the ranges for the mouse. These boxes are yellow when you have no flag. Otherwise they take the color of the flag you're holding (white for superflags).

Above the larger box is a heading tape showing your current heading. North is 0, east is 90, etc. If jumping is allowed, an altitude tape appears to the right of the larger box.

Small colored diamonds or arrows may appear on the heading tape. An arrow pointing left means that a particular flag is to your left, an arrow pointing right means that the flag is to your right, and a diamond indicates the heading to the flag by its position on the heading tape. In capture-the-flag mode a marker in your team's color is always present, showing you the direction to your team's flag. A yellow marker shows the way to the antidote flag (when you have a bad flag and antidote flags are enabled).

At the top of the HUD are several text readouts. At the very top on the left is your callsign and score, in your team's color. At the very top on the right is the name of the flag you're holding (or nothing if you have no flag). In the center at the top is your current status: ready, dead, sealed, zoned, or reloading. If you have a bad flag and shaking time is enabled and your status is ready, the status displays how much time is left before the bad flag is shaken. When reloading, the time until you're reloaded is displayed. A tank is sealed when it has the oscillation overthruster flag and any part of the tank is inside a building. A tank is zoned when it has the phantom zone flag and has passed through a teleporter. When there's a time limit on the game, the time left in the game is displayed to the left of the status.

## Flags

Team flags are supplied by the server in the capture-the-flag style game. While at least one player is on a team, that team's flag is in the game. When captured, the flag is returned to the team's base. If the flag is dropped in a Bad Place, it is moved to a safety position. Bad Places are: on top of a building or on an enemy team base. The flag can be dropped on a team base only by a player from a third team; for example, when a blue player drops the red flag on the green base.

A team flag is captured when a tank takes an enemy flag onto its base or when a tank takes its flag onto an enemy base (even if there's no one playing on that team). You must be on the ground to capture a flag.

The server can be configured to supply a fixed or random set of super-flags. These flags are white and come in many flavors. However, you cannot tell what a super-flag is until it's picked up. There are two broad categories of super-flags: good and bad. Good super-flags may be dropped and will remain for up to 4 possessions. Bad super-flags are sticky -- in general, they cannot be dropped. The server may provide a yellow antidote flag. Driving over it will release the bad flag. The server may also allow a timeout and/or a number of wins to shake the flag. Scoring the required number of wins, surviving the required amount of time or being destroyed will automatically drop the flag. Bad flags disappear after the first possession.

Here is a brief description of each good superflag with the flag's code in parentheses:

High Speed (V)
  Boosts top speed by 50%.
Quick Turn (QT)
  Boosts turn rate by 50%.
Agility (A)
  Improves a tank's dodging capabilities.
Oscillation Overthruster (OO)
  Let's the tank go through buildings. You cannot back up in or into a building, nor can you shoot while inside.
Rapid Fire (F)
  Increases shot speed and decreases range and reload delay.
Machine Gun (MG)
  Increases shot speed and dramatically decreases range and reload delay.
Guided Missile (GM)
  Shots guide themselves when locked on. The missile can be retargeted at any time during its flight (with the right mouse button). This allows the player some control over the missile's steering.
Laser (L)
  Shoots a laser, with effectively infinite speed and range. Just point and shoot. The binoculars are handy for lining up distant targets. The downside (you knew it was coming) is that the reload time is doubled.
Ricochet (R)
  Shots reflect off walls. It is exceptionally easy to kill yourself with this flag.
Super Bullet (SB)
  Shots can go through buildings (possibly destroying a tank with the oscillation overthruster flag) and can also destroy (phantom) zoned tanks.
Stealth (ST)
  Tank becomes invisible on radar but is still visible out-the-window.
Cloaking (CL)
  Tank becomes invisible out-the-window but is still visible on radar.
Invisible Bullet (IB)
  Shots are invisible on radar (except your own). They are visible out-the-window. Sort of stealth for shots.
Tiny (T)
  Tank becomes much smaller and harder to hit.
Narrow (N)
  Tank becomes paper thin. It's very hard (but not impossible) to hit a narrow tank from the front or back. However, the tank is as long as usual so hitting it from the side has normal difficulty.
Shield (SH)
  Getting shot while in possession of this flag simply drops the flag (instead of destroying the tank). Since the flag may not disappear you may want to wait around for it to fall to the ground so you can grab it again, but, be warned, the shield flag flies for an extra long time (longer than the normal reload time).
Steamroller (SR)
  Tank can destroy other tanks by driving over them (but you must get quite close).
Shock Wave (SW)
  Tank doesn't fire shells. Instead it sends out a shock wave in all directions. Any tank caught in the wave is destroyed (including tanks on or in buildings).
Phantom Zone (PZ)
  Driving through a teleporter phantom zones the tank. A zoned tank cannot shoot, but can drive through buildings and cannot be destroyed except by a Super Bullet or a Shock Wave (or if the team's flag is captured).
Genocide (G)
  Destroying any tank on a team destroys every player on that team.
Jumping (JP)
  Allows the tank to jump. You cannot steer while in the air.
Identify (ID)
  Displays the identity of the closest flag in the vicinity.
Masquerade (MQ)
  You tank looks like a teammate when viewed out of the window. Bullets, radar and targeting reveal your true identity.
Burrow {BU}
  You tank burrows into the ground up to your muzzle, making you impervious to normal shots, as they sail above you. However your tank controls are sluggish, and anyone, no matter what flag they have, can crush you like.
Seer (SE)
  See Stealthed, Cloaked and Masqueraded tanks as normal, as well as Invisible Bullets.
Thief (TH)
  Tank is small and fast, when you shoot an opponent, he is not killed, but instead, you steal his flag.
Useless (US)
  It's useless!
Wings (WG)
  Tank can drive around in the air, and may be able to jump multiple times. This can be useful when jumping or falling.

A brief description of each bad superflag with the flag's code in parentheses:

Colorblindness (CB)
  Prevents tank from seeing any team information about other tanks. You have to be careful to avoid shooting teammates.
Obesity (O)
  The tank becomes very large and easy to hit. It's so big that it can't fit through teleporters.
Left Turn Only (<-)
  Prevents the tank from turning right.
Right Turn Only (->)
  Prevents the tank from turning left.
Forward Only (FO)
  Prevents the tank from going backwards.
Reverse Only (RO)
  Prevents the tank from going forward.
Momentum (M)
  Gives the tank a lot of inertia.
Blindness (B)
  Blanks the out-the-window view. The radar still works. It is effectively impossible to detect any tank with Stealth; shooting a Stealth with Blindness is the stuff legends are made of.
Jamming (JM)
  Disables the radar but you can still see.
Wide Angle (WA)
  Gives the tank a fish eye lens that's rather disorienting.
No Jumping (NJ)
  Tank is not allowed to jump.
Trigger Happy (TR)
  Tank can't stop shooting. Watch out for that ricochet.
Reverse Controls (RC)
  Tank driving controls are reversed from their usual behavior.

## Observing

If a server is full or if you just want to watch a battle without interfering in it, you can use the observer mode. To join a server as an observer, select R Observer as your tank's team. The maximum number of observers can be restricted by the server admin, so you might still not be able to join a full server.

When in observer mode, you can freely roam the world. Using the arrow keys you can rotate the camera in every direction. Holding shift and using the arrow keys moves the camera left, right, forward or back. Pressing the up or down arrow while holding the R ALT key will change the camera's altitude. The R F9 and R F10 keys change the camera's focal lengths, giving a zoom effect. The R F11 key will reset the zoom. Pressing R l lets you toggle the display of tank labels.

Repeatedly pressing R F8 cycles through different roaming modes: free, tracking, following, first person (driving with) and tracking team flag. In tracking mode, the camera will automatically look at a tank. You can cycle through available tanks with the R F6 and R F7 keys. In follow mode, the camera is positioned right behind the targeted tank, whereas you actually look from within the tank when using first person mode. The last mode, track team flag is only available in capture-the-flag games and will track the team flags. Again, use R F6 and R F7 to choose which flag to track. One special option that can be used with follow, tracking, and first person modes is that you can choose to do it with the winning tank. This is selected by cycling through the tanks until you see the winner option. In this mode, you will always be engaged with whoever has the best score (and is alive). The default is drive with winner mode.

## User Commands

The following commands can be executed by sending a message to all and using these strings as the message

/bind key press action
  Bind a key press to an action. press can be up, down or both
/cmds
  Show a list of all client and server commands
/debug [level]
  Show or set the debug level to level
/diff
  List all BZDB server variables that are not set to the default value
/dumpvars
  Dump a list of all local variables and their values to the standard output
/forceradar
  Force the radar to be displayed (only works for observers)
/highlight pattern
  Highlight all messages containing pattern on the console
/localset variable [value]
  Read a local variable or set it to value
/quit
  Exit the game
/retexture
  Reload the textures of the game
/roampos {reset|send|angle|x y z [theta [phi [zoom]]]}
  Manipulate the observer camera (only useful in Roaming and Tracking modes). Without arguments, it shows a usage message and the current camera location. reset resets the camera's location to the center of the map and send sends information about the camera to the server. angle moves the camera outside the map at a certain angle, looking towards its center. x, y and z are used to set the camera's location, theta defines the camera's horizontal angle, phi defines its vertical angle and zoom sets the camera's zoom level. All angles are defined in degrees.
/savemsgs [-s] [-t]
  Save all messages to a file in your config directory. If -s is provided, coloring data are stripped. If -t is provided, timestamps are added to the messages.
/saveworld [-g] [-m] [-o] filename
  Save the current world to filename. Specify -g to prevent the creation of groups, -m to save some primitives as meshes and -o to create a WaveFront OBJ file instead of a BZW one.
/silence playerName
  Do not display any message coming from player with playerName name
/unsilence playerName
  Reshow messages coming from player with playerName name

## FILES

~/.bzf/<version>/config.cfg
  Stores options between game sessions.

## SEE ALSO

bzadmin(6), bzfs(6), bzw(5)