c88d8fd6f4
Rename monster.py → combatant.py with _KNOWN_FEATS lookup table that resolves feat name strings to AbilitySpec constants (Power Attack, Iron Will, Toughness, Weapon Focus, etc.). Unknown feats produce minimal AbilitySpec (data preserved for future implementation). Migrate all 8 PC JSONs (data/pcs/) with complete feat/spell lists extracted from Foundry sheets — including traits, racial abilities, and all spells. Monsters (goblin, orc) unchanged (no feats/spells). Update all imports, add backward-compatible aliases (load_monster, MonsterLoadError), update CLI to use load_combatant. Gate: 377 tests, ruff clean, basedpyright clean.
119 lines
2.4 KiB
JSON
119 lines
2.4 KiB
JSON
{
|
|
"name": "Oni Triumvir",
|
|
"level": 4,
|
|
"size": "Medium",
|
|
"abilities": {
|
|
"str_score": 12,
|
|
"dex_score": 14,
|
|
"con_score": 14,
|
|
"int_score": 12,
|
|
"wis_score": 18,
|
|
"cha_score": 16
|
|
},
|
|
"hp_max": 36,
|
|
"ac": {
|
|
"total": 19,
|
|
"touch": 18,
|
|
"flat_footed": 17
|
|
},
|
|
"bab": 4,
|
|
"initiative_mod": 2,
|
|
"speed_land_ft": 30,
|
|
"saves": {
|
|
"fort": 7,
|
|
"ref": 7,
|
|
"will": 9
|
|
},
|
|
"attacks": [
|
|
{
|
|
"name": "Longbow",
|
|
"kind": "ranged",
|
|
"attack_bonus": 6,
|
|
"damage": [
|
|
{
|
|
"formula": "1d8",
|
|
"types": [
|
|
"piercing"
|
|
]
|
|
}
|
|
],
|
|
"damage_bonus": 0,
|
|
"crit_range": 20,
|
|
"crit_mult": 3,
|
|
"reach_ft": 5,
|
|
"count": 1,
|
|
"range_increment_ft": 100
|
|
},
|
|
{
|
|
"name": "Alchemist's Fire",
|
|
"kind": "touch",
|
|
"attack_bonus": 6,
|
|
"damage": [
|
|
{
|
|
"formula": "1d6",
|
|
"types": [
|
|
"fire"
|
|
]
|
|
}
|
|
],
|
|
"damage_bonus": 0,
|
|
"crit_range": 20,
|
|
"crit_mult": 2,
|
|
"reach_ft": 5,
|
|
"count": 1,
|
|
"range_increment_ft": 10
|
|
},
|
|
{
|
|
"name": "Attaques naturelles (Shifter Claws / formes fées)",
|
|
"kind": "melee",
|
|
"attack_bonus": 5,
|
|
"damage": [
|
|
{
|
|
"formula": "1d6",
|
|
"types": [
|
|
"slashing"
|
|
]
|
|
}
|
|
],
|
|
"damage_bonus": 1,
|
|
"crit_range": 20,
|
|
"crit_mult": 2,
|
|
"reach_ft": 5,
|
|
"count": 1
|
|
}
|
|
],
|
|
"source": "fiches_personnages/oni_sheet.json",
|
|
"notes": "Armes placeholder Foundry sans dégâts encodés omises : 'une Pioche' (non maîtrisée) et 'Weapon' (à remplacer par la vraie arme).",
|
|
"features": [
|
|
"Summon Good Monster",
|
|
"Sacred Summons",
|
|
"Selective Channeling",
|
|
"Extremely Fashionable",
|
|
"Exalted of the Society (Cleric, Pathfinder Society)",
|
|
"Bitter",
|
|
"Ambitious"
|
|
],
|
|
"spells": [
|
|
"Guidance",
|
|
"Detect Magic",
|
|
"Stabilize",
|
|
"Read Magic",
|
|
"Detect Poison",
|
|
"Purify Food and Drink",
|
|
"Summon Monster I",
|
|
"Shield of Faith",
|
|
"Forbid Action",
|
|
"Cure Light Wounds",
|
|
"Hidden Diplomacy",
|
|
"Protection from Evil",
|
|
"Bless",
|
|
"Summon Monster II",
|
|
"Cure Moderate Wounds",
|
|
"Sound Burst",
|
|
"Suppress Charms and Compulsions",
|
|
"Delay Poison",
|
|
"Ironskin",
|
|
"Restoration, Lesser"
|
|
]
|
|
}
|