Tweak scenario output and schema so that they match; write script to XML-validate a whole scenario
This commit is contained in:
@@ -60,6 +60,14 @@
|
||||
<xs:enumeration value="luck"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="useFlag">
|
||||
<xs:restriction base="xs:token">
|
||||
<xs:enumeration value="help-one"/>
|
||||
<xs:enumeration value="harm-one"/>
|
||||
<xs:enumeration value="help-all"/>
|
||||
<xs:enumeration value="harm-all"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:element name="item">
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
@@ -85,7 +93,7 @@
|
||||
<xs:element name="type" type="xs:integer"/>
|
||||
<xs:element name="strength" type="xs:integer"/>
|
||||
<xs:element name="data" type="xs:integer"/>
|
||||
<xs:element name="use-flag" type="xs:integer" minOccurs="0"/>
|
||||
<xs:element name="use-flag" type="useFlag" minOccurs="0"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
@@ -33,6 +33,8 @@
|
||||
<xs:enumeration value="magic"/>
|
||||
<xs:enumeration value="plant"/>
|
||||
<xs:enumeration value="bird"/>
|
||||
<xs:enumeration value="goblin"/>
|
||||
<xs:enumeration value="skeletal"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="permille">
|
||||
|
@@ -164,8 +164,4 @@
|
||||
For example, this states that the fourth graphic is an item. -->
|
||||
<graphics><pic index='3'>7</pic></graphics>
|
||||
</editor>
|
||||
<!-- All the scenario strings go here -->
|
||||
<strings/>
|
||||
<!-- And the journal strings here -->
|
||||
<journal/>
|
||||
</scenario>
|
||||
|
@@ -293,6 +293,8 @@
|
||||
</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>
|
||||
@@ -356,20 +358,6 @@
|
||||
<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>
|
||||
|
@@ -109,6 +109,15 @@
|
||||
<xs:enumeration value="city"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="stepSound">
|
||||
<xs:restriction base="xs:token">
|
||||
<xs:enumeration value="step"/>
|
||||
<xs:enumeration value="crunch"/>
|
||||
<xs:enumeration value="squish"/>
|
||||
<xs:enumeration value="splash"/>
|
||||
<xs:enumeration value="none"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:element name="editor">
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
@@ -147,7 +156,7 @@
|
||||
<xs:element name="boat" minOccurs="0" type="bool"/>
|
||||
<xs:element name="ride" minOccurs="0" type="bool"/>
|
||||
<xs:element name="light" minOccurs="0" type="xs:integer"/>
|
||||
<xs:element name="step-sound" minOccurs="0" type="xs:integer"/>
|
||||
<xs:element name="step-sound" minOccurs="0" type="stepSound"/>
|
||||
<xs:element name="trim" type="terTrim"/>
|
||||
<xs:element name="arena" type="xs:integer"/>
|
||||
<xs:element ref="editor" minOccurs="0"/>
|
||||
|
@@ -113,7 +113,7 @@
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="wandering" minOccurs="0">
|
||||
<xs:element name="wandering" minOccurs="0" maxOccurs="4">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="monster" maxOccurs="4">
|
||||
|
48
rsrc/boes/validate-scen.sh
Executable file
48
rsrc/boes/validate-scen.sh
Executable file
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
|
||||
function invalid {
|
||||
echo "$1 is not a valid Blades of Exile scenario."
|
||||
echo $2
|
||||
rm "$1.temp"
|
||||
exit 1
|
||||
}
|
||||
|
||||
BOE_SCHEMAS_DIR=${BOE_SCHEMAS_DIR:-`git rev-parse --show-toplevel`/rsrc/boes}
|
||||
|
||||
if [[ -d $1 ]]; then
|
||||
SCEN_PATH=$1
|
||||
elif [[ -f $1 ]]; then
|
||||
gzip -S .boes -dck "$1" > "$1.temp"
|
||||
if [[ $? > 0 ]]; then invalid "$1" "(Not valid GZIP data.)"; fi
|
||||
tar -xf "$1.temp"
|
||||
if [[ $? > 0 ]]; then invalid "$1" "(Not valid TAR archive.)"; fi
|
||||
rm "$1.temp"
|
||||
SCEN_PATH=scenario
|
||||
else invalid "$1" "(Not a file or directory.)"; fi
|
||||
|
||||
function check-file {
|
||||
xmllint --nonet --noout --schema "$BOE_SCHEMAS_DIR/$1.xsd" "$2"
|
||||
}
|
||||
|
||||
check-file scenario "$SCEN_PATH/scenario.xml"
|
||||
check-file terrain "$SCEN_PATH/terrain.xml"
|
||||
check-file items "$SCEN_PATH/items.xml"
|
||||
check-file monsters "$SCEN_PATH/monsters.xml"
|
||||
|
||||
shopt -s nullglob
|
||||
|
||||
for sector in $SCEN_PATH/out/out*.xml; do
|
||||
check-file outdoor "$sector"
|
||||
done
|
||||
|
||||
for town in $SCEN_PATH/towns/town*.xml; do
|
||||
check-file town "$town"
|
||||
done
|
||||
|
||||
for speech in $SCEN_PATH/towns/talk*.xml; do
|
||||
check-file dialogue "$speech"
|
||||
done
|
||||
|
||||
if [[ $SCEN_PATH = scenario ]]; then
|
||||
rm -rf scenario
|
||||
fi
|
Reference in New Issue
Block a user