Scenario format tweaks

- Fix monster attitude enumerator not being reflected in schemas
- Store the sound ID for sound names, instead of the index into the sound name array
This commit is contained in:
2015-07-09 20:32:45 -04:00
parent 07323b393a
commit 5458bc0d7b
5 changed files with 29 additions and 4 deletions

View File

@@ -37,6 +37,14 @@
<xs:enumeration value="skeletal"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="monsterAttitude">
<xs:restriction base="xs:token">
<xs:enumeration value="docile"/>
<xs:enumeration value="friendly"/>
<xs:enumeration value="hostile-a"/>
<xs:enumeration value="hostile-b"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="permille">
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="1"/>
@@ -346,7 +354,7 @@
<xs:element name="onsight" minOccurs="0" type="xs:integer"/>
<xs:element name="voice" minOccurs="0" type="xs:integer"/>
<xs:element name="summon" minOccurs="0" type="xs:integer"/>
<xs:element name="attitude" type="xs:integer"/>
<xs:element name="attitude" type="monsterAttitude"/>
<xs:element name="immunity">
<xs:complexType>
<xs:all>

View File

@@ -355,7 +355,13 @@
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:integer" use="required"/>
<xs:attribute name="id" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>

View File

@@ -14,6 +14,14 @@
<xs:enumeration value="w"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="monsterAttitude">
<xs:restriction base="xs:token">
<xs:enumeration value="docile"/>
<xs:enumeration value="friendly"/>
<xs:enumeration value="hostile-a"/>
<xs:enumeration value="hostile-b"/>
</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"/>
@@ -156,7 +164,7 @@
<xs:complexType>
<xs:all>
<xs:element name="type" type="xs:integer"/>
<xs:element name="attitude" type="xs:integer"/>
<xs:element name="attitude" type="monsterAttitude"/>
<xs:element name="mobility" type="xs:integer"/>
<xs:element name="sdf" minOccurs="0">
<xs:complexType>

View File

@@ -347,7 +347,7 @@ void writeScenarioToXml(ticpp::Printer&& data, cScenario& scenario) {
for(int i = 0; i < scenario.snd_names.size(); i++) {
if(scenario.snd_names[i].empty()) continue;
data.OpenElement("sound");
data.PushAttribute("id", i);
data.PushAttribute("id", i + 100);
data.PushText(scenario.snd_names[i]);
data.CloseElement("sound");
}

View File

@@ -821,6 +821,9 @@ void readScenarioFromXml(ticpp::Document&& data, cScenario& scenario) {
edit->GetText(&scenario.last_town_edited);
} else if(type == "sound") {
edit->GetAttribute("id", &sndnum);
if(sndnum < 100)
throw xBadVal(type, "id", std::to_string(sndnum), edit->Row(), edit->Column(), fname);
sndnum -= 100;
if(sndnum >= scenario.snd_names.size())
scenario.snd_names.resize(sndnum + 1);
edit->GetText(&scenario.snd_names[sndnum], false);