Difference between revisions of "Map making by hand"

From BZFlagWiki
Jump to: navigation, search
m (box doesn't take shift, so i made it meshbox (Transformations))
(Building World Objects: added wiki table and content)
 
(52 intermediate revisions by 8 users not shown)
Line 1: Line 1:
 
{{DoDoc|Major re-organization, transform away from "chat" style. Need to reference pages elsewhere on the wiki in place of much of the content which appears to be building up here.  Create them if necessary, or see the list [[Special:Allpages|here]].}}
 
{{DoDoc|Major re-organization, transform away from "chat" style. Need to reference pages elsewhere on the wiki in place of much of the content which appears to be building up here.  Create them if necessary, or see the list [[Special:Allpages|here]].}}
Although there are a number of GUI options for creating maps such as BZ-Edit, 3D modelers, many map-makers use a basic text-editor. There are many times when it is necessary to make small changes to a map, such as including objects that are unavailable in GUI map-maker, but there are also some who enjoy the challenge of creating a map entirely from scratch with a text-editor.
+
Editing by hand is still a common way of creating maps.
 +
Although there's a number of GUI options for creating maps such as [[BZEditWin32|BZEdit]], [[BZWTools]], [[BZFed]], [[PyBZEdit]] and [[IBZEdit]].
 +
Many map-makers use a basic text-editor. This can be due to the enjoyment of the challenge of creating a map by hand or due to a lack of graphics modeling capability.
  
 
==Text Editors==
 
==Text Editors==
Most text-editors designed for coding/programming are more than sufficient for editing bzw files.  Although word-processing programs such as Microsoft Word can be used, there are many cheaper (free) and more efficient programs designed specifically for coding.
+
Most text-editors designed for coding/programming are more than sufficient for editing bzw files.  Although word-processing programs such as Microsoft Word can be used, there are many cheaper (free) and more efficient programs designed specifically for coding. If you are interested in syntax highlighting, look at the [http://my.bzflag.org/bb/viewtopic.php?f=24&t=16037&p=148953 forum topic].
 
===Windows===
 
===Windows===
 
*Notepad
 
*Notepad
 
*PSPad
 
*PSPad
 
*NoteTab
 
*NoteTab
 +
*[http://notepad-plus-plus.org/ Notepad ++] - a tabbed editor based on Scite.
 +
 
===Mac===
 
===Mac===
 
*TextWrangler
 
*TextWrangler
Line 15: Line 19:
 
*GEdit
 
*GEdit
 
*Kate
 
*Kate
 +
*Scite
  
 
==Editing existing maps==
 
==Editing existing maps==
 
Beginning mapmakers should spend some time studying and making small changes in existing maps to see how things work.  In the client, maps can be saved for editing by joining the desired server and choosing: Options>Save World.  Maps can also be saved by issuing the /saveworld command.  The map should be a simple map when getting started.  One may find it easier to create a file in BZEdit and open the resulting file in the text-editor.
 
Beginning mapmakers should spend some time studying and making small changes in existing maps to see how things work.  In the client, maps can be saved for editing by joining the desired server and choosing: Options>Save World.  Maps can also be saved by issuing the /saveworld command.  The map should be a simple map when getting started.  One may find it easier to create a file in BZEdit and open the resulting file in the text-editor.
 +
One can gain experience by also converting map objects into their mesh equivalents such as converting a [[Box|box]] into a [[Meshbox|meshbox]] or a [[Pyramid|pyramid]] into a [[Meshpyr|meshpyramid]].
  
 
==Getting Started==
 
==Getting Started==
If you have created a box in BZEdit you may see:
+
One should become familiar with the [[BZW]] syntax before attempting to create a map by hand from scratch or have on hand a reference card.
 +
Also knowing the coordinates of where object placement(s) will occur based on the options set.
 +
The way world units are oriented in a normal right hand rule coordinate system with positive Z being the "UP" direction.
 +
"north" on the in game radar is the positive Y direction in map coordinates.
 +
This image shows a typical map, with the origin and axis directions clearly marked out.
 +
[[Image:MapCoordinateSystem.png]]
 +
 
 +
The positioning of map objects in the "position" of an object goes as such.
 +
The first setting is for the "X" axis with the second being for the "Y" axis and the third being for the "Z" axis.
 +
The same applies to the "size" in a world object.
 +
 
 +
A good way to start learning is to begin with simple world objects and settings:
 
{|
 
{|
 
|
 
|
  # World built with bzedit32 world class, available at
+
  # Example world with settings and box
  # http://www.sourceforge.net/projects/bzflag
+
  # The number sign is not needed for a map to function, but is used for comments.
 
  world  
 
  world  
 
   size 400  
 
   size 400  
Line 43: Line 60:
 
|}
 
|}
  
===What that means===
+
=== Example map explained ===
"There are set variables that define various things such as how fast your tank is, how fast the bullets are, or if it's raining or foggy.  Put those in the options setting with "-set(space) " in front of it. You can also make those changes as an admin by using /set _variable (notice there is a space between the set and the _).  A full list of these settings can be found on the [[Server Variables]] page.  Other options, such as how many times a flag can be grabbed before it resets or if flags can land on buildings are explained [http://my.bzflag.org/bb/files/antigrav4teamconf_114.txt in this forum post]
+
Optionally, the variables can be placed in a separate configuration file and referenced when the server is started."
+
'''old'''
+
 
+
 
+
 
First, it says:
 
First, it says:
# World built with bzedit32 world class, available at
+
# Example world with settings and box
# http://www.sourceforge.net/projects/bzflag
+
# The number sign is not needed for a map to function, but is used for comments.
 
(Note: the # sign is used for comments.)
 
(Note: the # sign is used for comments.)
  
This is the text added by the application initially, kind of like advertising. This will be the first thing anyone sees when they look at the map.
+
This is many times added by map editors, but with different comments.(depending on editor)
  
 
The next thing is:
 
The next thing is:
Line 62: Line 74:
 
end  
 
end  
 
</pre>
 
</pre>
This is rather self-explanatory. It's the <size> of the <world>.
+
This is rather self-explanatory. It's the <size> of the <world> (The BZFlag arena).
  
Next is:
+
Next is an <options> section:
 
<pre>
 
<pre>
 
options  
 
options  
Line 74: Line 86:
 
end  
 
end  
 
</pre>
 
</pre>
This is the <options>.
+
This allows you to define in the map file certain options that are also available from the command line when you start the bzfs server, or in the optional server config file.  Options embedded into a world file will override those input on the command line or in a config file.
 +
 
 
The commands listed here are:
 
The commands listed here are:
 
Ricochet, Jumping, Tank speed, Max Shots, and Max Players.
 
Ricochet, Jumping, Tank speed, Max Shots, and Max Players.
These are rather self explanatory, except for Max Players. It works like this. Rouge, Red, Green, Blue, Purple, Observer. Each number defines the max number of players per category.
+
These are rather self explanatory, except for Max Players. Each number represents how many of each of the following team players are allowed in the game (in the order listed): Rogue, Red, Green, Blue, Purple, Observer. Each number defines the max number of players per category.
  
For more, see [[Options_(object)|Options Object]].
+
For more info, see [[Options_(object)|Options Object]].
  
 
We now come to:
 
We now come to:
Line 91: Line 104:
 
</pre>
 
</pre>
 
This is a <box> with a <name> of <box1>.
 
This is a <box> with a <name> of <box1>.
The <position> is 0,0,0 in R3[http://en.wikipedia.org/wiki/R3].
+
The <position> is 0,0,0 in R3[https://en.wikipedia.org/wiki/Three-dimensional_space_(mathematics)].
 
The rest is pretty self explanatory.
 
The rest is pretty self explanatory.
  
 
'''Important:''' EVERY STATEMENT MUST HAVE AN END.
 
'''Important:''' EVERY STATEMENT MUST HAVE AN END.
 +
If a statement does not have an end you will get an error.
  
 
===Basic Definitions===
 
===Basic Definitions===
Line 104: Line 118:
 
:In most objects, you will see three numbers after position and size. These numbers are coordinates on a graph. The first number is the x coordinate (left and right) the middle number is the y coordinate (forward and backward) and the third number is the z coordinate (height and depth). Another way of thinking of it is: x = width, y = depth, z = height. (Those accustomed to the Y axis determining height will have to slightly adjust their thinking.)  
 
:In most objects, you will see three numbers after position and size. These numbers are coordinates on a graph. The first number is the x coordinate (left and right) the middle number is the y coordinate (forward and backward) and the third number is the z coordinate (height and depth). Another way of thinking of it is: x = width, y = depth, z = height. (Those accustomed to the Y axis determining height will have to slightly adjust their thinking.)  
  
==Sample Objects==
+
===Optional client setup===
===The Box===
+
There are some options that appear useful when editing a map, especially when editing by hand.
Perhaps the simplest object is the box. There is actually nothing special you can do to it (but in versions of BZFlag from 2.0.8 up, you can do a lot more to it).  Here is an example of a box:
+
;showCoordinates
 +
:The BZFlag client is capable of displaying a tank's current location for the player at the top right corner, right below the clock. This feature is being activated by executing the "/localset showCoordinates 1" command to the chat line.
  
  box
+
==Building World Objects==
  name box1            # Optional, but good to include
+
In order to build maps, one must know the world objects used in them.
  position 0 0 0
+
The table below provides an overview of the map objects which exist in BZFlag.
  size 10 10 10
+
{|{{Prettytable}}
  rotation 0
+
|-
  end
+
| {{Hl3}} |'''Map Object'''
 +
| {{Hl3}} |'''Description'''
 +
|-
 +
| [[ Arc]] ||  Arc is an object that defines an arc or cylinder in a map.
 +
|-
 +
| [[ Base]] ||  Base is an object which is similar to a box, but defines properties of it being a base for capture the flag style game play modes.
 +
|-
 +
|  [[Box]]  ||  Box is an object which defines a cube structure in a world file.
 +
|-
 +
|  [[Color(BZW)]]  ||  Color is used in a BZFlag world (BZW) as a sub parameter for many parameters, such as materials and dynamic colors.
 +
|-
 +
|  [[Cone]]  ||  Cone object is a BZW object that defines a cone in a BZW world file.
 +
|-
 +
|  [[Define]]  ||  Group Definition, or define, will group a set of objects that can be recalled and duplicated multiple times with the group object.
 +
|-
 +
|  [[DrawInfo]]  ||  DrawInfo allows clients to render the mesh object more efficiently through LODs (Levels of Detail). Drawinfo also allows the ability to create moving objects in a map.
 +
|-
 +
|  [[DynamicColor]]  ||  DynamicColor describes how a color channel will be dynamically updated.
 +
|-
 +
| [[GroundMaterial]] ||  GroundMaterial is an option for a Material that allows one to set the ground texture. .
 +
|-
 +
|  [[Group]] ||  Group allows one to bring together a number of elements and refer to them as a single object.
 +
|-
 +
|  [[Include]] ||  Include is an option which allows one to specify a second bzw file that will be included in the first bzw.
 +
|-
 +
|  [[Link]]  ||  Link is an object which creates a link (route) between two teleporters.
 +
|-
 +
|  [[Linkmaterial]]  ||  LinkMaterial allows one to set the texture of the teleporter window to anything one would like it to be..
 +
|-
 +
|  [[Material]]  ||  A material is used in a BZFlag world to define a new look for otherwise regular objects, such as meshboxes.
 +
|-
 +
|  [[Mesh]]  || Mesh is an object which defines an arbitrary three dimensional shape.
 +
|-
 +
|  [[Meshbox]]  ||  Meshbox is an update to the original [[Box]] object and supports features such as physics drivers and textures.
 +
|-
 +
|  [[Meshpyr]]  ||  Meshpyr is an object that constructs a specialized mesh that has the geometric appearance of a Pyramid.
 +
|-
 +
|  [[Options (object)]]  ||  Options object is a BZW map structure that defines various options for a server to use when running a map.
 +
|-
 +
|  [[Physics]]  ||  Physics, or Physics Driver, is an object when applied to another object, will affect a tank touching it in some way.
 +
|-
 +
|  [[Pyramid]]  ||  Pyramid is a BZW map structure that defines a polyhedron having a polygonal base and triangular sides with a common vertex in the world.
 +
|-
 +
|  [[Sphere]]  ||  The sphere is an Object that defines a sphere in a map file.
 +
|-
 +
|  [[Teleporter]]  ||  Teleporter is an object which transports the user to another teleporter in a different part of the world.
 +
|-
 +
|  [[Tetra]]  ||  Tetra is an map object which creates a polygon with four vertices.
 +
|-
 +
|  [[TextureMatrix]]  ||  TextureMatrix, or texmat, when applied to a material object, allows you to define how a texture will appear in a material.
 +
|-
 +
|  [[WaterLevel]]  ||  WaterLevel is an object that defines a plane of water that spans the entire map. WaterLevel is deadly to all tanks that cross it.
 +
|-
 +
|  [[Weapon (object)]]  ||  Weapon object is a BZW map structure that defines a fixed weapon effect.
 +
|-
 +
|  [[World (object)]]  ||  World object is a BZW map structure that defines various options for the map.
 +
|-
 +
|  [[Zone]]  ||  Zone is a rectangular BZW map structure for spawn or flag zones.
 +
|}
  
In the first line, notice the word "box".  It simply says the next object is a box.  The next line is the name of the object.  It is defined with the syntax "<tt>name ''objectName''</tt>".  It is not required, but is good to include.  The third line defines the position of the center of the bottom of the object.  The three arguments of <tt>position</tt> are the x, y, and z coordinates of the box, respectively.  The x and y coordinates can be positive or negative, but the z coordinate should just be positive or zero.  On the fourth line, the size of the box is defined.  The arguments of <tt>size</tt> are the x, y, and z sizes of the object, respectively.  The x and y arguments make the box that wide on both sides of it's position.  However, the z argument makes the object exactly the number of units tall as defined.  The next line just says how much the object is rotated.  This number is the number of degrees of rotation, and can be negative or positive.  The last line just tells BZFlag the object is done, and a new one can be defined.  Be sure to '''always''' use this.
+
==See also==
 +
===Map Editors===
 +
{| class="wikitable" style="margin-right: auto; margin-left: 0px;"
 +
| [[BZEdit]]
 +
| [[BZEditWin32]]
 +
| [[BZFed]]
 +
| [[BZWTools]]
 +
| [[DI-Machine]]
 +
|-
 +
| [[IBZEdit]]
 +
| [[Modeltool]]
 +
| [[PyBZEdit]]
 +
| [[Wings3D]]
 +
|
 +
|}
  
===The Cone===
+
===Map Objects===
Most objects have similar parameters as the basic box.  For instance, the code for a cone may look something like this:
+
{{Template:Map objects}}
  
cone
+
===Helpful links===
  name cone1
+
* [[Comparison of map editors]]
  position 0 0 0
+
* [[Comparison of map objects]]
  size 10 10 20
+
* [[Map FAQ]]
  divisions 128
+
* [[Map making]]
end
+
* [[Texturing how to]]
 +
* [[World units]]
  
Divisions basically decide how smooth the cone is.  The higher the divisions the more smooth the cone is.  A division of 4 would look like a pyramid.  Another parameter that can be added to the cone object is angle. If you say angle 180, that would make 1/2 of a cone, 90 would make 1/4 of a cone, and so on.
+
[[Category:Tutorials]]
 
+
===The Arc===
+
 
+
An arc is basically a cylinder. However it doesn’t have to be a perfect cylinder depending on certain options you select. For an arc the only required options are divisions, position and size. Just like the cone divisions have the same effect, position and size are all the same. Once again you can have an oval shaped cylinder type thing. Now, you WILL find more options to an arc than to a cone, for example the ratio option. The ratio options let you basically put a hole in the cylinder. So if you have the option: ratio 1 you would have a full cylinder. If you say for example ratio .3 or any number less than 1 you will get a whole in the cylinder. The bigger the number, the smaller the hole. Angle allows you to do a simi-circle. Rotation once again isn't really needed. all the options like spin and shear are the same for this object too! phydrv and matref I’ll show later. Let’s move to the sphere
+
 
+
===The Sphere===
+
 
+
The only options required to make a sphere are position, size, and divisions.
+
All these options do the same thing as they did in the objects above.  You may also have an oval like sphere.  You make an oval like sphere simply by making the x and y's different sizes just like in the cone and arc.  The radius option is just a substitute for size.  You can write size 10 10 10 or radius 10.  Both do the same thing. However if you want an oval shaped sphere you have to use size.  Rotation wouldn't really have an effect and the shear and spin works the same for this object.
+
 
+
==Getting more help==
+
*The links at the bottom of the [[:Category:Map Making|Map Making]] page.
+
*The original creator of this page is flight, you can email him at dirtbikerdude_91@yahoo.com and he will be happy to answer any questions that he is capable of answering.
+
 
+
==Special Objects==
+
There are certain objects that are often coded by hand because it is simpler or it is impossible to do with graphical map creation tools. 
+
 
+
===Materials ===
+
Example:
+
 
+
material
+
  name mat1
+
  addtexture blue_bolt.png
+
end
+
meshbox
+
  position 0 0 0
+
  size 10 10 10
+
  rotation 0
+
  matref mat1
+
end
+
 
+
Material is letting the computer know that a material is about to be explained to it.  You name it so that way you can reference it with the matref.  The name can be any thing you want as long as it does not have any spaces.  You type in <tt>addtexture</tt> and you state a texture name.  Now, how do you know what texture names there are to use?
+
 
+
'''On Linux''': Running <tt>ls /usr/share/bzflag/*.png</tt> in a terminal will show the list of pictures.
+
 
+
'''On Mac''': If you control click (right click) on the bzflag icon, click show package contents, click contents, and click resources, those are the pictures you may use.
+
 
+
'''On Windows''': The default path is <tt>C:\Program Files\BZFlag\data\*.png</tt>
+
 
+
What you will find are images that are used in every day games.  The top of a base, the wall of a base. A bullet which is blue_bolt.png (as was used above).  The full path to the texture needs to be used if the texture is not found in that directory.  Any customized textures should be uploaded to the [http://images.bzflag.org/submitimages/ BZFlag Image Submission System] before the map is hosted publicly.
+
 
+
Servers running bzfs 2.0.8 and earlier will require "meshbox" and "meshpyr" in order to apply textures and physics to these objects.
+
 
+
 
+
Instead of creating a new texture, many interesting and creative things can be done with the "diffuse" parameter in the material object.  You can add the diffuse command and it will look like this diffuse 1 1 1 1.  The first number is the amount of red that will be in the meshobject.  The second number is the amount of green, the third is the amount of blue.  So you can mix those colors to make more colors.  You may use a range from 0-1.  For example diffuse .3 .5 .26 1.  The fourth number determines the opacity or transparency (the see-throughability).  0 is invisible, .5 is half invisible, and 1 is normal.
+
 
+
material
+
  name mat1
+
  diffuse .5 .25 .1 .6
+
  addtexture mesh.png
+
end
+
 
+
===Physics===
+
 
+
 
+
Physics make your tank behave in different ways.  If you have ever played laser mania by Louman than you know on the outskirts of the map there is something you can jump on and you go really fast, that is a physics. Physics and materials work the same way.  Physics is to material as phydrv is to matref.  You must specify a physics then on a meshbox, meshpyr cone arc sphere or whatever, you can reference that physics by using the phydrv command just like you would use the matref command for materials.  There are different physics commands.  Linear, angular, slide and death.  In the Louman map I mentioned above is a linear physics.  Linear physics makes your tank move in a line.  The numbers after a linear command are just like position x y z.  Example:
+
 
+
physics
+
  name phy1
+
  linear 50 0 0
+
end
+
 
+
This will make your tank move at a speed of 50 in a positive x direction you may use -50 and it will make it go the other way.
+
 
+
physics
+
  name phy2
+
  linear 0 50 0
+
end
+
 
+
This will make your tank move at a speed of 50 in a positive y direction
+
 
+
physics
+
  name phy3
+
  linear 0 0 50
+
end
+
 
+
This will make your tank jump at a speed of 50
+
 
+
physics
+
  name phy4
+
  slide 5 0
+
end
+
 
+
This will make your tank basically feel like it's on ice.  Whichever way the tank is moving it will keep moving that way.
+
 
+
physics
+
  name phy5
+
  death haha! you died
+
end
+
 
+
This will make the tank die when it touches the object that refers to this and the message haha! you died will be displayed to that person.
+
 
+
example:
+
physics
+
  name phy1
+
  death I like you better dead!
+
end
+
meshbox
+
  position 0 0 0
+
  size 10 10 10
+
  rotation 0
+
  phydrv phy1                      # Or what ever you named the physics.
+
end
+
 
+
This works just like the material
+
 
+
The thing about physics and materials is that they have to be written before they are referenced.
+
 
+
This '''won't''' work
+
 
+
meshbox
+
  position 0 0 0
+
  size 10 10 10
+
  rotation 0
+
  matref mat1
+
end
+
material
+
  name mat1
+
  addtexture blue_team.png
+
end
+
 
+
===Groups===
+
A group is a defined group of objects that can be called to gether as one.
+
 
+
For example if a map editor is makeing a forest, and each tree contains 2 objects, the editor doesn't want to type up the code for each tree over and over again. What he can do is tell BZFS that these objects = tree. and then whenever he wants to make a tree he just types tree.
+
 
+
Example-----------
+
 
+
first define a group of obects as a tree
+
 
+
 
+
  define tree
+
 
+
  box
+
  position 0 0 0
+
  size 2 2 4
+
  end
+
 
+
  pyramid
+
  position 0 0 3
+
  size 5 5 10
+
  end
+
 
+
  enddef
+
 
+
then to add a tree simpily type
+
 
+
 
+
  group tree
+
  position 0 0 0
+
  end
+
 
+
==Transformations==
+
 
[[Category:Map Making]]
 
[[Category:Map Making]]
Transformations are simple ways of modifying objects so that maps have some variety. These can get complicated so I will only give you a sample of what they can do. There are 3 transformations shift, spin, and shear.
+
[[Category:Partial Documentation]]
 
+
The one is will tell you about is '''Shift'''.
+
 
+
'''Shift''' moves an object by the amount of units that you specify from its present position.
+
the object..
+
  box
+
  position 10 10 0
+
  end
+
 
+
is at place 10 10 0
+
 
+
while the object..
+
 
+
  meshbox
+
  position 10 10 0
+
  shift 0 0 10
+
  end
+
 
+
is at position 10 10 10. Please also note, that not all object can take the ''shift'' argument.
+

Latest revision as of 20:38, 15 February 2017

Plywood hammer100x101.gif There is still documentation to be done here!! If you feel up to the task, please have a go at it. Specifically what needs to be added is:
Major re-organization, transform away from "chat" style. Need to reference pages elsewhere on the wiki in place of much of the content which appears to be building up here. Create them if necessary, or see the list here.

Editing by hand is still a common way of creating maps. Although there's a number of GUI options for creating maps such as BZEdit, BZWTools, BZFed, PyBZEdit and IBZEdit. Many map-makers use a basic text-editor. This can be due to the enjoyment of the challenge of creating a map by hand or due to a lack of graphics modeling capability.

Text Editors[edit]

Most text-editors designed for coding/programming are more than sufficient for editing bzw files. Although word-processing programs such as Microsoft Word can be used, there are many cheaper (free) and more efficient programs designed specifically for coding. If you are interested in syntax highlighting, look at the forum topic.

Windows[edit]

  • Notepad
  • PSPad
  • NoteTab
  • Notepad ++ - a tabbed editor based on Scite.

Mac[edit]

  • TextWrangler
  • TextEdit

Linux[edit]

  • Command-line editors such as nano, emacs, pico, vim, or ed.
  • GEdit
  • Kate
  • Scite

Editing existing maps[edit]

Beginning mapmakers should spend some time studying and making small changes in existing maps to see how things work. In the client, maps can be saved for editing by joining the desired server and choosing: Options>Save World. Maps can also be saved by issuing the /saveworld command. The map should be a simple map when getting started. One may find it easier to create a file in BZEdit and open the resulting file in the text-editor. One can gain experience by also converting map objects into their mesh equivalents such as converting a box into a meshbox or a pyramid into a meshpyramid.

Getting Started[edit]

One should become familiar with the BZW syntax before attempting to create a map by hand from scratch or have on hand a reference card. Also knowing the coordinates of where object placement(s) will occur based on the options set. The way world units are oriented in a normal right hand rule coordinate system with positive Z being the "UP" direction. "north" on the in game radar is the positive Y direction in map coordinates. This image shows a typical map, with the origin and axis directions clearly marked out. MapCoordinateSystem.png

The positioning of map objects in the "position" of an object goes as such. The first setting is for the "X" axis with the second being for the "Y" axis and the third being for the "Z" axis. The same applies to the "size" in a world object.

A good way to start learning is to begin with simple world objects and settings:

# Example world with settings and box
# The number sign is not needed for a map to function, but is used for comments.
world 
  size 400 
end 
options 
  +r 
  -j 
  -set _tankSpeed 25 
  -ms 5 
  -mp 0,2,0,2,0,2 
end 
box 
  name box1 
  position 0 0 0 
  size 10 10 10 
  rotation 0 
end 

Example map explained[edit]

First, it says:

# Example world with settings and box
# The number sign is not needed for a map to function, but is used for comments.

(Note: the # sign is used for comments.)

This is many times added by map editors, but with different comments.(depending on editor)

The next thing is:

world 
  size 400 # Sets the world size to 400 (800 x 800 total)
end 

This is rather self-explanatory. It's the <size> of the <world> (The BZFlag arena).

Next is an <options> section:

options 
  +r   # Enable Ricochet
  -j   # Enable Jumping
  -set _tankSpeed 25  # Sets the tank speed to 25 bzunits/second
  -ms 5  # Sets the maximum shots (per tank) to 5
  -mp 0,2,0,2,0,2  # Maximum of 2 Red Players, 2 Blue Players, and 2 Observers
end 

This allows you to define in the map file certain options that are also available from the command line when you start the bzfs server, or in the optional server config file. Options embedded into a world file will override those input on the command line or in a config file.

The commands listed here are: Ricochet, Jumping, Tank speed, Max Shots, and Max Players. These are rather self explanatory, except for Max Players. Each number represents how many of each of the following team players are allowed in the game (in the order listed): Rogue, Red, Green, Blue, Purple, Observer. Each number defines the max number of players per category.

For more info, see Options Object.

We now come to:

box 
  name box1      # Generally unused
  position 0 0 0 # X Y Z Position
  size 10 10 10  # X Y Z Size (bzunits from the position of the box)
  rotation 0     # Rotation (in degrees)
end 

This is a <box> with a <name> of <box1>. The <position> is 0,0,0 in R3[1]. The rest is pretty self explanatory.

Important: EVERY STATEMENT MUST HAVE AN END. If a statement does not have an end you will get an error.

Basic Definitions[edit]

Objects
Objects are the basic building blocks of the bzw file. Objects begin with a line declaring the object, some fields describing that object, and a line that closes the object (usually with "end"). Each of these sections of the object is important.
Comments
BZFS ignores anything in a line following the #; the line has been "commented out." It is highly recommended that comments be used often, both for the mapmaker and for others that may see the map.
3D Cartesian Coordinate System
In most objects, you will see three numbers after position and size. These numbers are coordinates on a graph. The first number is the x coordinate (left and right) the middle number is the y coordinate (forward and backward) and the third number is the z coordinate (height and depth). Another way of thinking of it is: x = width, y = depth, z = height. (Those accustomed to the Y axis determining height will have to slightly adjust their thinking.)

Optional client setup[edit]

There are some options that appear useful when editing a map, especially when editing by hand.

showCoordinates
The BZFlag client is capable of displaying a tank's current location for the player at the top right corner, right below the clock. This feature is being activated by executing the "/localset showCoordinates 1" command to the chat line.

Building World Objects[edit]

In order to build maps, one must know the world objects used in them. The table below provides an overview of the map objects which exist in BZFlag.

Map Object Description
Arc Arc is an object that defines an arc or cylinder in a map.
Base Base is an object which is similar to a box, but defines properties of it being a base for capture the flag style game play modes.
Box Box is an object which defines a cube structure in a world file.
Color(BZW) Color is used in a BZFlag world (BZW) as a sub parameter for many parameters, such as materials and dynamic colors.
Cone Cone object is a BZW object that defines a cone in a BZW world file.
Define Group Definition, or define, will group a set of objects that can be recalled and duplicated multiple times with the group object.
DrawInfo DrawInfo allows clients to render the mesh object more efficiently through LODs (Levels of Detail). Drawinfo also allows the ability to create moving objects in a map.
DynamicColor DynamicColor describes how a color channel will be dynamically updated.
GroundMaterial GroundMaterial is an option for a Material that allows one to set the ground texture. .
Group Group allows one to bring together a number of elements and refer to them as a single object.
Include Include is an option which allows one to specify a second bzw file that will be included in the first bzw.
Link Link is an object which creates a link (route) between two teleporters.
Linkmaterial LinkMaterial allows one to set the texture of the teleporter window to anything one would like it to be..
Material A material is used in a BZFlag world to define a new look for otherwise regular objects, such as meshboxes.
Mesh Mesh is an object which defines an arbitrary three dimensional shape.
Meshbox Meshbox is an update to the original Box object and supports features such as physics drivers and textures.
Meshpyr Meshpyr is an object that constructs a specialized mesh that has the geometric appearance of a Pyramid.
Options (object) Options object is a BZW map structure that defines various options for a server to use when running a map.
Physics Physics, or Physics Driver, is an object when applied to another object, will affect a tank touching it in some way.
Pyramid Pyramid is a BZW map structure that defines a polyhedron having a polygonal base and triangular sides with a common vertex in the world.
Sphere The sphere is an Object that defines a sphere in a map file.
Teleporter Teleporter is an object which transports the user to another teleporter in a different part of the world.
Tetra Tetra is an map object which creates a polygon with four vertices.
TextureMatrix TextureMatrix, or texmat, when applied to a material object, allows you to define how a texture will appear in a material.
WaterLevel WaterLevel is an object that defines a plane of water that spans the entire map. WaterLevel is deadly to all tanks that cross it.
Weapon (object) Weapon object is a BZW map structure that defines a fixed weapon effect.
World (object) World object is a BZW map structure that defines various options for the map.
Zone Zone is a rectangular BZW map structure for spawn or flag zones.

See also[edit]

Map Editors[edit]

BZEdit BZEditWin32 BZFed BZWTools DI-Machine
IBZEdit Modeltool PyBZEdit Wings3D

Map Objects[edit]

Arc Base Box Color(BZW) Cone Define DrawInfo
DynamicColor GroundMaterial Group Include Link Linkmaterial Material
Mesh Meshbox Meshpyr Options (object) Physics Pyramid Sphere
Teleporter Tetra TextureMatrix WaterLevel Weapon (object) World (object) Zone

Helpful links[edit]