1BZW(5)                              BZFlag                              BZW(5)
2
3
4

NAME

6       bzw - BZFlag world file format
7

DESCRIPTION

9       The BZFlag world file format describes a world environment that is used
10       by the BZFlag game server, bzfs.  X BZW file format
11
12       The BZFlag world file format describes and  environment  that  includes
13       the  game  map, physical world attributes, and automatic world weapons.
14       The map may contain a variety of "obstacles" like buildings,  pyramids,
15       and  meshes.   These  obstacles make up the world that the BZFlag tanks
16       will drive around in.  Map attributes may be set to  create  worlds  of
17       various sizes, the default size is 800x800.
18
19       Here is small example world:
20
21       # simple world containing a box, pyramid, and mesh
22       world
23         name Simple World
24         size 100.0
25       end
26       box
27         position -20 -20 0
28         size 10 20 10
29       end
30       pyramid
31         position 20 20 0
32         size 10 10 20
33       end
34       mesh
35         vertex -10 0 0
36         vertex 10 0 0
37         vertex 0 10 0
38         face
39           vertices 0 1 2
40         endface
41       end
42
43       The  .bzw  file is a plain text file with a relatively simple file for‐
44       mat.  The format of this text file consists of any  number  of  objects
45       listed  in any order (except that physics, textureMatrix, dynamicColor,
46       and material must come before they are referenced)  separated  by  new‐
47       lines  and  grouped  into blocks of types. The list of world types con‐
48       sists of:
49       world
50       options
51       waterLevel
52       dynamicColor
53       textureMatrix
54       transform
55       material
56       physics
57       define
58       group
59       mesh
60       meshbox
61       meshpyr
62       arc
63       cone
64       sphere
65       tetra
66       box
67       pyramid
68       link
69       teleporter
70       base
71       weapon
72       zone
73
74       Each object is described by placing the type on one line, the word  end
75       on  a following line, and a list of attributes for that object, one per
76       line, in between. The exceptions to the rule are define and face, which
77       are concluded with enddef and endface.  Attributes may be listed in any
78       order. Attributes have default values, and if that is good enough,  the
79       attribute need not be listed.
80
81       Words are always specified in lowercase. Line comments can be specified
82       by placing a # sign at the start of the line.
83
84       For documentation purposes, you can tag each object by  adding  a  name
85       attribute. There is no set limit to the number of times you may use any
86       of the objects except for the world, options, and  waterLevel  objects,
87       they  can  only  be specified once. The options object contains command
88       line arguments that are used to configure the server's game  mode,  but
89       can not contain server specific options such as -p, -passwd, and -conf.
90
91       In the following examples, the values are the defaults.
92
93       The World object
94       Header for the world.
95
96       world
97         name example_world
98         size 400.0
99         flagHeight 10.0
100       end
101
102       The Options object
103       A world file interface for setting command line options for BZFS.
104
105       options
106         -set _tankSpeed 36
107         -j +r -ms 3
108         +f GM{5} +f SW{5}
109       end
110
111
112       The Water Level object
113       Sets how high the water is, in a matter of units.
114
115       waterLevel
116         name example_waterlevel
117         height -1.0 # anything below 0 turns it off
118       end
119
120
121       The Group Definition object
122       Defines a group, which may include other group instances
123       This  does  not place any objects into the world, a group instance must
124       be used to generate world objects from a group definition.
125
126       define <example_groupdef>
127         # You can add any object to a group definition,
128         # except for the following types:
129         #   textureMatrix
130         #   dynamicColor
131         #   material
132         #   physics
133         #   links
134         #   weapon
135         #   zone
136       enddef
137
138
139       The Group Instantiation object
140       Instantiates a group, and possibly modifies subobjects
141
142       group <example_groupdef>  # a valid group definition reference
143         shift 0 0 0          # (repeatable)
144         scale 1 1 1          # (repeatable)
145         shear 0 0 0          # (repeatable)
146         spin angle nx ny nz  # (repeatable)
147                              # angle degrees about vector n
148         team 0        # change all base colors within group
149         tint 1 1 1 1  # hierarchically tints objects within this group
150         drivethrough  # make all subobjects drivethrough
151         shootthrough  # make all subobjects shootthrough
152         ricochet      # make all subobjects ricochet
153         phydrv example_phydrv     # reassign any valid physics drivers
154         matref example_material # set material properties
155
156                                   # (except for the color)
157        matswap oldMat newMat #replace a given material in the instance
158       end
159
160
161       The Dynamic Color object
162
163       dynamicColor
164         name example_dyncol
165         # there are 4 channels that can be modified:
166         #   red, green, blue, alpha
167         # there are 5 types of commands per channel:
168         #   limits, sinusoid, clampUp, clampDown, sequence
169         # except for "limits" and "sequence", the commands are repeatable
170         # if a sequence is used, then clampUps and clampDowns have no effect
171         # sequences can use three states (0, 1, 2).
172         #   0 - equivalent to an active clampDown
173         #   1 - equivalent to no clamps
174         #   2 - equivalent to an active clampUp
175         # if both clampUp and clampDown are active, the value is (min+max)/2
176         # the sinusoid function starts at the max value
177         # the sum of a channel's sinusoids is clamped between 0 and 1
178         red limits 0 1               # min/max limits
179         green sinusoid 0.1 0 0.25    # period, offset, weight
180         blue clampUp 0.1 0 0.75      # period, offset, width
181         alpha clampDown 0.2 0.5 0.5  # period, offset, width
182         red sequence 0.0 0.0 2 0 1 1 2 0 ... # period, offset, list of states
183       end
184
185
186       The Texture Matrix object
187
188       textureMatrix
189         name example_texmat
190         scale 0.0 0.0 1.0 1.0  # u/v freqs, u/v scales
191         spin 0.0               # rotation freq
192         shift 0.0 0.0          # u/v freqs
193         center 0.5 0.5         # dynamic u/v center (for spin and scale)
194         fixedscale 0.0 0.0     # time invariant u/v scale
195         fixedspin 0.0          # time invariant rotation
196         fixedshift 0.0 0.0     # time invariant u/v shift
197       end
198
199
200       Material Properties
201
202       Material properties may be set on several types of  objects,  including
203       meshes,  mesh  faces,  arcs,  cones,  spheres, and tetras. Here are the
204       properties:
205
206       material
207         name example_material
208         resetmat                  # restore default values
209         matref material_name      # copy another material's properties
210         ambient  0.2 0.2 0.2 1.0  # ambient color
211         diffuse  1.0 1.0 1.0 1.0  # diffuse color (main color)
212         color    1.0 1.0 1.0 1.0  # synonym for 'diffuse'
213         specular 0.0 0.0 0.0 1.0  # specular color
214         emission 0.0 0.0 0.0 1.0  # emission color
215         shininess 0.0             # shininess (0.0 – 128.0)
216         texture filename     # set working texture
217         # - non-interlaced PNG
218         # - http:// or ftp:// hyperlinks can be used  (no spaces)
219         # - BZFlag default texture names can be used  (.png not required)
220         addtexture filename  # add texture
221         notextures           # specify that no textures are to be used
222         notexalpha           # don't use the texture's alpha channel
223         notexcolor           # the color is not applied to the texture
224         # if a texture is specified, but not found, the default texture
225         # will be used. if the default texture is also not available, then
226         # the color will be used (untextured)
227         spheremap            # use spherical texture coordinate mapping
228         texmat -1            # texture matrix  (-1 for none)
229         dyncol -1            # dynamic color  (-1 for none)
230         noradar              # do not display on radar  (except normal mode)
231         noshadow             # do not render shadows
232         noculling            # do not cull by face winding  (double-sided)
233         nosorting            # do not do front-to-back alpha sorting
234         nolighting           # disable lighting
235         alphathresh 0.0      # alpha thresholding value
236         groupalpha           # sort translucent faces as a group
237         occluder             # faces with this material will occlude
238       end
239
240
241       The Physics Driver object
242
243       physics
244         name example_phydrv
245         linear  0.0 0.0 0.0  # x/y/z linear velocities
246         angular 0.0 0.0 0.0  # rotation freq, x/y coordinates
247         slide 0.0            # time until max velocity  (> 0.0 enables)
248         death Message goes here.
249         # the 'death' property requires a non-blank message
250       end
251
252
253       The Mesh object
254
255       mesh
256         name example_mesh
257         # Material properties applied to a mesh apply to all faces
258         # that follow the setting. Mesh faces will alter their own
259         # properties without affecting the state of the mesh properties.
260         # The same pattern is used to apply physics drivers.
261         vertex 100 200 300  # add a vertex              (repeatable)
262         normal 1.0 0 0      # add a normal              (repeatable)
263         texcoord 0.1 0.75   # add a texture coordinate  (repeatable)
264         inside 5.5 4.5 1.2  # add an inside point       (repeatable)
265         outside 0 0 1000    # add an outside point      (repeatable)
266         shift 0 0 0           # (repeatable)
267         scale 1 1 1           # (repeatable)
268         shear 0 0 0           # (repeatable)
269         spin angle nx ny nz   # (repeatable)
270         phydrv example_phydrv # assign a physics driver
271         smoothbounce          # ricochets use normals
272         noclusters            # render each mesh face individually
273         face  # start a face   (repeatable)
274           # the front-face winding is counter-clockwise
275           vertices 1 4 0 3 5   # list of vertices (requires at least three)
276           normals 2 6 0 4 7    # list of normals              (optional)
277           texcoords 0 3 2 4 9  # list of texture coordinates  (optional)
278           phydrv example_phydrv  # assign a physics driver
279         endface  # end the face
280         #
281         #  This next element can be added to increase the rendering speed
282         #  of the mesh object. If the client is capable of using this data,
283         #  then it is used to draw the mesh instead of the face information.
284         #
285         drawInfo
286           dlist                      # display list for all material sets
287           decorative                 # older clients with not see this mesh
288           angvel <degrees/sec>       # rotation about initial Z axis
289           extents <minX> <minY> <minZ> <maxX> <maxY> <maxZ>
290           sphere <x> <y> <z> <radiusSquared>
291           corner <v> <n> <t>         (repeatable)
292           vertex 0.0 0.0 0.0         (repeatable)
293           normal 0.0 0.0 0.0         (repeatable)
294           texcoord 0.0 0.0           (repeatable)
295           lod                        (repeatable)
296             lengthPerPixel <value>
297             matref <name>            (repeatable)
298               dlist                  # display list for this material set
299               sphere <x> <y> <z> <radiusSquared>
300               points    0            (repeatable)
301               lines     0 1          (repeatable)
302               lineloop  0 1          (repeatable)
303               linestrip 0 1          (repeatable)
304               tris      0 1 2        (repeatable)
305               tristrip  0 1 2        (repeatable)
306               trifan    0 1 2        (repeatable)
307               quads     0 1 2 3      (repeatable)
308               quadstrip 0 1 2 3      (repeatable)
309               polygon   0 1 2        (repeatable)
310             end  # matref
311           end    # lod
312         end      # drawInfo
313       end        # mesh
314
315
316       The Arc object
317
318       arc
319         name example_arc
320         divisions 16   # number of subdivisions
321         flatshading    # flat shading  (smooth is default)
322         angle 360      # the sweep angle
323         ratio 1        # (outrad - inrad) / outrad
324         position 0.0 0.0 0.0
325         size 10 10 10
326         rotation 0.0
327         shift 0 0 0            # (repeatable)
328         scale 1 1 1            # (repeatable)
329         shear 0 0 0            # (repeatable)
330         spin angle nx ny nz    # (repeatable)
331         phydrv example_phydrv  # assign a physics driver
332         smoothbounce           # ricochets use normals
333       end
334
335
336       The Cone object
337
338       cone
339         name example_cone
340         divisions 16   # number of subdivisions
341         flatshading    # flat shading  (smooth is default)
342         angle 360      # the sweep angle
343         position 0.0 0.0 0.0
344         size 10 10 10
345         rotation 0.0
346         shift 0 0 0            # (repeatable)
347         scale 1 1 1            # (repeatable)
348         shear 0 0 0            # (repeatable)
349         spin angle nx ny nz    # (repeatable)
350         phydrv example_phydrv  # assign a physics driver
351         smoothbounce           # ricochets use normals
352       end
353
354
355       The Sphere object
356
357       sphere
358         name example_sphere
359         divisions 4    # number of subdivisions
360         flatshading    # flat shading  (smooth is default)
361         position 0.0 0.0 10.0
362         size 10 10 10
363         radius 10      #  sets all size values to this value
364         rotation 0.0
365         shift 0 0 0            # (repeatable)
366         scale 1 1 1            # (repeatable)
367         shear 0 0 0            # (repeatable)
368         spin angle nx ny nz    # (repeatable)
369         phydrv example_phydrv  # assign a physics driver
370         smoothbounce           # ricochets use normals
371       end
372
373
374       The Tetrahedron object
375
376       tetra
377         name example_tetra
378       # there must always be 4 vertices
379         vertex -10.0 -5.0 0.0
380         vertex +10.0 -5.0 0.0
381         vertex 0.0 10.0 0.0
382         vertex 0.0 5.0 10.0
383         shift 0 0 0            # (repeatable)
384         scale 1 1 1            # (repeatable)
385         shear 0 0 0            # (repeatable)
386         spin angle nx ny nz    # (repeatable)
387       end
388
389
390       The Box object
391       Adds a simple block.
392
393       box
394         name example_box
395         position 0.0 0.0 0.0
396         size 30.0 30.0 9.42
397         rotation 0.0
398       end
399
400
401       The Pyramid object
402       Adds a triangular shaped object.
403
404       pyramid
405         name example_pyramid
406         position 0.0 0.0 0.0
407         size 8.2 8.2 10.25
408         rotation 0.0
409       end
410
411
412       The Teleporter object
413       Adds an object that places a tank at another teleporter in a  different
414       area when ran through.
415
416       teleporter [name]
417       # the [name] tag is used for linkage
418         name example_teleporter
419         position 0.0 0.0 0.0
420         size 5.06 4.48 20.16
421         rotation 0.0
422         border 1.12
423       end
424
425
426       The Link object
427       Adds a route to teleport a tank between two teleporters.
428
429       # Teleporter names are terminated with either :f (forward)
430       # or :b (backwards). The forwards link points to 0 degrees,
431       # and the backwards link points to 180. Links are made by
432       # pattern matching the teleporter names. The '*' and '?'
433       # globbing characters can be used to make multiple matches.
434       # If there are multiple matches for the "to" link, then the
435       # destination will be selected randomly between the matches.
436       # in-game.
437
438       # NOTE: bzfs -d -d -d -d will print the linkage table.
439
440       link
441         name example_link
442       # this will link all teleporters randomly to all other teleporters
443         from *
444         to   *
445       end
446
447       #  or,  to  link   between  known  teleporters  examp_tele1(front)  and
448       examp_tele2(back)
449
450       link
451         name  example_realLink
452         from examp_tele1:f
453         to examp_tele2:b
454       end
455
456
457       The Base object
458       Creates a team base where the corresponding team's flag is stored.  The
459       oncap  option  will  fire a world weapon of the specified type when the
460       team flag for this base is captured.
461
462       base
463         name example_base
464         position 0.0 0.0 0.0
465         size 60.0 60.0 0.0
466         rotation 0.0
467         color 0
468         oncap V
469       end
470
471
472       The Weapon object
473       Creates a world weapon, or a weapon fired automatically by  the  world.
474       The  weapon  can  either  be  timed  or be event driven.  Timed weapons
475       should use the initdelay and delay fields.  Event driven  weapons  need
476       to  use  the trigger option to define what the trigger event is.  Valid
477       trigger events are; OnCap,  for  flag  capture  events.   OnSpawn,  for
478       player spawn events.  OnDie, for player death events.  If the weapon is
479       to be triggered only for a specific  team  then  the  eventteam  option
480       should  be  used with a team number (1 to 4).  An eventteam value of -1
481       will trigger this weapon for any team.  -1  is  the  default  eventteam
482       value.
483
484       weapon
485         name example_weapon
486         position 0.0 0.0 0.0
487         rotation 0.0
488         tilt 0.0
489         initdelay 10.0
490         delay 10.0 3.0 5.0 3.0
491         type V
492         trigger flagcap
493         eventteam V
494       end
495
496
497       The Zone object
498       Specifies  a certain range in the world, and what attributes that range
499       has.
500
501       zone
502         name example_zone
503         position 0.0 0.0 0.0
504         size 1.0 1.0 1.0
505         rotation 0.0
506       # where players may spawn
507         team 0 1 2 3 4
508       # where flag may spawn
509         flag GM SW good bad
510       # dropped team flags will fly to the closest safety zone
511         safety 1 2 3 4
512       # attach a flag to this zone (always spawn in this zone)
513         zoneflag GM 3  # type, count (type can be a team flag, ex: R*)
514       end
515
516
517

FILE SYNTAX

519       The symbol '?' means that the item is optional.
520
521       The notation {a..b} means that the number of  times  the  item  can  be
522       present  must  be between 'a' and 'b', where '*' mean infinity. ('?' is
523       equivalent to {0..1})
524
525       angle := <float>
526
527       2dpoint := <float> <float>
528
529       3dpoint := <float> <float> <float>
530
531       rgbColor := <float> <float> <float>
532
533       alpha := <float>
534
535       rgbaColor := rgbColor alpha? | <color_name> alpha?
536
537       channel := "red" | "green" | "blue" | "alpha"
538
539
540       (BZWReader.cxx/parseNormalObject)
541
542       allObjects :=
543                     "box"
544                   | "pyramid"
545                   | "base"
546                   | "link"
547                   | "teleporter"
548                   | "mesh"
549                   | "arc"
550                   | "meshbox"
551                   | "cone"
552                   | "meshpyr"
553                   | "sphere"
554                   | "tetra"
555                   | "weapon"
556                   | "zone"
557                   | "waterLevel"
558                   | "dynamicColor"
559                   | "textureMatrix"
560                   | "material"
561                   | "physics"
562                   | "transform"
563
564       (BZWReader.cxx/BZWReader::readWorldStream)
565              Note: Blank lines and lines starting with # are discarded.
566
567       worldStream :=
568                     "end"
569                   | allObjects
570                   | "define" <group_name>
571                   | "enddef"
572                   | "group" <group_name>
573                   | "teleporter" <name>?
574                   | "options"
575                   | "include" <filename>
576                   | "world"
577
578       (ParseMaterial.cxx/parseMaterials)
579
580       material :=
581                   object
582                   | "matref" <material_name>
583                   | "resetmat"
584                   | "dyncol" <dynamic_color_name>
585                   | "ambient" rgbaColor
586                   | ("diffuse" | "color") rgbaColor
587                   | "specular" rgbaColor
588                   | "emission" rgbaColor
589                   | "shininess" <float>
590                   | "texture <texture_name>
591                   | "notextures"
592                   | "addtexture" <texture_name>
593                   | "texmat" <matrix_name>
594                   | "notexalpha"
595                   | "notexcolor"
596                   | "spheremap"
597                   | "noradar"
598                   | "noshadow"
599                   | "noculling"
600                   | "nosorting"
601                   | "nolighting"
602                   | "alphathresh" <value>
603                   | "groupalpha"
604                   | "occluder"
605                   | "shader" <shader_name>  # NOT IMPLEMENTED
606                   | "addshader" <shader_name>  # NOT IMPLEMENTED
607                   | "noshaders"  # NOT IMPLEMENTED
608
609       (WorldFileObject:.cxx/WorldFileObject::read)
610
611       object := "name" <name>
612
613       (WorldFileLocation.cxx/readWorldFileLocation::read)
614
615       location :=
616                     ("pos" | "position") 3dpoint
617                   | "size" 3dpoint
618                   | ("rot" | "rotation") <float>
619                   | "shift" 3dpoint
620                   | "scale" 3dpoint
621                   | "shear" 3dpoint
622                   | "spin" angle 3dpoint
623                   | "xform" <transform_name>
624                   | object
625
626       (WorldFileObstacle.cxx/WorldFileObstacle::read)
627
628       obstacle :=
629                     "drivethrough"
630                   | "shootthrough"
631                   | "passable"
632                   | "ricochet"
633                   | location
634
635       (CustomArc.cxx/CustomArc::read)
636
637       meshbox :=
638                     "divisions" <integer>
639                   | "angle" angle
640                   | "ratio" <float>
641                   | "texsize" <float> <float> <float> <float>
642                   | "phydrv" <physics_driver_name>
643                   | "smoothbounce"
644                   | "flatshading"
645                   | material
646                   | ("top" | "bottom" | "inside" | "outside" | "startside"  |
647              "endside") material
648                   | obstacle
649
650       arc :=
651                     "divisions" <integer>
652                   | "angle" angle
653                   | "ratio" <float>
654                   | "texsize" <float> <float> <float> <float>
655                   | "phydrv" <physics_driver_name>
656                   | "smoothbounce"
657                   | "flatshading"
658                   | material
659                   |  ("top" | "bottom" | "inside" | "outside" | "startside" |
660              "endside") material
661                   | obstacle
662
663       (CustomBase.cxx/CustomBase::read)
664
665       base :=
666                     "color" <integer>
667                   | obstacle
668
669       (CustomBox.cxx)
670
671       box := obstacle
672
673       (CustomCone.cxx/CustomCone::read)
674
675       meshpyr :=
676                     "divisions" <integer>
677                   | "angle" <float>
678                   | "texsize" <float> <float>
679                   | "phydrv" <physics_driver_name>
680                   | "smoothbounce"
681                   | "flatshading"
682                   | material
683                   | ("edge" | "bottom" | "startside" | "endside") material
684                   | "flipz"
685                   | obstacle
686
687       cone :=
688                     "divisions" <integer>
689                   | "angle" <float>
690                   | "texsize" <float> <float>
691                   | "phydrv" <physics_driver_name>
692                   | "smoothbounce"
693                   | "flatshading"
694                   | material
695                   | ("edge" | "bottom" | "startside" | "endside") material
696                   | obstacle
697
698       (CustomDynamicColor.cxx/CustomDynamicColor::read)
699
700       dynamicColor :=
701                     object
702                   | channel "limits" <float> <float>
703                   | channel "sinusoid" <float> <float> <float>
704                   | channel "clampup" <float> <float> <float>
705                   | channel "clampdown" <float> <float> <float>
706                   | channel "sequence" <float> <float> ("0" "1" "2"){1..*}
707
708       (CustomGate.cxx/CustomGate::read)
709
710       teleporter :=
711                     "border" <float>
712                   | "horizontal"  # NOT IMPLEMENTED
713                   | obstacle
714
715       (CustomGroup.cxx/CustomGroup::read)
716
717       group :=
718                     "team" <integer>
719                   | "tint" rgbaColor
720                   | "phydrv" <physics_driver_name>
721                   | "matref" <material_name>
722                   | obstacle
723
724       (CustomLink.cxx/CustomLink::read)
725
726       teleporter_spec :=
727                     <integer>
728                   | <teleporter_name_with_wildcards> (":f" | ":b")?
729
730       link :=
731                     "from" <teleporter_spec>
732                   | "to" <teleporter_spec>
733                   | object
734
735       (MeshDrawInfo.cxx/MeshDrawInfo::parseDrawCmd)
736
737       drawInfoCmd :=
738                     "points"    <integer>+
739                   | "lines"     <integer> <integer> <integer>{2}*
740                   | "lineloop"  <integer> <integer>+
741                   | "linestrip" <integer> <integer> <integer{2}*
742                   | "tris"      <integer> <integer> <integer> <integer>{3}*
743                   | "tristrip"  <integer> <integer> <integer>+
744                   | "trifan"    <integer> <integer> <integer>+
745                   |  "quads"      <integer>  <integer>  <integer>   <integer>
746              <integer>{4}*
747                   | "quadstrip" <integer> <integer> <integer>{2}+
748                   | "polygon"   <integer> <integer> <integer> <integer>{3}*
749
750       (MeshDrawInfo.cxx/MeshDrawInfo::parseDrawSet)
751
752       drawInfoSet :=
753                     "matref" <material_name>
754                   | "dlist"
755                   | "sphere" 3dpoint <float>
756                   | drawInfoCmd
757
758       (MeshDrawInfo.cxx/MeshDrawInfo::parseDrawLod)
759
760       drawInfoLod :=
761                     "lod"
762                   | "lengthPerPixel" <float>
763                   | drawInfoSet
764
765       (MeshDrawInfo.cxx/MeshDrawInfo::parse)
766
767       drawInfo :=
768                     "drawInfo"
769                   | "dlist"
770                   | "decorative"
771                   | "angvel" <float>
772                   | "extents" 3dpoint 3dpoint
773                   | "sphere" 3dpoint <float>
774                   | "corner" <integer> <integer> <integer>
775                   | "vertex" 3dpoint
776                   | "normal" 3dpoint
777                   | "texcoord" <float> <float>
778                   | drawInfoLod
779
780       (CustomMesh.cxx/CustomMesh::read)
781
782       mesh :=
783                     "face"
784                   | face
785                   | "endface"
786                   | "inside" 3dpoint
787                   | "outside" 3dpoint
788                   | "vertex" 3dpoint
789                   | "normal" 3dpoint
790                   | "texcoord" <float> <float>
791                   | "phydrv" <physics_driver_name>
792                   | "smoothbounce"
793                   | "noclusters"
794                   | drawInfo
795                   | material
796                   | obstacle
797
798       (CustomMeshFace.cxx/CustomMeshFace::read)
799
800       face :=
801                     "vertices" <integer>{3..*}
802                   | "normals" <integer>{3..*}
803                   | "texcoords" <integer>{3..*}
804                   | "phydrv" <physics_driver_name>
805                   | "smoothbounce"
806                   | "noclusters"
807                   | "drivethrough"
808                   | "shootthrough"
809                   | "ricochet"
810                   | "passable"
811                   | material
812
813       (CustomMeshTransform.cxx/CustomMeshTransform::read)
814
815       transform :=
816                     "shift" 3dpoint
817                   | "scale" 3dpoint
818                   | "shear" 3dpoint
819                   | "spin" angle 3dpoint
820                   | "xform" <transform_name>
821                   | object
822
823       (CustomPhysicsDriver.cxx/CustomPhysicsDriver::read)
824
825       physics :=
826                     "linear" 3dpoint
827                   | "angular" <float> 2dpoint
828                   | "radial" <float> 2dpoint  # NOT IMPLEMENTED
829                   | "slide" <float>
830                   | "death" <string>
831                   | object
832
833       (CustomPyramid.cxx/CustomPyramid::read)
834
835       pyramid :=
836                     "flipz"
837                   | obstacle
838
839       (CustomSphere.cxx/CustomSphere::read)
840
841       sphere :=
842                     "divisions" <integer>
843                   | "radius" <float>
844                   | ("hemi" | "hemisphere")
845                   | "texsize" <float> <float>
846                   | "phydrv" <physics_driver_name>
847                   | "smoothbounce"
848                   | "flatshading"
849                   | material
850                   | ("edge" | "bottom") material
851                   | obstacle
852
853       (CustomTetra.cxx/CustomTetra::read)
854              Note: At most 4 vertices can be specified.
855              Note2: material will apply to all vertices when specified first,
856              otherwise like "normals" and "texcoords" they apply to the  pre‐
857              vious vertex.
858
859       tetra :=
860                     "vertex" 3dpoint
861                   | "normals" 3dpoint
862                   | "texcoords" 2dpoint
863                   | material
864                   | obstacle
865
866       (CustomTextureMatrix.cxx/CustomTextureMatrix::read)
867
868       textureMatrix :=
869                     "fixedshift" 2dpoint
870                   | "fixedscale" 2dpoint
871                   | "fixedspin" angle
872                   | "fixedcenter" 2dpoint
873                   | "shift" <float> <float>
874                   | "spin" <float>
875                   | "scale" <float> <float> <float> <float>
876                   | "center" 2dpoint
877                   | object
878
879       (CustomWaterLevel.cxx/CustomWaterLevel::read)
880
881       waterLevel :=
882                     "height" <float>
883                   | material
884                   | object
885
886       (CustomWeapon.cxx/CustomWeapon::read)
887
888       weapon :=
889                     "initdelay" <float>
890                   | "delay" <float>{1..*}
891                   | "type" <flag_short_name>
892                   | location
893
894       (CustomWorld.cxx/CustomWorld::read)
895
896       world :=
897                     "size" <float>
898                   | "flagHeight" <float>
899                   | object
900
901       (CustomZone.cxx/CustomZone::read)
902
903       zone :=
904                     "team" <integer>{1..*}
905                     "flag" ("good" | "bad" | <flag_short_name>){1..*}
906                   | "safety" <integer>{1..*}
907                   | "zoneflag" <flag_short_name> <integer>?
908                   | location
909
910

SEE ALSO

912       bzflag(6), bzadmin(6), bzfs(6)
913
914
915
916BZFlag 2.4.18                     2020-01-28                            BZW(5)
Impressum