| autoloads | ||
| backgrounds | ||
| classes | ||
| core | ||
| data | ||
| docs | ||
| feats | ||
| monsters | ||
| scripts | ||
| species | ||
| spells | ||
| srd | ||
| tests | ||
| translations | ||
| .gitignore | ||
| .woodpecker.yml | ||
| AGENTS.md | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| NOTICE.md | ||
| plugin.cfg | ||
| plugin.gd | ||
| plugin.gd.uid | ||
| README.md | ||
| ROADMAP.md | ||
dnd55e — v1.17.0
📍 Feuille de route / roadmap : ROADMAP.md 📘 Intégration / integration guide : docs/INTEGRATION.md — Architecture : docs/ARCHITECTURE.md
Français
Addon Godot 4.6.3 réutilisable implémentant les règles du Système de Référence de Jeu 5.2 (D&D 5.5e) en GDScript. Conçu pour être partagé entre plusieurs projets de jeux via git submodule.
Fonctionnalités implémentées
| Phase | Contenu | Version |
|---|---|---|
| 1 | Dés (d4–d100, avantage/désavantage), scores de capacité, bonus de maîtrise | 0.1.0 |
| 2 | Combat : PV, CA, initiative, attaques, jets de sauvegarde vs mort, économie d'action, types de dégâts (résistance / immunité / vulnérabilité) | 0.2.0 |
| 3 | Classes (Fighter, Wizard), niveaux, emplacements de sorts, résolution de sorts, concentration | 0.2.0 |
| 4 | Équipement : armes, armures (légère / moyenne / lourde / bouclier), inventaire, CA calculée | 0.2.0 |
| 5 | Repos courts / longs (dés de vie, récupération), exploration (encombrement, perception passive) | 0.2.0 |
| 6 | Enforcement des conditions, système de compétences (18), caractéristiques de classe | 0.3.0 |
| 7 | 12 classes SRD (progressions, emplacements, features ; mécaniques signature câblées dans les jalons 1.x) | 0.3.0 |
| 8 | 318 sorts SRD niveaux 0–9, listes de sorts par classe | 0.3.0 |
| — | Correctifs résolution d'attaque et de sort (calculate_ac, attack roll, saving throw) | 0.3.1 |
| 9 | Bestiaire SRD (50 monstres CR 0–24), données d'équipement (36 armes + 13 armures), resolve_weapon_attack |
0.4.0 |
| 10 | Jet de concentration sur dégâts, sorts de soin, STUNNED auto-critique, PRONE avantage/désavantage, actions de monstres (50 stat blocks) | 0.5.0 |
| 11 | Espèces et sous-classes initiales (avant audit SRD 5.2), tables de features, premières mécaniques Champion/Draconique/Vie | 0.6.0 |
| 12 | Backgrounds et feats initiaux (avant audit SRD 5.2), emplacements ASI dans les 12 classes, mécaniques Alert/War Caster/Resilient | 0.7.0 |
| — | Conformité SRD 5.2 : 11 espèces, 4 backgrounds, 17 feats (+Epic Boons), 12 sous-classes, +mousquet/pistolet | 0.7.1–0.8.0 |
| — | Actions et résistances légendaires, souffles et effets save-or-half (MonsterAction.ability) |
0.9.0 |
| — | i18n EN/FR complet : clés de traduction vérifiées contre les PDF SRD 5.2.1 | 0.10.0 |
| — | 8 corrections de règles SRD 5.2 (exhaustion, nat 1/20, auto-crit, concentration, save annule, scaling des sorts mineurs, mort), EventBus fonctionnel (DndEvents), persistance .tres, caches des registries, RNG seedable |
0.11.0 |
| — | Weapon Mastery (38 armes), conditions infligées par les sorts, zones d'effet, Unarmed Strike (lutte/bousculade), Bloodied, Heroic Inspiration, attaques d'opportunité, ASI via backgrounds + feat d'origine, équipes de combat ; refactor : DiceFormula, RollResult (avantage/désavantage externes), SpellData.from_dict |
0.12.0 |
| — | Bestiaire audité contre le PDF SRD 5.2.1 (50 stat blocks ; −orc/banshee/revenant/cyclops, +tough/ghost/otyugh/mage), Multiattack (resolve_multiattack), traits passifs, dégâts secondaires typés (AttackResult.secondary_damage_roll), 89 actions i18n vérifiées EN/FR |
0.13.0 |
| — | Durées de conditions en rounds + re-saves de fin de tour (process_end_of_turn, motif Hold Person), TimedEffect, Mastery Sap/Vex/Slow résolus par le moteur, durées de sorts parsables (duration_in_rounds) et durées/temps d'incantation traduisibles |
0.14.0 |
| — | Two-Weapon Fighting + Nick (resolve_offhand_attack), actions Dodge/Disengage/Dash/Help (movement_budget, is_dodging), surprise (initiative avec désavantage), furtivité (Hide/Search, révélation automatique), propriété Heavy (Creature.Size) |
0.15.0 |
| — | Harmonisation (3 max), bonus +1/+2/+3 armes/armures (with_enhancement), potions de soins SRD (PotionRegistry, drink_potion en action bonus), composantes matérielles à coût (54 sorts tagués, enforce_components), +3 sorts SRD 5.2 (323 au total) |
0.16.0 |
| — | Outils MJ : EncounterBuilder (budgets XP SRD 5.2 par niveau et difficulté, classify, suggest_encounter seedable), MonsterRegistry.get_by_cr_range |
0.17.0 |
| — | Stabilisation : moteur éclaté en modules (ConditionRules/ActionRules/AttackRules/MonsterRules), registries homebrew (register/unregister), guides d'intégration et d'architecture (docs/), CI durcie, erreurs explicites, tests statistiques seedés |
1.0.0 |
| — | Mécaniques de classes signature résolues par le moteur (ClassRules) : Rage/Reckless/Brutal Strike, Sneak Attack/Cunning Action/Uncanny Dodge/Evasion, Second Wind/Action Surge, Arts martiaux/points de Focus, Imposition des mains/Châtiment divin, Inspiration bardique — API de consommation de feature_uses (recharges SRD 5.2 aux repos) ; i18n lot 1 (descriptions des 26 sorts mineurs EN/FR) |
1.1.0 |
| — | Traits de monstres résolus par le moteur (Undead Fortitude, Regeneration, Magic Resistance, Pack Tactics) + Spellcasting des stat blocks (MonsterSpellcasting, resolve_monster_spell — DD fixe, à volonté / X-par-jour, usages innate.*) ; 6 entrées Spellcasting PDF réintégrées ; i18n lot 2 (descriptions des 51 sorts de niveau 1 EN/FR) |
1.2.0 |
| — | Bestiaire étendu : 100 monstres SRD 5.2 (démons, diables, élémentaires, géants, golems, dragons, morts-vivants, bêtes — audités contre les deux PDF) ; +vitriolic_sphere (324 sorts) ; i18n lot 3 (descriptions des 48 sorts de niveau 2 EN/FR) |
1.3.0 |
| — | Objets magiques SRD : MagicItemRegistry (35 objets), effets déclaratifs MagicEffects (bonus CA/JS, scores plancher, résistances, immunité aux critiques), charges simples (baguettes, use_wand), parchemins (cast_scroll), builders armure adamantine/mithral/de résistance et armes à rider de dégâts ; l'harmonisation devient mécanique ; i18n lot 4 (descriptions des 43 sorts de niveau 3 EN/FR) |
1.4.0 |
| — | Environnement & dangers (EnvironmentRules) : chute (1d6/3 m, plafond 20d6), brûlure, suffocation, lumière/visibilité ; objets destructibles (BreakableObject, tables CA/PV SRD), armes improvisées, stabilisation (Médecine DD 10, trousse de soins) ; i18n lot 5 (descriptions des 32 sorts de niveau 4 EN/FR) |
1.5.0 |
| — | Mécaniques des 5 classes lanceuses (CasterRules) : Métamorphose + PV temporaires, Conduit divin (Étincelle/Renvoi/Flétrissure), Intervention divine, Source de magie + Sorcellerie innée + Métamagie, Invocations occultes + Manigances mystiques, Récupération arcanique ; retrait des 6 sorts PHB-only (318 sorts) ; i18n lot 6 (descriptions des 40 sorts de niveau 5 EN/FR) |
1.6.0 |
| — | Feats & sous-classes : nouveau module FeatRules (styles de combat Précision/Défense/Armes lourdes, Attaquant sauvage, Lutteur, Dons épiques Maîtrise/Offensive irrésistible) + War Caster/Resilient réintégrés (19 feats) ; features de sous-classes câblées (Mots cinglants, Frénésie/Rage aveugle/Représailles, Sculpteur de sorts/Évocation renforcée/Cantrip surpuissant, Technique de la main ouverte, Préserver la vie/Guérisseur béni/Guérison suprême) ; i18n lot 7 (descriptions des 31 sorts de niveau 6 EN/FR) |
1.7.0 |
| — | Bestiaire étendu 100→150 : +50 stat blocks SRD 5.2 audités contre les deux PDF (méphites, dryade, gargouille, pégase, ours-hibou, manticore, salamandre, gorgone, méduse, drider, chimère, oni, manteleur, sylvanien, béhir, roc, djinn, éfrit, rakshasa…) avec multiattaque/traits/riders et actions à sauvegarde ; 150 noms + 80 actions i18n EN/FR ; i18n lot 8 (descriptions des 20 sorts de niveau 7 EN/FR) | 1.8.0 |
| — | Objets magiques 35→70 : +35 objets SRD audités PDF (merveilleux, anneaux, bâtons/baguettes à charges, armes nommées) — résistances/bonus câblés ; les bâtons multi-sorts utilisent un sort représentatif tant que le modèle d'objet ne porte qu'un cast_spell_id ; i18n lot 9 (17 sorts de niveau 8) + dette i18n d'objets soldée |
1.9.0 |
| — | Couverture des sous-classes : câblage des 5 sous-classes inertes (Land/Devotion/Hunter/Thief/Fiend) + reliquats des 7 partielles (Athlète remarquable, Survivant, Frappe divine, Pourfendeur de colosses, Récupération naturelle, Plénitude/Paume tremblante, Présence intimidante, Compétence inégalée, Bénédiction/Chance du Maître ténébreux/Jeté aux Enfers, Arme sacrée, Mains preste) ; i18n lot 10 (16 sorts de niveau 9) → i18n des sorts 100 % | 1.10.0 |
| — | Ergonomie consommateur : wrapper DndRules curé, façades manquantes, docs/INTEGRATION.md rafraîchi ; hotfix snippets/API doc |
1.11.0–1.11.1 |
| — | Plateaux de contenu : bestiaire 150→260, objets magiques 70→140, garde de clés i18n et tests de persistance .tres |
1.12.0–1.14.0 |
| — | Consommables SRD : 27 potions, effets déclaratifs quand le moteur sait les résoudre ; déplacements/transformations et durées réelles restent des tags consommateur | 1.13.0 |
| — | Fidélité tactique : timing exact « début du prochain tour », helpers de réaction, hotfix effet source-ancré orphelin et administer_potion |
1.15.0–1.15.1 |
| — | Hotfix d'audit documentation : comptes SRD 5.2 réalignés, limites objets/consommables explicitées, métadonnées i18n synchronisées | 1.15.2 |
| — | Addon livré nu à la racine du dépôt (montage submodule direct res://addons/dnd55e/) ; project.godot + GUT gitignorés et régénérés par scripts/dev_bootstrap.sh ; CI bootstrappée |
1.16.0 |
Utilisation
# Dans un projet jeu consommateur
git submodule add <url-du-repo> addons/dnd55e
Activer le plugin dans Projet > Paramètres du projet > Plugins, puis enregistrer les fichiers de traduction dans Projet > Paramètres du projet > Localisation > Traductions :
res://addons/dnd55e/translations/en.pores://addons/dnd55e/translations/fr.po
Exemple rapide
# Attaque avec une arme de l'équipementerie SRD
var longsword = WeaponRegistry.build().filter(func(w): return w.item_name == "item.longsword.name")[0]
var result = RulesEngine.resolve_weapon_attack(fighter, target, longsword)
if result.hit:
target.apply_damage_roll(result.damage_roll)
# Résolution d'un sort avec jet de sauvegarde
var fireball = SpellRegistry.get_by_id("fireball")
var spell_result = RulesEngine.resolve_spell(wizard, fireball, 3, target)
if spell_result.damage_roll:
target.apply_damage_roll(spell_result.damage_roll)
# Créer une créature depuis le bestiaire
var goblin_data = MonsterRegistry.get_by_id("goblin")
var goblin = goblin_data.to_creature()
# Repos long
RulesEngine.long_rest(fighter)
Lancer les tests
# Importer d'abord après ajout de nouveaux fichiers .gd
scripts/dev_bootstrap.sh
/home/reliodas/Programmes/Godot_v4.6.3-stable_linux.x86_64 --headless --import
/home/reliodas/Programmes/Godot_v4.6.3-stable_linux.x86_64 --headless \
--script addons/gut/gut_cmdln.gd \
-gdir=res://tests/unit/,res://tests/integration/ \
-ginclude_subdirs
Mentions légales
Voir NOTICE.md. Ce projet incorpore du contenu issu du System Reference Document 5.2 de Wizards of the Coast LLC, sous licence CC BY 4.0.
English
Reusable Godot 4.6.3 addon implementing the System Reference Document 5.2 (D&D 5.5e) rules in GDScript. Designed to be shared across multiple game projects as a git submodule.
Implemented features
| Phase | Content | Version |
|---|---|---|
| 1 | Dice (d4–d100, advantage/disadvantage), ability scores, proficiency bonus | 0.1.0 |
| 2 | Combat: HP, AC, initiative, attacks, death saves, action economy, damage types (resistance / immunity / vulnerability) | 0.2.0 |
| 3 | Classes (Fighter, Wizard), leveling, spell slots, spell resolution, concentration | 0.2.0 |
| 4 | Equipment: weapons, armor (light / medium / heavy / shield), inventory, derived AC | 0.2.0 |
| 5 | Short / long rests (hit dice, recovery), exploration (encumbrance, passive perception) | 0.2.0 |
| 6 | Condition enforcement, skill system (18 skills), class features | 0.3.0 |
| 7 | 12 SRD classes (progression, slots, features; signature mechanics wired in the 1.x milestones) | 0.3.0 |
| 8 | 318 SRD spells levels 0–9, class spell lists | 0.3.0 |
| — | Bugfixes: attack/spell resolution (calculate_ac, attack roll, saving throw) | 0.3.1 |
| 9 | SRD bestiary (50 monsters CR 0–24), equipment data (36 weapons + 13 armors), resolve_weapon_attack |
0.4.0 |
| 10 | Concentration check on damage, healing spells, STUNNED auto-crit, PRONE advantage/disadvantage, monster actions (50 stat blocks) | 0.5.0 |
| 11 | Initial species and subclasses before the SRD 5.2 audit, feature tables, first Champion/Draconic/Life mechanics | 0.6.0 |
| 12 | Initial backgrounds and feats before the SRD 5.2 audit, ASI slots in all 12 classes, Alert/War Caster/Resilient mechanics | 0.7.0 |
| — | SRD 5.2 compliance: 11 species, 4 backgrounds, 17 feats (+Epic Boons), 12 subclasses, +musket/pistol | 0.7.1–0.8.0 |
| — | Legendary actions & resistances, breath weapons and save-or-half effects (MonsterAction.ability) |
0.9.0 |
| — | Full EN/FR i18n: translation keys verified against the SRD 5.2.1 PDFs | 0.10.0 |
| — | 8 SRD 5.2 rule fixes (exhaustion, nat 1/20, auto-crit, concentration, save-negates, cantrip scaling, death), working EventBus (DndEvents), .tres persistence, registry caches, seedable RNG |
0.11.0 |
| — | Weapon Mastery (38 weapons), spell-inflicted conditions, areas of effect, Unarmed Strike (grapple/shove), Bloodied, Heroic Inspiration, opportunity attacks, ASIs via backgrounds + Origin feat, combat teams; refactor: DiceFormula, RollResult (external advantage/disadvantage), SpellData.from_dict |
0.12.0 |
| — | Bestiary audited against the SRD 5.2.1 PDF (50 stat blocks; −orc/banshee/revenant/cyclops, +tough/ghost/otyugh/mage), Multiattack (resolve_multiattack), passive traits, typed secondary damage (AttackResult.secondary_damage_roll), 89 i18n action keys verified EN/FR |
0.13.0 |
| — | Round-based condition durations + end-of-turn re-saves (process_end_of_turn, Hold Person pattern), TimedEffect, engine-resolved Sap/Vex/Slow mastery, parsable spell durations (duration_in_rounds) and translatable durations/casting times |
0.14.0 |
| — | Two-Weapon Fighting + Nick (resolve_offhand_attack), Dodge/Disengage/Dash/Help actions (movement_budget, is_dodging), surprise (initiative at disadvantage), stealth (Hide/Search, automatic reveal), Heavy property (Creature.Size) |
0.15.0 |
| — | Attunement (max 3), +1/+2/+3 weapon/armor bonuses (with_enhancement), SRD healing potions (PotionRegistry, drink_potion as a Bonus Action), costed material components (54 spells tagged, enforce_components), +3 SRD 5.2 spells (323 total) |
0.16.0 |
| — | GM tools: EncounterBuilder (SRD 5.2 XP budgets per level and difficulty, classify, seedable suggest_encounter), MonsterRegistry.get_by_cr_range |
0.17.0 |
| — | Stabilization: engine split into modules (ConditionRules/ActionRules/AttackRules/MonsterRules), homebrew registries (register/unregister), integration & architecture guides (docs/), hardened CI, explicit errors, seeded statistical tests |
1.0.0 |
| — | Engine-resolved signature class mechanics (ClassRules): Rage/Reckless/Brutal Strike, Sneak Attack/Cunning Action/Uncanny Dodge/Evasion, Second Wind/Action Surge, Martial Arts/Focus points, Lay on Hands/Divine Smite, Bardic Inspiration — feature_uses consumption API (SRD 5.2 rest recharges); i18n batch 1 (all 26 cantrip descriptions EN/FR) |
1.1.0 |
| — | Engine-resolved monster traits (Undead Fortitude, Regeneration, Magic Resistance, Pack Tactics) + stat block Spellcasting (MonsterSpellcasting, resolve_monster_spell — fixed DC, at-will / X-per-day, innate.* uses); 6 PDF-verified Spellcasting entries restored; i18n batch 2 (all 51 level-1 spell descriptions EN/FR) |
1.2.0 |
| — | Extended bestiary: 100 SRD 5.2 monsters (demons, devils, elementals, giants, golems, dragons, undead, beasts — audited against both PDFs); +vitriolic_sphere (324 spells); i18n batch 3 (all 48 level-2 spell descriptions EN/FR) |
1.3.0 |
| — | SRD magic items: MagicItemRegistry (35 items), declarative MagicEffects (AC/save bonuses, ability score floors, resistances, crit immunity), simple charges (wands, use_wand), Spell Scrolls (cast_scroll), adamantine/mithral/resistance armor builders and bonus-damage weapons; attunement becomes mechanical; i18n batch 4 (all 43 level-3 spell descriptions EN/FR) |
1.4.0 |
| — | Environment & hazards (EnvironmentRules): falling (1d6 per 3 m, 20d6 cap), burning, suffocation, light/visibility; breakable objects (BreakableObject, SRD AC/HP tables), improvised weapons, stabilization (DC 10 Medicine, Healer's Kit); i18n batch 5 (all 32 level-4 spell descriptions EN/FR) |
1.5.0 |
| — | Signature mechanics of the 5 caster classes (CasterRules): Wild Shape + Temporary Hit Points, Channel Divinity (Divine Spark/Turn Undead/Sear Undead), Divine Intervention, Font of Magic + Innate Sorcery + Metamagic, Eldritch Invocations + Magical Cunning, Arcane Recovery; removed the 6 PHB-only spells (318 spells); i18n batch 6 (all 40 level-5 spell descriptions EN/FR) |
1.6.0 |
| — | Feats & subclasses: new FeatRules module (Archery/Defense/Great Weapon fighting styles, Savage Attacker, Grappler, Combat Prowess/Irresistible Offense Epic Boons) + War Caster/Resilient back in the registry (19 feats); wired subclass features (Cutting Words, Frenzy/Mindless Rage/Retaliation, Sculpt Spells/Empowered Evocation/Potent Cantrip, Open Hand Technique, Preserve Life/Blessed Healer/Supreme Healing); i18n batch 7 (all 31 level-6 spell descriptions EN/FR) |
1.7.0 |
| — | Extended bestiary 100→150: +50 SRD 5.2 stat blocks audited against both PDFs (mephits, dryad, gargoyle, pegasus, owlbear, manticore, salamander, gorgon, medusa, drider, chimera, oni, cloaker, treant, behir, roc, djinni, efreeti, rakshasa…) with multiattack/traits/riders and save-based actions; 150 names + 80 actions i18n EN/FR; i18n batch 8 (all 20 level-7 spell descriptions EN/FR) | 1.8.0 |
| — | Magic items 35→70: +35 PDF-audited SRD items (wondrous, rings, charged staffs/wands, named weapons) — resistances/bonuses wired; multi-spell staffs use one representative cast while the item model carries a single cast_spell_id; i18n batch 9 (17 level-8 spells) + item i18n debt cleared |
1.9.0 |
| — | Subclass coverage: wired the 5 inert subclasses (Land/Devotion/Hunter/Thief/Fiend) + leftovers of the 7 partial ones (Remarkable Athlete, Survivor, Divine Strike, Colossus Slayer, Natural Recovery, Wholeness of Body/Quivering Palm, Intimidating Presence, Peerless Skill, Dark One's Blessing/Own Luck/Hurl Through Hell, Sacred Weapon, Fast Hands); i18n batch 10 (16 level-9 spells) → spell i18n 100% | 1.10.0 |
| — | Consumer ergonomics: curated DndRules wrapper, missing facades, refreshed docs/INTEGRATION.md; doc/API snippet hotfix |
1.11.0–1.11.1 |
| — | Content plateaus: bestiary 150→260, magic items 70→140, registry i18n key guard and .tres persistence tests |
1.12.0–1.14.0 |
| — | SRD consumables: 27 potions, declarative effects where the engine can resolve them; movement/transformation buffs and real-time durations remain consumer-side tags | 1.13.0 |
| — | Tactical fidelity: exact "start of next turn" timing, reaction helpers, orphaned source-anchored effect hotfix and administer_potion |
1.15.0–1.15.1 |
| — | Documentation audit hotfix: SRD 5.2 counts realigned, item/consumable limits clarified, i18n metadata synchronized | 1.15.2 |
| — | Addon shipped bare at the repo root (direct res://addons/dnd55e/ submodule mount); project.godot + GUT gitignored and regenerated by scripts/dev_bootstrap.sh; CI bootstrapped |
1.16.0 |
Usage
# In a consumer game project
git submodule add <repo-url> addons/dnd55e
Enable the plugin in Project > Project Settings > Plugins, then register the translation files in Project > Project Settings > Localization > Translations:
res://addons/dnd55e/translations/en.pores://addons/dnd55e/translations/fr.po
Quick example
# Attack with a weapon from the SRD equipment registry
var longsword = WeaponRegistry.build().filter(func(w): return w.item_name == "item.longsword.name")[0]
var result = RulesEngine.resolve_weapon_attack(fighter, target, longsword)
if result.hit:
target.apply_damage_roll(result.damage_roll)
# Resolve a spell with a saving throw
var fireball = SpellRegistry.get_by_id("fireball")
var spell_result = RulesEngine.resolve_spell(wizard, fireball, 3, target)
if spell_result.damage_roll:
target.apply_damage_roll(spell_result.damage_roll)
# Create a creature from the bestiary
var goblin_data = MonsterRegistry.get_by_id("goblin")
var goblin = goblin_data.to_creature()
# Long rest
RulesEngine.long_rest(fighter)
Running tests
# Import first after adding new .gd files
scripts/dev_bootstrap.sh
/home/reliodas/Programmes/Godot_v4.6.3-stable_linux.x86_64 --headless --import
/home/reliodas/Programmes/Godot_v4.6.3-stable_linux.x86_64 --headless \
--script addons/gut/gut_cmdln.gd \
-gdir=res://tests/unit/,res://tests/integration/ \
-ginclude_subdirs
Legal
See NOTICE.md. This project incorporates content from the System Reference Document 5.2 by Wizards of the Coast LLC, licensed under CC BY 4.0.