<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.bzflag.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=The+Purple+Panzer</id>
	<title>BZFlagWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.bzflag.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=The+Purple+Panzer"/>
	<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/Special:Contributions/The_Purple_Panzer"/>
	<updated>2026-05-05T00:14:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Category:Map_Making&amp;diff=8373</id>
		<title>Category:Map Making</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Category:Map_Making&amp;diff=8373"/>
		<updated>2012-08-13T02:04:20Z</updated>

		<summary type="html">&lt;p&gt;The Purple Panzer: Revised the &amp;#039;scripting&amp;#039; section to remove the &amp;#039;this is trivial&amp;#039; tone&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BZFlag uses its own map file format, [[BZW]] (BZ World). BZW files are text based and contain a list of objects and map options that are read by the [[BZFS]] server. There is a [[Map FAQ]] that deals with several frequently asked map making questions.&lt;br /&gt;
&lt;br /&gt;
==Map Creation Methods==&lt;br /&gt;
BZFlag has several well practiced methods for the design of maps, from simple text editing, custom editors, to exporters for 3D modeling software. While basic dedicated map editors, such as BZEdit, can often only create simple objects, 3D modeling software can create complex custom [[mesh]] objects, but have a much steeper learning curve.&lt;br /&gt;
&lt;br /&gt;
===Dedicated Map editors===&lt;br /&gt;
Dedicated BZFlag map editors (i.e. written specifically for graphically editing BZW files) generally go by the name BZEdit. There are a number of versions of BZEdit that have been developed over the years. Each editor has its own level of support for various map features. At this time there is no custom editor that supports every feature of the BZW format. In general, these will only support simple version 1.10 objects, like boxes, pyramids, bases, and teleporters.&lt;br /&gt;
&lt;br /&gt;
Editors supporting BZW 1.10 features:&lt;br /&gt;
*[[BZEdit]]&lt;br /&gt;
*[[BZEditWin32]]&lt;br /&gt;
*[[BZFed]]&lt;br /&gt;
&lt;br /&gt;
Editors supporting some BZW 2.0 features.&lt;br /&gt;
*[[iBZEdit]]&lt;br /&gt;
*[[pyBZEdit]]&lt;br /&gt;
&lt;br /&gt;
===Non-dedicated editors===&lt;br /&gt;
Technically, you can use any 3D modeling package that can export to .obj format. You can then either use [[modeltool]] or Wings3D to convert that file to BZW format.&lt;br /&gt;
&lt;br /&gt;
====Blender====&lt;br /&gt;
The [http://www.blender.org/ blender] 3D modeling application features a plug-in called [[BZWTools]], which enables blender to read and write the BZW file format and to create BZW specific objects.  Tutorials on using blender (not specific to BZFlag) can be found on the [http://www.blender.org/tutorials-help/tutorials/ blender web tutorials] pages.&lt;br /&gt;
&lt;br /&gt;
====Wings 3D====&lt;br /&gt;
[http://www.wings3d.com/ Wings 3D] is a good modeler to use if you&#039;re new modeling. It has a much smaller learning curve than Blender, although it doesn&#039;t have as many features. The [[BZW Exporter for Wings3D]] allows you to export wings objects to a BZW file. Tutorials on using wings (not specific to BZFlag) can be found on the [http://www.wings3d.com/tutorials.php wings web tutorials] pages, as well as a useful tutorial on [http://www.geocities.com/peterchov/BarrelUV.html UV mapping]&lt;br /&gt;
&lt;br /&gt;
====Getting Maps In .obj Format====&lt;br /&gt;
It is not widely known that you can export a bzflag map from the actual bzflag client in .obj format.  To do so, you must connect to a server hosting the BZW map you would like to download and type &#039;&#039;/saveworld -o &amp;quot;mapname.obj&amp;quot;&#039;&#039;.  This will allow you to then import the .obj file into a modeler and edit the map.&lt;br /&gt;
&lt;br /&gt;
===Creating BZW files via scripting or programming===&lt;br /&gt;
Writing programs to output map files can be a very effective and efficient way of creating maps.  One may, for instance, use variables to represent key heights or distances within maps (so that, for example, anyone at a given level may shoot someone at the same level), or to create composites based on collections of basic objects, co-located programmatically.  Basic objects may be stretched/scaled to fit specific spaces; they may be programmatically varied in texture, color, and position; software may (internally) represent objects and work with them so that they don&#039;t collide or overlap.  AI-based software may compose maps based on specific design principles, aiming for particular play styles or tactical challenges.&lt;br /&gt;
&lt;br /&gt;
The core of software map generation is the creation of the basic BZFlag elements, whether the simple boxes, pyramids, etc., or complete meshes, by outputting map element statements to a file.  The objects are typically output as sequences of text strings to a .bzw model file, which may then be read by the bzfs server.  While simple objects may be fairly easily edited by hand, more complex objects, such as meshes, are more readily generated by software.&lt;br /&gt;
&lt;br /&gt;
Mesh generation, while it may be done with Blender, etc., as above, may be done equally as well by constructing programs to output the faces required within a mesh.  For example, a program may take a curve and spin it about an axis to create a 3D surface (a sort of &amp;quot;lathe&amp;quot; in the virtual world), outputting faces at each increment of rotation.  Hand-written scripting software may fit irregular polygons together, defining a sequence of mesh objects that seamlessly create, for example a roadway.  Writing such software usually requires very careful testing to guarantee that the bzfs server interprets the objects as the author intends.&lt;br /&gt;
&lt;br /&gt;
Software map creation provides the map maker with the ability to customize objects in detail, such as whether the faces of the object allow bullets or tanks to pass, or the level of transparency to assign to any specific face, at a level of detail often hard to achieve within other 3D modeling tools.  Abstractions within map generation software are often defined to create basic tactically-relevant map elements - these then may be scaled, shifted, textured, or otherwise modified to fit a particular designer&#039;s tastes or constraints.   &lt;br /&gt;
&lt;br /&gt;
The disadvantages in using this are that the underlying representation of the work is not available directly from the map file.  The underlying intended abstractions are missing because only the resulting object primitives are in the generated map file, and there is no straightforward way to recover this (though software may be used to parse existing map files with the goal of augmenting them).  This lack of directly-accessible abstraction is of course true of any tool used to generate a map, there being no standard way to encode this within a .bzw file.  &lt;br /&gt;
&lt;br /&gt;
===Editing by Hand===&lt;br /&gt;
The last method of creating maps is simply coding them by hand as text files using the raw BZW structures. This is still one of the most common ways that people create and edit maps, and can be very fun and challenging. This is easily done in any text editor, for example NotePad on Windows, and TextEdit on Mac OS X.&lt;br /&gt;
&lt;br /&gt;
Most maps made by hand tend to be fairly simple, though experienced mappers have made some extraordinary maps in this way. The reason for the popularity of the &amp;quot;hand made&amp;quot; approach is partly because of the simple structure of the BZW code, but also the fact that, until recently, there were no graphical editors available for operating systems like Mac OS X. A detailed explanation about creating a map by hand can be found on the [[Editing by Hand]] page.&lt;br /&gt;
&lt;br /&gt;
Maps that contain 2.0 objects (such as [[mesh]]) tend to have been either completely made in a text editor, or partly modeled in 3D modeling software, and later manipulated in text format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;/div&gt;</summary>
		<author><name>The Purple Panzer</name></author>
	</entry>
	<entry>
		<id>https://wiki.bzflag.org/index.php?title=Mesh&amp;diff=5898</id>
		<title>Mesh</title>
		<link rel="alternate" type="text/html" href="https://wiki.bzflag.org/index.php?title=Mesh&amp;diff=5898"/>
		<updated>2009-06-21T19:59:02Z</updated>

		<summary type="html">&lt;p&gt;The Purple Panzer: Changed &amp;quot;material&amp;quot; to &amp;quot;matref&amp;quot; in the description of &amp;quot;face&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A mesh is a [[BZW]] map object that defines an arbitrary three dimensional shape. A mesh is defined as a series of faces containing 3 or more points(vertices) in three dimensional space.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
The code for a mesh object is as follows, this is only an example&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
 mesh&lt;br /&gt;
  name example_mesh&lt;br /&gt;
    #&lt;br /&gt;
    # Material properties and physics applied to a mesh apply to all faces&lt;br /&gt;
    # that follow the setting. Mesh faces will alter their own&lt;br /&gt;
    # properties without affecting the state of the mesh properties.&lt;br /&gt;
    #&lt;br /&gt;
  inside 5.5 4.5 1.2 # add an inside point (repeatable) &lt;br /&gt;
  outside 0 0 1000 # add an outside point (repeatable) &lt;br /&gt;
  vertex 100 200 300 # add a vertex (repeatable) &lt;br /&gt;
  normal 1.0 0 0 # add a normal (repeatable) &lt;br /&gt;
  texcoord 0.1 0.75 # add a texture coordinate (repeatable) &lt;br /&gt;
  shift 0 0 0 # (repeatable) &lt;br /&gt;
  scale 1 1 1 # (repeatable) &lt;br /&gt;
  shear 0 0 0 # (repeatable) &lt;br /&gt;
  spin angle nx ny nz # (repeatable) &lt;br /&gt;
  phydrv example_phydrv # assign a physics driver &lt;br /&gt;
  smoothbounce # ricochets use normals &lt;br /&gt;
  noclusters # render each mesh face individually &lt;br /&gt;
             # (this can be useful for occluders) &lt;br /&gt;
  face # start a face (repeatable) &lt;br /&gt;
       # faces must be convex polygons &lt;br /&gt;
    vertices 1 4 0 3 5 # list of vertices (requires at least three) &lt;br /&gt;
    normals 2 6 0 4 7 # list of normals (optional) &lt;br /&gt;
    texcoords 0 3 2 4 9 # list of texture coordinates (optional) &lt;br /&gt;
    phydrv example_phydrv # assign a physics driver &lt;br /&gt;
    smoothbounce &lt;br /&gt;
    noclusters &lt;br /&gt;
    drivethrough &lt;br /&gt;
    shootthrough &lt;br /&gt;
    passable &lt;br /&gt;
    matref &lt;br /&gt;
  endface # end the face &lt;br /&gt;
   #&lt;br /&gt;
   #  The drawInfo element can be added to increase the rendering speed&lt;br /&gt;
   #  of the mesh object. If the client is capable of using this data,&lt;br /&gt;
   #  then it is used to draw the mesh instead of the face  information.&lt;br /&gt;
   #&lt;br /&gt;
 end	  # mesh&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Valid parameters for a mesh are&lt;br /&gt;
&amp;lt;properties&amp;gt;&lt;br /&gt;
name=The name of the mesh&lt;br /&gt;
vertex= this is a &#039;corner&#039; of your mesh - a point where faces connect. (at least 3 are required)&lt;br /&gt;
normal= a unit vector describing the direction light will reflect off the object&lt;br /&gt;
texcoord= this is used for mapping textures onto the mesh.  This will link a point of the 2-Dimensional texture to a vertex on the 3-Dimensional object.  (0,0) refers to the lower left corner of the texture, (1,1) refers to the top right.  Textures are defined in the [[material]] object.&lt;br /&gt;
inside= an arbitrary vertex placed on the inside of the mesh object.  This keeps tanks from driving or spawning inside the object.&lt;br /&gt;
phydrv=Assign a physics driver as defined in the [[physics]] object.&lt;br /&gt;
smoothbounce=shot will ricochet from the face in the same direction as the defined normal.&lt;br /&gt;
noclusters=Render each face individually.&lt;br /&gt;
shift=places the mesh using &amp;lt;x y z&amp;gt; coordinates&lt;br /&gt;
scale=resizes the mesh along the x, y, or z axis&lt;br /&gt;
shear=repeatable&lt;br /&gt;
spin=spins the mesh &amp;lt;angle&amp;gt; number of degrees, &amp;lt;n&amp;gt; number of rotations along one or more of the x, y, or z axiis&lt;br /&gt;
matref=Assign a [[material]] to all below faces.&lt;br /&gt;
face=Start a face (required), see below:&lt;br /&gt;
&amp;lt;/properties&amp;gt;&lt;br /&gt;
Valid parameters within the face sub-object:&lt;br /&gt;
&amp;lt;properties&amp;gt;&lt;br /&gt;
vertices=Numbered list of vertices for this face. (requires at least three)&lt;br /&gt;
normals=Numbered list of normals for this face.&lt;br /&gt;
texcoords=Numbered list of texture coordinates for this face.&lt;br /&gt;
phydrv=Assign a [[Physics|physics driver]] to this face only.&lt;br /&gt;
smoothbounce=use normals to determine shot ricochets for this face.&lt;br /&gt;
noclusters&#039;&#039;&#039;&lt;br /&gt;
drivethrough=Tanks can drive through this face.&lt;br /&gt;
shootthrough=Tanks can shoot through this face.&lt;br /&gt;
passable=Tanks can both shoot and drive through this face&lt;br /&gt;
matref=Assign a [[material]] to this face.&lt;br /&gt;
&amp;lt;/properties&amp;gt;&lt;br /&gt;
Meshes have full support for [[Material]] (wherein custom textures can be defined) and [[Physics Drivers]].&lt;br /&gt;
&lt;br /&gt;
==DrawInfo==&lt;br /&gt;
[[DrawInfo]] can be added to the mesh object to increase rendering efficiency, allowing the designer to specify which details will be seen from certain distances.  It can also be used to rotate a mesh object, though tanks can not interact with the moving object.&lt;br /&gt;
&lt;br /&gt;
==Appearance==&lt;br /&gt;
The shape of a mesh will vary greatly as by its very nature it can be defined to look like anything.  Unless a material is defined and applied, the default &amp;quot;mesh.png&amp;quot; texture will be applied to all faces of the mesh.&lt;br /&gt;
&lt;br /&gt;
==Simplified Examples==&lt;br /&gt;
{|&lt;br /&gt;
|Simple Cube&lt;br /&gt;
 mesh&lt;br /&gt;
    vertex -10 -10 0&lt;br /&gt;
    vertex 10 -10 0&lt;br /&gt;
    vertex 10 10 0&lt;br /&gt;
    vertex -10 10 0&lt;br /&gt;
    vertex -10 -10 10&lt;br /&gt;
    vertex 10 -10 10&lt;br /&gt;
    vertex 10 10 10&lt;br /&gt;
    vertex -10 10 10&lt;br /&gt;
    face #south&lt;br /&gt;
        vertices 0 1 5 4&lt;br /&gt;
    endface&lt;br /&gt;
    face #east&lt;br /&gt;
        vertices 1 2 6 5&lt;br /&gt;
    endface&lt;br /&gt;
    face #north&lt;br /&gt;
        vertices 2 3 7 6&lt;br /&gt;
    endface&lt;br /&gt;
    face #west&lt;br /&gt;
        vertices 3 0 4 7 &lt;br /&gt;
    endface&lt;br /&gt;
    face #bottom&lt;br /&gt;
        vertices 0 1 2 3&lt;br /&gt;
    endface&lt;br /&gt;
    face #top&lt;br /&gt;
        vertices 4 5 6 7&lt;br /&gt;
    endface&lt;br /&gt;
 end #mesh&lt;br /&gt;
|Simple billboard with texcoords&lt;br /&gt;
 mesh &lt;br /&gt;
     vertex -10 0 0&lt;br /&gt;
     vertex 10 0 0&lt;br /&gt;
    vertex 10 0 10&lt;br /&gt;
    vertex -10 0 10&lt;br /&gt;
    texcoord 0 0&lt;br /&gt;
    texcoord 1 0&lt;br /&gt;
    texcoord 1 1&lt;br /&gt;
    texcoord 0 1&lt;br /&gt;
    matref myBillboard&lt;br /&gt;
    face&lt;br /&gt;
        vertices 0 1 2 3&lt;br /&gt;
        texcoord 0 1 2 3&lt;br /&gt;
    endface&lt;br /&gt;
    face #backside&lt;br /&gt;
        vertices 1 0 3 2&lt;br /&gt;
        texcoord 1 0 3 2&lt;br /&gt;
    endface&lt;br /&gt;
 end #mesh&lt;br /&gt;
|Simple Jump-through floor&lt;br /&gt;
 mesh&lt;br /&gt;
    vertex 0 0 9&lt;br /&gt;
    vertex 10 0 9&lt;br /&gt;
    vertex 10 10 9&lt;br /&gt;
    vertex 0 10 9&lt;br /&gt;
    vertex 0 0 10&lt;br /&gt;
    vertex 10 0 10&lt;br /&gt;
    vertex 10 10 10&lt;br /&gt;
    vertex 0 10 10&lt;br /&gt;
    face #south&lt;br /&gt;
        vertices 0 1 5 4&lt;br /&gt;
    endface&lt;br /&gt;
    face #east&lt;br /&gt;
        vertices 1 2 6 5&lt;br /&gt;
    endface&lt;br /&gt;
    face #north&lt;br /&gt;
        vertices 2 3 7 6&lt;br /&gt;
    endface&lt;br /&gt;
    face #west&lt;br /&gt;
        vertices 3 0 4 7 &lt;br /&gt;
    endface&lt;br /&gt;
    face #bottom&lt;br /&gt;
        vertices 0 1 2 3&lt;br /&gt;
        drivethrough&lt;br /&gt;
    endface&lt;br /&gt;
    face #top&lt;br /&gt;
        vertices 4 5 6 7&lt;br /&gt;
    endface&lt;br /&gt;
 end #mesh&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Editor Support==&lt;br /&gt;
The mesh object is supported by the [[BZWTools]] blender plugin, the Wings3D Exporter and hand coding.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The Mesh object was added with the [[BZFlag 2.0.0|v2.0.0]] release of BZFlag.&lt;br /&gt;
&lt;br /&gt;
[[Category:Map Making]]&lt;br /&gt;
[[Category:Map_Objects]]&lt;/div&gt;</summary>
		<author><name>The Purple Panzer</name></author>
	</entry>
</feed>