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 runes or Weapon Potency Solarian crystals. Before the rune/crystal becomes available at level 2, item bonus of non-magical weapons.

  • improvement (level) (int): Item bonus obtained from a permanent Starfinder weapon improvement

  • 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 improvement bomb bestial_mutagen fury_cocktail runic_weapon gate_attenuator
level
1 0 0 0 1 0 1 0
2 1 1 0 1 0 1 0
3 1 1 1 2 0 1 1
4 1 1 1 2 2 1 1
5 1 1 1 2 2 1 1
6 1 1 1 2 2 1 1
7 1 1 1 2 2 1 1
8 1 1 1 2 2 1 1
9 1 1 1 2 2 1 1
10 2 2 1 2 2 1 1
11 2 2 2 3 2 2 2
12 2 2 2 3 3 2 2
13 2 2 2 3 3 2 2
14 2 2 2 3 3 2 2
15 2 2 2 3 3 2 2
16 3 3 2 3 3 2 2
17 3 3 3 4 3 3 3
18 3 3 3 4 4 3 3
19 3 3 3 4 4 3 3
20 3 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 Pathfinder and Starfinder classes

  • kineticist_dedication (level) (int): Kineticist Archetype

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 envoy mystic operative solarian soldier witchwarper 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 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 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 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 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 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 2 2 2 4 4 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 2 2 2 4 4 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 4 2 2 4 4 4 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 4 2 2 4 4 4 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 4 2 4 4 4 4 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 2 4 4 4 4 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 2 4 4 4 4 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 2 4 4 4 4 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 2 4 4 6 6 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 2 4 4 6 6 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 2 4 6 6 6 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 2 4 6 6 6 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 2 6 6 8 6 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 2 6 6 8 6 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.

Note: this table is for Pathfinder only.

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:

  • envoy (level, priority) (int): Skill progression for Starfinder Envoys.

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

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

  • spellcaster_dedication (level, priority) (int) Skill progression for a class other than Envoy or 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) without delaying feat acquisition.

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 classes other than Envoy and Rogue 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 envoy rogue others spellcaster_dedication
priority 1 2 3 4 5 6 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 2 2 2 2 2 2 0 0 0 2 2 0 0 0 0
2 4 2 2 2 2 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 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 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 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 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 4 4 4 2 6 4 2 0 0 0 6 4 2 0 0 0
8 6 6 4 4 4 2 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 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 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 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 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 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 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 6 6 6 8 6 6 0 0 0 8 6 6 0 0 0
16 8 8 6 6 6 6 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 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 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 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 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 Pathfinder and Starfinder 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 mystic witchwarper 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
3 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
5 2 2 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 2 2
7 4 4 2 4 2 4 2 4 4 4 2 4 4 4 4 2
8 4 4 2 4 2 4 2 4 4 4 2 4 4 4 4 2
9 4 4 2 4 2 4 4 4 4 4 4 4 4 4 4 2
10 4 4 2 4 2 4 4 4 4 4 4 4 4 4 4 2
11 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 4 4 4 4 4
13 4 4 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 4 4
15 6 6 4 6 4 6 4 6 6 6 4 6 6 6 6 4
16 6 6 4 6 4 6 4 6 6 6 4 6 6 6 6 4
17 6 6 4 6 4 6 6 6 6 6 6 6 6 6 6 4
18 6 6 4 6 4 6 6 6 6 6 6 6 6 6 6 6
19 8 8 4 8 6 8 6 8 8 8 6 8 8 8 8 6
20 8 8 4 8 6 8 6 8 8 8 6 8 8 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 a permanent Striking rune or Striking Solarian crystal. Before the rune/crystal becomes available at level 4, weapon dice of non-magical weapons.

  • improvement (level) (int): Number of weapon dice from a permanent Starfinder weapon improvement

  • 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 improvement bomb bestial_mutagen_dice bestial_mutagen_faces
level
1 1 1 1 1 6
2 1 1 1 1 6
3 1 1 2 2 8
4 2 2 2 2 8
5 2 2 2 2 8
6 2 2 2 2 8
7 2 2 2 2 8
8 2 2 2 2 8
9 2 2 2 2 8
10 2 2 2 2 8
11 2 2 3 3 10
12 3 3 3 3 10
13 3 3 3 3 10
14 3 3 3 3 10
15 3 3 3 3 10
16 3 3 3 3 10
17 3 3 4 4 10
18 3 3 4 4 10
19 4 4 4 4 10
20 4 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, gunslingers, and operatives in some weapons

  • category (str): [martial, advanced]. Use martial for simple weapons and unarmed attacks, as well as for advanced weapons with ancestral weapon familiarity.

Data variables:

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

  • fighter (level, category, mastery) (int): Fighter proficiency in their mastery weapons vs. all other weapons. category="advanced" is for Advanced weapons without ancestral weapon familiarity; it is assumed one takes the level 6 feat Advanced Weapon Training to boost proficiency. Everything else should fall into category="martial".

  • gunslinger (level, category, mastery) (int): Gunslinger proficiency in firearms, crossbows and combination weapons vs. all other weapons. category="advanced" is for Advanced weapons without ancestral weapon familiarity; it is assumed one takes the level 6 feat Advanced Shooter to boost proficiency. Everything else should fall into category="martial".

  • operative (level, category, mastery) (int): Operative proficiency in firearms vs. all other weapons. category="advanced" is for Advanced weapons without ancestral weapon familiarity. Everything else should fall into category="martial".

  • (class name) (level) (int): All other Pathfinder and Starfinder classes

  • fighter_dedication (level) (int): Fighter Archetype

  • operative_dedication (level) (int): Operative Archetype

  • weapon_proficiency (level) (int): Weapon Proficiency feat

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 envoy mystic operative solarian soldier witchwarper fighter_dedication operative_dedication weapon_proficiency
doctrine battle creed cloistered cleric warpriest
category martial advanced martial advanced martial advanced
mastery True False True False True False True False True False True False
level
1 2 2 2 2 2 2 2 2 2 2 2 4 4 2 2 2 4 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 4 2 2 0 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 4 4 2 2 2 4 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 4 2 2 0 2 2 2 2 2 2
3 2 2 2 2 2 2 2 2 2 2 2 4 4 2 2 2 4 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 4 2 2 0 2 2 2 2 2 2
4 2 2 2 2 2 2 2 2 2 2 2 4 4 2 2 2 4 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 4 2 2 0 2 2 2 2 2 2
5 2 2 4 2 4 4 2 2 4 2 4 6 4 4 2 4 6 4 4 0 4 4 2 4 4 2 2 4 4 2 4 4 4 2 2 4 2 6 2 4 0 4 4 2 2 2 2
6 2 2 4 2 4 4 2 2 4 2 4 6 4 6 4 4 6 4 6 0 4 4 2 4 4 2 2 4 4 2 4 4 4 2 2 4 2 6 2 4 0 4 4 2 2 2 2
7 4 2 4 2 4 4 2 4 4 2 4 6 4 6 4 4 6 4 6 0 4 4 2 4 4 2 2 4 4 2 4 4 4 2 2 4 2 6 2 4 0 4 4 2 2 2 2
8 4 2 4 2 4 4 2 4 4 2 4 6 4 6 4 4 6 4 6 0 4 4 2 4 4 2 2 4 4 2 4 4 4 2 2 4 2 6 2 4 0 4 4 2 2 2 2
9 4 2 4 2 4 4 2 4 4 2 4 6 4 6 4 4 6 4 6 0 4 4 2 4 4 2 2 4 4 2 4 4 4 2 2 4 2 6 2 4 0 4 4 2 2 2 2
10 4 2 4 2 4 4 2 4 4 2 4 6 4 6 4 4 6 4 6 0 4 4 2 4 4 2 2 4 4 2 4 4 4 2 2 4 2 6 2 4 0 4 4 2 2 2 2
11 4 4 4 4 4 4 4 4 4 4 4 6 4 6 4 4 6 4 6 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 6 2 4 0 4 4 4 2 2 4
12 4 4 4 4 4 4 4 4 4 4 4 6 4 6 4 4 6 4 6 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 6 2 4 0 4 4 4 4 4 4
13 4 4 6 4 6 6 4 4 6 4 6 8 6 8 6 6 8 6 8 0 6 6 4 6 6 4 4 6 6 4 6 6 6 4 4 6 4 8 4 6 0 6 4 4 4 4 4
14 4 4 6 4 6 6 4 4 6 4 6 8 6 8 6 6 8 6 8 0 6 6 4 6 6 4 4 6 6 4 6 6 6 4 4 6 4 8 4 6 0 6 4 4 4 4 4
15 4 4 6 4 6 6 4 4 6 4 6 8 6 8 6 6 8 6 8 0 6 6 4 6 6 4 4 6 6 4 6 6 6 4 4 6 4 8 4 6 0 6 6 4 4 4 4
16 4 4 6 4 6 6 4 4 6 4 6 8 6 8 6 6 8 6 8 0 6 6 4 6 6 4 4 6 6 4 6 6 6 4 4 6 4 8 4 6 0 6 6 4 4 4 4
17 4 4 6 4 6 6 4 4 6 4 6 8 6 8 6 6 8 6 8 0 6 6 4 6 6 4 4 6 6 4 6 6 6 4 4 6 4 8 4 6 0 6 6 4 4 4 4
18 4 4 6 4 6 6 4 4 6 4 6 8 6 8 6 6 8 6 8 0 6 6 4 6 6 4 4 6 6 4 6 6 6 4 4 6 4 8 4 6 0 6 6 4 4 4 4
19 4 4 6 4 6 6 4 6 6 4 6 8 8 8 8 6 8 6 8 0 6 6 4 6 6 4 4 6 6 4 6 6 6 4 4 6 4 8 4 8 0 8 6 4 4 4 4
20 4 4 6 4 6 6 4 6 6 4 6 8 8 8 8 6 8 6 8 0 6 6 4 6 6 4 4 6 6 4 6 6 6 4 4 6 4 8 4 8 0 8 6 4 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

  • category (str): [martial, advanced]. Use martial for simple weapons and unarmed attacks, as well as for advanced weapons with ancestral weapon familiarity.

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. For advanced weapons, it is assumed one takes either ancestral weapon familiarity or Advanced Weapon Training to boost proficiency.

  • gunslinger (level, mastery) (int): Gunslingers in firearms, crossbows, and combination weapons vs. all other weapons. For advanced weapons, it is assumed one takes either ancestral weapon familiarity or Advanced Shooter to boost proficiency.

  • operative (level, category, mastery) (int): Operatives in guns vs. all other weapons. Note that, unlike fighter and operative, there is no level 6 feat to boost proficiency with advanced guns, so the category impacts damage too.

  • (class name) (level) (int): All other Pathfinder and Starfinder 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 envoy mystic operative solarian soldier witchwarper
doctrine battle creed cloistered cleric warpriest
mastery True False True False True False
category martial advanced martial advanced
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 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 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 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 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 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 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 2 0 3 2 0 0 2 2 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 2 0 3 2 0 0 2 2 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 2 0 3 2 0 0 2 2 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 2 0 3 2 0 0 2 2 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 2 0 3 2 0 0 2 2 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 2 0 3 2 0 0 2 2 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 3 2 4 3 2 0 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 3 2 4 3 2 0 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 6 2 8 6 4 0 6 3 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 6 2 8 6 4 0 6 3 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 6 2 8 6 4 0 6 3 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 6 2 8 6 4 0 6 3 2
19 3 2 6 2 6 3 2 3 6 2 6 8 8 6 8 6 6 6 2 6 6 2 2 6 6 2 6 6 6 2 2 6 2 8 8 4 0 8 3 2
20 3 2 6 2 6 3 2 3 6 2 6 8 8 6 8 6 6 6 2 6 6 2 2 6 6 2 6 6 6 2 2 6 2 8 8 4 0 8 3 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:
  • area_fire_DC
  • class_DC
  • 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

  • category (str): [martial, advanced]. Use martial for simple weapons and unarmed attacks, as well as for advanced weapons with ancestral weapon familiarity.

  • 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, category, 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.

    category="advanced" is for Advanced weapons without ancestral weapon familiarity; it is assumed one takes the level 6 feat Advanced Weapon Training to boost proficiency. Everything else should fall into category="martial".

  • gunslinger (level, component, category, 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)

    category="advanced" is for Advanced weapons without ancestral weapon familiarity; it is assumed one takes the level 6 feat Advanced Shooter to boost proficiency. Everything else should fall into category="martial".

  • operative (level, component, category, mastery) (int): Attack bonus for the Operative:

    • mastery=True: guns.

    • mastery=False: other weapons (finesse if melee).

    category="advanced" is for Advanced weapons without ancestral weapon familiarity; everything else should fall into category="martial".

  • (class name) (level, component) (int): Attack bonus for all other Pathfinder and Starfinder 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, Thaumaturges and Envoys use their apex items to boost STR or DEX (at the expense of their class DC / spell DC).

  • Kineticists and Soldiers start with 3 boosts in their attack attribute (either STR or DEX), but reserve the apex item to improve their CON.

pf2.tables.SIMPLE_PC.weapon_attack_bonus
<xarray.Dataset> Size: 42kB
Dimensions:         (component: 5, level: 20, research_field: 4, doctrine: 3,
                     category: 2, mastery: 2, ability: 2)
Coordinates:
  * component       (component) <U14 280B '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'
  * category        (category) <U8 64B 'martial' 'advanced'
  * mastery         (mastery) bool 2B True False
  * ability         (ability) <U3 24B 'DEX' 'STR'
Data variables: (12/33)
    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
    ...              ...
    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 3 0 0 2 2 ... 3 20 6 5 1 3
    witch           (level, component) int64 800B 1 2 3 0 0 2 2 ... 3 20 4 5 0 3
    witchwarper     (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.

  • Thaumaturges and Envoys choose a CHA-based spellcasting dedication for the same reason.

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

pf2.tables.SIMPLE_PC.spell_attack_bonus
<xarray.Dataset> Size: 23kB
Dimensions:       (component: 4, level: 20, doctrine: 3)
Coordinates:
  * component     (component) <U14 224B 'level' 'proficiency' ... '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/33)
    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
    ...            ...
    summoner      (level, component) int64 640B 1 2 4 0 2 2 4 ... 6 5 0 20 6 6 0
    swashbuckler  (level, component) int64 640B 1 2 4 0 2 2 4 ... 6 5 1 20 6 6 1
    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 3 0 2 2 3 ... 8 5 0 20 8 5 0
    witchwarper   (level, component) int64 640B 1 2 3 0 2 2 3 ... 8 5 0 20 8 5 0
    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.sum("component").display()
variable alchemist animist barbarian bard champion cleric commander druid envoy exemplar fighter guardian gunslinger inventor investigator kineticist magus monk mystic operative oracle psychic ranger rogue solarian soldier sorcerer summoner swashbuckler thaumaturge witch witchwarper wizard
doctrine battle creed cloistered cleric warpriest
level
1 17 17 16 17 16 17 17 17 16 17 16 16 16 16 16 17 16 16 16 17 17 16 16 17 17 17 17 17 17 17 17 16 16 16 17
2 18 18 17 18 17 18 18 18 17 18 17 17 17 17 17 18 17 17 17 18 18 17 17 18 18 18 18 18 18 18 18 17 17 17 18
3 19 19 18 19 18 19 19 19 18 19 18 18 18 18 18 19 18 18 18 19 19 18 18 19 19 19 19 19 19 19 19 18 18 18 19
4 20 20 19 20 19 20 20 20 19 20 19 19 19 19 19 20 19 19 19 20 20 19 19 20 20 20 20 20 20 20 20 19 19 19 20
5 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
6 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
7 23 25 23 23 23 23 25 23 23 25 23 23 23 23 23 23 23 23 23 23 25 23 25 25 23 23 23 23 25 23 23 23 25 25 25
8 24 26 24 24 24 24 26 24 24 26 24 24 24 24 24 24 24 24 24 24 26 24 26 26 24 24 24 24 26 24 24 24 26 26 26
9 25 27 25 25 25 25 27 25 25 27 25 25 25 25 25 25 25 25 27 25 27 25 27 27 25 25 25 25 27 27 25 25 27 27 27
10 27 29 26 27 26 27 29 27 26 29 26 26 26 26 26 27 26 26 28 27 29 26 28 29 27 27 27 27 29 29 27 26 28 28 29
11 28 30 27 28 27 30 30 30 27 30 27 27 27 27 27 28 27 27 29 28 30 27 29 30 28 28 28 28 30 30 28 27 29 29 30
12 31 31 30 31 30 31 31 31 30 31 30 30 30 30 30 31 30 30 30 31 31 30 30 31 31 31 31 31 31 31 31 30 30 30 31
13 32 32 31 32 31 32 32 32 31 32 31 31 31 31 31 32 31 31 31 32 32 31 31 32 32 32 32 32 32 32 32 31 31 31 32
14 33 33 32 33 32 33 33 33 32 33 32 32 32 32 32 33 32 32 32 33 33 32 32 33 33 33 33 33 33 33 33 32 32 32 33
15 34 36 34 34 34 34 36 34 34 36 34 34 34 34 34 34 34 34 34 34 36 34 36 36 34 34 34 34 36 34 34 34 36 36 36
16 35 37 35 35 35 35 37 35 35 37 35 35 35 35 35 35 35 35 35 35 37 35 37 37 35 35 35 35 37 35 35 35 37 37 37
17 36 39 36 37 36 36 39 37 36 39 36 36 36 36 36 36 36 36 38 37 39 36 38 39 37 36 36 37 39 38 37 36 38 38 39
18 39 40 39 40 39 37 40 38 39 40 39 39 39 39 39 39 39 39 39 40 40 39 39 40 40 39 39 40 40 39 40 39 39 39 40
19 40 43 40 41 40 38 43 41 40 43 40 40 40 40 40 40 40 40 40 41 43 40 42 43 41 40 40 41 43 40 41 40 42 42 43
20 42 45 41 43 41 40 45 43 41 45 41 41 41 41 41 42 41 41 41 43 45 41 43 45 43 42 42 43 45 42 43 41 43 43 45

SIMPLE_PC.class_DC#

Typical total bonus to class DC, 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:

  • Alchemists, Inventors, Investigators, Thaumaturges, and Envoys use their apex items to boost STR or DEX, at the expense of their class DC.

pf2.tables.SIMPLE_PC.class_DC.sum("component").display()
variable alchemist animist barbarian bard champion cleric commander druid envoy exemplar fighter guardian gunslinger inventor investigator kineticist magus monk mystic operative oracle psychic ranger rogue solarian soldier sorcerer summoner swashbuckler thaumaturge witch witchwarper wizard
doctrine battle creed cloistered cleric warpriest
level
1 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
2 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
3 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
4 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5 21 21 21 21 21 23 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
6 22 22 22 22 22 24 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
7 23 23 23 23 23 25 23 25 25 23 23 23 23 23 23 23 23 25 23 23 23 23 23 23 23 23 23 25 23 23 23 23 23 25 23
8 24 24 24 24 24 26 24 26 26 24 24 24 24 24 24 24 24 26 24 24 24 24 24 24 24 24 24 26 24 24 24 24 24 26 24
9 27 25 25 25 27 27 25 27 27 25 27 27 25 27 27 27 27 27 25 27 25 25 25 25 27 25 27 27 25 25 27 27 25 27 25
10 29 27 27 27 29 29 27 29 29 27 29 29 27 29 29 29 29 29 27 29 27 27 27 27 29 27 29 29 27 27 29 29 27 29 27
11 30 28 30 28 30 30 30 30 30 28 30 30 30 30 30 30 30 30 28 30 28 30 28 28 30 30 30 30 28 28 30 30 28 30 28
12 31 29 31 29 31 31 31 31 31 29 31 31 31 31 31 31 31 31 29 31 29 31 29 29 31 31 31 31 29 29 31 31 29 31 29
13 32 30 32 30 32 32 32 32 32 30 32 32 32 32 32 32 32 32 30 32 30 32 30 30 32 32 32 32 30 30 32 32 30 32 30
14 33 31 33 31 33 33 33 33 33 31 33 33 33 33 33 33 33 33 31 33 31 33 31 31 33 33 33 33 31 31 33 33 31 33 31
15 34 32 34 32 34 36 36 36 36 32 34 34 34 34 34 34 34 36 32 34 32 34 32 32 34 34 34 36 32 32 34 34 32 36 32
16 35 33 35 33 35 37 37 37 37 33 35 35 35 35 35 35 35 37 33 35 33 35 33 33 35 35 35 37 33 33 35 35 33 37 33
17 38 35 37 35 39 39 39 39 39 35 36 39 37 37 39 38 36 39 35 37 35 37 35 35 39 37 39 39 35 35 37 38 35 39 35
18 39 36 38 36 40 40 40 40 40 36 37 40 38 38 40 39 37 40 36 38 36 38 36 36 40 38 40 40 36 36 38 39 36 40 36
19 40 37 41 37 41 43 43 43 43 37 38 41 41 41 41 40 40 43 37 41 37 41 37 37 41 41 41 43 37 37 41 40 37 41 37
20 42 39 43 39 43 45 45 45 45 39 40 43 43 43 43 42 42 45 39 43 39 43 39 39 43 43 43 45 39 39 43 42 39 43 39

SIMPLE_PC.area_fire_DC#

Typical total bonus to Starfinder Area Fire or Auto-Fire DC, by class and level. This table includes all Pathfinder classes as well, for the sake of future-proofing and mixing.

This table is the same as class_DC plus the weapon’s tracking bonus.

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

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

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

Assumptions:

  • Other classes are expected to dedicate their second-best ability score (3 boosts at level 1) to CON.

  • Only pure kineticists use their Apex item to boost CON.

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#

Pathfinder Table 4-2 Income Earned and Starfinder Table 4-2 Income Earned. These tables are 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

  • pathfinder (level, proficiency) (float): Pathfinder income earned per day of labour, in gold pieces

  • starfinder (level, proficiency) (int): Starfinder income earned per day of labour, in credits

pf2.tables.EARN_INCOME
<xarray.Dataset> Size: 2kB
Dimensions:      (level: 22, proficiency: 5)
Coordinates:
  * level        (level) int64 176B 0 1 2 3 4 5 6 7 ... 14 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
    pathfinder   (level, proficiency) float64 880B 0.01 0.05 ... 175.0 300.0
    starfinder   (level, proficiency) int64 880B 1 1 1 1 1 ... 500 900 1750 3000
pf2.tables.EARN_INCOME.display()
variable DC pathfinder starfinder
proficiency Failed Trained Expert Master Legendary Failed Trained Expert Master Legendary
level
0 14 0.01 0.05 0.05 0.05 0.05 1 1 1 1 1
1 15 0.02 0.20 0.20 0.20 0.20 1 2 2 2 2
2 16 0.04 0.30 0.30 0.30 0.30 1 3 3 3 3
3 18 0.08 0.50 0.50 0.50 0.50 1 5 5 5 5
4 19 0.10 0.70 0.80 0.80 0.80 1 7 8 8 8
5 20 0.20 0.90 1.00 1.00 1.00 2 9 10 10 10
6 22 0.30 1.50 2.00 2.00 2.00 3 15 20 20 20
7 23 0.40 2.00 2.50 2.50 2.50 4 20 25 25 25
8 24 0.50 2.50 3.00 3.00 3.00 5 25 30 30 30
9 26 0.60 3.00 4.00 4.00 4.00 6 30 40 40 40
10 27 0.70 4.00 5.00 6.00 6.00 7 40 50 60 60
11 28 0.80 5.00 6.00 8.00 8.00 8 50 60 80 80
12 30 0.90 6.00 8.00 10.00 10.00 9 60 80 100 100
13 31 1.00 7.00 10.00 15.00 15.00 10 70 100 150 150
14 32 1.50 8.00 15.00 20.00 20.00 15 80 150 200 200
15 34 2.00 10.00 20.00 28.00 28.00 20 100 200 280 280
16 35 2.50 13.00 25.00 36.00 40.00 25 130 250 360 400
17 36 3.00 15.00 30.00 45.00 55.00 30 150 300 450 550
18 38 4.00 20.00 45.00 70.00 90.00 40 200 450 700 900
19 39 6.00 30.00 60.00 100.00 130.00 60 300 600 1000 1300
20 40 8.00 40.00 75.00 150.00 200.00 80 400 750 1500 2000
21 42 NaN 50.00 90.00 175.00 300.00 0 500 900 1750 3000