commit 068fca00e5bb13a8d22d57a1e0696c311f6c8e59 Author: LeRatierBretonnier Date: Thu Mar 26 00:18:04 2026 +0100 Neo-Tokyo Neon Noir design pour fiches items - Nouvelle palette : #080c14 fond, accents néon par type (#00d4d4 item, #ff3d5a kungfu, #4a9eff spell, #cc44ff supernatural) - Nouveaux composants LESS : .cde-neon-header (clip-path angulaire + accent line), .cde-avatar (clip-path), .cde-stat-grid/.cde-stat-cell (style terminal), .cde-badge (parallélogramme), .cde-neon-tabs (underline néon animé), .cde-check-cell - Fix layout : .cde-sheet width: 100% + height: 100% + overflow: hidden, .cde-tab-body flex: 1 + min-height: 0, .cde-notes-editor flex stretch - Fix positions : DEFAULT_OPTIONS height explicite pour tous les types (item 620x580, spell 660x680, kungfu 720x680, supernatural 560x520) - 4 templates items reécrits avec nouvelles classes et structure épurée Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..35228fe --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +# IDE +.idea/ +.vs/ +.history/ + +# Node Modules +node_modules/ +package-lock.json + +chroniquesdeletrange.lock diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..0245760 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,14 @@ +2.3.3 +- Image monastère titre sans accentuations + +2.3.2 +- Correction CSS sur fiche de créature + +2.3.1 +- Thème de dés par défaut dans Dice-so-Nice! + +2.3.0 +- Ajout avatar dans Tchat + +--- +Bugs connus et non encore traités \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..8ace487 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,60 @@ +IMAGES +- Exceptées les peties icônes N&B de d10 et celles de game-icon.org, +les images des fichiers du dossier images utilisées dans ce logiciel sont : +Copyright © 2023-2024 Antre Monde Éditions ; +elles sont leurs propriétés (et celles de leurs auteurs respectifs) +et elles ne peuvent ni être reproduites ni réutilisées en dehors de +ce logiciel, sans leur autorisation. +- les icônes rondes, blanches sur fond noir, sont issues du site game-icons.org +et sont sous licence https://creativecommons.org/licenses/by/3.0/ +Vous pouvez retrouver le nom de leurs auteurs respectifs sur ce site. +- 'carte_hk.jpg', d'après 'wahaha2005', est sous GNU Free Documentation License +version 1.2 ou toute version ultérieure publiée par la Free Software Foundation, +https://commons.wikimedia.org/wiki/File:Hong_Kong_18_Districts_Blank_Map.svg +- 'loksyu_roue_d_initiative.jpg' est une création originale de 'Darkwin'. + + +MUSIQUES / MUSICS: MODULE À PART À PARTIR DE LA v. 1.0.0 +- Les musiques de Mathieu Verdier, composées spécialement pour les CdE, +à l'occasion du financement participatif de ce jeu de rôle, +sont librement téléchargeables sur le site d'Antre Monde Éditions : +https://antre-monde.com/les-chroniques-de-letrengae/ + + +CODE / CODING: +- David R.D. 'Mystery Man From Outerspace' Bercovici +- Christophe 'Kristov / Qaw' Laudon (il a grandement collaboré !) + +Avec l'aide précieuse de / with precious help from +(sur / on "La Fonderie" Discord - Many thanks to them!): +- LeRatierBretonnien +- Maxime +(et d'autres / and others) + + +COMPENDIUMS: MODULES À PART À PARTIR DE LA v. 1.0.0 +Basés sur / based on: +Antre Monde Éditions' 'Les Chroniques de l'étrange' RPG books by: +- Romain 'Rom1' d'Huissier +- Cédric 'JTR the Hobbit' Lameire + +Saisis par / Entered by: +David R.D. 'Mystery Man From Outerspace' Bercovici + + +MODULES: MODULES À PART À PARTIR DE LA v. 1.0.0 +Les Compendiums sont téléchargeables depuis deux sources : +- Compendiums gratuits : +https://antre-monde.com/les-chroniques-de-letrengae/ +- Compendiums payants : +https://preview.drivethrurpg.com/fr/publisher/15811/antre-monde-editions + + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..d804147 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Les Chroniques de l'étrange + +A rudimentary implementation of Les Chroniques de l'étrange for Foundry VTT. + +The 2 integrated CdE d10 die sets – for dice-so-nice extension – look nicer with 'white', 'paper', and plastic' dice options selected in this very extension. \ No newline at end of file diff --git a/css/cde-theme.css b/css/cde-theme.css new file mode 100644 index 0000000..4b0a060 --- /dev/null +++ b/css/cde-theme.css @@ -0,0 +1,735 @@ +/* ------------------------------------------- + Fonts + ---------------------------------------------*/ +@font-face { + font-family: "DeliusUnicaseBold"; + src: url(../fonts/DeliusUnicase-Bold.ttf); +} +@font-face { + font-family: "DeliusUnicase"; + src: url(../fonts/DeliusUnicase-Regular.ttf); +} +.fvtt-chroniques-de-l-etrange { + --cde-bg: #080c14; + --cde-surface: #101622; + --cde-border: #1a2436; + --cde-text: #e2e8f4; + --cde-muted: #5b6b88; + --cde-item: #00d4d4; + --cde-kungfu: #ff3d5a; + --cde-spell: #4a9eff; + --cde-supernatural: #cc44ff; + color: #e2e8f4; + background: #080c14; +} +.cde-sheet { + background: #080c14; + color: #e2e8f4; + font-family: "DeliusUnicase", sans-serif; + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + overflow: hidden; +} +.cde-sheet input, +.cde-sheet select, +.cde-sheet textarea { + font-family: inherit; + color: #e2e8f4; + background: transparent; +} +.cde-neon-header { + position: relative; + background: #101622; + display: grid; + grid-template-columns: 90px 1fr; + gap: 14px; + padding: 12px 14px 14px; + overflow: hidden; + clip-path: polygon(0 0, 100% 0, 100% calc(100% - 14px), calc(100% - 14px) 100%, 0 100%); +} +.cde-neon-header::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 3px; + background: #263853; +} +.cde-neon-header::after { + content: ""; + position: absolute; + inset: 0; + background: radial-gradient(ellipse at 0% 0%, rgba(38, 56, 83, 0.3) 0%, transparent 50%); + pointer-events: none; +} +.cde-neon-header.item::before { + background: #00d4d4; + box-shadow: 0 0 10px rgba(0, 212, 212, 0.5); +} +.cde-neon-header.kungfu::before { + background: #ff3d5a; + box-shadow: 0 0 10px rgba(255, 61, 90, 0.5); +} +.cde-neon-header.spell::before { + background: #4a9eff; + box-shadow: 0 0 10px rgba(74, 158, 255, 0.5); +} +.cde-neon-header.supernatural::before { + background: #cc44ff; + box-shadow: 0 0 10px rgba(204, 68, 255, 0.5); +} +.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 #263853; + background: #0d1520; + cursor: pointer; + position: relative; + z-index: 1; +} +.cde-header-content { + position: relative; + z-index: 1; + display: flex; + flex-direction: column; + gap: 8px; + min-width: 0; +} +.cde-item-name { + margin: 0; +} +.cde-item-name input { + width: 100%; + border: none; + border-bottom: 2px solid #263853; + background: transparent; + color: #e2e8f4; + font-size: 18px; + font-family: "DeliusUnicase", sans-serif; + font-weight: 700; + padding: 4px 0 6px; + letter-spacing: 0.04em; + text-transform: uppercase; + outline: none; + transition: border-color 0.15s; +} +.cde-item-name input:focus { + border-bottom-color: #00d4d4; +} +.cde-neon-header.kungfu .cde-item-name input:focus { + border-bottom-color: #ff3d5a; +} +.cde-neon-header.spell .cde-item-name input:focus { + border-bottom-color: #4a9eff; +} +.cde-neon-header.supernatural .cde-item-name input:focus { + border-bottom-color: #cc44ff; +} +.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; +} +.cde-stat-label { + font-size: 10px; + font-family: monospace; + text-transform: uppercase; + letter-spacing: 0.1em; + color: #5b6b88; + white-space: nowrap; +} +.cde-stat-value { + font-size: 15px; + font-weight: 800; + color: #e2e8f4; + letter-spacing: 0.02em; +} +.cde-stat-cell input, +.cde-stat-cell select { + width: 100%; + background: transparent; + border: none; + border-bottom: 1px solid #1a2436; + color: #e2e8f4; + font-size: 14px; + padding: 4px 0; + outline: none; + transition: border-color 0.15s; +} +.cde-stat-cell input:focus, +.cde-stat-cell select:focus { + border-bottom-color: #00d4d4; +} +.cde-neon-header.kungfu .cde-stat-cell input:focus, +.cde-neon-header.kungfu .cde-stat-cell select:focus { + border-bottom-color: #ff3d5a; +} +.cde-neon-header.spell .cde-stat-cell input:focus, +.cde-neon-header.spell .cde-stat-cell select:focus { + border-bottom-color: #4a9eff; +} +.cde-neon-header.supernatural .cde-stat-cell input:focus, +.cde-neon-header.supernatural .cde-stat-cell select:focus { + border-bottom-color: #cc44ff; +} +.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: #080c14; + cursor: default; + white-space: nowrap; +} +.cde-badge.item { + background: #00d4d4; +} +.cde-badge.kungfu { + background: #ff3d5a; +} +.cde-badge.spell { + background: #4a9eff; +} +.cde-badge.supernatural { + background: #cc44ff; +} +.cde-badge.character { + background: #00d4d4; +} +.cde-badge.npc { + background: #cc44ff; +} +.cde-neon-tabs { + display: flex; + gap: 0; + border-bottom: 1px solid #1a2436; + background: transparent; + margin-top: 8px; + overflow-x: auto; +} +.cde-neon-tabs .item { + padding: 8px 14px; + font-size: 11px; + font-family: monospace; + text-transform: uppercase; + letter-spacing: 0.1em; + color: #5b6b88; + border-bottom: 2px solid transparent; + white-space: nowrap; + transition: color 0.15s, border-color 0.15s; + cursor: pointer; +} +.cde-neon-tabs .item:hover { + color: #e2e8f4; +} +.cde-neon-tabs .item.active { + color: #00d4d4; + border-bottom-color: #00d4d4; +} +.item.kungfu .cde-neon-tabs .item.active, +form.kungfu .cde-neon-tabs .item.active { + color: #ff3d5a; + border-bottom-color: #ff3d5a; +} +form.spell .cde-neon-tabs .item.active { + color: #4a9eff; + border-bottom-color: #4a9eff; +} +form.supernatural .cde-neon-tabs .item.active { + color: #cc44ff; + border-bottom-color: #cc44ff; +} +.cde-tab-body { + flex: 1 1 0; + min-height: 0; + padding: 12px; + background: #0d1520; + border: 1px solid #1a2436; + border-top: none; + border-radius: 0 0 8px 8px; + overflow-y: auto; +} +.cde-tab-body .tab { + display: none; + flex-direction: column; + gap: 12px; + height: 100%; +} +.cde-tab-body .tab.active { + display: flex; +} +.cde-card { + background: #101622; + border: 1px solid #1a2436; + border-radius: 8px; + padding: 12px; + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.4); +} +.cde-card .tab-sous-titre { + font-family: monospace; + font-size: 10px; + letter-spacing: 0.1em; + text-transform: uppercase; + color: #5b6b88; + margin-bottom: 6px; + border-bottom: 1px solid #1a2436; + padding-bottom: 4px; +} +.cde-notes-editor { + flex: 1 1 0; + min-height: 0; + display: flex; + flex-direction: column; +} +.cde-notes-editor .editor { + flex: 1 1 0; + min-height: 200px; + border-radius: 8px; + border: 1px solid #1a2436; + background: #101622; +} +.cde-technique-card { + border-left: 3px solid #ff3d5a; + background: rgba(16, 22, 34, 0.8); +} +.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; +} +.cde-technique-title input { + flex: 1; + background: transparent; + border: none; + border-bottom: 1px solid #1a2436; + color: #e2e8f4; + font-size: 15px; + font-weight: 700; + padding: 4px 0; + outline: none; +} +.cde-technique-title input:focus { + border-bottom-color: #ff3d5a; +} +.cde-technique-meta { + display: flex; + gap: 8px; + flex-wrap: wrap; + align-items: flex-end; +} +.cde-technique-body .editor { + min-height: 180px; +} +.cde-check-cell { + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; + min-width: 70px; +} +.cde-check-cell label { + font-size: 10px; + font-family: monospace; + text-transform: uppercase; + letter-spacing: 0.08em; + color: #5b6b88; +} +.cde-check-cell input[type="checkbox"] { + width: 18px; + height: 18px; + accent-color: #ff3d5a; + cursor: pointer; +} +.cde-chip { + background: rgba(16, 22, 34, 0.75); + border: 1px solid #1a2436; + border-radius: 8px; + padding: 8px 10px; + display: inline-flex; + flex-direction: column; + gap: 6px; + min-width: 140px; +} +.cde-chip label { + font-size: 10px; + font-family: monospace; + letter-spacing: 0.08em; + text-transform: uppercase; + color: #5b6b88; + margin: 0; +} +.cde-chip input, +.cde-chip select { + width: 100%; + border: none; + border-bottom: 1px solid #1a2436; + background: transparent; + color: #e2e8f4; + padding: 4px 0; + outline: none; +} +.cde-chip input:focus, +.cde-chip select:focus { + border-bottom-color: #00d4d4; +} +.cde-chip input[type="checkbox"] { + width: auto; + align-self: flex-start; + accent-color: #00d4d4; +} +.cde-chip.mini { + min-width: 100px; + padding: 6px 8px; +} +.cde-meta-row { + display: flex; + gap: 12px; + flex-wrap: wrap; + align-items: flex-end; + margin-top: 8px; +} +.cde-meta-row.compact { + gap: 8px; +} +.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: #080c14; +} +.cde-pill.item { + background: #00d4d4; +} +.cde-pill.kungfu { + background: #ff3d5a; +} +.cde-pill.spell { + background: #4a9eff; +} +.cde-pill.supernatural { + background: #cc44ff; +} +.cde-pill.character { + background: #00d4d4; +} +.cde-pill.npc { + background: #cc44ff; +} +.cde-header { + background: #101622; + border: 1px solid #1a2436; + border-radius: 8px; + padding: 12px; + display: grid; + grid-template-columns: 120px 1fr; + gap: 12px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.6); +} +.cde-header .profile-img { + width: 100%; + border-radius: 8px; + border: 1px solid #1a2436; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.6); + object-fit: cover; +} +.cde-header .header-fields h1.charname input { + width: 100%; + border: none; + border-bottom: 2px solid #263853; + background: transparent; + color: #e2e8f4; + font-size: 20px; + font-family: "DeliusUnicase", sans-serif; + padding: 4px 0 8px; + outline: none; +} +.cde-header .header-fields h1.charname input:focus { + border-bottom-color: #00d4d4; +} +.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 #1a2436; + background: rgba(16, 22, 34, 0.7); + color: #e2e8f4; + border-radius: 999px; + padding: 6px 10px; + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.4); + cursor: pointer; +} +.cde-icon-button:hover { + border-color: #263853; +} +.cde-quick-meta { + display: flex; + align-items: center; + gap: 12px; + flex-wrap: wrap; +} +.cde-initiative-card { + border: 1px solid #1a2436; + border-radius: 8px; + padding: 10px; + background: rgba(16, 22, 34, 0.7); + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.4); + display: inline-flex; + flex-direction: column; + gap: 6px; +} +.cde-initiative-controls { + display: inline-flex; + align-items: center; + gap: 8px; +} +.cde-initiative-controls img { + width: 30px; + height: 30px; + border: 1px solid #1a2436; + border-radius: 5px; + background: rgba(8, 12, 20, 0.9); + cursor: pointer; +} +.cde-initiative-controls img:hover { + border-color: #4a9eff; + box-shadow: 0 0 0 2px rgba(74, 158, 255, 0.25); +} +.cde-initiative-value { + min-width: 28px; + text-align: center; + font-weight: 800; +} +.cde-grid { + display: grid; + gap: 12px; +} +.cde-grid.two { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} +.cde-grid.three { + grid-template-columns: repeat(3, minmax(0, 1fr)); +} +.cde-field label { + display: block; + margin-bottom: 4px; + font-size: 10px; + font-family: monospace; + text-transform: uppercase; + letter-spacing: 0.08em; + color: #5b6b88; +} +.cde-field input, +.cde-field select, +.cde-field textarea { + width: 100%; + border: none; + border-bottom: 1px solid #1a2436; + background: transparent; + color: #e2e8f4; + padding: 5px 0; + outline: none; +} +.cde-field input:focus, +.cde-field select:focus, +.cde-field textarea:focus { + border-bottom-color: #00d4d4; +} +.cde-section-title { + font-family: monospace; + font-size: 10px; + font-weight: 800; + letter-spacing: 0.1em; + text-transform: uppercase; + color: #5b6b88; + margin-bottom: 8px; + border-bottom: 1px solid #1a2436; + 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: rgba(26, 36, 54, 0.8); + color: #5b6b88; + border: 1px solid #1a2436; +} +.cde-data-table table { + width: 100%; + border-collapse: collapse; + color: #e2e8f4; +} +.cde-data-table td { + padding: 7px 8px; + border-bottom: 1px solid #1a2436; +} +.cde-data-table tr:nth-child(even) { + background: rgba(16, 22, 34, 0.5); +} +.cde-data-table tr:hover { + background: rgba(38, 56, 83, 0.2); +} +.cde-data-table input, +.cde-data-table select { + width: 100%; + border: none; + border-bottom: 1px solid #1a2436; + background: transparent; + color: #e2e8f4; + padding: 4px 0; + outline: none; +} +.cde-centered-card { + display: flex; + gap: 12px; + align-items: center; + justify-content: space-between; + flex-wrap: wrap; +} +.cde-centered-card img { + max-height: 280px; + border-radius: 8px; + border: 1px solid #1a2436; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.6); +} +.loksyu_wrap .schema, +.tinji_wrap .schema { + display: grid; + gap: 12px; + align-items: center; +} +.loksyu-visual, +.tinji-visual { + max-width: 100%; + border-radius: 8px; + border: 1px solid #1a2436; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.6); +} +.cde-tabs { + margin-top: 12px; + border-bottom: 1px solid #1a2436; +} +.cde-tabs .item { + color: #5b6b88; + padding: 8px 12px; + font-size: 11px; + font-family: monospace; + text-transform: uppercase; + letter-spacing: 0.08em; +} +.cde-tabs .item:hover { + color: #e2e8f4; +} +.cde-tabs .item.active { + color: #00d4d4; + background: #101622; + border: 1px solid #1a2436; + border-bottom: 1px solid #101622; + border-radius: 8px 8px 0 0; +} +/* ============================================= + Global UI Rules + =============================================*/ +#logo { + content: url("/systems/fvtt-chroniques-de-l-etrange/images/logo_jeu.png"); + 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: "DeliusUnicase"; +} +/* concerne les pages de journaux */ +.journal-header input { + font-family: "DeliusUnicase"; +} +.journal-entry-page h1 { + font-family: "DeliusUnicaseBold"; + text-align: center; + color: hsla(249, 66%, 58%, 0.874); + border-bottom: 1px solid orange; + border-top: 1px solid orange; +} +.journal-entry-page h2 { + font-family: "DeliusUnicaseBold"; + 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: "DeliusUnicaseBold"; + 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; +} diff --git a/css/cde-theme.less b/css/cde-theme.less new file mode 100644 index 0000000..c184f63 --- /dev/null +++ b/css/cde-theme.less @@ -0,0 +1,833 @@ + +/* ------------------------------------------- + Fonts + ---------------------------------------------*/ + +@font-face { + font-family: "DeliusUnicaseBold"; + src: url(../fonts/DeliusUnicase-Bold.ttf); +} + +@font-face { + font-family: "DeliusUnicase"; + src: url(../fonts/DeliusUnicase-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: #5b6b88; + +// Accents néon par type +@cde-item: #00d4d4; +@cde-kungfu: #ff3d5a; +@cde-spell: #4a9eff; +@cde-supernatural: #cc44ff; + +@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: "DeliusUnicase", sans-serif; + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + overflow: hidden; + + input, select, textarea { + font-family: inherit; + color: @cde-text; + background: transparent; + } +} + +// ============================================================ +// 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%); } } +} + +// 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: "DeliusUnicase", 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; } + +// ============================================================ +// 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; +} + +.cde-stat-label { + font-size: 10px; + font-family: monospace; + 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, +.cde-stat-cell select { + 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-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; } + +// ============================================================ +// 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; } +} + +// ============================================================ +// 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: monospace; + 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; + } + } +} + +// Per-type active tab color +.item.kungfu .cde-neon-tabs .item.active, +form.kungfu .cde-neon-tabs .item.active { color: @cde-kungfu; border-bottom-color: @cde-kungfu; } +form.spell .cde-neon-tabs .item.active { color: @cde-spell; border-bottom-color: @cde-spell; } +form.supernatural .cde-neon-tabs .item.active { color: @cde-supernatural; border-bottom-color: @cde-supernatural; } + +// ============================================================ +// 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; + height: 100%; + } + + .tab.active { + display: flex; + } +} + +// ============================================================ +// 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: monospace; + 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: monospace; + 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: monospace; + letter-spacing: 0.08em; + text-transform: uppercase; + color: @cde-muted; + margin: 0; + } + + input, select { + 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; } + } + + 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; } +} + +// ============================================================ +// 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: "DeliusUnicase", 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-radius: @cde-radius; + padding: 10px; + background: fade(@cde-surface, 70%); + box-shadow: @cde-shadow-sm; + display: inline-flex; + flex-direction: column; + gap: 6px; +} + +.cde-initiative-controls { + display: inline-flex; + align-items: center; + gap: 8px; + + img { + width: 30px; + height: 30px; + border: 1px solid @cde-border; + border-radius: 5px; + background: fade(@cde-bg, 90%); + cursor: pointer; + + &:hover { + border-color: @cde-spell; + box-shadow: 0 0 0 2px fade(@cde-spell, 25%); + } + } +} + +.cde-initiative-value { + min-width: 28px; + text-align: center; + font-weight: 800; +} + +// ============================================================ +// 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: monospace; + text-transform: uppercase; + letter-spacing: 0.08em; + color: @cde-muted; + } + + input, select, 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; } + } +} + +.cde-section-title { + font-family: monospace; + 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, select { + width: 100%; + border: none; + border-bottom: 1px solid @cde-border; + background: transparent; + color: @cde-text; + 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; + } +} + +.loksyu_wrap .schema, +.tinji_wrap .schema { + display: grid; + gap: @cde-gap; + align-items: center; +} + +.loksyu-visual, +.tinji-visual { + max-width: 100%; + border-radius: @cde-radius; + border: 1px solid @cde-border; + box-shadow: @cde-shadow; +} + +// 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: monospace; + 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.png"); + 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: "DeliusUnicase"; +} + + + +/* concerne les pages de journaux */ + +.journal-header input { + font-family: "DeliusUnicase"; +} + +.journal-entry-page h1 { + font-family: "DeliusUnicaseBold"; + 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: "DeliusUnicaseBold"; + 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: "DeliusUnicaseBold"; + 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; +} diff --git a/dist/system.js b/dist/system.js new file mode 100644 index 0000000..3482c12 --- /dev/null +++ b/dist/system.js @@ -0,0 +1,1187 @@ +// src/config/constants.js +var SYSTEM_ID = "fvtt-chroniques-de-l-etrange"; +var ACTOR_TYPES = { + character: "character", + npc: "npc", + tinji: "tinji", + loksyu: "loksyu" +}; +var ITEM_TYPES = { + item: "item", + kungfu: "kungfu", + spell: "spell", + supernatural: "supernatural" +}; +var SUBTYPES = { + weapon: { id: "weapon", label: "CDE.Weapon" }, + armor: { id: "armor", label: "CDE.Armor" }, + sanhei: { id: "sanhei", label: "CDE.Sanhei" }, + other: { id: "other", label: "CDE.Other" } +}; +var MAGICS = { + internalcinnabar: { + id: "internalcinnabar", + background: "linear-grey", + label: "CDE.InternalCinnabar", + aspectlabel: "CDE.Metal", + speciality: { + essence: { label: "CDE.Essence", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.png", labelicon: "Yin", labelelement: "CDE.Metal" }, + mind: { label: "CDE.Mind", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.png", labelicon: "Yin", labelelement: "CDE.Water" }, + purification: { label: "CDE.Purification", classicon: "icon-yinyang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/yin_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.png", labelicon: "Yin/Yang", labelelement: "CDE.Earth" }, + manipulation: { label: "CDE.Manipulation", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.png", labelicon: "Yang", labelelement: "CDE.Fire" }, + aura: { label: "CDE.Aura", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.png", labelicon: "Yang", labelelement: "CDE.Wood" } + } + }, + alchemy: { + id: "alchemy", + background: "linear-blue", + label: "CDE.Alchemy", + aspectlabel: "CDE.Water", + speciality: { + acupuncture: { label: "CDE.Acupuncture", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.png", labelicon: "Yin", labelelement: "CDE.Metal" }, + elixirs: { label: "CDE.Elixirs", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.png", labelicon: "Yin", labelelement: "CDE.Water" }, + poisons: { label: "CDE.Poisons", classicon: "icon-yinyang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/yin_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.png", labelicon: "Yin/Yang", labelelement: "CDE.Earth" }, + arsenal: { label: "CDE.Arsenal", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.png", labelicon: "Yang", labelelement: "CDE.Fire" }, + potions: { label: "CDE.Potions", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.png", labelicon: "Yang", labelelement: "CDE.Wood" } + } + }, + masteryoftheway: { + id: "masteryoftheway", + background: "linear-brown", + label: "CDE.MasteryOfTheWay", + aspectlabel: "CDE.Earth", + speciality: { + curse: { label: "CDE.Curse", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.png", labelicon: "Yin", labelelement: "CDE.Metal" }, + transfiguration: { label: "CDE.Transfiguration", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.png", labelicon: "Yin", labelelement: "CDE.Water" }, + necromancy: { label: "CDE.Necromancy", classicon: "icon-yinyang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/yin_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.png", labelicon: "Yin/Yang", labelelement: "CDE.Earth" }, + climatecontrol: { label: "CDE.ClimateControl", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.png", labelicon: "Yang", labelelement: "CDE.Fire" }, + goldenmagic: { label: "CDE.GoldenMagic", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.png", labelicon: "Yang", labelelement: "CDE.Wood" } + } + }, + exorcism: { + id: "exorcism", + background: "linear-red", + label: "CDE.Exorcism", + aspectlabel: "CDE.Fire", + speciality: { + invocation: { label: "CDE.Invocation", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.png", labelicon: "Yin", labelelement: "CDE.Metal" }, + tracking: { label: "CDE.Tracking", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.png", labelicon: "Yin", labelelement: "CDE.Water" }, + protection: { label: "CDE.Protection", classicon: "icon-yinyang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/yin_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.png", labelicon: "Yin/Yang", labelelement: "CDE.Earth" }, + punishment: { label: "CDE.Punishment", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.png", labelicon: "Yang", labelelement: "CDE.Fire" }, + domination: { label: "CDE.Domination", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.png", labelicon: "Yang", labelelement: "CDE.Wood" } + } + }, + geomancy: { + id: "geomancy", + background: "linear-green", + label: "CDE.Geomancy", + aspectlabel: "CDE.Wood", + speciality: { + neutralization: { label: "CDE.Neutralization", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.png", labelicon: "Yin", labelelement: "CDE.Metal" }, + divination: { label: "CDE.Divination", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.png", labelicon: "Yin", labelelement: "CDE.Water" }, + earthlyprayer: { label: "CDE.EarthlyPrayer", classicon: "icon-yinyang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/yin_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.png", labelicon: "Yin/Yang", labelelement: "CDE.Earth" }, + heavenlyprayer: { label: "CDE.HeavenlyPrayer", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.png", labelicon: "Yang", labelelement: "CDE.Fire" }, + fungseoi: { label: "CDE.Fungseoi", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.png", labelicon: "Yang", labelelement: "CDE.Wood" } + } + } +}; +var TEMPLATE_PARTIALS = [ + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-skills.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-magics.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-nghang.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-treasures.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-items.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-kungfus.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-spells.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-npc-supernaturals.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-npc-spells.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-npc-kungfus.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-npc-items.html" +]; + +// src/config/localize.js +function preLocalizeConfig() { + const localizeConfigObject = (obj, keys) => { + for (const o of Object.values(obj)) { + for (const key of keys) { + o[key] = game.i18n.localize(o[key]); + } + } + }; + localizeConfigObject(SUBTYPES, ["label"]); + Object.values(MAGICS).forEach((magic) => { + magic.label = game.i18n.localize(magic.label); + magic.aspectlabel = game.i18n.localize(magic.aspectlabel); + Object.values(magic.speciality).forEach((spec) => { + spec.label = game.i18n.localize(spec.label); + spec.labelelement = game.i18n.localize(spec.labelelement); + }); + }); +} + +// src/config/runtime.js +function configureRuntime() { + CONFIG.Actor.compendiumBanner = "/systems/fvtt-chroniques-de-l-etrange/images/banners/actor-banner.webp"; + CONFIG.Adventure.compendiumBanner = "/systems/fvtt-chroniques-de-l-etrange/images/banners/adventure-banner.webp"; + CONFIG.Cards.compendiumBanner = "ui/banners/cards-banner.webp"; + CONFIG.Item.compendiumBanner = "/systems/fvtt-chroniques-de-l-etrange/images/banners/item-banner.webp"; + CONFIG.JournalEntry.compendiumBanner = "/systems/fvtt-chroniques-de-l-etrange/images/banners/journalentry-banner.webp"; + CONFIG.Macro.compendiumBanner = "ui/banners/macro-banner.webp"; + CONFIG.Playlist.compendiumBanner = "ui/banners/playlist-banner.webp"; + CONFIG.RollTable.compendiumBanner = "ui/banners/rolltable-banner.webp"; + CONFIG.Scene.compendiumBanner = "/systems/fvtt-chroniques-de-l-etrange/images/banners/scene-banner.webp"; +} + +// src/data/actors/character.js +var CharacterDataModel = class extends foundry.abstract.TypeDataModel { + static defineSchema() { + const { fields } = foundry.data; + const numberField = (initial = 0, extra = {}) => new fields.NumberField({ required: true, nullable: false, integer: true, initial, ...extra }); + const stringField = (initial = "") => new fields.StringField({ required: true, nullable: false, initial }); + const boolField = (initial = false) => new fields.BooleanField({ required: true, initial }); + const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true }); + const aspectField = (label, chinese) => new fields.SchemaField({ + chinese: stringField(chinese), + label: stringField(label), + value: numberField(15, { min: 0 }) + }); + const skillField = (label) => new fields.SchemaField({ + label: stringField(label), + specialities: stringField(""), + value: numberField(0, { min: 0 }) + }); + const resourceField = (label) => new fields.SchemaField({ + label: stringField(label), + specialities: stringField(""), + value: numberField(0, { min: 0 }), + debt: boolField(false) + }); + const componentField = () => new fields.SchemaField({ + value: stringField("") + }); + const magicSpecialityField = () => new fields.SchemaField({ + check: boolField(false) + }); + const magicField = () => new fields.SchemaField({ + visible: boolField(true), + value: numberField(0, { min: 0 }), + speciality: new fields.SchemaField({ + essence: magicSpecialityField(), + mind: magicSpecialityField(), + purification: magicSpecialityField(), + manipulation: magicSpecialityField(), + aura: magicSpecialityField(), + acupuncture: magicSpecialityField(), + elixirs: magicSpecialityField(), + poisons: magicSpecialityField(), + arsenal: magicSpecialityField(), + potions: magicSpecialityField(), + curse: magicSpecialityField(), + transfiguration: magicSpecialityField(), + necromancy: magicSpecialityField(), + climatecontrol: magicSpecialityField(), + goldenmagic: magicSpecialityField(), + invocation: magicSpecialityField(), + tracking: magicSpecialityField(), + protection: magicSpecialityField(), + punishment: magicSpecialityField(), + domination: magicSpecialityField(), + neutralization: magicSpecialityField(), + divination: magicSpecialityField(), + earthlyprayer: magicSpecialityField(), + heavenlyprayer: magicSpecialityField(), + fungseoi: magicSpecialityField() + }) + }); + const treasureBranch = () => new fields.SchemaField({ + value: numberField(0, { min: 0 }), + max: numberField(0, { min: 0 }), + min: numberField(0, { min: 0 }) + }); + const treasureLevel = () => new fields.SchemaField({ + san: treasureBranch(), + zing: treasureBranch() + }); + const schema = { + concept: stringField(""), + guardian: stringField("0"), + initiative: numberField(1, { min: 0 }), + anti_initiative: numberField(24, { min: 0 }), + description: htmlField(""), + prefs: new fields.SchemaField({ + typeofthrow: new fields.SchemaField({ + check: boolField(true), + choice: stringField("0") + }) + }), + prompt: new fields.SchemaField({ + typeofthrow: new fields.SchemaField({ + check: boolField(true), + choice: stringField("0") + }), + configure: new fields.SchemaField({ + numberofdice: numberField(0), + aspect: numberField(0), + bonus: numberField(0), + bonusauspiciousdice: numberField(0), + typeofthrow: numberField(0), + aspectskill: numberField(0), + bonusmalusskill: numberField(0), + aspectspeciality: numberField(0), + rolldifficulty: numberField(0), + bonusmalusspeciality: numberField(0) + }) + }), + aspect: new fields.SchemaField({ + fire: aspectField("CDE.Fire", "\u328B"), + earth: aspectField("CDE.Earth", "\u328F"), + metal: aspectField("CDE.Metal", "\u328E"), + water: aspectField("CDE.Water", "\u328C"), + wood: aspectField("CDE.Wood", "\u328D") + }), + skills: new fields.SchemaField({ + art: skillField("CDE.Art"), + investigation: skillField("CDE.Investigation"), + erudition: skillField("CDE.Erudition"), + knavery: skillField("CDE.Knavery"), + wordliness: skillField("CDE.Wordliness"), + prowess: skillField("CDE.Prowess"), + sciences: skillField("CDE.Sciences"), + technologies: skillField("CDE.Technologies"), + kungfu: skillField("CDE.KungFu"), + rangedcombat: skillField("CDE.RangedCombat") + }), + resources: new fields.SchemaField({ + supply: resourceField("CDE.Supply"), + inquiry: resourceField("CDE.Inquiry"), + influence: resourceField("CDE.Influence") + }), + component: new fields.SchemaField({ + one: componentField(), + two: componentField(), + three: componentField(), + four: componentField(), + five: componentField(), + six: componentField(), + seven: componentField(), + eight: componentField(), + nine: componentField(), + zero: componentField() + }), + magics: new fields.SchemaField({ + internalcinnabar: magicField(), + alchemy: magicField(), + masteryoftheway: magicField(), + exorcism: magicField(), + geomancy: magicField() + }), + threetreasures: new fields.SchemaField({ + heiyang: new fields.SchemaField({ value: numberField(0, { min: 0 }) }), + heiyin: new fields.SchemaField({ value: numberField(0, { min: 0 }) }), + dicelevel: new fields.SchemaField({ + level0d: treasureLevel(), + level1d: treasureLevel(), + level2d: treasureLevel() + }) + }), + experience: new fields.SchemaField({ + value: numberField(0, { min: 0 }), + max: numberField(0, { min: 0 }), + min: numberField(0, { min: 0 }) + }) + }; + return schema; + } +}; + +// src/data/actors/npc.js +var NpcDataModel = class extends foundry.abstract.TypeDataModel { + static defineSchema() { + const { fields } = foundry.data; + const numberField = (initial = 0, extra = {}) => new fields.NumberField({ required: true, nullable: false, integer: true, initial, ...extra }); + const stringField = (initial = "") => new fields.StringField({ required: true, nullable: false, initial }); + const boolField = (initial = false) => new fields.BooleanField({ required: true, initial }); + const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true }); + const aptitudeField = () => new fields.SchemaField({ + value: numberField(0, { min: 0 }), + speciality: stringField("") + }); + const trackedField = () => new fields.SchemaField({ + value: numberField(0, { min: 0 }), + calcul: numberField(0, { min: 0 }), + note: stringField("") + }); + return { + type: stringField(""), + levelofthreat: numberField(0, { min: 0 }), + powerofnuisance: numberField(0, { min: 0 }), + initiative: numberField(1, { min: 0 }), + anti_initiative: numberField(24, { min: 0 }), + aptitudes: new fields.SchemaField({ + physical: aptitudeField(), + martial: aptitudeField(), + mental: aptitudeField(), + social: aptitudeField(), + spiritual: aptitudeField() + }), + vitality: trackedField(), + hei: trackedField(), + description: htmlField(""), + prefs: new fields.SchemaField({ + typeofthrow: new fields.SchemaField({ + check: boolField(false), + choice: stringField("0") + }) + }) + }; + } +}; + +// src/data/actors/tinji.js +var TinjiDataModel = class extends foundry.abstract.TypeDataModel { + static defineSchema() { + const { fields } = foundry.data; + const numberField = (initial = 0, extra = {}) => new fields.NumberField({ required: true, nullable: false, integer: true, initial, ...extra }); + const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true }); + return { + value: numberField(0, { min: 0 }), + description: htmlField("") + }; + } +}; + +// src/data/actors/loksyu.js +var LoksyuDataModel = class extends foundry.abstract.TypeDataModel { + static defineSchema() { + const { fields } = foundry.data; + const numberField = (initial = 0, extra = {}) => new fields.NumberField({ required: true, nullable: false, integer: true, initial, ...extra }); + const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true }); + const polarity = () => new fields.SchemaField({ + yin: new fields.SchemaField({ value: numberField(0, { min: 0 }) }), + yang: new fields.SchemaField({ value: numberField(0, { min: 0 }) }) + }); + return { + fire: polarity(), + earth: polarity(), + metal: polarity(), + water: polarity(), + wood: polarity(), + description: htmlField("") + }; + } +}; + +// src/data/items/item.js +var EquipmentDataModel = class extends foundry.abstract.TypeDataModel { + static defineSchema() { + const { fields } = foundry.data; + const numberField = (initial = 0, extra = {}) => new fields.NumberField({ required: true, nullable: false, integer: true, initial, ...extra }); + const stringField = (initial = "") => new fields.StringField({ required: true, nullable: false, initial }); + const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true }); + return { + subtype: stringField(""), + reference: stringField(""), + description: htmlField(""), + quantity: numberField(1, { min: 0 }), + weight: numberField(0, { min: 0 }), + protection: stringField(""), + damage: stringField(""), + range: stringField(""), + notes: htmlField("") + }; + } +}; + +// src/data/items/kungfu.js +var KungfuDataModel = class extends foundry.abstract.TypeDataModel { + static defineSchema() { + const { fields } = foundry.data; + const stringField = (initial = "") => new fields.StringField({ required: true, nullable: false, initial }); + const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true }); + const boolField = (initial = false) => new fields.BooleanField({ required: true, initial }); + const techniqueField = () => new fields.SchemaField({ + check: boolField(false), + name: stringField(""), + activation: stringField(""), + technique: htmlField("") + }); + return { + reference: stringField(""), + description: htmlField(""), + orientation: stringField(""), + aspect: stringField(""), + skill: stringField(""), + speciality: stringField(""), + style: stringField(""), + techniques: new fields.SchemaField({ + technique1: techniqueField(), + technique2: techniqueField(), + technique3: techniqueField() + }), + notes: htmlField("") + }; + } +}; + +// src/data/items/spell.js +var SpellDataModel = class extends foundry.abstract.TypeDataModel { + static defineSchema() { + const { fields } = foundry.data; + const stringField = (initial = "") => new fields.StringField({ required: true, nullable: false, initial }); + const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true }); + return { + reference: stringField(""), + description: htmlField(""), + specialityname: stringField(""), + associatedelement: stringField(""), + hei: stringField(""), + realizationtimeritual: stringField(""), + realizationtimeaccelerated: stringField(""), + flashback: stringField(""), + components: htmlField(""), + effects: htmlField(""), + examples: htmlField(""), + notes: htmlField("") + }; + } +}; + +// src/data/items/supernatural.js +var SupernaturalDataModel = class extends foundry.abstract.TypeDataModel { + static defineSchema() { + const { fields } = foundry.data; + const stringField = (initial = "") => new fields.StringField({ required: true, nullable: false, initial }); + const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true }); + return { + reference: stringField(""), + description: htmlField(""), + notes: htmlField("") + }; + } +}; + +// src/documents/chat-message.js +var CDEMessage = class extends ChatMessage { + async renderHTML({ canDelete, canClose = false, ...rest } = {}) { + const html = await super.renderHTML({ canDelete, canClose, ...rest }); + this.#enrichChatCard(html); + return html; + } + getAssociatedActor() { + if (this.speaker.scene && this.speaker.token) { + const scene = game.scenes.get(this.speaker.scene); + const token = scene?.tokens.get(this.speaker.token); + if (token) return token.actor; + } + return game.actors.get(this.speaker.actor); + } + #enrichChatCard(html) { + const actor = this.getAssociatedActor(); + let img; + let nameText; + if (this.isContentVisible) { + img = actor?.img ?? this.author.avatar; + nameText = this.alias; + } else { + img = this.author.avatar; + nameText = this.author.name; + } + const avatar = document.createElement("a"); + avatar.classList.add("avatar"); + if (actor) avatar.dataset.uuid = actor.uuid; + const avatarImg = document.createElement("img"); + Object.assign(avatarImg, { src: img, alt: nameText }); + avatar.append(avatarImg); + const name = document.createElement("span"); + name.classList.add("name-stacked"); + const title = document.createElement("span"); + title.classList.add("title"); + title.append(nameText); + name.append(title); + const sender = html.querySelector(".message-sender"); + sender?.replaceChildren(avatar, name); + } +}; + +// src/documents/actor.js +var CDEActor = class extends Actor { + getRollData() { + const data = this.toObject(false).system; + return data; + } + prepareBaseData() { + super.prepareBaseData(); + if (this.type === ACTOR_TYPES.character) { + this.system.anti_initiative = 25 - (this.system.initiative ?? 0); + } + if (this.type === ACTOR_TYPES.npc) { + this.system.vitality.calcul = (this.system.aptitudes.physical.value ?? 0) * 4; + this.system.hei.calcul = (this.system.aptitudes.spiritual.value ?? 0) * 4; + this.system.anti_initiative = 25 - (this.system.initiative ?? 0); + } + } +}; + +// src/documents/item.js +var CDEItem = class extends Item { + get isWeapon() { + return this.system.subtype === "weapon"; + } + get isArmor() { + return this.system.subtype === "armor"; + } + get isSanhei() { + return this.system.subtype === "sanhei"; + } + get isOther() { + return this.system.subtype === "other"; + } +}; + +// src/ui/dice.js +var DIGIT_LABELS = [ + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-1.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-2.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-3.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-4.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-5.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-6.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-7.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-8.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-9.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-10.webp" +]; +var CLASSIC_LABELS = [ + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-1.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-2.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-3.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-4.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-5.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-6.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-7.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-8.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-9.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-10.webp" +]; +function registerDice() { + Hooks.once("diceSoNiceReady", (dice3d) => { + dice3d.addColorset( + { + name: "cde", + description: "CdE", + foreground: "#000000", + background: "#ffffff", + edge: "#ffffff", + font: "DeliusUnicase", + texture: "ice", + material: "plastic" + }, + "preferred" + ); + dice3d.addSystem({ id: "fvtt-chroniques-de-l-etrangedigit", name: "Chroniques de l'\xE9trange digits" }, "preferred"); + dice3d.addDicePreset({ type: "d10", labels: DIGIT_LABELS, system: "fvtt-chroniques-de-l-etrangedigit" }); + dice3d.addSystem({ id: "fvtt-chroniques-de-l-etrange", name: "Chroniques de l'\xE9trange" }, "preferred"); + dice3d.addDicePreset({ type: "d10", labels: CLASSIC_LABELS, system: "fvtt-chroniques-de-l-etrange" }); + }); +} + +// src/ui/helpers.js +function registerHandlebarsHelpers() { + const { Handlebars } = globalThis; + if (!Handlebars) return; + Handlebars.registerHelper("select", function(selected, options) { + const escapedValue = RegExp.escape(Handlebars.escapeExpression(selected)); + const rgx = new RegExp(` value=["']${escapedValue}["']`); + const html = options.fn(this); + return html.replace(rgx, "$& selected"); + }); + Handlebars.registerHelper("getMagicBackground", function(magic) { + return game.i18n.localize(MAGICS[magic]?.background ?? ""); + }); + Handlebars.registerHelper("getMagicLabel", function(magic) { + return game.i18n.localize(MAGICS[magic]?.label ?? ""); + }); + Handlebars.registerHelper("getMagicAspectLabel", function(magic) { + return game.i18n.localize(MAGICS[magic]?.aspectlabel ?? ""); + }); + Handlebars.registerHelper("getMagicSpecialityLabel", function(magic, speciality) { + return game.i18n.localize(MAGICS[magic]?.speciality?.[speciality]?.label ?? ""); + }); + Handlebars.registerHelper("getMagicSpecialityClassIcon", function(magic, speciality) { + return MAGICS[magic]?.speciality?.[speciality]?.classicon ?? ""; + }); + Handlebars.registerHelper("getMagicSpecialityIcon", function(magic, speciality) { + return MAGICS[magic]?.speciality?.[speciality]?.icon ?? ""; + }); + Handlebars.registerHelper("getMagicSpecialityElementIcon", function(magic, speciality) { + return MAGICS[magic]?.speciality?.[speciality]?.elementicon ?? ""; + }); + Handlebars.registerHelper("getMagicSpecialityLabelIcon", function(magic, speciality) { + return MAGICS[magic]?.speciality?.[speciality]?.labelicon ?? ""; + }); + Handlebars.registerHelper("getMagicSpecialityLabelElement", function(magic, speciality) { + return game.i18n.localize(MAGICS[magic]?.speciality?.[speciality]?.labelelement ?? ""); + }); +} + +// src/ui/templates.js +async function preloadPartials() { + return loadTemplates(TEMPLATE_PARTIALS); +} + +// src/ui/sheets/actors/base.js +var { HandlebarsApplicationMixin } = foundry.applications.api; +var CDEBaseActorSheet = class _CDEBaseActorSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ActorSheetV2) { + static DEFAULT_OPTIONS = { + classes: ["fvtt-chroniques-de-l-etrange", "actor"], + position: { width: 920, height: "auto" }, + window: { resizable: true }, + form: { submitOnChange: true }, + dragDrop: [{ dragSelector: ".item, [data-drag='true']", dropSelector: null }], + actions: { + create: _CDEBaseActorSheet.#onItemCreate, + edit: _CDEBaseActorSheet.#onItemEdit, + delete: _CDEBaseActorSheet.#onItemDelete + } + }; + tabGroups = { primary: "description" }; + async _prepareContext() { + const descriptionHTML = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description ?? "", { async: true }); + const cssClass = this.options.classes?.join(" ") ?? ""; + return { + actor: this.document, + system: this.document.system, + systemData: this.document.system, + items: this.document.items.contents, + descriptionHTML, + editable: this.isEditable, + cssClass + }; + } + async _onFirstRender(context, options) { + await super._onFirstRender(context, options); + for (const [group, tab] of Object.entries(this.tabGroups)) { + this.changeTab(tab, group, { force: true }); + } + } + _onRender(context, options) { + for (const [group, tab] of Object.entries(this.tabGroups)) { + this.changeTab(tab, group, { force: true }); + } + } + static async #onItemCreate(event, target) { + const type = target.dataset.type ?? "item"; + const cls = getDocumentClass("Item"); + const labels = { + item: "CDE.ItemNew", + kungfu: "CDE.KFNew", + spell: "CDE.SpellNew", + supernatural: "CDE.SupernaturalNew" + }; + const name = game.i18n.localize(labels[type] ?? "CDE.ItemNew"); + return cls.create({ name, type }, { parent: this.document }); + } + static #onItemEdit(event, target) { + const itemId = target.closest(".item")?.dataset.itemId; + const item = this.document.items.get(itemId); + if (item) item.sheet.render(true); + } + static #onItemDelete(event, target) { + const itemId = target.closest(".item")?.dataset.itemId; + const item = this.document.items.get(itemId); + if (item) item.delete(); + } +}; + +// src/ui/sheets/actors/character.js +var CDECharacterSheet = class extends CDEBaseActorSheet { + static DEFAULT_OPTIONS = { + classes: ["character"] + }; + static PARTS = { + main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/actor/cde-character-sheet.html" } + }; + tabGroups = { primary: "description" }; + async _prepareContext() { + const context = await super._prepareContext(); + context.equipments = context.items.filter((item) => item.type === "item"); + context.spells = context.items.filter((item) => item.type === "spell"); + context.kungfus = context.items.filter((item) => item.type === "kungfu"); + context.CDE = { MAGICS, SUBTYPES }; + return context; + } + _onRender(context, options) { + super._onRender?.(context, options); + this.#bindInitiativeControls(); + this.#bindPrefs(); + } + #bindInitiativeControls() { + const buttons = this.element?.querySelectorAll(".click-initiative"); + if (!buttons?.length) return; + buttons.forEach((button) => { + button.addEventListener("click", async () => { + const action = button.dataset.libelId; + let initiative = this.document.system.initiative ?? 1; + if (action === "plus") { + initiative = initiative >= 24 ? 1 : initiative + 1; + await this.document.update({ "system.initiative": initiative }); + return; + } + if (action === "minus") { + initiative = initiative <= 1 ? 24 : initiative - 1; + await this.document.update({ "system.initiative": initiative }); + return; + } + if (action === "create") { + const html = ` +
+
+ + +
+
`; + const value = await Dialog.prompt({ + title: game.i18n.localize("CDE.TurnOrder"), + content: html, + label: game.i18n.localize("CDE.Validate"), + callback: (dlg) => { + const input = dlg.querySelector("input[name='initiative']"); + return Number(input?.value ?? initiative); + } + }); + if (Number.isFinite(value)) { + const sanitized = foundry.utils.clamp(Number(value), 1, 24); + await this.document.update({ "system.initiative": sanitized }); + } + } + }); + }); + } + #bindPrefs() { + const button = this.element?.querySelector(".click-prefs"); + if (!button) return; + button.addEventListener("click", async () => { + const current = this.document.system.prefs?.typeofthrow ?? { choice: "0", check: true }; + const html = ` +
+
+ + +
+
+ + +
+
`; + const prefs = await Dialog.prompt({ + title: game.i18n.localize("CDE.Preferences"), + content: html, + label: game.i18n.localize("CDE.Validate"), + callback: (dlg) => { + const choice = dlg.querySelector("select[name='choice']")?.value ?? "0"; + const check = dlg.querySelector("input[name='check']")?.checked ?? false; + return { choice, check }; + } + }); + if (prefs) { + await this.document.update({ + "system.prefs.typeofthrow.choice": String(prefs.choice), + "system.prefs.typeofthrow.check": !!prefs.check + }); + } + }); + } +}; + +// src/ui/sheets/actors/npc.js +var CDENpcSheet = class extends CDEBaseActorSheet { + static DEFAULT_OPTIONS = { + classes: ["npc"] + }; + static PARTS = { + main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/actor/cde-npc-sheet.html" } + }; + tabGroups = { primary: "description" }; + async _prepareContext() { + const context = await super._prepareContext(); + context.supernaturals = context.items.filter((item) => item.type === "supernatural"); + context.spells = context.items.filter((item) => item.type === "spell"); + context.kungfus = context.items.filter((item) => item.type === "kungfu"); + context.equipments = context.items.filter((item) => item.type === "item"); + return context; + } + _onRender(context, options) { + super._onRender?.(context, options); + this.#bindInitiativeControls(); + } + #bindInitiativeControls() { + const buttons = this.element?.querySelectorAll(".click-initiative-npc"); + if (!buttons?.length) return; + buttons.forEach((button) => { + button.addEventListener("click", async () => { + const action = button.dataset.libelId; + let initiative = this.document.system.initiative ?? 1; + if (action === "plus") { + initiative = initiative >= 24 ? 1 : initiative + 1; + await this.document.update({ "system.initiative": initiative }); + return; + } + if (action === "minus") { + initiative = initiative <= 1 ? 24 : initiative - 1; + await this.document.update({ "system.initiative": initiative }); + return; + } + if (action === "create") { + const html = ` +
+
+ + +
+
`; + const value = await Dialog.prompt({ + title: game.i18n.localize("CDE.TurnOrder"), + content: html, + label: game.i18n.localize("CDE.Validate"), + callback: (dlg) => Number(dlg.querySelector("input[name='initiative']")?.value ?? initiative) + }); + if (Number.isFinite(value)) { + const sanitized = foundry.utils.clamp(Number(value), 1, 24); + await this.document.update({ "system.initiative": sanitized }); + } + } + }); + }); + } +}; + +// src/ui/sheets/actors/tinji.js +var CDETinjiSheet = class extends CDEBaseActorSheet { + static DEFAULT_OPTIONS = { + classes: ["tinji"] + }; + static PARTS = { + main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/actor/cde-tinji-sheet.html" } + }; + tabGroups = { primary: "tinji" }; +}; + +// src/ui/sheets/actors/loksyu.js +var CDELoksyuSheet = class extends CDEBaseActorSheet { + static DEFAULT_OPTIONS = { + classes: ["loksyu"] + }; + static PARTS = { + main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/actor/cde-loksyu-sheet.html" } + }; + tabGroups = { primary: "loksyu" }; +}; + +// src/ui/sheets/items/base.js +var { HandlebarsApplicationMixin: HandlebarsApplicationMixin2 } = foundry.applications.api; +var CDEBaseItemSheet = class extends HandlebarsApplicationMixin2(foundry.applications.sheets.ItemSheetV2) { + static DEFAULT_OPTIONS = { + classes: ["fvtt-chroniques-de-l-etrange", "item"], + position: { width: 520, height: "auto" }, + window: { resizable: true }, + form: { submitOnChange: true }, + actions: {} + }; + tabGroups = { primary: "description" }; + async _prepareContext() { + const cssClass = this.options.classes?.join(" ") ?? ""; + const enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description ?? "", { async: true }); + const enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.notes ?? "", { async: true }); + return { + item: this.document, + system: this.document.system, + systemData: this.document.system, + editable: this.isEditable, + cssClass, + enrichedDescription, + enrichedNotes, + descriptionHTML: enrichedDescription, + notesHTML: enrichedNotes + }; + } + async _onFirstRender(context, options) { + await super._onFirstRender(context, options); + for (const [group, tab] of Object.entries(this.tabGroups)) { + this.changeTab(tab, group, { force: true }); + } + } + _onRender(context, options) { + for (const [group, tab] of Object.entries(this.tabGroups)) { + this.changeTab(tab, group, { force: true }); + } + } +}; + +// src/ui/sheets/items/item.js +var CDEItemSheet = class extends CDEBaseItemSheet { + static DEFAULT_OPTIONS = { + classes: ["equipment"], + position: { width: 620, height: 580 } + }; + static PARTS = { + main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/item/cde-item-sheet.html" } + }; + async _prepareContext() { + const context = await super._prepareContext(); + context.subtypes = SUBTYPES; + context.isWeapon = this.document.isWeapon; + context.isArmor = this.document.isArmor; + context.isSanhei = this.document.isSanhei; + context.isOther = this.document.isOther; + return context; + } +}; + +// src/ui/sheets/items/kungfu.js +var CDEKungfuSheet = class extends CDEBaseItemSheet { + static DEFAULT_OPTIONS = { + classes: ["kungfu"], + position: { width: 720, height: 680 } + }; + static PARTS = { + main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/item/cde-kungfu-sheet.html" } + }; + async _prepareContext() { + const context = await super._prepareContext(); + const techniques = this.document.system.techniques ?? {}; + const enrich = (value) => foundry.applications.ux.TextEditor.implementation.enrichHTML(value ?? "", { async: true }); + context.descriptionTechnique1HTML = await enrich(techniques.technique1?.technique); + context.descriptionTechnique2HTML = await enrich(techniques.technique2?.technique); + context.descriptionTechnique3HTML = await enrich(techniques.technique3?.technique); + return context; + } +}; + +// src/ui/sheets/items/spell.js +var CDESpellSheet = class extends CDEBaseItemSheet { + static DEFAULT_OPTIONS = { + classes: ["spell"], + position: { width: 660, height: 680 } + }; + static PARTS = { + main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/item/cde-spell-sheet.html" } + }; + async _prepareContext() { + const context = await super._prepareContext(); + const enrich = (content) => foundry.applications.ux.TextEditor.implementation.enrichHTML(content ?? "", { async: true }); + context.spellDescriptionHTML = await enrich(this.document.system.description); + context.componentsDescriptionHTML = await enrich(this.document.system.components); + context.effectsDescriptionHTML = await enrich(this.document.system.effects); + context.examplesDescriptionHTML = await enrich(this.document.system.examples); + return context; + } +}; + +// src/ui/sheets/items/supernatural.js +var CDESupernaturalSheet = class extends CDEBaseItemSheet { + static DEFAULT_OPTIONS = { + classes: ["supernatural"], + position: { width: 560, height: 520 } + }; + static PARTS = { + main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/item/cde-supernatural-sheet.html" } + }; +}; + +// src/migration.js +var MIGRATION_VERSION = "3.0.0"; +function registerSettings() { + game.settings.register(SYSTEM_ID, "migrationVersion", { + name: "Migration version", + scope: "world", + config: false, + type: String, + default: "0.0.0" + }); +} +async function migrateIfNeeded() { + const current = game.system.version ?? MIGRATION_VERSION; + const stored = game.settings.get(SYSTEM_ID, "migrationVersion") ?? "0.0.0"; + if (!isNewerVersion(current, stored)) return; + ui.notifications.info(`CHRONIQUESDELETRANGE | Migration vers ${current} en cours...`, { permanent: true }); + await migrateActors(); + await migrateItems(); + await migrateCompendiumActors(); + await migrateCompendiumItems(); + await game.settings.set(SYSTEM_ID, "migrationVersion", current); + ui.notifications.info(`CHRONIQUESDELETRANGE | Migration vers ${current} termin\xE9e.`); +} +async function migrateActors() { + const updates = []; + for (const actor of game.actors.contents) { + const updateData = migrateActorData(actor); + if (Object.keys(updateData).length > 0) { + updates.push(actor.update(updateData, { enforceTypes: false })); + } + } + await Promise.all(updates); +} +async function migrateCompendiumActors() { + const packs = game.packs.filter((p) => p.documentName === "Actor" && p.metadata.system === SYSTEM_ID); + for (const pack of packs) { + const content = await pack.getDocuments(); + for (const actor of content) { + const updateData = migrateActorData(actor); + if (Object.keys(updateData).length > 0) { + await actor.update(updateData, { pack: pack.collection, enforceTypes: false }); + } + } + } +} +async function migrateItems() { + const updates = []; + for (const item of game.items.contents) { + const updateData = migrateItemData(item); + if (Object.keys(updateData).length > 0) { + updates.push(item.update(updateData, { enforceTypes: false })); + } + } + await Promise.all(updates); +} +async function migrateCompendiumItems() { + const packs = game.packs.filter((p) => p.documentName === "Item" && p.metadata.system === SYSTEM_ID); + for (const pack of packs) { + const content = await pack.getDocuments(); + for (const item of content) { + const updateData = migrateItemData(item); + if (Object.keys(updateData).length > 0) { + await item.update(updateData, { pack: pack.collection, enforceTypes: false }); + } + } + } +} +function migrateActorData(actor) { + const updateData = {}; + const system = actor.system ?? {}; + const actorType = actor.type; + const legacyMagic = system.magics?.masteryofthway; + if (legacyMagic && !system.magics?.masteryoftheway) { + updateData["system.magics.masteryoftheway"] = legacyMagic; + updateData["system.magics.-=masteryofthway"] = null; + } + if ((actorType === "character" || actorType === "npc") && !system.prefs?.typeofthrow) { + const defaultCheck = actorType === "character"; + updateData["system.prefs.typeofthrow"] = { check: defaultCheck, choice: "0" }; + } + return updateData; +} +function migrateItemData(item) { + const updateData = {}; + const system = item.system ?? {}; + return updateData; +} + +// src/system.js +Hooks.once("i18nInit", preLocalizeConfig); +Hooks.once("init", async () => { + console.info(`CHRONIQUESDELETRANGE | Initializing ${SYSTEM_ID}`); + registerSettings(); + game.system.CONST = { MAGICS, SUBTYPES }; + CONFIG.Actor.systemDataModels = { + [ACTOR_TYPES.character]: CharacterDataModel, + [ACTOR_TYPES.npc]: NpcDataModel, + [ACTOR_TYPES.tinji]: TinjiDataModel, + [ACTOR_TYPES.loksyu]: LoksyuDataModel + }; + CONFIG.Item.systemDataModels = { + [ITEM_TYPES.item]: EquipmentDataModel, + [ITEM_TYPES.kungfu]: KungfuDataModel, + [ITEM_TYPES.spell]: SpellDataModel, + [ITEM_TYPES.supernatural]: SupernaturalDataModel + }; + CONFIG.Actor.documentClass = CDEActor; + CONFIG.Item.documentClass = CDEItem; + CONFIG.ChatMessage.documentClass = CDEMessage; + configureRuntime(); + DocumentSheetConfig.unregisterSheet(Actor, "core", ActorSheet); + DocumentSheetConfig.unregisterSheet(Item, "core", ItemSheet); + DocumentSheetConfig.registerSheet(Actor, SYSTEM_ID, CDECharacterSheet, { + types: [ACTOR_TYPES.character], + makeDefault: true, + label: "CDE Character Sheet (V2)" + }); + DocumentSheetConfig.registerSheet(Actor, SYSTEM_ID, CDENpcSheet, { + types: [ACTOR_TYPES.npc], + makeDefault: true, + label: "CDE NPC Sheet (V2)" + }); + DocumentSheetConfig.registerSheet(Actor, SYSTEM_ID, CDETinjiSheet, { + types: [ACTOR_TYPES.tinji], + makeDefault: true, + label: "CDE Tinji Sheet (V2)" + }); + DocumentSheetConfig.registerSheet(Actor, SYSTEM_ID, CDELoksyuSheet, { + types: [ACTOR_TYPES.loksyu], + makeDefault: true, + label: "CDE Loksyu Sheet (V2)" + }); + DocumentSheetConfig.registerSheet(Item, SYSTEM_ID, CDEItemSheet, { + types: [ITEM_TYPES.item], + makeDefault: true, + label: "CDE Item Sheet (V2)" + }); + DocumentSheetConfig.registerSheet(Item, SYSTEM_ID, CDEKungfuSheet, { + types: [ITEM_TYPES.kungfu], + makeDefault: true, + label: "CDE KungFu Sheet (V2)" + }); + DocumentSheetConfig.registerSheet(Item, SYSTEM_ID, CDESpellSheet, { + types: [ITEM_TYPES.spell], + makeDefault: true, + label: "CDE Spell Sheet (V2)" + }); + DocumentSheetConfig.registerSheet(Item, SYSTEM_ID, CDESupernaturalSheet, { + types: [ITEM_TYPES.supernatural], + makeDefault: true, + label: "CDE Supernatural Sheet (V2)" + }); + await preloadPartials(); + registerHandlebarsHelpers(); + registerDice(); + Hooks.on("renderSettings", (_app, html) => injectCompendiumLink(html)); + console.info(`CHRONIQUESDELETRANGE | Initialized`); +}); +Hooks.once("ready", async () => { + if (!game.modules.get("lib-wrapper")?.active && game.user.isGM) { + ui.notifications.error("System fvtt-chroniques-de-l-etrange requires the 'libWrapper' module. Please install and activate it."); + } + await migrateIfNeeded(); +}); +function injectCompendiumLink(html) { + const header = html[0]?.querySelector?.("h4.divider"); + if (!header) return; + const section = document.createElement("section"); + section.classList.add("settings", "flexcol"); + section.innerHTML = ` + +
+ +
+ Guide d'installation + +

Rendez-vous sur le site de l'\xE9diteur, t\xE9l\xE9chargez les PDF contenant les liens vers les compendia, puis ajoutez leurs manifestes dans Foundry.

+
+
+
+ `; + section.querySelector("button[data-action='open-cde-link']")?.addEventListener("click", () => { + window.open("https://antre-monde.com/les-chroniques-de-letrengae/", "_blank"); + }); + header.parentNode.insertBefore(section, header); +} +//# sourceMappingURL=system.js.map diff --git a/dist/system.js.map b/dist/system.js.map new file mode 100644 index 0000000..c1607ea --- /dev/null +++ b/dist/system.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../src/config/constants.js", "../src/config/localize.js", "../src/config/runtime.js", "../src/data/actors/character.js", "../src/data/actors/npc.js", "../src/data/actors/tinji.js", "../src/data/actors/loksyu.js", "../src/data/items/item.js", "../src/data/items/kungfu.js", "../src/data/items/spell.js", "../src/data/items/supernatural.js", "../src/documents/chat-message.js", "../src/documents/actor.js", "../src/documents/item.js", "../src/ui/dice.js", "../src/ui/helpers.js", "../src/ui/templates.js", "../src/ui/sheets/actors/base.js", "../src/ui/sheets/actors/character.js", "../src/ui/sheets/actors/npc.js", "../src/ui/sheets/actors/tinji.js", "../src/ui/sheets/actors/loksyu.js", "../src/ui/sheets/items/base.js", "../src/ui/sheets/items/item.js", "../src/ui/sheets/items/kungfu.js", "../src/ui/sheets/items/spell.js", "../src/ui/sheets/items/supernatural.js", "../src/migration.js", "../src/system.js"], + "sourcesContent": ["export const SYSTEM_ID = \"fvtt-chroniques-de-l-etrange\"\n\nexport const ACTOR_TYPES = {\n character: \"character\",\n npc: \"npc\",\n tinji: \"tinji\",\n loksyu: \"loksyu\",\n}\n\nexport const ITEM_TYPES = {\n item: \"item\",\n kungfu: \"kungfu\",\n spell: \"spell\",\n supernatural: \"supernatural\",\n}\n\nexport const SUBTYPES = {\n weapon: { id: \"weapon\", label: \"CDE.Weapon\" },\n armor: { id: \"armor\", label: \"CDE.Armor\" },\n sanhei: { id: \"sanhei\", label: \"CDE.Sanhei\" },\n other: { id: \"other\", label: \"CDE.Other\" },\n}\n\nexport const MAGICS = {\n internalcinnabar: {\n id: \"internalcinnabar\",\n background: \"linear-grey\",\n label: \"CDE.InternalCinnabar\",\n aspectlabel: \"CDE.Metal\",\n speciality: {\n essence: { label: \"CDE.Essence\", classicon: \"icon-yin\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.png\", labelicon: \"Yin\", labelelement: \"CDE.Metal\" },\n mind: { label: \"CDE.Mind\", classicon: \"icon-yin\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.png\", labelicon: \"Yin\", labelelement: \"CDE.Water\" },\n purification: { label: \"CDE.Purification\", classicon: \"icon-yinyang\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/yin_yang.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.png\", labelicon: \"Yin/Yang\", labelelement: \"CDE.Earth\" },\n manipulation: { label: \"CDE.Manipulation\", classicon: \"icon-yang\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.png\", labelicon: \"Yang\", labelelement: \"CDE.Fire\" },\n aura: { label: \"CDE.Aura\", classicon: \"icon-yang\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.png\", labelicon: \"Yang\", labelelement: \"CDE.Wood\" },\n },\n },\n alchemy: {\n id: \"alchemy\",\n background: \"linear-blue\",\n label: \"CDE.Alchemy\",\n aspectlabel: \"CDE.Water\",\n speciality: {\n acupuncture: { label: \"CDE.Acupuncture\", classicon: \"icon-yin\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.png\", labelicon: \"Yin\", labelelement: \"CDE.Metal\" },\n elixirs: { label: \"CDE.Elixirs\", classicon: \"icon-yin\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.png\", labelicon: \"Yin\", labelelement: \"CDE.Water\" },\n poisons: { label: \"CDE.Poisons\", classicon: \"icon-yinyang\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/yin_yang.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.png\", labelicon: \"Yin/Yang\", labelelement: \"CDE.Earth\" },\n arsenal: { label: \"CDE.Arsenal\", classicon: \"icon-yang\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.png\", labelicon: \"Yang\", labelelement: \"CDE.Fire\" },\n potions: { label: \"CDE.Potions\", classicon: \"icon-yang\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.png\", labelicon: \"Yang\", labelelement: \"CDE.Wood\" },\n },\n },\n masteryoftheway: {\n id: \"masteryoftheway\",\n background: \"linear-brown\",\n label: \"CDE.MasteryOfTheWay\",\n aspectlabel: \"CDE.Earth\",\n speciality: {\n curse: { label: \"CDE.Curse\", classicon: \"icon-yin\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.png\", labelicon: \"Yin\", labelelement: \"CDE.Metal\" },\n transfiguration: { label: \"CDE.Transfiguration\", classicon: \"icon-yin\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.png\", labelicon: \"Yin\", labelelement: \"CDE.Water\" },\n necromancy: { label: \"CDE.Necromancy\", classicon: \"icon-yinyang\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/yin_yang.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.png\", labelicon: \"Yin/Yang\", labelelement: \"CDE.Earth\" },\n climatecontrol: { label: \"CDE.ClimateControl\", classicon: \"icon-yang\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.png\", labelicon: \"Yang\", labelelement: \"CDE.Fire\" },\n goldenmagic: { label: \"CDE.GoldenMagic\", classicon: \"icon-yang\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.png\", labelicon: \"Yang\", labelelement: \"CDE.Wood\" },\n },\n },\n exorcism: {\n id: \"exorcism\",\n background: \"linear-red\",\n label: \"CDE.Exorcism\",\n aspectlabel: \"CDE.Fire\",\n speciality: {\n invocation: { label: \"CDE.Invocation\", classicon: \"icon-yin\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.png\", labelicon: \"Yin\", labelelement: \"CDE.Metal\" },\n tracking: { label: \"CDE.Tracking\", classicon: \"icon-yin\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.png\", labelicon: \"Yin\", labelelement: \"CDE.Water\" },\n protection: { label: \"CDE.Protection\", classicon: \"icon-yinyang\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/yin_yang.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.png\", labelicon: \"Yin/Yang\", labelelement: \"CDE.Earth\" },\n punishment: { label: \"CDE.Punishment\", classicon: \"icon-yang\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.png\", labelicon: \"Yang\", labelelement: \"CDE.Fire\" },\n domination: { label: \"CDE.Domination\", classicon: \"icon-yang\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.png\", labelicon: \"Yang\", labelelement: \"CDE.Wood\" },\n },\n },\n geomancy: {\n id: \"geomancy\",\n background: \"linear-green\",\n label: \"CDE.Geomancy\",\n aspectlabel: \"CDE.Wood\",\n speciality: {\n neutralization: { label: \"CDE.Neutralization\", classicon: \"icon-yin\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.png\", labelicon: \"Yin\", labelelement: \"CDE.Metal\" },\n divination: { label: \"CDE.Divination\", classicon: \"icon-yin\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.png\", labelicon: \"Yin\", labelelement: \"CDE.Water\" },\n earthlyprayer: { label: \"CDE.EarthlyPrayer\", classicon: \"icon-yinyang\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/yin_yang.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.png\", labelicon: \"Yin/Yang\", labelelement: \"CDE.Earth\" },\n heavenlyprayer: { label: \"CDE.HeavenlyPrayer\", classicon: \"icon-yang\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.png\", labelicon: \"Yang\", labelelement: \"CDE.Fire\" },\n fungseoi: { label: \"CDE.Fungseoi\", classicon: \"icon-yang\", icon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png\", elementicon: \"/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.png\", labelicon: \"Yang\", labelelement: \"CDE.Wood\" },\n },\n },\n}\n\nexport const TEMPLATE_PARTIALS = [\n \"systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-skills.html\",\n \"systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-magics.html\",\n \"systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-nghang.html\",\n \"systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-treasures.html\",\n \"systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-items.html\",\n \"systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-kungfus.html\",\n \"systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-spells.html\",\n \"systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-npc-supernaturals.html\",\n \"systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-npc-spells.html\",\n \"systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-npc-kungfus.html\",\n \"systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-npc-items.html\",\n]\n", "import { MAGICS, SUBTYPES } from \"./constants.js\"\n\nexport function preLocalizeConfig() {\n const localizeConfigObject = (obj, keys) => {\n for (const o of Object.values(obj)) {\n for (const key of keys) {\n o[key] = game.i18n.localize(o[key])\n }\n }\n }\n\n localizeConfigObject(SUBTYPES, [\"label\"])\n Object.values(MAGICS).forEach((magic) => {\n magic.label = game.i18n.localize(magic.label)\n magic.aspectlabel = game.i18n.localize(magic.aspectlabel)\n Object.values(magic.speciality).forEach((spec) => {\n spec.label = game.i18n.localize(spec.label)\n spec.labelelement = game.i18n.localize(spec.labelelement)\n })\n })\n}\n", "export function configureRuntime() {\n CONFIG.Actor.compendiumBanner = \"/systems/fvtt-chroniques-de-l-etrange/images/banners/actor-banner.webp\"\n CONFIG.Adventure.compendiumBanner = \"/systems/fvtt-chroniques-de-l-etrange/images/banners/adventure-banner.webp\"\n CONFIG.Cards.compendiumBanner = \"ui/banners/cards-banner.webp\"\n CONFIG.Item.compendiumBanner = \"/systems/fvtt-chroniques-de-l-etrange/images/banners/item-banner.webp\"\n CONFIG.JournalEntry.compendiumBanner = \"/systems/fvtt-chroniques-de-l-etrange/images/banners/journalentry-banner.webp\"\n CONFIG.Macro.compendiumBanner = \"ui/banners/macro-banner.webp\"\n CONFIG.Playlist.compendiumBanner = \"ui/banners/playlist-banner.webp\"\n CONFIG.RollTable.compendiumBanner = \"ui/banners/rolltable-banner.webp\"\n CONFIG.Scene.compendiumBanner = \"/systems/fvtt-chroniques-de-l-etrange/images/banners/scene-banner.webp\"\n}\n", "export default class CharacterDataModel extends foundry.abstract.TypeDataModel {\n static defineSchema() {\n const { fields } = foundry.data\n const numberField = (initial = 0, extra = {}) => new fields.NumberField({ required: true, nullable: false, integer: true, initial, ...extra })\n const stringField = (initial = \"\") => new fields.StringField({ required: true, nullable: false, initial })\n const boolField = (initial = false) => new fields.BooleanField({ required: true, initial })\n const htmlField = (initial = \"\") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true })\n\n const aspectField = (label, chinese) =>\n new fields.SchemaField({\n chinese: stringField(chinese),\n label: stringField(label),\n value: numberField(15, { min: 0 }),\n })\n\n const skillField = (label) =>\n new fields.SchemaField({\n label: stringField(label),\n specialities: stringField(\"\"),\n value: numberField(0, { min: 0 }),\n })\n\n const resourceField = (label) =>\n new fields.SchemaField({\n label: stringField(label),\n specialities: stringField(\"\"),\n value: numberField(0, { min: 0 }),\n debt: boolField(false),\n })\n\n const componentField = () =>\n new fields.SchemaField({\n value: stringField(\"\"),\n })\n\n const magicSpecialityField = () =>\n new fields.SchemaField({\n check: boolField(false),\n })\n\n const magicField = () =>\n new fields.SchemaField({\n visible: boolField(true),\n value: numberField(0, { min: 0 }),\n speciality: new fields.SchemaField({\n essence: magicSpecialityField(),\n mind: magicSpecialityField(),\n purification: magicSpecialityField(),\n manipulation: magicSpecialityField(),\n aura: magicSpecialityField(),\n acupuncture: magicSpecialityField(),\n elixirs: magicSpecialityField(),\n poisons: magicSpecialityField(),\n arsenal: magicSpecialityField(),\n potions: magicSpecialityField(),\n curse: magicSpecialityField(),\n transfiguration: magicSpecialityField(),\n necromancy: magicSpecialityField(),\n climatecontrol: magicSpecialityField(),\n goldenmagic: magicSpecialityField(),\n invocation: magicSpecialityField(),\n tracking: magicSpecialityField(),\n protection: magicSpecialityField(),\n punishment: magicSpecialityField(),\n domination: magicSpecialityField(),\n neutralization: magicSpecialityField(),\n divination: magicSpecialityField(),\n earthlyprayer: magicSpecialityField(),\n heavenlyprayer: magicSpecialityField(),\n fungseoi: magicSpecialityField(),\n }),\n })\n\n const treasureBranch = () =>\n new fields.SchemaField({\n value: numberField(0, { min: 0 }),\n max: numberField(0, { min: 0 }),\n min: numberField(0, { min: 0 }),\n })\n\n const treasureLevel = () =>\n new fields.SchemaField({\n san: treasureBranch(),\n zing: treasureBranch(),\n })\n\n const schema = {\n concept: stringField(\"\"),\n guardian: stringField(\"0\"),\n initiative: numberField(1, { min: 0 }),\n anti_initiative: numberField(24, { min: 0 }),\n description: htmlField(\"\"),\n prefs: new fields.SchemaField({\n typeofthrow: new fields.SchemaField({\n check: boolField(true),\n choice: stringField(\"0\"),\n }),\n }),\n prompt: new fields.SchemaField({\n typeofthrow: new fields.SchemaField({\n check: boolField(true),\n choice: stringField(\"0\"),\n }),\n configure: new fields.SchemaField({\n numberofdice: numberField(0),\n aspect: numberField(0),\n bonus: numberField(0),\n bonusauspiciousdice: numberField(0),\n typeofthrow: numberField(0),\n aspectskill: numberField(0),\n bonusmalusskill: numberField(0),\n aspectspeciality: numberField(0),\n rolldifficulty: numberField(0),\n bonusmalusspeciality: numberField(0),\n }),\n }),\n aspect: new fields.SchemaField({\n fire: aspectField(\"CDE.Fire\", \"\u328B\"),\n earth: aspectField(\"CDE.Earth\", \"\u328F\"),\n metal: aspectField(\"CDE.Metal\", \"\u328E\"),\n water: aspectField(\"CDE.Water\", \"\u328C\"),\n wood: aspectField(\"CDE.Wood\", \"\u328D\"),\n }),\n skills: new fields.SchemaField({\n art: skillField(\"CDE.Art\"),\n investigation: skillField(\"CDE.Investigation\"),\n erudition: skillField(\"CDE.Erudition\"),\n knavery: skillField(\"CDE.Knavery\"),\n wordliness: skillField(\"CDE.Wordliness\"),\n prowess: skillField(\"CDE.Prowess\"),\n sciences: skillField(\"CDE.Sciences\"),\n technologies: skillField(\"CDE.Technologies\"),\n kungfu: skillField(\"CDE.KungFu\"),\n rangedcombat: skillField(\"CDE.RangedCombat\"),\n }),\n resources: new fields.SchemaField({\n supply: resourceField(\"CDE.Supply\"),\n inquiry: resourceField(\"CDE.Inquiry\"),\n influence: resourceField(\"CDE.Influence\"),\n }),\n component: new fields.SchemaField({\n one: componentField(),\n two: componentField(),\n three: componentField(),\n four: componentField(),\n five: componentField(),\n six: componentField(),\n seven: componentField(),\n eight: componentField(),\n nine: componentField(),\n zero: componentField(),\n }),\n magics: new fields.SchemaField({\n internalcinnabar: magicField(),\n alchemy: magicField(),\n masteryoftheway: magicField(),\n exorcism: magicField(),\n geomancy: magicField(),\n }),\n threetreasures: new fields.SchemaField({\n heiyang: new fields.SchemaField({ value: numberField(0, { min: 0 }) }),\n heiyin: new fields.SchemaField({ value: numberField(0, { min: 0 }) }),\n dicelevel: new fields.SchemaField({\n level0d: treasureLevel(),\n level1d: treasureLevel(),\n level2d: treasureLevel(),\n }),\n }),\n experience: new fields.SchemaField({\n value: numberField(0, { min: 0 }),\n max: numberField(0, { min: 0 }),\n min: numberField(0, { min: 0 }),\n }),\n }\n\n return schema\n }\n}\n", "export default class NpcDataModel extends foundry.abstract.TypeDataModel {\n static defineSchema() {\n const { fields } = foundry.data\n const numberField = (initial = 0, extra = {}) => new fields.NumberField({ required: true, nullable: false, integer: true, initial, ...extra })\n const stringField = (initial = \"\") => new fields.StringField({ required: true, nullable: false, initial })\n const boolField = (initial = false) => new fields.BooleanField({ required: true, initial })\n const htmlField = (initial = \"\") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true })\n\n const aptitudeField = () =>\n new fields.SchemaField({\n value: numberField(0, { min: 0 }),\n speciality: stringField(\"\"),\n })\n\n const trackedField = () =>\n new fields.SchemaField({\n value: numberField(0, { min: 0 }),\n calcul: numberField(0, { min: 0 }),\n note: stringField(\"\"),\n })\n\n return {\n type: stringField(\"\"),\n levelofthreat: numberField(0, { min: 0 }),\n powerofnuisance: numberField(0, { min: 0 }),\n initiative: numberField(1, { min: 0 }),\n anti_initiative: numberField(24, { min: 0 }),\n aptitudes: new fields.SchemaField({\n physical: aptitudeField(),\n martial: aptitudeField(),\n mental: aptitudeField(),\n social: aptitudeField(),\n spiritual: aptitudeField(),\n }),\n vitality: trackedField(),\n hei: trackedField(),\n description: htmlField(\"\"),\n prefs: new fields.SchemaField({\n typeofthrow: new fields.SchemaField({\n check: boolField(false),\n choice: stringField(\"0\"),\n }),\n }),\n }\n }\n}\n", "export default class TinjiDataModel extends foundry.abstract.TypeDataModel {\n static defineSchema() {\n const { fields } = foundry.data\n const numberField = (initial = 0, extra = {}) => new fields.NumberField({ required: true, nullable: false, integer: true, initial, ...extra })\n const htmlField = (initial = \"\") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true })\n\n return {\n value: numberField(0, { min: 0 }),\n description: htmlField(\"\"),\n }\n }\n}\n", "export default class LoksyuDataModel extends foundry.abstract.TypeDataModel {\n static defineSchema() {\n const { fields } = foundry.data\n const numberField = (initial = 0, extra = {}) => new fields.NumberField({ required: true, nullable: false, integer: true, initial, ...extra })\n const htmlField = (initial = \"\") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true })\n\n const polarity = () =>\n new fields.SchemaField({\n yin: new fields.SchemaField({ value: numberField(0, { min: 0 }) }),\n yang: new fields.SchemaField({ value: numberField(0, { min: 0 }) }),\n })\n\n return {\n fire: polarity(),\n earth: polarity(),\n metal: polarity(),\n water: polarity(),\n wood: polarity(),\n description: htmlField(\"\"),\n }\n }\n}\n", "export default class EquipmentDataModel extends foundry.abstract.TypeDataModel {\n static defineSchema() {\n const { fields } = foundry.data\n const numberField = (initial = 0, extra = {}) => new fields.NumberField({ required: true, nullable: false, integer: true, initial, ...extra })\n const stringField = (initial = \"\") => new fields.StringField({ required: true, nullable: false, initial })\n const htmlField = (initial = \"\") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true })\n\n return {\n subtype: stringField(\"\"),\n reference: stringField(\"\"),\n description: htmlField(\"\"),\n quantity: numberField(1, { min: 0 }),\n weight: numberField(0, { min: 0 }),\n protection: stringField(\"\"),\n damage: stringField(\"\"),\n range: stringField(\"\"),\n notes: htmlField(\"\"),\n }\n }\n}\n", "export default class KungfuDataModel extends foundry.abstract.TypeDataModel {\n static defineSchema() {\n const { fields } = foundry.data\n const stringField = (initial = \"\") => new fields.StringField({ required: true, nullable: false, initial })\n const htmlField = (initial = \"\") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true })\n const boolField = (initial = false) => new fields.BooleanField({ required: true, initial })\n\n const techniqueField = () =>\n new fields.SchemaField({\n check: boolField(false),\n name: stringField(\"\"),\n activation: stringField(\"\"),\n technique: htmlField(\"\"),\n })\n\n return {\n reference: stringField(\"\"),\n description: htmlField(\"\"),\n orientation: stringField(\"\"),\n aspect: stringField(\"\"),\n skill: stringField(\"\"),\n speciality: stringField(\"\"),\n style: stringField(\"\"),\n techniques: new fields.SchemaField({\n technique1: techniqueField(),\n technique2: techniqueField(),\n technique3: techniqueField(),\n }),\n notes: htmlField(\"\"),\n }\n }\n}\n", "export default class SpellDataModel extends foundry.abstract.TypeDataModel {\n static defineSchema() {\n const { fields } = foundry.data\n const stringField = (initial = \"\") => new fields.StringField({ required: true, nullable: false, initial })\n const htmlField = (initial = \"\") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true })\n\n return {\n reference: stringField(\"\"),\n description: htmlField(\"\"),\n specialityname: stringField(\"\"),\n associatedelement: stringField(\"\"),\n hei: stringField(\"\"),\n realizationtimeritual: stringField(\"\"),\n realizationtimeaccelerated: stringField(\"\"),\n flashback: stringField(\"\"),\n components: htmlField(\"\"),\n effects: htmlField(\"\"),\n examples: htmlField(\"\"),\n notes: htmlField(\"\"),\n }\n }\n}\n", "export default class SupernaturalDataModel extends foundry.abstract.TypeDataModel {\n static defineSchema() {\n const { fields } = foundry.data\n const stringField = (initial = \"\") => new fields.StringField({ required: true, nullable: false, initial })\n const htmlField = (initial = \"\") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true })\n\n return {\n reference: stringField(\"\"),\n description: htmlField(\"\"),\n notes: htmlField(\"\"),\n }\n }\n}\n", "export class CDEMessage extends ChatMessage {\n async renderHTML({ canDelete, canClose = false, ...rest } = {}) {\n const html = await super.renderHTML({ canDelete, canClose, ...rest })\n this.#enrichChatCard(html)\n return html\n }\n\n getAssociatedActor() {\n if (this.speaker.scene && this.speaker.token) {\n const scene = game.scenes.get(this.speaker.scene)\n const token = scene?.tokens.get(this.speaker.token)\n if (token) return token.actor\n }\n return game.actors.get(this.speaker.actor)\n }\n\n #enrichChatCard(html) {\n const actor = this.getAssociatedActor()\n\n let img\n let nameText\n if (this.isContentVisible) {\n img = actor?.img ?? this.author.avatar\n nameText = this.alias\n } else {\n img = this.author.avatar\n nameText = this.author.name\n }\n\n const avatar = document.createElement(\"a\")\n avatar.classList.add(\"avatar\")\n if (actor) avatar.dataset.uuid = actor.uuid\n const avatarImg = document.createElement(\"img\")\n Object.assign(avatarImg, { src: img, alt: nameText })\n avatar.append(avatarImg)\n\n const name = document.createElement(\"span\")\n name.classList.add(\"name-stacked\")\n const title = document.createElement(\"span\")\n title.classList.add(\"title\")\n title.append(nameText)\n name.append(title)\n\n const sender = html.querySelector(\".message-sender\")\n sender?.replaceChildren(avatar, name)\n }\n}\n", "import { ACTOR_TYPES } from \"../config/constants.js\"\n\nexport class CDEActor extends Actor {\n getRollData() {\n const data = this.toObject(false).system\n return data\n }\n\n prepareBaseData() {\n super.prepareBaseData()\n\n if (this.type === ACTOR_TYPES.character) {\n this.system.anti_initiative = 25 - (this.system.initiative ?? 0)\n }\n\n if (this.type === ACTOR_TYPES.npc) {\n this.system.vitality.calcul = (this.system.aptitudes.physical.value ?? 0) * 4\n this.system.hei.calcul = (this.system.aptitudes.spiritual.value ?? 0) * 4\n this.system.anti_initiative = 25 - (this.system.initiative ?? 0)\n }\n }\n}\n", "export class CDEItem extends Item {\n get isWeapon() {\n return this.system.subtype === \"weapon\"\n }\n\n get isArmor() {\n return this.system.subtype === \"armor\"\n }\n\n get isSanhei() {\n return this.system.subtype === \"sanhei\"\n }\n\n get isOther() {\n return this.system.subtype === \"other\"\n }\n}\n", "const DIGIT_LABELS = [\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-1.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-2.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-3.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-4.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-5.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-6.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-7.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-8.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-9.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-10.webp\",\n]\n\nconst CLASSIC_LABELS = [\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-1.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-2.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-3.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-4.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-5.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-6.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-7.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-8.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-9.webp\",\n \"systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-10.webp\",\n]\n\nexport function registerDice() {\n Hooks.once(\"diceSoNiceReady\", (dice3d) => {\n dice3d.addColorset(\n {\n name: \"cde\",\n description: \"CdE\",\n foreground: \"#000000\",\n background: \"#ffffff\",\n edge: \"#ffffff\",\n font: \"DeliusUnicase\",\n texture: \"ice\",\n material: \"plastic\",\n },\n \"preferred\",\n )\n\n dice3d.addSystem({ id: \"fvtt-chroniques-de-l-etrangedigit\", name: \"Chroniques de l'\u00E9trange digits\" }, \"preferred\")\n dice3d.addDicePreset({ type: \"d10\", labels: DIGIT_LABELS, system: \"fvtt-chroniques-de-l-etrangedigit\" })\n\n dice3d.addSystem({ id: \"fvtt-chroniques-de-l-etrange\", name: \"Chroniques de l'\u00E9trange\" }, \"preferred\")\n dice3d.addDicePreset({ type: \"d10\", labels: CLASSIC_LABELS, system: \"fvtt-chroniques-de-l-etrange\" })\n })\n}\n", "import { MAGICS } from \"../config/constants.js\"\n\nexport function registerHandlebarsHelpers() {\n const { Handlebars } = globalThis\n if (!Handlebars) return\n\n Handlebars.registerHelper(\"select\", function (selected, options) {\n const escapedValue = RegExp.escape(Handlebars.escapeExpression(selected))\n const rgx = new RegExp(` value=[\"']${escapedValue}[\"']`)\n const html = options.fn(this)\n return html.replace(rgx, \"$& selected\")\n })\n\n Handlebars.registerHelper(\"getMagicBackground\", function (magic) {\n return game.i18n.localize(MAGICS[magic]?.background ?? \"\")\n })\n\n Handlebars.registerHelper(\"getMagicLabel\", function (magic) {\n return game.i18n.localize(MAGICS[magic]?.label ?? \"\")\n })\n\n Handlebars.registerHelper(\"getMagicAspectLabel\", function (magic) {\n return game.i18n.localize(MAGICS[magic]?.aspectlabel ?? \"\")\n })\n\n Handlebars.registerHelper(\"getMagicSpecialityLabel\", function (magic, speciality) {\n return game.i18n.localize(MAGICS[magic]?.speciality?.[speciality]?.label ?? \"\")\n })\n\n Handlebars.registerHelper(\"getMagicSpecialityClassIcon\", function (magic, speciality) {\n return MAGICS[magic]?.speciality?.[speciality]?.classicon ?? \"\"\n })\n\n Handlebars.registerHelper(\"getMagicSpecialityIcon\", function (magic, speciality) {\n return MAGICS[magic]?.speciality?.[speciality]?.icon ?? \"\"\n })\n\n Handlebars.registerHelper(\"getMagicSpecialityElementIcon\", function (magic, speciality) {\n return MAGICS[magic]?.speciality?.[speciality]?.elementicon ?? \"\"\n })\n\n Handlebars.registerHelper(\"getMagicSpecialityLabelIcon\", function (magic, speciality) {\n return MAGICS[magic]?.speciality?.[speciality]?.labelicon ?? \"\"\n })\n\n Handlebars.registerHelper(\"getMagicSpecialityLabelElement\", function (magic, speciality) {\n return game.i18n.localize(MAGICS[magic]?.speciality?.[speciality]?.labelelement ?? \"\")\n })\n}\n", "import { TEMPLATE_PARTIALS } from \"../config/constants.js\"\n\nexport async function preloadPartials() {\n return loadTemplates(TEMPLATE_PARTIALS)\n}\n", "const { HandlebarsApplicationMixin } = foundry.applications.api\n\nexport class CDEBaseActorSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ActorSheetV2) {\n static DEFAULT_OPTIONS = {\n classes: [\"fvtt-chroniques-de-l-etrange\", \"actor\"],\n position: { width: 920, height: \"auto\" },\n window: { resizable: true },\n form: { submitOnChange: true },\n dragDrop: [{ dragSelector: \".item, [data-drag='true']\", dropSelector: null }],\n actions: {\n create: CDEBaseActorSheet.#onItemCreate,\n edit: CDEBaseActorSheet.#onItemEdit,\n delete: CDEBaseActorSheet.#onItemDelete,\n },\n }\n\n tabGroups = { primary: \"description\" }\n\n async _prepareContext() {\n const descriptionHTML = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description ?? \"\", { async: true })\n const cssClass = this.options.classes?.join(\" \") ?? \"\"\n return {\n actor: this.document,\n system: this.document.system,\n systemData: this.document.system,\n items: this.document.items.contents,\n descriptionHTML,\n editable: this.isEditable,\n cssClass,\n }\n }\n\n async _onFirstRender(context, options) {\n await super._onFirstRender(context, options)\n for (const [group, tab] of Object.entries(this.tabGroups)) {\n this.changeTab(tab, group, { force: true })\n }\n }\n\n _onRender(context, options) {\n for (const [group, tab] of Object.entries(this.tabGroups)) {\n this.changeTab(tab, group, { force: true })\n }\n }\n\n static async #onItemCreate(event, target) {\n const type = target.dataset.type ?? \"item\"\n const cls = getDocumentClass(\"Item\")\n const labels = {\n item: \"CDE.ItemNew\",\n kungfu: \"CDE.KFNew\",\n spell: \"CDE.SpellNew\",\n supernatural: \"CDE.SupernaturalNew\",\n }\n const name = game.i18n.localize(labels[type] ?? \"CDE.ItemNew\")\n return cls.create({ name, type }, { parent: this.document })\n }\n\n static #onItemEdit(event, target) {\n const itemId = target.closest(\".item\")?.dataset.itemId\n const item = this.document.items.get(itemId)\n if (item) item.sheet.render(true)\n }\n\n static #onItemDelete(event, target) {\n const itemId = target.closest(\".item\")?.dataset.itemId\n const item = this.document.items.get(itemId)\n if (item) item.delete()\n }\n}\n", "import { MAGICS, SUBTYPES } from \"../../../config/constants.js\"\nimport { CDEBaseActorSheet } from \"./base.js\"\n\nexport class CDECharacterSheet extends CDEBaseActorSheet {\n static DEFAULT_OPTIONS = {\n classes: [\"character\"],\n }\n\n static PARTS = {\n main: { template: \"systems/fvtt-chroniques-de-l-etrange/templates/actor/cde-character-sheet.html\" },\n }\n\n tabGroups = { primary: \"description\" }\n\n async _prepareContext() {\n const context = await super._prepareContext()\n context.equipments = context.items.filter((item) => item.type === \"item\")\n context.spells = context.items.filter((item) => item.type === \"spell\")\n context.kungfus = context.items.filter((item) => item.type === \"kungfu\")\n context.CDE = { MAGICS, SUBTYPES }\n return context\n }\n\n _onRender(context, options) {\n super._onRender?.(context, options)\n this.#bindInitiativeControls()\n this.#bindPrefs()\n }\n\n #bindInitiativeControls() {\n const buttons = this.element?.querySelectorAll(\".click-initiative\")\n if (!buttons?.length) return\n buttons.forEach((button) => {\n button.addEventListener(\"click\", async () => {\n const action = button.dataset.libelId\n let initiative = this.document.system.initiative ?? 1\n if (action === \"plus\") {\n initiative = initiative >= 24 ? 1 : initiative + 1\n await this.document.update({ \"system.initiative\": initiative })\n return\n }\n if (action === \"minus\") {\n initiative = initiative <= 1 ? 24 : initiative - 1\n await this.document.update({ \"system.initiative\": initiative })\n return\n }\n if (action === \"create\") {\n const html = `\n
\n
\n \n \n
\n
`\n const value = await Dialog.prompt({\n title: game.i18n.localize(\"CDE.TurnOrder\"),\n content: html,\n label: game.i18n.localize(\"CDE.Validate\"),\n callback: (dlg) => {\n const input = dlg.querySelector(\"input[name='initiative']\")\n return Number(input?.value ?? initiative)\n },\n })\n if (Number.isFinite(value)) {\n const sanitized = foundry.utils.clamp(Number(value), 1, 24)\n await this.document.update({ \"system.initiative\": sanitized })\n }\n }\n })\n })\n }\n\n #bindPrefs() {\n const button = this.element?.querySelector(\".click-prefs\")\n if (!button) return\n button.addEventListener(\"click\", async () => {\n const current = this.document.system.prefs?.typeofthrow ?? { choice: \"0\", check: true }\n const html = `\n
\n
\n \n \n
\n
\n \n \n
\n
`\n const prefs = await Dialog.prompt({\n title: game.i18n.localize(\"CDE.Preferences\"),\n content: html,\n label: game.i18n.localize(\"CDE.Validate\"),\n callback: (dlg) => {\n const choice = dlg.querySelector(\"select[name='choice']\")?.value ?? \"0\"\n const check = dlg.querySelector(\"input[name='check']\")?.checked ?? false\n return { choice, check }\n },\n })\n if (prefs) {\n await this.document.update({\n \"system.prefs.typeofthrow.choice\": String(prefs.choice),\n \"system.prefs.typeofthrow.check\": !!prefs.check,\n })\n }\n })\n }\n}\n", "import { CDEBaseActorSheet } from \"./base.js\"\n\nexport class CDENpcSheet extends CDEBaseActorSheet {\n static DEFAULT_OPTIONS = {\n classes: [\"npc\"],\n }\n\n static PARTS = {\n main: { template: \"systems/fvtt-chroniques-de-l-etrange/templates/actor/cde-npc-sheet.html\" },\n }\n\n tabGroups = { primary: \"description\" }\n\n async _prepareContext() {\n const context = await super._prepareContext()\n context.supernaturals = context.items.filter((item) => item.type === \"supernatural\")\n context.spells = context.items.filter((item) => item.type === \"spell\")\n context.kungfus = context.items.filter((item) => item.type === \"kungfu\")\n context.equipments = context.items.filter((item) => item.type === \"item\")\n return context\n }\n\n _onRender(context, options) {\n super._onRender?.(context, options)\n this.#bindInitiativeControls()\n }\n\n #bindInitiativeControls() {\n const buttons = this.element?.querySelectorAll(\".click-initiative-npc\")\n if (!buttons?.length) return\n buttons.forEach((button) => {\n button.addEventListener(\"click\", async () => {\n const action = button.dataset.libelId\n let initiative = this.document.system.initiative ?? 1\n if (action === \"plus\") {\n initiative = initiative >= 24 ? 1 : initiative + 1\n await this.document.update({ \"system.initiative\": initiative })\n return\n }\n if (action === \"minus\") {\n initiative = initiative <= 1 ? 24 : initiative - 1\n await this.document.update({ \"system.initiative\": initiative })\n return\n }\n if (action === \"create\") {\n const html = `\n
\n
\n \n \n
\n
`\n const value = await Dialog.prompt({\n title: game.i18n.localize(\"CDE.TurnOrder\"),\n content: html,\n label: game.i18n.localize(\"CDE.Validate\"),\n callback: (dlg) => Number(dlg.querySelector(\"input[name='initiative']\")?.value ?? initiative),\n })\n if (Number.isFinite(value)) {\n const sanitized = foundry.utils.clamp(Number(value), 1, 24)\n await this.document.update({ \"system.initiative\": sanitized })\n }\n }\n })\n })\n }\n}\n", "import { CDEBaseActorSheet } from \"./base.js\"\n\nexport class CDETinjiSheet extends CDEBaseActorSheet {\n static DEFAULT_OPTIONS = {\n classes: [\"tinji\"],\n }\n\n static PARTS = {\n main: { template: \"systems/fvtt-chroniques-de-l-etrange/templates/actor/cde-tinji-sheet.html\" },\n }\n\n tabGroups = { primary: \"tinji\" }\n}\n", "import { CDEBaseActorSheet } from \"./base.js\"\n\nexport class CDELoksyuSheet extends CDEBaseActorSheet {\n static DEFAULT_OPTIONS = {\n classes: [\"loksyu\"],\n }\n\n static PARTS = {\n main: { template: \"systems/fvtt-chroniques-de-l-etrange/templates/actor/cde-loksyu-sheet.html\" },\n }\n\n tabGroups = { primary: \"loksyu\" }\n}\n", "const { HandlebarsApplicationMixin } = foundry.applications.api\n\nexport class CDEBaseItemSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) {\n static DEFAULT_OPTIONS = {\n classes: [\"fvtt-chroniques-de-l-etrange\", \"item\"],\n position: { width: 520, height: \"auto\" },\n window: { resizable: true },\n form: { submitOnChange: true },\n actions: {},\n }\n\n tabGroups = { primary: \"description\" }\n\n async _prepareContext() {\n const cssClass = this.options.classes?.join(\" \") ?? \"\"\n const enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description ?? \"\", { async: true })\n const enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.notes ?? \"\", { async: true })\n return {\n item: this.document,\n system: this.document.system,\n systemData: this.document.system,\n editable: this.isEditable,\n cssClass,\n enrichedDescription,\n enrichedNotes,\n descriptionHTML: enrichedDescription,\n notesHTML: enrichedNotes,\n }\n }\n\n async _onFirstRender(context, options) {\n await super._onFirstRender(context, options)\n for (const [group, tab] of Object.entries(this.tabGroups)) {\n this.changeTab(tab, group, { force: true })\n }\n }\n\n _onRender(context, options) {\n for (const [group, tab] of Object.entries(this.tabGroups)) {\n this.changeTab(tab, group, { force: true })\n }\n }\n}\n", "import { SUBTYPES } from \"../../../config/constants.js\"\nimport { CDEBaseItemSheet } from \"./base.js\"\n\nexport class CDEItemSheet extends CDEBaseItemSheet {\n static DEFAULT_OPTIONS = {\n classes: [\"equipment\"],\n position: { width: 620, height: 580 },\n }\n\n static PARTS = {\n main: { template: \"systems/fvtt-chroniques-de-l-etrange/templates/item/cde-item-sheet.html\" },\n }\n\n async _prepareContext() {\n const context = await super._prepareContext()\n context.subtypes = SUBTYPES\n context.isWeapon = this.document.isWeapon\n context.isArmor = this.document.isArmor\n context.isSanhei = this.document.isSanhei\n context.isOther = this.document.isOther\n return context\n }\n}\n", "import { CDEBaseItemSheet } from \"./base.js\"\n\nexport class CDEKungfuSheet extends CDEBaseItemSheet {\n static DEFAULT_OPTIONS = {\n classes: [\"kungfu\"],\n position: { width: 720, height: 680 },\n }\n\n static PARTS = {\n main: { template: \"systems/fvtt-chroniques-de-l-etrange/templates/item/cde-kungfu-sheet.html\" },\n }\n\n async _prepareContext() {\n const context = await super._prepareContext()\n const techniques = this.document.system.techniques ?? {}\n const enrich = (value) => foundry.applications.ux.TextEditor.implementation.enrichHTML(value ?? \"\", { async: true })\n context.descriptionTechnique1HTML = await enrich(techniques.technique1?.technique)\n context.descriptionTechnique2HTML = await enrich(techniques.technique2?.technique)\n context.descriptionTechnique3HTML = await enrich(techniques.technique3?.technique)\n return context\n }\n}\n", "import { CDEBaseItemSheet } from \"./base.js\"\n\nexport class CDESpellSheet extends CDEBaseItemSheet {\n static DEFAULT_OPTIONS = {\n classes: [\"spell\"],\n position: { width: 660, height: 680 },\n }\n\n static PARTS = {\n main: { template: \"systems/fvtt-chroniques-de-l-etrange/templates/item/cde-spell-sheet.html\" },\n }\n\n async _prepareContext() {\n const context = await super._prepareContext()\n const enrich = (content) => foundry.applications.ux.TextEditor.implementation.enrichHTML(content ?? \"\", { async: true })\n context.spellDescriptionHTML = await enrich(this.document.system.description)\n context.componentsDescriptionHTML = await enrich(this.document.system.components)\n context.effectsDescriptionHTML = await enrich(this.document.system.effects)\n context.examplesDescriptionHTML = await enrich(this.document.system.examples)\n return context\n }\n}\n", "import { CDEBaseItemSheet } from \"./base.js\"\n\nexport class CDESupernaturalSheet extends CDEBaseItemSheet {\n static DEFAULT_OPTIONS = {\n classes: [\"supernatural\"],\n position: { width: 560, height: 520 },\n }\n\n static PARTS = {\n main: { template: \"systems/fvtt-chroniques-de-l-etrange/templates/item/cde-supernatural-sheet.html\" },\n }\n}\n", "import { SYSTEM_ID } from \"./config/constants.js\"\n\nconst MIGRATION_VERSION = \"3.0.0\"\n\nexport function registerSettings() {\n game.settings.register(SYSTEM_ID, \"migrationVersion\", {\n name: \"Migration version\",\n scope: \"world\",\n config: false,\n type: String,\n default: \"0.0.0\",\n })\n}\n\nexport async function migrateIfNeeded() {\n const current = game.system.version ?? MIGRATION_VERSION\n const stored = game.settings.get(SYSTEM_ID, \"migrationVersion\") ?? \"0.0.0\"\n if (!isNewerVersion(current, stored)) return\n\n ui.notifications.info(`CHRONIQUESDELETRANGE | Migration vers ${current} en cours...`, { permanent: true })\n await migrateActors()\n await migrateItems()\n await migrateCompendiumActors()\n await migrateCompendiumItems()\n await game.settings.set(SYSTEM_ID, \"migrationVersion\", current)\n ui.notifications.info(`CHRONIQUESDELETRANGE | Migration vers ${current} termin\u00E9e.`)\n}\n\nasync function migrateActors() {\n const updates = []\n for (const actor of game.actors.contents) {\n const updateData = migrateActorData(actor)\n if (Object.keys(updateData).length > 0) {\n updates.push(actor.update(updateData, { enforceTypes: false }))\n }\n }\n await Promise.all(updates)\n}\n\nasync function migrateCompendiumActors() {\n const packs = game.packs.filter((p) => p.documentName === \"Actor\" && p.metadata.system === SYSTEM_ID)\n for (const pack of packs) {\n const content = await pack.getDocuments()\n for (const actor of content) {\n const updateData = migrateActorData(actor)\n if (Object.keys(updateData).length > 0) {\n await actor.update(updateData, { pack: pack.collection, enforceTypes: false })\n }\n }\n }\n}\n\nasync function migrateItems() {\n const updates = []\n for (const item of game.items.contents) {\n const updateData = migrateItemData(item)\n if (Object.keys(updateData).length > 0) {\n updates.push(item.update(updateData, { enforceTypes: false }))\n }\n }\n await Promise.all(updates)\n}\n\nasync function migrateCompendiumItems() {\n const packs = game.packs.filter((p) => p.documentName === \"Item\" && p.metadata.system === SYSTEM_ID)\n for (const pack of packs) {\n const content = await pack.getDocuments()\n for (const item of content) {\n const updateData = migrateItemData(item)\n if (Object.keys(updateData).length > 0) {\n await item.update(updateData, { pack: pack.collection, enforceTypes: false })\n }\n }\n }\n}\n\nfunction migrateActorData(actor) {\n const updateData = {}\n const system = actor.system ?? {}\n const actorType = actor.type\n\n // Fix legacy typo: masteryofthway -> masteryoftheway\n const legacyMagic = system.magics?.masteryofthway\n if (legacyMagic && !system.magics?.masteryoftheway) {\n updateData[\"system.magics.masteryoftheway\"] = legacyMagic\n updateData[\"system.magics.-=masteryofthway\"] = null\n }\n\n // Ensure prefs.typeofthrow exists on relevant actor types\n if ((actorType === \"character\" || actorType === \"npc\") && !system.prefs?.typeofthrow) {\n const defaultCheck = actorType === \"character\"\n updateData[\"system.prefs.typeofthrow\"] = { check: defaultCheck, choice: \"0\" }\n }\n\n return updateData\n}\n\nfunction migrateItemData(item) {\n const updateData = {}\n const system = item.system ?? {}\n\n // Add item-specific migrations here as needed\n\n return updateData\n}\n", "import { ACTOR_TYPES, ITEM_TYPES, MAGICS, SUBTYPES, SYSTEM_ID } from \"./config/constants.js\"\nimport { preLocalizeConfig } from \"./config/localize.js\"\nimport { configureRuntime } from \"./config/runtime.js\"\nimport { CharacterDataModel, LoksyuDataModel, NpcDataModel, TinjiDataModel } from \"./data/actors/index.js\"\nimport { EquipmentDataModel, KungfuDataModel, SpellDataModel, SupernaturalDataModel } from \"./data/items/index.js\"\nimport { CDEMessage } from \"./documents/chat-message.js\"\nimport { CDEActor } from \"./documents/actor.js\"\nimport { CDEItem } from \"./documents/item.js\"\nimport { registerDice } from \"./ui/dice.js\"\nimport { registerHandlebarsHelpers } from \"./ui/helpers.js\"\nimport { preloadPartials } from \"./ui/templates.js\"\nimport { CDELoksyuSheet, CDECharacterSheet, CDENpcSheet, CDETinjiSheet } from \"./ui/sheets/actors/index.js\"\nimport { CDEItemSheet, CDEKungfuSheet, CDESpellSheet, CDESupernaturalSheet } from \"./ui/sheets/items/index.js\"\nimport { migrateIfNeeded, registerSettings } from \"./migration.js\"\n\nHooks.once(\"i18nInit\", preLocalizeConfig)\n\nHooks.once(\"init\", async () => {\n console.info(`CHRONIQUESDELETRANGE | Initializing ${SYSTEM_ID}`)\n\n registerSettings()\n\n game.system.CONST = { MAGICS, SUBTYPES }\n\n CONFIG.Actor.systemDataModels = {\n [ACTOR_TYPES.character]: CharacterDataModel,\n [ACTOR_TYPES.npc]: NpcDataModel,\n [ACTOR_TYPES.tinji]: TinjiDataModel,\n [ACTOR_TYPES.loksyu]: LoksyuDataModel,\n }\n CONFIG.Item.systemDataModels = {\n [ITEM_TYPES.item]: EquipmentDataModel,\n [ITEM_TYPES.kungfu]: KungfuDataModel,\n [ITEM_TYPES.spell]: SpellDataModel,\n [ITEM_TYPES.supernatural]: SupernaturalDataModel,\n }\n\n CONFIG.Actor.documentClass = CDEActor\n CONFIG.Item.documentClass = CDEItem\n CONFIG.ChatMessage.documentClass = CDEMessage\n\n configureRuntime()\n\n DocumentSheetConfig.unregisterSheet(Actor, \"core\", ActorSheet)\n DocumentSheetConfig.unregisterSheet(Item, \"core\", ItemSheet)\n\n DocumentSheetConfig.registerSheet(Actor, SYSTEM_ID, CDECharacterSheet, {\n types: [ACTOR_TYPES.character],\n makeDefault: true,\n label: \"CDE Character Sheet (V2)\",\n })\n DocumentSheetConfig.registerSheet(Actor, SYSTEM_ID, CDENpcSheet, {\n types: [ACTOR_TYPES.npc],\n makeDefault: true,\n label: \"CDE NPC Sheet (V2)\",\n })\n DocumentSheetConfig.registerSheet(Actor, SYSTEM_ID, CDETinjiSheet, {\n types: [ACTOR_TYPES.tinji],\n makeDefault: true,\n label: \"CDE Tinji Sheet (V2)\",\n })\n DocumentSheetConfig.registerSheet(Actor, SYSTEM_ID, CDELoksyuSheet, {\n types: [ACTOR_TYPES.loksyu],\n makeDefault: true,\n label: \"CDE Loksyu Sheet (V2)\",\n })\n\n DocumentSheetConfig.registerSheet(Item, SYSTEM_ID, CDEItemSheet, {\n types: [ITEM_TYPES.item],\n makeDefault: true,\n label: \"CDE Item Sheet (V2)\",\n })\n DocumentSheetConfig.registerSheet(Item, SYSTEM_ID, CDEKungfuSheet, {\n types: [ITEM_TYPES.kungfu],\n makeDefault: true,\n label: \"CDE KungFu Sheet (V2)\",\n })\n DocumentSheetConfig.registerSheet(Item, SYSTEM_ID, CDESpellSheet, {\n types: [ITEM_TYPES.spell],\n makeDefault: true,\n label: \"CDE Spell Sheet (V2)\",\n })\n DocumentSheetConfig.registerSheet(Item, SYSTEM_ID, CDESupernaturalSheet, {\n types: [ITEM_TYPES.supernatural],\n makeDefault: true,\n label: \"CDE Supernatural Sheet (V2)\",\n })\n\n await preloadPartials()\n registerHandlebarsHelpers()\n registerDice()\n Hooks.on(\"renderSettings\", (_app, html) => injectCompendiumLink(html))\n\n console.info(`CHRONIQUESDELETRANGE | Initialized`)\n})\n\nHooks.once(\"ready\", async () => {\n if (!game.modules.get(\"lib-wrapper\")?.active && game.user.isGM) {\n ui.notifications.error(\"System fvtt-chroniques-de-l-etrange requires the 'libWrapper' module. Please install and activate it.\")\n }\n await migrateIfNeeded()\n})\n\nfunction injectCompendiumLink(html) {\n const header = html[0]?.querySelector?.(\"h4.divider\")\n if (!header) return\n\n const section = document.createElement(\"section\")\n section.classList.add(\"settings\", \"flexcol\")\n section.innerHTML = `\n \n
\n \n
\n Guide d'installation\n \n

Rendez-vous sur le site de l'\u00E9diteur, t\u00E9l\u00E9chargez les PDF contenant les liens vers les compendia, puis ajoutez leurs manifestes dans Foundry.

\n
\n
\n
\n `\n section.querySelector(\"button[data-action='open-cde-link']\")?.addEventListener(\"click\", () => {\n window.open(\"https://antre-monde.com/les-chroniques-de-letrengae/\", \"_blank\")\n })\n\n header.parentNode.insertBefore(section, header)\n}\n"], + "mappings": "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", + "names": ["HandlebarsApplicationMixin"] +} diff --git a/files/cde-lights-for-torch-module.json b/files/cde-lights-for-torch-module.json new file mode 100644 index 0000000..55d6f1c --- /dev/null +++ b/files/cde-lights-for-torch-module.json @@ -0,0 +1,76 @@ +{ + "fvtt-chroniques-de-l-etrange": { + "system": "fvtt-chroniques-de-l-etrange", + "topology": "standard", + "quantity" : "quantity", + "aliases": {}, + "sources": { + "Lampe torche": { + "name": "Lampe torche", + "type": "item", + "consumable": false, + "states": 2, + "light": [ + { + "bright": 30, "dim": 300, "angle": 20, "color": "#c2fffb", "alpha": 0.5, "attenuation": 0.8 + } + ] + }, + "怪 Lampe torche": { + "name": "怪 Lampe torche", + "type": "item", + "consumable": false, + "states": 2, + "light": [ + { + "bright": 30, "dim": 300, "angle": 20, "color": "#c2fffb", "alpha": 0.5, "attenuation": 0.8 + } + ] + }, + "Flashlight": { + "name": "Flashlight", + "type": "item", + "consumable": false, + "states": 2, + "light": [ + { + "bright": 30, "dim": 300, "angle": 20, "color": "#c2fffb", "alpha": 0.5, "attenuation": 0.8 + } + ] + }, + "怪 Flashlight": { + "name": "怪 Flashlight", + "type": "item", + "consumable": false, + "states": 2, + "light": [ + { + "bright": 30, "dim": 300, "angle": 20, "color": "#c2fffb", "alpha": 0.5, "attenuation": 0.8 + } + ] + }, + "Linterna eléctrica": { + "name": "Linterna eléctrica", + "type": "item", + "consumable": false, + "states": 2, + "light": [ + { + "bright": 30, "dim": 300, "angle": 20, "color": "#c2fffb", "alpha": 0.5, "attenuation": 0.8 + } + ] + }, + "怪 Linterna eléctrica": { + "name": "怪 Linterna eléctrica", + "type": "item", + "consumable": false, + "states": 2, + "light": [ + { + "bright": 30, "dim": 300, "angle": 20, "color": "#c2fffb", "alpha": 0.5, "attenuation": 0.8 + } + ] + } + } + } +} diff --git a/fonts/Delius-Regular.ttf b/fonts/Delius-Regular.ttf new file mode 100644 index 0000000..2cd4c9a Binary files /dev/null and b/fonts/Delius-Regular.ttf differ diff --git a/fonts/DeliusUnicase-Bold.ttf b/fonts/DeliusUnicase-Bold.ttf new file mode 100644 index 0000000..bd260cd Binary files /dev/null and b/fonts/DeliusUnicase-Bold.ttf differ diff --git a/fonts/DeliusUnicase-Regular.ttf b/fonts/DeliusUnicase-Regular.ttf new file mode 100644 index 0000000..96ef9f4 Binary files /dev/null and b/fonts/DeliusUnicase-Regular.ttf differ diff --git a/fonts/OFL.txt b/fonts/OFL.txt new file mode 100644 index 0000000..c87d7d2 --- /dev/null +++ b/fonts/OFL.txt @@ -0,0 +1,96 @@ +Copyright (c) 2010, 2011, Natalia Raices, +Copyright (c) 2011, Igino Marini. (www.ikern.com|mail@iginomarini.com), +with Reserved Font Names "Delia", "Delia Unicase", "Delius" +and "Delius Unicase". + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/images/Capture d'�cran 2024-03-29 081605.png b/images/Capture d'�cran 2024-03-29 081605.png new file mode 100644 index 0000000..110a218 Binary files /dev/null and b/images/Capture d'�cran 2024-03-29 081605.png differ diff --git a/images/aide_magie_CdE_1.png b/images/aide_magie_CdE_1.png new file mode 100644 index 0000000..44c9c8a Binary files /dev/null and b/images/aide_magie_CdE_1.png differ diff --git a/images/aide_magie_CdE_2.png b/images/aide_magie_CdE_2.png new file mode 100644 index 0000000..7c6739c Binary files /dev/null and b/images/aide_magie_CdE_2.png differ diff --git a/images/aide_magie_CdE_3.png b/images/aide_magie_CdE_3.png new file mode 100644 index 0000000..50b4fcd Binary files /dev/null and b/images/aide_magie_CdE_3.png differ diff --git a/images/aspects/BOIS.gif b/images/aspects/BOIS.gif new file mode 100644 index 0000000..553a30a Binary files /dev/null and b/images/aspects/BOIS.gif differ diff --git a/images/aspects/EAU.gif b/images/aspects/EAU.gif new file mode 100644 index 0000000..c7dc703 Binary files /dev/null and b/images/aspects/EAU.gif differ diff --git a/images/aspects/FEU.gif b/images/aspects/FEU.gif new file mode 100644 index 0000000..8ff942d Binary files /dev/null and b/images/aspects/FEU.gif differ diff --git a/images/aspects/METAL.gif b/images/aspects/METAL.gif new file mode 100644 index 0000000..d81db93 Binary files /dev/null and b/images/aspects/METAL.gif differ diff --git a/images/aspects/TERRE.gif b/images/aspects/TERRE.gif new file mode 100644 index 0000000..77ed304 Binary files /dev/null and b/images/aspects/TERRE.gif differ diff --git a/images/background/Le_Monastere_Remi_Castaneda.jpg b/images/background/Le_Monastere_Remi_Castaneda.jpg new file mode 100644 index 0000000..9e04f52 Binary files /dev/null and b/images/background/Le_Monastere_Remi_Castaneda.jpg differ diff --git a/images/background/Le_Monast�re_R�mi_Castan�da.jpg b/images/background/Le_Monast�re_R�mi_Castan�da.jpg new file mode 100644 index 0000000..9e04f52 Binary files /dev/null and b/images/background/Le_Monast�re_R�mi_Castan�da.jpg differ diff --git a/images/background/accueil.jpg b/images/background/accueil.jpg new file mode 100644 index 0000000..0f76780 Binary files /dev/null and b/images/background/accueil.jpg differ diff --git a/images/background/carte_cde.png b/images/background/carte_cde.png new file mode 100644 index 0000000..211c585 Binary files /dev/null and b/images/background/carte_cde.png differ diff --git a/images/background/carte_hk.jpg b/images/background/carte_hk.jpg new file mode 100644 index 0000000..fccd15b Binary files /dev/null and b/images/background/carte_hk.jpg differ diff --git a/images/background/ecran.jpg b/images/background/ecran.jpg new file mode 100644 index 0000000..e350b29 Binary files /dev/null and b/images/background/ecran.jpg differ diff --git a/images/background/fat_si.png b/images/background/fat_si.png new file mode 100644 index 0000000..95332f2 Binary files /dev/null and b/images/background/fat_si.png differ diff --git a/images/background/fond_de_page_grand.png b/images/background/fond_de_page_grand.png new file mode 100644 index 0000000..19ca1bd Binary files /dev/null and b/images/background/fond_de_page_grand.png differ diff --git a/images/background/loksyu_roue_d_initiative.jpg b/images/background/loksyu_roue_d_initiative.jpg new file mode 100644 index 0000000..2a89cb8 Binary files /dev/null and b/images/background/loksyu_roue_d_initiative.jpg differ diff --git a/images/background/loksyu_whole.png b/images/background/loksyu_whole.png new file mode 100644 index 0000000..3ef3719 Binary files /dev/null and b/images/background/loksyu_whole.png differ diff --git a/images/background/nghang_whole.png b/images/background/nghang_whole.png new file mode 100644 index 0000000..99538a4 Binary files /dev/null and b/images/background/nghang_whole.png differ diff --git a/images/background/roue_d_initiative_whole.png b/images/background/roue_d_initiative_whole.png new file mode 100644 index 0000000..bc7a50d Binary files /dev/null and b/images/background/roue_d_initiative_whole.png differ diff --git a/images/background/roue_d_initiative_whole_w_numbers.png b/images/background/roue_d_initiative_whole_w_numbers.png new file mode 100644 index 0000000..bc8aa6b Binary files /dev/null and b/images/background/roue_d_initiative_whole_w_numbers.png differ diff --git a/images/background/supplement1.png b/images/background/supplement1.png new file mode 100644 index 0000000..b43da47 Binary files /dev/null and b/images/background/supplement1.png differ diff --git a/images/banners/actor-banner.webp b/images/banners/actor-banner.webp new file mode 100644 index 0000000..36aab03 Binary files /dev/null and b/images/banners/actor-banner.webp differ diff --git a/images/banners/adventure-banner.webp b/images/banners/adventure-banner.webp new file mode 100644 index 0000000..ff7d3b3 Binary files /dev/null and b/images/banners/adventure-banner.webp differ diff --git a/images/banners/cards-banner.webp b/images/banners/cards-banner.webp new file mode 100644 index 0000000..24d9146 Binary files /dev/null and b/images/banners/cards-banner.webp differ diff --git a/images/banners/item-banner.webp b/images/banners/item-banner.webp new file mode 100644 index 0000000..d12a844 Binary files /dev/null and b/images/banners/item-banner.webp differ diff --git a/images/banners/journalentry-banner.webp b/images/banners/journalentry-banner.webp new file mode 100644 index 0000000..4ab6cb1 Binary files /dev/null and b/images/banners/journalentry-banner.webp differ diff --git a/images/banners/macro-banner.webp b/images/banners/macro-banner.webp new file mode 100644 index 0000000..376aab4 Binary files /dev/null and b/images/banners/macro-banner.webp differ diff --git a/images/banners/playlist-banner.webp b/images/banners/playlist-banner.webp new file mode 100644 index 0000000..440a4e0 Binary files /dev/null and b/images/banners/playlist-banner.webp differ diff --git a/images/banners/rolltable-banner.webp b/images/banners/rolltable-banner.webp new file mode 100644 index 0000000..29889a9 Binary files /dev/null and b/images/banners/rolltable-banner.webp differ diff --git a/images/banners/scene-banner.webp b/images/banners/scene-banner.webp new file mode 100644 index 0000000..7360ad2 Binary files /dev/null and b/images/banners/scene-banner.webp differ diff --git a/images/bigsquare.png b/images/bigsquare.png new file mode 100644 index 0000000..7026d8e Binary files /dev/null and b/images/bigsquare.png differ diff --git a/images/boutons_initiative.png b/images/boutons_initiative.png new file mode 100644 index 0000000..af921fe Binary files /dev/null and b/images/boutons_initiative.png differ diff --git a/images/capacites-surnaturelles/ki-rin.png b/images/capacites-surnaturelles/ki-rin.png new file mode 100644 index 0000000..79d294d Binary files /dev/null and b/images/capacites-surnaturelles/ki-rin.png differ diff --git a/images/cde_bois.png b/images/cde_bois.png new file mode 100644 index 0000000..03cde3f Binary files /dev/null and b/images/cde_bois.png differ diff --git a/images/cde_eau.png b/images/cde_eau.png new file mode 100644 index 0000000..27a77d6 Binary files /dev/null and b/images/cde_eau.png differ diff --git a/images/cde_feu.png b/images/cde_feu.png new file mode 100644 index 0000000..94f6b61 Binary files /dev/null and b/images/cde_feu.png differ diff --git a/images/cde_fond_transp.png b/images/cde_fond_transp.png new file mode 100644 index 0000000..85e74a2 Binary files /dev/null and b/images/cde_fond_transp.png differ diff --git a/images/cde_metal.png b/images/cde_metal.png new file mode 100644 index 0000000..94e906f Binary files /dev/null and b/images/cde_metal.png differ diff --git a/images/cde_terre.png b/images/cde_terre.png new file mode 100644 index 0000000..9d64152 Binary files /dev/null and b/images/cde_terre.png differ diff --git a/images/cde_yang.png b/images/cde_yang.png new file mode 100644 index 0000000..9ce30cf Binary files /dev/null and b/images/cde_yang.png differ diff --git a/images/cde_yin.png b/images/cde_yin.png new file mode 100644 index 0000000..dba473f Binary files /dev/null and b/images/cde_yin.png differ diff --git a/images/cercle.png b/images/cercle.png new file mode 100644 index 0000000..53028af Binary files /dev/null and b/images/cercle.png differ diff --git a/images/d10-0.png b/images/d10-0.png new file mode 100644 index 0000000..1aa6f1b Binary files /dev/null and b/images/d10-0.png differ diff --git a/images/d10-1.png b/images/d10-1.png new file mode 100644 index 0000000..7939213 Binary files /dev/null and b/images/d10-1.png differ diff --git a/images/d10-10.png b/images/d10-10.png new file mode 100644 index 0000000..ae88223 Binary files /dev/null and b/images/d10-10.png differ diff --git a/images/d10-2.png b/images/d10-2.png new file mode 100644 index 0000000..de51107 Binary files /dev/null and b/images/d10-2.png differ diff --git a/images/d10-3.png b/images/d10-3.png new file mode 100644 index 0000000..0374f93 Binary files /dev/null and b/images/d10-3.png differ diff --git a/images/d10-4.png b/images/d10-4.png new file mode 100644 index 0000000..041ccb0 Binary files /dev/null and b/images/d10-4.png differ diff --git a/images/d10-5.png b/images/d10-5.png new file mode 100644 index 0000000..d8657b9 Binary files /dev/null and b/images/d10-5.png differ diff --git a/images/d10-6.png b/images/d10-6.png new file mode 100644 index 0000000..a2be96c Binary files /dev/null and b/images/d10-6.png differ diff --git a/images/d10-7.png b/images/d10-7.png new file mode 100644 index 0000000..0c0a890 Binary files /dev/null and b/images/d10-7.png differ diff --git a/images/d10-8.png b/images/d10-8.png new file mode 100644 index 0000000..c1d801a Binary files /dev/null and b/images/d10-8.png differ diff --git a/images/d10-9.png b/images/d10-9.png new file mode 100644 index 0000000..2ee6e32 Binary files /dev/null and b/images/d10-9.png differ diff --git a/images/d10-transparent.png b/images/d10-transparent.png new file mode 100644 index 0000000..96bf629 Binary files /dev/null and b/images/d10-transparent.png differ diff --git a/images/dice-plate/d10-0.png b/images/dice-plate/d10-0.png new file mode 100644 index 0000000..0aa634a Binary files /dev/null and b/images/dice-plate/d10-0.png differ diff --git a/images/dice-plate/d10-1.png b/images/dice-plate/d10-1.png new file mode 100644 index 0000000..8fc947b Binary files /dev/null and b/images/dice-plate/d10-1.png differ diff --git a/images/dice-plate/d10-2.png b/images/dice-plate/d10-2.png new file mode 100644 index 0000000..147161a Binary files /dev/null and b/images/dice-plate/d10-2.png differ diff --git a/images/dice-plate/d10-3.png b/images/dice-plate/d10-3.png new file mode 100644 index 0000000..e6c800f Binary files /dev/null and b/images/dice-plate/d10-3.png differ diff --git a/images/dice-plate/d10-4.png b/images/dice-plate/d10-4.png new file mode 100644 index 0000000..3ce5178 Binary files /dev/null and b/images/dice-plate/d10-4.png differ diff --git a/images/dice-plate/d10-5.png b/images/dice-plate/d10-5.png new file mode 100644 index 0000000..6e3be21 Binary files /dev/null and b/images/dice-plate/d10-5.png differ diff --git a/images/dice-plate/d10-6.png b/images/dice-plate/d10-6.png new file mode 100644 index 0000000..e0267e1 Binary files /dev/null and b/images/dice-plate/d10-6.png differ diff --git a/images/dice-plate/d10-7.png b/images/dice-plate/d10-7.png new file mode 100644 index 0000000..2e57409 Binary files /dev/null and b/images/dice-plate/d10-7.png differ diff --git a/images/dice-plate/d10-8.png b/images/dice-plate/d10-8.png new file mode 100644 index 0000000..09a13fc Binary files /dev/null and b/images/dice-plate/d10-8.png differ diff --git a/images/dice-plate/d10-9.png b/images/dice-plate/d10-9.png new file mode 100644 index 0000000..67765de Binary files /dev/null and b/images/dice-plate/d10-9.png differ diff --git a/images/dice-so-nice/d10-1.webp b/images/dice-so-nice/d10-1.webp new file mode 100644 index 0000000..eac5fd5 Binary files /dev/null and b/images/dice-so-nice/d10-1.webp differ diff --git a/images/dice-so-nice/d10-10.webp b/images/dice-so-nice/d10-10.webp new file mode 100644 index 0000000..4093389 Binary files /dev/null and b/images/dice-so-nice/d10-10.webp differ diff --git a/images/dice-so-nice/d10-2.webp b/images/dice-so-nice/d10-2.webp new file mode 100644 index 0000000..093dafa Binary files /dev/null and b/images/dice-so-nice/d10-2.webp differ diff --git a/images/dice-so-nice/d10-3.webp b/images/dice-so-nice/d10-3.webp new file mode 100644 index 0000000..7f8e2cd Binary files /dev/null and b/images/dice-so-nice/d10-3.webp differ diff --git a/images/dice-so-nice/d10-4.webp b/images/dice-so-nice/d10-4.webp new file mode 100644 index 0000000..58f3551 Binary files /dev/null and b/images/dice-so-nice/d10-4.webp differ diff --git a/images/dice-so-nice/d10-5.webp b/images/dice-so-nice/d10-5.webp new file mode 100644 index 0000000..6f5632d Binary files /dev/null and b/images/dice-so-nice/d10-5.webp differ diff --git a/images/dice-so-nice/d10-6.webp b/images/dice-so-nice/d10-6.webp new file mode 100644 index 0000000..b2e14a5 Binary files /dev/null and b/images/dice-so-nice/d10-6.webp differ diff --git a/images/dice-so-nice/d10-7.webp b/images/dice-so-nice/d10-7.webp new file mode 100644 index 0000000..b5802c1 Binary files /dev/null and b/images/dice-so-nice/d10-7.webp differ diff --git a/images/dice-so-nice/d10-8.webp b/images/dice-so-nice/d10-8.webp new file mode 100644 index 0000000..c291b43 Binary files /dev/null and b/images/dice-so-nice/d10-8.webp differ diff --git a/images/dice-so-nice/d10-9.webp b/images/dice-so-nice/d10-9.webp new file mode 100644 index 0000000..e3389fc Binary files /dev/null and b/images/dice-so-nice/d10-9.webp differ diff --git a/images/dice-so-nice/digit/d10-1.webp b/images/dice-so-nice/digit/d10-1.webp new file mode 100644 index 0000000..25dde09 Binary files /dev/null and b/images/dice-so-nice/digit/d10-1.webp differ diff --git a/images/dice-so-nice/digit/d10-10.webp b/images/dice-so-nice/digit/d10-10.webp new file mode 100644 index 0000000..49376fd Binary files /dev/null and b/images/dice-so-nice/digit/d10-10.webp differ diff --git a/images/dice-so-nice/digit/d10-2.webp b/images/dice-so-nice/digit/d10-2.webp new file mode 100644 index 0000000..caed4ad Binary files /dev/null and b/images/dice-so-nice/digit/d10-2.webp differ diff --git a/images/dice-so-nice/digit/d10-3.webp b/images/dice-so-nice/digit/d10-3.webp new file mode 100644 index 0000000..7df2fe7 Binary files /dev/null and b/images/dice-so-nice/digit/d10-3.webp differ diff --git a/images/dice-so-nice/digit/d10-4.webp b/images/dice-so-nice/digit/d10-4.webp new file mode 100644 index 0000000..b6b7e71 Binary files /dev/null and b/images/dice-so-nice/digit/d10-4.webp differ diff --git a/images/dice-so-nice/digit/d10-5.webp b/images/dice-so-nice/digit/d10-5.webp new file mode 100644 index 0000000..d7a7f81 Binary files /dev/null and b/images/dice-so-nice/digit/d10-5.webp differ diff --git a/images/dice-so-nice/digit/d10-6.webp b/images/dice-so-nice/digit/d10-6.webp new file mode 100644 index 0000000..0a275eb Binary files /dev/null and b/images/dice-so-nice/digit/d10-6.webp differ diff --git a/images/dice-so-nice/digit/d10-7.webp b/images/dice-so-nice/digit/d10-7.webp new file mode 100644 index 0000000..10b8a86 Binary files /dev/null and b/images/dice-so-nice/digit/d10-7.webp differ diff --git a/images/dice-so-nice/digit/d10-8.webp b/images/dice-so-nice/digit/d10-8.webp new file mode 100644 index 0000000..a9470b1 Binary files /dev/null and b/images/dice-so-nice/digit/d10-8.webp differ diff --git a/images/dice-so-nice/digit/d10-9.webp b/images/dice-so-nice/digit/d10-9.webp new file mode 100644 index 0000000..1910710 Binary files /dev/null and b/images/dice-so-nice/digit/d10-9.webp differ diff --git a/images/fat_si/billy.png b/images/fat_si/billy.png new file mode 100644 index 0000000..847b693 Binary files /dev/null and b/images/fat_si/billy.png differ diff --git a/images/fat_si/brenda.png b/images/fat_si/brenda.png new file mode 100644 index 0000000..83892b3 Binary files /dev/null and b/images/fat_si/brenda.png differ diff --git a/images/fat_si/danny.png b/images/fat_si/danny.png new file mode 100644 index 0000000..3147a51 Binary files /dev/null and b/images/fat_si/danny.png differ diff --git a/images/fat_si/emerson.png b/images/fat_si/emerson.png new file mode 100644 index 0000000..6f55a40 Binary files /dev/null and b/images/fat_si/emerson.png differ diff --git a/images/fat_si/freddie.png b/images/fat_si/freddie.png new file mode 100644 index 0000000..308398d Binary files /dev/null and b/images/fat_si/freddie.png differ diff --git a/images/fat_si/lily.png b/images/fat_si/lily.png new file mode 100644 index 0000000..7fa548e Binary files /dev/null and b/images/fat_si/lily.png differ diff --git a/images/fat_si/maggie.png b/images/fat_si/maggie.png new file mode 100644 index 0000000..43386d8 Binary files /dev/null and b/images/fat_si/maggie.png differ diff --git a/images/fat_si/mallory.png b/images/fat_si/mallory.png new file mode 100644 index 0000000..6d48db3 Binary files /dev/null and b/images/fat_si/mallory.png differ diff --git a/images/fat_si/penny.png b/images/fat_si/penny.png new file mode 100644 index 0000000..a135ee9 Binary files /dev/null and b/images/fat_si/penny.png differ diff --git a/images/fat_si/sam.png b/images/fat_si/sam.png new file mode 100644 index 0000000..0118963 Binary files /dev/null and b/images/fat_si/sam.png differ diff --git a/images/fond_de_page.png b/images/fond_de_page.png new file mode 100644 index 0000000..3a78e3e Binary files /dev/null and b/images/fond_de_page.png differ diff --git a/images/installe_compendium.png b/images/installe_compendium.png new file mode 100644 index 0000000..60b3942 Binary files /dev/null and b/images/installe_compendium.png differ diff --git a/images/jetons/aides_de_jeu/jeton_zeongkei_scenario/Jeton_Zeongkei_Scenario.png b/images/jetons/aides_de_jeu/jeton_zeongkei_scenario/Jeton_Zeongkei_Scenario.png new file mode 100644 index 0000000..5b7602a Binary files /dev/null and b/images/jetons/aides_de_jeu/jeton_zeongkei_scenario/Jeton_Zeongkei_Scenario.png differ diff --git a/images/jetons/aides_de_jeu/jetons_ann_lung_ami_rom1/Ann_Lung_pastel_token.png b/images/jetons/aides_de_jeu/jetons_ann_lung_ami_rom1/Ann_Lung_pastel_token.png new file mode 100644 index 0000000..f652dca Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_ann_lung_ami_rom1/Ann_Lung_pastel_token.png differ diff --git a/images/jetons/aides_de_jeu/jetons_ann_lung_ami_rom1/Ann_Lung_token.png b/images/jetons/aides_de_jeu/jetons_ann_lung_ami_rom1/Ann_Lung_token.png new file mode 100644 index 0000000..6297c33 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_ann_lung_ami_rom1/Ann_Lung_token.png differ diff --git a/images/jetons/aides_de_jeu/jetons_autres_ia_rom1/autre_d�mon.png b/images/jetons/aides_de_jeu/jetons_autres_ia_rom1/autre_d�mon.png new file mode 100644 index 0000000..cb04ba5 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_autres_ia_rom1/autre_d�mon.png differ diff --git a/images/jetons/aides_de_jeu/jetons_autres_ia_rom1/autre_fant�me.png b/images/jetons/aides_de_jeu/jetons_autres_ia_rom1/autre_fant�me.png new file mode 100644 index 0000000..3bb3c71 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_autres_ia_rom1/autre_fant�me.png differ diff --git a/images/jetons/aides_de_jeu/jetons_divers/traditional-chinese-man.png b/images/jetons/aides_de_jeu/jetons_divers/traditional-chinese-man.png new file mode 100644 index 0000000..8d0c001 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_divers/traditional-chinese-man.png differ diff --git a/images/jetons/aides_de_jeu/jetons_divers/traditional-chinese-people.png b/images/jetons/aides_de_jeu/jetons_divers/traditional-chinese-people.png new file mode 100644 index 0000000..8c09181 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_divers/traditional-chinese-people.png differ diff --git a/images/jetons/aides_de_jeu/jetons_divers/traditional-chinese-woman.png b/images/jetons/aides_de_jeu/jetons_divers/traditional-chinese-woman.png new file mode 100644 index 0000000..25a21d1 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_divers/traditional-chinese-woman.png differ diff --git a/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/D10-0-blanc.png b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/D10-0-blanc.png new file mode 100644 index 0000000..1aa6f1b Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/D10-0-blanc.png differ diff --git a/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/Jeton_TinJi.webp b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/Jeton_TinJi.webp new file mode 100644 index 0000000..b4695db Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/Jeton_TinJi.webp differ diff --git a/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-1-blanc.png b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-1-blanc.png new file mode 100644 index 0000000..7939213 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-1-blanc.png differ diff --git a/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-10-blanc.png b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-10-blanc.png new file mode 100644 index 0000000..ae88223 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-10-blanc.png differ diff --git a/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-2-blanc.png b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-2-blanc.png new file mode 100644 index 0000000..de51107 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-2-blanc.png differ diff --git a/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-3-blanc.png b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-3-blanc.png new file mode 100644 index 0000000..0374f93 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-3-blanc.png differ diff --git a/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-4-blanc.png b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-4-blanc.png new file mode 100644 index 0000000..041ccb0 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-4-blanc.png differ diff --git a/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-5-blanc.png b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-5-blanc.png new file mode 100644 index 0000000..d8657b9 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-5-blanc.png differ diff --git a/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-6-blanc.png b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-6-blanc.png new file mode 100644 index 0000000..a2be96c Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-6-blanc.png differ diff --git a/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-7-blanc.png b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-7-blanc.png new file mode 100644 index 0000000..0c0a890 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-7-blanc.png differ diff --git a/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-8-blanc.png b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-8-blanc.png new file mode 100644 index 0000000..c1d801a Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-8-blanc.png differ diff --git a/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-9-blanc.png b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-9-blanc.png new file mode 100644 index 0000000..2ee6e32 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/d10-9-blanc.png differ diff --git a/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/tigre_dragon.png b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/tigre_dragon.png new file mode 100644 index 0000000..5b91f42 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/tigre_dragon.png differ diff --git a/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/tigre_dragon_256.png b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/tigre_dragon_256.png new file mode 100644 index 0000000..d910351 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_elements_jeu_vtt/tigre_dragon_256.png differ diff --git a/images/jetons/aides_de_jeu/jetons_habitats/house.png b/images/jetons/aides_de_jeu/jetons_habitats/house.png new file mode 100644 index 0000000..d3221d5 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_habitats/house.png differ diff --git a/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/big-diamond-ring.png b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/big-diamond-ring.png new file mode 100644 index 0000000..f00cd74 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/big-diamond-ring.png differ diff --git a/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/cigarette.png b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/cigarette.png new file mode 100644 index 0000000..2adfade Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/cigarette.png differ diff --git a/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/delicate-perfume.png b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/delicate-perfume.png new file mode 100644 index 0000000..a53c9cc Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/delicate-perfume.png differ diff --git a/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/emerald-necklace.png b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/emerald-necklace.png new file mode 100644 index 0000000..f952835 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/emerald-necklace.png differ diff --git a/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/feather.png b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/feather.png new file mode 100644 index 0000000..459b71e Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/feather.png differ diff --git a/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/knapsack.png b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/knapsack.png new file mode 100644 index 0000000..00f75fe Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/knapsack.png differ diff --git a/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/lighter.png b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/lighter.png new file mode 100644 index 0000000..0fbc6bb Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/lighter.png differ diff --git a/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/polo-shirt.png b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/polo-shirt.png new file mode 100644 index 0000000..36e3097 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/polo-shirt.png differ diff --git a/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/ringing-bell.png b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/ringing-bell.png new file mode 100644 index 0000000..738bcb4 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/ringing-bell.png differ diff --git a/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/smoking-pipe.png b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/smoking-pipe.png new file mode 100644 index 0000000..c9ba681 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/smoking-pipe.png differ diff --git a/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/spectacles.png b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/spectacles.png new file mode 100644 index 0000000..29b8d02 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_mode_et_accessoires/spectacles.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/Assistant - noire.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/Assistant - noire.png new file mode 100644 index 0000000..b211795 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/Assistant - noire.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/Assistant - rouge.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/Assistant - rouge.png new file mode 100644 index 0000000..afa4f22 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/Assistant - rouge.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/El�phant - noire.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/El�phant - noire.png new file mode 100644 index 0000000..15d2621 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/El�phant - noire.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/El�phant - rouge.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/El�phant - rouge.png new file mode 100644 index 0000000..df29332 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/El�phant - rouge.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/G�n�ral - noire.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/G�n�ral - noire.png new file mode 100644 index 0000000..dc789df Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/G�n�ral - noire.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/G�n�ral - rouge.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/G�n�ral - rouge.png new file mode 100644 index 0000000..94fddba Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/G�n�ral - rouge.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/canon1 - noire.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/canon1 - noire.png new file mode 100644 index 0000000..35e8e3a Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/canon1 - noire.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/canon1 - rouge.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/canon1 - rouge.png new file mode 100644 index 0000000..b9c589a Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/canon1 - rouge.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/canon2 - noire.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/canon2 - noire.png new file mode 100644 index 0000000..35e8e3a Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/canon2 - noire.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/canon2 - rouge.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/canon2 - rouge.png new file mode 100644 index 0000000..b9c589a Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/canon2 - rouge.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/chariot1 - noire.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/chariot1 - noire.png new file mode 100644 index 0000000..037ee4c Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/chariot1 - noire.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/chariot1 -rouge.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/chariot1 -rouge.png new file mode 100644 index 0000000..aeaa26c Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/chariot1 -rouge.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/chariot2 - noire.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/chariot2 - noire.png new file mode 100644 index 0000000..037ee4c Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/chariot2 - noire.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/chariot2 -rouge.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/chariot2 -rouge.png new file mode 100644 index 0000000..aeaa26c Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/chariot2 -rouge.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/cheval1 - noire.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/cheval1 - noire.png new file mode 100644 index 0000000..feca53e Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/cheval1 - noire.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/cheval1 - rouge.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/cheval1 - rouge.png new file mode 100644 index 0000000..89808be Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/cheval1 - rouge.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/cheval2 - noire.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/cheval2 - noire.png new file mode 100644 index 0000000..feca53e Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/cheval2 - noire.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/cheval2 - rouge.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/cheval2 - rouge.png new file mode 100644 index 0000000..89808be Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/cheval2 - rouge.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion1 - noire.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion1 - noire.png new file mode 100644 index 0000000..404834a Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion1 - noire.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion1 - rouge.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion1 - rouge.png new file mode 100644 index 0000000..ed15dd5 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion1 - rouge.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion2 - noire.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion2 - noire.png new file mode 100644 index 0000000..404834a Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion2 - noire.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion2 - rouge.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion2 - rouge.png new file mode 100644 index 0000000..ed15dd5 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion2 - rouge.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion3 - noire.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion3 - noire.png new file mode 100644 index 0000000..404834a Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion3 - noire.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion3 - rouge.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion3 - rouge.png new file mode 100644 index 0000000..ed15dd5 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion3 - rouge.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion4 - noire.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion4 - noire.png new file mode 100644 index 0000000..404834a Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion4 - noire.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion4 - rouge.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion4 - rouge.png new file mode 100644 index 0000000..ed15dd5 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion4 - rouge.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion5 - noire.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion5 - noire.png new file mode 100644 index 0000000..404834a Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion5 - noire.png differ diff --git a/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion5 - rouge.png b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion5 - rouge.png new file mode 100644 index 0000000..ed15dd5 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_pieces_zeongkei/pion5 - rouge.png differ diff --git a/images/jetons/aides_de_jeu/jetons_sapeque/OneDollarHKDCoin.png b/images/jetons/aides_de_jeu/jetons_sapeque/OneDollarHKDCoin.png new file mode 100644 index 0000000..62d51ab Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_sapeque/OneDollarHKDCoin.png differ diff --git a/images/jetons/aides_de_jeu/jetons_sapeque/SAPEQUE.png b/images/jetons/aides_de_jeu/jetons_sapeque/SAPEQUE.png new file mode 100644 index 0000000..0cf822e Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_sapeque/SAPEQUE.png differ diff --git a/images/jetons/aides_de_jeu/jetons_sapeque/TwoDollarHKDCoin.png b/images/jetons/aides_de_jeu/jetons_sapeque/TwoDollarHKDCoin.png new file mode 100644 index 0000000..c3edbaf Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_sapeque/TwoDollarHKDCoin.png differ diff --git a/images/jetons/aides_de_jeu/jetons_technologie/anvil-impact.png b/images/jetons/aides_de_jeu/jetons_technologie/anvil-impact.png new file mode 100644 index 0000000..2f94919 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_technologie/anvil-impact.png differ diff --git a/images/jetons/aides_de_jeu/jetons_technologie/archer.png b/images/jetons/aides_de_jeu/jetons_technologie/archer.png new file mode 100644 index 0000000..899769e Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_technologie/archer.png differ diff --git a/images/jetons/aides_de_jeu/jetons_technologie/auto-repair.png b/images/jetons/aides_de_jeu/jetons_technologie/auto-repair.png new file mode 100644 index 0000000..e0c173b Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_technologie/auto-repair.png differ diff --git a/images/jetons/aides_de_jeu/jetons_technologie/electric-torch.png b/images/jetons/aides_de_jeu/jetons_technologie/electric-torch.png new file mode 100644 index 0000000..b77df90 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_technologie/electric-torch.png differ diff --git a/images/jetons/aides_de_jeu/jetons_technologie/laptop.png b/images/jetons/aides_de_jeu/jetons_technologie/laptop.png new file mode 100644 index 0000000..d273b7a Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_technologie/laptop.png differ diff --git a/images/jetons/aides_de_jeu/jetons_technologie/nails.png b/images/jetons/aides_de_jeu/jetons_technologie/nails.png new file mode 100644 index 0000000..0ffb7de Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_technologie/nails.png differ diff --git a/images/jetons/aides_de_jeu/jetons_technologie/pc.png b/images/jetons/aides_de_jeu/jetons_technologie/pc.png new file mode 100644 index 0000000..3a3916c Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_technologie/pc.png differ diff --git a/images/jetons/aides_de_jeu/jetons_technologie/pestle-mortar.png b/images/jetons/aides_de_jeu/jetons_technologie/pestle-mortar.png new file mode 100644 index 0000000..3a0fec0 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_technologie/pestle-mortar.png differ diff --git a/images/jetons/aides_de_jeu/jetons_technologie/pistol-gun.png b/images/jetons/aides_de_jeu/jetons_technologie/pistol-gun.png new file mode 100644 index 0000000..99d8476 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_technologie/pistol-gun.png differ diff --git a/images/jetons/aides_de_jeu/jetons_technologie/scroll-quill.png b/images/jetons/aides_de_jeu/jetons_technologie/scroll-quill.png new file mode 100644 index 0000000..a3e65c1 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_technologie/scroll-quill.png differ diff --git a/images/jetons/aides_de_jeu/jetons_technologie/smartphone.png b/images/jetons/aides_de_jeu/jetons_technologie/smartphone.png new file mode 100644 index 0000000..d9f3260 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_technologie/smartphone.png differ diff --git a/images/jetons/aides_de_jeu/jetons_technologie/standing-potion.png b/images/jetons/aides_de_jeu/jetons_technologie/standing-potion.png new file mode 100644 index 0000000..0b0f973 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_technologie/standing-potion.png differ diff --git a/images/jetons/aides_de_jeu/jetons_technologie/voodoo-doll.png b/images/jetons/aides_de_jeu/jetons_technologie/voodoo-doll.png new file mode 100644 index 0000000..b75143c Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_technologie/voodoo-doll.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/auto.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/auto.png new file mode 100644 index 0000000..22f5401 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/auto.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/avion-de-ligne.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/avion-de-ligne.png new file mode 100644 index 0000000..c8617a3 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/avion-de-ligne.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/avion-helices.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/avion-helices.png new file mode 100644 index 0000000..656eeeb Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/avion-helices.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/barque.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/barque.png new file mode 100644 index 0000000..1bf9dc5 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/barque.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/bateau-peche.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/bateau-peche.png new file mode 100644 index 0000000..51d7f8a Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/bateau-peche.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/bus.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/bus.png new file mode 100644 index 0000000..d3545de Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/bus.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/ferry-boat.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/ferry-boat.png new file mode 100644 index 0000000..b9697a3 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/ferry-boat.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/funiculaire.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/funiculaire.png new file mode 100644 index 0000000..15bea86 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/funiculaire.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/helicoptere.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/helicoptere.png new file mode 100644 index 0000000..bde183a Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/helicoptere.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/jet.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/jet.png new file mode 100644 index 0000000..c050260 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/jet.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/jonque.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/jonque.png new file mode 100644 index 0000000..a7755ae Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/jonque.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/moto.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/moto.png new file mode 100644 index 0000000..3e5752b Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/moto.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/moto2.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/moto2.png new file mode 100644 index 0000000..c746016 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/moto2.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/paquebot.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/paquebot.png new file mode 100644 index 0000000..6af7192 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/paquebot.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/patins.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/patins.png new file mode 100644 index 0000000..b7f37cc Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/patins.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/pieton.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/pieton.png new file mode 100644 index 0000000..9e9301e Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/pieton.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/poussepousse.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/poussepousse.png new file mode 100644 index 0000000..ab4ee12 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/poussepousse.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/scooter.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/scooter.png new file mode 100644 index 0000000..1a48886 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/scooter.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/skateboard.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/skateboard.png new file mode 100644 index 0000000..d6d2f75 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/skateboard.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/taxi.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/taxi.png new file mode 100644 index 0000000..5fd9110 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/taxi.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/telepherique.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/telepherique.png new file mode 100644 index 0000000..34cebef Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/telepherique.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/train-metro.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/train-metro.png new file mode 100644 index 0000000..d9cc4c5 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/train-metro.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/tramway.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/tramway.png new file mode 100644 index 0000000..38e1448 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/tramway.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/trottinette.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/trottinette.png new file mode 100644 index 0000000..6e8d131 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/trottinette.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/vedette.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/vedette.png new file mode 100644 index 0000000..3f73676 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/vedette.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/velo.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/velo.png new file mode 100644 index 0000000..4524b48 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/velo.png differ diff --git a/images/jetons/aides_de_jeu/jetons_transports_hong_kong/voilier.png b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/voilier.png new file mode 100644 index 0000000..ff16700 Binary files /dev/null and b/images/jetons/aides_de_jeu/jetons_transports_hong_kong/voilier.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_diagrammes/CDE-ROUE-GARDIENS.png b/images/jetons/extraits_de_officiels/jetons_diagrammes/CDE-ROUE-GARDIENS.png new file mode 100644 index 0000000..c868d85 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_diagrammes/CDE-ROUE-GARDIENS.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_diagrammes/NgHang.png b/images/jetons/extraits_de_officiels/jetons_diagrammes/NgHang.png new file mode 100644 index 0000000..9152ee5 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_diagrammes/NgHang.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_diagrammes/labyrinthe.png b/images/jetons/extraits_de_officiels/jetons_diagrammes/labyrinthe.png new file mode 100644 index 0000000..8e7bd49 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_diagrammes/labyrinthe.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_diagrammes/loksyu.png b/images/jetons/extraits_de_officiels/jetons_diagrammes/loksyu.png new file mode 100644 index 0000000..f07b054 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_diagrammes/loksyu.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_diagrammes/roue.png b/images/jetons/extraits_de_officiels/jetons_diagrammes/roue.png new file mode 100644 index 0000000..8d4e812 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_diagrammes/roue.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_diagrammes/roue_gardiens.png b/images/jetons/extraits_de_officiels/jetons_diagrammes/roue_gardiens.png new file mode 100644 index 0000000..c868d85 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_diagrammes/roue_gardiens.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_diagrammes/roue_initiative.png b/images/jetons/extraits_de_officiels/jetons_diagrammes/roue_initiative.png new file mode 100644 index 0000000..8d4e812 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_diagrammes/roue_initiative.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_diagrammes/schemaloshu.png b/images/jetons/extraits_de_officiels/jetons_diagrammes/schemaloshu.png new file mode 100644 index 0000000..4a316e6 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_diagrammes/schemaloshu.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_1.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_1.png new file mode 100644 index 0000000..a398e4b Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_1.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_2.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_2.png new file mode 100644 index 0000000..39f8e56 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_2.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_3.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_3.png new file mode 100644 index 0000000..fa84227 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_3.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_4.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_4.png new file mode 100644 index 0000000..cc75b6f Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_4.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_5.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_5.png new file mode 100644 index 0000000..95a9597 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_5.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_6.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_6.png new file mode 100644 index 0000000..86abda5 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/TokenCdE_6.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_10.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_10.png new file mode 100644 index 0000000..60d2f4a Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_10.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_11.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_11.png new file mode 100644 index 0000000..12c9fc3 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_11.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_12.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_12.png new file mode 100644 index 0000000..1d9cd98 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_12.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_13.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_13.png new file mode 100644 index 0000000..531ea98 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_13.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_14.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_14.png new file mode 100644 index 0000000..6bd24ec Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_14.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_15.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_15.png new file mode 100644 index 0000000..216561f Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_15.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_16.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_16.png new file mode 100644 index 0000000..8f8de27 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_16.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_17.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_17.png new file mode 100644 index 0000000..8954a0f Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_17.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_18.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_18.png new file mode 100644 index 0000000..78e61ad Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_18.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_19.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_19.png new file mode 100644 index 0000000..a34bd6d Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_19.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_20.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_20.png new file mode 100644 index 0000000..da75320 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_20.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_21.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_21.png new file mode 100644 index 0000000..045d3cc Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_21.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_22.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_22.png new file mode 100644 index 0000000..67eb0fa Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_22.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_23.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_23.png new file mode 100644 index 0000000..124baeb Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_23.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_24.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_24.png new file mode 100644 index 0000000..b9d3b13 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_24.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_25.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_25.png new file mode 100644 index 0000000..602ded8 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_25.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_26.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_26.png new file mode 100644 index 0000000..047a59d Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_26.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_27.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_27.png new file mode 100644 index 0000000..1b16306 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_27.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_28.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_28.png new file mode 100644 index 0000000..2c520ac Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_28.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_29.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_29.png new file mode 100644 index 0000000..578a9a8 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_29.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_30.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_30.png new file mode 100644 index 0000000..baa05fc Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_30.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_31.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_31.png new file mode 100644 index 0000000..8111962 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_31.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_32.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_32.png new file mode 100644 index 0000000..f96b422 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_32.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_33.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_33.png new file mode 100644 index 0000000..4e76f1a Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_33.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_34.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_34.png new file mode 100644 index 0000000..95e9c6c Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_34.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_35.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_35.png new file mode 100644 index 0000000..a4a165a Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_35.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_36.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_36.png new file mode 100644 index 0000000..b7befc6 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_36.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_37.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_37.png new file mode 100644 index 0000000..7918908 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_37.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_38.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_38.png new file mode 100644 index 0000000..8d06b73 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_38.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_39.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_39.png new file mode 100644 index 0000000..0f323bf Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_39.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_40.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_40.png new file mode 100644 index 0000000..069d143 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_40.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_41.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_41.png new file mode 100644 index 0000000..591f8db Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_41.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_42.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_42.png new file mode 100644 index 0000000..cd988c2 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_42.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_43.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_43.png new file mode 100644 index 0000000..37834d7 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_43.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_44.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_44.png new file mode 100644 index 0000000..c016913 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_44.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_45.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_45.png new file mode 100644 index 0000000..941c385 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_45.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_46.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_46.png new file mode 100644 index 0000000..a9c6283 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_46.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_47.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_47.png new file mode 100644 index 0000000..37ab269 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_47.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_7.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_7.png new file mode 100644 index 0000000..3bc4818 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_7.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_8.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_8.png new file mode 100644 index 0000000..2ca64e9 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_8.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_9.png b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_9.png new file mode 100644 index 0000000..a7392c2 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_illus_LdB_CdE/tokenCdE_9.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_johnny_kwan/cedric.png b/images/jetons/extraits_de_officiels/jetons_johnny_kwan/cedric.png new file mode 100644 index 0000000..c67b3a5 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_johnny_kwan/cedric.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_johnny_kwan/johnny.png b/images/jetons/extraits_de_officiels/jetons_johnny_kwan/johnny.png new file mode 100644 index 0000000..6137cdf Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_johnny_kwan/johnny.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_johnny_kwan/johnny_en_pied.png b/images/jetons/extraits_de_officiels/jetons_johnny_kwan/johnny_en_pied.png new file mode 100644 index 0000000..6e6c82a Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_johnny_kwan/johnny_en_pied.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_johnny_kwan/romain.png b/images/jetons/extraits_de_officiels/jetons_johnny_kwan/romain.png new file mode 100644 index 0000000..389c21d Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_johnny_kwan/romain.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_kit/d�mon.png b/images/jetons/extraits_de_officiels/jetons_kit/d�mon.png new file mode 100644 index 0000000..68690ee Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_kit/d�mon.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_kit/homme_au_casque.png b/images/jetons/extraits_de_officiels/jetons_kit/homme_au_casque.png new file mode 100644 index 0000000..0964f9c Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_kit/homme_au_casque.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_kit/homme_�_la_batte.png b/images/jetons/extraits_de_officiels/jetons_kit/homme_�_la_batte.png new file mode 100644 index 0000000..9174740 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_kit/homme_�_la_batte.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_kit/louzing.png b/images/jetons/extraits_de_officiels/jetons_kit/louzing.png new file mode 100644 index 0000000..3aeb235 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_kit/louzing.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/billy.png b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/billy.png new file mode 100644 index 0000000..efece1e Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/billy.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/brenda.png b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/brenda.png new file mode 100644 index 0000000..cdfb192 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/brenda.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/danny.png b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/danny.png new file mode 100644 index 0000000..6a2847b Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/danny.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/emerson.png b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/emerson.png new file mode 100644 index 0000000..8a33da5 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/emerson.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/freddie.png b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/freddie.png new file mode 100644 index 0000000..5110022 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/freddie.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/lily.png b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/lily.png new file mode 100644 index 0000000..a02f11e Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/lily.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/maggie.png b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/maggie.png new file mode 100644 index 0000000..0468f85 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/maggie.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/mallory.png b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/mallory.png new file mode 100644 index 0000000..b919561 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/mallory.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/penny.png b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/penny.png new file mode 100644 index 0000000..b629cd4 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/penny.png differ diff --git a/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/sam.png b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/sam.png new file mode 100644 index 0000000..67d8589 Binary files /dev/null and b/images/jetons/extraits_de_officiels/jetons_pj_fat_si_pre_tires/sam.png differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/animaux/singe_blanc_fait_signe_venir_du_doigt.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/animaux/singe_blanc_fait_signe_venir_du_doigt.webp new file mode 100644 index 0000000..6217a6a Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/animaux/singe_blanc_fait_signe_venir_du_doigt.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/divers/bague_jade_tres_ancienne_motif_felin.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/divers/bague_jade_tres_ancienne_motif_felin.webp new file mode 100644 index 0000000..7c77fc9 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/divers/bague_jade_tres_ancienne_motif_felin.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/divers/choux_dans_champ_ressemblent_oeufs_d_alien.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/divers/choux_dans_champ_ressemblent_oeufs_d_alien.webp new file mode 100644 index 0000000..d55cf62 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/divers/choux_dans_champ_ressemblent_oeufs_d_alien.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/divers/epee_large_soutenue_par_plein_de_paumes.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/divers/epee_large_soutenue_par_plein_de_paumes.webp new file mode 100644 index 0000000..512ad39 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/divers/epee_large_soutenue_par_plein_de_paumes.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/divers/oeil_glabre_feminin_tein_fard_blanc.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/divers/oeil_glabre_feminin_tein_fard_blanc.webp new file mode 100644 index 0000000..882a6ae Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/divers/oeil_glabre_feminin_tein_fard_blanc.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/divers/pistolets_crosse_blanche_coffret_velour_rouge.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/divers/pistolets_crosse_blanche_coffret_velour_rouge.webp new file mode 100644 index 0000000..7c6eaaf Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/divers/pistolets_crosse_blanche_coffret_velour_rouge.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/couples/couple_semblent_danser_couteau_a_la_main.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/couples/couple_semblent_danser_couteau_a_la_main.webp new file mode 100644 index 0000000..5021769 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/couples/couple_semblent_danser_couteau_a_la_main.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/couples/couple_sont-adosses_dans_boite_de_nuit_ou_bar.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/couples/couple_sont-adosses_dans_boite_de_nuit_ou_bar.webp new file mode 100644 index 0000000..43cadba Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/couples/couple_sont-adosses_dans_boite_de_nuit_ou_bar.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_a_table_1.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_a_table_1.webp new file mode 100644 index 0000000..15b0ed2 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_a_table_1.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_a_table_2.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_a_table_2.webp new file mode 100644 index 0000000..4973b63 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_a_table_2.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_accroupie_main_sur_front.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_accroupie_main_sur_front.webp new file mode 100644 index 0000000..4ace8ca Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_accroupie_main_sur_front.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_allume_sa_cigarette_briquet.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_allume_sa_cigarette_briquet.webp new file mode 100644 index 0000000..f223837 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_allume_sa_cigarette_briquet.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_araignee_toile_sous_yeux.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_araignee_toile_sous_yeux.webp new file mode 100644 index 0000000..bff01af Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_araignee_toile_sous_yeux.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_au_micro_portant_petit_chien.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_au_micro_portant_petit_chien.webp new file mode 100644 index 0000000..47812fd Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_au_micro_portant_petit_chien.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_baisse_son_pistolet.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_baisse_son_pistolet.webp new file mode 100644 index 0000000..23f7943 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_baisse_son_pistolet.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_bandeau_oeil_droit.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_bandeau_oeil_droit.webp new file mode 100644 index 0000000..75d0bd2 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_bandeau_oeil_droit.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_bigoudis_multicolores_cigarette_au_bec.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_bigoudis_multicolores_cigarette_au_bec.webp new file mode 100644 index 0000000..735c9e5 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_bigoudis_multicolores_cigarette_au_bec.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_blonde_assise_jambes_nues.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_blonde_assise_jambes_nues.webp new file mode 100644 index 0000000..9c5c8ca Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_blonde_assise_jambes_nues.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_blouse_blanche_accoudee.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_blouse_blanche_accoudee.webp new file mode 100644 index 0000000..fe5b074 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_blouse_blanche_accoudee.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_blouse_violette_armes_blanches.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_blouse_violette_armes_blanches.webp new file mode 100644 index 0000000..d9f2681 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_blouse_violette_armes_blanches.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_boucles_d_oreille.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_boucles_d_oreille.webp new file mode 100644 index 0000000..43b90ef Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_boucles_d_oreille.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_bras_crois�s_fond_lumieres_nuit.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_bras_crois�s_fond_lumieres_nuit.webp new file mode 100644 index 0000000..f48cd1e Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_bras_crois�s_fond_lumieres_nuit.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_cagoule_zip_tres_gros_plan.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_cagoule_zip_tres_gros_plan.webp new file mode 100644 index 0000000..5628c4b Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_cagoule_zip_tres_gros_plan.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_chemise_nuit_verte_dans_draps.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_chemise_nuit_verte_dans_draps.webp new file mode 100644 index 0000000..831645d Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_chemise_nuit_verte_dans_draps.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_cheveux_d�colores_porte_main_a_son_oreille.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_cheveux_d�colores_porte_main_a_son_oreille.webp new file mode 100644 index 0000000..d739c12 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_cheveux_d�colores_porte_main_a_son_oreille.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_cheveux_longs_contre_jour.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_cheveux_longs_contre_jour.webp new file mode 100644 index 0000000..9905754 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_cheveux_longs_contre_jour.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_coiffure_cristaux_metal.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_coiffure_cristaux_metal.webp new file mode 100644 index 0000000..740ab67 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_coiffure_cristaux_metal.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_de_dos_ombrelle_rouge.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_de_dos_ombrelle_rouge.webp new file mode 100644 index 0000000..61fe3df Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_de_dos_ombrelle_rouge.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_boxe.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_boxe.webp new file mode 100644 index 0000000..f47727f Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_boxe.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_epaule_tatouee_image_crane.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_epaule_tatouee_image_crane.webp new file mode 100644 index 0000000..e382f20 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_epaule_tatouee_image_crane.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_epee_chapeau.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_epee_chapeau.webp new file mode 100644 index 0000000..e4eae75 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_epee_chapeau.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_mains_nues_1.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_mains_nues_1.webp new file mode 100644 index 0000000..871d170 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_mains_nues_1.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_mains_nues_2.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_mains_nues_2.webp new file mode 100644 index 0000000..34ab659 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_mains_nues_2.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_poignard.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_poignard.webp new file mode 100644 index 0000000..a0e0b01 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_poignard.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_poing_avant_bras_bandes.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_poing_avant_bras_bandes.webp new file mode 100644 index 0000000..d6d8bae Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_poing_avant_bras_bandes.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_poings_gantes.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_poings_gantes.webp new file mode 100644 index 0000000..5231da8 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_garde_poings_gantes.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_tailleur_sanglee.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_tailleur_sanglee.webp new file mode 100644 index 0000000..398e518 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_en_tailleur_sanglee.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_epaulette_grade_lunettes_soleil_sur_le_bout_du_nez.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_epaulette_grade_lunettes_soleil_sur_le_bout_du_nez.webp new file mode 100644 index 0000000..e009911 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_epaulette_grade_lunettes_soleil_sur_le_bout_du_nez.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_fardee_visage_blanc_tres_grand_decollete.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_fardee_visage_blanc_tres_grand_decollete.webp new file mode 100644 index 0000000..d4960f4 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_fardee_visage_blanc_tres_grand_decollete.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_fardee_visage_blanc_tres_gros_plan.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_fardee_visage_blanc_tres_gros_plan.webp new file mode 100644 index 0000000..7af730a Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_fardee_visage_blanc_tres_gros_plan.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_fardee_visage_rouge_yeux_miclos.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_fardee_visage_rouge_yeux_miclos.webp new file mode 100644 index 0000000..2a76957 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_fardee_visage_rouge_yeux_miclos.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_fusil_met_en_ joue.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_fusil_met_en_ joue.webp new file mode 100644 index 0000000..202c022 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_fusil_met_en_ joue.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_jambes_relev�es_crois�es.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_jambes_relev�es_crois�es.webp new file mode 100644 index 0000000..72f3206 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_jambes_relev�es_crois�es.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_joues_eclairees_lasers_rouges.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_joues_eclairees_lasers_rouges.webp new file mode 100644 index 0000000..d775cbc Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_joues_eclairees_lasers_rouges.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_larmes_ensanglantees_embrasse_couteau.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_larmes_ensanglantees_embrasse_couteau.webp new file mode 100644 index 0000000..383d562 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_larmes_ensanglantees_embrasse_couteau.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_larmes_visage.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_larmes_visage.webp new file mode 100644 index 0000000..cdb9f73 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_larmes_visage.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_longues_tresses_blanches.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_longues_tresses_blanches.webp new file mode 100644 index 0000000..7c539d4 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_longues_tresses_blanches.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_lunettes_gogles_sur_la_tete.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_lunettes_gogles_sur_la_tete.webp new file mode 100644 index 0000000..868d2f1 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_lunettes_gogles_sur_la_tete.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_lunettes_noires_porte_tenue_latex_noire.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_lunettes_noires_porte_tenue_latex_noire.webp new file mode 100644 index 0000000..1f0cd44 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_lunettes_noires_porte_tenue_latex_noire.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_lunettes_verres_rouges_robe_blanche_large_capuche.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_lunettes_verres_rouges_robe_blanche_large_capuche.webp new file mode 100644 index 0000000..44a5204 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_lunettes_verres_rouges_robe_blanche_large_capuche.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_lunettes_verres_rouges_telecommande_drone_recreatif.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_lunettes_verres_rouges_telecommande_drone_recreatif.webp new file mode 100644 index 0000000..6ea8038 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_lunettes_verres_rouges_telecommande_drone_recreatif.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_masque_filtre.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_masque_filtre.webp new file mode 100644 index 0000000..292566e Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_masque_filtre.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_masque_filtre_tire_au_pistolet.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_masque_filtre_tire_au_pistolet.webp new file mode 100644 index 0000000..e239cdc Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_masque_filtre_tire_au_pistolet.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_masque_noir_pantalon_lac�re.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_masque_noir_pantalon_lac�re.webp new file mode 100644 index 0000000..9ac888c Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_masque_noir_pantalon_lac�re.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_masque_pilote_de_chasse.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_masque_pilote_de_chasse.webp new file mode 100644 index 0000000..2feae87 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_masque_pilote_de_chasse.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_masque_regard.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_masque_regard.webp new file mode 100644 index 0000000..7ef685d Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_masque_regard.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_menton_dans_main.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_menton_dans_main.webp new file mode 100644 index 0000000..86338de Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_menton_dans_main.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_menton_dans_manteau.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_menton_dans_manteau.webp new file mode 100644 index 0000000..7e990f5 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_menton_dans_manteau.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_micro_oeillere_bizarre.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_micro_oeillere_bizarre.webp new file mode 100644 index 0000000..ae26e53 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_micro_oeillere_bizarre.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_ongles_metalliques_a_la_Freddie_Kruger.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_ongles_metalliques_a_la_Freddie_Kruger.webp new file mode 100644 index 0000000..9b03c42 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_ongles_metalliques_a_la_Freddie_Kruger.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_pancarte_i_m_busy.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_pancarte_i_m_busy.webp new file mode 100644 index 0000000..fc535dd Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_pancarte_i_m_busy.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_parapluie_transparent_passe_devant_ideogrammes.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_parapluie_transparent_passe_devant_ideogrammes.webp new file mode 100644 index 0000000..2b94189 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_parapluie_transparent_passe_devant_ideogrammes.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_petite_robe_noire.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_petite_robe_noire.webp new file mode 100644 index 0000000..ec48539 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_petite_robe_noire.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_pistolet_bizarre_relie_respirateur.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_pistolet_bizarre_relie_respirateur.webp new file mode 100644 index 0000000..c81dc05 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_pistolet_bizarre_relie_respirateur.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_pointe_son_pistolet.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_pointe_son_pistolet.webp new file mode 100644 index 0000000..0bbd0f8 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_pointe_son_pistolet.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_portant_jupe_manie_un_bazooka.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_portant_jupe_manie_un_bazooka.webp new file mode 100644 index 0000000..91779be Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_portant_jupe_manie_un_bazooka.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_porte_sabre_ensanglante.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_porte_sabre_ensanglante.webp new file mode 100644 index 0000000..7b6fbbb Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_porte_sabre_ensanglante.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_protege_visage_plexiglass.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_protege_visage_plexiglass.webp new file mode 100644 index 0000000..57bb745 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_protege_visage_plexiglass.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_ressemble_araignee_grimpe_escalier_a4pattes.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_ressemble_araignee_grimpe_escalier_a4pattes.webp new file mode 100644 index 0000000..8aee39e Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_ressemble_araignee_grimpe_escalier_a4pattes.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_robe_a_plis_rouge.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_robe_a_plis_rouge.webp new file mode 100644 index 0000000..014b2f7 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_robe_a_plis_rouge.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_robe_chinoise_jaune_fait_signe_balle_dans_tete.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_robe_chinoise_jaune_fait_signe_balle_dans_tete.webp new file mode 100644 index 0000000..8d813fe Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_robe_chinoise_jaune_fait_signe_balle_dans_tete.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_robe_chinoise_joint_ses_mains.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_robe_chinoise_joint_ses_mains.webp new file mode 100644 index 0000000..edbae8b Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_robe_chinoise_joint_ses_mains.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_robe_porte_fusil_lourd_devant_tuyaux.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_robe_porte_fusil_lourd_devant_tuyaux.webp new file mode 100644 index 0000000..cb6c17c Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_robe_porte_fusil_lourd_devant_tuyaux.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_robe_tricot_ceinture_banane.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_robe_tricot_ceinture_banane.webp new file mode 100644 index 0000000..424596d Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_robe_tricot_ceinture_banane.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_rousse_masque_cloute.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_rousse_masque_cloute.webp new file mode 100644 index 0000000..2c4e1d7 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_rousse_masque_cloute.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_rousse_yeux_clos.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_rousse_yeux_clos.webp new file mode 100644 index 0000000..97d5433 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_rousse_yeux_clos.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_s_imisce_entre_2_portes_bois_rouge.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_s_imisce_entre_2_portes_bois_rouge.webp new file mode 100644 index 0000000..0438555 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_s_imisce_entre_2_portes_bois_rouge.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_sac_a_main_assise_table_poker_.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_sac_a_main_assise_table_poker_.webp new file mode 100644 index 0000000..196a1dc Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_sac_a_main_assise_table_poker_.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_seringue.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_seringue.webp new file mode 100644 index 0000000..1b5b467 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_seringue.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_sort_fil_metalique_etrangler.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_sort_fil_metalique_etrangler.webp new file mode 100644 index 0000000..a7eb09d Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_sort_fil_metalique_etrangler.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_sort_fumee_bouche_main_tatouee.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_sort_fumee_bouche_main_tatouee.webp new file mode 100644 index 0000000..4cbfa62 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_sort_fumee_bouche_main_tatouee.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_tete_dans_le_creux_son_bras.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_tete_dans_le_creux_son_bras.webp new file mode 100644 index 0000000..a3d7099 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_tete_dans_le_creux_son_bras.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_tire_sur_lasso_canne.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_tire_sur_lasso_canne.webp new file mode 100644 index 0000000..ffebf73 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_tire_sur_lasso_canne.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_tres_agee_�dentee_sourit.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_tres_agee_�dentee_sourit.webp new file mode 100644 index 0000000..ff22acb Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_tres_agee_�dentee_sourit.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_tres_musclee_fait_signe_salut_asiatique.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_tres_musclee_fait_signe_salut_asiatique.webp new file mode 100644 index 0000000..c3e29d2 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_tres_musclee_fait_signe_salut_asiatique.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_veste_sanglee_penche_la_tete.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_veste_sanglee_penche_la_tete.webp new file mode 100644 index 0000000..5f818d7 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_veste_sanglee_penche_la_tete.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_visage_diffracte.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_visage_diffracte.webp new file mode 100644 index 0000000..8e27ea3 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_visage_diffracte.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_visage_tatoue.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_visage_tatoue.webp new file mode 100644 index 0000000..41747f0 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_visage_tatoue.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_visage_tire_langue_fourchue.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_visage_tire_langue_fourchue.webp new file mode 100644 index 0000000..cba952a Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_visage_tire_langue_fourchue.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_visiere_bleue.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_visiere_bleue.webp new file mode 100644 index 0000000..72d8333 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_visiere_bleue.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_yeux_bandes_bandeau_noir.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_yeux_bandes_bandeau_noir.webp new file mode 100644 index 0000000..b0a9fe5 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_yeux_bandes_bandeau_noir.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_yeux_bandes_voilette_bustier_rouge_larges_plis.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_yeux_bandes_voilette_bustier_rouge_larges_plis.webp new file mode 100644 index 0000000..76780f3 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_yeux_bandes_voilette_bustier_rouge_larges_plis.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_yeux_bleus.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_yeux_bleus.webp new file mode 100644 index 0000000..9fddb58 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_yeux_bleus.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_yeux_fardes_blanc.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_yeux_fardes_blanc.webp new file mode 100644 index 0000000..30fbc54 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femme_yeux_fardes_blanc.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femmes_levres_fardees_piercing.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femmes_levres_fardees_piercing.webp new file mode 100644 index 0000000..cdf3343 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femmes_levres_fardees_piercing.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femmes_prennent_selfie.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femmes_prennent_selfie.webp new file mode 100644 index 0000000..92b6fa0 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femmes_prennent_selfie.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femmes_vetues_de_blanc_s_embrassent.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femmes_vetues_de_blanc_s_embrassent.webp new file mode 100644 index 0000000..1246c17 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femmes_vetues_de_blanc_s_embrassent.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femmes_visieres_de_verre.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femmes_visieres_de_verre.webp new file mode 100644 index 0000000..41537f6 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/femmes_personnes_plutot_feminines/femmes_visieres_de_verre.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_a_velo_tient_appareil_photo_ancien.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_a_velo_tient_appareil_photo_ancien.webp new file mode 100644 index 0000000..f93c29d Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_a_velo_tient_appareil_photo_ancien.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_allume_cigarette_avec_billet.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_allume_cigarette_avec_billet.webp new file mode 100644 index 0000000..ca2d7a1 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_allume_cigarette_avec_billet.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_attend_au_volant.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_attend_au_volant.webp new file mode 100644 index 0000000..e0144b2 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_attend_au_volant.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_au_telephone_ecoute.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_au_telephone_ecoute.webp new file mode 100644 index 0000000..6105442 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_au_telephone_ecoute.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_avis_de_recherche.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_avis_de_recherche.webp new file mode 100644 index 0000000..8225848 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_avis_de_recherche.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_badge_dossiers_papiers.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_badge_dossiers_papiers.webp new file mode 100644 index 0000000..455096a Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_badge_dossiers_papiers.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_balafre.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_balafre.webp new file mode 100644 index 0000000..2b7da3e Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_balafre.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_barbiche_meches_cheveux_dans_les_yeux.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_barbiche_meches_cheveux_dans_les_yeux.webp new file mode 100644 index 0000000..5267110 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_barbiche_meches_cheveux_dans_les_yeux.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_barbichette_veste_rapee.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_barbichette_veste_rapee.webp new file mode 100644 index 0000000..351382e Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_barbichette_veste_rapee.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_barbu_regard_severe.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_barbu_regard_severe.webp new file mode 100644 index 0000000..c212041 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_barbu_regard_severe.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_barbu_telephone_fume.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_barbu_telephone_fume.webp new file mode 100644 index 0000000..93f8d78 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_barbu_telephone_fume.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_blouson_noir_levres_serrees.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_blouson_noir_levres_serrees.webp new file mode 100644 index 0000000..fa02993 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_blouson_noir_levres_serrees.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_buste_et_crane_tatoues_ideogrammes.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_buste_et_crane_tatoues_ideogrammes.webp new file mode 100644 index 0000000..29ddf0b Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_buste_et_crane_tatoues_ideogrammes.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_chauve_gant_de_verre_sur_la_tete.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_chauve_gant_de_verre_sur_la_tete.webp new file mode 100644 index 0000000..c3d5da8 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_chauve_gant_de_verre_sur_la_tete.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_chauve_longue_veste_blanche_dispositif_de_vue_etrange.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_chauve_longue_veste_blanche_dispositif_de_vue_etrange.webp new file mode 100644 index 0000000..cfe38ca Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_chauve_longue_veste_blanche_dispositif_de_vue_etrange.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_chemise_ouverte_sur_t_shirt_pistolet_met_en_joue.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_chemise_ouverte_sur_t_shirt_pistolet_met_en_joue.webp new file mode 100644 index 0000000..11c1035 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_chemise_ouverte_sur_t_shirt_pistolet_met_en_joue.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_cheveux_gomines_marcel_salopette.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_cheveux_gomines_marcel_salopette.webp new file mode 100644 index 0000000..82a59e7 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_cheveux_gomines_marcel_salopette.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_cheveux_longs_teint_farde_blafard.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_cheveux_longs_teint_farde_blafard.webp new file mode 100644 index 0000000..0b22319 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_cheveux_longs_teint_farde_blafard.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_chignon_demi_masque_de_bouddha.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_chignon_demi_masque_de_bouddha.webp new file mode 100644 index 0000000..652ecea Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_chignon_demi_masque_de_bouddha.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_coiffe_bob_culotte_de_zouave_regarde_son_telephone.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_coiffe_bob_culotte_de_zouave_regarde_son_telephone.webp new file mode 100644 index 0000000..4b352ab Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_coiffe_bob_culotte_de_zouave_regarde_son_telephone.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_costume_blanc_bord_de_mer_cocotiers.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_costume_blanc_bord_de_mer_cocotiers.webp new file mode 100644 index 0000000..3e24962 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_costume_blanc_bord_de_mer_cocotiers.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_donne_coup_avec_pied_jambe_tendue.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_donne_coup_avec_pied_jambe_tendue.webp new file mode 100644 index 0000000..4d14a53 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_donne_coup_avec_pied_jambe_tendue.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_donne_coup_de_poing.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_donne_coup_de_poing.webp new file mode 100644 index 0000000..57e7c97 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_donne_coup_de_poing.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_echarpe_sans_casque_a_moto.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_echarpe_sans_casque_a_moto.webp new file mode 100644 index 0000000..bb6a9ef Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_echarpe_sans_casque_a_moto.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_en_garde_kung_fu.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_en_garde_kung_fu.webp new file mode 100644 index 0000000..423188e Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_en_garde_kung_fu.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_en_garde_mains_nues.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_en_garde_mains_nues.webp new file mode 100644 index 0000000..24288a4 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_en_garde_mains_nues.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_en_garde_poings_gilet_ferme_cravatte.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_en_garde_poings_gilet_ferme_cravatte.webp new file mode 100644 index 0000000..2bdeb36 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_en_garde_poings_gilet_ferme_cravatte.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_ensanglante_porte_poignard_protege_fillette.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_ensanglante_porte_poignard_protege_fillette.webp new file mode 100644 index 0000000..19e0b2b Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_ensanglante_porte_poignard_protege_fillette.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_entre_2_ages-chemise_ouverte.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_entre_2_ages-chemise_ouverte.webp new file mode 100644 index 0000000..cefd623 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_entre_2_ages-chemise_ouverte.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_entre_2_ages_tricot_de_peau.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_entre_2_ages_tricot_de_peau.webp new file mode 100644 index 0000000..f5cfe7e Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_entre_2_ages_tricot_de_peau.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_entre_2_ages_visage_grele_telephone_a_l_oreille.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_entre_2_ages_visage_grele_telephone_a_l_oreille.webp new file mode 100644 index 0000000..2d77054 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_entre_2_ages_visage_grele_telephone_a_l_oreille.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_expetatif_devant_mur_couvert_coupoures_journaux.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_expetatif_devant_mur_couvert_coupoures_journaux.webp new file mode 100644 index 0000000..7018a8a Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_expetatif_devant_mur_couvert_coupoures_journaux.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_front_degarni.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_front_degarni.webp new file mode 100644 index 0000000..09a3d53 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_front_degarni.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_grimacant_oeil_gauche_rouge.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_grimacant_oeil_gauche_rouge.webp new file mode 100644 index 0000000..c6ccfe6 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_grimacant_oeil_gauche_rouge.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_lunettes_vue_pistolet_met_en_joue.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_lunettes_vue_pistolet_met_en_joue.webp new file mode 100644 index 0000000..8c2146f Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_lunettes_vue_pistolet_met_en_joue.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_lunettes_vue_tend_main.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_lunettes_vue_tend_main.webp new file mode 100644 index 0000000..f9c096c Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_lunettes_vue_tend_main.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_lunettes_vue_visage_dedaigneux.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_lunettes_vue_visage_dedaigneux.webp new file mode 100644 index 0000000..9fb4b5a Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_lunettes_vue_visage_dedaigneux.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_lutteur_torse_nu.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_lutteur_torse_nu.webp new file mode 100644 index 0000000..e746142 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_lutteur_torse_nu.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_main_et_visage_crispes_appuy�_poteau.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_main_et_visage_crispes_appuy�_poteau.webp new file mode 100644 index 0000000..0826fed Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_main_et_visage_crispes_appuy�_poteau.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_mains_crois�es_regard_par_en_dessous.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_mains_crois�es_regard_par_en_dessous.webp new file mode 100644 index 0000000..37aa738 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_mains_crois�es_regard_par_en_dessous.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_mal_rase_vetu_cuir_oreillette.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_mal_rase_vetu_cuir_oreillette.webp new file mode 100644 index 0000000..95026f6 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_mal_rase_vetu_cuir_oreillette.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_militaire_beret.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_militaire_beret.webp new file mode 100644 index 0000000..040300f Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_militaire_beret.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_montre_poignet_porte_machette_ensanglantee.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_montre_poignet_porte_machette_ensanglantee.webp new file mode 100644 index 0000000..8026b0c Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_montre_poignet_porte_machette_ensanglantee.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_oreillette_visage_severe.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_oreillette_visage_severe.webp new file mode 100644 index 0000000..9a34a35 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_oreillette_visage_severe.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_petite_barbichette_s_apprete_donner_coup_de_poing.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_petite_barbichette_s_apprete_donner_coup_de_poing.webp new file mode 100644 index 0000000..8c74c65 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_petite_barbichette_s_apprete_donner_coup_de_poing.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_petite_moustache_regard_severe.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_petite_moustache_regard_severe.webp new file mode 100644 index 0000000..7a1951e Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_petite_moustache_regard_severe.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_petite_moustache_veste_velour_marron.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_petite_moustache_veste_velour_marron.webp new file mode 100644 index 0000000..1769512 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_petite_moustache_veste_velour_marron.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_petite_serviette_autour_du_cou.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_petite_serviette_autour_du_cou.webp new file mode 100644 index 0000000..e0fe560 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_petite_serviette_autour_du_cou.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_pistolet_cri_bouche_ouverte.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_pistolet_cri_bouche_ouverte.webp new file mode 100644 index 0000000..5d5083d Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_pistolet_cri_bouche_ouverte.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_pistolet_met_en_joue.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_pistolet_met_en_joue.webp new file mode 100644 index 0000000..55a8f13 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_pistolet_met_en_joue.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_pistolet_pointe_vers_le_haut.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_pistolet_pointe_vers_le_haut.webp new file mode 100644 index 0000000..5ae45f3 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_pistolet_pointe_vers_le_haut.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_plutot_fort.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_plutot_fort.webp new file mode 100644 index 0000000..fcb7303 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_plutot_fort.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_policier_en_civil_regard_scrutateur.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_policier_en_civil_regard_scrutateur.webp new file mode 100644 index 0000000..4f6bd14 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_policier_en_civil_regard_scrutateur.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_policier_en_tenue_epaules_lev�es.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_policier_en_tenue_epaules_lev�es.webp new file mode 100644 index 0000000..05a295c Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_policier_en_tenue_epaules_lev�es.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_regard_bouddha_en_fond.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_regard_bouddha_en_fond.webp new file mode 100644 index 0000000..12ac516 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_regard_bouddha_en_fond.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_regard_etonne.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_regard_etonne.webp new file mode 100644 index 0000000..5d90fee Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_regard_etonne.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_regard_expectatif.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_regard_expectatif.webp new file mode 100644 index 0000000..f4f72f1 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_regard_expectatif.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_regard_interrogatif.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_regard_interrogatif.webp new file mode 100644 index 0000000..3fee0f1 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_regard_interrogatif.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_ressemble_cochon_veste_violette.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_ressemble_cochon_veste_violette.webp new file mode 100644 index 0000000..9af34c4 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_ressemble_cochon_veste_violette.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_ressemble_roi_singe_barbu.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_ressemble_roi_singe_barbu.webp new file mode 100644 index 0000000..7c527de Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_ressemble_roi_singe_barbu.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_ressemble_taureau_anneau_dans_le_nez.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_ressemble_taureau_anneau_dans_le_nez.webp new file mode 100644 index 0000000..53d65cf Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_ressemble_taureau_anneau_dans_le_nez.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_roi_singe_blond.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_roi_singe_blond.webp new file mode 100644 index 0000000..b10666a Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_roi_singe_blond.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_roi_singe_doigt_bouche.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_roi_singe_doigt_bouche.webp new file mode 100644 index 0000000..6c79fe1 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_roi_singe_doigt_bouche.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_roi_singe_regard_percant.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_roi_singe_regard_percant.webp new file mode 100644 index 0000000..f8db56c Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_roi_singe_regard_percant.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_roi_singe_tire_langue.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_roi_singe_tire_langue.webp new file mode 100644 index 0000000..34f56df Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_roi_singe_tire_langue.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_sourire_narquois.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_sourire_narquois.webp new file mode 100644 index 0000000..650325c Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_sourire_narquois.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tete_dans_bandages.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tete_dans_bandages.webp new file mode 100644 index 0000000..edc94c7 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tete_dans_bandages.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tient_ancien_ordinateur.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tient_ancien_ordinateur.webp new file mode 100644 index 0000000..edd98bc Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tient_ancien_ordinateur.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tient_bol.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tient_bol.webp new file mode 100644 index 0000000..cbac0c8 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tient_bol.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tient_pistolet_en_l_air.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tient_pistolet_en_l_air.webp new file mode 100644 index 0000000..036d1c0 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tient_pistolet_en_l_air.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_torse_nu_corps_tatoue.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_torse_nu_corps_tatoue.webp new file mode 100644 index 0000000..9bb90da Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_torse_nu_corps_tatoue.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tourne_vers_droite.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tourne_vers_droite.webp new file mode 100644 index 0000000..2a1b50a Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tourne_vers_droite.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tourne_vers_gauche.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tourne_vers_gauche.webp new file mode 100644 index 0000000..83b62f1 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tourne_vers_gauche.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tres_age_ressemble_rat_trucage.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tres_age_ressemble_rat_trucage.webp new file mode 100644 index 0000000..399f591 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tres_age_ressemble_rat_trucage.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tres_muscle_torse_nu.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tres_muscle_torse_nu.webp new file mode 100644 index 0000000..be9e5d3 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_tres_muscle_torse_nu.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_ventre_et_cou_tatoues.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_ventre_et_cou_tatoues.webp new file mode 100644 index 0000000..0277e09 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_ventre_et_cou_tatoues.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_veste_camouflage_ouverte_sur_torse_nu.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_veste_camouflage_ouverte_sur_torse_nu.webp new file mode 100644 index 0000000..b0cd3bd Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_veste_camouflage_ouverte_sur_torse_nu.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_veste_grise_col_roul�_noir.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_veste_grise_col_roul�_noir.webp new file mode 100644 index 0000000..15796c6 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_veste_grise_col_roul�_noir.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_veste_violette_tend_le_bras.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_veste_violette_tend_le_bras.webp new file mode 100644 index 0000000..a507b9e Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_veste_violette_tend_le_bras.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_vetu_de_noir_mains_dans_poches.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_vetu_de_noir_mains_dans_poches.webp new file mode 100644 index 0000000..69bf83e Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_vetu_de_noir_mains_dans_poches.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_visage_et_cou_tatoues_image_dragon.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_visage_et_cou_tatoues_image_dragon.webp new file mode 100644 index 0000000..cfcdf65 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_visage_et_cou_tatoues_image_dragon.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_visage_laser_rouge.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_visage_laser_rouge.webp new file mode 100644 index 0000000..6e6f3c9 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_visage_laser_rouge.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_visage_partie_droite_tatouee_ideogrammes.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_visage_partie_droite_tatouee_ideogrammes.webp new file mode 100644 index 0000000..8107936 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_visage_partie_droite_tatouee_ideogrammes.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_visage_tatoue_ressemble_tigre.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_visage_tatoue_ressemble_tigre.webp new file mode 100644 index 0000000..c455638 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/homme_visage_tatoue_ressemble_tigre.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/hommes_ensanglantes_portent_poignards.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/hommes_ensanglantes_portent_poignards.webp new file mode 100644 index 0000000..9b4369f Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/hommes_ensanglantes_portent_poignards.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/hommes_fardes_presentent_ancien_ordinateur.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/hommes_fardes_presentent_ancien_ordinateur.webp new file mode 100644 index 0000000..a613eb0 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/hommes_fardes_presentent_ancien_ordinateur.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/hommes_luttent_couteau_sous_la_gorge.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/hommes_luttent_couteau_sous_la_gorge.webp new file mode 100644 index 0000000..ae2f0cc Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/hommes_luttent_couteau_sous_la_gorge.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/hommes_luttent_tronconneuse.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/hommes_luttent_tronconneuse.webp new file mode 100644 index 0000000..a628986 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/hommes_personnes_plutot_masculines/hommes_luttent_tronconneuse.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_cheveux_decolores_levre_piercing_cote.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_cheveux_decolores_levre_piercing_cote.webp new file mode 100644 index 0000000..2083e4a Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_cheveux_decolores_levre_piercing_cote.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_fardee_visage_blanc_lascif.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_fardee_visage_blanc_lascif.webp new file mode 100644 index 0000000..3a792c4 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_fardee_visage_blanc_lascif.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_sabre_dans_dos_lanieres_autour_bras_au_cou_echarpe_rouge.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_sabre_dans_dos_lanieres_autour_bras_au_cou_echarpe_rouge.webp new file mode 100644 index 0000000..6187e6b Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_sabre_dans_dos_lanieres_autour_bras_au_cou_echarpe_rouge.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_visage_dans_l_ombre_porte_chapeau_conique_bambou.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_visage_dans_l_ombre_porte_chapeau_conique_bambou.webp new file mode 100644 index 0000000..17411d2 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_visage_dans_l_ombre_porte_chapeau_conique_bambou.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_visage_masque_chapeau_conique_tient_fusil_customise.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_visage_masque_chapeau_conique_tient_fusil_customise.webp new file mode 100644 index 0000000..10f9776 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_visage_masque_chapeau_conique_tient_fusil_customise.webp differ diff --git a/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_visage_tatoue_phenix.webp b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_visage_tatoue_phenix.webp new file mode 100644 index 0000000..1c983e6 Binary files /dev/null and b/images/jetons/jetons_photos_tres_nombreux_fb_rom1/personnes/personne_visage_tatoue_phenix.webp differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/DCI_paul_hung.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/DCI_paul_hung.png new file mode 100644 index 0000000..d89236e Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/DCI_paul_hung.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/DI_michael_chan.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/DI_michael_chan.png new file mode 100644 index 0000000..d6d0910 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/DI_michael_chan.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/benedict_mo.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/benedict_mo.png new file mode 100644 index 0000000..2696f4b Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/benedict_mo.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/brian_tso.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/brian_tso.png new file mode 100644 index 0000000..46fe1b6 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/brian_tso.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/capitaine_yacht.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/capitaine_yacht.png new file mode 100644 index 0000000..adaa888 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/capitaine_yacht.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/chao_ku.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/chao_ku.png new file mode 100644 index 0000000..68dc3ae Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/chao_ku.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/dan_mok_pikachu.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/dan_mok_pikachu.png new file mode 100644 index 0000000..369ea3b Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/dan_mok_pikachu.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/daniel_pak_(d�c�d�).png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/daniel_pak_(d�c�d�).png new file mode 100644 index 0000000..57fb6a9 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/daniel_pak_(d�c�d�).png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/david_fan.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/david_fan.png new file mode 100644 index 0000000..8c8d387 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/david_fan.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/ed_ngai.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/ed_ngai.png new file mode 100644 index 0000000..3fcba6d Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/ed_ngai.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/esprit_squille_jie.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/esprit_squille_jie.png new file mode 100644 index 0000000..15b5cf4 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/esprit_squille_jie.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/esprit_squille_kuai.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/esprit_squille_kuai.png new file mode 100644 index 0000000..15b5cf4 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/esprit_squille_kuai.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/esprit_squille_zhang.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/esprit_squille_zhang.png new file mode 100644 index 0000000..15b5cf4 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/esprit_squille_zhang.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/harry_fong.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/harry_fong.png new file mode 100644 index 0000000..e5fe7a2 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/harry_fong.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/hommes_de_main_pikachu.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/hommes_de_main_pikachu.png new file mode 100644 index 0000000..7d57a51 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/hommes_de_main_pikachu.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/jason_tsong.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/jason_tsong.png new file mode 100644 index 0000000..37b8c55 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/jason_tsong.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/jimmy_tseng.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/jimmy_tseng.png new file mode 100644 index 0000000..1e4072e Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/jimmy_tseng.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/le_kasasagi.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/le_kasasagi.png new file mode 100644 index 0000000..a4969b9 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/le_kasasagi.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/le_tigre_de_nacre.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/le_tigre_de_nacre.png new file mode 100644 index 0000000..b001bea Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/le_tigre_de_nacre.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/le_white_dolphin.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/le_white_dolphin.png new file mode 100644 index 0000000..91a5c86 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/le_white_dolphin.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/louis_pak.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/louis_pak.png new file mode 100644 index 0000000..38420fd Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/louis_pak.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/lucy_bai.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/lucy_bai.png new file mode 100644 index 0000000..cd85060 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/lucy_bai.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/macaques_verts.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/macaques_verts.png new file mode 100644 index 0000000..e70ec61 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/macaques_verts.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/mangeur_de_perles.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/mangeur_de_perles.png new file mode 100644 index 0000000..1ff298d Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/mangeur_de_perles.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/mark_wai.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/mark_wai.png new file mode 100644 index 0000000..d41ae33 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/mark_wai.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/meng_kun.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/meng_kun.png new file mode 100644 index 0000000..1e8f662 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/meng_kun.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/philip_chu.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/philip_chu.png new file mode 100644 index 0000000..62c3820 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/philip_chu.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/philip_hui.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/philip_hui.png new file mode 100644 index 0000000..0dd1146 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/philip_hui.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/rosy_pak_(fant�me).png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/rosy_pak_(fant�me).png new file mode 100644 index 0000000..0050f7b Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/rosy_pak_(fant�me).png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/rosy_woo.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/rosy_woo.png new file mode 100644 index 0000000..26fd8d4 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/rosy_woo.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/samuel_song.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/samuel_song.png new file mode 100644 index 0000000..42cca87 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/samuel_song.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/sen_shikai.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/sen_shikai.png new file mode 100644 index 0000000..256c1fb Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/sen_shikai.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/shānhú_yíng_lái_huissier_de_corail.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/shānhú_yíng_lái_huissier_de_corail.png new file mode 100644 index 0000000..851e841 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/shānhú_yíng_lái_huissier_de_corail.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/soldats_qing.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/soldats_qing.png new file mode 100644 index 0000000..4172450 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/soldats_qing.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/tigre_fant�me.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/tigre_fant�me.png new file mode 100644 index 0000000..af8bf4e Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/tigre_fant�me.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/tim_chau.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/tim_chau.png new file mode 100644 index 0000000..7def912 Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/tim_chau.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/tong_shaoqi.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/tong_shaoqi.png new file mode 100644 index 0000000..d67c86b Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/tong_shaoqi.png differ diff --git a/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/tso_rongting.png b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/tso_rongting.png new file mode 100644 index 0000000..b11976d Binary files /dev/null and b/images/jetons/scenarios_amateurs/affaire_du_tigre_de_nacre/tso_rongting.png differ diff --git a/images/jetons/scenarios_amateurs/ecailles_d_argent/ecailles_emma_wai.png b/images/jetons/scenarios_amateurs/ecailles_d_argent/ecailles_emma_wai.png new file mode 100644 index 0000000..c14d03f Binary files /dev/null and b/images/jetons/scenarios_amateurs/ecailles_d_argent/ecailles_emma_wai.png differ diff --git a/images/jetons/scenarios_amateurs/ecailles_d_argent/ecailles_eva_wai.png b/images/jetons/scenarios_amateurs/ecailles_d_argent/ecailles_eva_wai.png new file mode 100644 index 0000000..7288a82 Binary files /dev/null and b/images/jetons/scenarios_amateurs/ecailles_d_argent/ecailles_eva_wai.png differ diff --git a/images/jetons/scenarios_amateurs/ecailles_d_argent/ecailles_michael_syu.png b/images/jetons/scenarios_amateurs/ecailles_d_argent/ecailles_michael_syu.png new file mode 100644 index 0000000..4edeeef Binary files /dev/null and b/images/jetons/scenarios_amateurs/ecailles_d_argent/ecailles_michael_syu.png differ diff --git a/images/jetons/scenarios_amateurs/ecailles_d_argent/ecailles_san_kuen.png b/images/jetons/scenarios_amateurs/ecailles_d_argent/ecailles_san_kuen.png new file mode 100644 index 0000000..24c3342 Binary files /dev/null and b/images/jetons/scenarios_amateurs/ecailles_d_argent/ecailles_san_kuen.png differ diff --git a/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Dave_Wu.png b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Dave_Wu.png new file mode 100644 index 0000000..ac122e4 Binary files /dev/null and b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Dave_Wu.png differ diff --git a/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Huang_Shuzhen.png b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Huang_Shuzhen.png new file mode 100644 index 0000000..2f0e984 Binary files /dev/null and b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Huang_Shuzhen.png differ diff --git a/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Huang_Zhiming.png b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Huang_Zhiming.png new file mode 100644 index 0000000..a9771c2 Binary files /dev/null and b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Huang_Zhiming.png differ diff --git a/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Monsieu_Li.png b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Monsieu_Li.png new file mode 100644 index 0000000..a023442 Binary files /dev/null and b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Monsieu_Li.png differ diff --git a/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Ronnie_Wang.png b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Ronnie_Wang.png new file mode 100644 index 0000000..f1c5b31 Binary files /dev/null and b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Ronnie_Wang.png differ diff --git a/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Solomon_Wu.png b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Solomon_Wu.png new file mode 100644 index 0000000..30b6b6b Binary files /dev/null and b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Solomon_Wu.png differ diff --git a/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Wang_Ye.png b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Wang_Ye.png new file mode 100644 index 0000000..c179d41 Binary files /dev/null and b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_Wang_Ye.png differ diff --git a/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_auctioneer.png b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_auctioneer.png new file mode 100644 index 0000000..14f22ed Binary files /dev/null and b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_auctioneer.png differ diff --git a/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_gang_batte_cricket.png b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_gang_batte_cricket.png new file mode 100644 index 0000000..37e8c96 Binary files /dev/null and b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_gang_batte_cricket.png differ diff --git a/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_hk_pompier_1.png b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_hk_pompier_1.png new file mode 100644 index 0000000..ae30ada Binary files /dev/null and b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_hk_pompier_1.png differ diff --git a/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_hk_pompier_2.png b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_hk_pompier_2.png new file mode 100644 index 0000000..1aaf161 Binary files /dev/null and b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_hk_pompier_2.png differ diff --git a/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_hk_pompier_3.png b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_hk_pompier_3.png new file mode 100644 index 0000000..a5b7f4c Binary files /dev/null and b/images/jetons/scenarios_amateurs/miroir_mon_beau_miroir/jeton_hk_pompier_3.png differ diff --git a/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_chauffeur_limousine.png b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_chauffeur_limousine.png new file mode 100644 index 0000000..7fd0918 Binary files /dev/null and b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_chauffeur_limousine.png differ diff --git a/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_eddy_wong.png b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_eddy_wong.png new file mode 100644 index 0000000..97c01f0 Binary files /dev/null and b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_eddy_wong.png differ diff --git a/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_gros_bras_1.png b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_gros_bras_1.png new file mode 100644 index 0000000..671922c Binary files /dev/null and b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_gros_bras_1.png differ diff --git a/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_gros_bras_2.png b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_gros_bras_2.png new file mode 100644 index 0000000..97473b0 Binary files /dev/null and b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_gros_bras_2.png differ diff --git a/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_kazin.png b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_kazin.png new file mode 100644 index 0000000..bf104f0 Binary files /dev/null and b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_kazin.png differ diff --git a/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_kazin_couleur.png b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_kazin_couleur.png new file mode 100644 index 0000000..12ae351 Binary files /dev/null and b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_kazin_couleur.png differ diff --git a/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_kertau.png b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_kertau.png new file mode 100644 index 0000000..aae875e Binary files /dev/null and b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_kertau.png differ diff --git a/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_kertau_couleur.png b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_kertau_couleur.png new file mode 100644 index 0000000..2b96e9d Binary files /dev/null and b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_kertau_couleur.png differ diff --git a/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_limousine.png b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_limousine.png new file mode 100644 index 0000000..831f6e3 Binary files /dev/null and b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_limousine.png differ diff --git a/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_mambabarang.png b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_mambabarang.png new file mode 100644 index 0000000..e6883a6 Binary files /dev/null and b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_mambabarang.png differ diff --git a/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_mambabarang_couleur.png b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_mambabarang_couleur.png new file mode 100644 index 0000000..7ed4546 Binary files /dev/null and b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_mambabarang_couleur.png differ diff --git a/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_rosy_woo.png b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_rosy_woo.png new file mode 100644 index 0000000..26fd8d4 Binary files /dev/null and b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_rosy_woo.png differ diff --git a/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_tommy_wong.png b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_tommy_wong.png new file mode 100644 index 0000000..9d7cdde Binary files /dev/null and b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_tommy_wong.png differ diff --git a/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_wak_wak.png b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_wak_wak.png new file mode 100644 index 0000000..cfdc9c2 Binary files /dev/null and b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_wak_wak.png differ diff --git a/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_wak_wak_couleur.png b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_wak_wak_couleur.png new file mode 100644 index 0000000..eec91ca Binary files /dev/null and b/images/jetons/scenarios_amateurs/vengeance_pour_un_dragon/vengeance_wak_wak_couleur.png differ diff --git a/images/jetons/scenarios_officiels/droit_de_garde/Alan_Lo_ag�.png b/images/jetons/scenarios_officiels/droit_de_garde/Alan_Lo_ag�.png new file mode 100644 index 0000000..9239653 Binary files /dev/null and b/images/jetons/scenarios_officiels/droit_de_garde/Alan_Lo_ag�.png differ diff --git a/images/jetons/scenarios_officiels/droit_de_garde/Alan_Lo_jeune.png b/images/jetons/scenarios_officiels/droit_de_garde/Alan_Lo_jeune.png new file mode 100644 index 0000000..2202f05 Binary files /dev/null and b/images/jetons/scenarios_officiels/droit_de_garde/Alan_Lo_jeune.png differ diff --git a/images/jetons/scenarios_officiels/droit_de_garde/Amelia_Weng.png b/images/jetons/scenarios_officiels/droit_de_garde/Amelia_Weng.png new file mode 100644 index 0000000..fa4d75f Binary files /dev/null and b/images/jetons/scenarios_officiels/droit_de_garde/Amelia_Weng.png differ diff --git a/images/jetons/scenarios_officiels/droit_de_garde/Din.png b/images/jetons/scenarios_officiels/droit_de_garde/Din.png new file mode 100644 index 0000000..fd64bd4 Binary files /dev/null and b/images/jetons/scenarios_officiels/droit_de_garde/Din.png differ diff --git a/images/jetons/scenarios_officiels/droit_de_garde/Gaaujan.png b/images/jetons/scenarios_officiels/droit_de_garde/Gaaujan.png new file mode 100644 index 0000000..ed8a7fe Binary files /dev/null and b/images/jetons/scenarios_officiels/droit_de_garde/Gaaujan.png differ diff --git a/images/jetons/scenarios_officiels/droit_de_garde/John_Chek.png b/images/jetons/scenarios_officiels/droit_de_garde/John_Chek.png new file mode 100644 index 0000000..0078756 Binary files /dev/null and b/images/jetons/scenarios_officiels/droit_de_garde/John_Chek.png differ diff --git a/images/jetons/scenarios_officiels/droit_de_garde/Saam_Pui.png b/images/jetons/scenarios_officiels/droit_de_garde/Saam_Pui.png new file mode 100644 index 0000000..c99aa6f Binary files /dev/null and b/images/jetons/scenarios_officiels/droit_de_garde/Saam_Pui.png differ diff --git a/images/jetons/scenarios_officiels/fred_boot_comme_un_singe_sans_laisse/fred_boot_Danny.png b/images/jetons/scenarios_officiels/fred_boot_comme_un_singe_sans_laisse/fred_boot_Danny.png new file mode 100644 index 0000000..3c0fd25 Binary files /dev/null and b/images/jetons/scenarios_officiels/fred_boot_comme_un_singe_sans_laisse/fred_boot_Danny.png differ diff --git a/images/jetons/scenarios_officiels/fred_boot_comme_un_singe_sans_laisse/fred_boot_Dou_Coeng.png b/images/jetons/scenarios_officiels/fred_boot_comme_un_singe_sans_laisse/fred_boot_Dou_Coeng.png new file mode 100644 index 0000000..cc45481 Binary files /dev/null and b/images/jetons/scenarios_officiels/fred_boot_comme_un_singe_sans_laisse/fred_boot_Dou_Coeng.png differ diff --git a/images/jetons/scenarios_officiels/fred_boot_comme_un_singe_sans_laisse/fred_boot_Freddie.png b/images/jetons/scenarios_officiels/fred_boot_comme_un_singe_sans_laisse/fred_boot_Freddie.png new file mode 100644 index 0000000..a3a7756 Binary files /dev/null and b/images/jetons/scenarios_officiels/fred_boot_comme_un_singe_sans_laisse/fred_boot_Freddie.png differ diff --git a/images/jetons/scenarios_officiels/fred_boot_comme_un_singe_sans_laisse/fred_boot_Sam.png b/images/jetons/scenarios_officiels/fred_boot_comme_un_singe_sans_laisse/fred_boot_Sam.png new file mode 100644 index 0000000..d8855bb Binary files /dev/null and b/images/jetons/scenarios_officiels/fred_boot_comme_un_singe_sans_laisse/fred_boot_Sam.png differ diff --git a/images/jetons/scenarios_officiels/fred_boot_comme_un_singe_sans_laisse/fred_boot_Wing_Long.png b/images/jetons/scenarios_officiels/fred_boot_comme_un_singe_sans_laisse/fred_boot_Wing_Long.png new file mode 100644 index 0000000..d6eee0d Binary files /dev/null and b/images/jetons/scenarios_officiels/fred_boot_comme_un_singe_sans_laisse/fred_boot_Wing_Long.png differ diff --git a/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Beth_Jung.png b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Beth_Jung.png new file mode 100644 index 0000000..40b5ffc Binary files /dev/null and b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Beth_Jung.png differ diff --git a/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Charlie_Weng.png b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Charlie_Weng.png new file mode 100644 index 0000000..0174a45 Binary files /dev/null and b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Charlie_Weng.png differ diff --git a/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Emma_Zheng.png b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Emma_Zheng.png new file mode 100644 index 0000000..82924dd Binary files /dev/null and b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Emma_Zheng.png differ diff --git a/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Eric_Zheng.png b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Eric_Zheng.png new file mode 100644 index 0000000..3ea3ac8 Binary files /dev/null and b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Eric_Zheng.png differ diff --git a/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Jack_Pei.png b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Jack_Pei.png new file mode 100644 index 0000000..3b3dc0a Binary files /dev/null and b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Jack_Pei.png differ diff --git a/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Mike_Liu.png b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Mike_Liu.png new file mode 100644 index 0000000..8b5f698 Binary files /dev/null and b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Mike_Liu.png differ diff --git a/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Paul_Kau.png b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Paul_Kau.png new file mode 100644 index 0000000..9a3034c Binary files /dev/null and b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Paul_Kau.png differ diff --git a/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Phil_Lam.png b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Phil_Lam.png new file mode 100644 index 0000000..ab8ba3b Binary files /dev/null and b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Phil_Lam.png differ diff --git a/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Sarah_Jan.png b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Sarah_Jan.png new file mode 100644 index 0000000..20dc8ce Binary files /dev/null and b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_Sarah_Jan.png differ diff --git a/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_ogre.png b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_ogre.png new file mode 100644 index 0000000..0b25bea Binary files /dev/null and b/images/jetons/scenarios_officiels/le_gambit_du_demon/jeton_ogre.png differ diff --git a/images/kung-fu/Baton.png b/images/kung-fu/Baton.png new file mode 100644 index 0000000..7ac6394 Binary files /dev/null and b/images/kung-fu/Baton.png differ diff --git a/images/kung-fu/Baton_whole.png b/images/kung-fu/Baton_whole.png new file mode 100644 index 0000000..73a0c5f Binary files /dev/null and b/images/kung-fu/Baton_whole.png differ diff --git a/images/kung-fu/arc.png b/images/kung-fu/arc.png new file mode 100644 index 0000000..5e6d999 Binary files /dev/null and b/images/kung-fu/arc.png differ diff --git a/images/kung-fu/boxe.png b/images/kung-fu/boxe.png new file mode 100644 index 0000000..5f9191d Binary files /dev/null and b/images/kung-fu/boxe.png differ diff --git a/images/kung-fu/corde.png b/images/kung-fu/corde.png new file mode 100644 index 0000000..add6f1c Binary files /dev/null and b/images/kung-fu/corde.png differ diff --git a/images/kung-fu/couteaux-papillon.png b/images/kung-fu/couteaux-papillon.png new file mode 100644 index 0000000..cb2cf8a Binary files /dev/null and b/images/kung-fu/couteaux-papillon.png differ diff --git a/images/kung-fu/epee.png b/images/kung-fu/epee.png new file mode 100644 index 0000000..9991241 Binary files /dev/null and b/images/kung-fu/epee.png differ diff --git a/images/kung-fu/epees.png b/images/kung-fu/epees.png new file mode 100644 index 0000000..f3f5440 Binary files /dev/null and b/images/kung-fu/epees.png differ diff --git a/images/kung-fu/kung-fu-2-moins.png b/images/kung-fu/kung-fu-2-moins.png new file mode 100644 index 0000000..64c0d8e Binary files /dev/null and b/images/kung-fu/kung-fu-2-moins.png differ diff --git a/images/kung-fu/kung-fu-2-plus.png b/images/kung-fu/kung-fu-2-plus.png new file mode 100644 index 0000000..3e63399 Binary files /dev/null and b/images/kung-fu/kung-fu-2-plus.png differ diff --git a/images/kung-fu/kung-fu-2.png b/images/kung-fu/kung-fu-2.png new file mode 100644 index 0000000..39c357f Binary files /dev/null and b/images/kung-fu/kung-fu-2.png differ diff --git a/images/kung-fu/kung-fu.png b/images/kung-fu/kung-fu.png new file mode 100644 index 0000000..9e7e0a8 Binary files /dev/null and b/images/kung-fu/kung-fu.png differ diff --git a/images/kung-fu/lance-loyale.png b/images/kung-fu/lance-loyale.png new file mode 100644 index 0000000..fb2b9a8 Binary files /dev/null and b/images/kung-fu/lance-loyale.png differ diff --git a/images/kung-fu/nunchaku.png b/images/kung-fu/nunchaku.png new file mode 100644 index 0000000..fae94d5 Binary files /dev/null and b/images/kung-fu/nunchaku.png differ diff --git a/images/kung-fu/pistolet.png b/images/kung-fu/pistolet.png new file mode 100644 index 0000000..fc157b8 Binary files /dev/null and b/images/kung-fu/pistolet.png differ diff --git a/images/kung-fu/poignard.png b/images/kung-fu/poignard.png new file mode 100644 index 0000000..e831ce8 Binary files /dev/null and b/images/kung-fu/poignard.png differ diff --git a/images/kung-fu/poignards-volants.png b/images/kung-fu/poignards-volants.png new file mode 100644 index 0000000..bbc44d9 Binary files /dev/null and b/images/kung-fu/poignards-volants.png differ diff --git a/images/kung-fu/shurican.png b/images/kung-fu/shurican.png new file mode 100644 index 0000000..b9787be Binary files /dev/null and b/images/kung-fu/shurican.png differ diff --git a/images/kung-fu/trois-joyaux.png b/images/kung-fu/trois-joyaux.png new file mode 100644 index 0000000..a103ed4 Binary files /dev/null and b/images/kung-fu/trois-joyaux.png differ diff --git a/images/logo_dore.png b/images/logo_dore.png new file mode 100644 index 0000000..8097517 Binary files /dev/null and b/images/logo_dore.png differ diff --git a/images/logo_jeu.png b/images/logo_jeu.png new file mode 100644 index 0000000..3d024a6 Binary files /dev/null and b/images/logo_jeu.png differ diff --git a/images/loksyu.png b/images/loksyu.png new file mode 100644 index 0000000..7d00ff7 Binary files /dev/null and b/images/loksyu.png differ diff --git a/images/loksyu_fd_trans.png b/images/loksyu_fd_trans.png new file mode 100644 index 0000000..4b0e5c3 Binary files /dev/null and b/images/loksyu_fd_trans.png differ diff --git a/images/loksyu_long.png b/images/loksyu_long.png new file mode 100644 index 0000000..e5f4b5d Binary files /dev/null and b/images/loksyu_long.png differ diff --git a/images/macro.png b/images/macro.png new file mode 100644 index 0000000..e89ccf2 Binary files /dev/null and b/images/macro.png differ diff --git a/images/nghang.png b/images/nghang.png new file mode 100644 index 0000000..cdf016a Binary files /dev/null and b/images/nghang.png differ diff --git a/images/nghang_long.png b/images/nghang_long.png new file mode 100644 index 0000000..03f0e78 Binary files /dev/null and b/images/nghang_long.png differ diff --git a/images/reverse_initiative_order.png b/images/reverse_initiative_order.png new file mode 100644 index 0000000..9cf20d0 Binary files /dev/null and b/images/reverse_initiative_order.png differ diff --git a/images/roue.png b/images/roue.png new file mode 100644 index 0000000..f133ddd Binary files /dev/null and b/images/roue.png differ diff --git a/images/sanhei/bouclier_naazaa.png b/images/sanhei/bouclier_naazaa.png new file mode 100644 index 0000000..261a6ef Binary files /dev/null and b/images/sanhei/bouclier_naazaa.png differ diff --git a/images/sanhei/chapelet_infini.png b/images/sanhei/chapelet_infini.png new file mode 100644 index 0000000..5675b71 Binary files /dev/null and b/images/sanhei/chapelet_infini.png differ diff --git a/images/sanhei/cinq_tempetes.png b/images/sanhei/cinq_tempetes.png new file mode 100644 index 0000000..4c6a48e Binary files /dev/null and b/images/sanhei/cinq_tempetes.png differ diff --git a/images/sanhei/derniere_epee_yiu.png b/images/sanhei/derniere_epee_yiu.png new file mode 100644 index 0000000..4c3bee8 Binary files /dev/null and b/images/sanhei/derniere_epee_yiu.png differ diff --git a/images/sanhei/larmes_soeng_ngo.png b/images/sanhei/larmes_soeng_ngo.png new file mode 100644 index 0000000..8331721 Binary files /dev/null and b/images/sanhei/larmes_soeng_ngo.png differ diff --git a/images/sanhei/montagne_immobile.png b/images/sanhei/montagne_immobile.png new file mode 100644 index 0000000..e48c540 Binary files /dev/null and b/images/sanhei/montagne_immobile.png differ diff --git a/images/sanhei/morsure_soleil.png b/images/sanhei/morsure_soleil.png new file mode 100644 index 0000000..0a6f01a Binary files /dev/null and b/images/sanhei/morsure_soleil.png differ diff --git a/images/sanhei/regard_abyssal.png b/images/sanhei/regard_abyssal.png new file mode 100644 index 0000000..ee7a481 Binary files /dev/null and b/images/sanhei/regard_abyssal.png differ diff --git a/images/sanhei/serendipite.png b/images/sanhei/serendipite.png new file mode 100644 index 0000000..9bcf1d0 Binary files /dev/null and b/images/sanhei/serendipite.png differ diff --git a/images/sanhei/vent_crepuscule.png b/images/sanhei/vent_crepuscule.png new file mode 100644 index 0000000..9148d1d Binary files /dev/null and b/images/sanhei/vent_crepuscule.png differ diff --git a/images/tinji.webp b/images/tinji.webp new file mode 100644 index 0000000..7df046f Binary files /dev/null and b/images/tinji.webp differ diff --git a/images/wheel.png b/images/wheel.png new file mode 100644 index 0000000..d46f53a Binary files /dev/null and b/images/wheel.png differ diff --git a/images/wheel.webp b/images/wheel.webp new file mode 100644 index 0000000..4bec820 Binary files /dev/null and b/images/wheel.webp differ diff --git a/images/yin_yang.png b/images/yin_yang.png new file mode 100644 index 0000000..5752695 Binary files /dev/null and b/images/yin_yang.png differ diff --git a/lang/en-cde.json b/lang/en-cde.json new file mode 100644 index 0000000..d3285d6 --- /dev/null +++ b/lang/en-cde.json @@ -0,0 +1,340 @@ +{ + "CDE.ItemCreate": "Create Equipment", + "CDE.ItemEdit": "Edit Equipment", + "CDE.ItemDelete": "Delete Equipment", + "CDE.ItemNew": "New Equipment", + + "CDE.TypeOfItem": "Type of Equipment", + "CDE.Weapon": "Weapon", + "CDE.Armor": "Armor", + "CDE.Sanhei": "Sanhei", + "CDE.Other": "Other", + + + "CDE.ResourceMin": "Min", + "CDE.ResourceValue": "Value", + "CDE.ResourceMax": "Max", + + "CDE.DefineTemplate": "Define as Template", + "CDE.UnsetTemplate": "Unset Template", + "CDE.NoTemplate": "No Template", + + "CDE.Quantity": "Quantity", + "CDE.Weight": "Weight", + "CDE.Damage": "Damage", + "CDE.Range": "Range", + + "CDE.Masterized": "You have mastered this Technique", + + "CDE.Create": "Create", + "CDE.New": "New", + + "CDE.Name": "Name", + "CDE.PCName": "Character's Name", + "CDE.Concept": "Concept", + "CDE.CelestialGuardian": "Celestial Guardian", + "CDE.CelestialGuardian1": "White Tiger (Metal)", + "CDE.CelestialGuardian2": "Black Tortoise (Water)", + "CDE.CelestialGuardian3": "Yellow Kilin (Earth)", + "CDE.CelestialGuardian4": "Vermilion Bird (Fire)", + "CDE.CelestialGuardian5": "Azure Dragon (Wood)", + + "CDE.Description": "Description", + "CDE.Description2": "Description", + "CDE.Attributes": "Attributes", + "CDE.Skills": "Skills", + "CDE.Magics": "Magics", + "CDE.Resources": "Resources", + "CDE.Treasures": "Three Treasures", + "CDE.NgHang": "Ng Hang", + "CDE.Items": "Equipment", + "CDE.KungFu": "Kung Fu", + "CDE.Spells": "Spells", + "CDE.ModernJapan": "Modern Japan", + + "CDE.Die": "Click Here to Throw Dice For ", + "CDE.DieSP": "Click Here to Throw Dice For This Speciality: ", + "CDE.DieDM": "Click Here to Throw Dice For One Of These Fields", + "CDE.Debt": "Check If You Have Incurred a Debt For ", + + "CDE.Specialities": "Specialities", + "CDE.Fields": "Fields", + "CDE.Art": "Art", + "CDE.Investigation": "Investigation", + "CDE.Erudition": "Erudition", + "CDE.Knavery": "Knavery", + "CDE.Wordliness": "Wordliness", + "CDE.Prowess": "Prowess", + "CDE.Sciences": "Sciences", + "CDE.Technologies": "Technologies", + "CDE.RangedCombat": "Ranged Combat", + + "CDE.Supply": "Supply", + "CDE.Inquiry": "Inquiry", + "CDE.Influence": "Influence", + + "CDE.Components2": "Components & Ingredients", + "CDE.Component": "Component #", + "CDE.ChanceThrow": "Selecting a Component at Random in a Hurry", + "CDE.TypesOfMagic": "Types of Magic", + + "CDE.InternalCinnabar": "Internal Cinnabar", + "CDE.Alchemy": "Alchemy", + "CDE.MasteryOfTheWay": "Mastery of the Way", + "CDE.Exorcism": "Exorcism", + "CDE.Geomancy": "Geomancy", + + "CDE.Metal": "㊎ Metal ", + "CDE.MetalQualities": "– aggressive, passionate, combative, enthusiastic…", + "CDE.Water": "㊌ Water ", + "CDE.WaterQualities": "– flexible, diligent, adaptable, disciplined…", + "CDE.Earth": "㊏ Earth ", + "CDE.EarthQualities": "– stubborn, resilient, enduring, patient…", + "CDE.Fire": "㊋ Fire ", + "CDE.FireQualities": "– warm, creative, empathetic, inspired…", + "CDE.Wood": "㊍ Wood ", + "CDE.WoodQualities": "– intuitive, observant, open, instinctive…", + + "CDE.PracticeSpecialty": "Check If You Practice This Speciality: ", + + "CDE.Essence": "Essence", + "CDE.Mind": "Mind", + "CDE.Purification": "Purification", + "CDE.Manipulation": "Manipulation", + "CDE.Aura": "Aura", + + "CDE.Acupuncture": "Acupuncture", + "CDE.Elixirs": "Elixirs", + "CDE.Poisons": "Poisons", + "CDE.Arsenal": "Arsenal", + "CDE.Potions": "Potions", + + "CDE.Curse": "Curse", + "CDE.Transfiguration": "Transfiguration", + "CDE.Necromancy": "Necromancy", + "CDE.ClimateControl": "Climate Control", + "CDE.GoldenMagic": "Golden Magic", + + "CDE.Invocation": "Invocation", + "CDE.Tracking": "Tracking", + "CDE.Protection": "Protection", + "CDE.Punishment": "Punishment", + "CDE.Domination": "Domination", + + "CDE.Neutralization": "Neutralization", + "CDE.Divination": "Divination", + "CDE.EarthlyPrayer": "Earthly Prayer", + "CDE.HeavenlyPrayer": "Heavenly Prayer", + "CDE.Fungseoi": "Fungseoi", + + "CDE.HEI": "HEI", + "CDE.Essence2": "(Essence)", + "CDE.YANG-YIN": "YANG ● YIN", + "CDE.Max-Present-Present-Max": "Max ● Present ● Present ● Max", + "CDE.SAN-ZING": "SAN ● ZING", + "CDE.MentalHealth-PhysicalHealth": "(Mental Health ● Physical Health)", + "CDE.Max-Present-Malus-Present-Max": "Max ● Present ● Malus ● Present ● Max", + "CDE.PTAO": "PTAO", + "CDE.Experience": "(Experience)", + "CDE.Total-Present": "Total ● Present", + + "CDE.Present": "Present", + "CDE.Total": "Total", + "CDE.Max": "Max", + + "CDE.Orientation": "Orientation", + "CDE.Aspect": "Aspect", + "CDE.Skill": "Skill", + "CDE.Speciality": "Speciality", + "CDE.Style": "Style", + "CDE.Field": "Field", + "CDE.Technique": "Technique", + "CDE.Activation": "Activation", + + "CDE.KFCreate": "Create Martial Art", + "CDE.KFEdit": "Edit Martial Art", + "CDE.KFDelete": "Delete Martial Art", + "CDE.KFNew": "New Martial Art", + + "CDE.SpecialityName": "Speciality Name", + "CDE.AssociatedElement": "Associated Element", + "CDE.HEI2": "Hei", + "CDE.RealizationTimeRitual": "Realization Time (Ritual)", + "CDE.RealizationTimeAccelerated": "Realization Time (Accelerated)", + "CDE.Data": "Data", + "CDE.Flashback": "Flashback", + "CDE.Components": "Components", + "CDE.Effects": "Effects", + "CDE.Examples": "Examples", + + "CDE.SpellCreate": "Create Spell", + "CDE.SpellEdit": "Edit Spell", + "CDE.SpellDelete": "Delete Spell", + "CDE.SpellNew": "New Spell", + + "CDE.SkillPromptName": "", + "CDE.BonusMalus": "Bonus/Malus D", + "CDE.BonusAuspiciousDice": "Bonus/Auspicious-Dice", + + "CDE.MagicPromptName": "", + "CDE.OneMagicRoll": "1. Magic Roll", + "CDE.DoNotModify": "Do not Modify this Aspect", + "CDE.AspectSkill": "Aspect/Skill", + "CDE.TwoPowerOfSpell": "2. Power of Spell", + "CDE.AspectSpeciality": "Aspect/Speciality", + "CDE.RollDifficulty": "Roll Difficulty", + + "CDE.TypeOfThrow": "Type of Throwing: Visible by…", + "CDE.Everybody": "Everybody", + "CDE.JustDMAndMe": "Just the DM and Me", + "CDE.DMOnly": "DM Only", + "CDE.MeOnly": "Me Only", + "CDE.AuspiciousDice": "Auspicious-Dice", + "CDE.AuspiciousDie": "Auspicious-Die", + + "CDE.Validate": "Validate", + "CDE.Cancel": "Cancel", + + "CDE.NPCName": "NPC's Name", + "CDE.TypeOfCreature": "Type of Creature", + + "CDE.Threat": "Capacity of Threat", + "CDE.Profane": "Profane", + "CDE.Apprentice": "Apprentice", + "CDE.Initiate": "Initiate", + "CDE.Accomplished": "Accomplished", + "CDE.Reknowned": "Reknowned", + + "CDE.Nuisance": "Level of Nuisance", + "CDE.Figurant": "Figurant", + "CDE.Minion": "Minion", + "CDE.Adversary": "Adversary", + "CDE.Ally": "Ally", + "CDE.Boss": "Boss", + "CDE.Dininity": "Divinity", + + "CDE.Aptitudes": "Aptitudes", + "CDE.SuperNatural": "Supernatural Abilities", + + "CDE.Physical": "● Physical", + "CDE.Martial": "● Martial", + "CDE.Mental": "● Mental", + "CDE.Social": "● Social", + "CDE.Spiritual": "● Spiritual", + + "CDE.Vitality": "Vitality", + "CDE.Hei": "Hei", + + "CDE.Notes": "Notes", + + "CDE.SupernaturalCreate": "Create Supernatural Ability", + "CDE.SupernaturalEdit": "Edit Supernatural Ability", + "CDE.SupernaturalDelete": "Delete Supernatural Ability", + "CDE.SupernaturalNew": "New Supernatural Ability", + + "CDE.LoksyuName": "Loksyu Name", + "CDE.Loksyu": "Loksyu", + "CDE.MetalYang": "㊎ Yang Metal (3)", + "CDE.MetalYin": "㊎ Yin Metal (8)", + "CDE.WaterYang": "㊌ Yang Water (1)", + "CDE.WaterYin": "㊌ Yin Water (6)", + "CDE.EarthYang": "㊏Yang Earth (5)", + "CDE.EarthYin": "㊏Yin Earth (0)", + "CDE.FireYang": "㊋ Yang Fire (7)", + "CDE.FireYin": "㊋ Yin Fire (2)", + "CDE.WoodYang": "㊍ Yang Wood (9)", + "CDE.WoodYin": "㊍ Yin Wood (4)", + + "CDE.Yin": "● Yin", + "CDE.Yang": "○ Yang", + "CDE.Successes": "Successes", + "CDE.Beneficial": "Auspicious-Dice", + "CDE.Noxious": "Noxious-Dice", + "CDE.TinJi": "Tin Ji:", + "CDE.Loksyu2": "Loksyu:", + "CDE.Results": "Results:", + "CDE.SpecialAspect": "Speciality Aspect", + + "CDE.Randomize": "Randomize", + "CDE.RandomizeSentence": "# of the Component Selected at Random in a Hurry", + + "CDE.Reference": "Reference", + + "CDE.Error0": "Unable to proceed: total dice number to be thrown is less than 1.", + "CDE.Error1": "Unable to proceed: you don't possess this Skill.", + "CDE.Error2": "Unable to proceed: you don't possess any Speciality in this Skill.", + "CDE.Error3": "Unable to proceed: you don't possess this Resource.", + "CDE.Error4": "Unable to proceed: you don't possess any Field in this Resource.", + "CDE.Error5": "Unable to proceed: you don't possess this Magical Skill.", + "CDE.Error6": "Unable to proceed: you don't possess this Speciality in this Magical Skill.", + "CDE.Error10": "Unable to proceed: you've got 0 or less in this Aspect.", + "CDE.Error12": "Unable to proceed: you can't possess any Speciality in this Skill which score is less than 1.", + "CDE.Error14": "Unable to proceed: you can't possess any Field in this Resource which score is less than 1.", + "CDE.Error16": "Unable to proceed: you can't possess any Speciality in this Magical Skill which score is less than 1.", + + "CDE.Preferences": "Preferences for this actor", + "CDE.TypeOfThrowCheck": "Always ask before making a throw", + + "CDE.TypeOfThrow4ThisTime": "Type of Throwing for this time: Visible by…", + "CDE.TypeOfThrowTitle": "Modify Type of Throw?", + "CDE.CancelChanges": "Cancel Changes", + + "CDE.NextTimeGoToTheSettings": "All these are parametrable in the Settings", + + + "CDE.OneDie": "Die", + "CDE.ManyDice": "Dice", + + "CDE.HasCastASpell": "has cast a spell ", + "CDE.MsgMagic1": "The number of Hei points spent on the ", + "CDE.MsgMagic2": "speciality spell is ", + "CDE.MsgMagic3": ". The power to be invoked is ", + "CDE.MsgMagic4": ", if the spell is cast successfully.", + + + "CDE.TinJiName": "Tin Ji Name", + "CDE.TinJi2": "Tin Ji", + + "CDE.UpperCaseSuccesses": "SUCCESSES", + "CDE.UpperCaseAuspiciousDice": "AUSPICIOUS-DICE", + "CDE.UpperCaseNoxiousDice": "NOXIOUS-DICE", + "CDE.UpperCaseLoksyu": "LOKSYU", + "CDE.UpperCaseTinJi": "TIN JI", + + "CDE.UpperCaseMetal": "METAL", + "CDE.UpperCaseWater": "WATER", + "CDE.UpperCaseEarth": "EARTH", + "CDE.UpperCaseFire": "FIRE", + "CDE.UpperCaseWood": "WOOD", + + + "CDE.Visible": "Visible Specialities", + + "CDE.MartialArts": "Martial Arts", + + "CDE.Initiative": "Initiative", + "CDE.TurnOrder": "Determining your Initiative", + "CDE.InitiativeSpeciality": "First action (Skill) you plan to perform", + "CDE.InitiativeNPCSpeciality": "First action (Aptitude) you plan to perform", + + "CDE.DeterminateInitiative": "Determine Initiative: Prowess + first action", + "CDE.DeterminateNPCInitiative": "Determine Initiative: Physical Aptitude + first action", + "CDE.PlusInitiative": "More Initiative", + "CDE.MinusInitiative": "Less Initiative", + + + "TYPES": { + "Actor": { + "character": "Fat si", + "npc": "Creature", + "tinji": "Tin Ji", + "loksyu": "Loksyu" + }, + "Item": { + "item": "Equipment", + "kungfu": "Martial Art", + "spell": "Spell", + "supernatural": "Supernatural Ability" + } + } +} diff --git a/lang/es-cde.json b/lang/es-cde.json new file mode 100644 index 0000000..f9208a3 --- /dev/null +++ b/lang/es-cde.json @@ -0,0 +1,340 @@ +{ + "CDE.ItemCreate": "Crear un Equipo", + "CDE.ItemEdit": "Editar el Equipo", + "CDE.ItemDelete": "Borrar el Equipo", + "CDE.ItemNew": "Nuevo Equipo", + + "CDE.TypeOfItem": "Tipo de Equipo", + "CDE.Weapon": "Arma", + "CDE.Armor": "Armor", + "CDE.Sanhei": "Sanhei", + "CDE.Other": "Otro", + + + "CDE.ResourceMin": "Min", + "CDE.ResourceValue": "Valor", + "CDE.ResourceMax": "Máx", + + "CDE.DefineTemplate": " Establecer como Plantilla", + "CDE.UnsetTemplate": "Deactivar la Plantilla", + "CDE.NoTemplate": "Sin Plantilla", + + "CDE.Quantity": "Cantidad", + "CDE.Weight": "Peso", + "CDE.Damage": "Daños", + "CDE.Range": "Alcance", + + "CDE.Masterized": "Ha dominado esta técnica", + + "CDE.Create": "Crear", + "CDE.New": "Nuevo", + + "CDE.Name": "Nombre", + "CDE.PCName": "Nombre del Personaje", + "CDE.Concept": "Concepto", + "CDE.CelestialGuardian": "Guardián Celestial", + "CDE.CelestialGuardian1": "Tigre Blanco (Metal)", + "CDE.CelestialGuardian2": "Tortuga Negra (Agua)", + "CDE.CelestialGuardian3": "Kirin Amarillo (Tierra)", + "CDE.CelestialGuardian4": "Pájaro Escarlata (Fuego)", + "CDE.CelestialGuardian5": "Dragón Azul (Madera)", + + "CDE.Description": "Descripción", + "CDE.Description2" : "Descripción", + "CDE.Attributes": "Atributos", + "CDE.Skills": "Habilidades", + "CDE.Magics": "Magias", + "CDE.Resources": "Recursos", + "CDE.Treasures": "Tres Tesoros", + "CDE.NgHang": "Ng Hang", + "CDE.Items": "Equipo", + "CDE.KungFu": "Kung Fu", + "CDE.Spells": "Hechizos", + "CDE.ModernJapan": "Japón contemporáneo", + + "CDE.Die": "Haga clic aquí para tirar los dados para ", + "CDE.DieSP": "Haz clic aquí para tirar los dados para la especialidad ", + "CDE.DieDM": "Haga clic aquí para tirar los dados para una de estas áreas", + "CDE.Debt": "Marque esta casilla si ha contraído una deuda en ", + + "CDE.Specialities": "Especialidades", + "CDE.Fields": "Áreas", + "CDE.Art": "Arte", + "CDE.Investigation": "Encuesta", + "CDE.Erudition": "Erudición", + "CDE.Knavery": "Engaño", + "CDE.Wordliness": "Mundanerías", + "CDE.Prowess": "Hazaña", + "CDE.Sciences": "Ciensas", + "CDE.Technologies": "Tecnologías", + "CDE.RangedCombat": "Combate a Distancia", + + "CDE.Supply": "Suministro", + "CDE.Inquiry": "Información", + "CDE.Influence": "Influencia", + + "CDE.Components2": "Componentes e Ingredientes", + "CDE.Component": "Componente #", + "CDE.ChanceThrow": "Eligir un ingrediente al azar y rápidamente", + "CDE.TypesOfMagic": "Tipos de Magia", + + "CDE.InternalCinnabar": "Cinabrio Interno", + "CDE.Alchemy": "Alquimia", + "CDE.MasteryOfTheWay": "Dominio del Camino", + "CDE.Exorcism": "Exorcismo", + "CDE.Geomancy": "Geomancia", + + "CDE.Metal": "㊎ Metal ", + "CDE.MetalQualities": "– agresivo, apasionado, combativo, entusiasta…", + "CDE.Water": "㊌ Agua ", + "CDE.WaterQualities": "– flexible, diligente, adaptable, disciplinado…", + "CDE.Earth": "㊏ Tierra ", + "CDE.EarthQualities": "– terco, resistente, perdurable, paciente…", + "CDE.Fire": "㊋ Fuego ", + "CDE.FireQualities": "– cálido, creativo, empático, inspirado…", + "CDE.Wood": "㊍ Madera ", + "CDE.WoodQualities": "– intuitivo, observador, abierto, instintivo…", + + "CDE.PracticeSpecialty": "Marque esta casilla si practica la especialidad ", + + "CDE.Essence": "Esencia", + "CDE.Mind": "Mente", + "CDE.Purification": "Purificación", + "CDE.Manipulation": "Manejo", + "CDE.Aura": "Aura", + + "CDE.Acupuncture": "Acupunctura", + "CDE.Elixirs": "Elixires", + "CDE.Poisons": "Venenos", + "CDE.Arsenal": "Arsenal", + "CDE.Potions": "Pociones", + + "CDE.Curse": "Maldición", + "CDE.Transfiguration": "Transfiguración", + "CDE.Necromancy": "Nigromancia", + "CDE.ClimateControl": "Control Climatico", + "CDE.GoldenMagic": "Magia de Oro", + + "CDE.Invocation": "Invocación", + "CDE.Tracking": "Seguimiento", + "CDE.Protection": "Protección", + "CDE.Punishment": "Castigo", + "CDE.Domination": "Dominación", + + "CDE.Neutralization": "Neutralización", + "CDE.Divination": "Adivinación", + "CDE.EarthlyPrayer": "Oración Terrenal", + "CDE.HeavenlyPrayer": "Oración Celestial", + "CDE.Fungseoi": "Fungseoi", + + "CDE.HEI": "HEI", + "CDE.Essence2": "(Esencia)", + "CDE.YANG-YIN": "YANG ● YIN", + "CDE.Max-Present-Present-Max": "Máx ● Actual ● Actual ● Máx", + "CDE.SAN-ZING": "SAN ● ZING", + "CDE.MentalHealth-PhysicalHealth": "(Salud Mental ● Salud Física)", + "CDE.Max-Present-Malus-Present-Max": "Máx ● Actual ● Malos ● Actual ● Máx", + "CDE.PTAO": "PTAO", + "CDE.Experience": "(Experiencia)", + "CDE.Total-Present": "Total ● Actual", + + "CDE.Present": "Actual", + "CDE.Total": "Total", + "CDE.Max": "Máx", + + "CDE.Orientation": "Orientación", + "CDE.Aspect": "Aspecto", + "CDE.Skill": "Habilidad", + "CDE.Speciality": "Especialidad", + "CDE.Field": "Área", + "CDE.Style": "Estilo", + "CDE.Technique": "Técnica", + "CDE.Activation": "Activación", + + "CDE.KFCreate": "Crear un Arte Marcial", + "CDE.KFEdit": "Editar el Arte Marcial", + "CDE.KFDelete": "Borrar el Arte Marcial", + "CDE.KFNew": "Nuevo Arte Marcial", + + "CDE.SpecialityName": "Nombre Especialidad", + "CDE.AssociatedElement": "Elemento Asociado", + "CDE.HEI2": "Hei", + "CDE.RealizationTimeRitual": "Tiempo de Realización (Ritual)", + "CDE.RealizationTimeAccelerated": "Tiempo de Realización (Acelerado)", + "CDE.Flashback": "Flashback", + "CDE.Data": "Data", + "CDE.Components": "Componentes", + "CDE.Effects": "Efectos", + "CDE.Examples": "Ejemplos", + + "CDE.SpellCreate": "Crear un Hechizo", + "CDE.SpellEdit": "Editar el Hechizo", + "CDE.SpellDelete": "Borrar el Hechizo", + "CDE.SpellNew": "Nuevo Hechizo", + + "CDE.SkillPromptName": "", + "CDE.BonusMalus": "D Bonos/Malos", + "CDE.BonusAuspiciousDice": "Bonos/Dados-buenos", + + "CDE.MagicPromptName": "", + "CDE.OneMagicRoll": "1. Tirada Mágica", + "CDE.DoNotModify": "No cambie el Aspecto", + "CDE.AspectSkill": "Aspecto/Habilidad", + "CDE.TwoPowerOfSpell": "2. Poder de Hechizo", + "CDE.AspectSpeciality": "Aspecto/Especialidad", + "CDE.RollDifficulty": "Dificultad de la Tirada", + + "CDE.TypeOfThrow": "Tipo de tirada: visible por…", + "CDE.Everybody": "Todo el mundo", + "CDE.JustDMAndMe": "Solo el DM y yo", + "CDE.DMOnly": "El DM solamente", + "CDE.MeOnly": "Yo solamente", + "CDE.AuspiciousDice": "Dados-buenos", + "CDE.AuspiciousDie": "Dada-bueno", + + "CDE.Validate": "Validar", + "CDE.Cancel": "Anular", + + "CDE.NPCName": "Nombre del NPC", + "CDE.TypeOfCreature": "Tipo de Criatura", + + "CDE.Threat": "Nivel de Amenaza", + "CDE.Profane": "Profano", + "CDE.Apprentice": "Aprendiz", + "CDE.Initiate": "Iniciado", + "CDE.Accomplished": "Consumado", + "CDE.Reknowned": "Renombrado", + + "CDE.Nuisance": "Capacitad de Molesta", + "CDE.Figurant": "Extra", + "CDE.Minion": "Esbirro", + "CDE.Adversary": "Adversario", + "CDE.Ally": "Aliado", + "CDE.Boss": "Jefe", + "CDE.Dininity": "Deidad", + + "CDE.Aptitudes": "Aptitudes", + "CDE.SuperNatural": "Habilidades Sobrenaturales", + + "CDE.Physical": "● Física", + "CDE.Martial": "● Marcial", + "CDE.Mental": "● Mental", + "CDE.Social": "● Social", + "CDE.Spiritual": "● Espiritual", + + "CDE.Vitality": "Vitalidad", + "CDE.Hei": "Hei", + + "CDE.Notes": "Notas", + + "CDE.SupernaturalCreate": "Crear una Habilidad Sobrenatural", + "CDE.SupernaturalEdit": "Editar la Habilidad Sobrenatural", + "CDE.SupernaturalDelete": "Borrar la Habilidad Sobrenatural", + "CDE.SupernaturalNew": "Nueva Habilidad Sobrenatural", + + "CDE.LoksyuName": "Nombre del Loksyu", + "CDE.Loksyu": "Loksyu", + "CDE.MetalYang": "㊎ Metal Yang (3)", + "CDE.MetalYin": "㊎ Metal Yin (8)", + "CDE.WaterYang": "㊌ Agua Yang (1)", + "CDE.WaterYin": "㊌ Agua Yin (6)", + "CDE.EarthYang": "㊏ Tierra Yang (5)", + "CDE.EarthYin": "㊏ Tierra Yin (0)", + "CDE.FireYang": "㊋ Fuego Yang (7)", + "CDE.FireYin": "㊋ Fuego Yin (2)", + "CDE.WoodYang": "㊍ Madera Yang (9)", + "CDE.WoodYin": "㊍ Madera Yin (4)", + + "CDE.Yin": "● Yin", + "CDE.Yang": "○ Yang", + "CDE.Successes": "Éxitos", + "CDE.Beneficial": "Dados-Buenos", + "CDE.Noxious": "Dados-Dañinos", + "CDE.TinJi": "Tin Ji:", + "CDE.Loksyu2": "Loksyu:", + "CDE.Results": "Resultados:", + "CDE.SpecialAspect": "Aspecto de Especialidad", + + "CDE.Randomize": "Dibujo aleatorio", + "CDE.RandomizeSentence": "# del ingrediente eligido al azar y rápidamente", + + "CDE.Reference": "Referencia", + + "CDE.Error0": "No se puede continuar: el número total de dados que se van a lanzar es inferior a 1.", + "CDE.Error1": "No se puede continuar: no posee esta habilidad.", + "CDE.Error2": "No se puede continuar: no posee ninguna especialidad en esta habilidad.", + "CDE.Error3": "No se puede continuar: no posee este recurso.", + "CDE.Error4": "No se puede continuar: no posee ningún área en este recurso.", + "CDE.Error5": "No se puede continuar: no posee esta habilidad mágica.", + "CDE.Error6": "No se puede continuar: no posee esta especialidad en esta habilidad mágica.", + "CDE.Error10": "No se puede continuar: tienes 0 o menos en este aspecto.", + "CDE.Error12": "No se puede continuar: no puede poseer ninguna especialidad en esta habilidad cuya puntuación sea inferior a 1.", + "CDE.Error14": "No se puede continuar: no puede poseer ningún área en este recurso cuya puntuación sea inferior a 1.", + "CDE.Error16": "No se puede continuar: no puede poseer ninguna especialidad en esta habilidad mágica cuya puntuación sea inferior a 1.", + + "CDE.Preferences": "Preferencias para este actor", + "CDE.TypeOfThrowCheck": "Preguntar siempre antes de realizar una tirada", + + "CDE.TypeOfThrow4ThisTime": "Tipo de tirada por esta vez: visible por…", + "CDE.TypeOfThrowTitle": "¿Modificar el tipo de tirada?", + "CDE.CancelChanges": "Cancelar cambios", + + "CDE.NextTimeGoToTheSettings": "Todos estos son configurables en la configuración.", + + + "CDE.OneDie": "dado", + "CDE.ManyDice": "dados", + + "CDE.HasCastASpell": "ha lanzado un hechizo ", + "CDE.MsgMagic1": "El número de puntos Hei gastados en el hechizo especial ", + "CDE.MsgMagic2": "es ", + "CDE.MsgMagic3": ". El poder para invocar es ", + "CDE.MsgMagic4": ", si el hechizo se lanza con éxito.", + + + "CDE.TinJiName": "Nombre de la Tin Ji", + "CDE.TinJi2": "Tin Ji", + + "CDE.UpperCaseSuccesses": "ÉXITOS", + "CDE.UpperCaseAuspiciousDice": "DADOS-BUENOS", + "CDE.UpperCaseNoxiousDice": "DADOS-DAÑINOS", + "CDE.UpperCaseLoksyu": "LOKSYU", + "CDE.UpperCaseTinJi": "TIN JI", + + "CDE.UpperCaseMetal": "METAL", + "CDE.UpperCaseWater": "AGUA", + "CDE.UpperCaseEarth": "TIERRA", + "CDE.UpperCaseFire": "FUEGO", + "CDE.UpperCaseWood": "MADERA", + + + "CDE.Visible": "Especialidades visibles", + + "CDE.MartialArts": "Artes Marciales", + + "CDE.Initiative": "Iniciativa", + "CDE.TurnOrder": "Determinando su iniciativa", + "CDE.InitiativeSpeciality": "Primera acción (Habilidad) que planea realizar", + "CDE.InitiativeNPCSpeciality": "Primera acción (Aptitud) que planea realizar", + + "CDE.DeterminateInitiative": "Determinar la iniciativa: Hazaña + primera acción", + "CDE.DeterminateNPCInitiative": "Determinar la iniciativa: Aptitud física + primera acción", + "CDE.PlusInitiative": "Más iniciativa", + "CDE.MinusInitiative": "Menos iniciativa", + + + "TYPES": { + "Actor": { + "character": "Fat si", + "npc": "Criatura", + "tinji": "Tin Ji", + "loksyu": "Loksyu" + }, + "Item": { + "item": "Equipo", + "kungfu": "Arte marcial", + "spell": "Hechizo", + "supernatural": "Habilidad Sobrenatural" + } + } +} diff --git a/lang/fr-cde.json b/lang/fr-cde.json new file mode 100644 index 0000000..8f949b1 --- /dev/null +++ b/lang/fr-cde.json @@ -0,0 +1,340 @@ +{ + "CDE.ItemCreate": "Créer un Équipement", + "CDE.ItemEdit": "Éditer l′Équipement", + "CDE.ItemDelete": "Supprimer l′Équipement", + "CDE.ItemNew": "Nouvel Équipement", + + "CDE.TypeOfItem": "Type d′Équipement", + "CDE.Weapon": "Arme", + "CDE.Armor": "Protection", + "CDE.Sanhei": "Sanhei", + "CDE.Other": "Autre", + + + "CDE.ResourceMin": "Min", + "CDE.ResourceValue": "Valeur", + "CDE.ResourceMax": "Max", + + "CDE.DefineTemplate": "Définir comme Modèle", + "CDE.UnsetTemplate": "Désactiver le Modèle", + "CDE.NoTemplate": "Aucun Modèle", + + "CDE.Quantity": "Quantité", + "CDE.Weight": "Poids", + "CDE.Damage": "Dégâts", + "CDE.Range": "Portée", + + "CDE.Masterized": "Vous maîtrisez cette Technique", + + "CDE.Create": "Créer", + "CDE.New": "Nouveau", + + "CDE.Name": "Nom", + "CDE.PCName": "Nom du Personnage", + "CDE.Concept": "Concept", + "CDE.CelestialGuardian": "Gardien Céleste", + "CDE.CelestialGuardian1": "Tigre Blanc (Métal)", + "CDE.CelestialGuardian2": "Tortue Noire (Eau)", + "CDE.CelestialGuardian3": "Kirin Jaune (Terre)", + "CDE.CelestialGuardian4": "Oiseau Écarlate (Feu)", + "CDE.CelestialGuardian5": "Dragon d′Azur (Bois)", + + "CDE.Description": "Description", + "CDE.Description2" : "Descript.", + "CDE.Attributes": "Attributs", + "CDE.Skills": "Compétences", + "CDE.Magics": "Magies", + "CDE.Resources": "Ressources", + "CDE.Treasures": "Trois Trésors", + "CDE.NgHang": "Ng Hang", + "CDE.Items": "Équipement", + "CDE.KungFu": "Kung Fu", + "CDE.Spells": "Sortilèges", + "CDE.ModernJapan": "Japon contemporain", + + "CDE.Die": "Cliquez ici pour jeter les dés pour ", + "CDE.DieSP": "Cliquez ici pour jeter les dés pour la spécialité ", + "CDE.DieDM": "Cliquez ici pour jeter les dés pour un de ces domaines", + "CDE.Debt": "Cochez si vous avec contracté une dette en ", + + "CDE.Specialities": "Spécialités", + "CDE.Fields": "Domaines", + "CDE.Art": "Art", + "CDE.Investigation": "Enquête", + "CDE.Erudition": "Érudition", + "CDE.Knavery": "Filouterie", + "CDE.Wordliness": "Mondanités", + "CDE.Prowess": "Prouesse", + "CDE.Sciences": "Sciences", + "CDE.Technologies": "Technologies", + "CDE.RangedCombat": "Combat à Distance", + + "CDE.Supply": "Matériel", + "CDE.Inquiry": "Renseignement", + "CDE.Influence": "Influence", + + "CDE.Components2": "Composants & Ingrédients", + "CDE.Component": "Composant n° ", + "CDE.ChanceThrow": "Choisir un composant au hasard dans l′urgence", + "CDE.TypesOfMagic": "Types de Magie", + + "CDE.InternalCinnabar": "Cinabre Interne", + "CDE.Alchemy": "Alchimie", + "CDE.MasteryOfTheWay": "Maîtrise de la Voie", + "CDE.Exorcism": "Exorcisme", + "CDE.Geomancy": "Géomancie", + "CDE.WoodYin": "㊍ Bois Yin (4)", + + "CDE.Metal": "㊎ Métal ", + "CDE.MetalQualities": "– agressif, passionné, combatif, enthousiate…", + "CDE.Water": "㊌ Eau ", + "CDE.WaterQualities": "– souple, appliqué, adaptable, discipliné…", + "CDE.Earth": "㊏ Terre ", + "CDE.EarthQualities": "– obstiné, résilient, endurant, patient…", + "CDE.Fire": "㊋ Feu ", + "CDE.FireQualities": "– chaleureux, créatif, empathique, inspiré…", + "CDE.Wood": "㊍ Bois ", + "CDE.WoodQualities": "– intuitif, observateur, ouvert, instinctif…", + + "CDE.PracticeSpecialty": "Cochez si vous pratiquez la spécialité ", + + "CDE.Essence": "Essence", + "CDE.Mind": "Esprit", + "CDE.Purification": "Purification", + "CDE.Manipulation": "Manipulation", + "CDE.Aura": "Aura", + + "CDE.Acupuncture": "Acupuncture", + "CDE.Elixirs": "Élixirs", + "CDE.Poisons": "Poisons", + "CDE.Arsenal": "Arsenal", + "CDE.Potions": "Philtres", + + "CDE.Curse": "Malédiction", + "CDE.Transfiguration": "Transfiguration", + "CDE.Necromancy": "Nécromancie", + "CDE.ClimateControl": "Maîtrise Climatique", + "CDE.GoldenMagic": "Magie d′Or", + + "CDE.Invocation": "Invocation", + "CDE.Tracking": "Traque", + "CDE.Protection": "Protection", + "CDE.Punishment": "Punition", + "CDE.Domination": "Domination", + + "CDE.Neutralization": "Neutralisation", + "CDE.Divination": "Divination", + "CDE.EarthlyPrayer": "Prière Terrestre", + "CDE.HeavenlyPrayer": "Prière Céleste", + "CDE.Fungseoi": "Fungseoi", + + "CDE.HEI": "HEI", + "CDE.Essence2": "(Essence)", + "CDE.YANG-YIN": "YANG ● YIN", + "CDE.Max-Present-Present-Max": "Max ● Actuel ● Actuel ● Max", + "CDE.SAN-ZING": "SAN ● ZING", + "CDE.MentalHealth-PhysicalHealth": "(Santé Mentale ● Santé Physique)", + "CDE.Max-Present-Malus-Present-Max": "Max ● Actuel ● Malus ● Actuel ● Max", + "CDE.PTAO": "PTAO", + "CDE.Experience": "(Expérience)", + "CDE.Total-Present": "Total ● Actuel", + + "CDE.Present": "Actuel", + "CDE.Total": "Total", + "CDE.Max": "Max", + + "CDE.Orientation": "Orientation", + "CDE.Aspect": "Aspect", + "CDE.Skill": "Compétence", + "CDE.Speciality": "Spécialité", + "CDE.Field": "Domaine", + "CDE.Style": "Style", + "CDE.Technique": "Technique", + "CDE.Activation": "Activation", + + "CDE.KFCreate": "Créer un Art Martial", + "CDE.KFEdit": "Éditer l′Art Martial", + "CDE.KFDelete": "Supprimer l′Art Martial", + "CDE.KFNew": "Nouvel Art Martial", + + "CDE.SpecialityName": "Nom Spécialité", + "CDE.AssociatedElement": "Élément Associé", + "CDE.HEI2": "Hei", + "CDE.RealizationTimeRitual": "Temps de Réalisation (Rituel)", + "CDE.RealizationTimeAccelerated": "Temps de Réalisation (Accéléré)", + "CDE.Flashback": "Flash-back", + "CDE.Data": "Données", + "CDE.Components": "Composantes", + "CDE.Effects": "Effets", + "CDE.Examples": "Exemples", + + "CDE.SpellCreate": "Créer un Sortilège", + "CDE.SpellEdit": "Éditer le Sortilège", + "CDE.SpellDelete": "Supprimer le Sortilège", + "CDE.SpellNew": "Nouveau Sortilège", + + "CDE.SkillPromptName": "", + "CDE.BonusMalus": "D Bonus/Malus", + "CDE.BonusAuspiciousDice": "Bonus/Dés-fastes", + + "CDE.MagicPromptName": "", + "CDE.OneMagicRoll": "1. Jet de Magie", + "CDE.DoNotModify": "Ne modifiez pas cet Aspect", + "CDE.AspectSkill": "Aspect/Compétence", + "CDE.TwoPowerOfSpell": "2. Puissance du Sort", + "CDE.AspectSpeciality": "Aspect/Spécialité", + "CDE.RollDifficulty": "Difficulté du Jet", + + "CDE.TypeOfThrow": "Type de jet : visible pour…", + "CDE.Everybody": "Tout le monde", + "CDE.JustDMAndMe": "Juste le MJ et moi", + "CDE.DMOnly": "Le MJ uniquement", + "CDE.MeOnly": "Moi uniquement", + "CDE.AuspiciousDice": "Dés-fastes", + "CDE.AuspiciousDie": "Dé-faste", + + "CDE.Validate": "Valider", + "CDE.Cancel": "Annuler", + + "CDE.NPCName": "Nom du PNJ", + "CDE.TypeOfCreature": "Type de Créature", + + "CDE.Threat": "Niveau de Menace", + "CDE.Profane": "Profane", + "CDE.Apprentice": "Apprenti", + "CDE.Initiate": "Initié", + "CDE.Accomplished": "Accompli", + "CDE.Reknowned": "Renommé", + + "CDE.Nuisance": "Capacité de Nuisance", + "CDE.Figurant": "Figurant", + "CDE.Minion": "Sbire", + "CDE.Adversary": "Adversaire", + "CDE.Ally": "Allié", + "CDE.Boss": "Boss", + "CDE.Dininity": "Divinité", + + "CDE.Aptitudes": "Aptitudes", + "CDE.SuperNatural": "Capacités Surnaturelles", + + "CDE.Physical": "● Physique", + "CDE.Martial": "● Martiale", + "CDE.Mental": "● Mentale", + "CDE.Social": "● Sociale", + "CDE.Spiritual": "● Spirituelle", + + "CDE.Vitality": "Vitalité", + "CDE.Hei": "Hei", + + "CDE.Notes": "Notes", + + "CDE.SupernaturalCreate": "Créer une Capacité Surnaturelle", + "CDE.SupernaturalEdit": "Éditer la Capacité Surnaturelle", + "CDE.SupernaturalDelete": "Supprimer la Capacité Surnaturelle", + "CDE.SupernaturalNew": "Nouvelle Capacité Surnaturelle", + + "CDE.LoksyuName": "Nom du Loksyu", + "CDE.Loksyu": "Loksyu", + "CDE.MetalYang": "㊎ Métal Yang (3)", + "CDE.MetalYin": "㊎ Métal Yin (8)", + "CDE.WaterYang": "㊌ Eau Yang (1)", + "CDE.WaterYin": "㊌ Eau Yin (6)", + "CDE.EarthYang": "㊏ Terre Yang (5)", + "CDE.EarthYin": "㊏ Terre Yin (0)", + "CDE.FireYang": "㊋ Feu Yang (7)", + "CDE.FireYin": "㊋ Feu Yin (2)", + "CDE.WoodYang": "㊍ Bois Yang (9)", + + "CDE.Yin": "● Yin", + "CDE.Yang": "○ Yang", + "CDE.Successes": "Succès", + "CDE.Beneficial": "Dés-Fastes", + "CDE.Noxious": "Dés-Néfastes", + "CDE.TinJi": "Tin Ji :", + "CDE.Loksyu2": "Loksyu :", + "CDE.Results": "Résultats :", + "CDE.SpecialAspect": "Aspect Spécialité", + + "CDE.Randomize": "Tirage aléatoire", + "CDE.RandomizeSentence": "n° du composant choisi au hasard dans l'urgence", + + "CDE.Reference": "Référence", + + "CDE.Error0": "Impossible de poursuivre : le nombre total de vos dés à lancer est inférieur à 1.", + "CDE.Error1": "Impossible de poursuivre : vous ne possédez pas cette Compétence.", + "CDE.Error2": "Impossible de poursuivre : vous ne possédez pas de Spécialité dans cette Compétence.", + "CDE.Error3": "Impossible de poursuivre : vous ne possédez pas cette Ressource.", + "CDE.Error4": "Impossible de poursuivre : vous ne possédez pas de Domaine dans cette Ressource.", + "CDE.Error5": "Impossible de poursuivre : vous ne possédez pas cette Compétence de Magie.", + "CDE.Error6": "Impossible de poursuivre : vous ne possédez pas cette Spécialité dans cette Compétence de Magie.", + "CDE.Error10": "Impossible de poursuivre : vous avez 0 ou moins dans cet Aspect.", + "CDE.Error12": "Impossible de poursuivre : vous ne pouvez pas posséder de Spécialité dans cette Compétence dont le score est inférieur à 1.", + "CDE.Error14": "Impossible de poursuivre : vous ne pouvez pas posséder de Domaine dans cette Ressource dont le score est inférieur à 1.", + "CDE.Error16": "Impossible de poursuivre : vous ne pouvez pas posséder de Spécialité dans cette Compétence de Magie dont le score est inférieur à 1.", + + "CDE.Preferences": "Préférences pour cet acteur", + "CDE.TypeOfThrowCheck": "Toujours demander avant d'effectuer un lancer", + + "CDE.TypeOfThrow4ThisTime": "Type de jet pour cette fois : visible pour…", + "CDE.TypeOfThrowTitle": "Modifier le type de jet ?", + "CDE.CancelChanges": "Annuler les modifications", + + "CDE.NextTimeGoToTheSettings": "Tout ceci est paramétrable dans les Préférences", + + + "CDE.OneDie": "dé", + "CDE.ManyDice": "dés", + + "CDE.HasCastASpell": "a lancé un sortilège ", + "CDE.MsgMagic1": "Le nombre de points de Hei dépensés pour le sort de spécialité ", + "CDE.MsgMagic2": "s'élève à ", + "CDE.MsgMagic3": ". La puissance à invoquer est de ", + "CDE.MsgMagic4": ", si toutefois le sort est lancé avec succès.", + + + "CDE.TinJiName": "Nom de la Tin Ji", + "CDE.TinJi2": "Tin Ji", + + "CDE.UpperCaseSuccesses": "SUCCÈS", + "CDE.UpperCaseAuspiciousDice": "DÉS-FASTES", + "CDE.UpperCaseNoxiousDice": "DÉS-NÉFASTES", + "CDE.UpperCaseLoksyu": "LOKSYU", + "CDE.UpperCaseTinJi": "TIN JI", + + "CDE.UpperCaseMetal": "METAL", + "CDE.UpperCaseWater": "EAU", + "CDE.UpperCaseEarth": "TERRE", + "CDE.UpperCaseFire": "FEU", + "CDE.UpperCaseWood": "BOIS", + + + "CDE.Visible": "Spécialités visibles", + + "CDE.MartialArts": "Arts Martiaux", + + "CDE.Initiative": "Initiative", + "CDE.TurnOrder": "Détermination de votre initiative", + "CDE.InitiativeSpeciality": "Première action (Compétence) que vous escomptez effectuer", + "CDE.InitiativeNPCSpeciality": "Première action (Aptitude) que vous escomptez effectuer", + + "CDE.DeterminateInitiative": "Déterminer l'initiative : Prouesse + première action", + "CDE.DeterminateNPCInitiative": "Déterminer l'initiative : Aptitude physique + première action", + "CDE.PlusInitiative": "Plus Initiative", + "CDE.MinusInitiative": "Moins Initiative", + + + "TYPES": { + "Actor": { + "character": "Fat si", + "npc": "Créature", + "tinji": "Tin Ji", + "loksyu": "Loksyu" + }, + "Item": { + "item": "Équipement", + "kungfu": "Art martial", + "spell": "Sortilège", + "supernatural": "Capacité surnaturelle" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..366b140 --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "fvtt-chroniques-de-l-etrange", + "version": "3.0.0", + "description": "Refonte du système Chroniques de l'Étrange avec DataModels et Application V2.", + "main": "dist/system.js", + "scripts": { + "build:css": "lessc css/cde-theme.less css/cde-theme.css", + "build:js": "esbuild src/system.js --bundle --format=esm --target=es2022 --sourcemap --outfile=dist/system.js", + "build": "npm run build:css && npm run build:js", + "build:watch": "npm run build:css && npm run build:js -- --watch", + "clean": "rm -rf dist", + "prepare": "npm run build" + }, + "repository": { + "type": "git", + "url": "https://www.uberwald.me/gitea/uberwald/fvtt-chroniques-de-l-etrange.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "type": "module", + "devDependencies": { + "esbuild": "^0.27.4", + "less": "^4.2.0" + } +} diff --git a/packs/aide-pour-fxmaster/000029.ldb b/packs/aide-pour-fxmaster/000029.ldb new file mode 100644 index 0000000..ed96b00 Binary files /dev/null and b/packs/aide-pour-fxmaster/000029.ldb differ diff --git a/packs/aide-pour-fxmaster/000035.log b/packs/aide-pour-fxmaster/000035.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/aide-pour-fxmaster/CURRENT b/packs/aide-pour-fxmaster/CURRENT new file mode 100644 index 0000000..eea9b0f --- /dev/null +++ b/packs/aide-pour-fxmaster/CURRENT @@ -0,0 +1 @@ +MANIFEST-000034 diff --git a/packs/aide-pour-fxmaster/LOCK b/packs/aide-pour-fxmaster/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/packs/aide-pour-fxmaster/LOG b/packs/aide-pour-fxmaster/LOG new file mode 100644 index 0000000..0584037 --- /dev/null +++ b/packs/aide-pour-fxmaster/LOG @@ -0,0 +1,3 @@ +2026/03/25-23:20:54.993495 7f90f7fff6c0 Recovering log #32 +2026/03/25-23:20:55.003177 7f90f7fff6c0 Delete type=3 #30 +2026/03/25-23:20:55.003228 7f90f7fff6c0 Delete type=0 #32 diff --git a/packs/aide-pour-fxmaster/LOG.old b/packs/aide-pour-fxmaster/LOG.old new file mode 100644 index 0000000..ea2e5c7 --- /dev/null +++ b/packs/aide-pour-fxmaster/LOG.old @@ -0,0 +1,7 @@ +2026/03/25-23:09:24.686953 7f90f67fc6c0 Recovering log #27 +2026/03/25-23:09:24.697512 7f90f67fc6c0 Delete type=3 #25 +2026/03/25-23:09:24.697571 7f90f67fc6c0 Delete type=0 #27 +2026/03/25-23:20:49.874535 7f90f5ffb6c0 Level-0 table #33: started +2026/03/25-23:20:49.874573 7f90f5ffb6c0 Level-0 table #33: 0 bytes OK +2026/03/25-23:20:49.881637 7f90f5ffb6c0 Delete type=0 #31 +2026/03/25-23:20:49.894392 7f90f5ffb6c0 Manual compaction at level-0 from '!journal!ZWBHiWW5QlUeseAX' @ 72057594037927935 : 1 .. '!journal.pages!ZWBHiWW5QlUeseAX.jtQXIqLfyet8Nlte' @ 0 : 0; will stop at (end) diff --git a/packs/aide-pour-fxmaster/MANIFEST-000034 b/packs/aide-pour-fxmaster/MANIFEST-000034 new file mode 100644 index 0000000..f2dd8da Binary files /dev/null and b/packs/aide-pour-fxmaster/MANIFEST-000034 differ diff --git a/packs/aide-pour-la-lumiere/000145.ldb b/packs/aide-pour-la-lumiere/000145.ldb new file mode 100644 index 0000000..d31852e Binary files /dev/null and b/packs/aide-pour-la-lumiere/000145.ldb differ diff --git a/packs/aide-pour-la-lumiere/000151.log b/packs/aide-pour-la-lumiere/000151.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/aide-pour-la-lumiere/CURRENT b/packs/aide-pour-la-lumiere/CURRENT new file mode 100644 index 0000000..939d9b8 --- /dev/null +++ b/packs/aide-pour-la-lumiere/CURRENT @@ -0,0 +1 @@ +MANIFEST-000150 diff --git a/packs/aide-pour-la-lumiere/LOCK b/packs/aide-pour-la-lumiere/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/packs/aide-pour-la-lumiere/LOG b/packs/aide-pour-la-lumiere/LOG new file mode 100644 index 0000000..55c10ed --- /dev/null +++ b/packs/aide-pour-la-lumiere/LOG @@ -0,0 +1,3 @@ +2026/03/25-23:20:54.979842 7f90f67fc6c0 Recovering log #148 +2026/03/25-23:20:54.991234 7f90f67fc6c0 Delete type=3 #146 +2026/03/25-23:20:54.991298 7f90f67fc6c0 Delete type=0 #148 diff --git a/packs/aide-pour-la-lumiere/LOG.old b/packs/aide-pour-la-lumiere/LOG.old new file mode 100644 index 0000000..7206f05 --- /dev/null +++ b/packs/aide-pour-la-lumiere/LOG.old @@ -0,0 +1,8 @@ +2026/03/25-23:09:24.673117 7f90f7fff6c0 Recovering log #143 +2026/03/25-23:09:24.683104 7f90f7fff6c0 Delete type=3 #141 +2026/03/25-23:09:24.683202 7f90f7fff6c0 Delete type=0 #143 +2026/03/25-23:20:49.854866 7f90f5ffb6c0 Level-0 table #149: started +2026/03/25-23:20:49.854893 7f90f5ffb6c0 Level-0 table #149: 0 bytes OK +2026/03/25-23:20:49.861669 7f90f5ffb6c0 Delete type=0 #147 +2026/03/25-23:20:49.874373 7f90f5ffb6c0 Manual compaction at level-0 from '!journal!TniC3ok9W0hDYxJS' @ 72057594037927935 : 1 .. '!journal.pages!yZsG9QaBHT3cUfNd.AHcfBcO96nUCELxv' @ 0 : 0; will stop at (end) +2026/03/25-23:20:49.874418 7f90f5ffb6c0 Manual compaction at level-1 from '!journal!TniC3ok9W0hDYxJS' @ 72057594037927935 : 1 .. '!journal.pages!yZsG9QaBHT3cUfNd.AHcfBcO96nUCELxv' @ 0 : 0; will stop at (end) diff --git a/packs/aide-pour-la-lumiere/MANIFEST-000150 b/packs/aide-pour-la-lumiere/MANIFEST-000150 new file mode 100644 index 0000000..68a39ca Binary files /dev/null and b/packs/aide-pour-la-lumiere/MANIFEST-000150 differ diff --git a/packs/aide-pour-linitiative/000713.ldb b/packs/aide-pour-linitiative/000713.ldb new file mode 100644 index 0000000..887f382 Binary files /dev/null and b/packs/aide-pour-linitiative/000713.ldb differ diff --git a/packs/aide-pour-linitiative/000723.log b/packs/aide-pour-linitiative/000723.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/aide-pour-linitiative/CURRENT b/packs/aide-pour-linitiative/CURRENT new file mode 100644 index 0000000..005b9e6 --- /dev/null +++ b/packs/aide-pour-linitiative/CURRENT @@ -0,0 +1 @@ +MANIFEST-000722 diff --git a/packs/aide-pour-linitiative/LOCK b/packs/aide-pour-linitiative/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/packs/aide-pour-linitiative/LOG b/packs/aide-pour-linitiative/LOG new file mode 100644 index 0000000..5459f89 --- /dev/null +++ b/packs/aide-pour-linitiative/LOG @@ -0,0 +1,3 @@ +2026/03/25-23:20:54.966841 7f90f77fe6c0 Recovering log #720 +2026/03/25-23:20:54.977160 7f90f77fe6c0 Delete type=3 #718 +2026/03/25-23:20:54.977234 7f90f77fe6c0 Delete type=0 #720 diff --git a/packs/aide-pour-linitiative/LOG.old b/packs/aide-pour-linitiative/LOG.old new file mode 100644 index 0000000..25a3e4d --- /dev/null +++ b/packs/aide-pour-linitiative/LOG.old @@ -0,0 +1,8 @@ +2026/03/25-23:09:24.659514 7f90f77fe6c0 Recovering log #716 +2026/03/25-23:09:24.669834 7f90f77fe6c0 Delete type=3 #714 +2026/03/25-23:09:24.669899 7f90f77fe6c0 Delete type=0 #716 +2026/03/25-23:20:49.868039 7f90f5ffb6c0 Level-0 table #721: started +2026/03/25-23:20:49.868078 7f90f5ffb6c0 Level-0 table #721: 0 bytes OK +2026/03/25-23:20:49.874183 7f90f5ffb6c0 Delete type=0 #719 +2026/03/25-23:20:49.874400 7f90f5ffb6c0 Manual compaction at level-0 from '!journal!f6UhPlIUh2O0F36q' @ 72057594037927935 : 1 .. '!journal.pages!f6UhPlIUh2O0F36q.keqszrb6FAI7CVZx' @ 0 : 0; will stop at (end) +2026/03/25-23:20:49.881831 7f90f5ffb6c0 Manual compaction at level-1 from '!journal!f6UhPlIUh2O0F36q' @ 72057594037927935 : 1 .. '!journal.pages!f6UhPlIUh2O0F36q.keqszrb6FAI7CVZx' @ 0 : 0; will stop at (end) diff --git a/packs/aide-pour-linitiative/MANIFEST-000722 b/packs/aide-pour-linitiative/MANIFEST-000722 new file mode 100644 index 0000000..442fc18 Binary files /dev/null and b/packs/aide-pour-linitiative/MANIFEST-000722 differ diff --git a/packs/aides-pour-les-joueuses/004330.ldb b/packs/aides-pour-les-joueuses/004330.ldb new file mode 100644 index 0000000..c07bf00 Binary files /dev/null and b/packs/aides-pour-les-joueuses/004330.ldb differ diff --git a/packs/aides-pour-les-joueuses/004344.log b/packs/aides-pour-les-joueuses/004344.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/aides-pour-les-joueuses/CURRENT b/packs/aides-pour-les-joueuses/CURRENT new file mode 100644 index 0000000..f955117 --- /dev/null +++ b/packs/aides-pour-les-joueuses/CURRENT @@ -0,0 +1 @@ +MANIFEST-004343 diff --git a/packs/aides-pour-les-joueuses/LOCK b/packs/aides-pour-les-joueuses/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/packs/aides-pour-les-joueuses/LOG b/packs/aides-pour-les-joueuses/LOG new file mode 100644 index 0000000..b0eb014 --- /dev/null +++ b/packs/aides-pour-les-joueuses/LOG @@ -0,0 +1,3 @@ +2026/03/25-23:20:54.941740 7f90f67fc6c0 Recovering log #4341 +2026/03/25-23:20:54.952935 7f90f67fc6c0 Delete type=3 #4339 +2026/03/25-23:20:54.952993 7f90f67fc6c0 Delete type=0 #4341 diff --git a/packs/aides-pour-les-joueuses/LOG.old b/packs/aides-pour-les-joueuses/LOG.old new file mode 100644 index 0000000..4c750a2 --- /dev/null +++ b/packs/aides-pour-les-joueuses/LOG.old @@ -0,0 +1,7 @@ +2026/03/25-23:09:24.632404 7f90f7fff6c0 Recovering log #4337 +2026/03/25-23:09:24.642953 7f90f7fff6c0 Delete type=3 #4335 +2026/03/25-23:09:24.643019 7f90f7fff6c0 Delete type=0 #4337 +2026/03/25-23:20:49.861772 7f90f5ffb6c0 Level-0 table #4342: started +2026/03/25-23:20:49.861806 7f90f5ffb6c0 Level-0 table #4342: 0 bytes OK +2026/03/25-23:20:49.867856 7f90f5ffb6c0 Delete type=0 #4340 +2026/03/25-23:20:49.874387 7f90f5ffb6c0 Manual compaction at level-0 from '!journal!0lxwWrzKsdTBQhH0' @ 72057594037927935 : 1 .. '!journal.pages!wgSyae4GTJDkmBOm.6Ql0lgquUCTrMyTZ' @ 0 : 0; will stop at (end) diff --git a/packs/aides-pour-les-joueuses/MANIFEST-004343 b/packs/aides-pour-les-joueuses/MANIFEST-004343 new file mode 100644 index 0000000..62e403b Binary files /dev/null and b/packs/aides-pour-les-joueuses/MANIFEST-004343 differ diff --git a/packs/aides-pour-les-joueuses/lost/004317.log b/packs/aides-pour-les-joueuses/lost/004317.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/aides-pour-les-joueuses/lost/MANIFEST-004315 b/packs/aides-pour-les-joueuses/lost/MANIFEST-004315 new file mode 100644 index 0000000..9958725 Binary files /dev/null and b/packs/aides-pour-les-joueuses/lost/MANIFEST-004315 differ diff --git a/packs/cantonese-name-generators/000058.ldb b/packs/cantonese-name-generators/000058.ldb new file mode 100644 index 0000000..ba8b280 Binary files /dev/null and b/packs/cantonese-name-generators/000058.ldb differ diff --git a/packs/cantonese-name-generators/000064.log b/packs/cantonese-name-generators/000064.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/cantonese-name-generators/CURRENT b/packs/cantonese-name-generators/CURRENT new file mode 100644 index 0000000..e8c0266 --- /dev/null +++ b/packs/cantonese-name-generators/CURRENT @@ -0,0 +1 @@ +MANIFEST-000063 diff --git a/packs/cantonese-name-generators/LOCK b/packs/cantonese-name-generators/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/packs/cantonese-name-generators/LOG b/packs/cantonese-name-generators/LOG new file mode 100644 index 0000000..fd7a27e --- /dev/null +++ b/packs/cantonese-name-generators/LOG @@ -0,0 +1,3 @@ +2026/03/25-23:20:55.028995 7f90f6ffd6c0 Recovering log #61 +2026/03/25-23:20:55.038606 7f90f6ffd6c0 Delete type=3 #59 +2026/03/25-23:20:55.038658 7f90f6ffd6c0 Delete type=0 #61 diff --git a/packs/cantonese-name-generators/LOG.old b/packs/cantonese-name-generators/LOG.old new file mode 100644 index 0000000..4645c7e --- /dev/null +++ b/packs/cantonese-name-generators/LOG.old @@ -0,0 +1,8 @@ +2026/03/25-23:09:24.728225 7f90f7fff6c0 Recovering log #56 +2026/03/25-23:09:24.738919 7f90f7fff6c0 Delete type=3 #54 +2026/03/25-23:09:24.738983 7f90f7fff6c0 Delete type=0 #56 +2026/03/25-23:20:49.894409 7f90f5ffb6c0 Level-0 table #62: started +2026/03/25-23:20:49.894444 7f90f5ffb6c0 Level-0 table #62: 0 bytes OK +2026/03/25-23:20:49.900567 7f90f5ffb6c0 Delete type=0 #60 +2026/03/25-23:20:49.907833 7f90f5ffb6c0 Manual compaction at level-0 from '!tables!J9VdvrwkbyKxMAT7' @ 72057594037927935 : 1 .. '!tables.results!jGKjfCyk4ROSy9fU.zRzADzATtijaBdNX' @ 0 : 0; will stop at (end) +2026/03/25-23:20:49.907898 7f90f5ffb6c0 Manual compaction at level-1 from '!tables!J9VdvrwkbyKxMAT7' @ 72057594037927935 : 1 .. '!tables.results!jGKjfCyk4ROSy9fU.zRzADzATtijaBdNX' @ 0 : 0; will stop at (end) diff --git a/packs/cantonese-name-generators/MANIFEST-000063 b/packs/cantonese-name-generators/MANIFEST-000063 new file mode 100644 index 0000000..50d70e6 Binary files /dev/null and b/packs/cantonese-name-generators/MANIFEST-000063 differ diff --git a/packs/fxmastercde/000039.ldb b/packs/fxmastercde/000039.ldb new file mode 100644 index 0000000..36c7504 Binary files /dev/null and b/packs/fxmastercde/000039.ldb differ diff --git a/packs/fxmastercde/000045.log b/packs/fxmastercde/000045.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/fxmastercde/CURRENT b/packs/fxmastercde/CURRENT new file mode 100644 index 0000000..e146ef6 --- /dev/null +++ b/packs/fxmastercde/CURRENT @@ -0,0 +1 @@ +MANIFEST-000044 diff --git a/packs/fxmastercde/LOCK b/packs/fxmastercde/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/packs/fxmastercde/LOG b/packs/fxmastercde/LOG new file mode 100644 index 0000000..1b239a9 --- /dev/null +++ b/packs/fxmastercde/LOG @@ -0,0 +1,3 @@ +2026/03/25-23:20:55.016989 7f90f7fff6c0 Recovering log #42 +2026/03/25-23:20:55.027035 7f90f7fff6c0 Delete type=3 #40 +2026/03/25-23:20:55.027104 7f90f7fff6c0 Delete type=0 #42 diff --git a/packs/fxmastercde/LOG.old b/packs/fxmastercde/LOG.old new file mode 100644 index 0000000..d48d3ad --- /dev/null +++ b/packs/fxmastercde/LOG.old @@ -0,0 +1,8 @@ +2026/03/25-23:09:24.715707 7f90f67fc6c0 Recovering log #37 +2026/03/25-23:09:24.725437 7f90f67fc6c0 Delete type=3 #35 +2026/03/25-23:09:24.725504 7f90f67fc6c0 Delete type=0 #37 +2026/03/25-23:20:49.888146 7f90f5ffb6c0 Level-0 table #43: started +2026/03/25-23:20:49.888170 7f90f5ffb6c0 Level-0 table #43: 0 bytes OK +2026/03/25-23:20:49.894221 7f90f5ffb6c0 Delete type=0 #41 +2026/03/25-23:20:49.900722 7f90f5ffb6c0 Manual compaction at level-0 from '!macros!apyHJT40enTKFUfX' @ 72057594037927935 : 1 .. '!macros!suexsLbORUfE9ptz' @ 0 : 0; will stop at (end) +2026/03/25-23:20:49.907877 7f90f5ffb6c0 Manual compaction at level-1 from '!macros!apyHJT40enTKFUfX' @ 72057594037927935 : 1 .. '!macros!suexsLbORUfE9ptz' @ 0 : 0; will stop at (end) diff --git a/packs/fxmastercde/MANIFEST-000044 b/packs/fxmastercde/MANIFEST-000044 new file mode 100644 index 0000000..47ed979 Binary files /dev/null and b/packs/fxmastercde/MANIFEST-000044 differ diff --git a/packs/macros/000213.ldb b/packs/macros/000213.ldb new file mode 100644 index 0000000..cd26d5c Binary files /dev/null and b/packs/macros/000213.ldb differ diff --git a/packs/macros/000223.log b/packs/macros/000223.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/macros/CURRENT b/packs/macros/CURRENT new file mode 100644 index 0000000..a8d01b2 --- /dev/null +++ b/packs/macros/CURRENT @@ -0,0 +1 @@ +MANIFEST-000222 diff --git a/packs/macros/LOCK b/packs/macros/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/packs/macros/LOG b/packs/macros/LOG new file mode 100644 index 0000000..4fa850d --- /dev/null +++ b/packs/macros/LOG @@ -0,0 +1,3 @@ +2026/03/25-23:20:55.005125 7f90f77fe6c0 Recovering log #220 +2026/03/25-23:20:55.015600 7f90f77fe6c0 Delete type=3 #218 +2026/03/25-23:20:55.015651 7f90f77fe6c0 Delete type=0 #220 diff --git a/packs/macros/LOG.old b/packs/macros/LOG.old new file mode 100644 index 0000000..b62e667 --- /dev/null +++ b/packs/macros/LOG.old @@ -0,0 +1,8 @@ +2026/03/25-23:09:24.701586 7f90f6ffd6c0 Recovering log #216 +2026/03/25-23:09:24.712861 7f90f6ffd6c0 Delete type=3 #214 +2026/03/25-23:09:24.712933 7f90f6ffd6c0 Delete type=0 #216 +2026/03/25-23:20:49.881844 7f90f5ffb6c0 Level-0 table #221: started +2026/03/25-23:20:49.881867 7f90f5ffb6c0 Level-0 table #221: 0 bytes OK +2026/03/25-23:20:49.888032 7f90f5ffb6c0 Delete type=0 #219 +2026/03/25-23:20:49.900708 7f90f5ffb6c0 Manual compaction at level-0 from '!macros!Admg6zBHid4mfbJY' @ 72057594037927935 : 1 .. '!macros!wY3tga12higX7soz' @ 0 : 0; will stop at (end) +2026/03/25-23:20:49.907859 7f90f5ffb6c0 Manual compaction at level-1 from '!macros!Admg6zBHid4mfbJY' @ 72057594037927935 : 1 .. '!macros!wY3tga12higX7soz' @ 0 : 0; will stop at (end) diff --git a/packs/macros/MANIFEST-000222 b/packs/macros/MANIFEST-000222 new file mode 100644 index 0000000..0543dc3 Binary files /dev/null and b/packs/macros/MANIFEST-000222 differ diff --git a/packs/telecharger-compendiums/000959.ldb b/packs/telecharger-compendiums/000959.ldb new file mode 100644 index 0000000..725ec51 Binary files /dev/null and b/packs/telecharger-compendiums/000959.ldb differ diff --git a/packs/telecharger-compendiums/000965.log b/packs/telecharger-compendiums/000965.log new file mode 100644 index 0000000..e69de29 diff --git a/packs/telecharger-compendiums/CURRENT b/packs/telecharger-compendiums/CURRENT new file mode 100644 index 0000000..6169e01 --- /dev/null +++ b/packs/telecharger-compendiums/CURRENT @@ -0,0 +1 @@ +MANIFEST-000964 diff --git a/packs/telecharger-compendiums/LOCK b/packs/telecharger-compendiums/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/packs/telecharger-compendiums/LOG b/packs/telecharger-compendiums/LOG new file mode 100644 index 0000000..7932ff6 --- /dev/null +++ b/packs/telecharger-compendiums/LOG @@ -0,0 +1,3 @@ +2026/03/25-23:20:54.955460 7f90f6ffd6c0 Recovering log #962 +2026/03/25-23:20:54.965054 7f90f6ffd6c0 Delete type=3 #960 +2026/03/25-23:20:54.965130 7f90f6ffd6c0 Delete type=0 #962 diff --git a/packs/telecharger-compendiums/LOG.old b/packs/telecharger-compendiums/LOG.old new file mode 100644 index 0000000..7157ba0 --- /dev/null +++ b/packs/telecharger-compendiums/LOG.old @@ -0,0 +1,8 @@ +2026/03/25-23:09:24.646478 7f90f67fc6c0 Recovering log #957 +2026/03/25-23:09:24.656447 7f90f67fc6c0 Delete type=3 #955 +2026/03/25-23:09:24.656519 7f90f67fc6c0 Delete type=0 #957 +2026/03/25-23:20:49.848491 7f90f5ffb6c0 Level-0 table #963: started +2026/03/25-23:20:49.848532 7f90f5ffb6c0 Level-0 table #963: 0 bytes OK +2026/03/25-23:20:49.854765 7f90f5ffb6c0 Delete type=0 #961 +2026/03/25-23:20:49.874351 7f90f5ffb6c0 Manual compaction at level-0 from '!journal!OgzOugwIXfHtijaY' @ 72057594037927935 : 1 .. '!journal.pages!OgzOugwIXfHtijaY.OOev7kj2KoMOGoMD' @ 0 : 0; will stop at (end) +2026/03/25-23:20:49.874410 7f90f5ffb6c0 Manual compaction at level-1 from '!journal!OgzOugwIXfHtijaY' @ 72057594037927935 : 1 .. '!journal.pages!OgzOugwIXfHtijaY.OOev7kj2KoMOGoMD' @ 0 : 0; will stop at (end) diff --git a/packs/telecharger-compendiums/MANIFEST-000964 b/packs/telecharger-compendiums/MANIFEST-000964 new file mode 100644 index 0000000..4711869 Binary files /dev/null and b/packs/telecharger-compendiums/MANIFEST-000964 differ diff --git a/src/config/constants.js b/src/config/constants.js new file mode 100644 index 0000000..ea07c0e --- /dev/null +++ b/src/config/constants.js @@ -0,0 +1,104 @@ +export const SYSTEM_ID = "fvtt-chroniques-de-l-etrange" + +export const ACTOR_TYPES = { + character: "character", + npc: "npc", + tinji: "tinji", + loksyu: "loksyu", +} + +export const ITEM_TYPES = { + item: "item", + kungfu: "kungfu", + spell: "spell", + supernatural: "supernatural", +} + +export const SUBTYPES = { + weapon: { id: "weapon", label: "CDE.Weapon" }, + armor: { id: "armor", label: "CDE.Armor" }, + sanhei: { id: "sanhei", label: "CDE.Sanhei" }, + other: { id: "other", label: "CDE.Other" }, +} + +export const MAGICS = { + internalcinnabar: { + id: "internalcinnabar", + background: "linear-grey", + label: "CDE.InternalCinnabar", + aspectlabel: "CDE.Metal", + speciality: { + essence: { label: "CDE.Essence", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.png", labelicon: "Yin", labelelement: "CDE.Metal" }, + mind: { label: "CDE.Mind", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.png", labelicon: "Yin", labelelement: "CDE.Water" }, + purification: { label: "CDE.Purification", classicon: "icon-yinyang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/yin_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.png", labelicon: "Yin/Yang", labelelement: "CDE.Earth" }, + manipulation: { label: "CDE.Manipulation", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.png", labelicon: "Yang", labelelement: "CDE.Fire" }, + aura: { label: "CDE.Aura", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.png", labelicon: "Yang", labelelement: "CDE.Wood" }, + }, + }, + alchemy: { + id: "alchemy", + background: "linear-blue", + label: "CDE.Alchemy", + aspectlabel: "CDE.Water", + speciality: { + acupuncture: { label: "CDE.Acupuncture", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.png", labelicon: "Yin", labelelement: "CDE.Metal" }, + elixirs: { label: "CDE.Elixirs", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.png", labelicon: "Yin", labelelement: "CDE.Water" }, + poisons: { label: "CDE.Poisons", classicon: "icon-yinyang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/yin_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.png", labelicon: "Yin/Yang", labelelement: "CDE.Earth" }, + arsenal: { label: "CDE.Arsenal", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.png", labelicon: "Yang", labelelement: "CDE.Fire" }, + potions: { label: "CDE.Potions", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.png", labelicon: "Yang", labelelement: "CDE.Wood" }, + }, + }, + masteryoftheway: { + id: "masteryoftheway", + background: "linear-brown", + label: "CDE.MasteryOfTheWay", + aspectlabel: "CDE.Earth", + speciality: { + curse: { label: "CDE.Curse", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.png", labelicon: "Yin", labelelement: "CDE.Metal" }, + transfiguration: { label: "CDE.Transfiguration", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.png", labelicon: "Yin", labelelement: "CDE.Water" }, + necromancy: { label: "CDE.Necromancy", classicon: "icon-yinyang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/yin_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.png", labelicon: "Yin/Yang", labelelement: "CDE.Earth" }, + climatecontrol: { label: "CDE.ClimateControl", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.png", labelicon: "Yang", labelelement: "CDE.Fire" }, + goldenmagic: { label: "CDE.GoldenMagic", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.png", labelicon: "Yang", labelelement: "CDE.Wood" }, + }, + }, + exorcism: { + id: "exorcism", + background: "linear-red", + label: "CDE.Exorcism", + aspectlabel: "CDE.Fire", + speciality: { + invocation: { label: "CDE.Invocation", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.png", labelicon: "Yin", labelelement: "CDE.Metal" }, + tracking: { label: "CDE.Tracking", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.png", labelicon: "Yin", labelelement: "CDE.Water" }, + protection: { label: "CDE.Protection", classicon: "icon-yinyang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/yin_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.png", labelicon: "Yin/Yang", labelelement: "CDE.Earth" }, + punishment: { label: "CDE.Punishment", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.png", labelicon: "Yang", labelelement: "CDE.Fire" }, + domination: { label: "CDE.Domination", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.png", labelicon: "Yang", labelelement: "CDE.Wood" }, + }, + }, + geomancy: { + id: "geomancy", + background: "linear-green", + label: "CDE.Geomancy", + aspectlabel: "CDE.Wood", + speciality: { + neutralization: { label: "CDE.Neutralization", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_metal.png", labelicon: "Yin", labelelement: "CDE.Metal" }, + divination: { label: "CDE.Divination", classicon: "icon-yin", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yin.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_eau.png", labelicon: "Yin", labelelement: "CDE.Water" }, + earthlyprayer: { label: "CDE.EarthlyPrayer", classicon: "icon-yinyang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/yin_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_terre.png", labelicon: "Yin/Yang", labelelement: "CDE.Earth" }, + heavenlyprayer: { label: "CDE.HeavenlyPrayer", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_feu.png", labelicon: "Yang", labelelement: "CDE.Fire" }, + fungseoi: { label: "CDE.Fungseoi", classicon: "icon-yang", icon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_yang.png", elementicon: "/systems/fvtt-chroniques-de-l-etrange/images/cde_bois.png", labelicon: "Yang", labelelement: "CDE.Wood" }, + }, + }, +} + +export const TEMPLATE_PARTIALS = [ + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-skills.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-magics.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-nghang.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-treasures.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-items.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-kungfus.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-spells.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-npc-supernaturals.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-npc-spells.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-npc-kungfus.html", + "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-npc-items.html", +] diff --git a/src/config/localize.js b/src/config/localize.js new file mode 100644 index 0000000..ac2107b --- /dev/null +++ b/src/config/localize.js @@ -0,0 +1,21 @@ +import { MAGICS, SUBTYPES } from "./constants.js" + +export function preLocalizeConfig() { + const localizeConfigObject = (obj, keys) => { + for (const o of Object.values(obj)) { + for (const key of keys) { + o[key] = game.i18n.localize(o[key]) + } + } + } + + localizeConfigObject(SUBTYPES, ["label"]) + Object.values(MAGICS).forEach((magic) => { + magic.label = game.i18n.localize(magic.label) + magic.aspectlabel = game.i18n.localize(magic.aspectlabel) + Object.values(magic.speciality).forEach((spec) => { + spec.label = game.i18n.localize(spec.label) + spec.labelelement = game.i18n.localize(spec.labelelement) + }) + }) +} diff --git a/src/config/runtime.js b/src/config/runtime.js new file mode 100644 index 0000000..a19e34d --- /dev/null +++ b/src/config/runtime.js @@ -0,0 +1,11 @@ +export function configureRuntime() { + CONFIG.Actor.compendiumBanner = "/systems/fvtt-chroniques-de-l-etrange/images/banners/actor-banner.webp" + CONFIG.Adventure.compendiumBanner = "/systems/fvtt-chroniques-de-l-etrange/images/banners/adventure-banner.webp" + CONFIG.Cards.compendiumBanner = "ui/banners/cards-banner.webp" + CONFIG.Item.compendiumBanner = "/systems/fvtt-chroniques-de-l-etrange/images/banners/item-banner.webp" + CONFIG.JournalEntry.compendiumBanner = "/systems/fvtt-chroniques-de-l-etrange/images/banners/journalentry-banner.webp" + CONFIG.Macro.compendiumBanner = "ui/banners/macro-banner.webp" + CONFIG.Playlist.compendiumBanner = "ui/banners/playlist-banner.webp" + CONFIG.RollTable.compendiumBanner = "ui/banners/rolltable-banner.webp" + CONFIG.Scene.compendiumBanner = "/systems/fvtt-chroniques-de-l-etrange/images/banners/scene-banner.webp" +} diff --git a/src/data/actors/character.js b/src/data/actors/character.js new file mode 100644 index 0000000..09ff3f9 --- /dev/null +++ b/src/data/actors/character.js @@ -0,0 +1,178 @@ +export default class CharacterDataModel extends foundry.abstract.TypeDataModel { + static defineSchema() { + const { fields } = foundry.data + const numberField = (initial = 0, extra = {}) => new fields.NumberField({ required: true, nullable: false, integer: true, initial, ...extra }) + const stringField = (initial = "") => new fields.StringField({ required: true, nullable: false, initial }) + const boolField = (initial = false) => new fields.BooleanField({ required: true, initial }) + const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true }) + + const aspectField = (label, chinese) => + new fields.SchemaField({ + chinese: stringField(chinese), + label: stringField(label), + value: numberField(15, { min: 0 }), + }) + + const skillField = (label) => + new fields.SchemaField({ + label: stringField(label), + specialities: stringField(""), + value: numberField(0, { min: 0 }), + }) + + const resourceField = (label) => + new fields.SchemaField({ + label: stringField(label), + specialities: stringField(""), + value: numberField(0, { min: 0 }), + debt: boolField(false), + }) + + const componentField = () => + new fields.SchemaField({ + value: stringField(""), + }) + + const magicSpecialityField = () => + new fields.SchemaField({ + check: boolField(false), + }) + + const magicField = () => + new fields.SchemaField({ + visible: boolField(true), + value: numberField(0, { min: 0 }), + speciality: new fields.SchemaField({ + essence: magicSpecialityField(), + mind: magicSpecialityField(), + purification: magicSpecialityField(), + manipulation: magicSpecialityField(), + aura: magicSpecialityField(), + acupuncture: magicSpecialityField(), + elixirs: magicSpecialityField(), + poisons: magicSpecialityField(), + arsenal: magicSpecialityField(), + potions: magicSpecialityField(), + curse: magicSpecialityField(), + transfiguration: magicSpecialityField(), + necromancy: magicSpecialityField(), + climatecontrol: magicSpecialityField(), + goldenmagic: magicSpecialityField(), + invocation: magicSpecialityField(), + tracking: magicSpecialityField(), + protection: magicSpecialityField(), + punishment: magicSpecialityField(), + domination: magicSpecialityField(), + neutralization: magicSpecialityField(), + divination: magicSpecialityField(), + earthlyprayer: magicSpecialityField(), + heavenlyprayer: magicSpecialityField(), + fungseoi: magicSpecialityField(), + }), + }) + + const treasureBranch = () => + new fields.SchemaField({ + value: numberField(0, { min: 0 }), + max: numberField(0, { min: 0 }), + min: numberField(0, { min: 0 }), + }) + + const treasureLevel = () => + new fields.SchemaField({ + san: treasureBranch(), + zing: treasureBranch(), + }) + + const schema = { + concept: stringField(""), + guardian: stringField("0"), + initiative: numberField(1, { min: 0 }), + anti_initiative: numberField(24, { min: 0 }), + description: htmlField(""), + prefs: new fields.SchemaField({ + typeofthrow: new fields.SchemaField({ + check: boolField(true), + choice: stringField("0"), + }), + }), + prompt: new fields.SchemaField({ + typeofthrow: new fields.SchemaField({ + check: boolField(true), + choice: stringField("0"), + }), + configure: new fields.SchemaField({ + numberofdice: numberField(0), + aspect: numberField(0), + bonus: numberField(0), + bonusauspiciousdice: numberField(0), + typeofthrow: numberField(0), + aspectskill: numberField(0), + bonusmalusskill: numberField(0), + aspectspeciality: numberField(0), + rolldifficulty: numberField(0), + bonusmalusspeciality: numberField(0), + }), + }), + aspect: new fields.SchemaField({ + fire: aspectField("CDE.Fire", "㊋"), + earth: aspectField("CDE.Earth", "㊏"), + metal: aspectField("CDE.Metal", "㊎"), + water: aspectField("CDE.Water", "㊌"), + wood: aspectField("CDE.Wood", "㊍"), + }), + skills: new fields.SchemaField({ + art: skillField("CDE.Art"), + investigation: skillField("CDE.Investigation"), + erudition: skillField("CDE.Erudition"), + knavery: skillField("CDE.Knavery"), + wordliness: skillField("CDE.Wordliness"), + prowess: skillField("CDE.Prowess"), + sciences: skillField("CDE.Sciences"), + technologies: skillField("CDE.Technologies"), + kungfu: skillField("CDE.KungFu"), + rangedcombat: skillField("CDE.RangedCombat"), + }), + resources: new fields.SchemaField({ + supply: resourceField("CDE.Supply"), + inquiry: resourceField("CDE.Inquiry"), + influence: resourceField("CDE.Influence"), + }), + component: new fields.SchemaField({ + one: componentField(), + two: componentField(), + three: componentField(), + four: componentField(), + five: componentField(), + six: componentField(), + seven: componentField(), + eight: componentField(), + nine: componentField(), + zero: componentField(), + }), + magics: new fields.SchemaField({ + internalcinnabar: magicField(), + alchemy: magicField(), + masteryoftheway: magicField(), + exorcism: magicField(), + geomancy: magicField(), + }), + threetreasures: new fields.SchemaField({ + heiyang: new fields.SchemaField({ value: numberField(0, { min: 0 }) }), + heiyin: new fields.SchemaField({ value: numberField(0, { min: 0 }) }), + dicelevel: new fields.SchemaField({ + level0d: treasureLevel(), + level1d: treasureLevel(), + level2d: treasureLevel(), + }), + }), + experience: new fields.SchemaField({ + value: numberField(0, { min: 0 }), + max: numberField(0, { min: 0 }), + min: numberField(0, { min: 0 }), + }), + } + + return schema + } +} diff --git a/src/data/actors/index.js b/src/data/actors/index.js new file mode 100644 index 0000000..17f8dbe --- /dev/null +++ b/src/data/actors/index.js @@ -0,0 +1,4 @@ +export { default as CharacterDataModel } from "./character.js" +export { default as NpcDataModel } from "./npc.js" +export { default as TinjiDataModel } from "./tinji.js" +export { default as LoksyuDataModel } from "./loksyu.js" diff --git a/src/data/actors/loksyu.js b/src/data/actors/loksyu.js new file mode 100644 index 0000000..c4065e3 --- /dev/null +++ b/src/data/actors/loksyu.js @@ -0,0 +1,22 @@ +export default class LoksyuDataModel extends foundry.abstract.TypeDataModel { + static defineSchema() { + const { fields } = foundry.data + const numberField = (initial = 0, extra = {}) => new fields.NumberField({ required: true, nullable: false, integer: true, initial, ...extra }) + const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true }) + + const polarity = () => + new fields.SchemaField({ + yin: new fields.SchemaField({ value: numberField(0, { min: 0 }) }), + yang: new fields.SchemaField({ value: numberField(0, { min: 0 }) }), + }) + + return { + fire: polarity(), + earth: polarity(), + metal: polarity(), + water: polarity(), + wood: polarity(), + description: htmlField(""), + } + } +} diff --git a/src/data/actors/npc.js b/src/data/actors/npc.js new file mode 100644 index 0000000..c7a8b0d --- /dev/null +++ b/src/data/actors/npc.js @@ -0,0 +1,46 @@ +export default class NpcDataModel extends foundry.abstract.TypeDataModel { + static defineSchema() { + const { fields } = foundry.data + const numberField = (initial = 0, extra = {}) => new fields.NumberField({ required: true, nullable: false, integer: true, initial, ...extra }) + const stringField = (initial = "") => new fields.StringField({ required: true, nullable: false, initial }) + const boolField = (initial = false) => new fields.BooleanField({ required: true, initial }) + const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true }) + + const aptitudeField = () => + new fields.SchemaField({ + value: numberField(0, { min: 0 }), + speciality: stringField(""), + }) + + const trackedField = () => + new fields.SchemaField({ + value: numberField(0, { min: 0 }), + calcul: numberField(0, { min: 0 }), + note: stringField(""), + }) + + return { + type: stringField(""), + levelofthreat: numberField(0, { min: 0 }), + powerofnuisance: numberField(0, { min: 0 }), + initiative: numberField(1, { min: 0 }), + anti_initiative: numberField(24, { min: 0 }), + aptitudes: new fields.SchemaField({ + physical: aptitudeField(), + martial: aptitudeField(), + mental: aptitudeField(), + social: aptitudeField(), + spiritual: aptitudeField(), + }), + vitality: trackedField(), + hei: trackedField(), + description: htmlField(""), + prefs: new fields.SchemaField({ + typeofthrow: new fields.SchemaField({ + check: boolField(false), + choice: stringField("0"), + }), + }), + } + } +} diff --git a/src/data/actors/tinji.js b/src/data/actors/tinji.js new file mode 100644 index 0000000..432c1de --- /dev/null +++ b/src/data/actors/tinji.js @@ -0,0 +1,12 @@ +export default class TinjiDataModel extends foundry.abstract.TypeDataModel { + static defineSchema() { + const { fields } = foundry.data + const numberField = (initial = 0, extra = {}) => new fields.NumberField({ required: true, nullable: false, integer: true, initial, ...extra }) + const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true }) + + return { + value: numberField(0, { min: 0 }), + description: htmlField(""), + } + } +} diff --git a/src/data/items/index.js b/src/data/items/index.js new file mode 100644 index 0000000..834b368 --- /dev/null +++ b/src/data/items/index.js @@ -0,0 +1,4 @@ +export { default as EquipmentDataModel } from "./item.js" +export { default as KungfuDataModel } from "./kungfu.js" +export { default as SpellDataModel } from "./spell.js" +export { default as SupernaturalDataModel } from "./supernatural.js" diff --git a/src/data/items/item.js b/src/data/items/item.js new file mode 100644 index 0000000..1ea0db2 --- /dev/null +++ b/src/data/items/item.js @@ -0,0 +1,20 @@ +export default class EquipmentDataModel extends foundry.abstract.TypeDataModel { + static defineSchema() { + const { fields } = foundry.data + const numberField = (initial = 0, extra = {}) => new fields.NumberField({ required: true, nullable: false, integer: true, initial, ...extra }) + const stringField = (initial = "") => new fields.StringField({ required: true, nullable: false, initial }) + const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true }) + + return { + subtype: stringField(""), + reference: stringField(""), + description: htmlField(""), + quantity: numberField(1, { min: 0 }), + weight: numberField(0, { min: 0 }), + protection: stringField(""), + damage: stringField(""), + range: stringField(""), + notes: htmlField(""), + } + } +} diff --git a/src/data/items/kungfu.js b/src/data/items/kungfu.js new file mode 100644 index 0000000..106f34e --- /dev/null +++ b/src/data/items/kungfu.js @@ -0,0 +1,32 @@ +export default class KungfuDataModel extends foundry.abstract.TypeDataModel { + static defineSchema() { + const { fields } = foundry.data + const stringField = (initial = "") => new fields.StringField({ required: true, nullable: false, initial }) + const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true }) + const boolField = (initial = false) => new fields.BooleanField({ required: true, initial }) + + const techniqueField = () => + new fields.SchemaField({ + check: boolField(false), + name: stringField(""), + activation: stringField(""), + technique: htmlField(""), + }) + + return { + reference: stringField(""), + description: htmlField(""), + orientation: stringField(""), + aspect: stringField(""), + skill: stringField(""), + speciality: stringField(""), + style: stringField(""), + techniques: new fields.SchemaField({ + technique1: techniqueField(), + technique2: techniqueField(), + technique3: techniqueField(), + }), + notes: htmlField(""), + } + } +} diff --git a/src/data/items/spell.js b/src/data/items/spell.js new file mode 100644 index 0000000..3829a85 --- /dev/null +++ b/src/data/items/spell.js @@ -0,0 +1,22 @@ +export default class SpellDataModel extends foundry.abstract.TypeDataModel { + static defineSchema() { + const { fields } = foundry.data + const stringField = (initial = "") => new fields.StringField({ required: true, nullable: false, initial }) + const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true }) + + return { + reference: stringField(""), + description: htmlField(""), + specialityname: stringField(""), + associatedelement: stringField(""), + hei: stringField(""), + realizationtimeritual: stringField(""), + realizationtimeaccelerated: stringField(""), + flashback: stringField(""), + components: htmlField(""), + effects: htmlField(""), + examples: htmlField(""), + notes: htmlField(""), + } + } +} diff --git a/src/data/items/supernatural.js b/src/data/items/supernatural.js new file mode 100644 index 0000000..34a4cfc --- /dev/null +++ b/src/data/items/supernatural.js @@ -0,0 +1,13 @@ +export default class SupernaturalDataModel extends foundry.abstract.TypeDataModel { + static defineSchema() { + const { fields } = foundry.data + const stringField = (initial = "") => new fields.StringField({ required: true, nullable: false, initial }) + const htmlField = (initial = "") => new fields.HTMLField({ required: true, nullable: false, initial, textSearch: true }) + + return { + reference: stringField(""), + description: htmlField(""), + notes: htmlField(""), + } + } +} diff --git a/src/documents/actor.js b/src/documents/actor.js new file mode 100644 index 0000000..0b24ca7 --- /dev/null +++ b/src/documents/actor.js @@ -0,0 +1,22 @@ +import { ACTOR_TYPES } from "../config/constants.js" + +export class CDEActor extends Actor { + getRollData() { + const data = this.toObject(false).system + return data + } + + prepareBaseData() { + super.prepareBaseData() + + if (this.type === ACTOR_TYPES.character) { + this.system.anti_initiative = 25 - (this.system.initiative ?? 0) + } + + if (this.type === ACTOR_TYPES.npc) { + this.system.vitality.calcul = (this.system.aptitudes.physical.value ?? 0) * 4 + this.system.hei.calcul = (this.system.aptitudes.spiritual.value ?? 0) * 4 + this.system.anti_initiative = 25 - (this.system.initiative ?? 0) + } + } +} diff --git a/src/documents/chat-message.js b/src/documents/chat-message.js new file mode 100644 index 0000000..a122830 --- /dev/null +++ b/src/documents/chat-message.js @@ -0,0 +1,47 @@ +export class CDEMessage extends ChatMessage { + async renderHTML({ canDelete, canClose = false, ...rest } = {}) { + const html = await super.renderHTML({ canDelete, canClose, ...rest }) + this.#enrichChatCard(html) + return html + } + + getAssociatedActor() { + if (this.speaker.scene && this.speaker.token) { + const scene = game.scenes.get(this.speaker.scene) + const token = scene?.tokens.get(this.speaker.token) + if (token) return token.actor + } + return game.actors.get(this.speaker.actor) + } + + #enrichChatCard(html) { + const actor = this.getAssociatedActor() + + let img + let nameText + if (this.isContentVisible) { + img = actor?.img ?? this.author.avatar + nameText = this.alias + } else { + img = this.author.avatar + nameText = this.author.name + } + + const avatar = document.createElement("a") + avatar.classList.add("avatar") + if (actor) avatar.dataset.uuid = actor.uuid + const avatarImg = document.createElement("img") + Object.assign(avatarImg, { src: img, alt: nameText }) + avatar.append(avatarImg) + + const name = document.createElement("span") + name.classList.add("name-stacked") + const title = document.createElement("span") + title.classList.add("title") + title.append(nameText) + name.append(title) + + const sender = html.querySelector(".message-sender") + sender?.replaceChildren(avatar, name) + } +} diff --git a/src/documents/item.js b/src/documents/item.js new file mode 100644 index 0000000..b9fa672 --- /dev/null +++ b/src/documents/item.js @@ -0,0 +1,17 @@ +export class CDEItem extends Item { + get isWeapon() { + return this.system.subtype === "weapon" + } + + get isArmor() { + return this.system.subtype === "armor" + } + + get isSanhei() { + return this.system.subtype === "sanhei" + } + + get isOther() { + return this.system.subtype === "other" + } +} diff --git a/src/migration.js b/src/migration.js new file mode 100644 index 0000000..a081f1a --- /dev/null +++ b/src/migration.js @@ -0,0 +1,105 @@ +import { SYSTEM_ID } from "./config/constants.js" + +const MIGRATION_VERSION = "3.0.0" + +export function registerSettings() { + game.settings.register(SYSTEM_ID, "migrationVersion", { + name: "Migration version", + scope: "world", + config: false, + type: String, + default: "0.0.0", + }) +} + +export async function migrateIfNeeded() { + const current = game.system.version ?? MIGRATION_VERSION + const stored = game.settings.get(SYSTEM_ID, "migrationVersion") ?? "0.0.0" + if (!isNewerVersion(current, stored)) return + + ui.notifications.info(`CHRONIQUESDELETRANGE | Migration vers ${current} en cours...`, { permanent: true }) + await migrateActors() + await migrateItems() + await migrateCompendiumActors() + await migrateCompendiumItems() + await game.settings.set(SYSTEM_ID, "migrationVersion", current) + ui.notifications.info(`CHRONIQUESDELETRANGE | Migration vers ${current} terminée.`) +} + +async function migrateActors() { + const updates = [] + for (const actor of game.actors.contents) { + const updateData = migrateActorData(actor) + if (Object.keys(updateData).length > 0) { + updates.push(actor.update(updateData, { enforceTypes: false })) + } + } + await Promise.all(updates) +} + +async function migrateCompendiumActors() { + const packs = game.packs.filter((p) => p.documentName === "Actor" && p.metadata.system === SYSTEM_ID) + for (const pack of packs) { + const content = await pack.getDocuments() + for (const actor of content) { + const updateData = migrateActorData(actor) + if (Object.keys(updateData).length > 0) { + await actor.update(updateData, { pack: pack.collection, enforceTypes: false }) + } + } + } +} + +async function migrateItems() { + const updates = [] + for (const item of game.items.contents) { + const updateData = migrateItemData(item) + if (Object.keys(updateData).length > 0) { + updates.push(item.update(updateData, { enforceTypes: false })) + } + } + await Promise.all(updates) +} + +async function migrateCompendiumItems() { + const packs = game.packs.filter((p) => p.documentName === "Item" && p.metadata.system === SYSTEM_ID) + for (const pack of packs) { + const content = await pack.getDocuments() + for (const item of content) { + const updateData = migrateItemData(item) + if (Object.keys(updateData).length > 0) { + await item.update(updateData, { pack: pack.collection, enforceTypes: false }) + } + } + } +} + +function migrateActorData(actor) { + const updateData = {} + const system = actor.system ?? {} + const actorType = actor.type + + // Fix legacy typo: masteryofthway -> masteryoftheway + const legacyMagic = system.magics?.masteryofthway + if (legacyMagic && !system.magics?.masteryoftheway) { + updateData["system.magics.masteryoftheway"] = legacyMagic + updateData["system.magics.-=masteryofthway"] = null + } + + // Ensure prefs.typeofthrow exists on relevant actor types + if ((actorType === "character" || actorType === "npc") && !system.prefs?.typeofthrow) { + const defaultCheck = actorType === "character" + updateData["system.prefs.typeofthrow"] = { check: defaultCheck, choice: "0" } + } + + return updateData +} + +function migrateItemData(item) { + const updateData = {} + const system = item.system ?? {} + + // Add item-specific migrations here as needed + + return updateData +} diff --git a/src/system.js b/src/system.js new file mode 100644 index 0000000..66db97c --- /dev/null +++ b/src/system.js @@ -0,0 +1,132 @@ +import { ACTOR_TYPES, ITEM_TYPES, MAGICS, SUBTYPES, SYSTEM_ID } from "./config/constants.js" +import { preLocalizeConfig } from "./config/localize.js" +import { configureRuntime } from "./config/runtime.js" +import { CharacterDataModel, LoksyuDataModel, NpcDataModel, TinjiDataModel } from "./data/actors/index.js" +import { EquipmentDataModel, KungfuDataModel, SpellDataModel, SupernaturalDataModel } from "./data/items/index.js" +import { CDEMessage } from "./documents/chat-message.js" +import { CDEActor } from "./documents/actor.js" +import { CDEItem } from "./documents/item.js" +import { registerDice } from "./ui/dice.js" +import { registerHandlebarsHelpers } from "./ui/helpers.js" +import { preloadPartials } from "./ui/templates.js" +import { CDELoksyuSheet, CDECharacterSheet, CDENpcSheet, CDETinjiSheet } from "./ui/sheets/actors/index.js" +import { CDEItemSheet, CDEKungfuSheet, CDESpellSheet, CDESupernaturalSheet } from "./ui/sheets/items/index.js" +import { migrateIfNeeded, registerSettings } from "./migration.js" + +Hooks.once("i18nInit", preLocalizeConfig) + +Hooks.once("init", async () => { + console.info(`CHRONIQUESDELETRANGE | Initializing ${SYSTEM_ID}`) + + registerSettings() + + game.system.CONST = { MAGICS, SUBTYPES } + + CONFIG.Actor.systemDataModels = { + [ACTOR_TYPES.character]: CharacterDataModel, + [ACTOR_TYPES.npc]: NpcDataModel, + [ACTOR_TYPES.tinji]: TinjiDataModel, + [ACTOR_TYPES.loksyu]: LoksyuDataModel, + } + CONFIG.Item.systemDataModels = { + [ITEM_TYPES.item]: EquipmentDataModel, + [ITEM_TYPES.kungfu]: KungfuDataModel, + [ITEM_TYPES.spell]: SpellDataModel, + [ITEM_TYPES.supernatural]: SupernaturalDataModel, + } + + CONFIG.Actor.documentClass = CDEActor + CONFIG.Item.documentClass = CDEItem + CONFIG.ChatMessage.documentClass = CDEMessage + + configureRuntime() + + DocumentSheetConfig.unregisterSheet(Actor, "core", ActorSheet) + DocumentSheetConfig.unregisterSheet(Item, "core", ItemSheet) + + DocumentSheetConfig.registerSheet(Actor, SYSTEM_ID, CDECharacterSheet, { + types: [ACTOR_TYPES.character], + makeDefault: true, + label: "CDE Character Sheet (V2)", + }) + DocumentSheetConfig.registerSheet(Actor, SYSTEM_ID, CDENpcSheet, { + types: [ACTOR_TYPES.npc], + makeDefault: true, + label: "CDE NPC Sheet (V2)", + }) + DocumentSheetConfig.registerSheet(Actor, SYSTEM_ID, CDETinjiSheet, { + types: [ACTOR_TYPES.tinji], + makeDefault: true, + label: "CDE Tinji Sheet (V2)", + }) + DocumentSheetConfig.registerSheet(Actor, SYSTEM_ID, CDELoksyuSheet, { + types: [ACTOR_TYPES.loksyu], + makeDefault: true, + label: "CDE Loksyu Sheet (V2)", + }) + + DocumentSheetConfig.registerSheet(Item, SYSTEM_ID, CDEItemSheet, { + types: [ITEM_TYPES.item], + makeDefault: true, + label: "CDE Item Sheet (V2)", + }) + DocumentSheetConfig.registerSheet(Item, SYSTEM_ID, CDEKungfuSheet, { + types: [ITEM_TYPES.kungfu], + makeDefault: true, + label: "CDE KungFu Sheet (V2)", + }) + DocumentSheetConfig.registerSheet(Item, SYSTEM_ID, CDESpellSheet, { + types: [ITEM_TYPES.spell], + makeDefault: true, + label: "CDE Spell Sheet (V2)", + }) + DocumentSheetConfig.registerSheet(Item, SYSTEM_ID, CDESupernaturalSheet, { + types: [ITEM_TYPES.supernatural], + makeDefault: true, + label: "CDE Supernatural Sheet (V2)", + }) + + await preloadPartials() + registerHandlebarsHelpers() + registerDice() + Hooks.on("renderSettings", (_app, html) => injectCompendiumLink(html)) + + console.info(`CHRONIQUESDELETRANGE | Initialized`) +}) + +Hooks.once("ready", async () => { + if (!game.modules.get("lib-wrapper")?.active && game.user.isGM) { + ui.notifications.error("System fvtt-chroniques-de-l-etrange requires the 'libWrapper' module. Please install and activate it.") + } + await migrateIfNeeded() +}) + +function injectCompendiumLink(html) { + const header = html[0]?.querySelector?.("h4.divider") + if (!header) return + + const section = document.createElement("section") + section.classList.add("settings", "flexcol") + section.innerHTML = ` + +
+ +
+ Guide d'installation + +

Rendez-vous sur le site de l'éditeur, téléchargez les PDF contenant les liens vers les compendia, puis ajoutez leurs manifestes dans Foundry.

+
+
+
+ ` + section.querySelector("button[data-action='open-cde-link']")?.addEventListener("click", () => { + window.open("https://antre-monde.com/les-chroniques-de-letrengae/", "_blank") + }) + + header.parentNode.insertBefore(section, header) +} diff --git a/src/ui/dice.js b/src/ui/dice.js new file mode 100644 index 0000000..124ef3e --- /dev/null +++ b/src/ui/dice.js @@ -0,0 +1,49 @@ +const DIGIT_LABELS = [ + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-1.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-2.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-3.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-4.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-5.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-6.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-7.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-8.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-9.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/digit/d10-10.webp", +] + +const CLASSIC_LABELS = [ + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-1.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-2.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-3.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-4.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-5.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-6.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-7.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-8.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-9.webp", + "systems/fvtt-chroniques-de-l-etrange/images/dice-so-nice/d10-10.webp", +] + +export function registerDice() { + Hooks.once("diceSoNiceReady", (dice3d) => { + dice3d.addColorset( + { + name: "cde", + description: "CdE", + foreground: "#000000", + background: "#ffffff", + edge: "#ffffff", + font: "DeliusUnicase", + texture: "ice", + material: "plastic", + }, + "preferred", + ) + + dice3d.addSystem({ id: "fvtt-chroniques-de-l-etrangedigit", name: "Chroniques de l'étrange digits" }, "preferred") + dice3d.addDicePreset({ type: "d10", labels: DIGIT_LABELS, system: "fvtt-chroniques-de-l-etrangedigit" }) + + dice3d.addSystem({ id: "fvtt-chroniques-de-l-etrange", name: "Chroniques de l'étrange" }, "preferred") + dice3d.addDicePreset({ type: "d10", labels: CLASSIC_LABELS, system: "fvtt-chroniques-de-l-etrange" }) + }) +} diff --git a/src/ui/helpers.js b/src/ui/helpers.js new file mode 100644 index 0000000..18abbce --- /dev/null +++ b/src/ui/helpers.js @@ -0,0 +1,49 @@ +import { MAGICS } from "../config/constants.js" + +export function registerHandlebarsHelpers() { + const { Handlebars } = globalThis + if (!Handlebars) return + + Handlebars.registerHelper("select", function (selected, options) { + const escapedValue = RegExp.escape(Handlebars.escapeExpression(selected)) + const rgx = new RegExp(` value=["']${escapedValue}["']`) + const html = options.fn(this) + return html.replace(rgx, "$& selected") + }) + + Handlebars.registerHelper("getMagicBackground", function (magic) { + return game.i18n.localize(MAGICS[magic]?.background ?? "") + }) + + Handlebars.registerHelper("getMagicLabel", function (magic) { + return game.i18n.localize(MAGICS[magic]?.label ?? "") + }) + + Handlebars.registerHelper("getMagicAspectLabel", function (magic) { + return game.i18n.localize(MAGICS[magic]?.aspectlabel ?? "") + }) + + Handlebars.registerHelper("getMagicSpecialityLabel", function (magic, speciality) { + return game.i18n.localize(MAGICS[magic]?.speciality?.[speciality]?.label ?? "") + }) + + Handlebars.registerHelper("getMagicSpecialityClassIcon", function (magic, speciality) { + return MAGICS[magic]?.speciality?.[speciality]?.classicon ?? "" + }) + + Handlebars.registerHelper("getMagicSpecialityIcon", function (magic, speciality) { + return MAGICS[magic]?.speciality?.[speciality]?.icon ?? "" + }) + + Handlebars.registerHelper("getMagicSpecialityElementIcon", function (magic, speciality) { + return MAGICS[magic]?.speciality?.[speciality]?.elementicon ?? "" + }) + + Handlebars.registerHelper("getMagicSpecialityLabelIcon", function (magic, speciality) { + return MAGICS[magic]?.speciality?.[speciality]?.labelicon ?? "" + }) + + Handlebars.registerHelper("getMagicSpecialityLabelElement", function (magic, speciality) { + return game.i18n.localize(MAGICS[magic]?.speciality?.[speciality]?.labelelement ?? "") + }) +} diff --git a/src/ui/sheets/actors/base.js b/src/ui/sheets/actors/base.js new file mode 100644 index 0000000..4023e2c --- /dev/null +++ b/src/ui/sheets/actors/base.js @@ -0,0 +1,70 @@ +const { HandlebarsApplicationMixin } = foundry.applications.api + +export class CDEBaseActorSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ActorSheetV2) { + static DEFAULT_OPTIONS = { + classes: ["fvtt-chroniques-de-l-etrange", "actor"], + position: { width: 920, height: "auto" }, + window: { resizable: true }, + form: { submitOnChange: true }, + dragDrop: [{ dragSelector: ".item, [data-drag='true']", dropSelector: null }], + actions: { + create: CDEBaseActorSheet.#onItemCreate, + edit: CDEBaseActorSheet.#onItemEdit, + delete: CDEBaseActorSheet.#onItemDelete, + }, + } + + tabGroups = { primary: "description" } + + async _prepareContext() { + const descriptionHTML = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description ?? "", { async: true }) + const cssClass = this.options.classes?.join(" ") ?? "" + return { + actor: this.document, + system: this.document.system, + systemData: this.document.system, + items: this.document.items.contents, + descriptionHTML, + editable: this.isEditable, + cssClass, + } + } + + async _onFirstRender(context, options) { + await super._onFirstRender(context, options) + for (const [group, tab] of Object.entries(this.tabGroups)) { + this.changeTab(tab, group, { force: true }) + } + } + + _onRender(context, options) { + for (const [group, tab] of Object.entries(this.tabGroups)) { + this.changeTab(tab, group, { force: true }) + } + } + + static async #onItemCreate(event, target) { + const type = target.dataset.type ?? "item" + const cls = getDocumentClass("Item") + const labels = { + item: "CDE.ItemNew", + kungfu: "CDE.KFNew", + spell: "CDE.SpellNew", + supernatural: "CDE.SupernaturalNew", + } + const name = game.i18n.localize(labels[type] ?? "CDE.ItemNew") + return cls.create({ name, type }, { parent: this.document }) + } + + static #onItemEdit(event, target) { + const itemId = target.closest(".item")?.dataset.itemId + const item = this.document.items.get(itemId) + if (item) item.sheet.render(true) + } + + static #onItemDelete(event, target) { + const itemId = target.closest(".item")?.dataset.itemId + const item = this.document.items.get(itemId) + if (item) item.delete() + } +} diff --git a/src/ui/sheets/actors/character.js b/src/ui/sheets/actors/character.js new file mode 100644 index 0000000..9c772f8 --- /dev/null +++ b/src/ui/sheets/actors/character.js @@ -0,0 +1,112 @@ +import { MAGICS, SUBTYPES } from "../../../config/constants.js" +import { CDEBaseActorSheet } from "./base.js" + +export class CDECharacterSheet extends CDEBaseActorSheet { + static DEFAULT_OPTIONS = { + classes: ["character"], + } + + static PARTS = { + main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/actor/cde-character-sheet.html" }, + } + + tabGroups = { primary: "description" } + + async _prepareContext() { + const context = await super._prepareContext() + context.equipments = context.items.filter((item) => item.type === "item") + context.spells = context.items.filter((item) => item.type === "spell") + context.kungfus = context.items.filter((item) => item.type === "kungfu") + context.CDE = { MAGICS, SUBTYPES } + return context + } + + _onRender(context, options) { + super._onRender?.(context, options) + this.#bindInitiativeControls() + this.#bindPrefs() + } + + #bindInitiativeControls() { + const buttons = this.element?.querySelectorAll(".click-initiative") + if (!buttons?.length) return + buttons.forEach((button) => { + button.addEventListener("click", async () => { + const action = button.dataset.libelId + let initiative = this.document.system.initiative ?? 1 + if (action === "plus") { + initiative = initiative >= 24 ? 1 : initiative + 1 + await this.document.update({ "system.initiative": initiative }) + return + } + if (action === "minus") { + initiative = initiative <= 1 ? 24 : initiative - 1 + await this.document.update({ "system.initiative": initiative }) + return + } + if (action === "create") { + const html = ` +
+
+ + +
+
` + const value = await Dialog.prompt({ + title: game.i18n.localize("CDE.TurnOrder"), + content: html, + label: game.i18n.localize("CDE.Validate"), + callback: (dlg) => { + const input = dlg.querySelector("input[name='initiative']") + return Number(input?.value ?? initiative) + }, + }) + if (Number.isFinite(value)) { + const sanitized = foundry.utils.clamp(Number(value), 1, 24) + await this.document.update({ "system.initiative": sanitized }) + } + } + }) + }) + } + + #bindPrefs() { + const button = this.element?.querySelector(".click-prefs") + if (!button) return + button.addEventListener("click", async () => { + const current = this.document.system.prefs?.typeofthrow ?? { choice: "0", check: true } + const html = ` +
+
+ + +
+
+ + +
+
` + const prefs = await Dialog.prompt({ + title: game.i18n.localize("CDE.Preferences"), + content: html, + label: game.i18n.localize("CDE.Validate"), + callback: (dlg) => { + const choice = dlg.querySelector("select[name='choice']")?.value ?? "0" + const check = dlg.querySelector("input[name='check']")?.checked ?? false + return { choice, check } + }, + }) + if (prefs) { + await this.document.update({ + "system.prefs.typeofthrow.choice": String(prefs.choice), + "system.prefs.typeofthrow.check": !!prefs.check, + }) + } + }) + } +} diff --git a/src/ui/sheets/actors/index.js b/src/ui/sheets/actors/index.js new file mode 100644 index 0000000..14c7423 --- /dev/null +++ b/src/ui/sheets/actors/index.js @@ -0,0 +1,4 @@ +export { CDECharacterSheet } from "./character.js" +export { CDENpcSheet } from "./npc.js" +export { CDETinjiSheet } from "./tinji.js" +export { CDELoksyuSheet } from "./loksyu.js" diff --git a/src/ui/sheets/actors/loksyu.js b/src/ui/sheets/actors/loksyu.js new file mode 100644 index 0000000..6b9695f --- /dev/null +++ b/src/ui/sheets/actors/loksyu.js @@ -0,0 +1,13 @@ +import { CDEBaseActorSheet } from "./base.js" + +export class CDELoksyuSheet extends CDEBaseActorSheet { + static DEFAULT_OPTIONS = { + classes: ["loksyu"], + } + + static PARTS = { + main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/actor/cde-loksyu-sheet.html" }, + } + + tabGroups = { primary: "loksyu" } +} diff --git a/src/ui/sheets/actors/npc.js b/src/ui/sheets/actors/npc.js new file mode 100644 index 0000000..54201bc --- /dev/null +++ b/src/ui/sheets/actors/npc.js @@ -0,0 +1,67 @@ +import { CDEBaseActorSheet } from "./base.js" + +export class CDENpcSheet extends CDEBaseActorSheet { + static DEFAULT_OPTIONS = { + classes: ["npc"], + } + + static PARTS = { + main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/actor/cde-npc-sheet.html" }, + } + + tabGroups = { primary: "description" } + + async _prepareContext() { + const context = await super._prepareContext() + context.supernaturals = context.items.filter((item) => item.type === "supernatural") + context.spells = context.items.filter((item) => item.type === "spell") + context.kungfus = context.items.filter((item) => item.type === "kungfu") + context.equipments = context.items.filter((item) => item.type === "item") + return context + } + + _onRender(context, options) { + super._onRender?.(context, options) + this.#bindInitiativeControls() + } + + #bindInitiativeControls() { + const buttons = this.element?.querySelectorAll(".click-initiative-npc") + if (!buttons?.length) return + buttons.forEach((button) => { + button.addEventListener("click", async () => { + const action = button.dataset.libelId + let initiative = this.document.system.initiative ?? 1 + if (action === "plus") { + initiative = initiative >= 24 ? 1 : initiative + 1 + await this.document.update({ "system.initiative": initiative }) + return + } + if (action === "minus") { + initiative = initiative <= 1 ? 24 : initiative - 1 + await this.document.update({ "system.initiative": initiative }) + return + } + if (action === "create") { + const html = ` +
+
+ + +
+
` + const value = await Dialog.prompt({ + title: game.i18n.localize("CDE.TurnOrder"), + content: html, + label: game.i18n.localize("CDE.Validate"), + callback: (dlg) => Number(dlg.querySelector("input[name='initiative']")?.value ?? initiative), + }) + if (Number.isFinite(value)) { + const sanitized = foundry.utils.clamp(Number(value), 1, 24) + await this.document.update({ "system.initiative": sanitized }) + } + } + }) + }) + } +} diff --git a/src/ui/sheets/actors/tinji.js b/src/ui/sheets/actors/tinji.js new file mode 100644 index 0000000..1a84e35 --- /dev/null +++ b/src/ui/sheets/actors/tinji.js @@ -0,0 +1,13 @@ +import { CDEBaseActorSheet } from "./base.js" + +export class CDETinjiSheet extends CDEBaseActorSheet { + static DEFAULT_OPTIONS = { + classes: ["tinji"], + } + + static PARTS = { + main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/actor/cde-tinji-sheet.html" }, + } + + tabGroups = { primary: "tinji" } +} diff --git a/src/ui/sheets/items/base.js b/src/ui/sheets/items/base.js new file mode 100644 index 0000000..ca64a8f --- /dev/null +++ b/src/ui/sheets/items/base.js @@ -0,0 +1,43 @@ +const { HandlebarsApplicationMixin } = foundry.applications.api + +export class CDEBaseItemSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) { + static DEFAULT_OPTIONS = { + classes: ["fvtt-chroniques-de-l-etrange", "item"], + position: { width: 520, height: "auto" }, + window: { resizable: true }, + form: { submitOnChange: true }, + actions: {}, + } + + tabGroups = { primary: "description" } + + async _prepareContext() { + const cssClass = this.options.classes?.join(" ") ?? "" + const enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description ?? "", { async: true }) + const enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.notes ?? "", { async: true }) + return { + item: this.document, + system: this.document.system, + systemData: this.document.system, + editable: this.isEditable, + cssClass, + enrichedDescription, + enrichedNotes, + descriptionHTML: enrichedDescription, + notesHTML: enrichedNotes, + } + } + + async _onFirstRender(context, options) { + await super._onFirstRender(context, options) + for (const [group, tab] of Object.entries(this.tabGroups)) { + this.changeTab(tab, group, { force: true }) + } + } + + _onRender(context, options) { + for (const [group, tab] of Object.entries(this.tabGroups)) { + this.changeTab(tab, group, { force: true }) + } + } +} diff --git a/src/ui/sheets/items/index.js b/src/ui/sheets/items/index.js new file mode 100644 index 0000000..200a90e --- /dev/null +++ b/src/ui/sheets/items/index.js @@ -0,0 +1,5 @@ +export { CDEBaseItemSheet } from "./base.js" +export { CDEItemSheet } from "./item.js" +export { CDEKungfuSheet } from "./kungfu.js" +export { CDESpellSheet } from "./spell.js" +export { CDESupernaturalSheet } from "./supernatural.js" diff --git a/src/ui/sheets/items/item.js b/src/ui/sheets/items/item.js new file mode 100644 index 0000000..ac22371 --- /dev/null +++ b/src/ui/sheets/items/item.js @@ -0,0 +1,23 @@ +import { SUBTYPES } from "../../../config/constants.js" +import { CDEBaseItemSheet } from "./base.js" + +export class CDEItemSheet extends CDEBaseItemSheet { + static DEFAULT_OPTIONS = { + classes: ["equipment"], + position: { width: 620, height: 580 }, + } + + static PARTS = { + main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/item/cde-item-sheet.html" }, + } + + async _prepareContext() { + const context = await super._prepareContext() + context.subtypes = SUBTYPES + context.isWeapon = this.document.isWeapon + context.isArmor = this.document.isArmor + context.isSanhei = this.document.isSanhei + context.isOther = this.document.isOther + return context + } +} diff --git a/src/ui/sheets/items/kungfu.js b/src/ui/sheets/items/kungfu.js new file mode 100644 index 0000000..b2a0c60 --- /dev/null +++ b/src/ui/sheets/items/kungfu.js @@ -0,0 +1,22 @@ +import { CDEBaseItemSheet } from "./base.js" + +export class CDEKungfuSheet extends CDEBaseItemSheet { + static DEFAULT_OPTIONS = { + classes: ["kungfu"], + position: { width: 720, height: 680 }, + } + + static PARTS = { + main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/item/cde-kungfu-sheet.html" }, + } + + async _prepareContext() { + const context = await super._prepareContext() + const techniques = this.document.system.techniques ?? {} + const enrich = (value) => foundry.applications.ux.TextEditor.implementation.enrichHTML(value ?? "", { async: true }) + context.descriptionTechnique1HTML = await enrich(techniques.technique1?.technique) + context.descriptionTechnique2HTML = await enrich(techniques.technique2?.technique) + context.descriptionTechnique3HTML = await enrich(techniques.technique3?.technique) + return context + } +} diff --git a/src/ui/sheets/items/spell.js b/src/ui/sheets/items/spell.js new file mode 100644 index 0000000..c16d1f5 --- /dev/null +++ b/src/ui/sheets/items/spell.js @@ -0,0 +1,22 @@ +import { CDEBaseItemSheet } from "./base.js" + +export class CDESpellSheet extends CDEBaseItemSheet { + static DEFAULT_OPTIONS = { + classes: ["spell"], + position: { width: 660, height: 680 }, + } + + static PARTS = { + main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/item/cde-spell-sheet.html" }, + } + + async _prepareContext() { + const context = await super._prepareContext() + const enrich = (content) => foundry.applications.ux.TextEditor.implementation.enrichHTML(content ?? "", { async: true }) + context.spellDescriptionHTML = await enrich(this.document.system.description) + context.componentsDescriptionHTML = await enrich(this.document.system.components) + context.effectsDescriptionHTML = await enrich(this.document.system.effects) + context.examplesDescriptionHTML = await enrich(this.document.system.examples) + return context + } +} diff --git a/src/ui/sheets/items/supernatural.js b/src/ui/sheets/items/supernatural.js new file mode 100644 index 0000000..06e1289 --- /dev/null +++ b/src/ui/sheets/items/supernatural.js @@ -0,0 +1,12 @@ +import { CDEBaseItemSheet } from "./base.js" + +export class CDESupernaturalSheet extends CDEBaseItemSheet { + static DEFAULT_OPTIONS = { + classes: ["supernatural"], + position: { width: 560, height: 520 }, + } + + static PARTS = { + main: { template: "systems/fvtt-chroniques-de-l-etrange/templates/item/cde-supernatural-sheet.html" }, + } +} diff --git a/src/ui/templates.js b/src/ui/templates.js new file mode 100644 index 0000000..e4be15d --- /dev/null +++ b/src/ui/templates.js @@ -0,0 +1,5 @@ +import { TEMPLATE_PARTIALS } from "../config/constants.js" + +export async function preloadPartials() { + return loadTemplates(TEMPLATE_PARTIALS) +} diff --git a/system.json b/system.json new file mode 100644 index 0000000..818b470 --- /dev/null +++ b/system.json @@ -0,0 +1,202 @@ +{ + "id": "fvtt-chroniques-de-l-etrange", + "version": "3.0.0", + "title": "Les Chroniques de l'Étrange (Unofficial)", + "url": "https://www.uberwald.me/gitea/uberwald/fvtt-chroniques-de-l-etrange", + "description": "Unofficial game system for Les Chroniques de l'Étrange.", + "license": "LICENSE.txt", + "authors": [ + { + "name": "LeRatierBretonnien" + } + ], + "esmodules": ["dist/system.js"], + "styles": ["css/cde-theme.css"], + "packFolders": [ + { + "name": "FR - Aides", + "sorting": "a", + "color": "", + "packs": [ + "aides-pour-les-joueuses", + "telecharger-compendiums", + "aide-pour-linitiative", + "aide-pour-la-lumiere", + "aide-pour-fxmaster" + ], + "folders": [] + }, + { + "name": "FR - Macros & Générateurs", + "sorting": "a", + "color": "", + "packs": [ + "macros", + "fxmastercde", + "cantonese-name-generators" + ], + "folders": [] + } + ], + "packs": [ + { + "name": "aides-pour-les-joueuses", + "label": "FR - Aides pour les Joueuses", + "system": "fvtt-chroniques-de-l-etrange", + "path": "packs/aides-pour-les-joueuses", + "type": "JournalEntry", + "ownership": { + "PLAYER": "OBSERVER", + "ASSISTANT": "OWNER" + }, + "flags": {} + }, + { + "name": "telecharger-compendiums", + "label": "Télécharger Compendiums", + "system": "fvtt-chroniques-de-l-etrange", + "path": "packs/telecharger-compendiums", + "type": "JournalEntry", + "ownership": { + "PLAYER": "OBSERVER", + "ASSISTANT": "OWNER" + }, + "flags": {} + }, + { + "name": "aide-pour-linitiative", + "label": "Aide pour l'initiative", + "system": "fvtt-chroniques-de-l-etrange", + "path": "packs/aide-pour-linitiative", + "type": "JournalEntry", + "ownership": { + "PLAYER": "OBSERVER", + "ASSISTANT": "OWNER" + }, + "flags": {} + }, + { + "name": "aide-pour-la-lumiere", + "label": "Aide pour la lumière", + "system": "fvtt-chroniques-de-l-etrange", + "path": "packs/aide-pour-la-lumiere", + "type": "JournalEntry", + "ownership": { + "PLAYER": "OBSERVER", + "ASSISTANT": "OWNER" + }, + "flags": {} + }, + { + "name": "aide-pour-fxmaster", + "label": "Aide pour FXMaster", + "system": "fvtt-chroniques-de-l-etrange", + "path": "packs/aide-pour-fxmaster", + "type": "JournalEntry", + "ownership": { + "PLAYER": "OBSERVER", + "ASSISTANT": "OWNER" + }, + "flags": {} + }, + { + "name": "macros", + "label": "Macros", + "system": "fvtt-chroniques-de-l-etrange", + "path": "packs/macros", + "type": "Macro", + "ownership": { + "PLAYER": "OBSERVER", + "ASSISTANT": "OWNER" + }, + "flags": {} + }, + { + "name": "fxmastercde", + "label": "FR - FXMaster/CdE", + "system": "fvtt-chroniques-de-l-etrange", + "path": "packs/fxmastercde", + "type": "Macro", + "ownership": { + "PLAYER": "OBSERVER", + "ASSISTANT": "OWNER" + }, + "flags": {} + }, + { + "name": "cantonese-name-generators", + "label": "Générateurs de noms", + "system": "fvtt-chroniques-de-l-etrange", + "path": "packs/cantonese-name-generators", + "type": "RollTable", + "ownership": { + "PLAYER": "OBSERVER", + "ASSISTANT": "OWNER" + }, + "flags": {} + } + ], + "languages": [ + { + "lang": "en", + "name": "English", + "path": "lang/en-cde.json" + }, + { + "lang": "fr", + "name": "Français", + "path": "lang/fr-cde.json" + }, + { + "lang": "es", + "name": "Español", + "path": "lang/es-cde.json" + } + ], + "documentTypes": { + "Actor": { + "character": { "htmlFields": ["description"] }, + "npc": { "htmlFields": ["description"] }, + "tinji": { "htmlFields": ["description"] }, + "loksyu": { "htmlFields": ["description"] } + }, + "Item": { + "item": { "htmlFields": ["description", "notes"] }, + "kungfu": { + "htmlFields": [ + "description", + "techniques.technique1.technique", + "techniques.technique2.technique", + "techniques.technique3.technique", + "notes" + ] + }, + "spell": { "htmlFields": ["description", "components", "effects", "examples", "notes"] }, + "supernatural": { "htmlFields": ["description", "notes"] } + } + }, + "compatibility": { + "minimum": "13", + "verified": "13" + }, + "relationships": { + "requires": [{ + "id": "lib-wrapper", + "type": "module", + "manifest": "https://github.com/ruipin/fvtt-lib-wrapper/releases/download/v1.12.13.1/module.json", + "compatibility": { + "minimum": "1.12.13.1" + } + }] + }, + "background": "/systems/fvtt-chroniques-de-l-etrange/images/background/accueil.jpg", + "grid": { + "distance": 5, + "units": "m" + }, + "initiative": "@anti_initiative", + "primaryTokenAttribute": "threetreasures.heiyang", + "secondaryTokenAttribute": "threetreasures.heiyin", + "manifest": "https://chroniques-etrange-no.fr/download/foundry/system.json", + "download": "https://chroniques-etrange-no.fr/download/foundry/release-233.zip" +} diff --git a/templates/actor/cde-character-sheet.html b/templates/actor/cde-character-sheet.html new file mode 100644 index 0000000..5e26bfc --- /dev/null +++ b/templates/actor/cde-character-sheet.html @@ -0,0 +1,130 @@ +
+ {{log 'actor-sheet' this}} + +
+ +
+
+

+ +

+ +
+
+
+ + +
+
+ + +
+
+
+
+ {{ localize "CDE.PCName" }} + Chroniques de l'Étrange +
+
+ +
+ Init - + {{systemData.initiative}} + Init set + Init + +
+
+
+
+
+ + + +
+
+
+ {{editor descriptionHTML target="system.description" button=true editable=editable engine="prosemirror"}} +
+
+ +
+
+ {{> "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-nghang.html"}} +
+
+ +
+
+ {{> "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-skills.html"}} +
+
+ +
+
+ {{> "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-treasures.html"}} +
+
+ +
+
+ {{> "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-magics.html"}} +
+
+ +
+
+ {{> "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-spells.html"}} +
+
+ +
+
+ {{> "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-kungfus.html"}} +
+
+ +
+
+ {{> "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-character-items.html"}} +
+
+
+
diff --git a/templates/actor/cde-loksyu-sheet.html b/templates/actor/cde-loksyu-sheet.html new file mode 100644 index 0000000..23222b8 --- /dev/null +++ b/templates/actor/cde-loksyu-sheet.html @@ -0,0 +1,73 @@ +
+ {{log 'loksyu-sheet' this}} +
+ +
+

+ +

+
+ {{ localize "CDE.Loksyu" }} + {{ localize "CDE.ModernJapan" }} +
+
+
+ + + +
+
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ Loksyu +
+
+ +
+
+ {{editor descriptionHTML target="system.description" button=true editable=editable engine="prosemirror"}} +
+
+
+
diff --git a/templates/actor/cde-npc-sheet.html b/templates/actor/cde-npc-sheet.html new file mode 100644 index 0000000..b6c19b5 --- /dev/null +++ b/templates/actor/cde-npc-sheet.html @@ -0,0 +1,254 @@ +
+ {{log 'npc-sheet' this}} + +
+ +
+
+

+ +

+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ +
+ Init - + {{systemData.initiative}} + Init set + Init + +
+
+
+
+ {{ localize "CDE.NPCName" }} + Chroniques de l'Étrange +
+
+
+ + + +
+
+
+ {{editor descriptionHTML target="system.description" button=true editable=editable engine="prosemirror"}} +
+
+ +
+
+
{{ localize "CDE.Aptitudes" }}
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
 {{ localize "CDE.Physical" }} + Cercle +
 
+ +
+ +
 {{ localize "CDE.Martial" }} + Cercle +
 
+ +
+ +
 {{ localize "CDE.Mental" }} + Cercle +
 
+ +
+ +
 {{ localize "CDE.Social" }} + Cercle +
 
+ +
+ +
 {{ localize "CDE.Spiritual" }} + Cercle +
 
+ +
+ +
+ + + + + + + + + + + + + +
 {{ localize "CDE.Vitality" }} + Cercle +
 
+ +
+ Cercle +
 
+
-{{systemData.vitality.calcul}}-
+
+ +
 {{ localize "CDE.Hei" }} + Cercle +
 
+ +
+ Cercle +
 
+
-{{systemData.hei.calcul}}-
+
+ +
+
+ +
+
+
+ +
+
+ {{> "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-npc-supernaturals.html"}} +
+
+ +
+
+ {{> "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-npc-spells.html"}} +
+
+ +
+
+ {{> "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-npc-kungfus.html"}} +
+
+ +
+
+ {{> "systems/fvtt-chroniques-de-l-etrange/templates/actor/parts/cde-npc-items.html"}} +
+
+
+
diff --git a/templates/actor/cde-tinji-sheet.html b/templates/actor/cde-tinji-sheet.html new file mode 100644 index 0000000..b4552a2 --- /dev/null +++ b/templates/actor/cde-tinji-sheet.html @@ -0,0 +1,46 @@ +
+ {{log 'tinji-sheet' this}} +
+ +
+

+ +

+
+ {{ localize "CDE.TinJi2" }} + {{ localize "CDE.ModernJapan" }} +
+
+
+ + + +
+
+
+
+
+ + +
+ +
+ Tin Ji +
+
+ +
+
+ {{editor descriptionHTML target="system.description" button=true editable=editable engine="prosemirror"}} +
+
+
+
diff --git a/templates/actor/parts/cde-character-items.html b/templates/actor/parts/cde-character-items.html new file mode 100644 index 0000000..33006a3 --- /dev/null +++ b/templates/actor/parts/cde-character-items.html @@ -0,0 +1,15 @@ +
    + {{#each equipments as |item id|}} +
  1. + +

    {{item.name}}

    +
    + + +
    +
  2. + {{/each}} +
+

+ {{ localize "CDE.ItemCreate" }} +

diff --git a/templates/actor/parts/cde-character-kungfus.html b/templates/actor/parts/cde-character-kungfus.html new file mode 100644 index 0000000..c340bbc --- /dev/null +++ b/templates/actor/parts/cde-character-kungfus.html @@ -0,0 +1,15 @@ +
    + {{#each kungfus as |item id|}} +
  1. + +

    {{item.name}}

    +
    + + +
    +
  2. + {{/each}} +
+

+ {{ localize "CDE.KFCreate" }} +

diff --git a/templates/actor/parts/cde-character-magics.html b/templates/actor/parts/cde-character-magics.html new file mode 100644 index 0000000..18d19dd --- /dev/null +++ b/templates/actor/parts/cde-character-magics.html @@ -0,0 +1,139 @@ +
{{ localize "CDE.Components2" }}
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Die + +  Die + +
Die + +  Die + +
Die + +  Die + +
Die + +  Die + +
Die + +  Die + +
+ +
+ Die + +
+ +
{{ localize "CDE.TypesOfMagic" }}
+ +{{#each systemData.magics as |magic key|}} + {{log 'magic' key magic}} + + + + + + + + + +
+ + + {{ getMagicAspectLabel key }} +   {{getMagicLabel key}} + Cercle +
 
+ +
  , {{ getMagicAspectLabel key }} + {{#if magic.visible}} + + {{#each magic.speciality as |special key2|}} + {{log 'speciality' special key key2}} + + + + + + + + {{/each}} +
+ + {{ getMagicSpecialityLabel key key2 }}{{getMagicSpecialityLabelElement key key2}}{{getMagicSpecialityLabelIcon key key2}} + Die +
+ {{/if}} +
+{{/each}} diff --git a/templates/actor/parts/cde-character-nghang.html b/templates/actor/parts/cde-character-nghang.html new file mode 100644 index 0000000..a38c71a --- /dev/null +++ b/templates/actor/parts/cde-character-nghang.html @@ -0,0 +1,87 @@ +
+ + +
+
+ Die +
+ +
+
+
+ Die +
+ +
+
+
+
+ Die +
+ +
+
+
+ Die +
+ +
+
+
+
+ Die +
+ +
+
+Ng Hang diff --git a/templates/actor/parts/cde-character-skills.html b/templates/actor/parts/cde-character-skills.html new file mode 100644 index 0000000..045390e --- /dev/null +++ b/templates/actor/parts/cde-character-skills.html @@ -0,0 +1,42 @@ +
{{ localize "CDE.Skills" }}
+ + {{#each systemData.skills as |skill key|}} + + + + + + + + + {{/each}} +
+ Die +  {{ localize skill.label }} + Cercle +
 
+ +
+ + +1 DDie
+ +
{{ localize "CDE.Resources" }}
+ + {{#each systemData.resources as |resource key|}} + + + + + + + + + + {{/each}} +
NoDie {{ localize resource.label }} + Cercle +
 
+ +
+ + +1 DDie
diff --git a/templates/actor/parts/cde-character-spells.html b/templates/actor/parts/cde-character-spells.html new file mode 100644 index 0000000..ea48aa8 --- /dev/null +++ b/templates/actor/parts/cde-character-spells.html @@ -0,0 +1,15 @@ +
    + {{#each spells as |item id|}} +
  1. + +

    {{item.name}}

    +
    + + +
    +
  2. + {{/each}} +
+

+ {{ localize "CDE.SpellCreate" }} +

diff --git a/templates/actor/parts/cde-character-treasures.html b/templates/actor/parts/cde-character-treasures.html new file mode 100644 index 0000000..f1713a3 --- /dev/null +++ b/templates/actor/parts/cde-character-treasures.html @@ -0,0 +1,98 @@ +
+ {{ localize "CDE.HEI" }} +
+
+ {{ localize "CDE.Essence2" }} +
+
+ {{ localize "CDE.YANG-YIN" }} +
+
+ {{ localize "CDE.Max-Present-Present-Max" }} +
+
+ Cercle + Cercle + Yin Yang + Cercle + Cercle +
+
+ + + + +

  + 
  +
+ {{ localize "CDE.SAN-ZING" }} +
+
+ {{ localize "CDE.MentalHealth-PhysicalHealth" }} +
+
+{{ localize "CDE.Max-Present-Malus-Present-Max" }} +
+
+ Cercle + Cercle + -- + Cercle + Cercle +
+
+ + + + +

  + 
  +
+ Cercle + Cercle + - 1 D + Cercle + Cercle +
+
+ + + + +

  + 
  +
+ Cercle + Cercle + - 2 D + Cercle + Cercle +
+
+ + + + +

  + 
  +
+ {{ localize "CDE.PTAO" }} +
+
+ {{ localize "CDE.Experience" }} +
+
+ {{ localize "CDE.Total-Present" }} +
+
+ Cercle + Cercle +
+
+ + +
\ No newline at end of file diff --git a/templates/actor/parts/cde-npc-items.html b/templates/actor/parts/cde-npc-items.html new file mode 100644 index 0000000..33006a3 --- /dev/null +++ b/templates/actor/parts/cde-npc-items.html @@ -0,0 +1,15 @@ +
    + {{#each equipments as |item id|}} +
  1. + +

    {{item.name}}

    +
    + + +
    +
  2. + {{/each}} +
+

+ {{ localize "CDE.ItemCreate" }} +

diff --git a/templates/actor/parts/cde-npc-kungfus.html b/templates/actor/parts/cde-npc-kungfus.html new file mode 100644 index 0000000..c340bbc --- /dev/null +++ b/templates/actor/parts/cde-npc-kungfus.html @@ -0,0 +1,15 @@ +
    + {{#each kungfus as |item id|}} +
  1. + +

    {{item.name}}

    +
    + + +
    +
  2. + {{/each}} +
+

+ {{ localize "CDE.KFCreate" }} +

diff --git a/templates/actor/parts/cde-npc-spells.html b/templates/actor/parts/cde-npc-spells.html new file mode 100644 index 0000000..ea48aa8 --- /dev/null +++ b/templates/actor/parts/cde-npc-spells.html @@ -0,0 +1,15 @@ +
    + {{#each spells as |item id|}} +
  1. + +

    {{item.name}}

    +
    + + +
    +
  2. + {{/each}} +
+

+ {{ localize "CDE.SpellCreate" }} +

diff --git a/templates/actor/parts/cde-npc-supernaturals.html b/templates/actor/parts/cde-npc-supernaturals.html new file mode 100644 index 0000000..e11630d --- /dev/null +++ b/templates/actor/parts/cde-npc-supernaturals.html @@ -0,0 +1,15 @@ +
    + {{#each supernaturals as |item id|}} +
  1. + +

    {{item.name}}

    +
    + + +
    +
  2. + {{/each}} +
+

+ {{ localize "CDE.SupernaturalCreate" }} +

diff --git a/templates/form/cde-dice-result.html b/templates/form/cde-dice-result.html new file mode 100644 index 0000000..b311001 --- /dev/null +++ b/templates/form/cde-dice-result.html @@ -0,0 +1,437 @@ +
+
+ +
+ + {{!-- Sheet Body --}} +
+ + {{!-- Frame --}} +
+ + {{#if (eq aspect 'wood')}} + + + + + + + + + + + + + + + + +
+
+ {{ successesdice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseSuccesses" }} +
+
+
+ {{ auspiciousdice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseAuspiciousDice" }} +
+
+
+ {{ noxiousdice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseNoxiousDice" }} +
+
+
+ {{ loksyudice }} {{ loksyurepartition }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseLoksyu" }} +
+
+
+ {{ tinjidice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseTinJi" }} +
+
+ {{/if}} + + {{#if (eq aspect 'fire')}} + + + + + + + + + + + + + + + + +
+
+ {{ successesdice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseSuccesses" }} +
+
+
+ {{ auspiciousdice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseAuspiciousDice" }} +
+
+
+ {{ noxiousdice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseNoxiousDice" }} +
+
+
+ {{ loksyudice }} {{ loksyurepartition }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseLoksyu" }} +
+
+
+ {{ tinjidice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseTinJi" }} +
+
+ {{/if}} + + {{#if (eq aspect 'earth')}} + + + + + + + + + + + + + + + + +
+
+ {{ successesdice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseSuccesses" }} +
+
+
+ {{ auspiciousdice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseAuspiciousDice" }} +
+
+
+ {{ noxiousdice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseNoxiousDice" }} +
+
+
+ {{ loksyudice }} {{ loksyurepartition }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseLoksyu" }} +
+
+
+ {{ tinjidice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseTinJi" }} +
+
+ {{/if}} + + {{#if (eq aspect 'metal')}} + + + + + + + + + + + + + + + + +
+
+ {{ successesdice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseSuccesses" }} +
+
+
+ {{ auspiciousdice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseAuspiciousDice" }} +
+
+
+ {{ noxiousdice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseNoxiousDice" }} +
+
+
+ {{ loksyudice }} {{ loksyurepartition }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseLoksyu" }} +
+
+
+ {{ tinjidice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseTinJi" }} +
+
+ {{/if}} + + {{#if (eq aspect 'water')}} + + + + + + + + + + + + + + + + +
+
+ {{ successesdice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseSuccesses" }} +
+
+
+ {{ auspiciousdice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseAuspiciousDice" }} +
+
+
+ {{ noxiousdice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseNoxiousDice" }} +
+
+
+ {{ loksyudice }} {{ loksyurepartition }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseLoksyu" }} +
+
+
+ {{ tinjidice }} +
+
+ +
+
+ {{ localize "CDE.UpperCaseTinJi" }} +
+
+ {{/if}} +
+ + + + + + + + + + + + + + + +
+ {{ d1 }} + + {{ d2 }} + + {{ d3 }} + + {{ d4 }} + + {{ d5 }} +
+ + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ {{ d6 }} + + {{ d7 }} + + {{ d8 }} + + {{ d9 }} + + {{ d0 }} +
+ + + + + + + + + +
+
+
+
+
\ No newline at end of file diff --git a/templates/form/cde-magic-dice-prompt.html b/templates/form/cde-magic-dice-prompt.html new file mode 100644 index 0000000..505e937 --- /dev/null +++ b/templates/form/cde-magic-dice-prompt.html @@ -0,0 +1,152 @@ +
+
+
+ +
+
+ + {{!-- Sheet Body --}} +
+ + + + + +
+ {{ localize "CDE.OneMagicRoll" }} +
+ + + + + + + + +
  + +
+ +
+
+ {{ numberofdice }} +
+
  + 1 + 
+ + + + + + + + + + + + + + + +
{{ localize "CDE.AspectSkill" }} {{ localize "CDE.BonusMalus" }} {{ localize "CDE.BonusAuspiciousDice" }}
+ + +  + +
+ + + + +
+  {{ localize "CDE.DoNotModify" }} +
+
+ + + + +
+ {{ localize "CDE.TwoPowerOfSpell" }} +
+ + + + + + + + + + + + + + + +
{{ localize "CDE.AspectSpeciality" }} {{ localize "CDE.RollDifficulty" }} {{ localize "CDE.BonusMalus" }}
+ + +
+ + + + +
+  {{ localize "CDE.DoNotModify" }} +
+
 
+ + + {{ localize "CDE.TypeOfThrow" }} + + +
+ +
+ + +
+
\ No newline at end of file diff --git a/templates/form/cde-prefs-prompt.html b/templates/form/cde-prefs-prompt.html new file mode 100644 index 0000000..a31b266 --- /dev/null +++ b/templates/form/cde-prefs-prompt.html @@ -0,0 +1,34 @@ +
+
+
+ +
+
+ + {{!-- Sheet Body --}} +
+ + {{!-- Frame --}} +
+ + + + {{ localize "CDE.TypeOfThrow" }} + + + +
+ + {{ localize "CDE.TypeOfThrowCheck" }}
+ +
+
+
\ No newline at end of file diff --git a/templates/form/cde-skill-dice-prompt.html b/templates/form/cde-skill-dice-prompt.html new file mode 100644 index 0000000..521dd2a --- /dev/null +++ b/templates/form/cde-skill-dice-prompt.html @@ -0,0 +1,102 @@ +
+
+
+ +
+
+ + {{!-- Sheet Body --}} +
+ + {{!-- Frame --}} +
+ + + + + + + + + +
  + +
+ +
+
+ {{ numberofdice }} +
+
  +  
+ + + + + + + + + + + +
{{ localize "CDE.Aspect" }} {{ localize "CDE.BonusMalus" }}
+ +  + 
+ + + + + + + +
{{ localize "CDE.BonusAuspiciousDice" }}
+ +
+
+ + + {{ localize "CDE.TypeOfThrow" }} + + +
+ +
+ +
+
+
\ No newline at end of file diff --git a/templates/form/cde-skill-special-dice-prompt.html b/templates/form/cde-skill-special-dice-prompt.html new file mode 100644 index 0000000..2c7dbbd --- /dev/null +++ b/templates/form/cde-skill-special-dice-prompt.html @@ -0,0 +1,102 @@ +
+
+
+ +
+
+ + {{!-- Sheet Body --}} +
+ + {{!-- Frame --}} +
+ + + + + + + + + +
  + +
+ +
+
+ {{ numberofdice }} +
+
  + 1 + 
+ + + + + + + + + + + +
{{ localize "CDE.Aspect" }} {{ localize "CDE.BonusMalus" }}
+ +  + 
+ + + + + + + +
{{ localize "CDE.BonusAuspiciousDice" }}
+ +
+
+ + + {{ localize "CDE.TypeOfThrow" }} + + +
+ +
+ +
+
+
\ No newline at end of file diff --git a/templates/form/cde-turn-order-npc-prompt.html b/templates/form/cde-turn-order-npc-prompt.html new file mode 100644 index 0000000..79ca03a --- /dev/null +++ b/templates/form/cde-turn-order-npc-prompt.html @@ -0,0 +1,29 @@ +
+
+
+ +
+
+ + {{!-- Sheet Body --}} +
+ + {{!-- Frame --}} +
+
+   + +
+
+
+
+
\ No newline at end of file diff --git a/templates/form/cde-turn-order-prompt.html b/templates/form/cde-turn-order-prompt.html new file mode 100644 index 0000000..c7d24c7 --- /dev/null +++ b/templates/form/cde-turn-order-prompt.html @@ -0,0 +1,44 @@ +
+
+
+ +
+
+ + {{!-- Sheet Body --}} +
+ + {{!-- Frame --}} +
+
+   + +
+
+
+
+
\ No newline at end of file diff --git a/templates/form/cde-type-throw-prompt.html b/templates/form/cde-type-throw-prompt.html new file mode 100644 index 0000000..edf94b1 --- /dev/null +++ b/templates/form/cde-type-throw-prompt.html @@ -0,0 +1,35 @@ +
+
+
+ +
+
+ + {{!-- Sheet Body --}} +
+ + {{!-- Frame --}} +
+ + + + {{ localize "CDE.TypeOfThrow4ThisTime" }} + + + +
+ + {{ localize "CDE.TypeOfThrowCheck" }}
+  {{ localize "CDE.NextTimeGoToTheSettings" }} +
  +
+
+
\ No newline at end of file diff --git a/templates/item/cde-item-sheet.html b/templates/item/cde-item-sheet.html new file mode 100644 index 0000000..3e9295b --- /dev/null +++ b/templates/item/cde-item-sheet.html @@ -0,0 +1,67 @@ +
+
+ +
+

+ +

+
+
+ {{ localize "CDE.TypeOfItem" }} + +
+
+ {{ localize "CDE.Reference" }} + +
+
+ {{ localize "CDE.Quantity" }} + +
+
+ {{ localize "CDE.Weight" }} + +
+ {{#if isWeapon}} +
+ {{ localize "CDE.Damage" }} + +
+
+ {{ localize "CDE.Range" }} + +
+ {{/if}} + {{#if isArmor}} +
+ {{ localize "CDE.Protection" }} + +
+ {{/if}} +
+
+ {{ localize "CDE.Items" }} +
+
+
+ + + +
+
+
+ {{editor descriptionHTML target="system.description" button=true editable=editable engine="prosemirror"}} +
+
+
+
+ {{editor notesHTML target="system.notes" button=true editable=editable engine="prosemirror"}} +
+
+
+
diff --git a/templates/item/cde-kungfu-sheet.html b/templates/item/cde-kungfu-sheet.html new file mode 100644 index 0000000..6841a4b --- /dev/null +++ b/templates/item/cde-kungfu-sheet.html @@ -0,0 +1,141 @@ +
+
+ +
+

+ +

+
+
+ {{ localize "CDE.Orientation" }} + +
+
+ {{ localize "CDE.Aspect" }} + +
+
+ {{ localize "CDE.Skill" }} + +
+
+ {{ localize "CDE.Speciality" }} + +
+
+ {{ localize "CDE.Reference" }} + +
+
+
+ {{ localize "CDE.KungFu" }} +
+
+
+ + + +
+
+
+ {{editor descriptionHTML target="system.description" button=true editable=editable engine="prosemirror"}} +
+
+ +
+
+
+
+ T1 + +
+
+
+ + +
+
+ {{ localize "CDE.Activation" }} + +
+
+
+
+ {{editor descriptionTechnique1HTML target="system.techniques.technique1.technique" button=true editable=editable engine="prosemirror"}} +
+
+
+ +
+
+
+
+ T2 + +
+
+
+ + +
+
+ {{ localize "CDE.Activation" }} + +
+
+
+
+ {{editor descriptionTechnique2HTML target="system.techniques.technique2.technique" button=true editable=editable engine="prosemirror"}} +
+
+
+ +
+
+
+
+ T3 + +
+
+
+ + +
+
+ {{ localize "CDE.Activation" }} + +
+
+
+
+ {{editor descriptionTechnique3HTML target="system.techniques.technique3.technique" button=true editable=editable engine="prosemirror"}} +
+
+
+ +
+
+ {{editor notesHTML target="system.notes" button=true editable=editable engine="prosemirror"}} +
+
+
+
diff --git a/templates/item/cde-spell-sheet.html b/templates/item/cde-spell-sheet.html new file mode 100644 index 0000000..177d10d --- /dev/null +++ b/templates/item/cde-spell-sheet.html @@ -0,0 +1,81 @@ +
+
+ +
+

+ +

+
+
+ {{ localize "CDE.SpecialityName" }} + +
+
+ {{ localize "CDE.AssociatedElement" }} + +
+
+ {{ localize "CDE.Hei" }} + +
+
+ {{ localize "CDE.Reference" }} + +
+
+
+
+ {{ localize "CDE.RealizationTimeRitual" }} + +
+
+ {{ localize "CDE.RealizationTimeAccelerated" }} + +
+
+ {{ localize "CDE.Flashback" }} + +
+
+
+ {{ localize "CDE.Spells" }} +
+
+
+ + + +
+
+
+ {{editor spellDescriptionHTML target="system.description" button=true editable=editable engine="prosemirror"}} +
+
+
+
+ {{editor componentsDescriptionHTML target="system.components" button=true editable=editable engine="prosemirror"}} +
+
+
+
+ {{editor effectsDescriptionHTML target="system.effects" button=true editable=editable engine="prosemirror"}} +
+
+
+
+ {{editor examplesDescriptionHTML target="system.examples" button=true editable=editable engine="prosemirror"}} +
+
+
+
+ {{editor notesHTML target="system.notes" button=true editable=editable engine="prosemirror"}} +
+
+
+
diff --git a/templates/item/cde-supernatural-sheet.html b/templates/item/cde-supernatural-sheet.html new file mode 100644 index 0000000..355d406 --- /dev/null +++ b/templates/item/cde-supernatural-sheet.html @@ -0,0 +1,37 @@ +
+
+ +
+

+ +

+
+
+ {{ localize "CDE.Reference" }} + +
+
+
+ {{ localize "CDE.Supernatural" }} +
+
+
+ + + +
+
+
+ {{editor descriptionHTML target="system.description" button=true editable=editable engine="prosemirror"}} +
+
+
+
+ {{editor notesHTML target="system.notes" button=true editable=editable engine="prosemirror"}} +
+
+
+