fix(rules): jeanne + esha mount hooves 1d4 (SRD light horse) marked natural, add Jeanne's sheet Bite as secondary

This commit is contained in:
2026-09-16 22:06:59 +02:00
parent b9477a2ba1
commit 2b5b39a9f7
3 changed files with 41 additions and 4 deletions
+4 -2
View File
@@ -32,7 +32,7 @@
"attack_bonus": 8,
"damage": [
{
"formula": "1d6",
"formula": "1d4",
"types": ["bludgeoning"]
}
],
@@ -40,9 +40,11 @@
"crit_range": 20,
"crit_mult": 2,
"reach_ft": 10,
"count": 2
"count": 2,
"natural": true
}
],
"notes": "Light-horse mount shared with Esha's sheet: hooves are 1d4 bludgeoning (SRD Bestiary horse, light - 2 hooves 1d4), natural attacks. No bite encoded: the SRD light horse has no bite attack and the Foundry sheet lists no mount bite (unlike Jeanne's sheet, which does).",
"source": "fiches_personnages/esha_sheet.json (mount)",
"features": [
"Combat Reflexes",
+22 -2
View File
@@ -32,7 +32,7 @@
"attack_bonus": 8,
"damage": [
{
"formula": "1d6",
"formula": "1d4",
"types": ["bludgeoning"]
}
],
@@ -40,7 +40,27 @@
"crit_range": 20,
"crit_mult": 2,
"reach_ft": 10,
"count": 2
"count": 2,
"natural": true
},
{
"id": "jeanne:bite",
"name": "Bite",
"kind": "melee",
"attack_bonus": 8,
"damage": [
{
"formula": "1d3",
"types": ["piercing"]
}
],
"damage_bonus": 2,
"crit_range": 20,
"crit_mult": 2,
"reach_ft": 5,
"count": 1,
"natural": true,
"secondary": true
}
],
"source": "fiches_personnages/jeanne_sheet.json",
+15
View File
@@ -64,6 +64,21 @@ def test_pc_sheets_golden_spots() -> None:
assert i_tail.damage[0].types == ["bludgeoning"]
assert i_tail.damage_bonus == 0
# Sheet pins (fiches_personnages/jeanne_sheet.json): "2x Hooves" +8 is a
# light-horse 1d4 natural attack; Bite prints +3 = stored +8 with the
# engine's runtime -5 (secondary).
jeanne = load_combatant(PCS_DIR / "jeanne.json")
j_hooves, j_bite = jeanne.attacks
assert j_hooves.damage[0].formula == parse_dice("1d4")
assert j_hooves.natural is True
assert j_hooves.count == 2
assert (j_bite.name, j_bite.attack_bonus, j_bite.secondary) == ("Bite", 8, True)
assert j_bite.damage[0].formula == parse_dice("1d3")
assert j_bite.damage_bonus == 2
mount = load_combatant(PCS_DIR / "esha_mount.json")
assert mount.attacks[0].damage[0].formula == parse_dice("1d4")
assert mount.attacks[0].natural is True
oni = load_combatant(PCS_DIR / "oni.json")
assert "Pioche" in oni.notes
assert "Weapon" in oni.notes