0ad/binaries/data/mods/public/maps/scenario.rng
historic_bruno 2c9939ac74 Adds Relax NG Compact syntax grammars for most of the XML formats in the engine.
Adds converted Relax NG XML grammars for each (Note: don't edit these
directly, modify the compact syntax .rnc files instead, then use a
conversion tool http://relaxng.org/#conversion to generate the .rng
files).
Adds Perl script to validate the XML files using the new grammars

This was SVN commit r15377.
2014-06-17 03:31:40 +00:00

298 lines
9.5 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<a:documentation/>
<!--
NOTE: To modify this Relax NG grammar, edit the Relax NG Compact (.rnc) file
and use a converter tool like trang to generate the Relax NG XML (.rng) file
-->
<a:documentation/>
<ref name="Scenario"/>
</start>
<define name="colour_rgb">
<a:documentation/>
<!-- Defines # -->
<a:documentation/>
<attribute name="r">
<data type="decimal">
<param name="minInclusive">0</param>
<param name="maxInclusive">1</param>
</data>
</attribute>
<attribute name="g">
<data type="decimal">
<param name="minInclusive">0</param>
<param name="maxInclusive">1</param>
</data>
</attribute>
<attribute name="b">
<data type="decimal">
<param name="minInclusive">0</param>
<param name="maxInclusive">1</param>
</data>
</attribute>
</define>
<define name="suncolour_rgb">
<!-- RGB can be > 1 due to overbrightness -->
<attribute name="r">
<data type="decimal">
<param name="minInclusive">0</param>
</data>
</attribute>
<attribute name="g">
<data type="decimal">
<param name="minInclusive">0</param>
</data>
</attribute>
<attribute name="b">
<data type="decimal">
<param name="minInclusive">0</param>
</data>
</attribute>
</define>
<define name="pos_xyz">
<attribute name="x">
<data type="float"/>
</attribute>
<attribute name="y">
<data type="float"/>
</attribute>
<attribute name="z">
<data type="float"/>
</attribute>
</define>
<define name="pos_xz">
<attribute name="x">
<data type="decimal"/>
</attribute>
<attribute name="z">
<data type="decimal"/>
</attribute>
</define>
<define name="angle">
<attribute name="angle">
<data type="float"/>
</attribute>
</define>
<!-- TODO: bounds are not documented for many of these -->
<define name="Scenario">
<a:documentation/>
<!-- Scenario # -->
<a:documentation/>
<element name="Scenario">
<interleave>
<attribute name="version">
<data type="positiveInteger"/>
</attribute>
<element name="Environment">
<interleave>
<optional>
<element name="LightingModel">
<text/>
</element>
</optional>
<!-- Deprecated -->
<element name="SkySet">
<text/>
</element>
<element name="SunColour">
<ref name="suncolour_rgb"/>
</element>
<element name="SunElevation">
<ref name="angle"/>
</element>
<element name="SunRotation">
<ref name="angle"/>
</element>
<element name="TerrainAmbientColour">
<ref name="colour_rgb"/>
</element>
<element name="UnitsAmbientColour">
<ref name="colour_rgb"/>
</element>
<optional>
<element name="Fog">
<interleave>
<element name="FogFactor">
<data type="decimal">
<param name="minInclusive">0</param>
</data>
<!-- TODO: what is the max? -->
</element>
<element name="FogThickness">
<data type="decimal">
<param name="minInclusive">0</param>
</data>
<!-- TODO: what is the max? -->
</element>
<element name="FogColour">
<ref name="colour_rgb"/>
</element>
</interleave>
</element>
</optional>
<element name="Water">
<element name="WaterBody">
<interleave>
<element name="Type">
<text/>
</element>
<!-- Not implemented -->
<element name="Colour">
<ref name="colour_rgb"/>
</element>
<element name="Height">
<data type="decimal"/>
</element>
<optional>
<element name="Shininess">
<data type="decimal"/>
</element>
</optional>
<!-- Deprecated -->
<element name="Waviness">
<data type="decimal"/>
</element>
<element name="Murkiness">
<data type="decimal"/>
</element>
<element name="Tint">
<ref name="colour_rgb"/>
</element>
<element name="ReflectionTint">
<ref name="colour_rgb"/>
</element>
<element name="ReflectionTintStrength">
<data type="decimal"/>
</element>
</interleave>
</element>
</element>
<optional>
<element name="Postproc">
<element name="Brightness">
<data type="decimal"/>
</element>
<element name="Contrast">
<data type="decimal"/>
</element>
<element name="Saturation">
<data type="decimal"/>
</element>
<element name="Bloom">
<data type="decimal"/>
</element>
<element name="PostEffect">
<text/>
</element>
</element>
</optional>
</interleave>
</element>
<optional>
<element name="Terrain">
<optional>
<attribute name="patches">
<data type="positiveInteger"/>
</attribute>
</optional>
<optional>
<attribute name="texture"/>
</optional>
<optional>
<attribute name="priority">
<data type="nonNegativeInteger"/>
</attribute>
</optional>
<optional>
<attribute name="height">
<data type="positiveInteger"/>
</attribute>
</optional>
</element>
</optional>
<optional>
<element name="Script">
<text/>
</element>
</optional>
<element name="Camera">
<!-- Camera can have weird float values -->
<element name="Position">
<ref name="pos_xyz"/>
</element>
<element name="Rotation">
<ref name="angle"/>
</element>
<element name="Declination">
<ref name="angle"/>
</element>
</element>
<element name="ScriptSettings">
<text/>
</element>
<optional>
<element name="Entities">
<zeroOrMore>
<element name="Entity">
<interleave>
<attribute name="uid">
<data type="positiveInteger"/>
</attribute>
<element name="Template">
<text/>
</element>
<optional>
<element name="Player">
<data type="nonNegativeInteger"/>
</element>
</optional>
<element name="Position">
<ref name="pos_xz"/>
</element>
<element name="Orientation">
<attribute name="y">
<data type="decimal"/>
</attribute>
</element>
<optional>
<element name="Obstruction">
<attribute name="group">
<data type="positiveInteger"/>
</attribute>
<optional>
<attribute name="group2">
<data type="positiveInteger"/>
</attribute>
</optional>
</element>
</optional>
<optional>
<element name="Actor">
<attribute name="seed">
<data type="integer"/>
</attribute>
</element>
</optional>
</interleave>
</element>
</zeroOrMore>
</element>
</optional>
<optional>
<element name="Paths">
<!-- Unused -->
<empty/>
</element>
</optional>
<optional>
<element name="Triggers">
<!-- Unused -->
<empty/>
</element>
</optional>
</interleave>
</element>
</define>
</grammar>