0ad-community-mod-a26/scripts/entity.rng

5001 lines
144 KiB
Plaintext

<grammar xmlns='http://relaxng.org/ns/structure/1.0' xmlns:a='http://ns.wildfiregames.com/entity' datatypeLibrary='http://www.w3.org/2001/XMLSchema-datatypes'>
<define name='decimal'>
<data type='decimal'/>
</define>
<define name='nonNegativeDecimal'>
<data type='decimal'>
<param name='minInclusive'>0
</param>
</data>
</define>
<define name='positiveDecimal'>
<data type='decimal'>
<param name='minExclusive'>0
</param>
</data>
</define>
<define name='anything'>
<zeroOrMore>
<choice>
<attribute>
<anyName/>
</attribute>
<text/>
<element>
<anyName/>
<ref name='anything'/>
</element>
</choice>
</zeroOrMore>
</define>
<define name='component.Test1A'>
<element name='Test1A'>
<interleave>
<a:component type='test'/>
<ref name='anything'/>
</interleave>
</element>
</define>
<define name='component.Test1B'>
<element name='Test1B'>
<interleave>
<a:component type='test'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Test1Scripted'>
<element name='Test1Scripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Test2A'>
<element name='Test2A'>
<interleave>
<a:component type='test'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Test2Scripted'>
<element name='Test2Scripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.TemplateManager'>
<element name='TemplateManager'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.UnknownScript'>
<element name='UnknownScript'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.AIInterfaceScripted'>
<element name='AIInterfaceScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.AIManager'>
<element name='AIManager'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.AttackScripted'>
<element name='AttackScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.CinemaManager'>
<element name='CinemaManager'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.CommandQueue'>
<element name='CommandQueue'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Decay'>
<element name='Decay'>
<interleave>
<element name='Active' a:help='If false, the entity will not do any decaying'>
<data type='boolean'/>
</element>
<element name='SinkingAnim' a:help='If true, the entity will decay in a ship-like manner'>
<data type='boolean'/>
</element>
<element name='DelayTime' a:help='Time to wait before starting to sink, in seconds'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='SinkRate' a:help='Initial rate of sinking, in metres per second'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='SinkAccel' a:help='Acceleration rate of sinking, in metres per second per second'>
<ref name='nonNegativeDecimal'/>
</element>
</interleave>
</element>
</define>
<define name='component.FoggingScripted'>
<element name='FoggingScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Footprint'>
<element name='Footprint'>
<interleave>
<a:help>Approximation of the entity's shape, for collision detection and may be used for outline rendering or to determine selectable bounding box. Shapes are flat horizontal squares or circles, extended vertically to a given height.
</a:help>
<a:example>
<Square width='3.0' height='3.0'/>
<Height>0.0
</Height>
<MaxSpawnDistance>8
</MaxSpawnDistance>
</a:example>
<a:example>
<Circle radius='0.5'/>
<Height>0.0
</Height>
<MaxSpawnDistance>8
</MaxSpawnDistance>
</a:example>
<choice>
<element name='Square' a:help='Set the footprint to a square of the given size'>
<attribute name='width' a:help='Size of the footprint along the left/right direction (in metres)'>
<data type='decimal'>
<param name='minExclusive'>0.0
</param>
</data>
</attribute>
<attribute name='depth' a:help='Size of the footprint along the front/back direction (in metres)'>
<data type='decimal'>
<param name='minExclusive'>0.0
</param>
</data>
</attribute>
</element>
<element name='Circle' a:help='Set the footprint to a circle of the given size'>
<attribute name='radius' a:help='Radius of the footprint (in metres)'>
<data type='decimal'>
<param name='minExclusive'>0.0
</param>
</data>
</attribute>
</element>
</choice>
<element name='Height' a:help='Vertical extent of the footprint (in metres)'>
<ref name='nonNegativeDecimal'/>
</element>
<optional>
<element name='MaxSpawnDistance' a:help='Farthest distance units can spawn away from the edge of this entity'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.GarrisonHolderScripted'>
<element name='GarrisonHolderScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.GuiInterfaceScripted'>
<element name='GuiInterfaceScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.IdentityScripted'>
<element name='IdentityScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Minimap'>
<element name='Minimap'>
<interleave>
<element name='Type'>
<choice>
<value>food
</value>
<value>wood
</value>
<value>stone
</value>
<value>metal
</value>
<value>structure
</value>
<value>unit
</value>
<value>support
</value>
<value>hero
</value>
</choice>
</element>
<optional>
<element name='Color'>
<attribute name='r'>
<data type='integer'>
<param name='minInclusive'>0
</param>
<param name='maxInclusive'>255
</param>
</data>
</attribute>
<attribute name='g'>
<data type='integer'>
<param name='minInclusive'>0
</param>
<param name='maxInclusive'>255
</param>
</data>
</attribute>
<attribute name='b'>
<data type='integer'>
<param name='minInclusive'>0
</param>
<param name='maxInclusive'>255
</param>
</data>
</attribute>
</element>
</optional>
<optional>
<element name='Icon' a:help='Icon texture that should be displayed on a minimap. Filepath relative to art/textures/ui/session/icons/minimap/.'>
<attribute name='size'>
<data type='float'>
<param name='minExclusive'>0
</param>
</data>
</attribute>
<text/>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.MirageScripted'>
<element name='MirageScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.MotionBall'>
<element name='MotionBall'>
<interleave>
<a:component type='test'/>
<ref name='anything'/>
</interleave>
</element>
</define>
<define name='component.MotionScripted'>
<element name='MotionScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Obstruction'>
<element name='Obstruction'>
<interleave>
<a:example/>
<a:help>Causes this entity to obstruct the motion of other units.
</a:help>
<choice>
<element name='Static'>
<attribute name='width'>
<data type='decimal'>
<param name='minInclusive'>1.5
</param>
</data>
</attribute>
<attribute name='depth'>
<data type='decimal'>
<param name='minInclusive'>1.5
</param>
</data>
</attribute>
</element>
<element name='Unit'>
<empty/>
</element>
<element name='Obstructions'>
<zeroOrMore>
<element>
<anyName/>
<optional>
<attribute name='x'>
<data type='decimal'/>
</attribute>
</optional>
<optional>
<attribute name='z'>
<data type='decimal'/>
</attribute>
</optional>
<attribute name='width'>
<data type='decimal'>
<param name='minInclusive'>1.5
</param>
</data>
</attribute>
<attribute name='depth'>
<data type='decimal'>
<param name='minInclusive'>1.5
</param>
</data>
</attribute>
</element>
</zeroOrMore>
</element>
</choice>
<element name='Active' a:help='If false, this entity will be ignored in collision tests by other units but can still perform its own collision tests'>
<data type='boolean'/>
</element>
<element name='BlockMovement' a:help='Whether units should be allowed to walk through this entity'>
<data type='boolean'/>
</element>
<element name='BlockPathfinding' a:help='Whether the long-distance pathfinder should avoid paths through this entity. This should only be set for large stationary obstructions'>
<data type='boolean'/>
</element>
<element name='BlockFoundation' a:help='Whether players should be unable to place building foundations on top of this entity. If true, BlockConstruction should be true too'>
<data type='boolean'/>
</element>
<element name='BlockConstruction' a:help='Whether players should be unable to begin constructing buildings placed on top of this entity'>
<data type='boolean'/>
</element>
<element name='DeleteUponConstruction' a:help='Whether this entity should be deleted when construction on a buildings placed on top of this entity is started.'>
<data type='boolean'/>
</element>
<element name='DisableBlockMovement' a:help='If true, BlockMovement will be overridden and treated as false. (This is a special case to handle foundations)'>
<data type='boolean'/>
</element>
<element name='DisableBlockPathfinding' a:help='If true, BlockPathfinding will be overridden and treated as false. (This is a special case to handle foundations)'>
<data type='boolean'/>
</element>
<optional>
<element name='ControlPersist' a:help='If present, the control group of this entity will be given to entities that are colliding with it.'>
<empty/>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.ObstructionManager'>
<element name='ObstructionManager'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.OverlayRenderer'>
<element name='OverlayRenderer'>
<interleave>
<empty/>
</interleave>
</element>
</define>
<define name='component.Ownership'>
<element name='Ownership'>
<interleave>
<a:example/>
<a:help>Allows this entity to be owned by players.
</a:help>
<empty/>
</interleave>
</element>
</define>
<define name='component.ParticleManager'>
<element name='ParticleManager'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Pathfinder'>
<element name='Pathfinder'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.PlayerScripted'>
<element name='PlayerScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.PlayerManagerScripted'>
<element name='PlayerManagerScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Position'>
<element name='Position'>
<interleave>
<a:help>Allows this entity to exist at a location (and orientation) in the world, and defines some details of the positioning.
</a:help>
<a:example>
<Anchor>upright
</Anchor>
<Altitude>0.0
</Altitude>
<Floating>false
</Floating>
<FloatDepth>0.0
</FloatDepth>
<TurnRate>6.0
</TurnRate>
</a:example>
<element name='Anchor' a:help='Automatic rotation to follow the slope of terrain'>
<choice>
<value a:help='Always stand straight up (e.g. humans)'>upright
</value>
<value a:help='Rotate backwards and forwards to follow the terrain (e.g. animals)'>pitch
</value>
<value a:help='Rotate sideways to follow the terrain'>roll
</value>
<value a:help='Rotate in all directions to follow the terrain (e.g. carts)'>pitch-roll
</value>
</choice>
</element>
<element name='Altitude' a:help='Height above terrain in metres'>
<data type='decimal'/>
</element>
<element name='Floating' a:help='Whether the entity floats on water'>
<data type='boolean'/>
</element>
<element name='FloatDepth' a:help='The depth at which an entity floats on water (needs Floating to be true)'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='TurnRate' a:help='Maximum rotation speed around Y axis, in radians per second. Used for all graphical rotations and some real unitMotion driven rotations.'>
<ref name='positiveDecimal'/>
</element>
</interleave>
</element>
</define>
<define name='component.ProjectileManager'>
<element name='ProjectileManager'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.RallyPointScripted'>
<element name='RallyPointScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.RallyPointRenderer'>
<element name='RallyPointRenderer'>
<interleave>
<a:help>Displays a rally point marker where created units will gather when spawned
</a:help>
<a:example>
<MarkerTemplate>special/rallypoint
</MarkerTemplate>
<LineThickness>0.75
</LineThickness>
<LineStartCap>round
</LineStartCap>
<LineEndCap>square
</LineEndCap>
<LineDashColor r='158' g='11' b='15'>
</LineDashColor>
<LinePassabilityClass>default
</LinePassabilityClass>
</a:example>
<element name='MarkerTemplate' a:help='Template name for the rally point marker entity (typically a waypoint flag actor)'>
<text/>
</element>
<element name='LineTexture' a:help='Texture file to use for the rally point line'>
<text />
</element>
<element name='LineTextureMask' a:help='Texture mask to indicate where overlay colors are to be applied (see LineColor and LineDashColor)'>
<text />
</element>
<element name='LineThickness' a:help='Thickness of the marker line connecting the entity to the rally point marker'>
<data type='decimal'/>
</element>
<element name='LineDashColor'>
<attribute name='r'>
<data type='integer'>
<param name='minInclusive'>0
</param>
<param name='maxInclusive'>255
</param>
</data>
</attribute>
<attribute name='g'>
<data type='integer'>
<param name='minInclusive'>0
</param>
<param name='maxInclusive'>255
</param>
</data>
</attribute>
<attribute name='b'>
<data type='integer'>
<param name='minInclusive'>0
</param>
<param name='maxInclusive'>255
</param>
</data>
</attribute>
</element>
<element name='LineStartCap'>
<choice>
<value a:help='Abrupt line ending; line endings are not closed'>flat
</value>
<value a:help='Semi-circular line end cap'>round
</value>
<value a:help='Sharp, pointy line end cap'>sharp
</value>
<value a:help='Square line end cap'>square
</value>
</choice>
</element>
<element name='LineEndCap'>
<choice>
<value a:help='Abrupt line ending; line endings are not closed'>flat
</value>
<value a:help='Semi-circular line end cap'>round
</value>
<value a:help='Sharp, pointy line end cap'>sharp
</value>
<value a:help='Square line end cap'>square
</value>
</choice>
</element>
<element name='LinePassabilityClass' a:help='The pathfinder passability class to use for computing the rally point marker line path'>
<text />
</element>
</interleave>
</element>
</define>
<define name='component.RangeManager'>
<element name='RangeManager'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.RangeOverlayRenderer'>
<element name='RangeOverlayRenderer'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Selectable'>
<element name='Selectable'>
<interleave>
<a:help>Allows this entity to be selected by the player.
</a:help>
<a:example/>
<optional>
<element name='EditorOnly' a:help='If this element is present, the entity is only selectable in Atlas'>
<empty/>
</element>
</optional>
<element name='Overlay' a:help='Specifies the type of overlay to be displayed when this entity is selected.'>
<interleave>
<optional>
<element name='Shape' a:help='Specifies shape of overlay. If not specified, footprint shape will be used.'>
<choice>
<element name='Square' a:help='Set the overlay to a square of the given size'>
<attribute name='width' a:help='Size of the overlay along the left/right direction (in metres)'>
<data type='decimal'>
<param name='minExclusive'>0.0
</param>
</data>
</attribute>
<attribute name='depth' a:help='Size of the overlay along the front/back direction (in metres)'>
<data type='decimal'>
<param name='minExclusive'>0.0
</param>
</data>
</attribute>
</element>
<element name='Circle' a:help='Set the overlay to a circle of the given size'>
<attribute name='radius' a:help='Radius of the overlay (in metres)'>
<data type='decimal'>
<param name='minExclusive'>0.0
</param>
</data>
</attribute>
</element>
</choice>
</element>
</optional>
<optional>
<element name='AlwaysVisible' a:help='If this element is present, the selection overlay will always be visible (with transparency and desaturation)'>
<empty/>
</element>
</optional>
<choice>
<element name='Texture' a:help='Displays a texture underneath the entity.'>
<element name='MainTexture' a:help='Texture to display underneath the entity. Filepath relative to art/textures/selection/.'>
<text/>
</element>
<element name='MainTextureMask' a:help='Mask texture that controls where to apply player color. Filepath relative to art/textures/selection/.'>
<text/>
</element>
</element>
<element name='Outline' a:help='Traces the outline of the entity with a line texture.'>
<element name='LineTexture' a:help='Texture to apply to the line. Filepath relative to art/textures/selection/.'>
<text/>
</element>
<element name='LineTextureMask' a:help='Texture that controls where to apply player color. Filepath relative to art/textures/selection/.'>
<text/>
</element>
<element name='LineThickness' a:help='Thickness of the line, in world units.'>
<ref name='positiveDecimal'/>
</element>
</element>
</choice>
</interleave>
</element>
</interleave>
</element>
</define>
<define name='component.SettlementScripted'>
<element name='SettlementScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.SoundScripted'>
<element name='SoundScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.SoundManager'>
<element name='SoundManager'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.ValueModificationManagerScripted'>
<element name='ValueModificationManagerScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Terrain'>
<element name='Terrain'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.TerritoryDecayManagerScripted'>
<element name='TerritoryDecayManagerScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.TerritoryInfluence'>
<element name='TerritoryInfluence'>
<interleave>
<element name='Root'>
<data type='boolean'/>
</element>
<element name='Weight'>
<data type='nonNegativeInteger'>
<param name='maxInclusive'>65535
</param>
</data>
</element>
<element name='Radius'>
<data type='nonNegativeInteger'/>
</element>
</interleave>
</element>
</define>
<define name='component.TerritoryManager'>
<element name='TerritoryManager'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.TurretHolderScripted'>
<element name='TurretHolderScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.UnitMotion'>
<element name='UnitMotion'>
<interleave>
<a:help>Provides the unit with the ability to move around the world by itself.
</a:help>
<a:example>
<WalkSpeed>7.0
</WalkSpeed>
<PassabilityClass>default
</PassabilityClass>
</a:example>
<element name='FormationController'>
<data type='boolean'/>
</element>
<element name='WalkSpeed' a:help='Basic movement speed (in metres per second).'>
<ref name='positiveDecimal'/>
</element>
<optional>
<element name='RunMultiplier' a:help='How much faster the unit goes when running (as a multiple of walk speed).'>
<ref name='positiveDecimal'/>
</element>
</optional>
<element name='InstantTurnAngle' a:help='Angle we can turn instantly. Any value greater than pi will disable turning times. Avoid zero since it stops the entity every turn.'>
<ref name='positiveDecimal'/>
</element>
<element name='Acceleration' a:help='Acceleration (in metres per second^2).'>
<ref name='positiveDecimal'/>
</element>
<element name='PassabilityClass' a:help='Identifies the terrain passability class (values are defined in special/pathfinder.xml).'>
<text/>
</element>
<element name='Weight' a:help='Makes this unit both push harder and harder to push. 10 is considered the base value.'>
<ref name='positiveDecimal'/>
</element>
<optional>
<element name='DisablePushing'>
<data type='boolean'/>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.UnitMotionScripted'>
<element name='UnitMotionScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.UnitMotionManager'>
<element name='UnitMotionManager'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.UnitRenderer'>
<element name='UnitRenderer'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.VisibilityScripted'>
<element name='VisibilityScripted'>
<interleave>
<a:component type='script-wrapper'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Vision'>
<element name='Vision'>
<interleave>
<element name='Range'>
<data type='nonNegativeInteger'/>
</element>
<optional>
<element name='RevealShore'>
<data type='boolean'/>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.VisualActor'>
<element name='VisualActor'>
<interleave>
<a:help>Display the unit using the engine's actor system.
</a:help>
<a:example>
<Actor>units/hellenes/infantry_spearman_b.xml
</Actor>
</a:example>
<a:example>
<Actor>structures/hellenes/barracks.xml
</Actor>
<FoundationActor>structures/fndn_4x4.xml
</FoundationActor>
</a:example>
<element name='Actor' a:help='Filename of the actor to be used for this unit'>
<text/>
</element>
<optional>
<element name='FoundationActor' a:help='Filename of the actor to be used the foundation while this unit is being constructed'>
<text/>
</element>
</optional>
<optional>
<element name='Foundation' a:help='Used internally; if present, the unit will be rendered as a foundation'>
<empty/>
</element>
</optional>
<optional>
<element name='ConstructionPreview' a:help='If present, the unit should have a construction preview'>
<empty/>
</element>
</optional>
<optional>
<element name='DisableShadows' a:help='Used internally; if present, shadows will be disabled'>
<empty/>
</element>
</optional>
<optional>
<element name='ActorOnly' a:help='Used internally; if present, the unit will only be rendered if the user has high enough graphical settings.'>
<empty/>
</element>
</optional>
<element name='SilhouetteDisplay'>
<data type='boolean'/>
</element>
<element name='SilhouetteOccluder'>
<data type='boolean'/>
</element>
<optional>
<element name='SelectionShape'>
<choice>
<element name='Bounds' a:help='Determines the selection box based on the model bounds'>
<empty/>
</element>
<element name='Footprint' a:help='Determines the selection box based on the entity Footprint component'>
<empty/>
</element>
<element name='Box' a:help='Sets the selection shape to a box of specified dimensions'>
<attribute name='width'>
<data type='decimal'>
<param name='minExclusive'>0.0
</param>
</data>
</attribute>
<attribute name='height'>
<data type='decimal'>
<param name='minExclusive'>0.0
</param>
</data>
</attribute>
<attribute name='depth'>
<data type='decimal'>
<param name='minExclusive'>0.0
</param>
</data>
</attribute>
</element>
<element name='Cylinder' a:help='Sets the selection shape to a cylinder of specified dimensions'>
<attribute name='radius'>
<data type='decimal'>
<param name='minExclusive'>0.0
</param>
</data>
</attribute>
<attribute name='height'>
<data type='decimal'>
<param name='minExclusive'>0.0
</param>
</data>
</attribute>
</element>
</choice>
</element>
</optional>
<element name='VisibleInAtlasOnly'>
<data type='boolean'/>
</element>
</interleave>
</element>
</define>
<define name='component.WaterManager'>
<element name='WaterManager'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.AIInterface'>
<element name='AIInterface'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.AIProxy'>
<element name='AIProxy'>
<interleave>
<empty/>
</interleave>
</element>
</define>
<define name='component.AlertRaiser'>
<element name='AlertRaiser'>
<interleave>
<element name='List' a:help='Classes of entities which are affected by this alert raiser'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
<element name='RaiseAlertRange'>
<data type='integer'/>
</element>
<element name='EndOfAlertRange'>
<data type='integer'/>
</element>
<element name='SearchRange'>
<data type='integer'/>
</element>
</interleave>
</element>
</define>
<define name='component.Attack'>
<element name='Attack'>
<interleave>
<a:help>Controls the attack abilities and strengths of the unit.
</a:help>
<a:example>
<Melee>
<AttackName>Spear
</AttackName>
<Damage>
<Hack>10.0
</Hack>
<Pierce>0.0
</Pierce>
<Crush>5.0
</Crush>
</Damage>
<MaxRange>4.0
</MaxRange>
<RepeatTime>1000
</RepeatTime>
<Bonuses>
<Bonus1>
<Civ>pers
</Civ>
<Classes>Infantry
</Classes>
<Multiplier>1.5
</Multiplier>
</Bonus1>
<BonusCavMelee>
<Classes>Cavalry Melee
</Classes>
<Multiplier>1.5
</Multiplier>
</BonusCavMelee>
</Bonuses>
<RestrictedClasses datatype="tokens">Champion
</RestrictedClasses>
<PreferredClasses datatype="tokens">Cavalry Infantry
</PreferredClasses>
</Melee>
<Ranged>
<AttackName>Bow
</AttackName>
<Damage>
<Hack>0.0
</Hack>
<Pierce>10.0
</Pierce>
<Crush>0.0
</Crush>
</Damage>
<MaxRange>44.0
</MaxRange>
<MinRange>20.0
</MinRange>
<Origin>
<X>0
</X>
<Y>10.0
</Y>
<Z>0
</Z>
</Origin>
<PrepareTime>800
</PrepareTime>
<RepeatTime>1600
</RepeatTime>
<EffectDelay>1000
</EffectDelay>
<Bonuses>
<Bonus1>
<Classes>Cavalry
</Classes>
<Multiplier>2
</Multiplier>
</Bonus1>
</Bonuses>
<Projectile>
<Speed>50.0
</Speed>
<Spread>2.5
</Spread>
<ActorName>props/units/weapons/rock_flaming.xml
</ActorName>
<ImpactActorName>props/units/weapons/rock_explosion.xml
</ImpactActorName>
<ImpactAnimationLifetime>0.1
</ImpactAnimationLifetime>
<FriendlyFire>false
</FriendlyFire>
</Projectile>
<RestrictedClasses datatype="tokens">Champion
</RestrictedClasses>
<Splash>
<Shape>Circular
</Shape>
<Range>20
</Range>
<FriendlyFire>false
</FriendlyFire>
<Damage>
<Hack>0.0
</Hack>
<Pierce>10.0
</Pierce>
<Crush>0.0
</Crush>
</Damage>
</Splash>
</Ranged>
<Slaughter>
<Damage>
<Hack>1000.0
</Hack>
<Pierce>0.0
</Pierce>
<Crush>0.0
</Crush>
</Damage>
<RepeatTime>1000
</RepeatTime>
<MaxRange>4.0
</MaxRange>
</Slaughter>
</a:example>
<oneOrMore>
<element>
<anyName a:help='Currently one of Melee, Ranged, Capture or Slaughter.'/>
<interleave>
<element name='AttackName' a:help='Name of the attack, to be displayed in the GUI. Optionally includes a translate context attribute.'>
<optional>
<attribute name='context'>
<text/>
</attribute>
</optional>
<text/>
</element>
<oneOrMore>
<choice>
<element name='Damage'>
<oneOrMore>
<element a:help='One or more elements describing damage types'>
<anyName/>
<ref name='nonNegativeDecimal' />
</element>
</oneOrMore>
</element>
<element name='Capture' a:help='Capture points value'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='ApplyStatus' a:help='Effects like poisoning or burning a unit.'>
<oneOrMore>
<element>
<anyName a:help='The name must have a matching JSON file in data/status_effects.'/>
<interleave>
<optional>
<element name='Duration' a:help='The duration of the status while the effect occurs.'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<interleave>
<element name='Interval' a:help='Interval between the occurances of the effect.'>
<ref name='nonNegativeDecimal'/>
</element>
<oneOrMore>
<choice>
<element name='Damage'>
<oneOrMore>
<element a:help='One or more elements describing damage types'>
<anyName/>
<ref name='nonNegativeDecimal' />
</element>
</oneOrMore>
</element>
<element name='Capture' a:help='Capture points value'>
<ref name='nonNegativeDecimal'/>
</element>
</choice>
</oneOrMore>
</interleave>
</optional>
<optional>
<element name='Modifiers' a:help='List of modifiers.'>
<oneOrMore>
<element>
<anyName />
<interleave>
<element name='Paths' a:help='Space separated value paths to modify.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
<element name='Affects' a:help='An array of classes to affect.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
<choice>
<element name='Add'>
<data type='decimal' />
</element>
<element name='Multiply'>
<data type='decimal' />
</element>
<element name='Replace'>
<text/>
</element>
</choice>
</interleave>
</element>
</oneOrMore>
</element>
</optional>
<element name='Stackability' a:help='Defines how this status effect stacks, i.e. how subsequent status effects of the same kind are handled. Choices are: “Ignore”, which means a new one is ignored, “Extend”, which means the duration of a new one is added to the already active status effect, “Replace”, which means the currently active status effect is removed and the new one is put in place and “Stack”, which means that the status effect can be added multiple times.'>
<choice>
<value>Ignore
</value>
<value>Extend
</value>
<value>Replace
</value>
<value>Stack
</value>
</choice>
</element>
</interleave>
</element>
</oneOrMore>
</element>
</choice>
</oneOrMore>
<optional>
<element name='Bonuses'>
<zeroOrMore>
<element>
<anyName/>
<interleave>
<optional>
<element name='Civ' a:help='If an entity has this civ then the bonus is applied'>
<text/>
</element>
</optional>
<element name='Classes' a:help='If an entity has all these classes then the bonus is applied'>
<text/>
</element>
<element name='Multiplier' a:help='The effect strength is multiplied by this'>
<ref name='nonNegativeDecimal'/>
</element>
</interleave>
</element>
</zeroOrMore>
</element>
</optional>
<element name='MaxRange' a:help='Maximum attack range (in metres)'>
<ref name='nonNegativeDecimal'/>
</element>
<optional>
<element name='MinRange' a:help='Minimum attack range (in metres). Defaults to 0.'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='Origin' a:help='The offset from which the attack occurs, relative to the entity position. Defaults to {0,0,0}.'>
<interleave>
<element name='X'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='Y'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='Z'>
<ref name='nonNegativeDecimal'/>
</element>
</interleave>
</element>
</optional>
<optional>
<element name='RangeOverlay'>
<interleave>
<element name='LineTexture'>
<text/>
</element>
<element name='LineTextureMask'>
<text/>
</element>
<element name='LineThickness'>
<ref name='nonNegativeDecimal'/>
</element>
</interleave>
</element>
</optional>
<optional>
<element name='PrepareTime' a:help='Time from the start of the attack command until the attack actually occurs (in milliseconds). This value relative to RepeatTime should closely match the "event" point in the actor&apos;s attack animation. Defaults to 0.'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<element name='RepeatTime' a:help='Time between attacks (in milliseconds). The attack animation will be stretched to match this time'>
<data type='positiveInteger'/>
</element>
<optional>
<element name='EffectDelay' a:help='Delay of applying the effects, in milliseconds after the attack has landed. Defaults to 0.'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='Splash'>
<interleave>
<element name='Shape' a:help='Shape of the splash damage, can be circular or linear'>
<text/>
</element>
<element name='Range' a:help='Size of the area affected by the splash'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='FriendlyFire' a:help='Whether the splash damage can hurt non enemy units'>
<data type='boolean'/>
</element>
<oneOrMore>
<choice>
<element name='Damage'>
<oneOrMore>
<element a:help='One or more elements describing damage types'>
<anyName/>
<ref name='nonNegativeDecimal' />
</element>
</oneOrMore>
</element>
<element name='Capture' a:help='Capture points value'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='ApplyStatus' a:help='Effects like poisoning or burning a unit.'>
<oneOrMore>
<element>
<anyName a:help='The name must have a matching JSON file in data/status_effects.'/>
<interleave>
<optional>
<element name='Duration' a:help='The duration of the status while the effect occurs.'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<interleave>
<element name='Interval' a:help='Interval between the occurances of the effect.'>
<ref name='nonNegativeDecimal'/>
</element>
<oneOrMore>
<choice>
<element name='Damage'>
<oneOrMore>
<element a:help='One or more elements describing damage types'>
<anyName/>
<ref name='nonNegativeDecimal' />
</element>
</oneOrMore>
</element>
<element name='Capture' a:help='Capture points value'>
<ref name='nonNegativeDecimal'/>
</element>
</choice>
</oneOrMore>
</interleave>
</optional>
<optional>
<element name='Modifiers' a:help='List of modifiers.'>
<oneOrMore>
<element>
<anyName />
<interleave>
<element name='Paths' a:help='Space separated value paths to modify.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
<element name='Affects' a:help='An array of classes to affect.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
<choice>
<element name='Add'>
<data type='decimal' />
</element>
<element name='Multiply'>
<data type='decimal' />
</element>
<element name='Replace'>
<text/>
</element>
</choice>
</interleave>
</element>
</oneOrMore>
</element>
</optional>
<element name='Stackability' a:help='Defines how this status effect stacks, i.e. how subsequent status effects of the same kind are handled. Choices are: “Ignore”, which means a new one is ignored, “Extend”, which means the duration of a new one is added to the already active status effect, “Replace”, which means the currently active status effect is removed and the new one is put in place and “Stack”, which means that the status effect can be added multiple times.'>
<choice>
<value>Ignore
</value>
<value>Extend
</value>
<value>Replace
</value>
<value>Stack
</value>
</choice>
</element>
</interleave>
</element>
</oneOrMore>
</element>
</choice>
</oneOrMore>
<optional>
<element name='Bonuses'>
<zeroOrMore>
<element>
<anyName/>
<interleave>
<optional>
<element name='Civ' a:help='If an entity has this civ then the bonus is applied'>
<text/>
</element>
</optional>
<element name='Classes' a:help='If an entity has all these classes then the bonus is applied'>
<text/>
</element>
<element name='Multiplier' a:help='The effect strength is multiplied by this'>
<ref name='nonNegativeDecimal'/>
</element>
</interleave>
</element>
</zeroOrMore>
</element>
</optional>
</interleave>
</element>
</optional>
<optional>
<element name='Projectile'>
<interleave>
<element name='Speed' a:help='Speed of projectiles (in meters per second).'>
<ref name='positiveDecimal'/>
</element>
<element name='Spread' a:help='Standard deviation of the bivariate normal distribution of hits at 100 meters. A disk at 100 meters from the attacker with this radius (2x this radius, 3x this radius) is expected to include the landing points of 39.3% (86.5%, 98.9%) of the rounds.'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='Gravity' a:help='The gravity affecting the projectile. This affects the shape of the flight curve.'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='FriendlyFire' a:help='Whether stray missiles can hurt non enemy units.'>
<data type='boolean'/>
</element>
<optional>
<element name='LaunchPoint' a:help='Delta from the unit position where to launch the projectile.'>
<attribute name='y'>
<data type='decimal'/>
</attribute>
</element>
</optional>
<optional>
<element name='ActorName' a:help='actor of the projectile animation.'>
<text/>
</element>
</optional>
<optional>
<element name='ImpactActorName' a:help='actor of the projectile impact animation'>
<text/>
</element>
<element name='ImpactAnimationLifetime' a:help='length of the projectile impact animation.'>
<ref name='positiveDecimal'/>
</element>
</optional>
</interleave>
</element>
</optional>
<optional>
<element name='PreferredClasses' a:help='Space delimited list of classes preferred for attacking. If an entity has any of theses classes, it is preferred. The classes are in decending order of preference'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
</optional>
<optional>
<element name='RestrictedClasses' a:help='Space delimited list of classes that cannot be attacked by this entity. If target entity has any of these classes, it cannot be attacked'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
</optional>
</interleave>
</element>
</oneOrMore>
</interleave>
</element>
</define>
<define name='component.AttackDetection'>
<element name='AttackDetection'>
<interleave>
<a:help>Detects incoming attacks.
</a:help>
<a:example/>
<element name='SuppressionTransferRange' a:help='Any attacks within this range in meters will replace the previous attack suppression'>
<ref name='positiveDecimal'/>
</element>
<element name='SuppressionRange' a:help='Other attacks within this range in meters will not be registered'>
<ref name='positiveDecimal'/>
</element>
<element name='SuppressionTime' a:help='Other attacks within this time in milliseconds will not be registered'>
<data type='positiveInteger'/>
</element>
</interleave>
</element>
</define>
<define name='component.Auras'>
<element name='Auras'>
<interleave>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text a:help='A whitespace-separated list of aura files, placed under simulation/data/auras/'/>
</interleave>
</element>
</define>
<define name='component.AutoBuildable'>
<element name='AutoBuildable'>
<interleave>
<a:help>Defines whether the entity can be built by itself.
</a:help>
<a:example>
<Rate>1.0
</Rate>
</a:example>
<element name='Rate' a:help='The rate at which the building autobuilds.'>
<ref name='nonNegativeDecimal'/>
</element>
</interleave>
</element>
</define>
<define name='component.Barter'>
<element name='Barter'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.BattleDetection'>
<element name='BattleDetection'>
<interleave>
<a:help>Detects the occurence of battles.
</a:help>
<a:example/>
<element name='TimerInterval' a:help='Duration of one timer period. Interval over which damage should be recorded in milliseconds'>
<data type='positiveInteger'/>
</element>
<element name='RecordLength' a:help='Record length. Number of timer cycles over which damage rate should be calculated'>
<data type='positiveInteger'/>
</element>
<element name='DamageRateThreshold' a:help='Damage rate at which alertness is increased'>
<ref name='positiveDecimal'/>
</element>
<element name='AlertnessBattleThreshold' a:help='Alertness at which the player is considered in battle'>
<ref name='positiveDecimal'/>
</element>
<element name='AlertnessPeaceThreshold' a:help='Alertness at which the player is considered at peace'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='AlertnessMax' a:help='Maximum alertness level'>
<ref name='positiveDecimal'/>
</element>
</interleave>
</element>
</define>
<define name='component.BuildRestrictions'>
<element name='BuildRestrictions'>
<interleave>
<a:help>Specifies building placement restrictions as they relate to terrain, territories, and distance.
</a:help>
<a:example>
<BuildRestrictions>
<PlacementType>land
</PlacementType>
<Territory>own
</Territory>
<Category>Structure
</Category>
<Distance>
<FromClass>CivilCentre
</FromClass>
<MaxDistance>40
</MaxDistance>
</Distance>
</BuildRestrictions>
</a:example>
<element name='PlacementType' a:help='Specifies the terrain type restriction for this building.'>
<choice>
<value>land
</value>
<value>shore
</value>
<value>land-shore
</value>
</choice>
</element>
<element name='Territory' a:help='Specifies territory type restrictions for this building.'>
<list>
<oneOrMore>
<choice>
<value>own
</value>
<value>ally
</value>
<value>neutral
</value>
<value>enemy
</value>
</choice>
</oneOrMore>
</list>
</element>
<element name='Category' a:help='Specifies the category of this building, for satisfying special constraints. Choices include: Apadana, CivilCentre, Council, Embassy, Fortress, Gladiator, Hall, Hero, Juggernaut, Library, Lighthouse, Monument, Pillar, PyramidLarge, PyramidSmall, Stoa, TempleOfAmun, Theater, Tower, UniqueBuilding, WarDog, Wonder'>
<text/>
</element>
<optional>
<element name='MatchLimit' a:help='Specifies how many times this entity can be created during a match.'>
<data type='positiveInteger'/>
</element>
</optional>
<optional>
<element name='Distance' a:help='Specifies distance restrictions on this building, relative to buildings from the given category.'>
<interleave>
<element name='FromClass'>
<text/>
</element>
<optional>
<element name='MinDistance'>
<data type='positiveInteger'/>
</element>
</optional>
<optional>
<element name='MaxDistance'>
<data type='positiveInteger'/>
</element>
</optional>
</interleave>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.Builder'>
<element name='Builder'>
<interleave>
<a:help>Allows the unit to construct and repair buildings.
</a:help>
<a:example>
<Rate>1.0
</Rate>
<Entities datatype='tokens'>
structures/{civ}/barracks
structures/{native}/civil_centre
structures/pers/apadana
</Entities>
</a:example>
<element name='Rate' a:help='Construction speed multiplier (1.0 is normal speed, higher values are faster).'>
<ref name='positiveDecimal'/>
</element>
<element name='Entities' a:help='Space-separated list of entity template names that this unit can build. The special string "{civ}" will be automatically replaced by the civ code of the unit&apos;s owner, while the string "{native}" will be automatically replaced by the unit&apos;s civ code. This element can also be empty, in which case no new foundations may be placed by the unit, but they can still repair existing buildings.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
</interleave>
</element>
</define>
<define name='component.BuildingAI'>
<element name='BuildingAI'>
<interleave>
<element name='DefaultArrowCount'>
<data type='nonNegativeInteger'/>
</element>
<optional>
<element name='MaxArrowCount' a:help='Limit the number of arrows to a certain amount'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<element name='GarrisonArrowMultiplier'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='GarrisonArrowClasses' a:help='Add extra arrows for this class list'>
<text/>
</element>
</interleave>
</element>
</define>
<define name='component.Capturable'>
<element name='Capturable'>
<interleave>
<element name='CapturePoints' a:help='Maximum capture points.'>
<ref name='positiveDecimal'/>
</element>
<element name='RegenRate' a:help='Number of capture points that are regenerated per second in favour of the owner.'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='GarrisonRegenRate' a:help='Number of capture points that are regenerated per second and per garrisoned unit in favour of the owner.'>
<ref name='nonNegativeDecimal'/>
</element>
</interleave>
</element>
</define>
<define name='component.CeasefireManager'>
<element name='CeasefireManager'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Cost'>
<element name='Cost'>
<interleave>
<a:help>Specifies the construction/training costs of this entity.
</a:help>
<a:example>
<Population>1
</Population>
<BuildTime>20.0
</BuildTime>
<Resources>
<food>50
</food>
<wood>0
</wood>
<stone>0
</stone>
<metal>25
</metal>
</Resources>
</a:example>
<element name='Population' a:help='Population cost'>
<data type='nonNegativeInteger'/>
</element>
<element name='BuildTime' a:help='Time taken to construct/train this entity (in seconds)'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='Resources' a:help='Resource costs to construct/train this entity'>
<interleave>
<optional>
<element name='food'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<element name='wood'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<element name='stone'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<element name='metal'>
<data type='nonNegativeInteger'/>
</element>
</optional>
</interleave>
</element>
</interleave>
</element>
</define>
<define name='component.DeathDamage'>
<element name='DeathDamage'>
<interleave>
<a:help>When a unit or building is destroyed, it inflicts damage to nearby units.
</a:help>
<a:example>
<Shape>Circular
</Shape>
<Range>20
</Range>
<FriendlyFire>false
</FriendlyFire>
<Damage>
<Hack>0.0
</Hack>
<Pierce>10.0
</Pierce>
<Crush>50.0
</Crush>
</Damage>
</a:example>
<element name='Shape' a:help='Shape of the splash damage, can be circular.'>
<text/>
</element>
<element name='Range' a:help='Size of the area affected by the splash.'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='FriendlyFire' a:help='Whether the splash damage can hurt non enemy units.'>
<data type='boolean'/>
</element>
<oneOrMore>
<choice>
<element name='Damage'>
<oneOrMore>
<element a:help='One or more elements describing damage types'>
<anyName/>
<ref name='nonNegativeDecimal' />
</element>
</oneOrMore>
</element>
<element name='Capture' a:help='Capture points value'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='ApplyStatus' a:help='Effects like poisoning or burning a unit.'>
<oneOrMore>
<element>
<anyName a:help='The name must have a matching JSON file in data/status_effects.'/>
<interleave>
<optional>
<element name='Duration' a:help='The duration of the status while the effect occurs.'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<interleave>
<element name='Interval' a:help='Interval between the occurances of the effect.'>
<ref name='nonNegativeDecimal'/>
</element>
<oneOrMore>
<choice>
<element name='Damage'>
<oneOrMore>
<element a:help='One or more elements describing damage types'>
<anyName/>
<ref name='nonNegativeDecimal' />
</element>
</oneOrMore>
</element>
<element name='Capture' a:help='Capture points value'>
<ref name='nonNegativeDecimal'/>
</element>
</choice>
</oneOrMore>
</interleave>
</optional>
<optional>
<element name='Modifiers' a:help='List of modifiers.'>
<oneOrMore>
<element>
<anyName />
<interleave>
<element name='Paths' a:help='Space separated value paths to modify.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
<element name='Affects' a:help='An array of classes to affect.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
<choice>
<element name='Add'>
<data type='decimal' />
</element>
<element name='Multiply'>
<data type='decimal' />
</element>
<element name='Replace'>
<text/>
</element>
</choice>
</interleave>
</element>
</oneOrMore>
</element>
</optional>
<element name='Stackability' a:help='Defines how this status effect stacks, i.e. how subsequent status effects of the same kind are handled. Choices are: “Ignore”, which means a new one is ignored, “Extend”, which means the duration of a new one is added to the already active status effect, “Replace”, which means the currently active status effect is removed and the new one is put in place and “Stack”, which means that the status effect can be added multiple times.'>
<choice>
<value>Ignore
</value>
<value>Extend
</value>
<value>Replace
</value>
<value>Stack
</value>
</choice>
</element>
</interleave>
</element>
</oneOrMore>
</element>
</choice>
</oneOrMore>
<optional>
<element name='Bonuses'>
<zeroOrMore>
<element>
<anyName/>
<interleave>
<optional>
<element name='Civ' a:help='If an entity has this civ then the bonus is applied'>
<text/>
</element>
</optional>
<element name='Classes' a:help='If an entity has all these classes then the bonus is applied'>
<text/>
</element>
<element name='Multiplier' a:help='The effect strength is multiplied by this'>
<ref name='nonNegativeDecimal'/>
</element>
</interleave>
</element>
</zeroOrMore>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.DelayedDamage'>
<element name='DelayedDamage'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.EndGameManager'>
<element name='EndGameManager'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.EntityLimits'>
<element name='EntityLimits'>
<interleave>
<a:help>Specifies per category limits on number of entities (buildings or units) that can be created for each player
</a:help>
<a:example>
<Limits>
<Apadana>1
</Apadana>
<Fortress>10
</Fortress>
<Hero>1
</Hero>
<Monument>5
</Monument>
<Tower>25
</Tower>
<Wonder>1
</Wonder>
</Limits>
<LimitChangers>
<Monument>
<CivilCentre>2
</CivilCentre>
</Monument>
</LimitChangers>
<LimitRemovers>
<CivilCentre>
<RequiredTechs datatype="tokens">town_phase
</RequiredTechs>
</CivilCentre>
</LimitRemovers>
</a:example>
<element name='Limits'>
<zeroOrMore>
<element a:help='Specifies a category of building/unit on which to apply this limit. See BuildRestrictions/TrainingRestrictions for possible categories'>
<anyName />
<data type='integer'/>
</element>
</zeroOrMore>
</element>
<element name='LimitChangers'>
<zeroOrMore>
<element a:help='Specifies a category of building/unit on which to apply this limit. See BuildRestrictions/TrainingRestrictions for possible categories'>
<anyName />
<zeroOrMore>
<element a:help='Specifies the class that changes the entity limit'>
<anyName />
<data type='integer'/>
</element>
</zeroOrMore>
</element>
</zeroOrMore>
</element>
<element name='LimitRemovers'>
<zeroOrMore>
<element a:help='Specifies a category of building/unit on which to remove this limit. The limit will be removed if all the followings requirements are satisfied'>
<anyName />
<oneOrMore>
<element a:help='Possible requirements are: RequiredTechs and RequiredClasses'>
<anyName />
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
</oneOrMore>
</element>
</zeroOrMore>
</element>
</interleave>
</element>
</define>
<define name='component.Fogging'>
<element name='Fogging'>
<interleave>
<a:help>Allows this entity to be replaced by mirage entities in the fog-of-war.
</a:help>
<empty/>
</interleave>
</element>
</define>
<define name='component.Formation'>
<element name='Formation'>
<interleave>
<element name='RequiredMemberCount' a:help='Minimum number of entities the formation should contain (at least 2).'>
<data type='integer'>
<param name='minInclusive'>2
</param>
</data>
</element>
<element name='DisabledTooltip' a:help='Tooltip shown when the formation is disabled.'>
<text/>
</element>
<element name='SpeedMultiplier' a:help='The speed of the formation is determined by the minimum speed of all members, multiplied with this number.'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='FormationShape' a:help='Formation shape, currently supported are square, triangle and special, where special will be defined in the source code.'>
<text/>
</element>
<element name='MaxTurningAngle' a:help='The turning angle in radian under which the formation attempts to turn and over which the formation positions are recomputed.'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='ShiftRows' a:help='Set the value to true to shift subsequent rows.'>
<text/>
</element>
<element name='SortingClasses' a:help='Classes will be added to the formation in this order. Where the classes will be added first depends on the formation.'>
<text/>
</element>
<optional>
<element name='SortingOrder' a:help='The order of sorting. This defaults to an order where the formation is filled from the first row to the last, and each row from the center to the sides. Other possible sort orders are “fillFromTheSides”, where the most important units are on the sides of each row, and “fillToTheCenter”, where the most vulnerable units are in the center of the formation.'>
<text/>
</element>
</optional>
<element name='WidthDepthRatio' a:help='Average width-to-depth ratio, counted in number of units.'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='Sloppiness' a:help='The maximum difference between the actual and the perfectly aligned formation position, in meters.'>
<ref name='nonNegativeDecimal'/>
</element>
<optional>
<element name='MinColumns' a:help='When possible, this number of colums will be created. Overriding the wanted width-to-depth ratio.'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<element name='MaxColumns' a:help='When possible within the number of units, and the maximum number of rows, this will be the maximum number of columns.'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<element name='MaxRows' a:help='The maximum number of rows in the formation.'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<element name='CenterGap' a:help='The size of the central gap, expressed in number of units wide.'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<element name='UnitSeparationWidthMultiplier' a:help='Place the units in the formation closer or further to each other. The standard separation is the footprint size.'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='UnitSeparationDepthMultiplier' a:help='Place the units in the formation closer or further to each other. The standard separation is the footprint size.'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='AnimationVariants' a:help='Give a list of animation variants to use for the particular formation members, based on their positions.'>
<text a:help='example text: “1..1,1..-1:animationVariant1;2..2,1..-1;animationVariant2”, this will set animationVariant1 for the first row, and animation2 for the second row. The first part of the numbers (1..1 and 2..2) means the row range. Every row between (and including) those values will switch animationvariants. The second part of the numbers (1..-1) denote the columns inside those rows that will be affected. Note that in both cases, you can use -1 for the last row/column, -2 for the second to last, etc.'/>
</element>
</interleave>
</element>
</define>
<define name='component.FormationAttack'>
<element name='FormationAttack'>
<interleave>
<element name='CanAttackAsFormation'>
<text/>
</element>
</interleave>
</element>
</define>
<define name='component.Foundation'>
<element name='Foundation'>
<interleave>
<element name='BuildTimeModifier' a:help='Effect for having multiple builders.'>
<ref name='nonNegativeDecimal'/>
</element>
</interleave>
</element>
</define>
<define name='component.GarrisonHolder'>
<element name='GarrisonHolder'>
<interleave>
<element name='Max' a:help='Maximum number of entities which can be garrisoned in this holder'>
<data type='positiveInteger'/>
</element>
<element name='List' a:help='Classes of entities which are allowed to garrison in this holder (from Identity)'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
<element name='EjectClassesOnDestroy' a:help='Classes of entities to be ejected on destroy. Others are killed'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
<element name='BuffHeal' a:help='Number of hitpoints that will be restored to this holder&apos;s garrisoned units each second'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='LoadingRange' a:help='The maximum distance from this holder at which entities are allowed to garrison. Should be about 2.0 for land entities and preferably greater for ships'>
<ref name='nonNegativeDecimal'/>
</element>
<optional>
<element name='EjectHealth' a:help='Percentage of maximum health below which this holder no longer allows garrisoning'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='Pickup' a:help='This garrisonHolder will move to pick up units to be garrisoned'>
<data type='boolean'/>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.Garrisonable'>
<element name='Garrisonable'>
<interleave>
<a:help>Controls the garrisonability of an entity.
</a:help>
<a:example>
<Size>10
</Size>
</a:example>
<element name='Size' a:help='Number of garrison slots the entity occupies.'>
<data type='nonNegativeInteger'/>
</element>
</interleave>
</element>
</define>
<define name='component.Gate'>
<element name='Gate'>
<interleave>
<a:help>Controls behavior of wall gates
</a:help>
<a:example>
<PassRange>20
</PassRange>
</a:example>
<element name='PassRange' a:help='Units must be within this distance (in meters) of the gate for it to open'>
<ref name='nonNegativeDecimal'/>
</element>
</interleave>
</element>
</define>
<define name='component.Guard'>
<element name='Guard'>
<interleave>
<empty/>
</interleave>
</element>
</define>
<define name='component.GuiInterface'>
<element name='GuiInterface'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Heal'>
<element name='Heal'>
<interleave>
<a:help>Controls the healing abilities of the unit.
</a:help>
<a:example>
<Range>20
</Range>
<RangeOverlay>
<LineTexture>heal_overlay_range.png
</LineTexture>
<LineTextureMask>heal_overlay_range_mask.png
</LineTextureMask>
<LineThickness>0.35
</LineThickness>
</RangeOverlay>
<Health>5
</Health>
<Interval>2000
</Interval>
<UnhealableClasses datatype="tokens">Cavalry
</UnhealableClasses>
<HealableClasses datatype="tokens">Support Infantry
</HealableClasses>
</a:example>
<element name='Range' a:help='Range (in metres) where healing is possible.'>
<ref name='nonNegativeDecimal'/>
</element>
<optional>
<element name='RangeOverlay'>
<interleave>
<element name='LineTexture'>
<text/>
</element>
<element name='LineTextureMask'>
<text/>
</element>
<element name='LineThickness'>
<ref name='nonNegativeDecimal'/>
</element>
</interleave>
</element>
</optional>
<element name='Health' a:help='Health healed per Interval.'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='Interval' a:help='A heal is performed every Interval ms.'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='UnhealableClasses' a:help='If the target has any of these classes it can not be healed (even if it has a class from HealableClasses).'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
<element name='HealableClasses' a:help='The target must have one of these classes to be healable.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
</interleave>
</element>
</define>
<define name='component.Health'>
<element name='Health'>
<interleave>
<a:help>Deals with hitpoints and death.
</a:help>
<a:example>
<Max>100
</Max>
<RegenRate>1.0
</RegenRate>
<IdleRegenRate>0
</IdleRegenRate>
<DeathType>corpse
</DeathType>
</a:example>
<element name='Max' a:help='Maximum hitpoints'>
<ref name='nonNegativeDecimal'/>
</element>
<optional>
<element name='Initial' a:help='Initial hitpoints. Default if unspecified is equal to Max'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='DamageVariants'>
<oneOrMore>
<element a:help='Name of the variant to select when health drops under the defined ratio'>
<anyName/>
<data type='decimal'>
<param name='minInclusive'>0
</param>
<param name='maxInclusive'>1
</param>
</data>
</element>
</oneOrMore>
</element>
</optional>
<element name='RegenRate' a:help='Hitpoint regeneration rate per second.'>
<data type='decimal'/>
</element>
<element name='IdleRegenRate' a:help='Hitpoint regeneration rate per second when idle or garrisoned.'>
<data type='decimal'/>
</element>
<element name='DeathType' a:help='Behaviour when the unit dies'>
<choice>
<value a:help='Disappear instantly'>vanish
</value>
<value a:help='Turn into a corpse'>corpse
</value>
<value a:help='Remain in the world with 0 health'>remain
</value>
</choice>
</element>
<optional>
<element name='SpawnEntityOnDeath' a:help='Entity template to spawn when this entity dies. Note: this is different than the corpse, which retains the original entity&apos;s appearance'>
<text/>
</element>
</optional>
<element name='Unhealable' a:help='Indicates that the entity can not be healed by healer units'>
<data type='boolean'/>
</element>
</interleave>
</element>
</define>
<define name='component.Identity'>
<element name='Identity'>
<interleave>
<a:help>Specifies various names and values associated with the entity, typically for GUI display to users.
</a:help>
<a:example>
<Civ>athen
</Civ>
<GenericName>Athenian Hoplite
</GenericName>
<SpecificName>Hoplī́tēs Athēnaïkós
</SpecificName>
<Icon>units/athen_infantry_spearman.png
</Icon>
</a:example>
<element name='Civ' a:help='Civilization that this unit is primarily associated with, typically a 4-letter code. Choices include: gaia (world objects), skirm (skirmish map placeholders), athen (Athenians), brit (Britons), cart (Carthaginians), gaul (Gauls), iber (Iberians), kush (Kushites), mace (Macedonians), maur (Mauryas), pers (Persians), ptol (Ptolemies), rome (Romans), sele (Seleucids), spart (Spartans).'>
<text/>
</element>
<optional>
<element name='Lang' a:help='Unit language for voices.'>
<text/>
</element>
</optional>
<optional>
<element name='Phenotype' a:help='Unit phenotype for voices and visual. If more than one is specified a random one will be chosen.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
</optional>
<element name='GenericName' a:help='Generic English-language name for this entity.'>
<text/>
</element>
<optional>
<element name='SpecificName' a:help='Specific native-language name for this entity.'>
<text/>
</element>
</optional>
<optional>
<element name='SelectionGroupName' a:help='Name used to group ranked entities.'>
<text/>
</element>
</optional>
<optional>
<element name='Tooltip'>
<text/>
</element>
</optional>
<optional>
<element name='History'>
<text/>
</element>
</optional>
<optional>
<element name='Rank'>
<choice>
<value>Basic
</value>
<value>Advanced
</value>
<value>Elite
</value>
</choice>
</element>
</optional>
<optional>
<element name='Classes' a:help='Optional list of space-separated classes applying to this entity. Choices include: AfricanElephant, AmunGuard, Animal, ApedemakGuard, Ashoka, Barter, CitizenSoldier, CivCentre, CivSpecific, ConquestCritical, Domestic, DropsiteFood, DropsiteMetal, DropsiteStone, DropsiteWood, FastMoving, FemaleCitizen, Foundation, GarrisonFortress, Human, IndianElephant, Juggernaut, KushTrireme, MercenaryCamp, Organic, Player, PtolemyIV, SeaCreature, Spy, Structure, Unit, WallLong, WallMedium, WallShort, WallTower.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
</optional>
<optional>
<element name='VisibleClasses' a:help='Optional list of space-separated classes applying to this entity. These classes will also be visible in various GUI elements. If the classes need spaces, underscores will be replaced with spaces. Choices include: Amphitheater, Archer, ArmyCamp, Arsenal, ArtilleryTower, Axeman, Barracks, Bireme, BoltShooter, BoltTower, Bribable, Builder, Camel, Cavalry, Champion, Chariot, Citizen, City, Civic, CivilCentre, Colony, Corral, Council, Crossbowman, Defensive, Dock, Dog, Economic, Elephant, ElephantStable, Embassy, Farmstead, Field, Fireship, FishingBoat, Forge, Fortress, Gate, Gladiator, Gymnasium, Hall, Healer, Hero, House, Immortal, Infantry, Javelineer, Library, Lighthouse, Maceman, Melee, Market, Mercenary, Military, Monument, Naval, Outpost, Palace, Palisade, Pikeman, Pillar, Pyramid, Quinquereme, Ram, Range, Ranged, Relic, Resource, RotaryMill, SentryTower, Ship, Shipyard, Siege, SiegeTower, SiegeWall, Slave, Slinger, Soldier, Spearman, Stable, Stoa, StoneThrower, StoneTower, Storehouse, Support, Swordsman, Syssiton, Temple, TempleOfAmun, TempleOfApedemak, TempleOfMars, TempleOfVesta, Theater, Tower, Town, Trade, Trader, Trireme, TriumphalArch, Village, Wall, Warship, Wonder, Worker.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
</optional>
<element name='Icon'>
<text/>
</element>
<optional>
<element name='RequiredTechnology' a:help='Optional name of a technology which must be researched before the entity can be produced.'>
<text/>
</element>
</optional>
<optional>
<element name='Controllable' a:help='Whether players can control this entity. Defaults to true.'>
<data type='boolean'/>
</element>
</optional>
<element name='Undeletable' a:help='Prevent players from deleting this entity.'>
<data type='boolean'/>
</element>
</interleave>
</element>
</define>
<define name='component.Loot'>
<element name='Loot'>
<interleave>
<a:help>Specifies the loot credited when this entity is killed.
</a:help>
<a:example>
<xp>35
</xp>
<metal>10
</metal>
</a:example>
<interleave>
<optional>
<element name='food'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<element name='wood'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<element name='stone'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<element name='metal'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<element name='xp'>
<data type='nonNegativeInteger'/>
</element>
</optional>
</interleave>
</interleave>
</element>
</define>
<define name='component.Looter'>
<element name='Looter'>
<interleave>
<empty/>
</interleave>
</element>
</define>
<define name='component.Market'>
<element name='Market'>
<interleave>
<element name='TradeType' a:help='Specifies the type of possible trade route (land or naval).'>
<list>
<oneOrMore>
<choice>
<value>land
</value>
<value>naval
</value>
</choice>
</oneOrMore>
</list>
</element>
<element name='InternationalBonus' a:help='Additional part of the gain donated when two different players trade'>
<ref name='nonNegativeDecimal'/>
</element>
</interleave>
</element>
</define>
<define name='component.Mirage'>
<element name='Mirage'>
<interleave>
<a:help>Mirage entities replace real entities in the fog-of-war.
</a:help>
<empty/>
</interleave>
</element>
</define>
<define name='component.ModifiersManager'>
<element name='ModifiersManager'>
<interleave>
<empty/>
</interleave>
</element>
</define>
<define name='component.MotionBallScripted'>
<element name='MotionBallScripted'>
<interleave>
<a:component type='test'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Pack'>
<element name='Pack'>
<interleave>
<element name='Entity' a:help='Entity to transform into'>
<text/>
</element>
<element name='Time' a:help='Time required to transform this entity, in milliseconds'>
<data type='nonNegativeInteger'/>
</element>
<element name='State' a:help='Whether this entity is packed or unpacked'>
<choice>
<value>packed
</value>
<value>unpacked
</value>
</choice>
</element>
</interleave>
</element>
</define>
<define name='component.Player'>
<element name='Player'>
<interleave>
<element name='BarterMultiplier' a:help='Multipliers for barter prices.'>
<interleave>
<element name='Buy' a:help='Multipliers for the buy prices.'>
<interleave>
<optional>
<element name='food'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='wood'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='stone'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='metal'>
<ref name='positiveDecimal'/>
</element>
</optional>
</interleave>
</element>
<element name='Sell' a:help='Multipliers for the sell prices.'>
<interleave>
<optional>
<element name='food'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='wood'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='stone'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='metal'>
<ref name='positiveDecimal'/>
</element>
</optional>
</interleave>
</element>
</interleave>
</element>
<element name='Formations' a:help='Space-separated list of formations this player can use.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
<element name='SharedLosTech' a:help='Allies will share los when this technology is researched. Leave empty to never share LOS.'>
<text/>
</element>
<element name='SharedDropsitesTech' a:help='Allies will share dropsites when this technology is researched. Leave empty to never share dropsites.'>
<text/>
</element>
<element name='SpyCostMultiplier'>
<ref name='nonNegativeDecimal'/>
</element>
</interleave>
</element>
</define>
<define name='component.PlayerManager'>
<element name='PlayerManager'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Population'>
<element name='Population'>
<interleave>
<a:help>Specifies the Population cap increase generated by this entity.
</a:help>
<a:example>
<Bonus>15
</Bonus>
</a:example>
<element name='Bonus' a:help='Population cap increase while this entity exists.'>
<data type='nonNegativeInteger'/>
</element>
</interleave>
</element>
</define>
<define name='component.ProductionQueue'>
<element name='ProductionQueue'>
<interleave>
<a:help>Helps the building to train new units and research technologies.
</a:help>
<empty/>
</interleave>
</element>
</define>
<define name='component.Promotion'>
<element name='Promotion'>
<interleave>
<element name='Entity'>
<text/>
</element>
<optional>
<element name='TrickleRate' a:help='Trickle of XP gained each second.'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<element name='RequiredXp'>
<data type='positiveInteger'/>
</element>
</interleave>
</element>
</define>
<define name='component.RallyPoint'>
<element name='RallyPoint'>
<interleave>
<a:component/>
<empty/>
</interleave>
</element>
</define>
<define name='component.RangeOverlayManager'>
<element name='RangeOverlayManager'>
<interleave>
<empty/>
</interleave>
</element>
</define>
<define name='component.Repairable'>
<element name='Repairable'>
<interleave>
<a:help>Deals with repairable structures and units.
</a:help>
<a:example>
<RepairTimeRatio>2.0
</RepairTimeRatio>
</a:example>
<element name='RepairTimeRatio' a:help='repair time ratio relative to building (or production) time.'>
<ref name='positiveDecimal'/>
</element>
</interleave>
</element>
</define>
<define name='component.Researcher'>
<element name='Researcher'>
<interleave>
<a:help>Allows the entity to research technologies.
</a:help>
<a:example>
<TechCostMultiplier>
<food>0.5
</food>
<wood>0.1
</wood>
<stone>0
</stone>
<metal>2
</metal>
<time>0.9
</time>
</TechCostMultiplier>
<Technologies datatype='tokens'>
phase_town_{civ}
phase_metropolis_ptol
unlock_shared_los
wonder_population_cap
</Technologies>
</a:example>
<optional>
<element name='Technologies' a:help='Space-separated list of technology names that this building can research. When present, the special string "{civ}" will be automatically replaced either by the civ code of the building&apos;s owner if such a tech exists, or by "generic".'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
</optional>
<optional>
<element name='TechCostMultiplier' a:help='Multiplier to modify resources cost and research time of technologies researched in this building.'>
<interleave>
<optional>
<element name='food'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='wood'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='stone'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='metal'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='time'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
</interleave>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.Resistance'>
<element name='Resistance'>
<interleave>
<a:help>Controls the damage resistance of the unit.
</a:help>
<a:example>
<Foundation>
<Damage>
<Hack>10.0
</Hack>
<Pierce>0.0
</Pierce>
<Crush>5.0
</Crush>
</Damage>
<Capture>10
</Capture>
</Foundation>
<Entity>
<Damage>
<Poison>5
</Poison>
</Damage>
</Entity>
</a:example>
<zeroOrMore>
<choice>
<element name='Foundation' a:help='Resistance of an unfinished structure (i.e. a foundation).'>
<oneOrMore>
<choice>
<element name='Damage'>
<oneOrMore>
<element a:help='Resistance against any number of damage types affecting health.'>
<anyName/>
<ref name='nonNegativeDecimal'/>
</element>
</oneOrMore>
</element>
<element name='Capture' a:help='Resistance against Capture attacks.'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='ApplyStatus' a:help='Resistance against StatusEffects.'>
<oneOrMore>
<element a:help='Resistance against any number of status effects.'>
<anyName/>
<interleave>
<optional>
<element name='Duration' a:help='The reduction in duration of the status. The normal duration time is multiplied by this factor.'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='BlockChance' a:help='The chance of blocking the status. In the interval [0,1].'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
</interleave>
</element>
</oneOrMore>
</element>
</choice>
</oneOrMore>
</element>
<element name='Entity' a:help='Resistance of an entity.'>
<oneOrMore>
<choice>
<element name='Damage'>
<oneOrMore>
<element a:help='Resistance against any number of damage types affecting health.'>
<anyName/>
<ref name='nonNegativeDecimal'/>
</element>
</oneOrMore>
</element>
<element name='Capture' a:help='Resistance against Capture attacks.'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='ApplyStatus' a:help='Resistance against StatusEffects.'>
<oneOrMore>
<element a:help='Resistance against any number of status effects.'>
<anyName/>
<interleave>
<optional>
<element name='Duration' a:help='The reduction in duration of the status. The normal duration time is multiplied by this factor.'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='BlockChance' a:help='The chance of blocking the status. In the interval [0,1].'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
</interleave>
</element>
</oneOrMore>
</element>
</choice>
</oneOrMore>
</element>
</choice>
</zeroOrMore>
</interleave>
</element>
</define>
<define name='component.ResourceDropsite'>
<element name='ResourceDropsite'>
<interleave>
<element name='Types'>
<list>
<zeroOrMore>
<choice>
<value>food
</value>
<value>wood
</value>
<value>stone
</value>
<value>metal
</value>
</choice>
</zeroOrMore>
</list>
</element>
<element name='Sharable' a:help='Allows allies to use this entity.'>
<data type='boolean'/>
</element>
</interleave>
</element>
</define>
<define name='component.ResourceGatherer'>
<element name='ResourceGatherer'>
<interleave>
<a:help>Lets the unit gather resources from entities that have the ResourceSupply component.
</a:help>
<a:example>
<MaxDistance>2.0
</MaxDistance>
<BaseSpeed>1.0
</BaseSpeed>
<Rates>
<food.fish>1
</food.fish>
<metal.ore>3
</metal.ore>
<stone.rock>3
</stone.rock>
<wood.tree>2
</wood.tree>
</Rates>
<Capacities>
<food>10
</food>
<metal>10
</metal>
<stone>10
</stone>
<wood>10
</wood>
</Capacities>
</a:example>
<element name='MaxDistance' a:help='Max resource-gathering distance'>
<ref name='positiveDecimal'/>
</element>
<element name='BaseSpeed' a:help='Base resource-gathering rate (in resource units per second)'>
<ref name='positiveDecimal'/>
</element>
<element name='Rates' a:help='Per-resource-type gather rate multipliers. If a resource type is not specified then it cannot be gathered by this unit'>
<interleave>
<optional>
<element name='food'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='wood'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='stone'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='metal'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='food.fish'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='food.fruit'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='food.grain'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='food.meat'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='wood.tree'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='wood.ruins'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='stone.rock'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='stone.ruins'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='metal.ore'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='metal.ruins'>
<ref name='positiveDecimal'/>
</element>
</optional>
</interleave>
</element>
<element name='Capacities' a:help='Per-resource-type maximum carrying capacity'>
<interleave>
<optional>
<element name='food'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='wood'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='stone'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='metal'>
<ref name='positiveDecimal'/>
</element>
</optional>
</interleave>
</element>
</interleave>
</element>
</define>
<define name='component.ResourceSupply'>
<element name='ResourceSupply'>
<interleave>
<a:help>Provides a supply of one particular type of resource.
</a:help>
<a:example>
<Max>1000
</Max>
<Initial>1000
</Initial>
<Type>food.meat
</Type>
<KillBeforeGather>false
</KillBeforeGather>
<MaxGatherers>25
</MaxGatherers>
<DiminishingReturns>0.8
</DiminishingReturns>
<Change>
<AnyName>
<Value>2
</Value>
<Interval>1000
</Interval>
</AnyName>
<Growth>
<State>alive
</State>
<Value>2
</Value>
<Interval>1000
</Interval>
<UpperLimit>500
</UpperLimit>
</Growth>
<Rotting>
<State>dead notGathered
</State>
<Value>-2
</Value>
<Interval>1000
</Interval>
</Rotting>
<Decay>
<State>dead
</State>
<Value>-1
</Value>
<Interval>1000
</Interval>
<LowerLimit>500
</LowerLimit>
</Decay>
</Change>
</a:example>
<element name='KillBeforeGather' a:help='Whether this entity must be killed (health reduced to 0) before its resources can be gathered'>
<data type='boolean'/>
</element>
<element name='Max' a:help='Max amount of resources available from this entity.'>
<choice>
<data type='nonNegativeInteger'/>
<value>Infinity
</value>
</choice>
</element>
<optional>
<element name='Initial' a:help='Initial amount of resources available from this entity, if this is not specified, Max is used.'>
<choice>
<data type='nonNegativeInteger'/>
<value>Infinity
</value>
</choice>
</element>
</optional>
<element name='Type' a:help='Type and Subtype of resource available from this entity'>
<choice>
<value>food.fish
</value>
<value>food.fruit
</value>
<value>food.grain
</value>
<value>food.meat
</value>
<value>wood.tree
</value>
<value>wood.ruins
</value>
<value>stone.rock
</value>
<value>stone.ruins
</value>
<value>metal.ore
</value>
<value>metal.ruins
</value>
</choice>
</element>
<element name='MaxGatherers' a:help='Amount of gatherers who can gather resources from this entity at the same time'>
<data type='nonNegativeInteger'/>
</element>
<optional>
<element name='DiminishingReturns' a:help='The relative rate of any new gatherer compared to the previous one (geometric sequence). Leave the element out for no diminishing returns.'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='Change' a:help='Optional element containing all the modifications that affects a resource supply'>
<oneOrMore>
<element a:help='Element defining whether and how a resource supply regenerates or decays'>
<anyName/>
<interleave>
<element name='Value' a:help='The amount of resource added per interval.'>
<data type='integer'/>
</element>
<element name='Interval' a:help='The interval in milliseconds.'>
<data type='positiveInteger'/>
</element>
<optional>
<element name='UpperLimit' a:help='The upper limit of the value after which the Change has no effect.'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<element name='LowerLimit' a:help='The bottom limit of the value after which the Change has no effect.'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<element name='State' a:help='What state the entity must be in for the effect to occur.'>
<list>
<oneOrMore>
<choice>
<value>alive
</value>
<value>dead
</value>
<value>gathered
</value>
<value>notGathered
</value>
</choice>
</oneOrMore>
</list>
</element>
</optional>
</interleave>
</element>
</oneOrMore>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.ResourceTrickle'>
<element name='ResourceTrickle'>
<interleave>
<a:help>Controls the resource trickle ability of the unit.
</a:help>
<element name='Rates' a:help='Trickle Rates'>
<interleave>
<optional>
<element name='food'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='wood'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='stone'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='metal'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
</interleave>
</element>
<element name='Interval' a:help='Number of miliseconds must pass for the player to gain the next trickle.'>
<ref name='nonNegativeDecimal'/>
</element>
</interleave>
</element>
</define>
<define name='component.Settlement'>
<element name='Settlement'>
<interleave>
<empty/>
</interleave>
</element>
</define>
<define name='component.SkirmishReplacer'>
<element name='SkirmishReplacer'>
<interleave>
<optional>
<element name='general' a:help='The general element replaces {civ} with the civ code.'>
<interleave>
<text/>
</interleave>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.Sound'>
<element name='Sound'>
<interleave>
<a:help>Lists the sound groups associated with this unit.
</a:help>
<a:example>
<SoundGroups>
<walk>actor/human/movement/walk.xml
</walk>
<run>actor/human/movement/walk.xml
</run>
<attack_melee>attack/weapon/sword.xml
</attack_melee>
<death>actor/human/death/death.xml
</death>
</SoundGroups>
</a:example>
<element name='SoundGroups'>
<zeroOrMore>
<element>
<anyName/>
<text/>
</element>
</zeroOrMore>
</element>
</interleave>
</element>
</define>
<define name='component.StatisticsTracker'>
<element name='StatisticsTracker'>
<interleave>
<a:help>This component records statistics over the course of the match, such as the number of trained, lost, captured and destroyed units and buildings The statistics are consumed by the summary screen and lobby rankings.
</a:help>
<a:example>
<UnitClasses>Infantry FemaleCitizen
</UnitClasses>
<StructureClasses>House Wonder
</StructureClasses>
</a:example>
<element name='UnitClasses' a:help='The tracker records trained, lost, killed and captured units of entities that match any of these Identity classes.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
<element name='StructureClasses' a:help='The tracker records constructed, lost, destroyed and captured structures of entities that match any of these Identity classes.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
</interleave>
</element>
</define>
<define name='component.StatusBars'>
<element name='StatusBars'>
<interleave>
<element name='BarWidth'>
<data type='decimal'/>
</element>
<element name='BarHeight' a:help='Height of a normal sized bar. Some bars are scaled accordingly.'>
<data type='decimal'/>
</element>
<element name='HeightOffset'>
<data type='decimal'/>
</element>
</interleave>
</element>
</define>
<define name='component.StatusEffectsReceiver'>
<element name='StatusEffectsReceiver'>
<interleave>
<empty/>
</interleave>
</element>
</define>
<define name='component.TechnologyManager'>
<element name='TechnologyManager'>
<interleave>
<empty/>
</interleave>
</element>
</define>
<define name='component.TerritoryDecay'>
<element name='TerritoryDecay'>
<interleave>
<element name='DecayRate' a:help='Decay rate in capture points per second'>
<choice>
<ref name='positiveDecimal'/>
<value>Infinity
</value>
</choice>
</element>
<element name='Territory' a:help='Specifies territory in which this entity will decay.'>
<list>
<oneOrMore>
<choice>
<value>neutral
</value>
<value>enemy
</value>
</choice>
</oneOrMore>
</list>
</element>
</interleave>
</element>
</define>
<define name='component.TerritoryDecayManager'>
<element name='TerritoryDecayManager'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Timer'>
<element name='Timer'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Trader'>
<element name='Trader'>
<interleave>
<a:help>Lets the unit generate resouces while moving between markets (or docks in case of water trading).
</a:help>
<a:example>
<GainMultiplier>0.75
</GainMultiplier>
<GarrisonGainMultiplier>0.2
</GarrisonGainMultiplier>
</a:example>
<element name='GainMultiplier' a:help='Trader gain for a 100m distance and mapSize = 1024'>
<ref name='positiveDecimal'/>
</element>
<optional>
<element name='GarrisonGainMultiplier' a:help='Additional gain for garrisonable unit for each garrisoned trader (1.0 means 100%)'>
<ref name='positiveDecimal'/>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.Trainer'>
<element name='Trainer'>
<interleave>
<a:help>Allows the entity to train new units.
</a:help>
<a:example>
<BatchTimeModifier>0.7
</BatchTimeModifier>
<Entities datatype='tokens'>
units/{civ}/support_female_citizen
units/{native}/support_trader
units/athen/infantry_spearman_b
</Entities>
</a:example>
<optional>
<element name='BatchTimeModifier' a:help='Modifier that influences the time benefit for batch training. Defaults to 1, which means no benefit.'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='Entities' a:help='Space-separated list of entity template names that this entity can train. The special string "{civ}" will be automatically replaced by the civ code of the entity&apos;s owner, while the string "{native}" will be automatically replaced by the entity&apos;s civ code.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.TrainingRestrictions'>
<element name='TrainingRestrictions'>
<interleave>
<a:help>Specifies unit training restrictions, currently only unit category
</a:help>
<a:example>
<TrainingRestrictions>
<Category>Hero
</Category>
</TrainingRestrictions>
</a:example>
<element name='Category' a:help='Specifies the category of this unit, for satisfying special constraints. Choices include: Hero, Juggernaut, WarDog'>
<text/>
</element>
<optional>
<element name='MatchLimit' a:help='Specifies how many times this entity can be trained during a match.'>
<data type='positiveInteger'/>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.Treasure'>
<element name='Treasure'>
<interleave>
<a:help>Provides a bonus when taken. E.g. a supply of resources.
</a:help>
<a:example>
<CollectTime>1000
</CollectTime>
<Resources>
<Food>1000
</Food>
</Resources>
</a:example>
<element name='CollectTime' a:help='Amount of milliseconds that it takes to collect this treasure.'>
<ref name='nonNegativeDecimal'/>
</element>
<optional>
<element name='Resources' a:help='Amount of resources that are in this.'>
<interleave>
<optional>
<element name='food'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='wood'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='stone'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='metal'>
<ref name='positiveDecimal'/>
</element>
</optional>
</interleave>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.TreasureCollector'>
<element name='TreasureCollector'>
<interleave>
<a:help>Defines the treasure collecting abilities.
</a:help>
<a:example>
<MaxDistance>2.0
</MaxDistance>
</a:example>
<element name='MaxDistance' a:help='The maximum treasure taking distance in m.'>
<ref name='positiveDecimal'/>
</element>
</interleave>
</element>
</define>
<define name='component.Trigger'>
<element name='Trigger'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.TriggerPoint'>
<element name='TriggerPoint'>
<interleave>
<optional>
<element name='Reference'>
<text/>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.TurretHolder'>
<element name='TurretHolder'>
<interleave>
<element name='TurretPoints' a:help='Points that will be used to visibly garrison a unit.'>
<oneOrMore>
<element a:help='Element containing the offset coordinates.'>
<anyName/>
<interleave>
<element name='X'>
<data type='decimal'/>
</element>
<element name='Y'>
<data type='decimal'/>
</element>
<element name='Z'>
<data type='decimal'/>
</element>
<optional>
<interleave>
<element name='Template'>
<text/>
</element>
<element name='Ejectable' a:help='Whether this template is tied to the turret position (i.e. not allowed to leave the turret point).'>
<data type='boolean'/>
</element>
</interleave>
</optional>
<optional>
<element name='AllowedClasses' a:help='If specified, only entities matching the given classes will be able to use this turret.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
</optional>
<optional>
<element name='Angle' a:help='Angle in degrees relative to the turretHolder direction.'>
<data type='decimal'/>
</element>
</optional>
</interleave>
</element>
</oneOrMore>
</element>
<optional>
<element name='LoadingRange' a:help='The maximum distance from this holder at which entities are allowed to occupy a turret point. Should be about 2.0 for land entities and preferably greater for ships.'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.Turretable'>
<element name='Turretable'>
<interleave>
<empty/>
</interleave>
</element>
</define>
<define name='component.UnitAI'>
<element name='UnitAI'>
<interleave>
<a:help>Controls the unit's movement, attacks, etc, in response to commands from the player.
</a:help>
<a:example/>
<element name='DefaultStance'>
<choice>
<value>violent
</value>
<value>aggressive
</value>
<value>defensive
</value>
<value>passive
</value>
<value>standground
</value>
<value>skittish
</value>
<value>passive-defensive
</value>
</choice>
</element>
<element name='FormationController'>
<data type='boolean'/>
</element>
<element name='FleeDistance'>
<ref name='positiveDecimal'/>
</element>
<optional>
<element name='Formations' a:help='Optional list of space-separated formations this unit is allowed to use. Choices include: Scatter, Box, ColumnClosed, LineClosed, ColumnOpen, LineOpen, Flank, Skirmish, Wedge, Testudo, Phalanx, Syntagma, BattleLine.'>
<attribute name='datatype'>
<value>tokens
</value>
</attribute>
<text/>
</element>
</optional>
<element name='CanGuard'>
<data type='boolean'/>
</element>
<element name='CanPatrol'>
<data type='boolean'/>
</element>
<element name='PatrolWaitTime' a:help='Number of seconds to wait in between patrol waypoints.'>
<data type='nonNegativeInteger'/>
</element>
<optional>
<element name='CheeringTime'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<interleave>
<element name='RoamDistance'>
<ref name='positiveDecimal'/>
</element>
<element name='RoamTimeMin'>
<ref name='positiveDecimal'/>
</element>
<element name='RoamTimeMax'>
<ref name='positiveDecimal'/>
</element>
<element name='FeedTimeMin'>
<ref name='positiveDecimal'/>
</element>
<element name='FeedTimeMax'>
<ref name='positiveDecimal'/>
</element>
</interleave>
</optional>
</interleave>
</element>
</define>
<define name='component.UnitMotionFlying'>
<element name='UnitMotionFlying'>
<interleave>
<element name='MaxSpeed'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='TakeoffSpeed'>
<ref name='nonNegativeDecimal'/>
</element>
<optional>
<element name='StationaryDistance' a:help='Allows the object to be stationary when reaching a target. Value defines the maximum distance at which a target is considered reached.'>
<ref name='positiveDecimal'/>
</element>
</optional>
<element name='LandingSpeed'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='AccelRate'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='SlowingRate'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='BrakingRate'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='TurnRate'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='OvershootTime'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='FlyingHeight'>
<data type='decimal'/>
</element>
<element name='ClimbRate'>
<ref name='nonNegativeDecimal'/>
</element>
<element name='DiesInWater'>
<data type='boolean'/>
</element>
<element name='PassabilityClass'>
<text/>
</element>
</interleave>
</element>
</define>
<define name='component.Upgrade'>
<element name='Upgrade'>
<interleave>
<oneOrMore>
<element>
<anyName />
<interleave>
<element name='Entity' a:help='Entity to upgrade to'>
<text/>
</element>
<optional>
<element name='Icon' a:help='Icon to show in the GUI'>
<text/>
</element>
</optional>
<optional>
<element name='Variant' a:help='The name of the variant to switch to when upgrading'>
<text/>
</element>
</optional>
<optional>
<element name='Tooltip' a:help='This will be added to the tooltip to help the player choose why to upgrade.'>
<text/>
</element>
</optional>
<optional>
<element name='Time' a:help='Time required to upgrade this entity, in seconds'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<element name='Cost' a:help='Resource cost to upgrade this unit'>
<oneOrMore>
<choice>
<interleave>
<optional>
<element name='food'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<element name='wood'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<element name='stone'>
<data type='nonNegativeInteger'/>
</element>
</optional>
<optional>
<element name='metal'>
<data type='nonNegativeInteger'/>
</element>
</optional>
</interleave>
</choice>
</oneOrMore>
</element>
</optional>
<optional>
<element name='RequiredTechnology' a:help='Define what technology is required for this upgrade'>
<choice>
<text/>
<empty/>
</choice>
</element>
</optional>
<optional>
<element name='CheckPlacementRestrictions' a:help='Upgrading will check for placement restrictions (nb:GUI only)'>
<empty/>
</element>
</optional>
</interleave>
</element>
</oneOrMore>
</interleave>
</element>
</define>
<define name='component.Upkeep'>
<element name='Upkeep'>
<interleave>
<a:help>Controls the resource upkeep of an entity.
</a:help>
<element name='Rates' a:help='Upkeep Rates'>
<interleave>
<optional>
<element name='food'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='wood'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='stone'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='metal'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
</interleave>
</element>
<element name='Interval' a:help='Number of milliseconds must pass for the player to pay the next upkeep.'>
<ref name='nonNegativeDecimal'/>
</element>
</interleave>
</element>
</define>
<define name='component.ValueModificationManager'>
<element name='ValueModificationManager'>
<interleave>
<a:component type='system'/>
<empty/>
</interleave>
</element>
</define>
<define name='component.Visibility'>
<element name='Visibility'>
<interleave>
<element name='RetainInFog'>
<data type='boolean'/>
</element>
<element name='AlwaysVisible'>
<data type='boolean'/>
</element>
<element name='Corpse'>
<data type='boolean'/>
</element>
<element name='Preview'>
<data type='boolean'/>
</element>
</interleave>
</element>
</define>
<define name='component.VisionSharing'>
<element name='VisionSharing'>
<interleave>
<element name='Bribable'>
<data type='boolean'/>
</element>
<optional>
<element name='Duration' a:help='Duration (in second) of the vision sharing for spies'>
<ref name='positiveDecimal'/>
</element>
</optional>
<optional>
<element name='FailureCostRatio' a:help='Fraction of the bribe cost that will be incured if a bribe failed'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.WallPiece'>
<element name='WallPiece'>
<interleave>
<a:help>
</a:help>
<a:example>
</a:example>
<element name='Length' a:help='Meters. Used in rmgen wallbuilder and the in-game wall-placer.'>
<ref name='nonNegativeDecimal'/>
</element>
<optional>
<element name='Orientation' a:help='Multiples of Pi, measured anti-clockwise. Default: 1; full revolution: 2. Used in rmgen wallbuilder. How the wallpiece should be rotated so it is orientated the same way as every other wallpiece: with the "line" of the wall running along a map&apos;s `z` axis and the "outside face" towards positive `x`. If the piece bends (see below), the orientation should be that of the start of the wallpiece, not the middle.'>
<ref name='nonNegativeDecimal'/>
</element>
</optional>
<optional>
<element name='Indent' a:help='Meters. Default: 0. Used in rmgen wallbuilder. Permits piece to be placed in front (-ve value) or behind (+ve value) a wall.'>
<data type='decimal'/>
</element>
</optional>
<optional>
<element name='Bend' a:help='Multiples of Pi, measured anti-clockwise. Default: 0. Used in rmgen wallbuilder. The difference in orientation between the ends of a wallpiece.'>
<data type='decimal'/>
</element>
</optional>
</interleave>
</element>
</define>
<define name='component.WallSet'>
<element name='WallSet'>
<interleave>
<a:help>
</a:help>
<a:example>
</a:example>
<element name='Templates'>
<interleave>
<element name='Tower' a:help='Template name of the tower piece'>
<text/>
</element>
<element name='Gate' a:help='Template name of the gate piece'>
<text/>
</element>
<element name='WallLong' a:help='Template name of the long wall segment'>
<text/>
</element>
<element name='WallMedium' a:help='Template name of the medium-size wall segment'>
<text/>
</element>
<element name='WallShort' a:help='Template name of the short wall segment'>
<text/>
</element>
<optional>
<element name='WallCurves' a:help='Whitespace-separated list of template names of curving wall segments.'>
<text/>
</element>
</optional>
<optional>
<element name='WallEnd'>
<text/>
</element>
</optional>
<optional>
<element name='Fort'>
<text/>
</element>
</optional>
</interleave>
</element>
<element name='MinTowerOverlap' a:help='Maximum fraction that wall segments are allowed to overlap towers, where 0 signifies no overlap and 1 full overlap'>
<data type='decimal'>
<param name='minInclusive'>0.0
</param>
<param name='maxInclusive'>1.0
</param>
</data>
</element>
<element name='MaxTowerOverlap' a:help='Minimum fraction that wall segments are required to overlap towers, where 0 signifies no overlap and 1 full overlap'>
<data type='decimal'>
<param name='minInclusive'>0.0
</param>
<param name='maxInclusive'>1.0
</param>
</data>
</element>
</interleave>
</element>
</define>
<define name='component.Wonder'>
<element name='Wonder'>
<interleave>
<empty/>
</interleave>
</element>
</define>
<define name='interface.AIInterface'>
<choice>
<ref name='component.AIInterfaceScripted'/>
<ref name='component.AIInterface'/>
</choice>
</define>
<define name='interface.AIManager'>
<choice>
<ref name='component.AIManager'/>
</choice>
</define>
<define name='interface.AIProxy'>
<choice>
<ref name='component.AIProxy'/>
</choice>
</define>
<define name='interface.AlertRaiser'>
<choice>
<ref name='component.AlertRaiser'/>
</choice>
</define>
<define name='interface.Attack'>
<choice>
<ref name='component.AttackScripted'/>
<ref name='component.Attack'/>
<ref name='component.FormationAttack'/>
</choice>
</define>
<define name='interface.AttackDetection'>
<choice>
<ref name='component.AttackDetection'/>
</choice>
</define>
<define name='interface.Auras'>
<choice>
<ref name='component.Auras'/>
</choice>
</define>
<define name='interface.AutoBuildable'>
<choice>
<ref name='component.AutoBuildable'/>
</choice>
</define>
<define name='interface.Barter'>
<choice>
<ref name='component.Barter'/>
</choice>
</define>
<define name='interface.BattleDetection'>
<choice>
<ref name='component.BattleDetection'/>
</choice>
</define>
<define name='interface.BuildRestrictions'>
<choice>
<ref name='component.BuildRestrictions'/>
</choice>
</define>
<define name='interface.Builder'>
<choice>
<ref name='component.Builder'/>
</choice>
</define>
<define name='interface.BuildingAI'>
<choice>
<ref name='component.BuildingAI'/>
</choice>
</define>
<define name='interface.Capturable'>
<choice>
<ref name='component.Capturable'/>
</choice>
</define>
<define name='interface.CeasefireManager'>
<choice>
<ref name='component.CeasefireManager'/>
</choice>
</define>
<define name='interface.CinemaManager'>
<choice>
<ref name='component.CinemaManager'/>
</choice>
</define>
<define name='interface.CommandQueue'>
<choice>
<ref name='component.CommandQueue'/>
</choice>
</define>
<define name='interface.Cost'>
<choice>
<ref name='component.Cost'/>
</choice>
</define>
<define name='interface.DeathDamage'>
<choice>
<ref name='component.DeathDamage'/>
</choice>
</define>
<define name='interface.Decay'>
<choice>
<ref name='component.Decay'/>
</choice>
</define>
<define name='interface.DelayedDamage'>
<choice>
<ref name='component.DelayedDamage'/>
</choice>
</define>
<define name='interface.EndGameManager'>
<choice>
<ref name='component.EndGameManager'/>
</choice>
</define>
<define name='interface.EntityLimits'>
<choice>
<ref name='component.EntityLimits'/>
</choice>
</define>
<define name='interface.Fogging'>
<choice>
<ref name='component.FoggingScripted'/>
<ref name='component.Fogging'/>
</choice>
</define>
<define name='interface.Footprint'>
<choice>
<ref name='component.Footprint'/>
</choice>
</define>
<define name='interface.Formation'>
<choice>
<ref name='component.Formation'/>
</choice>
</define>
<define name='interface.Foundation'>
<choice>
<ref name='component.Foundation'/>
</choice>
</define>
<define name='interface.GarrisonHolder'>
<choice>
<ref name='component.GarrisonHolderScripted'/>
<ref name='component.GarrisonHolder'/>
</choice>
</define>
<define name='interface.Garrisonable'>
<choice>
<ref name='component.Garrisonable'/>
</choice>
</define>
<define name='interface.Gate'>
<choice>
<ref name='component.Gate'/>
</choice>
</define>
<define name='interface.Guard'>
<choice>
<ref name='component.Guard'/>
</choice>
</define>
<define name='interface.GuiInterface'>
<choice>
<ref name='component.GuiInterfaceScripted'/>
<ref name='component.GuiInterface'/>
</choice>
</define>
<define name='interface.Heal'>
<choice>
<ref name='component.Heal'/>
</choice>
</define>
<define name='interface.Health'>
<choice>
<ref name='component.Health'/>
</choice>
</define>
<define name='interface.Identity'>
<choice>
<ref name='component.IdentityScripted'/>
<ref name='component.Identity'/>
</choice>
</define>
<define name='interface.Loot'>
<choice>
<ref name='component.Loot'/>
</choice>
</define>
<define name='interface.Looter'>
<choice>
<ref name='component.Looter'/>
</choice>
</define>
<define name='interface.Market'>
<choice>
<ref name='component.Market'/>
</choice>
</define>
<define name='interface.Minimap'>
<choice>
<ref name='component.Minimap'/>
</choice>
</define>
<define name='interface.Mirage'>
<choice>
<ref name='component.MirageScripted'/>
<ref name='component.Mirage'/>
</choice>
</define>
<define name='interface.ModifiersManager'>
<choice>
<ref name='component.ModifiersManager'/>
</choice>
</define>
<define name='interface.Motion'>
<choice>
<ref name='component.MotionBall'/>
<ref name='component.MotionScripted'/>
<ref name='component.MotionBallScripted'/>
</choice>
</define>
<define name='interface.Obstruction'>
<choice>
<ref name='component.Obstruction'/>
</choice>
</define>
<define name='interface.ObstructionManager'>
<choice>
<ref name='component.ObstructionManager'/>
</choice>
</define>
<define name='interface.OverlayRenderer'>
<choice>
<ref name='component.OverlayRenderer'/>
</choice>
</define>
<define name='interface.Ownership'>
<choice>
<ref name='component.Ownership'/>
</choice>
</define>
<define name='interface.Pack'>
<choice>
<ref name='component.Pack'/>
</choice>
</define>
<define name='interface.ParticleManager'>
<choice>
<ref name='component.ParticleManager'/>
</choice>
</define>
<define name='interface.Pathfinder'>
<choice>
<ref name='component.Pathfinder'/>
</choice>
</define>
<define name='interface.Player'>
<choice>
<ref name='component.PlayerScripted'/>
<ref name='component.Player'/>
</choice>
</define>
<define name='interface.PlayerManager'>
<choice>
<ref name='component.PlayerManagerScripted'/>
<ref name='component.PlayerManager'/>
</choice>
</define>
<define name='interface.Population'>
<choice>
<ref name='component.Population'/>
</choice>
</define>
<define name='interface.Position'>
<choice>
<ref name='component.Position'/>
</choice>
</define>
<define name='interface.ProductionQueue'>
<choice>
<ref name='component.ProductionQueue'/>
</choice>
</define>
<define name='interface.ProjectileManager'>
<choice>
<ref name='component.ProjectileManager'/>
</choice>
</define>
<define name='interface.Promotion'>
<choice>
<ref name='component.Promotion'/>
</choice>
</define>
<define name='interface.RallyPoint'>
<choice>
<ref name='component.RallyPointScripted'/>
<ref name='component.RallyPoint'/>
</choice>
</define>
<define name='interface.RallyPointRenderer'>
<choice>
<ref name='component.RallyPointRenderer'/>
</choice>
</define>
<define name='interface.RangeManager'>
<choice>
<ref name='component.RangeManager'/>
</choice>
</define>
<define name='interface.RangeOverlayManager'>
<choice>
<ref name='component.RangeOverlayManager'/>
</choice>
</define>
<define name='interface.RangeOverlayRenderer'>
<choice>
<ref name='component.RangeOverlayRenderer'/>
</choice>
</define>
<define name='interface.Repairable'>
<choice>
<ref name='component.Repairable'/>
</choice>
</define>
<define name='interface.Researcher'>
<choice>
<ref name='component.Researcher'/>
</choice>
</define>
<define name='interface.Resistance'>
<choice>
<ref name='component.Resistance'/>
</choice>
</define>
<define name='interface.ResourceDropsite'>
<choice>
<ref name='component.ResourceDropsite'/>
</choice>
</define>
<define name='interface.ResourceGatherer'>
<choice>
<ref name='component.ResourceGatherer'/>
</choice>
</define>
<define name='interface.ResourceSupply'>
<choice>
<ref name='component.ResourceSupply'/>
</choice>
</define>
<define name='interface.ResourceTrickle'>
<choice>
<ref name='component.ResourceTrickle'/>
</choice>
</define>
<define name='interface.Selectable'>
<choice>
<ref name='component.Selectable'/>
</choice>
</define>
<define name='interface.Settlement'>
<choice>
<ref name='component.SettlementScripted'/>
<ref name='component.Settlement'/>
</choice>
</define>
<define name='interface.SkirmishReplacer'>
<choice>
<ref name='component.SkirmishReplacer'/>
</choice>
</define>
<define name='interface.Sound'>
<choice>
<ref name='component.SoundScripted'/>
<ref name='component.Sound'/>
</choice>
</define>
<define name='interface.SoundManager'>
<choice>
<ref name='component.SoundManager'/>
</choice>
</define>
<define name='interface.StatisticsTracker'>
<choice>
<ref name='component.StatisticsTracker'/>
</choice>
</define>
<define name='interface.StatusBars'>
<choice>
<ref name='component.StatusBars'/>
</choice>
</define>
<define name='interface.StatusEffectsReceiver'>
<choice>
<ref name='component.StatusEffectsReceiver'/>
</choice>
</define>
<define name='interface.TechnologyManager'>
<choice>
<ref name='component.TechnologyManager'/>
</choice>
</define>
<define name='interface.TemplateManager'>
<choice>
<ref name='component.TemplateManager'/>
</choice>
</define>
<define name='interface.Terrain'>
<choice>
<ref name='component.Terrain'/>
</choice>
</define>
<define name='interface.TerritoryDecay'>
<choice>
<ref name='component.TerritoryDecay'/>
</choice>
</define>
<define name='interface.TerritoryDecayManager'>
<choice>
<ref name='component.TerritoryDecayManagerScripted'/>
<ref name='component.TerritoryDecayManager'/>
</choice>
</define>
<define name='interface.TerritoryInfluence'>
<choice>
<ref name='component.TerritoryInfluence'/>
</choice>
</define>
<define name='interface.TerritoryManager'>
<choice>
<ref name='component.TerritoryManager'/>
</choice>
</define>
<define name='interface.Test1'>
<choice>
<ref name='component.Test1A'/>
<ref name='component.Test1B'/>
<ref name='component.Test1Scripted'/>
</choice>
</define>
<define name='interface.Test2'>
<choice>
<ref name='component.Test2A'/>
<ref name='component.Test2Scripted'/>
</choice>
</define>
<define name='interface.Timer'>
<choice>
<ref name='component.Timer'/>
</choice>
</define>
<define name='interface.Trader'>
<choice>
<ref name='component.Trader'/>
</choice>
</define>
<define name='interface.Trainer'>
<choice>
<ref name='component.Trainer'/>
</choice>
</define>
<define name='interface.TrainingRestrictions'>
<choice>
<ref name='component.TrainingRestrictions'/>
</choice>
</define>
<define name='interface.Treasure'>
<choice>
<ref name='component.Treasure'/>
</choice>
</define>
<define name='interface.TreasureCollector'>
<choice>
<ref name='component.TreasureCollector'/>
</choice>
</define>
<define name='interface.Trigger'>
<choice>
<ref name='component.Trigger'/>
</choice>
</define>
<define name='interface.TriggerPoint'>
<choice>
<ref name='component.TriggerPoint'/>
</choice>
</define>
<define name='interface.TurretHolder'>
<choice>
<ref name='component.TurretHolderScripted'/>
<ref name='component.TurretHolder'/>
</choice>
</define>
<define name='interface.Turretable'>
<choice>
<ref name='component.Turretable'/>
</choice>
</define>
<define name='interface.UnitAI'>
<choice>
<ref name='component.UnitAI'/>
</choice>
</define>
<define name='interface.UnitMotion'>
<choice>
<ref name='component.UnitMotion'/>
<ref name='component.UnitMotionScripted'/>
<ref name='component.UnitMotionFlying'/>
</choice>
</define>
<define name='interface.UnitMotionManager'>
<choice>
<ref name='component.UnitMotionManager'/>
</choice>
</define>
<define name='interface.UnitRenderer'>
<choice>
<ref name='component.UnitRenderer'/>
</choice>
</define>
<define name='interface.UnknownScript'>
<choice>
<ref name='component.UnknownScript'/>
</choice>
</define>
<define name='interface.Upgrade'>
<choice>
<ref name='component.Upgrade'/>
</choice>
</define>
<define name='interface.Upkeep'>
<choice>
<ref name='component.Upkeep'/>
</choice>
</define>
<define name='interface.ValueModificationManager'>
<choice>
<ref name='component.ValueModificationManagerScripted'/>
<ref name='component.ValueModificationManager'/>
</choice>
</define>
<define name='interface.Visibility'>
<choice>
<ref name='component.VisibilityScripted'/>
<ref name='component.Visibility'/>
</choice>
</define>
<define name='interface.Vision'>
<choice>
<ref name='component.Vision'/>
</choice>
</define>
<define name='interface.VisionSharing'>
<choice>
<ref name='component.VisionSharing'/>
</choice>
</define>
<define name='interface.Visual'>
<choice>
<ref name='component.VisualActor'/>
</choice>
</define>
<define name='interface.WallPiece'>
<choice>
<ref name='component.WallPiece'/>
</choice>
</define>
<define name='interface.WallSet'>
<choice>
<ref name='component.WallSet'/>
</choice>
</define>
<define name='interface.WaterManager'>
<choice>
<ref name='component.WaterManager'/>
</choice>
</define>
<define name='interface.Wonder'>
<choice>
<ref name='component.Wonder'/>
</choice>
</define>
<start>
<element name='Entity'>
<optional>
<attribute name='parent'/>
</optional>
<optional>
<ref name='component.AIInterface'/>
</optional>
<optional>
<ref name='component.AIInterfaceScripted'/>
</optional>
<optional>
<ref name='component.AIManager'/>
</optional>
<optional>
<ref name='component.AIProxy'/>
</optional>
<optional>
<ref name='component.AlertRaiser'/>
</optional>
<optional>
<ref name='component.Attack'/>
</optional>
<optional>
<ref name='component.AttackDetection'/>
</optional>
<optional>
<ref name='component.AttackScripted'/>
</optional>
<optional>
<ref name='component.Auras'/>
</optional>
<optional>
<ref name='component.AutoBuildable'/>
</optional>
<optional>
<ref name='component.Barter'/>
</optional>
<optional>
<ref name='component.BattleDetection'/>
</optional>
<optional>
<ref name='component.BuildRestrictions'/>
</optional>
<optional>
<ref name='component.Builder'/>
</optional>
<optional>
<ref name='component.BuildingAI'/>
</optional>
<optional>
<ref name='component.Capturable'/>
</optional>
<optional>
<ref name='component.CeasefireManager'/>
</optional>
<optional>
<ref name='component.CinemaManager'/>
</optional>
<optional>
<ref name='component.CommandQueue'/>
</optional>
<optional>
<ref name='component.Cost'/>
</optional>
<optional>
<ref name='component.DeathDamage'/>
</optional>
<optional>
<ref name='component.Decay'/>
</optional>
<optional>
<ref name='component.DelayedDamage'/>
</optional>
<optional>
<ref name='component.EndGameManager'/>
</optional>
<optional>
<ref name='component.EntityLimits'/>
</optional>
<optional>
<ref name='component.Fogging'/>
</optional>
<optional>
<ref name='component.FoggingScripted'/>
</optional>
<optional>
<ref name='component.Footprint'/>
</optional>
<optional>
<ref name='component.Formation'/>
</optional>
<optional>
<ref name='component.FormationAttack'/>
</optional>
<optional>
<ref name='component.Foundation'/>
</optional>
<optional>
<ref name='component.GarrisonHolder'/>
</optional>
<optional>
<ref name='component.GarrisonHolderScripted'/>
</optional>
<optional>
<ref name='component.Garrisonable'/>
</optional>
<optional>
<ref name='component.Gate'/>
</optional>
<optional>
<ref name='component.Guard'/>
</optional>
<optional>
<ref name='component.GuiInterface'/>
</optional>
<optional>
<ref name='component.GuiInterfaceScripted'/>
</optional>
<optional>
<ref name='component.Heal'/>
</optional>
<optional>
<ref name='component.Health'/>
</optional>
<optional>
<ref name='component.Identity'/>
</optional>
<optional>
<ref name='component.IdentityScripted'/>
</optional>
<optional>
<ref name='component.Loot'/>
</optional>
<optional>
<ref name='component.Looter'/>
</optional>
<optional>
<ref name='component.Market'/>
</optional>
<optional>
<ref name='component.Minimap'/>
</optional>
<optional>
<ref name='component.Mirage'/>
</optional>
<optional>
<ref name='component.MirageScripted'/>
</optional>
<optional>
<ref name='component.ModifiersManager'/>
</optional>
<optional>
<ref name='component.MotionBall'/>
</optional>
<optional>
<ref name='component.MotionBallScripted'/>
</optional>
<optional>
<ref name='component.MotionScripted'/>
</optional>
<optional>
<ref name='component.Obstruction'/>
</optional>
<optional>
<ref name='component.ObstructionManager'/>
</optional>
<optional>
<ref name='component.OverlayRenderer'/>
</optional>
<optional>
<ref name='component.Ownership'/>
</optional>
<optional>
<ref name='component.Pack'/>
</optional>
<optional>
<ref name='component.ParticleManager'/>
</optional>
<optional>
<ref name='component.Pathfinder'/>
</optional>
<optional>
<ref name='component.Player'/>
</optional>
<optional>
<ref name='component.PlayerManager'/>
</optional>
<optional>
<ref name='component.PlayerManagerScripted'/>
</optional>
<optional>
<ref name='component.PlayerScripted'/>
</optional>
<optional>
<ref name='component.Population'/>
</optional>
<optional>
<ref name='component.Position'/>
</optional>
<optional>
<ref name='component.ProductionQueue'/>
</optional>
<optional>
<ref name='component.ProjectileManager'/>
</optional>
<optional>
<ref name='component.Promotion'/>
</optional>
<optional>
<ref name='component.RallyPoint'/>
</optional>
<optional>
<ref name='component.RallyPointRenderer'/>
</optional>
<optional>
<ref name='component.RallyPointScripted'/>
</optional>
<optional>
<ref name='component.RangeManager'/>
</optional>
<optional>
<ref name='component.RangeOverlayManager'/>
</optional>
<optional>
<ref name='component.RangeOverlayRenderer'/>
</optional>
<optional>
<ref name='component.Repairable'/>
</optional>
<optional>
<ref name='component.Researcher'/>
</optional>
<optional>
<ref name='component.Resistance'/>
</optional>
<optional>
<ref name='component.ResourceDropsite'/>
</optional>
<optional>
<ref name='component.ResourceGatherer'/>
</optional>
<optional>
<ref name='component.ResourceSupply'/>
</optional>
<optional>
<ref name='component.ResourceTrickle'/>
</optional>
<optional>
<ref name='component.Selectable'/>
</optional>
<optional>
<ref name='component.Settlement'/>
</optional>
<optional>
<ref name='component.SettlementScripted'/>
</optional>
<optional>
<ref name='component.SkirmishReplacer'/>
</optional>
<optional>
<ref name='component.Sound'/>
</optional>
<optional>
<ref name='component.SoundManager'/>
</optional>
<optional>
<ref name='component.SoundScripted'/>
</optional>
<optional>
<ref name='component.StatisticsTracker'/>
</optional>
<optional>
<ref name='component.StatusBars'/>
</optional>
<optional>
<ref name='component.StatusEffectsReceiver'/>
</optional>
<optional>
<ref name='component.TechnologyManager'/>
</optional>
<optional>
<ref name='component.TemplateManager'/>
</optional>
<optional>
<ref name='component.Terrain'/>
</optional>
<optional>
<ref name='component.TerritoryDecay'/>
</optional>
<optional>
<ref name='component.TerritoryDecayManager'/>
</optional>
<optional>
<ref name='component.TerritoryDecayManagerScripted'/>
</optional>
<optional>
<ref name='component.TerritoryInfluence'/>
</optional>
<optional>
<ref name='component.TerritoryManager'/>
</optional>
<optional>
<ref name='component.Test1A'/>
</optional>
<optional>
<ref name='component.Test1B'/>
</optional>
<optional>
<ref name='component.Test1Scripted'/>
</optional>
<optional>
<ref name='component.Test2A'/>
</optional>
<optional>
<ref name='component.Test2Scripted'/>
</optional>
<optional>
<ref name='component.Timer'/>
</optional>
<optional>
<ref name='component.Trader'/>
</optional>
<optional>
<ref name='component.Trainer'/>
</optional>
<optional>
<ref name='component.TrainingRestrictions'/>
</optional>
<optional>
<ref name='component.Treasure'/>
</optional>
<optional>
<ref name='component.TreasureCollector'/>
</optional>
<optional>
<ref name='component.Trigger'/>
</optional>
<optional>
<ref name='component.TriggerPoint'/>
</optional>
<optional>
<ref name='component.TurretHolder'/>
</optional>
<optional>
<ref name='component.TurretHolderScripted'/>
</optional>
<optional>
<ref name='component.Turretable'/>
</optional>
<optional>
<ref name='component.UnitAI'/>
</optional>
<optional>
<ref name='component.UnitMotion'/>
</optional>
<optional>
<ref name='component.UnitMotionFlying'/>
</optional>
<optional>
<ref name='component.UnitMotionManager'/>
</optional>
<optional>
<ref name='component.UnitMotionScripted'/>
</optional>
<optional>
<ref name='component.UnitRenderer'/>
</optional>
<optional>
<ref name='component.UnknownScript'/>
</optional>
<optional>
<ref name='component.Upgrade'/>
</optional>
<optional>
<ref name='component.Upkeep'/>
</optional>
<optional>
<ref name='component.ValueModificationManager'/>
</optional>
<optional>
<ref name='component.ValueModificationManagerScripted'/>
</optional>
<optional>
<ref name='component.Visibility'/>
</optional>
<optional>
<ref name='component.VisibilityScripted'/>
</optional>
<optional>
<ref name='component.Vision'/>
</optional>
<optional>
<ref name='component.VisionSharing'/>
</optional>
<optional>
<ref name='component.VisualActor'/>
</optional>
<optional>
<ref name='component.WallPiece'/>
</optional>
<optional>
<ref name='component.WallSet'/>
</optional>
<optional>
<ref name='component.WaterManager'/>
</optional>
<optional>
<ref name='component.Wonder'/>
</optional>
</element>
</start>
</grammar>