RPTools / maptool

Virtual Tabletop for playing roleplaying games with remote players or face to face.
http://rptools.net
GNU Affero General Public License v3.0
802 stars 263 forks source link

Add PCGen support like what we have for Hero Lab(R) #3198

Closed adventuremagic123 closed 1 year ago

adventuremagic123 commented 3 years ago

Feature Request

I use the Hero Lab(R) part of the MapTool API in MTScript to import PCs and NPCs for my PF1e framework -- and it works great! Saves me lots of time! Takes only about 1 minute or less to import a character. If I did it manually, it would be hours.

Problem is that most players are not willing to shell out the money for Hero Lab(R), but are more willing to use PCGen because it's free.

I'm tired of spending hours keying in their characters. I want to automate this process by having them use PCGen.

I need a way to import characters from PCGen just like we have for Hero Lab(R).

If you provide this feature, I'll add it to my PF1e framework (game system).

The Solution you'd like

I'd like to have MTScript support for PCGen like we do for Hero Lab(R).

I want to be able to:

  1. Export characters from PCGen using the universal XML format they support.
  2. Then, use MTScript to process that XML so that I can import that data for use by my MapTool macros.

Alternatives that you've considered.

Asking players to use Hero Lab(R) frequently doesn't work because lots of money is involved -- worth every penny for GMs, though. I've very much enjoyed it as a player, too. But, most players won't do it.

Additional Context

D20Pro provides this feature. It's been broken but just got fixed to work with PCGen 6.08.00RC8.

It's a complete game changer to be able to import characters from these tools. automatically Typing in these characters manually can take hours. My PF1e framework imports a detailed character in usually about 1 minute. I've done that even during game play for a player. It's the ice cream of the future!

adventuremagic123 commented 3 years ago

I'll just say that this feature has been critically important to my campaigns through Hero Lab(R) because of the extensive library of NPCs I have there and the sophisticated macros I created for PF1e. I'm not saying that to brag.

I developed the PF1e framework to handle situations difficult for GMs to manage on their own during game play. A key feature is this thing I called "adjustments" or "adjustment templates". Another is the ability to automatically apply ability modifiers. So, if spells are cast or characters get conditions, the framework can handle most of these complex scenarios and help the GM keep track of them.

For this feature to work. I've got to have the PCs and NPCs imported either through Hero Lab(R), PCGen, or I've got to manually enter the characters.

adventuremagic123 commented 3 years ago

D20Pro needs to have PCGen characters exported using PCGen's "csheet_fantasy_generic_export.xml.ftl" export format.

I'm not knowledgeable enough to know whether or not the "csheet_fantasy_OpenRPG.xml" format would be better or not.

PCGen file export

FullBleed commented 3 years ago

I like PC Gen. I use it as a base for maintaining PC builds and transferring relevant info to my framework (as my framework isn't a character builder.) But, how much gas is left in PC Gen's tanks? It seems like all of their core devs have left.

I always thought it was strange that MT adopted Hero Labs support before PC Gen support given that PC Gen was also open source... but it does see like the ship to support PC Gen may have sailed.

melek commented 3 years ago

Just in background I want to chime in that to the best of my knowledge, we have Herolab and Syrinscape integration because @JamzTheMan uses them in his games and had the oomph to code those integrations directly into MapTool.

I like the idea of more integrations, and add-ons using REST functions should be able to do quite a lot like this without depending on a core dev invested in the tool for their game.

FullBleed commented 3 years ago

Not surprised. Dungeondraft is probably supported for much the same reason (i.e. MT dev interest/use tends to = MT support). And there wasn't much (if any) outreach from PCGen to MT either... I'm fairly certain that most interest on that side was in Fantasy Grounds (another oddity, all things considered.)

On exploring some simpler close-term PC Gen support in MT... I just took a look at a raw .PCG file and I don't think parsing it in MT would be all that difficult. It looks to just be a plain text file. So if the .PCG file type could be white-listed as an accepted plain-text file, it could be dropped into MT, tagged with a custom PCGen graphic/prefix, and then easily parsed accordingly by an add-on or framework specific parser.

Heck, if MT did something simple like move the raw PCG plain text into the token Notes field on drop, that alone would be big help.

Here is what's in a sample raw PCG file:

PCGVERSION:2.0

# System Information
CAMPAIGN:Paizo - Pathfinder Roleplaying Game Core Rulebook|CAMPAIGN:Paizo - Pathfinder Roleplaying Game Character Traits Web Enhancement
VERSION:6.00.01
ROLLMETHOD:2|EXPRESSION:Epic Fantasy
PURCHASEPOINTS:Y|TYPE:Epic Fantasy
CHARACTERTYPE:PC
POOLPOINTS:25
POOLPOINTSAVAIL:25
GAMEMODE:Pathfinder_RPG
TABLABEL:0
AUTOSPELLS:Y
USEHIGHERKNOWN:N
USEHIGHERPREPPED:N
LOADCOMPANIONS:N
USETEMPMODS:Y
AUTOSORTGEAR:Y
SKILLSOUTPUTORDER:0
IGNORECOST:N
ALLOWDEBT:N
AUTORESIZEGEAR:Y

# Character Bio
CHARACTERNAME:Brewl
TABNAME:
PLAYERNAME:Brad
HEIGHT:76
WEIGHT:190
AGE:18
GENDER:Male
HANDED:Right
SKINCOLOR:Redish tan
EYECOLOR:Green
HAIRCOLOR:Black
HAIRSTYLE:Short
LOCATION:
CITY:
BIRTHDAY:
BIRTHPLACE:
PERSONALITYTRAIT1:
PERSONALITYTRAIT2:
SPEECHPATTERN:
PHOBIAS:
INTERESTS:
CATCHPHRASE:
PORTRAIT:

# Character Attributes
STAT:STR|SCORE:16
STAT:DEX|SCORE:14
STAT:CON|SCORE:16
STAT:INT|SCORE:10
STAT:WIS|SCORE:10
STAT:CHA|SCORE:10
ALIGN:CG
RACE:Human

# Character Class(es)
CLASS:Barbarian|LEVEL:2|SKILLPOOL:0
CLASS:Ranger|LEVEL:1|SKILLPOOL:0|SPELLBASE:WIS|CANCASTPERDAY:
CLASSABILITIESLEVEL:Barbarian=1|HITPOINTS:10|SKILLSGAINED:5|SKILLSREMAINING:0
CLASSABILITIESLEVEL:Ranger=1|HITPOINTS:9|SKILLSGAINED:7|SKILLSREMAINING:0
CLASSABILITIESLEVEL:Barbarian=2|HITPOINTS:10|SKILLSGAINED:5|SKILLSREMAINING:0

# Character Experience
EXPERIENCE:5000
EXPERIENCETABLE:Medium

# Character Templates
TEMPLATESAPPLIED:[NAME:Creature with Class Levels]

# Character Region
REGION:None

# Character Skills
SKILL:Acrobatics|OUTPUTORDER:1|CLASSBOUGHT:[CLASS:Barbarian|RANKS:2.0|COST:1|CLASSSKILL:Y]CLASSBOUGHT:[CLASS:Ranger|RANKS:1.0|COST:1|CLASSSKILL:Y]
SKILL:Appraise|OUTPUTORDER:2|
SKILL:Bluff|OUTPUTORDER:3|CLASSBOUGHT:[CLASS:Ranger|RANKS:2.0|COST:1|CLASSSKILL:N]
SKILL:Climb|OUTPUTORDER:4|CLASSBOUGHT:[CLASS:Barbarian|RANKS:3.0|COST:1|CLASSSKILL:Y]
SKILL:Craft (Untrained)|OUTPUTORDER:5|
SKILL:Diplomacy|OUTPUTORDER:6|
SKILL:Disguise|OUTPUTORDER:7|
SKILL:Escape Artist|OUTPUTORDER:8|CLASSBOUGHT:[CLASS:Barbarian|RANKS:1.0|COST:1|CLASSSKILL:N]CLASSBOUGHT:[CLASS:Ranger|RANKS:1.0|COST:1|CLASSSKILL:N]
SKILL:Fly|OUTPUTORDER:9|
SKILL:Heal|OUTPUTORDER:11|
SKILL:Intimidate|OUTPUTORDER:12|
SKILL:Perception|OUTPUTORDER:13|CLASSBOUGHT:[CLASS:Ranger|RANKS:2.0|COST:1|CLASSSKILL:Y]CLASSBOUGHT:[CLASS:Barbarian|RANKS:1.0|COST:1|CLASSSKILL:Y]
SKILL:Perform (Untrained)|OUTPUTORDER:14|
SKILL:Ride|OUTPUTORDER:15|CLASSBOUGHT:[CLASS:Ranger|RANKS:1.0|COST:1|CLASSSKILL:Y]
SKILL:Sense Motive|OUTPUTORDER:16|
SKILL:Stealth|OUTPUTORDER:17|
SKILL:Survival|OUTPUTORDER:18|CLASSBOUGHT:[CLASS:Barbarian|RANKS:1.0|COST:1|CLASSSKILL:Y]
SKILL:Swim|OUTPUTORDER:20|CLASSBOUGHT:[CLASS:Barbarian|RANKS:1.0|COST:1|CLASSSKILL:Y]
SKILL:Handle Animal|OUTPUTORDER:10|CLASSBOUGHT:[CLASS:Barbarian|RANKS:1.0|COST:1|CLASSSKILL:Y]
SKILL:Survival (Follow or identify tracks)|OUTPUTORDER:19|

# Character Languages
LANGUAGE:Common

# Character Feats
FEATPOOL:-3.0

# Character Abilities
ABILITY:Ability Bonus|TYPE:NORMAL|CATEGORY:Special Ability|KEY:+2 Strength|TYPE:AbilityBonus
USERPOOL:Ability Bonus|POOLPOINTS:0.0
ABILITY:Favored Class|TYPE:NORMAL|CATEGORY:Special Ability|KEY:Barbarian|TYPE:FavoredClass
USERPOOL:Favored Class|POOLPOINTS:0.0
ABILITY:Favored Class Bonus|TYPE:NORMAL|CATEGORY:Special Ability|KEY:Bonus Hit Point|APPLIEDTO:,|TYPE:FavoredClassBonus
USERPOOL:Favored Class Bonus|POOLPOINTS:0.0
ABILITY:Favored Enemy|TYPE:NORMAL|CATEGORY:Special Ability|KEY:Favored Enemy (Humanoid (Human))|TYPE:FavoredEnemy.SpecialAttack.Extraordinary.AttackOption|DESC:You gain a +%1 bonus on Attack rolls, Damage roll and skill checks against humans.&pipe;FavoredHumanoidHuman
USERPOOL:Favored Enemy|POOLPOINTS:0.0
ABILITY:FEAT|TYPE:NORMAL|CATEGORY:FEAT|KEY:Dodge|TYPE:Combat.CelestialBloodline.ElementalBloodline.FeyBloodline|DESC:Your training and reflexes allow you to react swiftly to avoid an opponent's attack.
ABILITY:FEAT|TYPE:NORMAL|CATEGORY:FEAT|KEY:Exotic Weapon Proficiency|APPLIEDTO:Sword (Bastard)|TYPE:Combat|DESC:You understand how to use your chosen exotic weapon in combat, and can utilize any special tricks or qualities that exotic weapon might allow.
ABILITY:FEAT|TYPE:NORMAL|CATEGORY:FEAT|KEY:Power Attack|TYPE:Combat.AttackOption.AbyssalBloodline.DraconicBloodline.ElementalBloodline|DESC:You can make exceptionally deadly melee attacks by sacrificing accuracy for strength.
USERPOOL:FEAT|POOLPOINTS:0.0
ABILITY:Rage Power|TYPE:NORMAL|CATEGORY:Special Ability|KEY:Roused Anger ~ Rage Power|TYPE:RagePower.SpecialQuality.Extraordinary|DESC:You may enter rage even if fatigued.
USERPOOL:Rage Power|POOLPOINTS:0.0
ABILITY:Traits|TYPE:NORMAL|CATEGORY:Special Ability|KEY:Dirty Fighter_Trait|TYPE:Trait.BasicTrait.CombatTrait|DESC:You wouldn't have lived to make it out of childhood without the aid of a sibling, friend, or companion on whom you could always count to distract your enemies long enough to do a little bit more damage than normal.
ABILITY:Traits|TYPE:NORMAL|CATEGORY:Special Ability|KEY:Bully_Trait|TYPE:Trait.BasicTrait.SocialTrait|DESC:You grew up in an environment where the meek were ignored and you often had to resort to threats or violence to be heard.
USERPOOL:Traits|POOLPOINTS:0.0
ABILITY:*LANGBONUS|TYPE:VIRTUAL|CATEGORY:*LANGBONUS|KEY:*LANGBONUS|APPLIEDTO:|TYPE:
USERPOOL:*LANGBONUS|POOLPOINTS:0.0

# Character Weapon proficiencies
WEAPONPROF:[WEAPON:Axe (Throwing)|WEAPON:Battleaxe|WEAPON:Blowgun|WEAPON:Club|WEAPON:Crossbow (Heavy)|WEAPON:Crossbow (Light)|WEAPON:Dagger|WEAPON:Dagger (Punching)|WEAPON:Dart|WEAPON:Falchion]
WEAPONPROF:[WEAPON:Flail|WEAPON:Flail (Heavy)|WEAPON:Gauntlet|WEAPON:Gauntlet (Spiked)|WEAPON:Glaive|WEAPON:Grapple|WEAPON:Greataxe|WEAPON:Greatclub|WEAPON:Greatsword|WEAPON:Guisarme]
WEAPONPROF:[WEAPON:Halberd|WEAPON:Hammer (Light)|WEAPON:Handaxe|WEAPON:Javelin|WEAPON:Kukri|WEAPON:Lance|WEAPON:Longbow|WEAPON:Longspear|WEAPON:Longsword|WEAPON:Mace (Heavy)]
WEAPONPROF:[WEAPON:Mace (Light)|WEAPON:Morningstar|WEAPON:Pick (Heavy)|WEAPON:Pick (Light)|WEAPON:Quarterstaff|WEAPON:Ranseur|WEAPON:Rapier|WEAPON:Rock|WEAPON:Sap|WEAPON:Scimitar]
WEAPONPROF:[WEAPON:Scythe|WEAPON:Shieldbash|WEAPON:Shortbow|WEAPON:Shortspear|WEAPON:Sickle|WEAPON:Sling|WEAPON:Spear|WEAPON:Spells (Ray)|WEAPON:Spells (Touch)|WEAPON:Spiked Armor]
WEAPONPROF:[WEAPON:Starknife|WEAPON:Sword (Bastard)|WEAPON:Sword (Short)|WEAPON:Trident|WEAPON:Unarmed Strike|WEAPON:Waraxe (Dwarven)|WEAPON:Warhammer]

# Character Equipment
MONEY:1508
EQUIPNAME:Breastplate|OUTPUTORDER:2|COST:200.0|WT:30.0|QUANTITY:1.0|CUSTOMIZATION:[BASEITEM:Breastplate|DATA:NAME=Breastplate$EQMOD=STEEL]
EQUIPNAME:Gauntlet|OUTPUTORDER:0|COST:0.0|WT:1.0|QUANTITY:1.0|CUSTOMIZATION:[BASEITEM:Gauntlet (Part of Armor Suit)|DATA:NAME=Gauntlet$KEY=Gauntlet (Part of Armor Suit)$EQMOD=STEEL]
EQUIPNAME:Darkwood Shield|OUTPUTORDER:3|COST:257.0|WT:5.0|QUANTITY:1.0|CUSTOMIZATION:[BASEITEM:Darkwood Shield|DATA:NAME=Darkwood Shield$EQMOD=DARK]
EQUIPNAME:Potion of Cure Light Wounds|OUTPUTORDER:0|COST:50|WT:0.0|QUANTITY:20.0
EQUIPNAME:Sword (Bastard)|OUTPUTORDER:1|COST:35.0|WT:6.0|QUANTITY:1.0|CUSTOMIZATION:[BASEITEM:Sword (Bastard)|DATA:NAME=Sword (Bastard)$EQMOD=STEEL]
EQUIPNAME:Gauntlet|OUTPUTORDER:0|COST:0.0|WT:1.0|QUANTITY:1.0|CUSTOMIZATION:[BASEITEM:Gauntlet (Part of Armor Suit)|DATA:KEY=Gauntlet (Part of Armor Suit)$EQMOD=STEEL]
EQUIPSET:Default Set|ID:0.1|USETEMPMODS:Y
EQUIPSET:Shield|ID:0.1.1|VALUE:Darkwood Shield|QUANTITY:1.0|USETEMPMODS:Y
EQUIPSET:Armor|ID:0.1.2|VALUE:Breastplate|QUANTITY:1.0|USETEMPMODS:Y
EQUIPSET:Primary Hand|ID:0.1.3|VALUE:Sword (Bastard)|QUANTITY:1.0|USETEMPMODS:Y
CALCEQUIPSET:0.1

# Temporary Bonuses

# EquipSet Temp Bonuses

# Character Deity/Domain
DEITY:Cayden Cailean|DEITYDOMAINS:[DOMAIN:Chaos|DOMAIN:Charm|DOMAIN:Good|DOMAIN:Strength|DOMAIN:Travel]|ALIGNALLOW:|DESC:God of freedom, wine, bravery|HOLYITEM:|DEITYFAVWEAP:[WEAPON:Rapier]|DEITYALIGN:Chaotic Good

# Character Spells Information

# Character Description/Bio/History
CHARACTERBIO:
CHARACTERDESC:
CHARACTERCOMP:
CHARACTERASSET:
CHARACTERMAGIC:
CHARACTERDMNOTES:

# Kits

# Character Master/Follower

# Character Notes Tab

# Age Set Selections
AGESET:1:0:0:0:0:0:0:0:0:0

# Campaign History

# Suppressed Biography Fields
SUPPRESSBIOFIELDS:
adventuremagic123 commented 1 year ago

3826 is a better, universal solution to this problem.