Files
vermine2047/README.md
T

121 lines
5.1 KiB
Markdown

# 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)
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).
Bilingual **FR/EN** interface.
---
## Actor Types
| 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 |
## 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) |
## Dice System
- **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`
---
## 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 `<link>` 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.