Files
oboe/rsrc/boes/scenario.xsd
Celtic Minstrel 4efcb08932 Implement a quest system and job board
- The job board is loosely based on Exile III's job board; the dialog is converted from the one contained as a relic of E3 in BoE
- Quest system is loosely based on a mix of Exile III jobs and Blades of Avernum quests
- Talking to a monster (even a hostile one) can now trigger an arbitrary special node

Dialog engine:
- LED's now support wrapped labels
2015-02-01 01:30:15 -05:00

256 lines
8.2 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="bool">
<xs:restriction base="xs:token">
<xs:enumeration value="true"/>
<xs:enumeration value="false"/>
</xs:restriction>
</xs:simpleType>
<xs:attributeGroup name="rect">
<xs:attribute name="top" use="required" type="xs:integer"/>
<xs:attribute name="left" use="required" type="xs:integer"/>
<xs:attribute name="bottom" use="required" type="xs:integer"/>
<xs:attribute name="right" use="required" type="xs:integer"/>
</xs:attributeGroup>
<xs:attributeGroup name="point">
<xs:attribute name="x" use="required" type="xs:integer"/>
<xs:attribute name="y" use="required" type="xs:integer"/>
</xs:attributeGroup>
<xs:element name="icon">
<xs:complexType mixed="true">
<xs:attribute name="custom" type="bool" default="false"/>
<xs:attribute name="split" type="bool" default="false"/>
<xs:attribute name="row" type="xs:integer" default="0"/>
<xs:attribute name="col" type="xs:integer" default="0"/>
</xs:complexType>
</xs:element>
<xs:element name="version" type="xs:string"/>
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="email" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="text">
<xs:complexType>
<xs:sequence>
<xs:element name="teaser" minOccurs="0" maxOccurs="2" type="xs:string"/>
<xs:element ref="icon" minOccurs="0"/>
<xs:element name="intro-msg" minOccurs="0" maxOccurs="6" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ratings">
<xs:complexType>
<xs:all>
<xs:element name="content">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="g"/>
<xs:enumeration value="pg"/>
<xs:enumeration value="r"/>
<xs:enumeration value="nc17"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="difficulty">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="4"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="flags">
<xs:complexType>
<xs:sequence>
<xs:element name="adjust-difficulty" type="bool"/>
<xs:element name="legacy" type="xs:string"/>
<xs:element name="custom-graphics" type="bool"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="creator">
<xs:complexType>
<xs:sequence>
<xs:element name="type" type="xs:string"/>
<xs:element ref="version"/>
<xs:element name="os" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="game">
<xs:complexType>
<xs:sequence>
<xs:element name="num-towns" type="xs:integer"/>
<xs:element name="out-width" type="xs:integer"/>
<xs:element name="out-height" type="xs:integer"/>
<xs:element name="start-town" type="xs:integer"/>
<xs:element name="town-start">
<xs:complexType>
<xs:attributeGroup ref="point"/>
</xs:complexType>
</xs:element>
<xs:element name="outdoor-start">
<xs:complexType>
<xs:attributeGroup ref="point"/>
</xs:complexType>
</xs:element>
<xs:element name="sector-start">
<xs:complexType>
<xs:attributeGroup ref="point"/>
</xs:complexType>
</xs:element>
<xs:element name="store-items" minOccurs="0" maxOccurs="3">
<xs:complexType>
<xs:attributeGroup ref="rect"/>
<xs:attribute name="town" type="xs:integer" use="required"/>
</xs:complexType>
</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:complexType>
</xs:element>
<xs:element name="specials">
<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:sequence>
</xs:complexType>
</xs:element>
<xs:element name="quest" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name='deadline' minOccurs='0'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:integer'>
<xs:attribute name="relative" type="bool"/>
<xs:attribute name='waive-if' type='xs:integer'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='reward' minOccurs='0'>
<xs:complexType>
<xs:attribute name='xp' type='xs:integer'/>
<xs:attribute name='gold' type='xs:integer'/>
</xs:complexType>
</xs:element>
<xs:element name='bank' type='xs:integer' minOccurs='0' maxOccurs='2'/>
<xs:element name="name" type="xs:string"/>
<xs:element name="description" type="xs:string"/>
</xs:sequence>
<xs:attribute name="start-with" type="bool"/>
</xs:complexType>
</xs:element>
<xs:element name="timer" minOccurs="0" maxOccurs="20">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="time" type="xs:integer"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="editor">
<xs:complexType>
<xs:sequence>
<xs:element name="default-ground" type="xs:integer"/>
<xs:element name="last-out-section">
<xs:complexType>
<xs:attributeGroup ref="point"/>
</xs:complexType>
</xs:element>
<xs:element name="last-town" type="xs:integer"/>
<xs:element name="graphics" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="pic" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="index" type="xs:integer"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="storage" minOccurs="0" maxOccurs="10">
<xs:complexType>
<xs:sequence>
<xs:element name="on-terrain" type="xs:integer"/>
<xs:element name="is-property" type="bool"/>
<xs:element name="item" minOccurs="0" maxOccurs="10">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="chance" type="xs:integer"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="scenario">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element ref="icon"/>
<xs:element name="id" type="xs:string"/>
<xs:element ref="version"/>
<xs:element name="language" type="xs:language"/>
<xs:element ref="author"/>
<xs:element ref="text"/>
<xs:element ref="ratings"/>
<xs:element ref="flags"/>
<xs:element ref="creator"/>
<xs:element ref="game"/>
<xs:element ref="editor"/>
<xs:element name="strings">
<xs:complexType>
<xs:sequence>
<xs:element name="string" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="journal">
<xs:complexType>
<xs:sequence>
<xs:element name="string" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="boes" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:schema>