Implement loading of scenarios

- This also tweaks the scenario schemas for consistency between schemas and code, adds some unique key restraints, and makes some attributes required.
This commit is contained in:
2015-02-11 13:25:20 -05:00
parent 1e0b093b78
commit 1894b31e20
24 changed files with 1777 additions and 229 deletions

View File

@@ -52,10 +52,7 @@
<xs:element name="text" minOccurs="1" maxOccurs="2" type="xs:string"/>
</xs:sequence>
<xs:attribute name="for" type="xs:integer" use="required"/>
</xs:complexType><!--
short personality,type;
char link1[4],link2[4];
short extras[4]; -->
</xs:complexType>
</xs:element>
<xs:element name="dialogue">
<xs:complexType>
@@ -63,7 +60,7 @@
<xs:element ref="personality" maxOccurs="10"/>
<xs:element ref="node" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="boes" type="xs:string"/>
<xs:attribute name="boes" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@@ -120,6 +120,11 @@
<xs:sequence>
<xs:element ref="item" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="boes" type="xs:string" use="required"/>
</xs:complexType>
<xs:unique name='itemIds'>
<xs:selector xpath='item'/>
<xs:field xpath='@id'/>
</xs:unique>
</xs:element>
</xs:schema>

View File

@@ -192,6 +192,7 @@
<xs:sequence>
<xs:element ref="monster" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="boes" type="xs:string" use="required"/>
</xs:complexType>
<xs:unique name='monsterIds'>
<xs:selector xpath='monster'/>

View File

@@ -57,53 +57,43 @@
</xs:element>
<xs:element name="encounter" type="encounter" minOccurs="0" maxOccurs="4"/>
<xs:element name="wandering" type="encounter" minOccurs="0" maxOccurs="4"/>
<xs:element name="signs">
<xs:element name="sign" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="string" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:integer"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:integer" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="descriptions">
<xs:element name="area" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="area" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attributeGroup ref="rect"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attributeGroup ref="rect"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="strings">
<xs:element name="string" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="string" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:integer"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:integer" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="boes" type="xs:string"/>
<xs:attribute name="boes" type="xs:string" use="required"/>
</xs:complexType>
<xs:unique name='stringIds'>
<xs:selector xpath='string'/>
<xs:field xpath='@id'/>
</xs:unique>
<xs:unique name='signIds'>
<xs:selector xpath='sign'/>
<xs:field xpath='@id'/>
</xs:unique>
</xs:element>
</xs:schema>

View File

@@ -205,26 +205,20 @@
</xs:element>
<xs:element name="town-flag" minOccurs="0" maxOccurs="10">
<xs:complexType>
<xs:attribute name="town" type="xs:integer"/>
<xs:attribute name="add-x" type="xs:integer"/>
<xs:attribute name="add-y" type="xs:integer"/>
<xs:attribute name="town" type="xs:integer" use="required"/>
<xs:attribute name="add-x" type="xs:integer" use="required"/>
<xs:attribute name="add-y" type="xs:integer" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="specials">
<xs:element name="special-item" minOccurs="0" maxOccurs="50">
<xs:complexType>
<xs:sequence>
<xs:element name="item" minOccurs="0" maxOccurs="50">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="description" type="xs:string"/>
</xs:sequence>
<xs:attribute name="special" type="xs:integer"/>
<xs:attribute name="start-with" type="bool"/>
<xs:attribute name="useable" type="bool"/>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element name="description" type="xs:string"/>
</xs:sequence>
<xs:attribute name="special" type="xs:integer"/>
<xs:attribute name="start-with" type="bool"/>
<xs:attribute name="useable" type="bool"/>
</xs:complexType>
</xs:element>
<xs:element name="quest" minOccurs='0' maxOccurs="unbounded">
@@ -288,13 +282,29 @@
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="time" type="xs:integer"/>
<xs:attribute name="freq" type="xs:integer" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="string" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:integer" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="journal" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:integer" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="string" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="journal" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
@@ -315,7 +325,7 @@
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="index" type="xs:integer"/>
<xs:attribute name="index" type="xs:integer" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
@@ -332,7 +342,7 @@
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="chance" type="xs:integer"/>
<xs:attribute name="chance" type="xs:integer" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
@@ -359,7 +369,7 @@
<xs:element ref="game"/>
<xs:element ref="editor"/>
</xs:sequence>
<xs:attribute name="boes" type="xs:string"/>
<xs:attribute name="boes" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@@ -131,8 +131,6 @@
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ground" minOccurs="0" type="xs:integer"/>
<xs:element name="trim-for" minOccurs="0" type="xs:integer"/>
</xs:all>
</xs:complexType>
</xs:element>
@@ -159,6 +157,8 @@
<xs:element name="step-sound" minOccurs="0" type="stepSound"/>
<xs:element name="trim" type="terTrim"/>
<xs:element name="arena" type="xs:integer"/>
<xs:element name="ground" minOccurs="0" type="xs:integer"/>
<xs:element name="trim-for" minOccurs="0" type="xs:integer"/>
<xs:element ref="editor" minOccurs="0"/>
</xs:all>
<xs:attribute name="id" type="xs:integer" use="required"/>
@@ -169,7 +169,11 @@
<xs:sequence>
<xs:element ref="terrain" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="boes" type="xs:string"/>
<xs:attribute name="boes" type="xs:string" use="required"/>
</xs:complexType>
<xs:unique name='terrainIds'>
<xs:selector xpath='terrain'/>
<xs:field xpath='@id'/>
</xs:unique>
</xs:element>
</xs:schema>

View File

@@ -116,33 +116,25 @@
<xs:element name="wandering" minOccurs="0" maxOccurs="4">
<xs:complexType>
<xs:sequence>
<xs:element name="monster" maxOccurs="4">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="group" type="xs:integer"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="monster" type="xs:integer" maxOccurs="4"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:choice maxOccurs="unbounded">
<xs:element name="sign">
<xs:element name="sign" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:integer"/>
<xs:attribute name="id" type="xs:integer" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="string">
<xs:element name="string" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:integer"/>
<xs:attribute name="id" type="xs:integer" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
@@ -177,7 +169,7 @@
<xs:sequence>
<xs:element name="param" maxOccurs="2" type="xs:integer"/>
</xs:sequence>
<xs:attribute name="type">
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="always"/>
@@ -197,11 +189,12 @@
<xs:element name="face" type="xs:integer" minOccurs="0"/>
<xs:element name="personality" type="xs:integer" minOccurs="0"/>
<xs:element name="onkill" type="xs:integer" minOccurs="0"/>
<xs:element name="ontalk" type="xs:integer" minOccurs="0"/>
</xs:all>
<xs:attribute name="id" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:element name="description">
<xs:element name="area">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
@@ -212,7 +205,7 @@
</xs:element>
</xs:choice>
</xs:sequence>
<xs:attribute name="boes" type="xs:string"/>
<xs:attribute name="boes" type="xs:string" use="required"/>
<xs:attribute name="type">
<xs:simpleType>
<xs:restriction base="xs:string">
@@ -222,5 +215,13 @@
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:unique name='stringIds'>
<xs:selector xpath='string'/>
<xs:field xpath='@id'/>
</xs:unique>
<xs:unique name='signIds'>
<xs:selector xpath='sign'/>
<xs:field xpath='@id'/>
</xs:unique>
</xs:element>
</xs:schema>