diff --git a/README.md b/README.md index f0e5ea5..a1ca419 100644 --- a/README.md +++ b/README.md @@ -1,61 +1,120 @@ -# Vermine 2047 System +# Vermine 2047 — Foundry VTT System +![Foundry v14](https://img.shields.io/badge/Foundry-v14-blue) +![Version](https://img.shields.io/badge/version-0.1.13-green) -##TODO +Unofficial game system for **Vermine 2047**, a French post-apocalyptic tabletop RPG by **Éditions John Doe** (https://www.kickandgo.net/boutique-agate/category.php?cl=UyQcRrFtYcYrAnLbOfDj&idp=20). -### fiche de perso +Bilingual **FR/EN** interface. -- [X] création de spécialitées depuis le (+) des compétences -- [X] fixer les cases hexas , comprtement chelou , piste = un click à l'air d'envoyer 2 update, verifier le onChange -- [X] dialog d'edition des min-max +--- -### fiche de groupe -- [X] pas encore penché dessus +## Actor Types - #### Members et encounters - - - [X] faire une classe GroupLink pour avoir les actors en objets dans les array group.members[], group.encounters[], et character.encounters[], - - [X] faire une fonction sur le Hook.onUpdateActor => update des groupes dans characters, update des encounters et members dans groups +| Type | Sheet | Description | +|------|-------|-------------| +| **character** | AppV2 | Player character with skills, abilities, totem, equipment | +| **npc** | AppV2 | Non-player character with role/threat, wound thresholds | +| **group** | AppV2 | Group with members, encounters, link sync | +| **creature** | AppV2 | Creature with template/size/role, custom attack stats | -### fiche de pnj créature -- [X] à faire, -- [X] lister les gabarit/taille/roles(creatures) et menace/experience/role(pnj)... stocker les modifs dans CONFIG.VERMINE, +## Item Types +| Type | Use | +|------|-----| +| **item** | Generic items (gear, resources) | +| **weapon** | Weapons with damage, range, reliability, rarity | +| **defense** | Armor/shields with protection, coverage | +| **vehicle** | Vehicles with speed, structure, weapons | +| **ability** | Special abilities (apprenticeship, domain) | +| **specialty** | Skill specializations (attached to skills) | +| **background** | Character backgrounds | +| **trauma** | Mental/physical trauma | +| **evolution** | Character evolutions | +| **rumor** | Rumors (group) | +| **target** | Targets (group) | +| **rite** | Rites (magic/rituals) | -### les jets de dés -- [X] redesign de rollDialog => `
+`=> rendre moins dense -- [X] envoyer les spécialités utilisables au rollDialog -- [X] envoyer les items utilisables au rollDialog -- [X] gérer le fait de choisir quel totem garder : recalcul des réussites -- [X] refacto des template chat de roll -- [X] gérer les dés de totems humains et adapté : couleur différente/double succès +update actor -- [X] gérer les rerolls depuis chat(cf noc) -- [X] gérer les rerolls après le jet en fonction du score d'effort et de la carac -- [X] faire l'update l' l'actor juste après s'etre accorder des rerolls, et avoir utiliser le sang-froid -- [X] update des reserves de sang-froids lors de jets -- [X] ajout des domaines de prédilections -- [X] gérer le dés en +/- selon l'influence du totem adapté ou humain selon les domaines -- [X] gérer les réussites auto -- [X] gérer les seuils auto si compétence non maitrisée +## Dice System -### le combat -- [X] modifier la difficulté en fonction de l'état du combatant /offensif/actif/passif/ +- **d10-based success counting**: `Xd10cs>=N` +- Difficulty = number of successes required +- Totems give domain bonuses (human/adapted dice) +- Rerolls via Effort and Sang-froid (Composure) +- Automatic successes and failure thresholds +- **Dice So Nice!** 3D dice integration with custom d10 face images +### Initiative +Formula: `(@abilities.reflexes.value + @skills.alertness.value)d10cs>=@combatStatus.difficulty` -### les items -- [X] ajouter apprentissage aux abilities -- [X] passer le type d'arme en select/options -- [X] ajouter handicap de rareté -- [X] ajouter pour items Item "competence nécessaire" -- [X] gérer les rolls d'items dans le chat -- [X] repasser sur les différents itemTypes et sheets -- [X] verifier le selector de traits (trait pratique cf : msg pretre) -- [X] construire une selecteur de traits, traits= CONFIG.VERMINE.traits - traits:[ - key:{ - name:string, - description:string, - value:number - } - ] -- [X] ajouter des dégats sur chaques fiches item +--- + +## Architecture + +``` +module/ +├── vermine2047.mjs # Entry point (Hooks.once init) +├── models/ # DataModels (Foundry v2 TypeDataModel) +│ ├── actor/ # character.mjs, npc.mjs, group.mjs, creature.mjs +│ └── item/ # All 12 item types +├── documents/ # VermineActor, VermineItem +├── applications/ +│ └── sheets/ # AppV2 sheets per type +├── system/ +│ ├── config.mjs # CONFIG.VERMINE (totems, traits, skills…) +│ ├── roll.mjs # VermineUtils.roll() +│ ├── fight.mjs # Combat system, VermineCombat, VermineCombatant +│ ├── functions.mjs # Shared helpers (skill scores, etc.) +│ ├── hooks.mjs # Hook registrations (DiceSoNice, chat, pause…) +│ ├── dice3d.mjs # Dice So Nice colors, initUserDice +│ ├── dialogs/rollDialog.mjs +│ ├── settings.mjs # System settings (game-mode, etc.) +│ ├── tour.mjs # Tours (stub) +│ └── group-link.mjs # GroupLink: auto-sync actors↔groups +templates/ +├── actor/appv2/ # AppV2 actor sheet templates +├── actor/ # Legacy templates (coexisting) +└── item/ # Item sheet templates +css/ +└── vermine2047.min.css # Compiled from LESS +less/ +└── base.less # Main stylesheet (LESS source) +``` + +## Key Objects + +- `game.vermine2047` → `{ VermineUtils, VermineCombat, GroupLink }` +- `CONFIG.VERMINE` → totems, traits, skills, domains, combat statuses… +- `CONFIG.ui.combat` → custom `VermineCombatTracker` + +## Commands + +```sh +npm run build:less # LESS → css/vermine2047.min.css +npm run build:less:dev # LESS → css/vermine2047.dev.css (unminified) +npm run build:all-css # Both +npm run watch # Gulp watch + browser-sync → localhost:30000 +npm run lint:less # LESS lint +npm run pushLDBtoYAML # Extract packs → src/packs/*.yml +npm run pullYAMLtoLDB # Compile packs → packs/* (LevelDB) +make build|watch|lint # Makefile wrappers +``` + +### Requirements +- Node.js `v16.15.1` (see `.nvmrc`) +- Foundry VTT **v14** + +## Development Notes + +- **DataModels before Document classes**: In `init` hook, register `CONFIG.Actor.dataModels.*` and `CONFIG.Item.dataModels.*` **before** setting `CONFIG.Actor.documentClass` / `CONFIG.Item.documentClass`. +- **Two template systems**: AppV2 (`templates/actor/appv2/`) and legacy (`templates/actor/*.hbs`) coexist — don't confuse them. +- **Packs**: Edit YAML source in `src/packs/*.yml`, then run `pullYAMLtoLDB` to compile to LevelDB. +- **CSS**: Declared in `system.json` styles — do **not** inject `` manually. +- **ESLint**: ~350 rules. Run `npx eslint module/` before committing. No `console.log` (use `console.error` sparingly). +- **editMode**: Not auto-set on actor creation (causes ActiveEffect errors). Enable manually via sheet checkbox. +- **GroupLink**: Auto-syncs on actor update. Changes propagate bidirectionally. +- **HotReload**: Enabled for css, scss, hbs, json in `system.json`. + +## License + +This system is an unofficial fan project. The Vermine 2047 setting and trademarks belong to Éditions John Doe.