diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..e8ac660 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,65 @@ +# Copilot Instructions — fvtt-chroniques-de-l-etrange + +FoundryVTT v13 game system for *Les Chroniques de l'Étrange* (Antre-Monde Éditions). The codebase is entirely in **ES modules** (`"type": "module"`) bundled with esbuild. There are no tests. + +## Build commands + +```bash +npm run build # compile LESS → CSS and bundle src/system.js → dist/system.js +npm run build:css # LESS only +npm run build:js # esbuild bundle only +npm run build:watch # rebuild on file changes +npm run build:full # compile compendiums then build + +npm run pack:compile # compile packs-src/ → packs/ (LevelDB) +npm run pack:extract # extract packs/ → packs-src/ (YAML source) +``` + +The built output goes to `dist/system.js` (sourced via the unbuilt `src/system.js` in `system.json` `esmodules`). + +## Architecture + +The entry point is `src/system.js`, which wires up all FoundryVTT hooks (`init`, `ready`, `renderChatLog`, etc.). + +### Layer structure + +| Layer | Path | Purpose | +|---|---|---| +| **Config** | `src/config/` | Constants, i18n pre-localization, runtime config, settings | +| **Data Models** | `src/data/` | `TypeDataModel` subclasses defining actor/item schemas | +| **Documents** | `src/documents/` | `CDEActor`, `CDEItem`, `CDEMessage` — thin document class overrides | +| **UI / Sheets** | `src/ui/sheets/` | ApplicationV2 sheets for actors and items | +| **UI / Apps** | `src/ui/apps/` | Standalone apps: `CDELoksyuApp`, `CDETinjiApp` (singletons) | +| **UI / Core** | `src/ui/` | Rolling engine, dice registration, Handlebars helpers, initiative | + +### Key domain concepts + +- **Wu Xing cycle**: Five aspects (metal, water, earth, fire, wood) drive all dice resolution. Each aspect maps to two d10 faces (see `ASPECT_FACES` in `constants.js`). `WU_XING_CYCLE` maps an active aspect to the five result categories: successes / auspicious / noxious / **loksyu** / **tinji**. +- **Loksyu / Tin Ji**: Persistent world-level counters stored in game settings (`loksyuData`, `tinjiData`). Managed via `CDELoksyuApp` / `CDETinjiApp` singleton apps; updated from roll results in `ui/apps/singletons.js`. +- **Three Treasures** (`threetreasures`): The character's Hei-Yang and Hei-Yin pools plus dice-level branches — used as the primary/secondary token attribute. +- **Magics**: Five schools (`internalcinnabar`, `alchemy`, `masteryoftheway`, `exorcism`, `geomancy`), each with five specialities. Fully defined in `MAGICS` constant. + +### Data model pattern + +All data models live in `src/data/` and extend `foundry.abstract.TypeDataModel`. Schema fields are defined with local factory helpers (`numberField`, `stringField`, `boolField`, `htmlField`) — prefer reusing these helpers when adding new fields. + +### Sheet pattern + +Actor and item sheets extend `HandlebarsApplicationMixin(ActorSheetV2)` via `CDEBaseActorSheet` (`src/ui/sheets/actors/base.js`). Key conventions: +- `static DEFAULT_OPTIONS` with `form: { submitOnChange: true }` — forms auto-save on every change. +- Tab state is manually restored in `_onRender` by iterating `this.tabGroups` and calling `this.changeTab()` (AppV2 does not persist tab state natively). +- Sheet actions (create/edit/delete item, editImage) are static private methods registered in `DEFAULT_OPTIONS.actions`. +- `_prepareContext()` exposes both `system` and `systemData` (same reference) for template compatibility. + +### Compendium source + +Human-editable compendium content lives in `packs-src/` as YAML. Use `npm run pack:compile` before building when pack content has changed, and `npm run pack:extract` after importing new data in Foundry. + +## Key conventions + +- All user-visible strings go through i18n with the `CDE.` prefix namespace. New labels must be added to `lang/fr-cde.json`. +- Handlebars templates live in `templates/` and are referenced by their full system path (`systems/fvtt-chroniques-de-l-etrange/templates/...`). Partials are pre-registered from `TEMPLATE_PARTIALS` in `constants.js`. +- The system ID constant (`SYSTEM_ID = "fvtt-chroniques-de-l-etrange"`) is used everywhere — never hardcode the string. +- CSS is authored in LESS (`css/cde-theme.less`) and compiled to `css/cde-theme.css`. Do not edit the `.css` file directly. +- Global macro access is via `game.cde` (exposes `CDELoksyuApp` and `CDETinjiApp`). +- The `dist/` directory is generated — do not commit it manually; it is rebuilt by `npm run build`. diff --git a/css/cde-theme.css b/css/cde-theme.css index cd0397b..0b9a214 100644 --- a/css/cde-theme.css +++ b/css/cde-theme.css @@ -396,17 +396,22 @@ section.npc .cde-neon-tabs .item.active { .cde-tab-body { flex: 1 1 0; min-height: 0; + display: flex; + flex-direction: column; padding: 12px; background: #0d1520; border: 1px solid #1a2436; border-top: none; border-radius: 0 0 8px 8px; - overflow-y: auto; + overflow: hidden; } .cde-tab-body .tab { display: none; + flex: 1 1 0; + min-height: 0; flex-direction: column; gap: 12px; + overflow-y: auto; } .cde-tab-body .tab.active { display: flex; @@ -447,12 +452,25 @@ section.npc .cde-neon-tabs .item.active { flex-direction: column; } .cde-notes-editor .editor { - flex: 1 1 0; + flex: 1 1 auto; min-height: 200px; + height: 100%; border-radius: 8px; border: 1px solid #1a2436; background: #101622; } +.cde-notes-editor .editor .tox { + height: 100% !important; + min-height: 100% !important; +} +.cde-notes-editor .editor .tox-editor-container { + height: 100% !important; + min-height: 100% !important; +} +.cde-notes-editor .editor iframe { + height: 100% !important; + min-height: 100% !important; +} .cde-technique-card { border-left: 3px solid #ff3d5a; background: rgba(16, 22, 34, 0.8); diff --git a/css/cde-theme.less b/css/cde-theme.less index 8d528d3..b2a1e9f 100644 --- a/css/cde-theme.less +++ b/css/cde-theme.less @@ -381,17 +381,22 @@ section.npc .cde-neon-tabs .item.active { color: @cde-supernatural; borde .cde-tab-body { flex: 1 1 0; min-height: 0; + display: flex; + flex-direction: column; padding: @cde-gap; background: @cde-surface2; border: 1px solid @cde-border; border-top: none; border-radius: 0 0 @cde-radius @cde-radius; - overflow-y: auto; + overflow: hidden; .tab { display: none; + flex: 1 1 0; + min-height: 0; flex-direction: column; gap: @cde-gap; + overflow-y: auto; } .tab.active { @@ -445,11 +450,26 @@ section.npc .cde-neon-tabs .item.active { color: @cde-supernatural; borde flex-direction: column; .editor { - flex: 1 1 0; + flex: 1 1 auto; min-height: 200px; + height: 100%; border-radius: @cde-radius; border: 1px solid @cde-border; background: @cde-surface; + + // Force TinyMCE to fill the container + .tox { + height: 100% !important; + min-height: 100% !important; + } + .tox-editor-container { + height: 100% !important; + min-height: 100% !important; + } + iframe { + height: 100% !important; + min-height: 100% !important; + } } } diff --git a/css/cde-theme.less.backup b/css/cde-theme.less.backup new file mode 100644 index 0000000..8d528d3 --- /dev/null +++ b/css/cde-theme.less.backup @@ -0,0 +1,4656 @@ + +/* ------------------------------------------- + Fonts + ---------------------------------------------*/ + +@font-face { + font-family: "Averia"; + src: url(../fonts/Averia-Regular.ttf); +} + +// ============================================================ +// Neo-Tokyo Neon Noir — Palette +// ============================================================ +@cde-bg: #080c14; +@cde-surface: #101622; +@cde-surface2: #0d1520; +@cde-border: #1a2436; +@cde-border-hi: #263853; +@cde-text: #e2e8f4; +@cde-muted: #7d94b8; + +// Accents néon par type +@cde-item: #00d4d4; +@cde-kungfu: #ff3d5a; +@cde-spell: #4a9eff; +@cde-supernatural: #cc44ff; +@cde-weapon: #ff6b35; +@cde-armor: #4ecdc4; +@cde-sanhei: #cc44ff; +@cde-ingredient: #98c379; + +@cde-shadow: 0 8px 32px rgba(0, 0, 0, 0.6); +@cde-shadow-sm: 0 2px 12px rgba(0, 0, 0, 0.4); +@cde-radius: 8px; +@cde-radius-sm: 5px; +@cde-gap: 12px; + +// Glow helpers +.glow(@color) { box-shadow: 0 0 0 1px fade(@color, 35%), 0 0 12px fade(@color, 20%); } +.glow-text(@color) { text-shadow: 0 0 8px fade(@color, 60%); } + +// ============================================================ +// CSS Variables (for JS access) +// ============================================================ +.fvtt-chroniques-de-l-etrange { + --cde-bg: @cde-bg; + --cde-surface: @cde-surface; + --cde-border: @cde-border; + --cde-text: @cde-text; + --cde-muted: @cde-muted; + --cde-item: @cde-item; + --cde-kungfu: @cde-kungfu; + --cde-spell: @cde-spell; + --cde-supernatural: @cde-supernatural; + color: @cde-text; + background: @cde-bg; +} + +// ============================================================ +// Base sheet +// ============================================================ +.cde-sheet { + background: @cde-bg; + color: @cde-text; + font-family: "Averia", sans-serif; + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + overflow: hidden; + + input, textarea { + font-family: inherit; + color: @cde-text; + background: transparent; + } + + // Selects need an explicit dark background — transparent fails on native dropdowns + select { + font-family: inherit; + color: @cde-text; + background: @cde-surface; + border-radius: 2px; + } + + select option { + background: @cde-bg; + color: @cde-text; + } +} + +// ============================================================ +// Item-sheet Neon Header +// ============================================================ +.cde-neon-header { + position: relative; + background: @cde-surface; + display: grid; + grid-template-columns: 90px 1fr; + gap: 14px; + padding: 12px 14px 14px; + overflow: hidden; + // Angular clip on bottom-right corner + clip-path: polygon(0 0, 100% 0, 100% calc(100% - 14px), calc(100% - 14px) 100%, 0 100%); + + // Top accent line — overridden per type + &::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 3px; + background: @cde-border-hi; + } + + // Subtle neon scatter in background + &::after { + content: ""; + position: absolute; + inset: 0; + background: radial-gradient(ellipse at 0% 0%, fade(@cde-border-hi, 30%) 0%, transparent 50%); + pointer-events: none; + } + + // Per-type accent colors + &.item { &::before { background: @cde-item; box-shadow: 0 0 10px fade(@cde-item, 50%); } } + &.kungfu { &::before { background: @cde-kungfu; box-shadow: 0 0 10px fade(@cde-kungfu, 50%); } } + &.spell { &::before { background: @cde-spell; box-shadow: 0 0 10px fade(@cde-spell, 50%); } } + &.supernatural { &::before { background: @cde-supernatural; box-shadow: 0 0 10px fade(@cde-supernatural, 50%); } } + &.weapon { &::before { background: @cde-weapon; box-shadow: 0 0 10px fade(@cde-weapon, 50%); } } + &.armor { &::before { background: @cde-armor; box-shadow: 0 0 10px fade(@cde-armor, 50%); } } + &.sanhei { &::before { background: @cde-sanhei; box-shadow: 0 0 10px fade(@cde-sanhei, 50%); } } + &.ingredient { &::before { background: @cde-ingredient; box-shadow: 0 0 10px fade(@cde-ingredient, 50%); } } +} + +// Avatar inside neon header — angular clip +.cde-avatar { + width: 90px; + height: 90px; + object-fit: cover; + clip-path: polygon(0 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%); + border: 1px solid @cde-border-hi; + background: @cde-surface2; + cursor: pointer; + position: relative; + z-index: 1; +} + +// Header content zone +.cde-header-content { + position: relative; + z-index: 1; + display: flex; + flex-direction: column; + gap: 8px; + min-width: 0; +} + +// Item name — flat neon-bottom-border input +.cde-item-name { + margin: 0; + + input { + width: 100%; + border: none; + border-bottom: 2px solid @cde-border-hi; + background: transparent; + color: @cde-text; + font-size: 18px; + font-family: "Averia", sans-serif; + font-weight: 700; + padding: 4px 0 6px; + letter-spacing: 0.04em; + text-transform: uppercase; + outline: none; + transition: border-color 0.15s; + + &:focus { + border-bottom-color: @cde-item; + } + } +} + +// Type-specific focus color on name input +.cde-neon-header.kungfu .cde-item-name input:focus { border-bottom-color: @cde-kungfu; } +.cde-neon-header.spell .cde-item-name input:focus { border-bottom-color: @cde-spell; } +.cde-neon-header.supernatural .cde-item-name input:focus { border-bottom-color: @cde-supernatural; } +.cde-neon-header.weapon .cde-item-name input:focus { border-bottom-color: @cde-weapon; } +.cde-neon-header.armor .cde-item-name input:focus { border-bottom-color: @cde-armor; } +.cde-neon-header.sanhei .cde-item-name input:focus { border-bottom-color: @cde-sanhei; } +.cde-neon-header.ingredient .cde-item-name input:focus { border-bottom-color: @cde-ingredient; } + +// ============================================================ +// Stat Grid (terminal style) +// ============================================================ +.cde-stat-grid { + display: flex; + flex-wrap: wrap; + gap: 6px 10px; + align-items: flex-end; +} + +.cde-stat-cell { + display: flex; + flex-direction: column; + gap: 3px; + min-width: 110px; + flex: 1 1 110px; + max-width: 200px; + + &--wide { + flex: 1 1 100%; + max-width: 100%; + min-width: 0; + } +} + +.cde-stat-label { + font-size: 10px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.1em; + color: @cde-muted; + white-space: nowrap; +} + +.cde-stat-value { + font-size: 15px; + font-weight: 800; + color: @cde-text; + letter-spacing: 0.02em; +} + +.cde-stat-cell input { + width: 100%; + background: transparent; + border: none; + border-bottom: 1px solid @cde-border; + color: @cde-text; + font-size: 14px; + padding: 4px 0; + outline: none; + transition: border-color 0.15s; + + &:focus { border-bottom-color: @cde-item; } +} + +.cde-stat-cell textarea { + width: 100%; + background: transparent; + border: 1px solid @cde-border; + border-radius: 2px; + color: @cde-text; + font-size: 13px; + font-family: inherit; + padding: 4px 6px; + outline: none; + resize: vertical; + transition: border-color 0.15s; + line-height: 1.5; + + &:focus { border-color: @cde-kungfu; } +} + +.cde-stat-cell select { + width: 100%; + border: none; + border-bottom: 1px solid @cde-border; + font-size: 14px; + padding: 4px 0; + outline: none; + transition: border-color 0.15s; + + &:focus { border-bottom-color: @cde-item; } +} + +.cde-neon-header.kungfu .cde-stat-cell input:focus, +.cde-neon-header.kungfu .cde-stat-cell select:focus { border-bottom-color: @cde-kungfu; } +.cde-neon-header.spell .cde-stat-cell input:focus, +.cde-neon-header.spell .cde-stat-cell select:focus { border-bottom-color: @cde-spell; } +.cde-neon-header.supernatural .cde-stat-cell input:focus, +.cde-neon-header.supernatural .cde-stat-cell select:focus { border-bottom-color: @cde-supernatural; } +.cde-neon-header.weapon .cde-stat-cell input:focus, +.cde-neon-header.weapon .cde-stat-cell select:focus { border-bottom-color: @cde-weapon; } +.cde-neon-header.armor .cde-stat-cell input:focus, +.cde-neon-header.armor .cde-stat-cell select:focus { border-bottom-color: @cde-armor; } +.cde-neon-header.sanhei .cde-stat-cell input:focus, +.cde-neon-header.sanhei .cde-stat-cell select:focus { border-bottom-color: @cde-sanhei; } +.cde-neon-header.ingredient .cde-stat-cell input:focus, +.cde-neon-header.ingredient .cde-stat-cell select:focus { border-bottom-color: @cde-ingredient; } + +// ============================================================ +// Type Badge — angular clip-path parallelogram +// ============================================================ +.cde-badge { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 3px 14px 3px 10px; + clip-path: polygon(6px 0, 100% 0, calc(100% - 6px) 100%, 0 100%); + font-size: 11px; + font-weight: 800; + letter-spacing: 0.1em; + text-transform: uppercase; + color: @cde-bg; + cursor: default; + white-space: nowrap; + + &.item { background: @cde-item; } + &.kungfu { background: @cde-kungfu; } + &.spell { background: @cde-spell; } + &.supernatural { background: @cde-supernatural; } + &.character { background: @cde-item; } + &.npc { background: @cde-supernatural; } + &.weapon { background: @cde-weapon; } + &.armor { background: @cde-armor; } + &.sanhei { background: @cde-sanhei; } + &.ingredient { background: @cde-ingredient; } +} + +// ============================================================ +// Neon Tabs +// ============================================================ +.cde-neon-tabs { + display: flex; + gap: 0; + border-bottom: 1px solid @cde-border; + background: transparent; + margin-top: 8px; + overflow-x: auto; + + .item { + padding: 8px 14px; + font-size: 11px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.1em; + color: @cde-muted; + border-bottom: 2px solid transparent; + white-space: nowrap; + transition: color 0.15s, border-color 0.15s; + cursor: pointer; + + &:hover { + color: @cde-text; + } + + &.active { + color: @cde-item; + border-bottom-color: @cde-item; + font-weight: 700; + background: fade(@cde-item, 8%); + } + } +} + +// Per-type active tab color +.item.kungfu .cde-neon-tabs .item.active, +form.kungfu .cde-neon-tabs .item.active, +section.kungfu .cde-neon-tabs .item.active { color: @cde-kungfu; border-bottom-color: @cde-kungfu; background: fade(@cde-kungfu, 8%); } +form.spell .cde-neon-tabs .item.active, +section.spell .cde-neon-tabs .item.active { color: @cde-spell; border-bottom-color: @cde-spell; background: fade(@cde-spell, 8%); } +form.supernatural .cde-neon-tabs .item.active, +section.supernatural .cde-neon-tabs .item.active { color: @cde-supernatural; border-bottom-color: @cde-supernatural; background: fade(@cde-supernatural, 8%); } +form.weapon .cde-neon-tabs .item.active, +section.weapon .cde-neon-tabs .item.active { color: @cde-weapon; border-bottom-color: @cde-weapon; background: fade(@cde-weapon, 8%); } +form.armor .cde-neon-tabs .item.active, +section.armor .cde-neon-tabs .item.active { color: @cde-armor; border-bottom-color: @cde-armor; background: fade(@cde-armor, 8%); } +form.sanhei .cde-neon-tabs .item.active, +section.sanhei .cde-neon-tabs .item.active { color: @cde-sanhei; border-bottom-color: @cde-sanhei; background: fade(@cde-sanhei, 8%); } +form.ingredient .cde-neon-tabs .item.active, +section.ingredient .cde-neon-tabs .item.active { color: @cde-ingredient; border-bottom-color: @cde-ingredient; background: fade(@cde-ingredient, 8%); } +// Actor type accent colors +section.character .cde-neon-tabs .item.active { color: @cde-item; border-bottom-color: @cde-item; background: fade(@cde-item, 8%); } +section.npc .cde-neon-tabs .item.active { color: @cde-supernatural; border-bottom-color: @cde-supernatural; background: fade(@cde-supernatural, 8%); } + +// ============================================================ +// Tab body +// ============================================================ +.cde-tab-body { + flex: 1 1 0; + min-height: 0; + padding: @cde-gap; + background: @cde-surface2; + border: 1px solid @cde-border; + border-top: none; + border-radius: 0 0 @cde-radius @cde-radius; + overflow-y: auto; + + .tab { + display: none; + flex-direction: column; + gap: @cde-gap; + } + + .tab.active { + display: flex; + } +} + +// Tab section label — visible inside each tab body +.cde-tab-label { + font-family: "Averia", sans-serif; + font-size: 0.65rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.15em; + color: @cde-muted; + padding: 2px 6px; + border-left: 2px solid @cde-border-hi; + margin-bottom: 2px; + flex-shrink: 0; +} + +// ============================================================ +// Card +// ============================================================ +.cde-card { + background: @cde-surface; + border: 1px solid @cde-border; + border-radius: @cde-radius; + padding: 12px; + box-shadow: @cde-shadow-sm; +} + +.cde-card .tab-sous-titre { + font-family: "Averia", sans-serif; + font-size: 10px; + letter-spacing: 0.1em; + text-transform: uppercase; + color: @cde-muted; + margin-bottom: 6px; + border-bottom: 1px solid @cde-border; + padding-bottom: 4px; +} + +// ============================================================ +// Notes editor +// ============================================================ +.cde-notes-editor { + flex: 1 1 0; + min-height: 0; + display: flex; + flex-direction: column; + + .editor { + flex: 1 1 0; + min-height: 200px; + border-radius: @cde-radius; + border: 1px solid @cde-border; + background: @cde-surface; + } +} + +// ============================================================ +// Technique card (kungfu) +// ============================================================ +.cde-technique-card { + border-left: 3px solid @cde-kungfu; + background: fade(@cde-surface, 80%); +} + +.cde-technique-header { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: flex-start; + gap: 10px; + margin-bottom: 10px; +} + +.cde-technique-title { + display: flex; + align-items: center; + gap: 8px; + flex: 1 1 200px; + + input { + flex: 1; + background: transparent; + border: none; + border-bottom: 1px solid @cde-border; + color: @cde-text; + font-size: 15px; + font-weight: 700; + padding: 4px 0; + outline: none; + + &:focus { border-bottom-color: @cde-kungfu; } + } +} + +.cde-technique-meta { + display: flex; + gap: 8px; + flex-wrap: wrap; + align-items: flex-end; +} + +.cde-technique-body .editor { + min-height: 180px; +} + +// Mini technique checkbox row +.cde-check-cell { + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; + min-width: 70px; + + label { + font-size: 10px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + } + + input[type="checkbox"] { + width: 18px; + height: 18px; + accent-color: @cde-kungfu; + cursor: pointer; + } +} + +// ============================================================ +// Legacy chips (kept for actor sheets) +// ============================================================ +.cde-chip { + background: fade(@cde-surface, 75%); + border: 1px solid @cde-border; + border-radius: @cde-radius; + padding: 8px 10px; + display: inline-flex; + flex-direction: column; + gap: 6px; + min-width: 140px; + + label { + font-size: 10px; + font-family: "Averia", sans-serif; + letter-spacing: 0.08em; + text-transform: uppercase; + color: @cde-muted; + margin: 0; + } + + input { + width: 100%; + border: none; + border-bottom: 1px solid @cde-border; + background: transparent; + color: @cde-text; + padding: 4px 0; + outline: none; + + &:focus { border-bottom-color: @cde-item; } + } + + select { + width: 100%; + border: none; + border-bottom: 1px solid @cde-border; + padding: 4px 0; + outline: none; + + &:focus { border-bottom-color: @cde-item; } + } + + input[type="checkbox"] { + width: auto; + align-self: flex-start; + accent-color: @cde-item; + } + + &.mini { min-width: 100px; padding: 6px 8px; } +} + +.cde-meta-row { + display: flex; + gap: @cde-gap; + flex-wrap: wrap; + align-items: flex-end; + margin-top: 8px; + + &.compact { gap: 8px; } +} + +// Kept for backward compat with actor templates +.cde-pill { + display: inline-block; + padding: 3px 10px; + border-radius: 999px; + font-weight: 800; + font-size: 11px; + letter-spacing: 0.06em; + text-transform: uppercase; + color: @cde-bg; + + &.item { background: @cde-item; } + &.kungfu { background: @cde-kungfu; } + &.spell { background: @cde-spell; } + &.supernatural { background: @cde-supernatural; } + &.character { background: @cde-item; } + &.npc { background: @cde-supernatural; } + &.weapon { background: @cde-weapon; } + &.armor { background: @cde-armor; } + &.sanhei { background: @cde-sanhei; } + &.ingredient { background: @cde-ingredient; } +} + +// ============================================================ +// Actor header (kept, updated for new palette) +// ============================================================ +.cde-header { + background: @cde-surface; + border: 1px solid @cde-border; + border-radius: @cde-radius; + padding: 12px; + display: grid; + grid-template-columns: 120px 1fr; + gap: @cde-gap; + box-shadow: @cde-shadow; + + .profile-img { + width: 100%; + border-radius: @cde-radius; + border: 1px solid @cde-border; + box-shadow: @cde-shadow; + object-fit: cover; + } + + .header-fields h1.charname input { + width: 100%; + border: none; + border-bottom: 2px solid @cde-border-hi; + background: transparent; + color: @cde-text; + font-size: 20px; + font-family: "Averia", sans-serif; + padding: 4px 0 8px; + outline: none; + + &:focus { border-bottom-color: @cde-item; } + } +} + +.cde-actor-header { + grid-template-columns: 160px 1fr; + align-items: start; +} + +.cde-header-top { + display: flex; + justify-content: space-between; + align-items: center; + gap: 8px; +} + +.cde-icon-button { + border: 1px solid @cde-border; + background: fade(@cde-surface, 70%); + color: @cde-text; + border-radius: 999px; + padding: 6px 10px; + box-shadow: @cde-shadow-sm; + cursor: pointer; + + &:hover { border-color: @cde-border-hi; } +} + +.cde-quick-meta { + display: flex; + align-items: center; + gap: @cde-gap; + flex-wrap: wrap; +} + +.cde-initiative-card { + border: 1px solid @cde-border; + border-left: 3px solid @cde-spell; + border-radius: @cde-radius; + padding: 8px 12px; + background: fade(@cde-surface, 70%); + box-shadow: @cde-shadow-sm; + display: inline-flex; + flex-direction: column; + gap: 4px; + min-width: 130px; +} + +.cde-initiative-header { + display: flex; + align-items: center; + gap: 6px; +} + +.cde-initiative-title { + font-size: 10px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; +} + +.cde-initiative-icon { + font-size: 11px; + color: @cde-spell; + text-shadow: 0 0 6px fade(@cde-spell, 70%); +} + +.cde-initiative-controls { + display: inline-flex; + align-items: center; + gap: 6px; + + .cde-init-btn { + display: inline-flex; + align-items: center; + justify-content: center; + width: 26px; + height: 26px; + padding: 0; + border: 1px solid @cde-border; + border-radius: 5px; + background: fade(@cde-bg, 80%); + color: @cde-muted; + font-size: 11px; + cursor: pointer; + flex-shrink: 0; + transition: border-color 0.15s, box-shadow 0.15s, color 0.15s; + + &:hover { + border-color: @cde-spell; + color: @cde-spell; + box-shadow: 0 0 0 2px fade(@cde-spell, 25%); + } + } + + .cde-init-btn--roll { + width: 30px; + height: 30px; + font-size: 14px; + border-color: fade(@cde-spell, 40%); + color: @cde-spell; + background: fade(@cde-spell, 10%); + box-shadow: 0 0 6px fade(@cde-spell, 20%); + + &:hover { + background: fade(@cde-spell, 20%); + box-shadow: 0 0 10px fade(@cde-spell, 40%); + } + } +} + +.cde-initiative-values { + display: flex; + flex-direction: column; + align-items: center; + gap: 2px; + min-width: 50px; +} + +.cde-initiative-value { + font-size: 20px; + font-weight: 800; + text-align: center; + color: @cde-spell; + text-shadow: 0 0 8px fade(@cde-spell, 60%); + line-height: 1; +} + +.cde-anti-initiative-value { + font-size: 9px; + font-family: "Averia", sans-serif; + color: @cde-muted; + text-align: center; + white-space: nowrap; + + i { + font-size: 8px; + opacity: 0.7; + } +} + +// ============================================================ +// Grid, field, table, section — common +// ============================================================ +.cde-grid { + display: grid; + gap: @cde-gap; + + &.two { grid-template-columns: repeat(2, minmax(0, 1fr)); } + &.three { grid-template-columns: repeat(3, minmax(0, 1fr)); } +} + +.cde-field { + label { + display: block; + margin-bottom: 4px; + font-size: 10px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + } + + input, textarea { + width: 100%; + border: none; + border-bottom: 1px solid @cde-border; + background: transparent; + color: @cde-text; + padding: 5px 0; + outline: none; + + &:focus { border-bottom-color: @cde-item; } + } + + select { + width: 100%; + border: none; + border-bottom: 1px solid @cde-border; + padding: 5px 0; + outline: none; + + &:focus { border-bottom-color: @cde-item; } + } +} + +.cde-section-title { + font-family: "Averia", sans-serif; + font-size: 10px; + font-weight: 800; + letter-spacing: 0.1em; + text-transform: uppercase; + color: @cde-muted; + margin-bottom: 8px; + border-bottom: 1px solid @cde-border; + padding-bottom: 4px; +} + +.cde-tag { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 3px 10px; + border-radius: 999px; + font-size: 11px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + background: fade(@cde-border, 80%); + color: @cde-muted; + border: 1px solid @cde-border; +} + +.cde-data-table { + table { + width: 100%; + border-collapse: collapse; + color: @cde-text; + } + + td { + padding: 7px 8px; + border-bottom: 1px solid @cde-border; + } + + tr:nth-child(even) { background: fade(@cde-surface, 50%); } + tr:hover { background: fade(@cde-border-hi, 20%); } + + input { + width: 100%; + border: none; + border-bottom: 1px solid @cde-border; + background: transparent; + color: @cde-text; + padding: 4px 0; + outline: none; + } + + select { + width: 100%; + border: none; + border-bottom: 1px solid @cde-border; + padding: 4px 0; + outline: none; + } +} + +.cde-centered-card { + display: flex; + gap: @cde-gap; + align-items: center; + justify-content: space-between; + flex-wrap: wrap; + + img { + max-height: 280px; + border-radius: @cde-radius; + border: 1px solid @cde-border; + box-shadow: @cde-shadow; + } +} + +// ============================================================ +// NPC Aptitudes table — modern cde-skills-table layout +// ============================================================ +.cde-aptitudes-table { + // Inherits .cde-skills-table styles; just ensure consistent width + .cde-spec-cell { flex: 1 1 0; } + + .cde-roll-cell { + width: 28px; + flex-shrink: 0; + text-align: center; + + .cde-roll-trigger { + display: inline-flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; + color: @cde-muted; + border-radius: 4px; + transition: color 0.15s, background 0.15s; + + &:hover { + color: @cde-supernatural; + background: fade(@cde-supernatural, 12%); + } + } + } +} + +// Empty list placeholder +.cde-empty-list { + color: @cde-muted; + font-style: italic; + font-size: 11px; + text-align: center; + padding: 10px 0; +} + +// NPC supernatural item cards +// ── Supernatural abilities card (NPC) ─────────────────────────────────────── + +.cde-super-add-row { + display: flex; + justify-content: flex-end; + padding: 4px 0 8px; +} + +.cde-super-add-btn { + display: inline-flex; + align-items: center; + gap: 5px; + font-size: 11px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + cursor: pointer; + padding: 4px 10px; + border-radius: @cde-radius; + border: 1px solid @cde-border; + transition: color 0.12s, border-color 0.12s, background 0.12s; + + i { font-size: 10px; } + + &:hover { color: @cde-supernatural; border-color: @cde-supernatural; background: fade(@cde-supernatural, 8%); } +} + +.cde-super-card { + border: 1px solid @cde-border; + border-left: 3px solid @cde-supernatural; + border-radius: @cde-radius; + background: fade(@cde-surface, 70%); + margin-bottom: 10px; + overflow: hidden; + transition: box-shadow 0.15s; + + &:hover { + box-shadow: 0 0 8px fade(@cde-supernatural, 20%); + + .cde-super-controls { opacity: 1; } + } +} + +.cde-super-header { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 10px; +} + +.cde-super-img { + width: 28px; + height: 28px; + object-fit: contain; + border-radius: 4px; + flex-shrink: 0; +} + +.cde-super-info { + flex: 1; + display: flex; + flex-direction: column; + gap: 3px; + min-width: 0; +} + +.cde-super-name { + font-size: 14px; + font-weight: 700; + font-family: "Averia", sans-serif; + color: @cde-text; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.cde-super-meta { + display: flex; + align-items: center; + gap: 4px; +} + +.cde-super-controls { + display: flex; + align-items: center; + gap: 4px; + opacity: 0; + transition: opacity 0.12s; + flex-shrink: 0; + + a { + display: flex; + align-items: center; + justify-content: center; + width: 22px; + height: 22px; + border-radius: 3px; + color: @cde-muted; + cursor: pointer; + transition: color 0.12s, background 0.12s; + + i { font-size: 11px; } + + &:hover { color: @cde-text; background: fade(@cde-border-hi, 30%); } + } +} + +.cde-super-desc { + padding: 6px 12px 8px 46px; + border-top: 1px solid fade(@cde-border, 60%); + background: fade(@cde-surface, 40%); + font-size: 11px; + color: @cde-muted; + line-height: 1.5; + + p { margin: 0 0 4px; &:last-child { margin-bottom: 0; } } + em { color: @cde-text; } + strong { color: @cde-supernatural; } +} + +.cde-super-empty { + padding: 16px; + text-align: center; + font-size: 12px; + color: @cde-muted; + font-style: italic; +} + +// NPC vitality / hei tracker +.cde-npc-tracks { + margin-top: @cde-gap; + + .cde-track-row { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 0; + border-bottom: 1px solid @cde-border; + + &:last-child { border-bottom: none; } + } + + .cde-track-label { + display: flex; + align-items: center; + gap: 6px; + width: 120px; + flex-shrink: 0; + font-size: 11px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + + i { font-size: 12px; } + } + + .cde-track-value { + display: flex; + align-items: center; + gap: 6px; + + input.cde-circle-input { + width: 48px; + } + } + + .cde-track-sep { + font-size: 14px; + color: @cde-muted; + font-weight: 700; + } + + .cde-track-max { + font-size: 15px; + font-weight: 700; + color: @cde-spell; + text-shadow: 0 0 6px fade(@cde-spell, 40%); + min-width: 28px; + text-align: center; + } + + .cde-track-note { + flex: 1; + input { width: 100%; } + } +} + +// ============================================================ +// Loksyu — 5 elemental cards grid +// ============================================================ +// ============================================================ +// Chat buttons — Loksyu / TinJi quick-access +// ============================================================ +.cde-chat-app-buttons { + display: flex; + gap: 6px; + padding: 6px 8px 4px; + border-top: 1px solid @cde-border; + pointer-events: auto; // sidebar has pointer-events:none — must override + + .cde-chat-btn { + flex: 1 1 0; + pointer-events: auto; + display: flex; + align-items: center; + justify-content: center; + gap: 6px; + padding: 5px 8px; + font-size: 11px; + font-family: "Orbitron", "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.06em; + background: @cde-surface; + border: 1px solid @cde-border; + border-radius: 4px; + color: @cde-muted; + cursor: pointer; + transition: all 0.2s; + + i { font-size: 12px; } + + &:hover { + background: fade(@cde-spell, 10%); + border-color: @cde-spell; + color: @cde-spell; + box-shadow: 0 0 8px fade(@cde-spell, 30%); + } + + &--tinji:hover { + background: fade(@cde-kungfu, 10%); + border-color: @cde-kungfu; + color: @cde-kungfu; + box-shadow: 0 0 8px fade(@cde-kungfu, 30%); + } + } +} + +// ============================================================ +// Loksyu standalone app +// ============================================================ +.cde-loksyu-standalone { + .cde-loksyu-app-body { + padding: 12px; + } + + .cde-loksyu-elements { + display: flex; + flex-wrap: wrap; + gap: 8px; + justify-content: center; + margin-bottom: 10px; + } + + .cde-lok-card { + flex: 0 0 calc(33.333% - 6px); + min-width: 140px; + max-width: 160px; + background: fade(@cde-surface, 80%); + border: 1px solid @cde-border; + border-radius: 6px; + padding: 10px 8px; + display: flex; + flex-direction: column; + gap: 6px; + min-width: 0; + overflow: hidden; + transition: border-color 0.2s; + + &--wood { &:hover { border-color: #4a9e3f; } .cde-lok-input:focus { border-bottom-color: #4a9e3f; } } + &--fire { &:hover { border-color: @cde-kungfu; } .cde-lok-input:focus { border-bottom-color: @cde-kungfu; } } + &--earth { &:hover { border-color: #c88a3a; } .cde-lok-input:focus { border-bottom-color: #c88a3a; } } + &--metal { &:hover { border-color: @cde-muted; } .cde-lok-input:focus { border-bottom-color: @cde-muted; } } + &--water { &:hover { border-color: @cde-spell; } .cde-lok-input:focus { border-bottom-color: @cde-spell; } } + } + + .cde-lok-header { + display: flex; + align-items: center; + gap: 6px; + + img.cde-lok-icon { border-radius: 4px; flex-shrink: 0; } + } + + .cde-lok-titles { + flex: 1 1 0; + min-width: 0; + display: flex; + flex-direction: column; + + .cde-lok-name { + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-text; + } + + .cde-lok-qual { + font-size: 9px; + color: @cde-muted; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + } + + .cde-lok-reset { + color: @cde-muted; + font-size: 11px; + flex-shrink: 0; + cursor: pointer; + &:hover { color: @cde-text; } + } + + .cde-lok-values { + display: flex; + flex-direction: column; + gap: 4px; + } + + .cde-lok-polarity { + display: flex; + align-items: center; + gap: 4px; + + .cde-lok-pol-label { + font-size: 9px; + color: @cde-muted; + width: 30px; + flex-shrink: 0; + } + + &--yang .cde-lok-pol-label { color: @cde-text; } + } + + .cde-lok-input { + flex: 1 1 0; + background: transparent; + border: none; + border-bottom: 1px solid @cde-border; + color: @cde-text; + font-size: 13px; + font-weight: 700; + text-align: center; + padding: 2px 0; + transition: border-bottom-color 0.2s; + width: 100%; + + &:focus { outline: none; } + &[disabled] { opacity: 0.5; cursor: default; } + } + + .cde-loksyu-visual-row { + text-align: center; + margin: 6px 0; + + .cde-lok-visual { + max-width: 120px; + max-height: 160px; + width: auto; + height: auto; + opacity: 0.6; + cursor: zoom-in; + transition: opacity 0.2s ease, box-shadow 0.2s ease; + + &:hover { + opacity: 0.9; + box-shadow: 0 0 10px @cde-border-hi; + } + } + } + + .cde-lok-footer { + display: flex; + justify-content: center; + padding-top: 6px; + border-top: 1px solid @cde-border; + margin-top: 6px; + } + + .cde-lok-reset-all { + display: flex; + align-items: center; + gap: 6px; + padding: 5px 14px; + font-size: 11px; + background: fade(@cde-kungfu, 12%); + border: 1px solid fade(@cde-kungfu, 30%); + border-radius: 4px; + color: @cde-muted; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: fade(@cde-kungfu, 20%); + border-color: @cde-kungfu; + color: @cde-text; + } + } +} + +// ============================================================ +// TinJi standalone app +// ============================================================ +.cde-tinji-standalone { + .cde-tinji-app-body { + padding: 16px 12px; + display: flex; + align-items: center; + gap: 16px; + } + + .cde-tinji-display { + flex: 1 1 0; + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + } + + .cde-tinji-chinese-large { + font-size: 40px; + color: @cde-kungfu; + text-shadow: 0 0 20px fade(@cde-kungfu, 60%); + line-height: 1; + font-family: serif; + } + + .cde-tinji-label { + font-size: 11px; + font-family: "Orbitron", sans-serif; + text-transform: uppercase; + letter-spacing: 0.12em; + color: @cde-text; + opacity: 0.75; + } + + .cde-tinji-counter { + display: flex; + align-items: center; + gap: 8px; + margin: 4px 0; + } + + .cde-tinji-step { + width: 30px; + height: 30px; + background: @cde-surface2; + border: 1px solid @cde-border-hi; + border-radius: 50%; + color: @cde-text; + font-size: 18px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s; + line-height: 1; + padding: 0; + + &:hover { + background: fade(@cde-kungfu, 25%); + border-color: @cde-kungfu; + color: @cde-text; + } + } + + .cde-tinji-direct { + width: 72px; + background: transparent; + border: none; + border-bottom: 2px solid @cde-kungfu; + color: @cde-kungfu; + font-size: 36px; + font-weight: 700; + text-align: center; + text-shadow: 0 0 12px fade(@cde-kungfu, 50%); + padding: 0; + + &:focus { outline: none; } + &[disabled] { opacity: 0.7; cursor: default; } + } + + .cde-tinji-hint { + font-size: 10px; + color: @cde-muted; + text-align: center; + } + + .cde-tinji-actions { + display: flex; + gap: 6px; + margin-top: 6px; + } + + .cde-tinji-spend-btn, + .cde-tinji-reset-btn { + display: flex; + align-items: center; + gap: 5px; + padding: 6px 12px; + font-size: 11px; + font-weight: 600; + border-radius: 4px; + cursor: pointer; + transition: all 0.2s; + letter-spacing: 0.03em; + } + + .cde-tinji-spend-btn { + background: fade(@cde-kungfu, 25%); + border: 1px solid @cde-kungfu; + color: @cde-text; + + &:hover { background: fade(@cde-kungfu, 45%); border-color: lighten(@cde-kungfu, 10%); } + &[disabled] { opacity: 0.55; cursor: not-allowed; pointer-events: none; } + } + + .cde-tinji-reset-btn { + background: @cde-surface2; + border: 1px solid @cde-border-hi; + color: @cde-text; + opacity: 0.85; + + &:hover { border-color: @cde-text; opacity: 1; } + } + + .cde-tinji-visual { + width: 90px; + height: auto; + opacity: 0.85; + flex-shrink: 0; + } +} + +// Chat Tin Ji spend message +.cde-tinji-spend-msg { + display: flex; + align-items: center; + gap: 8px; + font-size: 13px; + padding: 8px 10px; + background: fade(@cde-kungfu, 18%); + border: 1px solid fade(@cde-kungfu, 35%); + border-left: 4px solid @cde-kungfu; + border-radius: 4px; + color: @cde-text; + + .cde-tinji-icon { + font-size: 18px; + color: @cde-kungfu; + text-shadow: 0 0 6px fade(@cde-kungfu, 70%); + flex-shrink: 0; + font-weight: 700; + line-height: 1; + } + + i { + color: @cde-kungfu; + font-size: 15px; + filter: drop-shadow(0 0 4px fade(@cde-kungfu, 60%)); + flex-shrink: 0; + } + + strong { + color: @cde-kungfu; + font-size: 13px; + letter-spacing: 0.02em; + } + + .cde-tinji-remain { + margin-left: auto; + font-size: 11px; + color: fade(@cde-text, 65%); + font-style: italic; + white-space: nowrap; + } +} + +// Post-roll Loksyu draw message — rich notification card +.cde-loksyu-draw-msg { + display: flex; + flex-direction: column; + gap: 5px; + font-size: 12px; + padding: 9px 11px; + background: linear-gradient(135deg, fade(@cde-item, 10%) 0%, fade(@cde-surface, 95%) 100%); + border: 1px solid fade(@cde-item, 40%); + border-left: 4px solid @cde-item; + border-radius: 5px; + color: @cde-text; + box-shadow: 0 2px 8px fade(@cde-item, 12%); + + .cde-loksyu-draw-header { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 5px; + font-size: 13px; + line-height: 1.4; + } + + .cde-loksyu-draw-aspect-icon { + width: 20px; + height: 20px; + object-fit: contain; + filter: drop-shadow(0 0 4px fade(@cde-item, 60%)); + flex-shrink: 0; + } + + .cde-loksyu-draw-user { + font-weight: 700; + color: @cde-item; + letter-spacing: 0.03em; + } + + .cde-loksyu-draw-action { + color: fade(@cde-text, 65%); + font-size: 12px; + font-style: italic; + } + + .cde-loksyu-draw-type { + font-weight: 700; + font-size: 13px; + color: #c9a227; + text-transform: uppercase; + letter-spacing: 0.05em; + text-shadow: 0 0 6px fade(#c9a227, 40%); + } + + .cde-loksyu-draw-from { + color: fade(@cde-text, 60%); + font-size: 11px; + + em { + color: @cde-item; + font-style: normal; + font-weight: 600; + } + } + + .cde-loksyu-draw-footer { + display: flex; + align-items: center; + gap: 5px; + font-size: 11px; + color: fade(@cde-text, 55%); + padding-top: 4px; + border-top: 1px solid fade(@cde-item, 20%); + + i { + color: @cde-item; + font-size: 10px; + } + + .cde-loksyu-remain { + color: @cde-item; + font-weight: 700; + } + } +} + +// Post-roll action buttons section inside a roll-result card +.cde-roll-actions { + margin-top: 10px; + padding-top: 8px; + border-top: 1px solid fade(@cde-border, 60%); + + .cde-roll-actions-title { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.08em; + color: fade(@cde-text, 50%); + margin-bottom: 6px; + display: flex; + align-items: center; + gap: 4px; + + i { font-size: 9px; } + } + + .cde-roll-actions-btns { + display: flex; + flex-wrap: wrap; + gap: 5px; + } + + .cde-roll-action-btn { + display: flex; + align-items: center; + gap: 5px; + padding: 4px 8px; + font-size: 11px; + font-family: "Courier New", Courier, monospace; + border-radius: 3px; + border: 1px solid fade(@cde-border, 80%); + background: fade(@cde-surface, 90%); + color: @cde-text; + cursor: pointer; + transition: background 0.15s, border-color 0.15s, box-shadow 0.15s; + pointer-events: auto; + line-height: 1.4; + + &:hover:not(:disabled) { + border-color: fade(@cde-item, 70%); + background: fade(@cde-item, 12%); + box-shadow: 0 0 6px fade(@cde-item, 25%); + color: @cde-item; + } + + &:disabled { + opacity: 0.35; + cursor: not-allowed; + } + + .cde-roll-action-icon { + width: 16px; + height: 16px; + object-fit: contain; + filter: drop-shadow(0 0 2px fade(@cde-item, 40%)); + } + + .cde-roll-action-label { + flex: 1; + } + + .cde-roll-action-count { + background: fade(@cde-border, 60%); + border-radius: 2px; + padding: 1px 4px; + font-size: 10px; + font-weight: 700; + min-width: 18px; + text-align: center; + } + + .cde-roll-action-tinji-char { + font-size: 14px; + line-height: 1; + color: @cde-kungfu; + text-shadow: 0 0 4px fade(@cde-kungfu, 60%); + } + + &.cde-roll-action--success { + &:hover:not(:disabled) { + border-color: fade(#c9a227, 70%); + background: fade(#c9a227, 10%); + box-shadow: 0 0 6px fade(#c9a227, 25%); + color: #c9a227; + } + } + + &.cde-roll-action--faste { + &:hover:not(:disabled) { + border-color: fade(@cde-item, 70%); + background: fade(@cde-item, 10%); + box-shadow: 0 0 6px fade(@cde-item, 25%); + color: @cde-item; + } + } + + &.cde-roll-action--tinji { + &:hover:not(:disabled) { + border-color: fade(@cde-kungfu, 70%); + background: fade(@cde-kungfu, 12%); + box-shadow: 0 0 6px fade(@cde-kungfu, 30%); + color: @cde-kungfu; + + .cde-roll-action-count { + background: fade(@cde-kungfu, 25%); + } + } + } + } +} + +.cde-loksyu-grid { + display: grid; + grid-template-columns: repeat(5, minmax(0, 1fr)); + gap: @cde-gap; + padding: @cde-gap 0; +} + +.cde-element-card { + background: @cde-surface; + border: 1px solid @cde-border; + border-radius: @cde-radius; + padding: 10px 8px; + display: flex; + flex-direction: column; + gap: 8px; + box-shadow: @cde-shadow-sm; + transition: border-color 0.15s, box-shadow 0.15s; + + &:hover { box-shadow: @cde-shadow; } +} + +// Per-element color theming using LESS variables +.cde-element--wood { border-top: 3px solid @wu-green; .cde-element-name { color: @wu-green; text-shadow: 0 0 6px fade(@wu-green, 50%); } .cde-element-img { filter: drop-shadow(0 0 4px @wu-green); } .cde-element-polarity--yang { border-left: 2px solid fade(@wu-green, 70%); } } +.cde-element--fire { border-top: 3px solid @wu-red; .cde-element-name { color: @wu-red; text-shadow: 0 0 6px fade(@wu-red, 50%); } .cde-element-img { filter: drop-shadow(0 0 4px @wu-red); } .cde-element-polarity--yang { border-left: 2px solid fade(@wu-red, 70%); } } +.cde-element--earth { border-top: 3px solid @wu-brown; .cde-element-name { color: @wu-brown; text-shadow: 0 0 6px fade(@wu-brown, 50%); } .cde-element-img { filter: drop-shadow(0 0 4px @wu-brown); } .cde-element-polarity--yang { border-left: 2px solid fade(@wu-brown, 70%); } } +.cde-element--metal { border-top: 3px solid @wu-gray; .cde-element-name { color: @wu-gray; text-shadow: 0 0 6px fade(@wu-gray, 50%); } .cde-element-img { filter: drop-shadow(0 0 4px @wu-gray); } .cde-element-polarity--yang { border-left: 2px solid fade(@wu-gray, 70%); } } +.cde-element--water { border-top: 3px solid @wu-blue; .cde-element-name { color: @wu-blue; text-shadow: 0 0 6px fade(@wu-blue, 50%); } .cde-element-img { filter: drop-shadow(0 0 4px @wu-blue); } .cde-element-polarity--yang { border-left: 2px solid fade(@wu-blue, 70%); } } + +// Input focus per element +.cde-element--wood .cde-element-polarity input:focus { border-bottom-color: @wu-green; box-shadow: 0 1px 0 0 @wu-green; } +.cde-element--fire .cde-element-polarity input:focus { border-bottom-color: @wu-red; box-shadow: 0 1px 0 0 @wu-red; } +.cde-element--earth .cde-element-polarity input:focus { border-bottom-color: @wu-brown; box-shadow: 0 1px 0 0 @wu-brown; } +.cde-element--metal .cde-element-polarity input:focus { border-bottom-color: @wu-gray; box-shadow: 0 1px 0 0 @wu-gray; } +.cde-element--water .cde-element-polarity input:focus { border-bottom-color: @wu-blue; box-shadow: 0 1px 0 0 @wu-blue; } + +.cde-element-header { + display: flex; + flex-direction: column; + align-items: center; + gap: 6px; + text-align: center; +} + +.cde-element-img { + width: 36px; + height: 36px; + object-fit: contain; + filter: drop-shadow(0 0 4px var(--el-color)); +} + +.cde-element-titles { + display: flex; + flex-direction: column; + gap: 2px; +} + +.cde-element-name { + font-family: "Averia", sans-serif; + font-size: 11px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; // overridden per-element below + white-space: nowrap; +} + +.cde-element-qualities { + font-size: 9px; + color: @cde-muted; + font-style: italic; + line-height: 1.3; + text-align: center; + display: none; // hidden on small width, shown via media query if needed +} + +.cde-element-values { + display: flex; + flex-direction: column; + gap: 4px; +} + +.cde-element-polarity { + display: flex; + align-items: center; + gap: 6px; + padding: 3px 6px; + border-radius: 4px; + background: fade(@cde-bg, 60%); + + &--yin { border-left: 2px solid fade(@cde-muted, 40%); } +} + +.cde-polarity-label { + font-size: 9px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.06em; + color: @cde-muted; + white-space: nowrap; + min-width: 32px; +} + +.cde-element-polarity input { + width: 40px; + border: none; + border-bottom: 1px solid @cde-border; + background: transparent; + color: @cde-text; + font-size: 14px; + font-weight: 700; + text-align: center; + padding: 2px 0; + outline: none; +} + +.cde-loksyu-visual-row { + display: flex; + justify-content: center; + padding-top: @cde-gap; + + .loksyu-visual { + max-width: 100%; + height: auto; + opacity: 0.7; + border-radius: @cde-radius; + border: 1px solid @cde-border; + } +} + +// ============================================================ +// Tin Ji — enhanced display +// ============================================================ +.cde-tinji-layout { + display: flex; + align-items: center; + justify-content: space-between; + gap: @cde-gap * 2; + padding: @cde-gap; + flex-wrap: wrap; +} + +.cde-tinji-main { + display: flex; + flex-direction: column; + align-items: center; + gap: 10px; + flex: 1; +} + +.cde-tinji-chinese { + font-size: 48px; + color: @cde-supernatural; + text-shadow: 0 0 20px fade(@cde-supernatural, 60%); + line-height: 1; + letter-spacing: 0.1em; +} + +.cde-tinji-subtitle { + font-family: "Averia", sans-serif; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.2em; + color: @cde-muted; +} + +.cde-tinji-value-wrapper { + display: flex; + align-items: center; + justify-content: center; + + .cde-tinji-input { + width: 80px; + text-align: center; + font-size: 36px; + font-weight: 700; + color: @cde-supernatural; + text-shadow: 0 0 12px fade(@cde-supernatural, 50%); + border: none; + border-bottom: 2px solid @cde-supernatural; + background: transparent; + outline: none; + padding: 4px 0; + + &:focus { + border-bottom-color: lighten(@cde-supernatural, 15%); + box-shadow: 0 2px 0 0 fade(@cde-supernatural, 60%); + } + } +} + +.cde-tinji-hint { + font-size: 10px; + font-family: "Averia", sans-serif; + color: @cde-muted; + text-transform: uppercase; + letter-spacing: 0.12em; + text-align: center; +} + +.tinji-visual { + max-height: 280px; + max-width: 200px; + border-radius: @cde-radius; + border: 1px solid @cde-border; + box-shadow: @cde-shadow; +} + +// ============================================================ +// Weapon roll button + dialog +// ============================================================ + +.cde-weapon-roll-btn { + color: @cde-weapon !important; + &:hover { text-shadow: 0 0 6px fade(@cde-weapon, 60%); } +} + +.cde-item-damage { + color: @cde-weapon; + font-weight: 700; +} + +.cde-weapon-prompt { + // Weapon info bar at top of dialog + .cde-weapon-info-bar { + display: flex; + align-items: center; + gap: 10px; + padding: 10px 12px; + background: fade(@cde-weapon, 8%); + border: 1px solid fade(@cde-weapon, 30%); + border-radius: @cde-radius; + margin-bottom: @cde-gap; + + .cde-weapon-aspect-icon { + width: 36px; + height: 36px; + object-fit: contain; + } + + .cde-weapon-info-text { + flex: 1; + display: flex; + flex-direction: column; + gap: 2px; + } + + .cde-weapon-info-name { + font-size: 14px; + font-weight: 700; + font-family: "Averia", sans-serif; + color: @cde-text; + } + + .cde-weapon-info-meta { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + font-family: "Averia", sans-serif; + } + + .cde-weapon-info-badge { + font-size: 20px; + color: fade(@cde-weapon, 50%); + } + } +} + +// Weapon damage result in chat card +.cde-rr-weapon-damage { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 12px; + background: fade(@cde-weapon, 10%); + border-top: 1px solid fade(@cde-weapon, 30%); + border-bottom: 1px solid fade(@cde-weapon, 30%); + margin: 4px 0; + + .cde-rr-weapon-icon { + font-size: 16px; + color: @cde-weapon; + text-shadow: 0 0 6px fade(@cde-weapon, 50%); + flex-shrink: 0; + } + + .cde-rr-weapon-text { + display: flex; + flex-direction: column; + gap: 2px; + } + + .cde-rr-weapon-name { + font-size: 11px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + } + + .cde-rr-weapon-calc { + font-size: 12px; + color: @cde-text; + } + + .cde-rr-weapon-total { + font-size: 16px; + font-weight: 900; + color: @cde-weapon; + text-shadow: 0 0 8px fade(@cde-weapon, 60%); + margin: 0 2px; + } + + .cde-rr-weapon-unit { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.06em; + color: @cde-muted; + } +} + +// ============================================================ +// Magics tab — components grid + magic cards +// ============================================================ + +.cde-section-label { + display: flex; + align-items: center; + gap: 8px; + font-size: 10px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.12em; + color: @cde-muted; + border-bottom: 1px solid @cde-border; + padding-bottom: 6px; + margin-bottom: 10px; + + i { font-size: 11px; } + + &--top-margin { margin-top: 18px; } +} + +// 2-column grid for the 10 components +.cde-components-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 6px; + margin-bottom: 10px; +} + +.cde-component-cell { + display: flex; + align-items: center; + gap: 8px; + background: @cde-surface; + border: 1px solid @cde-border; + border-radius: @cde-radius; + padding: 4px 8px; + + &:hover { border-color: @cde-border-hi; } +} + +.cde-component-die { + width: 28px; + height: 28px; + object-fit: contain; + flex-shrink: 0; + opacity: 0.85; +} + +.cde-component-input { + flex: 1; + background: transparent; + border: none; + border-bottom: 1px solid transparent; + color: @cde-text; + font-size: 12px; + padding: 2px 0; + + &:focus { + outline: none; + border-bottom-color: @cde-spell; + } + + &::placeholder { color: @cde-muted; font-style: italic; font-size: 11px; } +} + +.cde-component-random-row { + display: flex; + justify-content: center; + margin-bottom: 4px; +} + +.cde-btn-random-component { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 6px 16px; + background: fade(@cde-spell, 8%); + border: 1px solid fade(@cde-spell, 35%); + border-radius: @cde-radius; + color: @cde-spell; + font-family: "Averia", sans-serif; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.08em; + cursor: pointer; + transition: background 0.15s, box-shadow 0.15s; + + i { font-size: 14px; } + + &:hover { + background: fade(@cde-spell, 16%); + box-shadow: 0 0 8px fade(@cde-spell, 30%); + } +} + +// === Magic type cards === +.cde-magic-card { + background: @cde-surface; + border: 1px solid @cde-border; + border-left: 3px solid @cde-border-hi; + border-radius: @cde-radius; + margin-bottom: 8px; + overflow: hidden; + box-shadow: @cde-shadow-sm; +} + +.cde-magic-header { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 10px; +} + +.cde-magic-aspect-icon { + width: 32px; + height: 32px; + object-fit: contain; + flex-shrink: 0; +} + +.cde-magic-info { + flex: 1; + display: flex; + flex-direction: column; + gap: 1px; + min-width: 0; +} + +.cde-magic-name { + font-family: "Averia", sans-serif; + font-size: 13px; + font-weight: 700; + color: @cde-text; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.cde-magic-aspect-name { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + font-family: "Averia", sans-serif; +} + +.cde-magic-value-input { + width: 52px; + flex-shrink: 0; +} + +.cde-magic-roll-btn { + width: 30px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + border-radius: @cde-radius; + cursor: pointer; + transition: background 0.15s; + flex-shrink: 0; + + i { font-size: 15px; } + + &:hover { background: fade(@cde-spell, 15%); } +} + +.cde-magic-toggle { + width: 28px; + height: 28px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + color: @cde-muted; + flex-shrink: 0; + + input[type="checkbox"] { display: none; } + + i { font-size: 11px; transition: color 0.15s; } + + &:hover i { color: @cde-text; } +} + +// Specialities list +.cde-magic-specialities { + border-top: 1px solid @cde-border; + padding: 4px 0; +} + +.cde-magic-spec-row { + display: flex; + align-items: center; + gap: 8px; + padding: 5px 10px 5px 42px; // indent aligned with aspect icon + opacity: 0.55; + transition: opacity 0.12s, background 0.12s; + + &:hover { opacity: 1; background: fade(@cde-border-hi, 30%); } + &--active { opacity: 1; } +} + +.cde-magic-spec-check-label { + display: flex; + align-items: center; + cursor: pointer; + flex-shrink: 0; + + input[type="checkbox"] { display: none; } + + .cde-spec-checkbox-ui { + width: 14px; + height: 14px; + border: 1px solid @cde-muted; + border-radius: 3px; + display: inline-flex; + align-items: center; + justify-content: center; + transition: border-color 0.12s, background 0.12s; + } + + input:checked + .cde-spec-checkbox-ui { + background: @cde-spell; + border-color: @cde-spell; + + &::after { + content: "✓"; + font-size: 9px; + color: @cde-bg; + line-height: 1; + } + } +} + +.cde-magic-spec-element { + width: 18px; + height: 18px; + object-fit: contain; + flex-shrink: 0; +} + +.cde-magic-spec-polarity { + font-size: 10px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.06em; + color: @cde-muted; + width: 42px; + flex-shrink: 0; + + &.icon-yin { color: @cde-supernatural; } + &.icon-yang { color: @cde-item; } + &.icon-yinyang { color: @cde-spell; } +} + +.cde-magic-spec-name { + flex: 1; + font-size: 12px; + color: @cde-text; + font-family: "Averia", sans-serif; +} + +.cde-magic-spec-roll-btn { + width: 26px; + height: 26px; + display: flex; + align-items: center; + justify-content: center; + border-radius: @cde-radius; + cursor: pointer; + color: @cde-muted; + flex-shrink: 0; + transition: color 0.15s, background 0.15s; + + i { font-size: 12px; } + + &:hover { color: @cde-spell; background: fade(@cde-spell, 12%); } +} + +// Per-magic accent colors using direct Wu Xing LESS variables +.cde-magic--internalcinnabar { + border-left-color: @wu-gray; + .cde-magic-name { color: lighten(@wu-gray, 20%); } + .cde-magic-roll-btn i { color: @wu-gray; } +} +.cde-magic--alchemy { + border-left-color: @wu-blue; + .cde-magic-name { color: lighten(@wu-blue, 15%); } + .cde-magic-roll-btn i { color: @wu-blue; } +} +.cde-magic--masteryoftheway { + border-left-color: @wu-brown; + .cde-magic-name { color: lighten(@wu-brown, 20%); } + .cde-magic-roll-btn i { color: lighten(@wu-brown, 10%); } +} +.cde-magic--exorcism { + border-left-color: @wu-red; + .cde-magic-name { color: lighten(@wu-red, 20%); } + .cde-magic-roll-btn i { color: @wu-red; } +} +.cde-magic--geomancy { + border-left-color: @wu-green; + .cde-magic-name { color: lighten(@wu-green, 15%); } + .cde-magic-roll-btn i { color: @wu-green; } +} + +// ===================================================================== +// GRIMOIRE (spell list integrated in magic discipline cards) +// ===================================================================== + +.cde-grimoire-section { + border-top: 1px dashed fade(@cde-border, 60%); + margin-top: 6px; + padding-top: 6px; +} + +.cde-grimoire-header { + display: flex; + align-items: center; + gap: 6px; + padding: 4px 10px; + font-size: 10px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.1em; + color: @cde-muted; + + i { font-size: 10px; color: @cde-spell; } + + span { flex: 1; } +} + +.cde-grimoire-add { + display: flex; + align-items: center; + justify-content: center; + width: 20px; + height: 20px; + border-radius: 3px; + cursor: pointer; + color: @cde-muted; + transition: color 0.12s, background 0.12s; + + i { font-size: 10px; } + + &:hover { color: @cde-spell; background: fade(@cde-spell, 15%); } +} + +.cde-grimoire-list { + list-style: none; + margin: 0; + padding: 0; +} + +.cde-grimoire-entry { + display: flex; + align-items: center; + gap: 6px; + padding: 4px 10px 4px 14px; + border-bottom: 1px solid fade(@cde-border, 40%); + transition: background 0.1s; + + &:last-child { border-bottom: none; } + + &:hover { + background: fade(@cde-border, 25%); + + .cde-grimoire-controls { opacity: 1; } + } +} + +.cde-grimoire-img { + width: 18px; + height: 18px; + object-fit: contain; + border-radius: 2px; + flex-shrink: 0; +} + +.cde-grimoire-name { + flex: 1; + font-size: 12px; + color: @cde-text; + font-family: "Averia", sans-serif; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.cde-grimoire-meta { + display: flex; + align-items: center; + gap: 8px; + font-size: 10px; + color: @cde-muted; + flex-shrink: 0; + + em { + color: @cde-spell; + font-style: normal; + font-size: 10px; + max-width: 80px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +} + +.cde-grimoire-diff, .cde-grimoire-hei { + display: flex; + align-items: center; + gap: 3px; + + i { font-size: 9px; } +} + +.cde-grimoire-diff { color: @cde-muted; } +.cde-grimoire-hei { color: @cde-kungfu; } + +.cde-grimoire-controls { + display: flex; + align-items: center; + gap: 4px; + opacity: 0; + transition: opacity 0.12s; + flex-shrink: 0; + + a { + display: flex; + align-items: center; + justify-content: center; + width: 18px; + height: 18px; + border-radius: 3px; + color: @cde-muted; + cursor: pointer; + transition: color 0.12s, background 0.12s; + + i { font-size: 10px; } + + &:hover { color: @cde-text; background: fade(@cde-border-hi, 30%); } + } +} + +.cde-grimoire-empty { + padding: 4px 14px 8px; + font-size: 11px; + color: @cde-muted; + font-style: italic; + margin: 0; +} + +// ===================================================================== +// KUNG-FU CARDS (actor tab redesign) +// ===================================================================== + +.cde-kf-add-row { + display: flex; + justify-content: flex-end; + padding: 4px 0 8px; +} + +.cde-kf-add-btn { + display: inline-flex; + align-items: center; + gap: 5px; + font-size: 11px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + cursor: pointer; + padding: 4px 10px; + border-radius: @cde-radius; + border: 1px solid @cde-border; + transition: color 0.12s, border-color 0.12s, background 0.12s; + + i { font-size: 10px; } + + &:hover { color: @cde-kungfu; border-color: @cde-kungfu; background: fade(@cde-kungfu, 8%); } +} + +.cde-kf-card { + border: 1px solid @cde-border; + border-left: 3px solid @cde-kungfu; + border-radius: @cde-radius; + background: fade(@cde-surface, 70%); + margin-bottom: 10px; + overflow: hidden; + transition: box-shadow 0.15s; + + &:hover { box-shadow: 0 0 8px fade(@cde-kungfu, 20%); } + + &.cde-kf--metal { border-left-color: @wu-gray; } + &.cde-kf--eau { border-left-color: @wu-blue; } + &.cde-kf--terre { border-left-color: lighten(@wu-brown, 10%); } + &.cde-kf--feu { border-left-color: @wu-red; } + &.cde-kf--bois { border-left-color: @wu-green; } +} + +.cde-kf-header { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 10px; + + &:hover .cde-kf-controls { opacity: 1; } +} + +.cde-kf-aspect-icon { + width: 26px; + height: 26px; + object-fit: contain; + flex-shrink: 0; +} + +.cde-kf-orient-icon { + width: 18px; + height: 18px; + object-fit: contain; + flex-shrink: 0; + opacity: 0.75; +} + +.cde-kf-info { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; +} + +.cde-kf-name { + font-size: 14px; + font-weight: 700; + font-family: "Averia", sans-serif; + color: @cde-text; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.cde-kf-meta { + font-size: 10px; + color: @cde-muted; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.06em; + + em { color: @cde-text; font-style: normal; } +} + +.cde-kf-roll-btn { + width: 30px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + border-radius: @cde-radius; + cursor: pointer; + color: @cde-muted; + flex-shrink: 0; + transition: color 0.15s, background 0.15s; + + i { font-size: 14px; } + + &:hover { color: @cde-kungfu; background: fade(@cde-kungfu, 15%); } +} + +.cde-kf-controls { + display: flex; + align-items: center; + gap: 4px; + opacity: 0; + transition: opacity 0.12s; + flex-shrink: 0; + + a { + display: flex; + align-items: center; + justify-content: center; + width: 22px; + height: 22px; + border-radius: 3px; + color: @cde-muted; + cursor: pointer; + transition: color 0.12s, background 0.12s; + + i { font-size: 11px; } + + &:hover { color: @cde-text; background: fade(@cde-border-hi, 30%); } + } +} + +.cde-kf-style-row { + display: flex; + align-items: baseline; + gap: 8px; + padding: 4px 12px 6px 44px; + border-top: 1px solid fade(@cde-border, 60%); + background: fade(@cde-surface, 40%); +} + +.cde-kf-style-label { + font-size: 10px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-kungfu; + flex-shrink: 0; + + i { font-size: 9px; } +} + +.cde-kf-style-text { + font-size: 11px; + color: @cde-text; + font-family: "Averia", sans-serif; + font-style: italic; +} + +.cde-kf-techniques { + list-style: none; + margin: 0; + padding: 0; + border-top: 1px solid fade(@cde-border, 50%); +} + +.cde-kf-tech { + display: flex; + align-items: center; + gap: 6px; + padding: 5px 12px 5px 44px; + border-bottom: 1px solid fade(@cde-border, 30%); + opacity: 0.5; + transition: opacity 0.1s, background 0.1s; + + &:last-child { border-bottom: none; } + &--mastered { opacity: 1; } + &:hover { background: fade(@cde-border, 20%); opacity: 1; } +} + +.cde-kf-tech-mastered { + font-size: 11px; + flex-shrink: 0; + width: 14px; + text-align: center; + + .cde-kf-tech--mastered & { color: @cde-kungfu; } + .cde-kf-tech:not(.cde-kf-tech--mastered) & { color: @cde-muted; } +} + +.cde-act-badge { + font-size: 9px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.05em; + padding: 2px 5px; + border-radius: 3px; + flex-shrink: 0; + max-width: 110px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + border: 1px solid currentColor; + + &.cde-act--action-attack { color: @wu-red; background: fade(@wu-red, 10%); } + &.cde-act--action-defense { color: @wu-blue; background: fade(@wu-blue, 10%); } + &.cde-act--action-aid { color: @wu-green; background: fade(@wu-green, 10%); } + &.cde-act--action-attack-defense { color: @wu-gray; background: fade(@wu-gray, 12%); } + &.cde-act--reaction { color: @wu-brown; background: fade(@wu-brown, 12%); } + &.cde-act--dice { color: @cde-spell; background: fade(@cde-spell, 10%); } + &.cde-act--damage-inflicted { color: @cde-weapon; background: fade(@cde-weapon, 10%); } + &.cde-act--damage-received { color: @cde-muted; background: fade(@cde-border, 20%); } +} + +.cde-kf-tech-name { + flex: 1; + font-size: 12px; + color: @cde-text; + font-family: "Averia", sans-serif; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + em { color: @cde-muted; } +} + +.cde-kf-empty { + padding: 16px; + text-align: center; + font-size: 12px; + color: @cde-muted; + font-style: italic; +} + +// Random component chat message +.cde-chat-random-component { + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; + padding: 8px 12px; +} + +.cde-chat-component-label { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.1em; + color: @cde-muted; + font-family: "Averia", sans-serif; +} + +.cde-chat-component-value { + font-size: 16px; + font-weight: 700; + color: @cde-spell; + text-shadow: 0 0 8px fade(@cde-spell, 50%); +} + +// Legacy tabs (actor sheets still use cde-tabs) +.cde-tabs { + margin-top: @cde-gap; + border-bottom: 1px solid @cde-border; + + .item { + color: @cde-muted; + padding: 8px 12px; + font-size: 11px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + + &:hover { color: @cde-text; } + + &.active { + color: @cde-item; + background: @cde-surface; + border: 1px solid @cde-border; + border-bottom: 1px solid @cde-surface; + border-radius: @cde-radius @cde-radius 0 0; + } + } +} + + +/* ============================================= + Global UI Rules + =============================================*/ + +#logo { + content: url("/systems/fvtt-chroniques-de-l-etrange/images/logo_jeu.webp"); + width: 100px; + height: 100px; + margin-left: 7px; + margin-top: -2px; +} + +#pause > img { + content: url("/systems/fvtt-chroniques-de-l-etrange/images/wheel.webp"); + height: 192px; + width: 192px; + top: -45px; + left: calc(50% - 96px); +} + +#pause.paused { + animation: none; +} + +a.compendium-name, +a.entry-name, +strong.ellipsis { + font-family: "Averia"; +} + + + +/* concerne les pages de journaux */ + +.journal-header input { + font-family: "Averia"; +} + +.journal-entry-page h1 { + font-family: "Averia"; + text-align: center; + color:hsla(249, 66%, 58%, 0.874); + border-bottom: 1px solid orange; + border-top: 1px solid orange; + border-top: 1px solid orange; + +} + +.journal-entry-page h2 { + font-family: "Averia"; + color:orange; + border-bottom: 0px; + border-top: 1px solid orange; +} + +.journal-entry-page h3, +.journal-entry-page h4, +.journal-entry-page h5, +.journal-entry-page h6 { + font-family: "Averia"; + color:hsla(249, 66%, 58%, 0.874); + border-bottom: 0px; +} + +/* concerne le Tchat */ + +#interface .chat-message .message-header img { + max-width: 80px; + border-radius: 5px; + border: 0.5px solid black; + /* max-width: 50px; */ + /* max-height: 50px; */ + margin-right: 4px; +} + +#interface .chat-message .message-header .message-sender { + width: 100px; +} + +// ============================================================ +// Three Treasures partial layout +// ============================================================ +.cde-flex-center-text { + display: flex; + justify-content: center; + align-items: center; + text-align: center; +} + +.cde-flex-center { + display: flex; + justify-content: center; + align-items: center; +} + +// ============================================================ +// Circle input — replaces cercle.webp overlay approach +// ============================================================ +.cde-circle-input { + width: 44px !important; + height: 44px !important; + border-radius: 50%; + border: 2px solid @cde-border-hi; + background: @cde-surface; + color: @cde-text; + text-align: center; + font-size: 1.1rem; + font-weight: 700; + padding: 0; + flex-shrink: 0; + display: inline-block !important; + line-height: 40px; + vertical-align: middle; + box-sizing: border-box; + + &:focus { + outline: none; + border-color: @cde-item; + box-shadow: 0 0 8px fade(@cde-item, 40%); + } + + &.cde-circle-sm { + width: 32px !important; + height: 32px !important; + font-size: 0.85rem; + line-height: 28px; + } +} + +// ============================================================ +// Skills table +// ============================================================ +.cde-skills-table { + width: 100%; + border-collapse: collapse; + + tr { border-bottom: 1px solid @cde-border; } + tr:last-child { border-bottom: none; } + + td { + padding: 3px 4px; + vertical-align: middle; + } + + td.click, td.noclick { + width: 30px; + min-width: 30px; + text-align: center; + cursor: pointer; + + &:hover img { filter: drop-shadow(0 0 5px @cde-item); } + } + + td.noclick { cursor: default; opacity: 0.4; } + + .cde-skill-label { + white-space: nowrap; + font-size: 0.8rem; + padding-right: 8px; + } + + .cde-val-cell { + width: 52px; + min-width: 52px; + text-align: center; + padding: 4px; + } + + .cde-spec-cell { + width: 100%; + input[type="text"] { width: 100%; } + } + + .cde-bonus-cell { + white-space: nowrap; + font-family: monospace; + font-size: 0.65rem; + color: @cde-muted; + padding: 0 6px; + } + + .cde-check-cell { width: 22px; text-align: center; } +} + +// ============================================================ +// Three Treasures layout (HEI / SAN-ZING / PTAO) +// ============================================================ +.cde-tt-block { + margin-bottom: 12px; + + .cde-tt-row { + display: flex; + align-items: center; + justify-content: center; + gap: 10px; + } + + .cde-tt-labels { + margin-bottom: 4px; + span { + width: 52px; + text-align: center; + font-family: "Averia", sans-serif; + font-size: 0.6rem; + text-transform: uppercase; + color: @cde-muted; + } + .cde-tt-center { width: 44px; } + } + + .cde-tt-yinyang { + width: 44px; + height: 44px; + opacity: 0.8; + } +} + +.cde-tt-sanzing { + margin-bottom: 12px; + + .cde-tt-sz-header, + .cde-tt-sz-row { + display: grid; + grid-template-columns: 36px 48px 1fr 48px 36px; + align-items: center; + gap: 6px; + padding: 4px 8px; + } + + .cde-tt-sz-header { + font-family: "Averia", sans-serif; + font-size: 0.6rem; + text-transform: uppercase; + color: @cde-muted; + text-align: center; + } + + .cde-tt-sz-row { + border-top: 1px solid @cde-border; + + .cde-circle-input { justify-self: center; } + } + + .cde-tt-level { + text-align: center; + font-family: monospace; + font-size: 0.75rem; + font-weight: 700; + color: @cde-muted; + } +} + +// ============================================================ +// Ng Hang — Aspects grid +// ============================================================ +.cde-aspects-header { + display: flex; + justify-content: center; + margin-bottom: 10px; + + .cde-aspects-logo { + max-height: 48px; + opacity: 0.7; + } +} + +.cde-aspects-grid { + display: flex; + flex-wrap: wrap; + gap: 8px; + justify-content: center; + margin-bottom: 12px; +} + +.cde-aspect-card { + display: flex; + flex-direction: column; + align-items: center; + gap: 6px; + padding: 10px 8px; + border-radius: 4px; + background: @cde-surface; + border: 1px solid @cde-border; + min-width: 88px; + flex: 1 1 88px; + max-width: 120px; + + .cde-aspect-top { + display: flex; + flex-direction: column; + align-items: center; + gap: 3px; + } + + .cde-aspect-gif { width: 36px; height: 36px; } + + .cde-aspect-name { + font-family: "Averia"; + font-size: 0.8rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.08em; + } + + .cde-aspect-roll { + display: flex; + align-items: center; + gap: 6px; + + .cde-roll-trigger { + cursor: pointer; + display: flex; + align-items: center; + + &:hover img { filter: drop-shadow(0 0 5px currentColor); } + } + } + + .cde-aspect-qual { + font-size: 0.6rem; + color: @cde-muted; + text-align: center; + line-height: 1.3; + } + + &.cde-aspect--fire { + border-color: @cde-kungfu; + .cde-aspect-name { color: @cde-kungfu; } + .cde-circle-input:focus { border-color: @cde-kungfu; box-shadow: 0 0 6px @cde-kungfu; } + } + + &.cde-aspect--wood { + border-color: #44bb44; + .cde-aspect-name { color: #55cc55; } + .cde-circle-input:focus { border-color: #55cc55; box-shadow: 0 0 6px #55cc55; } + } + + &.cde-aspect--earth { + border-color: #aa7722; + .cde-aspect-name { color: #cc9933; } + .cde-circle-input:focus { border-color: #cc9933; box-shadow: 0 0 6px #cc9933; } + } + + &.cde-aspect--water { + border-color: @cde-spell; + .cde-aspect-name { color: @cde-spell; } + .cde-circle-input:focus { border-color: @cde-spell; box-shadow: 0 0 6px @cde-spell; } + } + + &.cde-aspect--metal { + border-color: @cde-muted; + .cde-aspect-name { color: @cde-text; } + .cde-circle-input:focus { border-color: @cde-item; box-shadow: 0 0 6px @cde-item; } + } +} + +.cde-nghang-diagram { + display: flex; + justify-content: center; + margin-top: 8px; + + img { + max-width: 100%; + max-height: 180px; + opacity: 0.45; + border-radius: 4px; + cursor: zoom-in; + transition: opacity 0.2s ease, box-shadow 0.2s ease; + + &:hover { + opacity: 0.85; + box-shadow: 0 0 12px @cde-border-hi; + } + } +} + +.img-die-sm { + width: 27px !important; + height: 27px !important; + flex-shrink: 0; +} + +// ============================================================ +// Magics partial layout +// ============================================================ +.cde-magics-table { + td.image { + width: 2.2%; + &.td-die { width: 2%; } + } + td.value { width: 25%; } + td.td-spacer { width: 2.2%; } +} + +.chancethrow { + display: flex; + justify-content: center; + align-items: center; +} + +// ============================================================ +// Actor sheet item lists +// ============================================================ +.cde-item-group-label { + font-family: "Averia", sans-serif; + font-size: 0.65rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.15em; + color: @cde-muted; + padding: 2px 6px; + border-left: 2px solid @cde-border-hi; + margin: 8px 0 2px; + flex-shrink: 0; +} + +ol.item-list { + list-style: none; + margin: 0 0 4px; + padding: 0; + + li.item { + display: flex; + align-items: center; + gap: 8px; + padding: 3px 6px; + border-radius: 4px; + background: @cde-surface; + border: 1px solid @cde-border; + margin-bottom: 2px; + + img { border: none; border-radius: 3px; flex-shrink: 0; } + + h4.item-name { flex: 1 1 0; margin: 0; font-size: 13px; color: @cde-text; } + + .cde-item-stat { + font-family: monospace; + font-size: 11px; + color: @cde-muted; + } + + .item-controls { + display: flex; + gap: 4px; + flex-shrink: 0; + + a.item-control { + color: @cde-muted; + &:hover { color: @cde-text; } + } + } + } +} + +// ============================================================ +// Roll Prompt Dialogs (.cde-roll-prompt) +// ============================================================ + +.cde-roll-prompt { + background: @cde-bg; + color: @cde-text; + font-family: "Averia", sans-serif; + padding: 12px 14px; + + &.cde-roll-prompt--magic { + min-width: 340px; + } + + .cde-roll-header { + display: flex; + justify-content: space-between; + align-items: center; + padding-bottom: 8px; + margin-bottom: 10px; + border-bottom: 1px solid @cde-border; + } + + .cde-roll-title { + font-size: 13px; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; + color: @cde-text; + } + + .cde-roll-dice-count { + font-size: 36px; + font-weight: 900; + color: @cde-item; + line-height: 1; + text-align: center; + margin: 4px 0 8px; + text-shadow: 0 0 12px fade(@cde-item, 60%); + + .cde-roll-dice-label { + font-size: 14px; + font-weight: 600; + color: @cde-muted; + margin-left: 4px; + } + } + + .cde-roll-section { + margin-bottom: 8px; + + &.cde-roll-section--separator { + padding-bottom: 10px; + margin-bottom: 10px; + border-bottom: 1px dashed @cde-border; + } + } + + .cde-roll-section-title { + font-size: 11px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.1em; + color: @cde-muted; + margin: 0 0 6px; + } + + .cde-roll-fields { + display: flex; + flex-direction: column; + gap: 5px; + } + + .cde-roll-field { + display: flex; + align-items: center; + gap: 8px; + + label { + flex: 0 0 160px; + font-size: 11px; + color: @cde-muted; + text-transform: uppercase; + letter-spacing: 0.05em; + } + + select, + .cde-roll-input { + flex: 1; + background: @cde-surface; + border: none; + border-bottom: 1px solid @cde-border; + color: @cde-text; + font-family: monospace; + font-size: 13px; + padding: 3px 6px; + border-radius: 2px; + + &:focus { + outline: none; + border-bottom-color: @cde-item; + box-shadow: 0 1px 0 0 @cde-item; + } + } + + select option { + background: @cde-surface; + color: @cde-text; + } + } + + .cde-roll-hint { + font-size: 10px; + color: @cde-muted; + margin: 4px 0 0; + font-style: italic; + } +} + +// ============================================================ +// Dice Roll Result in Chat (.cde-roll-result) +// ============================================================ + +// Wu Xing aspect color + icon custom properties +// Row order: [successes, auspicious, noxious, loksyu, tinji] +// Colors: wood=#41a436 fire=#cd171a earth=#a85747 metal=#70706e water=#009fe2 + +@wu-green: #41a436; +@wu-red: #cd171a; +@wu-brown: #a85747; +@wu-gray: #70706e; +@wu-blue: #009fe2; + +@wu-img-bois: ~"url(/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.webp)"; +@wu-img-feu: ~"url(/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.webp)"; +@wu-img-terre: ~"url(/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.webp)"; +@wu-img-metal: ~"url(/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.webp)"; +@wu-img-eau: ~"url(/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.webp)"; + +// Wu Xing aspect custom properties (accent color + icon per aspect) +// Sets --rr-accent on the card root, plus per-row --rr-color/--rr-icon +[data-aspect="wood"] { + --rr-accent: @wu-green; + --rr-accent-bg: fade(@wu-green, 12%); + .cde-rr-row--auspicious { --rr-color: @wu-red; --rr-icon: @wu-img-feu; } + .cde-rr-row--noxious { --rr-color: @wu-blue; --rr-icon: @wu-img-eau; } + .cde-rr-row--loksyu { --rr-color: @wu-brown; --rr-icon: @wu-img-terre; } + .cde-rr-row--tinji { --rr-color: @wu-gray; --rr-icon: @wu-img-metal; } +} +[data-aspect="fire"] { + --rr-accent: @wu-red; + --rr-accent-bg: fade(@wu-red, 12%); + .cde-rr-row--auspicious { --rr-color: @wu-brown; --rr-icon: @wu-img-terre; } + .cde-rr-row--noxious { --rr-color: @wu-green; --rr-icon: @wu-img-bois; } + .cde-rr-row--loksyu { --rr-color: @wu-gray; --rr-icon: @wu-img-metal; } + .cde-rr-row--tinji { --rr-color: @wu-blue; --rr-icon: @wu-img-eau; } +} +[data-aspect="earth"] { + --rr-accent: @wu-brown; + --rr-accent-bg: fade(@wu-brown, 12%); + .cde-rr-row--auspicious { --rr-color: @wu-gray; --rr-icon: @wu-img-metal; } + .cde-rr-row--noxious { --rr-color: @wu-red; --rr-icon: @wu-img-feu; } + .cde-rr-row--loksyu { --rr-color: @wu-blue; --rr-icon: @wu-img-eau; } + .cde-rr-row--tinji { --rr-color: @wu-green; --rr-icon: @wu-img-bois; } +} +[data-aspect="metal"] { + --rr-accent: @wu-gray; + --rr-accent-bg: fade(@wu-gray, 16%); + .cde-rr-row--auspicious { --rr-color: @wu-blue; --rr-icon: @wu-img-eau; } + .cde-rr-row--noxious { --rr-color: @wu-brown; --rr-icon: @wu-img-terre; } + .cde-rr-row--loksyu { --rr-color: @wu-green; --rr-icon: @wu-img-bois; } + .cde-rr-row--tinji { --rr-color: @wu-red; --rr-icon: @wu-img-feu; } +} +[data-aspect="water"] { + --rr-accent: @wu-blue; + --rr-accent-bg: fade(@wu-blue, 12%); + .cde-rr-row--auspicious { --rr-color: @wu-green; --rr-icon: @wu-img-bois; } + .cde-rr-row--noxious { --rr-color: @wu-gray; --rr-icon: @wu-img-metal; } + .cde-rr-row--loksyu { --rr-color: @wu-red; --rr-icon: @wu-img-feu; } + .cde-rr-row--tinji { --rr-color: @wu-brown; --rr-icon: @wu-img-terre; } +} + +.cde-roll-result { + background: @cde-bg; + color: @cde-text; + font-family: 'Share Tech Mono', monospace; + border-radius: 4px; + border: 1px solid @cde-border; + overflow: hidden; + + // ---- Header ---- + .cde-rr-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 8px 12px; + background: var(--rr-accent-bg, fade(@cde-surface, 80%)); + border-left: 4px solid var(--rr-accent, @cde-border); + border-bottom: 1px solid @cde-border; + gap: 8px; + + .cde-rr-header-left { + display: flex; + align-items: center; + gap: 10px; + flex: 1; + } + + .cde-rr-aspect-icon { + width: 32px; + height: 32px; + object-fit: contain; + filter: drop-shadow(0 0 4px var(--rr-accent, @cde-border)); + border: none; + } + + .cde-rr-header-text { + display: flex; + flex-direction: column; + } + + .cde-rr-aspect-label { + font-size: 11px; + font-weight: 900; + text-transform: uppercase; + letter-spacing: 0.12em; + color: var(--rr-accent, @cde-text); + text-shadow: 0 0 6px var(--rr-accent, transparent); + } + + .cde-rr-roll-label { + font-size: 13px; + font-weight: 600; + color: @cde-text; + } + + .cde-rr-header-right { + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 2px; + } + + .cde-rr-actor-avatar { + width: 28px; + height: 28px; + border-radius: 50%; + border: 1px solid var(--rr-accent, @cde-border); + object-fit: cover; + } + + .cde-rr-actor-name { + font-size: 9px; + color: @cde-muted; + text-transform: uppercase; + letter-spacing: 0.05em; + } + } + + // ---- Hero: successes count ---- + .cde-rr-hero { + display: flex; + align-items: center; + gap: 12px; + padding: 10px 16px; + background: fade(@cde-surface, 40%); + + .cde-rr-hero-count { + font-size: 48px; + font-weight: 900; + line-height: 1; + color: var(--rr-accent, @cde-text); + text-shadow: 0 0 16px var(--rr-accent, transparent), 0 0 32px var(--rr-accent, transparent); + } + + .cde-rr-hero-right { + display: flex; + flex-direction: column; + } + + .cde-rr-hero-label { + font-size: 11px; + font-weight: 900; + text-transform: uppercase; + letter-spacing: 0.1em; + color: var(--rr-accent, @cde-text); + } + + .cde-rr-hero-dice { + font-size: 13px; + color: @cde-muted; + margin-top: 2px; + } + + .cde-rr-hero-dice-label { + font-size: 10px; + } + + .cde-rr-spell-power { + margin-left: auto; + display: flex; + flex-direction: column; + align-items: flex-end; + border-left: 2px solid var(--rr-accent, @cde-border); + padding-left: 10px; + + .cde-rr-spell-power-count { + font-size: 32px; + font-weight: 900; + line-height: 1; + color: var(--rr-accent, @cde-text); + text-shadow: 0 0 12px var(--rr-accent, transparent); + } + + .cde-rr-spell-power-label { + font-size: 9px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.1em; + color: @cde-muted; + } + } + + // Loksyu bonus badge (shown when dice drawn from Loksyu) + .cde-rr-loksyu-bonus { + display: inline-flex; + align-items: center; + gap: 3px; + font-size: 13px; + font-weight: 700; + padding: 2px 6px; + border-radius: 3px; + animation: cde-pulse-in 0.3s ease; + + &.cde-rr-loksyu-bonus--success { + background: fade(#c9a227, 20%); + border: 1px solid fade(#c9a227, 50%); + color: #c9a227; + text-shadow: 0 0 6px fade(#c9a227, 60%); + } + + &.cde-rr-loksyu-bonus--faste { + background: fade(@cde-item, 15%); + border: 1px solid fade(@cde-item, 40%); + color: @cde-item; + text-shadow: 0 0 6px fade(@cde-item, 50%); + } + } + } + + @keyframes cde-pulse-in { + from { opacity: 0; transform: scale(0.7); } + to { opacity: 1; transform: scale(1); } + } + + // ---- Detail rows ---- + .cde-rr-details { + display: flex; + flex-direction: column; + gap: 2px; + padding: 6px 10px; + } + + .cde-rr-row { + display: flex; + align-items: center; + gap: 8px; + padding: 3px 6px; + border-radius: 3px; + background: fade(@cde-surface, 60%); + color: var(--rr-color, @cde-muted); + + .cde-rr-count { + font-size: 18px; + font-weight: 900; + line-height: 1; + min-width: 26px; + text-align: center; + text-shadow: 0 0 6px currentColor; + } + + // Inline Loksyu bonus badge in detail rows + .cde-rr-loksyu-bonus { + font-size: 10px; + font-weight: 700; + padding: 1px 4px; + border-radius: 2px; + background: fade(@cde-item, 15%); + border: 1px solid fade(@cde-item, 40%); + color: @cde-item; + text-shadow: 0 0 4px fade(@cde-item, 50%); + flex-shrink: 0; + } + + .cde-rr-icon { + width: 22px; + height: 22px; + background-image: var(--rr-icon); + background-size: contain; + background-repeat: no-repeat; + background-position: center; + flex-shrink: 0; + opacity: 0.85; + } + + .cde-rr-label { + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.07em; + flex: 1; + } + + .cde-rr-partition { + font-size: 9px; + color: @cde-muted; + margin-left: 4px; + } + } + + // ---- Footer modifiers ---- + .cde-rr-footer { + padding: 5px 12px; + border-top: 1px solid @cde-border; + background: fade(@cde-surface, 30%); + display: flex; + align-items: baseline; + gap: 6px; + + .cde-rr-footer-label { + font-size: 9px; + font-weight: 700; + text-transform: uppercase; + color: @cde-muted; + letter-spacing: 0.08em; + } + + .cde-rr-footer-text { + font-size: 10px; + color: @cde-muted; + font-family: "Averia", sans-serif; + } + } + + // ---- Dice face grid ---- + .cde-dice-grid { + display: grid; + grid-template-columns: repeat(10, 1fr); + gap: 3px; + padding: 8px 8px 6px; + border-top: 1px solid @cde-border; + + .cde-dice-cell { + display: flex; + flex-direction: column; + align-items: center; + gap: 1px; + + .cde-dice-count { + font-size: 12px; + font-weight: 700; + color: @cde-text; + line-height: 1; + } + + .cde-dice-plate { + width: 100%; + border: none; + opacity: 0.65; + } + } + } +} + + +// ============================================================ +// Initiative prompt dialog +// ============================================================ +.cde-initiative-prompt { + // Override: fields use vertical layout (label on top, control below) + // to avoid the fixed 160px label squeezing the select to 12px. + .cde-roll-field { + flex-direction: column; + align-items: stretch; + gap: 4px; + + label { + flex: none; + font-size: 10px; + color: @cde-muted; + text-transform: uppercase; + letter-spacing: 0.05em; + } + + select, .cde-roll-input { + flex: none; + width: 100%; + } + } + + .cde-initiative-base-row { + display: flex; + align-items: flex-end; + gap: 10px; + flex-wrap: nowrap; + } + + .cde-initiative-base-field { + flex-shrink: 0; + min-width: 70px; + } + + .cde-initiative-base-value { + display: block; + font-size: 22px; + font-weight: 800; + color: @cde-spell; + text-shadow: 0 0 8px fade(@cde-spell, 50%); + text-align: center; + line-height: 1; + padding: 4px 0; + } + + .cde-initiative-op { + font-size: 18px; + font-weight: 700; + color: @cde-muted; + padding-bottom: 6px; + flex-shrink: 0; + align-self: flex-end; + } + + .cde-initiative-action-field { + flex: 1; + min-width: 0; + } + + .cde-initiative-select { + width: 100%; + } + + .cde-initiative-hint { + font-size: 10px; + font-family: "Averia", sans-serif; + color: @cde-muted; + text-align: center; + letter-spacing: 0.05em; + padding: 4px 0 0; + border-top: 1px solid @cde-border; + margin-top: 4px; + } + + .cde-initiative-icon { + font-size: 20px; + color: @cde-spell; + } +} + +// ============================================================ +// Initiative chat result card +// ============================================================ +.cde-initiative-result { + background: @cde-surface; + border: 1px solid @cde-border; + border-left: 4px solid @cde-spell; + border-radius: @cde-radius; + overflow: hidden; + color: @cde-text; + + .cde-ir-header { + display: flex; + align-items: center; + gap: 10px; + padding: 10px 12px; + background: fade(@cde-spell, 8%); + border-bottom: 1px solid @cde-border; + } + + .cde-ir-avatar { + width: 36px; + height: 36px; + border-radius: 50%; + border: 2px solid @cde-border; + object-fit: cover; + flex-shrink: 0; + } + + .cde-ir-actor-info { + display: flex; + flex-direction: column; + gap: 2px; + } + + .cde-ir-actor-name { + font-size: 13px; + font-weight: 700; + color: @cde-text; + } + + .cde-ir-roll-label { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.1em; + color: @cde-muted; + font-family: "Averia", sans-serif; + } + + .cde-ir-formula { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + gap: 5px; + padding: 8px 12px; + background: fade(@cde-bg, 60%); + border-bottom: 1px solid @cde-border; + font-family: monospace; + font-size: 12px; + } + + .cde-ir-formula-base { + color: @cde-muted; + font-size: 11px; + } + + .cde-ir-formula-val { + font-weight: 700; + color: @cde-text; + font-size: 13px; + } + + .cde-ir-formula-mod { + color: @cde-kungfu; + } + + .cde-ir-formula-sep { + color: @cde-muted; + } + + .cde-ir-formula-eq { + color: @cde-muted; + font-size: 14px; + } + + .cde-ir-formula-total { + font-size: 16px; + font-weight: 800; + color: @cde-spell; + text-shadow: 0 0 6px fade(@cde-spell, 50%); + } + + .cde-ir-hero { + display: flex; + align-items: center; + justify-content: center; + gap: 14px; + padding: 14px 12px; + } + + .cde-ir-init-value { + font-size: 48px; + font-weight: 900; + color: @cde-spell; + text-shadow: 0 0 12px fade(@cde-spell, 70%), 0 0 24px fade(@cde-spell, 35%); + line-height: 1; + font-family: 'Averia Regular', sans-serif; + } + + .cde-ir-hero-right { + display: flex; + flex-direction: column; + gap: 4px; + } + + .cde-ir-init-label { + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.1em; + color: @cde-muted; + font-family: "Averia", sans-serif; + } + + .cde-ir-anti { + display: flex; + gap: 5px; + align-items: baseline; + } + + .cde-ir-anti-label { + font-size: 10px; + color: @cde-muted; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.05em; + } + + .cde-ir-anti-value { + font-size: 14px; + font-weight: 700; + color: @cde-kungfu; + text-shadow: 0 0 5px fade(@cde-kungfu, 40%); + } +} + + +/* ============================================================ + ROUE D'INITIATIVE — CDEWheelApp + ============================================================ */ + +// Wu Xing segment colours (match JS constants) +@wu-metal: #b8c4cc; +@wu-water: #3a7bd5; +@wu-earth: #c8a84b; +@wu-fire: #d94f3d; +@wu-wood: #4a9b5a; +@wu-reference: #2c1f6b; + +.cde-wheel-app { + color: @cde-text; + background: @cde-bg; + font-family: "Averia", "Averia Regular", sans-serif; + + .window-content { + padding: 0; + overflow: hidden; + } +} + +/* Two-column layout: SVG wheel left, panel right */ +.cde-wheel-layout { + display: flex; + height: 100%; + min-height: 520px; +} + +/* ---- Left: SVG wheel ---- */ +.cde-wheel-svg-container { + flex: 0 0 480px; + width: 480px; + padding: 12px 12px 6px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background: @cde-surface2; + border-right: 1px solid @cde-border; + + svg { + flex: 1 1 auto; + width: 100%; + max-width: 456px; + max-height: 456px; + overflow: visible; + } + + .cde-wheel-legend { + display: flex; + align-items: center; + gap: 8px; + padding: 4px 0 2px; + font-size: 11px; + color: rgba(255,255,255,0.55); + flex-shrink: 0; + } + + .cde-wheel-legend-dot { + display: inline-block; + width: 10px; + height: 10px; + border-radius: 50%; + flex-shrink: 0; + } + + .cde-wheel-segment { + stroke: @cde-bg; + stroke-width: 1.5; + transition: opacity 0.2s; + } + + .cde-wheel-cran-label { + font-family: "Averia Regular", sans-serif; + font-size: 12px; + fill: rgba(255,255,255,0.55); + text-anchor: middle; + dominant-baseline: central; + pointer-events: none; + user-select: none; + } + + // Combatant token circle on the wheel + .cde-wheel-fighter-circle { + stroke-width: 2; + cursor: pointer; + transition: r 0.2s, stroke-width 0.2s; + + &:hover { + stroke-width: 3; + } + + &.is-active { + r: 18; + stroke-width: 3; + filter: drop-shadow(0 0 5px rgba(255, 255, 255, 0.7)); + } + + &.is-turn { + stroke-dasharray: 3 2; + animation: cde-spin 4s linear infinite; + } + } + + .cde-wheel-fighter-initial { + font-size: 13px; + font-weight: 700; + fill: #fff; + text-anchor: middle; + dominant-baseline: central; + pointer-events: none; + } +} + +/* ---- Right: panel ---- */ +.cde-wheel-panel { + flex: 1 1 auto; + display: flex; + flex-direction: column; + overflow: hidden; + padding: 0; + min-width: 0; +} + +.cde-wheel-section-title { + padding: 7px 12px 6px; + border-bottom: 1px solid @cde-border; + background: @cde-surface2; + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.12em; + color: @cde-muted; + border-left: 3px solid @cde-spell; + flex-shrink: 0; + + em { + font-style: normal; + color: @cde-text; + text-transform: none; + letter-spacing: 0; + font-size: 11px; + } +} + +/* Combatant list */ +.cde-wheel-combatants { + flex: 0 0 auto; + max-height: 130px; + overflow-y: auto; + border-bottom: 1px solid @cde-border; +} + +.cde-wheel-combatant { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 12px 6px 9px; + cursor: pointer; + border-bottom: 1px solid fade(@cde-border, 50%); + border-left: 3px solid transparent; + transition: background 0.15s, border-color 0.15s; + + &:last-child { border-bottom: none; } + + &:hover { + background: @cde-surface; + } + + &.cde-wheel-combatant--selected { + background: fade(@cde-spell, 10%); + border-left-color: @cde-spell; + + .cde-wheel-combatant-name { + color: @cde-text; + font-weight: 600; + } + } + + &.cde-wheel-combatant--active { + .cde-wheel-active-marker { + color: #f0c040; + filter: drop-shadow(0 0 3px #f0c040); + } + } +} + +.cde-wheel-combatant-img { + width: 30px; + height: 30px; + border-radius: 50%; + object-fit: cover; + border: 1.5px solid @cde-border-hi; + flex-shrink: 0; +} + +.cde-wheel-combatant-name { + flex: 1 1 auto; + font-size: 13px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + color: @cde-muted; +} + +.cde-wheel-combatant-cran { + font-size: 11px; + font-weight: 700; + font-variant-numeric: tabular-nums; + flex-shrink: 0; + min-width: 22px; + text-align: center; + padding: 2px 6px; + border-radius: 12px; + line-height: 1.3; +} + +.cde-wheel-active-marker { + font-size: 10px; + color: @cde-muted; + flex-shrink: 0; +} + +/* Action area */ +.cde-wheel-actions { + flex: 1 1 auto; + display: flex; + flex-direction: column; + overflow-y: auto; + padding: 8px 10px 10px; + gap: 6px; + + &.cde-wheel-actions--hint { + justify-content: center; + align-items: center; + } +} + +.cde-wheel-hint { + color: @cde-muted; + font-size: 12px; + text-align: center; + font-style: italic; + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + + i { + font-size: 22px; + opacity: 0.4; + } +} + +.cde-wheel-action-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 5px; +} + +.cde-wheel-action-btn { + display: flex; + align-items: center; + justify-content: space-between; + gap: 4px; + background: @cde-surface; + border: 1px solid @cde-border-hi; + border-radius: @cde-radius-sm; + color: @cde-muted; + font-size: 11px; + padding: 5px 7px; + cursor: pointer; + text-align: left; + transition: background 0.15s, border-color 0.15s, color 0.15s, box-shadow 0.15s; + font-family: inherit; + + &:hover { + color: @cde-text; + background: @cde-border; + border-color: @cde-border-hi; + } + + .cde-wheel-action-name { + flex: 1 1 auto; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .cde-wheel-action-cost { + flex-shrink: 0; + font-weight: 700; + font-size: 10px; + padding: 1px 5px; + border-radius: 10px; + background: @cde-border-hi; + color: @cde-muted; + line-height: 1.4; + } + + &[data-cost="1"] { + &:hover { box-shadow: 0 0 6px fade(@cde-spell, 22%); } + .cde-wheel-action-cost { background: #1a3d6a; color: #6aadff; } + } + &[data-cost="2"] { + &:hover { box-shadow: 0 0 6px fade(#d4a050, 25%); } + .cde-wheel-action-cost { background: #4a3200; color: #d4a050; } + } + &[data-cost="3"] { + &:hover { box-shadow: 0 0 6px fade(#e06030, 28%); } + .cde-wheel-action-cost { background: #4a1800; color: #e07840; } + } + &[data-cost="6"] { + border-color: fade(#cc2040, 40%); + &:hover { box-shadow: 0 0 6px fade(#cc2040, 35%); } + .cde-wheel-action-cost { background: #4a0814; color: #e03050; } + } +} + +/* Special action buttons */ +.cde-wheel-special-actions { + display: flex; + gap: 6px; + margin-top: 2px; +} + +.cde-wheel-btn-roll, +.cde-wheel-btn-surprise { + flex: 1 1 0; + display: flex; + align-items: center; + justify-content: center; + gap: 6px; + border-radius: @cde-radius-sm; + font-size: 11px; + font-weight: 600; + padding: 7px 8px; + cursor: pointer; + font-family: inherit; + transition: background 0.15s, box-shadow 0.15s; + border: 1px solid; +} + +.cde-wheel-btn-roll { + background: fade(#c08a00, 14%); + border-color: fade(#c08a00, 50%); + color: #e0b030; + + &:hover { + background: fade(#c08a00, 26%); + box-shadow: 0 0 8px fade(#c08a00, 40%); + } +} + +.cde-wheel-btn-surprise { + background: fade(@cde-kungfu, 12%); + border-color: fade(@cde-kungfu, 45%); + color: @cde-kungfu; + + &:hover { + background: fade(@cde-kungfu, 24%); + box-shadow: 0 0 8px fade(@cde-kungfu, 35%); + } +} + +/* No-combat empty state */ +.cde-wheel-no-combat { + flex: 1 1 auto; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + color: @cde-muted; + gap: 8px; + padding: 20px; + text-align: center; + font-size: 12px; + + i { + font-size: 28px; + opacity: 0.4; + } +} + +/* Spin animation for active-turn token */ +@keyframes cde-spin { + from { transform-origin: var(--fx) var(--fy); transform: rotate(0deg); } + to { transform-origin: var(--fx) var(--fy); transform: rotate(360deg); } +} + +/* =================================================================== + Migration App + =================================================================== */ + +.cde-migration-app { + .window-content { + padding: 0; + overflow-y: auto; + } +} + +.cde-migration-body { + display: flex; + flex-direction: column; + gap: 12px; + padding: 16px; +} + +/* Drop zone */ +.cde-migration-drop-zone { + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + padding: 28px 20px; + border: 2px dashed @cde-border; + border-radius: 8px; + background: fadeout(@cde-surface2, 40%); + text-align: center; + transition: border-color 0.15s, background 0.15s; + cursor: pointer; + + &.is-dragover { + border-color: @cde-spell; + background: fadeout(@cde-spell, 85%); + } +} + +.cde-migration-drop-icon { + font-size: 36px; + color: @cde-spell; + opacity: 0.7; +} + +.cde-migration-drop-hint { + margin: 0; + font-size: 12px; + color: @cde-muted; +} + +.cde-migration-file-btn { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 6px 14px; + border: 1px solid @cde-spell; + border-radius: 4px; + color: @cde-spell; + font-size: 12px; + font-weight: 600; + cursor: pointer; + transition: background 0.15s; + + &:hover { + background: fadeout(@cde-spell, 80%); + } +} + +/* Preview section */ +.cde-migration-preview { + border: 1px solid @cde-border; + border-radius: 6px; + overflow: hidden; +} + +.cde-migration-preview-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 8px 12px; + background: fadeout(@cde-surface2, 20%); + font-size: 11px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.06em; + color: @cde-muted; +} + +.cde-migration-clear-btn { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 2px 8px; + border: 1px solid @cde-border; + border-radius: 4px; + font-size: 11px; + color: @cde-muted; + background: none; + cursor: pointer; + transition: color 0.15s, border-color 0.15s; + + &:hover { + color: #e04444; + border-color: #e04444; + } +} + +/* Preview table */ +.cde-migration-table { + width: 100%; + border-collapse: collapse; + font-size: 12px; + + th { + padding: 5px 8px; + background: fadeout(@cde-surface2, 10%); + color: @cde-muted; + font-size: 10px; + font-weight: 600; + text-transform: uppercase; + text-align: left; + border-bottom: 1px solid @cde-border; + } + + td { + padding: 5px 8px; + border-bottom: 1px solid fadeout(@cde-border, 60%); + vertical-align: middle; + } + + tr:last-child td { + border-bottom: none; + } +} + +.cde-migration-thumb { + width: 28px; + height: 28px; + border-radius: 3px; + object-fit: cover; +} + +.cde-migration-name { + font-weight: 600; + color: @cde-text; +} + +.cde-migration-items-count { + text-align: center; + color: @cde-muted; +} + +.cde-migration-srcfile { + font-size: 10px; + color: @cde-muted; + max-width: 130px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* Type badge */ +.cde-migration-type-badge { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 2px 8px; + border-radius: 10px; + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + + &.cde-migration-type-character { + background: fadeout(@cde-spell, 80%); + color: @cde-spell; + border: 1px solid fadeout(@cde-spell, 60%); + } + + &.cde-migration-type-npc { + background: fadeout(#9c4dcc, 80%); + color: #c97ae0; + border: 1px solid fadeout(#9c4dcc, 60%); + } +} + +/* Errors */ +.cde-migration-errors { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + gap: 4px; + + li { + display: flex; + align-items: flex-start; + gap: 6px; + padding: 6px 10px; + border: 1px solid fadeout(#e04444, 40%); + border-radius: 4px; + background: fadeout(#e04444, 90%); + color: #e07070; + font-size: 11px; + + i { margin-top: 2px; flex-shrink: 0; } + } +} + +/* Bottom action bar */ +.cde-migration-actions { + display: flex; + justify-content: center; + padding-top: 4px; +} + +.cde-migration-import-btn { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 9px 24px; + border: none; + border-radius: 6px; + background: @cde-spell; + color: #fff; + font-size: 13px; + font-weight: 700; + cursor: pointer; + transition: filter 0.15s; + + &:hover { + filter: brightness(1.15); + } +} + +.cde-migration-hint { + margin: 0; + font-size: 12px; + color: @cde-muted; + text-align: center; +} + +// ============================================================ +// Welcome message +// ============================================================ + +.cde-welcome-message { + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + padding: 12px 16px; + background: @cde-surface; + border: 1px solid @cde-border-hi; + border-radius: 8px; + text-align: center; +} + +.cde-welcome-logo { + width: 120px; + height: auto; + object-fit: contain; + filter: drop-shadow(0 0 8px fade(@cde-spell, 40%)); +} + +.cde-welcome-title { + margin: 0; + font-size: 15px; + font-weight: 700; + color: @cde-spell; + text-shadow: 0 0 8px fade(@cde-spell, 50%); +} + +.cde-welcome-links { + margin: 0; + font-size: 12px; + color: @cde-muted; + + a { + color: @cde-item; + text-decoration: none; + border-bottom: 1px solid fade(@cde-item, 40%); + + &:hover { + color: #fff; + border-bottom-color: #fff; + } + } +} + +.cde-welcome-help-btn { + display: inline-flex; + align-items: center; + gap: 6px; + margin-top: 4px; + padding: 7px 18px; + background: @cde-spell; + border: none; + border-radius: 6px; + color: #fff; + font-size: 12px; + font-weight: 700; + cursor: pointer; + transition: filter 0.15s; + + &:hover { + filter: brightness(1.2); + } +} diff --git a/css/cde-theme.less.backup2 b/css/cde-theme.less.backup2 new file mode 100644 index 0000000..8d528d3 --- /dev/null +++ b/css/cde-theme.less.backup2 @@ -0,0 +1,4656 @@ + +/* ------------------------------------------- + Fonts + ---------------------------------------------*/ + +@font-face { + font-family: "Averia"; + src: url(../fonts/Averia-Regular.ttf); +} + +// ============================================================ +// Neo-Tokyo Neon Noir — Palette +// ============================================================ +@cde-bg: #080c14; +@cde-surface: #101622; +@cde-surface2: #0d1520; +@cde-border: #1a2436; +@cde-border-hi: #263853; +@cde-text: #e2e8f4; +@cde-muted: #7d94b8; + +// Accents néon par type +@cde-item: #00d4d4; +@cde-kungfu: #ff3d5a; +@cde-spell: #4a9eff; +@cde-supernatural: #cc44ff; +@cde-weapon: #ff6b35; +@cde-armor: #4ecdc4; +@cde-sanhei: #cc44ff; +@cde-ingredient: #98c379; + +@cde-shadow: 0 8px 32px rgba(0, 0, 0, 0.6); +@cde-shadow-sm: 0 2px 12px rgba(0, 0, 0, 0.4); +@cde-radius: 8px; +@cde-radius-sm: 5px; +@cde-gap: 12px; + +// Glow helpers +.glow(@color) { box-shadow: 0 0 0 1px fade(@color, 35%), 0 0 12px fade(@color, 20%); } +.glow-text(@color) { text-shadow: 0 0 8px fade(@color, 60%); } + +// ============================================================ +// CSS Variables (for JS access) +// ============================================================ +.fvtt-chroniques-de-l-etrange { + --cde-bg: @cde-bg; + --cde-surface: @cde-surface; + --cde-border: @cde-border; + --cde-text: @cde-text; + --cde-muted: @cde-muted; + --cde-item: @cde-item; + --cde-kungfu: @cde-kungfu; + --cde-spell: @cde-spell; + --cde-supernatural: @cde-supernatural; + color: @cde-text; + background: @cde-bg; +} + +// ============================================================ +// Base sheet +// ============================================================ +.cde-sheet { + background: @cde-bg; + color: @cde-text; + font-family: "Averia", sans-serif; + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + overflow: hidden; + + input, textarea { + font-family: inherit; + color: @cde-text; + background: transparent; + } + + // Selects need an explicit dark background — transparent fails on native dropdowns + select { + font-family: inherit; + color: @cde-text; + background: @cde-surface; + border-radius: 2px; + } + + select option { + background: @cde-bg; + color: @cde-text; + } +} + +// ============================================================ +// Item-sheet Neon Header +// ============================================================ +.cde-neon-header { + position: relative; + background: @cde-surface; + display: grid; + grid-template-columns: 90px 1fr; + gap: 14px; + padding: 12px 14px 14px; + overflow: hidden; + // Angular clip on bottom-right corner + clip-path: polygon(0 0, 100% 0, 100% calc(100% - 14px), calc(100% - 14px) 100%, 0 100%); + + // Top accent line — overridden per type + &::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 3px; + background: @cde-border-hi; + } + + // Subtle neon scatter in background + &::after { + content: ""; + position: absolute; + inset: 0; + background: radial-gradient(ellipse at 0% 0%, fade(@cde-border-hi, 30%) 0%, transparent 50%); + pointer-events: none; + } + + // Per-type accent colors + &.item { &::before { background: @cde-item; box-shadow: 0 0 10px fade(@cde-item, 50%); } } + &.kungfu { &::before { background: @cde-kungfu; box-shadow: 0 0 10px fade(@cde-kungfu, 50%); } } + &.spell { &::before { background: @cde-spell; box-shadow: 0 0 10px fade(@cde-spell, 50%); } } + &.supernatural { &::before { background: @cde-supernatural; box-shadow: 0 0 10px fade(@cde-supernatural, 50%); } } + &.weapon { &::before { background: @cde-weapon; box-shadow: 0 0 10px fade(@cde-weapon, 50%); } } + &.armor { &::before { background: @cde-armor; box-shadow: 0 0 10px fade(@cde-armor, 50%); } } + &.sanhei { &::before { background: @cde-sanhei; box-shadow: 0 0 10px fade(@cde-sanhei, 50%); } } + &.ingredient { &::before { background: @cde-ingredient; box-shadow: 0 0 10px fade(@cde-ingredient, 50%); } } +} + +// Avatar inside neon header — angular clip +.cde-avatar { + width: 90px; + height: 90px; + object-fit: cover; + clip-path: polygon(0 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%); + border: 1px solid @cde-border-hi; + background: @cde-surface2; + cursor: pointer; + position: relative; + z-index: 1; +} + +// Header content zone +.cde-header-content { + position: relative; + z-index: 1; + display: flex; + flex-direction: column; + gap: 8px; + min-width: 0; +} + +// Item name — flat neon-bottom-border input +.cde-item-name { + margin: 0; + + input { + width: 100%; + border: none; + border-bottom: 2px solid @cde-border-hi; + background: transparent; + color: @cde-text; + font-size: 18px; + font-family: "Averia", sans-serif; + font-weight: 700; + padding: 4px 0 6px; + letter-spacing: 0.04em; + text-transform: uppercase; + outline: none; + transition: border-color 0.15s; + + &:focus { + border-bottom-color: @cde-item; + } + } +} + +// Type-specific focus color on name input +.cde-neon-header.kungfu .cde-item-name input:focus { border-bottom-color: @cde-kungfu; } +.cde-neon-header.spell .cde-item-name input:focus { border-bottom-color: @cde-spell; } +.cde-neon-header.supernatural .cde-item-name input:focus { border-bottom-color: @cde-supernatural; } +.cde-neon-header.weapon .cde-item-name input:focus { border-bottom-color: @cde-weapon; } +.cde-neon-header.armor .cde-item-name input:focus { border-bottom-color: @cde-armor; } +.cde-neon-header.sanhei .cde-item-name input:focus { border-bottom-color: @cde-sanhei; } +.cde-neon-header.ingredient .cde-item-name input:focus { border-bottom-color: @cde-ingredient; } + +// ============================================================ +// Stat Grid (terminal style) +// ============================================================ +.cde-stat-grid { + display: flex; + flex-wrap: wrap; + gap: 6px 10px; + align-items: flex-end; +} + +.cde-stat-cell { + display: flex; + flex-direction: column; + gap: 3px; + min-width: 110px; + flex: 1 1 110px; + max-width: 200px; + + &--wide { + flex: 1 1 100%; + max-width: 100%; + min-width: 0; + } +} + +.cde-stat-label { + font-size: 10px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.1em; + color: @cde-muted; + white-space: nowrap; +} + +.cde-stat-value { + font-size: 15px; + font-weight: 800; + color: @cde-text; + letter-spacing: 0.02em; +} + +.cde-stat-cell input { + width: 100%; + background: transparent; + border: none; + border-bottom: 1px solid @cde-border; + color: @cde-text; + font-size: 14px; + padding: 4px 0; + outline: none; + transition: border-color 0.15s; + + &:focus { border-bottom-color: @cde-item; } +} + +.cde-stat-cell textarea { + width: 100%; + background: transparent; + border: 1px solid @cde-border; + border-radius: 2px; + color: @cde-text; + font-size: 13px; + font-family: inherit; + padding: 4px 6px; + outline: none; + resize: vertical; + transition: border-color 0.15s; + line-height: 1.5; + + &:focus { border-color: @cde-kungfu; } +} + +.cde-stat-cell select { + width: 100%; + border: none; + border-bottom: 1px solid @cde-border; + font-size: 14px; + padding: 4px 0; + outline: none; + transition: border-color 0.15s; + + &:focus { border-bottom-color: @cde-item; } +} + +.cde-neon-header.kungfu .cde-stat-cell input:focus, +.cde-neon-header.kungfu .cde-stat-cell select:focus { border-bottom-color: @cde-kungfu; } +.cde-neon-header.spell .cde-stat-cell input:focus, +.cde-neon-header.spell .cde-stat-cell select:focus { border-bottom-color: @cde-spell; } +.cde-neon-header.supernatural .cde-stat-cell input:focus, +.cde-neon-header.supernatural .cde-stat-cell select:focus { border-bottom-color: @cde-supernatural; } +.cde-neon-header.weapon .cde-stat-cell input:focus, +.cde-neon-header.weapon .cde-stat-cell select:focus { border-bottom-color: @cde-weapon; } +.cde-neon-header.armor .cde-stat-cell input:focus, +.cde-neon-header.armor .cde-stat-cell select:focus { border-bottom-color: @cde-armor; } +.cde-neon-header.sanhei .cde-stat-cell input:focus, +.cde-neon-header.sanhei .cde-stat-cell select:focus { border-bottom-color: @cde-sanhei; } +.cde-neon-header.ingredient .cde-stat-cell input:focus, +.cde-neon-header.ingredient .cde-stat-cell select:focus { border-bottom-color: @cde-ingredient; } + +// ============================================================ +// Type Badge — angular clip-path parallelogram +// ============================================================ +.cde-badge { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 3px 14px 3px 10px; + clip-path: polygon(6px 0, 100% 0, calc(100% - 6px) 100%, 0 100%); + font-size: 11px; + font-weight: 800; + letter-spacing: 0.1em; + text-transform: uppercase; + color: @cde-bg; + cursor: default; + white-space: nowrap; + + &.item { background: @cde-item; } + &.kungfu { background: @cde-kungfu; } + &.spell { background: @cde-spell; } + &.supernatural { background: @cde-supernatural; } + &.character { background: @cde-item; } + &.npc { background: @cde-supernatural; } + &.weapon { background: @cde-weapon; } + &.armor { background: @cde-armor; } + &.sanhei { background: @cde-sanhei; } + &.ingredient { background: @cde-ingredient; } +} + +// ============================================================ +// Neon Tabs +// ============================================================ +.cde-neon-tabs { + display: flex; + gap: 0; + border-bottom: 1px solid @cde-border; + background: transparent; + margin-top: 8px; + overflow-x: auto; + + .item { + padding: 8px 14px; + font-size: 11px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.1em; + color: @cde-muted; + border-bottom: 2px solid transparent; + white-space: nowrap; + transition: color 0.15s, border-color 0.15s; + cursor: pointer; + + &:hover { + color: @cde-text; + } + + &.active { + color: @cde-item; + border-bottom-color: @cde-item; + font-weight: 700; + background: fade(@cde-item, 8%); + } + } +} + +// Per-type active tab color +.item.kungfu .cde-neon-tabs .item.active, +form.kungfu .cde-neon-tabs .item.active, +section.kungfu .cde-neon-tabs .item.active { color: @cde-kungfu; border-bottom-color: @cde-kungfu; background: fade(@cde-kungfu, 8%); } +form.spell .cde-neon-tabs .item.active, +section.spell .cde-neon-tabs .item.active { color: @cde-spell; border-bottom-color: @cde-spell; background: fade(@cde-spell, 8%); } +form.supernatural .cde-neon-tabs .item.active, +section.supernatural .cde-neon-tabs .item.active { color: @cde-supernatural; border-bottom-color: @cde-supernatural; background: fade(@cde-supernatural, 8%); } +form.weapon .cde-neon-tabs .item.active, +section.weapon .cde-neon-tabs .item.active { color: @cde-weapon; border-bottom-color: @cde-weapon; background: fade(@cde-weapon, 8%); } +form.armor .cde-neon-tabs .item.active, +section.armor .cde-neon-tabs .item.active { color: @cde-armor; border-bottom-color: @cde-armor; background: fade(@cde-armor, 8%); } +form.sanhei .cde-neon-tabs .item.active, +section.sanhei .cde-neon-tabs .item.active { color: @cde-sanhei; border-bottom-color: @cde-sanhei; background: fade(@cde-sanhei, 8%); } +form.ingredient .cde-neon-tabs .item.active, +section.ingredient .cde-neon-tabs .item.active { color: @cde-ingredient; border-bottom-color: @cde-ingredient; background: fade(@cde-ingredient, 8%); } +// Actor type accent colors +section.character .cde-neon-tabs .item.active { color: @cde-item; border-bottom-color: @cde-item; background: fade(@cde-item, 8%); } +section.npc .cde-neon-tabs .item.active { color: @cde-supernatural; border-bottom-color: @cde-supernatural; background: fade(@cde-supernatural, 8%); } + +// ============================================================ +// Tab body +// ============================================================ +.cde-tab-body { + flex: 1 1 0; + min-height: 0; + padding: @cde-gap; + background: @cde-surface2; + border: 1px solid @cde-border; + border-top: none; + border-radius: 0 0 @cde-radius @cde-radius; + overflow-y: auto; + + .tab { + display: none; + flex-direction: column; + gap: @cde-gap; + } + + .tab.active { + display: flex; + } +} + +// Tab section label — visible inside each tab body +.cde-tab-label { + font-family: "Averia", sans-serif; + font-size: 0.65rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.15em; + color: @cde-muted; + padding: 2px 6px; + border-left: 2px solid @cde-border-hi; + margin-bottom: 2px; + flex-shrink: 0; +} + +// ============================================================ +// Card +// ============================================================ +.cde-card { + background: @cde-surface; + border: 1px solid @cde-border; + border-radius: @cde-radius; + padding: 12px; + box-shadow: @cde-shadow-sm; +} + +.cde-card .tab-sous-titre { + font-family: "Averia", sans-serif; + font-size: 10px; + letter-spacing: 0.1em; + text-transform: uppercase; + color: @cde-muted; + margin-bottom: 6px; + border-bottom: 1px solid @cde-border; + padding-bottom: 4px; +} + +// ============================================================ +// Notes editor +// ============================================================ +.cde-notes-editor { + flex: 1 1 0; + min-height: 0; + display: flex; + flex-direction: column; + + .editor { + flex: 1 1 0; + min-height: 200px; + border-radius: @cde-radius; + border: 1px solid @cde-border; + background: @cde-surface; + } +} + +// ============================================================ +// Technique card (kungfu) +// ============================================================ +.cde-technique-card { + border-left: 3px solid @cde-kungfu; + background: fade(@cde-surface, 80%); +} + +.cde-technique-header { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: flex-start; + gap: 10px; + margin-bottom: 10px; +} + +.cde-technique-title { + display: flex; + align-items: center; + gap: 8px; + flex: 1 1 200px; + + input { + flex: 1; + background: transparent; + border: none; + border-bottom: 1px solid @cde-border; + color: @cde-text; + font-size: 15px; + font-weight: 700; + padding: 4px 0; + outline: none; + + &:focus { border-bottom-color: @cde-kungfu; } + } +} + +.cde-technique-meta { + display: flex; + gap: 8px; + flex-wrap: wrap; + align-items: flex-end; +} + +.cde-technique-body .editor { + min-height: 180px; +} + +// Mini technique checkbox row +.cde-check-cell { + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; + min-width: 70px; + + label { + font-size: 10px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + } + + input[type="checkbox"] { + width: 18px; + height: 18px; + accent-color: @cde-kungfu; + cursor: pointer; + } +} + +// ============================================================ +// Legacy chips (kept for actor sheets) +// ============================================================ +.cde-chip { + background: fade(@cde-surface, 75%); + border: 1px solid @cde-border; + border-radius: @cde-radius; + padding: 8px 10px; + display: inline-flex; + flex-direction: column; + gap: 6px; + min-width: 140px; + + label { + font-size: 10px; + font-family: "Averia", sans-serif; + letter-spacing: 0.08em; + text-transform: uppercase; + color: @cde-muted; + margin: 0; + } + + input { + width: 100%; + border: none; + border-bottom: 1px solid @cde-border; + background: transparent; + color: @cde-text; + padding: 4px 0; + outline: none; + + &:focus { border-bottom-color: @cde-item; } + } + + select { + width: 100%; + border: none; + border-bottom: 1px solid @cde-border; + padding: 4px 0; + outline: none; + + &:focus { border-bottom-color: @cde-item; } + } + + input[type="checkbox"] { + width: auto; + align-self: flex-start; + accent-color: @cde-item; + } + + &.mini { min-width: 100px; padding: 6px 8px; } +} + +.cde-meta-row { + display: flex; + gap: @cde-gap; + flex-wrap: wrap; + align-items: flex-end; + margin-top: 8px; + + &.compact { gap: 8px; } +} + +// Kept for backward compat with actor templates +.cde-pill { + display: inline-block; + padding: 3px 10px; + border-radius: 999px; + font-weight: 800; + font-size: 11px; + letter-spacing: 0.06em; + text-transform: uppercase; + color: @cde-bg; + + &.item { background: @cde-item; } + &.kungfu { background: @cde-kungfu; } + &.spell { background: @cde-spell; } + &.supernatural { background: @cde-supernatural; } + &.character { background: @cde-item; } + &.npc { background: @cde-supernatural; } + &.weapon { background: @cde-weapon; } + &.armor { background: @cde-armor; } + &.sanhei { background: @cde-sanhei; } + &.ingredient { background: @cde-ingredient; } +} + +// ============================================================ +// Actor header (kept, updated for new palette) +// ============================================================ +.cde-header { + background: @cde-surface; + border: 1px solid @cde-border; + border-radius: @cde-radius; + padding: 12px; + display: grid; + grid-template-columns: 120px 1fr; + gap: @cde-gap; + box-shadow: @cde-shadow; + + .profile-img { + width: 100%; + border-radius: @cde-radius; + border: 1px solid @cde-border; + box-shadow: @cde-shadow; + object-fit: cover; + } + + .header-fields h1.charname input { + width: 100%; + border: none; + border-bottom: 2px solid @cde-border-hi; + background: transparent; + color: @cde-text; + font-size: 20px; + font-family: "Averia", sans-serif; + padding: 4px 0 8px; + outline: none; + + &:focus { border-bottom-color: @cde-item; } + } +} + +.cde-actor-header { + grid-template-columns: 160px 1fr; + align-items: start; +} + +.cde-header-top { + display: flex; + justify-content: space-between; + align-items: center; + gap: 8px; +} + +.cde-icon-button { + border: 1px solid @cde-border; + background: fade(@cde-surface, 70%); + color: @cde-text; + border-radius: 999px; + padding: 6px 10px; + box-shadow: @cde-shadow-sm; + cursor: pointer; + + &:hover { border-color: @cde-border-hi; } +} + +.cde-quick-meta { + display: flex; + align-items: center; + gap: @cde-gap; + flex-wrap: wrap; +} + +.cde-initiative-card { + border: 1px solid @cde-border; + border-left: 3px solid @cde-spell; + border-radius: @cde-radius; + padding: 8px 12px; + background: fade(@cde-surface, 70%); + box-shadow: @cde-shadow-sm; + display: inline-flex; + flex-direction: column; + gap: 4px; + min-width: 130px; +} + +.cde-initiative-header { + display: flex; + align-items: center; + gap: 6px; +} + +.cde-initiative-title { + font-size: 10px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; +} + +.cde-initiative-icon { + font-size: 11px; + color: @cde-spell; + text-shadow: 0 0 6px fade(@cde-spell, 70%); +} + +.cde-initiative-controls { + display: inline-flex; + align-items: center; + gap: 6px; + + .cde-init-btn { + display: inline-flex; + align-items: center; + justify-content: center; + width: 26px; + height: 26px; + padding: 0; + border: 1px solid @cde-border; + border-radius: 5px; + background: fade(@cde-bg, 80%); + color: @cde-muted; + font-size: 11px; + cursor: pointer; + flex-shrink: 0; + transition: border-color 0.15s, box-shadow 0.15s, color 0.15s; + + &:hover { + border-color: @cde-spell; + color: @cde-spell; + box-shadow: 0 0 0 2px fade(@cde-spell, 25%); + } + } + + .cde-init-btn--roll { + width: 30px; + height: 30px; + font-size: 14px; + border-color: fade(@cde-spell, 40%); + color: @cde-spell; + background: fade(@cde-spell, 10%); + box-shadow: 0 0 6px fade(@cde-spell, 20%); + + &:hover { + background: fade(@cde-spell, 20%); + box-shadow: 0 0 10px fade(@cde-spell, 40%); + } + } +} + +.cde-initiative-values { + display: flex; + flex-direction: column; + align-items: center; + gap: 2px; + min-width: 50px; +} + +.cde-initiative-value { + font-size: 20px; + font-weight: 800; + text-align: center; + color: @cde-spell; + text-shadow: 0 0 8px fade(@cde-spell, 60%); + line-height: 1; +} + +.cde-anti-initiative-value { + font-size: 9px; + font-family: "Averia", sans-serif; + color: @cde-muted; + text-align: center; + white-space: nowrap; + + i { + font-size: 8px; + opacity: 0.7; + } +} + +// ============================================================ +// Grid, field, table, section — common +// ============================================================ +.cde-grid { + display: grid; + gap: @cde-gap; + + &.two { grid-template-columns: repeat(2, minmax(0, 1fr)); } + &.three { grid-template-columns: repeat(3, minmax(0, 1fr)); } +} + +.cde-field { + label { + display: block; + margin-bottom: 4px; + font-size: 10px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + } + + input, textarea { + width: 100%; + border: none; + border-bottom: 1px solid @cde-border; + background: transparent; + color: @cde-text; + padding: 5px 0; + outline: none; + + &:focus { border-bottom-color: @cde-item; } + } + + select { + width: 100%; + border: none; + border-bottom: 1px solid @cde-border; + padding: 5px 0; + outline: none; + + &:focus { border-bottom-color: @cde-item; } + } +} + +.cde-section-title { + font-family: "Averia", sans-serif; + font-size: 10px; + font-weight: 800; + letter-spacing: 0.1em; + text-transform: uppercase; + color: @cde-muted; + margin-bottom: 8px; + border-bottom: 1px solid @cde-border; + padding-bottom: 4px; +} + +.cde-tag { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 3px 10px; + border-radius: 999px; + font-size: 11px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + background: fade(@cde-border, 80%); + color: @cde-muted; + border: 1px solid @cde-border; +} + +.cde-data-table { + table { + width: 100%; + border-collapse: collapse; + color: @cde-text; + } + + td { + padding: 7px 8px; + border-bottom: 1px solid @cde-border; + } + + tr:nth-child(even) { background: fade(@cde-surface, 50%); } + tr:hover { background: fade(@cde-border-hi, 20%); } + + input { + width: 100%; + border: none; + border-bottom: 1px solid @cde-border; + background: transparent; + color: @cde-text; + padding: 4px 0; + outline: none; + } + + select { + width: 100%; + border: none; + border-bottom: 1px solid @cde-border; + padding: 4px 0; + outline: none; + } +} + +.cde-centered-card { + display: flex; + gap: @cde-gap; + align-items: center; + justify-content: space-between; + flex-wrap: wrap; + + img { + max-height: 280px; + border-radius: @cde-radius; + border: 1px solid @cde-border; + box-shadow: @cde-shadow; + } +} + +// ============================================================ +// NPC Aptitudes table — modern cde-skills-table layout +// ============================================================ +.cde-aptitudes-table { + // Inherits .cde-skills-table styles; just ensure consistent width + .cde-spec-cell { flex: 1 1 0; } + + .cde-roll-cell { + width: 28px; + flex-shrink: 0; + text-align: center; + + .cde-roll-trigger { + display: inline-flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; + color: @cde-muted; + border-radius: 4px; + transition: color 0.15s, background 0.15s; + + &:hover { + color: @cde-supernatural; + background: fade(@cde-supernatural, 12%); + } + } + } +} + +// Empty list placeholder +.cde-empty-list { + color: @cde-muted; + font-style: italic; + font-size: 11px; + text-align: center; + padding: 10px 0; +} + +// NPC supernatural item cards +// ── Supernatural abilities card (NPC) ─────────────────────────────────────── + +.cde-super-add-row { + display: flex; + justify-content: flex-end; + padding: 4px 0 8px; +} + +.cde-super-add-btn { + display: inline-flex; + align-items: center; + gap: 5px; + font-size: 11px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + cursor: pointer; + padding: 4px 10px; + border-radius: @cde-radius; + border: 1px solid @cde-border; + transition: color 0.12s, border-color 0.12s, background 0.12s; + + i { font-size: 10px; } + + &:hover { color: @cde-supernatural; border-color: @cde-supernatural; background: fade(@cde-supernatural, 8%); } +} + +.cde-super-card { + border: 1px solid @cde-border; + border-left: 3px solid @cde-supernatural; + border-radius: @cde-radius; + background: fade(@cde-surface, 70%); + margin-bottom: 10px; + overflow: hidden; + transition: box-shadow 0.15s; + + &:hover { + box-shadow: 0 0 8px fade(@cde-supernatural, 20%); + + .cde-super-controls { opacity: 1; } + } +} + +.cde-super-header { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 10px; +} + +.cde-super-img { + width: 28px; + height: 28px; + object-fit: contain; + border-radius: 4px; + flex-shrink: 0; +} + +.cde-super-info { + flex: 1; + display: flex; + flex-direction: column; + gap: 3px; + min-width: 0; +} + +.cde-super-name { + font-size: 14px; + font-weight: 700; + font-family: "Averia", sans-serif; + color: @cde-text; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.cde-super-meta { + display: flex; + align-items: center; + gap: 4px; +} + +.cde-super-controls { + display: flex; + align-items: center; + gap: 4px; + opacity: 0; + transition: opacity 0.12s; + flex-shrink: 0; + + a { + display: flex; + align-items: center; + justify-content: center; + width: 22px; + height: 22px; + border-radius: 3px; + color: @cde-muted; + cursor: pointer; + transition: color 0.12s, background 0.12s; + + i { font-size: 11px; } + + &:hover { color: @cde-text; background: fade(@cde-border-hi, 30%); } + } +} + +.cde-super-desc { + padding: 6px 12px 8px 46px; + border-top: 1px solid fade(@cde-border, 60%); + background: fade(@cde-surface, 40%); + font-size: 11px; + color: @cde-muted; + line-height: 1.5; + + p { margin: 0 0 4px; &:last-child { margin-bottom: 0; } } + em { color: @cde-text; } + strong { color: @cde-supernatural; } +} + +.cde-super-empty { + padding: 16px; + text-align: center; + font-size: 12px; + color: @cde-muted; + font-style: italic; +} + +// NPC vitality / hei tracker +.cde-npc-tracks { + margin-top: @cde-gap; + + .cde-track-row { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 0; + border-bottom: 1px solid @cde-border; + + &:last-child { border-bottom: none; } + } + + .cde-track-label { + display: flex; + align-items: center; + gap: 6px; + width: 120px; + flex-shrink: 0; + font-size: 11px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + + i { font-size: 12px; } + } + + .cde-track-value { + display: flex; + align-items: center; + gap: 6px; + + input.cde-circle-input { + width: 48px; + } + } + + .cde-track-sep { + font-size: 14px; + color: @cde-muted; + font-weight: 700; + } + + .cde-track-max { + font-size: 15px; + font-weight: 700; + color: @cde-spell; + text-shadow: 0 0 6px fade(@cde-spell, 40%); + min-width: 28px; + text-align: center; + } + + .cde-track-note { + flex: 1; + input { width: 100%; } + } +} + +// ============================================================ +// Loksyu — 5 elemental cards grid +// ============================================================ +// ============================================================ +// Chat buttons — Loksyu / TinJi quick-access +// ============================================================ +.cde-chat-app-buttons { + display: flex; + gap: 6px; + padding: 6px 8px 4px; + border-top: 1px solid @cde-border; + pointer-events: auto; // sidebar has pointer-events:none — must override + + .cde-chat-btn { + flex: 1 1 0; + pointer-events: auto; + display: flex; + align-items: center; + justify-content: center; + gap: 6px; + padding: 5px 8px; + font-size: 11px; + font-family: "Orbitron", "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.06em; + background: @cde-surface; + border: 1px solid @cde-border; + border-radius: 4px; + color: @cde-muted; + cursor: pointer; + transition: all 0.2s; + + i { font-size: 12px; } + + &:hover { + background: fade(@cde-spell, 10%); + border-color: @cde-spell; + color: @cde-spell; + box-shadow: 0 0 8px fade(@cde-spell, 30%); + } + + &--tinji:hover { + background: fade(@cde-kungfu, 10%); + border-color: @cde-kungfu; + color: @cde-kungfu; + box-shadow: 0 0 8px fade(@cde-kungfu, 30%); + } + } +} + +// ============================================================ +// Loksyu standalone app +// ============================================================ +.cde-loksyu-standalone { + .cde-loksyu-app-body { + padding: 12px; + } + + .cde-loksyu-elements { + display: flex; + flex-wrap: wrap; + gap: 8px; + justify-content: center; + margin-bottom: 10px; + } + + .cde-lok-card { + flex: 0 0 calc(33.333% - 6px); + min-width: 140px; + max-width: 160px; + background: fade(@cde-surface, 80%); + border: 1px solid @cde-border; + border-radius: 6px; + padding: 10px 8px; + display: flex; + flex-direction: column; + gap: 6px; + min-width: 0; + overflow: hidden; + transition: border-color 0.2s; + + &--wood { &:hover { border-color: #4a9e3f; } .cde-lok-input:focus { border-bottom-color: #4a9e3f; } } + &--fire { &:hover { border-color: @cde-kungfu; } .cde-lok-input:focus { border-bottom-color: @cde-kungfu; } } + &--earth { &:hover { border-color: #c88a3a; } .cde-lok-input:focus { border-bottom-color: #c88a3a; } } + &--metal { &:hover { border-color: @cde-muted; } .cde-lok-input:focus { border-bottom-color: @cde-muted; } } + &--water { &:hover { border-color: @cde-spell; } .cde-lok-input:focus { border-bottom-color: @cde-spell; } } + } + + .cde-lok-header { + display: flex; + align-items: center; + gap: 6px; + + img.cde-lok-icon { border-radius: 4px; flex-shrink: 0; } + } + + .cde-lok-titles { + flex: 1 1 0; + min-width: 0; + display: flex; + flex-direction: column; + + .cde-lok-name { + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-text; + } + + .cde-lok-qual { + font-size: 9px; + color: @cde-muted; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + } + + .cde-lok-reset { + color: @cde-muted; + font-size: 11px; + flex-shrink: 0; + cursor: pointer; + &:hover { color: @cde-text; } + } + + .cde-lok-values { + display: flex; + flex-direction: column; + gap: 4px; + } + + .cde-lok-polarity { + display: flex; + align-items: center; + gap: 4px; + + .cde-lok-pol-label { + font-size: 9px; + color: @cde-muted; + width: 30px; + flex-shrink: 0; + } + + &--yang .cde-lok-pol-label { color: @cde-text; } + } + + .cde-lok-input { + flex: 1 1 0; + background: transparent; + border: none; + border-bottom: 1px solid @cde-border; + color: @cde-text; + font-size: 13px; + font-weight: 700; + text-align: center; + padding: 2px 0; + transition: border-bottom-color 0.2s; + width: 100%; + + &:focus { outline: none; } + &[disabled] { opacity: 0.5; cursor: default; } + } + + .cde-loksyu-visual-row { + text-align: center; + margin: 6px 0; + + .cde-lok-visual { + max-width: 120px; + max-height: 160px; + width: auto; + height: auto; + opacity: 0.6; + cursor: zoom-in; + transition: opacity 0.2s ease, box-shadow 0.2s ease; + + &:hover { + opacity: 0.9; + box-shadow: 0 0 10px @cde-border-hi; + } + } + } + + .cde-lok-footer { + display: flex; + justify-content: center; + padding-top: 6px; + border-top: 1px solid @cde-border; + margin-top: 6px; + } + + .cde-lok-reset-all { + display: flex; + align-items: center; + gap: 6px; + padding: 5px 14px; + font-size: 11px; + background: fade(@cde-kungfu, 12%); + border: 1px solid fade(@cde-kungfu, 30%); + border-radius: 4px; + color: @cde-muted; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: fade(@cde-kungfu, 20%); + border-color: @cde-kungfu; + color: @cde-text; + } + } +} + +// ============================================================ +// TinJi standalone app +// ============================================================ +.cde-tinji-standalone { + .cde-tinji-app-body { + padding: 16px 12px; + display: flex; + align-items: center; + gap: 16px; + } + + .cde-tinji-display { + flex: 1 1 0; + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + } + + .cde-tinji-chinese-large { + font-size: 40px; + color: @cde-kungfu; + text-shadow: 0 0 20px fade(@cde-kungfu, 60%); + line-height: 1; + font-family: serif; + } + + .cde-tinji-label { + font-size: 11px; + font-family: "Orbitron", sans-serif; + text-transform: uppercase; + letter-spacing: 0.12em; + color: @cde-text; + opacity: 0.75; + } + + .cde-tinji-counter { + display: flex; + align-items: center; + gap: 8px; + margin: 4px 0; + } + + .cde-tinji-step { + width: 30px; + height: 30px; + background: @cde-surface2; + border: 1px solid @cde-border-hi; + border-radius: 50%; + color: @cde-text; + font-size: 18px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s; + line-height: 1; + padding: 0; + + &:hover { + background: fade(@cde-kungfu, 25%); + border-color: @cde-kungfu; + color: @cde-text; + } + } + + .cde-tinji-direct { + width: 72px; + background: transparent; + border: none; + border-bottom: 2px solid @cde-kungfu; + color: @cde-kungfu; + font-size: 36px; + font-weight: 700; + text-align: center; + text-shadow: 0 0 12px fade(@cde-kungfu, 50%); + padding: 0; + + &:focus { outline: none; } + &[disabled] { opacity: 0.7; cursor: default; } + } + + .cde-tinji-hint { + font-size: 10px; + color: @cde-muted; + text-align: center; + } + + .cde-tinji-actions { + display: flex; + gap: 6px; + margin-top: 6px; + } + + .cde-tinji-spend-btn, + .cde-tinji-reset-btn { + display: flex; + align-items: center; + gap: 5px; + padding: 6px 12px; + font-size: 11px; + font-weight: 600; + border-radius: 4px; + cursor: pointer; + transition: all 0.2s; + letter-spacing: 0.03em; + } + + .cde-tinji-spend-btn { + background: fade(@cde-kungfu, 25%); + border: 1px solid @cde-kungfu; + color: @cde-text; + + &:hover { background: fade(@cde-kungfu, 45%); border-color: lighten(@cde-kungfu, 10%); } + &[disabled] { opacity: 0.55; cursor: not-allowed; pointer-events: none; } + } + + .cde-tinji-reset-btn { + background: @cde-surface2; + border: 1px solid @cde-border-hi; + color: @cde-text; + opacity: 0.85; + + &:hover { border-color: @cde-text; opacity: 1; } + } + + .cde-tinji-visual { + width: 90px; + height: auto; + opacity: 0.85; + flex-shrink: 0; + } +} + +// Chat Tin Ji spend message +.cde-tinji-spend-msg { + display: flex; + align-items: center; + gap: 8px; + font-size: 13px; + padding: 8px 10px; + background: fade(@cde-kungfu, 18%); + border: 1px solid fade(@cde-kungfu, 35%); + border-left: 4px solid @cde-kungfu; + border-radius: 4px; + color: @cde-text; + + .cde-tinji-icon { + font-size: 18px; + color: @cde-kungfu; + text-shadow: 0 0 6px fade(@cde-kungfu, 70%); + flex-shrink: 0; + font-weight: 700; + line-height: 1; + } + + i { + color: @cde-kungfu; + font-size: 15px; + filter: drop-shadow(0 0 4px fade(@cde-kungfu, 60%)); + flex-shrink: 0; + } + + strong { + color: @cde-kungfu; + font-size: 13px; + letter-spacing: 0.02em; + } + + .cde-tinji-remain { + margin-left: auto; + font-size: 11px; + color: fade(@cde-text, 65%); + font-style: italic; + white-space: nowrap; + } +} + +// Post-roll Loksyu draw message — rich notification card +.cde-loksyu-draw-msg { + display: flex; + flex-direction: column; + gap: 5px; + font-size: 12px; + padding: 9px 11px; + background: linear-gradient(135deg, fade(@cde-item, 10%) 0%, fade(@cde-surface, 95%) 100%); + border: 1px solid fade(@cde-item, 40%); + border-left: 4px solid @cde-item; + border-radius: 5px; + color: @cde-text; + box-shadow: 0 2px 8px fade(@cde-item, 12%); + + .cde-loksyu-draw-header { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 5px; + font-size: 13px; + line-height: 1.4; + } + + .cde-loksyu-draw-aspect-icon { + width: 20px; + height: 20px; + object-fit: contain; + filter: drop-shadow(0 0 4px fade(@cde-item, 60%)); + flex-shrink: 0; + } + + .cde-loksyu-draw-user { + font-weight: 700; + color: @cde-item; + letter-spacing: 0.03em; + } + + .cde-loksyu-draw-action { + color: fade(@cde-text, 65%); + font-size: 12px; + font-style: italic; + } + + .cde-loksyu-draw-type { + font-weight: 700; + font-size: 13px; + color: #c9a227; + text-transform: uppercase; + letter-spacing: 0.05em; + text-shadow: 0 0 6px fade(#c9a227, 40%); + } + + .cde-loksyu-draw-from { + color: fade(@cde-text, 60%); + font-size: 11px; + + em { + color: @cde-item; + font-style: normal; + font-weight: 600; + } + } + + .cde-loksyu-draw-footer { + display: flex; + align-items: center; + gap: 5px; + font-size: 11px; + color: fade(@cde-text, 55%); + padding-top: 4px; + border-top: 1px solid fade(@cde-item, 20%); + + i { + color: @cde-item; + font-size: 10px; + } + + .cde-loksyu-remain { + color: @cde-item; + font-weight: 700; + } + } +} + +// Post-roll action buttons section inside a roll-result card +.cde-roll-actions { + margin-top: 10px; + padding-top: 8px; + border-top: 1px solid fade(@cde-border, 60%); + + .cde-roll-actions-title { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.08em; + color: fade(@cde-text, 50%); + margin-bottom: 6px; + display: flex; + align-items: center; + gap: 4px; + + i { font-size: 9px; } + } + + .cde-roll-actions-btns { + display: flex; + flex-wrap: wrap; + gap: 5px; + } + + .cde-roll-action-btn { + display: flex; + align-items: center; + gap: 5px; + padding: 4px 8px; + font-size: 11px; + font-family: "Courier New", Courier, monospace; + border-radius: 3px; + border: 1px solid fade(@cde-border, 80%); + background: fade(@cde-surface, 90%); + color: @cde-text; + cursor: pointer; + transition: background 0.15s, border-color 0.15s, box-shadow 0.15s; + pointer-events: auto; + line-height: 1.4; + + &:hover:not(:disabled) { + border-color: fade(@cde-item, 70%); + background: fade(@cde-item, 12%); + box-shadow: 0 0 6px fade(@cde-item, 25%); + color: @cde-item; + } + + &:disabled { + opacity: 0.35; + cursor: not-allowed; + } + + .cde-roll-action-icon { + width: 16px; + height: 16px; + object-fit: contain; + filter: drop-shadow(0 0 2px fade(@cde-item, 40%)); + } + + .cde-roll-action-label { + flex: 1; + } + + .cde-roll-action-count { + background: fade(@cde-border, 60%); + border-radius: 2px; + padding: 1px 4px; + font-size: 10px; + font-weight: 700; + min-width: 18px; + text-align: center; + } + + .cde-roll-action-tinji-char { + font-size: 14px; + line-height: 1; + color: @cde-kungfu; + text-shadow: 0 0 4px fade(@cde-kungfu, 60%); + } + + &.cde-roll-action--success { + &:hover:not(:disabled) { + border-color: fade(#c9a227, 70%); + background: fade(#c9a227, 10%); + box-shadow: 0 0 6px fade(#c9a227, 25%); + color: #c9a227; + } + } + + &.cde-roll-action--faste { + &:hover:not(:disabled) { + border-color: fade(@cde-item, 70%); + background: fade(@cde-item, 10%); + box-shadow: 0 0 6px fade(@cde-item, 25%); + color: @cde-item; + } + } + + &.cde-roll-action--tinji { + &:hover:not(:disabled) { + border-color: fade(@cde-kungfu, 70%); + background: fade(@cde-kungfu, 12%); + box-shadow: 0 0 6px fade(@cde-kungfu, 30%); + color: @cde-kungfu; + + .cde-roll-action-count { + background: fade(@cde-kungfu, 25%); + } + } + } + } +} + +.cde-loksyu-grid { + display: grid; + grid-template-columns: repeat(5, minmax(0, 1fr)); + gap: @cde-gap; + padding: @cde-gap 0; +} + +.cde-element-card { + background: @cde-surface; + border: 1px solid @cde-border; + border-radius: @cde-radius; + padding: 10px 8px; + display: flex; + flex-direction: column; + gap: 8px; + box-shadow: @cde-shadow-sm; + transition: border-color 0.15s, box-shadow 0.15s; + + &:hover { box-shadow: @cde-shadow; } +} + +// Per-element color theming using LESS variables +.cde-element--wood { border-top: 3px solid @wu-green; .cde-element-name { color: @wu-green; text-shadow: 0 0 6px fade(@wu-green, 50%); } .cde-element-img { filter: drop-shadow(0 0 4px @wu-green); } .cde-element-polarity--yang { border-left: 2px solid fade(@wu-green, 70%); } } +.cde-element--fire { border-top: 3px solid @wu-red; .cde-element-name { color: @wu-red; text-shadow: 0 0 6px fade(@wu-red, 50%); } .cde-element-img { filter: drop-shadow(0 0 4px @wu-red); } .cde-element-polarity--yang { border-left: 2px solid fade(@wu-red, 70%); } } +.cde-element--earth { border-top: 3px solid @wu-brown; .cde-element-name { color: @wu-brown; text-shadow: 0 0 6px fade(@wu-brown, 50%); } .cde-element-img { filter: drop-shadow(0 0 4px @wu-brown); } .cde-element-polarity--yang { border-left: 2px solid fade(@wu-brown, 70%); } } +.cde-element--metal { border-top: 3px solid @wu-gray; .cde-element-name { color: @wu-gray; text-shadow: 0 0 6px fade(@wu-gray, 50%); } .cde-element-img { filter: drop-shadow(0 0 4px @wu-gray); } .cde-element-polarity--yang { border-left: 2px solid fade(@wu-gray, 70%); } } +.cde-element--water { border-top: 3px solid @wu-blue; .cde-element-name { color: @wu-blue; text-shadow: 0 0 6px fade(@wu-blue, 50%); } .cde-element-img { filter: drop-shadow(0 0 4px @wu-blue); } .cde-element-polarity--yang { border-left: 2px solid fade(@wu-blue, 70%); } } + +// Input focus per element +.cde-element--wood .cde-element-polarity input:focus { border-bottom-color: @wu-green; box-shadow: 0 1px 0 0 @wu-green; } +.cde-element--fire .cde-element-polarity input:focus { border-bottom-color: @wu-red; box-shadow: 0 1px 0 0 @wu-red; } +.cde-element--earth .cde-element-polarity input:focus { border-bottom-color: @wu-brown; box-shadow: 0 1px 0 0 @wu-brown; } +.cde-element--metal .cde-element-polarity input:focus { border-bottom-color: @wu-gray; box-shadow: 0 1px 0 0 @wu-gray; } +.cde-element--water .cde-element-polarity input:focus { border-bottom-color: @wu-blue; box-shadow: 0 1px 0 0 @wu-blue; } + +.cde-element-header { + display: flex; + flex-direction: column; + align-items: center; + gap: 6px; + text-align: center; +} + +.cde-element-img { + width: 36px; + height: 36px; + object-fit: contain; + filter: drop-shadow(0 0 4px var(--el-color)); +} + +.cde-element-titles { + display: flex; + flex-direction: column; + gap: 2px; +} + +.cde-element-name { + font-family: "Averia", sans-serif; + font-size: 11px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; // overridden per-element below + white-space: nowrap; +} + +.cde-element-qualities { + font-size: 9px; + color: @cde-muted; + font-style: italic; + line-height: 1.3; + text-align: center; + display: none; // hidden on small width, shown via media query if needed +} + +.cde-element-values { + display: flex; + flex-direction: column; + gap: 4px; +} + +.cde-element-polarity { + display: flex; + align-items: center; + gap: 6px; + padding: 3px 6px; + border-radius: 4px; + background: fade(@cde-bg, 60%); + + &--yin { border-left: 2px solid fade(@cde-muted, 40%); } +} + +.cde-polarity-label { + font-size: 9px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.06em; + color: @cde-muted; + white-space: nowrap; + min-width: 32px; +} + +.cde-element-polarity input { + width: 40px; + border: none; + border-bottom: 1px solid @cde-border; + background: transparent; + color: @cde-text; + font-size: 14px; + font-weight: 700; + text-align: center; + padding: 2px 0; + outline: none; +} + +.cde-loksyu-visual-row { + display: flex; + justify-content: center; + padding-top: @cde-gap; + + .loksyu-visual { + max-width: 100%; + height: auto; + opacity: 0.7; + border-radius: @cde-radius; + border: 1px solid @cde-border; + } +} + +// ============================================================ +// Tin Ji — enhanced display +// ============================================================ +.cde-tinji-layout { + display: flex; + align-items: center; + justify-content: space-between; + gap: @cde-gap * 2; + padding: @cde-gap; + flex-wrap: wrap; +} + +.cde-tinji-main { + display: flex; + flex-direction: column; + align-items: center; + gap: 10px; + flex: 1; +} + +.cde-tinji-chinese { + font-size: 48px; + color: @cde-supernatural; + text-shadow: 0 0 20px fade(@cde-supernatural, 60%); + line-height: 1; + letter-spacing: 0.1em; +} + +.cde-tinji-subtitle { + font-family: "Averia", sans-serif; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.2em; + color: @cde-muted; +} + +.cde-tinji-value-wrapper { + display: flex; + align-items: center; + justify-content: center; + + .cde-tinji-input { + width: 80px; + text-align: center; + font-size: 36px; + font-weight: 700; + color: @cde-supernatural; + text-shadow: 0 0 12px fade(@cde-supernatural, 50%); + border: none; + border-bottom: 2px solid @cde-supernatural; + background: transparent; + outline: none; + padding: 4px 0; + + &:focus { + border-bottom-color: lighten(@cde-supernatural, 15%); + box-shadow: 0 2px 0 0 fade(@cde-supernatural, 60%); + } + } +} + +.cde-tinji-hint { + font-size: 10px; + font-family: "Averia", sans-serif; + color: @cde-muted; + text-transform: uppercase; + letter-spacing: 0.12em; + text-align: center; +} + +.tinji-visual { + max-height: 280px; + max-width: 200px; + border-radius: @cde-radius; + border: 1px solid @cde-border; + box-shadow: @cde-shadow; +} + +// ============================================================ +// Weapon roll button + dialog +// ============================================================ + +.cde-weapon-roll-btn { + color: @cde-weapon !important; + &:hover { text-shadow: 0 0 6px fade(@cde-weapon, 60%); } +} + +.cde-item-damage { + color: @cde-weapon; + font-weight: 700; +} + +.cde-weapon-prompt { + // Weapon info bar at top of dialog + .cde-weapon-info-bar { + display: flex; + align-items: center; + gap: 10px; + padding: 10px 12px; + background: fade(@cde-weapon, 8%); + border: 1px solid fade(@cde-weapon, 30%); + border-radius: @cde-radius; + margin-bottom: @cde-gap; + + .cde-weapon-aspect-icon { + width: 36px; + height: 36px; + object-fit: contain; + } + + .cde-weapon-info-text { + flex: 1; + display: flex; + flex-direction: column; + gap: 2px; + } + + .cde-weapon-info-name { + font-size: 14px; + font-weight: 700; + font-family: "Averia", sans-serif; + color: @cde-text; + } + + .cde-weapon-info-meta { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + font-family: "Averia", sans-serif; + } + + .cde-weapon-info-badge { + font-size: 20px; + color: fade(@cde-weapon, 50%); + } + } +} + +// Weapon damage result in chat card +.cde-rr-weapon-damage { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 12px; + background: fade(@cde-weapon, 10%); + border-top: 1px solid fade(@cde-weapon, 30%); + border-bottom: 1px solid fade(@cde-weapon, 30%); + margin: 4px 0; + + .cde-rr-weapon-icon { + font-size: 16px; + color: @cde-weapon; + text-shadow: 0 0 6px fade(@cde-weapon, 50%); + flex-shrink: 0; + } + + .cde-rr-weapon-text { + display: flex; + flex-direction: column; + gap: 2px; + } + + .cde-rr-weapon-name { + font-size: 11px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + } + + .cde-rr-weapon-calc { + font-size: 12px; + color: @cde-text; + } + + .cde-rr-weapon-total { + font-size: 16px; + font-weight: 900; + color: @cde-weapon; + text-shadow: 0 0 8px fade(@cde-weapon, 60%); + margin: 0 2px; + } + + .cde-rr-weapon-unit { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.06em; + color: @cde-muted; + } +} + +// ============================================================ +// Magics tab — components grid + magic cards +// ============================================================ + +.cde-section-label { + display: flex; + align-items: center; + gap: 8px; + font-size: 10px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.12em; + color: @cde-muted; + border-bottom: 1px solid @cde-border; + padding-bottom: 6px; + margin-bottom: 10px; + + i { font-size: 11px; } + + &--top-margin { margin-top: 18px; } +} + +// 2-column grid for the 10 components +.cde-components-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 6px; + margin-bottom: 10px; +} + +.cde-component-cell { + display: flex; + align-items: center; + gap: 8px; + background: @cde-surface; + border: 1px solid @cde-border; + border-radius: @cde-radius; + padding: 4px 8px; + + &:hover { border-color: @cde-border-hi; } +} + +.cde-component-die { + width: 28px; + height: 28px; + object-fit: contain; + flex-shrink: 0; + opacity: 0.85; +} + +.cde-component-input { + flex: 1; + background: transparent; + border: none; + border-bottom: 1px solid transparent; + color: @cde-text; + font-size: 12px; + padding: 2px 0; + + &:focus { + outline: none; + border-bottom-color: @cde-spell; + } + + &::placeholder { color: @cde-muted; font-style: italic; font-size: 11px; } +} + +.cde-component-random-row { + display: flex; + justify-content: center; + margin-bottom: 4px; +} + +.cde-btn-random-component { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 6px 16px; + background: fade(@cde-spell, 8%); + border: 1px solid fade(@cde-spell, 35%); + border-radius: @cde-radius; + color: @cde-spell; + font-family: "Averia", sans-serif; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.08em; + cursor: pointer; + transition: background 0.15s, box-shadow 0.15s; + + i { font-size: 14px; } + + &:hover { + background: fade(@cde-spell, 16%); + box-shadow: 0 0 8px fade(@cde-spell, 30%); + } +} + +// === Magic type cards === +.cde-magic-card { + background: @cde-surface; + border: 1px solid @cde-border; + border-left: 3px solid @cde-border-hi; + border-radius: @cde-radius; + margin-bottom: 8px; + overflow: hidden; + box-shadow: @cde-shadow-sm; +} + +.cde-magic-header { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 10px; +} + +.cde-magic-aspect-icon { + width: 32px; + height: 32px; + object-fit: contain; + flex-shrink: 0; +} + +.cde-magic-info { + flex: 1; + display: flex; + flex-direction: column; + gap: 1px; + min-width: 0; +} + +.cde-magic-name { + font-family: "Averia", sans-serif; + font-size: 13px; + font-weight: 700; + color: @cde-text; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.cde-magic-aspect-name { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + font-family: "Averia", sans-serif; +} + +.cde-magic-value-input { + width: 52px; + flex-shrink: 0; +} + +.cde-magic-roll-btn { + width: 30px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + border-radius: @cde-radius; + cursor: pointer; + transition: background 0.15s; + flex-shrink: 0; + + i { font-size: 15px; } + + &:hover { background: fade(@cde-spell, 15%); } +} + +.cde-magic-toggle { + width: 28px; + height: 28px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + color: @cde-muted; + flex-shrink: 0; + + input[type="checkbox"] { display: none; } + + i { font-size: 11px; transition: color 0.15s; } + + &:hover i { color: @cde-text; } +} + +// Specialities list +.cde-magic-specialities { + border-top: 1px solid @cde-border; + padding: 4px 0; +} + +.cde-magic-spec-row { + display: flex; + align-items: center; + gap: 8px; + padding: 5px 10px 5px 42px; // indent aligned with aspect icon + opacity: 0.55; + transition: opacity 0.12s, background 0.12s; + + &:hover { opacity: 1; background: fade(@cde-border-hi, 30%); } + &--active { opacity: 1; } +} + +.cde-magic-spec-check-label { + display: flex; + align-items: center; + cursor: pointer; + flex-shrink: 0; + + input[type="checkbox"] { display: none; } + + .cde-spec-checkbox-ui { + width: 14px; + height: 14px; + border: 1px solid @cde-muted; + border-radius: 3px; + display: inline-flex; + align-items: center; + justify-content: center; + transition: border-color 0.12s, background 0.12s; + } + + input:checked + .cde-spec-checkbox-ui { + background: @cde-spell; + border-color: @cde-spell; + + &::after { + content: "✓"; + font-size: 9px; + color: @cde-bg; + line-height: 1; + } + } +} + +.cde-magic-spec-element { + width: 18px; + height: 18px; + object-fit: contain; + flex-shrink: 0; +} + +.cde-magic-spec-polarity { + font-size: 10px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.06em; + color: @cde-muted; + width: 42px; + flex-shrink: 0; + + &.icon-yin { color: @cde-supernatural; } + &.icon-yang { color: @cde-item; } + &.icon-yinyang { color: @cde-spell; } +} + +.cde-magic-spec-name { + flex: 1; + font-size: 12px; + color: @cde-text; + font-family: "Averia", sans-serif; +} + +.cde-magic-spec-roll-btn { + width: 26px; + height: 26px; + display: flex; + align-items: center; + justify-content: center; + border-radius: @cde-radius; + cursor: pointer; + color: @cde-muted; + flex-shrink: 0; + transition: color 0.15s, background 0.15s; + + i { font-size: 12px; } + + &:hover { color: @cde-spell; background: fade(@cde-spell, 12%); } +} + +// Per-magic accent colors using direct Wu Xing LESS variables +.cde-magic--internalcinnabar { + border-left-color: @wu-gray; + .cde-magic-name { color: lighten(@wu-gray, 20%); } + .cde-magic-roll-btn i { color: @wu-gray; } +} +.cde-magic--alchemy { + border-left-color: @wu-blue; + .cde-magic-name { color: lighten(@wu-blue, 15%); } + .cde-magic-roll-btn i { color: @wu-blue; } +} +.cde-magic--masteryoftheway { + border-left-color: @wu-brown; + .cde-magic-name { color: lighten(@wu-brown, 20%); } + .cde-magic-roll-btn i { color: lighten(@wu-brown, 10%); } +} +.cde-magic--exorcism { + border-left-color: @wu-red; + .cde-magic-name { color: lighten(@wu-red, 20%); } + .cde-magic-roll-btn i { color: @wu-red; } +} +.cde-magic--geomancy { + border-left-color: @wu-green; + .cde-magic-name { color: lighten(@wu-green, 15%); } + .cde-magic-roll-btn i { color: @wu-green; } +} + +// ===================================================================== +// GRIMOIRE (spell list integrated in magic discipline cards) +// ===================================================================== + +.cde-grimoire-section { + border-top: 1px dashed fade(@cde-border, 60%); + margin-top: 6px; + padding-top: 6px; +} + +.cde-grimoire-header { + display: flex; + align-items: center; + gap: 6px; + padding: 4px 10px; + font-size: 10px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.1em; + color: @cde-muted; + + i { font-size: 10px; color: @cde-spell; } + + span { flex: 1; } +} + +.cde-grimoire-add { + display: flex; + align-items: center; + justify-content: center; + width: 20px; + height: 20px; + border-radius: 3px; + cursor: pointer; + color: @cde-muted; + transition: color 0.12s, background 0.12s; + + i { font-size: 10px; } + + &:hover { color: @cde-spell; background: fade(@cde-spell, 15%); } +} + +.cde-grimoire-list { + list-style: none; + margin: 0; + padding: 0; +} + +.cde-grimoire-entry { + display: flex; + align-items: center; + gap: 6px; + padding: 4px 10px 4px 14px; + border-bottom: 1px solid fade(@cde-border, 40%); + transition: background 0.1s; + + &:last-child { border-bottom: none; } + + &:hover { + background: fade(@cde-border, 25%); + + .cde-grimoire-controls { opacity: 1; } + } +} + +.cde-grimoire-img { + width: 18px; + height: 18px; + object-fit: contain; + border-radius: 2px; + flex-shrink: 0; +} + +.cde-grimoire-name { + flex: 1; + font-size: 12px; + color: @cde-text; + font-family: "Averia", sans-serif; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.cde-grimoire-meta { + display: flex; + align-items: center; + gap: 8px; + font-size: 10px; + color: @cde-muted; + flex-shrink: 0; + + em { + color: @cde-spell; + font-style: normal; + font-size: 10px; + max-width: 80px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +} + +.cde-grimoire-diff, .cde-grimoire-hei { + display: flex; + align-items: center; + gap: 3px; + + i { font-size: 9px; } +} + +.cde-grimoire-diff { color: @cde-muted; } +.cde-grimoire-hei { color: @cde-kungfu; } + +.cde-grimoire-controls { + display: flex; + align-items: center; + gap: 4px; + opacity: 0; + transition: opacity 0.12s; + flex-shrink: 0; + + a { + display: flex; + align-items: center; + justify-content: center; + width: 18px; + height: 18px; + border-radius: 3px; + color: @cde-muted; + cursor: pointer; + transition: color 0.12s, background 0.12s; + + i { font-size: 10px; } + + &:hover { color: @cde-text; background: fade(@cde-border-hi, 30%); } + } +} + +.cde-grimoire-empty { + padding: 4px 14px 8px; + font-size: 11px; + color: @cde-muted; + font-style: italic; + margin: 0; +} + +// ===================================================================== +// KUNG-FU CARDS (actor tab redesign) +// ===================================================================== + +.cde-kf-add-row { + display: flex; + justify-content: flex-end; + padding: 4px 0 8px; +} + +.cde-kf-add-btn { + display: inline-flex; + align-items: center; + gap: 5px; + font-size: 11px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + cursor: pointer; + padding: 4px 10px; + border-radius: @cde-radius; + border: 1px solid @cde-border; + transition: color 0.12s, border-color 0.12s, background 0.12s; + + i { font-size: 10px; } + + &:hover { color: @cde-kungfu; border-color: @cde-kungfu; background: fade(@cde-kungfu, 8%); } +} + +.cde-kf-card { + border: 1px solid @cde-border; + border-left: 3px solid @cde-kungfu; + border-radius: @cde-radius; + background: fade(@cde-surface, 70%); + margin-bottom: 10px; + overflow: hidden; + transition: box-shadow 0.15s; + + &:hover { box-shadow: 0 0 8px fade(@cde-kungfu, 20%); } + + &.cde-kf--metal { border-left-color: @wu-gray; } + &.cde-kf--eau { border-left-color: @wu-blue; } + &.cde-kf--terre { border-left-color: lighten(@wu-brown, 10%); } + &.cde-kf--feu { border-left-color: @wu-red; } + &.cde-kf--bois { border-left-color: @wu-green; } +} + +.cde-kf-header { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 10px; + + &:hover .cde-kf-controls { opacity: 1; } +} + +.cde-kf-aspect-icon { + width: 26px; + height: 26px; + object-fit: contain; + flex-shrink: 0; +} + +.cde-kf-orient-icon { + width: 18px; + height: 18px; + object-fit: contain; + flex-shrink: 0; + opacity: 0.75; +} + +.cde-kf-info { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; +} + +.cde-kf-name { + font-size: 14px; + font-weight: 700; + font-family: "Averia", sans-serif; + color: @cde-text; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.cde-kf-meta { + font-size: 10px; + color: @cde-muted; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.06em; + + em { color: @cde-text; font-style: normal; } +} + +.cde-kf-roll-btn { + width: 30px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + border-radius: @cde-radius; + cursor: pointer; + color: @cde-muted; + flex-shrink: 0; + transition: color 0.15s, background 0.15s; + + i { font-size: 14px; } + + &:hover { color: @cde-kungfu; background: fade(@cde-kungfu, 15%); } +} + +.cde-kf-controls { + display: flex; + align-items: center; + gap: 4px; + opacity: 0; + transition: opacity 0.12s; + flex-shrink: 0; + + a { + display: flex; + align-items: center; + justify-content: center; + width: 22px; + height: 22px; + border-radius: 3px; + color: @cde-muted; + cursor: pointer; + transition: color 0.12s, background 0.12s; + + i { font-size: 11px; } + + &:hover { color: @cde-text; background: fade(@cde-border-hi, 30%); } + } +} + +.cde-kf-style-row { + display: flex; + align-items: baseline; + gap: 8px; + padding: 4px 12px 6px 44px; + border-top: 1px solid fade(@cde-border, 60%); + background: fade(@cde-surface, 40%); +} + +.cde-kf-style-label { + font-size: 10px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-kungfu; + flex-shrink: 0; + + i { font-size: 9px; } +} + +.cde-kf-style-text { + font-size: 11px; + color: @cde-text; + font-family: "Averia", sans-serif; + font-style: italic; +} + +.cde-kf-techniques { + list-style: none; + margin: 0; + padding: 0; + border-top: 1px solid fade(@cde-border, 50%); +} + +.cde-kf-tech { + display: flex; + align-items: center; + gap: 6px; + padding: 5px 12px 5px 44px; + border-bottom: 1px solid fade(@cde-border, 30%); + opacity: 0.5; + transition: opacity 0.1s, background 0.1s; + + &:last-child { border-bottom: none; } + &--mastered { opacity: 1; } + &:hover { background: fade(@cde-border, 20%); opacity: 1; } +} + +.cde-kf-tech-mastered { + font-size: 11px; + flex-shrink: 0; + width: 14px; + text-align: center; + + .cde-kf-tech--mastered & { color: @cde-kungfu; } + .cde-kf-tech:not(.cde-kf-tech--mastered) & { color: @cde-muted; } +} + +.cde-act-badge { + font-size: 9px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.05em; + padding: 2px 5px; + border-radius: 3px; + flex-shrink: 0; + max-width: 110px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + border: 1px solid currentColor; + + &.cde-act--action-attack { color: @wu-red; background: fade(@wu-red, 10%); } + &.cde-act--action-defense { color: @wu-blue; background: fade(@wu-blue, 10%); } + &.cde-act--action-aid { color: @wu-green; background: fade(@wu-green, 10%); } + &.cde-act--action-attack-defense { color: @wu-gray; background: fade(@wu-gray, 12%); } + &.cde-act--reaction { color: @wu-brown; background: fade(@wu-brown, 12%); } + &.cde-act--dice { color: @cde-spell; background: fade(@cde-spell, 10%); } + &.cde-act--damage-inflicted { color: @cde-weapon; background: fade(@cde-weapon, 10%); } + &.cde-act--damage-received { color: @cde-muted; background: fade(@cde-border, 20%); } +} + +.cde-kf-tech-name { + flex: 1; + font-size: 12px; + color: @cde-text; + font-family: "Averia", sans-serif; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + em { color: @cde-muted; } +} + +.cde-kf-empty { + padding: 16px; + text-align: center; + font-size: 12px; + color: @cde-muted; + font-style: italic; +} + +// Random component chat message +.cde-chat-random-component { + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; + padding: 8px 12px; +} + +.cde-chat-component-label { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.1em; + color: @cde-muted; + font-family: "Averia", sans-serif; +} + +.cde-chat-component-value { + font-size: 16px; + font-weight: 700; + color: @cde-spell; + text-shadow: 0 0 8px fade(@cde-spell, 50%); +} + +// Legacy tabs (actor sheets still use cde-tabs) +.cde-tabs { + margin-top: @cde-gap; + border-bottom: 1px solid @cde-border; + + .item { + color: @cde-muted; + padding: 8px 12px; + font-size: 11px; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.08em; + + &:hover { color: @cde-text; } + + &.active { + color: @cde-item; + background: @cde-surface; + border: 1px solid @cde-border; + border-bottom: 1px solid @cde-surface; + border-radius: @cde-radius @cde-radius 0 0; + } + } +} + + +/* ============================================= + Global UI Rules + =============================================*/ + +#logo { + content: url("/systems/fvtt-chroniques-de-l-etrange/images/logo_jeu.webp"); + width: 100px; + height: 100px; + margin-left: 7px; + margin-top: -2px; +} + +#pause > img { + content: url("/systems/fvtt-chroniques-de-l-etrange/images/wheel.webp"); + height: 192px; + width: 192px; + top: -45px; + left: calc(50% - 96px); +} + +#pause.paused { + animation: none; +} + +a.compendium-name, +a.entry-name, +strong.ellipsis { + font-family: "Averia"; +} + + + +/* concerne les pages de journaux */ + +.journal-header input { + font-family: "Averia"; +} + +.journal-entry-page h1 { + font-family: "Averia"; + text-align: center; + color:hsla(249, 66%, 58%, 0.874); + border-bottom: 1px solid orange; + border-top: 1px solid orange; + border-top: 1px solid orange; + +} + +.journal-entry-page h2 { + font-family: "Averia"; + color:orange; + border-bottom: 0px; + border-top: 1px solid orange; +} + +.journal-entry-page h3, +.journal-entry-page h4, +.journal-entry-page h5, +.journal-entry-page h6 { + font-family: "Averia"; + color:hsla(249, 66%, 58%, 0.874); + border-bottom: 0px; +} + +/* concerne le Tchat */ + +#interface .chat-message .message-header img { + max-width: 80px; + border-radius: 5px; + border: 0.5px solid black; + /* max-width: 50px; */ + /* max-height: 50px; */ + margin-right: 4px; +} + +#interface .chat-message .message-header .message-sender { + width: 100px; +} + +// ============================================================ +// Three Treasures partial layout +// ============================================================ +.cde-flex-center-text { + display: flex; + justify-content: center; + align-items: center; + text-align: center; +} + +.cde-flex-center { + display: flex; + justify-content: center; + align-items: center; +} + +// ============================================================ +// Circle input — replaces cercle.webp overlay approach +// ============================================================ +.cde-circle-input { + width: 44px !important; + height: 44px !important; + border-radius: 50%; + border: 2px solid @cde-border-hi; + background: @cde-surface; + color: @cde-text; + text-align: center; + font-size: 1.1rem; + font-weight: 700; + padding: 0; + flex-shrink: 0; + display: inline-block !important; + line-height: 40px; + vertical-align: middle; + box-sizing: border-box; + + &:focus { + outline: none; + border-color: @cde-item; + box-shadow: 0 0 8px fade(@cde-item, 40%); + } + + &.cde-circle-sm { + width: 32px !important; + height: 32px !important; + font-size: 0.85rem; + line-height: 28px; + } +} + +// ============================================================ +// Skills table +// ============================================================ +.cde-skills-table { + width: 100%; + border-collapse: collapse; + + tr { border-bottom: 1px solid @cde-border; } + tr:last-child { border-bottom: none; } + + td { + padding: 3px 4px; + vertical-align: middle; + } + + td.click, td.noclick { + width: 30px; + min-width: 30px; + text-align: center; + cursor: pointer; + + &:hover img { filter: drop-shadow(0 0 5px @cde-item); } + } + + td.noclick { cursor: default; opacity: 0.4; } + + .cde-skill-label { + white-space: nowrap; + font-size: 0.8rem; + padding-right: 8px; + } + + .cde-val-cell { + width: 52px; + min-width: 52px; + text-align: center; + padding: 4px; + } + + .cde-spec-cell { + width: 100%; + input[type="text"] { width: 100%; } + } + + .cde-bonus-cell { + white-space: nowrap; + font-family: monospace; + font-size: 0.65rem; + color: @cde-muted; + padding: 0 6px; + } + + .cde-check-cell { width: 22px; text-align: center; } +} + +// ============================================================ +// Three Treasures layout (HEI / SAN-ZING / PTAO) +// ============================================================ +.cde-tt-block { + margin-bottom: 12px; + + .cde-tt-row { + display: flex; + align-items: center; + justify-content: center; + gap: 10px; + } + + .cde-tt-labels { + margin-bottom: 4px; + span { + width: 52px; + text-align: center; + font-family: "Averia", sans-serif; + font-size: 0.6rem; + text-transform: uppercase; + color: @cde-muted; + } + .cde-tt-center { width: 44px; } + } + + .cde-tt-yinyang { + width: 44px; + height: 44px; + opacity: 0.8; + } +} + +.cde-tt-sanzing { + margin-bottom: 12px; + + .cde-tt-sz-header, + .cde-tt-sz-row { + display: grid; + grid-template-columns: 36px 48px 1fr 48px 36px; + align-items: center; + gap: 6px; + padding: 4px 8px; + } + + .cde-tt-sz-header { + font-family: "Averia", sans-serif; + font-size: 0.6rem; + text-transform: uppercase; + color: @cde-muted; + text-align: center; + } + + .cde-tt-sz-row { + border-top: 1px solid @cde-border; + + .cde-circle-input { justify-self: center; } + } + + .cde-tt-level { + text-align: center; + font-family: monospace; + font-size: 0.75rem; + font-weight: 700; + color: @cde-muted; + } +} + +// ============================================================ +// Ng Hang — Aspects grid +// ============================================================ +.cde-aspects-header { + display: flex; + justify-content: center; + margin-bottom: 10px; + + .cde-aspects-logo { + max-height: 48px; + opacity: 0.7; + } +} + +.cde-aspects-grid { + display: flex; + flex-wrap: wrap; + gap: 8px; + justify-content: center; + margin-bottom: 12px; +} + +.cde-aspect-card { + display: flex; + flex-direction: column; + align-items: center; + gap: 6px; + padding: 10px 8px; + border-radius: 4px; + background: @cde-surface; + border: 1px solid @cde-border; + min-width: 88px; + flex: 1 1 88px; + max-width: 120px; + + .cde-aspect-top { + display: flex; + flex-direction: column; + align-items: center; + gap: 3px; + } + + .cde-aspect-gif { width: 36px; height: 36px; } + + .cde-aspect-name { + font-family: "Averia"; + font-size: 0.8rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.08em; + } + + .cde-aspect-roll { + display: flex; + align-items: center; + gap: 6px; + + .cde-roll-trigger { + cursor: pointer; + display: flex; + align-items: center; + + &:hover img { filter: drop-shadow(0 0 5px currentColor); } + } + } + + .cde-aspect-qual { + font-size: 0.6rem; + color: @cde-muted; + text-align: center; + line-height: 1.3; + } + + &.cde-aspect--fire { + border-color: @cde-kungfu; + .cde-aspect-name { color: @cde-kungfu; } + .cde-circle-input:focus { border-color: @cde-kungfu; box-shadow: 0 0 6px @cde-kungfu; } + } + + &.cde-aspect--wood { + border-color: #44bb44; + .cde-aspect-name { color: #55cc55; } + .cde-circle-input:focus { border-color: #55cc55; box-shadow: 0 0 6px #55cc55; } + } + + &.cde-aspect--earth { + border-color: #aa7722; + .cde-aspect-name { color: #cc9933; } + .cde-circle-input:focus { border-color: #cc9933; box-shadow: 0 0 6px #cc9933; } + } + + &.cde-aspect--water { + border-color: @cde-spell; + .cde-aspect-name { color: @cde-spell; } + .cde-circle-input:focus { border-color: @cde-spell; box-shadow: 0 0 6px @cde-spell; } + } + + &.cde-aspect--metal { + border-color: @cde-muted; + .cde-aspect-name { color: @cde-text; } + .cde-circle-input:focus { border-color: @cde-item; box-shadow: 0 0 6px @cde-item; } + } +} + +.cde-nghang-diagram { + display: flex; + justify-content: center; + margin-top: 8px; + + img { + max-width: 100%; + max-height: 180px; + opacity: 0.45; + border-radius: 4px; + cursor: zoom-in; + transition: opacity 0.2s ease, box-shadow 0.2s ease; + + &:hover { + opacity: 0.85; + box-shadow: 0 0 12px @cde-border-hi; + } + } +} + +.img-die-sm { + width: 27px !important; + height: 27px !important; + flex-shrink: 0; +} + +// ============================================================ +// Magics partial layout +// ============================================================ +.cde-magics-table { + td.image { + width: 2.2%; + &.td-die { width: 2%; } + } + td.value { width: 25%; } + td.td-spacer { width: 2.2%; } +} + +.chancethrow { + display: flex; + justify-content: center; + align-items: center; +} + +// ============================================================ +// Actor sheet item lists +// ============================================================ +.cde-item-group-label { + font-family: "Averia", sans-serif; + font-size: 0.65rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.15em; + color: @cde-muted; + padding: 2px 6px; + border-left: 2px solid @cde-border-hi; + margin: 8px 0 2px; + flex-shrink: 0; +} + +ol.item-list { + list-style: none; + margin: 0 0 4px; + padding: 0; + + li.item { + display: flex; + align-items: center; + gap: 8px; + padding: 3px 6px; + border-radius: 4px; + background: @cde-surface; + border: 1px solid @cde-border; + margin-bottom: 2px; + + img { border: none; border-radius: 3px; flex-shrink: 0; } + + h4.item-name { flex: 1 1 0; margin: 0; font-size: 13px; color: @cde-text; } + + .cde-item-stat { + font-family: monospace; + font-size: 11px; + color: @cde-muted; + } + + .item-controls { + display: flex; + gap: 4px; + flex-shrink: 0; + + a.item-control { + color: @cde-muted; + &:hover { color: @cde-text; } + } + } + } +} + +// ============================================================ +// Roll Prompt Dialogs (.cde-roll-prompt) +// ============================================================ + +.cde-roll-prompt { + background: @cde-bg; + color: @cde-text; + font-family: "Averia", sans-serif; + padding: 12px 14px; + + &.cde-roll-prompt--magic { + min-width: 340px; + } + + .cde-roll-header { + display: flex; + justify-content: space-between; + align-items: center; + padding-bottom: 8px; + margin-bottom: 10px; + border-bottom: 1px solid @cde-border; + } + + .cde-roll-title { + font-size: 13px; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; + color: @cde-text; + } + + .cde-roll-dice-count { + font-size: 36px; + font-weight: 900; + color: @cde-item; + line-height: 1; + text-align: center; + margin: 4px 0 8px; + text-shadow: 0 0 12px fade(@cde-item, 60%); + + .cde-roll-dice-label { + font-size: 14px; + font-weight: 600; + color: @cde-muted; + margin-left: 4px; + } + } + + .cde-roll-section { + margin-bottom: 8px; + + &.cde-roll-section--separator { + padding-bottom: 10px; + margin-bottom: 10px; + border-bottom: 1px dashed @cde-border; + } + } + + .cde-roll-section-title { + font-size: 11px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.1em; + color: @cde-muted; + margin: 0 0 6px; + } + + .cde-roll-fields { + display: flex; + flex-direction: column; + gap: 5px; + } + + .cde-roll-field { + display: flex; + align-items: center; + gap: 8px; + + label { + flex: 0 0 160px; + font-size: 11px; + color: @cde-muted; + text-transform: uppercase; + letter-spacing: 0.05em; + } + + select, + .cde-roll-input { + flex: 1; + background: @cde-surface; + border: none; + border-bottom: 1px solid @cde-border; + color: @cde-text; + font-family: monospace; + font-size: 13px; + padding: 3px 6px; + border-radius: 2px; + + &:focus { + outline: none; + border-bottom-color: @cde-item; + box-shadow: 0 1px 0 0 @cde-item; + } + } + + select option { + background: @cde-surface; + color: @cde-text; + } + } + + .cde-roll-hint { + font-size: 10px; + color: @cde-muted; + margin: 4px 0 0; + font-style: italic; + } +} + +// ============================================================ +// Dice Roll Result in Chat (.cde-roll-result) +// ============================================================ + +// Wu Xing aspect color + icon custom properties +// Row order: [successes, auspicious, noxious, loksyu, tinji] +// Colors: wood=#41a436 fire=#cd171a earth=#a85747 metal=#70706e water=#009fe2 + +@wu-green: #41a436; +@wu-red: #cd171a; +@wu-brown: #a85747; +@wu-gray: #70706e; +@wu-blue: #009fe2; + +@wu-img-bois: ~"url(/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.webp)"; +@wu-img-feu: ~"url(/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.webp)"; +@wu-img-terre: ~"url(/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.webp)"; +@wu-img-metal: ~"url(/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.webp)"; +@wu-img-eau: ~"url(/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.webp)"; + +// Wu Xing aspect custom properties (accent color + icon per aspect) +// Sets --rr-accent on the card root, plus per-row --rr-color/--rr-icon +[data-aspect="wood"] { + --rr-accent: @wu-green; + --rr-accent-bg: fade(@wu-green, 12%); + .cde-rr-row--auspicious { --rr-color: @wu-red; --rr-icon: @wu-img-feu; } + .cde-rr-row--noxious { --rr-color: @wu-blue; --rr-icon: @wu-img-eau; } + .cde-rr-row--loksyu { --rr-color: @wu-brown; --rr-icon: @wu-img-terre; } + .cde-rr-row--tinji { --rr-color: @wu-gray; --rr-icon: @wu-img-metal; } +} +[data-aspect="fire"] { + --rr-accent: @wu-red; + --rr-accent-bg: fade(@wu-red, 12%); + .cde-rr-row--auspicious { --rr-color: @wu-brown; --rr-icon: @wu-img-terre; } + .cde-rr-row--noxious { --rr-color: @wu-green; --rr-icon: @wu-img-bois; } + .cde-rr-row--loksyu { --rr-color: @wu-gray; --rr-icon: @wu-img-metal; } + .cde-rr-row--tinji { --rr-color: @wu-blue; --rr-icon: @wu-img-eau; } +} +[data-aspect="earth"] { + --rr-accent: @wu-brown; + --rr-accent-bg: fade(@wu-brown, 12%); + .cde-rr-row--auspicious { --rr-color: @wu-gray; --rr-icon: @wu-img-metal; } + .cde-rr-row--noxious { --rr-color: @wu-red; --rr-icon: @wu-img-feu; } + .cde-rr-row--loksyu { --rr-color: @wu-blue; --rr-icon: @wu-img-eau; } + .cde-rr-row--tinji { --rr-color: @wu-green; --rr-icon: @wu-img-bois; } +} +[data-aspect="metal"] { + --rr-accent: @wu-gray; + --rr-accent-bg: fade(@wu-gray, 16%); + .cde-rr-row--auspicious { --rr-color: @wu-blue; --rr-icon: @wu-img-eau; } + .cde-rr-row--noxious { --rr-color: @wu-brown; --rr-icon: @wu-img-terre; } + .cde-rr-row--loksyu { --rr-color: @wu-green; --rr-icon: @wu-img-bois; } + .cde-rr-row--tinji { --rr-color: @wu-red; --rr-icon: @wu-img-feu; } +} +[data-aspect="water"] { + --rr-accent: @wu-blue; + --rr-accent-bg: fade(@wu-blue, 12%); + .cde-rr-row--auspicious { --rr-color: @wu-green; --rr-icon: @wu-img-bois; } + .cde-rr-row--noxious { --rr-color: @wu-gray; --rr-icon: @wu-img-metal; } + .cde-rr-row--loksyu { --rr-color: @wu-red; --rr-icon: @wu-img-feu; } + .cde-rr-row--tinji { --rr-color: @wu-brown; --rr-icon: @wu-img-terre; } +} + +.cde-roll-result { + background: @cde-bg; + color: @cde-text; + font-family: 'Share Tech Mono', monospace; + border-radius: 4px; + border: 1px solid @cde-border; + overflow: hidden; + + // ---- Header ---- + .cde-rr-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 8px 12px; + background: var(--rr-accent-bg, fade(@cde-surface, 80%)); + border-left: 4px solid var(--rr-accent, @cde-border); + border-bottom: 1px solid @cde-border; + gap: 8px; + + .cde-rr-header-left { + display: flex; + align-items: center; + gap: 10px; + flex: 1; + } + + .cde-rr-aspect-icon { + width: 32px; + height: 32px; + object-fit: contain; + filter: drop-shadow(0 0 4px var(--rr-accent, @cde-border)); + border: none; + } + + .cde-rr-header-text { + display: flex; + flex-direction: column; + } + + .cde-rr-aspect-label { + font-size: 11px; + font-weight: 900; + text-transform: uppercase; + letter-spacing: 0.12em; + color: var(--rr-accent, @cde-text); + text-shadow: 0 0 6px var(--rr-accent, transparent); + } + + .cde-rr-roll-label { + font-size: 13px; + font-weight: 600; + color: @cde-text; + } + + .cde-rr-header-right { + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 2px; + } + + .cde-rr-actor-avatar { + width: 28px; + height: 28px; + border-radius: 50%; + border: 1px solid var(--rr-accent, @cde-border); + object-fit: cover; + } + + .cde-rr-actor-name { + font-size: 9px; + color: @cde-muted; + text-transform: uppercase; + letter-spacing: 0.05em; + } + } + + // ---- Hero: successes count ---- + .cde-rr-hero { + display: flex; + align-items: center; + gap: 12px; + padding: 10px 16px; + background: fade(@cde-surface, 40%); + + .cde-rr-hero-count { + font-size: 48px; + font-weight: 900; + line-height: 1; + color: var(--rr-accent, @cde-text); + text-shadow: 0 0 16px var(--rr-accent, transparent), 0 0 32px var(--rr-accent, transparent); + } + + .cde-rr-hero-right { + display: flex; + flex-direction: column; + } + + .cde-rr-hero-label { + font-size: 11px; + font-weight: 900; + text-transform: uppercase; + letter-spacing: 0.1em; + color: var(--rr-accent, @cde-text); + } + + .cde-rr-hero-dice { + font-size: 13px; + color: @cde-muted; + margin-top: 2px; + } + + .cde-rr-hero-dice-label { + font-size: 10px; + } + + .cde-rr-spell-power { + margin-left: auto; + display: flex; + flex-direction: column; + align-items: flex-end; + border-left: 2px solid var(--rr-accent, @cde-border); + padding-left: 10px; + + .cde-rr-spell-power-count { + font-size: 32px; + font-weight: 900; + line-height: 1; + color: var(--rr-accent, @cde-text); + text-shadow: 0 0 12px var(--rr-accent, transparent); + } + + .cde-rr-spell-power-label { + font-size: 9px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.1em; + color: @cde-muted; + } + } + + // Loksyu bonus badge (shown when dice drawn from Loksyu) + .cde-rr-loksyu-bonus { + display: inline-flex; + align-items: center; + gap: 3px; + font-size: 13px; + font-weight: 700; + padding: 2px 6px; + border-radius: 3px; + animation: cde-pulse-in 0.3s ease; + + &.cde-rr-loksyu-bonus--success { + background: fade(#c9a227, 20%); + border: 1px solid fade(#c9a227, 50%); + color: #c9a227; + text-shadow: 0 0 6px fade(#c9a227, 60%); + } + + &.cde-rr-loksyu-bonus--faste { + background: fade(@cde-item, 15%); + border: 1px solid fade(@cde-item, 40%); + color: @cde-item; + text-shadow: 0 0 6px fade(@cde-item, 50%); + } + } + } + + @keyframes cde-pulse-in { + from { opacity: 0; transform: scale(0.7); } + to { opacity: 1; transform: scale(1); } + } + + // ---- Detail rows ---- + .cde-rr-details { + display: flex; + flex-direction: column; + gap: 2px; + padding: 6px 10px; + } + + .cde-rr-row { + display: flex; + align-items: center; + gap: 8px; + padding: 3px 6px; + border-radius: 3px; + background: fade(@cde-surface, 60%); + color: var(--rr-color, @cde-muted); + + .cde-rr-count { + font-size: 18px; + font-weight: 900; + line-height: 1; + min-width: 26px; + text-align: center; + text-shadow: 0 0 6px currentColor; + } + + // Inline Loksyu bonus badge in detail rows + .cde-rr-loksyu-bonus { + font-size: 10px; + font-weight: 700; + padding: 1px 4px; + border-radius: 2px; + background: fade(@cde-item, 15%); + border: 1px solid fade(@cde-item, 40%); + color: @cde-item; + text-shadow: 0 0 4px fade(@cde-item, 50%); + flex-shrink: 0; + } + + .cde-rr-icon { + width: 22px; + height: 22px; + background-image: var(--rr-icon); + background-size: contain; + background-repeat: no-repeat; + background-position: center; + flex-shrink: 0; + opacity: 0.85; + } + + .cde-rr-label { + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.07em; + flex: 1; + } + + .cde-rr-partition { + font-size: 9px; + color: @cde-muted; + margin-left: 4px; + } + } + + // ---- Footer modifiers ---- + .cde-rr-footer { + padding: 5px 12px; + border-top: 1px solid @cde-border; + background: fade(@cde-surface, 30%); + display: flex; + align-items: baseline; + gap: 6px; + + .cde-rr-footer-label { + font-size: 9px; + font-weight: 700; + text-transform: uppercase; + color: @cde-muted; + letter-spacing: 0.08em; + } + + .cde-rr-footer-text { + font-size: 10px; + color: @cde-muted; + font-family: "Averia", sans-serif; + } + } + + // ---- Dice face grid ---- + .cde-dice-grid { + display: grid; + grid-template-columns: repeat(10, 1fr); + gap: 3px; + padding: 8px 8px 6px; + border-top: 1px solid @cde-border; + + .cde-dice-cell { + display: flex; + flex-direction: column; + align-items: center; + gap: 1px; + + .cde-dice-count { + font-size: 12px; + font-weight: 700; + color: @cde-text; + line-height: 1; + } + + .cde-dice-plate { + width: 100%; + border: none; + opacity: 0.65; + } + } + } +} + + +// ============================================================ +// Initiative prompt dialog +// ============================================================ +.cde-initiative-prompt { + // Override: fields use vertical layout (label on top, control below) + // to avoid the fixed 160px label squeezing the select to 12px. + .cde-roll-field { + flex-direction: column; + align-items: stretch; + gap: 4px; + + label { + flex: none; + font-size: 10px; + color: @cde-muted; + text-transform: uppercase; + letter-spacing: 0.05em; + } + + select, .cde-roll-input { + flex: none; + width: 100%; + } + } + + .cde-initiative-base-row { + display: flex; + align-items: flex-end; + gap: 10px; + flex-wrap: nowrap; + } + + .cde-initiative-base-field { + flex-shrink: 0; + min-width: 70px; + } + + .cde-initiative-base-value { + display: block; + font-size: 22px; + font-weight: 800; + color: @cde-spell; + text-shadow: 0 0 8px fade(@cde-spell, 50%); + text-align: center; + line-height: 1; + padding: 4px 0; + } + + .cde-initiative-op { + font-size: 18px; + font-weight: 700; + color: @cde-muted; + padding-bottom: 6px; + flex-shrink: 0; + align-self: flex-end; + } + + .cde-initiative-action-field { + flex: 1; + min-width: 0; + } + + .cde-initiative-select { + width: 100%; + } + + .cde-initiative-hint { + font-size: 10px; + font-family: "Averia", sans-serif; + color: @cde-muted; + text-align: center; + letter-spacing: 0.05em; + padding: 4px 0 0; + border-top: 1px solid @cde-border; + margin-top: 4px; + } + + .cde-initiative-icon { + font-size: 20px; + color: @cde-spell; + } +} + +// ============================================================ +// Initiative chat result card +// ============================================================ +.cde-initiative-result { + background: @cde-surface; + border: 1px solid @cde-border; + border-left: 4px solid @cde-spell; + border-radius: @cde-radius; + overflow: hidden; + color: @cde-text; + + .cde-ir-header { + display: flex; + align-items: center; + gap: 10px; + padding: 10px 12px; + background: fade(@cde-spell, 8%); + border-bottom: 1px solid @cde-border; + } + + .cde-ir-avatar { + width: 36px; + height: 36px; + border-radius: 50%; + border: 2px solid @cde-border; + object-fit: cover; + flex-shrink: 0; + } + + .cde-ir-actor-info { + display: flex; + flex-direction: column; + gap: 2px; + } + + .cde-ir-actor-name { + font-size: 13px; + font-weight: 700; + color: @cde-text; + } + + .cde-ir-roll-label { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.1em; + color: @cde-muted; + font-family: "Averia", sans-serif; + } + + .cde-ir-formula { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + gap: 5px; + padding: 8px 12px; + background: fade(@cde-bg, 60%); + border-bottom: 1px solid @cde-border; + font-family: monospace; + font-size: 12px; + } + + .cde-ir-formula-base { + color: @cde-muted; + font-size: 11px; + } + + .cde-ir-formula-val { + font-weight: 700; + color: @cde-text; + font-size: 13px; + } + + .cde-ir-formula-mod { + color: @cde-kungfu; + } + + .cde-ir-formula-sep { + color: @cde-muted; + } + + .cde-ir-formula-eq { + color: @cde-muted; + font-size: 14px; + } + + .cde-ir-formula-total { + font-size: 16px; + font-weight: 800; + color: @cde-spell; + text-shadow: 0 0 6px fade(@cde-spell, 50%); + } + + .cde-ir-hero { + display: flex; + align-items: center; + justify-content: center; + gap: 14px; + padding: 14px 12px; + } + + .cde-ir-init-value { + font-size: 48px; + font-weight: 900; + color: @cde-spell; + text-shadow: 0 0 12px fade(@cde-spell, 70%), 0 0 24px fade(@cde-spell, 35%); + line-height: 1; + font-family: 'Averia Regular', sans-serif; + } + + .cde-ir-hero-right { + display: flex; + flex-direction: column; + gap: 4px; + } + + .cde-ir-init-label { + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.1em; + color: @cde-muted; + font-family: "Averia", sans-serif; + } + + .cde-ir-anti { + display: flex; + gap: 5px; + align-items: baseline; + } + + .cde-ir-anti-label { + font-size: 10px; + color: @cde-muted; + font-family: "Averia", sans-serif; + text-transform: uppercase; + letter-spacing: 0.05em; + } + + .cde-ir-anti-value { + font-size: 14px; + font-weight: 700; + color: @cde-kungfu; + text-shadow: 0 0 5px fade(@cde-kungfu, 40%); + } +} + + +/* ============================================================ + ROUE D'INITIATIVE — CDEWheelApp + ============================================================ */ + +// Wu Xing segment colours (match JS constants) +@wu-metal: #b8c4cc; +@wu-water: #3a7bd5; +@wu-earth: #c8a84b; +@wu-fire: #d94f3d; +@wu-wood: #4a9b5a; +@wu-reference: #2c1f6b; + +.cde-wheel-app { + color: @cde-text; + background: @cde-bg; + font-family: "Averia", "Averia Regular", sans-serif; + + .window-content { + padding: 0; + overflow: hidden; + } +} + +/* Two-column layout: SVG wheel left, panel right */ +.cde-wheel-layout { + display: flex; + height: 100%; + min-height: 520px; +} + +/* ---- Left: SVG wheel ---- */ +.cde-wheel-svg-container { + flex: 0 0 480px; + width: 480px; + padding: 12px 12px 6px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background: @cde-surface2; + border-right: 1px solid @cde-border; + + svg { + flex: 1 1 auto; + width: 100%; + max-width: 456px; + max-height: 456px; + overflow: visible; + } + + .cde-wheel-legend { + display: flex; + align-items: center; + gap: 8px; + padding: 4px 0 2px; + font-size: 11px; + color: rgba(255,255,255,0.55); + flex-shrink: 0; + } + + .cde-wheel-legend-dot { + display: inline-block; + width: 10px; + height: 10px; + border-radius: 50%; + flex-shrink: 0; + } + + .cde-wheel-segment { + stroke: @cde-bg; + stroke-width: 1.5; + transition: opacity 0.2s; + } + + .cde-wheel-cran-label { + font-family: "Averia Regular", sans-serif; + font-size: 12px; + fill: rgba(255,255,255,0.55); + text-anchor: middle; + dominant-baseline: central; + pointer-events: none; + user-select: none; + } + + // Combatant token circle on the wheel + .cde-wheel-fighter-circle { + stroke-width: 2; + cursor: pointer; + transition: r 0.2s, stroke-width 0.2s; + + &:hover { + stroke-width: 3; + } + + &.is-active { + r: 18; + stroke-width: 3; + filter: drop-shadow(0 0 5px rgba(255, 255, 255, 0.7)); + } + + &.is-turn { + stroke-dasharray: 3 2; + animation: cde-spin 4s linear infinite; + } + } + + .cde-wheel-fighter-initial { + font-size: 13px; + font-weight: 700; + fill: #fff; + text-anchor: middle; + dominant-baseline: central; + pointer-events: none; + } +} + +/* ---- Right: panel ---- */ +.cde-wheel-panel { + flex: 1 1 auto; + display: flex; + flex-direction: column; + overflow: hidden; + padding: 0; + min-width: 0; +} + +.cde-wheel-section-title { + padding: 7px 12px 6px; + border-bottom: 1px solid @cde-border; + background: @cde-surface2; + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.12em; + color: @cde-muted; + border-left: 3px solid @cde-spell; + flex-shrink: 0; + + em { + font-style: normal; + color: @cde-text; + text-transform: none; + letter-spacing: 0; + font-size: 11px; + } +} + +/* Combatant list */ +.cde-wheel-combatants { + flex: 0 0 auto; + max-height: 130px; + overflow-y: auto; + border-bottom: 1px solid @cde-border; +} + +.cde-wheel-combatant { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 12px 6px 9px; + cursor: pointer; + border-bottom: 1px solid fade(@cde-border, 50%); + border-left: 3px solid transparent; + transition: background 0.15s, border-color 0.15s; + + &:last-child { border-bottom: none; } + + &:hover { + background: @cde-surface; + } + + &.cde-wheel-combatant--selected { + background: fade(@cde-spell, 10%); + border-left-color: @cde-spell; + + .cde-wheel-combatant-name { + color: @cde-text; + font-weight: 600; + } + } + + &.cde-wheel-combatant--active { + .cde-wheel-active-marker { + color: #f0c040; + filter: drop-shadow(0 0 3px #f0c040); + } + } +} + +.cde-wheel-combatant-img { + width: 30px; + height: 30px; + border-radius: 50%; + object-fit: cover; + border: 1.5px solid @cde-border-hi; + flex-shrink: 0; +} + +.cde-wheel-combatant-name { + flex: 1 1 auto; + font-size: 13px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + color: @cde-muted; +} + +.cde-wheel-combatant-cran { + font-size: 11px; + font-weight: 700; + font-variant-numeric: tabular-nums; + flex-shrink: 0; + min-width: 22px; + text-align: center; + padding: 2px 6px; + border-radius: 12px; + line-height: 1.3; +} + +.cde-wheel-active-marker { + font-size: 10px; + color: @cde-muted; + flex-shrink: 0; +} + +/* Action area */ +.cde-wheel-actions { + flex: 1 1 auto; + display: flex; + flex-direction: column; + overflow-y: auto; + padding: 8px 10px 10px; + gap: 6px; + + &.cde-wheel-actions--hint { + justify-content: center; + align-items: center; + } +} + +.cde-wheel-hint { + color: @cde-muted; + font-size: 12px; + text-align: center; + font-style: italic; + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + + i { + font-size: 22px; + opacity: 0.4; + } +} + +.cde-wheel-action-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 5px; +} + +.cde-wheel-action-btn { + display: flex; + align-items: center; + justify-content: space-between; + gap: 4px; + background: @cde-surface; + border: 1px solid @cde-border-hi; + border-radius: @cde-radius-sm; + color: @cde-muted; + font-size: 11px; + padding: 5px 7px; + cursor: pointer; + text-align: left; + transition: background 0.15s, border-color 0.15s, color 0.15s, box-shadow 0.15s; + font-family: inherit; + + &:hover { + color: @cde-text; + background: @cde-border; + border-color: @cde-border-hi; + } + + .cde-wheel-action-name { + flex: 1 1 auto; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .cde-wheel-action-cost { + flex-shrink: 0; + font-weight: 700; + font-size: 10px; + padding: 1px 5px; + border-radius: 10px; + background: @cde-border-hi; + color: @cde-muted; + line-height: 1.4; + } + + &[data-cost="1"] { + &:hover { box-shadow: 0 0 6px fade(@cde-spell, 22%); } + .cde-wheel-action-cost { background: #1a3d6a; color: #6aadff; } + } + &[data-cost="2"] { + &:hover { box-shadow: 0 0 6px fade(#d4a050, 25%); } + .cde-wheel-action-cost { background: #4a3200; color: #d4a050; } + } + &[data-cost="3"] { + &:hover { box-shadow: 0 0 6px fade(#e06030, 28%); } + .cde-wheel-action-cost { background: #4a1800; color: #e07840; } + } + &[data-cost="6"] { + border-color: fade(#cc2040, 40%); + &:hover { box-shadow: 0 0 6px fade(#cc2040, 35%); } + .cde-wheel-action-cost { background: #4a0814; color: #e03050; } + } +} + +/* Special action buttons */ +.cde-wheel-special-actions { + display: flex; + gap: 6px; + margin-top: 2px; +} + +.cde-wheel-btn-roll, +.cde-wheel-btn-surprise { + flex: 1 1 0; + display: flex; + align-items: center; + justify-content: center; + gap: 6px; + border-radius: @cde-radius-sm; + font-size: 11px; + font-weight: 600; + padding: 7px 8px; + cursor: pointer; + font-family: inherit; + transition: background 0.15s, box-shadow 0.15s; + border: 1px solid; +} + +.cde-wheel-btn-roll { + background: fade(#c08a00, 14%); + border-color: fade(#c08a00, 50%); + color: #e0b030; + + &:hover { + background: fade(#c08a00, 26%); + box-shadow: 0 0 8px fade(#c08a00, 40%); + } +} + +.cde-wheel-btn-surprise { + background: fade(@cde-kungfu, 12%); + border-color: fade(@cde-kungfu, 45%); + color: @cde-kungfu; + + &:hover { + background: fade(@cde-kungfu, 24%); + box-shadow: 0 0 8px fade(@cde-kungfu, 35%); + } +} + +/* No-combat empty state */ +.cde-wheel-no-combat { + flex: 1 1 auto; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + color: @cde-muted; + gap: 8px; + padding: 20px; + text-align: center; + font-size: 12px; + + i { + font-size: 28px; + opacity: 0.4; + } +} + +/* Spin animation for active-turn token */ +@keyframes cde-spin { + from { transform-origin: var(--fx) var(--fy); transform: rotate(0deg); } + to { transform-origin: var(--fx) var(--fy); transform: rotate(360deg); } +} + +/* =================================================================== + Migration App + =================================================================== */ + +.cde-migration-app { + .window-content { + padding: 0; + overflow-y: auto; + } +} + +.cde-migration-body { + display: flex; + flex-direction: column; + gap: 12px; + padding: 16px; +} + +/* Drop zone */ +.cde-migration-drop-zone { + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + padding: 28px 20px; + border: 2px dashed @cde-border; + border-radius: 8px; + background: fadeout(@cde-surface2, 40%); + text-align: center; + transition: border-color 0.15s, background 0.15s; + cursor: pointer; + + &.is-dragover { + border-color: @cde-spell; + background: fadeout(@cde-spell, 85%); + } +} + +.cde-migration-drop-icon { + font-size: 36px; + color: @cde-spell; + opacity: 0.7; +} + +.cde-migration-drop-hint { + margin: 0; + font-size: 12px; + color: @cde-muted; +} + +.cde-migration-file-btn { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 6px 14px; + border: 1px solid @cde-spell; + border-radius: 4px; + color: @cde-spell; + font-size: 12px; + font-weight: 600; + cursor: pointer; + transition: background 0.15s; + + &:hover { + background: fadeout(@cde-spell, 80%); + } +} + +/* Preview section */ +.cde-migration-preview { + border: 1px solid @cde-border; + border-radius: 6px; + overflow: hidden; +} + +.cde-migration-preview-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 8px 12px; + background: fadeout(@cde-surface2, 20%); + font-size: 11px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.06em; + color: @cde-muted; +} + +.cde-migration-clear-btn { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 2px 8px; + border: 1px solid @cde-border; + border-radius: 4px; + font-size: 11px; + color: @cde-muted; + background: none; + cursor: pointer; + transition: color 0.15s, border-color 0.15s; + + &:hover { + color: #e04444; + border-color: #e04444; + } +} + +/* Preview table */ +.cde-migration-table { + width: 100%; + border-collapse: collapse; + font-size: 12px; + + th { + padding: 5px 8px; + background: fadeout(@cde-surface2, 10%); + color: @cde-muted; + font-size: 10px; + font-weight: 600; + text-transform: uppercase; + text-align: left; + border-bottom: 1px solid @cde-border; + } + + td { + padding: 5px 8px; + border-bottom: 1px solid fadeout(@cde-border, 60%); + vertical-align: middle; + } + + tr:last-child td { + border-bottom: none; + } +} + +.cde-migration-thumb { + width: 28px; + height: 28px; + border-radius: 3px; + object-fit: cover; +} + +.cde-migration-name { + font-weight: 600; + color: @cde-text; +} + +.cde-migration-items-count { + text-align: center; + color: @cde-muted; +} + +.cde-migration-srcfile { + font-size: 10px; + color: @cde-muted; + max-width: 130px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* Type badge */ +.cde-migration-type-badge { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 2px 8px; + border-radius: 10px; + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + + &.cde-migration-type-character { + background: fadeout(@cde-spell, 80%); + color: @cde-spell; + border: 1px solid fadeout(@cde-spell, 60%); + } + + &.cde-migration-type-npc { + background: fadeout(#9c4dcc, 80%); + color: #c97ae0; + border: 1px solid fadeout(#9c4dcc, 60%); + } +} + +/* Errors */ +.cde-migration-errors { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + gap: 4px; + + li { + display: flex; + align-items: flex-start; + gap: 6px; + padding: 6px 10px; + border: 1px solid fadeout(#e04444, 40%); + border-radius: 4px; + background: fadeout(#e04444, 90%); + color: #e07070; + font-size: 11px; + + i { margin-top: 2px; flex-shrink: 0; } + } +} + +/* Bottom action bar */ +.cde-migration-actions { + display: flex; + justify-content: center; + padding-top: 4px; +} + +.cde-migration-import-btn { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 9px 24px; + border: none; + border-radius: 6px; + background: @cde-spell; + color: #fff; + font-size: 13px; + font-weight: 700; + cursor: pointer; + transition: filter 0.15s; + + &:hover { + filter: brightness(1.15); + } +} + +.cde-migration-hint { + margin: 0; + font-size: 12px; + color: @cde-muted; + text-align: center; +} + +// ============================================================ +// Welcome message +// ============================================================ + +.cde-welcome-message { + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + padding: 12px 16px; + background: @cde-surface; + border: 1px solid @cde-border-hi; + border-radius: 8px; + text-align: center; +} + +.cde-welcome-logo { + width: 120px; + height: auto; + object-fit: contain; + filter: drop-shadow(0 0 8px fade(@cde-spell, 40%)); +} + +.cde-welcome-title { + margin: 0; + font-size: 15px; + font-weight: 700; + color: @cde-spell; + text-shadow: 0 0 8px fade(@cde-spell, 50%); +} + +.cde-welcome-links { + margin: 0; + font-size: 12px; + color: @cde-muted; + + a { + color: @cde-item; + text-decoration: none; + border-bottom: 1px solid fade(@cde-item, 40%); + + &:hover { + color: #fff; + border-bottom-color: #fff; + } + } +} + +.cde-welcome-help-btn { + display: inline-flex; + align-items: center; + gap: 6px; + margin-top: 4px; + padding: 7px 18px; + background: @cde-spell; + border: none; + border-radius: 6px; + color: #fff; + font-size: 12px; + font-weight: 700; + cursor: pointer; + transition: filter 0.15s; + + &:hover { + filter: brightness(1.2); + } +} diff --git a/packs/cde-armors/000008.log b/packs/cde-armors/000025.log similarity index 100% rename from packs/cde-armors/000008.log rename to packs/cde-armors/000025.log diff --git a/packs/cde-armors/000010.ldb b/packs/cde-armors/000027.ldb similarity index 100% rename from packs/cde-armors/000010.ldb rename to packs/cde-armors/000027.ldb diff --git a/packs/cde-armors/CURRENT b/packs/cde-armors/CURRENT index f7753e2..7fbb623 100644 --- a/packs/cde-armors/CURRENT +++ b/packs/cde-armors/CURRENT @@ -1 +1 @@ -MANIFEST-000006 +MANIFEST-000023 diff --git a/packs/cde-armors/LOG b/packs/cde-armors/LOG index 642f054..4caa440 100644 --- a/packs/cde-armors/LOG +++ b/packs/cde-armors/LOG @@ -1,15 +1,11 @@ -2026/05/12-00:36:56.314091 7ff671fef6c0 Recovering log #4 -2026/05/12-00:36:56.323263 7ff671fef6c0 Delete type=3 #2 -2026/05/12-00:36:56.323317 7ff671fef6c0 Delete type=0 #4 -2026/05/12-00:37:07.971141 7ff6637fe6c0 Level-0 table #9: started -2026/05/12-00:37:07.974291 7ff6637fe6c0 Level-0 table #9: 1387 bytes OK -2026/05/12-00:37:07.980872 7ff6637fe6c0 Delete type=0 #7 -2026/05/12-00:37:08.009643 7ff6637fe6c0 Manual compaction at level-0 from '!items!3aig6MWvZCRoWXPW' @ 72057594037927935 : 1 .. '!items!cXaQG1TBE0jzrbNt' @ 0 : 0; will stop at (end) -2026/05/12-00:37:08.009699 7ff6637fe6c0 Manual compaction at level-1 from '!items!3aig6MWvZCRoWXPW' @ 72057594037927935 : 1 .. '!items!cXaQG1TBE0jzrbNt' @ 0 : 0; will stop at '!items!cXaQG1TBE0jzrbNt' @ 8 : 1 -2026/05/12-00:37:08.009706 7ff6637fe6c0 Compacting 1@1 + 1@2 files -2026/05/12-00:37:08.012872 7ff6637fe6c0 Generated table #10@1: 4 keys, 1387 bytes -2026/05/12-00:37:08.012903 7ff6637fe6c0 Compacted 1@1 + 1@2 files => 1387 bytes -2026/05/12-00:37:08.019075 7ff6637fe6c0 compacted to: files[ 0 0 1 0 0 0 0 ] -2026/05/12-00:37:08.019187 7ff6637fe6c0 Delete type=2 #5 -2026/05/12-00:37:08.019315 7ff6637fe6c0 Delete type=2 #9 -2026/05/12-00:37:08.051276 7ff6637fe6c0 Manual compaction at level-1 from '!items!cXaQG1TBE0jzrbNt' @ 8 : 1 .. '!items!cXaQG1TBE0jzrbNt' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.880760 7f52c5bfd6c0 Delete type=3 #1 +2026/06/01-22:35:51.016255 7f52c4bfb6c0 Level-0 table #26: started +2026/06/01-22:35:51.016270 7f52c4bfb6c0 Level-0 table #26: 0 bytes OK +2026/06/01-22:35:51.023046 7f52c4bfb6c0 Delete type=0 #24 +2026/06/01-22:35:51.047956 7f52c4bfb6c0 Manual compaction at level-0 from '!items!3aig6MWvZCRoWXPW' @ 72057594037927935 : 1 .. '!items!cXaQG1TBE0jzrbNt' @ 0 : 0; will stop at '!items!cXaQG1TBE0jzrbNt' @ 8 : 1 +2026/06/01-22:35:51.047965 7f52c4bfb6c0 Compacting 1@0 + 0@1 files +2026/06/01-22:35:51.051139 7f52c4bfb6c0 Generated table #27@0: 4 keys, 1387 bytes +2026/06/01-22:35:51.051154 7f52c4bfb6c0 Compacted 1@0 + 0@1 files => 1387 bytes +2026/06/01-22:35:51.057027 7f52c4bfb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2026/06/01-22:35:51.057087 7f52c4bfb6c0 Delete type=2 #10 +2026/06/01-22:35:51.067136 7f52c4bfb6c0 Manual compaction at level-0 from '!items!cXaQG1TBE0jzrbNt' @ 8 : 1 .. '!items!cXaQG1TBE0jzrbNt' @ 0 : 0; will stop at (end) diff --git a/packs/cde-armors/LOG.old b/packs/cde-armors/LOG.old index f0e5aed..1a38e82 100644 --- a/packs/cde-armors/LOG.old +++ b/packs/cde-armors/LOG.old @@ -1,5 +1,4 @@ -2026/05/12-00:36:37.149746 7fdfd57ec6c0 Delete type=3 #1 -2026/05/12-00:36:37.152016 7fdfd4feb6c0 Level-0 table #5: started -2026/05/12-00:36:37.155425 7fdfd4feb6c0 Level-0 table #5: 1330 bytes OK -2026/05/12-00:36:37.161916 7fdfd4feb6c0 Delete type=0 #3 -2026/05/12-00:36:37.162057 7fdfd4feb6c0 Manual compaction at level-0 from '!items!3aig6MWvZCRoWXPW' @ 72057594037927935 : 1 .. '!items!cXaQG1TBE0jzrbNt' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.858708 7f52c5bfd6c0 Log #21: 0 ops saved to Table #22 OK +2026/06/01-22:35:11.858788 7f52c5bfd6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-armors/000021.log: OK +2026/06/01-22:35:11.858829 7f52c5bfd6c0 Table #10: 4 entries OK +2026/06/01-22:35:11.862084 7f52c5bfd6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-armors; recovered 1 files; 1387 bytes. Some data may have been lost. **** diff --git a/packs/cde-armors/MANIFEST-000006 b/packs/cde-armors/MANIFEST-000006 deleted file mode 100644 index a2be5f8..0000000 Binary files a/packs/cde-armors/MANIFEST-000006 and /dev/null differ diff --git a/packs/cde-armors/MANIFEST-000023 b/packs/cde-armors/MANIFEST-000023 new file mode 100644 index 0000000..43050d3 Binary files /dev/null and b/packs/cde-armors/MANIFEST-000023 differ diff --git a/packs/cde-help/000008.log b/packs/cde-armors/lost/000021.log similarity index 100% rename from packs/cde-help/000008.log rename to packs/cde-armors/lost/000021.log diff --git a/packs/cde-ingredients/000008.log b/packs/cde-help/000025.log similarity index 100% rename from packs/cde-ingredients/000008.log rename to packs/cde-help/000025.log diff --git a/packs/cde-help/000010.ldb b/packs/cde-help/000027.ldb similarity index 100% rename from packs/cde-help/000010.ldb rename to packs/cde-help/000027.ldb diff --git a/packs/cde-help/CURRENT b/packs/cde-help/CURRENT index f7753e2..7fbb623 100644 --- a/packs/cde-help/CURRENT +++ b/packs/cde-help/CURRENT @@ -1 +1 @@ -MANIFEST-000006 +MANIFEST-000023 diff --git a/packs/cde-help/LOG b/packs/cde-help/LOG index 1c518b9..ba59c23 100644 --- a/packs/cde-help/LOG +++ b/packs/cde-help/LOG @@ -1,15 +1,11 @@ -2026/05/12-00:36:56.374154 7ff663fff6c0 Recovering log #4 -2026/05/12-00:36:56.383721 7ff663fff6c0 Delete type=3 #2 -2026/05/12-00:36:56.383779 7ff663fff6c0 Delete type=0 #4 -2026/05/12-00:37:08.062905 7ff6637fe6c0 Level-0 table #9: started -2026/05/12-00:37:08.066411 7ff6637fe6c0 Level-0 table #9: 10124 bytes OK -2026/05/12-00:37:08.072622 7ff6637fe6c0 Delete type=0 #7 -2026/05/12-00:37:08.086421 7ff6637fe6c0 Manual compaction at level-0 from '!journal!CDEGuideMain0001' @ 72057594037927935 : 1 .. '!journal.pages!CDEGuideMain0001.wgqIHHVlO9miegn1' @ 0 : 0; will stop at (end) -2026/05/12-00:37:08.096808 7ff6637fe6c0 Manual compaction at level-1 from '!journal!CDEGuideMain0001' @ 72057594037927935 : 1 .. '!journal.pages!CDEGuideMain0001.wgqIHHVlO9miegn1' @ 0 : 0; will stop at '!journal.pages!CDEGuideMain0001.wgqIHHVlO9miegn1' @ 17 : 1 -2026/05/12-00:37:08.096817 7ff6637fe6c0 Compacting 1@1 + 1@2 files -2026/05/12-00:37:08.100204 7ff6637fe6c0 Generated table #10@1: 21 keys, 18033 bytes -2026/05/12-00:37:08.100229 7ff6637fe6c0 Compacted 1@1 + 1@2 files => 18033 bytes -2026/05/12-00:37:08.106245 7ff6637fe6c0 compacted to: files[ 0 0 1 0 0 0 0 ] -2026/05/12-00:37:08.106373 7ff6637fe6c0 Delete type=2 #5 -2026/05/12-00:37:08.106502 7ff6637fe6c0 Delete type=2 #9 -2026/05/12-00:37:08.113213 7ff6637fe6c0 Manual compaction at level-1 from '!journal.pages!CDEGuideMain0001.wgqIHHVlO9miegn1' @ 17 : 1 .. '!journal.pages!CDEGuideMain0001.wgqIHHVlO9miegn1' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.987923 7f52c53fc6c0 Delete type=3 #1 +2026/06/01-22:35:51.085088 7f52c4bfb6c0 Level-0 table #26: started +2026/06/01-22:35:51.085109 7f52c4bfb6c0 Level-0 table #26: 0 bytes OK +2026/06/01-22:35:51.091460 7f52c4bfb6c0 Delete type=0 #24 +2026/06/01-22:35:51.107759 7f52c4bfb6c0 Manual compaction at level-0 from '!journal!CDEGuideMain0001' @ 72057594037927935 : 1 .. '!journal.pages!CDEGuideMain0001.wgqIHHVlO9miegn1' @ 0 : 0; will stop at '!journal.pages!CDEGuideMain0001.wgqIHHVlO9miegn1' @ 17 : 1 +2026/06/01-22:35:51.107763 7f52c4bfb6c0 Compacting 1@0 + 0@1 files +2026/06/01-22:35:51.111831 7f52c4bfb6c0 Generated table #27@0: 21 keys, 18033 bytes +2026/06/01-22:35:51.111846 7f52c4bfb6c0 Compacted 1@0 + 0@1 files => 18033 bytes +2026/06/01-22:35:51.117896 7f52c4bfb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2026/06/01-22:35:51.117946 7f52c4bfb6c0 Delete type=2 #10 +2026/06/01-22:35:51.124817 7f52c4bfb6c0 Manual compaction at level-0 from '!journal.pages!CDEGuideMain0001.wgqIHHVlO9miegn1' @ 17 : 1 .. '!journal.pages!CDEGuideMain0001.wgqIHHVlO9miegn1' @ 0 : 0; will stop at (end) diff --git a/packs/cde-help/LOG.old b/packs/cde-help/LOG.old index 2337157..7da809b 100644 --- a/packs/cde-help/LOG.old +++ b/packs/cde-help/LOG.old @@ -1,5 +1,4 @@ -2026/05/12-00:36:37.177388 7fdfd5fed6c0 Delete type=3 #1 -2026/05/12-00:36:37.178463 7fdfd4feb6c0 Level-0 table #5: started -2026/05/12-00:36:37.181940 7fdfd4feb6c0 Level-0 table #5: 9307 bytes OK -2026/05/12-00:36:37.188105 7fdfd4feb6c0 Delete type=0 #3 -2026/05/12-00:36:37.188350 7fdfd4feb6c0 Manual compaction at level-0 from '!journal!CDEGuideMain0001' @ 72057594037927935 : 1 .. '!journal.pages!CDEGuideMain0001.CDEHelpP10Extra' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.970906 7f52c53fc6c0 Log #21: 0 ops saved to Table #22 OK +2026/06/01-22:35:11.971023 7f52c53fc6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-help/000021.log: OK +2026/06/01-22:35:11.971154 7f52c53fc6c0 Table #10: 21 entries OK +2026/06/01-22:35:11.974528 7f52c53fc6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-help; recovered 1 files; 18033 bytes. Some data may have been lost. **** diff --git a/packs/cde-help/MANIFEST-000006 b/packs/cde-help/MANIFEST-000006 deleted file mode 100644 index 81b0460..0000000 Binary files a/packs/cde-help/MANIFEST-000006 and /dev/null differ diff --git a/packs/cde-help/MANIFEST-000023 b/packs/cde-help/MANIFEST-000023 new file mode 100644 index 0000000..b4d3583 Binary files /dev/null and b/packs/cde-help/MANIFEST-000023 differ diff --git a/packs/cde-items/000008.log b/packs/cde-help/lost/000021.log similarity index 100% rename from packs/cde-items/000008.log rename to packs/cde-help/lost/000021.log diff --git a/packs/cde-kungfus/000008.log b/packs/cde-ingredients/000025.log similarity index 100% rename from packs/cde-kungfus/000008.log rename to packs/cde-ingredients/000025.log diff --git a/packs/cde-ingredients/000010.ldb b/packs/cde-ingredients/000027.ldb similarity index 100% rename from packs/cde-ingredients/000010.ldb rename to packs/cde-ingredients/000027.ldb diff --git a/packs/cde-ingredients/CURRENT b/packs/cde-ingredients/CURRENT index f7753e2..7fbb623 100644 --- a/packs/cde-ingredients/CURRENT +++ b/packs/cde-ingredients/CURRENT @@ -1 +1 @@ -MANIFEST-000006 +MANIFEST-000023 diff --git a/packs/cde-ingredients/LOG b/packs/cde-ingredients/LOG index 4021b5d..e08cf37 100644 --- a/packs/cde-ingredients/LOG +++ b/packs/cde-ingredients/LOG @@ -1,15 +1,11 @@ -2026/05/12-00:36:56.336872 7ff671fef6c0 Recovering log #4 -2026/05/12-00:36:56.346806 7ff671fef6c0 Delete type=3 #2 -2026/05/12-00:36:56.346886 7ff671fef6c0 Delete type=0 #4 -2026/05/12-00:37:07.990253 7ff6637fe6c0 Level-0 table #9: started -2026/05/12-00:37:07.993684 7ff6637fe6c0 Level-0 table #9: 8881 bytes OK -2026/05/12-00:37:07.999919 7ff6637fe6c0 Delete type=0 #7 -2026/05/12-00:37:08.009675 7ff6637fe6c0 Manual compaction at level-0 from '!items!0NDBw1YB54q3hLH0' @ 72057594037927935 : 1 .. '!items!ykekdZlirabRobEF' @ 0 : 0; will stop at (end) -2026/05/12-00:37:08.019406 7ff6637fe6c0 Manual compaction at level-1 from '!items!0NDBw1YB54q3hLH0' @ 72057594037927935 : 1 .. '!items!ykekdZlirabRobEF' @ 0 : 0; will stop at '!items!ykekdZlirabRobEF' @ 108 : 1 -2026/05/12-00:37:08.019418 7ff6637fe6c0 Compacting 1@1 + 1@2 files -2026/05/12-00:37:08.023624 7ff6637fe6c0 Generated table #10@1: 54 keys, 8881 bytes -2026/05/12-00:37:08.023709 7ff6637fe6c0 Compacted 1@1 + 1@2 files => 8881 bytes -2026/05/12-00:37:08.029864 7ff6637fe6c0 compacted to: files[ 0 0 1 0 0 0 0 ] -2026/05/12-00:37:08.030009 7ff6637fe6c0 Delete type=2 #5 -2026/05/12-00:37:08.030163 7ff6637fe6c0 Delete type=2 #9 -2026/05/12-00:37:08.051296 7ff6637fe6c0 Manual compaction at level-1 from '!items!ykekdZlirabRobEF' @ 108 : 1 .. '!items!ykekdZlirabRobEF' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.914967 7f52c6bff6c0 Delete type=3 #1 +2026/06/01-22:35:51.023125 7f52c4bfb6c0 Level-0 table #26: started +2026/06/01-22:35:51.023151 7f52c4bfb6c0 Level-0 table #26: 0 bytes OK +2026/06/01-22:35:51.028968 7f52c4bfb6c0 Delete type=0 #24 +2026/06/01-22:35:51.057155 7f52c4bfb6c0 Manual compaction at level-0 from '!items!0NDBw1YB54q3hLH0' @ 72057594037927935 : 1 .. '!items!ykekdZlirabRobEF' @ 0 : 0; will stop at '!items!ykekdZlirabRobEF' @ 108 : 1 +2026/06/01-22:35:51.057162 7f52c4bfb6c0 Compacting 1@0 + 0@1 files +2026/06/01-22:35:51.060536 7f52c4bfb6c0 Generated table #27@0: 54 keys, 8881 bytes +2026/06/01-22:35:51.060550 7f52c4bfb6c0 Compacted 1@0 + 0@1 files => 8881 bytes +2026/06/01-22:35:51.067003 7f52c4bfb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2026/06/01-22:35:51.067054 7f52c4bfb6c0 Delete type=2 #10 +2026/06/01-22:35:51.073072 7f52c4bfb6c0 Manual compaction at level-0 from '!items!ykekdZlirabRobEF' @ 108 : 1 .. '!items!ykekdZlirabRobEF' @ 0 : 0; will stop at (end) diff --git a/packs/cde-ingredients/LOG.old b/packs/cde-ingredients/LOG.old index 31d5005..0471edb 100644 --- a/packs/cde-ingredients/LOG.old +++ b/packs/cde-ingredients/LOG.old @@ -1,5 +1,4 @@ -2026/05/12-00:36:37.205346 7fdfd6fef6c0 Delete type=3 #1 -2026/05/12-00:36:37.206616 7fdfd4feb6c0 Level-0 table #5: started -2026/05/12-00:36:37.210149 7fdfd4feb6c0 Level-0 table #5: 5923 bytes OK -2026/05/12-00:36:37.216280 7fdfd4feb6c0 Delete type=0 #3 -2026/05/12-00:36:37.216387 7fdfd4feb6c0 Manual compaction at level-0 from '!items!0NDBw1YB54q3hLH0' @ 72057594037927935 : 1 .. '!items!ykekdZlirabRobEF' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.900722 7f52c6bff6c0 Log #21: 0 ops saved to Table #22 OK +2026/06/01-22:35:11.900766 7f52c6bff6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-ingredients/000021.log: OK +2026/06/01-22:35:11.900837 7f52c6bff6c0 Table #10: 54 entries OK +2026/06/01-22:35:11.904105 7f52c6bff6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-ingredients; recovered 1 files; 8881 bytes. Some data may have been lost. **** diff --git a/packs/cde-ingredients/MANIFEST-000006 b/packs/cde-ingredients/MANIFEST-000006 deleted file mode 100644 index e55a2b2..0000000 Binary files a/packs/cde-ingredients/MANIFEST-000006 and /dev/null differ diff --git a/packs/cde-ingredients/MANIFEST-000023 b/packs/cde-ingredients/MANIFEST-000023 new file mode 100644 index 0000000..b66c336 Binary files /dev/null and b/packs/cde-ingredients/MANIFEST-000023 differ diff --git a/packs/cde-npcs/000008.log b/packs/cde-ingredients/lost/000021.log similarity index 100% rename from packs/cde-npcs/000008.log rename to packs/cde-ingredients/lost/000021.log diff --git a/packs/cde-sanhei/000008.log b/packs/cde-items/000025.log similarity index 100% rename from packs/cde-sanhei/000008.log rename to packs/cde-items/000025.log diff --git a/packs/cde-items/000010.ldb b/packs/cde-items/000027.ldb similarity index 100% rename from packs/cde-items/000010.ldb rename to packs/cde-items/000027.ldb diff --git a/packs/cde-items/CURRENT b/packs/cde-items/CURRENT index f7753e2..7fbb623 100644 --- a/packs/cde-items/CURRENT +++ b/packs/cde-items/CURRENT @@ -1 +1 @@ -MANIFEST-000006 +MANIFEST-000023 diff --git a/packs/cde-items/LOG b/packs/cde-items/LOG index 13d9ec9..c909a9a 100644 --- a/packs/cde-items/LOG +++ b/packs/cde-items/LOG @@ -1,15 +1,11 @@ -2026/05/12-00:36:56.348871 7ff6717ee6c0 Recovering log #4 -2026/05/12-00:36:56.358876 7ff6717ee6c0 Delete type=3 #2 -2026/05/12-00:36:56.358970 7ff6717ee6c0 Delete type=0 #4 -2026/05/12-00:37:07.981024 7ff6637fe6c0 Level-0 table #9: started -2026/05/12-00:37:07.984143 7ff6637fe6c0 Level-0 table #9: 596 bytes OK -2026/05/12-00:37:07.990088 7ff6637fe6c0 Delete type=0 #7 -2026/05/12-00:37:08.009661 7ff6637fe6c0 Manual compaction at level-0 from '!items!HKq5ANSGiBIdcnki' @ 72057594037927935 : 1 .. '!items!HKq5ANSGiBIdcnki' @ 0 : 0; will stop at (end) -2026/05/12-00:37:08.030253 7ff6637fe6c0 Manual compaction at level-1 from '!items!HKq5ANSGiBIdcnki' @ 72057594037927935 : 1 .. '!items!HKq5ANSGiBIdcnki' @ 0 : 0; will stop at '!items!HKq5ANSGiBIdcnki' @ 2 : 1 -2026/05/12-00:37:08.030264 7ff6637fe6c0 Compacting 1@1 + 1@2 files -2026/05/12-00:37:08.033436 7ff6637fe6c0 Generated table #10@1: 1 keys, 596 bytes -2026/05/12-00:37:08.033469 7ff6637fe6c0 Compacted 1@1 + 1@2 files => 596 bytes -2026/05/12-00:37:08.040221 7ff6637fe6c0 compacted to: files[ 0 0 1 0 0 0 0 ] -2026/05/12-00:37:08.040443 7ff6637fe6c0 Delete type=2 #5 -2026/05/12-00:37:08.040599 7ff6637fe6c0 Delete type=2 #9 -2026/05/12-00:37:08.051309 7ff6637fe6c0 Manual compaction at level-1 from '!items!HKq5ANSGiBIdcnki' @ 2 : 1 .. '!items!HKq5ANSGiBIdcnki' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.932171 7f52c63fe6c0 Delete type=3 #1 +2026/06/01-22:35:51.010289 7f52c4bfb6c0 Level-0 table #26: started +2026/06/01-22:35:51.010313 7f52c4bfb6c0 Level-0 table #26: 0 bytes OK +2026/06/01-22:35:51.016160 7f52c4bfb6c0 Delete type=0 #24 +2026/06/01-22:35:51.037980 7f52c4bfb6c0 Manual compaction at level-0 from '!items!HKq5ANSGiBIdcnki' @ 72057594037927935 : 1 .. '!items!HKq5ANSGiBIdcnki' @ 0 : 0; will stop at '!items!HKq5ANSGiBIdcnki' @ 2 : 1 +2026/06/01-22:35:51.037986 7f52c4bfb6c0 Compacting 1@0 + 0@1 files +2026/06/01-22:35:51.041162 7f52c4bfb6c0 Generated table #27@0: 1 keys, 596 bytes +2026/06/01-22:35:51.041178 7f52c4bfb6c0 Compacted 1@0 + 0@1 files => 596 bytes +2026/06/01-22:35:51.047786 7f52c4bfb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2026/06/01-22:35:51.047867 7f52c4bfb6c0 Delete type=2 #10 +2026/06/01-22:35:51.067128 7f52c4bfb6c0 Manual compaction at level-0 from '!items!HKq5ANSGiBIdcnki' @ 2 : 1 .. '!items!HKq5ANSGiBIdcnki' @ 0 : 0; will stop at (end) diff --git a/packs/cde-items/LOG.old b/packs/cde-items/LOG.old index dd46fca..28765bd 100644 --- a/packs/cde-items/LOG.old +++ b/packs/cde-items/LOG.old @@ -1,5 +1,4 @@ -2026/05/12-00:36:37.230762 7fdfd67ee6c0 Delete type=3 #1 -2026/05/12-00:36:37.231622 7fdfd4feb6c0 Level-0 table #5: started -2026/05/12-00:36:37.234740 7fdfd4feb6c0 Level-0 table #5: 559 bytes OK -2026/05/12-00:36:37.240940 7fdfd4feb6c0 Delete type=0 #3 -2026/05/12-00:36:37.241065 7fdfd4feb6c0 Manual compaction at level-0 from '!items!HKq5ANSGiBIdcnki' @ 72057594037927935 : 1 .. '!items!HKq5ANSGiBIdcnki' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.918464 7f52c63fe6c0 Log #21: 0 ops saved to Table #22 OK +2026/06/01-22:35:11.918512 7f52c63fe6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-items/000021.log: OK +2026/06/01-22:35:11.918537 7f52c63fe6c0 Table #10: 1 entries OK +2026/06/01-22:35:11.921448 7f52c63fe6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-items; recovered 1 files; 596 bytes. Some data may have been lost. **** diff --git a/packs/cde-items/MANIFEST-000006 b/packs/cde-items/MANIFEST-000006 deleted file mode 100644 index 00f98f0..0000000 Binary files a/packs/cde-items/MANIFEST-000006 and /dev/null differ diff --git a/packs/cde-items/MANIFEST-000023 b/packs/cde-items/MANIFEST-000023 new file mode 100644 index 0000000..966c071 Binary files /dev/null and b/packs/cde-items/MANIFEST-000023 differ diff --git a/packs/cde-scenes/000024.log b/packs/cde-items/lost/000021.log similarity index 100% rename from packs/cde-scenes/000024.log rename to packs/cde-items/lost/000021.log diff --git a/packs/cde-spells/000008.log b/packs/cde-kungfus/000025.log similarity index 100% rename from packs/cde-spells/000008.log rename to packs/cde-kungfus/000025.log diff --git a/packs/cde-kungfus/000010.ldb b/packs/cde-kungfus/000027.ldb similarity index 100% rename from packs/cde-kungfus/000010.ldb rename to packs/cde-kungfus/000027.ldb diff --git a/packs/cde-kungfus/CURRENT b/packs/cde-kungfus/CURRENT index f7753e2..7fbb623 100644 --- a/packs/cde-kungfus/CURRENT +++ b/packs/cde-kungfus/CURRENT @@ -1 +1 @@ -MANIFEST-000006 +MANIFEST-000023 diff --git a/packs/cde-kungfus/LOG b/packs/cde-kungfus/LOG index 54c72a3..cad9bdd 100644 --- a/packs/cde-kungfus/LOG +++ b/packs/cde-kungfus/LOG @@ -1,15 +1,11 @@ -2026/05/12-00:36:56.263994 7ff663fff6c0 Recovering log #4 -2026/05/12-00:36:56.274398 7ff663fff6c0 Delete type=3 #2 -2026/05/12-00:36:56.274458 7ff663fff6c0 Delete type=0 #4 -2026/05/12-00:37:07.886611 7ff6637fe6c0 Level-0 table #9: started -2026/05/12-00:37:07.890996 7ff6637fe6c0 Level-0 table #9: 34454 bytes OK -2026/05/12-00:37:07.897482 7ff6637fe6c0 Delete type=0 #7 -2026/05/12-00:37:07.928654 7ff6637fe6c0 Manual compaction at level-0 from '!items!2nKXEHLG0fXtSOdy' @ 72057594037927935 : 1 .. '!items!tlIc1bmIAbQeUwj7' @ 0 : 0; will stop at (end) -2026/05/12-00:37:07.928707 7ff6637fe6c0 Manual compaction at level-1 from '!items!2nKXEHLG0fXtSOdy' @ 72057594037927935 : 1 .. '!items!tlIc1bmIAbQeUwj7' @ 0 : 0; will stop at '!items!tlIc1bmIAbQeUwj7' @ 40 : 1 -2026/05/12-00:37:07.928714 7ff6637fe6c0 Compacting 1@1 + 1@2 files -2026/05/12-00:37:07.932971 7ff6637fe6c0 Generated table #10@1: 20 keys, 34454 bytes -2026/05/12-00:37:07.932984 7ff6637fe6c0 Compacted 1@1 + 1@2 files => 34454 bytes -2026/05/12-00:37:07.939008 7ff6637fe6c0 compacted to: files[ 0 0 1 0 0 0 0 ] -2026/05/12-00:37:07.939170 7ff6637fe6c0 Delete type=2 #5 -2026/05/12-00:37:07.939306 7ff6637fe6c0 Delete type=2 #9 -2026/05/12-00:37:07.970948 7ff6637fe6c0 Manual compaction at level-1 from '!items!tlIc1bmIAbQeUwj7' @ 40 : 1 .. '!items!tlIc1bmIAbQeUwj7' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.796994 7f52c63fe6c0 Delete type=3 #1 +2026/06/01-22:35:50.937098 7f52c4bfb6c0 Level-0 table #26: started +2026/06/01-22:35:50.937158 7f52c4bfb6c0 Level-0 table #26: 0 bytes OK +2026/06/01-22:35:50.943430 7f52c4bfb6c0 Delete type=0 #24 +2026/06/01-22:35:50.962798 7f52c4bfb6c0 Manual compaction at level-0 from '!items!2nKXEHLG0fXtSOdy' @ 72057594037927935 : 1 .. '!items!tlIc1bmIAbQeUwj7' @ 0 : 0; will stop at '!items!tlIc1bmIAbQeUwj7' @ 40 : 1 +2026/06/01-22:35:50.962805 7f52c4bfb6c0 Compacting 1@0 + 0@1 files +2026/06/01-22:35:50.966120 7f52c4bfb6c0 Generated table #27@0: 20 keys, 34454 bytes +2026/06/01-22:35:50.966138 7f52c4bfb6c0 Compacted 1@0 + 0@1 files => 34454 bytes +2026/06/01-22:35:50.972309 7f52c4bfb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2026/06/01-22:35:50.972597 7f52c4bfb6c0 Delete type=2 #10 +2026/06/01-22:35:51.004209 7f52c4bfb6c0 Manual compaction at level-0 from '!items!tlIc1bmIAbQeUwj7' @ 40 : 1 .. '!items!tlIc1bmIAbQeUwj7' @ 0 : 0; will stop at (end) diff --git a/packs/cde-kungfus/LOG.old b/packs/cde-kungfus/LOG.old index 94194e1..4437a9d 100644 --- a/packs/cde-kungfus/LOG.old +++ b/packs/cde-kungfus/LOG.old @@ -1,5 +1,4 @@ -2026/05/12-00:36:37.257477 7fdfd57ec6c0 Delete type=3 #1 -2026/05/12-00:36:37.258479 7fdfd4feb6c0 Level-0 table #5: started -2026/05/12-00:36:37.261916 7fdfd4feb6c0 Level-0 table #5: 32988 bytes OK -2026/05/12-00:36:37.269084 7fdfd4feb6c0 Delete type=0 #3 -2026/05/12-00:36:37.269269 7fdfd4feb6c0 Manual compaction at level-0 from '!items!2nKXEHLG0fXtSOdy' @ 72057594037927935 : 1 .. '!items!tlIc1bmIAbQeUwj7' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.733217 7f52c63fe6c0 Log #21: 0 ops saved to Table #22 OK +2026/06/01-22:35:11.733303 7f52c63fe6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-kungfus/000021.log: OK +2026/06/01-22:35:11.733464 7f52c63fe6c0 Table #10: 20 entries OK +2026/06/01-22:35:11.736813 7f52c63fe6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-kungfus; recovered 1 files; 34454 bytes. Some data may have been lost. **** diff --git a/packs/cde-kungfus/MANIFEST-000006 b/packs/cde-kungfus/MANIFEST-000006 deleted file mode 100644 index 6a25b48..0000000 Binary files a/packs/cde-kungfus/MANIFEST-000006 and /dev/null differ diff --git a/packs/cde-kungfus/MANIFEST-000023 b/packs/cde-kungfus/MANIFEST-000023 new file mode 100644 index 0000000..6cc277d Binary files /dev/null and b/packs/cde-kungfus/MANIFEST-000023 differ diff --git a/packs/cde-supernaturals/000008.log b/packs/cde-kungfus/lost/000021.log similarity index 100% rename from packs/cde-supernaturals/000008.log rename to packs/cde-kungfus/lost/000021.log diff --git a/packs/cde-weapons/000008.log b/packs/cde-npcs/000025.log similarity index 100% rename from packs/cde-weapons/000008.log rename to packs/cde-npcs/000025.log diff --git a/packs/cde-npcs/000010.ldb b/packs/cde-npcs/000027.ldb similarity index 100% rename from packs/cde-npcs/000010.ldb rename to packs/cde-npcs/000027.ldb diff --git a/packs/cde-npcs/CURRENT b/packs/cde-npcs/CURRENT index f7753e2..7fbb623 100644 --- a/packs/cde-npcs/CURRENT +++ b/packs/cde-npcs/CURRENT @@ -1 +1 @@ -MANIFEST-000006 +MANIFEST-000023 diff --git a/packs/cde-npcs/LOG b/packs/cde-npcs/LOG index 363dac5..519899a 100644 --- a/packs/cde-npcs/LOG +++ b/packs/cde-npcs/LOG @@ -1,15 +1,11 @@ -2026/05/12-00:36:56.360962 7ff663fff6c0 Recovering log #4 -2026/05/12-00:36:56.371878 7ff663fff6c0 Delete type=3 #2 -2026/05/12-00:36:56.371942 7ff663fff6c0 Delete type=0 #4 -2026/05/12-00:37:08.051413 7ff6637fe6c0 Level-0 table #9: started -2026/05/12-00:37:08.055337 7ff6637fe6c0 Level-0 table #9: 50053 bytes OK -2026/05/12-00:37:08.062742 7ff6637fe6c0 Delete type=0 #7 -2026/05/12-00:37:08.086408 7ff6637fe6c0 Manual compaction at level-0 from '!actors!4ZjFZ1HoJV9mJStt' @ 72057594037927935 : 1 .. '!actors!zVpmacwoWEG8YTCQ' @ 0 : 0; will stop at (end) -2026/05/12-00:37:08.086444 7ff6637fe6c0 Manual compaction at level-1 from '!actors!4ZjFZ1HoJV9mJStt' @ 72057594037927935 : 1 .. '!actors!zVpmacwoWEG8YTCQ' @ 0 : 0; will stop at '!actors!zVpmacwoWEG8YTCQ' @ 98 : 1 -2026/05/12-00:37:08.086448 7ff6637fe6c0 Compacting 1@1 + 1@2 files -2026/05/12-00:37:08.090154 7ff6637fe6c0 Generated table #10@1: 49 keys, 50053 bytes -2026/05/12-00:37:08.090193 7ff6637fe6c0 Compacted 1@1 + 1@2 files => 50053 bytes -2026/05/12-00:37:08.096495 7ff6637fe6c0 compacted to: files[ 0 0 1 0 0 0 0 ] -2026/05/12-00:37:08.096568 7ff6637fe6c0 Delete type=2 #5 -2026/05/12-00:37:08.096695 7ff6637fe6c0 Delete type=2 #9 -2026/05/12-00:37:08.113181 7ff6637fe6c0 Manual compaction at level-1 from '!actors!zVpmacwoWEG8YTCQ' @ 98 : 1 .. '!actors!zVpmacwoWEG8YTCQ' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.950430 7f52c6bff6c0 Delete type=3 #1 +2026/06/01-22:35:51.067200 7f52c4bfb6c0 Level-0 table #26: started +2026/06/01-22:35:51.067214 7f52c4bfb6c0 Level-0 table #26: 0 bytes OK +2026/06/01-22:35:51.072998 7f52c4bfb6c0 Delete type=0 #24 +2026/06/01-22:35:51.091558 7f52c4bfb6c0 Manual compaction at level-0 from '!actors!4ZjFZ1HoJV9mJStt' @ 72057594037927935 : 1 .. '!actors!zVpmacwoWEG8YTCQ' @ 0 : 0; will stop at '!actors!zVpmacwoWEG8YTCQ' @ 98 : 1 +2026/06/01-22:35:51.091566 7f52c4bfb6c0 Compacting 1@0 + 0@1 files +2026/06/01-22:35:51.095457 7f52c4bfb6c0 Generated table #27@0: 49 keys, 50053 bytes +2026/06/01-22:35:51.095470 7f52c4bfb6c0 Compacted 1@0 + 0@1 files => 50053 bytes +2026/06/01-22:35:51.101290 7f52c4bfb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2026/06/01-22:35:51.101339 7f52c4bfb6c0 Delete type=2 #10 +2026/06/01-22:35:51.118034 7f52c4bfb6c0 Manual compaction at level-0 from '!actors!zVpmacwoWEG8YTCQ' @ 98 : 1 .. '!actors!zVpmacwoWEG8YTCQ' @ 0 : 0; will stop at (end) diff --git a/packs/cde-npcs/LOG.old b/packs/cde-npcs/LOG.old index 7a89863..6cb46e4 100644 --- a/packs/cde-npcs/LOG.old +++ b/packs/cde-npcs/LOG.old @@ -1,5 +1,4 @@ -2026/05/12-00:36:37.286062 7fdfd5fed6c0 Delete type=3 #1 -2026/05/12-00:36:37.287117 7fdfd4feb6c0 Level-0 table #5: started -2026/05/12-00:36:37.291305 7fdfd4feb6c0 Level-0 table #5: 21686 bytes OK -2026/05/12-00:36:37.297295 7fdfd4feb6c0 Delete type=0 #3 -2026/05/12-00:36:37.297424 7fdfd4feb6c0 Manual compaction at level-0 from '!actors!4ZjFZ1HoJV9mJStt' @ 72057594037927935 : 1 .. '!actors!zVpmacwoWEG8YTCQ' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.935539 7f52c6bff6c0 Log #21: 0 ops saved to Table #22 OK +2026/06/01-22:35:11.935591 7f52c6bff6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-npcs/000021.log: OK +2026/06/01-22:35:11.935674 7f52c6bff6c0 Table #10: 49 entries OK +2026/06/01-22:35:11.939231 7f52c6bff6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-npcs; recovered 1 files; 50053 bytes. Some data may have been lost. **** diff --git a/packs/cde-npcs/MANIFEST-000006 b/packs/cde-npcs/MANIFEST-000006 deleted file mode 100644 index fa6aa08..0000000 Binary files a/packs/cde-npcs/MANIFEST-000006 and /dev/null differ diff --git a/packs/cde-npcs/MANIFEST-000023 b/packs/cde-npcs/MANIFEST-000023 new file mode 100644 index 0000000..32bae72 Binary files /dev/null and b/packs/cde-npcs/MANIFEST-000023 differ diff --git a/packs/cde-npcs/lost/000021.log b/packs/cde-npcs/lost/000021.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/cde-pretires/000004.log b/packs/cde-pretires/000004.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/cde-pretires/000005.ldb b/packs/cde-pretires/000005.ldb new file mode 100644 index 0000000..2472b66 Binary files /dev/null and b/packs/cde-pretires/000005.ldb differ diff --git a/packs/cde-pretires/CURRENT b/packs/cde-pretires/CURRENT new file mode 100644 index 0000000..1a84852 --- /dev/null +++ b/packs/cde-pretires/CURRENT @@ -0,0 +1 @@ +MANIFEST-000002 diff --git a/packs/cde-pretires/LOCK b/packs/cde-pretires/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/packs/cde-pretires/LOG b/packs/cde-pretires/LOG new file mode 100644 index 0000000..6f0ca21 --- /dev/null +++ b/packs/cde-pretires/LOG @@ -0,0 +1,5 @@ +2026/06/01-22:35:11.966943 7f52c5bfd6c0 Delete type=3 #1 +2026/06/01-22:35:51.073080 7f52c4bfb6c0 Level-0 table #5: started +2026/06/01-22:35:51.079046 7f52c4bfb6c0 Level-0 table #5: 429877 bytes OK +2026/06/01-22:35:51.084913 7f52c4bfb6c0 Delete type=0 #3 +2026/06/01-22:35:51.107744 7f52c4bfb6c0 Manual compaction at level-0 from '!actors!5OGW1fRUn12aNMMV' @ 72057594037927935 : 1 .. '!actors.items!zSWwOmFiFjN4YxC9.w8LXSYQ1eIygtlKV' @ 0 : 0; will stop at (end) diff --git a/packs/cde-pretires/MANIFEST-000002 b/packs/cde-pretires/MANIFEST-000002 new file mode 100644 index 0000000..75ea91f Binary files /dev/null and b/packs/cde-pretires/MANIFEST-000002 differ diff --git a/packs/cde-sanhei/000025.log b/packs/cde-sanhei/000025.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/cde-sanhei/000010.ldb b/packs/cde-sanhei/000027.ldb similarity index 100% rename from packs/cde-sanhei/000010.ldb rename to packs/cde-sanhei/000027.ldb diff --git a/packs/cde-sanhei/CURRENT b/packs/cde-sanhei/CURRENT index f7753e2..7fbb623 100644 --- a/packs/cde-sanhei/CURRENT +++ b/packs/cde-sanhei/CURRENT @@ -1 +1 @@ -MANIFEST-000006 +MANIFEST-000023 diff --git a/packs/cde-sanhei/LOG b/packs/cde-sanhei/LOG index d5adfac..482563a 100644 --- a/packs/cde-sanhei/LOG +++ b/packs/cde-sanhei/LOG @@ -1,15 +1,11 @@ -2026/05/12-00:36:56.324955 7ff6717ee6c0 Recovering log #4 -2026/05/12-00:36:56.335151 7ff6717ee6c0 Delete type=3 #2 -2026/05/12-00:36:56.335204 7ff6717ee6c0 Delete type=0 #4 -2026/05/12-00:37:08.000036 7ff6637fe6c0 Level-0 table #9: started -2026/05/12-00:37:08.003325 7ff6637fe6c0 Level-0 table #9: 4934 bytes OK -2026/05/12-00:37:08.009477 7ff6637fe6c0 Delete type=0 #7 -2026/05/12-00:37:08.009687 7ff6637fe6c0 Manual compaction at level-0 from '!items!DC2kimCi9sWxqhXG' @ 72057594037927935 : 1 .. '!items!qzfAEhmvVxEMzm0k' @ 0 : 0; will stop at (end) -2026/05/12-00:37:08.040730 7ff6637fe6c0 Manual compaction at level-1 from '!items!DC2kimCi9sWxqhXG' @ 72057594037927935 : 1 .. '!items!qzfAEhmvVxEMzm0k' @ 0 : 0; will stop at '!items!qzfAEhmvVxEMzm0k' @ 10 : 1 -2026/05/12-00:37:08.040743 7ff6637fe6c0 Compacting 1@1 + 1@2 files -2026/05/12-00:37:08.044737 7ff6637fe6c0 Generated table #10@1: 5 keys, 4934 bytes -2026/05/12-00:37:08.044781 7ff6637fe6c0 Compacted 1@1 + 1@2 files => 4934 bytes -2026/05/12-00:37:08.050905 7ff6637fe6c0 compacted to: files[ 0 0 1 0 0 0 0 ] -2026/05/12-00:37:08.051035 7ff6637fe6c0 Delete type=2 #5 -2026/05/12-00:37:08.051186 7ff6637fe6c0 Delete type=2 #9 -2026/05/12-00:37:08.051322 7ff6637fe6c0 Manual compaction at level-1 from '!items!qzfAEhmvVxEMzm0k' @ 10 : 1 .. '!items!qzfAEhmvVxEMzm0k' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.897294 7f52c63fe6c0 Delete type=3 #1 +2026/06/01-22:35:51.004437 7f52c4bfb6c0 Level-0 table #26: started +2026/06/01-22:35:51.004459 7f52c4bfb6c0 Level-0 table #26: 0 bytes OK +2026/06/01-22:35:51.010228 7f52c4bfb6c0 Delete type=0 #24 +2026/06/01-22:35:51.029047 7f52c4bfb6c0 Manual compaction at level-0 from '!items!DC2kimCi9sWxqhXG' @ 72057594037927935 : 1 .. '!items!qzfAEhmvVxEMzm0k' @ 0 : 0; will stop at '!items!qzfAEhmvVxEMzm0k' @ 10 : 1 +2026/06/01-22:35:51.029057 7f52c4bfb6c0 Compacting 1@0 + 0@1 files +2026/06/01-22:35:51.032066 7f52c4bfb6c0 Generated table #27@0: 5 keys, 4934 bytes +2026/06/01-22:35:51.032071 7f52c4bfb6c0 Compacted 1@0 + 0@1 files => 4934 bytes +2026/06/01-22:35:51.037821 7f52c4bfb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2026/06/01-22:35:51.037900 7f52c4bfb6c0 Delete type=2 #10 +2026/06/01-22:35:51.067117 7f52c4bfb6c0 Manual compaction at level-0 from '!items!qzfAEhmvVxEMzm0k' @ 10 : 1 .. '!items!qzfAEhmvVxEMzm0k' @ 0 : 0; will stop at (end) diff --git a/packs/cde-sanhei/LOG.old b/packs/cde-sanhei/LOG.old index b7d535a..03d6647 100644 --- a/packs/cde-sanhei/LOG.old +++ b/packs/cde-sanhei/LOG.old @@ -1,5 +1,4 @@ -2026/05/12-00:36:37.311794 7fdfd6fef6c0 Delete type=3 #1 -2026/05/12-00:36:37.312497 7fdfd4feb6c0 Level-0 table #5: started -2026/05/12-00:36:37.315659 7fdfd4feb6c0 Level-0 table #5: 4830 bytes OK -2026/05/12-00:36:37.322060 7fdfd4feb6c0 Delete type=0 #3 -2026/05/12-00:36:37.322200 7fdfd4feb6c0 Manual compaction at level-0 from '!items!DC2kimCi9sWxqhXG' @ 72057594037927935 : 1 .. '!items!qzfAEhmvVxEMzm0k' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.883439 7f52c63fe6c0 Log #21: 0 ops saved to Table #22 OK +2026/06/01-22:35:11.883485 7f52c63fe6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-sanhei/000021.log: OK +2026/06/01-22:35:11.883523 7f52c63fe6c0 Table #10: 5 entries OK +2026/06/01-22:35:11.886566 7f52c63fe6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-sanhei; recovered 1 files; 4934 bytes. Some data may have been lost. **** diff --git a/packs/cde-sanhei/MANIFEST-000006 b/packs/cde-sanhei/MANIFEST-000006 deleted file mode 100644 index 8a73f79..0000000 Binary files a/packs/cde-sanhei/MANIFEST-000006 and /dev/null differ diff --git a/packs/cde-sanhei/MANIFEST-000023 b/packs/cde-sanhei/MANIFEST-000023 new file mode 100644 index 0000000..7120a80 Binary files /dev/null and b/packs/cde-sanhei/MANIFEST-000023 differ diff --git a/packs/cde-sanhei/lost/000021.log b/packs/cde-sanhei/lost/000021.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/cde-scenes/000005.ldb b/packs/cde-scenes/000005.ldb deleted file mode 100644 index f208e18..0000000 Binary files a/packs/cde-scenes/000005.ldb and /dev/null differ diff --git a/packs/cde-scenes/000044.log b/packs/cde-scenes/000044.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/cde-scenes/000046.ldb b/packs/cde-scenes/000046.ldb new file mode 100644 index 0000000..34419de Binary files /dev/null and b/packs/cde-scenes/000046.ldb differ diff --git a/packs/cde-scenes/CURRENT b/packs/cde-scenes/CURRENT index 5af92b2..8e0a062 100644 --- a/packs/cde-scenes/CURRENT +++ b/packs/cde-scenes/CURRENT @@ -1 +1 @@ -MANIFEST-000022 +MANIFEST-000042 diff --git a/packs/cde-scenes/LOG b/packs/cde-scenes/LOG index c4296a8..5554053 100644 --- a/packs/cde-scenes/LOG +++ b/packs/cde-scenes/LOG @@ -1,8 +1,11 @@ -2026/05/12-00:36:56.386114 7ff670fed6c0 Recovering log #20 -2026/05/12-00:36:56.396758 7ff670fed6c0 Delete type=3 #18 -2026/05/12-00:36:56.396824 7ff670fed6c0 Delete type=0 #20 -2026/05/12-00:37:08.080126 7ff6637fe6c0 Level-0 table #25: started -2026/05/12-00:37:08.080172 7ff6637fe6c0 Level-0 table #25: 0 bytes OK -2026/05/12-00:37:08.086288 7ff6637fe6c0 Delete type=0 #23 -2026/05/12-00:37:08.096790 7ff6637fe6c0 Manual compaction at level-0 from '!scenes!2C6gyZpvPxWlsVZi' @ 72057594037927935 : 1 .. '!scenes.levels!olYe9bhuXwRWQ8j7.defaultLevel0000' @ 0 : 0; will stop at (end) -2026/05/12-00:37:08.113200 7ff6637fe6c0 Manual compaction at level-1 from '!scenes!2C6gyZpvPxWlsVZi' @ 72057594037927935 : 1 .. '!scenes.levels!olYe9bhuXwRWQ8j7.defaultLevel0000' @ 0 : 0; will stop at (end) +2026/06/01-22:35:12.007471 7f52c63fe6c0 Delete type=3 #1 +2026/06/01-22:35:51.124825 7f52c4bfb6c0 Level-0 table #45: started +2026/06/01-22:35:51.124844 7f52c4bfb6c0 Level-0 table #45: 0 bytes OK +2026/06/01-22:35:51.131445 7f52c4bfb6c0 Delete type=0 #43 +2026/06/01-22:35:51.145660 7f52c4bfb6c0 Manual compaction at level-0 from '!scenes!2C6gyZpvPxWlsVZi' @ 72057594037927935 : 1 .. '!scenes.levels!olYe9bhuXwRWQ8j7.defaultLevel0000' @ 0 : 0; will stop at '!scenes.levels!olYe9bhuXwRWQ8j7.defaultLevel0000' @ 1 : 1 +2026/06/01-22:35:51.145675 7f52c4bfb6c0 Compacting 1@0 + 0@1 files +2026/06/01-22:35:51.149105 7f52c4bfb6c0 Generated table #46@0: 8 keys, 3172 bytes +2026/06/01-22:35:51.149125 7f52c4bfb6c0 Compacted 1@0 + 0@1 files => 3172 bytes +2026/06/01-22:35:51.155673 7f52c4bfb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2026/06/01-22:35:51.155780 7f52c4bfb6c0 Delete type=2 #5 +2026/06/01-22:35:51.163444 7f52c4bfb6c0 Manual compaction at level-0 from '!scenes.levels!olYe9bhuXwRWQ8j7.defaultLevel0000' @ 1 : 1 .. '!scenes.levels!olYe9bhuXwRWQ8j7.defaultLevel0000' @ 0 : 0; will stop at (end) diff --git a/packs/cde-scenes/LOG.old b/packs/cde-scenes/LOG.old index d3277b9..6c15334 100644 --- a/packs/cde-scenes/LOG.old +++ b/packs/cde-scenes/LOG.old @@ -1,8 +1,4 @@ -2026/05/12-00:34:51.728359 7ff671fef6c0 Recovering log #16 -2026/05/12-00:34:51.737993 7ff671fef6c0 Delete type=3 #14 -2026/05/12-00:34:51.738056 7ff671fef6c0 Delete type=0 #16 -2026/05/12-00:35:02.012940 7ff6637fe6c0 Level-0 table #21: started -2026/05/12-00:35:02.012962 7ff6637fe6c0 Level-0 table #21: 0 bytes OK -2026/05/12-00:35:02.019210 7ff6637fe6c0 Delete type=0 #19 -2026/05/12-00:35:02.033237 7ff6637fe6c0 Manual compaction at level-0 from '!scenes!2C6gyZpvPxWlsVZi' @ 72057594037927935 : 1 .. '!scenes.levels!olYe9bhuXwRWQ8j7.defaultLevel0000' @ 0 : 0; will stop at (end) -2026/05/12-00:35:02.033284 7ff6637fe6c0 Manual compaction at level-1 from '!scenes!2C6gyZpvPxWlsVZi' @ 72057594037927935 : 1 .. '!scenes.levels!olYe9bhuXwRWQ8j7.defaultLevel0000' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.992251 7f52c63fe6c0 Log #40: 0 ops saved to Table #41 OK +2026/06/01-22:35:11.992349 7f52c63fe6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-scenes/000040.log: OK +2026/06/01-22:35:11.992433 7f52c63fe6c0 Table #5: 22 entries OK +2026/06/01-22:35:11.995902 7f52c63fe6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-scenes; recovered 1 files; 7078 bytes. Some data may have been lost. **** diff --git a/packs/cde-scenes/MANIFEST-000022 b/packs/cde-scenes/MANIFEST-000022 deleted file mode 100644 index 3656fc3..0000000 Binary files a/packs/cde-scenes/MANIFEST-000022 and /dev/null differ diff --git a/packs/cde-scenes/MANIFEST-000042 b/packs/cde-scenes/MANIFEST-000042 new file mode 100644 index 0000000..f32ffbb Binary files /dev/null and b/packs/cde-scenes/MANIFEST-000042 differ diff --git a/packs/cde-scenes/lost/000040.log b/packs/cde-scenes/lost/000040.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/cde-spells/000025.log b/packs/cde-spells/000025.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/cde-spells/000010.ldb b/packs/cde-spells/000027.ldb similarity index 100% rename from packs/cde-spells/000010.ldb rename to packs/cde-spells/000027.ldb diff --git a/packs/cde-spells/CURRENT b/packs/cde-spells/CURRENT index f7753e2..7fbb623 100644 --- a/packs/cde-spells/CURRENT +++ b/packs/cde-spells/CURRENT @@ -1 +1 @@ -MANIFEST-000006 +MANIFEST-000023 diff --git a/packs/cde-spells/LOG b/packs/cde-spells/LOG index 632de31..7b525ae 100644 --- a/packs/cde-spells/LOG +++ b/packs/cde-spells/LOG @@ -1,15 +1,11 @@ -2026/05/12-00:36:56.276952 7ff6717ee6c0 Recovering log #4 -2026/05/12-00:36:56.286901 7ff6717ee6c0 Delete type=3 #2 -2026/05/12-00:36:56.286957 7ff6717ee6c0 Delete type=0 #4 -2026/05/12-00:37:07.897667 7ff6637fe6c0 Level-0 table #9: started -2026/05/12-00:37:07.902498 7ff6637fe6c0 Level-0 table #9: 124022 bytes OK -2026/05/12-00:37:07.909088 7ff6637fe6c0 Delete type=0 #7 -2026/05/12-00:37:07.928672 7ff6637fe6c0 Manual compaction at level-0 from '!items!2f51pcvFkcZjaxDk' @ 72057594037927935 : 1 .. '!items!yVN7PZw35iIaBl0H' @ 0 : 0; will stop at (end) -2026/05/12-00:37:07.949109 7ff6637fe6c0 Manual compaction at level-1 from '!items!2f51pcvFkcZjaxDk' @ 72057594037927935 : 1 .. '!items!yVN7PZw35iIaBl0H' @ 0 : 0; will stop at '!items!yVN7PZw35iIaBl0H' @ 50 : 1 -2026/05/12-00:37:07.949120 7ff6637fe6c0 Compacting 1@1 + 1@2 files -2026/05/12-00:37:07.954259 7ff6637fe6c0 Generated table #10@1: 25 keys, 124022 bytes -2026/05/12-00:37:07.954276 7ff6637fe6c0 Compacted 1@1 + 1@2 files => 124022 bytes -2026/05/12-00:37:07.961206 7ff6637fe6c0 compacted to: files[ 0 0 1 0 0 0 0 ] -2026/05/12-00:37:07.961331 7ff6637fe6c0 Delete type=2 #5 -2026/05/12-00:37:07.961477 7ff6637fe6c0 Delete type=2 #9 -2026/05/12-00:37:07.970977 7ff6637fe6c0 Manual compaction at level-1 from '!items!yVN7PZw35iIaBl0H' @ 50 : 1 .. '!items!yVN7PZw35iIaBl0H' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.817600 7f52c53fc6c0 Delete type=3 #1 +2026/06/01-22:35:50.950071 7f52c4bfb6c0 Level-0 table #26: started +2026/06/01-22:35:50.950101 7f52c4bfb6c0 Level-0 table #26: 0 bytes OK +2026/06/01-22:35:50.956859 7f52c4bfb6c0 Delete type=0 #24 +2026/06/01-22:35:50.982784 7f52c4bfb6c0 Manual compaction at level-0 from '!items!2f51pcvFkcZjaxDk' @ 72057594037927935 : 1 .. '!items!yVN7PZw35iIaBl0H' @ 0 : 0; will stop at '!items!yVN7PZw35iIaBl0H' @ 50 : 1 +2026/06/01-22:35:50.982795 7f52c4bfb6c0 Compacting 1@0 + 0@1 files +2026/06/01-22:35:50.988505 7f52c4bfb6c0 Generated table #27@0: 25 keys, 124022 bytes +2026/06/01-22:35:50.988522 7f52c4bfb6c0 Compacted 1@0 + 0@1 files => 124022 bytes +2026/06/01-22:35:50.994813 7f52c4bfb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2026/06/01-22:35:50.994888 7f52c4bfb6c0 Delete type=2 #10 +2026/06/01-22:35:51.004229 7f52c4bfb6c0 Manual compaction at level-0 from '!items!yVN7PZw35iIaBl0H' @ 50 : 1 .. '!items!yVN7PZw35iIaBl0H' @ 0 : 0; will stop at (end) diff --git a/packs/cde-spells/LOG.old b/packs/cde-spells/LOG.old index 5d05f00..ce140cf 100644 --- a/packs/cde-spells/LOG.old +++ b/packs/cde-spells/LOG.old @@ -1,5 +1,4 @@ -2026/05/12-00:36:37.338931 7fdfd67ee6c0 Delete type=3 #1 -2026/05/12-00:36:37.341086 7fdfd4feb6c0 Level-0 table #5: started -2026/05/12-00:36:37.345847 7fdfd4feb6c0 Level-0 table #5: 120353 bytes OK -2026/05/12-00:36:37.352605 7fdfd4feb6c0 Delete type=0 #3 -2026/05/12-00:36:37.352812 7fdfd4feb6c0 Manual compaction at level-0 from '!items!2f51pcvFkcZjaxDk' @ 72057594037927935 : 1 .. '!items!yVN7PZw35iIaBl0H' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.800364 7f52c53fc6c0 Log #21: 0 ops saved to Table #22 OK +2026/06/01-22:35:11.800471 7f52c53fc6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-spells/000021.log: OK +2026/06/01-22:35:11.801036 7f52c53fc6c0 Table #10: 25 entries OK +2026/06/01-22:35:11.805168 7f52c53fc6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-spells; recovered 1 files; 124022 bytes. Some data may have been lost. **** diff --git a/packs/cde-spells/MANIFEST-000006 b/packs/cde-spells/MANIFEST-000006 deleted file mode 100644 index 10a5701..0000000 Binary files a/packs/cde-spells/MANIFEST-000006 and /dev/null differ diff --git a/packs/cde-spells/MANIFEST-000023 b/packs/cde-spells/MANIFEST-000023 new file mode 100644 index 0000000..375e644 Binary files /dev/null and b/packs/cde-spells/MANIFEST-000023 differ diff --git a/packs/cde-spells/lost/000021.log b/packs/cde-spells/lost/000021.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/cde-supernaturals/000025.log b/packs/cde-supernaturals/000025.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/cde-supernaturals/000010.ldb b/packs/cde-supernaturals/000027.ldb similarity index 100% rename from packs/cde-supernaturals/000010.ldb rename to packs/cde-supernaturals/000027.ldb diff --git a/packs/cde-supernaturals/CURRENT b/packs/cde-supernaturals/CURRENT index f7753e2..7fbb623 100644 --- a/packs/cde-supernaturals/CURRENT +++ b/packs/cde-supernaturals/CURRENT @@ -1 +1 @@ -MANIFEST-000006 +MANIFEST-000023 diff --git a/packs/cde-supernaturals/LOG b/packs/cde-supernaturals/LOG index faf8d1a..5f3bd73 100644 --- a/packs/cde-supernaturals/LOG +++ b/packs/cde-supernaturals/LOG @@ -1,15 +1,11 @@ -2026/05/12-00:36:56.290045 7ff671fef6c0 Recovering log #4 -2026/05/12-00:36:56.299803 7ff671fef6c0 Delete type=3 #2 -2026/05/12-00:36:56.299870 7ff671fef6c0 Delete type=0 #4 -2026/05/12-00:37:07.909338 7ff6637fe6c0 Level-0 table #9: started -2026/05/12-00:37:07.913145 7ff6637fe6c0 Level-0 table #9: 8790 bytes OK -2026/05/12-00:37:07.919132 7ff6637fe6c0 Delete type=0 #7 -2026/05/12-00:37:07.928684 7ff6637fe6c0 Manual compaction at level-0 from '!items!APN91pQL0NBfZsG7' @ 72057594037927935 : 1 .. '!items!xxZKGqDVxAfr140W' @ 0 : 0; will stop at (end) -2026/05/12-00:37:07.961574 7ff6637fe6c0 Manual compaction at level-1 from '!items!APN91pQL0NBfZsG7' @ 72057594037927935 : 1 .. '!items!xxZKGqDVxAfr140W' @ 0 : 0; will stop at '!items!xxZKGqDVxAfr140W' @ 32 : 1 -2026/05/12-00:37:07.961583 7ff6637fe6c0 Compacting 1@1 + 1@2 files -2026/05/12-00:37:07.964786 7ff6637fe6c0 Generated table #10@1: 16 keys, 8790 bytes -2026/05/12-00:37:07.964814 7ff6637fe6c0 Compacted 1@1 + 1@2 files => 8790 bytes -2026/05/12-00:37:07.970646 7ff6637fe6c0 compacted to: files[ 0 0 1 0 0 0 0 ] -2026/05/12-00:37:07.970759 7ff6637fe6c0 Delete type=2 #5 -2026/05/12-00:37:07.970874 7ff6637fe6c0 Delete type=2 #9 -2026/05/12-00:37:07.970988 7ff6637fe6c0 Manual compaction at level-1 from '!items!xxZKGqDVxAfr140W' @ 32 : 1 .. '!items!xxZKGqDVxAfr140W' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.836158 7f52c63fe6c0 Delete type=3 #1 +2026/06/01-22:35:50.943540 7f52c4bfb6c0 Level-0 table #26: started +2026/06/01-22:35:50.943578 7f52c4bfb6c0 Level-0 table #26: 0 bytes OK +2026/06/01-22:35:50.949973 7f52c4bfb6c0 Delete type=0 #24 +2026/06/01-22:35:50.972693 7f52c4bfb6c0 Manual compaction at level-0 from '!items!APN91pQL0NBfZsG7' @ 72057594037927935 : 1 .. '!items!xxZKGqDVxAfr140W' @ 0 : 0; will stop at '!items!xxZKGqDVxAfr140W' @ 32 : 1 +2026/06/01-22:35:50.972702 7f52c4bfb6c0 Compacting 1@0 + 0@1 files +2026/06/01-22:35:50.976827 7f52c4bfb6c0 Generated table #27@0: 16 keys, 8790 bytes +2026/06/01-22:35:50.976844 7f52c4bfb6c0 Compacted 1@0 + 0@1 files => 8790 bytes +2026/06/01-22:35:50.982579 7f52c4bfb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2026/06/01-22:35:50.982676 7f52c4bfb6c0 Delete type=2 #10 +2026/06/01-22:35:51.004221 7f52c4bfb6c0 Manual compaction at level-0 from '!items!xxZKGqDVxAfr140W' @ 32 : 1 .. '!items!xxZKGqDVxAfr140W' @ 0 : 0; will stop at (end) diff --git a/packs/cde-supernaturals/LOG.old b/packs/cde-supernaturals/LOG.old index 18921af..393a8cb 100644 --- a/packs/cde-supernaturals/LOG.old +++ b/packs/cde-supernaturals/LOG.old @@ -1,5 +1,4 @@ -2026/05/12-00:36:37.372690 7fdfd57ec6c0 Delete type=3 #1 -2026/05/12-00:36:37.373512 7fdfd4feb6c0 Level-0 table #5: started -2026/05/12-00:36:37.376679 7fdfd4feb6c0 Level-0 table #5: 8622 bytes OK -2026/05/12-00:36:37.382725 7fdfd4feb6c0 Delete type=0 #3 -2026/05/12-00:36:37.382856 7fdfd4feb6c0 Manual compaction at level-0 from '!items!APN91pQL0NBfZsG7' @ 72057594037927935 : 1 .. '!items!xxZKGqDVxAfr140W' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.821755 7f52c63fe6c0 Log #21: 0 ops saved to Table #22 OK +2026/06/01-22:35:11.821828 7f52c63fe6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-supernaturals/000021.log: OK +2026/06/01-22:35:11.821868 7f52c63fe6c0 Table #10: 16 entries OK +2026/06/01-22:35:11.824849 7f52c63fe6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-supernaturals; recovered 1 files; 8790 bytes. Some data may have been lost. **** diff --git a/packs/cde-supernaturals/MANIFEST-000006 b/packs/cde-supernaturals/MANIFEST-000006 deleted file mode 100644 index 7e3b953..0000000 Binary files a/packs/cde-supernaturals/MANIFEST-000006 and /dev/null differ diff --git a/packs/cde-supernaturals/MANIFEST-000023 b/packs/cde-supernaturals/MANIFEST-000023 new file mode 100644 index 0000000..1629ffb Binary files /dev/null and b/packs/cde-supernaturals/MANIFEST-000023 differ diff --git a/packs/cde-supernaturals/lost/000021.log b/packs/cde-supernaturals/lost/000021.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/cde-weapons/000025.log b/packs/cde-weapons/000025.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/cde-weapons/000010.ldb b/packs/cde-weapons/000027.ldb similarity index 100% rename from packs/cde-weapons/000010.ldb rename to packs/cde-weapons/000027.ldb diff --git a/packs/cde-weapons/CURRENT b/packs/cde-weapons/CURRENT index f7753e2..7fbb623 100644 --- a/packs/cde-weapons/CURRENT +++ b/packs/cde-weapons/CURRENT @@ -1 +1 @@ -MANIFEST-000006 +MANIFEST-000023 diff --git a/packs/cde-weapons/LOG b/packs/cde-weapons/LOG index 3c1224e..cb07bd2 100644 --- a/packs/cde-weapons/LOG +++ b/packs/cde-weapons/LOG @@ -1,15 +1,11 @@ -2026/05/12-00:36:56.301895 7ff670fed6c0 Recovering log #4 -2026/05/12-00:36:56.312457 7ff670fed6c0 Delete type=3 #2 -2026/05/12-00:36:56.312525 7ff670fed6c0 Delete type=0 #4 -2026/05/12-00:37:07.919212 7ff6637fe6c0 Level-0 table #9: started -2026/05/12-00:37:07.922365 7ff6637fe6c0 Level-0 table #9: 4529 bytes OK -2026/05/12-00:37:07.928522 7ff6637fe6c0 Delete type=0 #7 -2026/05/12-00:37:07.928694 7ff6637fe6c0 Manual compaction at level-0 from '!items!2IYbyCPF9LJojzsj' @ 72057594037927935 : 1 .. '!items!uOpWyMGK3oiUJ1Sl' @ 0 : 0; will stop at (end) -2026/05/12-00:37:07.939386 7ff6637fe6c0 Manual compaction at level-1 from '!items!2IYbyCPF9LJojzsj' @ 72057594037927935 : 1 .. '!items!uOpWyMGK3oiUJ1Sl' @ 0 : 0; will stop at '!items!uOpWyMGK3oiUJ1Sl' @ 30 : 1 -2026/05/12-00:37:07.939396 7ff6637fe6c0 Compacting 1@1 + 1@2 files -2026/05/12-00:37:07.942722 7ff6637fe6c0 Generated table #10@1: 15 keys, 4529 bytes -2026/05/12-00:37:07.942780 7ff6637fe6c0 Compacted 1@1 + 1@2 files => 4529 bytes -2026/05/12-00:37:07.948850 7ff6637fe6c0 compacted to: files[ 0 0 1 0 0 0 0 ] -2026/05/12-00:37:07.948918 7ff6637fe6c0 Delete type=2 #5 -2026/05/12-00:37:07.949040 7ff6637fe6c0 Delete type=2 #9 -2026/05/12-00:37:07.970963 7ff6637fe6c0 Manual compaction at level-1 from '!items!uOpWyMGK3oiUJ1Sl' @ 30 : 1 .. '!items!uOpWyMGK3oiUJ1Sl' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.855333 7f52c53fc6c0 Delete type=3 #1 +2026/06/01-22:35:50.956960 7f52c4bfb6c0 Level-0 table #26: started +2026/06/01-22:35:50.956991 7f52c4bfb6c0 Level-0 table #26: 0 bytes OK +2026/06/01-22:35:50.962751 7f52c4bfb6c0 Delete type=0 #24 +2026/06/01-22:35:50.994960 7f52c4bfb6c0 Manual compaction at level-0 from '!items!2IYbyCPF9LJojzsj' @ 72057594037927935 : 1 .. '!items!uOpWyMGK3oiUJ1Sl' @ 0 : 0; will stop at '!items!uOpWyMGK3oiUJ1Sl' @ 30 : 1 +2026/06/01-22:35:50.994966 7f52c4bfb6c0 Compacting 1@0 + 0@1 files +2026/06/01-22:35:50.998285 7f52c4bfb6c0 Generated table #27@0: 15 keys, 4529 bytes +2026/06/01-22:35:50.998300 7f52c4bfb6c0 Compacted 1@0 + 0@1 files => 4529 bytes +2026/06/01-22:35:51.004081 7f52c4bfb6c0 compacted to: files[ 0 1 0 0 0 0 0 ] +2026/06/01-22:35:51.004146 7f52c4bfb6c0 Delete type=2 #10 +2026/06/01-22:35:51.004357 7f52c4bfb6c0 Manual compaction at level-0 from '!items!uOpWyMGK3oiUJ1Sl' @ 30 : 1 .. '!items!uOpWyMGK3oiUJ1Sl' @ 0 : 0; will stop at (end) diff --git a/packs/cde-weapons/LOG.old b/packs/cde-weapons/LOG.old index e1ddfa1..f0e34ad 100644 --- a/packs/cde-weapons/LOG.old +++ b/packs/cde-weapons/LOG.old @@ -1,5 +1,4 @@ -2026/05/12-00:36:37.398172 7fdfd5fed6c0 Delete type=3 #1 -2026/05/12-00:36:37.399093 7fdfd4feb6c0 Level-0 table #5: started -2026/05/12-00:36:37.402237 7fdfd4feb6c0 Level-0 table #5: 4359 bytes OK -2026/05/12-00:36:37.408926 7fdfd4feb6c0 Delete type=0 #3 -2026/05/12-00:36:37.409067 7fdfd4feb6c0 Manual compaction at level-0 from '!items!2IYbyCPF9LJojzsj' @ 72057594037927935 : 1 .. '!items!uOpWyMGK3oiUJ1Sl' @ 0 : 0; will stop at (end) +2026/06/01-22:35:11.839235 7f52c53fc6c0 Log #21: 0 ops saved to Table #22 OK +2026/06/01-22:35:11.839283 7f52c53fc6c0 Archiving /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-weapons/000021.log: OK +2026/06/01-22:35:11.839312 7f52c53fc6c0 Table #10: 15 entries OK +2026/06/01-22:35:11.842894 7f52c53fc6c0 **** Repaired leveldb /home/morr/foundry/foundrydata-dev/Data/systems/fvtt-chroniques-de-l-etrange/packs/cde-weapons; recovered 1 files; 4529 bytes. Some data may have been lost. **** diff --git a/packs/cde-weapons/MANIFEST-000006 b/packs/cde-weapons/MANIFEST-000006 deleted file mode 100644 index f72cc60..0000000 Binary files a/packs/cde-weapons/MANIFEST-000006 and /dev/null differ diff --git a/packs/cde-weapons/MANIFEST-000023 b/packs/cde-weapons/MANIFEST-000023 new file mode 100644 index 0000000..c5597b8 Binary files /dev/null and b/packs/cde-weapons/MANIFEST-000023 differ diff --git a/packs/cde-weapons/lost/000021.log b/packs/cde-weapons/lost/000021.log new file mode 100644 index 0000000..e69de29 diff --git a/sample_data/fvtt-Actor-billy-lau-BXvMmiWRcnOzGXSM.json b/sample_data/fvtt-Actor-billy-lau-BXvMmiWRcnOzGXSM.json index 11382b9..5567cfb 100644 --- a/sample_data/fvtt-Actor-billy-lau-BXvMmiWRcnOzGXSM.json +++ b/sample_data/fvtt-Actor-billy-lau-BXvMmiWRcnOzGXSM.json @@ -7,7 +7,7 @@ "guardian": "5", "initiative": 1, "anti_initiative": 24, - "description": "

Billy Lau, enquêteur de l'étrange

怪 Durant sa jeunesse, Eddy Lau – le père de Billy – connut une brève mais intense carrière de fat si, raison pour laquelle il refusa fermement que son fils emprunte cette voie à son tour. En effet, il avait reçu une grave blessure lors d’un combat contre un démon et n’avait dû la vie sauve qu’à ses compagnons de l’époque. Prématurément forcé de trouver une autre activité en raison du trauma qui affecta son hei de manière permanente, il fit tout pour se tenir à l’écart du monde occulte.

怪 Une fois retiré, Eddy se maria mais son épouse mourut en couche lors de la naissance de Billy. Tentant de l’élever seul malgré sa profonde dépression, l’ancien exorciste dut travailler dur en enchaînant divers petits boulots précaires et physiquement éreintants. Billy grandit ainsi dans un quartier difficile de Sham Shui Po. De son point de vue, son père se montrait trop souvent absent et, livré à lui-même, il passa son adolescence en compagnie de petites frappes et autres voyous de bas étage. Gravissant les échelons d’un gang à l’insu de son père, il fut finalement repéré par un occultiste de la pègre nommé Jim Chiu.

怪 C’est donc Jim qui enseigna les ficelles du métier de fat si à Billy en lieu et place d’Eddy. En tant que géomancien, le gangster apprit au jeune homme à communiquer avec les divinités terrestres et à pratiquer l’art de la divination, ainsi que diverses méthodes permettant de dissiper les nœuds d’énergies néfastes. Billy devint également un enquêteur réputé pour son esprit de déduction, aussi perspicace qu’observateur et pouvant s’appuyer sur ses nombreux contacts. Hélas, quand Eddy découvrit que son fils avait appris la magie et auprès de qui, une violente dispute éclata – au terme de laquelle Billy claqua la porte de chez lui pour ne plus jamais y revenir.

怪 Le jeune fat si entretient encore des relations avec son ancien gang et ne manque jamais de rien grâce à la fraternité de la rue. De plus, comme son maître avant lui, il vend ses services aux triades qui se retrouvent face à des problèmes de nature occulte – ce qui lui assure des revenus réguliers. Heureusement d’ailleurs, car Billy brûle d’une passion dévorante : les belles voitures. Dans ses moments perdus, il retape ainsi un coupé sport de 1990 – une beauté qui lui a coûté de nombreuses heures de sommeil et la totalité de ses maigres économies.

怪 Sous une attitude un peu macho, Billy cache un cœur généreux et nostalgique. Son ex-petite amie – Clara, elle aussi passionnée de bolides – a trouvé la mort dans un violent accident à l’occasion d’une course de voitures urbaine illégale. Même si elle connaissait les risques liés à ce sport extrême, cette disparition affecta durement Billy qui en garde une grande sensibilité lorsqu’il s’agit d’interagir avec des fantômes ou autres créatures en proie à des peines de cœur. Son sanhei se nomme Regard abyssal. Il s’agit d’une boussole lopun que lui a léguée son mentor Jim Chiu à sa mort. La scène est encore gravée dans la mémoire de Billy, puisqu’il se trouvait auprès de son maître lorsque celui-ci fut assassiné non par une créature surnaturelle, mais bien par un assassin mortel lors d’un règlement de compte entre triades.

怪 Récemment, son père Eddy – qui tient aujourd’hui le restaurant Chez Lau – a renoué avec Billy. Le temps aidant, les absences de l’un et les frasques de l’autre se sont vues pardonnées. Depuis, le jeune homme fréquente le restaurant avec des collègues fat si dont il vient de rejoindre le groupe après les avoir croisés au cours de plusieurs affaires successives. Il râle à chaque fois que l’addition lui est présentée, arguant qu’en tant que fils du propriétaire il pourrait manger gratis. Mais peine perdue…

", + "description": "

Durant sa jeunesse, Eddy Lau – le père de

\n

Billy – connut une brève mais intense carrière

\n

de fat si, raison pour laquelle il refusa ferme­

\n

ment que son fils emprunte cette voie à son

\n

tour. En effet, il avait reçu une grave blessure

\n

lors d’un combat contre un démon et n’avait dû

\n

la vie sauve qu’à ses compagnons de l’époque.

\n

Prématurément forcé de trouver une autre acti­

\n

vité en raison du trauma qui affecta son hei de

\n

manière permanente, il fit tout pour se tenir à

\n

l’écart du monde occulte.

\n

Une fois retiré, Eddy se maria mais son

\n

épouse mourut en couche lors de la naissance

\n

de Billy. Tentant de l’élever seul malgré sa pro­

\n

fonde dépression, l’ancien exorciste dut travail­

\n

ler dur en enchaînant divers petits boulots pré­

\n

caires et physiquement éreintants. Billy grandit

\n

ainsi dans un quartier difficile de Sham Shui Po.

\n

De son point de vue, son père se montrait trop

\n

souvent absent et, livré à lui-même, il passa son

\n

adolescence en compagnie de petites frappes

\n

et autres voyous de bas étage. Gravissant les

\n

échelons d’un gang à l’insu de son père, il fut

\n

finalement repéré par un occultiste de la pègre

\n

nommé Jim Chiu.

\n

C’est donc Jim qui enseigna les ficelles du

\n

métier de fat si à Billy en lieu et place d’Eddy.

\n

En tant que géomancien, le gangster apprit au

\n

jeune homme à communiquer avec les divinités

\n

terrestres et à pratiquer l’art de la divination,

\n

ainsi que diverses méthodes permettant de

\n

dissiper les nœuds d’énergies néfastes. Billy

\n

devint également un enquêteur réputé pour son

\n

esprit de déduction, aussi perspicace qu’obser­

\n

vateur et pouvant s’appuyer sur ses nombreux

\n

contacts. Hélas, quand Eddy découvrit que son

\n

fils avait appris la magie et auprès de qui, une

\n

violente dispute éclata – au terme de laquelle

\n

Billy claqua la porte de chez lui pour ne plus

\n

jamais y revenir.

\n

Le jeune fat si entretient encore des relations

\n

avec son ancien gang et ne manque jamais de

\n

rien grâce à la fraternité de la rue. De plus,

\n

comme son maître avant lui, il vend ses services

\n

aux triades qui se retrouvent face à des pro­

\n

blèmes de nature occulte – ce qui lui assure des

\n

revenus réguliers. Heureusement d’ailleurs, car

\n

Billy brûle d’une passion dévorante : les belles

\n

voitures. Dans ses moments perdus, il retape

\n

ainsi un coupé sport de 1990 – une beauté qui

\n

lui a coûté de nombreuses heures de sommeil et

\n

la totalité de ses maigres économies.

\n

Sous une attitude un peu macho, Billy cache

\n

un cœur généreux et nostalgique. Son ex-petite

\n

amie – Clara, elle aussi passionnée de bolides –

\n

a trouvé la mort dans un violent accident à l’oc­

\n

casion d’une course de voitures urbaine illégale.

\n

Même si elle connaissait les risques liés à ce

\n

sport extrême, cette disparition affecta dure­

\n

ment Billy qui en garde une grande sensibilité

\n

lorsqu’il s’agit d’interagir avec des fantômes ou

\n

autres créatures en proie à des peines de cœur.

\n

Son sanhei se nomme Regard abyssal. Il s’agit

\n

d’une boussole lopun que lui a légué son mentor

\n

Jim Chiu à sa mort. La scène est encore gravée

\n

dans la mémoire de Billy, puisqu’il se trouvait

\n

auprès de son maître lorsque celui-ci fut assas­

\n

siné non par une créature surnaturelle, mais

\n

bien par un assassin mortel lors d’un règlement

\n

de compte entre triades.

\n

Récemment, son père Eddy – qui tient au­

\n

jourd’hui le restaurant Chez Lau – a renoué avec

\n

Billy. Le temps aidant, les absences de l’un et

\n

les frasques de l’autre se sont vues pardonnées.

\n

Depuis, le jeune homme fréquente le restaurant

\n

avec des collègues fat si dont il vient de rejoindre

\n

le groupe après les avoir croisés au cours de plu­

\n

sieurs affaires successives. Il râle à chaque fois

\n

que l’addition lui est présentée, arguant qu’en

\n

tant que fils du propriétaire il pourrait manger

\n

gratis. Mais peine perdue…

\n

les chroniques

\n

de l’étrange

", "prefs": { "typeofthrow": { "check": true, @@ -634,31 +634,35 @@ }, "items": [ { - "name": "怪 Regard abyssal", - "type": "item", + "name": "Regard abyssal", + "type": "sanhei", "_id": "cYoxj5ZM5x9hZjDO", "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/sanhei/regard_abyssal.png", "system": { - "subtype": "sanhei", "reference": "Sanhei du pré-tiré Billy Lau", - "description": "

Regard abyssal

(boussole lopun)

怪 récupère +1 san.

怪 1 Hei Yang = +4 dé-fastes lors d'un jet Enquête (déduction).

怪 1 Hei Yang = +2D Géomancie.

Son sanhei se nomme Regard abyssal. Il s’agit d’une boussole lopun que lui a léguée son mentor Jim Chiu à sa mort.

", - "quantity": 1, - "weight": 0, - "protection": "", - "damage": "", - "range": "", - "notes": "

Vos notes…

", - "attributes": {}, - "groups": {}, - "item": { - "reference": "Sanhei du pré-tiré Billy Lau", - "quantity": null, - "weight": null, - "protection": "", - "damage": "", - "range": "", - "subtype": "0" - } + "description": "

Regard abyssal (boussole lopun) :

\n

• Chaque fois qu'il doit récupérer 1 (ou plusieurs) point(s) de San, en récupère 1 de plus.

\n

• Contre 1 point de Hei Yang, ajoute un nombre de dés-fastes = à sa valeur en Bois (4) aux jets d'Enquête (Déduction) pour rassembler des preuves ou reconstituer une scène de crime.

\n

• Contre 1 point de Hei Yang, + 2 dés à tout jet de Géomancie (Divination).

", + "heiType": "yin", + "properties": { + "prop1": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop2": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop3": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + } + }, + "notes": "

Vos notes…

" }, "effects": [], "folder": null, @@ -688,7 +692,7 @@ "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/kung-fu/pistolet.png", "system": { "reference": "LdB p. 282", - "description": "

Le Gun Fu

En l’espace d’une génération, il était inévitable que les amateurs des films d’action de Hong Kong finissent par s’inspirer des cascades mises en scène par John Woo, Tsui Hark et d’autres... Combiner les arts martiaux traditionnels avec les armes à feu est une voie encore embryonnaire – d’autant que la législation sur les armes à feu de Hong Kong est loin d’être souple. Cependant, quelques soldats des triades, une poignée de tueurs à gages et certains perfectionnistes en quête de nouveauté ont obtenu des résultats assez intéressants. Il n’existe pas encore de véritable « école de Gun fu », mais Hong Kong accueille plusieurs dizaines d’adeptes de cette nouvelle voie largement dénigrée par à peu près tous les autres pratiquants des arts martiaux.

Le Gun fu mise sur la rapidité d’action et la mobilité. En dehors des armes à feu, il s’avère donc être un style défensif et assez acrobatique.

Style

Sa célérité et ses angles de tir improbables permettent au pratiquant de toucher des cibles qui semblent hors d’atteinte. La portée des attaques du personnage passe de distance longue à distance extrême, et les dégâts des armes à feu sont augmentés de 1 à portée courte.

", + "description": "

Le Gun-fu

\n

Yin / Eau / Combat à distance (Pistolet, Fusil)

\n

Portée longue devient portée extrême / Dégâts armes à feu + 1 à portée courte

", "orientation": "", "aspect": "", "skill": "", @@ -761,14 +765,14 @@ } }, { - "name": "怪 Grand imperméable à la doublure constellée de talismans (protection spirituelle 1)", + "name": "Grand imperméable à la doublure constellée de talismans (protection spirituelle 1)", "type": "item", "_id": "iTnOEYwcbhfJ45Fe", "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/polo-shirt.png", "system": { "subtype": "other", "reference": "", - "description": "

怪 Grand imperméable à la doublure constellée de talismans (protection spirituelle 1)

", + "description": "

Grand imperméable à la doublure constellée de talismans (protection spirituelle 1)

", "quantity": 1, "weight": 0, "protection": "", @@ -796,14 +800,14 @@ } }, { - "name": "怪 Revolver Glock 17, munitions à têtes en bois de saule (dégâts 3, distance longue)", + "name": "Revolver Glock 17, munitions à têtes en bois de saule (dégâts 3, distance longue)", "type": "item", "_id": "nyLUo3lMYKVNohQj", "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_technologie/pistol-gun.png", "system": { "subtype": "weapon", "reference": "", - "description": "

怪 Revolver Glock 17, munitions à têtes en bois de saule (dégâts 3, distance longue)

", + "description": "

Revolver Glock 17, munitions à têtes en bois de saule (dégâts 3, distance longue)

", "quantity": 1, "weight": 0, "protection": "", @@ -831,14 +835,14 @@ } }, { - "name": "怪 Cigarettes de contrebande", + "name": "Cigarettes de contrebande", "type": "item", "_id": "SO25GJT8cGKUhFD2", "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/cigarette.png", "system": { "subtype": "other", "reference": "", - "description": "

怪 Cigarettes de contrebande

", + "description": "

Cigarettes de contrebande

", "quantity": 1, "weight": 0, "protection": "", @@ -866,14 +870,14 @@ } }, { - "name": "怪 Smartphone d’entrée de gamme avec accès au Taonet", + "name": "Smartphone d’entrée de gamme avec accès au Taonet", "type": "item", "_id": "VuVIEGsCnK87UE9M", "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_technologie/smartphone.png", "system": { "subtype": "other", "reference": "", - "description": "

怪 Smartphone d’entrée de gamme avec accès au Taonet

", + "description": "

Smartphone d’entrée de gamme avec accès au Taonet

", "quantity": 1, "weight": 0, "protection": "", @@ -901,14 +905,14 @@ } }, { - "name": "怪 scooter", + "name": "scooter", "type": "item", "_id": "arkbeo5My8QHStAm", "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_transports_hong_kong/scooter.png", "system": { "subtype": "other", "reference": "", - "description": "

怪 scooter

", + "description": "

scooter

", "quantity": 1, "weight": 0, "protection": "", @@ -936,14 +940,14 @@ } }, { - "name": "怪 Voiture de luxe en panne dans un garage, à remettre en état", + "name": "Voiture de luxe en panne dans un garage, à remettre en état", "type": "item", "_id": "zILLnKG1TZd1ErIY", "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_transports_hong_kong/auto.png", "system": { "subtype": "other", "reference": "", - "description": "

怪 Voiture de luxe en panne dans un garage, à remettre en état

", + "description": "

Voiture de luxe en panne dans un garage, à remettre en état

", "quantity": 1, "weight": 0, "protection": "", @@ -971,14 +975,14 @@ } }, { - "name": "怪 Appartement modeste dans un quartier sous protection d'une triade", + "name": "Appartement modeste dans un quartier sous protection d'une triade", "type": "item", "_id": "KdxMSoGh8AynQ9Ee", "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_habitats/house.png", "system": { "subtype": "other", "reference": "", - "description": "

怪 Appartement modeste dans un quartier sous protection d'une triade : quartier de Wan Chai

", + "description": "

Appartement modeste dans un quartier sous protection d'une triade : quartier de Wan Chai

", "quantity": 1, "weight": 0, "protection": "", diff --git a/sample_data/fvtt-Actor-billy-lau-zSWwOmFiFjN4YxC9.json b/sample_data/fvtt-Actor-billy-lau-zSWwOmFiFjN4YxC9.json new file mode 100644 index 0000000..348ccf9 --- /dev/null +++ b/sample_data/fvtt-Actor-billy-lau-zSWwOmFiFjN4YxC9.json @@ -0,0 +1,1233 @@ +{ + "name": "Billy Lau", + "type": "character", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/fat_si/billy.png?1701021038975", + "system": { + "concept": "Enquêteur de l'étrange", + "guardian": 5, + "initiative": 1, + "anti_initiative": 24, + "description": "

Durant sa jeunesse, Eddy Lau – le père de

\n

Billy – connut une brève mais intense carrière

\n

de fat si, raison pour laquelle il refusa ferme­

\n

ment que son fils emprunte cette voie à son

\n

tour. En effet, il avait reçu une grave blessure

\n

lors d’un combat contre un démon et n’avait dû

\n

la vie sauve qu’à ses compagnons de l’époque.

\n

Prématurément forcé de trouver une autre acti­

\n

vité en raison du trauma qui affecta son hei de

\n

manière permanente, il fit tout pour se tenir à

\n

l’écart du monde occulte.

\n

Une fois retiré, Eddy se maria mais son

\n

épouse mourut en couche lors de la naissance

\n

de Billy. Tentant de l’élever seul malgré sa pro­

\n

fonde dépression, l’ancien exorciste dut travail­

\n

ler dur en enchaînant divers petits boulots pré­

\n

caires et physiquement éreintants. Billy grandit

\n

ainsi dans un quartier difficile de Sham Shui Po.

\n

De son point de vue, son père se montrait trop

\n

souvent absent et, livré à lui-même, il passa son

\n

adolescence en compagnie de petites frappes

\n

et autres voyous de bas étage. Gravissant les

\n

échelons d’un gang à l’insu de son père, il fut

\n

finalement repéré par un occultiste de la pègre

\n

nommé Jim Chiu.

\n

C’est donc Jim qui enseigna les ficelles du

\n

métier de fat si à Billy en lieu et place d’Eddy.

\n

En tant que géomancien, le gangster apprit au

\n

jeune homme à communiquer avec les divinités

\n

terrestres et à pratiquer l’art de la divination,

\n

ainsi que diverses méthodes permettant de

\n

dissiper les nœuds d’énergies néfastes. Billy

\n

devint également un enquêteur réputé pour son

\n

esprit de déduction, aussi perspicace qu’obser­

\n

vateur et pouvant s’appuyer sur ses nombreux

\n

contacts. Hélas, quand Eddy découvrit que son

\n

fils avait appris la magie et auprès de qui, une

\n

violente dispute éclata – au terme de laquelle

\n

Billy claqua la porte de chez lui pour ne plus

\n

jamais y revenir.

\n

Le jeune fat si entretient encore des relations

\n

avec son ancien gang et ne manque jamais de

\n

rien grâce à la fraternité de la rue. De plus,

\n

comme son maître avant lui, il vend ses services

\n

aux triades qui se retrouvent face à des pro­

\n

blèmes de nature occulte – ce qui lui assure des

\n

revenus réguliers. Heureusement d’ailleurs, car

\n

Billy brûle d’une passion dévorante : les belles

\n

voitures. Dans ses moments perdus, il retape

\n

ainsi un coupé sport de 1990 – une beauté qui

\n

lui a coûté de nombreuses heures de sommeil et

\n

la totalité de ses maigres économies.

\n

Sous une attitude un peu macho, Billy cache

\n

un cœur généreux et nostalgique. Son ex-petite

\n

amie – Clara, elle aussi passionnée de bolides –

\n

a trouvé la mort dans un violent accident à l’oc­

\n

casion d’une course de voitures urbaine illégale.

\n

Même si elle connaissait les risques liés à ce

\n

sport extrême, cette disparition affecta dure­

\n

ment Billy qui en garde une grande sensibilité

\n

lorsqu’il s’agit d’interagir avec des fantômes ou

\n

autres créatures en proie à des peines de cœur.

\n

Son sanhei se nomme Regard abyssal. Il s’agit

\n

d’une boussole lopun que lui a légué son mentor

\n

Jim Chiu à sa mort. La scène est encore gravée

\n

dans la mémoire de Billy, puisqu’il se trouvait

\n

auprès de son maître lorsque celui-ci fut assas­

\n

siné non par une créature surnaturelle, mais

\n

bien par un assassin mortel lors d’un règlement

\n

de compte entre triades.

\n

Récemment, son père Eddy – qui tient au­

\n

jourd’hui le restaurant Chez Lau – a renoué avec

\n

Billy. Le temps aidant, les absences de l’un et

\n

les frasques de l’autre se sont vues pardonnées.

\n

Depuis, le jeune homme fréquente le restaurant

\n

avec des collègues fat si dont il vient de rejoindre

\n

le groupe après les avoir croisés au cours de plu­

\n

sieurs affaires successives. Il râle à chaque fois

\n

que l’addition lui est présentée, arguant qu’en

\n

tant que fils du propriétaire il pourrait manger

\n

gratis. Mais peine perdue…

\n

les chroniques

\n

de l’étrange

", + "aspect": { + "fire": { + "chinese": "㊋", + "label": "CDE.Fire", + "value": 3 + }, + "earth": { + "chinese": "㊏", + "label": "CDE.Earth", + "value": 2 + }, + "metal": { + "chinese": "㊎", + "label": "CDE.Metal", + "value": 3 + }, + "water": { + "chinese": "㊌", + "label": "CDE.Water", + "value": 2 + }, + "wood": { + "chinese": "㊍", + "label": "CDE.Wood", + "value": 4 + } + }, + "skills": { + "art": { + "label": "CDE.Art", + "specialities": "", + "value": 0 + }, + "investigation": { + "label": "CDE.Investigation", + "specialities": "déduction", + "value": 3 + }, + "erudition": { + "label": "CDE.Erudition", + "specialities": "philosophie", + "value": 1 + }, + "knavery": { + "label": "CDE.Knavery", + "specialities": "triades", + "value": 2 + }, + "wordliness": { + "label": "CDE.Wordliness", + "specialities": "", + "value": 1 + }, + "prowess": { + "label": "CDE.Prowess", + "specialities": "", + "value": 0 + }, + "sciences": { + "label": "CDE.Sciences", + "specialities": "", + "value": 0 + }, + "technologies": { + "label": "CDE.Technologies", + "specialities": "", + "value": 0 + }, + "kungfu": { + "label": "CDE.KungFu", + "specialities": "", + "value": 2 + }, + "rangedcombat": { + "label": "CDE.RangedCombat", + "specialities": "armes à feu", + "value": 3 + } + }, + "resources": { + "supply": { + "label": "CDE.Supply", + "specialities": "triades", + "value": 2, + "debt": false + }, + "inquiry": { + "label": "CDE.Inquiry", + "specialities": "triades", + "value": 2, + "debt": false + }, + "influence": { + "label": "CDE.Influence", + "specialities": "gangs", + "value": 1, + "debt": false + } + }, + "component": { + "one": { + "value": "poignée de grains de riz" + }, + "two": { + "value": "fiole de sel" + }, + "three": { + "value": "fiole de sang" + }, + "four": { + "value": "écaille ventrale de tortue" + }, + "five": { + "value": "fiole d'eau pure" + }, + "six": { + "value": "fiole d'eau de riz" + }, + "seven": { + "value": "papier à origami" + }, + "eight": { + "value": "bâton d'encens" + }, + "nine": { + "value": "bâton d'encens" + }, + "zero": { + "value": "bâton d'encens" + } + }, + "magics": { + "internalcinnabar": { + "visible": false, + "value": 0, + "speciality": { + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "alchemy": { + "visible": false, + "value": 0, + "speciality": { + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "masteryoftheway": { + "visible": false, + "value": 0, + "speciality": { + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "exorcism": { + "visible": true, + "value": 2, + "speciality": { + "invocation": { + "check": true + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "geomancy": { + "visible": true, + "value": 3, + "speciality": { + "neutralization": { + "check": true + }, + "divination": { + "check": true + }, + "earthlyprayer": { + "check": true + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + } + } + } + }, + "threetreasures": { + "heiyang": { + "value": 5, + "max": 5 + }, + "heiyin": { + "value": 3, + "max": 3 + }, + "dicelevel": { + "level0d": { + "san": { + "value": 7, + "max": 7, + "min": 0 + }, + "zing": { + "value": 5, + "max": 5, + "min": 0 + } + }, + "level1d": { + "san": { + "value": 3, + "max": 3, + "min": 0 + }, + "zing": { + "value": 3, + "max": 3, + "min": 0 + } + }, + "level2d": { + "san": { + "value": 4, + "max": 4, + "min": 0 + }, + "zing": { + "value": 2, + "max": 2, + "min": 0 + } + } + } + }, + "experience": { + "value": 6, + "max": 6, + "min": 0 + }, + "prefs": { + "typeofthrow": { + "check": true, + "choice": "0" + } + }, + "prompt": { + "typeofthrow": { + "check": true, + "choice": "0" + }, + "configure": { + "numberofdice": 0, + "aspect": 0, + "bonus": 0, + "bonusauspiciousdice": 0, + "typeofthrow": 0, + "aspectskill": 0, + "bonusmalusskill": 0, + "aspectspeciality": 0, + "rolldifficulty": 0, + "bonusmalusspeciality": 0 + } + } + }, + "items": [ + { + "name": "Regard abyssal", + "type": "sanhei", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/sanhei/regard_abyssal.png", + "system": { + "reference": "Sanhei du pré-tiré Billy Lau", + "description": "

Regard abyssal (boussole lopun) :

\n

• Chaque fois qu'il doit récupérer 1 (ou plusieurs) point(s) de San, en récupère 1 de plus.

\n

• Contre 1 point de Hei Yang, ajoute un nombre de dés-fastes = à sa valeur en Bois (4) aux jets d'Enquête (Déduction) pour rassembler des preuves ou reconstituer une scène de crime.

\n

• Contre 1 point de Hei Yang, + 2 dés à tout jet de Géomancie (Divination).

", + "heiType": "yin", + "properties": { + "prop1": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop2": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop3": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "Y8AZOkLs7Ke04hfu", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Le Gun Fu", + "type": "kungfu", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/kung-fu/pistolet.png", + "system": { + "reference": "LdB p. 282", + "description": "

Le Gun-fu

\n

Yin / Eau / Combat à distance (Pistolet, Fusil)

\n

Portée longue devient portée extrême / Dégâts armes à feu + 1 à portée courte

", + "orientation": "yin", + "aspect": "metal", + "skill": "kungfu", + "speciality": "", + "style": "", + "techniques": { + "technique1": { + "check": false, + "name": "Louvoyer entre les flammes", + "activation": "dice", + "technique": "

Louvoyer entre les flammes

Ne restant jamais immobile dans une fusillade, le pratiquant n’offre pas une cible facile ! Le personnage peut annuler sur son action de défense (qu’elle soit réussie ou non) un nombre de dés-néfastes égal à sa valeur de Feu (ou d’Aptitude sociale pour un PNJ).

" + }, + "technique2": { + "check": false, + "name": "Rester conscient", + "activation": "action-attack-defense", + "technique": "

Rester conscient

Pris dans une fusillade, le pratiquant se concentre sur sa survie malgré les blessures éventuelles. Quelle que soit son action, lorsque le personnage fait son jet, il ignore 1 dé de malus dû à la perte de Zing et/ou de San. S’il dépense 2 dés-fastes à cet effet, il ignore alors 2 dés de malus dus à la perte de Zing et/ou de San. S’il s’agit d’un PNJ, il récupère 1 point de Vitalité.

" + }, + "technique3": { + "check": false, + "name": "Le Cri du dragon", + "activation": "damage-inflicted", + "technique": "

Le Cri du dragon

Vidant ses chargeurs dans un déluge de plomb, le pratiquant s’assure d’occasionner le maximum de dommages. Le personnage inflige des dégâts supplémentaires égaux à sa valeur de Métal (ou d’Aptitude martiale pour un PNJ) sur une attaque réussie.

" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "G5mXYDoCyJ0dsQZv", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Grand imperméable à la doublure constellée de talismans (protection spirituelle 1)", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/polo-shirt.png", + "system": { + "reference": "", + "description": "

Grand imperméable à la doublure constellée de talismans (protection spirituelle 1)

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "t9DHIbr8EW4gsLWm", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Revolver Glock 17, munitions à têtes en bois de saule (dégâts 3, distance longue)", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_technologie/pistol-gun.png", + "system": { + "reference": "", + "description": "

Revolver Glock 17, munitions à têtes en bois de saule (dégâts 3, distance longue)

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "W6uaY31VuCSetszi", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Cigarettes de contrebande", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/cigarette.png", + "system": { + "reference": "", + "description": "

Cigarettes de contrebande

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "Vyb7Whzy1z5yzoh9", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Smartphone d’entrée de gamme avec accès au Taonet", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_technologie/smartphone.png", + "system": { + "reference": "", + "description": "

Smartphone d’entrée de gamme avec accès au Taonet

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "valJXuTGGQN06znJ", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "scooter", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_transports_hong_kong/scooter.png", + "system": { + "reference": "", + "description": "

scooter

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "w8LXSYQ1eIygtlKV", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Voiture de luxe en panne dans un garage, à remettre en état", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_transports_hong_kong/auto.png", + "system": { + "reference": "", + "description": "

Voiture de luxe en panne dans un garage, à remettre en état

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "e7jD4SZw8dH8gyzx", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Appartement modeste dans un quartier sous protection d'une triade", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_habitats/house.png", + "system": { + "reference": "", + "description": "

Appartement modeste dans un quartier sous protection d'une triade : quartier de Wan Chai

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "9wc3h3l8bKRogDlD", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Exorcisme (Feu) : Invocation", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/FEU.gif", + "system": { + "reference": "LdB p. 316", + "description": "

Exorcisme (Feu)

L’Exorcisme est la magie qui permet de lutter efficacement contre les jiugwaai – tels les esprits, démons, fantômes, etc. – mais aussi d’interagir avec elles. Un exorciste est capable de pister ces êtres, de les affronter, de s’en protéger et même de les soumettre.

Il s’agit d’une magie qui fait un grand usage d’objets et d’armes. Un exorciste est souvent équipé d’une épée de saule et de talismans de protection, mais aussi de divers outils facilitant sa traque et son combat – boussole à esprits ou GPS à fantômes, entre autres.

Les sorts d’Exorcisme ne sont en général d’aucune utilité face à des mortels ou des créatures d’essence céleste.

Invocation (Métal)

Le PJ est capable de canaliser son énergie Yang afin de se créer un redoutable arsenal, transférable et utilisable par un autre personnage que lui-même.

Lorsqu’il la transfère dans un objet, celui-ci devient capable de blesser ou perturber (en gênant leurs actions par le port d’un masque représentant le visage d’un dieu courroucé, une musique produite par une clochette de bronze ou une odeur répandue par de l’encens) tous les jiugwaai, même s’ils disposent de la Capacité intangibilité. De la même façon, les dégâts infligés par une arme ainsi imprégnée de Hei ne tiennent pas compte de l’éventuelle Capacité protection de la cible.

L’exorciste peut également se protéger des attaques portées par des créatures surnaturelles. Généralement, il utilise pour cela un talisman qu’il porte sur lui et dans lequel il déverse son énergie Yang pour former une armure spirituelle.

Certains matériaux sont des « conducteurs » privilégiés pour l’énergie Yang : les essences de bois sacré (pêcher, saule) et les métaux nobles (or, argent, jade) notamment. Bien des exorcistes utilisent encore la classique épée de saule, mais nombre d’entre eux se sont adaptés à l’ère moderne et se servent de munitions à tête en bois sacré pour leurs armes à feu – toutefois, ces balles sont difficiles à produire et donc plutôt chères (sans compter que la stricte législation de Hong Kong concernant les armes à feu rend leur possession très difficile). Certains fat si utilisent également de l’eau pure ou de l’alcool qu’ils crachent sur les créatures après y avoir insufflé leur puissance !

Lorsque le PJ mobilise son souffle positif pour prier une divinité (expression ultime de l’énergie Yang), cette discipline lui permet également d’invoquer l’un de ses attributs : en général, l’arme ou une partie de l’équipement du dieu ainsi sollicité (le trident de Jilong, la hallebarde de Gwaan Dai, le bâton du Roi singe, etc.). Cet objet est capable de blesser les jiugwaai (même ceux possédant la Capacité intangibilité ; les dégâts infligés par une arme ainsi invoquée ne tiennent pas compte de leur éventuelle Capacité protection) et frappe également les mortels ou les êtres célestes. De façon similaire, la protection octroyée par cet équipement protège le PJ aussi bien contre les agressions des créatures surnaturelles que contre les armes profanes.

En même temps que cet attribut, le PJ est également investi d’une part de l’essence du dieu – qui lui permet de manier son arme avec efficacité. Si l’attribut invoqué n’est pas une arme, mais un outil (comme le Pilon de Soeng Ngo), le PJ bénéficie d’un bonus à un jet spécifique en relation avec son utilisation.

", + "specialityname": "Invocation", + "associatedelement": "metal", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "5 minutes", + "realizationtimeaccelerated": "3 crans d’initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets


Certains effets des attributs divins peuvent également être associés à une « aire » d’effet ou avoir une « distance » pour la portée.


", + "examples": "

Exemples

Voici une liste non exhaustive d’invocations utiles, avec leur coût en Puissance :


Chaque exemple d’Effet ci-dessus est indépendant et nécessite son propre sort. Cependant, les effets d’un sort peuvent être renforcés : le coût pour en augmenter les effets est précisé entre parenthèses.


", + "notes": "

Vos notes…

", + "discipline": "exorcism", + "hei": "" + }, + "_id": "lLWh4oHNXFbBXQSS", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Géomancie (Bois) : Neutralisation", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/BOIS.gif", + "system": { + "reference": "LdB p. 323", + "description": "

Géomancie (Bois)

Le Géomancie recouvre la compréhension qu’a le fat si des flux d’énergie qui circulent à travers le cosmos, ainsi que sa capacité à les manipuler dans une certaine mesure. Il voit ainsi la façon dont l’énergie du Tao baigne le monde et le relie au Ciel – mais aussi aux Dix Enfers. Cette Compétence recouvre la divination et le fungseoi. Grâce à la divination, le fat si est capable de recevoir des présages et de les interpréter – il discerne ainsi des bribes de l’avenir par divers moyens (tirage du Jik Ging, scapulomancie, horoscope, etc.). Il est également versé dans l’art de prier les dieux célestes afin de demander leur bénédiction pour une occasion particulière. Enfin, il sait s’adresser aux divinités terrestres afin d’obtenir des faveurs et de leur demander des services. Le fungseoi permet de manipuler les lignes d’énergie dans le but de les harmoniser ou de les perturber – afin de changer du tout au tout l’influence exercée par un lieu sur ses occupants.

Le fat si est également capable de repérer et de détruire un nœud de flux néfastes afin de libérer un endroit de son influence délétère.

Neutralisation (Métal)

Grâce à son art de la géomancie, le PJ est capable d’analyser un nœud de flux néfastes, d’en bloquer les effets et même de le détruire.

Lorsqu’il se trouve face à un tel confluent d’énergie négative, le PJ peut en premier lieu étudier ce qui en est à l’origine. S’agit-il d’une stagnation d’un élément due à une mauvaise circulation des souffles ? Le nœud provient-il de l’accumulation de sentiments violents (colère, peine, ressentiment) ? Est-il né à la suite d’un événement atroce (meurtre, tortures, suicide) ? Le PJ peut ainsi apprendre diverses informations sur la nature de ce nœud néfaste.

Uniquement après s’être livré à cette analyse, le personnage peut se prémunir – lui-même ainsi que d’autres personnes s’il lance le sort sur elles – des effets de la puissance négative de cette confluence délétère. Grâce à diverses protections (talisman, peinture corporelle, amulette, etc.), il réduit ainsi la valeur du nœud.

Toujours grâce à une analyse préalable, le PJ use enfin de sa magie pour détruire le nœud de flux néfastes – généralement en dissipant les énergies négatives qui le composent par une réorganisation de leur circulation. Il peut ainsi ramener une certaine harmonie dans le lieu qui était pollué par cette confluence.

", + "specialityname": "Neutralisation", + "associatedelement": "metal", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "5 minutes", + "realizationtimeaccelerated": "6 crans d’initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de sorts utiles, avec leur coût en Puissance :


Il est possible de déclencher chaque Effet plusieurs fois dans un même sort. Le coût pour en augmenter les Effets est précisé entre parenthèses. Il est aussi possible de les combiner entre eux pour créer de nouveaux sorts plus puissants.


", + "notes": "

Vos notes…

", + "discipline": "geomancy", + "hei": "" + }, + "_id": "bcQuW5SfzQcClpdu", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Géomancie (Bois) : Divination", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/BOIS.gif", + "system": { + "reference": "LdB p. 324", + "description": "

Exorcisme (Feu)

L’Exorcisme est la magie qui permet de lutter efficacement contre les jiugwaai – tels les esprits, démons, fantômes, etc. – mais aussi d’interagir avec elles. Un exorciste est capable de pister ces êtres, de les affronter, de s’en protéger et même de les soumettre.

Il s’agit d’une magie qui fait un grand usage d’objets et d’armes. Un exorciste est souvent équipé d’une épée de saule et de talismans de protection, mais aussi de divers outils facilitant sa traque et son combat – boussole à esprits ou GPS à fantômes, entre autres.

Les sorts d’Exorcisme ne sont en général d’aucune utilité face à des mortels ou des créatures d’essence céleste.

Divination (Eau)

Magie ancienne, la divination permet au PJ de deviner l’avenir, d’entrevoir le destin, de visualiser le passé et le présent ainsi que de recevoir divers signes qu’il aura à charge d’interpréter au mieux. La divination chinoise prend bien des formes : lecture de la position des étoiles, horoscope et almanach, scapulomancie, tirage du Jik Ging, analyse des lignes de la main et des traits du visage, rêve prémonitoire, etc.

Concrètement, le PJ discerne un futur probable ou des événements à venir sur un certain laps de temps. Une divination va souvent concerner une occasion particulière (la réussite à un concours, la signature d’un contrat, etc.), pendant la durée de laquelle le PJ (ou celui à qui il a fait sa prédiction) gagnera un certain nombre de bonus.

Il est également possible d’explorer le passé, de visualiser des scènes s’étant produites en un lieu donné ou aux abords d’un objet précis (à la façon de la psychomancie). De même, le devin peut voir le présent et percevoir des images d’événements en cours qui se déroulent loin de lui.

Le PJ peut bien sûr réaliser une réelle prédiction – pour lui-même ou un tiers – et le MJ doit alors délivrer des informations plus ou moins exploitables en fonction de la Puissance investie dans le sort.

", + "specialityname": "Divination", + "associatedelement": "eau", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "30 minutes", + "realizationtimeaccelerated": "impossible", + "flashback": "oui, mais sans la possibilité d’agir sur le Loksyu", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de divinations utiles, avec leur coût en Puissance :


Il est possible de déclencher chaque Effet plusieurs fois dans un même sort. Le coût pour en augmenter les effets est précisé entre parenthèses. Il est aussi possible de les combiner entre eux pour créer de nouveaux sorts plus puissants.


", + "notes": "

Vos notes…

", + "discipline": "geomancy", + "hei": "" + }, + "_id": "A5nXrr2uSdja2GTM", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Géomancie (Bois) : Prière céleste", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/BOIS.gif", + "system": { + "reference": "LdB p. 327", + "description": "

Géomancie (Bois)

Le Géomancie recouvre la compréhension qu’a le fat si des flux d’énergie qui circulent à travers le cosmos, ainsi que sa capacité à les manipuler dans une certaine mesure. Il voit ainsi la façon dont l’énergie du Tao baigne le monde et le relie au Ciel – mais aussi aux Dix Enfers. Cette Compétence recouvre la divination et le fungseoi. Grâce à la divination, le fat si est capable de recevoir des présages et de les interpréter – il discerne ainsi des bribes de l’avenir par divers moyens (tirage du Jik Ging, scapulomancie, horoscope, etc.). Il est également versé dans l’art de prier les dieux célestes afin de demander leur bénédiction pour une occasion particulière. Enfin, il sait s’adresser aux divinités terrestres afin d’obtenir des faveurs et de leur demander des services. Le fungseoi permet de manipuler les lignes d’énergie dans le but de les harmoniser ou de les perturber – afin de changer du tout au tout l’influence exercée par un lieu sur ses occupants.

Le fat si est également capable de repérer et de détruire un nœud de flux néfastes afin de libérer un endroit de son influence délétère.

Prière céleste (Feu)

Le PJ connaît les rituels et paroles permettant d’appeler la bénédiction d’une divinité céleste. En général, on sollicite les dieux pour qu’ils nous prêtent force et assistance durant une épreuve particulière et planifiée – qui peut être un combat, une négociation, un interrogatoire, l’analyse d’une scène de crime, la préparation d’une potion d’alchimie, etc. Cette épreuve doit être planifiée à l’avance afin que le Ciel identifie le moment où il doit apporter son aide.

Le PJ doit bien sûr rendre hommage à la divinité la plus en rapport avec la nature de l’épreuve prévue. S’il s’apprête à combattre des démons, il priera Jinlong ou Gwaan Ji. S’il compte séduire la personne dont il est amoureux, il sollicitera Soeng Ngo. Si l’épreuve est de nature intellectuelle (des recherches à accomplir, un examen à réussir, etc.), il se tournera vers Man Tai. Il est bien sûr possible d’adresser ses prières aux immortels et aux divers bouddhas !

", + "specialityname": "Prière céleste", + "associatedelement": "feu", + "heiType": "yang", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "30 minutes", + "realizationtimeaccelerated": "non applicable", + "flashback": "oui", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de prières utiles, avec leur coût en Puissance :


Chaque exemple d’Effet ci-dessus est indépendant et nécessite son propre sort. Cependant, les Effets d’un sort peuvent être renforcés : le coût pour en augmenter les Effets est précisé entre parenthèses.


", + "notes": "

Vos notes…

", + "discipline": "geomancy", + "hei": "" + }, + "_id": "Qz8GcQFGSAvEMGsQ", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + } + ], + "prototypeToken": { + "name": "Billy Lau", + "displayName": 0, + "actorLink": false, + "width": 1, + "height": 1, + "depth": 1, + "texture": { + "src": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/fat_si/billy.png?1701021038975", + "anchorX": 0.5, + "anchorY": 0.5, + "fit": "contain", + "scaleX": 1, + "scaleY": 1, + "tint": "#ffffff", + "alphaThreshold": 0.75 + }, + "lockRotation": false, + "rotation": 0, + "alpha": 1, + "disposition": -1, + "displayBars": 0, + "bar1": { + "attribute": "threetreasures.heiyang" + }, + "bar2": { + "attribute": "threetreasures.heiyin" + }, + "light": { + "negative": false, + "priority": 0, + "alpha": 0.5, + "angle": 360, + "bright": 0, + "color": null, + "coloration": 1, + "dim": 0, + "attenuation": 0.5, + "luminosity": 0.5, + "saturation": 0, + "contrast": 0, + "shadows": 0, + "animation": { + "type": null, + "speed": 5, + "intensity": 5, + "reverse": false + }, + "darkness": { + "min": 0, + "max": 1 + } + }, + "sight": { + "enabled": false, + "range": 0, + "angle": 360, + "visionMode": "basic", + "color": null, + "attenuation": 0.1, + "brightness": 0, + "saturation": 0, + "contrast": 0 + }, + "detectionModes": {}, + "occludable": { + "radius": 0 + }, + "ring": { + "enabled": false, + "colors": { + "ring": null, + "background": null + }, + "effects": 1, + "subject": { + "scale": 1, + "texture": null + } + }, + "turnMarker": { + "mode": 1, + "animation": null, + "src": null, + "disposition": false + }, + "movementAction": null, + "flags": {}, + "randomImg": false, + "appendNumber": false, + "prependAdjective": false + }, + "effects": [], + "folder": null, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351493, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": { + "worldId": "cde", + "uuid": "Actor.zSWwOmFiFjN4YxC9", + "coreVersion": "14.363", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "14.0.3" + } + }, + "ownership": { + "default": 0 + } +} \ No newline at end of file diff --git a/sample_data/fvtt-Actor-brenda-kang-X7kM9pQ2rT5vW8nZ.json b/sample_data/fvtt-Actor-brenda-kang-X7kM9pQ2rT5vW8nZ.json new file mode 100644 index 0000000..a0a7f9d --- /dev/null +++ b/sample_data/fvtt-Actor-brenda-kang-X7kM9pQ2rT5vW8nZ.json @@ -0,0 +1,1179 @@ +{ + "name": "Brenda Kang", + "type": "character", + "img": "", + "system": { + "concept": "Alchimiste autodidacte", + "guardian": 6, + "initiative": 1, + "anti_initiative": 24, + "description": "

Brenda compte au faible nombre des fat si

\n

autodidactes – ce qui en dit long sur ses talents

\n

magiques. Très discrète sur sa vie passée (au

\n

point que même ses amis les plus proches en

\n

ignorent tout) et sur les raisons qui la poussèrent

\n

vers cette vocation, elle accomplit ses premiers

\n

pas en offrant ses services de géomancienne

\n

auprès du gotha hongkongais. Elle proposait

\n

notamment son expertise dans le domaine de la

\n

décoration d’intérieur, avec la petite touche de

\n

fungseoi véritable qui faisait la différence. Peu à

\n

peu, elle monta sa propre entreprise en la ma­

\n

tière et gagna de plus en plus de clients grâce

\n

à un bouche à oreille particulièrement flatteur.

\n

Grâce à cette activité, elle put s’offrir un loft

\n

suffisamment spacieux pour accueillir un véri­

\n

table laboratoire où mener ses recherches alchi­

\n

miques – cette science ésotérique constituant sa

\n

véritable passion.

\n

Cette fréquentation du gratin de Hong Kong

\n

lui permit également de se construire un vaste

\n

réseau de contacts. Et c’est à travers ce dernier

\n

qu’elle finit par découvrir la part occulte de la

\n

ville qui ne dort jamais. Bien que déjà initiée

\n

aux arts mystiques, Brenda ignorait qu’il existait

\n

une telle faune surnaturelle dans les rues qu’elle

\n

arpentait pourtant chaque jour. Elle s’y plongea

\n

avec la même curiosité dévorante qu’elle montre

\n

envers tout ce qui attise son intérêt et apprit à

\n

la dure que ce microcosme regorgeait de dan­

\n

gers qu’il fallait prendre garde à ne pas réveiller.

\n

Toutefois, sa nature indiscrète la poussa à se

\n

mêler de ce qui ne la regardait pas plus souvent

\n

qu’à son tour  ! Elle s’en sortit heureusement

\n

toujours grâce à un mélange de chance et de

\n

talent, ce qui ne l’incita guère à se montrer plus

\n

prudente…

\n

Intelligente et débrouillarde, Brenda adore

\n

allier à la magie traditionnelle la modernité

\n

de la science, à la façon de son pistolet LDB

\n

à cartouches alchimiques de fabrication artisa­

\n

nale – une arme redoutable avec laquelle elle a

\n

déjà neutralisé plus d’un jiugwaai. Son labora­

\n

toire s’avère à cette image, entre écrans plats

\n

sur lesquels défilent des algorithmes complexes

\n

et jarres en terre cuite contenant des herbes

\n

séchées et des poudres aux couleurs variées.

\n

En cela, elle représente à merveille la facette

\n

contemporaine des fat si : des mages capables

\n

de vivre avec leur temps sans renier les usages

\n

ayant fait leurs preuves depuis des siècles.

\n

Souvent peu prise au sérieux en raison de son

\n

apparence fantasque et de son caractère enjoué,

\n

Brenda dément rapidement cette première im­

\n

pression en démontrant toutes ses compétences

\n

une fois sur le terrain.

\n

Son sanhei est le traditionnel Gam Sim Ceoi,

\n

le crapaud d’or à trois pattes qui amène fortune

\n

et prospérité. Porté en permanence par Brenda,

\n

le talisman s’est mué en un symbole de son man­

\n

dat céleste de fat si après qu’elle a rendu ser­

\n

vice à d’autres exorcistes réputés en présence

\n

du Grand Immortel Wong qui leur avait accordé

\n

sa bénédiction. C’est d’ailleurs à cette occasion

\n

qu’elle rencontra le groupe avec lequel elle offi­

\n

cie encore aujourd’hui.

\n

Elle fréquente avec ses compagnons le res­

\n

taurant Chez Lau où ils aiment discuter de leurs

\n

prochaines missions, mais aussi se détendre en­

\n

semble. C’est Brenda qui a proposé aux autres

\n

de travailler ensemble sur une base régulière

\n

– devenant en quelque sorte l’âme de cette

\n

équipe, celle pour qui chacun de ses camarades

\n

serait prêt à donner sa vie.

\n

les chroniques

\n

de l’étrange

", + "aspect": { + "fire": { + "chinese": "㊋", + "label": "CDE.Fire", + "value": 2 + }, + "earth": { + "chinese": "㊏", + "label": "CDE.Earth", + "value": 1 + }, + "metal": { + "chinese": "㊎", + "label": "CDE.Metal", + "value": 3 + }, + "water": { + "chinese": "㊌", + "label": "CDE.Water", + "value": 4 + }, + "wood": { + "chinese": "㊍", + "label": "CDE.Wood", + "value": 2 + } + }, + "skills": { + "art": { + "label": "CDE.Art", + "specialities": "", + "value": 0 + }, + "investigation": { + "label": "CDE.Investigation", + "specialities": "Énigme", + "value": 3 + }, + "erudition": { + "label": "CDE.Erudition", + "specialities": "Mythologie", + "value": 1 + }, + "knavery": { + "label": "CDE.Knavery", + "specialities": "", + "value": 2 + }, + "wordliness": { + "label": "CDE.Wordliness", + "specialities": "Négociation", + "value": 1 + }, + "prowess": { + "label": "CDE.Prowess", + "specialities": "", + "value": 1 + }, + "sciences": { + "label": "CDE.Sciences", + "specialities": "Botanique", + "value": 3 + }, + "technologies": { + "label": "CDE.Technologies", + "specialities": "", + "value": 1 + }, + "kungfu": { + "label": "CDE.KungFu", + "specialities": "", + "value": 2 + }, + "rangedcombat": { + "label": "CDE.RangedCombat", + "specialities": "", + "value": 0 + } + }, + "resources": { + "supply": { + "label": "CDE.Supply", + "specialities": "Fortune, Commerçants", + "value": 2, + "debt": false + }, + "inquiry": { + "label": "CDE.Inquiry", + "specialities": "Médias, Politiciens", + "value": 1, + "debt": false + }, + "influence": { + "label": "CDE.Influence", + "specialities": "Politiciens", + "value": 1, + "debt": false + } + }, + "component": { + "one": { + "value": "Huiles essentielles" + }, + "two": { + "value": "Ginseng" + }, + "three": { + "value": "Radis noir" + }, + "four": { + "value": "Cinabre" + }, + "five": { + "value": "Cigüe" + }, + "six": { + "value": "Soufre" + }, + "seven": { + "value": "Mélange d'herbes" + }, + "eight": { + "value": "Bâton d'encens" + }, + "nine": { + "value": "Bâton d'encens" + }, + "zero": { + "value": "Fiole d'alcool très fort" + } + }, + "magics": { + "internalcinnabar": { + "visible": false, + "value": 0, + "speciality": { + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "alchemy": { + "visible": true, + "value": 4, + "speciality": { + "acupuncture": { + "check": false + }, + "elixirs": { + "check": true + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": true + }, + "potions": { + "check": true + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "masteryoftheway": { + "visible": false, + "value": 0, + "speciality": { + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "exorcism": { + "visible": false, + "value": 0, + "speciality": { + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "geomancy": { + "visible": true, + "value": 2, + "speciality": { + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": true + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + } + } + } + }, + "threetreasures": { + "heiyang": { + "value": 6, + "max": 6 + }, + "heiyin": { + "value": 3, + "max": 3 + }, + "dicelevel": { + "level0d": { + "san": { + "value": 5, + "max": 5, + "min": 0 + }, + "zing": { + "value": 6, + "max": 6, + "min": 0 + } + }, + "level1d": { + "san": { + "value": 2, + "max": 2, + "min": 0 + }, + "zing": { + "value": 3, + "max": 3, + "min": 0 + } + }, + "level2d": { + "san": { + "value": 3, + "max": 3, + "min": 0 + }, + "zing": { + "value": 3, + "max": 3, + "min": 0 + } + } + } + }, + "experience": { + "value": 6, + "max": 6, + "min": 0 + }, + "prefs": { + "typeofthrow": { + "check": true, + "choice": "0" + } + }, + "prompt": { + "typeofthrow": { + "check": true, + "choice": "0" + }, + "configure": { + "numberofdice": 0, + "aspect": 0, + "bonus": 0, + "bonusauspiciousdice": 0, + "typeofthrow": 0, + "aspectskill": 0, + "bonusmalusskill": 0, + "aspectspeciality": 0, + "rolldifficulty": 0, + "bonusmalusspeciality": 0 + } + } + }, + "items": [ + { + "name": "Serendipité", + "type": "sanhei", + "img": "", + "system": { + "reference": "Sanhei de Brenda Kang", + "description": "

Serendipité (figurine du crapaud à trois pattes) :

\n

• Réserve de 3 points de Hei Yang ; chaque fois que le fat si récupère 1 point de Hei Yang, le sanhei en récupère également 1 de son côté.

\n

• Lors d'un jet de Mondanités (Négociation) ou de Matériel (Fortune) destiné à acheter des ingrédients ou des objets occultes, permet de lancer 1 dé supplémentaire.

", + "heiType": "yin", + "properties": { + "prop1": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop2": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop3": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "sN4tR7kE9wQ2yU6iA1pL3mB8", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Instruments modernes d'alchimie (fioles, tubes, balance, mortier)", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Instruments modernes d'alchimie (fioles, tubes, balance, mortier)

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "aBc0Df2Gh4Ij6Kl8Mn0Op2Qr", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Sacoche de transport de fioles", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Sacoche de transport de fioles

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "tU6vW4xY8zA2bC0dE4fG6hI8", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Hangar spacieux dans un quartier modeste", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Hangar spacieux dans un quartier modeste

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "jK2lM4nO6pQ8rS0tU2vW4xY6", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Scooter haut de gamme", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Scooter haut de gamme

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "zA8bC0dE2fG4hI6jK8lM0nO2", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Smartphone dernière génération avec accès au Taonet", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Smartphone dernière génération avec accès au Taonet

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "pQ4rS6tU8vW0xY2zA4bC6dE8", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Nombreux bijoux et colifichets", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Nombreux bijoux et colifichets

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "fG0hI2jK4lM6nO8pQ0rS2tU4", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Pistolet LDB à cartouches alchimiques (et 3 fioles adaptées)", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Pistolet LDB à cartouches alchimiques (et 3 fioles adaptées) – dégâts 2+, distance longue

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "vW6xY8zA0bC2dE4fG6hI8jK0", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Alchimie (Eau) : Élixirs", + "type": "spell", + "img": "", + "system": { + "reference": "LdB p. 288", + "description": "

Alchimie (Eau)

L'Alchimie est l'art de combiner des ingrédients pour produire des effets surnaturels. Contrairement aux autres disciplines magiques, elle ne repose pas sur l'invocation d'esprits ou la manipulation directe du Hei, mais sur la transformation de la matière par des procédés ésotériques. L'alchimiste utilise des ingrédients rares, des appareils de mesure et de chauffage, et suit des protocoles précis hérités d'une tradition millénaire mêlant taoïsme et sciences occultes occidentales.

Élixirs (Eau)

L'alchimiste est capable de concocter des élixirs aux propriétés variées : remèdes qui accélèrent la guérison, breuvages qui confèrent une force surhumaine le temps d'une scène, ou encore philtres permettant de résister aux poisons et aux maladies. Chaque élixir nécessite des ingrédients spécifiques et un temps de préparation qui varie selon sa puissance.

", + "specialityname": "Élixirs", + "associatedelement": "bois", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "1 heure", + "realizationtimeaccelerated": "6 crans d'initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive d'élixirs, avec leur coût en Puissance :

", + "notes": "

Vos notes…

", + "discipline": "alchemy", + "hei": "" + }, + "_id": "lM2nO4pQ6rS8tU0vW2xY4zA6", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Alchimie (Eau) : Arsenal", + "type": "spell", + "img": "", + "system": { + "reference": "LdB p. 289", + "description": "

Alchimie (Eau)

L'Alchimie est l'art de combiner des ingrédients pour produire des effets surnaturels. Contrairement aux autres disciplines magiques, elle ne repose pas sur l'invocation d'esprits ou la manipulation directe du Hei, mais sur la transformation de la matière par des procédés ésotériques.

Arsenal (Métal)

L'alchimiste est capable de préparer des projectiles et des munitions spéciales aux propriétés surnaturelles : balles chargées d'énergie Yang, fioles explosives, grenades fumigènes alchimiques, ou encore des cartouches qui infligent des dégâts spirituels aux créatures Yin. Ces préparations nécessitent une connaissance approfondie des métaux et des réactions chimiques ésotériques.

", + "specialityname": "Arsenal", + "associatedelement": "metal", + "heiType": "yang", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "30 minutes", + "realizationtimeaccelerated": "3 crans d'initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de préparations d'arsenal, avec leur coût en Puissance :

", + "notes": "

Vos notes…

", + "discipline": "alchemy", + "hei": "" + }, + "_id": "bC8dE0fG2hI4jK6lM8nO0pQ2", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Alchimie (Eau) : Philtres", + "type": "spell", + "img": "", + "system": { + "reference": "LdB p. 290", + "description": "

Alchimie (Eau)

L'Alchimie est l'art de combiner des ingrédients pour produire des effets surnaturels. Contrairement aux autres disciplines magiques, elle ne repose pas sur l'invocation d'esprits ou la manipulation directe du Hei, mais sur la transformation de la matière par des procédés ésotériques.

Philtres (Eau)

L'alchimiste maîtrise la confection de philtres aux effets subtils agissant sur l'esprit et les émotions : philtres d'amitié qui rendent un interlocuteur bienveillant, élixirs de vérité qui empêchent de mentir, ou encore breuvages de confusion qui sèment le trouble chez un adversaire. Ces préparations sont redoutables en société et permettent d'obtenir des informations ou des faveurs sans recourir à la violence.

", + "specialityname": "Philtres", + "associatedelement": "eau", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "1 heure", + "realizationtimeaccelerated": "6 crans d'initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de philtres, avec leur coût en Puissance :

", + "notes": "

Vos notes…

", + "discipline": "alchemy", + "hei": "" + }, + "_id": "rS4tU6vW8xY0zA2bC4dE6fG8", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Géomancie (Bois) : Fungseoi", + "type": "spell", + "img": "", + "system": { + "reference": "LdB p. 328", + "description": "

Géomancie (Bois)

La Géomancie recouvre la compréhension qu'a le fat si des flux d'énergie qui circulent à travers le cosmos, ainsi que sa capacité à les manipuler dans une certaine mesure. Il voit ainsi la façon dont l'énergie du Tao baigne le monde et le relie au Ciel – mais aussi aux Dix Enfers.

Fungseoi (Eau)

Le Fungseoi – littéralement « vent et eau » – est l'art de manipuler les lignes d'énergie tellurique pour harmoniser ou perturber l'influence exercée par un lieu sur ses occupants. Le fat si peut ainsi purifier une maison maudite, attirer la prospérité sur un commerce, ou au contraire rendre un endroit si désagréable que ses occupants finiront par le quitter. Il utilise pour cela des calculs complexes basés sur l'orientation, les éléments environnants et les dates propices.

", + "specialityname": "Fungseoi", + "associatedelement": "eau", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "2 heures", + "realizationtimeaccelerated": "impossible", + "flashback": "oui, mais sans la possibilité d'agir sur le Loksyu", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de sorts de Fungseoi, avec leur coût en Puissance :

", + "notes": "

Vos notes…

", + "discipline": "geomancy", + "hei": "" + }, + "_id": "hI0jK2lM4nO6pQ8rS0tU2vW4", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + } + ], + "prototypeToken": { + "name": "Brenda Kang", + "displayName": 0, + "actorLink": false, + "width": 1, + "height": 1, + "depth": 1, + "texture": { + "src": "", + "anchorX": 0.5, + "anchorY": 0.5, + "fit": "contain", + "scaleX": 1, + "scaleY": 1, + "tint": "#ffffff", + "alphaThreshold": 0.75 + }, + "lockRotation": false, + "rotation": 0, + "alpha": 1, + "disposition": -1, + "displayBars": 0, + "bar1": { + "attribute": "threetreasures.heiyang" + }, + "bar2": { + "attribute": "threetreasures.heiyin" + }, + "light": { + "negative": false, + "priority": 0, + "alpha": 0.5, + "angle": 360, + "bright": 0, + "color": null, + "coloration": 1, + "dim": 0, + "attenuation": 0.5, + "luminosity": 0.5, + "saturation": 0, + "contrast": 0, + "shadows": 0, + "animation": { + "type": null, + "speed": 5, + "intensity": 5, + "reverse": false + }, + "darkness": { + "min": 0, + "max": 1 + } + }, + "sight": { + "enabled": false, + "range": 0, + "angle": 360, + "visionMode": "basic", + "color": null, + "attenuation": 0.1, + "brightness": 0, + "saturation": 0, + "contrast": 0 + }, + "detectionModes": {}, + "occludable": { + "radius": 0 + }, + "ring": { + "enabled": false, + "colors": { + "ring": null, + "background": null + }, + "effects": 1, + "subject": { + "scale": 1, + "texture": null + } + }, + "turnMarker": { + "mode": 1, + "animation": null, + "src": null, + "disposition": false + }, + "movementAction": null, + "flags": {}, + "randomImg": false, + "appendNumber": false, + "prependAdjective": false + }, + "effects": [], + "folder": null, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351493, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": { + "worldId": "cde", + "uuid": "Actor.X7kM9pQ2rT5vW8nZ", + "coreVersion": "14.363", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "14.0.3" + } + }, + "ownership": { + "default": 0 + } +} \ No newline at end of file diff --git a/sample_data/fvtt-Actor-danny-hou-9Ln7wnMwFK89FiTI.json b/sample_data/fvtt-Actor-danny-hou-9Ln7wnMwFK89FiTI.json new file mode 100644 index 0000000..47a411b --- /dev/null +++ b/sample_data/fvtt-Actor-danny-hou-9Ln7wnMwFK89FiTI.json @@ -0,0 +1,972 @@ +{ + "name": "Danny Hou", + "type": "character", + "img": "", + "system": { + "concept": "Artiste urbain", + "guardian": 3, + "initiative": 1, + "anti_initiative": 24, + "description": "

Danny est un fat si, un protecteur, un artiste

\n

et un athlète adepte des sports de glisse urbains.

\n

Issu d’une famille aussi traditionnelle qu’ai­

\n

sée, il se passionna très tôt pour le sport. Curieux

\n

et spontané, il s’encanailla dans les rues en

\n

compagnie d’enfants moins favorisés. En raison

\n

d’un hei Yang prononcé, Danny attirait à lui de

\n

nombreuses créatures et fut ainsi remarqué par

\n

un fat si nommé Jude Leung. Dans un premier

\n

temps, Jude poussa le jeune homme à fréquenter

\n

l’école de kung-fu du quartier où lui-même avait

\n

appris la Paume des Huit Trigrammes – afin de

\n

l’initier à la maîtrise de son énergie et de garder

\n

un œil sur lui par la même occasion.

\n

Cependant, l’âme d’artiste de Danny – ca­

\n

pricieuse et changeante – le poussait régulière­

\n

ment à fuguer afin de se livrer à ses véritables

\n

passions  : le skateboard et le street-art. Bien

\n

que figurant parmi les meilleurs espoirs de son

\n

école d’arts martiaux, son insouciance et son

\n

manque de sérieux lui valurent finalement d’en

\n

être exclu temporairement. À cette époque, Jude

\n

s’interrogeait sur l’opportunité d’initier Danny à

\n

la voie des fat si en raison de ses dons naturels,

\n

mais finit par renoncer à cause de son compor­

\n

tement erratique.

\n

Jeune adulte, Danny devint un artiste locale­

\n

ment reconnu sous le pseudonyme de « Mister

\n

D ». Il entama une liaison avec l’une de ses mé­

\n

cènes : la romancière à succès Wendy Zhang, de

\n

dix ans son aînée. Alors que celle-ci effectuait di­

\n

verses recherches sur des événements étranges

\n

pour l’écriture de son prochain ouvrage, elle se

\n

trouva attaquée par une créature et sombra dans

\n

un profond coma suite à ses blessures. Frappé

\n

par ce drame, Danny reprit les recherches de

\n

son amante afin de découvrir ce qui lui était ar­

\n

rivé, ce qui le mit à son tour en danger et poussa

\n

Jude à l’initier aux secrets de la magie chinoise.

\n

De ce mentor, Danny apprit principalement des

\n

techniques d’alchimie interne – dont les arts

\n

martiaux pratiqués durant l’enfance lui avaient

\n

ouvert la voie.

\n

Après cette première enquête menée de

\n

concert et au terme d’un combat épique ayant

\n

mis fin aux méfaits de la créature responsable

\n

du coma de Wendy, Jude se trouva grièvement

\n

blessé et son hei s’affaiblit au point d’affecter

\n

sa pratique de la magie. Les deux fat si déci­

\n

dèrent cependant de continuer à faire équipe :

\n

Jude profitant de son expérience pour conseiller

\n

Danny qui utilisait sur le terrain la puissance

\n

magique dont son maître ne disposait plus. Tout

\n

au long de cet apprentissage, Danny croisa de

\n

nombreux autres fat si avec qui il sympathisa

\n

et auprès desquels il apprit notamment l’exor­

\n

cisme, auquel son Gardien céleste le prédispose

\n

naturellement, ainsi que la Maîtrise de la Voie.

\n

Au terme de cette période, Danny avait bien

\n

changé. Jude décida donc de lui avouer qu’il

\n

n’avait pas formé un partenaire mais bien un

\n

remplaçant. Le fat si amoindri prit donc sa re­

\n

traite et céda à son successeur son propre san­

\n

hei : un bouclier en bois de pêcher orné d’idéo­

\n

grammes anciens. Fidèle à sa nature adaptable,

\n

Danny se permit de modifier l’objet mystique en

\n

y ajoutant des roues pour en faire un skateboard, tout en conservant la lanière qui permet

\n

de le porter au bras.

\n

Danny ne dispose d’aucun revenu fixe et

\n

squatte la plupart du temps chez ses mécènes

\n

ou au domicile d’autres artistes. Il se comporte

\n

en joli cœur qui croque la vie à pleine dent,

\n

conscient que tout peut s’arrêter du jour au

\n

lendemain. Certains disent de lui que c’est un

\n

mélancolique et qu’il adopte cette attitude dé­

\n

sinvolte pour oublier la tragédie qui a frappé

\n

l’amour de sa vie – Wendy se trouvant encore à

\n

ce jour dans le coma.

\n

Il aide également les plus démunis et offre

\n

ses services de fat si en oubliant parfois de ré­

\n

clamer un quelconque dédommagement. Il ar­

\n

rive à Danny de prendre ses repas au restaurant

\n

Chez Lau avec d’autres fat si de sa génération ou

\n

à peine plus expérimentés. Cela lui donne l’oc­

\n

casion de coopérer avec certains d’entre eux sur

\n

des affaires ponctuelles, sans qu’il n’ait jusqu’ici

\n

décidé de rejoindre officiellement leur groupe.

\n

les chroniques

\n

de l’étrange

", + "aspect": { + "fire": { + "chinese": "㊋", + "label": "CDE.Fire", + "value": 4 + }, + "earth": { + "chinese": "㊏", + "label": "CDE.Earth", + "value": 1 + }, + "metal": { + "chinese": "㊎", + "label": "CDE.Metal", + "value": 3 + }, + "water": { + "chinese": "㊌", + "label": "CDE.Water", + "value": 1 + }, + "wood": { + "chinese": "㊍", + "label": "CDE.Wood", + "value": 2 + } + }, + "skills": { + "art": { + "label": "CDE.Art", + "specialities": "Street Art", + "value": 3 + }, + "investigation": { + "label": "CDE.Investigation", + "specialities": "", + "value": 2 + }, + "erudition": { + "label": "CDE.Erudition", + "specialities": "", + "value": 1 + }, + "knavery": { + "label": "CDE.Knavery", + "specialities": "Discrétion", + "value": 2 + }, + "wordliness": { + "label": "CDE.Wordliness", + "specialities": "", + "value": 1 + }, + "prowess": { + "label": "CDE.Prowess", + "specialities": "", + "value": 3 + }, + "sciences": { + "label": "CDE.Sciences", + "specialities": "", + "value": 0 + }, + "technologies": { + "label": "CDE.Technologies", + "specialities": "", + "value": 2 + }, + "kungfu": { + "label": "CDE.KungFu", + "specialities": "Mains nues", + "value": 3 + }, + "rangedcombat": { + "label": "CDE.RangedCombat", + "specialities": "", + "value": 0 + } + }, + "resources": { + "supply": { + "label": "CDE.Supply", + "specialities": "Mécènes", + "value": 1, + "debt": false + }, + "inquiry": { + "label": "CDE.Inquiry", + "specialities": "La Rue, Artistes", + "value": 2, + "debt": false + }, + "influence": { + "label": "CDE.Influence", + "specialities": "Artistes", + "value": 1, + "debt": false + } + }, + "component": { + "one": { + "value": "Poignée de grains de riz" + }, + "two": { + "value": "Fiole de sel" + }, + "three": { + "value": "Fiole de sang" + }, + "four": { + "value": "Carapace de tortue" + }, + "five": { + "value": "Queue de rat" + }, + "six": { + "value": "Fiole d'alcool de riz" + }, + "seven": { + "value": "Talisman" + }, + "eight": { + "value": "Talisman" + }, + "nine": { + "value": "Bâton d'encens" + }, + "zero": { + "value": "Bâton d'encens" + } + }, + "magics": { + "internalcinnabar": { + "visible": true, + "value": 3, + "speciality": { + "essence": { + "check": true + }, + "mind": { + "check": false + }, + "purification": { + "check": true + }, + "manipulation": { + "check": true + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "alchemy": { + "visible": false, + "value": 0, + "speciality": { + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "masteryoftheway": { + "visible": true, + "value": 2, + "speciality": { + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": true + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "exorcism": { + "visible": true, + "value": 2, + "speciality": { + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": true + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "geomancy": { + "visible": false, + "value": 0, + "speciality": { + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + } + }, + "threetreasures": { + "heiyang": { + "value": 3, + "max": 3 + }, + "heiyin": { + "value": 6, + "max": 6 + }, + "dicelevel": { + "level0d": { + "san": { + "value": 5, + "max": 5, + "min": 0 + }, + "zing": { + "value": 6, + "max": 6, + "min": 0 + } + }, + "level1d": { + "san": { + "value": 4, + "max": 4, + "min": 0 + }, + "zing": { + "value": 3, + "max": 3, + "min": 0 + } + }, + "level2d": { + "san": { + "value": 1, + "max": 1, + "min": 0 + }, + "zing": { + "value": 3, + "max": 3, + "min": 0 + } + } + } + }, + "experience": { + "value": 6, + "max": 6, + "min": 0 + }, + "prefs": { + "typeofthrow": { + "check": true, + "choice": "0" + } + }, + "prompt": { + "typeofthrow": { + "check": true, + "choice": "0" + }, + "configure": { + "numberofdice": 0, + "aspect": 0, + "bonus": 0, + "bonusauspiciousdice": 0, + "typeofthrow": 0, + "aspectskill": 0, + "bonusmalusskill": 0, + "aspectspeciality": 0, + "rolldifficulty": 0, + "bonusmalusspeciality": 0 + } + } + }, + "items": [ + { + "name": "Le Bouclier de Naazaa (bouclier / skate-board)", + "type": "sanhei", + "img": "", + "system": { + "reference": "Sanhei de Danny Hou", + "description": "

Le Bouclier de Naazaa (bouclier / skate-board) :

\n

• Quand il porte son sanhei, Danny bénéficie d'une protection physique de 3.

\n

• Réserve de 4 points de Hei Yin ; chaque fois que Danny récupère 1 point de Hei Yin, le sanhei en récupère également 1 de son côté.

\n

• Si 1 Succès sur un jet d'Exorcisme (Protection), + 1 Succès automatique au résultat.

", + "heiType": "yin", + "properties": { + "prop1": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop2": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop3": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "DgBJwRCnThNwGx9G", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "loxrnomOLtPiHbne", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "La Paume des Huit Trigrammes", + "type": "kungfu", + "img": "", + "system": { + "reference": "", + "description": "

La Paume des Huit Trigrammes

\n

Yin / Métal / Kung-fu (Mains Nues)

\n

Action de déplacement = 1 cran d'initiative (au lieu de 2)

", + "orientation": "yin", + "aspect": "metal", + "skill": "kungfu", + "speciality": "Mains nues", + "style": "", + "techniques": { + "technique1": { + "check": false, + "name": "", + "activation": "", + "technique": "" + }, + "technique2": { + "check": false, + "name": "", + "activation": "", + "technique": "" + }, + "technique3": { + "check": false, + "name": "", + "activation": "", + "technique": "" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "lLDzJcaHXZs5S7LX", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "loxrnomOLtPiHbne", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Sac à dos avec des bombes de peinture et du matériel artistique", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Sac à dos avec des bombes de peinture et du matériel artistique

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "rnorD8QzwcgJYuhx", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "loxrnomOLtPiHbne", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Sweat à capuche sombre, masque et vêtements permettant de se déplacer rapidement et discrètement", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Sweat à capuche sombre, masque et vêtements permettant de se déplacer rapidement et discrètement

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "L0F0bTg8FvaJrvWe", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "loxrnomOLtPiHbne", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Téléphone bas de gamme de seconde main avec un accès au Taonet", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Téléphone bas de gamme de seconde main avec un accès au Taonet

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "cp9F4sbDYTwE2jWP", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "loxrnomOLtPiHbne", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Logement: habite chez ses mécènes et amis artistes", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Logement: habite chez ses mécènes et amis artistes

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "3WQtOweomuGQlggG", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "loxrnomOLtPiHbne", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + } + ], + "prototypeToken": { + "name": "Danny Hou", + "displayName": 0, + "actorLink": false, + "width": 1, + "height": 1, + "depth": 1, + "texture": { + "src": "", + "anchorX": 0.5, + "anchorY": 0.5, + "fit": "contain", + "scaleX": 1, + "scaleY": 1, + "tint": "#ffffff", + "alphaThreshold": 0.75 + }, + "lockRotation": false, + "rotation": 0, + "alpha": 1, + "disposition": -1, + "displayBars": 0, + "bar1": { + "attribute": "threetreasures.heiyang" + }, + "bar2": { + "attribute": "threetreasures.heiyin" + }, + "light": { + "negative": false, + "priority": 0, + "alpha": 0.5, + "angle": 360, + "bright": 0, + "color": null, + "coloration": 1, + "dim": 0, + "attenuation": 0.5, + "luminosity": 0.5, + "saturation": 0, + "contrast": 0, + "shadows": 0, + "animation": { + "type": null, + "speed": 5, + "intensity": 5, + "reverse": false + }, + "darkness": { + "min": 0, + "max": 1 + } + }, + "sight": { + "enabled": false, + "range": 0, + "angle": 360, + "visionMode": "basic", + "color": null, + "attenuation": 0.1, + "brightness": 0, + "saturation": 0, + "contrast": 0 + }, + "detectionModes": {}, + "occludable": { + "radius": 0 + }, + "ring": { + "enabled": false, + "colors": { + "ring": null, + "background": null + }, + "effects": 1, + "subject": { + "scale": 1, + "texture": null + } + }, + "turnMarker": { + "mode": 1, + "animation": null, + "src": null, + "disposition": false + }, + "movementAction": null, + "flags": {}, + "randomImg": false, + "appendNumber": false, + "prependAdjective": false + }, + "effects": [], + "folder": null, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351493, + "lastModifiedBy": "loxrnomOLtPiHbne", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": { + "worldId": "cde", + "uuid": "Actor.9Ln7wnMwFK89FiTI", + "coreVersion": "14.363", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "14.0.3" + } + }, + "ownership": { + "default": 0 + } +} \ No newline at end of file diff --git a/sample_data/fvtt-Actor-emerson-wu-adc8c6091e217308.json b/sample_data/fvtt-Actor-emerson-wu-adc8c6091e217308.json new file mode 100644 index 0000000..4167283 --- /dev/null +++ b/sample_data/fvtt-Actor-emerson-wu-adc8c6091e217308.json @@ -0,0 +1,1159 @@ +{ + "name": "Emerson «Wu» Jiu", + "type": "character", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/fat_si/monk.png", + "system": { + "concept": "Bonze branché", + "guardian": 5, + "initiative": 1, + "anti_initiative": 24, + "description": "

Emerson appartient à la jeunesse dorée de

\n

Hong Kong. Sa famille dispose d’un très impor­

\n

tant empire financier qui contrôle plusieurs so­

\n

ciétés influentes en Chine continentale (où elle

\n

utilise la transcription de son nom en mandarin :

\n

Yao) et à Hong Kong. De plus, elle comporte des

\n

personnalités du show-business ainsi que des

\n

politiciens. Emerson a beau se tenir très éloigné

\n

de la politique et de la finance, s’intéressant

\n

principalement à la science et à la théologie, il

\n

n’a jamais manqué de rien. Actuellement, il vit

\n

de ses rentes et de l’aide financière ponctuelle

\n

que sa famille peut lui apporter en cas de besoin.

\n

Très tôt dans sa jeunesse, Emerson a démon­

\n

tré un grand potentiel intellectuel. Excellent

\n

élève, il se passionnait alors pour des domaines

\n

aussi divers que la philosophie, les sciences, les

\n

technologies mais aussi l’histoire et la mytho­

\n

logie. Poussé par sa famille, il brûla les étapes

\n

pendant ses études jusqu’à sombrer à l’âge de

\n

vingt et un ans, victime de surmenage et d’une

\n

lourde dépression. Après avoir fait appel à de

\n

nombreux spécialistes et essayé de nombreuses

\n

approches pour lui venir en aide, ses parents se

\n

tournèrent vers un monastère où Emerson effec­

\n

tua un très long séjour.

\n

Lorsqu’il quitta le temple cinq ans plus tard,

\n

Emerson se rebaptisa « Wu  » et devint moine

\n

bouddhiste – une vocation dont sa famille ne lui

\n

tient pas rigueur, car elle dispose de suffisam­

\n

ment d’héritiers. Bien qu’Emerson ne vive pas à

\n

la façon d’un ascète (ses parts de l’empire Yao

\n

le tenant à l’abri du besoin), il consacre depuis

\n

sa conversion sa vie à aider autrui, en associant

\n

ses connaissances académiques, scientifiques

\n

et technologiques aux enseignements religieux

\n

reçus pendant sa convalescence.

\n

Emerwon « Wu » Jiu se fit rapidement remar­

\n

quer par d’autres occultistes renommés, étant

\n

donné ses méthodes peu orthodoxes. Il découvrit

\n

le monde des fat si en fouillant sans y être invi­

\n

té le Taonet, avant d’en devenir par la suite un

\n

fervent protecteur. Aujourd’hui, il est reconnu

\n

comme l’un des spécialistes à qui l’ont fait appel

\n

lorsqu’on est confronté à un mystère qui a trait

\n

à la fois au surnaturel et à la technologie. Depuis

\n

qu’il a reçu des mains d’un vénérable moine son

\n

sanhei (un précieux sekzoeng), il participe aux

\n

côtés d’exorcistes de Hong Kong à des combats

\n

contre des créatures occultes à l’aide de chants

\n

religieux pré-enregistrés dans son téléphone

\n

portable et diffusés par des enceintes sans fil.

\n

Il utilise son ordinateur dernier cri, modifié à

\n

l’aide de talismans et de quelques programmes

\n

spéciaux, pour traquer des êtres démoniaques

\n

qui se dissimulent sous forme immatérielle dans

\n

les réseaux informatiques.

\n

Bien que Wu soit un véritable bonze, il est

\n

aussi un fat si moderne ultra-connecté. Il n’a

\n

cependant jamais montré de prédisposition pour

\n

le combat et préfère affronter les jiugwaai à dis­

\n

tance et à l’aide de la technologie ou de la ma­

\n

gie. En dehors de son équipement à la pointe et

\n

de nombreux livres, son appartement – bien que

\n

spacieux – est meublé et équipé de manière très

\n

sobre. Organisé selon les principes du fungseoi,

\n

on y trouve un large espace décoré de manière

\n

traditionnelle et propice à la méditation.

\n

Il arrive à Wu de prendre ses repas (exclu­

\n

sivement végétariens) au restaurant Chez Lau,

\n

fréquenté par de nombreux fat si. Il visite éga­

\n

lement de nombreux forums sur le Taonet et

\n

il est même le modérateur de certains d’entre

\n

ceux qui traitent du bouddhisme.

\n

les chroniques

\n

de l’étrange

", + "aspect": { + "fire": { + "chinese": "㊋", + "label": "CDE.Fire", + "value": 3 + }, + "earth": { + "chinese": "㊏", + "label": "CDE.Earth", + "value": 2 + }, + "metal": { + "chinese": "㊎", + "label": "CDE.Metal", + "value": 1 + }, + "water": { + "chinese": "㊌", + "label": "CDE.Water", + "value": 2 + }, + "wood": { + "chinese": "㊍", + "label": "CDE.Wood", + "value": 3 + } + }, + "skills": { + "art": { + "label": "CDE.Art", + "specialities": "", + "value": 0 + }, + "investigation": { + "label": "CDE.Investigation", + "specialities": "", + "value": 1 + }, + "erudition": { + "label": "CDE.Erudition", + "specialities": "Théologie", + "value": 2 + }, + "knavery": { + "label": "CDE.Knavery", + "specialities": "", + "value": 1 + }, + "wordliness": { + "label": "CDE.Wordliness", + "specialities": "", + "value": 1 + }, + "prowess": { + "label": "CDE.Prowess", + "specialities": "", + "value": 0 + }, + "sciences": { + "label": "CDE.Sciences", + "specialities": "", + "value": 2 + }, + "technologies": { + "label": "CDE.Technologies", + "specialities": "Informatique", + "value": 3 + }, + "kungfu": { + "label": "CDE.KungFu", + "specialities": "", + "value": 1 + }, + "rangedcombat": { + "label": "CDE.RangedCombat", + "specialities": "", + "value": 2 + } + }, + "resources": { + "supply": { + "label": "CDE.Supply", + "specialities": "Fortune", + "value": 3, + "debt": false + }, + "inquiry": { + "label": "CDE.Inquiry", + "specialities": "Bouddhistes, Taonet", + "value": 2, + "debt": false + }, + "influence": { + "label": "CDE.Influence", + "specialities": "Bouddhistes", + "value": 1, + "debt": false + } + }, + "component": { + "one": { + "value": "Feuille de saule" + }, + "two": { + "value": "Fiole de sel" + }, + "three": { + "value": "Poudre de jade" + }, + "four": { + "value": "Œuf de poule" + }, + "five": { + "value": "Pétard traditionnel" + }, + "six": { + "value": "Baguettes en bambou" + }, + "seven": { + "value": "Morceau de bougie" + }, + "eight": { + "value": "Bâton d'encens" + }, + "nine": { + "value": "Bâton d'encens" + }, + "zero": { + "value": "Pièce de monnaie" + } + }, + "magics": { + "internalcinnabar": { + "visible": true, + "value": 2, + "speciality": { + "essence": { + "check": false + }, + "mind": { + "check": true + }, + "purification": { + "check": true + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "alchemy": { + "visible": false, + "value": 0, + "speciality": { + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "masteryoftheway": { + "visible": false, + "value": 0, + "speciality": { + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "exorcism": { + "visible": true, + "value": 2, + "speciality": { + "invocation": { + "check": false + }, + "tracking": { + "check": true + }, + "protection": { + "check": true + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "geomancy": { + "visible": true, + "value": 2, + "speciality": { + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": true + }, + "fungseoi": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + } + } + } + }, + "threetreasures": { + "heiyang": { + "value": 3, + "max": 3 + }, + "heiyin": { + "value": 5, + "max": 5 + }, + "dicelevel": { + "level0d": { + "san": { + "value": 6, + "max": 6, + "min": 0 + }, + "zing": { + "value": 6, + "max": 6, + "min": 0 + } + }, + "level1d": { + "san": { + "value": 3, + "max": 3, + "min": 0 + }, + "zing": { + "value": 3, + "max": 3, + "min": 0 + } + }, + "level2d": { + "san": { + "value": 3, + "max": 3, + "min": 0 + }, + "zing": { + "value": 3, + "max": 3, + "min": 0 + } + } + } + }, + "experience": { + "value": 6, + "max": 6, + "min": 0 + }, + "prefs": { + "typeofthrow": { + "check": true, + "choice": "0" + } + }, + "prompt": { + "typeofthrow": { + "check": true, + "choice": "0" + }, + "configure": { + "numberofdice": 0, + "aspect": 0, + "bonus": 0, + "bonusauspiciousdice": 0, + "typeofthrow": 0, + "aspectskill": 0, + "bonusmalusskill": 0, + "aspectspeciality": 0, + "rolldifficulty": 0, + "bonusmalusspeciality": 0 + } + } + }, + "items": [ + { + "name": "Montagne Immobile (sekzoeng, long bâton à anneaux de prière)", + "type": "sanhei", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/sanhei/baton_sanhei.png", + "system": { + "reference": "Sanhei du pré-tiré Emerson «Wu» Jiu", + "description": "

Montagne Immobile (sekzoeng, long bâton à anneaux de prière) :

\n

• Affecte les créatures surnaturelles même intangibles.

\n

• Ajoute 1 niveau de Puissance gratuit et 1 dé supplémentaire à lancer à tous les jets de Géomancie (Prière céleste).

", + "heiType": "yin", + "properties": { + "prop1": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop2": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop3": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "cdc0e4ce3886062f", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Ordinateur dernier cri bardé de programmes talismaniques connecté au Taonet", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_technologie/pc.png", + "system": { + "reference": "", + "description": "

Ordinateur dernier cri, bardé de programmes qui agissent comme des talismans de protection et connecté au Taonet

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "ccb84243400abba8", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Smartphone dernier cri avec cantiques bouddhiques et quatre haut-parleurs portables", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_technologie/smartphone.png", + "system": { + "reference": "", + "description": "

Smartphone dernier cri, disposant de cantiques et chants religieux pré-enregistrés, et quatre haut-parleurs portables

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "2077bbfdb6a86ccc", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Voiture citadine et pratique", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_transports_hong_kong/auto.png", + "system": { + "reference": "", + "description": "

Voiture citadine et pratique

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "65cc6b041375fe60", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Appartement spacieux proche d'un monastère", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_habitats/house.png", + "system": { + "reference": "", + "description": "

Appartement spacieux proche d'un monastère

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "654767071245553f", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Chapelet bouddhique", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/mala.png", + "system": { + "reference": "", + "description": "

Chapelet bouddhique

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "8ae9b762817c086f", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Cinabre Interne (Métal) : Esprit", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/METAL.gif", + "system": { + "reference": "LdB p. 310", + "description": "

Cinabre Interne (Métal) : Esprit

Sort de Esprit pour le discipline de internalcinnabar.

", + "specialityname": "Esprit", + "associatedelement": "metal", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "5 minutes", + "realizationtimeaccelerated": "3 crans d’initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets


Certains effets des attributs divins peuvent également être associés à une « aire » d’effet ou avoir une « distance » pour la portée.


", + "examples": "

Exemples

Voici une liste non exhaustive d’invocations utiles, avec leur coût en Puissance :


Chaque exemple d’Effet ci-dessus est indépendant et nécessite son propre sort. Cependant, les effets d’un sort peuvent être renforcés : le coût pour en augmenter les effets est précisé entre parenthèses.


", + "notes": "

Vos notes…

", + "discipline": "internalcinnabar", + "hei": "" + }, + "_id": "4e088d6573f23cfa", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Cinabre Interne (Métal) : Purification", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/METAL.gif", + "system": { + "reference": "LdB p. 310", + "description": "

Cinabre Interne (Métal) : Purification

Sort de Purification pour le discipline de internalcinnabar.

", + "specialityname": "Purification", + "associatedelement": "metal", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "5 minutes", + "realizationtimeaccelerated": "3 crans d’initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets


Certains effets des attributs divins peuvent également être associés à une « aire » d’effet ou avoir une « distance » pour la portée.


", + "examples": "

Exemples

Voici une liste non exhaustive d’invocations utiles, avec leur coût en Puissance :


Chaque exemple d’Effet ci-dessus est indépendant et nécessite son propre sort. Cependant, les effets d’un sort peuvent être renforcés : le coût pour en augmenter les effets est précisé entre parenthèses.


", + "notes": "

Vos notes…

", + "discipline": "internalcinnabar", + "hei": "" + }, + "_id": "da18bcc97a7694f1", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Exorcisme (Feu) : Traque", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/FEU.gif", + "system": { + "reference": "LdB p. 317", + "description": "

Exorcisme (Feu) : Traque

Sort de Traque pour le discipline de exorcism.

", + "specialityname": "Traque", + "associatedelement": "feu", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "5 minutes", + "realizationtimeaccelerated": "3 crans d’initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets


Certains effets des attributs divins peuvent également être associés à une « aire » d’effet ou avoir une « distance » pour la portée.


", + "examples": "

Exemples

Voici une liste non exhaustive d’invocations utiles, avec leur coût en Puissance :


Chaque exemple d’Effet ci-dessus est indépendant et nécessite son propre sort. Cependant, les effets d’un sort peuvent être renforcés : le coût pour en augmenter les effets est précisé entre parenthèses.


", + "notes": "

Vos notes…

", + "discipline": "exorcism", + "hei": "" + }, + "_id": "7b88c9612aeda2a0", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Exorcisme (Feu) : Protection", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/FEU.gif", + "system": { + "reference": "LdB p. 318", + "description": "

Exorcisme (Feu) : Protection

Sort de Protection pour le discipline de exorcism.

", + "specialityname": "Protection", + "associatedelement": "feu", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "5 minutes", + "realizationtimeaccelerated": "3 crans d’initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets


Certains effets des attributs divins peuvent également être associés à une « aire » d’effet ou avoir une « distance » pour la portée.


", + "examples": "

Exemples

Voici une liste non exhaustive d’invocations utiles, avec leur coût en Puissance :


Chaque exemple d’Effet ci-dessus est indépendant et nécessite son propre sort. Cependant, les effets d’un sort peuvent être renforcés : le coût pour en augmenter les effets est précisé entre parenthèses.


", + "notes": "

Vos notes…

", + "discipline": "exorcism", + "hei": "" + }, + "_id": "6326ae13063c683c", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Géomancie (Bois) : Prière céleste", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/BOIS.gif", + "system": { + "reference": "LdB p. 327", + "description": "

Géomancie (Bois) : Prière céleste

Sort de Prière céleste pour le discipline de geomancy.

", + "specialityname": "Prière céleste", + "associatedelement": "feu", + "heiType": "yang", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "30 minutes", + "realizationtimeaccelerated": "non applicable", + "flashback": "oui", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de prières utiles, avec leur coût en Puissance :


Chaque exemple d’Effet ci-dessus est indépendant et nécessite son propre sort. Cependant, les Effets d’un sort peuvent être renforcés : le coût pour en augmenter les Effets est précisé entre parenthèses.


", + "notes": "

Vos notes…

", + "discipline": "geomancy", + "hei": "" + }, + "_id": "72b29fc6b1460a6e", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + } + ], + "prototypeToken": { + "name": "Emerson «Wu» Jiu", + "displayName": 0, + "actorLink": false, + "width": 1, + "height": 1, + "depth": 1, + "texture": { + "src": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/fat_si/monk.png", + "anchorX": 0.5, + "anchorY": 0.5, + "fit": "contain", + "scaleX": 1, + "scaleY": 1, + "tint": "#ffffff", + "alphaThreshold": 0.75 + }, + "lockRotation": false, + "rotation": 0, + "alpha": 1, + "disposition": -1, + "displayBars": 0, + "bar1": { + "attribute": "threetreasures.heiyang" + }, + "bar2": { + "attribute": "threetreasures.heiyin" + }, + "light": { + "negative": false, + "priority": 0, + "alpha": 0.5, + "angle": 360, + "bright": 0, + "color": null, + "coloration": 1, + "dim": 0, + "attenuation": 0.5, + "luminosity": 0.5, + "saturation": 0, + "contrast": 0, + "shadows": 0, + "animation": { + "type": null, + "speed": 5, + "intensity": 5, + "reverse": false + }, + "darkness": { + "min": 0, + "max": 1 + } + }, + "sight": { + "enabled": false, + "range": 0, + "angle": 360, + "visionMode": "basic", + "color": null, + "attenuation": 0.1, + "brightness": 0, + "saturation": 0, + "contrast": 0 + }, + "detectionModes": {}, + "occludable": { + "radius": 0 + }, + "ring": { + "enabled": false, + "colors": { + "ring": null, + "background": null + }, + "effects": 1, + "subject": { + "scale": 1, + "texture": null + } + }, + "turnMarker": { + "mode": 1, + "animation": null, + "src": null, + "disposition": false + }, + "movementAction": null, + "flags": {}, + "randomImg": false, + "appendNumber": false, + "prependAdjective": false + }, + "effects": [], + "folder": null, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351493, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": { + "worldId": "cde", + "uuid": "Actor.adc8c6091e217308", + "coreVersion": "14.363", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "14.0.3" + } + }, + "ownership": { + "default": 0 + } +} \ No newline at end of file diff --git a/sample_data/fvtt-Actor-freddie-tan-74f0586f55e860cc.json b/sample_data/fvtt-Actor-freddie-tan-74f0586f55e860cc.json new file mode 100644 index 0000000..b00deee --- /dev/null +++ b/sample_data/fvtt-Actor-freddie-tan-74f0586f55e860cc.json @@ -0,0 +1,1160 @@ +{ + "name": "Freddie Tan", + "type": "character", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/fat_si/freddie.png", + "system": { + "concept": "Spécialiste du Hei (Comptable)", + "guardian": 5, + "initiative": 1, + "anti_initiative": 24, + "description": "

Issu d’une famille modeste, rien ne prédis­

\n

posait Freddie à devenir fat si. Enfant à la santé

\n

fragile et élève discipliné, il avait tout du gamin

\n

appelé à se faire régulièrement malmener par

\n

les brutes de son école. Raison pour laquelle ses

\n

parents le poussèrent à suivre des cours d’arts

\n

martiaux dans une institution traditionnelle.

\n

En grandissant, Freddie s’épanouit grâce à

\n

cet enseignement – la pratique intense du kungfu le transformant physiquement et spirituelle­

\n

ment. Pour autant, cette passion ne le détourna

\n

pas de ses études de comptabilité et il sut conju­

\n

guer ces deux voies en allant même jusqu’à s’ap­

\n

puyer sur l’une pour mieux briller dans l’autre,

\n

démontrant ainsi un esprit adaptable et inventif.

\n

Autant dire que les rares camarades d’école qui

\n

s’en prirent à lui le regrettèrent bien vite…

\n

S’il dispose désormais d’un physique impres­

\n

sionnant, Freddie est loin d’être la brute que

\n

son apparence pourrait laisser imaginer. S’il ne

\n

rechigne pas à se battre quand il le faut, il consi­

\n

dère avant tout l’épreuve et le défi représentés

\n

par l’affrontement comme un moyen de se dé­

\n

passer lui-même. Son Kung-fu de l’Invulnérabi­

\n

lité lui octroie une capacité certaine à encaisser

\n

aussi bien qu’à distribuer les coups mais, avant

\n

de déployer ses techniques, il cherche tou­

\n

jours à parlementer pour éviter toute violence.

\n

Cependant, gare à celui qui prendrait ce désir de

\n

paix pour de la faiblesse…

\n

Freddie découvrit la facette occulte de Hong

\n

Kong suite à sa propre enquête sur la mort sus­

\n

pecte de son sifu – David Cheng. Ce maître en

\n

kung-fu avait en effet péri d’une façon étrange,

\n

mais la police conclut à un banal accident – une

\n

explication dont ne pouvait se contenter son

\n

disciple. Une fat si nommée Josie Song sut dé­

\n

celer son potentiel alors que ses investigations

\n

le rapprochaient dangereusement de créatures

\n

malintentionnées et, afin qu’il puisse se proté­

\n

ger lui-même, elle accepta de lui enseigner la

\n

magie. Après avoir retrouvé et éliminé le démon

\n

responsable de la mort de David Cheng, Freddie

\n

décida de continuer à fréquenter ce monde se­

\n

cret qui attisait sa curiosité.

\n

Le chapelet qu’il porte au bras constitue son

\n

sanhei : un talisman de protection de la couleur

\n

du sang, dans lequel se trouve sertie une pierre

\n

dont la phosphorescence ne s’éteint jamais.

\n

Josie le lui a légué au moment de prendre sa

\n

retraite, l’adoubant comme son successeur dési­

\n

gné au sein de la communauté des fat si.

\n

Maîtrisant la magie du Cinabre interne,

\n

Freddie utilise son hei avant tout pour augmen­

\n

ter ses capacités de persuasion et de charme

\n

lorsqu’il pratique son métier de conseiller fi­

\n

nancier indépendant. Cette utilisation un peu

\n

trop terre à terre lui vaut d’ailleurs certains

\n

reproches de la part de son ancienne mentore...

\n

mais c’est ainsi qu’il s’est constitué un porte­

\n

feuille de clients le mettant à l’abri du besoin.

\n

Bien sûr, ses talents de combattant bénéficient

\n

grandement de sa connaissance pointue de

\n

l’énergie interne – notamment quand il pratique

\n

le Kung-fu de l’Invulnérabilité en déployant ses

\n

techniques aussi bien martiales que mystiques.

\n

En tant que fat si, Freddie apprécie d’aider

\n

ses compagnons d’armes. Grâce à son métier,

\n

il dispose de revenus confortables ainsi que de

\n

contacts dans diverses banques et entreprises de

\n

Hong Kong. Lorsqu’il accomplit sa tâche d’exor­

\n

ciste, l’argent n’est en conséquence jamais sa

\n

motivation mais bien un moyen comme un autre

\n

de parvenir à ses fins. De plus, il peut accepter

\n

des missions qui correspondent à ses valeurs et

\n

il s’implique d’ailleurs toujours personnellement

\n

dans ses enquêtes – trop même, selon Josie.

\n

C’est cette vision commune du surnaturel et

\n

l’amour qu’il porte à Hong Kong et à ses habi­

\n

tants qui l’ont amené à rejoindre un groupe de

\n

fat si rencontrés au fil de précédentes enquêtes.

\n

Cette fine équipe se retrouve régulièrement au

\n

restaurant Chez Lau tenu par Josie et l’un de ses

\n

vieux amis, Eddy Lau.

\n

les chroniques

\n

de l’étrange

", + "aspect": { + "fire": { + "chinese": "㊋", + "label": "CDE.Fire", + "value": 3 + }, + "earth": { + "chinese": "㊏", + "label": "CDE.Earth", + "value": 2 + }, + "metal": { + "chinese": "㊎", + "label": "CDE.Metal", + "value": 3 + }, + "water": { + "chinese": "㊌", + "label": "CDE.Water", + "value": 2 + }, + "wood": { + "chinese": "㊍", + "label": "CDE.Wood", + "value": 2 + } + }, + "skills": { + "art": { + "label": "CDE.Art", + "specialities": "", + "value": 0 + }, + "investigation": { + "label": "CDE.Investigation", + "specialities": "", + "value": 2 + }, + "erudition": { + "label": "CDE.Erudition", + "specialities": "Comptabilité", + "value": 2 + }, + "knavery": { + "label": "CDE.Knavery", + "specialities": "", + "value": 2 + }, + "wordliness": { + "label": "CDE.Wordliness", + "specialities": "", + "value": 3 + }, + "prowess": { + "label": "CDE.Prowess", + "specialities": "", + "value": 2 + }, + "sciences": { + "label": "CDE.Sciences", + "specialities": "", + "value": 2 + }, + "technologies": { + "label": "CDE.Technologies", + "specialities": "", + "value": 2 + }, + "kungfu": { + "label": "CDE.KungFu", + "specialities": "Mains nues", + "value": 3 + }, + "rangedcombat": { + "label": "CDE.RangedCombat", + "specialities": "", + "value": 0 + } + }, + "resources": { + "supply": { + "label": "CDE.Supply", + "specialities": "Fortune", + "value": 2, + "debt": false + }, + "inquiry": { + "label": "CDE.Inquiry", + "specialities": "Finance, Industrie, Artistes martiaux", + "value": 2, + "debt": false + }, + "influence": { + "label": "CDE.Influence", + "specialities": "Artistes martiaux", + "value": 1, + "debt": false + } + }, + "component": { + "one": { + "value": "Éclat de jade" + }, + "two": { + "value": "Barre protéinée" + }, + "three": { + "value": "Pilule de cinabre" + }, + "four": { + "value": "Granules d'homéopathie" + }, + "five": { + "value": "Bougie" + }, + "six": { + "value": "Fiole de sel" + }, + "seven": { + "value": "Mélange d'herbes" + }, + "eight": { + "value": "Bâton d'encens" + }, + "nine": { + "value": "Bâton d'encens" + }, + "zero": { + "value": "Fiole d'alcool" + } + }, + "magics": { + "internalcinnabar": { + "visible": true, + "value": 3, + "speciality": { + "essence": { + "check": true + }, + "mind": { + "check": true + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": true + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "alchemy": { + "visible": false, + "value": 0, + "speciality": { + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "masteryoftheway": { + "visible": false, + "value": 0, + "speciality": { + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "exorcism": { + "visible": false, + "value": 0, + "speciality": { + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "geomancy": { + "visible": false, + "value": 0, + "speciality": { + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + } + } + } + }, + "threetreasures": { + "heiyang": { + "value": 5, + "max": 5 + }, + "heiyin": { + "value": 4, + "max": 4 + }, + "dicelevel": { + "level0d": { + "san": { + "value": 5, + "max": 5, + "min": 0 + }, + "zing": { + "value": 6, + "max": 6, + "min": 0 + } + }, + "level1d": { + "san": { + "value": 3, + "max": 3, + "min": 0 + }, + "zing": { + "value": 4, + "max": 4, + "min": 0 + } + }, + "level2d": { + "san": { + "value": 2, + "max": 2, + "min": 0 + }, + "zing": { + "value": 2, + "max": 2, + "min": 0 + } + } + } + }, + "experience": { + "value": 6, + "max": 6, + "min": 0 + }, + "prefs": { + "typeofthrow": { + "check": true, + "choice": "0" + } + }, + "prompt": { + "typeofthrow": { + "check": true, + "choice": "0" + }, + "configure": { + "numberofdice": 0, + "aspect": 0, + "bonus": 0, + "bonusauspiciousdice": 0, + "typeofthrow": 0, + "aspectskill": 0, + "bonusmalusskill": 0, + "aspectspeciality": 0, + "rolldifficulty": 0, + "bonusmalusspeciality": 0 + } + } + }, + "items": [ + { + "name": "Le Chapelet de l'Infini (chapelet bouddhiste)", + "type": "sanhei", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/sanhei/chapelet_infini.png", + "system": { + "reference": "Sanhei de Freddie Tan", + "description": "

Le Chapelet de l'Infini (chapelet bouddhiste) :

\n

• Chaque fois que Freddie récupère des points de Zing et/ou de San, il en récupère 1 de plus.

\n

• Contre la dépense de 1 point de Hei Yin supplémentaire, il obtient autant de dés-fastes que sa valeur de Feu (3) sur tout jet de Cinabre interne (Essence).

", + "heiType": "yin", + "properties": { + "prop1": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop2": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop3": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "Y8AZOkLs7Ke04hfu", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Kung-fu de l'Invulnérabilité", + "type": "kungfu", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/kung-fu/invulnerabilite.png", + "system": { + "reference": "Style de Freddie Tan", + "description": "

Kung-fu de l'Invulnérabilité

\n

Yang ou Yin / Terre / Kung-fu (Mains Nues)

\n

Protection de 2

\n

La chemise de fer

\n

La main de fer

\n

La volonté de fer

", + "orientation": "yang", + "aspect": "earth", + "skill": "kungfu", + "speciality": "Mains nues", + "style": "Yang ou Yin / Terre / Kung-fu (Mains Nues)", + "techniques": { + "technique1": { + "check": false, + "name": "La chemise de fer", + "activation": "dice", + "technique": "

La chemise de fer

Technique de protection du Kung-fu de l'Invulnérabilité.

" + }, + "technique2": { + "check": false, + "name": "La main de fer", + "activation": "action-attack-defense", + "technique": "

La main de fer

Technique offensive du Kung-fu de l'Invulnérabilité.

" + }, + "technique3": { + "check": false, + "name": "La volonté de fer", + "activation": "damage-inflicted", + "technique": "

La volonté de fer

Technique de volonté du Kung-fu de l'Invulnérabilité.

" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "G5mXYDoCyJ0dsQZv", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Lunettes de vue et costume sur mesure rehaussés d'or et de jade", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/lunettes.png", + "system": { + "reference": "", + "description": "

Lunettes de vue et costume sur mesure rehaussés d'or et de jade. Ajoute 1 dé-faste aux jets de Mondanités.

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "t9DHIbr8EW4gsLWm", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Smartphone dernière génération", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_technologie/smartphone.png", + "system": { + "reference": "", + "description": "

Smartphone dernière génération

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "valJXuTGGQN06znJ", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Petit flacon de parfum à la mode", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/parfum.png", + "system": { + "reference": "", + "description": "

Petit flacon de parfum à la mode

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "Vyb7Whzy1z5yzoh9", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Ordinateur portable avec logiciels de comptabilité et accès au Taonet", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_technologie/laptop.png", + "system": { + "reference": "", + "description": "

Ordinateur portable avec logiciels de comptabilité et accès au Taonet

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "W6uaY31VuCSetszi", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Voiture de type SUV", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_transports_hong_kong/auto.png", + "system": { + "reference": "", + "description": "

Voiture de type SUV

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "e7jD4SZw8dH8gyzx", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Appartement agréable dans un quartier commerçant", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_habitats/house.png", + "system": { + "reference": "", + "description": "

Appartement agréable dans un quartier commerçant

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "9wc3h3l8bKRogDlD", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Cinabre Interne (Métal) : Essence", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/METAL.gif", + "system": { + "reference": "", + "description": "

Cinabre Interne (Métal) : Essence

Le sort d'Essence du Cinabre Interne permet de manipuler l'énergie vitale.

", + "specialityname": "Essence", + "associatedelement": "metal", + "heiType": "yang", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "", + "realizationtimeaccelerated": "", + "flashback": "", + "components": "", + "effects": "", + "examples": "", + "notes": "

Vos notes…

", + "discipline": "internalcinnabar", + "hei": "" + }, + "_id": "lLWh4oHNXFbBXQSS", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Cinabre Interne (Métal) : Esprit", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/METAL.gif", + "system": { + "reference": "", + "description": "

Cinabre Interne (Métal) : Esprit

Le sort d'Esprit du Cinabre Interne permet d'affecter les pensées et la perception.

", + "specialityname": "Esprit", + "associatedelement": "metal", + "heiType": "yang", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "", + "realizationtimeaccelerated": "", + "flashback": "", + "components": "", + "effects": "", + "examples": "", + "notes": "

Vos notes…

", + "discipline": "internalcinnabar", + "hei": "" + }, + "_id": "bcQuW5SfzQcClpdu", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Cinabre Interne (Métal) : Aura", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/METAL.gif", + "system": { + "reference": "", + "description": "

Cinabre Interne (Métal) : Aura

Le sort d'Aura du Cinabre Interne permet de projeter son énergie.

", + "specialityname": "Aura", + "associatedelement": "metal", + "heiType": "yang", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "", + "realizationtimeaccelerated": "", + "flashback": "", + "components": "", + "effects": "", + "examples": "", + "notes": "

Vos notes…

", + "discipline": "internalcinnabar", + "hei": "" + }, + "_id": "A5nXrr2uSdja2GTM", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + } + ], + "prototypeToken": { + "name": "Freddie Tan", + "displayName": 0, + "actorLink": false, + "width": 1, + "height": 1, + "depth": 1, + "texture": { + "src": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/fat_si/freddie.png", + "anchorX": 0.5, + "anchorY": 0.5, + "fit": "contain", + "scaleX": 1, + "scaleY": 1, + "tint": "#ffffff", + "alphaThreshold": 0.75 + }, + "lockRotation": false, + "rotation": 0, + "alpha": 1, + "disposition": -1, + "displayBars": 0, + "bar1": { + "attribute": "threetreasures.heiyang" + }, + "bar2": { + "attribute": "threetreasures.heiyin" + }, + "light": { + "negative": false, + "priority": 0, + "alpha": 0.5, + "angle": 360, + "bright": 0, + "color": null, + "coloration": 1, + "dim": 0, + "attenuation": 0.5, + "luminosity": 0.5, + "saturation": 0, + "contrast": 0, + "shadows": 0, + "animation": { + "type": null, + "speed": 5, + "intensity": 5, + "reverse": false + }, + "darkness": { + "min": 0, + "max": 1 + } + }, + "sight": { + "enabled": false, + "range": 0, + "angle": 360, + "visionMode": "basic", + "color": null, + "attenuation": 0.1, + "brightness": 0, + "saturation": 0, + "contrast": 0 + }, + "detectionModes": {}, + "occludable": { + "radius": 0 + }, + "ring": { + "enabled": false, + "colors": { + "ring": null, + "background": null + }, + "effects": 1, + "subject": { + "scale": 1, + "texture": null + } + }, + "turnMarker": { + "mode": 1, + "animation": null, + "src": null, + "disposition": false + }, + "movementAction": null, + "flags": {}, + "randomImg": false, + "appendNumber": false, + "prependAdjective": false + }, + "effects": [], + "folder": null, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351493, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": { + "worldId": "cde", + "uuid": "Actor.74f0586f55e860cc", + "coreVersion": "14.363", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "14.0.3" + } + }, + "ownership": { + "default": 0 + } +} \ No newline at end of file diff --git a/sample_data/fvtt-Actor-lily-chiu-YRIuWZJowkm0gJuc.json b/sample_data/fvtt-Actor-lily-chiu-YRIuWZJowkm0gJuc.json new file mode 100644 index 0000000..af8d2e0 --- /dev/null +++ b/sample_data/fvtt-Actor-lily-chiu-YRIuWZJowkm0gJuc.json @@ -0,0 +1,1252 @@ +{ + "name": "Lily Chiu", + "type": "character", + "img": "", + "system": { + "concept": "Sorcière repentie", + "guardian": 4, + "initiative": 1, + "anti_initiative": 24, + "description": "

Née d’un père chirurgien et d’une mère avo­

\n

cate, Lily grandit dans le quartier huppé des

\n

Mid-Levels sur l’île de Hong Kong, sous la férule

\n

bienveillante des employés de sa famille. Toute

\n

sa vie, elle se passionna pour les mystères.

\n

Tandis qu’elle poursuivait avec brio des études

\n

de botanique, elle acquit par hasard un ancien

\n

et précieux tome traitant d’alchimie. Mais il ne

\n

s’agissait pas d’un livre pour les profanes – bien

\n

au contraire ! – et ce premier contact avec la

\n

magie véritable entraîna la jeune femme dans

\n

une découverte progressive du monde occulte.

\n

Afin d’assouvir sa soif de connaissances

\n

secrètes, Lily fréquenta des spécialistes du

\n

surnaturel liés au gotha hongkongais. Dans ce

\n

milieu, elle croisa de nombreux charlatans qui

\n

ne visaient qu’à soulager les nantis de quelques

\n

billets, mais elle se fit aussi remarquer par de

\n

véritables occultistes qui décelèrent en elle un

\n

potentiel intéressant. Malheureusement, elle

\n

choisit alors de s’associer avec Jason «  Black

\n

Jack » Wai. Ce sorcier redoutable était alors le

\n

prestataire privilégié d’une triade – celle des

\n

Trois Lotus – pour laquelle il usait de ses talents

\n

mystiques. C’est auprès de lui que Lily s’initia à

\n

la véritable magie, en tant qu’apprentie.

\n

Pendant des années, Lily vécut sous la coupe

\n

de son maître. Elle côtoyait la pègre mais aussi

\n

les milieux de la finance et de la politique. Un

\n

jour, Jason captura un fat si qui cherchait à l’ar­

\n

rêter : son adversaire de toujours, Henry Wong.

\n

À force de voir Jason maltraiter ses partenaires,

\n

ses prisonniers et ses serviteurs, Lily se trou­

\n

vait à ce moment-là en plein doute. Elle n’était

\n

pas certaine d’aimer la sorcière qu’elle devenait

\n

mais elle ne pensait pas non plus pouvoir faire

\n

marche arrière. Durant la captivité d’Henry

\n

Wong – et alors que Jason le torturait pour se

\n

venger –, Lily s’occupa du fat si et discuta lon­

\n

guement avec lui. Il parvint à la convaincre qu’il

\n

existait une autre façon de se servir de la magie.

\n

Lily finit par aider Henry à s’évader mais

\n

Jason les rattrapa tous les deux. Lors d’un com­

\n

bat mémorable, Henry et Jason s’affrontèrent.

\n

Indécise au début, Lily se décida à la fin du com­

\n

bat – alors que Jason avait le dessus – à aider

\n

Henry pour qu’ensemble, ils mettent un terme

\n

aux activités du sorcier. Après sa défaite, celui

\n

qui avait été son maître se vit privé d’une grande

\n

partie de ses pouvoirs et arrêté par l’OCTB pour

\n

ses méfaits commis avec les triades. Lily aida

\n

les policiers à accumuler des preuves mais n’osa

\n

cependant pas témoigner directement, de peur

\n

que la triade des Trois Lotus ne s’en prenne à

\n

elle ou à sa famille par la suite. Cependant, la

\n

société noire abandonna le sorcier maléfique à

\n

la seconde où elle comprit qu’il avait perdu l’es­

\n

sentiel de ses forces surnaturelles.

\n

Très diminué par sa captivité, les mauvais

\n

traitements reçus et le combat difficile mené,

\n

Henry décida de prendre sa retraite. Son der­

\n

nier acte en tant que fat si fut de léguer à Lily

\n

son sanhei, non sans lui arracher la promesse

\n

qu’elle ferait désormais tout son possible pour

\n

se racheter de ses années de mauvais comporte­

\n

ment. La jeune femme jura de devenir à son tour

\n

une fat si qui protège Hong Kong des créatures

\n

étranges mais aussi des sorciers maléfiques, tels

\n

que son ancien sifu.

\n

Aujourd’hui, Lily a encore un peu de mal

\n

à se faire accepter de la communauté des fat

\n

si – bien que la possession même d’un sanhei

\n

prouve qu’elle a été choisie par le Ciel. Elle se

\n

rend souvent au restaurant Chez Lau, largement

\n

fréquenté par d’autres exorcistes, dans l’espoir

\n

d’apporter son aide et de faire ainsi ses preuves.

\n

Outre ses connaissances occultes, elle dispose

\n

encore de nombreux contacts dans la haute so­

\n

ciété – dont certains lui doivent quelques ser­

\n

vices. Elle est également passée maîtresse dans

\n

l’art de déchiffrer les codes et de résoudre les

\n

énigmes.

\n

les chroniques

\n

de l’étrange

", + "aspect": { + "fire": { + "chinese": "㊋", + "label": "CDE.Fire", + "value": 3 + }, + "earth": { + "chinese": "㊏", + "label": "CDE.Earth", + "value": 4 + }, + "metal": { + "chinese": "㊎", + "label": "CDE.Metal", + "value": 2 + }, + "water": { + "chinese": "㊌", + "label": "CDE.Water", + "value": 1 + }, + "wood": { + "chinese": "㊍", + "label": "CDE.Wood", + "value": 2 + } + }, + "skills": { + "art": { + "label": "CDE.Art", + "specialities": "", + "value": 0 + }, + "investigation": { + "label": "CDE.Investigation", + "specialities": "Énigme", + "value": 1 + }, + "erudition": { + "label": "CDE.Erudition", + "specialities": "Linguistique", + "value": 3 + }, + "knavery": { + "label": "CDE.Knavery", + "specialities": "Baratin", + "value": 1 + }, + "wordliness": { + "label": "CDE.Wordliness", + "specialities": "Gotha", + "value": 2 + }, + "prowess": { + "label": "CDE.Prowess", + "specialities": "", + "value": 1 + }, + "sciences": { + "label": "CDE.Sciences", + "specialities": "Botanique", + "value": 1 + }, + "technologies": { + "label": "CDE.Technologies", + "specialities": "", + "value": 1 + }, + "kungfu": { + "label": "CDE.KungFu", + "specialities": "", + "value": 0 + }, + "rangedcombat": { + "label": "CDE.RangedCombat", + "specialities": "", + "value": 0 + } + }, + "resources": { + "supply": { + "label": "CDE.Supply", + "specialities": "Fortune", + "value": 3, + "debt": false + }, + "inquiry": { + "label": "CDE.Inquiry", + "specialities": "Gotha, Triades, Finance", + "value": 2, + "debt": false + }, + "influence": { + "label": "CDE.Influence", + "specialities": "Gotha, Politiciens", + "value": 2, + "debt": false + } + }, + "component": { + "one": { + "value": "Amanite" + }, + "two": { + "value": "Fiole de soufre" + }, + "three": { + "value": "Venin de serpent" + }, + "four": { + "value": "Œuf de poule" + }, + "five": { + "value": "Bâton d'encens" + }, + "six": { + "value": "Talisman" + }, + "seven": { + "value": "Poudre d'os" + }, + "eight": { + "value": "Bâton d'encens" + }, + "nine": { + "value": "Argent funéraire" + }, + "zero": { + "value": "Fiole vide" + } + }, + "magics": { + "internalcinnabar": { + "visible": false, + "value": 0, + "speciality": { + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "alchemy": { + "visible": true, + "value": 2, + "speciality": { + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": true + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "masteryoftheway": { + "visible": true, + "value": 2, + "speciality": { + "curse": { + "check": true + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": true + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": true + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "exorcism": { + "visible": true, + "value": 2, + "speciality": { + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": true + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "geomancy": { + "visible": false, + "value": 0, + "speciality": { + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + } + } + } + }, + "threetreasures": { + "heiyang": { + "value": 5, + "max": 5 + }, + "heiyin": { + "value": 5, + "max": 5 + }, + "dicelevel": { + "level0d": { + "san": { + "value": 5, + "max": 5, + "min": 0 + }, + "zing": { + "value": 5, + "max": 5, + "min": 0 + } + }, + "level1d": { + "san": { + "value": 2, + "max": 2, + "min": 0 + }, + "zing": { + "value": 3, + "max": 3, + "min": 0 + } + }, + "level2d": { + "san": { + "value": 3, + "max": 3, + "min": 0 + }, + "zing": { + "value": 2, + "max": 2, + "min": 0 + } + } + } + }, + "experience": { + "value": 6, + "max": 6, + "min": 0 + }, + "prefs": { + "typeofthrow": { + "check": true, + "choice": "0" + } + }, + "prompt": { + "typeofthrow": { + "check": true, + "choice": "0" + }, + "configure": { + "numberofdice": 0, + "aspect": 0, + "bonus": 0, + "bonusauspiciousdice": 0, + "typeofthrow": 0, + "aspectskill": 0, + "bonusmalusskill": 0, + "aspectspeciality": 0, + "rolldifficulty": 0, + "bonusmalusspeciality": 0 + } + } + }, + "items": [ + { + "name": "Cinq Tempêtes (sceau en jade)", + "type": "sanhei", + "img": "", + "system": { + "reference": "Sanhei de Lily Chiu", + "description": "

Cinq Tempêtes (sceau en jade) :

\n

• Gagne autant de dés-fastes que valeur de Feu (3) lorsque jet de Mondanités (Diplomatie) face à créature surnaturelle.

\n

• Gagne autant de dés-fastes que valeur de Terre (4) lorsque jet de Filouterie (Baratin) face à créature surnaturelle.

\n

• Réduit la difficulté de 1 sur tous ses jets de Maîtrise de la Voie (Malédiction).

", + "heiType": "yin", + "properties": { + "prop1": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop2": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop3": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "a1B2c3D4e5F6g7H8", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Téléphone portable dernier cri avec accès au Taonet", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Téléphone portable dernier cri avec accès au Taonet

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "i9J8k7L6m5N4b3V2", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Pilon, mortier et fioles diverses", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Pilon, mortier et fioles diverses

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "cX9y8Z7w6V5u4T3s", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Voiture élégante et citadine récente", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Voiture élégante et citadine récente

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "r2Q1p0O9i8U7y6T5", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Appartement spacieux dans les Mid-Levels", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Appartement spacieux dans les Mid-Levels

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "g4F3d2S1a0Z9x8W7", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Pistolet dissimulé et un chargeur rempli de balles en argent gravées d'idéogrammes rituels (dégâts 2)", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Pistolet dissimulé et un chargeur rempli de balles en argent gravées d'idéogrammes rituels (dégâts 2)

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "v6B5n4M3l2K1j0H9", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Figurines de malédiction", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Figurines de malédiction

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "g8F7e6D5c4B3a2Z1", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Talisman, papier de qualité et nécessaire de calligraphie", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Talisman, papier de qualité et nécessaire de calligraphie

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "y0X9w8V7u6T5s4R3", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Formulaires de décret céleste", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Formulaires de décret céleste

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "q2P1o0I9u8Y7t6R5", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Alchimie (Eau) : Poisons", + "type": "spell", + "img": "", + "system": { + "reference": "LdB p. 310", + "description": "

Alchimie (Eau)

L'Alchimie est l'art de manipuler la matière par des procédés occultes. Le fat si est capable de transformer un matériau en un autre, de créer des substances aux propriétés magiques, d'altérer les propriétés physiques des objets ou de confectionner des poisons et des remèdes.

Poisons (Métal)

Le PJ est capable de confectionner des poisons et des venins aux effets variés : paralysie, sommeil, douleur, ou même la mort. Il sait également créer des antidotes.

", + "specialityname": "Poisons", + "associatedelement": "metal", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "30 minutes", + "realizationtimeaccelerated": "6 crans d'initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de poisons utiles, avec leur coût en Puissance :

", + "notes": "

Vos notes…

", + "discipline": "alchemy", + "hei": "" + }, + "_id": "e4R3t2Y1u0I9o8P7", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Maîtrise de la Voie (Terre) : Malédiction", + "type": "spell", + "img": "", + "system": { + "reference": "LdB p. 320", + "description": "

Maîtrise de la Voie (Terre)

La Maîtrise de la Voie est l'art de manipuler le Hei, l'énergie vitale qui traverse tous les êtres. Le fat si peut bénir ou maudire, influencer les esprits, contrôler les corps et même commander aux morts.

Malédiction (Métal)

Le PJ est capable de lancer des malédictions sur ses ennemis, leur infligeant malchance, souffrance ou affaiblissement.

", + "specialityname": "Malédiction", + "associatedelement": "metal", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "10 minutes", + "realizationtimeaccelerated": "3 crans d'initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de malédictions utiles, avec leur coût en Puissance :

", + "notes": "

Vos notes…

", + "discipline": "masteryoftheway", + "hei": "" + }, + "_id": "m5N4b3V2c1X9z8W7", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Maîtrise de la Voie (Terre) : Nécromancie", + "type": "spell", + "img": "", + "system": { + "reference": "LdB p. 321", + "description": "

Maîtrise de la Voie (Terre)

La Maîtrise de la Voie est l'art de manipuler le Hei, l'énergie vitale qui traverse tous les êtres.

Nécromancie (Eau)

Le PJ est capable de communiquer avec les morts, de les interroger et même de les commander. Il peut également apaiser les esprits errants.

", + "specialityname": "Nécromancie", + "associatedelement": "water", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "30 minutes", + "realizationtimeaccelerated": "6 crans d'initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de sorts nécromantiques utiles, avec leur coût en Puissance :

", + "notes": "

Vos notes…

", + "discipline": "masteryoftheway", + "hei": "" + }, + "_id": "q6A5s4D3f2G1h0J9", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Maîtrise de la Voie (Terre) : Domination", + "type": "spell", + "img": "", + "system": { + "reference": "LdB p. 320", + "description": "

Maîtrise de la Voie (Terre)

La Maîtrise de la Voie est l'art de manipuler le Hei, l'énergie vitale qui traverse tous les êtres.

Domination (Feu)

Le PJ est capable de dominer la volonté d'autrui, de contrôler ses actions et de lui imposer sa volonté.

", + "specialityname": "Domination", + "associatedelement": "fire", + "heiType": "yang", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "1 minute", + "realizationtimeaccelerated": "3 crans d'initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de sorts de domination utiles, avec leur coût en Puissance :

", + "notes": "

Vos notes…

", + "discipline": "masteryoftheway", + "hei": "" + }, + "_id": "k8L7j6H5g4F3d2S1", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Exorcisme (Feu) : Domination", + "type": "spell", + "img": "", + "system": { + "reference": "LdB p. 318", + "description": "

Exorcisme (Feu)

L'Exorcisme est la magie qui permet de lutter efficacement contre les jiugwaai – tels les esprits, démons, fantômes – mais aussi d'interagir avec elles.

Domination (Feu)

Le PJ est capable de soumettre les créatures surnaturelles par sa volonté, les forçant à obéir ou à fuir.

", + "specialityname": "Domination", + "associatedelement": "fire", + "heiType": "yang", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "1 minute", + "realizationtimeaccelerated": "3 crans d'initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de sorts de domination utiles, avec leur coût en Puissance :

", + "notes": "

Vos notes…

", + "discipline": "exorcism", + "hei": "" + }, + "_id": "a0Z9x8W7v6U5t4R3", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + } + ], + "prototypeToken": { + "name": "Lily Chiu", + "displayName": 0, + "actorLink": false, + "width": 1, + "height": 1, + "depth": 1, + "texture": { + "src": "", + "anchorX": 0.5, + "anchorY": 0.5, + "fit": "contain", + "scaleX": 1, + "scaleY": 1, + "tint": "#ffffff", + "alphaThreshold": 0.75 + }, + "lockRotation": false, + "rotation": 0, + "alpha": 1, + "disposition": -1, + "displayBars": 0, + "bar1": { + "attribute": "threetreasures.heiyang" + }, + "bar2": { + "attribute": "threetreasures.heiyin" + }, + "light": { + "negative": false, + "priority": 0, + "alpha": 0.5, + "angle": 360, + "bright": 0, + "color": null, + "coloration": 1, + "dim": 0, + "attenuation": 0.5, + "luminosity": 0.5, + "saturation": 0, + "contrast": 0, + "shadows": 0, + "animation": { + "type": null, + "speed": 5, + "intensity": 5, + "reverse": false + }, + "darkness": { + "min": 0, + "max": 1 + } + }, + "sight": { + "enabled": false, + "range": 0, + "angle": 360, + "visionMode": "basic", + "color": null, + "attenuation": 0.1, + "brightness": 0, + "saturation": 0, + "contrast": 0 + }, + "detectionModes": {}, + "occludable": { + "radius": 0 + }, + "ring": { + "enabled": false, + "colors": { + "ring": null, + "background": null + }, + "effects": 1, + "subject": { + "scale": 1, + "texture": null + } + }, + "turnMarker": { + "mode": 1, + "animation": null, + "src": null, + "disposition": false + }, + "movementAction": null, + "flags": {}, + "randomImg": false, + "appendNumber": false, + "prependAdjective": false + }, + "effects": [], + "folder": null, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": { + "worldId": "cde", + "uuid": "Actor.YRIuWZJowkm0gJuc", + "coreVersion": "14.363", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "14.0.3" + } + }, + "ownership": { + "default": 0 + } +} \ No newline at end of file diff --git a/sample_data/fvtt-Actor-maggie-jan-mJ3kL5pR7tX9vB2n.json b/sample_data/fvtt-Actor-maggie-jan-mJ3kL5pR7tX9vB2n.json new file mode 100644 index 0000000..039cc1a --- /dev/null +++ b/sample_data/fvtt-Actor-maggie-jan-mJ3kL5pR7tX9vB2n.json @@ -0,0 +1,1118 @@ +{ + "name": "Maggie Jan", + "type": "character", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/characters/maggie.png", + "system": { + "concept": "Sentinelle occulte", + "guardian": 5, + "initiative": 1, + "anti_initiative": 24, + "description": "

Maggie Jan est une fat si particulière – une

\n

sentinelle occulte, la gardienne des rouleaux de

\n

forge du royaume de Yue.

\n

Métisse anglo-chinoise née d’un père officier

\n

de la Marine de sa Très Grâcieuse Majesté et

\n

d’une mère chinoise issue des quartiers pauvres

\n

de Hong Kong ayant accédé à un poste de tra­

\n

ductrice grâce à son mari, Maggie porte ainsi en

\n

elle une part de l’identité de la ville de par ce

\n

double héritage. Cependant, son père disparut

\n

en mer alors qu’elle était encore très jeune et

\n

elle grandit avec sa mère dans le quartier de

\n

Sham Shui Po, où elles s’installèrent après ce

\n

tragique événement.

\n

Parfois délaissée par sa mère qui travaillait

\n

énormément pour subvenir à leurs besoins,

\n

Maggie abandonna très tôt le parcours scolaire

\n

classique et se forma à la mécanique dans un ga­

\n

rage du quartier – dont elle devint la mascotte

\n

en raison de sa passion pour la vitesse et parti­

\n

culièrement pour la moto.

\n

Ses fréquentations de l’époque regroupaient

\n

de jeunes adeptes de courses motorisées, me­

\n

nées de façon illégale dans les rues de Hong

\n

Kong la nuit. C’est lors de l’une de ces compéti­

\n

tions que certains de ses amis interférèrent avec

\n

le business d’une triade, en provoquant un ca­

\n

rambolage impliquant un véhicule transportant

\n

de la drogue. Bien que cet événement ait été le

\n

fruit de la malchance, une partie de la cargaison

\n

se volatilisa dans la pagaille et les participants

\n

à la course se virent tenus pour responsables

\n

par l’organisation criminelle – et donc traqués

\n

et éliminés un par un.

\n

Maggie n’échappa que de justesse aux re­

\n

présailles de la société noire en trouvant refuge

\n

dans une vielle aciérie désaffectée. Blessée au

\n

cours de sa fuite mais peu disposée à se lais­

\n

ser attraper, elle utilisa ses connaissances en

\n

mécanique pour défendre sa vie, mettant à pro­

\n

fit les ressources à sa disposition pour tenter de

\n

semer ses poursuivants. Cela n’aurait pourtant

\n

pas suffi si un vieillard – qui se révéla par la

\n

suite être un esprit ancestral – n’était finale­

\n

ment intervenu pour la sauver en usant de ses

\n

talents de maître du sabre.

\n

Devinant le potentiel de Maggie, le vieux

\n

maître la prit sous son aile et, à l’aide des an­

\n

tiques rouleaux contenant les secrets de forge

\n

du royaume de Yue, ils façonnèrent ensemble

\n

la première lame de cette tradition sacrée de­

\n

puis presque deux millénaires. Ayant enfin pu

\n

transmettre son savoir et former sa remplaçante

\n

en tant que gardienne des secrets de ces épées,

\n

l’esprit se libéra de ce qui le retenait sur Terre

\n

et disparut, mais non sans avoir au préalable

\n

imprégné l’arme d’une partie de son âme – ce

\n

qui la transforma en sanhei, son dernier présent

\n

à sa protégée.

\n

Depuis, Maggie se sert de son savoir pour

\n

réaliser divers ouvrages dont la vente lui permet

\n

de subvenir à ses besoins. Forte de sa lame et

\n

des connaissances du monde occulte acquises

\n

auprès de son maître, elle s’efforce de venir en

\n

aide aux habitants de Hong Kong confrontés à

\n

des menaces surnaturelles – telle une mou hap

\n

des temps modernes.

\n

Maggie dispose de nombreux contacts parmi

\n

les commerçants qui vendent des produits oc­

\n

cultes et elle loue parfois ses services d’experte

\n

à d’autres fat si, mais n’a pas pour autant perdu

\n

son goût pour la vitesse et les sports mécaniques.

\n

Il arrive à Maggie de prendre ses repas au

\n

restaurant Chez Lau, qui se trouve fréquenté par

\n

de nombreux autres fat si. Cet établissement est

\n

tenu par le père d’un de ses amis – Billy Lau –

\n

avec qui elle partage la passion de la course.

\n

les chroniques

\n

de l’étrange

", + "aspect": { + "fire": { + "chinese": "㊋", + "label": "CDE.Fire", + "value": 2 + }, + "earth": { + "chinese": "㊏", + "label": "CDE.Earth", + "value": 2 + }, + "metal": { + "chinese": "㊎", + "label": "CDE.Metal", + "value": 3 + }, + "water": { + "chinese": "㊌", + "label": "CDE.Water", + "value": 3 + }, + "wood": { + "chinese": "㊍", + "label": "CDE.Wood", + "value": 2 + } + }, + "skills": { + "art": { + "label": "CDE.Art", + "specialities": "Forge", + "value": 2 + }, + "investigation": { + "label": "CDE.Investigation", + "specialities": "", + "value": 1 + }, + "erudition": { + "label": "CDE.Erudition", + "specialities": "Mythologie, Histoire", + "value": 2 + }, + "knavery": { + "label": "CDE.Knavery", + "specialities": "Discrétion", + "value": 1 + }, + "wordliness": { + "label": "CDE.Wordliness", + "specialities": "", + "value": 1 + }, + "prowess": { + "label": "CDE.Prowess", + "specialities": "Moto", + "value": 2 + }, + "sciences": { + "label": "CDE.Sciences", + "specialities": "", + "value": 0 + }, + "technologies": { + "label": "CDE.Technologies", + "specialities": "Mécanique", + "value": 3 + }, + "kungfu": { + "label": "CDE.KungFu", + "specialities": "Épée", + "value": 3 + }, + "rangedcombat": { + "label": "CDE.RangedCombat", + "specialities": "", + "value": 0 + } + }, + "resources": { + "supply": { + "label": "CDE.Supply", + "specialities": "Fortune, Commerces", + "value": 2, + "debt": false + }, + "inquiry": { + "label": "CDE.Inquiry", + "specialities": "La Rue, Commerces", + "value": 2, + "debt": false + }, + "influence": { + "label": "CDE.Influence", + "specialities": "", + "value": 0, + "debt": false + } + }, + "component": { + "one": { + "value": "Poignée de grains de riz" + }, + "two": { + "value": "Fiole de sel" + }, + "three": { + "value": "Fiole de sang" + }, + "four": { + "value": "Pilules de cinabre" + }, + "five": { + "value": "Décoction d'herbes" + }, + "six": { + "value": "Œuf" + }, + "seven": { + "value": "Talisman" + }, + "eight": { + "value": "Talisman" + }, + "nine": { + "value": "Bâton d'encens" + }, + "zero": { + "value": "Bâton d'encens" + } + }, + "magics": { + "internalcinnabar": { + "visible": false, + "value": 0, + "speciality": { + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "alchemy": { + "visible": false, + "value": 0, + "speciality": { + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "masteryoftheway": { + "visible": false, + "value": 0, + "speciality": { + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "exorcism": { + "visible": true, + "value": 2, + "speciality": { + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": true + }, + "punishment": { + "check": false + }, + "domination": { + "check": true + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "geomancy": { + "visible": false, + "value": 0, + "speciality": { + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + } + } + } + }, + "threetreasures": { + "heiyang": { + "value": 5, + "max": 5 + }, + "heiyin": { + "value": 3, + "max": 3 + }, + "dicelevel": { + "level0d": { + "san": { + "value": 5, + "max": 5, + "min": 0 + }, + "zing": { + "value": 7, + "max": 7, + "min": 0 + } + }, + "level1d": { + "san": { + "value": 3, + "max": 3, + "min": 0 + }, + "zing": { + "value": 4, + "max": 4, + "min": 0 + } + }, + "level2d": { + "san": { + "value": 2, + "max": 2, + "min": 0 + }, + "zing": { + "value": 3, + "max": 3, + "min": 0 + } + } + } + }, + "experience": { + "value": 6, + "max": 6, + "min": 0 + }, + "prefs": { + "typeofthrow": { + "check": true, + "choice": "0" + } + }, + "prompt": { + "typeofthrow": { + "check": true, + "choice": "0" + }, + "configure": { + "numberofdice": 0, + "aspect": 0, + "bonus": 0, + "bonusauspiciousdice": 0, + "typeofthrow": 0, + "aspectskill": 0, + "bonusmalusskill": 0, + "aspectspeciality": 0, + "rolldifficulty": 0, + "bonusmalusspeciality": 0 + } + } + }, + "items": [ + { + "name": "La Dernière Épée de Yue (épée traditionnelle sacrée)", + "type": "sanhei", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/sanhei/regard_abyssal.png", + "system": { + "reference": "Sanhei de Maggie Jan", + "description": "

La Dernière Épée de Yue (épée traditionnelle sacrée) :

\n

• Affecte les créatures surnaturelles même intangibles.

\n

• Contre la dépense de 1 point de Hei Yin, ajoute la valeur de son Eau (3) aux dégâts.

\n

• Ajoute 1 dé supplémentaire à lancer à tous ses jets de Kung-fu (Épée).

", + "heiType": "yin", + "properties": { + "prop1": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop2": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop3": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "Y8AZOkLs7Ke04hfu", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "L'Épée du Faîte suprême", + "type": "kungfu", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/kung-fu/pistolet.png", + "system": { + "reference": "Style de Maggie Jan", + "description": "

L'Épée du Faîte suprême

\n

Yin / Eau / Kung-fu (Épée)

\n

+ 1 dé en défense / 2 dés-néfastes si on tente de le désarmer

\n

Le souffle de Wudang

", + "orientation": "yin", + "aspect": "eau", + "skill": "kungfu", + "speciality": "Épée", + "style": "", + "techniques": { + "technique1": { + "check": false, + "name": "Le souffle de Wudang", + "activation": "action-attack-defense", + "technique": "

Le souffle de Wudang

Invoquant la puissance du mont Wudang, la pratiquante synchronise son souffle avec ses mouvements d'épée. Elle peut annuler 1 dé-néfaste sur son action de défense et gagne +1 dé supplémentaire sur son action d'attaque au corps-à-corps pour un round.

" + }, + "technique2": { + "check": false, + "name": "", + "activation": "", + "technique": "" + }, + "technique3": { + "check": false, + "name": "", + "activation": "", + "technique": "" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "G5mXYDoCyJ0dsQZv", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Combinaison de moto et casque à ses couleurs (rouge et or)", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/polo-shirt.png", + "system": { + "reference": "", + "description": "

Combinaison de moto et casque à ses couleurs (rouge et or)

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "t9DHIbr8EW4gsLWm", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Moto de compétition très haut de gamme de marque japonaise, avec modifications personnelles", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_transports_hong_kong/scooter.png", + "system": { + "reference": "", + "description": "

Moto de compétition très haut de gamme de marque japonaise, avec modifications personnelles

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "w8LXSYQ1eIygtlKV", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Téléphone avec un accès au Taonet", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_technologie/smartphone.png", + "system": { + "reference": "", + "description": "

Téléphone avec un accès au Taonet

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "valJXuTGGQN06znJ", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Appartement modeste à l'arrière de la boutique où elle pratique son artisanat, à Sham Shui Po", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_habitats/house.png", + "system": { + "reference": "", + "description": "

Appartement modeste à l'arrière de la boutique où elle pratique son artisanat, à Sham Shui Po

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "9wc3h3l8bKRogDlD", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Outillage de mécanicienne (professionnel)", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_technologie/pistol-gun.png", + "system": { + "reference": "", + "description": "

Outillage de mécanicienne (professionnel)

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "W6uaY31VuCSetszi", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Matériel de forge (artisanal)", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_technologie/pistol-gun.png", + "system": { + "reference": "", + "description": "

Matériel de forge (artisanal)

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "Vyb7Whzy1z5yzoh9", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Exorcisme (Feu) : Protection", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/FEU.gif", + "system": { + "reference": "LdB p. 316", + "description": "

Exorcisme (Feu)

L’Exorcisme est la magie qui permet de lutter efficacement contre les jiugwaai – tels les esprits, démons, fantômes, etc. – mais aussi d’interagir avec elles. Un exorciste est capable de pister ces êtres, de les affronter, de s’en protéger et même de les soumettre.

Il s’agit d’une magie qui fait un grand usage d’objets et d’armes. Un exorciste est souvent équipé d’une épée de saule et de talismans de protection, mais aussi de divers outils facilitant sa traque et son combat – boussole à esprits ou GPS à fantômes, entre autres.

Les sorts d’Exorcisme ne sont en général d’aucune utilité face à des mortels ou des créatures d’essence céleste.

Protection (Métal)

Le PJ est capable de canaliser son énergie Yang pour créer une barrière protectrice contre les attaques des créatures surnaturelles. En plaçant un talisman sur lui-même ou sur un allié, il forme une armure spirituelle qui absorbe une partie des dégâts infligés par les jiugwaai.

Cette protection s'avère également efficace contre les influences néfastes, les possessions et les malédictions lancées par des entités démoniaques. Plus l'exorciste maîtrise cette spécialité, plus sa protection devient résistante et durable.

", + "specialityname": "Protection", + "associatedelement": "metal", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "5 minutes", + "realizationtimeaccelerated": "3 crans d'initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de protections utiles, avec leur coût en Puissance :

", + "notes": "

Vos notes…

", + "discipline": "exorcism", + "hei": "" + }, + "_id": "lLWh4oHNXFbBXQSS", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Exorcisme (Feu) : Domination", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/FEU.gif", + "system": { + "reference": "LdB p. 316", + "description": "

Exorcisme (Feu)

L’Exorcisme est la magie qui permet de lutter efficacement contre les jiugwaai – tels les esprits, démons, fantômes, etc. – mais aussi d’interagir avec elles. Un exorciste est capable de pister ces êtres, de les affronter, de s’en protéger et même de les soumettre.

Il s’agit d’une magie qui fait un grand usage d’objets et d’armes. Un exorciste est souvent équipé d’une épée de saule et de talismans de protection, mais aussi de divers outils facilitant sa traque et son combat – boussole à esprits ou GPS à fantômes, entre autres.

Les sorts d’Exorcisme ne sont en général d’aucune utilité face à des mortels ou des créatures d’essence céleste.

Domination (Feu)

Le PJ est capable d'imposer sa volonté à un jiugwaai et de le contraindre à obéir à ses ordres. En canalisant son énergie Yang à travers des gestes et des paroles de commandement, l'exorciste peut forcer un esprit, un démon ou un fantôme à exécuter ses ordres, à révéler des informations ou à cesser ses agissements.

Cette spécialité requiert une grande force de caractère : plus l'entité est puissante, plus il est difficile de la soumettre. Un esprit dominé peut tenter de briser l'emprise de l'exorciste si sa volonté fléchit.

", + "specialityname": "Domination", + "associatedelement": "fire", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "5 minutes", + "realizationtimeaccelerated": "3 crans d'initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de dominations utiles, avec leur coût en Puissance :

", + "notes": "

Vos notes…

", + "discipline": "exorcism", + "hei": "" + }, + "_id": "bcQuW5SfzQcClpdu", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + } + ], + "prototypeToken": { + "name": "Maggie Jan", + "displayName": 0, + "actorLink": false, + "width": 1, + "height": 1, + "depth": 1, + "texture": { + "src": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/characters/maggie.png", + "anchorX": 0.5, + "anchorY": 0.5, + "fit": "contain", + "scaleX": 1, + "scaleY": 1, + "tint": "#ffffff", + "alphaThreshold": 0.75 + }, + "lockRotation": false, + "rotation": 0, + "alpha": 1, + "disposition": -1, + "displayBars": 0, + "bar1": { + "attribute": "threetreasures.heiyang" + }, + "bar2": { + "attribute": "threetreasures.heiyin" + }, + "light": { + "negative": false, + "priority": 0, + "alpha": 0.5, + "angle": 360, + "bright": 0, + "color": null, + "coloration": 1, + "dim": 0, + "attenuation": 0.5, + "luminosity": 0.5, + "saturation": 0, + "contrast": 0, + "shadows": 0, + "animation": { + "type": null, + "speed": 5, + "intensity": 5, + "reverse": false + }, + "darkness": { + "min": 0, + "max": 1 + } + }, + "sight": { + "enabled": false, + "range": 0, + "angle": 360, + "visionMode": "basic", + "color": null, + "attenuation": 0.1, + "brightness": 0, + "saturation": 0, + "contrast": 0 + }, + "detectionModes": {}, + "occludable": { + "radius": 0 + }, + "ring": { + "enabled": false, + "colors": { + "ring": null, + "background": null + }, + "effects": 1, + "subject": { + "scale": 1, + "texture": null + } + }, + "turnMarker": { + "mode": 1, + "animation": null, + "src": null, + "disposition": false + }, + "movementAction": null, + "flags": {}, + "randomImg": false, + "appendNumber": false, + "prependAdjective": false + }, + "effects": [], + "folder": null, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351493, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": { + "worldId": "cde", + "uuid": "Actor.mJ3kL5pR7tX9vB2n", + "coreVersion": "14.363", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "14.0.3" + } + }, + "ownership": { + "default": 0 + } +} \ No newline at end of file diff --git a/sample_data/fvtt-Actor-mallory-tin-We0fDm06Ua2msJte.json b/sample_data/fvtt-Actor-mallory-tin-We0fDm06Ua2msJte.json new file mode 100644 index 0000000..7dda0d3 --- /dev/null +++ b/sample_data/fvtt-Actor-mallory-tin-We0fDm06Ua2msJte.json @@ -0,0 +1,1160 @@ +{ + "name": "Mallory Tin", + "type": "character", + "img": "", + "system": { + "concept": "Prodige céleste", + "guardian": 6, + "initiative": 1, + "anti_initiative": 24, + "description": "

N.B. : vous pouvez changer le sexe de ce per­

\n

sonnage si vous le désirez – Mallory étant un

\n

prénom mixte – ou laisser planer l’ambiguïté. Ici,

\n

nous la genrons au féminin mais il est possible

\n

d’en faire un homme.

\n

Mallory est la fille de James Tin, un policier

\n

de Hong Kong, et d’une fée céleste (tinneoi)

\n

prénommée Mei. Comme dans les légendes, son

\n

père entra en possession du manteau de plume

\n

de sa mère qui dut ensuite l’épouser. Mallory ne

\n

connaît pas tous les détails de l’histoire, mais

\n

Mei resta sur Terre, même après avoir récupéré

\n

son manteau – ce qui prouve qu’elle était sincè­

\n

rement éprise de James, à qui elle donna cette

\n

enfant. Pourtant, Mei resta absente des pre­

\n

mières années de vie de Mallory jusqu’au milieu

\n

de son adolescence, pour des raisons qu’elle n’a

\n

jamais clairement expliquées (mais qui sont sans

\n

doute relatives à ses missions divines).

\n

Mallory est une fat si ayant reçu l’enseigne­

\n

ment des prêtres taoïstes du temple de Che

\n

Kung durant son enfance. En effet, son père la

\n

leur confiait chaque fois qu’il travaillait sur une

\n

mission dangereuse – ce qui s’avérait fréquent.

\n

Repérée très jeune du fait de son ascendance

\n

particulière, Mallory se montrait très douée

\n

dans ses études mystiques.

\n

Lors de ses ponctuels séjours sur Terre,

\n

Mei donnait des cours de danse traditionnelle

\n

à l’Académie des Arts et du Spectacle de Hong

\n

Kong. Mallory renoua des liens avec sa mère en

\n

fréquentant régulièrement sa classe durant son

\n

adolescence et jusqu’à l’âge adulte.

\n

Devenue une jeune femme, Mallory parcourut

\n

alors Hong Kong à la recherche de sifu capables

\n

de lui enseigner leurs secrets. Parallèlement,

\n

elle fit la connaissance de fat si et d’autres per­

\n

sonnalités du monde occulte, par l’intermédiaire

\n

de ses maîtres taoïstes et de ses parents.

\n

Entraînée par une experte dans l’art du lan­

\n

cer de dagues, elle apprit ainsi à projeter des

\n

plumes d’argent tranchantes comme des poi­

\n

gnards, qui décorent les manches de ses vête­

\n

ments et les bords de son chapeau. Ces armes

\n

sont spécialement conçues pour canaliser la

\n

puissance céleste de son héritage. Mallory dis­

\n

pose en outre de véritables poignards offerts

\n

par sa professeure, Dame Xiao, dont elle ne se

\n

sert qu’en cas de menace importante. Il lui ar­

\n

rive d’enduire ses plumes d’argent de poison à

\n

l’occasion, mais uniquement pour affronter les

\n

pires créatures surnaturelles.

\n

Le sanhei de Mallory est un pendentif repré­

\n

sentant une fiole scellée. Elle contient les larmes

\n

de la déesse lunaire Soeng Ngo et appartenait

\n

jadis à un fat si dont Dame Xiao était proche.

\n

L’objet a lui-même appelé Mallory, l’attirant à

\n

lui jusqu’à ce qu’elle le découvre dans la mai­

\n

son de son enseignante – qui décida alors de lui

\n

confier.

\n

Mallory s’est spécialisée dans la purification

\n

de lieux imprégnés d’énergie néfaste et dans

\n

le combat contre les jiugwaai qui cherchent à

\n

déstabiliser Hong Kong. Son esprit ardent et

\n

son élégance traditionnelle participent à sa ré­

\n

putation. Mallory affiche une fraîcheur, parfois

\n

même une candeur, qui se révèle trompeuse.

\n

Elle fait plus jeune que son âge et, malgré l’ap­

\n

parence délicate due à son ascendance céleste,

\n

elle possède un esprit aussi acéré que ses lames

\n

et une détermination qui force le respect.

\n

Même si son père a pris sa retraite de la

\n

Police de Hong Kong il y a peu, il dispose en­

\n

core de nombreux contacts parmi les forces de

\n

l’ordre auxquelles Mallory rend service de temps

\n

à autre. Elle fréquente régulièrement le restau­

\n

rant Chez Lau, repaire privilégié d’autres fat si

\n

de sa génération avec qui elle coopère souvent.

\n

les chroniques

\n

de l’étrange

", + "aspect": { + "fire": { + "chinese": "㊋", + "label": "CDE.Fire", + "value": 3 + }, + "earth": { + "chinese": "㊏", + "label": "CDE.Earth", + "value": 2 + }, + "metal": { + "chinese": "㊎", + "label": "CDE.Metal", + "value": 2 + }, + "water": { + "chinese": "㊌", + "label": "CDE.Water", + "value": 4 + }, + "wood": { + "chinese": "㊍", + "label": "CDE.Wood", + "value": 2 + } + }, + "skills": { + "art": { + "label": "CDE.Art", + "specialities": "Danse", + "value": 3 + }, + "investigation": { + "label": "CDE.Investigation", + "specialities": "", + "value": 2 + }, + "erudition": { + "label": "CDE.Erudition", + "specialities": "", + "value": 3 + }, + "knavery": { + "label": "CDE.Knavery", + "specialities": "", + "value": 1 + }, + "wordliness": { + "label": "CDE.Wordliness", + "specialities": "", + "value": 2 + }, + "prowess": { + "label": "CDE.Prowess", + "specialities": "", + "value": 2 + }, + "sciences": { + "label": "CDE.Sciences", + "specialities": "", + "value": 2 + }, + "technologies": { + "label": "CDE.Technologies", + "specialities": "", + "value": 1 + }, + "kungfu": { + "label": "CDE.KungFu", + "specialities": "", + "value": 1 + }, + "rangedcombat": { + "label": "CDE.RangedCombat", + "specialities": "Poignards", + "value": 3 + } + }, + "resources": { + "supply": { + "label": "CDE.Supply", + "specialities": "Fortune", + "value": 2, + "debt": false + }, + "inquiry": { + "label": "CDE.Inquiry", + "specialities": "Police", + "value": 2, + "debt": false + }, + "influence": { + "label": "CDE.Influence", + "specialities": "", + "value": 2, + "debt": false + } + }, + "component": { + "one": { + "value": "Talisman" + }, + "two": { + "value": "Fiole de sel" + }, + "three": { + "value": "Ginseng" + }, + "four": { + "value": "Radis noir" + }, + "five": { + "value": "Cinabre" + }, + "six": { + "value": "Cigüe" + }, + "seven": { + "value": "Soufre" + }, + "eight": { + "value": "Mélange d'herbes" + }, + "nine": { + "value": "Papier pour pliage" + }, + "zero": { + "value": "Bâton d'encens" + } + }, + "magics": { + "internalcinnabar": { + "visible": false, + "value": 0, + "speciality": { + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "alchemy": { + "visible": true, + "value": 2, + "speciality": { + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": true + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "masteryoftheway": { + "visible": false, + "value": 0, + "speciality": { + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "exorcism": { + "visible": true, + "value": 3, + "speciality": { + "invocation": { + "check": true + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "geomancy": { + "visible": true, + "value": 2, + "speciality": { + "neutralization": { + "check": true + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + } + } + } + }, + "threetreasures": { + "heiyang": { + "value": 5, + "max": 5 + }, + "heiyin": { + "value": 3, + "max": 3 + }, + "dicelevel": { + "level0d": { + "san": { + "value": 6, + "max": 6, + "min": 0 + }, + "zing": { + "value": 6, + "max": 6, + "min": 0 + } + }, + "level1d": { + "san": { + "value": 3, + "max": 3, + "min": 0 + }, + "zing": { + "value": 2, + "max": 2, + "min": 0 + } + }, + "level2d": { + "san": { + "value": 3, + "max": 3, + "min": 0 + }, + "zing": { + "value": 4, + "max": 4, + "min": 0 + } + } + } + }, + "experience": { + "value": 6, + "max": 6, + "min": 0 + }, + "prefs": { + "typeofthrow": { + "check": true, + "choice": "0" + } + }, + "prompt": { + "typeofthrow": { + "check": true, + "choice": "0" + }, + "configure": { + "numberofdice": 0, + "aspect": 0, + "bonus": 0, + "bonusauspiciousdice": 0, + "typeofthrow": 0, + "aspectskill": 0, + "bonusmalusskill": 0, + "aspectspeciality": 0, + "rolldifficulty": 0, + "bonusmalusspeciality": 0 + } + } + }, + "items": [ + { + "name": "Les Larmes de Soeng Ngo (pendentif en forme de fiole scellée)", + "type": "sanhei", + "img": "", + "system": { + "reference": "Sanhei de Mallory Tin", + "description": "

Les Larmes de Soeng Ngo (pendentif en forme de fiole scellée) :

\n

• Protection spirituelle d'une valeur égale à celle de sa Terre (2) contre 1 point de Hei Yang.

\n

• + 1 niveau de Puissance gratuit à tous ses jets de Géomancie (Neutralisation).

\n

• + 2 dés sur tout jet d'Enquête (Observation) à condition que la lumière de la lune puisse servir de guide. La lumière de la lune indiquera même quelque chose qui a été sciemment caché.

", + "heiType": "yin", + "properties": { + "prop1": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop2": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop3": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "m3cUN1zuQI", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Les Poignards volants", + "type": "kungfu", + "img": "", + "system": { + "reference": "LdB p. ?", + "description": "

Les Poignards volants

\n

Yin ou Yang / Terre / Combat à distance (Poignard, Hachette)

\n

Distance médiane passe à longue / + 1 dégâts

\n

Assiéger la forteresse

", + "orientation": "yin", + "aspect": "earth", + "skill": "rangedcombat", + "speciality": "Poignards", + "style": "", + "techniques": { + "technique1": { + "check": false, + "name": "Assiéger la forteresse", + "activation": "dice", + "technique": "

Assiéger la forteresse

Technique de combat permettant de concentrer ses attaques sur un point faible.

" + }, + "technique2": { + "check": false, + "name": "", + "activation": "dice", + "technique": "" + }, + "technique3": { + "check": false, + "name": "", + "activation": "dice", + "technique": "" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "qLqgGotGoR", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Nombreux talismans et clochettes tout autour de son chapeau", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Nombreux talismans et clochettes tout autour de son chapeau

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "s2ydlmrAbE", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "7 poignards ornés d'or et de jade (dégâts 2+Eau(4) avec Hei Yin)", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

7 poignards ornés d'or et de jade (dégâts 2+Eau(4) avec Hei Yin)

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "OllJUo8Qbq", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Plusieurs plumes tranchantes en argent", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Plusieurs plumes tranchantes en argent

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "4rAGTC6oAC", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Instruments d'alchimie modernes (fioles, tubes, balance, mortier)", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Instruments d'alchimie modernes (fioles, tubes, balance, mortier)

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "t62cAS5Inq", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Appartement modeste avec bibliothèque, ordinateur Taonet et atelier d'alchimiste", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Appartement modeste avec bibliothèque, ordinateur Taonet et atelier d'alchimiste

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "VDxoxivQYO", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Bicyclette citadine dernier cri", + "type": "item", + "img": "", + "system": { + "reference": "", + "description": "

Bicyclette citadine dernier cri

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "MudkKppJbV", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Alchimie (Eau) : Poisons", + "type": "spell", + "img": "", + "system": { + "reference": "", + "description": "

Alchimie (Eau)

L'Alchimie permet au fat si de manipuler la matière et les énergies par des procédés ésotériques.

Poisons (Métal)

Le PJ sait créer des poisons et des antidotes.

", + "specialityname": "Poisons", + "associatedelement": "metal", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "", + "realizationtimeaccelerated": "", + "flashback": "", + "components": "", + "effects": "", + "examples": "", + "notes": "

Vos notes…

", + "discipline": "alchemy", + "hei": "" + }, + "_id": "H1HiTXnTKY", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Exorcisme (Feu) : Invocation", + "type": "spell", + "img": "", + "system": { + "reference": "", + "description": "

Exorcisme (Feu)

L'Exorcisme est la magie qui permet de lutter efficacement contre les jiugwaai.

Invocation (Métal)

Le PJ est capable de canaliser son énergie Yang afin de se créer un arsenal transférable.

", + "specialityname": "Invocation", + "associatedelement": "metal", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "", + "realizationtimeaccelerated": "", + "flashback": "", + "components": "", + "effects": "", + "examples": "", + "notes": "

Vos notes…

", + "discipline": "exorcism", + "hei": "" + }, + "_id": "Pl9oK8iH2U", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Géomancie (Bois) : Neutralisation", + "type": "spell", + "img": "", + "system": { + "reference": "", + "description": "

Géomancie (Bois)

La Géomancie recouvre la compréhension des flux d'énergie qui circulent à travers le cosmos.

Neutralisation (Métal)

Le PJ est capable d'analyser un nœud de flux néfastes, d'en bloquer les effets et de le détruire.

", + "specialityname": "Neutralisation", + "associatedelement": "metal", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "", + "realizationtimeaccelerated": "", + "flashback": "", + "components": "", + "effects": "", + "examples": "", + "notes": "

Vos notes…

", + "discipline": "geomancy", + "hei": "" + }, + "_id": "jM6nB5vCxZ", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + } + ], + "prototypeToken": { + "name": "Mallory Tin", + "displayName": 0, + "actorLink": false, + "width": 1, + "height": 1, + "depth": 1, + "texture": { + "src": "", + "anchorX": 0.5, + "anchorY": 0.5, + "fit": "contain", + "scaleX": 1, + "scaleY": 1, + "tint": "#ffffff", + "alphaThreshold": 0.75 + }, + "lockRotation": false, + "rotation": 0, + "alpha": 1, + "disposition": -1, + "displayBars": 0, + "bar1": { + "attribute": "threetreasures.heiyang" + }, + "bar2": { + "attribute": "threetreasures.heiyin" + }, + "light": { + "negative": false, + "priority": 0, + "alpha": 0.5, + "angle": 360, + "bright": 0, + "color": null, + "coloration": 1, + "dim": 0, + "attenuation": 0.5, + "luminosity": 0.5, + "saturation": 0, + "contrast": 0, + "shadows": 0, + "animation": { + "type": null, + "speed": 5, + "intensity": 5, + "reverse": false + }, + "darkness": { + "min": 0, + "max": 1 + } + }, + "sight": { + "enabled": false, + "range": 0, + "angle": 360, + "visionMode": "basic", + "color": null, + "attenuation": 0.1, + "brightness": 0, + "saturation": 0, + "contrast": 0 + }, + "detectionModes": {}, + "occludable": { + "radius": 0 + }, + "ring": { + "enabled": false, + "colors": { + "ring": null, + "background": null + }, + "effects": 1, + "subject": { + "scale": 1, + "texture": null + } + }, + "turnMarker": { + "mode": 1, + "animation": null, + "src": null, + "disposition": false + }, + "movementAction": null, + "flags": {}, + "randomImg": false, + "appendNumber": false, + "prependAdjective": false + }, + "effects": [], + "folder": null, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351493, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": { + "worldId": "cde", + "uuid": "Actor.We0fDm06Ua2msJte", + "coreVersion": "14.363", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "14.0.3" + } + }, + "ownership": { + "default": 0 + } +} \ No newline at end of file diff --git a/sample_data/fvtt-Actor-penny-woo-a1b2c3d4e5f6g7h8.json b/sample_data/fvtt-Actor-penny-woo-a1b2c3d4e5f6g7h8.json new file mode 100644 index 0000000..8cd7b3a --- /dev/null +++ b/sample_data/fvtt-Actor-penny-woo-a1b2c3d4e5f6g7h8.json @@ -0,0 +1,1123 @@ +{ + "name": "Penny Woo", + "type": "character", + "img": "icons/svg/mystery-man.svg", + "system": { + "concept": "Exorciste errante", + "guardian": 3, + "initiative": 1, + "anti_initiative": 24, + "description": "

Penelope Woo est l’héritière d’une lignée de

\n

fat si renommée dont elle se révèle aujourd’hui

\n

l’une des dernières descendantes – et la plus

\n

prometteuse. Toute son enfance tournait autour

\n

de l’apprentissage des techniques familiales, des

\n

principes qui régissent la magie et de la connais­

\n

sance du monde céleste. Cela pesa lourdement

\n

sur la petite fille qu’elle était, qui finit par déve­

\n

lopper un rejet de son héritage dynastique. Mais

\n

elle n’osa jamais s’en ouvrir à ses parents et se

\n

contenta d’assimiler tout ce qui lui était ensei­

\n

gné, non sans envier la vie banale menée par ses

\n

camarades de classe.

\n

Toute sa famille se montra aussi surprise que

\n

contrariée quand, le jour de sa majorité venu,

\n

Penny refusa finalement d’assumer son legs –

\n

qu’elle considérait comme trop lourd pour ses

\n

épaules. Elle fuit les siens, allant jusqu’à couper

\n

tout contact avec eux, et se retrouva à vivre

\n

dans les bas-fonds de Hong Kong auprès des

\n

marginaux et des sans-abri – ce qui lui permit

\n

de nouer de nombreux contacts dans la rue, loin

\n

du confort de son ancienne demeure. Bien que la

\n

solitude lui pesât durant ces années à arpenter

\n

les ombres de la ville, elle parvint à acquérir

\n

une indépendance qu’elle n’aurait jamais cru

\n

possible au sein de sa parentèle. Devenue une

\n

dure à cuire, elle se tailla une certaine réputa­

\n

tion dans la rue – au point que plusieurs gangs

\n

essayèrent de la recruter. Mais le sens de la jus­

\n

tice que lui avait inculqué ses maîtres l’empêcha

\n

toujours de sombrer du mauvais côté de la loi.

\n

Un jour, elle dut se confronter au gang des

\n

Cornes du Deijuk et – grâce à ses nombreuses

\n

connaissances occultes – elle perçut rapidement

\n

l’influence d’un démon derrière celui-ci. Ce jourlà, Penny comprit finalement la mission d’un fat

\n

si, mais aussi et surtout ses propres limites en

\n

tant que tel : il lui apparut impossible de lutter

\n

seule contre cette engeance maléfique. Elle qui

\n

avait tourné le dos à son destin devait à présent

\n

revendiquer son héritage afin de défendre ses

\n

nouveaux amis – les gens modestes soumis au

\n

joug d’un gang occulte aussi avide que violent.

\n

Ravalant sa fierté, elle se résolut donc à re­

\n

nouer contact avec son clan afin d’achever sa

\n

formation.

\n

Elle réapparut parmi les siens lors des funé­

\n

railles de son oncle – Paul Woo, l’homme qui lui

\n

avait tenu lieu de mentor –, s’affirmant en tant

\n

que fat si à part entière à ce moment. Comme

\n

un signe du Ciel, c’est à cette occasion qu’elle

\n

rencontra les fat si avec lesquels elle travaille

\n

encore aujourd’hui – eux aussi venus rendre

\n

hommage au vieil exorciste. Penny partage avec

\n

eux une vision commune du surnaturel ainsi que

\n

l’envie de protéger Hong Kong des démons. Le

\n

groupe se retrouve régulièrement au restaurant

\n

Chez Lau tenu par Josie et Eddy, des fat si à la

\n

retraite et vieux amis de ses parents.

\n

Bien que de retour au sein de son clan, Penny

\n

reste proche des populations les plus précaires

\n

de Hong Kong et des petits commerces de rue

\n

de la ville. Elle rend service à la police à l’occa­

\n

sion mais préfère passer ses nuits à arpenter les

\n

toits de la ville, son arc à la main, pour protéger

\n

les quartiers pauvres – comme Sham Shui Po –

\n

souvent délaissés par ses collègues plus renom­

\n

més. Elle use alors de sa magie pour traquer et

\n

purifier les créatures démoniaques. Après plu­

\n

sieurs années de ces activités nocturnes, Penny

\n

est devenue une athlète aussi rapide qu’agile.

\n

Tel un oiseau de proie, elle fond sur les jiugwaai

\n

agressifs depuis les hauteurs et les transperce

\n

de ses flèches. Experte en tir à l’arc, elle ne rate

\n

jamais sa cible.

\n

Cadeau offert par sa mère, son sanhei est

\n

une boucle de ceinture représentant un soleil à

\n

l’image des neuf astres surnuméraires qui brû­

\n

lèrent le monde et que l’antique héros Jik l’Ar­

\n

cher dut jadis abattre. L’objet affine encore ses

\n

talents de chasseresse urbaine, au point qu’une

\n

intense terreur s’empare de qui se sait sa proie.

\n

les chroniques

\n

de l’étrange

", + "aspect": { + "fire": { + "chinese": "㊋", + "label": "CDE.Fire", + "value": 3 + }, + "earth": { + "chinese": "㊏", + "label": "CDE.Earth", + "value": 2 + }, + "metal": { + "chinese": "㊎", + "label": "CDE.Metal", + "value": 2 + }, + "water": { + "chinese": "㊌", + "label": "CDE.Water", + "value": 2 + }, + "wood": { + "chinese": "㊍", + "label": "CDE.Wood", + "value": 4 + } + }, + "skills": { + "art": { + "label": "CDE.Art", + "specialities": "", + "value": 0 + }, + "investigation": { + "label": "CDE.Investigation", + "specialities": "Surveillance", + "value": 2 + }, + "erudition": { + "label": "CDE.Erudition", + "specialities": "", + "value": 2 + }, + "knavery": { + "label": "CDE.Knavery", + "specialities": "", + "value": 2 + }, + "wordliness": { + "label": "CDE.Wordliness", + "specialities": "", + "value": 3 + }, + "prowess": { + "label": "CDE.Prowess", + "specialities": "Parkour", + "value": 3 + }, + "sciences": { + "label": "CDE.Sciences", + "specialities": "", + "value": 0 + }, + "technologies": { + "label": "CDE.Technologies", + "specialities": "", + "value": 0 + }, + "kungfu": { + "label": "CDE.KungFu", + "specialities": "", + "value": 1 + }, + "rangedcombat": { + "label": "CDE.RangedCombat", + "specialities": "Arc", + "value": 3 + } + }, + "resources": { + "supply": { + "label": "CDE.Supply", + "specialities": "Commerçants", + "value": 1, + "debt": false + }, + "inquiry": { + "label": "CDE.Inquiry", + "specialities": "La Rue, Police", + "value": 2, + "debt": false + }, + "influence": { + "label": "CDE.Influence", + "specialities": "La Rue", + "value": 1, + "debt": false + } + }, + "component": { + "one": { + "value": "Pièce de monnaie" + }, + "two": { + "value": "Feuille de saule" + }, + "three": { + "value": "Fiole de sel" + }, + "four": { + "value": "Poudre de jade" + }, + "five": { + "value": "Œuf de poule" + }, + "six": { + "value": "Plume de bergeronnette" + }, + "seven": { + "value": "Plume de passereau" + }, + "eight": { + "value": "Fiole vide" + }, + "nine": { + "value": "Bâton d'encens" + }, + "zero": { + "value": "Bâton d'encens" + } + }, + "magics": { + "internalcinnabar": { + "visible": false, + "value": 0, + "speciality": { + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "alchemy": { + "visible": false, + "value": 0, + "speciality": { + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "masteryoftheway": { + "visible": false, + "value": 0, + "speciality": { + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "exorcism": { + "visible": true, + "value": 3, + "speciality": { + "invocation": { + "check": false + }, + "tracking": { + "check": true + }, + "protection": { + "check": false + }, + "punishment": { + "check": true + }, + "domination": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "geomancy": { + "visible": true, + "value": 2, + "speciality": { + "neutralization": { + "check": true + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + } + } + } + }, + "threetreasures": { + "heiyang": { + "value": 3, + "max": 3 + }, + "heiyin": { + "value": 5, + "max": 5 + }, + "dicelevel": { + "level0d": { + "san": { + "value": 7, + "max": 7, + "min": 0 + }, + "zing": { + "value": 5, + "max": 5, + "min": 0 + } + }, + "level1d": { + "san": { + "value": 3, + "max": 3, + "min": 0 + }, + "zing": { + "value": 2, + "max": 2, + "min": 0 + } + }, + "level2d": { + "san": { + "value": 4, + "max": 4, + "min": 0 + }, + "zing": { + "value": 3, + "max": 3, + "min": 0 + } + } + } + }, + "experience": { + "value": 6, + "max": 6, + "min": 0 + }, + "prefs": { + "typeofthrow": { + "check": true, + "choice": "0" + } + }, + "prompt": { + "typeofthrow": { + "check": true, + "choice": "0" + }, + "configure": { + "numberofdice": 0, + "aspect": 0, + "bonus": 0, + "bonusauspiciousdice": 0, + "typeofthrow": 0, + "aspectskill": 0, + "bonusmalusskill": 0, + "aspectspeciality": 0, + "rolldifficulty": 0, + "bonusmalusspeciality": 0 + } + } + }, + "items": [ + { + "name": "La Morsure du Soleil (boucle de ceinture)", + "type": "sanhei", + "img": "icons/svg/item-bag.svg", + "system": { + "reference": "Sanhei de Penny Woo", + "description": "

La Morsure du Soleil (boucle de ceinture) :

\n

• Ajoute 1 niveau de Puissance gratuit à tous les jets d'Exorcisme (Punition) ou de Géomancie (Neutralisation).

\n

• En dépensant 1 point de Hei Yang, ajoute autant de dés-fastes que sa valeur de Feu (3) à un jet de Combat à distance (Arc).

", + "heiType": "yin", + "properties": { + "prop1": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop2": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop3": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "sAnHeIiDsUn10001", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Les Éclairs de Leoi Gung", + "type": "kungfu", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_technologie/bow.png", + "system": { + "reference": "", + "description": "

Les Éclairs de Leoi Gung

\n

Yang / Bois / Combat à distance (Arc)

\n

Tire Métal (2) flèches avant de recharger / + 1 dégâts

\n

La flèche est la cible

\n

La pluie d'éclairs

", + "orientation": "yang", + "aspect": "bois", + "skill": "rangedcombat", + "speciality": "Arc", + "style": "Tire Métal(2) flèches avant de recharger / +1 dégâts", + "techniques": { + "technique1": { + "check": false, + "name": "La flèche est la cible", + "activation": "action-attack-defense", + "technique": "

La flèche est la cible

Le pratiquant ne fait qu'un avec son arc, devenant aussi précis que la flèche qu'il décoche. Il peut annuler sur son action d'attaque un nombre de dés-néfastes égal à sa valeur de Bois.

" + }, + "technique2": { + "check": false, + "name": "La pluie d'éclairs", + "activation": "action-attack", + "technique": "

La pluie d'éclairs

Décochant une volée de flèches en un instant, le personnage inflige des dégâts supplémentaires égaux à sa valeur de Métal sur une attaque réussie.

" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "kUnGfUeClAiRs01", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Lunettes à filtres mystiques (voit émanations Yang)", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/sunglasses.png", + "system": { + "reference": "", + "description": "

Lunettes à filtres mystiques permettant de voir les émanations Yang.

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "lUnEtTeSfIlTr01", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Arc composite de très bonne qualité et 20 flèches artisanales (dégâts 2, distance longue)", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_technologie/bow.png", + "system": { + "reference": "", + "description": "

Arc composite de très bonne qualité et 20 flèches artisanales (dégâts 2, distance longue)

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "aRcCoMpOsItE01", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Pilon et mortier", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_alchimie/molcajete.png", + "system": { + "reference": "", + "description": "

Pilon et mortier

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "pIlOnEtMoRtI01", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Amulette Taaigiktou (1x/jour, +1 Hei pour 1 Zing)", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_alchimie/amulet.png", + "system": { + "reference": "", + "description": "

Amulette Taaigiktou : 1 fois par jour, permet de convertir +1 Hei pour 1 Zing.

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "aMuLeTtEaAi101", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Squat dans un ancien gymnase désaffecté", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_habitats/house.png", + "system": { + "reference": "", + "description": "

Squat dans un ancien gymnase désaffecté

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "sQuAtGyMnAsE01", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Exorcisme (Feu) : Traque", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/FEU.gif", + "system": { + "reference": "", + "description": "

Exorcisme (Feu)

L'Exorcisme est la magie qui permet de lutter efficacement contre les jiugwaai – tels les esprits, démons, fantômes, etc. – mais aussi d'interagir avec elles. Un exorciste est capable de pister ces êtres, de les affronter, de s'en protéger et même de les soumettre.

Traque (Eau)

Le PJ est capable de pister et de localiser les créatures surnaturelles, en suivant les traces d'énergie Yin qu'elles laissent derrière elles. Il peut utiliser divers outils comme une boussole à esprits ou un pendule pour affiner sa recherche.

", + "specialityname": "Traque", + "associatedelement": "eau", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "5 minutes", + "realizationtimeaccelerated": "3 crans d'initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

", + "notes": "

Vos notes…

", + "discipline": "exorcism", + "hei": "" + }, + "_id": "sPeLlTrAqUe001", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Exorcisme (Feu) : Punition", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/FEU.gif", + "system": { + "reference": "", + "description": "

Exorcisme (Feu)

L'Exorcisme est la magie qui permet de lutter efficacement contre les jiugwaai – tels les esprits, démons, fantômes, etc. – mais aussi d'interagir avec elles. Un exorciste est capable de pister ces êtres, de les affronter, de s'en protéger et même de les soumettre.

Punition (Feu)

Le PJ peut canaliser son énergie Yang pour infliger des dégâts directs aux créatures surnaturelles. Il utilise généralement des armes imprégnées de Hei ou des projectiles sacrés pour punir les démons et esprits malfaisants.

", + "specialityname": "Punition", + "associatedelement": "feu", + "heiType": "yang", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "1 minute", + "realizationtimeaccelerated": "2 crans d'initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

", + "notes": "

Vos notes…

", + "discipline": "exorcism", + "hei": "" + }, + "_id": "sPeLlPuNiTi001", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Géomancie (Bois) : Neutralisation", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/BOIS.gif", + "system": { + "reference": "", + "description": "

Géomancie (Bois)

La Géomancie recouvre la compréhension qu'a le fat si des flux d'énergie qui circulent à travers le cosmos, ainsi que sa capacité à les manipuler. Elle permet de repérer et de détruire un nœud de flux néfastes afin de libérer un endroit de son influence délétère.

Neutralisation (Métal)

Grâce à son art de la géomancie, le PJ est capable d'analyser un nœud de flux néfastes, d'en bloquer les effets et même de le détruire.

", + "specialityname": "Neutralisation", + "associatedelement": "metal", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "5 minutes", + "realizationtimeaccelerated": "6 crans d'initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

", + "notes": "

Vos notes…

", + "discipline": "geomancy", + "hei": "" + }, + "_id": "sPeLlNeUtRa001", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + } + ], + "prototypeToken": { + "name": "Penny Woo", + "displayName": 0, + "actorLink": false, + "width": 1, + "height": 1, + "depth": 1, + "texture": { + "src": "icons/svg/mystery-man.svg", + "anchorX": 0.5, + "anchorY": 0.5, + "fit": "contain", + "scaleX": 1, + "scaleY": 1, + "tint": "#ffffff", + "alphaThreshold": 0.75 + }, + "lockRotation": false, + "rotation": 0, + "alpha": 1, + "disposition": -1, + "displayBars": 0, + "bar1": { + "attribute": "threetreasures.heiyang" + }, + "bar2": { + "attribute": "threetreasures.heiyin" + }, + "light": { + "negative": false, + "priority": 0, + "alpha": 0.5, + "angle": 360, + "bright": 0, + "color": null, + "coloration": 1, + "dim": 0, + "attenuation": 0.5, + "luminosity": 0.5, + "saturation": 0, + "contrast": 0, + "shadows": 0, + "animation": { + "type": null, + "speed": 5, + "intensity": 5, + "reverse": false + }, + "darkness": { + "min": 0, + "max": 1 + } + }, + "sight": { + "enabled": false, + "range": 0, + "angle": 360, + "visionMode": "basic", + "color": null, + "attenuation": 0.1, + "brightness": 0, + "saturation": 0, + "contrast": 0 + }, + "detectionModes": {}, + "occludable": { + "radius": 0 + }, + "ring": { + "enabled": false, + "colors": { + "ring": null, + "background": null + }, + "effects": 1, + "subject": { + "scale": 1, + "texture": null + } + }, + "turnMarker": { + "mode": 1, + "animation": null, + "src": null, + "disposition": false + }, + "movementAction": null, + "flags": {}, + "randomImg": false, + "appendNumber": false, + "prependAdjective": false + }, + "effects": [], + "folder": null, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351493, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": { + "worldId": "cde", + "uuid": "Actor.a1b2c3d4e5f6g7h8", + "coreVersion": "14.363", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "14.0.3" + } + }, + "ownership": { + "default": 0 + } +} \ No newline at end of file diff --git a/sample_data/fvtt-Actor-sam-song-JuY7qnjxuMvGo2Nu.json b/sample_data/fvtt-Actor-sam-song-JuY7qnjxuMvGo2Nu.json new file mode 100644 index 0000000..059df16 --- /dev/null +++ b/sample_data/fvtt-Actor-sam-song-JuY7qnjxuMvGo2Nu.json @@ -0,0 +1,1066 @@ +{ + "name": "Sam Song", + "type": "character", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/fat_si/sam.png", + "system": { + "concept": "Mage taoïste", + "guardian": 4, + "initiative": 1, + "anti_initiative": 24, + "description": "

N.B. : vous pouvez changer le sexe de ce per­

\n

sonnage si vous le désirez – Sam pouvant être le

\n

diminutif de Samantha ou Samuel – ou laisser

\n

planer l’ambiguïté. Ici, nous la genrons au fémi­

\n

nin mais il est possible d’en faire un homme.

\n

Sans doute la plus religieuse de son groupe,

\n

Sam est une fat si traditionnelle issue d’une fa­

\n

mille ayant déjà compté de nombreux exorcistes

\n

par le passé. Formée au sein d’un temple taoïste

\n

dès son plus jeune âge, elle fréquente cepen­

\n

dant toutes les communautés religieuses de la

\n

ville – à qui elle vient en aide gratuitement, dans

\n

le respect de la religion populaire chinoise. En

\n

conséquence, elle est la bienvenue un peu par­

\n

tout dans les temples et monastères de Hong

\n

Kong et ne manque jamais de rien, bien qu’elle

\n

mène une stricte vie d’ascète. En effet, prêtres

\n

et moines se montrent toujours prêts à lui offrir

\n

le gîte et le couvert en échange de ses services.

\n

Sam se révèle singulièrement cultivée (tout

\n

spécialement en histoire et en théologie) et

\n

dispose de bonnes connaissances en médecine

\n

chinoise classique – ce qui inclue la connais­

\n

sance des méridiens, de l’énergétique et de

\n

l’acupuncture. Elle pratique régulièrement le

\n

heigung et maîtrise une forme ancestrale de

\n

Taaigik Kyun – sa frêle apparence dissimulant

\n

ainsi une combattante de bon niveau. Elle pro­

\n

digue de nombreux conseils à ses alliés et pos­

\n

sède la réputation d’être particulièrement sage

\n

et avisée pour son jeune âge.

\n

Sa spécialité mystique principale repose sur

\n

la Maîtrise climatique et la Magie d’or. Obtenu

\n

en offrande de la part d’un vénérable du temple

\n

de Tin Hau situé à Joss House Bay, son sceptre

\n

taoïste en jade constitue son sanhei et lui per­

\n

met de conjurer encore plus efficacement les

\n

éléments – et il peut servir d’arme à l’occa­

\n

sion. L’objet se nomme poétiquement Vent du

\n

Crépuscule et semble porter avec lui la bénédic­

\n

tion de la déesse tutélaire de Hong Kong.

\n

D’apparence austère, la tenue traditionnelle

\n

de Sam contraste avec son comportement cha­

\n

leureux et sa très grande empathie. Elle préfère

\n

la négociation à l’affrontement direct et se

\n

montre profondément attachée à l’ordre naturel

\n

des choses – n’hésitant pas à faire appel aux

\n

dieux si nécessaire pour l’aider à le rétablir. Du

\n

fait de son éducation tournée vers les anciens

\n

usages, elle se montre peu à l’aise avec certains

\n

aspects de la vie moderne. La familiarité des

\n

Hongkongais la met mal à l’aise et la techno­

\n

logie moderne lui apparaît trop compliquée. Sa

\n

grande confiance en elle lorsqu’elle se trouve

\n

dans son élément laisse place à une véritable

\n

réserve dès lors qu’elle se trouve confrontée aux

\n

affres du monde contemporain.

\n

Ancienne fat si, Josie est la tante de Sam. À

\n

la retraite, elle tient à présent avec son ami Eddy

\n

Lau un restaurant simplement baptisé Chez Lau

\n

où Sam a l’habitude de retrouver les membres

\n

de son groupe entre deux missions. Elle n’y paie

\n

jamais la note, contrairement à ses collègues

\n

qui aiment la taquiner au sujet de ce favoritisme

\n

familial. C’est aux funérailles de Paul Woo,

\n

un ancien partenaire occasionnel de sa tante,

\n

qu’elle rencontra ses frères et sœurs d’armes.

\n

Elle partage avec eux une vision commune du

\n

surnaturel et la volonté de protéger Hong Kong

\n

des forces du chaos.

\n

Sam déteste que la magie soit utilisée à des

\n

fins de profit personnel. Bien sûr, il lui arrive

\n

à l’occasion d’utiliser ses techniques mystiques

\n

pour accomplir des actes n’ayant rien à voir

\n

avec ses attributions de fat si  (comme sauver

\n

un temple d’un incendie grâce à une fortuite

\n

averse), mais jamais dans un but égoïste. Elle

\n

comprend toutefois que ses collègues aient

\n

besoin de gagner leur vie – mais il s’agit d’un

\n

autre des aspects de l’existence moderne qui lui

\n

déplaît fortement.

\n

les chroniques

\n

de l’étrange

", + "aspect": { + "fire": { + "chinese": "㊋", + "label": "CDE.Fire", + "value": 2 + }, + "earth": { + "chinese": "㊏", + "label": "CDE.Earth", + "value": 4 + }, + "metal": { + "chinese": "㊎", + "label": "CDE.Metal", + "value": 3 + }, + "water": { + "chinese": "㊌", + "label": "CDE.Water", + "value": 1 + }, + "wood": { + "chinese": "㊍", + "label": "CDE.Wood", + "value": 3 + } + }, + "skills": { + "art": { + "label": "CDE.Art", + "specialities": "", + "value": 0 + }, + "investigation": { + "label": "CDE.Investigation", + "specialities": "", + "value": 1 + }, + "erudition": { + "label": "CDE.Erudition", + "specialities": "Théologie", + "value": 3 + }, + "knavery": { + "label": "CDE.Knavery", + "specialities": "", + "value": 1 + }, + "wordliness": { + "label": "CDE.Wordliness", + "specialities": "", + "value": 1 + }, + "prowess": { + "label": "CDE.Prowess", + "specialities": "", + "value": 3 + }, + "sciences": { + "label": "CDE.Sciences", + "specialities": "", + "value": 2 + }, + "technologies": { + "label": "CDE.Technologies", + "specialities": "", + "value": 0 + }, + "kungfu": { + "label": "CDE.KungFu", + "specialities": "Mains Nues", + "value": 3 + }, + "rangedcombat": { + "label": "CDE.RangedCombat", + "specialities": "", + "value": 0 + } + }, + "resources": { + "supply": { + "label": "CDE.Supply", + "specialities": "Taoïstes, Bouddhistes", + "value": 2, + "debt": false + }, + "inquiry": { + "label": "CDE.Inquiry", + "specialities": "Taoïstes, Bouddhistes", + "value": 2, + "debt": false + }, + "influence": { + "label": "CDE.Influence", + "specialities": "Taoïstes", + "value": 2, + "debt": false + } + }, + "component": { + "one": { + "value": "Talisman taoïste" + }, + "two": { + "value": "Feuille de saule" + }, + "three": { + "value": "Fiole de sel" + }, + "four": { + "value": "Pétard traditionnel" + }, + "five": { + "value": "Pétard traditionnel" + }, + "six": { + "value": "Baguettes en bambou" + }, + "seven": { + "value": "Morceau de bougie" + }, + "eight": { + "value": "Morceau de bougie" + }, + "nine": { + "value": "Bâton d'encens" + }, + "zero": { + "value": "Bâton d'encens" + } + }, + "magics": { + "internalcinnabar": { + "visible": false, + "value": 0, + "speciality": { + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "alchemy": { + "visible": true, + "value": 2, + "speciality": { + "acupuncture": { + "check": true + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "masteryoftheway": { + "visible": true, + "value": 3, + "speciality": { + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": true + }, + "goldenmagic": { + "check": true + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "exorcism": { + "visible": false, + "value": 0, + "speciality": { + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": false + }, + "fungseoi": { + "check": false + } + } + }, + "geomancy": { + "visible": true, + "value": 3, + "speciality": { + "neutralization": { + "check": false + }, + "divination": { + "check": false + }, + "earthlyprayer": { + "check": false + }, + "heavenlyprayer": { + "check": true + }, + "fungseoi": { + "check": false + }, + "essence": { + "check": false + }, + "mind": { + "check": false + }, + "purification": { + "check": false + }, + "manipulation": { + "check": false + }, + "aura": { + "check": false + }, + "acupuncture": { + "check": false + }, + "elixirs": { + "check": false + }, + "poisons": { + "check": false + }, + "arsenal": { + "check": false + }, + "potions": { + "check": false + }, + "curse": { + "check": false + }, + "transfiguration": { + "check": false + }, + "necromancy": { + "check": false + }, + "climatecontrol": { + "check": false + }, + "goldenmagic": { + "check": false + }, + "invocation": { + "check": false + }, + "tracking": { + "check": false + }, + "protection": { + "check": false + }, + "punishment": { + "check": false + }, + "domination": { + "check": false + } + } + } + }, + "threetreasures": { + "heiyang": { + "value": 5, + "max": 5 + }, + "heiyin": { + "value": 5, + "max": 5 + }, + "dicelevel": { + "level0d": { + "san": { + "value": 6, + "max": 6, + "min": 0 + }, + "zing": { + "value": 4, + "max": 4, + "min": 0 + } + }, + "level1d": { + "san": { + "value": 3, + "max": 3, + "min": 0 + }, + "zing": { + "value": 1, + "max": 1, + "min": 0 + } + }, + "level2d": { + "san": { + "value": 3, + "max": 3, + "min": 0 + }, + "zing": { + "value": 3, + "max": 3, + "min": 0 + } + } + } + }, + "experience": { + "value": 6, + "max": 6, + "min": 0 + }, + "prefs": { + "typeofthrow": { + "check": true, + "choice": "0" + } + }, + "prompt": { + "typeofthrow": { + "check": true, + "choice": "0" + }, + "configure": { + "numberofdice": 0, + "aspect": 0, + "bonus": 0, + "bonusauspiciousdice": 0, + "typeofthrow": 0, + "aspectskill": 0, + "bonusmalusskill": 0, + "aspectspeciality": 0, + "rolldifficulty": 0, + "bonusmalusspeciality": 0 + } + } + }, + "items": [ + { + "name": "Vent du Crépuscule (jyuji de jade et de bois précieux)", + "type": "sanhei", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/sanhei/vent_du_crepuscule.png", + "system": { + "reference": "Sanhei de Sam Song", + "description": "

Vent du Crépuscule (jyuji de jade et de bois précieux) :

\n

• Lorsqu'il sert d'arme, affecte les créatures surnaturelles.

\n

• 1 point de Hei Yin = +2 dés à tous les jets de Géomancie (Prière céleste).

\n

• Difficulté des jets de Maîtrise de la Voie (Maîtrise climatique) - 1 concernant la réussite, mais garde sa valeur initiale pour calculer la Puissance du sort.

", + "heiType": "yin", + "properties": { + "prop1": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop2": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + }, + "prop3": { + "name": "", + "heiCost": 0, + "heiType": "yin", + "description": "" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "Sh1a2b3c4d5e6f7g", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "La Boxe du Faîte suprême", + "type": "kungfu", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/kung-fu/mains_nues.png", + "system": { + "reference": "Style de combat de Sam Song", + "description": "

La Boxe du Faîte suprême

\n

Yin / Eau / Kung-fu (Mains Nues)

\n

+ 1 défense / + 1 dégâts

\n

La souplesse face à la force

", + "orientation": "yin", + "aspect": "eau", + "skill": "kungfu", + "speciality": "Mains Nues", + "style": "+1 défense / +1 dégâts", + "techniques": { + "technique1": { + "check": false, + "name": "La souplesse face à la force", + "activation": "defense", + "technique": "

La souplesse face à la force

Le pratiquant utilise l'élan et la force de son adversaire pour le déséquilibrer et le renverser. En cas de réussite d'une action de défense, le personnage peut immédiatement tenter de faire chuter son adversaire sans utiliser d'action supplémentaire, en effectuant un jet de Kung-fu opposé à la Prouesse (ou à l'Aptitude physique pour un PNJ) de la cible.

" + } + }, + "notes": "

Vos notes…

" + }, + "_id": "Kf1a2b3c4d5e6f7g", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Ne possède que ses vêtements, sa sacoche d'ingrédients, des aiguilles d'acupuncture et son sanhei", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/sac.png", + "system": { + "reference": "", + "description": "

Sam ne possède que ses vêtements, sa sacoche d'ingrédients, des aiguilles d'acupuncture et son sanhei. Elle mène une vie simple et dépouillée, consacrée à son art.

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "Eq1a2b3c4d5e6f7g", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Sam vit dans les temples et monastères qui l'accueillent gratuitement en échange de ses services", + "type": "item", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/jetons/aides_de_jeu/jetons_habitats/temple.png", + "system": { + "reference": "", + "description": "

Sam vit dans les temples et monastères qui l'accueillent gratuitement en échange de ses services. Elle rend visite régulièrement à sa tante Josie, propriétaire d'un restaurant local.

", + "quantity": 1, + "weight": 0, + "notes": "" + }, + "_id": "Eq2a2b3c4d5e6f7g", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Alchimie (Eau) : Acupuncture", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/EAU.gif", + "system": { + "reference": "Manuel de base", + "description": "

Alchimie (Eau)

L'Alchimie est l'art de manipuler le hei à travers des substances et des techniques corporelles. Elle permet au fat si de créer des élixirs, des potions, des poisons et d'utiliser l'acupuncture pour soigner ou influencer le corps et l'esprit.

Acupuncture (Eau)

Le PJ est capable d'utiliser des aiguilles d'acupuncture pour manipuler le flux de hei dans le corps d'une personne. Cette technique ancestrale permet de soigner les blessures, de purifier les énergies néfastes et de rétablir l'équilibre entre le Yin et le Yang chez le patient. L'acupuncture peut également être utilisée pour apaiser les esprits troublés ou pour induire des états de conscience modifiés.

", + "specialityname": "Acupuncture", + "associatedelement": "eau", + "heiType": "yin", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "15 minutes", + "realizationtimeaccelerated": "3 crans d'initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de soins utiles, avec leur coût en Puissance :

", + "notes": "

Vos notes…

", + "discipline": "alchemy", + "hei": "" + }, + "_id": "Sp1a2b3c4d5e6f7g", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Maîtrise de la Voie (Terre) : Maîtrise climatique", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/TERRE.gif", + "system": { + "reference": "Manuel de base", + "description": "

Maîtrise de la Voie (Terre)

La Maîtrise de la Voie est l'art suprême du fat si, la compréhension intime du Tao qui permet d'agir directement sur la réalité. Cette discipline regroupe les pouvoirs les plus puissants et les plus subtils : contrôle des éléments, enchantement des métaux précieux, malédictions et bénédictions.

Maîtrise climatique (Terre)

Le PJ est capable d'influencer le climat local, d'apaiser une tempête ou de provoquer une pluie bienfaisante. Cette spécialité permet de modifier les conditions météorologiques sur une zone limitée, que ce soit pour favoriser les récoltes, disperser un brouillard maléfique ou créer un vent propice à la navigation. Les effets peuvent être subtils (brise légère) ou spectaculaires (orages soudains).

", + "specialityname": "Maîtrise climatique", + "associatedelement": "terre", + "heiType": "yang", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "30 minutes", + "realizationtimeaccelerated": "6 crans d'initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de manipulations climatiques, avec leur coût en Puissance :

", + "notes": "

Vos notes…

", + "discipline": "masteryoftheway", + "hei": "" + }, + "_id": "Sp2a2b3c4d5e6f7g", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Maîtrise de la Voie (Terre) : Magie d'or", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/TERRE.gif", + "system": { + "reference": "Manuel de base", + "description": "

Maîtrise de la Voie (Terre)

La Maîtrise de la Voie est l'art suprême du fat si, la compréhension intime du Tao qui permet d'agir directement sur la réalité. Cette discipline regroupe les pouvoirs les plus puissants et les plus subtils.

Magie d'or (Terre)

Le PJ est capable d'enchanter les métaux précieux et les objets d'or, d'argent et de jade. Cette spécialité permet de conférer des propriétés magiques aux bijoux, aux armes et aux armures, ou d'utiliser l'or comme catalyseur pour d'autres sorts. Les objets enchantés par la Magie d'or deviennent des talismans puissants, capables de protéger leur porteur ou de canaliser des énergies spirituelles.

", + "specialityname": "Magie d'or", + "associatedelement": "terre", + "heiType": "yang", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "1 heure", + "realizationtimeaccelerated": "6 crans d'initiative", + "flashback": "non", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive d'enchantements, avec leur coût en Puissance :

", + "notes": "

Vos notes…

", + "discipline": "masteryoftheway", + "hei": "" + }, + "_id": "Sp3a2b3c4d5e6f7g", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + }, + { + "name": "Géomancie (Bois) : Prière céleste", + "type": "spell", + "img": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/aspects/BOIS.gif", + "system": { + "reference": "Manuel de base", + "description": "

Géomancie (Bois)

La Géomancie recouvre la compréhension qu'a le fat si des flux d'énergie qui circulent à travers le cosmos, ainsi que sa capacité à les manipuler dans une certaine mesure. Il voit ainsi la façon dont l'énergie du Tao baigne le monde et le relie au Ciel – mais aussi aux Dix Enfers.

Prière céleste (Feu)

Le PJ connaît les rituels et paroles permettant d'appeler la bénédiction d'une divinité céleste. En général, on sollicite les dieux pour qu'ils nous prêtent force et assistance durant une épreuve particulière et planifiée. Sam voue une dévotion particulière au Kirin Jaune, son gardien, et aux divinités de la Terre.

", + "specialityname": "Prière céleste", + "associatedelement": "feu", + "heiType": "yang", + "heiCost": 0, + "difficulty": 0, + "realizationtimeritual": "30 minutes", + "realizationtimeaccelerated": "non applicable", + "flashback": "oui", + "components": "

Composantes

", + "effects": "

Effets

", + "examples": "

Exemples

Voici une liste non exhaustive de prières utiles, avec leur coût en Puissance :

", + "notes": "

Vos notes…

", + "discipline": "geomancy", + "hei": "" + }, + "_id": "Sp4a2b3c4d5e6f7g", + "effects": [], + "folder": null, + "sort": 0, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351490, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": null + }, + "ownership": { + "default": 0 + } + } + ], + "prototypeToken": { + "name": "Sam Song", + "displayName": 0, + "actorLink": false, + "width": 1, + "height": 1, + "depth": 1, + "texture": { + "src": "https://assets.forge-vtt.com/630dd9fa56bd61d804eb1dec/systems/chroniquesdeletrange/images/fat_si/sam.png", + "anchorX": 0.5, + "anchorY": 0.5, + "fit": "contain", + "scaleX": 1, + "scaleY": 1, + "tint": "#ffffff", + "alphaThreshold": 0.75 + }, + "lockRotation": false, + "rotation": 0, + "alpha": 1, + "disposition": -1, + "displayBars": 0, + "bar1": { + "attribute": "threetreasures.heiyang" + }, + "bar2": { + "attribute": "threetreasures.heiyin" + }, + "light": { + "negative": false, + "priority": 0, + "alpha": 0.5, + "angle": 360, + "bright": 0, + "color": null, + "coloration": 1, + "dim": 0, + "attenuation": 0.5, + "luminosity": 0.5, + "saturation": 0, + "contrast": 0, + "shadows": 0, + "animation": { + "type": null, + "speed": 5, + "intensity": 5, + "reverse": false + }, + "darkness": { + "min": 0, + "max": 1 + } + }, + "sight": { + "enabled": false, + "range": 0, + "angle": 360, + "visionMode": "basic", + "color": null, + "attenuation": 0.1, + "brightness": 0, + "saturation": 0, + "contrast": 0 + }, + "detectionModes": {}, + "occludable": { + "radius": 0 + }, + "ring": { + "enabled": false, + "colors": { + "ring": null, + "background": null + }, + "effects": 1, + "subject": { + "scale": 1, + "texture": null + } + }, + "turnMarker": { + "mode": 1, + "animation": null, + "src": null, + "disposition": false + }, + "movementAction": null, + "flags": {}, + "randomImg": false, + "appendNumber": false, + "prependAdjective": false + }, + "effects": [], + "folder": null, + "flags": {}, + "_stats": { + "coreVersion": "14.361", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "13.0.0", + "createdTime": 1778096351490, + "modifiedTime": 1778096351493, + "lastModifiedBy": "yRsJfvQWHZ23lClm", + "compendiumSource": null, + "duplicateSource": null, + "exportSource": { + "worldId": "cde", + "uuid": "Actor.JuY7qnjxuMvGo2Nu", + "coreVersion": "14.363", + "systemId": "fvtt-chroniques-de-l-etrange", + "systemVersion": "14.0.3" + } + }, + "ownership": { + "default": 0 + } +} \ No newline at end of file diff --git a/system.json b/system.json index b87750b..d3f3b63 100644 --- a/system.json +++ b/system.json @@ -126,6 +126,18 @@ "ASSISTANT": "OWNER" } }, + { + "name": "cde-pretires", + "label": "Prétirés", + "type": "Actor", + "path": "packs/cde-pretires", + "system": "fvtt-chroniques-de-l-etrange", + "flags": {}, + "ownership": { + "PLAYER": "NONE", + "ASSISTANT": "OWNER" + } + }, { "name": "cde-help", "label": "Aide en ligne",