feat(combat): skills system
This commit is contained in:
@@ -40,6 +40,166 @@ class Saves(_FrozenModel):
|
||||
will: int
|
||||
|
||||
|
||||
class SkillSpec(_FrozenModel):
|
||||
"""Definition of a PF1e skill."""
|
||||
|
||||
name: str
|
||||
ability: Literal["str", "dex", "con", "int", "wis", "cha"]
|
||||
trained_only: bool = False
|
||||
armor_check_penalty: bool = False
|
||||
|
||||
|
||||
class SkillRank(_FrozenModel):
|
||||
"""A combatant's rank in a skill."""
|
||||
|
||||
rank: int = 0
|
||||
class_skill: bool = False
|
||||
armor_penalty: int = 0
|
||||
|
||||
|
||||
# Predefined PF1e skills (37 skills)
|
||||
PREDEFINED_SKILLS: dict[str, SkillSpec] = {
|
||||
"acrobatics": SkillSpec(
|
||||
name="Acrobatics", ability="dex",
|
||||
trained_only=False, armor_check_penalty=True
|
||||
),
|
||||
"appraise": SkillSpec(
|
||||
name="Appraise", ability="int",
|
||||
trained_only=False, armor_check_penalty=False
|
||||
),
|
||||
"bluff": SkillSpec(
|
||||
name="Bluff", ability="cha",
|
||||
trained_only=False, armor_check_penalty=False
|
||||
),
|
||||
"climb": SkillSpec(
|
||||
name="Climb", ability="str",
|
||||
trained_only=False, armor_check_penalty=True
|
||||
),
|
||||
"craft": SkillSpec(
|
||||
name="Craft", ability="int",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
"diplomacy": SkillSpec(
|
||||
name="Diplomacy", ability="cha",
|
||||
trained_only=False, armor_check_penalty=False
|
||||
),
|
||||
"disable_device": SkillSpec(
|
||||
name="Disable Device", ability="dex",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
"disguise": SkillSpec(
|
||||
name="Disguise", ability="cha",
|
||||
trained_only=False, armor_check_penalty=False
|
||||
),
|
||||
"escape_artist": SkillSpec(
|
||||
name="Escape Artist", ability="dex",
|
||||
trained_only=False, armor_check_penalty=True
|
||||
),
|
||||
"fly": SkillSpec(
|
||||
name="Fly", ability="dex",
|
||||
trained_only=False, armor_check_penalty=True
|
||||
),
|
||||
"handle_animal": SkillSpec(
|
||||
name="Handle Animal", ability="cha",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
"heal": SkillSpec(
|
||||
name="Heal", ability="wis",
|
||||
trained_only=False, armor_check_penalty=False
|
||||
),
|
||||
"intimidate": SkillSpec(
|
||||
name="Intimidate", ability="cha",
|
||||
trained_only=False, armor_check_penalty=False
|
||||
),
|
||||
"knowledge_arcana": SkillSpec(
|
||||
name="Knowledge (Arcana)", ability="int",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
"knowledge_dungeoneering": SkillSpec(
|
||||
name="Knowledge (Dungeoneering)", ability="int",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
"knowledge_engineering": SkillSpec(
|
||||
name="Knowledge (Engineering)", ability="int",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
"knowledge_geography": SkillSpec(
|
||||
name="Knowledge (Geography)", ability="int",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
"knowledge_history": SkillSpec(
|
||||
name="Knowledge (History)", ability="int",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
"knowledge_local": SkillSpec(
|
||||
name="Knowledge (Local)", ability="int",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
"knowledge_nature": SkillSpec(
|
||||
name="Knowledge (Nature)", ability="int",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
"knowledge_nobility": SkillSpec(
|
||||
name="Knowledge (Nobility)", ability="int",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
"knowledge_planes": SkillSpec(
|
||||
name="Knowledge (Planes)", ability="int",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
"knowledge_religion": SkillSpec(
|
||||
name="Knowledge (Religion)", ability="int",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
"linguistics": SkillSpec(
|
||||
name="Linguistics", ability="int",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
"perception": SkillSpec(
|
||||
name="Perception", ability="wis",
|
||||
trained_only=False, armor_check_penalty=False
|
||||
),
|
||||
"perform": SkillSpec(
|
||||
name="Perform", ability="cha",
|
||||
trained_only=False, armor_check_penalty=False
|
||||
),
|
||||
"profession": SkillSpec(
|
||||
name="Profession", ability="wis",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
"ride": SkillSpec(
|
||||
name="Ride", ability="dex",
|
||||
trained_only=False, armor_check_penalty=True
|
||||
),
|
||||
"sense_motive": SkillSpec(
|
||||
name="Sense Motive", ability="wis",
|
||||
trained_only=False, armor_check_penalty=False
|
||||
),
|
||||
"sleight_of_hand": SkillSpec(
|
||||
name="Sleight of Hand", ability="dex",
|
||||
trained_only=True, armor_check_penalty=True
|
||||
),
|
||||
"spellcraft": SkillSpec(
|
||||
name="Spellcraft", ability="int",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
"stealth": SkillSpec(
|
||||
name="Stealth", ability="dex",
|
||||
trained_only=False, armor_check_penalty=True
|
||||
),
|
||||
"survival": SkillSpec(
|
||||
name="Survival", ability="wis",
|
||||
trained_only=False, armor_check_penalty=False
|
||||
),
|
||||
"swim": SkillSpec(
|
||||
name="Swim", ability="str",
|
||||
trained_only=False, armor_check_penalty=True
|
||||
),
|
||||
"use_magic_device": SkillSpec(
|
||||
name="Use Magic Device", ability="cha",
|
||||
trained_only=True, armor_check_penalty=False
|
||||
),
|
||||
}
|
||||
class DamageComponent(_FrozenModel):
|
||||
"""One damage roll with its types (e.g. 1d8 piercing).
|
||||
|
||||
@@ -116,3 +276,4 @@ class Combatant(_FrozenModel):
|
||||
casting_ability: str = "wis" # ability used for spell DCs: str/dex/con/int/wis/cha
|
||||
resources: dict[str, int] = Field(default_factory=dict) # resource pools per combat
|
||||
metamagic_feats: list[str] = Field(default_factory=list) # e.g. Empower/Maximize/Extend Spell
|
||||
skills: dict[str, SkillRank] = Field(default_factory=dict)
|
||||
|
||||
Reference in New Issue
Block a user