# Fiches de personnages (PJ) Les PJ sont définis au format JSON (schéma `Combatant`) dans `data/pcs/`. Huit fiches sont fournies : `esha.json`, `harvie.json`, `ierlieth.json`, `jeanne.json`, `misty.json`, `nairda.json`, `oni.json`, `tammara.json`. Elles se passent directement à la CLI comme les monstres : ```bash uv run pf1e-sim --map data/maps/sample_arena.yaml \ --side players data/pcs/oni.json \ --side monsters data/pcs/tammara.json --runs 200 ``` ## Format JSON Le schéma est identique aux monstres (voir [`monster.md`](monster.md)), avec ces particularités PJ : - `source` : pointe vers la fiche Foundry VTT d'origine sous `fiches_personnages/` (ex: `"fiches_personnages/oni.foundry.json"`). - `spell_slots` : budget d'encounter (pas progression RAW — voir note ci-dessous). - `spells` : noms de sorts connus (doivent exister dans `data/spells/`). - `features` : noms de capacités de classe / dons (résolus par le chargeur). - `carried_items` : objets volables (filtrés depuis l'inventaire Foundry per APG *Steal*). ## Note importante : `spell_slots` = budget d'encounter Le champ `spell_slots` est une valeur **finale** par encounter. Le moteur ne calcule **jamais** les sorts bonus de caractéristique d'incantation élevée (SRD Table 1-3). Les éventuels sorts bonus doivent être **encodés dans le JSON par l'auteur**. Preuve : les fiches PJ actuelles encodent la table de classe de BASE sans bonus. Exemple : Oni (clerc 4, SAG 18) → `{"1":4, "2":3}` = table de base 4/3, alors que le RAW avec bonus serait 5/4. Le liche (INT 20, niveau 11) porte `{"1":4, "2":4, "3":4, "4":4, "5":4, "6":3}` qui ne correspond à AUCUNE table RAW — les slots sont donc un budget d'encounter authored, pas une progression RAW. Conséquence assumée : les PJ incanteurs tiennent moins de sorts par encounter que le RAW ne le permettrait. ## Fiches Foundry (source) `fiches_personnages/` contient les 8 fiches au format Foundry VTT (`pf1-sheet/v1`) ; le chargeur `loaders/foundry.py` sait les lire. C'est un outil de migration **one-shot et incomplet** : il ne reproduit pas les corrections manuelles/SRD appliquées aux JSON (drapeaux `natural`/`secondary`/`firearm`, allonge sabots Jeanne 10 ft, vol Ierlieth 40 ft, morsure Misty 1d6, dons au-delà de 8 entrées, `spell_slots`/`resources`/`casting_ability`). > **`data/pcs/*.json` est la référence canonique des PJ.** Ne pas régénérer > depuis `foundry.py` sans réappliquer les corrections SRD consignées dans > [`docs/rules/conformance-srd.md`](conformance-srd.md).