1
0
forked from 0ad/0ad

Fix errors and inconsistencies in entity template XML files

This was SVN commit r7532.
This commit is contained in:
Ykkrosh 2010-05-09 21:46:41 +00:00
parent c0a0e0bdbd
commit afe29fdadf
44 changed files with 387 additions and 112 deletions

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<Entity Parent="template_structure_civic_civil_centre">
<Actor>structures/romans/civic_centre.xml</Actor>
<Traits>
<Id>
<Specific>Municipium</Specific>
@ -20,4 +19,5 @@
</List>
</Create>
</Actions>
</Entity>
<Actor>structures/romans/civic_centre.xml</Actor>
</Entity>

View File

@ -19,11 +19,7 @@
</Promotion>
<Actions>
</Actions>
</Traits>
<Actor>units/persians/cavalry_spearman_b.xml</Actor>
</Entity>
</Entity>

View File

@ -19,11 +19,7 @@
</Promotion>
<Actions>
</Actions>
</Traits>
<Actor>units/persians/cavalry_swordsman_b.xml</Actor>
</Entity>
</Entity>

View File

@ -15,14 +15,14 @@
</Id>
</Traits>
<Footprint>
<Width>6.0</Width>
<Depth>50.0</Depth>
<Height>8.0</Height>
</Footprint>
</Traits>
<Actions>
<Move>

View File

@ -2,10 +2,6 @@
<Entity Parent="rome_cavalry_spearman_a">
<Actor>
units/romans/cavalry_spearman_e.xml
</Actor>
<Actor>units/romans/cavalry_spearman_e.xml</Actor>
</Entity>
</Entity>

View File

@ -2,8 +2,6 @@
<Entity Parent="rome_infantry_javelinist_a">
<Actor>units/romans/infantry_javelinist_e.xml</Actor>
<Traits>
<Health>
<Max>105</Max>
@ -40,4 +38,6 @@
</Move>
</Actions>
</Entity>
<Actor>units/romans/infantry_javelinist_e.xml</Actor>
</Entity>

View File

@ -2,8 +2,6 @@
<Entity Parent="template_unit_mechanical_siege">
<Actor>units/romans/siege_scorpio.xml</Actor>
<Traits>
<Id>
@ -38,4 +36,6 @@
</Run>
</Move>
</Actions>
</Entity>
<Actor>units/romans/siege_scorpio.xml</Actor>
</Entity>

View File

@ -15,14 +15,14 @@
</Id>
</Traits>
<Footprint>
<Width>6.0</Width>
<Depth>50.0</Depth>
<Height>8.0</Height>
</Footprint>
</Traits>
<Actions>
<Move>

View File

@ -10,4 +10,8 @@
<VisualActor>
<Actor>structures/persians/trireme.xml</Actor>
</VisualActor>
<Footprint>
<Square width="6.0" depth="50.0"/>
<Height>8.0</Height>
</Footprint>
</Entity>

View File

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Entity parent="units/rome_cavalry_spearman_a">
<VisualActor>
<Actor>
units/romans/cavalry_spearman_e.xml
</Actor>
<Actor>units/romans/cavalry_spearman_e.xml</Actor>
</VisualActor>
</Entity>

View File

@ -10,4 +10,8 @@
<VisualActor>
<Actor>structures/romans/quinquereme.xml</Actor>
</VisualActor>
<Footprint>
<Square width="6.0" depth="50.0"/>
<Height>8.0</Height>
</Footprint>
</Entity>

View File

@ -20,8 +20,6 @@
</Traits>
<Actor>structures/celts/barracks.xml</Actor>
<Actions>
<Create>
<List>
@ -36,4 +34,6 @@
</Create>
</Actions>
</Entity>
<Actor>structures/celts/barracks.xml</Actor>
</Entity>

View File

@ -17,8 +17,6 @@
</Traits>
<Actor>structures/celts/civil_centre.xml</Actor>
<Actions>
<Create>
<List>
@ -31,4 +29,6 @@
</Create>
</Actions>
</Entity>
<Actor>structures/celts/civil_centre.xml</Actor>
</Entity>

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<Entity Parent="template_structure_military_fortress">
<Actor>structures/celts/fortress_gallic.xml</Actor>
<Traits>
<Id>
<Specific>Gallic Dun</Specific>
@ -28,4 +27,5 @@
</List>
</Create>
</Actions>
</Entity>
<Actor>structures/celts/fortress_gallic.xml</Actor>
</Entity>

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<Entity Parent="template_structure_military_barracks">
<Actor>structures/hellenes/barracks.xml</Actor>
<Traits>
<Id>
<Specific>Strategion</Specific>
@ -33,4 +32,5 @@
</Create>
</Actions>
</Entity>
<Actor>structures/hellenes/barracks.xml</Actor>
</Entity>

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<Entity Parent="template_structure_military_dock">
<Actor>structures/hellenes/dock.xml</Actor>
<Traits>
<Id>
<Specific>Limenos</Specific>
@ -30,4 +29,5 @@
</List>
</Create>
</Actions>
</Entity>
<Actor>structures/hellenes/dock.xml</Actor>
</Entity>

View File

@ -15,8 +15,6 @@
</Health>
</Traits>
<Actor>structures/hellenes/mill.xml</Actor>
<Actions>
<Create>
<List>
@ -30,4 +28,6 @@
</Create>
</Actions>
</Entity>
<Actor>structures/hellenes/mill.xml</Actor>
</Entity>

View File

@ -10,12 +10,12 @@
<Generic>Corpse</Generic>
</Id>
<Footprint>
<Radius>0.0</Radius>
<Height>1.0</Height>
</Footprint>
</Traits>
<Footprint>
<Radius>0.0</Radius>
<Height>1.0</Height>
</Footprint>
</Entity>

View File

@ -34,7 +34,7 @@
<Loot>
<Xp>1000</Xp>
<Food>10</Food>
<wood>10</wood>
<Wood>10</Wood>
<Stone>10</Stone>
<Metal>100</Metal>
</Loot>
@ -75,4 +75,4 @@
<Death>audio/actor/human/death/death.xml</Death>
</SoundGroups>
</Entity>
</Entity>

View File

@ -41,7 +41,7 @@
<Loot>
<Xp>1000</Xp>
<Food>15</Food>
<wood>10</wood>
<Wood>10</Wood>
<Stone>10</Stone>
<Metal>100</Metal>
</Loot>
@ -81,4 +81,4 @@
<Death>audio/actor/fauna/death/death_horse.xml</Death>
</SoundGroups>
</Entity>
</Entity>

View File

@ -34,7 +34,7 @@
<Loot>
<Xp>1000</Xp>
<Food>10</Food>
<wood>10</wood>
<Wood>10</Wood>
<Stone>10</Stone>
<Metal>100</Metal>
</Loot>
@ -75,4 +75,4 @@
<Death>audio/actor/human/death/death.xml</Death>
</SoundGroups>
</Entity>
</Entity>

View File

@ -29,7 +29,7 @@
<Loot>
<Xp>1000</Xp>
<Food>10</Food>
<wood>10</wood>
<Wood>10</Wood>
<Stone>10</Stone>
<Metal>100</Metal>
</Loot>
@ -58,4 +58,4 @@
</Move>
</Actions>
</Entity>
</Entity>

View File

@ -12,7 +12,7 @@
<Loot>
<Xp>150</Xp>
<Food>5</Food>
<wood>5</wood>
<Wood>5</Wood>
<Stone>5</Stone>
<Metal>10</Metal>
</Loot>

View File

@ -18,7 +18,7 @@
<Loot>
<Xp>10</Xp>
<Food>1</Food>
<wood>1</wood>
<Wood>1</Wood>
<Stone>1</Stone>
<Metal>1</Metal>
</Loot>
@ -33,4 +33,4 @@
</Traits>
</Entity>
</Entity>

View File

@ -41,13 +41,13 @@
<Pierce>6.0</Pierce>
<Crush>0.0</Crush>
<Range>3.6</Range>
</Melee>
<Charge>
<Hack>46.0</Hack>
<Pierce>16.0</Pierce>
<Range>3.6</Range>
</Charge>
</Melee>
</Attack>
</Actions>
<Actor>units/celts/cavalry_spearman_a.xml</Actor>
</Entity>
</Entity>

View File

@ -43,12 +43,12 @@
<Pierce>0.0</Pierce>
<Crush>0.0</Crush>
<Range>0.5</Range>
</Melee>
<Charge>
<Hack>40.0</Hack>
<Pierce>0.0</Pierce>
<Range>0.5</Range>
</Charge>
</Melee>
</Attack>
<Move>
<Speed>10.0</Speed>
@ -58,4 +58,4 @@
</Move>
</Actions>
<Actor>units/celts/cavalry_spearman_b.xml</Actor>
</Entity>
</Entity>

View File

@ -38,13 +38,13 @@
<Pierce>7.0</Pierce>
<Crush>0.0</Crush>
<Range>3.6</Range>
</Melee>
<Charge>
<Hack>47.0</Hack>
<Pierce>17.0</Pierce>
<Range>3.6</Range>
</Charge>
</Melee>
</Attack>
</Actions>
<Actor>units/celts/cavalry_spearman_e.xml</Actor>
</Entity>
</Entity>

View File

@ -25,11 +25,11 @@
<Hack>18.0</Hack>
<Pierce>0.0</Pierce>
<Crush>0.0</Crush>
</Melee>
<Charge>
<Hack>54.0</Hack>
<Pierce>0.0</Pierce>
</Charge>
</Melee>
</Attack>
<Move>
<Speed>14.0</Speed>
@ -39,4 +39,4 @@
</Move>
</Actions>
<Actor>units/celts/cavalry_swordsman_b.xml</Actor>
</Entity>
</Entity>

View File

@ -44,7 +44,7 @@
</List>
</Create>
<Attack>
/* Charge power increased by 2 because of celts special speed */
<!-- Charge power increased by 2 because of celts special speed -->
<Charge>
<Hack>32.0</Hack>
<Pierce>12.0</Pierce>
@ -58,4 +58,4 @@
</Move>
</Actions>
<Actor>units/celts/infantry_spearman_b.xml</Actor>
</Entity>
</Entity>

View File

@ -2,9 +2,9 @@
<Entity Parent="hele_cavalry_swordsman_b">
<Traits>
<id>
<Id>
<Icon_Cell>19</Icon_Cell>
</id>
</Id>
<Promotion>
<Entity>hele_cavalry_swordsman_e</Entity>
</Promotion>
@ -46,4 +46,4 @@
</Actions>
<Actor>units/hellenes/cavalry_swordsman_a.xml</Actor>
</Entity>
</Entity>

View File

@ -2,9 +2,9 @@
<Entity Parent="hele_cavalry_swordsman_a">
<Traits>
<id>
<Id>
<Icon_Cell>20</Icon_Cell>
</id>
</Id>
<Health>
<Max>160</Max>
<RegenRate>0.4</RegenRate>
@ -42,4 +42,4 @@
</Move>
</Actions>
<Actor>units/hellenes/cavalry_swordsman_e.xml</Actor>
</Entity>
</Entity>

View File

@ -2,9 +2,9 @@
<Entity Parent="hele_infantry_archer_b">
<Traits>
<id>
<Id>
<Icon_Cell>10</Icon_Cell>
</id>
</Id>
<Promotion>
<Entity>hele_infantry_archer_e</Entity>
</Promotion>
@ -37,4 +37,4 @@
<Actor>units/hellenes/infantry_archer_a.xml</Actor>
</Entity>
</Entity>

View File

@ -2,9 +2,9 @@
<Entity Parent="hele_infantry_archer_a">
<Traits>
<id>
<Id>
<Icon_Cell>11</Icon_Cell>
</id>
</Id>
<Health>
<Max>105</Max>
<RegenRate>0.4</RegenRate>
@ -40,4 +40,4 @@
<Actor>units/hellenes/infantry_archer_e.xml</Actor>
</Entity>
</Entity>

View File

@ -2,8 +2,6 @@
<Entity Parent="template_unit_mechanical_siege_onager">
<Actor>units/hellenes/siege_rock.xml</Actor>
<Traits>
<Id>
@ -38,4 +36,6 @@
</Run>
</Move>
</Actions>
</Entity>
<Actor>units/hellenes/siege_rock.xml</Actor>
</Entity>

View File

@ -2,8 +2,6 @@
<Entity Parent="template_unit_mechanical_siege">
<Actor>units/hellenes/siege_spear.xml</Actor>
<Traits>
<Id>
@ -38,4 +36,6 @@
</Run>
</Move>
</Actions>
</Entity>
<Actor>units/hellenes/siege_spear.xml</Actor>
</Entity>

View File

@ -15,14 +15,14 @@
</Id>
</Traits>
<Footprint>
<Width>6.0</Width>
<Depth>50.0</Depth>
<Height>8.0</Height>
</Footprint>
</Traits>
<Actions>
<Move>

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Entity>
<Identity>
<GenericName>Corpse</GenericName>
</Identity>
</Entity>

View File

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Entity parent="units/hele_cavalry_swordsman_b">
<Identity>
<IconCell>19</IconCell>
</Identity>
<ResourceGatherer>
<BaseSpeed>1.5</BaseSpeed>
</ResourceGatherer>

View File

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Entity parent="units/hele_cavalry_swordsman_a">
<Identity>
<IconCell>20</IconCell>
</Identity>
<ResourceGatherer>
<BaseSpeed>2.0</BaseSpeed>
</ResourceGatherer>

View File

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Entity parent="units/hele_infantry_archer_b">
<Identity>
<IconCell>10</IconCell>
</Identity>
<ResourceGatherer>
<BaseSpeed>1.5</BaseSpeed>
</ResourceGatherer>

View File

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Entity parent="units/hele_infantry_archer_a">
<Identity>
<IconCell>11</IconCell>
</Identity>
<ResourceGatherer>
<BaseSpeed>2.0</BaseSpeed>
</ResourceGatherer>

View File

@ -10,4 +10,8 @@
<VisualActor>
<Actor>structures/hellenes/trireme_cor.xml</Actor>
</VisualActor>
<Footprint>
<Square width="6.0" depth="50.0"/>
<Height>8.0</Height>
</Footprint>
</Entity>

View File

@ -3,6 +3,7 @@ use warnings;
use File::Find;
use XML::Simple;
use XML::LibXML;
use Data::Dumper;
my $vfsroot = '../../../binaries/data/mods';
@ -10,6 +11,10 @@ my $vfsroot = '../../../binaries/data/mods';
my (%dot_actor, %dot_inherit);
my %xml = ('template_entity_full.xml' => 1, 'template_entity_quasi.xml' => 1);
my $tro = `trang oldformat.rnc oldformat.rng 2>&1`;
die $tro if $tro;
my $rngschema = XML::LibXML::RelaxNG->new(location => 'oldformat.rng');
convert_all("$vfsroot/public");
convert_all("$vfsroot/internal") if -e "$vfsroot/internal";
@ -33,6 +38,17 @@ sub convert_all {
$name =~ s/\.xml$//;
next if $name =~ /^(template_foundation|foundation_)/;
next if $name =~ /^(template_corpse)$/;
my $doc = XML::LibXML->new->parse_file("$dir/$xml");
eval {
$rngschema->validate($doc);
};
if ($@) {
warn $@;
open my $f, "$dir/$xml";
print <$f>;
}
my %opt = (KeyAttr => []);
@ -239,9 +255,9 @@ sub convert {
if ($data->{Traits}[0]{Footprint}) {
my $r = '';
$r = ' replace=""' if
($data->{Traits}[0]{Footprint}[0]{Width} and $data->{Parent} =~ /^template_(unit|unit_mechanical|unit_mechanical_siege|unit_mechanical_siege_onager|unit_(super|hero)_ranged)$/) or
($data->{Traits}[0]{Footprint}[0]{Radius} and $data->{Parent} =~ /^template_structure_(special|military_fortress)$/);
$r = ' replace=""' if $data->{Parent} and
(($data->{Traits}[0]{Footprint}[0]{Width} and $data->{Parent} =~ /^template_(unit|unit_mechanical|unit_mechanical_siege|unit_mechanical_siege_onager|unit_(super|hero)_ranged)$/) or
($data->{Traits}[0]{Footprint}[0]{Radius} and $data->{Parent} =~ /^template_structure_(special|military_fortress)$/));
$out .= qq{$i<Footprint$r>\n};
if ($data->{Traits}[0]{Footprint}[0]{Radius}) {
$out .= qq{$i$i<Circle radius="$data->{Traits}[0]{Footprint}[0]{Radius}[0]"/>\n};
@ -328,16 +344,18 @@ digraph g
node [fontname=ArialN fontsize=8];
node [shape=rectangle];
EOF
for (sort grep { not $dot_actor{$_} } keys %dot_actor) {
print $dot qq{"$_";\n};
}
print $dot qq{node [style=filled fillcolor=lightgray]\n};
for (sort grep { $dot_actor{$_} } keys %dot_actor) {
print $dot qq{"$_";\n};
}
print $dot qq{node [style=solid shape=ellipse]\n};
for (sort grep { $dot_actor{$_} } keys %dot_actor) {
print $dot qq{"$dot_actor{$_}[0]" -> "$_";\n};
if (0) {
for (sort grep { not $dot_actor{$_} } keys %dot_actor) {
print $dot qq{"$_";\n};
}
print $dot qq{node [style=filled fillcolor=lightgray]\n};
for (sort grep { $dot_actor{$_} } keys %dot_actor) {
print $dot qq{"$_";\n};
}
print $dot qq{node [style=solid shape=ellipse]\n};
for (sort grep { $dot_actor{$_} } keys %dot_actor) {
print $dot qq{"$dot_actor{$_}[0]" -> "$_";\n}; #"
}
}
for my $p (sort keys %dot_inherit) {
for my $c (sort keys %{$dot_inherit{$p}}) {

View File

@ -0,0 +1,255 @@
element Entity {
attribute Parent { text }?,
element Traits {
attribute Extant { "true" }? & # ignore
attribute extant { "" }? & # ignore
element Corpse { text }? & # ignore
element Id {
element Internal_Only { empty }? & # ignore
element Generic { text }? & # ok
element Specific { text }? & # ok
element Icon { text }? & # ok
element Icon_Cell { xsd:integer }? & # ok
element Classes { text }? & # TODO
element Rollover { text }? & # TODO
element Tooltip { text }? & # TODO
element History { text }? & # TODO
element Civ { text }? & # ok
element Civ_Code { text }? # ignore
}? &
element IsTerritoryCentre { "true" }? & # TODO
element Audio {
element Path { text } # ignore
}? &
element Population {
element Rem { xsd:integer }?, # ok
element Add { xsd:integer }? # ok
}? &
element Creation {
element Foundation { text }? & # ok
element Time { xsd:decimal }? & # ok
element Resource {
element Wood { xsd:integer }? & # ok
element Metal { xsd:integer }? & # ok
element Food { xsd:integer }? & # ok
element Stone { xsd:integer }? # ok
}? &
element Socket { "Settlement" }? & # TODO
element BuildingLimitCategory { text }? & # TODO
element TerritoryRestriction { "All" | "Allied" }? # TODO
}? &
element Anchor {
element Type { "Ground" | "Water" }?, # TODO
element ConformX { xsd:decimal }?, # TODO
element ConformZ { xsd:decimal }? # TODO
}? &
element Footprint {
element Radius { xsd:decimal }?, # ok
element Width { xsd:decimal }?, # ok
element Depth { xsd:decimal }?, # ok
element Height { xsd:decimal } # ok
}? &
element Garrison {
element Max { xsd:integer } # TODO
}? &
element Health {
element Max { xsd:integer }?, # ok
element RegenRate { xsd:decimal }?, # ok
element BarHeight { xsd:decimal }?, # TODO
element Bar_Size { xsd:integer }?, # TODO
element Repairable { empty }?, # TODO
element Healable { empty }? # TODO
}? &
element Armour {
element Hack { xsd:decimal }?, # ok
element Pierce { xsd:decimal }?, # ok
element Crush { xsd:decimal }? # ok
}? &
element Stamina {
element Max { xsd:decimal }?, # TODO
element BarHeight { xsd:decimal }?, # TODO
element Bar_Size { xsd:integer }? # TODO
}? &
element Rank {
element Height { xsd:decimal } # TODO
}? &
element Ai {
element Behaviour { "Aggressive" | "Violent" | "Skittish" | "Passive" | "Defensive" } # TODO
}? &
element MiniMap {
element Type { text }, # ok
element Red { xsd:integer }?, # ok
element Green { xsd:integer }?, # ok
element Blue { xsd:integer }? # ok
}? &
element Vision {
element Los { xsd:decimal }?, # TODO
element Permanent { xsd:boolean }? # TODO
}? &
element Supply {
element Max { xsd:integer }, # ok
element Type { text }, # ok
element SubType { text }? # ok
}? &
element Loot {
element Xp { xsd:integer }?, # TODO
element Food { xsd:decimal }?, # TODO
element Wood { xsd:decimal }?, # TODO
element Stone { xsd:integer }?, # TODO
element Metal { xsd:integer }? # TODO
}? &
element Auras { # TODO
element (Dropsite | Infidelity | Allure | Trample | Heal | Fear | Courage) {
element Radius { xsd:decimal }? &
element Bonus { xsd:integer }? &
element Rate { xsd:integer }? &
element Time { xsd:integer }? &
element Speed { xsd:integer }? &
element Duration { xsd:integer }? &
element Crush { xsd:decimal }? &
element Hack { xsd:decimal }? &
element Pierce { xsd:decimal }? &
element Types {
element Food { empty }?,
element Wood { empty }?,
element Stone { empty }?,
element Metal { empty }?
}? &
element r { xsd:decimal }? &
element g { xsd:decimal }? &
element b { xsd:decimal }? &
element a { xsd:decimal }?
}+
}? &
element Display { # TODO
element Bars {
element Enabled { xsd:boolean },
element Offset { xsd:decimal },
element Width { xsd:decimal },
element Height { xsd:decimal }
}
}? &
element Promotion { # TODO
element Entity { text }?,
element Req { xsd:integer }?
}? &
element Formation { # TODO
element Category { "Melee" },
element Curr { "Loose" },
element List {
element * { empty }+
}
}?
}?,
element Actions {
element Attack {
element Hack { xsd:decimal }?, # TODO
element Pierce { xsd:decimal }?, # TODO
element Crush { xsd:decimal }?, # TODO
element Ranged {
(element Hack { xsd:decimal }? & # ok
element Pierce { xsd:decimal }? & # ok
element Crush { xsd:decimal }?), # ok
element MinRange { xsd:decimal }?, # ok
element Range { xsd:decimal }?, # ok
element Speed { xsd:integer }?, # ok
element ProjectileSpeed { xsd:decimal }? # ok
}?,
element Melee {
element Hack { xsd:decimal }?, # ok
element Pierce { xsd:decimal }?, # ok
element Crush { xsd:decimal }?, # ok
element Range { xsd:decimal }?, # ok
element RangeMin { xsd:decimal }?, # ok
element Speed { xsd:integer }? # ok
}?,
element Charge { # TODO
element Hack { xsd:decimal }?,
element Pierce { xsd:decimal }?,
element Crush { xsd:decimal }?,
element Range { xsd:decimal }?,
element RangeMin { xsd:decimal }?,
element Speed { xsd:integer }?
}?
}? &
element Create {
element List {
element StructCiv {
element * { empty }+ # ok
}?,
element StructMil {
element * { empty }+ # ok
}?,
element Train {
element * { empty }+ # ok
}?,
element Research {
element * { empty }* # TODO
}?
}?,
element Speed { xsd:integer }?, # TODO
element Rally { empty }? # TODO
}? &
element Explore { empty }? & # TODO
element Patrol { empty }? & # TODO
element Escort {
element Distance { xsd:decimal } # TODO
}? &
element Barter {
element List {
element Food { empty }, # TODO
element Wood { empty }, # TODO
element Stone { empty }, # TODO
element Metal { empty } # TODO
}
}? &
element Move {
element Speed { xsd:decimal }, # ok
element Speed_Curr { empty }?, # TODO
element TurningRadius { xsd:decimal }?, # TODO
element Run {
element Speed { xsd:decimal } & # TODO
element Range { xsd:decimal }? & # TODO
element RangeMin { xsd:decimal }? & # TODO
element RegenRate { xsd:decimal }? & # TODO
element DecayRate { xsd:decimal }? # TODO
}?,
element PassThroughAllies { "true" }? # TODO
}? &
element Gather {
element Resource {
element Food {
element Fruit { xsd:decimal }?, # ok
element Grain { xsd:decimal }?, # ok
element Meat { xsd:decimal }, # ok
element Fish { xsd:decimal }? # ok
} &
element Wood { xsd:decimal }? & # ok
element Metal { xsd:decimal }? & # ok
element Stone { xsd:decimal }? # ok
}?,
element AffectedByAllure { "true" }?, # TODO
element Range { xsd:decimal }?, # TODO
element Speed { xsd:integer } # ok
}? &
element Repair {
element Rate { xsd:decimal }, # TODO
element Speed { xsd:integer } # TODO
}? &
element Build {
element Rate { xsd:decimal }, # TODO
element Speed { xsd:integer } # TODO
}? &
element Loot {
element Resources { empty }?, # TODO
element Xp { empty }? # TODO
}? &
element TownBell { empty }? # TODO
}?,
element Actor { text }?, # ok
element SoundGroups {
element (Walk|Run|Melee|Death|Build|Gather_Fruit|Gather_Grain|Gather_Wood|Gather_Stone|Gather_Metal) { text }+ # ok
}?,
element Script { attribute File { text } }?, # TODO
element Event { attribute On { text }, attribute Function { text } }* # TODO
}