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 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 ex‐
448 amp_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
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> <in‐
746 teger>{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
912 bzflag(6), bzadmin(6), bzfs(6)
913
914
915
916BZFlag 2.4.26 2022-11-26 BZW(5)