Files
vermine2047/AGENTS.md
T
uberwald 90de66d668
Release Creation / build (release) Failing after 1m28s
fix: Dice So Nice import v14 compat, override Foundry text colors for readability
- hooks.mjs: replace static dice-so-nice import with dynamic import
  using game.modules.get('dice-so-nice').id (path removed in v14)
- hooks.mjs: fix permission condition (|| -> &&), jQuery -> vanilla JS
- less/base.less: override --color-text-* and --button-text-color
  for both .themed.theme-dark (AppV2) and body.theme-dark (legacy apps)
- target #settings-config buttons + labels + hints for dark grays
2026-07-12 22:05:45 +02:00

64 lines
3.9 KiB
Markdown

# AGENTS.md — Vermine2047 FoundryVTT system
## Project
FoundryVTT v14 game system for the French post-apocalyptic TTRPG "Vermine 2047". Bilingual FR/EN.
- **Entrypoint**: `module/vermine2047.mjs` (declared in `system.json` esmodules)
- **CSS**: `css/vermine2047.min.css` (compiled from LESS, **not** SCSS)
- **System ID**: `vermine2047`
## Architecture
| Layer | Location | Notes |
|-------|----------|-------|
| Entry/init | `module/vermine2047.mjs` | `Hooks.once('init',...)` — register DataModels before Document classes |
| DataModels | `module/models/*.mjs` | FoundryV2 `TypeDataModel` — 4 Actor types, 12 Item types |
| Documents | `module/documents/*.mjs` | `VermineActor`, `VermineItem` (thin wrappers) |
| Sheets (AppV2) | `module/applications/sheets/*.mjs` | ApplicationV2 sheets per type |
| System | `module/system/*.mjs` | config, roll, fight, dialogs, hooks, settings, dice3d, group-link |
| Templates (HBS) | `templates/actor/appv2/*.hbs` | ApplicationV2 templates |
| Legacy templates | `templates/actor/*.hbs`, `templates/actor/{character,group,npc,creature}/*.hbs` | Coexisting legacy templates |
### Actor types: character, npc, group, creature
### Item types: item, weapon, defense, vehicle, ability, specialty, background, trauma, evolution, rumor, target, rite
Key objects at runtime:
- `game.vermine2047``{ VermineUtils, VermineCombat, GroupLink }`
- `CONFIG.VERMINE` → game configuration (totems, traits, skills, etc.)
- `CONFIG.ui.combat` → custom `VermineCombatTracker`
Dice system: d10-based, success-counting (`Xd10cs>=N`). Totems give domain bonuses. Initiative formula:
`(@abilities.reflexes.value + @skills.alertness.value)d10cs>=@combatStatus.difficulty`
## Commands
```sh
npm run build:less # LESS → vermine2047.min.css
npm run build:less:dev # LESS → vermine2047.dev.css (unminified)
npm run build:all-css # both
npm run watch # gulp watch + browser-sync proxy to localhost:30000
npm run lint:less # lesshint
npm run pushLDBtoYAML # extract Foundry packs → src/packs/*.yml
npm run pullYAMLtoLDB # compile src/packs/*.yml → packs/ LevelDB
make build / watch / lint # Makefile wrappers for above
```
- Node version required: `v16.15.1` (per `.nvmrc`)
## Gotchas
- **DataModels before Document classes**: In `init` hook, register `CONFIG.Actor.dataModels.*` and `CONFIG.Item.dataModels.*` **before** setting `CONFIG.Actor.documentClass` / `CONFIG.Item.documentClass`.
- **`no-console: 'error'`**: ESLint blocks `console.log/warn/info`. Use `console.error` sparingly or disable the rule inline.
- **ESLint is very verbose**: ~350 rules. Common failures: missing semicolons, trailing commas, single quotes, 2-space indent, `max-len: 120`. Run `npx eslint module/` before committing.
- **Two template systems**: Both legacy (`templates/actor/*.hbs`) and ApplicationV2 (`templates/actor/appv2/*.hbs`) are preloaded. Don't confuse them.
- **Packs in two places**: `src/packs/*.yml` (YAML source, tracked) ↔ `packs/*` (LevelDB binary, gitignored). Edit YAML source, then run `pullYAMLtoLDB` to compile.
- **CSS auto-loaded**: `system.json` declares styles; **do not** inject `<link>` manually (causes MIME type errors).
- **`game-mode` setting**: Default in code is `'e'` (likely a typo for `'1'`). Values: `1`=Survie, `2`=Cauchemar, `3`=Apocalypse.
- **editMode flag disabled**: No auto-set on actor creation (causes ActiveEffect errors). Enable manually via sheet checkbox.
- **GroupLink auto-syncs**: `GroupLink.registerHooks()` runs on init. Actor updates propagate to groups and vice versa.
- **Custom dice**: Dice So Nice integration uses user color (regular/human/adapted color sets) with custom d10 face images.
- **No tests**: `npm test` is a stub (exits 1). No test framework installed.
- **No CI**: `.github/` is gitignored; no workflows configured.
- **HotReload**: `system.json` flags hotReload for css, scss, hbs, json extensions.