# Vermine 2047 — Système Foundry VTT

![Foundry v14](https://img.shields.io/badge/Foundry-v14-blue)
![Version](https://img.shields.io/badge/version-0.1.13-green)

Système non-officiel pour le jeu de rôle **Vermine 2047**, univers post-apo français par **Studio Agate**.

► Achetez le jeu : https://www.kickandgo.net/boutique-agate/category.php?cl=UyQcRrFtYcYrAnLbOfDj&idp=20

Interface bilingue **FR/EN**.

---

## Types d'Acteurs

| Type | Fiche | Description |
|------|-------|-------------|
| **character** | AppV2 | Personnage joueur — compétences, capacités, totem, équipement |
| **npc** | AppV2 | PNJ avec rôle/menace, seuils de blessure |
| **group** | AppV2 | Groupe avec membres, rencontres, synchro liée |
| **creature** | AppV2 | Créature avec gabarit/taille/rôle, attaques custom |

## Types d'Objets

| Type | Utilisation |
|------|-------------|
| **item** | Objets génériques (matériel, ressources) |
| **weapon** | Armes — dégâts, portée, fiabilité, rareté |
| **defense** | Armures/boucliers — protection, couverture |
| **vehicle** | Véhicules — vitesse, structure, armement |
| **ability** | Capacités spéciales (apprentissage, domaine) |
| **specialty** | Spécialités de compétence |
| **background** | Historiques de personnage |
| **trauma** | Traumatismes physiques/mentaux |
| **evolution** | Évolutions du personnage |
| **rumor** | Rumeurs (groupe) |
| **target** | Cibles (groupe) |
| **rite** | Rites (magie/rituels) |

## Système de Dés

- **Comptage de succès sur d10** : `Xd10cs>=N`
- Difficulté = nombre de succès requis
- Les totems donnent des bonus de domaine (dés humains/adaptés)
- Relances via l'Effort et le Sang-froid
- Succès automatiques et seuils d'échec
- Intégration **Dice So Nice!** avec faces de d10 personnalisées

### Initiative
Formule : `(@abilities.reflexes.value + @skills.alertness.value)d10cs>=@combatStatus.difficulty`

---

## Architecture

```
module/
├── vermine2047.mjs          # Point d'entrée (Hooks.once init)
├── models/                   # DataModels (Foundry v2 TypeDataModel)
│   ├── actor/                # character.mjs, npc.mjs, group.mjs, creature.mjs
│   └── item/                 # Les 12 types d'objets
├── documents/                # VermineActor, VermineItem
├── applications/
│   └── sheets/               # Fiches AppV2 par type
├── system/
│   ├── config.mjs            # CONFIG.VERMINE (totems, traits, compétences…)
│   ├── roll.mjs              # VermineUtils.roll()
│   ├── fight.mjs             # Système de combat, VermineCombat, VermineCombatant
│   ├── functions.mjs         # Fonctions partagées
│   ├── hooks.mjs             # Hooks (DiceSoNice, chat, pause…)
│   ├── dice3d.mjs            # Couleurs Dice So Nice, initUserDice
│   ├── dialogs/rollDialog.mjs
│   ├── settings.mjs          # Paramètres du système (mode de jeu…)
│   ├── tour.mjs              # Visites guidées (stub)
│   └── group-link.mjs        # GroupLink : synchro acteurs↔groupes
templates/
├── actor/appv2/              # Templates AppV2 des fiches acteurs
├── actor/                    # Templates legacy (coexistence)
└── item/                     # Templates des fiches objets
css/
└── vermine2047.min.css       # Compilé depuis LESS
less/
└── base.less                 # Source LESS principale
```

## Objets Clés

- `game.vermine2047` → `{ VermineUtils, VermineCombat, GroupLink }`
- `CONFIG.VERMINE` → totems, traits, compétences, domaines, états de combat…
- `CONFIG.ui.combat` → `VermineCombatTracker` personnalisé

## Commandes

```sh
npm run build:less          # LESS → css/vermine2047.min.css
npm run build:less:dev      # LESS → css/vermine2047.dev.css (non minifié)
npm run build:all-css       # Les deux
npm run watch               # Gulp watch + browser-sync → localhost:30000
npm run lint:less           # Vérification LESS
npm run pushLDBtoYAML       # Extraire les packs → src/packs/*.yml
npm run pullYAMLtoLDB       # Compiler les packs → packs/* (LevelDB)
make build|watch|lint       # Raccourcis Makefile
```

### Prérequis
- Node.js `v16.15.1` (cf `.nvmrc`)
- Foundry VTT **v14**

## Notes de Développement

- **DataModels avant Document classes** : Dans le hook `init`, enregistrer `CONFIG.Actor.dataModels.*` et `CONFIG.Item.dataModels.*` **avant** de définir `CONFIG.Actor.documentClass` / `CONFIG.Item.documentClass`.
- **Deux systèmes de templates** : AppV2 (`templates/actor/appv2/`) et legacy (`templates/actor/*.hbs`) coexistent.
- **Packs** : Éditer les sources YAML dans `src/packs/*.yml`, puis lancer `pullYAMLtoLDB`.
- **CSS** : Déclaré dans `system.json` — ne **pas** injecter de `<link>` manuellement.
- **ESLint** : ~350 règles. Lancer `npx eslint module/` avant chaque commit. Pas de `console.log`.
- **editMode** : Ne se met plus automatiquement à la création d'acteur (cause des erreurs ActiveEffect). Activer manuellement via la case à cocher.
- **GroupLink** : Synchronisation automatique bidirectionnelle acteurs↔groupes.
- **HotReload** : Activé pour css, scss, hbs, json dans `system.json`.

---

## English Summary

**Vermine 2047** is a French post-apocalyptic TTRPG. This is an unofficial Foundry VTT system (v14).

- **4 actor types**: character, npc, group, creature
- **12 item types**: item, weapon, defense, vehicle, ability, specialty, background, trauma, evolution, rumor, target, rite
- **Dice**: d10 success-counting with totem domains, Effort rerolls, Dice So Nice! 3D integration
- **Sheets**: AppV2 with tab navigation, edit/play mode toggle
- **Bilingual**: FR/EN interface

---

## Licence

VERMINE 2047, Un jeu de Julien Blondel

© 2023 Studio Agate
TOTEM System

© 2023 Julien Blondel
Tous droits réservés