Architecture d'un Système
Vue d'ensemble de la structure d'un système FoundryVTT. Arborescence des fichiers, cycle de vie, et flux de données.
- Arborescence type
- Hooks init → ready
- Flux de données
Un tutoriel progressif et complet pour maîtriser le développement de systèmes pour FoundryVTT v13. De la structure de base aux fonctionnalités avancées.
Hooks.once("init", function() {
console.log("Mon Système | Initialisation");
// Enregistrer les DataModels
CONFIG.Actor.dataModels = {
character: CharacterData,
npc: NPCData
};
// Enregistrer les feuilles
DocumentSheetConfig.registerSheet(
Actor, "mon-systeme",
CharacterSheet,
{ types: ["character"], makeDefault: true }
);
});
Apprenez les meilleures pratiques en analysant le système dnd5e 5.2.0, la référence en matière de développement FoundryVTT.
Chaque chapitre s'appuie sur le précédent. Commencez par les bases et avancez vers les concepts les plus avancés.
Des exemples de code fonctionnels à chaque étape. Copiez, adaptez et expérimentez.
Couvre les dernières API de FoundryVTT v13 : ApplicationV2, DataModels, système de hooks moderne.
Avant de commencer, assurez-vous d'avoir les outils et connaissances suivants.
# Vérifier Node.js
node --version # Doit être >= 18.0.0
# Créer le dossier du système
cd /chemin/vers/foundrydata/Data/systems
mkdir mon-systeme && cd mon-systeme
# Initialiser le projet
npm init -y
9 chapitres pour maîtriser le développement de systèmes FoundryVTT. Suivez-les dans l'ordre pour une progression optimale.
Vue d'ensemble de la structure d'un système FoundryVTT. Arborescence des fichiers, cycle de vie, et flux de données.
Guide complet du fichier manifeste. Configuration des types de documents, compendiums et métadonnées.
Définissez vos modèles de données avec TypeDataModel. Validation, migration et champs personnalisés.
Étendez les Documents Foundry (Actor, Item, ActiveEffect) pour implémenter votre logique métier.
Créez des interfaces modernes avec ApplicationV2. Système de PARTS, actions déclaratives, et composants.
Maîtrisez le système d'événements de FoundryVTT. Interceptez et réagissez aux actions du système pour étendre les fonctionnalités.
Implémentez des mécaniques de jets personnalisées. D20Roll, DamageRoll et dialogues de configuration.
Maîtrisez la syntaxe Handlebars pour créer des interfaces dynamiques. Découvrez les helpers natifs de Foundry et créez les vôtres.
Le Canvas est le cœur graphique de FoundryVTT. Étendez les Tokens, MeasuredTemplates et layers pour personnaliser l'expérience visuelle.
Voici à quoi ressemble un DataModel simple pour un personnage.
// module/data/actor/character.mjs
export default class CharacterData extends foundry.abstract.TypeDataModel {
static defineSchema() {
const fields = foundry.data.fields;
return {
// Attributs de base
attributes: new fields.SchemaField({
hp: new fields.SchemaField({
value: new fields.NumberField({
initial: 10,
integer: true,
min: 0
}),
max: new fields.NumberField({
initial: 10,
integer: true,
min: 1
})
}),
level: new fields.NumberField({
initial: 1,
integer: true,
min: 1,
max: 20
})
}),
// Biographie
biography: new fields.HTMLField({ initial: "" })
};
}
// Données dérivées
prepareDerivedData() {
// Calculer le bonus de maîtrise
this.proficiencyBonus = Math.floor((this.attributes.level - 1) / 4) + 2;
}
}
// module/applications/actor/character-sheet.mjs
export default class CharacterSheet extends foundry.applications.sheets.ActorSheetV2 {
static DEFAULT_OPTIONS = {
classes: ["mon-systeme", "actor", "character"],
position: { width: 600, height: 700 },
actions: {
rollAttribute: CharacterSheet.#onRollAttribute
}
};
static PARTS = {
header: { template: "systems/mon-systeme/templates/actor/header.hbs" },
tabs: { template: "systems/mon-systeme/templates/actor/tabs.hbs" },
attributes: { template: "systems/mon-systeme/templates/actor/attributes.hbs" },
biography: { template: "systems/mon-systeme/templates/actor/biography.hbs" }
};
async _prepareContext(options) {
const context = await super._prepareContext(options);
context.isEditable = this.isEditable;
context.system = this.actor.system;
return context;
}
static async #onRollAttribute(event, target) {
const attr = target.dataset.attribute;
// Logique de jet...
}
}
<!-- templates/actor/attributes.hbs -->
<section class="attributes-panel">
<h2>Attributs</h2>
<div class="attribute-group">
<label>Points de Vie</label>
<div class="hp-bar">
<input type="number"
name="system.attributes.hp.value"
value="{{system.attributes.hp.value}}"
min="0"
max="{{system.attributes.hp.max}}">
<span class="separator">/</span>
<input type="number"
name="system.attributes.hp.max"
value="{{system.attributes.hp.max}}"
min="1">
</div>
</div>
<div class="attribute-group">
<label>Niveau</label>
<input type="number"
name="system.attributes.level"
value="{{system.attributes.level}}"
min="1" max="20">
<span class="derived">
Bonus de maîtrise: +{{system.proficiencyBonus}}
</span>
</div>
</section>
Liens utiles pour approfondir vos connaissances.
Documentation de référence de l'API FoundryVTT v13
foundryvtt.com/api →Tutoriels et guides de la communauté
foundryvtt.wiki →Code source du système de référence
github.com/foundryvtt/dnd5e →Communauté active de développeurs
discord.gg/foundryvtt →Vous utilisez un assistant IA pour développer votre système FoundryVTT ? Téléchargez notre documentation complète au format Markdown pour enrichir le contexte de votre IA.
Archive contenant tous les guides techniques et bonnes pratiques au format .md,
prêts à être injectés dans le contexte de votre assistant IA (Claude, ChatGPT, Copilot, etc.).
.md pertinents au contexte de votre conversation
avec l'IA avant de poser vos questions sur le développement FoundryVTT.