Files
pf1e-simulator/docs/data-formats/monster.md
T
ctan f61fc5c61f docs: reorganize documentation structure
- Clean README.md with installation, usage, CLI, examples
- Move data formats to docs/data-formats/ (map.md, monster.md, pc-sheets.md, index.md)
- Move architecture to docs/architecture/ (index.md, technical-architecture.md, phase-2-llm-architecture.md)
- Add contributing guidelines in docs/contributing.md
- Clean README.md: install, usage, CLI, data-formats/rules/architecture links, contributing link
2026-09-26 20:12:05 +02:00

117 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Format de monstre (JSON)
```json
{
"name": "Goblin",
"level": 1,
"size": "Small",
"cr": "1/3",
"xp": 135,
"source": "Bestiary > Goblin",
"abilities": {
"str_score": 11, "dex_score": 15, "con_score": 12,
"int_score": 10, "wis_score": 9, "cha_score": 6
},
"hp_max": 6,
"ac": { "total": 16, "touch": 13, "flat_footed": 14 },
"bab": 1,
"initiative_mod": 6,
"speed_land_ft": 30,
"saves": { "fort": 3, "ref": 2, "will": -1 },
"attacks": [
{
"name": "short sword",
"kind": "melee",
"attack_bonus": 2,
"damage": [{ "formula": "1d4", "types": ["slashing"] }],
"crit_range": 19,
"crit_mult": 2
},
{
"name": "short bow",
"kind": "ranged",
"attack_bonus": 4,
"damage": [{ "formula": "1d4", "types": ["piercing"] }],
"crit_mult": 3,
"range_increment_ft": 60
}
]
}
```
## Champs principaux
| Champ | Type | Requis | Description |
|-------|------|--------|-------------|
| `name` | string | oui | Nom du monstre |
| `level` | int | oui | Niveau / HD |
| `size` | string | oui | `Tiny`, `Diminutive`, `Fine`, `Small`, `Medium`, `Large`, `Huge`, `Gargantuan`, `Colossal` |
| `cr` | string | oui | Challenge Rating (ex: `"1/3"`, `"5"`) |
| `xp` | int | oui | Points d'expérience |
| `source` | string | oui | Source (ex: `"Bestiary > Goblin"`) |
| `abilities` | object | oui | 6 scores : `str_score`, `dex_score`, `con_score`, `int_score`, `wis_score`, `cha_score` |
| `hp_max` | int | oui | PV maximum |
| `ac` | object | oui | `{ total, touch, flat_footed }` — valeurs **finales** (bonus de taille déjà inclus) |
| `bab` | int | oui | Base Attack Bonus |
| `initiative_mod` | int | oui | Modificateur d'initiative |
| `speed_land_ft` | int | oui | Vitesse au sol en ft |
| `speed_fly_ft` | int | non | Vitesse de vol en ft (si absent = pas de vol) |
| `saves` | object | oui | `{ fort, ref, will }` — jets de sauvegarde finaux |
| `attacks` | array | oui | Liste des attaques (voir ci-dessous) |
## Attaques (`attacks[]`)
Chaque attaque est un objet avec les champs suivants :
| Champ | Type | Requis | Description |
|-------|------|--------|-------------|
| `name` | string | oui | Nom de l'arme |
| `kind` | string | oui | `"melee"`, `"ranged"`, ou `"touch"` |
| `attack_bonus` | int | oui | Bonus d'attaque (final, taille incluse) |
| `damage` | array | oui | Liste de composantes : `{ "formula": "1d4", "types": ["slashing"] }` |
| `crit_range` | int | non | Menace de critique (défaut 20) |
| `crit_mult` | int | oui | Multiplicateur de critique (2, 3, etc.) |
| `range_increment_ft` | int | non* | Incrément de portée en ft (> 0), requis pour `ranged` et `touch` |
| `damage_bonus` | int | non | Bonus de dégâts plat |
| `dr` | string | non | Type de contournement de RD (ex: `"magic"`, `"cold_iron"`) |
| `two_handed` | bool | non | Arme à deux mains (Power Attack +3X au lieu de +2X) |
| `reach_weapon` | bool | non | Arme à allonge (anneau, dead zone) |
| `reach_ft` | int | non | Allonge naturelle (pour attaques naturelles) |
| `natural` | bool | non | Attaque naturelle (pas d'itératifs, peut être `secondary`) |
| `secondary` | bool | non | Attaque naturelle secondaire (BAB −5, Multiattack → −2) |
| `firearm` | bool | non | Arme à feu (touch dans 1er incrément, misfire sur 1 naturel) |
| `splash` | object | non | Arme à éclaboussures : `{ "damage": 1, "type": "fire" }` |
| `spell_resistance` | int | non | Résistance aux sorts |
| `resistances` | object | non | Résistances énergétiques : `{ "fire": 5 }` |
| `immunities` | array | non | Immunités : `["fire", "poison"]` |
* `range_increment_ft` : entier **strictement positif** (zéro ou négatif = erreur). Pénalité −2 par incrément complet au-delà du premier. Arme `ranged` utilisable jusqu'à 10 incréments, `touch` jusqu'à 5.
## Champs optionnels avancés
- `carried_items` : array d'objets transportés non maniés/portés serré (volables via manœuvre *Steal*). Armes maniées = dans `attacks` ; équipement porté serré (armure, sac à dos, anneaux) exclus.
- `aware` : bool (défaut `true`) — conscience au début du combat (règle *Surprise*).
- `alignment` : code à deux axes (`LG`, `NG`, `CG`, `LN`, `N`, `CN`, `LE`, `NE`, `CE`), défaut `"N"`.
- `spell_slots` : dict niveau → nombre (ex: `{"1": 4, "2": 3}`) — budget d'encounter, **pas** calculé depuis la caractéristique.
- `spells` : array de noms de sorts connus (doivent exister dans `data/spells/`).
- `metamagic_feats` : array de noms de dons de métamagie connus.
- `features` : noms de capacités de classe / dons (résolus par le chargeur).
## Taille et allonge
| Taille | Allonge naturelle | Footprint |
|--------|-------------------|-----------|
| Fine / Diminutive / Tiny | 0 ft | 1×1 |
| Small / Medium | 5 ft | 1×1 |
| Large | 10 ft | 2×2 |
| Huge | 15 ft | 3×3 |
| Gargantuan | 20 ft | 4×4 |
| Colossal | 30 ft | 6×6 |
Une **arme à allonge** (`reach_weapon: true`) double l'allonge naturelle mais crée une **dead zone** (ne frappe pas à l'allonge naturelle ou moins). Une **arme naturelle** avec `reach_ft` explicite conserve cette allonge (le `reach_ft` d'une attaque naturelle EST son allonge naturelle).
## Notes importantes
- Les valeurs `ac` et `attack_bonus` des JSON sont des valeurs **FINALES**, déjà majorées du modificateur de taille PF1e. Le moteur n'applique **jamais** de bonus de taille aux jets d'attaque ni à la CA.
- La taille n'intervient que pour : manœuvres (CMB/CMD), allonge naturelle, footprint, occupation.
- Les JSON de `data/monsters/` et `data/pcs/` sont la référence. Le chargeur `loaders/foundry.py` est un outil de migration **one-shot et incomplet** — ne pas régénérer les JSON de PJ sans réappliquer les corrections SRD (voir `docs/rules/conformance-srd.md`).