Shadowrun Character Sheet XML Spec

From the Not Ready For Prime Time files, I’ve been working on an XML exchange format for storing Shadowrun 3 Characters. This way one could store and retrieve characters easily from databases, transfer them over e-mail or the web, and render them into HTML, Text, or PDF using XSLT stylesheets. As I said, it’s not ready for primetime.

I wouldn’t even be mentioning this except that I needed a shaman. Now, I’ve never done a shaman before and I’m really not interested in having a shaman character to play. But then something odd hit me. I do know a shaman I can use as an example to test my format. So I came up with a character sheet file for him.

Here’s the raw XML (since the XSLT sheet is (ready?) not ready for prime time):

<?xml version="1.0" ?>
<characterSheet xmlns="http://lakemasoniccenter.org/2010/scs">
	<streetName>Ringtail</streetName>
	<realName>King Julien XIV</realName>
	<race>Ring-tailed Lemur</race>
	<sex>M</sex>
	<age>14</age>
	<description>Bossy, arrogant, lazy, vain, ambiguously gay.</description>
	<notes>Sensitive feet - hates people touching them.  Hates the smell of fish.  Loves tropical fruit.  Overly concerned with fashion.  No grasp of mammalian reproduction.</notes>
	<attributes>
		<body>3</body>
		<quickness>6</quickness>
		<strength>4</strength>
		<charisma>5</charisma>
		<intelligence>3</intelligence>
		<willpower>2</willpower>
		<essence>6</essence>
		<magic>4</magic>
		<!-- Reaction and initiative will be calculated by stylesheet. -->
		<karma>1</karma>
	</attributes>
	<condition>
		<!-- All are implied to be 0 unless specified otherwise. -->
		<mental>0</mental>
		<physical>0</physical>
		<overdamage>0</overdamage>
	</condition>
	<contacts>
		<contact>
			<level>3</level>
			<name>Maurice</name>
			<type>servant</type>
		</contact>
		<contact>
			<level>3</level>
			<name>Mort</name>
			<type>worshipper</type>
		</contact>
		<contact>
			<level>2</level>
			<name>Skipper</name>
			<type>ass-saver</type>
		</contact>
	</contacts>
	<skills>
		<skill type="active" name="ettiquette" default="charisma">3</skill>
		<skill type="active" name="athletics" default="body">
			4
			<skill type="active" name="dancing">6</skill>
		</skill>
		<skill type="active" name="blunt weapon" default="strength">2</skill>
		<skill type="active" name="leadership" default="charisma">4</skill>
		<skill type="active" name="persuasion" default="charisma">4</skill>
		<skill type="knowledge" name="religion: sky spirits">6</skill>
		<skill type="knowledge" name="style">4</skill>
		<skill type="knowledge" name="English">2
			<skill type="knowledge" name="read/write">0</skill>
		</skill>
		<skill type="knowledge" name="geography: Madagascar">3</skill>
		<skill type="knowledge" name="survival">2
			<skill type="knowledge" name="jungle">1</skill>
			<skill type="knowledge" name="urban">0</skill>
			<skill type="knowledge" name="zoo">1</skill>
		</skill>
		<skill type="knowledge" name="geography: New York">2</skill>
		<skill type="knowledge" name="mathematics">2</skill>
	</skills>
	<gear>
		<item type="talisman">crown</item>
		<item type="talisman">spare crown</item>
		<item type="talisman">curse-breaking crown</item>
		<item type="talisman">scepter</item>
		<item>booty scratcher</item>
	</gear>
	<cyberware>
	</cyberware>
	<spells>
		<spell name="warmWeather">2</spell>
		<spell name="saltySnacks">4</spell>
		<spell name="darkness">1</spell>
		<spell name="curse">5</spell>
		<spell name="rebukeSpirit">5</spell>
		<spell name="senseGroove">4
			<notes>always on - booty senses any nearby moovin' and groovin'</notes>
		</spell>
		<spell name="de-curse">1</spell>
	</spells>
	<vehicle />
</characterSheet>

Here’s what I have for the XMLSchema so far. It’s about 25% done at this point:

<?xml version="1.0" ?>
<xs:schema
	xmlns="http://lakemasoniccenter.org/2010/scs"
	xmlns:xs="http://www.w3.org/2001/XMLSchema"
	targetNamespace="http://lakemasonicceneter.org/2010/scs"
	elementFormDefault="qualified"
>
	<xs:annotation>
		<xs:appinfo>SCS Spec v0.1</xs:appinfo>
		<xs:documentation xml:lang="en">
			Shadowrun Character Sheet XML specification v0.1
		</xs:documentation>
		<xs:documentation id="xmlns">http://lakemasoniccenter.org/2010/scs</xs:documentation>
	</xs:annotation>
	<!-- Section 1: Types -->
	<xs:complexType name="scsRootElementFlow">
		<xs:annotation>
			<xs:documentation xml:lang="en">Root Element Flow</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element ref="characterSheet" />
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="scsCharacterSheetElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">Character Sheet Element Mix</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:all>
					<xs:element ref="streetName" />
					<xs:element ref="realName" />
					<xs:element ref="race" />
					<xs:element ref="sex" />
					<xs:element ref="age" />
					<xs:element ref="description" />
					<xs:element ref="attributes" />
					<xs:element ref="condition" minOccurs="0" />
					<xs:element ref="contacts" minOccurs="0" />
					<xs:element ref="skills" />
					<xs:element ref="gear" />
					<xs:element ref="cyberware" minOccurs="0" />
					<xs:element ref="spells" minOccurs="0" />
					<xs:element ref="vehicles" minOccurs="0" />
					<xs:element ref="armor" minOccurs="0" />
					<xs:element ref="clothing" minOccurs="0" />
					<xs:element ref="weapons" minOccurs="0" />
				</xs:all>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsNotesElementMix" abstract="true">
		<xs:annotation>
			<xs:documentation xml:lang="en">Abstract Base for all elements.</xs:documentation>
		</xs:annotation>
		<xs:all>
			<xs:element ref="notes" minOccurs="0" maxOccurs="unbounded" />
		</xs:all>
	</xs:complexType>
	<xs:complexType name="scsAttributesElementFlow">
		<xs:annotation>
			<xs:documentation xml:lang="en">Attributes Element Flow</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:sequence>
					<xs:element ref="body" />
					<xs:element ref="quickness" />
					<xs:element ref="strength" />
					<xs:element ref="charisma" />
					<xs:element ref="intelligence" />
					<xs:element ref="willpower" />
					<xs:element ref="essence" />
					<xs:element ref="magic" />
					<xs:element ref="reaction" minOccurs="0" />
					<xs:element ref="initiative" minOccurs="0" />
					<xs:element ref="karma" minOccurs="0" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsConditionElementFlow">
		<xs:annotation>
			<xs:documentation xml:lang="en">Condition Element Flow</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:sequence>
					<xs:element ref="mental" />
					<xs:element ref="physical" />
					<xs:element ref="overdamage" minOccurs="0" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsContactsElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">Contacts Element Mix</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:all>
					<xs:element ref="contact" minOccurs="0" maxOccurs="unbounded" />
				</xs:all>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsContactElementFlow">
		<xs:annotation>
			<xs:documentation xml:lang="en">Contact Element Flow</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:sequence>
					<xs:element ref="level" />
					<xs:element ref="name" />
					<xs:element ref="type" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsSkillsElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">Skills Element Mix</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:all>
					<xs:element ref="skill" minOccurs="0" maxOccurs="unbounded" />
				</xs:all>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsSkillElementFlow" mixed="true">
		<xs:annotation>
			<xs:documentation xml:lang="en">Skill Element Flow</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:sequence>
					<xs:element ref="skill" minOccurs="0" maxOccurs="unbounded" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsGearElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">Gear Element Mix</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:all>
					<xs:element ref="item" minOccurs="0" maxOccurs="unbounded" />
				</xs:all>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsMixedContentModel" mixed="true">
		<xs:annotation>
			<xs:documentation xml:lang="en">Basic Mixed Character Data Content Model</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix" />
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsCyberwareElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">Cyberware Element Mix</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:all>
					<xs:element ref="implant" minOccurs="0" maxOccurs="unbounded" />
				</xs:all>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsImplantElementMix">
		<xs:annotation>
			<xs:complexContent>
				<xs:extension base="scsNotesElementMix">
					<xs:all>
						<xs:element ref="name" />
						<xs:element ref="type" />
						<xs:element ref="rating" />
						<xs:element ref="quality" />
					</xs:all>
				</xs:extension>
			</xs:complexContent>
		</xs:annotation>
	</xs:complexType>
	<xs:complexType name="scsSpellsElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">Spells Element Mix</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:all>
					<xs:element ref="spell" minOccurs="0" maxOccurs="unbounded" />
				</xs:all>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsVehiclesElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">Vehicles Element Mix"</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:all>
					<xs:element ref="vehicle" minOccurs="0" maxOccurs="0" />
					<xs:element ref="drone" minOccurs="0" maxOccurs="0" />
				</xs:all>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsWeaponsElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">Weapon Element Mix</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:all>
					<xs:element ref="weapon" minOccurs="0" maxOccurs="unbounded" />
				</xs:all>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsVehicleElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">Vehicle Element Mix</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:all>
					<!-- TODO:  insert element refs for vehicle stats here -->
				</xs:all>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsWeaponElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">Weapon Element Mix</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:all>
					<xs:element ref="name" />
					<xs:element ref="type" />
					<xs:element ref="damage" />
					<xs:element ref="reach" minOccurs="0" />
					<xs:element ref="shortRange" minOccurs="0" />
					<xs:element ref="mediumRange" minOccurs="0" />
					<xs:element ref="longRange" minOccurs="0" />
					<xs:element ref="extremeRange" minOccurs="0" />
					<xs:element ref="clipSize" minOccurs="0" />
					<xs:element ref="ammoType" minOccurs="0" />
					<xs:element ref="features" minOccurs="0" />
					<xs:element ref="conceal" />
				</xs:all>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsFeatureElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">Weapon Feature Element Mix</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:all>
					<xs:element ref="name" />
					<xs:element ref="rating" />
				</xs:all>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsArmorElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">Armor Element Mix</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:all>
					<xs:element ref="name" />
					<xs:element ref="type" />
					<xs:element ref="ballistic" />
					<xs:element ref="impact" />
					<xs:element ref="slicing" minOccurs="0" />
					<xs:element ref="conceal" />
				</xs:all>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsItemElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">Item Element Mix</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:all>
					<xs:element ref="name" />
					<xs:element ref="type" minOccurs="0" />
					<xs:element ref="conceal" minOccurs="0" />
					<xs:element ref="quantity" minOccurs="0" />		
				</xs:all>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsClothingElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">Clothing Element Mix</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:all>
					<xs:element ref="name" />
					<xs:element ref="type" />
					<xs:element ref="conceal" minOccurs="0" />
				</xs:all>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="scsWeaponsElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">Weapons Element Mix</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="scsNotesElementMix">
				<xs:all>
					<xs:element ref="weapon" minOccurs="0" maxOccurs="unbounded" />
				</xs:all>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<!-- Part 2: Elements -->
	<xs:element name="characterSheet" type="scsCharacterSheetElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">characterSheet Element</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="notes" type="scsNotesElementMix">
		<xs:annotation>
			<xs:documentation xml:lang="en">notes Element can contain #CDATA as well as more notes elements</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="streetName" type="xs:string">
		<xs:annotation>
			<xs:documentation xml:lang="en">streetName Element</xs:documentation>
		</xs:annotation>
	</xs:element>
	<!-- TODO: finish schema -->
</xs:schema>
Advertisements

, , ,

  1. #1 by Joshua on October 31, 2010 - 7:05 PM

    I’m still not sure I’ve got the active/knowledge skills right for a shaman. Chad, could you please check that? Thanks!

    • #2 by Chadwick on October 31, 2010 - 8:43 PM

      Probably want Spellcasting and/or Conjuring (possibly with specializations).

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: