<!--  -->
<!-- Pointless at the moment, but prepared for later -->
<!ELEMENT World (Map)> 

<!-- ATM, a map contain only one Field -->
<!ELEMENT Map (Field)>
<!-- a field 
  - may have an axes declared
  - need at least one spawn
  - need at least one wall -->
<!ELEMENT Field (Axes?, Spawn+, Wall+, ObstacleWall*)>

<!-- <!ELEMENT Axes (Point*,Order)> -->
<!ELEMENT Axes (Axis*)>
<!ELEMENT Spawn EMPTY> 
<!ELEMENT Wall (Point | SavePos | RestorePos | Line | Rectangle)+ >
<!ELEMENT Point EMPTY>
<!ELEMENT Axis EMPTY>
<!-- Experimental features -->
<!ELEMENT ObstacleWall (Point)+ >
<!ELEMENT SavePos EMPTY>
<!ELEMENT RestorePos EMPTY>
<!ELEMENT Line EMPTY>
<!ELEMENT Rectangle EMPTY>
<!-- <!ELEMENT Order (PCDATA)> -->

<!ATTLIST World version CDATA #REQUIRED>

<!ATTLIST Map name CDATA #REQUIRED>
<!ATTLIST Map version CDATA #REQUIRED>
<!ATTLIST Map author CDATA #REQUIRED>
<!ATTLIST Map category CDATA "unsorted">

<!ATTLIST Axes number CDATA "4">
<!ATTLIST Axes normalize (true | false) "true">

<!ATTLIST Spawn x CDATA #REQUIRED>
<!ATTLIST Spawn y CDATA #REQUIRED>
<!ATTLIST Spawn xdir CDATA #IMPLIED>
<!ATTLIST Spawn ydir CDATA #IMPLIED>
<!ATTLIST Spawn angle CDATA #IMPLIED>
<!ATTLIST Spawn length CDATA "1.0">

<!-- <!ATTLIST Point num CDATA #IMPLIED> -->
<!ATTLIST Point x CDATA #REQUIRED>
<!ATTLIST Point y CDATA #REQUIRED>

<!ATTLIST Axis xdir CDATA #IMPLIED>
<!ATTLIST Axis ydir CDATA #IMPLIED>
<!ATTLIST Axis angle CDATA #IMPLIED>
<!ATTLIST Axis length CDATA "1.0">

<!ATTLIST Line startx CDATA #REQUIRED>
<!ATTLIST Line starty CDATA #REQUIRED>
<!ATTLIST Line endx CDATA #REQUIRED>
<!ATTLIST Line endy CDATA #REQUIRED>

<!ATTLIST Rectangle startx CDATA #REQUIRED>
<!ATTLIST Rectangle starty CDATA #REQUIRED>
<!ATTLIST Rectangle endx CDATA #REQUIRED>
<!ATTLIST Rectangle endy CDATA #REQUIRED>

<!ATTLIST ObstacleWall height CDATA "1.5">
