- DataModels (character, npc, anomaly, aspect, attribute, equipment) - ApplicationV2 sheets (character 5 tabs, npc 3 tabs, 4 item sheets) - DialogV2 pour les jets de dés avec phase de lune - Templates Handlebars complets (fiches PJ/PNJ, items, jet, chat) - Styles LESS → CSS compilé (thème vert foncé / orange CopaseticNF) - i18n fr.json complet (clés CELESTOPOL.*) - Point d'entrée fvtt-celestopol.mjs avec hooks init/ready - Assets : polices CopaseticNF, images UI, icônes items - Mise à jour copilot-instructions.md avec l'architecture réelle Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
3.6 KiB
3.6 KiB
Copilot Instructions — fvtt-celestopol
Project Overview
This is a Foundry VTT system for Célestopol 1922, a French tabletop RPG set in an art-deco 1922 universe. The project targets FoundryVTT v13+ and is developed in French.
The reference rulebooks are in __regles/ (gitignored):
- Célestopol 1922 Livre de base — core rulebook
- Célestopol 1922 Fiches de prêts à jouer — pre-generated character sheets
Architecture
This system uses FoundryVTT v13 DataModels + ApplicationV2 — NOT the legacy template.json / AppV1 approach.
fvtt-celestopol.mjs # Main entry point (Hooks.once("init"))
module/
config/system.mjs # All game constants (SYSTEM export)
models/ # TypeDataModel subclasses (character, npc, items)
documents/ # Actor, Item, ChatMessage, Roll wrappers
applications/sheets/ # AppV2 sheets (HandlebarsApplicationMixin)
lang/fr.json # French i18n (key prefix: CELESTOPOL.*)
styles/ # LESS source files
css/ # Compiled CSS (via gulp)
templates/ # Handlebars (.hbs) templates
assets/fonts/ # CopaseticNF art-deco font
assets/ui/ # Background images
assets/icons/ # Item icons
packs-system/ # Source files for compendium packs
DataModels (no template.json)
- Extend
foundry.abstract.TypeDataModel - Schema in
static defineSchema()usingfoundry.data.fields.* prepareDerivedData()for computed values- Files:
module/models/character.mjs,npc.mjs,items.mjs
ApplicationV2 / Sheets
- Actor sheets:
HandlebarsApplicationMixin(foundry.applications.sheets.ActorSheetV2) - Item sheets:
HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) static DEFAULT_OPTIONSfor config;static PARTSfor templates_prepareContext()for base context;_preparePartContext(partId, context)for per-tab- Edit/Play mode toggle via
_sheetMode+isPlayMode/isEditModegetters - Actions:
static #onXxx(event, target)private static methods inDEFAULT_OPTIONS.actions form: { submitOnChange: true }enables live saving
Roll Mechanics
- Pool of d6 dice:
nbDice = max(1, skillValue + woundMalus) - Formula:
{n}d6 [+ moonBonus + modifier] - Moon phase bonus: Nouvelle Lune=0, Croissants=+1, Gibbeuse=+2, Pleine Lune=+3
- Compare total vs difficulty threshold (normal=7)
- Wound malus: levels 1-2=0, 3-4=-1, 5-6=-2, 7=-3, 8=-999 (out)
- DialogV2 for roll configuration:
foundry.applications.api.DialogV2.wait(...)
Game Data (4 stats × 4 skills)
- Âme: Artifice, Attraction, Coercition, Faveur
- Corps: Échauffourée, Effacement, Mobilité, Prouesse
- Cœur: Appréciation, Arts, Inspiration, Traque
- Esprit: Instruction, Merveilleux technologique, Raisonnement, Traitement
Tracks: Blessures (8 niveaux), Destin (8), Spleen (8)
Anomalies: 9 types (none + 8)
Factions: 8 standard + 2 custom
Build
npm install # Install dev deps
npx gulp css # Compile LESS → css/fvtt-celestopol.css (once)
npx gulp # Compile + watch
Visual Style
- Font: CopaseticNF (Regular + Bold, in
assets/fonts/) — art-deco style - Header bg color:
rgb(12, 76, 12)(dark green) with orange text (#e07b00) - Sheet header texture:
assets/ui/fond_cadrille.jpg - CSS variables:
--cel-green,--cel-orange,--cel-font-title, etc.
Language
All in-game text, labels, and code comments should be in French. Code identifiers may be English. All i18n keys use the CELESTOPOL.* prefix (see lang/fr.json).