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:
@@ -1,53 +1,56 @@
|
||||
{
|
||||
"name": "Celestial Wolf",
|
||||
"level": 2,
|
||||
"size": "Medium",
|
||||
"abilities": {
|
||||
"str_score": 13,
|
||||
"dex_score": 15,
|
||||
"con_score": 12,
|
||||
"int_score": 2,
|
||||
"wis_score": 12,
|
||||
"cha_score": 6
|
||||
},
|
||||
"hp_max": 15,
|
||||
"ac": {
|
||||
"total": 14,
|
||||
"touch": 13,
|
||||
"flat_footed": 12
|
||||
},
|
||||
"bab": 1,
|
||||
"initiative_mod": 2,
|
||||
"speed_land_ft": 50,
|
||||
"saves": {
|
||||
"fort": 4,
|
||||
"ref": 5,
|
||||
"will": 2
|
||||
},
|
||||
"attacks": [
|
||||
"name": "Celestial Wolf",
|
||||
"level": 2,
|
||||
"size": "Medium",
|
||||
"abilities": {
|
||||
"str_score": 13,
|
||||
"dex_score": 15,
|
||||
"con_score": 12,
|
||||
"int_score": 2,
|
||||
"wis_score": 12,
|
||||
"cha_score": 6
|
||||
},
|
||||
"hp_max": 15,
|
||||
"ac": {
|
||||
"total": 14,
|
||||
"touch": 13,
|
||||
"flat_footed": 12
|
||||
},
|
||||
"bab": 1,
|
||||
"initiative_mod": 2,
|
||||
"speed_land_ft": 50,
|
||||
"saves": {
|
||||
"fort": 4,
|
||||
"ref": 5,
|
||||
"will": 2
|
||||
},
|
||||
"attacks": [
|
||||
{
|
||||
"id": "celestial_wolf:bite",
|
||||
"name": "Bite",
|
||||
"kind": "melee",
|
||||
"attack_bonus": 3,
|
||||
"damage": [
|
||||
{
|
||||
"id": "celestial_wolf:bite",
|
||||
"name": "Bite",
|
||||
"kind": "melee",
|
||||
"attack_bonus": 3,
|
||||
"damage": [
|
||||
{
|
||||
"formula": "1d6+1",
|
||||
"types": ["piercing"]
|
||||
}
|
||||
],
|
||||
"damage_bonus": 1,
|
||||
"crit_range": 20,
|
||||
"crit_mult": 2,
|
||||
"reach_ft": 5,
|
||||
"count": 1
|
||||
"formula": "1d6+1",
|
||||
"types": [
|
||||
"piercing"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": "summon monster II",
|
||||
"features": [],
|
||||
"spells": [],
|
||||
"casting_ability": "wis",
|
||||
"resources": {},
|
||||
"metamagic_feats": [],
|
||||
"skills": {}
|
||||
],
|
||||
"damage_bonus": 1,
|
||||
"crit_range": 20,
|
||||
"crit_mult": 2,
|
||||
"reach_ft": 5,
|
||||
"count": 1,
|
||||
"natural": true
|
||||
}
|
||||
],
|
||||
"source": "summon monster II",
|
||||
"features": [],
|
||||
"spells": [],
|
||||
"casting_ability": "wis",
|
||||
"resources": {},
|
||||
"metamagic_feats": [],
|
||||
"skills": {}
|
||||
}
|
||||
|
||||
@@ -1,46 +1,70 @@
|
||||
{
|
||||
"name": "Giant Belostomatid",
|
||||
"level": 3,
|
||||
"size": "Large",
|
||||
"cr": "3",
|
||||
"xp": 800,
|
||||
"source": "Bestiary > Giant Belostomatid",
|
||||
"notes": "Digestive enzyme (DC 15 Fort or paralyzed 1d4 rounds + 1d2 Con damage/round) and grab on claws not modeled in Phase 0; Int - (mindless) modeled as 0; immune to mind-affecting not modeled; swim 40 ft / fly 20 ft (poor) not modeled, land speed only.",
|
||||
"abilities": {
|
||||
"str_score": 15,
|
||||
"dex_score": 13,
|
||||
"con_score": 16,
|
||||
"int_score": 0,
|
||||
"wis_score": 11,
|
||||
"cha_score": 2
|
||||
},
|
||||
"hp_max": 30,
|
||||
"ac": { "total": 15, "touch": 10, "flat_footed": 14 },
|
||||
"bab": 3,
|
||||
"initiative_mod": 1,
|
||||
"speed_land_ft": 20,
|
||||
"saves": { "fort": 7, "ref": 2, "will": 1 },
|
||||
"attacks": [
|
||||
"name": "Giant Belostomatid",
|
||||
"level": 3,
|
||||
"size": "Large",
|
||||
"cr": "3",
|
||||
"xp": 800,
|
||||
"source": "Bestiary > Giant Belostomatid",
|
||||
"notes": "Digestive enzyme (DC 15 Fort or paralyzed 1d4 rounds + 1d2 Con damage/round) and grab on claws not modeled in Phase 0; Int - (mindless) modeled as 0; immune to mind-affecting not modeled; swim 40 ft / fly 20 ft (poor) not modeled, land speed only.",
|
||||
"abilities": {
|
||||
"str_score": 15,
|
||||
"dex_score": 13,
|
||||
"con_score": 16,
|
||||
"int_score": 0,
|
||||
"wis_score": 11,
|
||||
"cha_score": 2
|
||||
},
|
||||
"hp_max": 30,
|
||||
"ac": {
|
||||
"total": 15,
|
||||
"touch": 10,
|
||||
"flat_footed": 14
|
||||
},
|
||||
"bab": 3,
|
||||
"initiative_mod": 1,
|
||||
"speed_land_ft": 20,
|
||||
"saves": {
|
||||
"fort": 7,
|
||||
"ref": 2,
|
||||
"will": 1
|
||||
},
|
||||
"attacks": [
|
||||
{
|
||||
"name": "bite",
|
||||
"kind": "melee",
|
||||
"attack_bonus": 4,
|
||||
"damage": [
|
||||
{
|
||||
"name": "bite",
|
||||
"kind": "melee",
|
||||
"attack_bonus": 4,
|
||||
"damage": [{ "formula": "1d6", "types": ["piercing"] }],
|
||||
"damage_bonus": 2,
|
||||
"crit_mult": 2,
|
||||
"reach_ft": 10
|
||||
},
|
||||
{
|
||||
"name": "claw",
|
||||
"kind": "melee",
|
||||
"attack_bonus": 4,
|
||||
"damage": [{ "formula": "1d4", "types": ["slashing"] }],
|
||||
"damage_bonus": 2,
|
||||
"crit_mult": 2,
|
||||
"count": 2,
|
||||
"reach_ft": 10
|
||||
"formula": "1d6",
|
||||
"types": [
|
||||
"piercing"
|
||||
]
|
||||
}
|
||||
],
|
||||
"cmb": 6,
|
||||
"cmd": 17
|
||||
}
|
||||
],
|
||||
"damage_bonus": 2,
|
||||
"crit_mult": 2,
|
||||
"reach_ft": 10,
|
||||
"natural": true
|
||||
},
|
||||
{
|
||||
"name": "claw",
|
||||
"kind": "melee",
|
||||
"attack_bonus": 4,
|
||||
"damage": [
|
||||
{
|
||||
"formula": "1d4",
|
||||
"types": [
|
||||
"slashing"
|
||||
]
|
||||
}
|
||||
],
|
||||
"damage_bonus": 2,
|
||||
"crit_mult": 2,
|
||||
"count": 2,
|
||||
"reach_ft": 10,
|
||||
"natural": true
|
||||
}
|
||||
],
|
||||
"cmb": 6,
|
||||
"cmd": 17
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user