Tables#

pathfinder2e_stats.tables reproduces a variety of tables from the Player Core and GM Core manuals. All tables are either DataArray or Dataset objects with at least an integer level dimension, plus extra table-specific dimensions.

PC tables#

PC#

These tables let us calculate a typical baseline of the various bonuses for most common Player Character (PC) builds for each level.

For example, let’s use them to calculate the attack bonus progression of a typical Rogue as they gain levels, not counting any temporary buffs/debuffs they may have:

import pathfinder2e_stats as pf2

rogue_atk_bonus = (
    # Start with DEX+4 at level 1 and always increase it
    pf2.tables.PC.ability_bonus.boosts.sel(initial=4, drop=True)
    # Get an Apex item at level 17 for +1 DEX
    + pf2.tables.PC.ability_bonus.apex
    # Upgrade weapons as soon as possible: +1 at level 2, +2 at level 10, etc.
    + pf2.tables.PC.attack_item_bonus.potency_rune
    # Trained (+2) at level 1, Expert (+4) at level 5, Master (+6) at level 13
    + pf2.tables.PC.weapon_proficiency.rogue
    # Add level to proficiency
    + pf2.tables.PC.level
)
rogue_atk_bonus.display("attack bonus", transpose=True)
level 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
variable
attack bonus 7 9 10 11 14 15 16 17 18 21 22 23 26 27 28 30 32 33 34 36

The PC tables are Datasets in a container which can be accessed by attribute:

pf2.tables.PC
Available tables:
  • ability_bonus
  • attack_item_bonus
  • class_proficiency
  • level
  • polymorph_attack
  • rage
  • skill_item_bonus
  • skill_proficiency
  • spell_proficiency
  • untamed_druid_attack
  • weapon_dice
  • weapon_proficiency
  • weapon_specialization

PC.ability_bonus#

Ability bonus (strength, dexterity, etc.) of a typical optimized PC.

Coordinates:

  • level (int): PC level in the range [1, 20]

  • initial (int): 4, 3, 2, 1. Number of boosts at level 1 for a given ability

Data variables:

  • boosts (level, initial) (int): Ability bonus from boosts at level 1, 5, 10, 15, 20

  • apex (level) (int): Apex item. A character can invest only one; typically it is chosen for the key ability (although it’s not uncommon for Alchemists and Inventors to boost STR or DEX instead of INT).

pf2.tables.PC.ability_bonus.display()
variable boosts apex
initial 4 3 2 1
level
1 4 3 2 1 0
2 4 3 2 1 0
3 4 3 2 1 0
4 4 3 2 1 0
5 4 4 3 2 0
6 4 4 3 2 0
7 4 4 3 2 0
8 4 4 3 2 0
9 4 4 3 2 0
10 5 4 4 3 0
11 5 4 4 3 0
12 5 4 4 3 0
13 5 4 4 3 0
14 5 4 4 3 0
15 5 5 4 4 0
16 5 5 4 4 0
17 5 5 4 4 1
18 5 5 4 4 1
19 5 5 4 4 1
20 6 5 5 4 1

PC.attack_item_bonus#

Item bonus to attack rolls.

Coordinates:

  • level (int): Item level in the range [1, 20]. It is assumed players will acquire this item as soon as their level allows.

Data variables:

  • potency_rune (level) (int): Item bonus obtained from a permanent Weapon Potency rune

  • bomb (level) (int): Item bonus for Alchemist’s bombs

  • bestial_mutagen (level) (int): Item bonus gained from Bestial Mutagen

  • fury_cocktail (level) (int): Item bonus gained from Fury Cocktail

  • runic_weapon (level) (int): Item bonus gained from Runic Weapon

  • gate_attenuator (level) (int): Item bonus gained from Gate Attenuator. Note: does not increase impulse DC; only impulse attack modifier.

Notes:

See PC.weapon_dice for extra damage dice from items.

pf2.tables.PC.attack_item_bonus.display()
variable potency_rune bomb bestial_mutagen fury_cocktail runic_weapon gate_attenuator
level
1 0 0 1 0 1 0
2 1 0 1 0 1 0
3 1 1 2 0 1 1
4 1 1 2 2 1 1
5 1 1 2 2 1 1
6 1 1 2 2 1 1
7 1 1 2 2 1 1
8 1 1 2 2 1 1
9 1 1 2 2 1 1
10 2 1 2 2 1 1
11 2 2 3 2 2 2
12 2 2 3 3 2 2
13 2 2 3 3 2 2
14 2 2 3 3 2 2
15 2 2 3 3 2 2
16 3 2 3 3 2 2
17 3 3 4 3 3 3
18 3 3 4 4 3 3
19 3 3 4 4 3 3
20 3 3 4 4 3 3

PC.class_proficiency#

Proficiency bonus to class DC, not including level.

Coordinates:

  • level (int): PC level in the range [1, 20]

  • doctrine (str): Cleric doctrines

Data variables:

  • cleric (level, doctrine) (int): Cleric, depending on their doctrine

  • (class name) (level) (int): All other classes

pf2.tables.PC.class_proficiency.display()
variable alchemist animist barbarian bard champion cleric commander druid exemplar fighter guardian gunslinger inventor investigator kineticist magus monk oracle psychic ranger rogue sorcerer summoner swashbuckler thaumaturge witch wizard kineticist_dedication
doctrine battle creed cloistered cleric warpriest
level
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
5 2 2 2 2 2 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
6 2 2 2 2 2 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
7 2 2 2 2 2 4 2 4 4 2 2 2 2 2 2 2 4 2 2 2 2 2 2 2 2 2 2 2 2 2
8 2 2 2 2 2 4 2 4 4 2 2 2 2 2 2 2 4 2 2 2 2 2 2 2 2 2 2 2 2 2
9 4 2 2 2 4 4 2 4 4 2 4 2 4 4 4 4 4 2 4 2 2 4 2 2 2 4 4 2 2 2
10 4 2 2 2 4 4 2 4 4 2 4 2 4 4 4 4 4 2 4 2 2 4 2 2 2 4 4 2 2 2
11 4 2 4 2 4 4 4 4 4 2 4 4 4 4 4 4 4 2 4 2 2 4 4 2 2 4 4 2 2 2
12 4 2 4 2 4 4 4 4 4 2 4 4 4 4 4 4 4 2 4 2 2 4 4 2 2 4 4 2 2 4
13 4 2 4 2 4 4 4 4 4 2 4 4 4 4 4 4 4 2 4 2 2 4 4 2 2 4 4 2 2 4
14 4 2 4 2 4 4 4 4 4 2 4 4 4 4 4 4 4 2 4 2 2 4 4 2 2 4 4 2 2 4
15 4 2 4 2 4 6 6 6 6 2 4 4 4 4 4 4 6 2 4 2 2 4 4 2 2 4 4 2 2 4
16 4 2 4 2 4 6 6 6 6 2 4 4 4 4 4 4 6 2 4 2 2 4 4 2 2 4 4 2 2 4
17 6 2 4 2 6 6 6 6 6 2 6 4 4 6 6 4 6 2 4 2 2 6 4 2 2 4 6 2 2 4
18 6 2 4 2 6 6 6 6 6 2 6 4 4 6 6 4 6 2 4 2 2 6 4 2 2 4 6 2 2 4
19 6 2 6 2 6 8 8 8 8 2 6 6 6 6 6 6 8 2 6 2 2 6 6 2 2 6 6 2 2 4
20 6 2 6 2 6 8 8 8 8 2 6 6 6 6 6 6 8 2 6 2 2 6 6 2 2 6 6 2 2 4

PC.polymorph_attack#

Fixed attack bonus of Polymorph spells, heightened to the top rank available to a full caster character. Only used if higher than the character’s own unarmed attack bonus.

Coordinates:

  • level (int): PC level in the range [1, 20]

Data variables:

Notes:

1 This form is available as a focus spell through a feat one level after the slot spell becomes available. See PC.untamed_druid_attack below.

pf2.tables.PC.polymorph_attack.display()
variable animal insect dinosaur aerial plant elemental dragon monstrosity ooze fey aberrant daemon demon devil sacred angel cosmic avatar element_embodied nature_incarnate
level
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
5 14 13 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0
6 14 13 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0
7 16 16 16 16 0 0 0 0 16 16 0 0 0 0 0 0 0 0 0 0
8 16 16 16 16 0 0 0 0 16 16 0 0 0 0 0 0 0 0 0 0
9 18 18 18 18 17 18 0 0 18 16 18 0 0 0 0 0 0 0 0 0
10 18 18 18 18 17 18 0 0 18 16 18 0 0 0 0 0 0 0 0 0
11 18 18 18 21 21 23 22 0 18 16 22 21 22 20 21 0 0 0 0 0
12 18 18 18 21 21 23 22 0 18 16 22 21 22 20 21 0 0 0 0 0
13 18 18 25 21 21 25 22 0 18 16 22 21 22 20 21 25 25 0 0 0
14 18 18 25 21 21 25 22 0 18 16 22 21 22 20 21 25 25 0 0 0
15 18 18 25 21 21 25 28 28 28 16 22 21 22 20 21 25 25 0 0 0
16 18 18 25 21 21 25 28 28 28 16 22 21 22 20 21 25 25 0 0 0
17 18 18 25 21 21 25 28 31 28 16 22 21 22 20 21 30 25 0 0 0
18 18 18 25 21 21 25 28 31 28 16 22 21 22 20 21 30 25 0 0 0
19 18 18 25 21 21 25 28 31 28 16 22 21 22 20 21 30 25 33 34 34
20 18 18 25 21 21 25 28 31 28 16 22 21 22 20 21 30 25 33 34 34

PC.rage#

Rage damage bonus

Coordinates:

  • level (int): PC level in the range [1, 20]

  • drained (int): Drained condition, for Bloodrager instinct

  • vs (str): [spellcasters, others]: target type for Superstition instinct

Data variables:

  • bloodrager_weapon (level) (int): Bloodrager’s bonus damage to weapon Strikes

  • bloodrager_bleed (level) (int): Bloodrager’s bonus persistent bleed damage to weapon Strikes

  • bloodrager_spells (level, drained) (int): Bloodrager’s bonus damage to attack spells

  • superstition (level, vs) (int): Superstition instinct’s damage against different types of targets

  • (other instincts) (level): flat damage bonus for all other instincts

pf2.tables.PC.rage.display()
variable animal bloodrager_weapon bloodrager_bleed bloodrager_spells dragon elemental fury giant spirit superstition
drained 0 1 2
vs spellcasters others
level
1 2 2 1 0 0 0 4 4 3 6 3 4 3
2 2 2 1 2 2 2 4 4 3 6 3 4 3
3 2 2 1 2 2 2 4 4 3 6 3 4 3
4 2 2 1 2 3 3 4 4 3 6 3 4 3
5 2 2 1 2 3 3 4 4 3 6 3 4 3
6 2 2 1 2 3 3 4 4 3 6 3 4 3
7 5 4 2 4 5 5 8 6 7 10 7 8 7
8 5 4 2 4 5 5 8 6 7 10 7 8 7
9 5 4 2 4 5 5 8 6 7 10 7 8 7
10 5 4 2 4 5 5 8 6 7 10 7 8 7
11 5 4 2 4 5 5 8 6 7 10 7 8 7
12 5 4 2 4 5 7 8 6 7 10 7 8 7
13 5 4 2 4 5 7 8 6 7 10 7 8 7
14 5 4 2 4 5 7 8 6 7 10 7 8 7
15 12 8 4 8 9 11 16 12 13 18 13 16 13
16 12 8 4 8 9 11 16 12 13 18 13 16 13
17 12 8 4 8 9 11 16 12 13 18 13 16 13
18 12 8 4 8 9 22 16 12 13 18 13 16 13
19 12 8 4 8 9 22 16 12 13 18 13 16 13
20 12 8 4 8 9 22 16 12 13 18 13 16 13

PC.skill_item_bonus#

Permanent item bonus from items that give blanket +1/+2/+3 to all actions of that skill.

Coordinates:

  • level (int): Item level in the range [1, 20]. It is assumed players will acquire this item as soon as their level allows.

Data variables:

  • (skill) (level) (int): Item bonus applied to the skill

Notes:

  • For Disarm, Grapple, Trip, and Shove checks made through a weapon with the matching trait, use PC.attack_item_bonus instead.

  • This table does not include items that only grant a bonus to one action or only in specific circumstances.

  • This table does not include item bonuses from consumables, which are typically available when an Alchemist is in the party.

pf2.tables.PC.skill_item_bonus.display()
variable acrobatics arcana athletics craft deception diplomacy intimidation medicine nature occultism performance religion society stealth survival thievery
level
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 1 1 0 1 1 1 0 1 0 1 1 1 0 0 1 1
4 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1
5 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1
6 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
9 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2
10 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2
11 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
12 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
13 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
14 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
15 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
16 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
17 3 3 3 3 3 3 3 2 2 2 3 3 2 3 2 3
18 3 3 3 3 3 3 3 3 2 3 3 3 2 3 2 3
19 3 3 3 3 3 3 3 3 2 3 3 3 2 3 2 3
20 3 3 3 3 3 3 3 3 2 3 3 3 2 3 2 3

PC.skill_proficiency#

Skill Proficiency bonus, not including level. This table assumes that important skills are Trained at level 1 and then they are increased at every possible occasion, in order of importance.

Coordinates:

  • level (int): PC level in the range [1, 20]

  • priority (int): [1, 2, 3, 4, 5, 6]; smallest is highest. E.g. Priority 1 is the one that will be increased first.

Data variables:

  • rogue (level, priority) (int): Skill progression for rogues.

  • others (level, priority) (int): Skill progression for all other classes.

  • spellcaster_dedication (level, priority) (int) Skill progression for a non-rogue with a Spellcaster dedication, who needs to make room to satisfy the Prerequisites for Expert Spellcasting by level 12 and Master Spellcasting by level 18, and the skill associated with the spellcasting dedication has the lowest possible priority (3).

Notes:

  • This table does not cover suboptimal choices, like sacrificing the increase of a skill to Expert in order to get an extra skill at Trained.

  • As non-rogues can only maximize 3 skills, priority 4, 5, and 6 are padded with 0s for them due to the design constraints of xarray.Dataset.

pf2.tables.PC.skill_proficiency.display()
variable rogue others spellcaster_dedication
priority 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6
level
1 2 2 2 2 2 2 2 2 2 0 0 0 2 2 0 0 0 0
2 4 2 2 2 2 2 2 2 2 0 0 0 2 2 2 0 0 0
3 4 4 2 2 2 2 4 2 2 0 0 0 4 2 2 0 0 0
4 4 4 4 2 2 2 4 2 2 0 0 0 4 2 2 0 0 0
5 4 4 4 4 2 2 4 4 2 0 0 0 4 4 2 0 0 0
6 4 4 4 4 4 2 4 4 2 0 0 0 4 4 2 0 0 0
7 6 4 4 4 4 2 6 4 2 0 0 0 6 4 2 0 0 0
8 6 6 4 4 4 2 6 4 2 0 0 0 6 4 2 0 0 0
9 6 6 6 4 4 2 6 6 2 0 0 0 6 4 4 0 0 0
10 6 6 6 6 4 2 6 6 2 0 0 0 6 4 4 0 0 0
11 6 6 6 6 6 2 6 6 4 0 0 0 6 4 6 0 0 0
12 6 6 6 6 6 4 6 6 4 0 0 0 6 4 6 0 0 0
13 6 6 6 6 6 6 6 6 6 0 0 0 6 6 6 0 0 0
14 6 6 6 6 6 6 6 6 6 0 0 0 6 6 6 0 0 0
15 8 6 6 6 6 6 8 6 6 0 0 0 8 6 6 0 0 0
16 8 8 6 6 6 6 8 6 6 0 0 0 8 6 6 0 0 0
17 8 8 8 6 6 6 8 8 6 0 0 0 8 6 8 0 0 0
18 8 8 8 8 6 6 8 8 6 0 0 0 8 6 8 0 0 0
19 8 8 8 8 8 6 8 8 8 0 0 0 8 8 8 0 0 0
20 8 8 8 8 8 8 8 8 8 0 0 0 8 8 8 0 0 0

PC.spell_proficiency#

Proficiency bonus to Spell DC and attack, not including level.

Coordinates:

  • level (int): PC level in the range [1, 20]

  • doctrine (str): Cleric doctrines

Data variables:

  • cleric (level, doctrine) (int): Progression for clerics, depending on their doctrine

  • (class name) (level) (int): Progression for all other spellcasting classes

  • dedication (level) (int): Progression for all spellcaster dedications

pf2.tables.PC.spell_proficiency.display()
variable animist bard cleric druid magus oracle psychic sorcerer summoner witch wizard dedication
doctrine battle creed cloistered cleric warpriest
level
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
3 2 2 2 2 2 2 2 2 2 2 2 2 2 2
4 2 2 2 2 2 2 2 2 2 2 2 2 2 2
5 2 2 2 2 2 2 2 2 2 2 2 2 2 2
6 2 2 2 2 2 2 2 2 2 2 2 2 2 2
7 4 4 2 4 2 4 2 4 4 4 2 4 4 2
8 4 4 2 4 2 4 2 4 4 4 2 4 4 2
9 4 4 2 4 2 4 4 4 4 4 4 4 4 2
10 4 4 2 4 2 4 4 4 4 4 4 4 4 2
11 4 4 4 4 4 4 4 4 4 4 4 4 4 2
12 4 4 4 4 4 4 4 4 4 4 4 4 4 4
13 4 4 4 4 4 4 4 4 4 4 4 4 4 4
14 4 4 4 4 4 4 4 4 4 4 4 4 4 4
15 6 6 4 6 4 6 4 6 6 6 4 6 6 4
16 6 6 4 6 4 6 4 6 6 6 4 6 6 4
17 6 6 4 6 4 6 6 6 6 6 6 6 6 4
18 6 6 4 6 4 6 6 6 6 6 6 6 6 6
19 8 8 4 8 6 8 6 8 8 8 6 8 8 6
20 8 8 4 8 6 8 6 8 8 8 6 8 8 6

PC.untamed_druid_attack#

Fixed attack bonus of Polymorph spells as they are made available by the Untamed Form focus spell and its upgrade feats. This table differs from PC.polymorph_attack_bonus as the levels where a form starts being available are those given by the Feat that unlocks it as a Focus spell, rather than the levels where they become available as slot spells (which is one level earlier).

Coordinates:

  • level (int): PC level in the range [1, 20]

Data variables:

pf2.tables.PC.untamed_druid_attack.display()
variable animal insect dinosaur aerial plant elemental dragon monstrosity
level
1 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0
3 9 0 0 0 0 0 0 0
4 9 0 0 0 0 0 0 0
5 14 0 0 0 0 0 0 0
6 14 13 0 0 0 0 0 0
7 16 16 0 0 0 0 0 0
8 16 16 16 16 0 0 0 0
9 18 18 18 18 0 0 0 0
10 18 18 18 18 17 18 0 0
11 18 18 18 21 21 23 0 0
12 18 18 18 21 21 23 22 0
13 18 18 25 21 21 25 22 0
14 18 18 25 21 21 25 22 0
15 18 18 25 21 21 25 28 0
16 18 18 25 21 21 25 28 28
17 18 18 25 21 21 25 28 31
18 18 18 25 21 21 25 28 31
19 18 18 25 21 21 25 28 31
20 18 18 25 21 21 25 28 31

PC.weapon_dice#

Weapon damage dice. This table assumes that players will acquire the best items available as soon as their level allows.

Coordinates:

  • level (int): Item level in the range [1, 20]

Data variables:

  • striking_rune (level) (int): Number of weapon dice from Striking rune. Before the rune becomes available at level 4, weapon dice of non-magical weapons.

  • bomb (level) (int): Number of weapon dice for all alchemical bombs

  • bestial_mutagen_dice (level) (int): Number of weapon dice for Bestial Mutagen.

  • bestial_mutagen_faces (level) (int): Dice size for Bestial Mutagen

Notes:

See PC.attack_item_bonus for item attack bonuses.

pf2.tables.PC.weapon_dice.display()
variable striking_rune bomb bestial_mutagen_dice bestial_mutagen_faces
level
1 1 1 1 6
2 1 1 1 6
3 1 2 2 8
4 2 2 2 8
5 2 2 2 8
6 2 2 2 8
7 2 2 2 8
8 2 2 2 8
9 2 2 2 8
10 2 2 2 8
11 2 3 3 10
12 3 3 3 10
13 3 3 3 10
14 3 3 3 10
15 3 3 3 10
16 3 3 3 10
17 3 4 4 10
18 3 4 4 10
19 4 4 4 10
20 4 4 4 10

PC.weapon_proficiency#

Proficiency in weapon Strikes, not including level.

Coordinates:

  • level (int): PC level in the range [1, 20]

  • doctrine (str): Cleric doctrines

  • mastery (bool) Superior proficiency of fighters and gunslingers in some weapons

Data variables:

  • cleric (level, doctrine) (int): Cleric, depending on their doctrine

  • fighter (level, mastery) (int): Fighters in their mastery weapons vs. all other weapons

  • gunslinger (level, mastery) (int): Gunslingers in firearms and crossbows vs. all other weapons

  • (class name) (level) (int): All other classes

  • fighter_dedication (level) (int): Fighter Archetype

pf2.tables.PC.weapon_proficiency.display()
variable alchemist animist barbarian bard champion cleric commander druid exemplar fighter guardian gunslinger inventor investigator kineticist magus monk oracle psychic ranger rogue sorcerer summoner swashbuckler thaumaturge witch wizard fighter_dedication
doctrine battle creed cloistered cleric warpriest
mastery True False True False
level
1 2 2 2 2 2 2 2 2 2 2 2 4 4 2 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 4 4 2 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
3 2 2 2 2 2 2 2 2 2 2 2 4 4 2 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
4 2 2 2 2 2 2 2 2 2 2 2 4 4 2 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
5 2 2 4 2 4 4 2 2 4 2 4 6 4 4 6 4 4 4 2 4 4 2 2 4 4 2 4 4 4 2 2 2
6 2 2 4 2 4 4 2 2 4 2 4 6 4 4 6 4 4 4 2 4 4 2 2 4 4 2 4 4 4 2 2 2
7 4 2 4 2 4 4 2 4 4 2 4 6 4 4 6 4 4 4 2 4 4 2 2 4 4 2 4 4 4 2 2 2
8 4 2 4 2 4 4 2 4 4 2 4 6 4 4 6 4 4 4 2 4 4 2 2 4 4 2 4 4 4 2 2 2
9 4 2 4 2 4 4 2 4 4 2 4 6 4 4 6 4 4 4 2 4 4 2 2 4 4 2 4 4 4 2 2 2
10 4 2 4 2 4 4 2 4 4 2 4 6 4 4 6 4 4 4 2 4 4 2 2 4 4 2 4 4 4 2 2 2
11 4 4 4 4 4 4 4 4 4 4 4 6 4 4 6 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2
12 4 4 4 4 4 4 4 4 4 4 4 6 4 4 6 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
13 4 4 6 4 6 6 4 4 6 4 6 8 6 6 8 6 6 6 4 6 6 4 4 6 6 4 6 6 6 4 4 4
14 4 4 6 4 6 6 4 4 6 4 6 8 6 6 8 6 6 6 4 6 6 4 4 6 6 4 6 6 6 4 4 4
15 4 4 6 4 6 6 4 4 6 4 6 8 6 6 8 6 6 6 4 6 6 4 4 6 6 4 6 6 6 4 4 4
16 4 4 6 4 6 6 4 4 6 4 6 8 6 6 8 6 6 6 4 6 6 4 4 6 6 4 6 6 6 4 4 4
17 4 4 6 4 6 6 4 4 6 4 6 8 6 6 8 6 6 6 4 6 6 4 4 6 6 4 6 6 6 4 4 4
18 4 4 6 4 6 6 4 4 6 4 6 8 6 6 8 6 6 6 4 6 6 4 4 6 6 4 6 6 6 4 4 4
19 4 4 6 4 6 6 4 6 6 4 6 8 6 6 8 6 6 6 4 6 6 4 4 6 6 4 6 6 6 4 4 4
20 4 4 6 4 6 6 4 6 6 4 6 8 6 6 8 6 6 6 4 6 6 4 4 6 6 4 6 6 6 4 4 4

PC.weapon_specialization#

Bonus damage from Weapon Specialization.

Coordinates:

  • level (int): PC level in the range [1, 20]

  • doctrine (str): Cleric doctrines

  • mastery (bool): Superior proficiency of fighters and gunslingers in some weapons

Data variables:

  • cleric (level, doctrine) (int): Clerics, depending on their doctrines

  • fighter (level, mastery) (int): Fighters in their mastery weapons and vs. all other martial weapons

  • gunslinger (level, mastery) (int): Gunslingers in firearms, crossbows, and combination weapons vs. all other weapons

  • (class name) (level) (int): All other classes

pf2.tables.PC.weapon_specialization.display()
variable alchemist animist barbarian bard champion cleric commander druid exemplar fighter guardian gunslinger inventor investigator kineticist magus monk oracle psychic ranger rogue sorcerer summoner swashbuckler thaumaturge witch wizard
doctrine battle creed cloistered cleric warpriest
mastery True False True False
level
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
7 0 0 2 0 2 0 0 0 2 0 2 3 2 0 3 2 2 2 0 2 2 0 0 2 2 0 2 2 2 0 0
8 0 0 2 0 2 0 0 0 2 0 2 3 2 0 3 2 2 2 0 2 2 0 0 2 2 0 2 2 2 0 0
9 0 0 2 0 2 0 0 0 2 0 2 3 2 0 3 2 2 2 0 2 2 0 0 2 2 0 2 2 2 0 0
10 0 0 2 0 2 0 0 0 2 0 2 3 2 0 3 2 2 2 0 2 2 0 0 2 2 0 2 2 2 0 0
11 0 0 2 0 2 0 0 0 2 0 2 3 2 2 3 2 2 2 0 2 2 0 0 2 2 0 2 2 2 0 0
12 0 0 2 0 2 0 0 0 2 0 2 3 2 2 3 2 2 2 0 2 2 0 0 2 2 0 2 2 2 0 0
13 2 2 3 2 3 3 2 2 3 2 3 4 3 3 4 3 3 3 2 3 3 2 2 3 3 2 3 3 3 2 2
14 2 2 3 2 3 3 2 2 3 2 3 4 3 3 4 3 3 3 2 3 3 2 2 3 3 2 3 3 3 2 2
15 3 2 6 2 6 3 2 2 6 2 6 8 6 3 8 6 6 6 2 6 6 2 2 6 6 2 6 6 6 2 2
16 3 2 6 2 6 3 2 2 6 2 6 8 6 3 8 6 6 6 2 6 6 2 2 6 6 2 6 6 6 2 2
17 3 2 6 2 6 3 2 2 6 2 6 8 6 6 8 6 6 6 2 6 6 2 2 6 6 2 6 6 6 2 2
18 3 2 6 2 6 3 2 2 6 2 6 8 6 6 8 6 6 6 2 6 6 2 2 6 6 2 6 6 6 2 2
19 3 2 6 2 6 3 2 3 6 2 6 8 6 6 8 6 6 6 2 6 6 2 2 6 6 2 6 6 6 2 2
20 3 2 6 2 6 3 2 3 6 2 6 8 6 6 8 6 6 6 2 6 6 2 2 6 6 2 6 6 6 2 2

PC.level#

This is a DataArray that just contains the level, to be added to proficiency bonuses.

Coordinates:

  • level (int): PC level in the range [1, 20]

pf2.tables.PC.level.display(transpose=True)
level 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
variable
values 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

SIMPLE_PC#

Because adding up all the components of a PC’s bonuses can be tedious and error-prone, the variant tables SIMPLE_NPC make a bunch of (opinable) choices for you, presenting you with just the total.

pf2.tables.SIMPLE_PC
Available tables:
  • impulse_DC
  • impulse_attack_bonus
  • spell_DC
  • spell_attack_bonus
  • weapon_attack_bonus

For example, we can rebuild our rogue’s progression from before much quicker (but with less control):

pf2.tables.SIMPLE_PC.weapon_attack_bonus.rogue.sum("component").display(transpose=True)
level 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
variable
rogue 7 9 10 11 14 15 16 17 18 21 22 23 26 27 28 30 32 33 34 36

SIMPLE_PC.weapon_attack_bonus#

Typical total bonus to weapon strikes, by class and level.

Coordinates:

  • level (int): PC level in the range [1, 20]

  • component (str): Breakdown of each bonus, for debugging purposes. You typically want the total of all components: pf2.tables.SIMPLE_PC.weapon_attack_bonus.sum("component")

  • research_field (str): Alchemist subclass

  • doctrine (str): Cleric subclass

  • mastery (bool): Superior proficiency of fighters and gunslingers in some weapons

  • ability (str): Ability used for the attack bonus (STR or DEX). Only used in classes where it makes sense to have both.

Data variables:

  • alchemist (level, component, research_field) (int): Attack bonus for the Alchemist, by subclass

  • cleric (level, component, doctrine) (int): Attack bonus for the Cleric, by subclass

  • fighter (level, component, mastery) (int): Attack bonus for the Fighter. On/off mastery is presented side by side; this can be useful e.g. to Double Slice with a sword and shield. It is assumed that the class ability, the apex item, and all weapons are either STR or DEX.

  • gunslinger (level, component, mastery, ability) (int): Attack bonus for the Gunslinger:

    • mastery=True, ability=DEX: firearms, crossbows, and finesse melee combination weapons. Uses apex item.

    • mastery=True, ability=STR: other melee combination weapons (not finesse).

    • mastery=False, ability=DEX: finesse melee weapons (not combination). Uses apex item.

    • mastery=False, ability=STR: other melee weapons (not finesse, not combination)

  • (class name) (level, component) (int): Attack bonus for all other classes

Assumptions:

  • Martial classes dedicate their best ability boosts (+4 at level 1 whenever possible) and their apex item to boost their STR or DEX

  • Pure spellcasting classes use their second best ability boosts (+3 at level 1), but reserve the apex item to improve their spellcasting DC

  • Alchemists, Maguses, Inventors, Investigators use their apex items to boost STR or DEX.

pf2.tables.SIMPLE_PC.weapon_attack_bonus
<xarray.Dataset> Size: 29kB
Dimensions:         (component: 5, level: 20, research_field: 4, doctrine: 3,
                     mastery: 2, ability: 2)
Coordinates:
  * component       (component) object 40B 'level' 'proficiency' ... 'item'
  * level           (level) int64 160B 1 2 3 4 5 6 7 8 ... 14 15 16 17 18 19 20
  * research_field  (research_field) <U12 192B 'bomber' ... 'toxicologist'
  * doctrine        (doctrine) <U17 204B 'battle creed' ... 'warpriest'
  * mastery         (mastery) bool 2B True False
  * ability         (ability) <U3 24B 'DEX' 'STR'
Data variables: (12/27)
    alchemist       (level, component, research_field) int64 3kB 1 1 1 ... 3 4 3
    animist         (level, component) int64 800B 1 2 3 0 0 2 2 ... 3 20 4 5 0 3
    barbarian       (level, component) int64 800B 1 2 4 0 0 2 2 ... 3 20 6 6 1 3
    bard            (level, component) int64 800B 1 2 3 0 0 2 2 ... 3 20 4 5 0 3
    champion        (level, component) int64 800B 1 2 4 0 0 2 2 ... 3 20 6 6 1 3
    cleric          (level, component, doctrine) int64 2kB 1 1 1 2 2 ... 0 3 3 3
    ...              ...
    sorcerer        (level, component) int64 800B 1 2 3 0 0 2 2 ... 3 20 4 5 0 3
    summoner        (level, component) int64 800B 1 2 4 0 0 2 2 ... 3 20 6 6 0 3
    swashbuckler    (level, component) int64 800B 1 2 4 0 0 2 2 ... 3 20 6 6 1 3
    thaumaturge     (level, component) int64 800B 1 2 4 0 0 2 2 ... 3 20 6 6 1 3
    witch           (level, component) int64 800B 1 2 3 0 0 2 2 ... 3 20 4 5 0 3
    wizard          (level, component) int64 800B 1 2 3 0 0 2 2 ... 3 20 4 5 0 3

For example, a typical barbarian’s attack bonus is broken down as follows:

pf2.tables.SIMPLE_PC.weapon_attack_bonus.barbarian.display()
variable barbarian
component level proficiency ability_boosts ability_apex item
level
1 1 2 4 0 0
2 2 2 4 0 1
3 3 2 4 0 1
4 4 2 4 0 1
5 5 4 4 0 1
6 6 4 4 0 1
7 7 4 4 0 1
8 8 4 4 0 1
9 9 4 4 0 1
10 10 4 5 0 2
11 11 4 5 0 2
12 12 4 5 0 2
13 13 6 5 0 2
14 14 6 5 0 2
15 15 6 5 0 2
16 16 6 5 0 3
17 17 6 5 1 3
18 18 6 5 1 3
19 19 6 5 1 3
20 20 6 6 1 3

SIMPLE_PC.spell_attack_bonus#

Typical total bonus to spell attacks, by class and level.

Coordinates:

  • level (int): PC level in the range [1, 20]

  • component (str): Breakdown of each bonus, for debugging purposes. You typically want the total of all components: pf2.tables.SIMPLE_PC.spell_attack_bonus.sum("component")

  • doctrine (str): Cleric subclass

Data variables:

  • cleric (level, component, doctrine) (int): Attack bonus for the Cleric, by subclass

  • (class name) (level, component) (int): Attack bonus for all other classes

Assumptions:

  • Pure spellcasting classes use their best ability boosts (+4 at level 1) and an apex item to improve their spellcasting DC.

  • Martial classes take up all the feats of a spellcaster archetype and use their second best ability boosts (+3 at level 1) for the spellcasting ability.

  • Alchemists, Inventors, and Investigators choose an INT-based spellcasting dedication, to benefit from 4 boosts at level 1.

  • All but pure spellcasters reserve their apex item to boost STR or DEX. This choice is coherent with the weapon_attack_bonus table.

pf2.tables.SIMPLE_PC.spell_attack_bonus
<xarray.Dataset> Size: 19kB
Dimensions:       (component: 4, level: 20, doctrine: 3)
Coordinates:
  * component     (component) object 32B 'level' ... 'ability_apex'
  * level         (level) int64 160B 1 2 3 4 5 6 7 8 ... 13 14 15 16 17 18 19 20
  * doctrine      (doctrine) <U17 204B 'battle creed' ... 'warpriest'
Data variables: (12/27)
    alchemist     (level, component) int64 640B 1 2 4 0 2 2 4 ... 6 5 0 20 6 6 0
    animist       (level, component) int64 640B 1 2 4 0 2 2 4 ... 8 5 1 20 8 6 1
    barbarian     (level, component) int64 640B 1 2 3 0 2 2 3 ... 6 5 0 20 6 5 0
    bard          (level, component) int64 640B 1 2 4 0 2 2 4 ... 6 5 1 20 6 6 1
    champion      (level, component) int64 640B 1 2 3 0 2 2 3 ... 6 5 0 20 6 5 0
    cleric        (level, component, doctrine) int64 2kB 1 1 1 2 2 ... 6 6 0 1 1
    ...            ...
    sorcerer      (level, component) int64 640B 1 2 4 0 2 2 4 ... 8 5 1 20 8 6 1
    summoner      (level, component) int64 640B 1 2 4 0 2 2 4 ... 6 5 1 20 6 6 1
    swashbuckler  (level, component) int64 640B 1 2 4 0 2 2 4 ... 6 5 0 20 6 6 0
    thaumaturge   (level, component) int64 640B 1 2 3 0 2 2 3 ... 6 5 0 20 6 5 0
    witch         (level, component) int64 640B 1 2 4 0 2 2 4 ... 8 5 1 20 8 6 1
    wizard        (level, component) int64 640B 1 2 4 0 2 2 4 ... 8 5 1 20 8 6 1

For example, a wizard’s bonus is broken down as follows:

pf2.tables.SIMPLE_PC.spell_attack_bonus.wizard.display()
variable wizard
component level proficiency ability_boosts ability_apex
level
1 1 2 4 0
2 2 2 4 0
3 3 2 4 0
4 4 2 4 0
5 5 2 4 0
6 6 2 4 0
7 7 4 4 0
8 8 4 4 0
9 9 4 4 0
10 10 4 5 0
11 11 4 5 0
12 12 4 5 0
13 13 4 5 0
14 14 4 5 0
15 15 6 5 0
16 16 6 5 0
17 17 6 5 1
18 18 6 5 1
19 19 8 5 1
20 20 8 6 1

SIMPLE_PC.spell_DC#

This table is the same as spell_attack_bonus, plus 10 for the base DC offset.

pf2.tables.SIMPLE_PC.spell_DC.wizard.display()
variable wizard
component level base_DC proficiency ability_boosts ability_apex
level
1 1 10 2 4 0
2 2 10 2 4 0
3 3 10 2 4 0
4 4 10 2 4 0
5 5 10 2 4 0
6 6 10 2 4 0
7 7 10 4 4 0
8 8 10 4 4 0
9 9 10 4 4 0
10 10 10 4 5 0
11 11 10 4 5 0
12 12 10 4 5 0
13 13 10 4 5 0
14 14 10 4 5 0
15 15 10 6 5 0
16 16 10 6 5 0
17 17 10 6 5 1
18 18 10 6 5 1
19 19 10 8 5 1
20 20 10 8 6 1

SIMPLE_PC.impulse_attack_bonus#

Attack bonus with Kineticist impulses, by class and level. Includes gate attenuator.

Coordinates:

  • level (int): PC level in the range [1, 20]

  • component (str): Breakdown of each bonus, for debugging purposes. You typically want the total of all components: pf2.tables.SIMPLE_PC.impulse_attack_bonus.sum("component")

Data variables:

  • kineticist (level, component) (int): Attack bonus for the Kineticist

  • kineticist_dedication (level, component) (int): All other classes through the Kineticist archetype

pf2.tables.SIMPLE_PC.impulse_attack_bonus.sum("component").display(transpose=True)
level 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
variable
kineticist 7 8 10 11 12 13 16 17 18 20 22 23 24 25 28 29 32 33 36 38
kineticist_dedication 6 7 9 10 12 13 14 15 16 17 19 22 23 24 26 27 29 30 31 32

SIMPLE_PC.impulse_DC#

DC for Kineticist impulses, by class and level. The difference from SIMPLE_PC.impulse_attack_bonus is not a flat 10, because there is no gate attenuator available.

pf2.tables.SIMPLE_PC.impulse_DC.sum("component").display(transpose=True)
level 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
variable
kineticist 17 18 19 20 21 22 25 26 27 29 30 31 32 33 36 37 39 40 43 45
kineticist_dedication 16 17 18 19 21 22 23 24 25 26 27 30 31 32 34 35 36 37 38 39

NPC tables#

NPC#

All tables from the Building Creatures chapter of the GM Core.

Coordinates:

  • level (int): NPC level in the range [-1, 24]

  • challenge (str): [Extreme, High, Moderate, Low, Terrible]. Several tables don’t have all challenge levels; when missing the values are padded with zeros due to design constraints of xarray.Dataset.

  • limited (bool): Limited or unlimited use

  • mm (str): [max, min, mean] values bracket

  • rarity (str): [Common, Uncommon, Rare, Unique] creature rarity

Data variables:

pf2.tables.NPC
<xarray.Dataset> Size: 19kB
Dimensions:             (level: 26, challenge: 5, mm: 3, limited: 2, rarity: 4)
Coordinates:
  * level               (level) int64 208B -1 0 1 2 3 4 5 ... 19 20 21 22 23 24
  * challenge           (challenge) <U8 160B 'Extreme' 'High' ... 'Terrible'
  * mm                  (mm) <U4 48B 'max' 'min' 'mean'
  * limited             (limited) bool 2B False True
  * rarity              (rarity) <U8 128B 'Common' 'Uncommon' 'Rare' 'Unique'
Data variables: (12/15)
    abilities           (level, challenge) int64 1kB 4 3 2 0 0 4 ... 13 12 9 7 0
    saving_throws       (level, challenge) int64 1kB 9 8 5 2 0 ... 42 38 36 32
    perception          (level, challenge) int64 1kB 9 8 5 2 0 ... 42 38 36 32
    skills              (level, challenge) int64 1kB 8 5 4 2 1 ... 45 40 38 33
    AC                  (level, challenge) int64 1kB 18 15 14 12 ... 51 50 48 0
    HP                  (level, challenge, mm) int64 3kB 0 0 0 9 9 ... 375 0 0 0
    ...                  ...
    spell_DC            (level, challenge) int64 1kB 19 16 13 0 0 ... 48 45 0 0
    spell_attack        (level, challenge) int64 1kB 11 8 5 0 0 ... 44 40 37 0 0
    area_damage_dice    (level, limited) <U4 832B '1d4' '1d6' ... '11d6' '25d6'
    area_damage_mean    (level, limited) int64 416B 2 4 4 6 5 ... 81 38 84 39 88
    resistances         (level, mm) int64 624B 1 1 1 3 1 2 ... 25 13 19 26 13 20
    recall_knowledge    (level, rarity) int64 832B 13 15 18 23 ... 48 50 53 58

For example, these are the recommended stats for a level 5 NPC:

pf2.tables.NPC.sel(level=5).display(transpose=True)
challenge Extreme High Moderate Low Terrible
variable mm
abilities 6 5 4 2 0
saving_throws 17 15 12 9 7
perception 17 15 12 9 7
skills 16 13 12 10 8
AC 25 22 21 19 0
HP max 0 97 78 59 0
min 0 91 72 53 0
mean 0 94 75 56 0
strike_attack 17 15 13 11 0
strike_damage_dice 2d12+7 2d8+7 2d6+6 2d4+6 0
strike_damage_mean 20 16 13 11 0
spell_DC 26 22 19 0 0
spell_attack 18 14 11 0 0
limited False True
variable
area_damage_dice 2d10 6d6
area_damage_mean 12 21
mm max min mean
variable
resistances 8 4 6
rarity Common Uncommon Rare Unique
variable
recall_knowledge 20 22 25 30

SIMPLE_NPC#

Very frequently, when simulating a PC’s effectiveness in combat, one does not care about the full gamut of combinations offered by the NPC tables. pf2.tables.SIMPLE_NPC offers a simplified variant of it where a player is only offered three targets. In this table, the level coordinate is the player’s level instead of the creature’s level.

The three targets are ordered along the challenge coordinate:

SIMPLE_NPC challenge

NPC challenge

Creature level

mm

rarity

Weak

Low

Player level - 2

min

Common

Matched

Moderate

Player level

mean

Common

Boss

High

Player level + 2

max

Uncommon

These are considered typical interesting targets. There are notable exceptions which are not covered by this table; for example:

  • Oozes and zombies have notoriously extremely poor AC, so Deadly and Fatal weapons will display a peculiar damage distribution;

  • You may be faced with an extreme boss (party level +4) and target their best defenses; this is a sadly frequent situation e.g. for martial characters who didn’t invest in anything other than their attack bonus, or spellcasters that didn’t differentiate their saving throws. In this situation, the target DCs will exceed the ‘Boss’ challenge of the SIMPLE_NPC table.

pf2.tables.SIMPLE_NPC
<xarray.Dataset> Size: 11kB
Dimensions:             (challenge: 3, level: 20, limited: 2)
Coordinates:
  * challenge           (challenge) object 24B 'Weak' 'Matched' 'Boss'
  * level               (level) int64 160B 1 2 3 4 5 6 7 ... 15 16 17 18 19 20
  * limited             (limited) bool 2B False True
Data variables: (12/15)
    abilities           (level, challenge) int64 480B 0 3 4 0 3 ... 6 10 5 7 10
    saving_throws       (level, challenge) int64 480B 2 7 12 3 8 ... 38 27 33 39
    perception          (level, challenge) int64 480B 2 7 12 3 8 ... 38 27 33 39
    skills              (level, challenge) int64 480B 2 6 10 3 7 ... 40 29 34 42
    AC                  (level, challenge) int64 480B 12 15 19 13 ... 39 44 48
    HP                  (level, challenge) int64 480B 5 20 59 11 ... 247 375 544
    ...                  ...
    spell_DC            (level, challenge) int64 480B 0 14 20 0 ... 44 0 39 45
    spell_attack        (level, challenge) int64 480B 0 6 12 0 7 ... 36 0 31 37
    area_damage_dice    (level, challenge, limited) <U4 2kB '1d4' ... '23d6'
    area_damage_mean    (level, challenge, limited) int64 960B 2 4 5 ... 36 81
    resistances         (level, challenge) int64 480B 1 2 6 1 4 ... 23 10 16 24
    recall_knowledge    (level, challenge) int64 480B 13 15 20 14 ... 38 40 46

For example, here are three opponents appropriate to a level 5 PC:

pf2.tables.SIMPLE_NPC.sel(level=5).display(transpose=True)
challenge Weak Matched Boss
variable limited
abilities 1 4 6
saving_throws 6 12 18
perception 6 12 18
skills 7 12 17
AC 16 21 25
HP 31 75 148
strike_attack 8 13 18
strike_damage_dice 1d6+5 2d6+6 2d10+9
strike_damage_mean 8 13 20
spell_DC 0 19 25
spell_attack 0 11 17
area_damage_dice False 2d8 2d10 4d6
True 4d6 6d6 8d6
area_damage_mean False 9 12 15
True 14 21 28
resistances 3 6 10
recall_knowledge 18 20 25

Other tables#

DC#

Difficulty Classes tables from the GM Core.

Coordinates:

  • level (int): target level in the range [0, 25]

  • rank (int): spell or effect rank in the range [1, 10]

  • difficulty (str): task difficulty

  • rarity (str): creature or item rarity

  • proficiency (str): target skill proficiency

Data variables:

pf2.tables.DC
<xarray.Dataset> Size: 832B
Dimensions:                (proficiency: 5, level: 26, rank: 10, difficulty: 7,
                            rarity: 4)
Coordinates:
  * proficiency            (proficiency) object 40B 'Untrained' ... 'Legendary'
  * level                  (level) int64 208B 0 1 2 3 4 5 ... 20 21 22 23 24 25
  * rank                   (rank) int64 80B 1 2 3 4 5 6 7 8 9 10
  * difficulty             (difficulty) object 56B 'Incredibly easy' ... 'Inc...
  * rarity                 (rarity) object 32B 'Common' 'Uncommon' ... 'Unique'
Data variables:
    simple                 (proficiency) int64 40B 10 15 20 30 40
    by_level               (level) int64 208B 14 15 16 18 19 ... 42 44 46 48 50
    by_rank                (rank) int64 80B 15 18 20 23 26 28 31 34 36 39
    difficulty_adjustment  (difficulty) int64 56B -10 -5 -2 0 2 5 10
    rarity_adjustment      (rarity) int64 32B 0 2 5 10

EARN_INCOME#

Table 4-2 Income Earned. This table is also used to Craft and for a variety of similar Downtime activities.

Coordinates:

  • level (int): Task level in the range [0, 21]

  • proficiency (str): Failed, Trained, Expert, Master, Legendary.

Data variables:

  • DC (level) (int): The DC for the task

  • income_earned (level, proficiency) (float): The income earned per day of successful labour, in GP

pf2.tables.EARN_INCOME
<xarray.Dataset> Size: 1kB
Dimensions:        (level: 22, proficiency: 5)
Coordinates:
  * level          (level) int64 176B 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21
  * proficiency    (proficiency) <U9 180B 'Failed' 'Trained' ... 'Legendary'
Data variables:
    DC             (level) int64 176B 14 15 16 18 19 20 22 ... 35 36 38 39 40 42
    income_earned  (level, proficiency) float64 880B 0.01 0.05 ... 175.0 300.0
pf2.tables.EARN_INCOME.display()
variable DC income_earned
proficiency Failed Trained Expert Master Legendary
level
0 14 0.01 0.05 0.05 0.05 0.05
1 15 0.02 0.20 0.20 0.20 0.20
2 16 0.04 0.30 0.30 0.30 0.30
3 18 0.08 0.50 0.50 0.50 0.50
4 19 0.10 0.70 0.80 0.80 0.80
5 20 0.20 0.90 1.00 1.00 1.00
6 22 0.30 1.50 2.00 2.00 2.00
7 23 0.40 2.00 2.50 2.50 2.50
8 24 0.50 2.50 3.00 3.00 3.00
9 26 0.60 3.00 4.00 4.00 4.00
10 27 0.70 4.00 5.00 6.00 6.00
11 28 0.80 5.00 6.00 8.00 8.00
12 30 0.90 6.00 8.00 10.00 10.00
13 31 1.00 7.00 10.00 15.00 15.00
14 32 1.50 8.00 15.00 20.00 20.00
15 34 2.00 10.00 20.00 28.00 28.00
16 35 2.50 13.00 25.00 36.00 40.00
17 36 3.00 15.00 30.00 45.00 55.00
18 38 4.00 20.00 45.00 70.00 90.00
19 39 6.00 30.00 60.00 100.00 130.00
20 40 8.00 40.00 75.00 150.00 200.00
21 42 NaN 50.00 90.00 175.00 300.00