1bzw(5) BZFlag bzw(5)
2
3
4
6 bzw - BZFlag world file format
7
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 phydrv example_phydrv # reassign any valid physics drivers
153 matref example_material # set material properties
154 # (except for the color)
155 end
156
157
158 The Dynamic Color object
159
160 dynamicColor
161 name example_dyncol
162 # there are 4 channels that can be modified:
163 # red, green, blue, alpha
164 # there are 5 types of commands per channel:
165 # limits, sinusoid, clampUp, clampDown, sequence
166 # except for "limits" and "sequence", the commands are repeatable
167 # if a sequence is used, then clampUps and clampDowns have no effect
168 # sequences can use three states (0, 1, 2).
169 # 0 - equivalent to an active clampDown
170 # 1 - equivalent to no clamps
171 # 2 - equivalent to an active clampUp
172 # if both clampUp and clampDown are active, the value is (min+max)/2
173 # the sinusoid function starts at the max value
174 # the sum of a channel's sinusoids is clamped between 0 and 1
175 red limits 0 1 # min/max limits
176 green sinusoid 0.1 0 0.25 # period, offset, weight
177 blue clampUp 0.1 0 0.75 # period, offset, width
178 alpha clampDown 0.2 0.5 0.5 # period, offset, width
179 red sequence 0.0 0.0 2 0 1 1 2 0 ... # period, offset, list of states
180 end
181
182
183 The Texture Matrix object
184
185 textureMatrix
186 name example_texmat
187 scale 0.0 0.0 1.0 1.0 # u/v freqs, u/v scales
188 spin 0.0 # rotation freq
189 shift 0.0 0.0 # u/v freqs
190 center 0.5 0.5 # dynamic u/v center (for spin and scale)
191 fixedscale 0.0 0.0 # time invariant u/v scale
192 fixedspin 0.0 # time invariant rotation
193 fixedshift 0.0 0.0 # time invariant u/v shift
194 end
195
196
197 Material Properties
198
199 Material properties may be set on several types of objects, including
200 meshes, mesh faces, arcs, cones, spheres, and tetras. Here are the
201 properties:
202
203 material
204 name example_material
205 resetmat # restore default values
206 matref material_name # copy another material's properties
207 ambient 0.2 0.2 0.2 1.0 # ambient color
208 diffuse 1.0 1.0 1.0 1.0 # diffuse color (main color)
209 color 1.0 1.0 1.0 1.0 # synonym for 'diffuse'
210 specular 0.0 0.0 0.0 1.0 # specular color
211 emission 0.0 0.0 0.0 1.0 # emission color
212 shininess 0.0 # shininess (0.0 - 128.0)
213 texture filename # set working texture
214 # - non-interlaced PNG
215 # - http:// or ftp:// hyperlinks can be used (no spaces)
216 # - BZFlag default texture names can be used (.png not required)
217 addtexture filename # add texture
218 notextures # specify that no textures are to be used
219 notexalpha # don't use the texture's alpha channel
220 notexcolor # the color is not applied to the texture
221 # if a texture is specified, but not found, the default texture
222 # will be used. if the default texture is also not available, then
223 # the color will be used (untextured)
224 spheremap # use spherical texture coordinate mapping
225 texmat -1 # texture matrix (-1 for none)
226 dyncol -1 # dynamic color (-1 for none)
227 noradar # do not display on radar (except normal mode)
228 noshadow # do not render shadows
229 noculling # do not cull by face winding (double-sided)
230 nosorting # do not do front-to-back alpha sorting
231 nolighting # disable lighting
232 alphathresh 0.0 # alpha thresholding value
233 groupalpha # sort translucent faces as a group
234 occluder # faces with this material will occlude
235 end
236
237
238 The Physics Driver object
239
240 physics
241 name example_phydrv
242 linear 0.0 0.0 0.0 # x/y/z linear velocities
243 angular 0.0 0.0 0.0 # rotation freq, x/y coordinates
244 slide 0.0 # time until max velocity (> 0.0 enables)
245 death Message goes here.
246 # the 'death' property requires a non-blank message
247 end
248
249
250 The Mesh object
251
252 mesh
253 name example_mesh
254 # Material properties applied to a mesh apply to all faces
255 # that follow the setting. Mesh faces will alter their own
256 # properties without affecting the state of the mesh properties.
257 # The same pattern is used to apply physics drivers.
258 vertex 100 200 300 # add a vertex (repeatable)
259 normal 1.0 0 0 # add a normal (repeatable)
260 texcoord 0.1 0.75 # add a texture coordinate (repeatable)
261 inside 5.5 4.5 1.2 # add an inside point (repeatable)
262 outside 0 0 1000 # add an outside point (repeatable)
263 shift 0 0 0 # (repeatable)
264 scale 1 1 1 # (repeatable)
265 shear 0 0 0 # (repeatable)
266 spin angle nx ny nz # (repeatable)
267 phydrv example_phydrv # assign a physics driver
268 smoothbounce # ricochets use normals
269 noclusters # render each mesh face individually
270 face # start a face (repeatable)
271 # the front-face winding is counter-clockwise
272 vertices 1 4 0 3 5 # list of vertices (requires at least three)
273 normals 2 6 0 4 7 # list of normals (optional)
274 texcoords 0 3 2 4 9 # list of texture coordinates (optional)
275 phydrv example_phydrv # assign a physics driver
276 endface # end the face
277 #
278 # This next element can be added to increase the rendering speed
279 # of the mesh object. If the client is capable of using this data,
280 # then it is used to draw the mesh instead of the face information.
281 #
282 drawInfo
283 dlist # display list for all material sets
284 decorative # older clients with not see this mesh
285 angvel <degrees/sec> # rotation about initial Z axis
286 extents <minX> <minY> <minZ> <maxX> <maxY> <maxZ>
287 sphere <x> <y> <z> <radiusSquared>
288 corner <v> <n> <t> (repeatable)
289 vertex 0.0 0.0 0.0 (repeatable)
290 normal 0.0 0.0 0.0 (repeatable)
291 texcoord 0.0 0.0 (repeatable)
292 lod (repeatable)
293 lengthPerPixel <value>
294 matref <name> (repeatable)
295 dlist # display list for this material set
296 sphere <x> <y> <z> <radiusSquared>
297 points 0 (repeatable)
298 lines 0 1 (repeatable)
299 lineloop 0 1 (repeatable)
300 linestrip 0 1 (repeatable)
301 tris 0 1 2 (repeatable)
302 tristrip 0 1 2 (repeatable)
303 trifan 0 1 2 (repeatable)
304 quads 0 1 2 3 (repeatable)
305 quadstrip 0 1 2 3 (repeatable)
306 polygon 0 1 2 (repeatable)
307 end # matref
308 end # lod
309 end # drawInfo
310 end # mesh
311
312
313 The Arc object
314
315 arc
316 name example_arc
317 divisions 16 # number of subdivisions
318 flatshading # flat shading (smooth is default)
319 angle 360 # the sweep angle
320 ratio 1 # (outrad - inrad) / outrad
321 position 0.0 0.0 0.0
322 size 10 10 10
323 rotation 0.0
324 shift 0 0 0 # (repeatable)
325 scale 1 1 1 # (repeatable)
326 shear 0 0 0 # (repeatable)
327 spin angle nx ny nz # (repeatable)
328 phydrv example_phydrv # assign a physics driver
329 smoothbounce # ricochets use normals
330 end
331
332
333 The Cone object
334
335 cone
336 name example_cone
337 divisions 16 # number of subdivisions
338 flatshading # flat shading (smooth is default)
339 angle 360 # the sweep angle
340 position 0.0 0.0 0.0
341 size 10 10 10
342 rotation 0.0
343 shift 0 0 0 # (repeatable)
344 scale 1 1 1 # (repeatable)
345 shear 0 0 0 # (repeatable)
346 spin angle nx ny nz # (repeatable)
347 phydrv example_phydrv # assign a physics driver
348 smoothbounce # ricochets use normals
349 end
350
351
352 The Sphere object
353
354 sphere
355 name example_sphere
356 divisions 4 # number of subdivisions
357 flatshading # flat shading (smooth is default)
358 position 0.0 0.0 10.0
359 size 10 10 10
360 radius 10 # sets all size values to this value
361 rotation 0.0
362 shift 0 0 0 # (repeatable)
363 scale 1 1 1 # (repeatable)
364 shear 0 0 0 # (repeatable)
365 spin angle nx ny nz # (repeatable)
366 phydrv example_phydrv # assign a physics driver
367 smoothbounce # ricochets use normals
368 end
369
370
371 The Tetrahedron object
372
373 tetra
374 name example_tetra
375 # there must always be 4 vertices
376 vertex -10.0 -5.0 0.0
377 vertex +10.0 -5.0 0.0
378 vertex 0.0 10.0 0.0
379 vertex 0.0 5.0 10.0
380 shift 0 0 0 # (repeatable)
381 scale 1 1 1 # (repeatable)
382 shear 0 0 0 # (repeatable)
383 spin angle nx ny nz # (repeatable)
384 end
385
386
387 The Box object
388 Adds a simple block.
389
390 box
391 name example_box
392 position 0.0 0.0 0.0
393 size 30.0 30.0 9.42
394 rotation 0.0
395 end
396
397
398 The Pyramid object
399 Adds a triangular shaped object.
400
401 pyramid
402 name example_pyramid
403 position 0.0 0.0 0.0
404 size 8.2 8.2 10.25
405 rotation 0.0
406 end
407
408
409 The Teleporter object
410 Adds an object that places a tank at another teleporter in a different
411 area when ran through.
412
413 teleporter [name]
414 # the [name] tag is used for linkage
415 name example_teleporter
416 position 0.0 0.0 0.0
417 size 5.06 4.48 20.16
418 rotation 0.0
419 border 1.12
420 end
421
422
423 The Link object
424 Adds a route to teleport a tank between two teleporters.
425
426 # Teleporter names are terminated with either :f (forward)
427 # or :b (backwards). The forwards link points to 0 degrees,
428 # and the backwards link points to 180. Links are made by
429 # pattern matching the teleporter names. The '*' and '?'
430 # globbing characters can be used to make multiple matches.
431 # If there are multiple matches for the "to" link, then the
432 # destination will be selected randomly between the matches.
433 # in-game.
434
435 # NOTE: bzfs -d -d -d -d will print the linkage table.
436
437 link
438 name example_link
439 # this will link all teleporters randomly to all other teleporters
440 from *
441 to *
442 end
443
444 # or, to link between known teleporters examp_tele1(front) and
445 examp_tele2(back)
446
447 link
448 name example_realLink
449 from examp_tele1:f
450 to examp_tele2:b
451 end
452
453
454 The Base object
455 Creates a team base where the corresponding team's flag is stored. The
456 oncap option will fire a world weapon of the specified type when the
457 team flag for this base is captured.
458
459 base
460 name example_base
461 position 0.0 0.0 0.0
462 size 60.0 60.0 0.0
463 rotation 0.0
464 color 0
465 oncap V
466 end
467
468
469 The Weapon object
470 Creates a world weapon, or a weapon fired automatically by the world.
471 The weapon can either be timed or be event driven. Timed weapons
472 should use the initdelay and delay fields. Event driven weapons need
473 to use the trigger option to define what the trigger event is. Valid
474 trigger events are; OnCap, for flag capture events. OnSpawn, for
475 player spawn events. OnDie, for player death events. If the weapon is
476 to be triggered only for a specific team then the eventteam option
477 should be used with a team number (1 to 4). A eventteam value of -1
478 will trigger this weapon for any team. -1 is the default eventteam
479 value.
480
481 weapon
482 name example_weapon
483 position 0.0 0.0 0.0
484 rotation 0.0
485 tilt 0.0
486 initdelay 10.0
487 delay 10.0 3.0 5.0 3.0
488 type V
489 trigger flagcap
490 eventteam V
491 end
492
493
494 The Zone object
495 Specifies a certain range in the world, and what attributes that range
496 has.
497
498 zone
499 name example_zone
500 position 0.0 0.0 0.0
501 size 1.0 1.0 1.0
502 rotation 0.0
503 # where players may spawn
504 team 0 1 2 3 4
505 # where flag may spawn
506 flag GM SW good bad
507 # dropped team flags will fly to the closest safety zone
508 safety 1 2 3 4
509 # attach a flag to this zone (always spawn in this zone)
510 zoneflag GM 3 # type, count (type can be a team flag, ex: R*)
511 end
512
513
514
516 The symbol '?' means that the item is optional.
517
518 The notation {a..b} means that the number of times the item can be
519 present must be between 'a' and 'b', where '*' mean infinity. ('?' is
520 equivalent to {0..1})
521
522 angle := <float>
523
524 2dpoint := <float> <float>
525
526 3dpoint := <float> <float> <float>
527
528 rgbColor := <float> <float> <float>
529
530 alpha := <float>
531
532 rgbaColor := rgbColor alpha? | <color_name> alpha?
533
534 channel := "red" | "green" | "blue" | "alpha"
535
536
537 (BZWReader.cxx/parseNormalObject)
538
539 allObjects :=
540 "box"
541 | "pyramid"
542 | "base"
543 | "link"
544 | "teleporter"
545 | "mesh"
546 | "arc"
547 | "meshbox"
548 | "cone"
549 | "meshpyr"
550 | "sphere"
551 | "tetra"
552 | "weapon"
553 | "zone"
554 | "waterLevel"
555 | "dynamicColor"
556 | "textureMatrix"
557 | "material"
558 | "physics"
559 | "transform"
560
561 (BZWReader.cxx/BZWReader::readWorldStream)
562 Note: Blank lines and lines starting with # are discarded.
563
564 worldStream :=
565 "end"
566 | allObjects
567 | "define" <group_name>
568 | "enddef"
569 | "group" <group_name>
570 | "teleporter" <name>?
571 | "options"
572 | "include" <filename>
573 | "world"
574
575 (ParseMaterial.cxx/parseMaterials)
576
577 material :=
578 object
579 | "matref" <material_name>
580 | "resetmat"
581 | "dyncol" <dynamic_color_name>
582 | "ambient" rgbaColor
583 | ("diffuse" | "color") rgbaColor
584 | "specular" rgbaColor
585 | "emission" rgbaColor
586 | "shininess" <float>
587 | "texture <texture_name>
588 | "notextures"
589 | "addtexture" <texture_name>
590 | "texmat" <matrix_name>
591 | "notexalpha"
592 | "notexcolor"
593 | "spheremap"
594 | "noradar"
595 | "noshadow"
596 | "noculling"
597 | "nosorting"
598 | "nolighting"
599 | "alphathresh" <value>
600 | "groupalpha"
601 | "occluder"
602 | "shader" <shader_name> # NOT IMPLEMENTED
603 | "addshader" <shader_name> # NOT IMPLEMENTED
604 | "noshaders" # NOT IMPLEMENTED
605
606 (WorldFileObject:.cxx/WorldFileObject::read)
607
608 object := "name" <name>
609
610 (WorldFileLocation.cxx/readWorldFileLocation::read)
611
612 location :=
613 ("pos" | "position") 3dpoint
614 | "size" 3dpoint
615 | ("rot" | "rotation") <float>
616 | "shift" 3dpoint
617 | "scale" 3dpoint
618 | "shear" 3dpoint
619 | "spin" angle 3dpoint
620 | "xform" <transform_name>
621 | object
622
623 (WorldFileObstacle.cxx/WorldFileObstacle::read)
624
625 obstacle :=
626 "drivethrough"
627 | "shootthrough"
628 | "passable"
629 | location
630
631 (CustomArc.cxx/CustomArc::read)
632
633 meshbox :=
634 "divisions" <integer>
635 | "angle" angle
636 | "ratio" <float>
637 | "texsize" <float> <float> <float> <float>
638 | "phydrv" <physics_driver_name>
639 | "smoothbounce"
640 | "flatshading"
641 | material
642 | ("top" | "bottom" | "inside" | "outside" | "startside" |
643 "endside") material
644 | obstacle
645
646 arc :=
647 "divisions" <integer>
648 | "angle" angle
649 | "ratio" <float>
650 | "texsize" <float> <float> <float> <float>
651 | "phydrv" <physics_driver_name>
652 | "smoothbounce"
653 | "flatshading"
654 | material
655 | ("top" | "bottom" | "inside" | "outside" | "startside" |
656 "endside") material
657 | obstacle
658
659 (CustomBase.cxx/CustomBase::read)
660
661 base :=
662 "color" <integer>
663 | obstacle
664
665 (CustomBox.cxx)
666
667 box := obstacle
668
669 (CustomCone.cxx/CustomCone::read)
670
671 meshpyr :=
672 "divisions" <integer>
673 | "angle" <float>
674 | "texsize" <float> <float>
675 | "phydrv" <physics_driver_name>
676 | "smoothbounce"
677 | "flatshading"
678 | material
679 | ("edge" | "bottom" | "startside" | "endside") material
680 | "flipz"
681 | obstacle
682
683 cone :=
684 "divisions" <integer>
685 | "angle" <float>
686 | "texsize" <float> <float>
687 | "phydrv" <physics_driver_name>
688 | "smoothbounce"
689 | "flatshading"
690 | material
691 | ("edge" | "bottom" | "startside" | "endside") material
692 | obstacle
693
694 (CustomDynamicColor.cxx/CustomDynamicColor::read)
695
696 dynamicColor :=
697 object
698 | channel "limits" <float> <float>
699 | channel "sinusoid" <float> <float> <float>
700 | channel "clampup" <float> <float> <float>
701 | channel "clampdown" <float> <float> <float>
702 | channel "sequence" <float> <float> ("0" "1" "2"){1..*}
703
704 (CustomGate.cxx/CustomGate::read)
705
706 teleporter :=
707 "border" <float>
708 | "horizontal" # NOT IMPLEMENTED
709 | obstacle
710
711 (CustomGroup.cxx/CustomGroup::read)
712
713 group :=
714 "team" <integer>
715 | "tint" rgbaColor
716 | "phydrv" <physics_driver_name>
717 | "matref" <material_name>
718 | obstacle
719
720 (CustomLink.cxx/CustomLink::read)
721
722 teleporter_spec :=
723 <integer>
724 | <teleporter_name_with_wilcards> (":f" | ":b")?
725
726 link :=
727 "from" <teleporter_spec>
728 | "to" <teleporter_spec>
729 | object
730
731 (MeshDrawInfo.cxx/MeshDrawInfo::parseDrawCmd)
732
733 drawInfoCmd :=
734 "points" <integer>+
735 | "lines" <integer> <integer> <integer>{2}*
736 | "lineloop" <integer> <integer>+
737 | "linestrip" <integer> <integer> <integer{2}*
738 | "tris" <integer> <integer> <integer> <integer>{3}*
739 | "tristrip" <integer> <integer> <integer>+
740 | "trifan" <integer> <integer> <integer>+
741 | "quads" <integer> <integer> <integer> <integer>
742 <integer>{4}*
743 | "quadstrip" <integer> <integer> <integer>{2}+
744 | "polygon" <integer> <integer> <integer> <integer>{3}*
745
746 (MeshDrawInfo.cxx/MeshDrawInfo::parseDrawSet)
747
748 drawInfoSet :=
749 "matref" <material_name>
750 | "dlist"
751 | "sphere" 3dpoint <float>
752 | drawInfoCmd
753
754 (MeshDrawInfo.cxx/MeshDrawInfo::parseDrawLod)
755
756 drawInfoLod :=
757 "lod"
758 | "lengthPerPixel" <float>
759 | drawInfoSet
760
761 (MeshDrawInfo.cxx/MeshDrawInfo::parse)
762
763 drawInfo :=
764 "drawInfo"
765 | "dlist"
766 | "decorative"
767 | "angvel" <float>
768 | "extents" 3dpoint 3dpoint
769 | "sphere" 3dpoint <float>
770 | "corner" <integer> <integer> <integer>
771 | "vertex" 3dpoint
772 | "normal" 3dpoint
773 | "texcoord" <float> <float>
774 | drawInfoLod
775
776 (CustomMesh.cxx/CustomMesh::read)
777
778 mesh :=
779 "face"
780 | face
781 | "endface"
782 | "inside" 3dpoint
783 | "outside" 3dpoint
784 | "vertex" 3dpoint
785 | "normal" 3dpoint
786 | "texcoord" <float> <float>
787 | "phydrv" <physics_driver_name>
788 | "smoothbounce"
789 | "noclusters"
790 | drawInfo
791 | material
792 | obstacle
793
794 (CustomMeshFace.cxx/CustomMeshFace::read)
795
796 face :=
797 "vertices" <integer>{3..*}
798 | "normals" <integer>{3..*}
799 | "texcoords" <integer>{3..*}
800 | "phydrv" <physics_driver_name>
801 | "smoothbounce"
802 | "noclusters"
803 | "drivethrough"
804 | "shootthrough"
805 | "passable"
806 | material
807
808 (CustomMeshTransform.cxx/CustomMeshTransform::read)
809
810 transform :=
811 "shift" 3dpoint
812 | "scale" 3dpoint
813 | "shear" 3dpoint
814 | "spin" angle 3dpoint
815 | "xform" <transform_name>
816 | object
817
818 (CustomPhysicsDriver.cxx/CustomPhysicsDriver::read)
819
820 physics :=
821 "linear" 3dpoint
822 | "angular" <float> 2dpoint
823 | "radial" <float> 2dpoint # NOT IMPLEMENTED
824 | "slide" <float>
825 | "death" <string>
826 | object
827
828 (CustomPyramid.cxx/CustomPyramid::read)
829
830 pyramid :=
831 "flipz"
832 | obstacle
833
834 (CustomSphere.cxx/CustomSphere::read)
835
836 sphere :=
837 "divisions" <integer>
838 | "radius" <float>
839 | ("hemi" | "hemisphere")
840 | "texsize" <float> <float>
841 | "phydrv" <physics_driver_name>
842 | "smoothbounce"
843 | "flatshading"
844 | material
845 | ("edge" | "bottom") material
846 | obstacle
847
848 (CustomTetra.cxx/CustomTetra::read)
849 Note: At most 4 vertices can be specified.
850 Note2: material will apply to all vertices when specified first,
851 otherwise like "normals" and "texcoords" they apply to the pre‐
852 vious vertex.
853
854 tetra :=
855 "vertex" 3dpoint
856 | "normals" 3dpoint
857 | "texcoords" 2dpoint
858 | material
859 | obstacle
860
861 (CustomTextureMatrix.cxx/CustomTextureMatrix::read)
862
863 textureMatrix :=
864 "fixedshift" 2dpoint
865 | "fixedscale" 2dpoint
866 | "fixedspin" angle
867 | "fixedcenter" 2dpoint
868 | "shift" <float> <float>
869 | "spin" <float>
870 | "scale" <float> <float> <float> <float>
871 | "center" 2dpoint
872 | object
873
874 (CustomWaterLevel.cxx/CustomWaterLevel::read)
875
876 waterLevel :=
877 "height" <float>
878 | material
879 | object
880
881 (CustomWeapon.cxx/CustomWeapon::read)
882
883 weapon :=
884 "initdelay" <float>
885 | "delay" <float>{1..*}
886 | "type" <flag_short_name>
887 | location
888
889 (CustomWorld.cxx/CustomWorld::read)
890
891 world :=
892 "size" <float>
893 | "flagHeight" <float>
894 | object
895
896 (CustomZone.cxx/CustomZone::read)
897
898 zone :=
899 "team" <integer>{1..*}
900 "flag" ("good" | "bad" | <flag_short_name>){1..*}
901 | "safety" <integer>{1..*}
902 | "zoneflag" <flag_short_name> <integer>?
903 | location
904
905
907 bzflag(6), bzadmin(6), bzfs(6)
908
909
910
911bzw-2.0.10 2007-12-20 bzw(5)