bzfs(6)

NAME
bzfs - BZFlag game server

SYNOPSIS
bzfs [-a velocity rotation] [-admsg message] [-b] [-badwords badwordfile] [-ban address[,...]] [-c] [-conf configfile] [-cr] [+f {good|flag-id}[{count}]] [-f {bad|flag-id}] [-fb] [-g] [-groupdb file] [-h] [-help] [-helpmsg file name] [-i interface] [-j] [-lagdrop warn-count] [-lagwarn time/ms] [-maxidle time/s] [-mo observer-count] [-mp {count|[rogue-count],[red-count],[green-count],[blue-count],[purple-count]}] [-mps {max-score}] [-ms shots] [-mts {max-score}] [-noudp] [-p port] [-passdb file] [-passwd password] [-pr port] [-public description] [-publicaddr address[:port]] [-publiclist url] [-q] [+r] [-r] [-reportfile filename] [-reportpipe command] [-requireudp] [+s flag-count] [-s flag-count] [-sa] [-sl id num] [-speedtol factor] [-srvmsg message] [-st time] [-sw count] [-synctime] [-t] [-tftimeout time-limit] [-time time-limit] [-timemanual] [-tk] [-tkkr percent] [-ttl ttl] [-userdb file] [-version] [-world world-file]

DESCRIPTION
Bzfs is the server for BZFlag, and it must be running to play. It can be run on any system on the network (including a player's system or one without graphics). Terminating the server terminates the game in progress.

  Options

    -a velocity rotation
        Enables inertia and sets the maximum linear and angular accelerations. The units are somewhat arbitrary so you'll have to experiment to find suitable values. The values must be non-negative and higher values yield greater inertia.

    -admsg message
        Define a message which will be broadcast to all players every 15 minutes.

    -b  When -c is supplied, this option randomly rotates the buildings.

    -badwords badwordfile
        Specify a file that contains bad words that when used in messages get replaced with *'s.

    -ban address[,...]
        Prohibits connections from the listed addresses. Trailing 255 bytes are treated as mask bytes.

    -c  Enables the capture-the-flag style game. By default, the free-for-all style is used.

    -conf configfilename
        Specifies the name of a configuration file to be used to set all of the bzfs options, rather than setting them on the command line.

    -cr Enables the capture-the-flag style game with random map. By default, the free-for-all style is used.

    +f {good|flag-id}[{count}]
        Forces the existence of the given flag. If specified multiple times for the same flag-id, then that many flags will appear. The good argument is equivalent to specifying +f once for each kind of good flag. The optional {count} parameter allows the specification of multiple flags of the same type. Note that the curly braces are required.

    -f {bad|flag-id}
        Disallows random flags of the given type. Required flags given by the +f option are still provided. The bad argument is equivalent to specifying -f once for each kind of bad flag.

    -fb Allow flags on box buildings.

    -g  Quit after serving one game.

    -groupdb file
        Load groups from file

    -h  Buildings are given random heights.

    -help
        Shows a help page and lists all the valid flag id's.

    -helpmsg file name
        Create a help message accessible by /help name, which prints the contents of file. Restricted to 10 lines per help message.

    -i interface
        Server will listen for and respond to ``pings'' (sent via multicast) on the given interface. The server uses the first multicast enabled interface by default. Clients use this to find active servers on the network. This is also the TCP/UDP/IP address the server will listen on.

    -j  Allows jumping.

    -lagdrop warn-count
        Kicks players after warn-count lag warnings.

    -lagwarn time/ms
        Send warnings to players that lag more than time.

    -maxidle time/s
        Kick players that did not play longer than time seconds. Pausing players are not kicked. If a player uttered a word recently, he will be kicked after thrice the given time.

    -mo observer-count
        Sets the maximum number of observers; defaults to 3

    -mp {count|[rogue],[red],[green],[blue],[purple]}
        Sets the maximum number of players, total or per team. A single value sets the total number of players allowed. Five comma separated values set the maximum for each team. If a count is left blank then no limit is set for that team, except for the limit on the total number of players. Boths forms may be provided.

    -mps max-score
        Sets a maximum score for individual players. The first player to reach this score is declared the winner and the game is over.

    -ms shots
        Allows up to shots simultaneous shots for each player. This is 1 by default.

    -mts max-score
        Sets a maximum score for teams. The first team to reach this score is declared the winner and the game is over.

    -noudp
        Do not use a parallel UDP channel for player communication.

    -p port
        Listen for game connections on port instead of the default port. Use -help to print the default port.

    -passdb file
        Load passwords from file

    -passwd password
        Specify a server administrator password for use in remote administration such as /kick messages.

    -pr port
        Listen for reconnects on port. The current bzflag protocol is a little braindead in that it requires clients to reconnect to another port after having registered on the main port. Both this and the main port must be open for incoming TCP connections.

    -public description
        Advertise this server on the internet with the given description. By default, a server will respond to broadcast or multicast queries, allowing clients to find servers on the local subnet or accessible through multicast routers. However, this doesn't allow clients to find servers not accessible via multicast. The -public option causes the server to register itself with a bzfls server, which clients can query to get a list of bzfs servers.

    -publicaddr address[:port]
        Advertise this server with the given address and port. Only has an effect when used with -public. Normally a server advertises itself at the local address and port. Some servers are not accessible from the internet at this address (for example servers behind a firewall using bzfrelay). Use this option to specify the address and/or port that internet users should use to access this server.

    -publiclist url
        Advertise this server on the bzfls servers listed at url. Only has an effect when used with -public. A built-in url is used by default. The BZFlag clients use the same built-in url so, by default, clients will see public servers automatically. See bzfls for a description of the format of url.

    -q  If specified, the server will not listen for nor respond to ``pings''. BZFlag sends out these pings to give the user a list of available servers. This effectively makes the server private, especially if the -p option is also used.

    +r  Makes most shots ricochet. Super bullets, shock waves, and guided missiles do not.

    -r  Allows rogues to join the game. By default, no rogue players are allowed.

    -reportfile filename
        Write messages to the server admin written using the /report command to this file. If neither -reportfile or -reportpipe is used the /report command will be disabled.

    -reportpipe command
        Pipe messages to the server admin written using the /report command to this program or shell command. See -reportfile.

    -requireudp
        Require clients to use parallel UDP. If players fire before opening a UDP channel, kick them off the server.

    +s num-flags
        The server will have an extra num-flags random super flags available at all times. The -f option can be used to restrict which types of flags will be added. Required flags given by the +f option are not included in the num-flags total.

    -s num-flags
        The server will have up to num-flags random super flags available at any time. The -f option can be used to restrict which types of flags will be added. Required flags given by the +f option are not included in the num-flags total.

    -sa Antidote flags are provided for players with bad flags.

    -sl id num
        Restrict flag id to num

    -speedtol factor
        Override the default speed auto kick factor. The factor should not be less then 1.0.

    -srvmsg message
        Define a server welcome message.

    -st time
        Bad flags are automatically dropped after time seconds.

    -sw count
        Bad flags are automatically dropped after count wins. Capturing a team flag does not count as a win.

    -synctime
        Forces all clients to use the same time of day. The current time is determined by the server's clock. This disables the + and - keys on the clients.

    -t  Adds teleporters to the game.

    -tftimeout time-limit
        If the last player in a team leaves while someone else is carrying the team flag, the team flag will not reset until it is captured, or until the player drops it and it is left alone for some time. This option specifies the number of seconds that the flag should be left alone before it is reset. The default value is 30.

    -time time-limit
        Sets a time limit on the game to time-limit. The game will be stopped time-limit seconds after the first player connects.

    -timemanual
        When using -time, the countdown will start when the first player joins. With -timemanual, the countdown has to be started manually using the /countdown command. This is useful for matches.

    -tk Changes the default behaviour where a player dies when he kills a teammate. When using this option, he will just get a -1 score penalty for the kill but stay alive.

    -tkkr percent
        Kicks players whose team killing to normal kill ratio is greater than percent [1-100]. A start up grace period is given to players.

    -ttl time-to-live
        Sets the maximum number of hops a ``ping'' reply will take. This effectively limits the range of the server in the network. Clients more than time-to-live hops away will not receive notification of the server's existence.

    -userdb file
        Load group associations from file

    -version
        Prints the version number of the executable.

    -world world-file
        Reads a specific world layout for the game map.

  Notes
The server uses nearly zero CPU time when nobody is playing, and even during a game the server uses very little CPU, so it's not a burden on the system to leave one running and it won't interfere with a player using the same system (except on Windows 95, which really sucks at multitasking). The server will continue to run until terminated. If a game is in progress when the server goes down, all players will be kicked off and the game will be aborted without warning. The server resets itself when all players have quit. All players must quit to reset the server when a game is over (because of a score or time limit).

The following game styles are recommended starting points.

    -c [-b]
        Basic capture-the-flag game. It teaches teamwork and dogfighting skills.

    -r -s -t
        Free-for-all with superflags and teleporters. Rogues are allowed. Teaches players how to use superflags and teleporters for maximum effect. You may want to allow players to drop bad flags with any of -sa, -st, and -sw.

Notice that the maximum number of shots for these styles is one. Having only one shot greatly increases playability and learning speed. Multiple shots decrease the required skill level and make it virtually impossible for even a skilled player to avoid getting shot for any length of time. More experienced players will still dominate the game, but beginners will have an easier time making kills.

  Networking
Communication between the server and clients (i.e. between bzfs and bzflag) during a game is via TCP. Use the -help option to get the server's default port. If there's a firewall between the server and client, the firewall must accept connections from the client to this port and forward them to the server. See bzfrelay for a BZFlag firewall relay.

Clients can search for servers by sending and receiving multicast UDP packets. For a client to discover a server, there must be a multicast route between them with fewer hops than the default TTL (time-to-live) which is 8 or whatever the TTL was set to using the -ttl option to bzflag. However, a client can still connect to a server beyond the multicast TTL. Clients can also find servers advertised using -public by querying bzfls servers.

Game information is relayed through the server. Some communication between clients, such as position and orientation information, is normally sent via UDP packets. Other data, like flag grab and kill messages, are sent to the server via TCP. The setver then turns around and broadcasts these packets to all players. Since being in a game implies connection to the server, all players are guaranteed to get all messages sent via TCP. But the multicast UDP packets may be discarded. If other players can see your tank in the game but it never appears to move and shots go through it, chances are high that your UDP connection is not working. Try using TCP only on servers that allow it.

GENERAL SERVER COMMANDS

/lagstats
    Lists network delays by player. Example:
    MrApathyCream 335ms (5)
    Gerbol 210ms (8)
    captain_macgyver 155ms (12)

/idlestats
    Displays the idle time in seconds for each player. A player is idle when
    he is dead.
    MrApathyCream: 0s
    Gerbol: 80s
    captain_macgyver: 13s

/flaghistory
    Lists what flags players have grabbed in the past. Example:
    MrApathyCream: (<-) (->) (O) (CB) (M) (B) (JM) (WA)
    Gerbol: (L) (GM) (L) (GM) (CL) (ST) (GM) (L)
    captain_macgyver: (SB) (SW)

/password {password}
    Attempt to gain administrator status Example:
    /password supersecretpassword
    You are now an administrator!

/report {message}
    Write a message to the server administrator. Example:
    /report I like this map!

SERVER ADMINISTRATIVE COMMANDS

/shutdownserver
    Stop serving BZFlag on this server

/superkill
    Kick all players off the server

/gameover
    Ends the current game

/flag reset {unused}
    Repositions flags. If unused is specified, flags carried by tanks are not effected.

/flag up
    Removes all flags from the game

/flag show
    Shows all flags with information Example:
    0: p:-1 r:1 g:1 1:V s:1 p:159.1x43.2x0.0
    1: p:2 r:1 g:1 1:SW s:1 p:209.1x143.2x10.0
    2: p:-1 r:1 g:3 1:L s:1 p:-29.1x301.2x0.0

/kick {playerName}
    Kick a named player off the server.Example:
    /kick Gerbol
    You were kicked off the server by MrApathyCream

/playerlist
    List player names and IP addresses. Example:
    /playerlist
    [0]MrApathyCream: 35.23.65.44:4808 udp id
    [1]Gerbol: 130.123.1.55:4909 udp id
    [2]captain_macgyver: 15.32.122.51:3201 udp id

/ban {ipList} {mins}
    Ban players using the specified IPs for certain length of time from using this server. Example:
    /ban 35.23.43.66 2
    bans player with specific ip for 2 minutes
    /ban 35.23.*.*,47.23.17.*
    bans all ips in this range forever

/banlist
    List all of the IPs currently banned from this server. Example:
    /banlist
    IP Ban List
    ------------
    35.23.43.66
    47.23.17.*

/countdown
    Starts the countdown sequence for a timed game. Example:
    /countdown

/lagwarn
    Dynamic change the maximum allowed lag time. Example:
    /lagwarn 300

USER MANAGEMENT
Generally, you start with empty files for the user and password databases. These are maintained by the server, and modifyable through server commands. You will want to specify a groups file that has whatever specific groups you care to have on your server. These are laid out with one line in the file per group, using the following format: GROUP_NAME: perm1 perm2 perm3 ... permN Group names cannot have spaces, quotes, or other special characters in them. This would be a sample line defining a "cop" group: COPS:KICK BAN BANLIST UNBAN INFO The server will automatically create two groups if they are not specified in the groups file: DEFAULT and ADMIN. ADMIN has ever permission possible (similar to granting admin powers via /password). DEFAULT allows /lagstats, /idlestats, /flaghistory and /report. Once the server is running, users can register their callsigns and admins can set their group memberships. Users can use any command that their permissions allow. Every user, registered or not, is part of the DEFAULT group. When a user identifies, they become part of the REGISTERED group. The available permissions are as follows: IDLESTATS /idlestats
LAGSTATS /lagstats
FLAGMOD /flag
FLAGHISTORY /flaghistory
LAGWARN /lagwarn
KICK /kick
BAN /ban
BANLIST /banlist
UNBAN /unban
COUNTDOWN /countdown
ENDGAME /endgame
SHUTDOWNSERVER /shutdownserver
SUPERKILL /superkill
PLAYERLIST /playerlist
INFO not implemented
LISTPERMS not implemented
SHOWOTHERS not implemented
REMOVEPERMS /removegroup
SETPERMS /setgroup
SETALL use of all set/remove commands
SETPASSWORD not implemented

/register {password}
    Register your current callsign to the specified password. Passwords must be at least 3 characters long, and the callsign may not contain quotes or other non-alphanumeric/space characters

/identify {password}
    Log in to a registered callsign

/setpass {password}
    Changes your password

/ghost {callsign} {password}
    Kicks off an impersonating player or ghost

/grouplist
    Lists the available user groups

/groupperms
    Lists the permissions for each group

/showgroup {callsign}
    Lists the groups that a registered user is a member of

/setgroup {callsign} {group}
    Add a user to a group

/removegroup {callsign} {group}
    Remove a user from a group

/reload
    Reloads the user, group, and password files (for synchronization between multiple servers on the same machine)

/deregster [callsign]
    With an argument, it deregisters another user's callsign. Without, it removes your own registration.

SEE ALSO
bzflag(6), bzfls(6), bzfrelay(6), mrouted(1)