Files
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

5.7 KiB
Raw Permalink Blame History

Format de monstre (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).