Files
vermine2047/README.md
T

5.1 KiB

Vermine 2047 — Foundry VTT System

Foundry v14 Version

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

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.