This wiki is archived and useful information is being migrated to the main bzflag.org website

Difference between revisions of "Map making by hand"

From BZFlagWiki
Jump to: navigation, search
m (added link)
(Building World Objects: added wiki table and content)
 
(94 intermediate revisions by 22 users not shown)
Line 1: Line 1:
For additional reference material see the links at the bottom of the [[:Category:Map Making|Map Making]] page.
+
{{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]].}}
 +
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.
  
Complex shapes and options such as cones spheres meshes materials and physics can not be done in bzedit. Blender or wings3d have been mentioned to make these shapes, and while these are GREAT apps they tend to be very difficult to learn!  May I suggest doing what I like to do, code things by hand. I think it’s kind of fun although it may not sound to fun haha. It isn't as easy as bzedit but in my opinion is much easier than learning blender or wings3d.  
+
==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. 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===
 +
*Notepad
 +
*PSPad
 +
*NoteTab
 +
*[http://notepad-plus-plus.org/ Notepad ++] - a tabbed editor based on Scite.
  
What you can do is create something in bzedit. Save it. Go to that file right click on it and open it with notepad or textedit on a mac. It should have what you created, but typed in code. That is where you can add any objects you can possibly imagine.  
+
===Mac===
 +
*TextWrangler
 +
*TextEdit
 +
===Linux===
 +
*Command-line editors such as nano, emacs, pico, vim, or ed.
 +
*GEdit
 +
*Kate
 +
*Scite
  
I’ll explain very briefly how to write a simple box in "code"
+
==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.
 +
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]].
  
If you have created lets say a box in bzedit and opened the file in notepad you will see maybe #created in bzedit (date and all that) well any thing after a # sign the computer will ignore. You can put notes using the # this will prove to be helpful in some cases!! You will also notice the rest of the code will look something like this
+
==Getting Started==
 +
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:
 +
{|
 +
|
 +
# Example world with settings and box
 +
# The number sign is not needed for a map to function, but is used for comments.
 
  world  
 
  world  
 
   size 400  
 
   size 400  
 
  end  
 
  end  
 
 
  options  
 
  options  
 
   +r  
 
   +r  
Line 20: Line 52:
 
   -mp 0,2,0,2,0,2  
 
   -mp 0,2,0,2,0,2  
 
  end  
 
  end  
 
 
  box  
 
  box  
 
   name box1  
 
   name box1  
Line 27: Line 58:
 
   rotation 0  
 
   rotation 0  
 
  end  
 
  end  
 +
|}
  
The fist thing you may notice is that every thing is called. Such as world or options, or box. You must write that down to let the computer know what you are about to create; as well as after every object there is an end command. This must be used. Also CHECK SPELLING! The most stupid spelling mistake will keep the server from launching.  
+
=== Example map explained ===
All the options and what not... well there are bazillians of options that I won't explain here but I’ll give you a link.  
+
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.)
  
http://my.bzflag.org/w/Server_Variables
+
This is many times added by map editors, but with different comments.(depending on editor)
  
Put those in the options setting with "-set " in front of it. You can also make those changes as an admin by using /set _variable
+
The next thing is:
 +
<pre>
 +
world
 +
  size 400 # Sets the world size to 400 (800 x 800 total)
 +
end
 +
</pre>
 +
This is rather self-explanatory. It's the <size> of the <world> (The BZFlag arena).
  
The code for the cone works like a box. In fact the code for every other object other than meshes and tetra look like the box codeYou must say you are creating a cone. I’ll explain most of the complex shapes later in the post.  
+
Next is an <options> section:
 +
<pre>
 +
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
 +
</pre>
 +
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 fileOptions embedded into a world file will override those input on the command line or in a config file.
  
Incase the article hyperlinks below confuse you, (because I know it confused me) I’ll let you know the only real things you need to make a cone is divisions, position, and size. Divisions basically make the cone smoother. The higher the divisions the more smooth. For example, if you were to say 4 divisions it would look like a pyramid. Basically the divisions is how many sides there are. 4 divisions 4 sides. imagine 128 divisions. The sides would be so small you wouldn't really notice them making it look more like a cone. To see what I’m talking about go ahead and test it out. I’ll show the code to test it in a second. Position I assume you know what position is. Size I assume you know what that is too, how ever you should know that you can make a cone that's more of a oval cone simply by making the size something like 5 10 20. If the x is larger than the y coordinate or vise versa than obviously you have an oval, just like in a box you would have a rectangle. That's it.  
+
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.
  
cone
+
For more info, see [[Options_(object)|Options Object]].
  name cone1 <name is optional, but it helps  you.
+
  divisions 128
+
  position 0 0 0
+
  size 10 10 20
+
end
+
  
there are other options such as shift shear scale spin angle smoothbounce and flatshading and probably many more. Those options I’m not sure what they do. However I do know how to use the other options such as rotation(i'm sure you know what that does too ) which in a cones case doesn't matter really what way it's rotated, angle, which basically allows you to make maybe half of a cone. If you say angle 180, that would make half a cone. Angle 90 would make 1/4th of a cone and so on. To add one of these simply type in angle <number> somewhere under "cone". I also know how to use phydrv and matref. I’ll show you how to use those later in this post. For now lets move on to arcs
+
We now come to:
 +
<pre>
 +
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
 +
</pre>
 +
This is a <box> with a <name> of <box1>.
 +
The <position> is 0,0,0 in R3[https://en.wikipedia.org/wiki/Three-dimensional_space_(mathematics)].
 +
The rest is pretty self explanatory.
  
An arc...  
+
'''Important:''' EVERY STATEMENT MUST HAVE AN END.
 +
If a statement does not have an end you will get an error.
  
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. phydrv and matref I’ll show later. Let’s move to the sphere
+
===Basic Definitions===
 +
;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.)
  
The sphere...
+
===Optional client setup===
 
+
There are some options that appear useful when editing a map, especially when editing by hand.
The only options required to make a sphere are position, size, and divisions.
+
;showCoordinates
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 :O i can show you how to use phydrv and marref now.
+
: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.
 
+
Ok a phydrv is a physics driver. And a matref, well I’m not sure what it means, but I always thought it as material reference. Lets focus on material right now. A material is how you add a design or a texture on something. For example if you make a box, that box doesn’t have to have bricks around the outside of it like it does in bzedit. You want to make a tree? Later I will show you how to make a cone and put a material on it like Louman does for the trunk although Louman is way better than I am!! You might want to find a picture of wood on Google or something and use it as a material so that instead of a cone with bricks it looks like wood. I’ll show you how to do this later. You can change that design by using the material and matref. These two work together. Material is where you define the material. And matref is where you reference the material you defined. Let me show you...
+
 
+
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 addtexture and you state a texture name. Now, how do you know what texture names there are to use? I have a Mac so I can say how to get there for any one using a Mac.  This won't apply to a PC user. but this might help a little. Maybe someone else with a PC could explain the path better.
+
 
+
If you control click (right click) on the bzflag icon and click show package contents and click on contents and click on resources those are the pictures you may use.
+
 
+
The path will be different on a PC. I don't know what it is. 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 (i used above). You can check the rest out by going to that folder. You can also add your own. Any picture you add must be in a .png format. I suggest just taking a screen shot of a picture you want to use, such as, the wood picture to make a tree trunk. Most screen shots are .png formats. (At least mine are) you can name that what ever you want as long as it has a .png in the title and no spaces. Then put it in the same folder as the rest of the images in the resource folder. You may now reference those images by typing matref (name of image.png)
+
 
+
Also you probably noticed I typed meshbox, not box. To enable the material or physics it must be a meshbox. A meshbox is a box just like a "box" however it enables things such as materials and physics. The same goes for pyramids. You must type meshpyr to get a pyramid with a material on it or physics. However objects such as spheres cones and arcs don't need do have the word mesh in front of them.
+
 
+
Also a really cool thing is diffuse. You can add the diffuse command and it will look like this diffuse 1 1 1 1. Those four numbers represent things. 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. Now the fourth number is cool. It is the opacity or transparency. The see through-ability I call it.  0 is invisible .5 is half invisible 1 is normal. If you use this I suggest using the texture mesh.png only because it looks the best however you can use that option on any texture. so it would look like the code below. (For default images you don't have to say .png but I suggest getting in the habit of doing it.)
+
 
+
material
+
  name mat1
+
  diffuse .5 .25 .1 .6
+
  addtexture mesh.png
+
end
+
 
+
So the best way of thinking about a material or rather a meshbox is NOT this– A mateial isn't something you put on as a skin to a box. A meshbox is a different type of box that allows the use of a material or physics. So lets cap up materials
+
 
+
 
+
 
+
material <you must type material
+
  name mat1 <you must give it a name so that you can reference it, the name may be any thing as long as there are no spaces and ends in .png. I named it mat1
+
  addtexture <add a texture name you may find in the folder I specified simply by  typing the file name of that image.
+
end <must use end
+
 
+
meshbox <this alows for a box to use the material above
+
  position x y z
+
  size x y z
+
  rotation 0
+
  matref mat1<referencing the material to the name mat1 so that this box will have the properties of the material specified.
+
end <must use end
+
 
+
Similarly, lets make a mesh pyramid (a pyramid with different images on it)
+
 
+
meshpry <this alows for a pyramid to use the material above
+
  position x y z
+
  size x y z
+
  rotation 0
+
  matref mat1 <referencing the material to the name mat1 (note, I can have several material listed above with different names and reference them as I want with different objects
+
end <must use end
+
 
+
And the same for an arc, cone and sphere, this time without the mesh in front of the name
+
 
+
sphere
+
  divisions 128
+
  position
+
  size
+
  rotation
+
  matref mat1
+
end
+
 
+
Done with materials.
+
 
+
Lets move on to phydrv and 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... well 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, that's the only way I can explain it. Whichever way the tank is moving it will keep moving that way. A good example is in ... I forgot the exact title, but it's the "wide world even wider" on the sides if you go up top there is a slide physics.
+
 
+
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.  
+
 
+
Now you know how to write a physics you have to be able to reference it.
+
Let me show you the code
+
 
+
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
+
  
I hope this helped. As you get more advanced into making maps by hand you will start doing meshes and "tetra" which is a tetrahedron. <I think that's how you spell it. I’m willing to explain meshes but it's much more complicated and would be easier to explain in a conversation.  
+
==Building World Objects==
 +
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.
 +
{|{{Prettytable}}
 +
|-
 +
| {{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.
 +
|}
  
If you have any more questions my email is dirtbikerdude_91@yahoo.com
+
==See also==
 +
===Map Editors===
 +
{| class="wikitable" style="margin-right: auto; margin-left: 0px;"
 +
| [[BZEdit]]
 +
| [[BZEditWin32]]
 +
| [[BZFed]]
 +
| [[BZWTools]]
 +
| [[DI-Machine]]
 +
|-
 +
| [[IBZEdit]]
 +
| [[Modeltool]]
 +
| [[PyBZEdit]]
 +
| [[Wings3D]]
 +
|
 +
|}
  
callsign flight
+
===Map Objects===
 +
{{Template:Map objects}}
  
I’m happy to answer any questions that I am capable of answering.
+
===Helpful links===
 +
* [[Comparison of map editors]]
 +
* [[Comparison of map objects]]
 +
* [[Map FAQ]]
 +
* [[Map making]]
 +
* [[Texturing how to]]
 +
* [[World units]]
  
 +
[[Category:Tutorials]]
 
[[Category:Map Making]]
 
[[Category:Map Making]]
 +
[[Category:Partial Documentation]]

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]