Suite Interoperability

soulcatcher

First Post
ok, this is a first draft of everything I can think of that one might want in a character export. Comments?

Devon Jones
GMGen Regent
PCGen BoD

(Note: this ignores Psionics and followers for now)

CHARACTER NAME
PLAYER NAME
ALIGNMENT
DEITY
RACE
SIZE
HEIGHT
WEIGHT
VISION
AGE
GENDER
EYES
HAIR

CLASS
EXPERIENCE
CHARACTER LEVEL
NEXT LEVEL

ABILITY POINTS (for point purchase created characters)
ABILITY NAME (STRENGTH, DEXTERITY, CONSTITUTION, INTELLIGENCE, WISDOM, CHARISMA, OTHERS)
ABILITY ABBREV (STR, DEX, CON, INT, WIS, CHA, ?)
ABILITY BASE SCORE
ABILITY BASE MODIFIER
ABILITY ADJUSTED SCORE
ABILITY ADJUSTED MODIFIER
ABILITY TEMP SCORE
ABILITY TEMP MODIFIER
(Also needs a mechanism to add other stats)

MOVEMENT

HITPOINTS BASE
HITPOINTS TEMP
HITPOINTS CURRENT
SUBDUAL CURRENT

DAMAGE REDUCTION
SPELL RESISTANCE

AC TOTAL
AC FLAT
AC TOUCH
AC BASE
AC BONUS (ARMOR, SHIELD, STAT, SIZE, NATURAL, DEFLECTION, MISC)
MISS CHANCE
ARCANE FAILURE
ARMOR CHECK
MAX DEX

INITIATIVE TOTAL
INITIATIVE MODIFIER (DEX, MISC)

BASE ATTACK
MELEE ATTACK
MELEE BASE
MELEE STAT
MELEE MODIFIER (ABILITY, SIZE, MISC, TEMP)
RANGED ATTACK
RANGED BASE
RANGED STAT
RANGED MODIFIER (ABILITY, SIZE, MISC, TEMP)
GRAPPLE ATTACK
GRAPPLE BASE
GRAPPLE STAT
GRAPPLE MODIFIER (ABILITY, SIZE, MISC, TEMP)

UNARMED HIT
UNARMED DAMAGE
UNARMED CRITICAL

WEAPON NAME
WEAPON BASE ATTACK
WEAPON BASE DAMAGE
WEAPON SPECIAL PROPERTIES
WEAPON HAND
WEAPON TYPE
WEAPON SIZE
WEAPON CRITICAL
WEAPON 1 HANDED-PRIMARY ATTACK
WEAPON 1 HANDED-PRIMARY DAMAGE
WEAPON 1 HANDED-OFFHAND ATTACK
WEAPON 1 HANDED-OFFHAND DAMAGE
WEAPON 2 HANDED ATTACK
WEAPON 2 HANDED DAMAGE
WEAPON 2 WEAPON-PRIMARY-(OFFHAND-HEAVY) ATTACK
WEAPON 2 WEAPON-PRIMARY-(OFFHAND-HEAVY) DAMAGE
WEAPON 2 WEAPON-PRIMARY-(OFFHAND-LIGHT) ATTACK
WEAPON 2 WEAPON-PRIMARY-(OFFHAND-LIGHT) DAMAGE
WEAPON 2 WEAPON-OFFHAND-HEAVY ATTACK
WEAPON 2 WEAPON-OFFHAND-HEAVY DAMAGE
WEAPON RANGE INCREMENT
WEAPON RANGE POINT BLANK ATTACK
WEAPON RANGE POINT BLANK DAMAGE
WEAPON RANGE NORMAL ATTACK
WEAPON RANGE NORMAL DAMAGE
WEAPON RANGE 1 INCREMENT ATTACK
WEAPON RANGE 1 INCREMENT DAMAGE
WEAPON RANGE 2 INCREMENT ATTACK
WEAPON RANGE 2 INCREMENT DAMAGE
WEAPON RANGE 3 INCREMENT ATTACK
WEAPON RANGE 3 INCREMENT DAMAGE
WEAPON AMMO

SKILL NAME
SKILL TOTAL
SKILL ABILITY
SKILL RANKS
SKILL MODIFIER (ABILITY, MISC)
SKILL TRAINED
SKILL CLASS

LANGUAGE NAME

WEAPONPROF NAME

FEAT NAME
FEAT DESCRIPTION

SAVE NAME (FORTITUDE, REFLEX, WILL)
SAVE TOTAL
SAVE BASE
SAVE MODIFIER (ABILITY, MAGIC, RACE, TEMP, CONDITIONAL, MISC)

ITEM NAME
ITEM LOCATION
ITEM QTY
ITEM WEIGHT
ITEM COST
TOTAL EQ WEIGHT CARRIED
TOTAL EQ VALUE

CURRENT ENCUMBERANCE
WEIGHT ALLOWANCE LIGHT
WEIGHT ALLOWANCE MEDIUM
WEIGHT ALLOWANCE HEAVY
WEIGHT LIFT OVER HEAD
WEIGHT LIFT OFF GROUND
WEIGHT PUSH/DRAG

MONEY TYPE (COPPER, SILVER, GOLD, PLATINUM, GEMS, MISC, ?)
MONEY VALUE

DOMAIN NAME
DOMAIN POWER

TURN LEVEL
TURN DAMAGE
TURN PER DAY

SPECIAL ABILITY

SPELL NAME
SPELL SOURCE (Class, Race, etc)
SPELL LEVEL
SPELL SAVE
SPELL DESCRIPTION
SPELL CASTING TIME
SPELL DURATION
SEPLL RANGE
SPELL COMPONENTS
SPELL SR
SPELL SCHOOL
 

log in or register to remove this ad

Here's a link to a custom-designed XSLT character sheet created by a Campaign Suite Extended Beta Tester. So I'm not posting a page of XML code and XSL code that will drive everyone to scratch their heads, I'll post the final result. As you'll see, there are a few things still under design, but I think you'll also find that the "data" is being handled fairly nicely. The character was designed with Campaign SUite, exported to XML .. and then the stylesheet was used to populate this character sheet WITHOUT Campaign Suite.

http://csxfiles.dragonpro.com/oct21.html
 

Twin Rose said:
Here's a link to a custom-designed XSLT character sheet created by a Campaign Suite Extended Beta Tester. So I'm not posting a page of XML code and XSL code that will drive everyone to scratch their heads, I'll post the final result. As you'll see, there are a few things still under design, but I think you'll also find that the "data" is being handled fairly nicely. The character was designed with Campaign SUite, exported to XML .. and then the stylesheet was used to populate this character sheet WITHOUT Campaign Suite.

http://csxfiles.dragonpro.com/oct21.html

This is exactly the type of beneficial thing I can see coming from having a single export XML standard. I do want to make sure it has all the data really anyone could need.

Some more Fields I thought about:

SPELLS PER DAY
NOTES
EFFECT (this can be to label what spells/effects the person is affected by)

So that the portability format is not hobbled, I would like to see it be a *new* format. Of course each package will probably not be able to fill in every one of the items - but having the format as complete as possible will allow it to be used in ways we have not even thought of.

based on what happened with the people who tried to make an XML format for all things D20, I would say that it is probably beneficial to tackle only one problem at a time. that being said, I think this should be a final form fomat, not something that gives all the rules and choices needed to re-create the character (so an export/read format, not an internal save format.)


Devon
 

One of the things that's being worked out is allowing for spells per day, per caster class, and the ability to separate those out easily.

Also, CSX currently does export nearly ever one of the fields listed above, in some form or another. So an XSL to reformat all that data back into another XML file (as decided upon for a standardized input format) is easily possible. As that format is figured out, I'll start making it. I'm having a blast with XSL. :)

Jay Cline
Dragon Pro Games

Keep an eye on http://csxtesters.dragonpro.com for updates as they come.

soulcatcher said:
Some more Fields I thought about:

SPELLS PER DAY
NOTES
EFFECT (this can be to label what spells/effects the person is affected by)
 

DarkSir said:
One of the things that's being worked out is allowing for spells per day, per caster class, and the ability to separate those out easily.

Also, CSX currently does export nearly ever one of the fields listed above, in some form or another. So an XSL to reformat all that data back into another XML file (as decided upon for a standardized input format) is easily possible. As that format is figured out, I'll start making it. I'm having a blast with XSL. :)

Jay Cline
Dragon Pro Games

Keep an eye on http://csxtesters.dragonpro.com for updates as they come.

ok, here is my draft DTD:

Devon.

You can get it at:
legolas.org: DTD v 0.1

<!ELEMENT CHARACTER (CHARACTERSET*)>
<!ELEMENT CHARACTERSET (DEMOGRAPHICS, CHARACTERLEVEL, STATS, COMBAT, EQUIPMENT, SPELLS, EFFECT*, NOTES*)>

<!ELEMENT DEMOGRAPHICS (PHYSICAL, MENTAL)>
<!ELEMENT PHYSICAL (VISION*, MOVEMENT*)>
<!ELEMENT VISION EMPTY>
<!ELEMENT MOVEMENT EMPTY>
<!ELEMENT MENTAL (LANGUAGE*)>
<!ELEMENT LANGUAGE EMPTY>

<!ELEMENT CHARACTERLEVEL (CLASS)>
<!ELEMENT CLASS EMPTY>

<!ELEMENT ABILITIES (ABILITY+, SKILL*, FEAT*, PROFICIENCY*, DOMAIN*, TURN?, SPECIALABILITY*)>
<!ELEMENT STAT EMPTY>
<!ELEMENT SKILL (#PCDATA | BONUS)>
<!ELEMENT FEAT (#PCDATA)>
<!ELEMENT PROFICIENCY (#PCDATA)>
<!ELEMENT DOMAIN (#PCDATA)>
<!ELEMENT TURN EMPTY>
<!ELEMENT SPECIALABILITY (#PCDATA)>
<!ELEMENT DOMAIN (#PCDATA)>

<!ELEMENT COMBAT (HITPOINTS, DEFENSE, INITIATIVE, BASEATTACK, WEAPONS, SAVINGTHROW+)>
<!ELEMENT HITPOINTS EMPTY>
<!ELEMENT DEFENSE (ARMOR, DEFENSESPECIAL?)>
<!ELEMENT ARMOR (#PCDATA | BONUS?)>
<!ELEMENT DEFENSESPECIAL EMPTY>
<!ELEMENT INITIATIVE (BONUS?)>
<!ELEMENT BASEATTACK (ATTACKTYPE+)>
<!ELEMENT ATTACKTYPE (BONUS?)>
<!ELEMENT WEAPONS (UNARMED*, MELEE*, RANGED*)>
<!ELEMENT UNARMED (#PCDATA | PROPERTY*)>
<!ELEMENT MELEE (#PCDATA | PROPERTY*)>
<!ELEMENT RANGED (#PCDATA | PROPERTY*)>
<!ELEMENT SAVINGTHROW (BONUS?)>

<!ELEMENT EQUIPMENT (MONEY*, ITEM*)>
<!ELEMENT MONEY (#PCDATA)>
<!ELEMENT ITEM (#PCDATA)>

<!ELEMENT SPELLS (SPELLLEVEL*, MEMORIZED*)>
<!ELEMENT SPELLLEVEL (SPELL*)>
<!ELEMENT MEMORIZED (SPELL*)>
<!ELEMENT SPELL #PCDATA>

<!ELEMENT EFFECT (#PCDATA)>

<!ELEMENT NOTES (#PCDATA)>

<!ELEMENT BONUS EMPTY>

<!ELEMENT PROPERTY EMPTY>

<!ATTLIST DEMOGRAPHICS
race CDATA #REQUIRED
size CDATA #REQUIRED
height CDATA
weight CDATA
age CDATA
gender CDATA #REQUIRED
eyes CDATA
hair CDATA
>

<!ATTLIST PHYSICAL
name CDATA #REQUIRED
player_name CDATA #REQUIRED
>

<!ATTLIST VISION
type CDATA #REQUIRED
distance CDATA #REQUIRED
>

<!ATTLIST MOVEMENT
type CDATA #REQUIRED
speed CDATA #REQUIRED
>

<!ATTLIST MENTAL
alignment CDATA #REQUIRED
deity CDATA #REQUIRED
>

<!ATTLIST LANGUAGE
name CDATA #REQUIRED
>

<!ATTLIST CHARACTERLEVEL
characterlevel CDATA #REQUIRED
experience CDATA #REQUIRED
next_level CDATA
>

<!ATTLIST CLASS
name CDATA #REQUIRED
level CDATA #REQUIRED
>

<!ATTLIST ABILITIES
ability_points_spent CDATA
skill_points_spent CDATA
feats_spent CDATA
>

<!ATTLIST STAT
name CDATA #REQUIRED
abbreviation CDATA #REQUIRED
base_score CDATA #REQUIRED
base_modifier CDATA #REQUIRED
adjusted_score CDATA
adjusted_modifier CDATA
temp_score CDATA
temp_modifier CDATA
>

<!ATTLIST SKILL
name CDATA #REQUIRED
total CDATA #REQUIRED
stat CDATA #REQUIRED
ranks CDATA #REQUIRED
trained ( true | false )
class ( true | false )
>

<!ATTLIST FEAT
name CDATA #REQUIRED
>

<!ATTLIST PROFICIENCY
name CDATA #REQUIRED
>

<!ATTLIST DOMAIN
name CDATA #REQUIRED
power CDATA
>

<!ATTLIST TURN
level CDATA #REQUIRED
damage CDATA #REQUIRED
perday CDATA #REQUIRED
>

<!ATTLIST SPECIALABILITY
name CDATA #REQUIRED
>

<!ATTLIST HITPOINTS
base CDATA #REQUIRED
temp CDATA
current CDATA
subdual CDATA
>

<!ATTLIST ARMOR
total CDATA #REQUIRED
flat CDATA #REQUIRED
touch CDATA #REQUIRED
base CDATA #REQUIRED
arcane_failure CDATA #REQUIRED
armor_check CDATA #REQUIRED
max_dex CDATA #REQUIRED
>

<!ATTLIST DEFENSESPECIAL
damage_reduction CDATA
spell_resistance CDATA
miss_chance CDATA
>

<!ATTLIST INITIATIVE
total CDATA
>

<!ATTLIST BASEATTACK
base CDATA #REQUIRED
>

<!ATTLIST ATTACKTYPE
name CDATA #REQUIRED
total CDATA #REQUIRED
stat CDATA #REQUIRED
>

<!ATTLIST UNARMED
attack CDATA #REQUIRED
damage CDATA #REQUIRED
critical CDATA #REQUIRED
>

<!ATTLIST MELEE
name CDATA #REQUIRED
attack CDATA #REQUIRED
damage CDATA #REQUIRED
critical CDATA #REQUIRED
hand (PRIMARY | OFFHAND | BOTH) "PRIMARY"
size CDATA #REQUIRED
damage_type CDATA #REQUIRED
1h_p_attack CDATA
1h_p_damage CDATA
1h_o_attack CDATA
1h_o_damage CDATA
2h_attack CDATA
2h_damage CDATA
2w_p_ol_attack CDATA
2w_p_ol_damage CDATA
2w_p_oh_attack CDATA
2w_p_oh_damage CDATA
2w_o_l_attack CDATA
2w_o_l_damage CDATA
2w_o_h_attack CDATA
2w_o_h_damage CDATA
>

<!ATTLIST RANGED
name CDATA #REQUIRED
attack CDATA #REQUIRED
damage CDATA #REQUIRED
critical CDATA #REQUIRED
hand (PRIMARY | OFFHAND | BOTH) "PRIMARY"
size CDATA #REQUIRED
damage_type CDATA #REQUIRED
range_increment CDATA #REQUIRED
ammo CDATA
point_blank_attack CDATA
point_blank_damage CDATA
range_0_attack CDATA
range_0_damage CDATA
range_1_attack CDATA
range_1_damage CDATA
range_2_attack CDATA
range_2_damage CDATA
range_3_attack CDATA
range_3_damage CDATA
>

<!ATTLIST SAVINGTHROW
name CDATA #REQUIRED
total CDATA #REQUIRED
base CDATA #REQUIRED
>

<!ATTLIST EQUIPMENT
total_eq_weight CDATA #REQUIRED
total_eq_value CDATA #REQUIRED
weight_allow_light CDATA
weight_allow_medium CDATA
weight_allow_heavy CDATA
weight_lift_over CDATA
weight_lift_up CDATA
weight_lift_push CDATA
>

<!ATTLIST MONEY
type CDATA #REQUIRED
number CDATA #REQUIRED
unit_value CDATA
total_value CDATA #REQUIRED
>

<!ATTLIST ITEM
name CDATA #REQUIRED
number CDATA #REQUIRED
unit_value CDATA
total_value CDATA #REQUIRED
location CDATA
unit_weight CDATA
total_weight CDATA #REQUIRED
>

<!ATTLIST SPELLLEVEL
class CDATA #REQUIRED
level CDATA #REQUIRED
>

<!ATTLIST MEMORIZED
class CDATA #REQUIRED
level CDATA #REQUIRED
>

<!ATTLIST SPELL
name CDATA #REQUIRED
save CDATA
casting_time CDATA
duration CDATA
range CDATA
components CDATA
sr CDATA
school CDATA
domain CDATA
feat CDATA
>

<!ATTLIST EFFECT
name CDATA #REQUIRED
>

<!ATTLIST BONUS
name CDATA #REQUIRED
value CDATA #REQUIRED
>

<!ATTLIST PROPERTY
value CDATA #REQUIRED
>
 

>> So that the portability format is not hobbled, I would like to see it be a *new* format

What does that mean?

It looks like we've got a format that is nearly done - Chris's. Why go back and reinvent the wheel?
 

DMFTodd said:
>> So that the portability format is not hobbled, I would like to see it be a *new* format

What does that mean?

It looks like we've got a format that is nearly done - Chris's. Why go back and reinvent the wheel?

quick answer is that if it's designed for a particular program is has certain asumptions. Generally that's a gaurentee. I'm hoping to have a format that will not have those assumptions. Developing a new XML format is not all THAT hard.

That being said, XSLT can pretty much create anything anyone wants based off a universal format. As Jay said, since they are exporting most of this anyway, using XSLT to transform from their format to a new one is trivial.

Not that I'm against using CS's format if it works, so long as it's not got stuff specific to CS hiding in it.


I did notice some bugs in the dtd: DTD V0.2

Devon

P.S. I'm not favoring PCGen on this. The draft format I put out there is not completly renderable by PCGen today
 
Last edited:

soulcatcher said:
quick answer is that if it's designed for a particular program is has certain asumptions. Generally that's a gaurentee. I'm hoping to have a format that will not have those assumptions. Developing a new XML format is not all THAT hard.

That being said, XSLT can pretty much create anything anyone wants based off a universal format. As Jay said, since they are exporting most of this anyway, using XSLT to transform from their format to a new one is trivial.

Not that I'm against using CS's format if it works, so long as it's not got stuff specific to CS hiding in it.

When I was forced to use "CS stuff" in it, it's usually indexing, and then I'll also have a 'string tag' for the same thing.. One is to speed up load in CS (and of coruse, anyone can use the same indexing, there's no law against that) and the other is for others to use. Working with my data-entry folks, we're making it extra robust. Even if the program itself doesn't USE all the tags, it still keeps the nodes aroudn and puts them out there for things like custom character sheets. I'm a believer in putting "more" in the data-files than may be needed for completeness, and the way people like their data formatted differently, that seems to be a good idea.
 

>>> quick answer is that if it's designed for a particular program is has certain asumptions. Generally that's a gaurentee. I'm hoping to have a format that will not have those assumptions. Developing a new XML format is not all THAT hard.

You seem to have assumed it won't work and have started on your own. Or did you look at it and find problems?

I'm all for an interoperability standard but I'm against spending my limited time on tasks that don't require it (and may not go anywhere). There's an XML standard out there already - Chris's. It's (mostly) done. It works (far as I know, haven't delved into it). It has user support. I see no reason to create some other standard. I'll use Chris's.
 

I'm all for working with one that already exists (for a project I'm working on): where can I find Chris's? The link a the top is obviously rendered html and I can't seem to find it browsing around the Twin Rose site.
 

Remove ads

Top