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:
@@ -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>
|
||||
|
@@ -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>
|
||||
|
@@ -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>
|
||||
|
@@ -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");
|
||||
}
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user