Provided by: bzflag-server_2.4.2+ds1-5build1_amd64 bug

NAME

       bzw - BZFlag world file format

DESCRIPTION

       The BZFlag world file format describes a world environment that is used by the BZFlag game
       server, bzfs.  X BZW file format

       The BZFlag world file format  describes  and  environment  that  includes  the  game  map,
       physical  world attributes, and automatic world weapons.  The map may contain a variety of
       "obstacles" like buildings, pyramids, and meshes.  These obstacles make up the world  that
       the  BZFlag  tanks  will  drive  around in.  Map attributes may be set to create worlds of
       various sizes, the default size is 800x800.

       Here is small example world:

       # simple world containing a box, pyramid, and mesh
       world
         name Simple World
         size 100.0
       end
       box
         position -20 -20 0
         size 10 20 10
       end
       pyramid
         position 20 20 0
         size 10 10 20
       end
       mesh
         vertex -10 0 0
         vertex 10 0 0
         vertex 0 10 0
         face
           vertices 0 1 2
         endface
       end

       The .bzw file is a plain text file with a relatively simple file format.   The  format  of
       this text file consists of any number of objects listed in any order (except that physics,
       textureMatrix, dynamicColor, and material must come before they are referenced)  separated
       by newlines and grouped into blocks of types. The list of world types consists of:
       world
       options
       waterLevel
       dynamicColor
       textureMatrix
       transform
       material
       physics
       define
       group
       mesh
       meshbox
       meshpyr
       arc
       cone
       sphere
       tetra
       box
       pyramid
       link
       teleporter
       base
       weapon
       zone

       Each  object  is  described  by  placing the type on one line, the word end on a following
       line, and a list of attributes for that object, one per line, in between.  The  exceptions
       to  the rule are define and face, which are concluded with enddef and endface.  Attributes
       may be listed in any order. Attributes have default values, and if that  is  good  enough,
       the attribute need not be listed.

       Words  are  always  specified  in lowercase. Line comments can be specified by placing a #
       sign at the start of the line.

       For documentation purposes, you can tag each object by adding a name attribute.  There  is
       no  set  limit to the number of times you may use any of the objects except for the world,
       options, and waterLevel objects, they can only  be  specified  once.  The  options  object
       contains command line arguments that are used to configure the server's game mode, but can
       not contain server specific options such as -p, -passwd, and -conf.

       In the following examples, the values are the defaults.

       The World object
       Header for the world.

       world
         name example_world
         size 400.0
         flagHeight 10.0
       end

       The Options object
       A world file interface for setting command line options for BZFS.

       options
         -set _tankSpeed 36
         -j +r -ms 3
         +f GM{5} +f SW{5}
       end

       The Water Level object
       Sets how high the water is, in a matter of units.

       waterLevel
         name example_waterlevel
         height -1.0 # anything below 0 turns it off
       end

       The Group Definition object
       Defines a group, which may include other group instances
       This does not place any objects into the world, a group instance must be used to  generate
       world objects from a group definition.

       define <example_groupdef>
         # You can add any object to a group definition,
         # except for the following types:
         #   textureMatrix
         #   dynamicColor
         #   material
         #   physics
         #   links
         #   weapon
         #   zone
       enddef

       The Group Instantiation object
       Instantiates a group, and possibly modifies subobjects

       group <example_groupdef>  # a valid group definition reference
         shift 0 0 0          # (repeatable)
         scale 1 1 1          # (repeatable)
         shear 0 0 0          # (repeatable)
         spin angle nx ny nz  # (repeatable)
                              # angle degrees about vector n
         team 0        # change all base colors within group
         tint 1 1 1 1  # hierarchically tints objects within this group
         drivethrough  # make all subobjects drivethrough
         shootthrough  # make all subobjects shootthrough
         ricochet      # make all subobjects ricochet
         phydrv example_phydrv     # reassign any valid physics drivers
         matref example_material # set material properties

                                   # (except for the color)
        matswap oldMat newMat #replace a given material in the instance
       end

       The Dynamic Color object

       dynamicColor
         name example_dyncol
         # there are 4 channels that can be modified:
         #   red, green, blue, alpha
         # there are 5 types of commands per channel:
         #   limits, sinusoid, clampUp, clampDown, sequence
         # except for "limits" and "sequence", the commands are repeatable
         # if a sequence is used, then clampUps and clampDowns have no effect
         # sequences can use three states (0, 1, 2).
         #   0 - equivalent to an active clampDown
         #   1 - equivalent to no clamps
         #   2 - equivalent to an active clampUp
         # if both clampUp and clampDown are active, the value is (min+max)/2
         # the sinusoid function starts at the max value
         # the sum of a channel's sinusoids is clamped between 0 and 1
         red limits 0 1               # min/max limits
         green sinusoid 0.1 0 0.25    # period, offset, weight
         blue clampUp 0.1 0 0.75      # period, offset, width
         alpha clampDown 0.2 0.5 0.5  # period, offset, width
         red sequence 0.0 0.0 2 0 1 1 2 0 ... # period, offset, list of states
       end

       The Texture Matrix object

       textureMatrix
         name example_texmat
         scale 0.0 0.0 1.0 1.0  # u/v freqs, u/v scales
         spin 0.0               # rotation freq
         shift 0.0 0.0          # u/v freqs
         center 0.5 0.5         # dynamic u/v center (for spin and scale)
         fixedscale 0.0 0.0     # time invariant u/v scale
         fixedspin 0.0          # time invariant rotation
         fixedshift 0.0 0.0     # time invariant u/v shift
       end

       Material Properties

       Material  properties may be set on several types of objects, including meshes, mesh faces,
       arcs, cones, spheres, and tetras. Here are the properties:

       material
         name example_material
         resetmat                  # restore default values
         matref material_name      # copy another material's properties
         ambient  0.2 0.2 0.2 1.0  # ambient color
         diffuse  1.0 1.0 1.0 1.0  # diffuse color (main color)
         color    1.0 1.0 1.0 1.0  # synonym for 'diffuse'
         specular 0.0 0.0 0.0 1.0  # specular color
         emission 0.0 0.0 0.0 1.0  # emission color
         shininess 0.0             # shininess (0.0 – 128.0)
         texture filename     # set working texture
         # - non-interlaced PNG
         # - http:// or ftp:// hyperlinks can be used  (no spaces)
         # - BZFlag default texture names can be used  (.png not required)
         addtexture filename  # add texture
         notextures           # specify that no textures are to be used
         notexalpha           # don't use the texture's alpha channel
         notexcolor           # the color is not applied to the texture
         # if a texture is specified, but not found, the default texture
         # will be used. if the default texture is also not available, then
         # the color will be used (untextured)
         spheremap            # use spherical texture coordinate mapping
         texmat -1            # texture matrix  (-1 for none)
         dyncol -1            # dynamic color  (-1 for none)
         noradar              # do not display on radar  (except normal mode)
         noshadow             # do not render shadows
         noculling            # do not cull by face winding  (double-sided)
         nosorting            # do not do front-to-back alpha sorting
         nolighting           # disable lighting
         alphathresh 0.0      # alpha thresholding value
         groupalpha           # sort translucent faces as a group
         occluder             # faces with this material will occlude
       end

       The Physics Driver object

       physics
         name example_phydrv
         linear  0.0 0.0 0.0  # x/y/z linear velocities
         angular 0.0 0.0 0.0  # rotation freq, x/y coordinates
         slide 0.0            # time until max velocity  (> 0.0 enables)
         death Message goes here.
         # the 'death' property requires a non-blank message
       end

       The Mesh object

       mesh
         name example_mesh
         # Material properties applied to a mesh apply to all faces
         # that follow the setting. Mesh faces will alter their own
         # properties without affecting the state of the mesh properties.
         # The same pattern is used to apply physics drivers.
         vertex 100 200 300  # add a vertex              (repeatable)
         normal 1.0 0 0      # add a normal              (repeatable)
         texcoord 0.1 0.75   # add a texture coordinate  (repeatable)
         inside 5.5 4.5 1.2  # add an inside point       (repeatable)
         outside 0 0 1000    # add an outside point      (repeatable)
         shift 0 0 0           # (repeatable)
         scale 1 1 1           # (repeatable)
         shear 0 0 0           # (repeatable)
         spin angle nx ny nz   # (repeatable)
         phydrv example_phydrv # assign a physics driver
         smoothbounce          # ricochets use normals
         noclusters            # render each mesh face individually
         face  # start a face   (repeatable)
           # the front-face winding is counter-clockwise
           vertices 1 4 0 3 5   # list of vertices (requires at least three)
           normals 2 6 0 4 7    # list of normals              (optional)
           texcoords 0 3 2 4 9  # list of texture coordinates  (optional)
           phydrv example_phydrv  # assign a physics driver
         endface  # end the face
         #
         #  This next element can be added to increase the rendering speed
         #  of the mesh object. If the client is capable of using this data,
         #  then it is used to draw the mesh instead of the face information.
         #
         drawInfo
           dlist                      # display list for all material sets
           decorative                 # older clients with not see this mesh
           angvel <degrees/sec>       # rotation about initial Z axis
           extents <minX> <minY> <minZ> <maxX> <maxY> <maxZ>
           sphere <x> <y> <z> <radiusSquared>
           corner <v> <n> <t>         (repeatable)
           vertex 0.0 0.0 0.0         (repeatable)
           normal 0.0 0.0 0.0         (repeatable)
           texcoord 0.0 0.0           (repeatable)
           lod                        (repeatable)
             lengthPerPixel <value>
             matref <name>            (repeatable)
               dlist                  # display list for this material set
               sphere <x> <y> <z> <radiusSquared>
               points    0            (repeatable)
               lines     0 1          (repeatable)
               lineloop  0 1          (repeatable)
               linestrip 0 1          (repeatable)
               tris      0 1 2        (repeatable)
               tristrip  0 1 2        (repeatable)
               trifan    0 1 2        (repeatable)
               quads     0 1 2 3      (repeatable)
               quadstrip 0 1 2 3      (repeatable)
               polygon   0 1 2        (repeatable)
             end  # matref
           end    # lod
         end      # drawInfo
       end        # mesh

       The Arc object

       arc
         name example_arc
         divisions 16   # number of subdivisions
         flatshading    # flat shading  (smooth is default)
         angle 360      # the sweep angle
         ratio 1        # (outrad - inrad) / outrad
         position 0.0 0.0 0.0
         size 10 10 10
         rotation 0.0
         shift 0 0 0            # (repeatable)
         scale 1 1 1            # (repeatable)
         shear 0 0 0            # (repeatable)
         spin angle nx ny nz    # (repeatable)
         phydrv example_phydrv  # assign a physics driver
         smoothbounce           # ricochets use normals
       end

       The Cone object

       cone
         name example_cone
         divisions 16   # number of subdivisions
         flatshading    # flat shading  (smooth is default)
         angle 360      # the sweep angle
         position 0.0 0.0 0.0
         size 10 10 10
         rotation 0.0
         shift 0 0 0            # (repeatable)
         scale 1 1 1            # (repeatable)
         shear 0 0 0            # (repeatable)
         spin angle nx ny nz    # (repeatable)
         phydrv example_phydrv  # assign a physics driver
         smoothbounce           # ricochets use normals
       end

       The Sphere object

       sphere
         name example_sphere
         divisions 4    # number of subdivisions
         flatshading    # flat shading  (smooth is default)
         position 0.0 0.0 10.0
         size 10 10 10
         radius 10      #  sets all size values to this value
         rotation 0.0
         shift 0 0 0            # (repeatable)
         scale 1 1 1            # (repeatable)
         shear 0 0 0            # (repeatable)
         spin angle nx ny nz    # (repeatable)
         phydrv example_phydrv  # assign a physics driver
         smoothbounce           # ricochets use normals
       end

       The Tetrahedron object

       tetra
         name example_tetra
       # there must always be 4 vertices
         vertex -10.0 -5.0 0.0
         vertex +10.0 -5.0 0.0
         vertex 0.0 10.0 0.0
         vertex 0.0 5.0 10.0
         shift 0 0 0            # (repeatable)
         scale 1 1 1            # (repeatable)
         shear 0 0 0            # (repeatable)
         spin angle nx ny nz    # (repeatable)
       end

       The Box object
       Adds a simple block.

       box
         name example_box
         position 0.0 0.0 0.0
         size 30.0 30.0 9.42
         rotation 0.0
       end

       The Pyramid object
       Adds a triangular shaped object.

       pyramid
         name example_pyramid
         position 0.0 0.0 0.0
         size 8.2 8.2 10.25
         rotation 0.0
       end

       The Teleporter object
       Adds an object that places a tank at another teleporter  in  a  different  area  when  ran
       through.

       teleporter [name]
       # the [name] tag is used for linkage
         name example_teleporter
         position 0.0 0.0 0.0
         size 5.06 4.48 20.16
         rotation 0.0
         border 1.12
       end

       The Link object
       Adds a route to teleport a tank between two teleporters.

       # Teleporter names are terminated with either :f (forward)
       # or :b (backwards). The forwards link points to 0 degrees,
       # and the backwards link points to 180. Links are made by
       # pattern matching the teleporter names. The '*' and '?'
       # globbing characters can be used to make multiple matches.
       # If there are multiple matches for the "to" link, then the
       # destination will be selected randomly between the matches.
       # in-game.

       # NOTE: bzfs -d -d -d -d will print the linkage table.

       link
         name example_link
       # this will link all teleporters randomly to all other teleporters
         from *
         to   *
       end

       # or, to link  between known teleporters examp_tele1(front) and examp_tele2(back)

       link
         name  example_realLink
         from examp_tele1:f
         to examp_tele2:b
       end

       The Base object
       Creates  a team base where the corresponding team's flag is stored.  The oncap option will
       fire a world weapon of the specified type when the team flag for this base is captured.

       base
         name example_base
         position 0.0 0.0 0.0
         size 60.0 60.0 0.0
         rotation 0.0
         color 0
         oncap V
       end

       The Weapon object
       Creates a world weapon, or a weapon fired automatically  by  the  world.  The  weapon  can
       either  be  timed  or  be  event driven.  Timed weapons should use the initdelay and delay
       fields.  Event driven weapons need to use the trigger option to define  what  the  trigger
       event  is.  Valid trigger events are; OnCap, for flag capture events.  OnSpawn, for player
       spawn events.  OnDie, for player death events.  If the weapon is to be triggered only  for
       a  specific team then the eventteam option should be used with a team number (1 to 4).  An
       eventteam value of -1 will trigger this weapon for any team. -1 is the  default  eventteam
       value.

       weapon
         name example_weapon
         position 0.0 0.0 0.0
         rotation 0.0
         tilt 0.0
         initdelay 10.0
         delay 10.0 3.0 5.0 3.0
         type V
         trigger flagcap
         eventteam V
       end

       The Zone object
       Specifies a certain range in the world, and what attributes that range has.

       zone
         name example_zone
         position 0.0 0.0 0.0
         size 1.0 1.0 1.0
         rotation 0.0
       # where players may spawn
         team 0 1 2 3 4
       # where flag may spawn
         flag GM SW good bad
       # dropped team flags will fly to the closest safety zone
         safety 1 2 3 4
       # attach a flag to this zone (always spawn in this zone)
         zoneflag GM 3  # type, count (type can be a team flag, ex: R*)
       end

FILE SYNTAX

       The symbol '?' means that the item is optional.

       The notation {a..b} means that the number of times the item can be present must be between
       'a' and 'b', where '*' mean infinity. ('?' is equivalent to {0..1})

       angle := <float>

       2dpoint := <float> <float>

       3dpoint := <float> <float> <float>

       rgbColor := <float> <float> <float>

       alpha := <float>

       rgbaColor := rgbColor alpha? | <color_name> alpha?

       channel := "red" | "green" | "blue" | "alpha"

       (BZWReader.cxx/parseNormalObject)

       allObjects :=
                     "box"
                   | "pyramid"
                   | "base"
                   | "link"
                   | "teleporter"
                   | "mesh"
                   | "arc"
                   | "meshbox"
                   | "cone"
                   | "meshpyr"
                   | "sphere"
                   | "tetra"
                   | "weapon"
                   | "zone"
                   | "waterLevel"
                   | "dynamicColor"
                   | "textureMatrix"
                   | "material"
                   | "physics"
                   | "transform"

       (BZWReader.cxx/BZWReader::readWorldStream)
              Note: Blank lines and lines starting with # are discarded.

       worldStream :=
                     "end"
                   | allObjects
                   | "define" <group_name>
                   | "enddef"
                   | "group" <group_name>
                   | "teleporter" <name>?
                   | "options"
                   | "include" <filename>
                   | "world"

       (ParseMaterial.cxx/parseMaterials)

       material :=
                   object
                   | "matref" <material_name>
                   | "resetmat"
                   | "dyncol" <dynamic_color_name>
                   | "ambient" rgbaColor
                   | ("diffuse" | "color") rgbaColor
                   | "specular" rgbaColor
                   | "emission" rgbaColor
                   | "shininess" <float>
                   | "texture <texture_name>
                   | "notextures"
                   | "addtexture" <texture_name>
                   | "texmat" <matrix_name>
                   | "notexalpha"
                   | "notexcolor"
                   | "spheremap"
                   | "noradar"
                   | "noshadow"
                   | "noculling"
                   | "nosorting"
                   | "nolighting"
                   | "alphathresh" <value>
                   | "groupalpha"
                   | "occluder"
                   | "shader" <shader_name>  # NOT IMPLEMENTED
                   | "addshader" <shader_name>  # NOT IMPLEMENTED
                   | "noshaders"  # NOT IMPLEMENTED

       (WorldFileObject:.cxx/WorldFileObject::read)

       object := "name" <name>

       (WorldFileLocation.cxx/readWorldFileLocation::read)

       location :=
                     ("pos" | "position") 3dpoint
                   | "size" 3dpoint
                   | ("rot" | "rotation") <float>
                   | "shift" 3dpoint
                   | "scale" 3dpoint
                   | "shear" 3dpoint
                   | "spin" angle 3dpoint
                   | "xform" <transform_name>
                   | object

       (WorldFileObstacle.cxx/WorldFileObstacle::read)

       obstacle :=
                     "drivethrough"
                   | "shootthrough"
                   | "passable"
                   | "ricochet"
                   | location

       (CustomArc.cxx/CustomArc::read)

       meshbox :=
                     "divisions" <integer>
                   | "angle" angle
                   | "ratio" <float>
                   | "texsize" <float> <float> <float> <float>
                   | "phydrv" <physics_driver_name>
                   | "smoothbounce"
                   | "flatshading"
                   | material
                   | ("top" | "bottom" | "inside" | "outside" | "startside" | "endside") material
                   | obstacle

       arc :=
                     "divisions" <integer>
                   | "angle" angle
                   | "ratio" <float>
                   | "texsize" <float> <float> <float> <float>
                   | "phydrv" <physics_driver_name>
                   | "smoothbounce"
                   | "flatshading"
                   | material
                   | ("top" | "bottom" | "inside" | "outside" | "startside" | "endside") material
                   | obstacle

       (CustomBase.cxx/CustomBase::read)

       base :=
                     "color" <integer>
                   | obstacle

       (CustomBox.cxx)

       box := obstacle

       (CustomCone.cxx/CustomCone::read)

       meshpyr :=
                     "divisions" <integer>
                   | "angle" <float>
                   | "texsize" <float> <float>
                   | "phydrv" <physics_driver_name>
                   | "smoothbounce"
                   | "flatshading"
                   | material
                   | ("edge" | "bottom" | "startside" | "endside") material
                   | "flipz"
                   | obstacle

       cone :=
                     "divisions" <integer>
                   | "angle" <float>
                   | "texsize" <float> <float>
                   | "phydrv" <physics_driver_name>
                   | "smoothbounce"
                   | "flatshading"
                   | material
                   | ("edge" | "bottom" | "startside" | "endside") material
                   | obstacle

       (CustomDynamicColor.cxx/CustomDynamicColor::read)

       dynamicColor :=
                     object
                   | channel "limits" <float> <float>
                   | channel "sinusoid" <float> <float> <float>
                   | channel "clampup" <float> <float> <float>
                   | channel "clampdown" <float> <float> <float>
                   | channel "sequence" <float> <float> ("0" "1" "2"){1..*}

       (CustomGate.cxx/CustomGate::read)

       teleporter :=
                     "border" <float>
                   | "horizontal"  # NOT IMPLEMENTED
                   | obstacle

       (CustomGroup.cxx/CustomGroup::read)

       group :=
                     "team" <integer>
                   | "tint" rgbaColor
                   | "phydrv" <physics_driver_name>
                   | "matref" <material_name>
                   | obstacle

       (CustomLink.cxx/CustomLink::read)

       teleporter_spec :=
                     <integer>
                   | <teleporter_name_with_wildcards> (":f" | ":b")?

       link :=
                     "from" <teleporter_spec>
                   | "to" <teleporter_spec>
                   | object

       (MeshDrawInfo.cxx/MeshDrawInfo::parseDrawCmd)

       drawInfoCmd :=
                     "points"    <integer>+
                   | "lines"     <integer> <integer> <integer>{2}*
                   | "lineloop"  <integer> <integer>+
                   | "linestrip" <integer> <integer> <integer{2}*
                   | "tris"      <integer> <integer> <integer> <integer>{3}*
                   | "tristrip"  <integer> <integer> <integer>+
                   | "trifan"    <integer> <integer> <integer>+
                   | "quads"     <integer> <integer> <integer> <integer> <integer>{4}*
                   | "quadstrip" <integer> <integer> <integer>{2}+
                   | "polygon"   <integer> <integer> <integer> <integer>{3}*

       (MeshDrawInfo.cxx/MeshDrawInfo::parseDrawSet)

       drawInfoSet :=
                     "matref" <material_name>
                   | "dlist"
                   | "sphere" 3dpoint <float>
                   | drawInfoCmd

       (MeshDrawInfo.cxx/MeshDrawInfo::parseDrawLod)

       drawInfoLod :=
                     "lod"
                   | "lengthPerPixel" <float>
                   | drawInfoSet

       (MeshDrawInfo.cxx/MeshDrawInfo::parse)

       drawInfo :=
                     "drawInfo"
                   | "dlist"
                   | "decorative"
                   | "angvel" <float>
                   | "extents" 3dpoint 3dpoint
                   | "sphere" 3dpoint <float>
                   | "corner" <integer> <integer> <integer>
                   | "vertex" 3dpoint
                   | "normal" 3dpoint
                   | "texcoord" <float> <float>
                   | drawInfoLod

       (CustomMesh.cxx/CustomMesh::read)

       mesh :=
                     "face"
                   | face
                   | "endface"
                   | "inside" 3dpoint
                   | "outside" 3dpoint
                   | "vertex" 3dpoint
                   | "normal" 3dpoint
                   | "texcoord" <float> <float>
                   | "phydrv" <physics_driver_name>
                   | "smoothbounce"
                   | "noclusters"
                   | drawInfo
                   | material
                   | obstacle

       (CustomMeshFace.cxx/CustomMeshFace::read)

       face :=
                     "vertices" <integer>{3..*}
                   | "normals" <integer>{3..*}
                   | "texcoords" <integer>{3..*}
                   | "phydrv" <physics_driver_name>
                   | "smoothbounce"
                   | "noclusters"
                   | "drivethrough"
                   | "shootthrough"
                   | "ricochet"
                   | "passable"
                   | material

       (CustomMeshTransform.cxx/CustomMeshTransform::read)

       transform :=
                     "shift" 3dpoint
                   | "scale" 3dpoint
                   | "shear" 3dpoint
                   | "spin" angle 3dpoint
                   | "xform" <transform_name>
                   | object

       (CustomPhysicsDriver.cxx/CustomPhysicsDriver::read)

       physics :=
                     "linear" 3dpoint
                   | "angular" <float> 2dpoint
                   | "radial" <float> 2dpoint  # NOT IMPLEMENTED
                   | "slide" <float>
                   | "death" <string>
                   | object

       (CustomPyramid.cxx/CustomPyramid::read)

       pyramid :=
                     "flipz"
                   | obstacle

       (CustomSphere.cxx/CustomSphere::read)

       sphere :=
                     "divisions" <integer>
                   | "radius" <float>
                   | ("hemi" | "hemisphere")
                   | "texsize" <float> <float>
                   | "phydrv" <physics_driver_name>
                   | "smoothbounce"
                   | "flatshading"
                   | material
                   | ("edge" | "bottom") material
                   | obstacle

       (CustomTetra.cxx/CustomTetra::read)
              Note: At most 4 vertices can be specified.
              Note2: material will apply to all vertices when  specified  first,  otherwise  like
              "normals" and "texcoords" they apply to the previous vertex.

       tetra :=
                     "vertex" 3dpoint
                   | "normals" 3dpoint
                   | "texcoords" 2dpoint
                   | material
                   | obstacle

       (CustomTextureMatrix.cxx/CustomTextureMatrix::read)

       textureMatrix :=
                     "fixedshift" 2dpoint
                   | "fixedscale" 2dpoint
                   | "fixedspin" angle
                   | "fixedcenter" 2dpoint
                   | "shift" <float> <float>
                   | "spin" <float>
                   | "scale" <float> <float> <float> <float>
                   | "center" 2dpoint
                   | object

       (CustomWaterLevel.cxx/CustomWaterLevel::read)

       waterLevel :=
                     "height" <float>
                   | material
                   | object

       (CustomWeapon.cxx/CustomWeapon::read)

       weapon :=
                     "initdelay" <float>
                   | "delay" <float>{1..*}
                   | "type" <flag_short_name>
                   | location

       (CustomWorld.cxx/CustomWorld::read)

       world :=
                     "size" <float>
                   | "flagHeight" <float>
                   | object

       (CustomZone.cxx/CustomZone::read)

       zone :=
                     "team" <integer>{1..*}
                     "flag" ("good" | "bad" | <flag_short_name>){1..*}
                   | "safety" <integer>{1..*}
                   | "zoneflag" <flag_short_name> <integer>?
                   | location

SEE ALSO

       bzflag(6), bzadmin(6), bzfs(6)