From 99e2bcc3fe41adcbd720bb70cb68903974c0b753 Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Fri, 4 Oct 2024 13:47:09 -0600 Subject: [PATCH 01/21] Version 2.3 start with armor given priority over weapons during import. --- .../2.3/HeroSystem6eHeroic.hde | 3533 ++++++++++++ .../2.3/HeroSystem6eHeroic_HDImporter.js | 4881 +++++++++++++++++ .../2.3/Sample_Character.TXT | 1 + .../2.3/Sample_Character.hdc | Bin 0 -> 127314 bytes .../2.3/Sample_Character_MA.TXT | 1 + .../2.3/Sample_Character_MA.hdc | Bin 0 -> 108564 bytes 6 files changed, 8416 insertions(+) create mode 100644 HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic.hde create mode 100644 HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js create mode 100644 HeroSystem6eHeroic_HDImporter/2.3/Sample_Character.TXT create mode 100644 HeroSystem6eHeroic_HDImporter/2.3/Sample_Character.hdc create mode 100644 HeroSystem6eHeroic_HDImporter/2.3/Sample_Character_MA.TXT create mode 100644 HeroSystem6eHeroic_HDImporter/2.3/Sample_Character_MA.hdc diff --git a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic.hde b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic.hde new file mode 100644 index 000000000..60e3a1e55 --- /dev/null +++ b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic.hde @@ -0,0 +1,3533 @@ +HeroSystem6eHeroic
HeroSystem6eHeroic
Version 2.2
Export format for the Roll20 API script HeroSystem6eHeroic_HDImporter, which imports Hero Designer characters into the HeroSystem6eHeroic character sheet.
For documentation see https://github.com/Roll20/roll20-api-scripts/tree/master/HeroSystem6eHeroic_HDImporter
By Villain In Glasses (Roll20 ID 633423)
+txt +!hero --import { + "character":{ + "character_name":"", + "character_title":"", + "height":"", + "weight":"", + "eyes":"", + "hair":"", + "backgroundText":"", + "historyText":"", + "appearance":"", + "tactics":"", + "campaignUse":"", + "quote":"", + "experience":"", + "experienceBenefit":"", + "strength":"", + "dexterity":"", + "constitution":"", + "intelligence":"", + "ego":"", + "presence":"", + "ocv":"", + "dcv":"", + "omcv":"", + "dmcv":"", + "speed":"", + "pd":"", + "ed":"", + "body":"", + "stun":"", + "endurance":"", + "recovery":"", + "running":"", + "leaping":"", + "swimming":"", + "equipment":{ + "equipment01":{1 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 1}, + "equipment02":{2 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 2}, + "equipment03":{3 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 3}, + "equipment04":{4 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 4}, + "equipment05":{5 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 5}, + "equipment06":{6 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 6}, + "equipment07":{7 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 7}, + "equipment08":{8 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 8}, + "equipment09":{9 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 9}, + "equipment10":{10 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 10}, + "equipment11":{11 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 11}, + "equipment12":{12 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 12}, + "equipment13":{13 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 13}, + "equipment14":{14 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 14}, + "equipment15":{15 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 15}, + "equipment16":{16 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 16} + }, + "maneuvers":{ + "maneuver01":{ + + 1 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 1 + + }, + "maneuver02":{ + + 2 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 2 + + }, + "maneuver03":{ + + 3 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 3 + + }, + "maneuver04":{ + + 4 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 4 + + }, + "maneuver05":{ + + 5 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 5 + + }, + "maneuver06":{ + + 6 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 6 + + }, + "maneuver07":{ + + 7 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 7 + + }, + "maneuver08":{ + + 8 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 8 + + }, + "maneuver09":{ + + 9 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 9 + + }, + "maneuver10":{ + + 10 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 10 + + }, + "maneuver11":{ + + 11 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 11 + + }, + "maneuver12":{ + + 12 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 12 + + }, + "maneuver13":{ + + + + 1 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 1 + + + + }, + "maneuver14":{ + + + + 2 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 2 + + + + }, + "maneuver15":{ + + + + 3 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 3 + + + + }, + "maneuver16":{ + + + + 4 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 4 + + + + }, + "maneuver17":{ + + + + 5 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 5 + + + + }, + "maneuver18":{ + + + + 6 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 6 + + + + }, + "maneuver19":{ + + + + 7 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 7 + + + + }, + "maneuver20":{ + + + + 8 + "name":"", + "points":"", + "phase":"", + "ocv":"", + "dcv":"", + "effect":"", + "notes":"" + 8 + + + + } + }, + "perks":{ + "perk01":{ + + 1 + "type":"", + "points":"", + "text":" ", + "notes":"" + 1 + }, + "perk02":{ + + 2 + "type":"", + "points":"", + "text":" ", + "notes":"" + 2 + }, + "perk03":{ + + 3 + "type":"", + "points":"", + "text":" ", + "notes":"" + 3 + }, + "perk04":{ + + 4 + "type":"", + "points":"", + "text":" ", + "notes":"" + 4 + }, + "perk05":{ + + 5 + "type":"", + "points":"", + "text":" ", + "notes":"" + 5 + }, + "perk06":{ + + 6 + "type":"", + "points":"", + "text":" ", + "notes":"" + 6 + }, + "perk07":{ + + 7 + "type":"", + "points":"", + "text":" ", + "notes":"" + 7 + }, + "perk08":{ + + 8 + "type":"", + "points":"", + "text":" ", + "notes":"" + 8 + }, + "perk09":{ + + 9 + "type":"", + "points":"", + "text":" ", + "notes":"" + 9 + }, + "perk10":{ + + 10 + "type":"", + "points":"", + "text":" ", + "notes":"" + 10 + } + }, + "talents":{ + "talent01":{ + + 1 + "type":"", + "points":"", + "text":" + ", + "notes":"" + 1 + }, + "talent02":{ + + 2 + "type":"", + "points":"", + "text":" + ", + "notes":"" + 2 + }, + "talent03":{ + + 3 + "type":"", + "points":"", + "text":" ", + "notes":"" + 3 + }, + "talent04":{ + + 4 + "type":"", + "points":"", + "text":" + ", + "notes":"" + 4 + }, + "talent05":{ + + 5 + "type":"", + "points":"", + "text":" + ", + "notes":"" + 5 + }, + "talent06":{ + + 6 + "type":"", + "points":"", + "text":" + ", + "notes":"" + 6 + }, + "talent07":{ + + 7 + "type":"", + "points":"", + "text":" + ", + "notes":"" + 7 + }, + "talent08":{ + + 8 + "type":"", + "points":"", + "text":" + ", + "notes":"" + 8 + }, + "talent09":{ + + 9 + "type":"", + "points":"", + "text":" + ", + "notes":"" + 9 + }, + "talent10":{ + + 10 + "type":"", + "points":"", + "text":" + ", + "notes":"" + 10 + } + }, + "complications":{ + "complication01":{ + + 1 + "type":"", + "points":"", + "text":"", + "notes":"" + 1 + }, + "complication02":{ + + 2 + "type":"", + "points":"", + "text":"", + "notes":"" + 2 + }, + "complication03":{ + + 3 + "type":"", + "points":"", + "text":"", + "notes":"" + 3 + }, + "complication04":{ + + 4 + "type":"", + "points":"", + "text":"", + "notes":"" + 4 + }, + "complication05":{ + 5 + "type":"", + "points":"", + "text":"", + "notes":"" + 5 + }, + "complication06":{ + 6 + "type":"", + "points":"", + "text":"", + "notes":"" + 6 + }, + "complication07":{ + 7 + "type":"", + "points":"", + "text":"", + "notes":"" + 7 + }, + "complication08":{ + 8 + "type":"", + "points":"", + "text":"", + "notes":"" + 8 + }, + "complication09":{ + 9 + "type":"", + "points":"", + "text":"", + "notes":"" + 9 + }, + "complication10":{ + 10 + "type":"", + "points":"", + "text":"", + "notes":"" + 10 + }, + "complication11":{ + 11 + "type":"", + "points":"", + "text":"", + "notes":"" + 11 + }, + "complication12":{ + 12 + "type":"", + "points":"", + "text":"", + "notes":"" + 12 + }, + "complication13":{ + 13 + "type":"", + "points":"", + "text":"", + "notes":"" + 13 + }, + "complication14":{ + 14 + "type":"", + "points":"", + "text":"", + "notes":"" + 14 + }, + "complication15":{ + 15 + "type":"", + "points":"", + "text":"", + "notes":"" + 15 + }, + "complication16":{ + 16 + "type":"", + "points":"", + "text":"", + "notes":"" + 16 + }, + "complication17":{ + 17 + "type":"", + "points":"", + "text":"", + "notes":"" + 17 + }, + "complication18":{ + 18 + "type":"", + "points":"", + "text":"", + "notes":"" + 18 + }, + "complication19":{ + 19 + "type":"", + "points":"", + "text":"", + "notes":"" + 19 + }, + "complication20":{ + 20 + "type":"", + "points":"", + "text":"", + "notes":"" + 20 + } + }, + "powers":{ + "power01":{ + 1 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 1 + }, + "power02":{ + 2 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 2 + }, + "power03":{ + 3 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 3 + }, + "power04":{ + 4 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 4 + }, + "power05":{ + 5 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 5 + }, + "power06":{ + 6 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 6 + }, + "power07":{ + 7 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 7 + }, + "power08":{ + 8 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 8 + }, + "power09":{ + 9 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 9 + }, + "power10":{ + 10 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 10 + }, + "power11":{ + 11 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 11 + }, + "power12":{ + 12 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 12 + }, + "power13":{ + 13 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 13 + }, + "power14":{ + 14 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 14 + }, + "power15":{ + 15 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 15 + }, + "power16":{ + 16 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 16 + }, + "power17":{ + 17 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 17 + }, + "power18":{ + 18 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 18 + }, + "power19":{ + 19 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 19 + }, + "power20":{ + 20 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 20 + }, + "power21":{ + 21 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 21 + }, + "power22":{ + 22 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 22 + }, + "power23":{ + 23 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 23 + }, + "power24":{ + 24 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 24 + }, + "power25":{ + 25 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 25 + }, + "power26":{ + 26 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 26 + }, + "power27":{ + 27 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 27 + }, + "power28":{ + 28 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 28 + }, + "power29":{ + 29 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 29 + }, + "power30":{ + 30 + + + "name":"(Multipower) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"(MPSlot ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + + "name":"", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + + "name":"(VPP) ", + "base":"", + "text":"", + "notes":"", + "cost":"", + "endurance":"", + "damage":"", + + + "compound":"true" + + + "compound":"false" + + 30 + } + }, + "skills": { + "skill01": { + 1 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 1 + }, + "skill02": { + 2 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 2 + }, + "skill03": { + 3 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 3 + }, + "skill04": { + 4 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 4 + }, + "skill05": { + 5 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 5 + }, + "skill06": { + 6 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 6 + }, + "skill07": { + 7 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 7 + }, + "skill08": { + 8 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 8 + }, + "skill09": { + 9 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 9 + }, + "skill10": { + 10 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 10 + }, + "skill11": { + 11 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 11 + }, + "skill12": { + 12 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 12 + }, + "skill13": { + 13 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 13 + }, + "skill14": { + 14 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 14 + }, + "skill15": { + 15 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 15 + }, + "skill16": { + 16 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 16 + }, + "skill17": { + 17 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 17 + }, + "skill18": { + 18 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 18 + }, + "skill19": { + 19 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 19 + }, + "skill20": { + 20 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 20 + }, + "skill21": { + 21 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 21 + }, + "skill22": { + 22 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 22 + }, + "skill23": { + 23 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 23 + }, + "skill24": { + 24 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 24 + }, + "skill25": { + 25 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 25 + }, + "skill26": { + 26 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 26 + }, + "skill27": { + 27 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 27 + }, + "skill28": { + 28 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 28 + }, + "skill29": { + 29 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 29 + }, + "skill30": { + 30 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 30 + }, + "skill31": { + 31 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 31 + }, + "skill32": { + 32 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 32 + }, + "skill33": { + 33 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 33 + }, + "skill34": { + 34 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 34 + }, + "skill35": { + 35 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 35 + }, + "skill36": { + 36 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 36 + }, + "skill37": { + 37 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 37 + }, + "skill38": { + 38 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 38 + }, + "skill39": { + 39 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 39 + }, + "skill40": { + 40 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 40 + }, + "skill41": { + 41 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 41 + }, + "skill42": { + 42 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 42 + }, + "skill43": { + 43 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 43 + }, + "skill44": { + 44 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 44 + }, + "skill45": { + 45 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 45 + }, + "skill46": { + 46 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 46 + }, + "skill47": { + 47 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 47 + }, + "skill48": { + 48 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 48 + }, + "skill49": { + 49 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 49 + }, + "skill50": { + 50 + "name":"", + "enhancer":"true", + "text":"", + "display":"", + "attribute":"getCharacteristicString", + "base":"", + "levels":"", + "cost":"" + 50 + } + }, + "playerName":"", + "gmName":"", + "characterFile":"", + "versionHD":"", + "timeStamp":"", + "genre":"", + "campaign":"", + "version":"2.2", + "HeroSystem6eHeroic":"true" + } +} + +\\/ +Flight (\d*)"Flight $1m +within (\d*)"within $1m +Range \((\d*)"\)Range \($1m\) +(?<=[^\^\t:])(")(?=[^\>\}\]\:\n][^\n])'' +(\n)+ +(\t)+ +(\s)+ \ No newline at end of file diff --git a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js new file mode 100644 index 000000000..388e206f0 --- /dev/null +++ b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js @@ -0,0 +1,4881 @@ +/* HeroSystem6eHeroic_HDImporter.js +* Hero Designer Importer for the Roll20 Hero System 6e Heroic character sheet +* Version: 2.2 +* By Villain in Glasses +* villaininglasses@icloud.com +* Discord: Villain#0604 +* Roll20: https://app.roll20.net/users/633423/villain-in-glasses +* Hero Games Forum Thread: +* https://www.herogames.com/forums/topic/101627-new-roll20-character-sheet-hero-system-6e-heroic/ +* +* Purpose: Imports characters created in Hero Designer into a Roll20 HeroSystem6eHeroic campaign. +* +* Installation: Paste this script into the API setup area of your Roll20 HeroSystem6eHeroic campaign. +* +* Copy "HeroSystem6eHeroic.hde" into your Hero Designer export format folder. +* +* Use: from Hero Designer export a character using HeroSystem6eHeroic.hde found in this repository as the selected format. +* This will produce a text file with the name of the character (e.g., myCharacter.txt). +* +* Open the exported file in your favorite text editor. Select all of the contents and copy it. +* Paste the copied text in the chat window of your Roll20 HeroSystem6eHeroic campaign. Hit enter. +* +* Commands: +* Import character: "!hero --import {character text}" +* Help: "!hero --help" +* Config: "!hero --config" +* +* Based on BeyondImporter Version O.4.0 by +* Robin Kuiper +* Discord: Atheos#1095 +* Roll20: https://app.roll20.net/users/1226016/robin +* +* Matt DeKok +* Discord: Sillvva#2532 +* Roll20: https://app.roll20.net/users/494585/sillvva +* +* Ammo Goettsch +* Discord: ammo#7063 +* Roll20: https://app.roll20.net/users/2990964/ammo +*/ + +(function() { + // Constants + const versionMod = "2.3"; + const versionSheet = "3.41"; // Note that a newer sheet will make upgrades as well as it can. + const needsExportedVersion = new Set(["1.0", "2.0", "2.1", "2.2"]); // HeroSystem6eHeroic.hde versions allowed. + + const defaultAttributes = { + + // Bio + character_title: "hero", + backgroundText: "", + historyText: "", + experience: 0, + money: 0, + + // Tally Bar + characteristicsCost: 0, + + // Primary Attributes. + // We need to define strengthNet for weapons. + strength: 10, + strengthNet: 10, + dexterity: 10, + constitution: 10, + intelligence: 10, + ego: 10, + presence:10, + + // Combat Attributes + ocv: 3, + dcv: 3, + omcv: 3, + dmcv: 3, + speed: 2, + pd: 2, + ed: 2, + body: 10, + stun: 20, + endurance: 20, + recovery: 4, + + // Movement Attributes + running: 12, + leaping: 4, + swimming: 4, + + // Health Status Attributes + CurrentBODY: 10, + CurrentSTUN: 20, + CurrentEND: 20, + gearCurrentBODY: 10, + gearCurrentSTUN: 20, + gearCurrentEND: 20, + + // Make characteristic maximums default to no. + useCharacteristicMaximums: 0, + optionTakesNoSTUN: 0, + + // Skill levels + skillLevels38: 0, + skillLevels39: 0, + skillLevels40: 0, + interactionLevelsCP: 0, + intellectLevelsCP: 0, + agilityLevelsCP: 0, + noncombatLevelsCP: 0, + overallLevelsCP: 0 + } + + let hero_caller = {}; + let object; // This is the character object. + + + // Styling for the chat responses. + const style = "margin-left: 0px; overflow: hidden; background-color: royalblue; border: 2px solid #fff990; padding: 5px; border-radius: 5px; color: white; div#home a:link { color: #70DB93; }"; + const buttonStyle = "background-color: dodgerblue; border: 1px solid #292929; width: 25%; border-radius: 3px; padding: 5px; color: #fff; text-align: center; float: right;"; + const altButtonStyle = "background-color: orange; border: 1px solid #292929; border-radius: 3px; padding: 5px; color: #fff; text-align: center; float: right;"; + const linkStyle = "color: green;" + + const script_name = 'HDImporter'; + const state_name = 'HDIMPORTER'; + var verbose = false; + + + // Start messages + on('ready', function() { + checkInstall(); + log(script_name + ' Ready! Command: !hero'); + //sendChat(script_name, script_name + ' Ready!\n For help enter "!hero --help"', null, {noarchive:true}); + sendChat(script_name, 'For help enter "!hero --help"
Export a character in Hero Designer using the HeroSystem6eHeroic.hde format.
'; + text += 'Locate and open the exported .txt file in a text editor. Copy its entire contents and paste them into the Roll20 chat window. Hit enter.
'; + text += 'For more information see the documentation page in the HDImporter Github repository.
'; + text += 'F)()|gg?`gd)QD!=SvE%%uj`Np0&R@yS!`CGo1iAzzHF4^6JFsTtxYW}8&6!>G z_KVhL79gj!AD@G$Alj{N3ToyJliZM3c)HCjczF6hYYvhepL4rT)cU$K; z^HaF9 c2afGRl-Is+9O^CV3IY`{$4(b@HI-<#q=^bXKG z=%tC3E(UZp*1LeR;(yxhX;gm+*H2^DJ>7jrxb3leLI>Fj?`Dj}TkyQU2Kwbr%+R`? z_F+JvU@J@0JzdW^v;+`7*c4QgU*ANY+;2@!c1v$g&)maT-_!A3_1f+`Z%Yrz-|ber zHbs~!(o>fB0Br*LXkU3Fyx}i;#x^a1ynhL!Kbw|7$h=`cTCzUXrlr(liI$Ak2U=Pc zTJmh=v}6rCrzIbSN@mg0RcTw77oep};hHurr5;PP 6+7$k9N`0 zPg;8xp{0^sN Au-oPoE%|5{EnN)=ygx0K 6%uzMZ75&Cn&nD&!s-g^fXw(SBsuJUpYP9ls{!7M4z>N zD)D$1O%a*0i1o5$32*jUrm4XizFIUDXDp{GB2 UOa_=_HZ7Z_&iK5_V%ekm83|9A5v68lFCed3tvb`L! zenWA`cSV!i`q`VZa-?%P=EE+$6QZW~be;1wp{mD?`_-tJ{L@R)TCZxYu1n5~)mZn^ zTKz!%(qBndy8S@6j+}q+H6ngb`5muAHVqkPjNYs~2c)g@63G!@uDRltKCzOLJAjYC zSx>aRue;MCQVQ7vG3(Y*^|3`Wmx1i5?Mc+V&nLPjj(*-)`bg95tDDrmY>I}aL7#Ps zu4ixbrRc$571w@N(?ro5A!8|J950ieQ~t?eDS9j NJa=X$H4Uf@L2hhL-!c1+|Ij*dQH#*G<#8KTKM 3i^Xmg##< zR86G-DyJBMoM!62EBp?UMvL7D8giEer(%^W4-v^q-aityp9C*a_}vM@DcL}bY6gUn z+d!yga-dolt{Osh4(4JN>3J;g>#x!aTodZHp4-*Mc=Eim)3>vdPz8c|T+ld~E?9JU zE=H}XIf7IooufBWcdH)r)K7D~BQ#C*7BnMQKA}>QB~gj?2S0F><6U%(Wn(kU<;l?l z`^o2I@gPV2e6Up4>#@`kc3=5C_>d!wwk>+tLEg&`?}}bjB6}%bM`nXST%~Q0*t6`~ zi_t%o7LnT2R;))C_M`uG&DY%^T}o2=dN?y6lpLYt9I&Z%-yA?iNHk0=OdLBNd;k?t zGZEfBTI}LVCbqm&DK=KaDq$Duih@}9q26en2l` 3;lIpCFR3)!zrXk}mAN#)hqmg@@>f9D{#yS2uXXuGD0DG>mVqz) zR`*;Fbd6>x6z}-OrODELt$X-aT=n-=6 1D0_#-t_7T)$Nxt%a(p)X0x@Gs~;};0bK%f%{*rqOPHerFAh|S3djm z#|5#=f$3^3Sa y6tH z@{L%WaWKE(v4=;SXXB{XTTnsPv1qP=i)Gi<=UrvGhP{y;hp8z`t$%E1-Vedl+N|$8 zEmiU=v~9ZwJ{D>^TeBl#=ylK YT*>DA3)27O=0oE_0iw+L3V7YEJvW#F$Qa zfr|C)r-5G#zK-YGyvDb?2(4JvUDx?`D`JjaFuZ@ogH}IOxJSl%R~tVA zdv_qg+w$LWrR+#Et4gz}`<&i3(s%nV#9gP@jr?3XGmT8 bcNl5W4{@>ZBjlJi7S&C*AQ6(+Bpe^@%sQO~f#H22F`jTMGf z28(xHhw10{nSX^jzELXq3Uf=y hP#S2@&h!jRMhvM}~D~SZ6*2>NriBj5YmP85iGbojJY{Va;^} z$uVmUIbG`vv4HH{$R2R)QTaWzn(w#PU=MJ#4tt!=$_g3QnqjRu32P0xtJKrLZvD8D zw`j}Dv^Ac{9x_a9O{<}@e)-yu^bFjo?423nJ6Ww5pRO3>Z;=VLY%3GkoeDzG9{HtM znH@JB*W9-6hxi;Sw&2;QQCmN( < zsH3n!nP<>`_a(2JzHd09#5YK3bOgK|_4v!Wls2!meOKliyu$3Vn{r% ^IC4 zmAD4W80U_oZ!p&!sM>?amzm(5n&;ze%xaTcsJ16Q1V%OP!|s_qoM%0^7$1lAV^L2a zUUPP$#n(wDxT}L~%97})WsheY&w%`iJF&% YW66Lvc ztiS2+L6t|2bDgjz4}e$pLtJBxJIZHszStU_5vOg1@mjX` IMwqfrEV|o6Df;S`=-k$8IN+w}9u9aB zB1w3T(i-9W9LE)6xzyR7>%)6?U1f}Tc QqV@$}rFPvBt#L(4qt6}U(W8!M zH9x0l*BqrsZpHrTYOs+u+SX5VE4KD}%xc|=Q^MtmTj5mdBAzZzjaio^zAT-~xsWzz z1|E}Kdnm5|o;-%$+!t*vsvQ$)VS6evJ<6zN98y0nTtqt_GBKexTcO_vjR!q4uf)A< zT*X>_FW6D2_Dc2NUjZ+Y+G;H0SI3C2O`G0oo5;;h%b=DqGkMKPW=u u|yove##uL#8%yCB|XP#;FYp0Z60k}AaBTqfp5q$x_jcn za}E3CjbMA MLAAV}!+rm(8TUQX5lh+)wc%d=_CP(Z=|1*UUl4uzIF@j{MC7&6`oE#dt@%WvIx9Yt2;9NWH!<-&c9MD)oWhU2NKj}@a{ z8L=P7yXJVT3t!^+!PW)6{UH8WKF8k_-&2p${(vUGC+?0CARS3OGcUiVe*R7Gu_j#g zE=V5UD(CXJnjaS)ufJQH54&xRN6pKu;;wMRJe0Jne!Ps1!2W~IS*L0UzR0+mlz7`T z6=g0MpL~0~HkQ9 Ir0S?+a_dc34rkjy-Lz=#AR{dB;7iLcfH2 zJ67O{?m}fZpR;uc%R^dS9_w?;dPyr#8<8F!Hy@t2XODg#-uA4_%iG;+IXr()Bh75F zUk7_QA$PD|C+=Yma#@hZyE!M#89DAN{=8$e>av8K `I-KdqL(UZkjD^sFUBNJ5Uo7ex_ M zs41l ER%W#Y@7C<9!~mWbqB52#X=eTWUTr%RmD%uaq#E2M z9CdtaCoNYu>q|pjF$j*BUlTUl7R9vbXEsfE=bbvj?ne`7UQa^gkdaP_1|o7BRxE4> zLuI)?NoJ)V>{Z6cSZvyS!ns+}FSU+VuUVce;yBaZujyLzS~{1@-#g+jXH$_kRO2ox zkUPo%dl;?yNnG1Y+z;LlY*6gd#LDhieC}D|FJp_-&Ru9@uVgnQ8W#Hyt5fs=BFmfc zojcO?ehqVEzYO{<(cPe~UH#29pr|EL+0jwpX}@plVr%L#`lj}jyI~JCK9%TIi}%P| zqFLJ`%Zx|d)22>SXsXfp7hwhJ;!>mDUN>iGfC#CbY8?1dmXEPCQgS!O(o^3CIc<9< zG3U>M&g#k$=-=$S>!>pBh833Gra+YRLS+de8OFMbeW#*+jQ-A;KMnB>R6H81HFvWe z7e69)dRK3HGWxq(yOn$9uJ80L#DiGlCc77n8g2WDA|{ATbzCY(i5@}Yb}v-DaK%Aa z9*lii4=3(|xJ&NOXJVqcFIXC@EmxjZ^~-a?lgK)nd%8XHWIW^fBohZIl}iXbgwW7K zopYVd9F?(4I+gd>tpKk#J4*kc`;=tF8KJhb!R}0pX2vKKVs3BC33f$e9=tEmuo4sB zmRGyTV@$CBlFJ_BAQ)T5yB=F|OIPg5`sCFBPr;)grOnyX9Gi1(JJN!)@#lu*M69iv z)7DM(v#*r^pEweVXKW+>Y1*pCoA#$I 1;5(L^@sS!a>OGyy{q|v{Z4PbeINR- zV?f`9_=L6$p5`}V6xwZaUb0T-6+C6^?9IVb?1lu5FGpT)iEF&3HuH1_xqY1Ewl$76 zy)8nMoAM `!-T1~n3+ir1R^%!3{_g~^PFuq(a{HXW`l=^Dpbo;R}w zSnZA1oUzwD7gyKX`RS|z#trNRM*dObMpoX(;B|a1JREIgW8uGxqko;u@3N~ytOlA{ z7FSqOgQgt`h)y;S`XLj37H{;+e72lM>tHtx=W1;R#N%E3kmBeQL`^W`r-5s(NM7-t zC5|bb%em$6A*!Z1n*%4z(k; @?6i^-Emcu0-wSvpKz|R?GD$Aazzl<{P2cHCPZ1xn8!f-PD+RKO9@&W>YlzI8a&% zclYyDfO6hTTBEN%k lk9dieYv*%n-V7^YvemuQNTS0a8^-#59^&zc z&U-3EWQ}Iobbs1>D66MOgUiw`N9-w_cKKmPqEcRTzFM)*aNSSh)oOknX4* rJ~WpnYWtX|z33oVj&u&v`aeTvi8rkFjn z7bvj3(mDSPKL9=fc1x&Rn26(uQS9?*^jpERL2V&R;F2aEV+b8VaGav%o3xD{PqoI| zvXAfUZ`=>9&I8?Tb8grZH{c1w=XG2B@NFt}uve;k;n`Qm)3_D9h 7uH2R$==}V1ohPnZyr`*>S>=B|IV@y*SXg#VB4GbXUUs0 zk_pit>L*F7S)HekvvqFS>&y2*iP3wX=gIPJ&J5+#e7iVqE6RO4=y+U-oNLAwbB_Hd zx5JrKmEil-%IWgEtO<{l?AmP}qK4%n+Fpr=)+DE~+JS_Kg4opG7drA(k^}i#S`m*k z_vC9L{sgQ_#JBLi&GQk5%xaUbfmD2aCRzKfbh_h%2Ca>CQG9nq$TaOQ({?vRgs?k? zV>yVaK2Dy+E_+&cM94I4b!pmt{DsrH_7D;BShBW1#eENq65|ltl{^+fDE+a<>RGaQ zZ}J$C5wjyga-NFy=1P|7{=SwiX+A?l$YNY{(y#+ngtrw5%&HZ2Qs;O?+XaX&qBwg3 zr>V1UO# Yq4Xfd^>$ZB%hjSP6 z1mx6uc}B+n;0cH|s%lk4n!26sp?4)6q7SBdHp+~_6VR-A2c?_ZmlI_=PefnN0aOV_ zs@KuP{JyZ$8qar2QhFBE*Usm*j$5*FI1lDQuyAA7_KJHlBbDZp^r?1^D+WfC(v3x^ z_Ex9uMX`we32VWk$L <+ESUF zg|E(_+`d^_?WmZOMx{-h0sW=8x8|9MK+0!xNt{|81rA>i(*8ga<(;I-Ye^D+LeIg= z=@=&}M^WvKSTfEW1PWQTtg${ZcWtUiTF;W#eX0I*$K5%ym%LG8c&XLE3RU8W?v^=s zP?rg>7FocqKo~v7LsVX0Z|h00WyT#s?R)CNWmlzf%;Ix!+59?3l%2C v zT;IxPa}KtR?kLta i+v= zEk9X#%+1vXWJU!VDizdLqT2bKdM{`e*pY}_C`+5=>c@k3tYoE%mZ}uX){aPx=W{)% z-KrMT+CJW_hH)drlMw5@5h9Q5G4ooJ-`l=LTIMmacSLzyxv6uendzNar~=FG&cwvl z^{;wNU8zFG9Z{)kN p9`G+T`ma`-Hi63Y7d&l=tN;cdbhoT$WF9x$9)I8@6#N-y-H}+ZVq_ zB*~2ica<%RaA4xGejG?d$OHYRTt(_Wm9jXdxv;)s!KHot?(0FGG; mPG#pLdGLf)3)`$B38q`geIo z{uHZJKfDOlkdI=&((HY-PtqFrNK$WKh=V;+VztW>|8=#?`S6isS+ho<=W~_y#bF&} z2j+Fr!92WoDYT0C0LxCyTIsjur5;Zj+H9k#!$*=W7xl%c;PzAIm@l?Eeuxh=n5+_Q zG}yFk ^7WfS~1=SyBJjDD$}-cypvav9@!^}=lraz#-sM#qD{ta@cUqq z!D2w{lq-br7Gr(G29qiVn u?YiqwLRlM3{I{$f zF1AD`#Q7jM;X@?bY2iNmkf?Z$?3- t;oE&*z{GeqX!H_r}Q7(I5_< zIsi~aNt^tB7}>EJr+t@=$f-??%)VqGG-|$q|3G6;HGgaR#AjD>A%?ySKR0nOzQBa% zz=KaGND?{B{Xa-16X}-l<7f5GHN {=r$OJYu(5ZF0;oAopfY zN2+wjSVy~D|0vdP>qqT_+#~<7KTeJR`mO#0a<3!u$bnr5Kj*>$xwm5 q@Y9)ngv|aV+_kUxYbqwI&0nuO-{o^#P@0qi9;PiPJsM&j17w-hb zi6z=rXzYny_ 4BQMFr?y(EzG%D#YNQV${)|Gg)|OB`SF (J#@5H)9R7YdL`g*sGI@5zHP(ev{A#RlOhw4+ zid-d*wQdFO=NF~Q#vA=M_Y1-r3hD Fvu8_iLDmCjN}8+q~`b zRqjV|&s$OAw8r8&A1qbh*HYCLL4;?P_`R*U`LtepudmKm=2R*&$DJ!r2d{#Rh+&@1 zp|e}%d`b0XtTv9NWsOUtYUw`k=PE?_)$nNhIQ47GStK_m5}vB$afi+}Hknm-J!P|b zzt-&;xhB+J_nxd*7ScPB4$xe?g7a=bHnxgl1;c*!K(tFtq3w#Z<1vnJCW`am$yh*7 zO6Z?mykqq;&QR_CtVaH)5EnxvC%ObbK5}gmCxc$Hs~_U8jkJ=*iPe2sar8*-SmXVk zBn-R5VCiLUkFFLwRI(vNv#AU#G7Y>7xa}dlfBDS4!WmN#u|AI~XWRTV9n12guq$ ?qNSMs$dk?jV+Kl|Afg=lMAI{?XdB$G6a#gV zq9({Z+Lh!)D)GK0Y&@$?zV2dQJkVN;{x#Np(?~9p2YJ$H5jM6r{d>laHg}noDyQQT z$K-AD_`!O$nVj0MNLpSBvsI>cWa<3*_@}GZ%#PNF`aW&tvpJ2YRs&79ceTxF+PHpO z(ghiVq=7@D&P{ekiMH!j{r=T*!B>_=)cLo4$5P^CW$q7@*iDIj_aU36%~|m#i_zv^ zg_iKRJDPS)+_9?_6hwIvskDhM!1nBN%zHMEC+RSKE| +pZQi=a!G1j z)+k-kPVeyN>?#ml`a`#_9JzDW{(*z8oUBI8Rf*MVmL42etyyjI)oaj|r`IA|m%3Hm8i99MT;HoS;&SI`f-sJDeJr$)r8V~CwGnX94Sg(0?0DNRu gkB|2q>88Efu4{ZJW==&sw+031VR-^%ya156bqJs{G{v>$C5-m;P&a6xkh_Wmi1 z6rZmxMJt#ODZ#JMOxNCjgIB?n+r&d?1_|Xf&kRWEPvZLY(`}`i5B<-h>3Rh^Kd~>C z@zLNF#_G%p-K5$<(|r^oQk*H%wv 9Yf70GaL7kRNY+_jjO zV$cc(tzcJj;up~?)r=fpWxWTl0+pIK8vX^SFScrXdBHhYs%PzDR@V)TzS{nQnD;?; zs`Fx9!I9hpo}(1O X<2KiJi^k4^_DN#A5~uT_RkKC_(q?~Lw_ z)&hkkO1~Izw6lZB@wh6@i+IJFG_F&+y;f~Xr@A&?&N!0Jn#aRJt~Gv8XX-rD=Y45f zXTE-~@qzj2IP$@=t%=+(RVpC1k}-Rz*h8xMQn?KY2ft9g $V6yvP z>X$o~WcP87zFaodF1LbI%nffpCEw!Aq8lXtSa)s5c*kYszV@N=*)_d=ryQZ@{7|!= zSk5=O04Z-&5yuL26f2wd^{Sq>n9Q}AF`1>a(|)Gds!hFzuk&~`*8P5zozrb?J;>YT z^c{Up PpmKJD*d3jB6c`iBZnEAUDArc_gyWLsveV;}z;@K#x13#?-2`E<_s)bv5vZ z*ZHCD1uEHKYEu9BMj0=YD({6=^JS0_;}LnGZ{)=$ry*8QWc-fK<~J5<*b$xWNrNRn z rPZyx~coc_I?uY?iQcVwcDJ<21ar%-7P)i{m=_D3YR!%p1%0J8{W?r zt9S>lh*eSiJYY&}K=*V8yZ*lTjK4f5cd|vS$%oU|rFW|7C0%x^*>OsB`7tY#!Dtz& z(dDfmKANccYmyxJ()hlJ4R=}I3VZX8qm_2v=%q`FUShPdCxTxXfAma8G~q9T_Kqrl zf%qKn$8cJF6?o+?Y22~sGSVd**5Iq4qVLBrKGE(9(!&d|6{;}Q>YXlgg=KcQUy{m$ zuL57i9nHkHtccj8U41_4sGx76+oH7=M2KXubS_bP-#SisEzaql)U-3sJZYNIvMD(7 zPustlJPY;wNi3G&N9uK98A@2ge37cW@XT>`X_f9i_$} RxOFr+1xge?y+nhJL%S8WXHUIi%9A9dhLVXqF%3kpiJyiwoT3BQS0NkFlEk) zydV4)-3U9E%r(D6#Dul;xpW@<7BvgbJbci^Y2b5wczXeB#Ca%Tb9{KVrbhI}N`^g) zHFq&NovN&`Z%T}k`w*Vxq+#`(7i@8i@oP~}0`WCl#u=Hfb ir_#6c!@x4s zF~cwA74)b)fOkWr(~C)z-_gY@O!Lb;nWiZcCXbhyouh=0)xK78^gt*jjjJDh4>?N7 z-Jghx-kFzjlsN)Msb={fH`{X7(lhw @Zk45m(^ZvYDFn8Z+aat zZkosHHm_f#$rInEUcivgF~8=->U+{XcJum0nv_}h*bRP>!7mauZSpjC#Xn@R5sORw zc+$kn(sVve)UD>(;bT4t-JMaIsDFsecqHr7JP~%ew zvpH8-dm3oo^nUJ$yn9$Ly>m8Pfy9q;uo*8hWcMvE*Lv{oC7puILh3*b*?n=Pi~r~G iSkz@iE%T4#G4em(>6dfsAp-<-gI1g}i~ni#r~d;TcP|bA literal 0 HcmV?d00001 From fee535835072e93cc2ffb1ab4643f7e6bcc3de33 Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Sun, 6 Oct 2024 14:56:27 -0600 Subject: [PATCH 02/21] Fixed STR Mod showing total instead of adds for custom martial maneuvers. --- .../2.3/HeroSystem6eHeroic_HDImporter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js index 388e206f0..212bc5687 100644 --- a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js +++ b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js @@ -628,7 +628,7 @@ tempPosition = tempString.indexOf("str"); diceString = tempString.slice(0, tempPosition); diceString = diceString.slice(-3).replace(/\D/g,""); - importedManeuvers["martialManeuverStrMod"+ID] = parseInt(diceString)||0; + importedManeuvers["martialManeuverStrMod"+ID] = (parseInt(diceString)||0) - (parseInt(character.strength)||0); } } From dd361b5e48870eb8eaed1c8cfbbe2ff7cb20f9e6 Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Sun, 6 Oct 2024 15:52:17 -0600 Subject: [PATCH 03/21] Non-standard weapons set permanently to weaponType overide now at least temporary. --- .../2.3/HeroSystem6eHeroic_HDImporter.js | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js index 212bc5687..fb556d3ee 100644 --- a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js +++ b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js @@ -1,6 +1,6 @@ /* HeroSystem6eHeroic_HDImporter.js * Hero Designer Importer for the Roll20 Hero System 6e Heroic character sheet -* Version: 2.2 +* Version: 2.3 * By Villain in Glasses * villaininglasses@icloud.com * Discord: Villain#0604 @@ -736,6 +736,9 @@ let multipowerArray = new Array(); let multipowerArrayIndex = 0; + // Weapon States + let weaponStates = "KKKKKNOOOOOO"; + // Read equipment const maxEquipment = 16; let importCount = 0; @@ -910,9 +913,11 @@ // Check for Killing Attack. if (tempString.includes("Killing Attack") || tempString.includes("RKA") || tempString.includes("HKA")) { - // importedWeapons.weaponNormalDamage01= "off"; + // importedWeapons["weaponNormalDamage"+ID] = "off"; } else { importedWeapons["weaponNormalDamage"+ID]= "on"; + weaponStates = setCharAt(weaponStates, importCount, 'N'); + importedWeapons["weaponType"+ID]= "normal"; } // Get OCV bonus or penalty. @@ -966,7 +971,8 @@ } // Import weapons. - + importedWeapons.weaponStates = weaponStates; + setAttrs(object.id, importedWeapons); if(verbose) { @@ -4499,11 +4505,17 @@ } + function setCharAt(str,index,chr) { + // Replace a single character in a string. + if(index > str.length-1) return str; + return str.substring(0,index) + chr + str.substring(index+1); + } + + /* **************************************** */ /* *** END Importing Functions *** */ /* **************************************** */ - // TEST const createSingleWriteQueue = (attributes) => { // this is the list of trigger attributes that will trigger class recalculation, as of 5e OGL 2.5 October 2018 // (see on... handler that calls update_class in sheet html) From 7a68c8f55cab4a5dd1eb79c2a639b3d8cbb99493 Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Tue, 29 Oct 2024 17:47:54 -0600 Subject: [PATCH 04/21] Looks for Max Weapon Range in weapon notes. --- .../2.3/HeroSystem6eHeroic_HDImporter.js | 98 +++++++++++++------ HeroSystem6eHeroic_HDImporter/README.MD | 14 ++- 2 files changed, 81 insertions(+), 31 deletions(-) diff --git a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js index fb556d3ee..eec08b969 100644 --- a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js +++ b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js @@ -42,7 +42,7 @@ (function() { // Constants const versionMod = "2.3"; - const versionSheet = "3.41"; // Note that a newer sheet will make upgrades as well as it can. + const versionSheet = "3.51"; // Note that a newer sheet will make upgrades as well as it can. const needsExportedVersion = new Set(["1.0", "2.0", "2.1", "2.2"]); // HeroSystem6eHeroic.hde versions allowed. const defaultAttributes = { @@ -956,6 +956,17 @@ } } + // Calculate thrown weapon range or assign range without units. + importedWeapons["weaponRange"+ID] = getWeaponRange(weaponsArray[importCount].range, character.strength, importedWeapons["weaponMass"+ID], script_name); + + // Check for max range in notes. + if (weaponsArray[importCount].notes !== "") { + tempString = weaponsArray[importCount].notes; + importedWeapons["weaponRange"+ID] = getWeaponMaxRange(tempString, script_name); + } else { + importedWeapons["weaponRange"+ID] = 0; + } + // Get weapon mass. if (weaponsArray[importCount].mass !== "") { tempString = weaponsArray[importCount].mass; @@ -963,9 +974,6 @@ } else { importedWeapons["weaponMass"+ID] = 0; } - - // Calculate thrown weapon range or assign range without units. - importedWeapons["weaponRange"+ID] = getWeaponRange(weaponsArray[importCount].range, character.strength, importedWeapons["weaponMass"+ID], script_name); } } @@ -4180,8 +4188,38 @@ } + var getWeaponMaxRange = function (inputString, script_name) { + let outcome = ""; + let startPosition = 0; + let endPosition = 0; + + inputString = inputString.toLowerCase(); + + if (inputString.includes("max range")) { + startPosition = inputString.indexOf("max range"); + outcome = inputString.slice(startPosition); + if (outcome.includes(';')) { + endPosition = outcome.indexOf(';'); + outcome = outcome.slice(0, endPosition); + } else if (outcome.includes(')')) { + endPosition = outcome.indexOf(')'); + outcome = outcome.slice(0, endPosition); + } else { + endPosition = Math.min(16, outcome.length); + outcome = outcome.slice(0, endPosition); + } + outcome = outcome.replace(/[^\d,-]/g, ""); + if (outcome.includes(',')) { + outcome = outcome.replace(',', ", "); + } + } + + return outcome.trim(); + } + + var getArmorLocations = function (inputString, script_name) { - let locations = ""; + let outcome = ""; let startPosition = 0; let endPosition = 0; @@ -4189,41 +4227,41 @@ if (inputString.includes("location")) { startPosition = inputString.indexOf("location"); - locations = inputString.slice(startPosition); - if (locations.includes(';')) { - endPosition = locations.indexOf(';'); - locations = locations.slice(0,endPosition); - } else if (locations.includes(')')) { - endPosition = locations.indexOf(')'); - locations = locations.slice(0,endPosition); + outcome = inputString.slice(startPosition); + if (outcome.includes(';')) { + endPosition = outcome.indexOf(';'); + outcome = outcome.slice(0, endPosition); + } else if (outcome.includes(')')) { + endPosition = outcome.indexOf(')'); + outcome = outcome.slice(0, endPosition); } else { - endPosition = Math.min(28, locations.length); - locations = locations.slice(0,endPosition); + endPosition = Math.min(28, outcome.length); + outcome = outcome.slice(0, endPosition); } - locations = locations.replace(/[^\d,-]/g, ""); - if (locations.includes(',')) { - locations = locations.replace(',', ", "); + outcome = outcome.replace(/[^\d,-]/g, ""); + if (outcome.includes(',')) { + outcome = outcome.replace(',', ", "); } } else if (inputString.includes("loc")) { startPosition = inputString.indexOf("loc"); - locations = inputString.slice(startPosition); - if (locations.includes(';')) { - endPosition = locations.indexOf(';'); - locations = locations.slice(0,endPosition); - } else if (locations.includes(')')) { - endPosition = locations.indexOf(')'); - locations = locations.slice(0,endPosition); + outcome = inputString.slice(startPosition); + if (outcome.includes(';')) { + endPosition = outcome.indexOf(';'); + outcome = outcome.slice(0, endPosition); + } else if (outcome.includes(')')) { + endPosition = outcome.indexOf(')'); + outcome = outcome.slice(0, endPosition); } else { - endPosition = Math.min(11, locations.length); - locations = locations.slice(0,endPosition); + endPosition = Math.min(11, outcome.length); + outcome = outcome.slice(0, endPosition); } - locations = locations.replace(/[^\d,-]/g, ""); - if (locations.includes(',')) { - locations = locations.replace(',', ", "); + outcome = outcome.replace(/[^\d,-]/g, ""); + if (outcome.includes(',')) { + outcome = outcome.replace(',', ", "); } } - return locations.trim(); + return outcome.trim(); } diff --git a/HeroSystem6eHeroic_HDImporter/README.MD b/HeroSystem6eHeroic_HDImporter/README.MD index 9e20d00e8..a450cbdf3 100644 --- a/HeroSystem6eHeroic_HDImporter/README.MD +++ b/HeroSystem6eHeroic_HDImporter/README.MD @@ -65,7 +65,17 @@ At present, the character sheet has twenty power, ten talent, and ten complicati Powers that add (or subtract) characteristics, movement, and perception abilities should be applied in the appropriate modifier fields. -If your campaign uses the optional rule of applying END costs to armor, HD Importer will recognize (X END/Turn) or (END/Turn: X) in equipment notes. +> [!TIP] +> HD Importer will recognize the following key phrases if added to a piece of equipment's notes and attempt to automatically apply the value given. + +### (Max Range: X) +A weapon's maximum range. + +### (locations: U-V, X-Y, Z) or (loc U-V) +Armor locations + +### (X END/Turn) or (END/Turn: X) +If your campaign uses the optional rule of applying END costs to armor, HD Importer will automatically apply the value X. # Help @@ -114,3 +124,5 @@ Version 2.0 -- Updated to support additional character sheet features as of shee Version 2.1 -- Updated to support additional character sheet features as of sheet version 3.16. Updated version of Hero Designer export format (HeroSystem6eHeroic.hde to version 2.1). Expands support for martial arts maneuvers. Recognizes power notes and scans powers for damage advantages. Adds the everyman PS skill. Added a second sample character with martial arts skills. Bug fixes (August 9, 2024). Version 2.2 -- Fix for compound power import failure. Recognizes Mental Combat Skill Levels and assigns levels and costs. Minor update to HeroSystem6eHeroic.hde (version 2.2). Improved formatting of text in powers, talents, and complications (September 14, 2024). + +Version 2.3 -- From 65317f6a7b1f4cbc1bd56213a88130f56edc6e09 Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Tue, 5 Nov 2024 00:09:00 -0700 Subject: [PATCH 05/21] Recognizes extra copies of equipment and weapons. --- .../2.3/HeroSystem6eHeroic_HDImporter.js | 116 ++++++++++++++++-- HeroSystem6eHeroic_HDImporter/README.MD | 7 +- 2 files changed, 109 insertions(+), 14 deletions(-) diff --git a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js index eec08b969..a96766e00 100644 --- a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js +++ b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js @@ -712,6 +712,7 @@ let subStringA; let subStringB; let sampleSize; + let itemNumber; // Needed for adjusted damage. let advantage = 0; @@ -745,7 +746,7 @@ let imported = 0; let ID = "01"; - // Imports sixteen martial arts maneuvers, skipping empty slots. + // Imports sixteen piece of equipment, skipping empty slots. for (importCount = 1; importCount <= maxEquipment; importCount++) { @@ -860,8 +861,25 @@ // Get item mass. if (equipmentListArray[importCount].mass !== "") { + + // Check for additional copies in notes. + if (equipmentListArray[importCount].notes !== "") { + tempString = equipmentListArray[importCount].notes; + + if (tempString.includes("number of items")) { + // Get the number of copies and amend the equipment text. + itemNumber = getItemNumber(tempString); + importedEquipment["equipText"+ID] += " (" + (itemNumber).toString() + ")"; + } else { + itemNumber = 1; + } + } else { + itemNumber = 1; + } + + // Multiply the base mass by the number of copies. tempString = equipmentListArray[importCount].mass; - importedEquipment["equipMass"+ID] = getItemMass(tempString, script_name); + importedEquipment["equipMass"+ID] = itemNumber * getItemMass(tempString, script_name); } else { importedEquipment["equipMass"+ID] = 0; } @@ -970,14 +988,40 @@ // Get weapon mass. if (weaponsArray[importCount].mass !== "") { tempString = weaponsArray[importCount].mass; - importedWeapons["weaponMass"+ID] = getItemMass(tempString, script_name); + tempValue = getItemMass(tempString, script_name); + importedWeapons["weaponMass"+ID] = tempValue; + + // Check for a note on additional copies. + if (weaponsArray[importCount].notes !== "") { + tempString = weaponsArray[importCount].notes; + + if (tempString.includes("number of items")) { + if (equipmentListArrayIndex < maxEquipment) { + itemNumber = getItemNumber(tempString); + + // Fill in ammunition quantity if it hasn't already been assigned. + if (importedWeapons["weaponShots"+ID] === 0) { + importedWeapons["weaponShots"+ID] = itemNumber; + } + + // Assign copies to an open equipment slot. ID changes to the equipment slot. + equipmentListArrayIndex++; + ID = String(equipmentListArrayIndex).padStart(2,'0'); + + tempString = weaponsArray[importCount].name; + tempString += " (" + (itemNumber-1).toString() + ")"; + + importedWeapons["equipText"+ID] = tempString; + importedWeapons["equipMass"+ID] = (itemNumber-1) * tempValue; + } + } + } } else { importedWeapons["weaponMass"+ID] = 0; } - } - + } } - + // Import weapons. importedWeapons.weaponStates = weaponStates; @@ -2402,11 +2446,19 @@ } else if (theSkill.display === ("Weapon Familiarity")) { // Weapon familiarity skill line. - // There should be only one line since Hero Designer lumps them together. + // There will probably be only one line since Hero Designer lumps them together. // We need to break them up. let tempString = theSkill.text; tempString = tempString.replace(/\s\s+/g, " "); + + // Special skillsets to rename. + tempString = tempString.replace("Thrown Knives, Axes, and Darts", "Thrown Weapons"); + tempString = tempString.replace("Javelins and Thrown Spears", "Thrown Spears"); + tempString = tempString.replace("Axes, Maces, Hammers, and Picks", "Hafted Weapons"); + + // Drop WF: tempString = tempString.replace("WF: ", ""); + let weaponFamArrayLength = (tempString.split(",").length - 1); let weaponFamArray = new Array(weaponFamArrayLength); @@ -2939,8 +2991,8 @@ let attribute = skillObject.attribute; let text = skillObject.text; let type = "none"; - let base = skillObject.base; - let levels = skillObject.levels; + let base = parseInt(skillObject.base); + let levels = parseInt(skillObject.levels); let cost = skillObject.cost; if (skillObject.display === ("Skill Levels")) { @@ -2991,6 +3043,33 @@ } else if (text.startsWith("PS")) { // Professional skill. type = "ps"; + } else if (text.includes("Survival") || text.includes("Gambling")) { + // Special skills. + if (text.includes("8-")) { + // It is not clear if a familiarity skill should be odd or even from the costs. + if (base === 1) { + type = "sp2"; + } else if (base === 2) { + type = "sp4"; + } else { + type = "sp6"; + } + } else { + if ((base-levels*2) === 1) { + type = "sp1"; + } else if ((base-levels*2) === 2) { + type = "sp2"; + } else if ((base-levels*2) === 3) { + type = "sp3"; + } else if ((base-levels*2) === 4) { + type = "sp4"; + } else if ((base-levels*2) === 5) { + type = "sp5"; + } else { + // Default of six-point skills unless there is call for higher. + type = "sp6"; + } + } } else if (attribute === "INT") { // Intellect skill. type = "int"; @@ -4218,6 +4297,25 @@ } + var getItemNumber = function (inputString, script_name) { + let outcome = ""; + let startPosition = 0; + let endPosition = 0; + + inputString = inputString.toLowerCase(); + + if (inputString.includes("number of items")) { + endPosition = inputString.indexOf("number of items"); + startPosition = Math.max(endPosition - 3, 1); + outcome = inputString.slice(startPosition, endPosition); + outcome = outcome.replace(/[^\d,-]/g, ""); + outcome = parseInt(outcome)||0; + } + + return outcome; + } + + var getArmorLocations = function (inputString, script_name) { let outcome = ""; let startPosition = 0; diff --git a/HeroSystem6eHeroic_HDImporter/README.MD b/HeroSystem6eHeroic_HDImporter/README.MD index a450cbdf3..e5a0a0287 100644 --- a/HeroSystem6eHeroic_HDImporter/README.MD +++ b/HeroSystem6eHeroic_HDImporter/README.MD @@ -66,14 +66,11 @@ At present, the character sheet has twenty power, ten talent, and ten complicati Powers that add (or subtract) characteristics, movement, and perception abilities should be applied in the appropriate modifier fields. > [!TIP] -> HD Importer will recognize the following key phrases if added to a piece of equipment's notes and attempt to automatically apply the value given. +> HD Importer will recognize the following key phrases if added to a piece of equipment's notes and attempts to automatically apply the value given (parentheses are not strictly required). -### (Max Range: X) +### (Max Range: Xm) or (max range X) A weapon's maximum range. -### (locations: U-V, X-Y, Z) or (loc U-V) -Armor locations - ### (X END/Turn) or (END/Turn: X) If your campaign uses the optional rule of applying END costs to armor, HD Importer will automatically apply the value X. From 0cee75db112a53c28abafcb7a83c2d7c5a67f3f9 Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Tue, 5 Nov 2024 00:40:47 -0700 Subject: [PATCH 06/21] Fixed knowledge skill type assignment at familiarity level. --- .../2.3/HeroSystem6eHeroic_HDImporter.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js index a96766e00..3b0b04943 100644 --- a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js +++ b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js @@ -3007,31 +3007,31 @@ } else if ((base === "0") && (cost === "0")) { // Everyman skill. type = "everyman"; - } else if (text.startsWith("KS") && ((base-levels) === 2)) { + } else if (text.startsWith("KS") && ((base-levels) <= 2)) { // Knowledge Skill type = "ks"; } else if (text.startsWith("KS") && ((base-levels) === 3)) { // Knowledge Skill based on INT. type = "intKS"; - } else if (text.startsWith("CK") && ((base-levels) === 2)) { + } else if (text.startsWith("CK") && ((base-levels) <= 2)) { // City Knowledge Skill type = "ck"; } else if (text.startsWith("CK") && ((base-levels) === 3)) { // City Knowledge Skill based on INT. type = "intCK"; - } else if (text.startsWith("CuK") && ((base-levels) === 2)) { + } else if (text.startsWith("CuK") && ((base-levels) <= 2)) { // Culture Knowledge Skill type = "cuk"; } else if (text.startsWith("CuK") && ((base-levels) === 3)) { // Culture Knowledge Skill based on INT. type = "intCuK"; - } else if (text.startsWith("Science Skill") && ((base-levels) === 2)) { + } else if (text.startsWith("Science Skill") && ((base-levels) <= 2)) { // Science Skill type = "ss"; } else if (text.startsWith("Science Skill") && ((base-levels) === 3)) { // Science Skill based on INT. type = "intSS"; - } else if (text.startsWith("AK") && ((base-levels) === 2)) { + } else if (text.startsWith("AK") && ((base-levels) <= 2)) { // Area Knowledge. type = "ak"; } else if (text.startsWith("AK") && ((base-levels) === 3)) { From 348cafdafaac6c622ed551719ed99ba01c4f3b42 Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Tue, 5 Nov 2024 22:30:16 -0700 Subject: [PATCH 07/21] Removes Active Points in skill names due to skill enhancers. --- .../2.3/HeroSystem6eHeroic_HDImporter.js | 49 +++++++++++++++++-- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js index 3b0b04943..46c76481d 100644 --- a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js +++ b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js @@ -42,7 +42,7 @@ (function() { // Constants const versionMod = "2.3"; - const versionSheet = "3.51"; // Note that a newer sheet will make upgrades as well as it can. + const versionSheet = "3.71"; // Note that a newer sheet will make upgrades as well as it can. const needsExportedVersion = new Set(["1.0", "2.0", "2.1", "2.2"]); // HeroSystem6eHeroic.hde versions allowed. const defaultAttributes = { @@ -561,12 +561,18 @@ while ( (importCount < maneuverSlots) && (importCount < maneuverArrayIndex) ) { if (importCount < maneuverArrayIndex) { ID = String(importCount+1).padStart(2,'0'); + tempString = maneuverArray[importCount].name; - if ( maneuverArray[importCount].name.length > nameMax) { - importedManeuvers["martialManeuverName"+ID] = maneuverArray[importCount].name.slice(0, nameMax); + if ( tempString.includes("Weapon Element") ) { + tempString = tempString.replace("Weapon Element", "Element"); + } + + if ( tempString.length > nameMax) { + tempString = tempString.slice(0, nameMax); + importedManeuvers["martialManeuverName"+ID] = tempString; importedManeuvers["martialManeuverEffect"+ID] = maneuverArray[importCount].name + '\n' + maneuverArray[importCount].effect; } else { - importedManeuvers["martialManeuverName"+ID] = maneuverArray[importCount].name; + importedManeuvers["martialManeuverName"+ID] = tempString; importedManeuvers["martialManeuverEffect"+ID] = maneuverArray[importCount].effect; } @@ -3099,10 +3105,16 @@ type = "combat"; } + // Remove unwanted text from skills influenced by enhancers. + if (text.includes("Active Points")) { + text = removeEnhancerText(text); + } + // Try to find the best name of the skill. // It may be in .name, .text, or .display. let name = skillObject.name; + if (name === "") { if ((text !== "") && text.includes("AK: ")) { name = text.replace("AK: ", ""); @@ -3152,6 +3164,35 @@ } + var removeEnhancerText = function(name) { + let startPosition; + let endPosition; + let subStringA; + let subStringB; + + if (name.includes("Active Points")) { + // Split the name into two parts on each side of Active Points. + startPosition = name.indexOf("Active Points"); + endPosition = startPosition+13; + subStringA = name.slice(0, startPosition); + subStringB = name.slice(endPosition); + + // Remove text "XY- (Z " at the end of subStringA. + endPosition = subStringA.lastIndexOf('(') - 3; + subStringA = subStringA.slice(0,endPosition); + + // Remove the first ')' in subStringB. + startPosition = subStringB.indexOf(')'); + subStringB = subStringB.slice(startPosition); + + // Join the subStrings to make a new name. + name = subStringA + subStringB; + } + + return name; + } + + var findEndurance = function(testObject) { // Determine endurance type, advantages, and limitations. // Remove advantage or limitation from tempString so that they aren't counted twice. From b1d00934ce6bc4081c32e8c70f20f28ad7962038 Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Wed, 6 Nov 2024 14:15:46 -0700 Subject: [PATCH 08/21] Limited mass of additional equipment copies to one decimal place. --- .../2.3/HeroSystem6eHeroic_HDImporter.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js index 46c76481d..330dfe9c0 100644 --- a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js +++ b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js @@ -533,6 +533,7 @@ let temp = 0; let tempString = ""; let diceString = ""; + let tempValue = 0; let tempPosition = 0; const maxManeuvers = 20; const maneuverSlots = 10; @@ -884,8 +885,9 @@ } // Multiply the base mass by the number of copies. - tempString = equipmentListArray[importCount].mass; - importedEquipment["equipMass"+ID] = itemNumber * getItemMass(tempString, script_name); + tempValue = itemNumber * getItemMass(equipmentListArray[importCount].mass, script_name); + tempValue = Math.round(10*tempValue)/10; + importedEquipment["equipMass"+ID] = tempValue; } else { importedEquipment["equipMass"+ID] = 0; } @@ -908,7 +910,6 @@ let importedWeapons = new Array(); const maxAdvantage = 1; const maxWeapons = 5; - let tempValue = 0; importCount = 0; imported = 0; @@ -1016,9 +1017,10 @@ tempString = weaponsArray[importCount].name; tempString += " (" + (itemNumber-1).toString() + ")"; - importedWeapons["equipText"+ID] = tempString; - importedWeapons["equipMass"+ID] = (itemNumber-1) * tempValue; + tempValue = (itemNumber-1) * tempValue; + tempValue = Math.round(10*tempValue)/10; + importedWeapons["equipMass"+ID] = tempValue; } } } @@ -3165,6 +3167,8 @@ var removeEnhancerText = function(name) { + // Here a .replace() function doesn't work because the text to be removed is + // of the form "xx- (x Active Points)." let startPosition; let endPosition; let subStringA; @@ -4339,7 +4343,7 @@ var getItemNumber = function (inputString, script_name) { - let outcome = ""; + let outcome = "1"; let startPosition = 0; let endPosition = 0; @@ -4350,10 +4354,9 @@ startPosition = Math.max(endPosition - 3, 1); outcome = inputString.slice(startPosition, endPosition); outcome = outcome.replace(/[^\d,-]/g, ""); - outcome = parseInt(outcome)||0; } - return outcome; + return parseInt(outcome)||1; } From 23e2e71a72cc0b8678dbf0aea08651342d10e9cb Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Wed, 6 Nov 2024 22:26:12 -0700 Subject: [PATCH 09/21] Display quantity only for multiple extra weapons in equipment. --- .../2.3/HeroSystem6eHeroic_HDImporter.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js index 330dfe9c0..5eb6e2239 100644 --- a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js +++ b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js @@ -1016,7 +1016,11 @@ ID = String(equipmentListArrayIndex).padStart(2,'0'); tempString = weaponsArray[importCount].name; - tempString += " (" + (itemNumber-1).toString() + ")"; + + if (itemNumber > 2) { + tempString += " (" + (itemNumber-1).toString() + ")"; + } + importedWeapons["equipText"+ID] = tempString; tempValue = (itemNumber-1) * tempValue; tempValue = Math.round(10*tempValue)/10; From ee1171d4140a179416119f360b3998d3d632463f Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Wed, 6 Nov 2024 22:51:16 -0700 Subject: [PATCH 10/21] Fixed basic fluency being mislabeled as native fluency for linguists. --- .../2.3/HeroSystem6eHeroic_HDImporter.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js index 5eb6e2239..b72926f42 100644 --- a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js +++ b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js @@ -2649,9 +2649,7 @@ // Determine fluency. if (tempString.includes("native")) { fluency = "native"; - } else if (cost == 0) { - fluency = "native"; - } else if ((cost == 1) && (tempString.includes("literate"))) { + } else if (cost === 0) { fluency = "native"; } else if (tempString.includes("basic")) { fluency = "basic"; @@ -2663,6 +2661,8 @@ fluency = "idiomatic"; } else if (tempString.includes("imitate")) { fluency = "imitate"; + } else if ((cost === 1) && (tempString.includes("literate"))) { + fluency = "native"; } else { fluency = "none"; } From 0d8e86b72420e68671a98f98c8e1a273b798a641 Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Sun, 10 Nov 2024 00:51:31 -0700 Subject: [PATCH 11/21] Added cost to language skill import. --- .../2.3/HeroSystem6eHeroic_HDImporter.js | 180 ++++++------------ 1 file changed, 61 insertions(+), 119 deletions(-) diff --git a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js index b72926f42..ce039d072 100644 --- a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js +++ b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js @@ -43,7 +43,7 @@ // Constants const versionMod = "2.3"; const versionSheet = "3.71"; // Note that a newer sheet will make upgrades as well as it can. - const needsExportedVersion = new Set(["1.0", "2.0", "2.1", "2.2"]); // HeroSystem6eHeroic.hde versions allowed. + const needsExportedVersion = new Set(["1.0", "2.0", "2.1", "2.2", "2.3"]); // HeroSystem6eHeroic.hde versions allowed. const defaultAttributes = { @@ -262,11 +262,13 @@ sendChat(script_name, ' Import of ' + character.character_name + ' started.', null, {noarchive:true}); if (character.version === "1.0") { - sendChat(script_name, "Exported from HERO Designer with \n HeroSystem6eHeroic.hde v1.0. \n Version 2.2 supports additional content."); + sendChat(script_name, "Exported from HERO Designer with \n HeroSystem6eHeroic.hde v1.0. \n Version 2.3 supports additional content."); } else if (character.version === "2.0") { - sendChat(script_name, "Exported from HERO Designer with \n HeroSystem6eHeroic.hde v2.0. \n Version 2.2 supports additional content."); + sendChat(script_name, "Exported from HERO Designer with \n HeroSystem6eHeroic.hde v2.0. \n Version 2.3 supports additional content."); } else if (character.version === "2.1") { - sendChat(script_name, "Exported from HERO Designer with \n HeroSystem6eHeroic.hde v2.1. \n Version 2.2 is available."); + sendChat(script_name, "Exported from HERO Designer with \n HeroSystem6eHeroic.hde v2.1. \n Version 2.3 supports additional content."); + } else if (character.version === "2.2") { + sendChat(script_name, "Exported from HERO Designer with \n HeroSystem6eHeroic.hde v2.2. \n Version 2.3 supports additional content."); } object = null; @@ -565,7 +567,7 @@ tempString = maneuverArray[importCount].name; if ( tempString.includes("Weapon Element") ) { - tempString = tempString.replace("Weapon Element", "Element"); + tempString = tempString.replace("Weapon Element", "WE"); } if ( tempString.length > nameMax) { @@ -748,14 +750,14 @@ let weaponStates = "KKKKKNOOOOOO"; // Read equipment - const maxEquipment = 16; + const maxGear = (character.version >= parseFloat("2.3")||0) ? 42 : 16; let importCount = 0; let imported = 0; let ID = "01"; - // Imports sixteen piece of equipment, skipping empty slots. + // Imports either 42 or 16 pieces of equipment (for version < 2.3), skipping empty slots. - for (importCount = 1; importCount <= maxEquipment; importCount++) { + for (importCount = 1; importCount <= maxGear; importCount++) { ID = String(importCount).padStart(2,'0'); @@ -835,7 +837,7 @@ setAttrs(object.id, {treasures: tempString}); - // Show the Treasures Gear Tab slide where the multipower equipment will appear. + // Show the Treasures Gear Tab slide where details of equipment will appear. setAttrs(object.id, {gearSlideSelection: 3}); } @@ -843,6 +845,7 @@ // Assign to character sheet Equipment List. let importedEquipment = new Array(); + const maxEquipment = 16; importCount = 0; imported = 0; @@ -909,14 +912,15 @@ let importedWeapons = new Array(); const maxAdvantage = 1; - const maxWeapons = 5; + const maxWeapons = 10; importCount = 0; imported = 0; for (importCount = 0; importCount < maxWeapons; importCount++) { - - ID = String(importCount+1).padStart(2,'0'); + + // Weapons 6-10 are numbered 11-15 within the Set A/B framework of the sheet. + ID = (importCount < 5) ? String(importCount+1).padStart(2,'0') : String(importCount+6).padStart(2,'0'); if (importCount < weaponsArrayIndex) { imported += 1; @@ -1003,7 +1007,7 @@ tempString = weaponsArray[importCount].notes; if (tempString.includes("number of items")) { - if (equipmentListArrayIndex < maxEquipment) { + if (equipmentListArrayIndex < maxGear) { itemNumber = getItemNumber(tempString); // Fill in ammunition quantity if it hasn't already been assigned. @@ -1048,16 +1052,17 @@ } // Prepare object of armor defenses. Assign to character sheet Armor List. - + let importedArmor = new Array(); - const maxArmor = 4; // The 4th may be overwritten if the character has resistant protection. + const maxArmor = 8; // The 8th piece will be overwritten if the character has resistant protection. importCount = 0; imported = 0; for (importCount = 0; importCount < maxArmor; importCount++) { - - ID = String(importCount+1).padStart(2,'0'); + + // Armor pieces 5-8 are numbered 11-14 within the Set A/B framework of the sheet. + ID = (importCount < 4) ? String(importCount+1).padStart(2,'0') : String(importCount+7).padStart(2,'0'); tempString = "none"; if (importCount < armorArrayIndex) { @@ -1156,7 +1161,7 @@ for (let i=0; i < equipmentMultipowers.length; i++) { // Get next multipower index. - shieldSearchIndex=equipmentMultipowers[i]; + shieldSearchIndex = equipmentMultipowers[i]; tempString = multipowerArray[shieldSearchIndex].name; tempString = tempString.toLowerCase(); @@ -1235,9 +1240,6 @@ if (i+2 > equipmentMultipowers.length) { // Shield is the last multipower in the list. for (let j = shieldSearchIndex; j0) { - charMod.armorPD04 += tempValue; + charMod.armorPD14 += tempValue; if ( (specialArray.some(v => tempString.includes(v))) != true) { // We don't want to add overall modifications for special cases. charMod.pdMod += tempValue; } if (!pdAddedToTotal) { - charMod.totalPD04 = tempValue + parseInt(character.pd); + charMod.totalPD14 = tempValue + parseInt(character.pd); pdAddedToTotal = true; } else { - charMod.totalPD04 += tempValue; + charMod.totalPD14 += tempValue; } - charMod.armorName04 = importedPowers["powerName"+ID]; - charMod.armorLocations04 = "3-18"; + charMod.armorName14 = importedPowers["powerName"+ID]; + charMod.armorLocations14 = "3-18"; tempObject = (requiresRoll(powerArray[importCount].text)); if (tempObject.hasRoll) { - charMod.armorActivation04 = tempObject.skillRoll; + charMod.armorActivation14 = tempObject.skillRoll; } else { - charMod.armorActivation04 = 18; + charMod.armorActivation14 = 18; } } tempValue = getResistantED(powerArray[importCount].text, script_name); if (tempValue > 0) { - charMod.armorED04 += tempValue; + charMod.armorED14 += tempValue; if ( (specialArray.some(v => tempString.includes(v))) != true) { // We don't want to add overall modifications for special cases. charMod.edMod += tempValue; } if (!edAddedToTotal) { - charMod.totalED04 = tempValue + parseInt(character.ed); + charMod.totalED14 = tempValue + parseInt(character.ed); edAddedToTotal = true; } else { - charMod.totalED04 += tempValue; + charMod.totalED14 += tempValue; } - charMod.armorName04 = importedPowers["powerName"+ID]; - charMod.armorLocations04 = "3-18"; + charMod.armorName14 = importedPowers["powerName"+ID]; + charMod.armorLocations14 = "3-18"; tempObject = (requiresRoll(powerArray[importCount].text)); if (tempObject.hasRoll) { - charMod.armorActivation04 = tempObject.skillRoll; + charMod.armorActivation14 = tempObject.skillRoll; } else { - charMod.armorActivation04 = 18; + charMod.armorActivation14 = 18; } } } @@ -2033,18 +2035,18 @@ } if ( (powerArray[importCount].text).includes("Resistant")) { - charMod.armorPD04 += parseInt(character.pd); + charMod.armorPD14 += parseInt(character.pd); if (!pdAddedToTotal) { - charMod.totalPD04 += parseInt(character.pd); + charMod.totalPD14 += parseInt(character.pd); pdAddedToTotal = true; } - charMod.armorName04 = importedPowers["powerName"+ID]; - charMod.armorLocations04 = "3-18"; + charMod.armorName14 = importedPowers["powerName"+ID]; + charMod.armorLocations14 = "3-18"; tempObject = (requiresRoll(powerArray[importCount].text)); if (tempObject.hasRoll) { - charMod.armorActivation04 = tempObject.skillRoll; + charMod.armorActivation14 = tempObject.skillRoll; } else { - charMod.armorActivation04 = 18; + charMod.armorActivation14 = 18; } } } @@ -2055,18 +2057,18 @@ } if ( (powerArray[importCount].text).includes("Resistant") ) { - charMod.armorED04 += parseInt(character.ed); + charMod.armorED14 += parseInt(character.ed); if (!edAddedToTotal) { - charMod.totalED04 += parseInt(character.ed); + charMod.totalED14 += parseInt(character.ed); edAddedToTotal = true; } - charMod.armorName04 = importedPowers["powerName"+ID]; - charMod.armorLocations04 = "3-18"; + charMod.armorName14 = importedPowers["powerName"+ID]; + charMod.armorLocations14 = "3-18"; tempObject = (requiresRoll(powerArray[importCount].text)); if (tempObject.hasRoll) { - charMod.armorActivation04 = tempObject.skillRoll; + charMod.armorActivation14 = tempObject.skillRoll; } else { - charMod.armorActivation04 = 18; + charMod.armorActivation14 = 18; } } } @@ -2628,8 +2630,10 @@ // This function is called when a skill is identified as an enhancer. // The skills' text will determine which enhancer it is. // let languages; - - let language; + + var ID = String(languageIndex+41).padStart(2,'0'); + var language = new Object(); + let name = languageObject.name; let tempString = languageObject.text; if (name === "") { @@ -2649,8 +2653,10 @@ // Determine fluency. if (tempString.includes("native")) { fluency = "native"; - } else if (cost === 0) { + } else if ( tempString.includes("idiomatic") && (cost < 2)) { fluency = "native"; + } else if ( tempString.includes("imitate") && (cost < 3)) { + fluency = "nativePlus"; } else if (tempString.includes("basic")) { fluency = "basic"; } else if (tempString.includes("completely")) { @@ -2661,8 +2667,6 @@ fluency = "idiomatic"; } else if (tempString.includes("imitate")) { fluency = "imitate"; - } else if ((cost === 1) && (tempString.includes("literate"))) { - fluency = "native"; } else { fluency = "none"; } @@ -2676,72 +2680,10 @@ } // Assign this language to the character sheet. - - switch(languageIndex) { - case 0: - language = { - skillName41: name, - skillFluency41: fluency, - skillLiteracy41: literacy - } - break; - case 1: - language = { - skillName42: name, - skillFluency42: fluency, - skillLiteracy42: literacy - } - break; - case 2: - language = { - skillName43: name, - skillFluency43: fluency, - skillLiteracy43: literacy - } - break; - case 3: - language = { - skillName44: name, - skillFluency44: fluency, - skillLiteracy44: literacy - } - break; - case 4: - language = { - skillName45: name, - skillFluency45: fluency, - skillLiteracy45: literacy - } - break; - case 5: - language = { - skillName46: name, - skillFluency46: fluency, - skillLiteracy46: literacy - } - break; - case 6: - language = { - skillName47: name, - skillFluency47: fluency, - skillLiteracy47: literacy - } - break; - case 7: - language = { - skillName48: name, - skillFluency48: fluency, - skillLiteracy48: literacy - } - break; - default: - // Last language slot available. - language = { - skillName49: name, - skillFluency49: fluency, - skillLiteracy49: literacy - } - } + language["skillName"+ID] = name; + language["skillFluency"+ID] = fluency; + language["skillLiteracy"+ID] = literacy; + language["skillCP"+ID] = cost; setAttrs(object.id, language); From d5d1a16fc614550b4df803297e34517f4716874f Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Sun, 10 Nov 2024 01:05:08 -0700 Subject: [PATCH 12/21] Added Forgery to Special Cost skills. --- .../2.3/HeroSystem6eHeroic_HDImporter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js index ce039d072..22414bf78 100644 --- a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js +++ b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js @@ -2997,7 +2997,7 @@ } else if (text.startsWith("PS")) { // Professional skill. type = "ps"; - } else if (text.includes("Survival") || text.includes("Gambling")) { + } else if (text.includes("Survival") || text.includes("Gambling") || text.includes("Forgery")) { // Special skills. if (text.includes("8-")) { // It is not clear if a familiarity skill should be odd or even from the costs. From 7f7229bbcee02d93f5ff8c53a6bbd45c9ba00737 Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:34:02 -0700 Subject: [PATCH 13/21] Added equipment keyword and fixed everyman PS. --- .../2.3/HeroSystem6eHeroic_HDImporter.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js index 22414bf78..bb02e2421 100644 --- a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js +++ b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js @@ -773,13 +773,13 @@ multipowerArray[multipowerArrayIndex]=equipmentArray[equipmentArrayIndex]; multipowerArrayIndex++; - } else if ((equipmentArray[equipmentArrayIndex].defense !== "") && (equipmentArray[equipmentArrayIndex].defense === "true")) { + } else if ((equipmentArray[equipmentArrayIndex].defense !== "") && (equipmentArray[equipmentArrayIndex].defense === "true") && (equipmentArray[equipmentArrayIndex].notes.toLowerCase().includes("equipment") !== true)) { // If the item is a defense add it to the armor list. // This will need to be updated for shields. armorArray[armorArrayIndex]=equipmentArray[equipmentArrayIndex]; armorArrayIndex++; - } else if ((equipmentArray[equipmentArrayIndex].attack !== "") && (equipmentArray[equipmentArrayIndex].damage !== "") && (equipmentArray[equipmentArrayIndex].attack === "true")) { + } else if ((equipmentArray[equipmentArrayIndex].attack !== "") && (equipmentArray[equipmentArrayIndex].damage !== "") && (equipmentArray[equipmentArrayIndex].attack === "true") && (equipmentArray[equipmentArrayIndex].notes.toLowerCase().includes("equipment") !== true) ) { // If the item is a damage attack add it to the weapon list. weaponsArray[weaponsArrayIndex]=equipmentArray[equipmentArrayIndex]; weaponsArrayIndex++; @@ -2955,9 +2955,9 @@ } else if (skillObject.text.includes("three pre-defined Skills")) { // Three-group skill. type = "group"; - } else if ((base === "0") && (cost === "0") && skillObject.text.includes("11-")) { - // Everyman professional skill. - type = "everymanPS"; + } else if (text.startsWith("PS")) { + // Professional skill. + type = (cost === "0") ? "everymanPS" : "ps"; } else if ((base === "0") && (cost === "0")) { // Everyman skill. type = "everyman"; @@ -2994,9 +2994,6 @@ } else if (text.startsWith("TF")) { // Transport familiarity. type = "tf"; - } else if (text.startsWith("PS")) { - // Professional skill. - type = "ps"; } else if (text.includes("Survival") || text.includes("Gambling") || text.includes("Forgery")) { // Special skills. if (text.includes("8-")) { From b2e0dd07a77f71229b55f615b3c38fbe8ede74b3 Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Tue, 12 Nov 2024 16:09:22 -0700 Subject: [PATCH 14/21] Cleanup to appearane of additional maneuvers in treasures. --- .../2.3/HeroSystem6eHeroic_HDImporter.js | 74 ++++++++++--------- 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js index bb02e2421..2000fb176 100644 --- a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js +++ b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic_HDImporter.js @@ -42,7 +42,7 @@ (function() { // Constants const versionMod = "2.3"; - const versionSheet = "3.71"; // Note that a newer sheet will make upgrades as well as it can. + const versionSheet = "3.8"; // Note that a newer sheet will make upgrades as well as it can. const needsExportedVersion = new Set(["1.0", "2.0", "2.1", "2.2", "2.3"]); // HeroSystem6eHeroic.hde versions allowed. const defaultAttributes = { @@ -660,19 +660,22 @@ if (maneuverArrayIndex > maneuverSlots) { let extras = 0; + tempString = "Additional Maneuvers \n"; + for (let i = maneuverSlots; i < maneuverArrayIndex; i++) { - tempString = tempString + maneuverArray[i].name + "\n"; - tempString = tempString + "CP: " + maneuverArray[i].points + "\n"; + tempString += maneuverArray[i].name + '\n'; + tempString += '\t' + "CP: " + maneuverArray[i].points + " "; if (maneuverArray[i].ocv !== "") { - tempString = tempString + "OCV: " + maneuverArray[i].ocv + "\n"; + tempString += "OCV: " + maneuverArray[i].ocv + " "; } if (maneuverArray[i].dcv !== "") { - tempString = tempString + "DCV: " + maneuverArray[i].dcv + "\n"; + tempString += "DCV: " + maneuverArray[i].dcv + " "; } if (maneuverArray[i].phase !== "") { - tempString = tempString + "Phase: " + maneuverArray[i].phase + "\n"; + tempString += "Phase: " + maneuverArray[i].phase + '\n'; } - tempString = tempString + maneuverArray[i].effect + "\n" + "\n"; + tempString += '\t' + maneuverArray[i].effect; + tempString += "\n \n"; extras++; } @@ -684,8 +687,8 @@ } } - if ( (typeof character.treasures != "undefined") && (character.treasures !== "")) { - tempString = character.treasures + '\n' + '\n' + tempString.trim(); + if ( (typeof character.treasures !== "undefined") && (character.treasures !== "")) { + tempString = character.treasures + "\n \n" + tempString.trim(); } else { tempString = tempString.trim(); } @@ -750,7 +753,7 @@ let weaponStates = "KKKKKNOOOOOO"; // Read equipment - const maxGear = (character.version >= parseFloat("2.3")||0) ? 42 : 16; + const maxGear = (character.version >= parseFloat("2.3")||0) ? 50 : 16; let importCount = 0; let imported = 0; let ID = "01"; @@ -835,17 +838,17 @@ tempString = tempString.trim(); } - setAttrs(object.id, {treasures: tempString}); - - // Show the Treasures Gear Tab slide where details of equipment will appear. - setAttrs(object.id, {gearSlideSelection: 3}); + setAttrs(object.id, { + treasures: tempString, + gearSlideSelection: 3 + }); } // Prepare object of items that are not weapons or armor. // Assign to character sheet Equipment List. let importedEquipment = new Array(); - const maxEquipment = 16; + const maxEquipment = 32; importCount = 0; imported = 0; @@ -888,7 +891,7 @@ } // Multiply the base mass by the number of copies. - tempValue = itemNumber * getItemMass(equipmentListArray[importCount].mass, script_name); + tempValue = itemNumber * getItemMass(equipmentListArray[importCount].mass, script_name, 2); tempValue = Math.round(10*tempValue)/10; importedEquipment["equipMass"+ID] = tempValue; } else { @@ -999,7 +1002,7 @@ // Get weapon mass. if (weaponsArray[importCount].mass !== "") { tempString = weaponsArray[importCount].mass; - tempValue = getItemMass(tempString, script_name); + tempValue = getItemMass(tempString, script_name, 1); importedWeapons["weaponMass"+ID] = tempValue; // Check for a note on additional copies. @@ -1124,7 +1127,7 @@ // Get armor mass. if (armorArray[importCount].mass !== "") { tempString = armorArray[importCount].mass; - importedArmor["armorMass"+ID] = getItemMass(tempString, script_name); + importedArmor["armorMass"+ID] = getItemMass(tempString, script_name, 1); } else { importedArmor["armorMass"+ID] = 0; } @@ -1185,7 +1188,7 @@ // Get weapon mass. if (multipowerArray[shieldSearchIndex].mass !== "") { tempString = multipowerArray[shieldSearchIndex].mass; - importedShield.shieldMass = getItemMass(tempString, script_name); + importedShield.shieldMass = getItemMass(tempString, script_name, 1); } else { importedShield.shieldMass = 0; } @@ -1977,15 +1980,15 @@ tempString = (powerArray[importCount].text).toLowerCase(); if (theEffect === "Resistant Protection") { - if ( (typeof powerArray[importCount].text != "undefined") && (powerArray[importCount].text != "") ) { + if ( (typeof powerArray[importCount].text !== "undefined") && (powerArray[importCount].text !== "") ) { if(verbose) { sendChat(script_name, "Created Resistant Protection armor."); } tempValue = getResistantPD(powerArray[importCount].text, script_name); if (tempValue > 0) { - charMod.armorPD14 += tempValue; - if ( (specialArray.some(v => tempString.includes(v))) != true) { + charMod.armorPD14 = tempValue; + if ( (specialArray.some(v => tempString.includes(v))) !== true) { // We don't want to add overall modifications for special cases. charMod.pdMod += tempValue; } @@ -1993,7 +1996,7 @@ charMod.totalPD14 = tempValue + parseInt(character.pd); pdAddedToTotal = true; } else { - charMod.totalPD14 += tempValue; + charMod.totalPD14 = tempValue; } charMod.armorName14 = importedPowers["powerName"+ID]; charMod.armorLocations14 = "3-18"; @@ -2007,8 +2010,8 @@ tempValue = getResistantED(powerArray[importCount].text, script_name); if (tempValue > 0) { - charMod.armorED14 += tempValue; - if ( (specialArray.some(v => tempString.includes(v))) != true) { + charMod.armorED14 = tempValue; + if ( (specialArray.some(v => tempString.includes(v))) !== true) { // We don't want to add overall modifications for special cases. charMod.edMod += tempValue; } @@ -2016,7 +2019,7 @@ charMod.totalED14 = tempValue + parseInt(character.ed); edAddedToTotal = true; } else { - charMod.totalED14 += tempValue; + charMod.totalED14 = tempValue; } charMod.armorName14 = importedPowers["powerName"+ID]; charMod.armorLocations14 = "3-18"; @@ -2029,15 +2032,15 @@ } } } else if (theEffect === "Base PD Mod") { - if ( (typeof powerArray[importCount].text != "undefined") && (powerArray[importCount].text != "") ) { + if ( (typeof powerArray[importCount].text !== "undefined") && (powerArray[importCount].text !== "") ) { if(verbose) { sendChat(script_name, "Added Resistant PD to armor."); } if ( (powerArray[importCount].text).includes("Resistant")) { - charMod.armorPD14 += parseInt(character.pd); + charMod.armorPD14 = parseInt(character.pd); if (!pdAddedToTotal) { - charMod.totalPD14 += parseInt(character.pd); + charMod.totalPD14 = parseInt(character.pd); pdAddedToTotal = true; } charMod.armorName14 = importedPowers["powerName"+ID]; @@ -2051,15 +2054,15 @@ } } } else if (theEffect === "Base ED Mod") { - if ( (typeof powerArray[importCount].text != "undefined") && (powerArray[importCount].text != "") ) { + if ( (typeof powerArray[importCount].text !== "undefined") && (powerArray[importCount].text !== "") ) { if(verbose) { sendChat(script_name, "Added Resistant ED to armor."); } if ( (powerArray[importCount].text).includes("Resistant") ) { - charMod.armorED14 += parseInt(character.ed); + charMod.armorED14 = parseInt(character.ed); if (!edAddedToTotal) { - charMod.totalED14 += parseInt(character.ed); + charMod.totalED14 = parseInt(character.ed); edAddedToTotal = true; } charMod.armorName14 = importedPowers["powerName"+ID]; @@ -4532,13 +4535,14 @@ } - var getItemMass = function(massString, script_name) { - // Remove units from mass and round to one decimal. + var getItemMass = function(massString, script_name, decimalPlaces) { + // Remove units from mass and round to one or two decimal places. let mass = 0; + let roundingFactor = (decimalPlaces === 1) ? 10 : 100; if (massString !== "") { massString = parseFloat(massString.replace(/[^\d.-]/g, "")); - mass = Math.round(10*massString)/10; + mass = Math.round(roundingFactor*massString)/roundingFactor; } return mass; From db14b5559c3e59c2bc41729d5e273111a2e73631 Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Wed, 13 Nov 2024 13:46:32 -0700 Subject: [PATCH 15/21] Updated sample characters, README. --- .../2.3/HeroSystem6eHeroic.hde | 1400 ++++++++++++++++- .../2.3/Sample_Character.TXT | 2 +- .../2.3/Sample_Character.hdc | Bin 127314 -> 166000 bytes .../2.3/Sample_Character_MA.TXT | 2 +- .../2.3/Sample_Character_MA.hdc | Bin 108564 -> 148104 bytes HeroSystem6eHeroic_HDImporter/README.MD | 18 +- HeroSystem6eHeroic_HDImporter/script.json | 4 +- 7 files changed, 1413 insertions(+), 13 deletions(-) diff --git a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic.hde b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic.hde index 60e3a1e55..808d52151 100644 --- a/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic.hde +++ b/HeroSystem6eHeroic_HDImporter/2.3/HeroSystem6eHeroic.hde @@ -1,4 +1,4 @@ -HeroSystem6eHeroic HeroSystem6eHeroic
Version 2.2
Export format for the Roll20 API script HeroSystem6eHeroic_HDImporter, which imports Hero Designer characters into the HeroSystem6eHeroic character sheet.
For documentation see https://github.com/Roll20/roll20-api-scripts/tree/master/HeroSystem6eHeroic_HDImporter
By Villain In Glasses (Roll20 ID 633423)
+HeroSystem6eHeroicHeroSystem6eHeroic
Version 2.3
Export format for the Roll20 API script HeroSystem6eHeroic_HDImporter, which imports Hero Designer characters into the HeroSystem6eHeroic character sheet.
For documentation see https://github.com/Roll20/roll20-api-scripts/tree/master/HeroSystem6eHeroic_HDImporter
By Villain In Glasses (Roll20 ID 633423)
txt !hero --import { "character":{ @@ -692,7 +692,1401 @@ "notes":"" - 16} + 16}, + "equipment17":{17 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 17}, + "equipment18":{18 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 18}, + "equipment19":{19 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 19}, + "equipment20":{20 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 20}, + "equipment21":{21 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 21}, + "equipment22":{22 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 22}, + "equipment23":{23 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 23}, + "equipment24":{24 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 24}, + "equipment25":{25 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 25}, + "equipment26":{26 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 26}, + "equipment27":{27 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 27}, + "equipment28":{28 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 28}, + "equipment29":{29 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 29}, + "equipment30":{30 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 30}, + "equipment31":{31 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 31}, + "equipment32":{32 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 32}, + "equipment33":{33 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 33}, + "equipment34":{34 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 34}, + "equipment35":{35 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 35}, + "equipment36":{36 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 36}, + "equipment37":{37 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 37}, + "equipment38":{38 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 38}, + "equipment39":{39 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 39}, + "equipment40":{40 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 40}, + "equipment41":{41 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 41}, + "equipment42":{42 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 42}, + "equipment43":{43 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 43}, + "equipment44":{44 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 44}, + "equipment45":{45 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 45}, + "equipment46":{46 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 46}, + "equipment47":{47 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 47}, + "equipment48":{48 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 48}, + "equipment49":{49 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 49}, + "equipment50":{50 + + + "name":"(Multipower) ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"(MPSlot ", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + + + "name":"", + "text":"", + "damage":"", + "end":"", + "range":"", + "mass":"", + "attack":"true", + "defense":"true", + "notes":"" + + + 50} }, "maneuvers":{ "maneuver01":{ @@ -3518,7 +4912,7 @@ "timeStamp":"", "genre":"", "campaign":"", - "version":"2.2", + "version":"2.3", "HeroSystem6eHeroic":"true" } } diff --git a/HeroSystem6eHeroic_HDImporter/2.3/Sample_Character.TXT b/HeroSystem6eHeroic_HDImporter/2.3/Sample_Character.TXT index e427167b5..ec1d57c33 100644 --- a/HeroSystem6eHeroic_HDImporter/2.3/Sample_Character.TXT +++ b/HeroSystem6eHeroic_HDImporter/2.3/Sample_Character.TXT @@ -1 +1 @@ - !hero --import { "character":{ "character_name":"Darci", "character_title":"Fae-Cursed", "height":"1.66 m", "weight":"60.00 kg", "eyes":"Brown", "hair":"Brown", "backgroundText":"Darci grew up in a small highland village, the daughter of a village healer, with no ambition save to learn her mother's trade. Her life was turned upside down when she encountered a trol while out collection herbs in the woods. The troll promised to tell her secrets of Fae magic in return for her friendship. Darci has regretted her kindness ever since. Exiled and feard by common folk and given little help by the Fae, Darci has found safety in the service of a mercenary company.", "historyText":"", "appearance":"", "tactics":"", "campaignUse":"", "quote":"Village Herbalist", "experience":"0", "experienceBenefit":"0", "strength":"17", "dexterity":"13", "constitution":"18", "intelligence":"18", "ego":"13", "presence":"10", "ocv":"4", "dcv":"4", "omcv":"3", "dmcv":"3", "speed":"4", "pd":"4", "ed":"3", "body":"14", "stun":"28", "endurance":"40", "recovery":"9", "running":"12", "leaping":"4", "swimming":"6", "equipment":{ "equipment01":{ "name":"Bronze Maille", "text":"Resistant Protection (4 PD/4 ED) (12 Active Points); Normal Mass (-1), OIF (-1/2), Requires A Roll (11- roll; Locations 7-14; -1/2), Real Armor (-1/4)", "damage":"", "end":"0", "range":"", "mass":"11.40kg", "attack":"", "defense":"true", "notes":"(2 END/turn)" }, "equipment02":{ "name":"Bronze Cap", "text":"Resistant Protection (5 PD/5 ED) (15 Active Points); Normal Mass (-1), OIF (-1/2), Real Armor (-1/4)", "damage":"", "end":"0", "range":"", "mass":"0.83kg", "attack":"", "defense":"true", "notes":"(Locations 5)" }, "equipment03":{ "name":"High Boots, Gloves", "text":"Resistant Protection (2 PD/2 ED) (6 Active Points); Normal Mass (-1), OIF (-1/2), Real Armor (-1/4)", "damage":"", "end":"0", "range":"", "mass":"1.20kg", "attack":"", "defense":"true", "notes":"(Locations 16-18, 6-7)" }, "equipment04":{ "name":"Bronze Battle Axe", "text":"(Total: 46 Active Cost, 16 Real Cost) Killing Attack - Hand-To-Hand 2d6 (3d6 w/STR), Reduced Endurance (0 END; +1/2) (45 Active Points); OAF (-1), STR Min: 13 (-1/2), Real Weapon (-1/4), Required Hands One-And-A-Half-Handed (-1/4) (Real Cost: 15) plus (1 Active Points) (Real Cost: 1)", "damage":"2d6 (3d6 w/STR)", "end":"0", "range":"", "mass":"1.60kg", "attack":"true", "defense":"", "notes":"" }, "equipment05":{ "name":"Bronze Dagger", "text":"Killing Attack - Hand-To-Hand 1d6-1 (1d6 w/STR), Range Based On STR (+1/4), Reduced Endurance (0 END; +1/2) (17 Active Points); OAF (-1), Real Weapon (-1/4), STR Minimum 6 (-1/4)", "damage":"1d6-1 (1d6 w/STR)", "end":"0", "range":"var.", "mass":"0.80kg", "attack":"true", "defense":"", "notes":"" }, "equipment06":{ "name":"Winter Coat", "text":"Life Support (Safe in Intense Cold) (2 Active Points); OIF (-1/2)", "damage":"", "end":"0", "range":"", "mass":"3.30kg", "attack":"", "defense":"", "notes":"" }, "equipment07":{ "name":"(Multipower) Small Shield", "text":"Multipower, 5-point reserve, (5 Active Points); all slots OAF (-1), STR Min 6 (-1/4)", "damage":"", "end":"", "range":"", "mass":"3.00kg", "attack":"", "defense":"", "notes":"" }, "equipment08":{ "name":"(MPSlot1) ", "text":"+1 DCV (5 Active Points); OAF (-1), Real Armor (-1/4), STR Min 6 (-1/4)", "damage":"", "end":"", "range":"", "mass":"", "attack":"", "defense":"", "notes":"" }, "equipment09":{ "name":"(MPSlot2) Bash", "text":"Hand-To-Hand Attack +1d6 (5 Active Points); OAF (-1), Hand-To-Hand Attack (-1/2), Side Effects -1 OCV, Side Effect occurs automatically whenever Power is used (-1/2), Real Weapon (-1/4), STR Min 6 (-1/4)", "damage":"1d6", "end":"1", "range":"", "mass":"", "attack":"true", "defense":"", "notes":"" }, "equipment10":{ "name":"Healing Potion", "text":"Healing BODY 4d6 (40 Active Points); 3 Charges which Never Recover (-3 1/4), OAF Fragile (-1 1/4), Extra Time (Full Phase, -1/2), Gestures (-1/4)", "damage":"4d6", "end":"[3 nr]", "range":"", "mass":"1.30kg", "attack":"", "defense":"", "notes":"" }, "equipment11":{}, "equipment12":{}, "equipment13":{}, "equipment14":{}, "equipment15":{}, "equipment16":{} }, "maneuvers":{ "maneuver01":{ }, "maneuver02":{ }, "maneuver03":{ }, "maneuver04":{ }, "maneuver05":{ }, "maneuver06":{ }, "maneuver07":{ }, "maneuver08":{ }, "maneuver09":{ }, "maneuver10":{ }, "maneuver11":{ }, "maneuver12":{ }, "maneuver13":{ }, "maneuver14":{ }, "maneuver15":{ }, "maneuver16":{ }, "maneuver17":{ }, "maneuver18":{ }, "maneuver19":{ }, "maneuver20":{ } }, "perks":{ "perk01":{ "type":"Fringe Benefit", "points":"1", "text":"Member of a Mercenary Company Fringe Benefit (0 Active Points)", "notes":"Some Perks Notes." }, "perk02":{ "type":"Fringe Benefit", "points":"1", "text":"Low-ranking member of Fae Society Fringe Benefit (0 Active Points)", "notes":"" }, "perk03":{ }, "perk04":{ }, "perk05":{ }, "perk06":{ }, "perk07":{ }, "perk08":{ }, "perk09":{ }, "perk10":{ } }, "talents":{}, "complications":{ "complication01":{ "type":"Social Complication", "points":"10", "text":"Social Complication: Regarded as fae-touched and cursed. Frequently, Minor", "notes":"The mortal world tends to distrust anyone or anything touched by Fae." }, "complication02":{ "type":"Hunted", "points":"15", "text":"Hunted: Hunted by agents of Summer. Frequently (Mo Pow; Mildly Punish)", "notes":"While Darci hasn't reached the notoriety that would attract more dangerous agents, Summer won't hesitate to torment her and her companions." }, "complication03":{ "type":"Distinctive Features", "points":"5", "text":"Distinctive Features: Peculiar smell and hard-to-pin-down appearance. Not quite human. Trollish, to those who know of fae. (Easily Concealed; Noticed and Recognizable; Detectable By Commonly-Used Senses)", "notes":"" }, "complication04":{ "type":"Psychological Complication", "points":"20", "text":"Psychological Complication: Finds the touch of iron uncomfortable and won't wear iron armor or jewelry or use iron tools. (Very Common; Strong)", "notes":"" }, "complication05":{}, "complication06":{}, "complication07":{}, "complication08":{}, "complication09":{}, "complication10":{}, "complication11":{}, "complication12":{}, "complication13":{}, "complication14":{}, "complication15":{}, "complication16":{}, "complication17":{}, "complication18":{}, "complication19":{}, "complication20":{} }, "powers":{ "power01":{ "name":"Bile and Acid", "base":"15", "text":"Killing Attack - Ranged 1d6, Area Of Effect (4 2m Areas; +1/2), Damage Over Time, Target's defenses only apply once (3 damage increments, damage occurs every four Segments, can be negated by Water; +2 1/2) (60 Active Points); 3 Recoverable Charges (-3/4), Extra Time (Full Phase, -1/2), No Range (-1/2), Gestures (Requires both hands; -1/2), Side Effects (1d6+1d3 drain STUN; -1/4), Concentration (1/2 DCV; -1/4), Limited Power Power loses about a fourth of its effectiveness (Does not work in water; -1/4), Requires A Roll (Skill roll, -1 per 20 Active Points modifier; Magic Roll; -1/4)", "notes":"The effects of this spell aren't pretty, but they get the job done.", "cost":"14", "endurance":"[3 rc]", "damage":"1d6", "compound":"false" }, "power02":{ "name":"Pneuma", "base":"30", "text":"Killing Attack - Ranged 2d6, Invisible Power Effects (Inobvious to [one Sense Group]; +1/4) (37 Active Points); Requires A Roll (Skill roll; -1/2), Gestures (-1/4), Incantations (-1/4), Beam (-1/4), Limited Power Power loses about a fourth of its effectiveness (Does not work under water; -1/4)", "notes":"A pneuma is an invisible dart, which Darci draws from her breath with an exaggerated motion and throws at her target.", "cost":"15", "endurance":"4", "damage":"2d6", "compound":"false" }, "power03":{ "name":"Self Renewal", "base":"55", "text":"Healing BODY 5d6, Can Heal Limbs (55 Active Points); Increased Endurance Cost (x6 END; -2 1/2), Extra Time (1 Turn (Post-Segment 12), Character May Take No Other Actions, -1 1/2), Concentration, Must Concentrate throughout use of Constant Power (0 DCV; Character is totally unaware of nearby events; -1 1/2), OAF (Eat a sprig of evergreen; -1), Gestures (Requires both hands; -1/2), Life Energy Modifier Power loses about a third of its effectiveness (-1/2), Self Only Power loses about a third of its effectiveness (-1/2), Incantations (-1/4), Requires A Roll (Characteristic roll, -1 per 20 Active Points modifier; -1/4)", "notes":"Darci can draw from the regenerative powers of trolls after an intense and painful bout of concentration.", "cost":"6", "endurance":"30", "damage":"5d6", "compound":"false" }, "power04":{ "name":"Underdark Eyes", "base":"5", "text":"Nightvision (5 Active Points); Gestures (Requires both hands; -1/2), Requires A Roll (11- roll; -1/2), Incantations (-1/4)", "notes":"Trolls may be unpleasant creatures, but they can see in the dark.", "cost":"2", "endurance":"0", "damage":"", "compound":"false" }, "power05":{ "name":"Winter's Shawl", "base":"12", "text":"Life Support (Immunity All terrestrial diseases; Immunity: All terrestrial poisons; Safe in Intense Cold) (12 Active Points); Costs Endurance (-1/2), Requires A Roll (11- roll; -1/2), Incantations (-1/4)", "notes":"The trolls of the Winter Court can survive most any natural storm or plague.", "cost":"5", "endurance":"1", "damage":"", "compound":"false" }, "power06":{ "name":"Fae Sense", "base":"10", "text":"Detect Magic A Class Of Things 13- (no Sense Group), Range (10 Active Points); Increased Endurance Cost (x4 END; -3/4), Gestures (Requires both hands; -1/2), Requires A Roll (11- roll; -1/2), Incantations (-1/4), Costs Endurance (Only Costs END to Activate; -1/4)", "notes":"The Fae have a knack for spotting ley lines and other magics in their enviornment.", "cost":"3", "endurance":"4", "damage":"13-", "compound":"false" }, "power07":{ }, "power08":{ }, "power09":{ }, "power10":{ }, "power11":{ }, "power12":{ }, "power13":{ }, "power14":{ }, "power15":{ }, "power16":{ }, "power17":{ }, "power18":{ }, "power19":{ }, "power20":{ }, "power21":{ }, "power22":{ }, "power23":{ }, "power24":{ }, "power25":{ }, "power26":{ }, "power27":{ }, "power28":{ }, "power29":{ }, "power30":{ } }, "skills": { "skill01": { "name":"", "enhancer":"", "text":"PS: Soldier 11-", "display":"Professional Skill", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill02": { "name":"", "enhancer":"", "text":"PS: Herbalist 11-", "display":"Professional Skill", "attribute":"GENERAL", "base":"0", "levels":"0", "cost":"0" }, "skill03": { "name":"", "enhancer":"", "text":"Language: Clan's Tongue (basic conversation; literate) (2 Active Points)", "display":"Language", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"0" }, "skill04": { "name":"", "enhancer":"", "text":"Language: King's Tongue (fluent conversation)", "display":"Language", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill05": { "name":"", "enhancer":"", "text":"Language: Fae (completely fluent; literate)", "display":"Language", "attribute":"GENERAL", "base":"4", "levels":"0", "cost":"4" }, "skill06": { "name":"", "enhancer":"", "text":"+3 Battleaxe", "display":"Combat Skill Levels", "attribute":"GENERAL", "base":"6", "levels":"3", "cost":"6" }, "skill07": { "name":"Fae Society", "enhancer":"", "text":"KS 11-", "display":"KS", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill08": { "name":"Clan Lands", "enhancer":"", "text":"AK 11-", "display":"Knowledge Skill", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill09": { "name":"Common Melee", "enhancer":"", "text":"WF: Common Melee Weapons", "display":"Weapon Familiarity", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill10": { "name":"Power Skill Fae Magic", "enhancer":"", "text":"Power 15-", "display":"Power", "attribute":"INT", "base":"7", "levels":"2", "cost":"7" }, "skill11": { "name":"", "enhancer":"", "text":"Stealth 12-", "display":"Stealth", "attribute":"DEX", "base":"3", "levels":"0", "cost":"3" }, "skill12": { "name":"", "enhancer":"", "text":"Teamwork 12-", "display":"Teamwork", "attribute":"DEX", "base":"3", "levels":"0", "cost":"3" }, "skill13": { "name":"", "enhancer":"", "text":"Concealment 13-", "display":"Concealment", "attribute":"INT", "base":"3", "levels":"0", "cost":"3" }, "skill14": { "name":"", "enhancer":"", "text":"Science Skill: Herbal Medicine 11-", "display":"Science Skill", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill15": { "name":"", "enhancer":"", "text":"Paramedics 13-", "display":"Paramedics", "attribute":"INT", "base":"3", "levels":"0", "cost":"3" }, "skill16": { "name":"Survival", "enhancer":"", "text":"Survival 13-", "display":"Survival", "attribute":"INT", "base":"3", "levels":"0", "cost":"3" }, "skill17": { }, "skill18": { }, "skill19": { }, "skill20": { }, "skill21": { }, "skill22": { }, "skill23": { }, "skill24": { }, "skill25": { }, "skill26": { }, "skill27": { }, "skill28": { }, "skill29": { }, "skill30": { }, "skill31": { }, "skill32": { }, "skill33": { }, "skill34": { }, "skill35": { }, "skill36": { }, "skill37": { }, "skill38": { }, "skill39": { }, "skill40": { }, "skill41": { }, "skill42": { }, "skill43": { }, "skill44": { }, "skill45": { }, "skill46": { }, "skill47": { }, "skill48": { }, "skill49": { }, "skill50": { } }, "playerName":"Test PC", "gmName":"Villain In Glasses", "characterFile":"Sample_Character.hdc", "versionHD":"20220801", "timeStamp":"Sat, 14 Sep 2024 09:56:43", "genre":"Fantasy Hero", "campaign":"Coryn's Company", "version":"2.2", "HeroSystem6eHeroic":"true" } } \ No newline at end of file + !hero --import { "character":{ "character_name":"Darci", "character_title":"Fae-Cursed", "height":"1.66 m", "weight":"60.00 kg", "eyes":"Brown", "hair":"Brown", "backgroundText":"Darci grew up in a small highland village, the daughter of a village healer, with no ambition save to learn her mother's trade. Her life was turned upside down when she encountered a trol while out collection herbs in the woods. The troll promised to tell her secrets of Fae magic in return for her friendship. Darci has regretted her kindness ever since. Exiled and feard by common folk and given little help by the Fae, Darci has found safety in the service of a mercenary company.", "historyText":"", "appearance":"", "tactics":"", "campaignUse":"", "quote":"Village Herbalist", "experience":"0", "experienceBenefit":"0", "strength":"17", "dexterity":"13", "constitution":"18", "intelligence":"18", "ego":"13", "presence":"10", "ocv":"4", "dcv":"4", "omcv":"3", "dmcv":"3", "speed":"4", "pd":"4", "ed":"3", "body":"15", "stun":"26", "endurance":"40", "recovery":"9", "running":"12", "leaping":"6", "swimming":"6", "equipment":{ "equipment01":{ "name":"Bronze Maille", "text":"Resistant Protection (5 PD/5 ED) (15 Active Points); Normal Mass (-1), OIF (-1/2), Real Armor (-1/4), Requires A Roll (12- roll; Locations 7-14; -1/4)", "damage":"", "end":"0", "range":"", "mass":"11.40kg", "attack":"", "defense":"true", "notes":"(1 END/turn)" }, "equipment02":{ "name":"Bronze Cap", "text":"Resistant Protection (6 PD/6 ED) (18 Active Points); Normal Mass (-1), OIF (-1/2), Real Armor (-1/4)", "damage":"", "end":"0", "range":"", "mass":"0.56kg", "attack":"", "defense":"true", "notes":"(Locations 5)" }, "equipment03":{ "name":"High Boots, Gloves", "text":"Resistant Protection (2 PD/2 ED) (6 Active Points); Normal Mass (-1), OIF (-1/2), Real Armor (-1/4)", "damage":"", "end":"0", "range":"", "mass":"0.42kg", "attack":"", "defense":"true", "notes":"(Locations 16-18, 6-7)" }, "equipment04":{ "name":"(Multipower) Small Shield", "text":"Multipower, 5-point reserve, (5 Active Points); all slots OAF (-1), STR Min 5 (-1/4)", "damage":"", "end":"", "range":"", "mass":"2.00kg", "attack":"", "defense":"", "notes":"" }, "equipment05":{ "name":"(MPSlot1) ", "text":"+1 DCV (5 Active Points); OAF (-1), Real Armor (-1/4), STR Min 5 (-1/4)", "damage":"", "end":"", "range":"", "mass":"", "attack":"", "defense":"", "notes":"" }, "equipment06":{ "name":"(MPSlot2) Bash", "text":"Hand-To-Hand Attack +1d6 (5 Active Points); OAF (-1), Hand-To-Hand Attack (-1/2), Side Effects -1 OCV, Side Effect occurs automatically whenever Power is used (-1/2), Real Weapon (-1/4), STR Min 5 (-1/4)", "damage":"1d6", "end":"1", "range":"", "mass":"", "attack":"true", "defense":"", "notes":"" }, "equipment07":{ "name":"Bronze Battle Axe", "text":"(Total: 38 Active Cost, 13 Real Cost) Killing Attack - Hand-To-Hand 1 1/2d6 (2 1/2d6 w/STR), Reduced Endurance (0 END; +1/2) (37 Active Points); OAF (-1), STR Min: 13 (-1/2), Real Weapon (-1/4), Required Hands One-And-A-Half-Handed (-1/4) (Real Cost: 12) plus (1 Active Points) (Real Cost: 1)", "damage":"1 1/2d6 (2 1/2d6 w/STR)", "end":"0", "range":"", "mass":"1.60kg", "attack":"true", "defense":"", "notes":"" }, "equipment08":{ "name":"Bronze Dagger", "text":"Killing Attack - Hand-To-Hand 1d6-1 (1d6 w/STR), Range Based On STR (+1/4), Reduced Endurance (0 END; +1/2) (17 Active Points); OAF (-1), Real Weapon (-1/4), STR Minimum 6 (-1/4)", "damage":"1d6-1 (1d6 w/STR)", "end":"0", "range":"var.", "mass":"0.80kg", "attack":"true", "defense":"", "notes":"" }, "equipment09":{ "name":"Small Pack", "text":"+2 STR, Reduced Endurance (0 END; +1/2) (3 Active Points); Limited Power Power loses about two-thirds of its effectiveness (Only for determining pack capacity; -1 1/2), OAF (-1), Real Weapon (-1/4)", "damage":"", "end":"", "range":"", "mass":"1.00kg", "attack":"true", "defense":"", "notes":"Holds up to 16 kg." }, "equipment10":{ "name":"Candle", "text":"Sight Group Images, +/-4 to PER Rolls, Reduced Endurance (0 END; +1/2), Area Of Effect (2m Radius; +3/4), Mobile (1m per Phase; +1/2) (49 Active Points); Only To Create Light (-1), OAF (-1), Extra Time (1 Turn (Post-Segment 12), Only to Activate, -3/4), No Range (-1/2), Real Weapon (-1/4), 1 Continuing Fuel Charge lasting 1 Hour (-0)", "damage":"", "end":"[1 cc]", "range":"", "mass":"0.10kg", "attack":"true", "defense":"", "notes":"(x6 number of items)" }, "equipment11":{ "name":"Hat", "text":"Resistant Protection (1 PD/1 ED) (3 Active Points); Normal Mass (-1), OIF (-1/2), Real Armor (-1/4)", "damage":"", "end":"0", "range":"", "mass":"0.25kg", "attack":"", "defense":"true", "notes":"(Locations 5)" }, "equipment12":{ "name":"Great Coat", "text":"Change Environment (+2 Temperature Level Adjustment), Reduced Endurance (0 END; +1/2) (9 Active Points); No Range (-1/2), Self Only (-1/2), OIF (-1/2)", "damage":"", "end":"0", "range":"", "mass":"2.00kg", "attack":"true", "defense":"", "notes":"" }, "equipment13":{ "name":"Herbalism Kit", "text":"+1 with Herbalism (2 Active Points); OAF (-1)", "damage":"", "end":"", "range":"", "mass":"1.00kg", "attack":"", "defense":"", "notes":"" }, "equipment14":{ "name":"Survival Kit", "text":"+2 with Survival (4 Active Points); OAF (-1)", "damage":"", "end":"", "range":"", "mass":"1.00kg", "attack":"", "defense":"", "notes":"" }, "equipment15":{ "name":"Traveling Clothes", "text":"Change Environment (+1 Temperature Level Adjustment), Reduced Endurance (0 END; +1/2) (4 Active Points); OAF (-1), No Range (-1/2), Self Only (-1/2)", "damage":"", "end":"0", "range":"", "mass":"2.00kg", "attack":"true", "defense":"", "notes":"" }, "equipment16":{ "name":"Warm Blanket", "text":"Change Environment (+2 Temperature Level Adjustment), Reduced Endurance (0 END; +1/2) (9 Active Points); OAF (-1), No Range (-1/2), Self Only (-1/2)", "damage":"", "end":"0", "range":"", "mass":"0.50kg", "attack":"true", "defense":"", "notes":"" }, "equipment17":{ "name":"Healing Potion", "text":"Healing BODY 4d6 (40 Active Points); 2 Charges which Never Recover (-3 1/2), OAF Fragile (-1 1/4), Extra Time (Full Phase, -1/2), Side Effects, Side Effect occurs automatically whenever Power is used (Side Effect only affects the recipient of the benefits of the Power; -1/2), Gestures (Drink; -1/4)", "damage":"4d6", "end":"[2 nr]", "range":"", "mass":"0.25kg", "attack":"", "defense":"", "notes":"" }, "equipment18":{}, "equipment19":{}, "equipment20":{}, "equipment21":{}, "equipment22":{}, "equipment23":{}, "equipment24":{}, "equipment25":{}, "equipment26":{}, "equipment27":{}, "equipment28":{}, "equipment29":{}, "equipment30":{}, "equipment31":{}, "equipment32":{}, "equipment33":{}, "equipment34":{}, "equipment35":{}, "equipment36":{}, "equipment37":{}, "equipment38":{}, "equipment39":{}, "equipment40":{}, "equipment41":{}, "equipment42":{}, "equipment43":{}, "equipment44":{}, "equipment45":{}, "equipment46":{}, "equipment47":{}, "equipment48":{}, "equipment49":{}, "equipment50":{} }, "maneuvers":{ "maneuver01":{ }, "maneuver02":{ }, "maneuver03":{ }, "maneuver04":{ }, "maneuver05":{ }, "maneuver06":{ }, "maneuver07":{ }, "maneuver08":{ }, "maneuver09":{ }, "maneuver10":{ }, "maneuver11":{ }, "maneuver12":{ }, "maneuver13":{ }, "maneuver14":{ }, "maneuver15":{ }, "maneuver16":{ }, "maneuver17":{ }, "maneuver18":{ }, "maneuver19":{ }, "maneuver20":{ } }, "perks":{ "perk01":{ "type":"Fringe Benefit", "points":"1", "text":"Member of the Company Fringe Benefit: Membership", "notes":"" }, "perk02":{ "type":"Fringe Benefit", "points":"1", "text":"Low-ranking member of Fae Society Fringe Benefit (0 Active Points)", "notes":"" }, "perk03":{ }, "perk04":{ }, "perk05":{ }, "perk06":{ }, "perk07":{ }, "perk08":{ }, "perk09":{ }, "perk10":{ } }, "talents":{}, "complications":{ "complication01":{ "type":"Social Complication", "points":"10", "text":"Social Complication: Regarded as fae-touched and cursed. Frequently, Minor", "notes":"" }, "complication02":{ "type":"Hunted", "points":"15", "text":"Hunted: Hunted by agents of Summer. Frequently (Mo Pow; Mildly Punish)", "notes":"" }, "complication03":{ "type":"Distinctive Features", "points":"5", "text":"Distinctive Features: Peculiar smell and hard-to-pin-down appearance. Not quite human. Trollish, to those who know of fae. (Easily Concealed; Noticed and Recognizable; Detectable By Commonly-Used Senses)", "notes":"" }, "complication04":{ "type":"Psychological Complication", "points":"20", "text":"Psychological Complication: Finds the touch of iron uncomfortable and won't wear iron armor or jewelry or use iron tools. (Very Common; Strong)", "notes":"" }, "complication05":{}, "complication06":{}, "complication07":{}, "complication08":{}, "complication09":{}, "complication10":{}, "complication11":{}, "complication12":{}, "complication13":{}, "complication14":{}, "complication15":{}, "complication16":{}, "complication17":{}, "complication18":{}, "complication19":{}, "complication20":{} }, "powers":{ "power01":{ "name":"Bile and Acid", "base":"15", "text":"Killing Attack - Ranged 1d6, Area Of Effect (4 2m Areas; +1/2), Damage Over Time, Target's defenses only apply once (3 damage increments, damage occurs every four Segments, can be negated by Water; +2 1/2) (60 Active Points); 3 Recoverable Charges (-3/4), Extra Time (Full Phase, -1/2), No Range (-1/2), Gestures (Requires both hands; -1/2), Side Effects (1d6+1d3 drain STUN; -1/4), Concentration (1/2 DCV; -1/4), Limited Power Power loses about a fourth of its effectiveness (Does not work in water; -1/4), Requires A Roll (Skill roll, -1 per 20 Active Points modifier; Magic Roll; -1/4)", "notes":"", "cost":"14", "endurance":"[3 rc]", "damage":"1d6", "compound":"false" }, "power02":{ "name":"Pneuma", "base":"30", "text":"Killing Attack - Ranged 2d6, Invisible Power Effects (Inobvious to [one Sense Group]; +1/4) (37 Active Points); Requires A Roll (Skill roll; -1/2), Gestures (-1/4), Incantations (-1/4), Beam (-1/4), Limited Power Power loses about a fourth of its effectiveness (Does not work under water; -1/4)", "notes":"", "cost":"15", "endurance":"4", "damage":"2d6", "compound":"false" }, "power03":{ "name":"Self Renewal", "base":"55", "text":"Healing BODY 5d6, Can Heal Limbs (55 Active Points); Increased Endurance Cost (x6 END; -2 1/2), Extra Time (1 Turn (Post-Segment 12), Character May Take No Other Actions, -1 1/2), Concentration, Must Concentrate throughout use of Constant Power (0 DCV; Character is totally unaware of nearby events; -1 1/2), OAF (Eat a sprig of evergreen; -1), Gestures (Requires both hands; -1/2), Life Energy Modifier Power loses about a third of its effectiveness (-1/2), Self Only Power loses about a third of its effectiveness (-1/2), Incantations (-1/4), Requires A Roll (Characteristic roll, -1 per 20 Active Points modifier; -1/4)", "notes":"", "cost":"6", "endurance":"30", "damage":"5d6", "compound":"false" }, "power04":{ "name":"Underdark Eyes", "base":"5", "text":"Nightvision (5 Active Points); Gestures (Requires both hands; -1/2), Requires A Roll (11- roll; -1/2), Incantations (-1/4)", "notes":"", "cost":"2", "endurance":"0", "damage":"", "compound":"false" }, "power05":{ "name":"Winter's Shawl", "base":"12", "text":"Life Support (Immunity All terrestrial diseases; Immunity: All terrestrial poisons; Safe in Intense Cold) (12 Active Points); Costs Endurance (-1/2), Requires A Roll (11- roll; -1/2), Incantations (-1/4)", "notes":"", "cost":"5", "endurance":"1", "damage":"", "compound":"false" }, "power06":{ "name":"Fae Sense", "base":"10", "text":"Detect Magic A Class Of Things 13- (no Sense Group), Range (10 Active Points); Increased Endurance Cost (x4 END; -3/4), Gestures (Requires both hands; -1/2), Requires A Roll (11- roll; -1/2), Incantations (-1/4), Costs Endurance (Only Costs END to Activate; -1/4)", "notes":"", "cost":"3", "endurance":"4", "damage":"13-", "compound":"false" }, "power07":{ }, "power08":{ }, "power09":{ }, "power10":{ }, "power11":{ }, "power12":{ }, "power13":{ }, "power14":{ }, "power15":{ }, "power16":{ }, "power17":{ }, "power18":{ }, "power19":{ }, "power20":{ }, "power21":{ }, "power22":{ }, "power23":{ }, "power24":{ }, "power25":{ }, "power26":{ }, "power27":{ }, "power28":{ }, "power29":{ }, "power30":{ } }, "skills": { "skill01": { "name":"Mercenary", "enhancer":"", "text":"PS 11-", "display":"Professional Skill", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill02": { "name":"Herbalist", "enhancer":"", "text":"PS 11-", "display":"Professional Skill", "attribute":"GENERAL", "base":"0", "levels":"0", "cost":"0" }, "skill03": { "name":"", "enhancer":"", "text":"Language: Clan's Tongue (idiomatic; literate) (5 Active Points)", "display":"Language", "attribute":"GENERAL", "base":"5", "levels":"0", "cost":"1" }, "skill04": { "name":"", "enhancer":"", "text":"Language: King's Tongue (fluent conversation)", "display":"Language", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill05": { "name":"", "enhancer":"", "text":"Language: Fae (completely fluent; literate)", "display":"Language", "attribute":"GENERAL", "base":"4", "levels":"0", "cost":"4" }, "skill06": { "name":"", "enhancer":"", "text":"+3 Battle Axe", "display":"Combat Skill Levels", "attribute":"GENERAL", "base":"6", "levels":"3", "cost":"6" }, "skill07": { "name":"Fae Society", "enhancer":"", "text":"KS 11-", "display":"KS", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill08": { "name":"Clan Lands", "enhancer":"", "text":"AK 11-", "display":"Knowledge Skill", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill09": { "name":"Common Melee", "enhancer":"", "text":"WF: Common Melee Weapons", "display":"Weapon Familiarity", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill10": { "name":"Power Skill Fae Magic", "enhancer":"", "text":"Power 15-", "display":"Power", "attribute":"INT", "base":"7", "levels":"2", "cost":"7" }, "skill11": { "name":"", "enhancer":"", "text":"Stealth 12-", "display":"Stealth", "attribute":"DEX", "base":"3", "levels":"0", "cost":"3" }, "skill12": { "name":"", "enhancer":"", "text":"Teamwork 12-", "display":"Teamwork", "attribute":"DEX", "base":"3", "levels":"0", "cost":"3" }, "skill13": { "name":"", "enhancer":"", "text":"Concealment 13-", "display":"Concealment", "attribute":"INT", "base":"3", "levels":"0", "cost":"3" }, "skill14": { "name":"", "enhancer":"", "text":"Science Skill: Herbal Medicine 11-", "display":"Science Skill", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill15": { "name":"", "enhancer":"", "text":"Paramedics 13-", "display":"Paramedics", "attribute":"INT", "base":"3", "levels":"0", "cost":"3" }, "skill16": { "name":"", "enhancer":"", "text":"Survival (Temperate/Subtropical) 13-", "display":"Survival", "attribute":"INT", "base":"2", "levels":"0", "cost":"2" }, "skill17": { }, "skill18": { }, "skill19": { }, "skill20": { }, "skill21": { }, "skill22": { }, "skill23": { }, "skill24": { }, "skill25": { }, "skill26": { }, "skill27": { }, "skill28": { }, "skill29": { }, "skill30": { }, "skill31": { }, "skill32": { }, "skill33": { }, "skill34": { }, "skill35": { }, "skill36": { }, "skill37": { }, "skill38": { }, "skill39": { }, "skill40": { }, "skill41": { }, "skill42": { }, "skill43": { }, "skill44": { }, "skill45": { }, "skill46": { }, "skill47": { }, "skill48": { }, "skill49": { }, "skill50": { } }, "playerName":"PC", "gmName":"Villain In Glasses", "characterFile":"Sample_Character.hdc", "versionHD":"20220801", "timeStamp":"Wed, 13 Nov 2024 13:14:50", "genre":"Fantasy Hero", "campaign":"Coryn's Company", "version":"2.3", "HeroSystem6eHeroic":"true" } } \ No newline at end of file diff --git a/HeroSystem6eHeroic_HDImporter/2.3/Sample_Character.hdc b/HeroSystem6eHeroic_HDImporter/2.3/Sample_Character.hdc index 165ad6c71153946202343844ff628a18c0be79b7..93ee772548bb55683af82c54698f08f8c5266d2d 100644 GIT binary patch delta 12500 zcmc&)dvui5wg2|S5P3)fAs|U6Gf5CJLYPcu@~{Yb0x?fW5NT_9MnnjS0cyEghFWFy ziUs8;XZb*==q;98QNMNX*ZKl#Z7md&b-8M(52#v{rQT@osxI3rxxanReDlhekhXtx zWhFED&N=(+_x|lY^Iz|#e0t9)SO58^leUo9L)qd4`Gni`GxM~ora=7smlMp=8C5PS z+5HerGVh&Pm?E3+rU~ZBl8vsEfKhDtj8eI8BV~!^+Cs5rR<`*;*C-m@ZLBofjrGQI zqg(h|9}*v3;}c)aD-)-_<`;X%j1jfvQ$&A;&s;mpOXi-dZzl?v-Z>r`S7+21bw;z% zXjB?)cvmf+s+;WawBoMZachiK#u}s3=)g4_@ouH)y=0NtdG%N^uJZGYQlrQS;5UfB z0iz6z;zzUUnNw(5^$)tt{+d~%<(1oMjJ#zWEfk|y<%qAYYO}dDZ(i_uR(h!tl4E}m?=Wcjbre>2j*k;s%_ZIwJs3fR0@(eHJs4=d_yCNe> zEeL8Qpa~TU?<}Ri%i5r{4x {sqj4K6-k>Xh`!mQMwfw+5=dKW zl Xs%k0_m&7|-#z2Z0g!t3#v zOK-np;6m5YEWz|Dw{5lQX->+GfTAaQ&W#XzPfnMoKBTeMWoN0-C6;cVGJrAfERR@v zdx80f?QbO#Di@#j=34z9(W5R|dy=N62bJ2(;bnZ6@-=y;mvYU%d;b!9SgnYP =xLNWYkdP*0bFVDNgS8q*ASoO=a1Jr1S_B@hEv=|D;!oEyf zQ#OO8d}M*yzyA?!yuQ9EqUR^sAUtMd34(^5Gq5YwV|otWz-Py#grCZ9Rgv<3=_#X$ z;_x%$&C!P{)RxFW*k@LqS~m|rvn_rt7$fHMB%8<6`nXGjN^`6S%acxHTw>016B9OU zeI5D6^QGUkp37r_qZ})#Sl(=xx%kLMtVMgV6wwcx)SI49Tx7oRi)j~eI0VEOzn&tO zo}dw_?5sW& `N=_QFniv~BPTw};lGV$>zPb_Rf5`7%(~6J@4fDLiE`9jX2yK&>@f#PO2zEs z9=W%j3eEm=FFMlToY4p?PIO=Zp#t}Eo2x&aAI(XPGDr3ir6nU78D-{HInTxak4*`x z^vjBE6rNAUYZHZ6IE?)|VT4UHJA8_hHh$&SZ7@Dd!VYB}o=DrsI!?6ArP8c?{9?+H zOTUI|czc;qBDXeBo%P*hnhVDDb7V53T=-t8lX#qF6^*2_B+XhmR)Pjcuc{1I&(As8 ztSt!BOb&o%iP-v{8;&!Axv)MeAh2;Rjs6>EWAg09D17Fpy-QrOQPNm(_&i*lmr7Xx z+>A69C&3OC6Mi`}n=;djRT?g18raU|)UQhdV#0bnoAyPl!}oA%=A2P3;qi?sh1uQ{ zyIjWJ6IFIN@M3qAvtk=L7NGC}>!_ccxZ>GvBGL13f$S`xOxyjV6idZZ3s_5j*3j=9 zNd~3LC@2ipmosR7vNqtz0F)407gbH-YVFCA`Hz#&`d)yllAN}n $bkArT4R79R?%(!v$MG z9OW#hH)YG(o2gCSvVvYo0{oH7-o~MCtfc8A_iv!@P|@yo>Wn+jAOzO6faBhDjf j09eI oW@BF)R@vjIwnx-jzdg{lstGvxPF^xzraFsZe1yx54kfPnS9{QG|e0az5sg z_1h@VVT(%Ii>)`d(dQ(uK1@vjol!?91ylU1Q7rsfo;ys_rRTb^AXLnz%E}Eu4D3>( zu)CIneMZ!!N(>-l31fB0JCD+%&h(Y{+ofS2O1t&EeCQbEIPc~nF|HLo#6sZjMnKl} zcnw--w$VwF^L|ZDF~D9603miwtrst6=E(25H1pHs+pp4XlN`l`dAfS2Sae=~txP>e zKXGP5ff;s%E|=qmV)kvh^8~FE{prf`L*HrP&To(-DW6@fR6UR{oS@le&wsu};{JQ5 z##q(1m!EN%wf7|b)|s=S2>usYyCzzvU#EwiH>ygw*!tiU++BX~11gBQjKi0IN|l&% z{*_jU`ia`X37H9gVSWED`Yp*rdk_JAKca=`A4ibruNW^+@26*EXa`LfJ(ZbPw;*O0 zA!?hACdBW2G*=DAT-7W(w^;0G94)2nWWu+{%_%!Dawh)uqHiqW1}4KLJr7c$2;EsF zkME$ouv+b-T(yggB9&HqwiH_RJ5lo-_XHArQ+EE29+jOB(o}is$KlwIry5}Yw5~ru z`-pk?HW%n= yYEg!dV^XHIkVmUz=biLR`P_Y!=^#oFX*1kDlt>ie5kFpifL!9xscCS7 zID(vIwU_>R2D|*e^AzOS3jU%9i_YsuiO}K9^o_ Yxff5qDXN>1Ki3(X z!S@YV@5bvYi~}~RkwAyauAE_4<9V0X2Hvg2JN@4p?A$DTx4sY!vjNPZ*W`YiqYMsn z=uh*-(lHa|={G4esm^E=v*%BWa~^JgxXP8QG^OxZN}V#w>Rn&B 6w+Da2EZ zGVD`$NUvS1GN~R;VMV50Ot*$7ITIb2LeCLqiX&(Lrp+{(2VFe0Lw06;jg0&+&rGI# z{JR{!vc}jXmVJ0y%-QZuX#_h}MxE%|p5bsqVAsJ?RSrfrLb4S&xz60W?Q*gOYY}Uo z&Pi6xi?Ii@(pkVnA$s4Z-_&xYXfT#Q?&gTvc|6w;v1cBX=`@<-nAblgc4y$bEE)lA z;L8h=-SB>%JhtP%2Ji`YkS&GuhUt0MOY(s~Qg#ByV47v3E7vWb_>g8x%%0vC-~D$l z>^1wYd_dYWXXvX-*jP 4 Q~B?vE5gObJ^{E}Kqn^LRb%(flwyD>`4O5hw1;alBg%hwARX$Q7;Gy1~+}!0d$w zPde3FNVQX9tB}1fjO!!C@6exavs(b2^?16*y)w5p-dRC4QD^vHCANFQrMX05|9r;& zLHq!Qs8{awFo4F7E@ddw3O2*W@I;aJM5p}W2Aat6Ga?BYM(oR+BwyM<#~^Xy-5Rt+ zTAajXHA)NjH~ t%h4w!eQsZjcW0FE!>xLXcM3}|KB#GYjJ(`0cfEp zOJGFb Wx04kn(;lP4xrsA- z#0{9{_zP!i(R*h`3_j8wOWE$747*Y%D)R-eRKPNEfR8{6r-yb3(XQY^CDP$dh@K5F z*xl{9R_e1TRsTq)PIPE)3(HU#!`?c=^xR+QD&~sAka;-q6sEwFYMu{?*Up~RNo@dz z)4EWxfpHkOns>Qm&yE3I8B;{ds(@%1ORFlsLhN0dol*~NHy91#n@#SRY{y}uTX~-M z2USrJBVQULK5LqSDZ=xrPaZaA%NH{%(!`I}WXq$IDN{86&j|6vnhB!vE^pQ?a4!Zt zoE-V1mlg1hb$GVH=-`SzdB9WbtmiZ0o|Y#>=m%31v2B!d)kQ@T-){9GSY1bK&&t8= zV|!s97l%q;?kEszrfOGDLi^7dA z9T=qh6- k;e+$2 z+Kizv&ve?~rIw@t>+FMi&cUBQOMJ{wpgw@+Cg5z+Vxw6h^)`dwp&v(8<7Pm%en?XX z&|>h%pQ5_0gCA0k^Iau+^o!4^kJw`)2D6%3^+`?SV^(}tGoMD*!23CQVvO+&9TxK5 z=)^jDh$rzH5oGN;pHyjFBeI1@z0MYwCoMN_5;uxFSxfiT+c2XNkYg^OM>X M zoAgfXjPBqsGpxt&4P3_6*_d_H`+kw`H%-sG<4M-O?qCI_#9gWC+XnW8w9O^^Kc&F+ zUfeVb!Y%@;sfE~H+_fCZrCqh)t+ 1S1aKQwi1T$pEX@{?>_J)6;OL9YJ-L@ouB=J)9B35G(qG z8+*lPEXc0}H!K_9y##V?2;bfYjw(T?UU9 TZ~Zb#=!|{jq40{Aq@=NJ2>5z5X`xF zSc+v&iQPFk(OP2x%*9F9ZpQ6_pq`uAk;!flVozYV9{kYXbI~IBOkE^dO&R 4G$=i=Jy;?tY>_<(yk zM_NNz^*X&q)1OY1wK&(JqJ&wgK@#B D71?5aTsi>ha<`rD 779V~f>W38aXRH?%w)&~>z3GXEtAssTdat3-G!x6jU z*hxE pttF+Bb1S7e^4!Q{8 z0dy00XsV&1$!d-9 `B}kvNvnDjS?<)*lh3B){O2A46!#5acs>*Fn(_c7Uda^=2)YxR>Tv# zkGA(bV=3M-#$?rV{mN6Nt0wMwnR?1~g|mF@2^%$QCyrg=PYgp$j6r-8ess7cZs8s5 zEZ4=6<-?j04%XN+_Jz8@#je bU3jnVLaP zXp9?6$!4UPVX)IBHG^KSE2k4NPI>W~(6-ktiPH(}_r*z~C9Hzi*C1m$9hoVoe@0Wu F_ S$cs%VA=(gi z#!|JJ#anaHW@xZJ@G% 5+;7sPOu)xT&>-!b!ZJ*7=Kr5mD;0P4L&z$_1bEF z5S*zy@VP~6*P3y>6Q4Wyi{PJs53VZHHfWXni3LmeIXE?+=sJ+Xr9Z_stP)2bhcx|i z{yN4lIns3BYTrEWd3CYg9Sk!*^wT`uQB(n<`VLrlOQqI^o7ZbixItLYZAt+CPN8Q} zNb}*R5I=tWdhuJJ74hv|o8K$WlPlBo<#+S~?;CYLzhNaGNj@!HiI8&BI&CdV_1T@y z$)`m;r8H%JEy~}4OzL>~#$WQ^mfqll!^!jfT0jeF9x-kQCvBy#+4>UWr+((vht@l8 zh8q2YyKi^$h$DG^5%Le=*QZ0v0T87DmcsLzmh(q;z0aG&T}YF}Qy#O;BdI-FfaiXi z$)nkB{!&*!T&RK5+|yaTs77;X<#bN14u4yvst@oNI=#zEQ1xx7=mw;ykQ94RT$i>D zN2S^|x7b^cLPp-Q^KIQJd?36j&QssgwehBdCE5-&9<6WCcHyT1d34G>+VIVV&yV8q zY0nNcX9McI8K0H0TeaKBbU03?@5IjmEg#=&wS97&);8dnOKX(#YB%Dw8|ACT|N2CH zXvIk>=3V0c|G?r~eOeH$=O=xjR!Dn6@%4RBpwO|V=Vd0%Je?@01<}lz${J6svLYcQ zjHl#?=-04HKl7A3!EzffPu&)y+4idk=b{ RR&4CH+o%P_lH5S;8w^F=Q~MaF=PXq?l_aqc=hWOR+Pe Meu@8G_)Na$lBf>jf33tl2DoOqa6c{~$dh{z(*~^zpBg3jX&Z9LdK_<& z&e ix9%!!nzJpY}IAAKiF>YRL~03%%y`U`4Y^NH=(AjEsU zX?n)HYZQXbG$EucLa-GO3GX_&Qor 1;CE%ENOrB$?iIa=@BI0i6%^d-R_3!@!3= z+{Ak)R#-~rNB_&zFAVQs3kcmNq4@YKmHN|v&QoYJP0)$>e{Y)xj;sU;j2Tn{D$(J_ z(wIjdIi3vs)Y%kXaWIjOy^*A!I{QNcg2Zgvx|o&XCU#-CiyK%4E|)Yfg)WLv%7RS@ zBLYvmw3Nz!E__y@lGamzq;Oe-V`Omxip0YXi9#A`MFQG{hRO8p_(TZZg>jRjYb|c0 zBB X;=ddd(lc>?2lxzh+$b&U4d2HebKHz_niZbjUGrcTaTbm z&Y@twU%pWTM(QOc)=P~e_;G~VGIE44V&3d7s@9MD1*N|ONJR}sD_V_qqQpmKn5vX& zlcmuWaHevdcrpMPsqqX`B;!jE761FAPI2Wbc#Q7@ur9%Z;BdYyi;N?M;Gv+oQ}R~j zpt&|6gm$1zs=cA+rp6?df)lwuA&;~|O(-=#3Tmo$BMnhHCk@evO5D_3sR}TB5ErQ` zlnzhur3DJus_39TjQXic9B+|WC5Y3;anVRo)Si-A$P7w_>X$;0Libc58Lv2K-BQ|& zN(<`KX+l+`9WiGR(L12n6st+iRAXXVk5?2%cL}UCr%f}>v7?#dn+MPsY#n4+6ZxoP zGs-r=Xr` ^AcNm@#6Lom*Z|Wc{9`Atgf_Mc@IzvX{;p>n~9jDvku*x(cSsEFxMXYD~In;Ea ztW0?1cp!e Ven5Vz&Z`2{gxZObn;8bPJMTtdR5=#ZSQzW>SL`iI3lxBPu?EVzky* zAfijz8gcy TqP{Yz$QfqG}DBJ}Ilo?V@)H zrkO+o&d;2tomI-N>H~+d{xpQ`rn3=<=*|RNH+7dJ@C5gWs0~ceGd7)p&&^0xs{&&D z9u|wCT_3`mW{kur(4A!Aj2I!|2SB*KhQ3++1K4+L?~?lImD!3Qq++&mjo5a4`^Qe> z!Z|o@#i~#qVZ>n*?bje(3_2m(i2fbUGLwtN1*g0!FA$_s(!PLgOr-Qf1{H+@i^4o! zJ!)G(hNF6vei4{5!gyXy7w_93U%Z`RR#9#Uy;EI3`6OJZBK6=(dXqOZBJ~+)x!F`i zil1k(Pp~r=i4Mi@X2p-Zq=2`L=EQ5Uml>%eokza4-(n&`SGv>A%E>*04E-)!1P;MA zqC&yxHk0lMiGH%DqsAnkk1aBpHYbR3lOxcQAj(XaXtY?3gvkB&ir!~n&}!q!*2Km5 z*bBSG<=;SdOiYsiBKHL3VDID;k01mgXr!jIFYtCVGKaL=y9#*4V`<{s2<}##J|%6o z7&{DIODI;*$xJM8#BUsY9{d=9EY43pFy-TsYK)6NyZ}`ev_ZZ%OL0Hh4<-D;o&PU) zLEMdjBe2p^1X<_`+S3^N2rdI%#x1wvul!}Gf0J=}01lyDrO{1CmDd}1i_D|_i;eF6 zYzGtV2f!_^=m_80hYwP>xzmWg3=5f9@es?3(NK`3wx6zouv&df-It2Nhu8{!DQoJ~ z88SX+5;%gWbp>fkx#SX*-!Td-V0(??hgnJd (d=-HmF$n72;xrD_3tUYFI5A%Q7)E8UCsOBGLB ajIK*nE>`8&KvZnTgfM!5Wr>PIEa!h`-q{KO diff --git a/HeroSystem6eHeroic_HDImporter/2.3/Sample_Character_MA.TXT b/HeroSystem6eHeroic_HDImporter/2.3/Sample_Character_MA.TXT index ea2ecdf40..6c1c4380e 100644 --- a/HeroSystem6eHeroic_HDImporter/2.3/Sample_Character_MA.TXT +++ b/HeroSystem6eHeroic_HDImporter/2.3/Sample_Character_MA.TXT @@ -1 +1 @@ - !hero --import { "character":{ "character_name":"Henkle", "character_title":"Clan Doctor", "height":"1.76 m", "weight":"87.00 kg", "eyes":"Green", "hair":"Sandy", "backgroundText":"Henkle is a learned man, trained as a physician by the best court instructors and an expert swordsman. He once had a promising future serving clan royalty. It all fell to pieces when he misinterpreted a joke and subsequently dug himself into a ever deepening hole. Lucky to be alive, he found himself banished. The Company scooped him up after a particularly self destructive drinking binge.", "historyText":"", "appearance":"Like many a clansman, Henkle is not small and his lack of social awareness makes for an intimidating block of a man.", "tactics":"", "campaignUse":"As part of his education, Henkle dabbled in Wizardy and can cast a couple of spells, including a minor healing spell and a light spell.", "quote":"Banished aristocrat", "experience":"0", "experienceBenefit":"0", "strength":"18", "dexterity":"15", "constitution":"13", "intelligence":"15", "ego":"14", "presence":"15", "ocv":"5", "dcv":"4", "omcv":"3", "dmcv":"4", "speed":"3", "pd":"4", "ed":"4", "body":"15", "stun":"36", "endurance":"40", "recovery":"7", "running":"12", "leaping":"2", "swimming":"0", "equipment":{ "equipment01":{ "name":"Light Maille", "text":"Resistant Protection (5 PD/5 ED) (15 Active Points); Normal Mass (-1), OIF (-1/2), Real Armor (-1/4), Requires A Roll (12- roll; Locations 9-14; -1/4)", "damage":"", "end":"0", "range":"", "mass":"10.20kg", "attack":"", "defense":"true", "notes":"(1 END/turn)" }, "equipment02":{ "name":"Open-face Helm", "text":"Resistant Protection (6 PD/6 ED) (18 Active Points); Normal Mass (-1), OIF (-1/2), Real Armor (-1/4)", "damage":"", "end":"0", "range":"", "mass":"0.83kg", "attack":"", "defense":"true", "notes":"(Locations 4-5)" }, "equipment03":{ "name":"High Boots, Gloves", "text":"Resistant Protection (2 PD/2 ED) (6 Active Points); Normal Mass (-1), OIF (-1/2), Real Armor (-1/4)", "damage":"", "end":"0", "range":"", "mass":"1.20kg", "attack":"", "defense":"true", "notes":"(Locations 16-18, 6-7)" }, "equipment04":{ "name":"Arming Sword", "text":"(Total: 31 Active Cost, 12 Real Cost) Killing Attack - Hand-To-Hand 1d6+1 (1 1/2d6 w/STR), Reduced Endurance (0 END; +1/2) (30 Active Points); OAF (-1), STR Minimum 12 (-1/2), Real Weapon (-1/4) (Real Cost: 11) plus (1 Active Points) (Real Cost: 1)", "damage":"1d6+1 (1 1/2d6 w/STR)", "end":"0", "range":"", "mass":"1.20kg", "attack":"true", "defense":"", "notes":"" }, "equipment05":{ "name":"Long Sword", "text":"(Total: 38 Active Cost, 13 Real Cost) Killing Attack - Hand-To-Hand 1 1/2d6 (2d6 w/STR), Reduced Endurance (0 END; +1/2) (37 Active Points); OAF (-1), STR Minimum 13 (-1/2), Real Weapon (-1/4), Required Hands One-And-A-Half-Handed (-1/4) (Real Cost: 12) plus (1 Active Points) (Real Cost: 1)", "damage":"1 1/2d6 (2d6 w/STR)", "end":"0", "range":"", "mass":"1.70kg", "attack":"true", "defense":"", "notes":"" }, "equipment06":{ "name":"Knife", "text":"(Total: 18 Active Cost, 8 Real Cost) Killing Attack - Hand-To-Hand 1/2d6 (1d6+1 w/STR), Range Based On STR (+1/4), Reduced Endurance (0 END; +1/2) (17 Active Points); OAF (-1), Real Weapon (-1/4), STR Minimum 4 (-1/4) (Real Cost: 7) plus (1 Active Points) (Real Cost: 1)", "damage":"1/2d6 (1d6+1 w/STR)", "end":"0", "range":"", "mass":"0.40kg", "attack":"true", "defense":"", "notes":"" }, "equipment07":{}, "equipment08":{}, "equipment09":{}, "equipment10":{}, "equipment11":{}, "equipment12":{}, "equipment13":{}, "equipment14":{}, "equipment15":{}, "equipment16":{} }, "maneuvers":{ "maneuver01":{ "name":"Slash", "points":"4", "phase":"1/2", "ocv":"+0", "dcv":"+2", "effect":"Weapon +2 DC Strike", "notes":"" }, "maneuver02":{ "name":"Parry", "points":"4", "phase":"1/2", "ocv":"+2", "dcv":"+2", "effect":"Block, Abort", "notes":"" }, "maneuver03":{ "name":"Counterstrike", "points":"4", "phase":"1/2", "ocv":"+2", "dcv":"+2", "effect":"Weapon +2 DC Strike, Must Follow Block", "notes":"" }, "maneuver04":{ "name":"Half-Sword Disarm", "points":"4", "phase":"1/2", "ocv":"-1", "dcv":"+1", "effect":"Disarm, 28 STR to Disarm roll, Requires Both Hands", "notes":"" }, "maneuver05":{ "name":"Half-Sword Trip", "points":"3", "phase":"1/2", "ocv":"+2", "dcv":"+0", "effect":"Weapon Strike, Target Falls, Requires Both Hands", "notes":"" }, "maneuver06":{ }, "maneuver07":{ }, "maneuver08":{ }, "maneuver09":{ }, "maneuver10":{ }, "maneuver11":{ }, "maneuver12":{ }, "maneuver13":{ }, "maneuver14":{ }, "maneuver15":{ }, "maneuver16":{ }, "maneuver17":{ }, "maneuver18":{ "name":"Weapon Element: Blades", "points":"0", "phase":"", "ocv":"", "dcv":"", "effect":"", "notes":"" }, "maneuver19":{ }, "maneuver20":{ } }, "perks":{ "perk01":{ "type":"Fringe Benefit", "points":"2", "text":"Fringe Benefit: Sergeant", "notes":"" }, "perk02":{ "type":"Positive Reputation", "points":"3", "text":"Positive Reputation: Brillaint Doctor (A medium-sized group) 11-, +3/+3d6", "notes":"" }, "perk03":{ "type":"Fringe Benefit", "points":"1", "text":"Company Soldier Fringe Benefit: Membership", "notes":"" }, "perk04":{ }, "perk05":{ }, "perk06":{ }, "perk07":{ }, "perk08":{ }, "perk09":{ }, "perk10":{ } }, "talents":{}, "complications":{ "complication01":{ "type":"Hunted", "points":"15", "text":"Hunted: King's Church Frequently (Mo Pow; NCI; Watching)", "notes":"Henkle's overt interest in science and medicine as well as magic as it relates to the healing arts makes the Church unhappy." }, "complication02":{ "type":"Psychological Complication", "points":"10", "text":"Psychological Complication: Airhead (Common; Moderate)", "notes":"Everything seems to go over Henkle's head. He has trouble understanding jokes, ruins the punchlines of his own jokes, and is generally the last to catch on. He is far from stupid, but sometimes you wonder." }, "complication03":{ "type":"Psychological Complication", "points":"10", "text":"Psychological Complication: Aristocratic Attitude (Common; Moderate)", "notes":"Henkle is your classic snob. He was educated by elite teachers to respect every rule of court society. He knows how to behave and how to address each person according to their rank. Obviously, this doesn't work well with commoners and he frequently turns people off." }, "complication04":{ "type":"Physical Complication", "points":"15", "text":"Physical Complication: Horrible Hangovers (Infrequently; Greatly Impairing)", "notes":"After a night of drinking, Henkle is a mess. He suffers a -4 to all rolls on the following morning." }, "complication05":{}, "complication06":{}, "complication07":{}, "complication08":{}, "complication09":{}, "complication10":{}, "complication11":{}, "complication12":{}, "complication13":{}, "complication14":{}, "complication15":{}, "complication16":{}, "complication17":{}, "complication18":{}, "complication19":{}, "complication20":{} }, "powers":{ "power01":{ "name":"Reknit Flesh", "base":"20", "text":"Healing BODY 2d6 (20 Active Points); Increased Endurance Cost (x5 END; -2), Extra Time (1 Turn (Post-Segment 12), -1 1/4), Gestures (Requires both hands; -1/2), Requires A Roll (Wizardry; -1/2), Incantations (-1/4), IIF Expendable (Herbal Ointment; Easy to obtain new Focus; -1/4)", "notes":"Magical energies, if one understands them well enough, can be set to stitching a wound or coaxing the body to more rapidly repair a hematoma or other moderate trauma.", "cost":"3", "endurance":"10", "damage":"2d6", "compound":"false" }, "power02":{ "name":"Light", "base":"22", "text":"Sight Group Images, +/-4 to PER Rolls, Area Of Effect (4m Radius; +1/4) (27 Active Points); Only To Create Light (-1), Gestures (Requires both hands; -1/2), Requires A Roll (Wizardry; -1/2), IIF Expendable (Difficult to obtain new Focus; Charcoal coated in saltpeter; -1/2), Incantations (-1/4), Extra Time (Full Phase, Only to Activate, -1/4), 2 Continuing Charges lasting 1 Hour each (-0)", "notes":"If magic ever had a use it would be to enable one continue study late into the night.", "cost":"7", "endurance":"[2 cc]", "damage":"", "compound":"false" }, "power03":{ }, "power04":{ }, "power05":{ }, "power06":{ }, "power07":{ }, "power08":{ }, "power09":{ }, "power10":{ }, "power11":{ }, "power12":{ }, "power13":{ }, "power14":{ }, "power15":{ }, "power16":{ }, "power17":{ }, "power18":{ }, "power19":{ }, "power20":{ }, "power21":{ }, "power22":{ }, "power23":{ }, "power24":{ }, "power25":{ }, "power26":{ }, "power27":{ }, "power28":{ }, "power29":{ }, "power30":{ } }, "skills": { "skill01": { "name":"", "enhancer":"", "text":"PS: Soldier 11-", "display":"Professional Skill", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill02": { "name":"", "enhancer":"", "text":"PS: Doctor 11-", "display":"Professional Skill", "attribute":"GENERAL", "base":"0", "levels":"0", "cost":"0" }, "skill03": { "name":"Power Skill Wizardry", "enhancer":"", "text":": Wizardry 12-", "display":"Power", "attribute":"INT", "base":"3", "levels":"0", "cost":"3" }, "skill04": { "name":"", "enhancer":"", "text":"Paramedics 13-", "display":"Paramedics", "attribute":"INT", "base":"5", "levels":"1", "cost":"5" }, "skill05": { "name":"", "enhancer":"", "text":"Science Skill: Medicine 13-", "display":"Science Skill", "attribute":"GENERAL", "base":"4", "levels":"2", "cost":"4" }, "skill06": { "name":"", "enhancer":"", "text":"Science Skill: Anatomy 11-", "display":"Science Skill", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill07": { "name":"", "enhancer":"", "text":"KS: Herbalism 11-", "display":"KS", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill08": { "name":"", "enhancer":"", "text":"High Society 12-", "display":"High Society", "attribute":"PRE", "base":"3", "levels":"0", "cost":"3" }, "skill09": { "name":"", "enhancer":"", "text":"KS: Popular Literature 11-", "display":"KS", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill10": { "name":"", "enhancer":"", "text":"CuK: Popular Entertainment 11-", "display":"Knowledge Skill", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill11": { "name":"", "enhancer":"", "text":"Conversation 12-", "display":"Conversation", "attribute":"PRE", "base":"3", "levels":"0", "cost":"3" }, "skill12": { "name":"", "enhancer":"", "text":"Tactics 12-", "display":"Tactics", "attribute":"INT", "base":"3", "levels":"0", "cost":"3" }, "skill13": { "name":"", "enhancer":"", "text":"Teamwork 12-", "display":"Teamwork", "attribute":"DEX", "base":"3", "levels":"0", "cost":"3" }, "skill14": { "name":"", "enhancer":"true", "text":"Linguist", "display":"Linguist", "attribute":"", "base":"3", "levels":"0", "cost":"3" }, "skill15": { "name":"", "enhancer":"", "text":"Language: Ancient Elven (basic conversation; literate) (2 Active Points)", "display":"Language", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"1" }, "skill16": { "name":"", "enhancer":"", "text":"Language: Clans' Tongue (idiomatic; literate) (5 Active Points)", "display":"Language", "attribute":"GENERAL", "base":"5", "levels":"0", "cost":"0" }, "skill17": { "name":"", "enhancer":"", "text":"Language: King's Tongue (fluent conversation; literate) (3 Active Points)", "display":"Language", "attribute":"GENERAL", "base":"3", "levels":"0", "cost":"2" }, "skill18": { "name":"", "enhancer":"", "text":"Language: Southern Tongue (fluent conversation; literate) (3 Active Points)", "display":"Language", "attribute":"GENERAL", "base":"3", "levels":"0", "cost":"2" }, "skill19": { "name":"", "enhancer":"", "text":"WF: Common Melee Weapons", "display":"Weapon Familiarity", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill20": { "name":"", "enhancer":"", "text":"+3 Long Sword", "display":"Combat Skill Levels", "attribute":"GENERAL", "base":"6", "levels":"3", "cost":"6" }, "skill21": { "name":"", "enhancer":"", "text":"Defense Maneuver I-II ", "display":"Defense Maneuver", "attribute":"GENERAL", "base":"5", "levels":"0", "cost":"5" }, "skill22": { }, "skill23": { }, "skill24": { }, "skill25": { }, "skill26": { }, "skill27": { }, "skill28": { }, "skill29": { }, "skill30": { }, "skill31": { }, "skill32": { }, "skill33": { }, "skill34": { }, "skill35": { }, "skill36": { }, "skill37": { }, "skill38": { }, "skill39": { }, "skill40": { }, "skill41": { }, "skill42": { }, "skill43": { }, "skill44": { }, "skill45": { }, "skill46": { }, "skill47": { }, "skill48": { }, "skill49": { }, "skill50": { } }, "playerName":"Test PC #2", "gmName":"Villain in Glasses", "characterFile":"Sample_Character_MA.hdc", "versionHD":"20220801", "timeStamp":"Sat, 14 Sep 2024 09:56:01", "genre":"Fantasy HERO", "campaign":"Coryn's Company", "version":"2.2", "HeroSystem6eHeroic":"true" } } \ No newline at end of file + !hero --import { "character":{ "character_name":"Henkle", "character_title":"Clan Doctor", "height":"1.76 m", "weight":"87.00 kg", "eyes":"Green", "hair":"Sandy", "backgroundText":"Henkle is a learned man, trained as a physician by the best court instructors and an expert swordsman. He once had a promising future serving clan royalty. It all fell to pieces when he misinterpreted a joke and subsequently dug himself into a ever deepening hole. Lucky to be alive, he found himself banished. The Company scooped him up after a particularly self destructive drinking binge.", "historyText":"", "appearance":"Like many a clansman, Henkle is not small and his lack of social awareness makes for an intimidating block of a man.", "tactics":"", "campaignUse":"As part of his education, Henkle dabbled in Wizardy and can cast a couple of spells, including a minor healing spell and a light spell.", "quote":"Banished aristocrat", "experience":"0", "experienceBenefit":"0", "strength":"18", "dexterity":"15", "constitution":"13", "intelligence":"15", "ego":"14", "presence":"15", "ocv":"5", "dcv":"4", "omcv":"3", "dmcv":"4", "speed":"3", "pd":"4", "ed":"4", "body":"15", "stun":"36", "endurance":"40", "recovery":"7", "running":"12", "leaping":"4", "swimming":"0", "equipment":{ "equipment01":{ "name":"Light Maille", "text":"Resistant Protection (5 PD/5 ED) (15 Active Points); Normal Mass (-1), OIF (-1/2), Real Armor (-1/4), Requires A Roll (12- roll; Locations 7-14; -1/4)", "damage":"", "end":"0", "range":"", "mass":"11.40kg", "attack":"", "defense":"true", "notes":"(1 END/turn)" }, "equipment02":{ "name":"Open-face Helm", "text":"Resistant Protection (7 PD/7 ED) (21 Active Points); Normal Mass (-1), OIF (-1/2), Real Armor (-1/4)", "damage":"", "end":"0", "range":"", "mass":"1.17kg", "attack":"", "defense":"true", "notes":"(Locations 4-5)" }, "equipment03":{ "name":"High Boots, Gloves", "text":"Resistant Protection (2 PD/2 ED) (6 Active Points); Normal Mass (-1), OIF (-1/2), Real Armor (-1/4)", "damage":"", "end":"0", "range":"", "mass":"2.60kg", "attack":"", "defense":"true", "notes":"(Locations 16-18, 6-7)" }, "equipment04":{ "name":"Arming Sword", "text":"(Total: 31 Active Cost, 12 Real Cost) Killing Attack - Hand-To-Hand 1d6+1 (1 1/2d6 w/STR), Reduced Endurance (0 END; +1/2) (30 Active Points); OAF (-1), STR Minimum 12 (-1/2), Real Weapon (-1/4) (Real Cost: 11) plus (1 Active Points) (Real Cost: 1)", "damage":"1d6+1 (1 1/2d6 w/STR)", "end":"0", "range":"", "mass":"1.20kg", "attack":"true", "defense":"", "notes":"" }, "equipment05":{ "name":"Long Sword", "text":"(Total: 38 Active Cost, 13 Real Cost) Killing Attack - Hand-To-Hand 1 1/2d6 (2d6 w/STR), Reduced Endurance (0 END; +1/2) (37 Active Points); OAF (-1), STR Minimum 13 (-1/2), Real Weapon (-1/4), Required Hands One-And-A-Half-Handed (-1/4) (Real Cost: 12) plus (1 Active Points) (Real Cost: 1)", "damage":"1 1/2d6 (2d6 w/STR)", "end":"0", "range":"", "mass":"1.70kg", "attack":"true", "defense":"", "notes":"" }, "equipment06":{ "name":"Knife", "text":"Killing Attack - Hand-To-Hand 1/2d6 (1d6+1 w/STR), Range Based On STR (+1/4), Reduced Endurance (0 END; +1/2) (17 Active Points); OAF (-1), Real Weapon (-1/4), STR Minimum 4 (-1/4)", "damage":"1/2d6 (1d6+1 w/STR)", "end":"0", "range":"var.", "mass":"0.40kg", "attack":"true", "defense":"", "notes":"(x2 number of items)" }, "equipment07":{ "name":"Small Pack", "text":"+2 STR, Reduced Endurance (0 END; +1/2) (3 Active Points); Limited Power Power loses about two-thirds of its effectiveness (Only for determining pack capacity; -1 1/2), OAF (-1), Real Weapon (-1/4)", "damage":"", "end":"", "range":"", "mass":"1.00kg", "attack":"true", "defense":"", "notes":"Holds up to 16 kg." }, "equipment08":{ "name":"Cook Set", "text":"+1 with PS Cook (2 Active Points); OAF (-1)", "damage":"", "end":"", "range":"", "mass":"1.00kg", "attack":"", "defense":"", "notes":"" }, "equipment09":{ "name":"Healer's Bag", "text":"+1 Paramedics (2 Active Points); OAF (-1)", "damage":"", "end":"", "range":"", "mass":"0.50kg", "attack":"", "defense":"", "notes":"" }, "equipment10":{ "name":"Magnifying Glass", "text":"Microscopic ( x10) with Sight Group (5 Active Points); OAF (-1)", "damage":" x10", "end":"0", "range":"", "mass":"0.25kg", "attack":"", "defense":"", "notes":"" }, "equipment11":{ "name":"Lantern", "text":"Sight Group Images, +/-4 to PER Rolls, Reduced Endurance (0 END; +1/2), Area Of Effect (8m Radius; +1), Mobile (1m per Phase; +1/2) (55 Active Points); Only To Create Light (-1), OAF (-1), Extra Time (1 Minute, Only to Activate, -3/4), No Range (-1/2), Real Weapon (-1/4), 1 Continuing Fuel Charge lasting 6 Hours (-0), Required Hands One-Handed (-0)", "damage":"", "end":"[1 cc]", "range":"", "mass":"1.00kg", "attack":"true", "defense":"", "notes":"" }, "equipment12":{ "name":"Tinder Box", "text":"Major Transform 1d6 (Dry kindling into kindling on fire, Dowse with water or smother), Sticky (Can spread to flammables; +1/2) (15 Active Points); OAF (-1), 8 Charges (Recovers Under Limited Circumstances; -1/2), No Range (-1/2), Gestures (Requires both hands; -1/2), Requires A Roll (Characteristic roll; INT or DEX; -1/2), Real Weapon (-1/4)", "damage":"1d6", "end":"[8]", "range":"", "mass":"0.20kg", "attack":"true", "defense":"", "notes":"Equipment" }, "equipment13":{ "name":"Warm Blanket", "text":"Change Environment (+2 Temperature Level Adjustment), Reduced Endurance (0 END; +1/2) (9 Active Points); OAF (-1), No Range (-1/2), Self Only (-1/2)", "damage":"", "end":"0", "range":"", "mass":"0.50kg", "attack":"true", "defense":"", "notes":"" }, "equipment14":{ "name":"Water Flask", "text":"+1 with Survival (2 Active Points); OAF (-1), 1 Continuing Fuel Charge lasting 1 Day (-0)", "damage":"", "end":"", "range":"", "mass":"1.00kg", "attack":"", "defense":"", "notes":"" }, "equipment15":{}, "equipment16":{}, "equipment17":{}, "equipment18":{}, "equipment19":{}, "equipment20":{}, "equipment21":{}, "equipment22":{}, "equipment23":{}, "equipment24":{}, "equipment25":{}, "equipment26":{}, "equipment27":{}, "equipment28":{}, "equipment29":{}, "equipment30":{}, "equipment31":{}, "equipment32":{}, "equipment33":{}, "equipment34":{}, "equipment35":{}, "equipment36":{}, "equipment37":{}, "equipment38":{}, "equipment39":{}, "equipment40":{}, "equipment41":{}, "equipment42":{}, "equipment43":{}, "equipment44":{}, "equipment45":{}, "equipment46":{}, "equipment47":{}, "equipment48":{}, "equipment49":{}, "equipment50":{} }, "maneuvers":{ "maneuver01":{ "name":"Slash", "points":"4", "phase":"1/2", "ocv":"+0", "dcv":"+2", "effect":"Weapon +2 DC Strike", "notes":"" }, "maneuver02":{ "name":"Parry", "points":"4", "phase":"1/2", "ocv":"+2", "dcv":"+2", "effect":"Block, Abort", "notes":"" }, "maneuver03":{ "name":"Counterstrike", "points":"4", "phase":"1/2", "ocv":"+2", "dcv":"+2", "effect":"Weapon +2 DC Strike, Must Follow Block", "notes":"" }, "maneuver04":{ "name":"Half-Sword Disarm", "points":"4", "phase":"1/2", "ocv":"-1", "dcv":"+1", "effect":"Disarm, 28 STR to Disarm roll, Requires Both Hands", "notes":"" }, "maneuver05":{ "name":"Half-Sword Trip", "points":"3", "phase":"1/2", "ocv":"+2", "dcv":"+0", "effect":"Weapon Strike, Target Falls, Requires Both Hands", "notes":"" }, "maneuver06":{ }, "maneuver07":{ }, "maneuver08":{ }, "maneuver09":{ }, "maneuver10":{ }, "maneuver11":{ }, "maneuver12":{ }, "maneuver13":{ }, "maneuver14":{ }, "maneuver15":{ }, "maneuver16":{ }, "maneuver17":{ }, "maneuver18":{ "name":"Weapon Element: Blades", "points":"0", "phase":"", "ocv":"", "dcv":"", "effect":"", "notes":"" }, "maneuver19":{ }, "maneuver20":{ } }, "perks":{ "perk01":{ "type":"Fringe Benefit", "points":"2", "text":"Fringe Benefit: Sergeant", "notes":"" }, "perk02":{ "type":"Positive Reputation", "points":"3", "text":"Positive Reputation: Brillaint Doctor (A medium-sized group) 11-, +3/+3d6", "notes":"" }, "perk03":{ "type":"Fringe Benefit", "points":"1", "text":"Company Soldier Fringe Benefit: Membership", "notes":"" }, "perk04":{ }, "perk05":{ }, "perk06":{ }, "perk07":{ }, "perk08":{ }, "perk09":{ }, "perk10":{ } }, "talents":{}, "complications":{ "complication01":{ "type":"Hunted", "points":"15", "text":"Hunted: King's Church Frequently (Mo Pow; NCI; Watching)", "notes":"" }, "complication02":{ "type":"Psychological Complication", "points":"10", "text":"Psychological Complication: Airhead (Common; Moderate)", "notes":"This character is not truly stupid, but rather a bit slower on the uptake than the average person. The character needs to have jokes explained, doesn't understand situations that call for subtlety and wit, and tends to take sarcasm literally. While this condition is hardly debilitating, it does frequently cause the character to be the target of jokes, and causes a certain skepticism regarding the character's intelligence." }, "complication03":{ "type":"Psychological Complication", "points":"10", "text":"Psychological Complication: Aristocratic Attitude (Common; Moderate)", "notes":"This character speaks and acts as if he were royalty. He is stand-offish but polite, proper at all times, speaks impeccably, and expects his commands to be followed. To other characters, he is obviously stuck up and feels is 'too good' for other people." }, "complication04":{ "type":"Physical Complication", "points":"15", "text":"Physical Complication: Horrible Hangovers (Infrequently; Greatly Impairing)", "notes":"Pounding headaches, nausea, and light sensitivity. After waking up from a night of drinking the character suffers a -4 penalty to all rolls for 6 hours." }, "complication05":{}, "complication06":{}, "complication07":{}, "complication08":{}, "complication09":{}, "complication10":{}, "complication11":{}, "complication12":{}, "complication13":{}, "complication14":{}, "complication15":{}, "complication16":{}, "complication17":{}, "complication18":{}, "complication19":{}, "complication20":{} }, "powers":{ "power01":{ "name":"Reknit Flesh", "base":"20", "text":"Healing BODY 2d6 (20 Active Points); Increased Endurance Cost (x5 END; -2), Extra Time (1 Turn (Post-Segment 12), -1 1/4), Gestures (Requires both hands; -1/2), Requires A Roll (Wizardry; -1/2), Incantations (-1/4), IIF Expendable (Herbal Ointment; Easy to obtain new Focus; -1/4)", "notes":"Magical energies, if one understands them well enough, can be set to stitching a wound or coaxing the body to more rapidly repair the trauma of a hematoma.", "cost":"3", "endurance":"10", "damage":"2d6", "compound":"false" }, "power02":{ "name":"Light", "base":"22", "text":"Sight Group Images, +/-4 to PER Rolls, Area Of Effect (4m Radius; +1/4) (27 Active Points); Only To Create Light (-1), Gestures (Requires both hands; -1/2), Requires A Roll (Wizardry; -1/2), IIF Expendable (Difficult to obtain new Focus; Charcoal coated in saltpeter; -1/2), Incantations (-1/4), Extra Time (Full Phase, Only to Activate, -1/4), 2 Continuing Charges lasting 1 Hour each (-0)", "notes":"If magic ever had a use it would be to enable one continue study late into the night.", "cost":"7", "endurance":"[2 cc]", "damage":"", "compound":"false" }, "power03":{ }, "power04":{ }, "power05":{ }, "power06":{ }, "power07":{ }, "power08":{ }, "power09":{ }, "power10":{ }, "power11":{ }, "power12":{ }, "power13":{ }, "power14":{ }, "power15":{ }, "power16":{ }, "power17":{ }, "power18":{ }, "power19":{ }, "power20":{ }, "power21":{ }, "power22":{ }, "power23":{ }, "power24":{ }, "power25":{ }, "power26":{ }, "power27":{ }, "power28":{ }, "power29":{ }, "power30":{ } }, "skills": { "skill01": { "name":"", "enhancer":"", "text":"PS: Soldier 11-", "display":"Professional Skill", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill02": { "name":"", "enhancer":"", "text":"PS: Doctor 11-", "display":"Professional Skill", "attribute":"GENERAL", "base":"0", "levels":"0", "cost":"0" }, "skill03": { "name":"Power Skill Wizardry", "enhancer":"", "text":": Wizardry 12-", "display":"Power", "attribute":"INT", "base":"3", "levels":"0", "cost":"3" }, "skill04": { "name":"", "enhancer":"", "text":"Paramedics 13-", "display":"Paramedics", "attribute":"INT", "base":"5", "levels":"1", "cost":"5" }, "skill05": { "name":"", "enhancer":"", "text":"Science Skill: Medicine 13-", "display":"Science Skill", "attribute":"GENERAL", "base":"4", "levels":"2", "cost":"4" }, "skill06": { "name":"", "enhancer":"", "text":"Science Skill: Anatomy 11-", "display":"Science Skill", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill07": { "name":"", "enhancer":"", "text":"KS: Herbalism 11-", "display":"KS", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill08": { "name":"", "enhancer":"", "text":"High Society 12-", "display":"High Society", "attribute":"PRE", "base":"3", "levels":"0", "cost":"3" }, "skill09": { "name":"", "enhancer":"", "text":"KS: Popular Literature 11-", "display":"KS", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill10": { "name":"", "enhancer":"", "text":"CuK: Popular Entertainment 11-", "display":"Knowledge Skill", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill11": { "name":"", "enhancer":"", "text":"Conversation 12-", "display":"Conversation", "attribute":"PRE", "base":"3", "levels":"0", "cost":"3" }, "skill12": { "name":"", "enhancer":"", "text":"Tactics 12-", "display":"Tactics", "attribute":"INT", "base":"3", "levels":"0", "cost":"3" }, "skill13": { "name":"", "enhancer":"", "text":"Teamwork 12-", "display":"Teamwork", "attribute":"DEX", "base":"3", "levels":"0", "cost":"3" }, "skill14": { "name":"", "enhancer":"true", "text":"Linguist", "display":"Linguist", "attribute":"", "base":"3", "levels":"0", "cost":"3" }, "skill15": { "name":"", "enhancer":"", "text":"Language: Ancient Elven (basic conversation; literate) (2 Active Points)", "display":"Language", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"1" }, "skill16": { "name":"", "enhancer":"", "text":"Language: Clans' Tongue (idiomatic; literate) (5 Active Points)", "display":"Language", "attribute":"GENERAL", "base":"5", "levels":"0", "cost":"0" }, "skill17": { "name":"", "enhancer":"", "text":"Language: King's Tongue (fluent conversation; literate) (3 Active Points)", "display":"Language", "attribute":"GENERAL", "base":"3", "levels":"0", "cost":"2" }, "skill18": { "name":"", "enhancer":"", "text":"Language: Southern Tongue (fluent conversation; literate) (3 Active Points)", "display":"Language", "attribute":"GENERAL", "base":"3", "levels":"0", "cost":"2" }, "skill19": { "name":"", "enhancer":"", "text":"WF: Common Melee Weapons", "display":"Weapon Familiarity", "attribute":"GENERAL", "base":"2", "levels":"0", "cost":"2" }, "skill20": { "name":"", "enhancer":"", "text":"+3 Long Sword", "display":"Combat Skill Levels", "attribute":"GENERAL", "base":"6", "levels":"3", "cost":"6" }, "skill21": { "name":"", "enhancer":"", "text":"Defense Maneuver I-II ", "display":"Defense Maneuver", "attribute":"GENERAL", "base":"5", "levels":"0", "cost":"5" }, "skill22": { }, "skill23": { }, "skill24": { }, "skill25": { }, "skill26": { }, "skill27": { }, "skill28": { }, "skill29": { }, "skill30": { }, "skill31": { }, "skill32": { }, "skill33": { }, "skill34": { }, "skill35": { }, "skill36": { }, "skill37": { }, "skill38": { }, "skill39": { }, "skill40": { }, "skill41": { }, "skill42": { }, "skill43": { }, "skill44": { }, "skill45": { }, "skill46": { }, "skill47": { }, "skill48": { }, "skill49": { }, "skill50": { } }, "playerName":"Test PC #2", "gmName":"Villain in Glasses", "characterFile":"Sample_Character_MA.hdc", "versionHD":"20220801", "timeStamp":"Wed, 13 Nov 2024 13:15:05", "genre":"Fantasy HERO", "campaign":"Sample", "version":"2.3", "HeroSystem6eHeroic":"true" } } \ No newline at end of file diff --git a/HeroSystem6eHeroic_HDImporter/2.3/Sample_Character_MA.hdc b/HeroSystem6eHeroic_HDImporter/2.3/Sample_Character_MA.hdc index 77acf99690b651559ecdba8cc09f19a374aea3f2..5699a64413e60eeee4994bbf8d91697b8796cebe 100644 GIT binary patch delta 11442 zcmbVR32>CxegEFd2!o8oAsNIXX(d_4#-L+YE3IN ;^P(Q`_y-?(g^B ze%c$6jz+uRzW0Cs_rI_2n^)4mdUS!~^Ur>o_9Y=tiB s9X z$IrKv?YDMW! pn-8k!Jd zO&WI>% -A#%^4R=S@Ypg2hqDIaXIW?{iGsMsC@^(Yoqt+CpK8U9Q zt&u@Uei%=#@Xk2&uphsuuLCfJY4zC>;S5lDMwJAm;&$Kw0jB^oVI2x1nXtz7VWac| zu%`Wh-V-(fUK+hWU>(%w2CSVLVp9K_0={vp6nIE5jb|{Bgx+y%4O>H+A6gG>$slxD zyYZWslGkDDi`u9MKrqh?S!=O61PJbrTdOr22k $v$^1p;$m9VlK<-C1T|`Mq zaD{>#0RMaOG=g2qW(wdtum>-~=QLJqWQQ~|UT&{Y^t{O6BnuH~O#y13#y@3^1+cYO zA18(8%4sd49*{DsFEeD>`lSem^a(?@tzV<}A)Fv- NRo-kirpM zJ#0M%{zx@BBnnF405~vC9@bY9br}`yh=C)w`?T&UOA{0#s*93TAnF>DLIWHGs(o5u z)GGx~jnm*pu}3+KVU;BB)YniN xu#M}HpM4PFG|uh?tg(*Gz-4PbY}WxOeVvx|h!)Z=0PKJU zsewtX+h#`TPimCLD=Bos*!E5_j{*IZHkMejxx-U~_!|IrT8gdB0R77NBmoRpk+{Sx zz VPZQy@VRjt9jaLrL zN}hr@2E7Z^(_!exCd7?uY1n2{2lKMi!XaSV14(Ju$qWmIp#YjvCs&IHn{MY&CLWFe zp9!tTb=M))(Yknl*j%4|K;-4vF|-Q1yELZ=$0!LlsK0+etWw8H#69zUs6vn`<>a?@ zYEwU1EA9>DJ}9cv;`aNT3NkGZ0pJH|%RE*&st7OgB0no3<{IQ>Z|J+_B44CcSYGuz zzsM`}LPzv#w+2M=)=xgYQq6nS+sDLMXwWU55lL`XupW`^*ULjsbc%xx)!r{w % !QXbos7)VMXEH>dAzKFC@TsvLu_lIeS`>}%{Bz#WwH~pU##bJ? zxn1-ukAX8~uUF0Fie~jukEoQ#H@={bKP58fu^2a;hC)w?p_MA@xX6w%GgCLa5kOFw zs;iHSPC3zRPKyd!x>JRYiGNVn_lxbqE&JU$D)4o2P);0PsWv<*GS#OC#HtvKH4r6| zomCCT%L{EdDLNeL+{5C2)t)O>Xya66gQ948tg(mBK%S`HKNLJMu3jG&`6+Op_^~tO z91*n|_wHowLyQcWG>-OZQKTXFs=qmv;AjT2B6R+gI2OhiJR^#hB~s{?i(e{`eb>rm z**)o@_5UdTQ&ZXq1?J1M8K(cK)WM?~x~tOtPqmyV$;N?v`LI7MSvMtHP(Z7z1Qaz* za|gV(KL#E|FKv6vx^$K^rDKN<-g~qfF4qZPMH^yY5n^DS)rh}7tJP}9ceAw-|4mk> z)rGZgto2#-fa$WD ya2d0`E~yvMAy9}p9$V3_bnk%kPnrgmh> zO88;q8)h7q7tCzTGr%Ml|87r1JDyFxx3dk4V3X~}be^*_>!eW&@Ue<9zj(v6bp7)M z_3Cigmg0Do 83Btk7dr}vuaos2L~Rj ziXl&yt;*KC{dP;3H=TH$#T7d75|-A(2 ;!e>L%TK;M^~TC-8g>I*t{tLjz-Nd4P3LTeORk5TA|`^? z2u4;HZk-0SCUaV0RD-%+n!-0rLHw3SGIQnCZX*Lb59bz_LkeE}Q3CvCKf%aL?7C*L zsu(^BW!AsGS rnTj=x!DBX2jB%$s^jb8`&x}zaRkczX9^?1lVPrVHuX?n z)By57Cnvguk`=$cUoI#ND@^B)JBo57^Q{cl^2WW!HAze|a`4Ua+1zPgS*=_rMV`F4 zekF5y@Yb8}M-uQX426vmiAOr`$qstn_BrI~U%1K`AnUbjHR-^aN;l*Tg^)r{sHQ0{ zXoW&_0~|c^#eWg%c%R6Ze|l@F`o$@cDVP1`G5Pr~Ps&^GxfA45jZBESPO$yD-yv6j zoSy)IJi&QUo@{x!RDSQ{Kc=-?ZK}3dIOpL35xe78g`(o*i~lP(^rXwHpC%%J%~Jz1 ztGQJ6{P!nWUEps!LVUZml_@~Z?8sddvnKn0Ta3okrPIIxYhQ5kXWtMM&qEt=qzQ57 zc4lit!;w*ex_nBkoxc$Q7fnxSCPU;nD2MoTZ0iKojNvpUB
mrr6jg} N}4F@OqP>JTMD*GnmI((_RIJ`%bx zD4tDTHbs#Tx}wArI%(6FeVFqZ&bv@BPztR{__wnb+f7Dww;i3AbR$-g)G34&j ;hxUOK i(Pf4WAywUW&g&INy-z~s(ot_^XQ2ElmS2%0!}GEFHbS$4waw<&lM_sn3DBM(f3 z)Xfv(oSgW#%q2~Fo;8Y~%vlDGtF{NkdKq}`?uVLiQ@zzYr|b}r6ckV(ubo_*Yv&&J z+B+adGfmimnxXc}^^8`SVz+kTMoJ>)H!R)L2$l~)@EqDi@-;hfyBoJ>jAMY*BM%7f z`|{W~-sjM~tP9wgu3GMh>`JJ-KoyLLH5mPyso5S)=#53)+H)H5*=cD~5q)CUKrYto zNh!y8LnmJxeW*d34!eHNj?83&H5*-OL}w;5-oZ>r&b(VJ`+oksu7gY=YK#$~H7*_R zW`xzR8lvHReAS=_>j $&s@PM zmH@tEsZeM@o0G(%cLZLIxRS`?ORMvOw_Yf9B=7@t_I!YENM3Moih#fze<_5oFXd|r zx#9hp`3;aJ3_x8fK+@8W496u6D7<6e9dOoa?8nR?(bd2fmNANVLo~)_8zJ)Tx^iZp zsJpN@3go53d2vxs$Fn9wh>7G)K)Ma8W<}P9$j0B@NqjU?kFgO$^{E?ary-uREc#dz z6v` >1!fc0(8 ixR#?GlN 2be2 R!3*ZJ1UUJa%ePmY~QHO2Cp&DtCYx#PmIW;**-H` znVloX5`-xwH4&-h69c8DTlKF+A=> 3L}_%g_b7dPNAWQ 4|GCpes~JI zSk8}`xmg&Pbi`Kxo3YCPQG{pq?aY*fD8or+SH9#c({lvQ5BQd?3`9@ho8ep60UCmD z#OXdR)Nkyp^j!<_*rS8m9?3fPm9+epGE`co&tdDu>cl32l_cMznn6Zf#zYOZOA|ms z?NN?Hl=OChcoROmG~r$tGhylwK1={%+_U>nv&Rh0z>)~z)n^%ITIGqcoPa%E(kl=N z!%io58RJcqtpha_F@@HvX*aib p!EeQ@HgW|PSgSo_+l{L1Ts3oU$To>#gY$>-ORD%r&3>7rzOL2 zPXve7>o)M%4WxH+lv6&6+^>1EO(N+@M2$jcGFC8O<{$S1W jaQ hv7j9q@(W@O8P5@-CRshGal@Y0LlOp+vqomrR!bUMFJ7t6Gm z+H{7q=f0eyP-yHndT@ZThOD`@q0^*{O%i=Kkn%T~NPen9pW?;jpJqh13BL(<)RR)9 zsb0NE)W$iA;I~FX@uAVUL$tKx;AE{oCtzH}mQJFTvH!3$j2)z-aVEbt(pVcRJz=5P z80Z~TcYOfd*(tv!1rS|@k})Gds*TbnV!oI+-fcVCEaC*b@el@U;Pz;Z#CSP lmaS mGKRcZr5N3t79`mTz?a8xVmPb^_l<~{$&Qq%n`g!S!umgl((p3? delta 3187 zcmZuzeQZ=!7Qg4sSUYW$Rtri?=>t{@1?tRn+Gz xhf?tQPF z7V 6Q(a^y7Hw4zt6jP!c3 HU1 zE*ugMWcRdryLb;`K8+cX$+#b1on~ykbRiqWn#20j3%#Wcur9kK@YJgYmE=Q{RLR#) zQZzU5_Zhm4!kI^C1&_Z-8*?S^f9c$!(8y;Z&X4rW<$~P6KMNe5`3J2mjl*>QMoFGL zNmV?xnZmh=OaF2fEfim0>{RBiT%KBJKMAm|AFR+*7vs6_KhEANuIDp53G#L2dg{{s zxhtPMA6npIqlyWfd^|}}Zf~YAx83E; FZ z0GV(tX)uJ5opCYlfJ|0);NJzl13+ESN4h{F(g9y0Hb*e-!y}sVEiCpJJ$KBXI$+Gp zMzaY9MWI^$g w% z)OMx6zEG}9UN6^~n?KN}FNYT;R1>nJQALp_^{S4~yhIiJP!ZMUrf=4SZl|ITWh=Zb zA=+xBcg-`vEo-S#w|^7%J}RKcZl@sJd$9j?c HU+bpxRci=ng)0f8PbHP|! z-H=Pocbky<`I$vjQ9T5|B@MIiSKi|BsEJt8P|TQU_2(BJ5ZZaqa$4 O}}?<&Nhg>qfG!_*uf|B#k=6HDme9XcE?8?*a}OC1PJf*G<&j`sle-j^4`h>^SS zuoF1iP-W~wOF)r2keU#V zB~rmzQw%|p^cpuuAeV#@@`A1QL03{pdc$13&(|4~jO+Bh5)*;fE^5wtF8Isx4m{Gl zrCHco&ad #NzzkGXiB< zBJ@a-$XOv>N)EjIm=Gb~tf9p#WC!UWHt!{dv^f9;0s*yqUKaU D52Tst*%#5S-pbWH8ptu-c46YPhZ))KqnywfxQXn55D-0pT5^A z)K8|%c+W%h?ww6)gE-DDtDN7x{`+!1J&J?&Vw7Cp8SEjCK3|rknB0my9L0rx^fAQV zh=`l;Uk8XAOyn^bloKc_UlM&k-_uH`se%8vjh5o|=T`cQ@1$>DI#&eb &{$)_^%a`4k=XmTaT914hiX z3L!MftwVM^>geWEVQx=Q*{rwLAYk{sJ$oxR)=mg1`MkD4>MZAXGgRaI7l(Ed zcH=?746|GK*srKSyNloB%mdEdvUGwU*-KZ8qlP$HgqxN<7 #9rI7Ua z?t8prhpC2&8x8JqH>}q$d{W_|KU^}gub(IKL-xSR3F7JfG_2h(!n}Np*38rU{AX2O zW{iGoNL!gFYUCXo(SDE!wVwM+`qmoZ?zgC%$GfR0GV2I$A46KV{f*Xp*WRL5M|S z5y#{bq|;e6s*7>2 [!TIP] -> HD Importer will recognize the following key phrases if added to a piece of equipment's notes and attempts to automatically apply the value given (parentheses are not strictly required). +> HD Importer will recognize the following key phrases if added to a piece of equipment's notes and attempts to automatically apply the values given. -### (Max Range: Xm) or (max range X) -A weapon's maximum range. +### "(locations x-y, z)" or "(loc x, y-z)" +If HD Importer finds the keyword "locations" it will assign the list "x-y, z" to a piece of armor's locations. End the list with closed parentheses ")" or a semicolon ";". -### (X END/Turn) or (END/Turn: X) +### "Equipment" +A weapon with the "equipment" keyword will be imported as a piece of equipment, not a weapon. Useful for ordinary items built with attack powers. + +### "Max Range: XYZm" or "max range XYZ" +HD Importer will fill in a weapon's maximum range with XYZ. + +### "X END/Turn" or "END/Turn: X" If your campaign uses the optional rule of applying END costs to armor, HD Importer will automatically apply the value X. # Help @@ -122,4 +128,4 @@ Version 2.1 -- Updated to support additional character sheet features as of shee Version 2.2 -- Fix for compound power import failure. Recognizes Mental Combat Skill Levels and assigns levels and costs. Minor update to HeroSystem6eHeroic.hde (version 2.2). Improved formatting of text in powers, talents, and complications (September 14, 2024). -Version 2.3 -- +Version 2.3 -- This version is up to date with Sheet Version 3.80. Adds special intelligence skill types with variable base cost (SPx). Adds "Native +" language skill assignment for native languages updated imitate dialects. Doubles the number of armor, weapons, and equipment imported to account for the new "A/B" sets feature of the sheet. Recognizes additional copies of weapons purchased with the quantity feature of HD. Adds recognition of the keywords and key phrases "Max Range XYZ" and "Equipment." HeroSystem6eHeroic.hde (version 2.3) updated to 50 equipment slots (November 13, 2024). diff --git a/HeroSystem6eHeroic_HDImporter/script.json b/HeroSystem6eHeroic_HDImporter/script.json index b6c873839..528a58a4a 100644 --- a/HeroSystem6eHeroic_HDImporter/script.json +++ b/HeroSystem6eHeroic_HDImporter/script.json @@ -1,7 +1,7 @@ { "name":"HeroSystem6eHeroic HDImporter", "script":"HeroSystem6eHeroic_HDImporter.js", - "version":"2.2", + "version":"2.3", "description":"HDImporter imports HERO Designer-created heroes, villains, monsters, and other characters into a HeroSystem6eHeroic Roll20 campaign. The characters must be exported from Hero Designer using the format HeroSystem6eHeroic.hde, which is a companion file in the HD Importer repository. To use, open an exported character text file and paste the contents into chat and hit enter. Full sheet instructions in the [README](https://github.com/Roll20/roll20-api-scripts/tree/master/HeroSystem6eHeroic_HDImporter). Based on BeyondImporter Version O.4.0 by Robin Kuiper, Matt DeKok, and Ammo Goettsch", "authors": "Villain In Glasses", "roll20userid":"633423", @@ -13,6 +13,6 @@ }, "conflicts":[], "previousVersions":[ - "1.0, 1.1, 2.0, 2.1" + "1.0, 1.1, 2.0, 2.1, 2.2" ] } From 35ab41c78bd57ad14bbfcfe2d976afd13b9a0bad Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Wed, 13 Nov 2024 13:54:42 -0700 Subject: [PATCH 16/21] README update. --- HeroSystem6eHeroic_HDImporter/README.MD | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/HeroSystem6eHeroic_HDImporter/README.MD b/HeroSystem6eHeroic_HDImporter/README.MD index d00e05c27..b71bd8518 100644 --- a/HeroSystem6eHeroic_HDImporter/README.MD +++ b/HeroSystem6eHeroic_HDImporter/README.MD @@ -68,16 +68,16 @@ Powers that add (or subtract) characteristics, movement, and perception abilitie > [!TIP] > HD Importer will recognize the following key phrases if added to a piece of equipment's notes and attempts to automatically apply the values given. -### "(locations x-y, z)" or "(loc x, y-z)" +*"(locations x-y, z)" or "(loc x, y-z)"* If HD Importer finds the keyword "locations" it will assign the list "x-y, z" to a piece of armor's locations. End the list with closed parentheses ")" or a semicolon ";". -### "Equipment" +*"Equipment"* A weapon with the "equipment" keyword will be imported as a piece of equipment, not a weapon. Useful for ordinary items built with attack powers. -### "Max Range: XYZm" or "max range XYZ" +*"Max Range: XYZm" or "max range XYZ"* HD Importer will fill in a weapon's maximum range with XYZ. -### "X END/Turn" or "END/Turn: X" +*"X END/Turn" or "END/Turn: X"* If your campaign uses the optional rule of applying END costs to armor, HD Importer will automatically apply the value X. # Help From 1f55b8852d14195c5994cbf0708ba64facaa1134 Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Wed, 13 Nov 2024 13:56:28 -0700 Subject: [PATCH 17/21] README update. --- HeroSystem6eHeroic_HDImporter/README.MD | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/HeroSystem6eHeroic_HDImporter/README.MD b/HeroSystem6eHeroic_HDImporter/README.MD index b71bd8518..4b9f56413 100644 --- a/HeroSystem6eHeroic_HDImporter/README.MD +++ b/HeroSystem6eHeroic_HDImporter/README.MD @@ -68,16 +68,16 @@ Powers that add (or subtract) characteristics, movement, and perception abilitie > [!TIP] > HD Importer will recognize the following key phrases if added to a piece of equipment's notes and attempts to automatically apply the values given. -*"(locations x-y, z)" or "(loc x, y-z)"* +#### "(locations x-y, z)" or "(loc x, y-z)" If HD Importer finds the keyword "locations" it will assign the list "x-y, z" to a piece of armor's locations. End the list with closed parentheses ")" or a semicolon ";". -*"Equipment"* +#### "Equipment" A weapon with the "equipment" keyword will be imported as a piece of equipment, not a weapon. Useful for ordinary items built with attack powers. -*"Max Range: XYZm" or "max range XYZ"* +#### "Max Range: XYZm" or "max range XYZ" HD Importer will fill in a weapon's maximum range with XYZ. -*"X END/Turn" or "END/Turn: X"* +#### "X END/Turn" or "END/Turn: X" If your campaign uses the optional rule of applying END costs to armor, HD Importer will automatically apply the value X. # Help From 508701c447af8bdf6651ab6f64025a0d6816d0a7 Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Wed, 13 Nov 2024 18:35:41 -0700 Subject: [PATCH 18/21] README update. --- HeroSystem6eHeroic_HDImporter/README.MD | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/HeroSystem6eHeroic_HDImporter/README.MD b/HeroSystem6eHeroic_HDImporter/README.MD index 4b9f56413..0dd63e86e 100644 --- a/HeroSystem6eHeroic_HDImporter/README.MD +++ b/HeroSystem6eHeroic_HDImporter/README.MD @@ -68,17 +68,13 @@ Powers that add (or subtract) characteristics, movement, and perception abilitie > [!TIP] > HD Importer will recognize the following key phrases if added to a piece of equipment's notes and attempts to automatically apply the values given. -#### "(locations x-y, z)" or "(loc x, y-z)" -If HD Importer finds the keyword "locations" it will assign the list "x-y, z" to a piece of armor's locations. End the list with closed parentheses ")" or a semicolon ";". +- `(locations x-y, z)" or "(loc x, y-z)` : `If HD Importer finds the keyword "locations" it will assign the list "x-y, z" to a piece of armor's locations. End the list with closed parentheses ")" or a semicolon ";". -#### "Equipment" -A weapon with the "equipment" keyword will be imported as a piece of equipment, not a weapon. Useful for ordinary items built with attack powers. +- `Equipment` : A weapon with the "equipment" keyword will be imported as a piece of equipment, not a weapon. Useful for ordinary items built with attack powers. -#### "Max Range: XYZm" or "max range XYZ" -HD Importer will fill in a weapon's maximum range with XYZ. +- `Max Range: XYZm" or "max range XYZ` : HD Importer will fill in a weapon's maximum range with XYZ. -#### "X END/Turn" or "END/Turn: X" -If your campaign uses the optional rule of applying END costs to armor, HD Importer will automatically apply the value X. +- `X END/Turn" or "END/Turn: X` : If your campaign uses the optional rule of applying END costs to armor, HD Importer will automatically apply the value X. # Help @@ -128,4 +124,4 @@ Version 2.1 -- Updated to support additional character sheet features as of shee Version 2.2 -- Fix for compound power import failure. Recognizes Mental Combat Skill Levels and assigns levels and costs. Minor update to HeroSystem6eHeroic.hde (version 2.2). Improved formatting of text in powers, talents, and complications (September 14, 2024). -Version 2.3 -- This version is up to date with Sheet Version 3.80. Adds special intelligence skill types with variable base cost (SPx). Adds "Native +" language skill assignment for native languages updated imitate dialects. Doubles the number of armor, weapons, and equipment imported to account for the new "A/B" sets feature of the sheet. Recognizes additional copies of weapons purchased with the quantity feature of HD. Adds recognition of the keywords and key phrases "Max Range XYZ" and "Equipment." HeroSystem6eHeroic.hde (version 2.3) updated to 50 equipment slots (November 13, 2024). +Version 2.3 -- This version is up to date with Sheet Version 3.80. Adds special intelligence skill types with variable base cost (SPx). Adds "Native +" language skill assignment for native languages updated to imitate dialects. Doubles the number of armor, weapons, and equipment imported to account for the new "A/B" sets feature of the sheet. Recognizes additional copies of weapons purchased with the quantity feature of HD. Adds recognition of the keywords and key phrases "Max Range XYZ" and "Equipment." HeroSystem6eHeroic.hde (version 2.3) updated to 50 equipment slots (November 13, 2024). From a441dac0140eca03049d51a6bf09b9b73772abc0 Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Wed, 13 Nov 2024 18:37:22 -0700 Subject: [PATCH 19/21] README update. --- HeroSystem6eHeroic_HDImporter/README.MD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/HeroSystem6eHeroic_HDImporter/README.MD b/HeroSystem6eHeroic_HDImporter/README.MD index 0dd63e86e..fecd2e434 100644 --- a/HeroSystem6eHeroic_HDImporter/README.MD +++ b/HeroSystem6eHeroic_HDImporter/README.MD @@ -68,13 +68,13 @@ Powers that add (or subtract) characteristics, movement, and perception abilitie > [!TIP] > HD Importer will recognize the following key phrases if added to a piece of equipment's notes and attempts to automatically apply the values given. -- `(locations x-y, z)" or "(loc x, y-z)` : `If HD Importer finds the keyword "locations" it will assign the list "x-y, z" to a piece of armor's locations. End the list with closed parentheses ")" or a semicolon ";". +- `(locations x-y, z) or (loc x, y-z)` : `If HD Importer finds the keyword "locations" it will assign the list "x-y, z" to a piece of armor's locations. End the list with closed parentheses ")" or a semicolon ";". - `Equipment` : A weapon with the "equipment" keyword will be imported as a piece of equipment, not a weapon. Useful for ordinary items built with attack powers. -- `Max Range: XYZm" or "max range XYZ` : HD Importer will fill in a weapon's maximum range with XYZ. +- `Max Range: XYZm or max range XYZ` : HD Importer will fill in a weapon's maximum range with XYZ. -- `X END/Turn" or "END/Turn: X` : If your campaign uses the optional rule of applying END costs to armor, HD Importer will automatically apply the value X. +- `X END/Turn or END/Turn: X` : If your campaign uses the optional rule of applying END costs to armor, HD Importer will automatically apply the value X. # Help From 8bb299d9c36d323ab51dedf886da16df6c7790fe Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Wed, 13 Nov 2024 22:27:58 -0700 Subject: [PATCH 20/21] README update. --- HeroSystem6eHeroic_HDImporter/README.MD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HeroSystem6eHeroic_HDImporter/README.MD b/HeroSystem6eHeroic_HDImporter/README.MD index fecd2e434..457c34347 100644 --- a/HeroSystem6eHeroic_HDImporter/README.MD +++ b/HeroSystem6eHeroic_HDImporter/README.MD @@ -68,7 +68,7 @@ Powers that add (or subtract) characteristics, movement, and perception abilitie > [!TIP] > HD Importer will recognize the following key phrases if added to a piece of equipment's notes and attempts to automatically apply the values given. -- `(locations x-y, z) or (loc x, y-z)` : `If HD Importer finds the keyword "locations" it will assign the list "x-y, z" to a piece of armor's locations. End the list with closed parentheses ")" or a semicolon ";". +- `(locations x-y, z) or (loc x, y-z)` : If HD Importer finds the keyword "locations" it will assign the list "x-y, z" to a piece of armor's locations. End the list with closed parentheses ")" or a semicolon ";". - `Equipment` : A weapon with the "equipment" keyword will be imported as a piece of equipment, not a weapon. Useful for ordinary items built with attack powers. From 60bca4e632638b4809299c056bfb52754e308640 Mon Sep 17 00:00:00 2001 From: Villain1nGlasses <85969638+Villain1nGlasses@users.noreply.github.com> Date: Wed, 13 Nov 2024 22:32:06 -0700 Subject: [PATCH 21/21] Sample Character Update --- .../2.3/Sample_Character.hdc | Bin 166000 -> 165894 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/HeroSystem6eHeroic_HDImporter/2.3/Sample_Character.hdc b/HeroSystem6eHeroic_HDImporter/2.3/Sample_Character.hdc index 93ee772548bb55683af82c54698f08f8c5266d2d..1b41f82862279e34a618fe2e0eb5a8fc18b3afc0 100644 GIT binary patch delta 118 zcmew`fvar-7xTaW3>%qZ7&o6`oWjT*%#g^C%TU0O!;sos%e=joneo0PzbS(mgE@mK z5Lz-AGZ;?(C?Gw#;G5obtBZ_W?fYaIx9^i>YKh@R(#sG(x$vX#cAqMyQ@qo4I+$dp Oi*+!GP50 s=Wl7y=ml8G;x>7~+B0mBAOt_hE1Zvuzoa7(9StK|mD> z3@!|*48;tY4CxGcKvofhK2Q!s=Q9K|R03s6fV^A=Gav~Q&tynu&|}D8NCAo|0Zq_n zuw&q5-~zG~7;G4v89X)@Fg7#FIs=U;0veIWpbj)f0Vt6VG^l_f5hzmG{Eun-KPJZe zlKdtN77QS4#$e81$Y3;C!BKj8KO3Xo^xYR2x!Ubz8MoWZGPT5Tx&Sp60d3CQ{-~1a YH1G72?M!0R*S0gsOuygGq|V3y01Ev%x&QzG