From 2b5b39a9f7932d4bf9b2b63fdb456276613188b5 Mon Sep 17 00:00:00 2001 From: ctan Date: Wed, 16 Sep 2026 22:06:59 +0200 Subject: [PATCH] fix(rules): jeanne + esha mount hooves 1d4 (SRD light horse) marked natural, add Jeanne's sheet Bite as secondary --- data/pcs/esha_mount.json | 6 ++++-- data/pcs/jeanne.json | 24 ++++++++++++++++++++++-- tests/test_monster_loader.py | 15 +++++++++++++++ 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/data/pcs/esha_mount.json b/data/pcs/esha_mount.json index e234de1..996ebd6 100644 --- a/data/pcs/esha_mount.json +++ b/data/pcs/esha_mount.json @@ -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", diff --git a/data/pcs/jeanne.json b/data/pcs/jeanne.json index 8627095..28d01a1 100644 --- a/data/pcs/jeanne.json +++ b/data/pcs/jeanne.json @@ -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", diff --git a/tests/test_monster_loader.py b/tests/test_monster_loader.py index 4ca9026..0df4833 100644 --- a/tests/test_monster_loader.py +++ b/tests/test_monster_loader.py @@ -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