1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. While the majority of active discourse on D20PRO has moved to our Discord Channels, this forum is still active and checked-in on regularly by our staff. However, for the very latest information, conversation and/or immediate support, please join us on Discord here: http://discord.gg/Ph38ckM
    Dismiss Notice

Unable to import Familiar from Hero Labs d20pro export

Discussion in 'Feature Requests' started by Knucklehead, Mar 1, 2010.

  1. Knucklehead

    Knucklehead New Member

    Joined:
    Feb 25, 2010
    Messages:
    9
    Likes Received:
    0
    Error message when importing the following d20pro.xml export from Hero Lab:

    Code:
    <?xml version='1.0' encoding='ISO-8859-1'?>
    <document signature='d20Pro Import File'>
    
      <importer version='1'/>
    
      <hero heroname='Sneak (Weasel Familiar)'>
        <keyvalue id='Size' value='Tiny'/>
        <keyvalue id='Space' value='3'/>
        <keyvalue id='Reach' value='0'/>
        <keyvalue id='Speed' value='20'/>
        <keyvalue id='NumHands' name='Number of Hands' value='0'/>
        <keyvalue id='Class' value='Animal 1'/>
        <keyvalue id='Race' value='Weasel'/>
        <keyvalue id='Alignment' value='Neutral Good'/>
    
        <keyvalue id='CurrentHP' name='Current Hit Points' value='3'/>
        <keyvalue id='MaxHP' name='Maximum Hit Points' value='3'/>
    
        <keyvalue id='ACTotal' name='Total Armor Class' value='16'/>
        <keyvalue id='ACArmor' name='AC from Armor'/>
        <keyvalue id='ACShield' name='AC from Shield'/>
        <keyvalue id='ACDexMod' name='AC from Dexterity Modifier' value='+2'/>
        <keyvalue id='ACNatural' name='AC from Natural' value='+2'/>
        <keyvalue id='ACDeflect' name='AC from Deflection'/>
        <keyvalue id='ACDodge' name='AC from Dodge'/>
        <keyvalue id='ACMisc' name='AC from Miscellaneous'/>
    
        <keyvalue id='PP' name='Total PP' value='0'/>
        <keyvalue id='GP' name='Total GP' value='0'/>
        <keyvalue id='SP' name='Total SP' value='0'/>
        <keyvalue id='CP' name='Total CP' value='0'/>
    
        <background gender='male' age='0' height='0&apos;' weight='0lb.' hair='' eyes='' skin=''><![CDATA[]]></background>
    
        <attributes>
          <keyvalue id='aSTR' name='Strength' value='3'/>
          <keyvalue id='aDEX' name='Dexterity' value='15'/>
          <keyvalue id='aCON' name='Constitution' value='10'/>
          <keyvalue id='aINT' name='Intelligence' value='10'/>
          <keyvalue id='aWIS' name='Wisdom' value='12'/>
          <keyvalue id='aCHA' name='Charisma' value='5'/>
          </attributes>
    
        <saves>
          <keyvalue id='svFort' name='Fortitude Save' value='2'/>
          <keyvalue id='svRef' name='Reflex Save' value='4'/>
          <keyvalue id='svWill' name='Will Save' value='3'/>
          </saves>
    
        <attacks>
          <attack id='wBite' name='Bite (Weasel)' attack='0' damage='1d3' critical='20/x2' multiattacks='no' class='light' equipped='' melee='true' ranged='false' thrown='false' finesse='true'/>
    
          <attack id='wUnarmed' name='Unarmed Strike' attack='-4' damage='1' critical='20/x2' multiattacks='no' class='light' equipped='' melee='true' ranged='false' thrown='false' finesse='true'/>
    
          </attacks>
    
        <feats>
          <keyvalue id='fWepFin' name='Weapon Finesse'/>
          </feats>
    
        <skills>
          <skill id='skAcrobat' name='Acrobatics' ranks='0' misc='8'/>
          <skill id='skAppraise' name='Appraise' ranks='0' misc='0'/>
          <skill id='skBluff' name='Bluff' ranks='0' misc='0'/>
          <skill id='skClimb' name='Climb' ranks='0' misc='8'/>
          <skill id='skDiplo' name='Diplomacy' ranks='0' misc='0'/>
          <skill id='skDisable' name='Disable Device' ranks='0' misc='0'/>
          <skill id='skDisguise' name='Disguise' ranks='0' misc='0'/>
          <skill id='skEscape' name='Escape Artist' ranks='0' misc='0'/>
          <skill id='skFly' name='Fly' ranks='0' misc='4'/>
          <skill id='skHandleAn' name='Handle Animal' ranks='0' misc='0'/>
          <skill id='skHeal' name='Heal' ranks='0' misc='0'/>
          <skill id='skIntim' name='Intimidate' ranks='0' misc='0'/>
          <skill id='skLinguist' name='Linguistics' ranks='0' misc='0'/>
          <skill id='skPercep' name='Perception' ranks='0' misc='0'/>
          <skill id='skRide' name='Ride' ranks='0' misc='0'/>
          <skill id='skSenseMot' name='Sense Motive' ranks='0' misc='0'/>
          <skill id='skSleight' name='Sleight of Hand' ranks='0' misc='0'/>
          <skill id='skSpellcr' name='Spellcraft' ranks='0' misc='0'/>
          <skill id='skStealth' name='Stealth' ranks='1' misc='12'/>
          <skill id='skSurvival' name='Survival' ranks='0' misc='0'/>
          <skill id='skSwim' name='Swim' ranks='0' misc='0'/>
          <skill id='skUseMagic' name='Use Magic Device' ranks='0' misc='0'/>
          </skills>
    
        <gear>
          </gear>
    
        <spellsknown>
          </spellsknown>
    
        <spellsmemorized>
          </spellsmemorized>
    
        <specialabilities>
          <special name='Attach (Ex)'><![CDATA[If you hit with a bite, you can latch on to your opponent.]]></special>
          <special name='Climbing (20 feet)'><![CDATA[You have a Climb speed.]]></special>
          <special name='Improved Evasion (Ex)'><![CDATA[No damage on successful reflex save; half on failed save.]]></special>
          <special name='Low-Light Vision'><![CDATA[See twice as far as a human in low light, distinguishing color and detail.]]></special>
          <special name='Scent (Ex)'><![CDATA[Detect opponents within 15+ feet by sense of smell.]]></special>
          </specialabilities>
    
        </hero>
    
      </document>
    Any ideas where the import process might be choking? I thought initially it was the class id "Animal 1" but adjusting it to "Animal" or adding an "Animal 1" entry in the classes.txt didn't seem to help me out.
     
  2. thraxxis

    thraxxis Member

    Joined:
    Jul 8, 2008
    Messages:
    507
    Likes Received:
    1
    Hail and well met Knucklehead,

    This is a tricky one. Something specific to the familiar must not be getting handled correctly. :oops: Thanks for bringing this to our attention. We are tracking this problem now and will fix soon, including Lone Wolf Development as needed.

    For those interested in some low level code detail, for some reason the XML document above bombs Java's DocumentBuilder with the following:

    Code:
    org.xml.sax.SAXParseException: The processing instruction target matching "[xX][mM][lL]" is not allowed
     
  3. Knucklehead

    Knucklehead New Member

    Joined:
    Feb 25, 2010
    Messages:
    9
    Likes Received:
    0
    When I get home I'll export again and see if for some reason exports of non-standard or npc races (animals, whatever) have spaces/lines before the xml definition/prolog/whatever :)

    No problems with standard PC chars/races.

    Edit: No such luck. Just wanted to make sure it wasn't something silly with my particular files.
     
  4. Knucklehead

    Knucklehead New Member

    Joined:
    Feb 25, 2010
    Messages:
    9
    Likes Received:
    0
    Update: Found initial problem, found an unrelated problem :)

    Found it, and the d20pro error message helped me hunt it down.

    '1' is not a valid die, but '1d1' is. :)

    Code:
    <attack id='wUnarmed' name='Unarmed Strike' attack='-4' damage='1' critical='20/x2' multiattacks='no' class='light' equipped='' melee='true' ranged='false' thrown='false' finesse='true'/>
    Updated damage to '1d3' and it works fine.

    Of course, this could probably be fixed by not including unarmed attacks for this creature in Hero Lab, which would probably then not export an unarmed attack style, but having unarmed attack exported as a default is a good thing in most cases (pc's, npc's, humanoids, squids, whatever, heh)

    Seems they just threw in a "1" because there was no die type associated with an unarmed attack for a no-armed creature. :)

    A second issue was found while I was messing around with the imported weasel. Refer to the xml in the code box above, this one could be more critical:

    Code:
    <hero heroname='Sneak (Weasel Familiar)'>
        <keyvalue id='Size' value='Tiny'/>
        <keyvalue id='Space' value='3'/>
        <keyvalue id='Reach' value='5'/>
    Seems that the "Space" attribute follows the d20 "round down" mantra, and rounds down to "0" for space. When you drag the creature to the map, it immediately disappears from view, an artifact appears off grid that looks a lot like the measuring line, and if you select the creature from the Roster view, you'll get a select animation centered on one of the corners of the space you placed it.

    Since there's no space selection lower than 5 in the drop-down list (although creature successfully imported with a space of '0'), maybe round up space < 5 to 5? Seems the size attribute handles the icon size from there on out.
     
  5. thraxxis

    thraxxis Member

    Joined:
    Jul 8, 2008
    Messages:
    507
    Likes Received:
    1
    Hail and well met Knucklehead,

    Thanks for that heads up. As you deduced it's stored in spaces and truncating the 3' to 0 squares. Based on that report, I inserted conditionals to guard against other code (in this case the importer) from setting these values below 1. :D

    This is fixed and will ship with v2.1. On a positive note you should be able to recover the correct space by using the Edit Creature Dialog via that Creature in the Roster.
     

Share This Page