Lavaeolous / PF1-StatBlock-Converter-Module

FoundryVTT Module to convert PF1 Statblocks into Foundry Actors (PC or NPC).
MIT License
14 stars 12 forks source link

Can't import Bestiary 5 - Tattoo Guardian (statblock importing from Hero Lab - no, d20pfsrd.com - no, aonprd.com - yes) #277

Closed adventuremagic123 closed 4 years ago

adventuremagic123 commented 4 years ago

Can't import statblock:

Tattoo Guardian CR 3 XP 800 Tattoo guardian (Pathfinder Campaign Setting: Occult Bestiary 54) N Medium construct Init +9; Senses darkvision 60 ft., low-light vision; Perception +1

Defense

AC 15, touch 13, flat-footed 12 (+3 Dex, +2 natural) hp 42 (4d10+20) Fort +1, Ref +6, Will +2 Defensive Abilities fluid form, hypervigilant, worn form; Immune construct traits

Offense

Speed 30 ft., fly 10 ft. (average) Melee 2 ink blades +6 (1d6+2)

Statistics

Str 14, Dex 17, Con —, Int —, Wis 12, Cha 13 Base Atk +4; CMB +6; CMD 19 Feats Improved Initiative[B] SQ bodyguard

Ecology

Environment any Organization solitary Treasure none

Special Abilities

Bodyguard (Su) Half dmg transferred from wear to you. Wearer gains +2 bon atk/dmg vs attacker. Construct Traits (+20 HP) Constructs have many immunities. Darkvision (60 feet) You can see in the dark (black and white only). Fluid Form (Su) You do not provoke AoO from movement. Cannot be knocked prone or grappled. Fly (10 feet, Average) You can fly! Hypervigilant (Su) You always act in the surprise round. Immunity to Ability Damage Immunity to ability damage Immunity to Ability Drain Immunity to ability drain Immunity to Bleed You are immune to bleed. Immunity to Death and Necromancy effects You are immune to Death and Necromancy effects. Immunity to Disease You are immune to diseases. Immunity to Energy Drain Immune to energy drain Immunity to Exhausted You are immune to the exhausted condition. Immunity to Fatigue You are immune to the fatigued condition. Immunity to Mind-Affecting effects You are immune to Mind-Affecting effects. Immunity to Nonlethal Damage You are immune to Nonlethal Damage Immunity to Paralysis You are immune to paralysis. Immunity to Poison You are immune to poison. Immunity to Sleep You are immune to sleep effects. Immunity to Stunning You are immune to being stunned. Low-Light Vision See twice as far as a human in dim light, distinguishing color and detail. Worn Form While being worn, a tattoo guardian occupies the same space as its wearer and moves with its wearer. In this state, the wearer and the tattoo guardian use the higher of the wearer's and the tattoo guardian's AC and saving throws, but the tattoo guard

adventuremagic123 commented 4 years ago

The previous comment was for a statblock from Hero Lab, but the below statblock is from d20pfsrd and it doesn't import either:

Tattoo GuardianCR 3 (XP 800) N Medium construct Init +9; Senses darkvision 60 ft., low-light vision; Perception +1

DEFENSE

AC 15, touch 13, flat-footed 12 (+3 Dex, +2 natural) hp 42 (4d10+20) Fort +1, Ref +6, Will +2 Defensive Abilities worn form, fluid form, hypervigilant; Immune construct traits

OFFENSE

Speed 30 ft., fly 10 ft. Melee 2 ink blades +6 (1d6+2)

STATISTICS

Str 14, Dex 17, Con —, Int —, Wis 12, Cha 13 Base Atk +4; CMB +6; CMD 19 Feats Improved InitiativeB SQ bodyguard

SPECIAL ABILITIES

Bodyguard (Su) Whenever the tattoo guardian’s wearer takes damage, half of the damage is transferred to the guardian (as shield other).

Additionally, the tattoo guardian gains a +2 bonus on attack and damage rolls against any creatures that damaged its wearer in the previous round.

Fluid Form (Su) A tattoo guardian does not provoke attacks of opportunity because of movement.

It is immune to critical hits and sneak attacks, and it cannot be knocked prone or grappled.

Hypervigilant (Su) A tattoo guardian gains a +2 bonus on initiative checks and Reflex saves, and it always acts on the surprise round.

Worn Form (Su) While being worn, a tattoo guardian occupies the same space as its wearer and moves with its wearer.

In this state, the wearer and the tattoo guardian use the higher of the wearer’s and the tattoo guardian’s AC and saving throws, but the tattoo guardian loses access to its fluid form ability.

ECOLOGY

Environment any Organization solitary Treasure none

Many cultures employ tattoos as symbols of protection, but to those fortunate enough to be wearers of tattoo guardian, the protection is far more than symbolic. Fiercely loyal and protective of its ward, a tattoo guardian leaves its wearer’s skin to fight any who would harm her. Tattoo guardians are common where wealthy courtiers pay kings’ ransoms for protection against assassins hired by their rivals, and where the arts of tattooing and magic have long intertwined. Certain arcane universities are known to provide senior students of summoning and other dangerous fields of magic with vigilant tattoos to protect them from accidental harm.

Temples of virtuous deities might also ink guardians upon the skins of high-level clergy such as healers or prophets who are not skilled in battle magic. Such tattoo guardians often use the iconography of the religion for their forms: a revered healer might be adorned with a fiery phoenix that flares into life if she is threatened, while a cleric especially skilled in brewing libations might bear a different image across his shoulders.

The ink used in the construction of a tattoo guardian is amorphous, able to change shape and harden to become as sharp and solid as steel. Should its wearer be threatened, the guardian withdraws its ink from the wearer’s flesh and hardens it into a thin blade, then rises from the wearer’s skin to interpose itself between her and her attackers.

Even though a tattoo guardian can completely separate itself from its wearer, it rarely strays far from her, even in the midst of battle.

The guardian and its wearer share a magical bond; should it fail in its duty, a tattoo guardian typically self-destructs, the once-sentient ink melding with its former master’s blood. In rare cases, the guardian might gain some fragment of its dying master’s sentience and go out into the world instead. Sadly, most of these creatures are driven completely insane by the process, and are unable to pursue goals more complicated than revenge against their masters’ killers.

adventuremagic123 commented 4 years ago

Here's a headache. This statblock is from https://www.aonprd.com/ and it DOES import:

Tattoo Guardian CR 3 Source Occult Bestiary pg. 54 XP 800 N Medium construct Init +9; Senses darkvision 60 ft., low-light vision; Perception +1 Defense AC 15, touch 13, flat-footed 12 (+3 Dex, +2 natural) hp 42 (4d10+20) Fort +1, Ref +6, Will +2 Defensive Abilities worn form, fluid form, hypervigilant; Immune construct traits Offense Speed 30 ft., fly 10 ft. Melee 2 ink blades +6 (1d6+2) Statistics Str 14, Dex 17, Con —, Int —, Wis 12, Cha 13 Base Atk +4; CMB +6; CMD 19 Feats Improved InitiativeB SQ bodyguard Ecology Environment any Organization solitary Treasure none Special Abilities Bodyguard (Su) Whenever the tattoo guardian’s wearer takes damage, half of the damage is transferred to the guardian (as shield other). Additionally, the tattoo guardian gains a +2 bonus on attack and damage rolls against any creatures that damaged its wearer in the previous round.

Fluid Form (Su) A tattoo guardian does not provoke attacks of opportunity because of movement. It is immune to critical hits and sneak attacks, and it cannot be knocked prone or grappled.

Hypervigilant (Su) A tattoo guardian gains a +2 bonus on initiative checks and Reflex saves, and it always acts on the surprise round.

Worn Form (Su) While being worn, a tattoo guardian occupies the same space as its wearer and moves with its wearer. In this state, the wearer and the tattoo guardian use the higher of the wearer’s and the tattoo guardian’s AC and saving throws, but the tattoo guardian loses access to its fluid form ability. Description Many cultures across Golarion employ tattoos as symbols of protection, but to those fortunate enough to be wearers of tattoo guardian, the protection is far more than symbolic. Fiercely loyal and protective of its ward, a tattoo guardian leaves its wearer’s skin to fight any who would harm her. Tattoo guardians are common in the courts of Tian Xia, where wealthy courtiers pay kings’ ransoms for protection against assassins hired by their rivals, and in Varisia, where the arts of tattooing and magic have long intertwined. Certain Garundi arcane universities are known to provide senior students of summoning and other dangerous fields of magic with vigilant tattoos to protect them from accidental harm. Temples of virtuous deities might also ink guardians upon the skins of high-level clergy such as healers or prophets who are not skilled in battle magic. Such tattoo guardians often use the iconography of the religion for their forms: a revered Sarenite healer might be adorned with a fiery phoenix that flares into life if she is threatened, while a Caydenite cleric especially skilled in brewing libations might bear a cayhound across his shoulders.

The ink used in the construction of a tattoo guardian is amorphous, able to change shape and harden to become as sharp and solid as steel. Should its wearer be threatened, the guardian withdraws its ink from the wearer’s flesh and hardens it into a thin blade, then rises from the wearer’s skin to interpose itself between her and her attackers. Even though a tattoo guardian can completely separate itself from its wearer, it rarely strays far from her, even in the midst of battle.

The guardian and its wearer share a magical bond; should it fail in its duty, a tattoo guardian typically selfdestructs, the once-sentient ink melding with its former master’s blood. In rare cases, the guardian might gain some fragment of its dying master’s sentience and go out into the world instead. Sadly, most of these creatures are driven completely insane by the process, and are unable to pursue goals more complicated than revenge against their masters’ killers.

adventuremagic123 commented 4 years ago

I want you to know exactly what Hero Lab statblocks start out looking like. When these statblocks are copy-and-pasted into the "Import StatBlock" dialog or even here for comments for bugs -- they are altered immediately when pasted.

I've attached what I actually start with to this comment:

j.txt

adventuremagic123 commented 4 years ago

I've got your latest module.

I'm going to pause for a while. Do you want to support statblocks from Hero Lab, d20pfsrd.com, and aonprd.com -- or just aonprd.com?

adventuremagic123 commented 4 years ago

Each of those resources have material that the others don't.

aonprd.com has some Paizo material not available on either Hero Lab or d20pfsrd.com.

Hero Lab has some AP material not available on d20pfsrd.com (and some is not available on aonprd.com). Iron Gods is an example. Some of those NPCs can't even be found on aonprd.com.

Hero Lab has some 3rd party material not available on aonprd.com (but probably is on d20pfsrd.com).

d20pfsrd.com has 3rd party material not available on aonprd.com or in Hero Lab.

I'd recommend at the beginning of the parsing phase that you:

  1. Determine from which source the statblock came from -- or choose a default if it doesn't matter.

  2. You might need to have multiple parsers per source to handle different scenarios based on the presence or absence of data.

  3. Pass on the statblock to the specific parser that is able to handle that type of data.

The structure of what you do is highly dependent on the technology you're using.

adventuremagic123 commented 4 years ago

I'm going to delay testing until I know what the strategy is because it affects my approach.

Lavaeolous commented 4 years ago

Hey, thanks for your input. The current approach is source independent, as i have no way to determine where the input comes from and even statblocks from the same source are not uniform in their formatting. As it is, i take the input, separate it into manageable chunks of data (e.g. general data, defense data, offense data and so on), which i map onto a system agnostic template. The mapped data is then converted for use in foundry by mapping the raw data from the neutral template onto a blank pf1 actor with foundry specific formatting.

The Mapping from the neutral to the specific template is fairly straight forward, as i know how i formatted the neutral one and can check how the foundry one is formatted anytime.

The splitting and parsing of heterogen, non-uniform and non-standardized input is, as you mentionend, not really trivial. The converter will never be able to parse every statblock there is, but it can lay the groundwork by parsing as much as possible, so that the manual labor to finalize an actor in foundry is minimized.

If you want to check how and where the converter fails, you can check the console (F12). Most of the time some logs will be there to point you in the right direction. I'm currently working on a preview window, so that the conversion result will be (mostly) visible before committing to the conversion - allowing for manual corrections. But that will take some time.

Until then, i really appreciate your work and input, as it leads me to all the small errors that would otherwise be missed.

adventuremagic123 commented 4 years ago

Ok. Thank you. Yes, I think each different resource has significant advantages -- so I'm very glad you're taking a neutral approach to, in other words, support all of them.

For Bestiaries 1 through 4, the number of failures from the Hero Lab statblock perspective were small but Bestiary 5 will force me to alter my strategy -- probably from an F12 perspective (which I've used before to research issues on the Console tab). I'll resume testing shortly.

Lavaeolous commented 4 years ago

If i remember correctly, the later Bestiaries have more Content thats facilitating High Level and Mythic Stuff and in general more "exotic" creatures. I think most problematic will be creatures with mythic ranks and/or multiple spellcasting abilities, so maybe keep an eye out for that.

adventuremagic123 commented 4 years ago

BTW, I can't use F12 to identify classes of bugs. Reason is that I can't be sure that fixing a bug doesn't expose others unique to that particular NPC -- so they all need to be retested.

adventuremagic123 commented 4 years ago

However, I looks like right now it's a good idea for me to wait for the currently posted Bestiary 5 issues to be addressed before I resume testing with the H's.

adventuremagic123 commented 4 years ago

I'll also see if I can go back and retest some NPCs from the other Bestiaries that passed for Hero Lab -- but might yet fail for d20pfsrd.com and/or aonprd.com. I'll pick ones that seem unique.

adventuremagic123 commented 4 years ago

I'll also be doing some third party content that is Pathfinder Compatible like Tome of Horrors and Temple of Jing.

adventuremagic123 commented 4 years ago

Oh, good, you can import from a text statblock copy-and-paste from the PDFs for the Bestiaries and other books. Not sure why I initially thought that wouldn't work, but it does! That's great!

Lavaeolous commented 4 years ago

Yeah, thats the reason i started with the converter in the first place, as i'm currently running Rappan Athuk and need the Monsters from that as well as the tome of horrors :)

BTW: I'm on Vacation for the next weeks, so there will be little to no updates on the converter.