fix(rules): natural weapons get no BAB iteratives, secondary attacks at -5
PF1e (CRB "Natural Attacks"): - Natural weapons (natural=true) get exactly one swing per full attack, regardless of BAB (no BAB iteratives for natural attacks). - Secondary natural attacks (secondary=true) attack at BAB -5; the Multiattack feat reduces this to -2. - Manifested in combat.py (_full_attack_weapon, _resolve_swing), models.py (AttackSpec.natural/secondary), 6 data JSONs, 4 new tests, and README documentation. 1461 passed, ruff clean, basedpyright 0 errors.
This commit is contained in:
+164
-162
@@ -1,166 +1,168 @@
|
||||
{
|
||||
"name": "Misty",
|
||||
"level": 4,
|
||||
"size": "Medium",
|
||||
"abilities": {
|
||||
"str_score": 12,
|
||||
"dex_score": 19,
|
||||
"con_score": 14,
|
||||
"int_score": 16,
|
||||
"wis_score": 7,
|
||||
"cha_score": 18
|
||||
},
|
||||
"hp_max": 31,
|
||||
"ac": {
|
||||
"total": 20,
|
||||
"touch": 14,
|
||||
"flat_footed": 16
|
||||
},
|
||||
"bab": 3,
|
||||
"initiative_mod": 4,
|
||||
"speed_land_ft": 30,
|
||||
"saves": {
|
||||
"fort": 7,
|
||||
"ref": 9,
|
||||
"will": 3
|
||||
},
|
||||
"casting_ability": "cha",
|
||||
"spell_slots": {
|
||||
"1": 4,
|
||||
"2": 3
|
||||
},
|
||||
"resources": {
|
||||
"bardic_rounds": 12
|
||||
},
|
||||
"attacks": [
|
||||
"name": "Misty",
|
||||
"level": 4,
|
||||
"size": "Medium",
|
||||
"abilities": {
|
||||
"str_score": 12,
|
||||
"dex_score": 19,
|
||||
"con_score": 14,
|
||||
"int_score": 16,
|
||||
"wis_score": 7,
|
||||
"cha_score": 18
|
||||
},
|
||||
"hp_max": 31,
|
||||
"ac": {
|
||||
"total": 20,
|
||||
"touch": 14,
|
||||
"flat_footed": 16
|
||||
},
|
||||
"bab": 3,
|
||||
"initiative_mod": 4,
|
||||
"speed_land_ft": 30,
|
||||
"saves": {
|
||||
"fort": 7,
|
||||
"ref": 9,
|
||||
"will": 3
|
||||
},
|
||||
"casting_ability": "cha",
|
||||
"spell_slots": {
|
||||
"1": 4,
|
||||
"2": 3
|
||||
},
|
||||
"resources": {
|
||||
"bardic_rounds": 12
|
||||
},
|
||||
"attacks": [
|
||||
{
|
||||
"name": "MWK Rapier",
|
||||
"kind": "melee",
|
||||
"attack_bonus": 8,
|
||||
"damage": [
|
||||
{
|
||||
"name": "MWK Rapier",
|
||||
"kind": "melee",
|
||||
"attack_bonus": 8,
|
||||
"damage": [
|
||||
{
|
||||
"formula": "1d6",
|
||||
"types": [
|
||||
"piercing"
|
||||
]
|
||||
}
|
||||
],
|
||||
"damage_bonus": 1,
|
||||
"crit_range": 18,
|
||||
"crit_mult": 2,
|
||||
"reach_ft": 5,
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "Dagger",
|
||||
"kind": "melee",
|
||||
"attack_bonus": 7,
|
||||
"damage": [
|
||||
{
|
||||
"formula": "1d4",
|
||||
"types": [
|
||||
"piercing"
|
||||
]
|
||||
}
|
||||
],
|
||||
"damage_bonus": 1,
|
||||
"crit_range": 19,
|
||||
"crit_mult": 2,
|
||||
"reach_ft": 5,
|
||||
"count": 1,
|
||||
"range_increment_ft": 10
|
||||
},
|
||||
{
|
||||
"name": "Talons (attaque naturelle)",
|
||||
"kind": "melee",
|
||||
"attack_bonus": 4,
|
||||
"damage": [
|
||||
{
|
||||
"formula": "1d4",
|
||||
"types": [
|
||||
"slashing"
|
||||
]
|
||||
}
|
||||
],
|
||||
"damage_bonus": 1,
|
||||
"crit_range": 20,
|
||||
"crit_mult": 2,
|
||||
"reach_ft": 5,
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "Bite (attaque naturelle)",
|
||||
"kind": "melee",
|
||||
"attack_bonus": 4,
|
||||
"damage": [
|
||||
{
|
||||
"formula": "1d4",
|
||||
"types": [
|
||||
"piercing"
|
||||
]
|
||||
}
|
||||
],
|
||||
"damage_bonus": 1,
|
||||
"crit_range": 20,
|
||||
"crit_mult": 2,
|
||||
"reach_ft": 5,
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "Unarmed Strike",
|
||||
"kind": "melee",
|
||||
"attack_bonus": 4,
|
||||
"damage": [
|
||||
{
|
||||
"formula": "1d3",
|
||||
"types": [
|
||||
"bludgeoning"
|
||||
]
|
||||
}
|
||||
],
|
||||
"damage_bonus": 1,
|
||||
"crit_range": 20,
|
||||
"crit_mult": 2,
|
||||
"reach_ft": 5,
|
||||
"count": 1
|
||||
"formula": "1d6",
|
||||
"types": [
|
||||
"piercing"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": "fiches_personnages/misty_sheet.json",
|
||||
"features": [
|
||||
"Harmonic Spell",
|
||||
"Weapon Finesse",
|
||||
"Axe to Grind (combat)",
|
||||
"Spell Vulnerability (divination; drawback)",
|
||||
"Born Damned (race: tiefling)",
|
||||
"Gifted Adept (dispel magic; magic)",
|
||||
"Prehensile Tail (tiefling daemon-spawn)",
|
||||
"Scaled Skin (electricity) (tiefling daemon-spawn)",
|
||||
"Maw or Claw (Bite) (tiefling daemon-spawn)"
|
||||
],
|
||||
"spells": [
|
||||
"Prestidigitation",
|
||||
"Oath of Anonymity",
|
||||
"Detect Magic",
|
||||
"Read Magic",
|
||||
"Disrupt Undead",
|
||||
"Ray of Frost",
|
||||
"Summon Instrument",
|
||||
"Mage Hand",
|
||||
"Open/Close",
|
||||
"Arcane Mark",
|
||||
"Acid Splash",
|
||||
"Grasp",
|
||||
"Shield",
|
||||
"Cure Light Wounds",
|
||||
"Color Spray",
|
||||
"Saving Finale",
|
||||
"Vanish",
|
||||
"Shocking Grasp",
|
||||
"Burning Hands",
|
||||
"Alarm",
|
||||
"Scorching Ray",
|
||||
"Bladed Dash",
|
||||
"Mirror Image",
|
||||
"Heroism"
|
||||
]
|
||||
],
|
||||
"damage_bonus": 1,
|
||||
"crit_range": 18,
|
||||
"crit_mult": 2,
|
||||
"reach_ft": 5,
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "Dagger",
|
||||
"kind": "melee",
|
||||
"attack_bonus": 7,
|
||||
"damage": [
|
||||
{
|
||||
"formula": "1d4",
|
||||
"types": [
|
||||
"piercing"
|
||||
]
|
||||
}
|
||||
],
|
||||
"damage_bonus": 1,
|
||||
"crit_range": 19,
|
||||
"crit_mult": 2,
|
||||
"reach_ft": 5,
|
||||
"count": 1,
|
||||
"range_increment_ft": 10
|
||||
},
|
||||
{
|
||||
"name": "Talons (attaque naturelle)",
|
||||
"kind": "melee",
|
||||
"attack_bonus": 4,
|
||||
"damage": [
|
||||
{
|
||||
"formula": "1d4",
|
||||
"types": [
|
||||
"slashing"
|
||||
]
|
||||
}
|
||||
],
|
||||
"damage_bonus": 1,
|
||||
"crit_range": 20,
|
||||
"crit_mult": 2,
|
||||
"reach_ft": 5,
|
||||
"count": 1,
|
||||
"natural": true
|
||||
},
|
||||
{
|
||||
"name": "Bite (attaque naturelle)",
|
||||
"kind": "melee",
|
||||
"attack_bonus": 4,
|
||||
"damage": [
|
||||
{
|
||||
"formula": "1d4",
|
||||
"types": [
|
||||
"piercing"
|
||||
]
|
||||
}
|
||||
],
|
||||
"damage_bonus": 1,
|
||||
"crit_range": 20,
|
||||
"crit_mult": 2,
|
||||
"reach_ft": 5,
|
||||
"count": 1,
|
||||
"natural": true
|
||||
},
|
||||
{
|
||||
"name": "Unarmed Strike",
|
||||
"kind": "melee",
|
||||
"attack_bonus": 4,
|
||||
"damage": [
|
||||
{
|
||||
"formula": "1d3",
|
||||
"types": [
|
||||
"bludgeoning"
|
||||
]
|
||||
}
|
||||
],
|
||||
"damage_bonus": 1,
|
||||
"crit_range": 20,
|
||||
"crit_mult": 2,
|
||||
"reach_ft": 5,
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"source": "fiches_personnages/misty_sheet.json",
|
||||
"features": [
|
||||
"Harmonic Spell",
|
||||
"Weapon Finesse",
|
||||
"Axe to Grind (combat)",
|
||||
"Spell Vulnerability (divination; drawback)",
|
||||
"Born Damned (race: tiefling)",
|
||||
"Gifted Adept (dispel magic; magic)",
|
||||
"Prehensile Tail (tiefling daemon-spawn)",
|
||||
"Scaled Skin (electricity) (tiefling daemon-spawn)",
|
||||
"Maw or Claw (Bite) (tiefling daemon-spawn)"
|
||||
],
|
||||
"spells": [
|
||||
"Prestidigitation",
|
||||
"Oath of Anonymity",
|
||||
"Detect Magic",
|
||||
"Read Magic",
|
||||
"Disrupt Undead",
|
||||
"Ray of Frost",
|
||||
"Summon Instrument",
|
||||
"Mage Hand",
|
||||
"Open/Close",
|
||||
"Arcane Mark",
|
||||
"Acid Splash",
|
||||
"Grasp",
|
||||
"Shield",
|
||||
"Cure Light Wounds",
|
||||
"Color Spray",
|
||||
"Saving Finale",
|
||||
"Vanish",
|
||||
"Shocking Grasp",
|
||||
"Burning Hands",
|
||||
"Alarm",
|
||||
"Scorching Ray",
|
||||
"Bladed Dash",
|
||||
"Mirror Image",
|
||||
"Heroism"
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user