Welcome Adventurer!

Greetings weary traveller! I trust your journey was safe albeit long. Whether from the storm-tossed seas of Word or the raging wastelands of Google Docs, you have finally made your way to the golden shore of Asciidoctor! asciidoctor-p2e is an extension for AsciiDoctor that makes it easier to create stylized content for the Pathfinder Second Edition roleplaying system. Your years of searching are at an end, for this extension supports creature stat blocks, item stat blocks, hazard stat blocks, a stylized Table of Contents, decorated Sidebars, and Pathfinder-style headers. All of which will be demonstrated in cloying detail!

You can find the git repo for this project in the mystical realm of SourceHut: https://git.sr.ht/~bosco/asciidoctor-p2e, a fantastic forge of free software also known to the old ones as Sir Hat.

Usage

This extension is archived in the scrolls of RubyGems and can be added to your inventory with the gem install asciidoctor-p2e command. Once the asciidoctor-p2e gem is installed you can run asciidoctor -r asciidoctor-p2e <input> to create your output.

Note
Images and assets will be installed/referenced in a p2e directory wherever your output is created.

Style

Zero level headers will use a yellow outline Eczar font and first level headers will use the Eczar font. This styling is from the GM Binder Pathfinder 2nd Edition Homebrew Template. Fonts are included with asciidoctor-p2e and will be installed in the p2e directory when your output is created. The body of the document uses a parchment background.

As you can see on the left, if the Table of Contents is used (:toc: left) a burnt parchment edge will be show with Pathfinder style header fonts for each section.

Enemies

A block of type stat can be used to create a creature stat block from TOML input. For example:

[stat.center, type=creature]
--
name = "Hoo Man"
level = "1"
tags = ["ce","tiny"]
perception = "+1"
senses = "scent"
skills = ["Intimidation +2", "Thievery +1"]

[attributes]
cha = "-2"
con = "+1"
dex = "+2"
int = "-2"
str = "-1"
wis = "-1"

[defense]
ac = "10"
fort = "+2"
ref = "+6"
will = "+1"
hp = "10"
immunities = ""
reactions = ["Attack of Opportunity"]

[offense]
speed = "25"
otherSpeeds = "Climb Speed 25"

[[offense.attacks]]
actions = 1
damage = "1d4 piercing"
name = "Melee"
text = "teeth +4"

[[offense.attacks]]
actions = 2
name = "Helicopter Dance"
text = """\
  Hoo Man dazzles anyone watching with a unique dance causing anyone who \
  fails a Will save (DC 15) to become fascinated.\
  """
--

Notice that a role can be passed: in this case 'center'. If the block is floated (left right) a 20px margin will be set on the opposite side. If a type is not specified, 'creature' is assumed. The above listing creates the following stat block:

Hoo Man CREATURE 1
ce
tiny
Perception +1 scent
Skills Intimidation +2,Thievery +1
Str -1, Dex +2, Con +1, Int -2, Wis -1, Cha -2
AC 10; Fort +2, Ref +6, Will +1
HP 10
Attack of Opportunity
Speed 25 Climb Speed 25
teeth +4 Damage 1d4 piercing
Hoo Man dazzles anyone watching with a unique dance causing anyone who fails a Will save (DC 15) to become fascinated.

Treasure

In a similar fashion to creature stat blocks, item stat blocks can be created:

[stat.center, type=item]
--
name = "Pear of Silence"
level = "6+"
tags = ["uncommon"]
price = "100 gp" # optional
usage = "held in 1 hand"
bulk = "L"
description = """\
  A cruel device famed to be designed by Roderick the Malevolent. A seemingly \
  delicious fruit, when placed in someone's mouth it expands to render them \
  unable to speak. A magical phrase that disables the effect is bound to the \
  fruit at the time of creation (not that the victim would be able to utter \
  it).\
  """

[hardness] # optional
hardness = "9"
hp = "10"
bp = "5"

[[activations]] # optional
actions = 1
actionText = "Interact" # optional
trigger = "The pear is placed inside someone's mouth" # optional
# effect is optional too
effect = """\
  The pear rapidly expands, filling the victims mouth and rendering them \
  unable to speak until the pear is destroyed or disabled.\
  """

[[activations]]
actions = 2
actionText = "Interact"
trigger = """\
  The magic phrase that disables the pear is spoken loudly at a distance of \
  less than five feet from the pear.\
  """
effect = """\
  The pear resumes its normal shape and form. It can be spit out by the \
  victim.\
  """

[[types]] #optional
type = "lesser"
level = "6"
price = "100 gp" # optional
description = """\
  Can be destroyed by the victim with a DC 20 Fortitude saving throw.\
  """

[[types]]
type = "greater"
level = "10"
price = "200 gp"
description = """\
  Can be destroyed by the victim with a DC 25 Fortitude saving throw.\
  """

[[types]]
type = "major"
level = "12"
price = "300 gp"
description = """\
  Can be destroyed by the victim with a DC 30 Fortitude saving throw.\
  """
--

The above block yields:

Pear of Silence ITEM 6+
uncommon
Price 100 gp
Usage held in 1 hand; Bulk L;
Activate Interact Trigger The pear is placed inside someone's mouth Effect The pear rapidly expands, filling the victims mouth and rendering them unable to speak until the pear is destroyed or disabled.
Activate Interact Trigger The magic phrase that disables the pear is spoken loudly at a distance of less than five feet from the pear. Effect The pear resumes its normal shape and form. It can be spit out by the victim.
Hardness 9; HP 10; BT ;
A cruel device famed to be designed by Roderick the Malevolent. A seemingly delicious fruit, when placed in someone's mouth it expands to render them unable to speak. A magical phrase that disables the effect is bound to the fruit at the time of creation (not that the victim would be able to utter it).
Type lesser Level 6 Price 100 gp
Can be destroyed by the victim with a DC 20 Fortitude saving throw.
Type greater Level 10 Price 200 gp
Can be destroyed by the victim with a DC 25 Fortitude saving throw.
Type major Level 12 Price 300 gp
Can be destroyed by the victim with a DC 30 Fortitude saving throw.

Traps

Hazard stat blocks can also be created:

[stat.center, type=hazard]
====
name = "Bed Spike"
level = "1"
tags = ["mechanical", "trap"]
stealth = "DC 15 (or 0 if they look under the bed)"
description = """\
  The support ropes for a bed are cut almost completely through. Under the bed \
  are several sharpened wooded spikes. Typically the sheets are hung over the \
  edge of the bed to disguise the spikes.\
  """
disable = """\
  Crafting DC 10 to remove the spikes. The bed will still not support weight \
  but there will be no damage caused by falling through.\
  """

[[triggers]]
name = "Fall Through"
text = """\
  A creature lays on the bed, causing the ropes to snap and dealing 1D6 piercing
  damage.\
  """
====

The above block yields:

Bed Spike HAZARD 1
mechanical
trap
Stealth DC 15 (or 0 if they look under the bed)
Description The support ropes for a bed are cut almost completely through. Under the bed are several sharpened wooded spikes. Typically the sheets are hung over the edge of the bed to disguise the spikes.
Disable Crafting DC 10 to remove the spikes. The bed will still not support weight but there will be no damage caused by falling through.
Fall Through Trigger A creature lays on the bed, causing the ropes to snap and dealing 1D6 piercing damage.

Cryptic Texts

When a sidebar is used to display information the background will use a styling from Pathfinder 2 easy Library.

Sidebars can especially effective for notes from Wizards with specific details regarding the functioning of dangerous items:

Wizard’s Note

To Whom it May Concern,

Reading this note will curse you for all time with a constant stone in your shoe. No take backs!

Sincerely,

Roderick the Malevolent

Adventurer’s Log