Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
31f2f4530c | ||
|
|
9c7ebc6df9 | ||
|
|
05f668acf0 | ||
|
|
10b01614e6 | ||
|
|
89d9d71395 | ||
|
|
1e298ed809 | ||
|
|
4ffaebf52b | ||
|
|
de7691c4dc | ||
|
|
c87b25fbaf | ||
|
|
6ce51ed8cf | ||
|
|
df852f17d1 | ||
|
|
8916600bf6 | ||
|
|
0189f62734 |
@@ -36,6 +36,10 @@ jobs:
|
|||||||
- name: Build CSS
|
- name: Build CSS
|
||||||
run: npm install && npm run build
|
run: npm install && npm run build
|
||||||
|
|
||||||
|
# Recompile les compendiums LevelDB depuis les sources YAML (src/packs/ → packs/)
|
||||||
|
- name: Compile Compendiums
|
||||||
|
run: npm run pullYAMLtoLDB
|
||||||
|
|
||||||
# Crée le zip de release avec tous les fichiers nécessaires au système
|
# Crée le zip de release avec tous les fichiers nécessaires au système
|
||||||
- run: |
|
- run: |
|
||||||
apt update -y
|
apt update -y
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ foundry
|
|||||||
# Ancien dossier SCSS (archivé)
|
# Ancien dossier SCSS (archivé)
|
||||||
scss_old/
|
scss_old/
|
||||||
|
|
||||||
|
# Outils d'audit local
|
||||||
|
.swival/
|
||||||
|
|
||||||
# Fichiers CSS générés
|
# Fichiers CSS générés
|
||||||
css/vermine2047.*.css
|
css/vermine2047.*.css
|
||||||
!css/vermine2047.css
|
!css/vermine2047.css
|
||||||
|
|||||||
+26
-2
@@ -223,6 +223,7 @@
|
|||||||
"world": "World"
|
"world": "World"
|
||||||
},
|
},
|
||||||
"CharacterNamePlaceholder": "Character Name",
|
"CharacterNamePlaceholder": "Character Name",
|
||||||
|
"ProfilePlaceholder": "Profile",
|
||||||
"none": "None",
|
"none": "None",
|
||||||
"bonuses": "Bonuses",
|
"bonuses": "Bonuses",
|
||||||
"choose_ability": "Choose Ability",
|
"choose_ability": "Choose Ability",
|
||||||
@@ -240,6 +241,28 @@
|
|||||||
"success_count": "Success Count",
|
"success_count": "Success Count",
|
||||||
"success_required": "Success Required",
|
"success_required": "Success Required",
|
||||||
"test_of": "Test of",
|
"test_of": "Test of",
|
||||||
|
"roll_success": "Success",
|
||||||
|
"roll_failure": "Failure",
|
||||||
|
"roll_context": "Roll context",
|
||||||
|
"roll_pool": "Dice pool",
|
||||||
|
"roll_dice": "Dice detail",
|
||||||
|
"pool_ability": "Ability",
|
||||||
|
"pool_skill": "Skill",
|
||||||
|
"pool_specialty": "Specialty",
|
||||||
|
"pool_help": "Help",
|
||||||
|
"pool_tooling": "Equipment",
|
||||||
|
"pool_group": "Group",
|
||||||
|
"pool_selfControl": "Self-Control",
|
||||||
|
"pool_total": "Total",
|
||||||
|
"totem_used": "Totem",
|
||||||
|
"totem_keep": "kept",
|
||||||
|
"domain_bonus": "Domain bonus",
|
||||||
|
"domain_penalty": "Domain penalty",
|
||||||
|
"used": "used",
|
||||||
|
"die_regular": "dice",
|
||||||
|
"die_human": "human",
|
||||||
|
"die_adapted": "adapted",
|
||||||
|
"die_successes": "successes",
|
||||||
"total": "Total",
|
"total": "Total",
|
||||||
"totem_dice": "Totem Dice",
|
"totem_dice": "Totem Dice",
|
||||||
"totem_hint": "Totem Hint",
|
"totem_hint": "Totem Hint",
|
||||||
@@ -573,7 +596,7 @@
|
|||||||
"name": "Repulsion"
|
"name": "Repulsion"
|
||||||
},
|
},
|
||||||
"tracks": {
|
"tracks": {
|
||||||
"name": "Tracks"
|
"name": "Tracking"
|
||||||
},
|
},
|
||||||
"crafting": {
|
"crafting": {
|
||||||
"name": "Crafting"
|
"name": "Crafting"
|
||||||
@@ -603,7 +626,7 @@
|
|||||||
"name": "Melee"
|
"name": "Melee"
|
||||||
},
|
},
|
||||||
"archery": {
|
"archery": {
|
||||||
"name": "Ranged"
|
"name": "Ranged Weapons"
|
||||||
},
|
},
|
||||||
"throwing": {
|
"throwing": {
|
||||||
"name": "Throwing"
|
"name": "Throwing"
|
||||||
@@ -655,6 +678,7 @@
|
|||||||
"Round": "Round"
|
"Round": "Round"
|
||||||
},
|
},
|
||||||
"SIZE_LEVELS": {
|
"SIZE_LEVELS": {
|
||||||
|
"tiny": "Insect",
|
||||||
"small": "Small",
|
"small": "Small",
|
||||||
"medium": "Medium",
|
"medium": "Medium",
|
||||||
"large": "Large"
|
"large": "Large"
|
||||||
|
|||||||
+27
-3
@@ -93,7 +93,7 @@
|
|||||||
"AGE_TYPES": {
|
"AGE_TYPES": {
|
||||||
"young": "Jeune",
|
"young": "Jeune",
|
||||||
"adult": "Adulte",
|
"adult": "Adulte",
|
||||||
"old": "Vieux"
|
"old": "Ancien"
|
||||||
},
|
},
|
||||||
"IDENTITY": {
|
"IDENTITY": {
|
||||||
"biography": "Biographie",
|
"biography": "Biographie",
|
||||||
@@ -188,6 +188,28 @@
|
|||||||
"grant_reroll": "accorder des relances",
|
"grant_reroll": "accorder des relances",
|
||||||
"success_count": "nombre de succès",
|
"success_count": "nombre de succès",
|
||||||
"success_required": "succès requis",
|
"success_required": "succès requis",
|
||||||
|
"roll_success": "Réussite",
|
||||||
|
"roll_failure": "Échec",
|
||||||
|
"roll_context": "Contexte du jet",
|
||||||
|
"roll_pool": "Composition du jet",
|
||||||
|
"roll_dice": "Détail des dés",
|
||||||
|
"pool_ability": "Caractéristique",
|
||||||
|
"pool_skill": "Compétence",
|
||||||
|
"pool_specialty": "Spécialité",
|
||||||
|
"pool_help": "Entraide",
|
||||||
|
"pool_tooling": "Équipement",
|
||||||
|
"pool_group": "Groupe",
|
||||||
|
"pool_selfControl": "Sang-Froid",
|
||||||
|
"pool_total": "Total",
|
||||||
|
"totem_used": "Totem",
|
||||||
|
"totem_keep": "gardé",
|
||||||
|
"domain_bonus": "Bonus de domaine",
|
||||||
|
"domain_penalty": "Malus de domaine",
|
||||||
|
"used": "utilisé",
|
||||||
|
"die_regular": "dés",
|
||||||
|
"die_human": "humains",
|
||||||
|
"die_adapted": "adaptés",
|
||||||
|
"die_successes": "succès",
|
||||||
"error_no_actor_selected": "Vous n'avez pas de personnage attitré ou de token sélectionné",
|
"error_no_actor_selected": "Vous n'avez pas de personnage attitré ou de token sélectionné",
|
||||||
"error_cannot_reroll": "Vous ne pouvez pas relancer un dés sur ce jet",
|
"error_cannot_reroll": "Vous ne pouvez pas relancer un dés sur ce jet",
|
||||||
"error_no_rerolls_left": "Plus de relances possibles",
|
"error_no_rerolls_left": "Plus de relances possibles",
|
||||||
@@ -314,6 +336,7 @@
|
|||||||
"total_damage": "Dégâts totaux",
|
"total_damage": "Dégâts totaux",
|
||||||
"wound_thresholds": "Seuils de blessures",
|
"wound_thresholds": "Seuils de blessures",
|
||||||
"CharacterNamePlaceholder": "Nom du personnage",
|
"CharacterNamePlaceholder": "Nom du personnage",
|
||||||
|
"ProfilePlaceholder": "Profil",
|
||||||
"sexes": {
|
"sexes": {
|
||||||
"female": "Féminin",
|
"female": "Féminin",
|
||||||
"male": "Masculin"
|
"male": "Masculin"
|
||||||
@@ -432,6 +455,7 @@
|
|||||||
"major": "Majeur"
|
"major": "Majeur"
|
||||||
},
|
},
|
||||||
"SIZE_LEVELS": {
|
"SIZE_LEVELS": {
|
||||||
|
"tiny": "Insecte",
|
||||||
"small": "Petit",
|
"small": "Petit",
|
||||||
"medium": "Moyen",
|
"medium": "Moyen",
|
||||||
"large": "Grand"
|
"large": "Grand"
|
||||||
@@ -595,7 +619,7 @@
|
|||||||
"name": "Répulsion"
|
"name": "Répulsion"
|
||||||
},
|
},
|
||||||
"tracks": {
|
"tracks": {
|
||||||
"name": "Pistage"
|
"name": "Traces"
|
||||||
},
|
},
|
||||||
"crafting": {
|
"crafting": {
|
||||||
"name": "Artisanat"
|
"name": "Artisanat"
|
||||||
@@ -616,7 +640,7 @@
|
|||||||
"name": "Armes à feu"
|
"name": "Armes à feu"
|
||||||
},
|
},
|
||||||
"archery": {
|
"archery": {
|
||||||
"name": "Tir à l'arc"
|
"name": "Armes de Tir"
|
||||||
},
|
},
|
||||||
"armory": {
|
"armory": {
|
||||||
"name": "Armurerie"
|
"name": "Armurerie"
|
||||||
|
|||||||
+41
-12
@@ -31,7 +31,7 @@
|
|||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
}
|
}
|
||||||
.char-name-value {
|
.char-name-value {
|
||||||
font-size: 1.5rem;
|
font-size: 1.1rem;
|
||||||
}
|
}
|
||||||
input:not([type="radio"]):not([type="checkbox"]) {
|
input:not([type="radio"]):not([type="checkbox"]) {
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
@@ -106,6 +106,10 @@
|
|||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
border-right: 1px solid rgba(255, 255, 255, 0.1);
|
border-right: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
|
|
||||||
|
> * {
|
||||||
|
flex: 0 0 auto;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
> nav.tabs {
|
> nav.tabs {
|
||||||
@@ -291,7 +295,7 @@
|
|||||||
|
|
||||||
.chooseTotem {
|
.chooseTotem {
|
||||||
font-family: "DistressBlack", sans-serif;
|
font-family: "DistressBlack", sans-serif;
|
||||||
font-size: 0.9rem;
|
font-size: 0.8rem;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
@@ -331,21 +335,39 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.padding-with-frieze {
|
.padding-with-frieze {
|
||||||
margin-left: 18% !important;
|
padding: 0.25rem;
|
||||||
margin-right: 10% !important;
|
|
||||||
|
|
||||||
li {
|
li {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.major-totem {
|
.resource-label {
|
||||||
position: relative;
|
|
||||||
|
|
||||||
h4 {
|
h4 {
|
||||||
position: absolute;
|
font-size: 1em;
|
||||||
transform: rotate(-8deg);
|
}
|
||||||
opacity: 1;
|
}
|
||||||
transition: 0.2s;
|
|
||||||
|
.major-totem {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
margin-bottom: 0.75rem;
|
||||||
|
padding: 0.6rem;
|
||||||
|
background-color: rgba(0, 0, 0, 0.12);
|
||||||
|
border: 2px groove #eeede0;
|
||||||
|
|
||||||
|
.flexcol {
|
||||||
|
gap: 0.3rem;
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 1.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.img-totem {
|
||||||
|
width: 64px;
|
||||||
|
height: 64px;
|
||||||
|
filter: drop-shadow(0px 0px 10px rgb(0, 0, 0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -377,7 +399,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.char-vermine2047 {
|
.char-vermine2047 {
|
||||||
font-size: 1.5rem;
|
font-size: 1.1rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -409,6 +431,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ── Onglet Histoire : doubler la hauteur des zones Notes et Relations ──
|
||||||
|
.tab.stories {
|
||||||
|
prose-mirror.editor {
|
||||||
|
min-height: 150px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
nav.tabs[data-group="sheet"] {
|
nav.tabs[data-group="sheet"] {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
justify-content: space-around;
|
justify-content: space-around;
|
||||||
|
|||||||
+38
-29
@@ -19,17 +19,39 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
div.minor-totems {
|
div.minor-totems {
|
||||||
position: relative;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: stretch;
|
||||||
|
gap: 0.25rem;
|
||||||
|
min-height: 8.5rem;
|
||||||
|
padding: 0.5rem;
|
||||||
background-color: rgba(146, 156, 111, 0.5215686275);
|
background-color: rgba(146, 156, 111, 0.5215686275);
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
text-align: center;
|
||||||
|
margin: 0;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.totem-row {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
h5 {
|
h5 {
|
||||||
position: absolute;
|
margin: 0;
|
||||||
top: 0;
|
display: inline-flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.25rem;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
|
||||||
img {
|
img {
|
||||||
max-width: 2rem;
|
max-width: 1.5rem;
|
||||||
position: absolute;
|
height: auto;
|
||||||
bottom: -2rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&.human, &.adapted {
|
&.human, &.adapted {
|
||||||
@@ -53,44 +75,31 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.totem-dice {
|
.totem-dice {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
.human-dice,
|
.human-dice,
|
||||||
.adapted-dice {
|
.adapted-dice {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
margin-left: 2rem;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.human-dice i,
|
.human-dice i,
|
||||||
.adapted-dice i {
|
.adapted-dice i {
|
||||||
padding-top: 0.5rem;
|
|
||||||
color: @totem-human-color;
|
color: @totem-human-color;
|
||||||
position: relative;
|
|
||||||
z-index: 0;
|
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.adapted-dice {
|
.adapted-dice {
|
||||||
justify-content: flex-end;
|
|
||||||
margin-left: 0;
|
|
||||||
margin-right: 2rem;
|
|
||||||
transform: rotate(180deg);
|
transform: rotate(180deg);
|
||||||
|
|
||||||
|
i {
|
||||||
|
transform: rotate(180deg);
|
||||||
|
color: @totem-adapted-color;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.adapted-dice i {
|
|
||||||
transform: rotate(180deg);
|
|
||||||
padding-top: 0.5rem;
|
|
||||||
color: @totem-adapted-color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.human {
|
|
||||||
left: 0;
|
|
||||||
img { left: 0; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.adapted {
|
|
||||||
right: 0;
|
|
||||||
img { right: 0; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+158
-1
@@ -44,6 +44,24 @@ body.system-vermine2047.theme-dark {
|
|||||||
color: #000000;
|
color: #000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Core sheets the system doesn't restyle (RollTable, Journal, …) inherit the
|
||||||
|
// gray text overrides above, which are unreadable on their dark backgrounds.
|
||||||
|
// Restore Foundry's default light-on-dark text colors for those apps (dark theme only).
|
||||||
|
body.system-vermine2047.theme-dark {
|
||||||
|
.roll-table-sheet,
|
||||||
|
.journal-sheet,
|
||||||
|
.document-sheet,
|
||||||
|
.settings-sheet {
|
||||||
|
--color-text-primary: var(--color-light-2);
|
||||||
|
--color-text-emphatic: var(--color-light-1);
|
||||||
|
--color-text-secondary: var(--color-light-3);
|
||||||
|
--color-text-subtle: var(--color-light-5);
|
||||||
|
--color-text-light-highlight: #f0f0e0;
|
||||||
|
--color-text-light-heading: #c9c7b8;
|
||||||
|
--color-text-light-primary: #b5b3a4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
body.system-vermine2047.theme-dark .form-group > label {
|
body.system-vermine2047.theme-dark .form-group > label {
|
||||||
color: #777777;
|
color: #777777;
|
||||||
}
|
}
|
||||||
@@ -97,6 +115,21 @@ ul.unstyled {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Les fenêtres de choix (totem, acteur) peuvent dépasser la hauteur fixe :
|
||||||
|
// on autorise le défilement pour accéder à la totalité du contenu.
|
||||||
|
.application#TOTEM_PICKER .window-content,
|
||||||
|
.application#ACTOR_PICKER .window-content,
|
||||||
|
.application#TRAIT_SELECTOR .window-content {
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
// La fiche de groupe contient beaucoup de zones (membres, objectifs, totem…) :
|
||||||
|
// dès que le contenu dépasse la hauteur de la fenêtre, on autorise le défilement
|
||||||
|
// pour ne pas perdre l'accès aux zones du bas.
|
||||||
|
.application.sheet.vermine2047.group .window-content {
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
.window-content .row {
|
.window-content .row {
|
||||||
&.smb { margin-bottom: 0.25rem; }
|
&.smb { margin-bottom: 0.25rem; }
|
||||||
&.mdb { margin-bottom: 0.5rem; }
|
&.mdb { margin-bottom: 0.5rem; }
|
||||||
@@ -113,6 +146,29 @@ ul.unstyled {
|
|||||||
|
|
||||||
.rollable {
|
.rollable {
|
||||||
.transition();
|
.transition();
|
||||||
|
|
||||||
|
// Affordance légère au repos : la zone est cliquable.
|
||||||
|
i.fa-dice-d10,
|
||||||
|
i.fa-dice {
|
||||||
|
font-size: 0.8em;
|
||||||
|
color: @color-acid-green;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sur la fiche créature, les valeurs lançables (Attaque…) sont fortement
|
||||||
|
// matérialisées : pastille de dé + bordure pointillée.
|
||||||
|
.application.sheet.vermine2047.creature {
|
||||||
|
.rollable {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 4px;
|
||||||
|
padding: 1px 5px;
|
||||||
|
border-radius: 3px;
|
||||||
|
color: @theme-color-light;
|
||||||
|
border: 1px dashed fade(@color-acid-green, 45%);
|
||||||
|
background: fade(@color-acid-green, 8%);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
img.profile-img {
|
img.profile-img {
|
||||||
@@ -420,7 +476,7 @@ body.system-vermine2047 img#logo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.item-name {
|
.item-name {
|
||||||
padding-left: 5px;
|
padding: 0 2px 0 5px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -674,6 +730,107 @@ ol.chat-log {
|
|||||||
color: @color-amber;
|
color: @color-amber;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ── Verdict ───────────────────────────────────────────────────────
|
||||||
|
.roll-verdict {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 8px;
|
||||||
|
margin: 6px 0;
|
||||||
|
padding: 6px 12px;
|
||||||
|
border-radius: 3px;
|
||||||
|
font-family: "DistressBlack";
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: @font-size-16;
|
||||||
|
letter-spacing: 0.5px;
|
||||||
|
|
||||||
|
&.success {
|
||||||
|
color: @color-acid-green;
|
||||||
|
background: fade(@color-acid-green, 15%);
|
||||||
|
border: 1px solid @color-acid-green;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.failure {
|
||||||
|
color: @color-hemolymph;
|
||||||
|
background: fade(@color-hemolymph, 15%);
|
||||||
|
border: 1px solid @color-hemolymph;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Contexte du jet ───────────────────────────────────────────────
|
||||||
|
div.roll-context {
|
||||||
|
gap: 6px 12px;
|
||||||
|
margin: 4px 0 6px;
|
||||||
|
padding: 6px 8px;
|
||||||
|
background: rgba(0, 0, 0, 0.06);
|
||||||
|
|
||||||
|
.context-item {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 5px;
|
||||||
|
|
||||||
|
.context-label {
|
||||||
|
font-family: "DistressBlack";
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: @font-size-11;
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.context-value {
|
||||||
|
font-family: "Roboto", sans-serif;
|
||||||
|
font-size: @font-size-12;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.totem-human .context-value { color: @totem-human-color; }
|
||||||
|
&.totem-adapted .context-value { color: @totem-adapted-color; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Composition du jet ────────────────────────────────────────────
|
||||||
|
div.roll-pool {
|
||||||
|
margin: 4px 0;
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-family: "DistressBlack";
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: @font-size-11;
|
||||||
|
margin: 4px 0;
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pool-breakdown {
|
||||||
|
gap: 4px 10px;
|
||||||
|
|
||||||
|
.pool-item {
|
||||||
|
font-family: "Roboto", sans-serif;
|
||||||
|
font-size: @font-size-11;
|
||||||
|
|
||||||
|
&.pool-total {
|
||||||
|
font-weight: 700;
|
||||||
|
color: @theme-color-light;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Résumé des dés ────────────────────────────────────────────────
|
||||||
|
div.roll-dice-summary {
|
||||||
|
gap: 6px 12px;
|
||||||
|
justify-content: center;
|
||||||
|
margin: 4px 0 2px;
|
||||||
|
padding: 4px 8px;
|
||||||
|
background: rgba(0, 0, 0, 0.06);
|
||||||
|
|
||||||
|
.die-summary {
|
||||||
|
font-family: "Roboto", sans-serif;
|
||||||
|
font-size: @font-size-11;
|
||||||
|
|
||||||
|
&.human { color: @totem-human-color; }
|
||||||
|
&.adapted { color: @totem-adapted-color; }
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
div.item-card header img {
|
div.item-card header img {
|
||||||
|
|||||||
@@ -114,7 +114,8 @@ export default class VermineBaseActorSheet extends HandlebarsApplicationMixin(fo
|
|||||||
isEditable: this.isEditable,
|
isEditable: this.isEditable,
|
||||||
enrichedNotes: await enrich("identity.notes"),
|
enrichedNotes: await enrich("identity.notes"),
|
||||||
enrichedBiography: await enrich("identity.biography"),
|
enrichedBiography: await enrich("identity.biography"),
|
||||||
enrichedRelations: await enrich("identity.relations")
|
enrichedRelations: await enrich("identity.relations"),
|
||||||
|
enrichedEquipmentNotes: await enrich("equipment.description")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -230,6 +231,17 @@ export default class VermineBaseActorSheet extends HandlebarsApplicationMixin(fo
|
|||||||
const id = target.closest("[data-item-id]")?.dataset?.itemId
|
const id = target.closest("[data-item-id]")?.dataset?.itemId
|
||||||
if (!id) return
|
if (!id) return
|
||||||
const item = this.document.items.get(id)
|
const item = this.document.items.get(id)
|
||||||
|
if (!item) return
|
||||||
|
if (item.type === "weapon" && this.document.system.abilities && this.document.system.skills) {
|
||||||
|
const { default: RollDialog } = await import("../../system/dialogs/rollDialog.mjs")
|
||||||
|
const dialog = await RollDialog.create({
|
||||||
|
actorId: this.document.id,
|
||||||
|
rolltype: "skill",
|
||||||
|
label: item.system.skill
|
||||||
|
})
|
||||||
|
if (dialog) dialog.render(true)
|
||||||
|
return
|
||||||
|
}
|
||||||
item?.roll()
|
item?.roll()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ export class VermineBaseItemSheet extends HandlebarsApplicationMixin(foundry.app
|
|||||||
// ── Rendu ───────────────────────────────────────────────────────────
|
// ── Rendu ───────────────────────────────────────────────────────────
|
||||||
|
|
||||||
_onRender(context, options) {
|
_onRender(context, options) {
|
||||||
|
super._onRender(context, options);
|
||||||
this.#dragDrop.forEach(d => d.bind(this.element))
|
this.#dragDrop.forEach(d => d.bind(this.element))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ export default class VermineCharacterSheetV2 extends VermineBaseActorSheet {
|
|||||||
case "main": break
|
case "main": break
|
||||||
case "abilities":
|
case "abilities":
|
||||||
context.tab = context.tabs.abilities
|
context.tab = context.tabs.abilities
|
||||||
|
context.specialties = doc.itemTypes.specialty
|
||||||
break
|
break
|
||||||
case "totem":
|
case "totem":
|
||||||
context.tab = context.tabs.totem
|
context.tab = context.tabs.totem
|
||||||
|
|||||||
@@ -2,6 +2,10 @@ import VermineBaseActorSheet from "./base-actor-sheet.mjs"
|
|||||||
|
|
||||||
export default class VermineCreatureSheetV2 extends VermineBaseActorSheet {
|
export default class VermineCreatureSheetV2 extends VermineBaseActorSheet {
|
||||||
|
|
||||||
|
// La fiche créature s'ouvre en mode édition : Gabarit, Taille, Rôle et Meute
|
||||||
|
// se règlent dès l'ouverture (le mode jeu reste accessible via le toggle).
|
||||||
|
_sheetMode = this.constructor.SHEET_MODES.EDIT
|
||||||
|
|
||||||
static DEFAULT_OPTIONS = {
|
static DEFAULT_OPTIONS = {
|
||||||
classes: ["creature"],
|
classes: ["creature"],
|
||||||
position: { width: 700, height: 650 },
|
position: { width: 700, height: 650 },
|
||||||
@@ -61,10 +65,22 @@ export default class VermineCreatureSheetV2 extends VermineBaseActorSheet {
|
|||||||
break
|
break
|
||||||
case "stats":
|
case "stats":
|
||||||
context.tab = context.tabs.stats
|
context.tab = context.tabs.stats
|
||||||
context.patternLabel = doc.system.pattern?.value ? CONFIG.VERMINE.creaturePatternLevels[doc.system.pattern.value]?.label : ""
|
context.patternLabel = doc.system.pattern?.value ? game.i18n.localize(CONFIG.VERMINE.creaturePatternLevels[doc.system.pattern.value]?.label ?? "") : ""
|
||||||
context.sizeLabel = doc.system.size?.value || ""
|
context.sizeLabel = doc.system.size?.value !== undefined ? game.i18n.localize(CONFIG.VERMINE.creatureSizeLevels[doc.system.size.value]?.label ?? "") : ""
|
||||||
context.roleLabel = doc.system.role?.value ? CONFIG.VERMINE.creatureRoleLevels[doc.system.role.value]?.label : ""
|
context.roleLabel = doc.system.role?.value ? game.i18n.localize(CONFIG.VERMINE.creatureRoleLevels[doc.system.role.value]?.label ?? "") : ""
|
||||||
context.packLabel = doc.system.pack?.value || game.i18n.localize("VERMINE.none")
|
context.packLabel = doc.system.pack?.value || game.i18n.localize("VERMINE.none")
|
||||||
|
// Contribution cumulée de la Taille (les modificateurs se cumulent : Taille N = somme 1..N)
|
||||||
|
const sizeLevels = CONFIG.VERMINE.creatureSizeLevels || {}
|
||||||
|
const sizeLevel = doc.system.size?.value ?? 0
|
||||||
|
context.sizeCumulative = { attack: 0, vigor: 0, minorWound: 0, majorWound: 0, deadlyWound: 0 }
|
||||||
|
for (let i = 1; i <= sizeLevel; i++) {
|
||||||
|
const cfg = sizeLevels[i] || {}
|
||||||
|
context.sizeCumulative.attack += cfg.attack || 0
|
||||||
|
context.sizeCumulative.vigor += cfg.vigor || 0
|
||||||
|
context.sizeCumulative.minorWound += cfg.minorWound || 0
|
||||||
|
context.sizeCumulative.majorWound += cfg.majorWound || 0
|
||||||
|
context.sizeCumulative.deadlyWound += cfg.deadlyWound || 0
|
||||||
|
}
|
||||||
break
|
break
|
||||||
case "combat":
|
case "combat":
|
||||||
context.tab = context.tabs.combat
|
context.tab = context.tabs.combat
|
||||||
@@ -77,4 +93,25 @@ export default class VermineCreatureSheetV2 extends VermineBaseActorSheet {
|
|||||||
}
|
}
|
||||||
return context
|
return context
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @override - Les créatures n'ont pas de caractéristiques/compétences : on lance directement le pool d'attaque. */
|
||||||
|
async _onRoll(event) {
|
||||||
|
event.preventDefault()
|
||||||
|
const el = event.currentTarget
|
||||||
|
const type = el.dataset.type
|
||||||
|
if (type !== "creature-attack") return super._onRoll(event)
|
||||||
|
const pool = this.document.system.computed?.attack ?? 0
|
||||||
|
if (!pool) {
|
||||||
|
ui.notifications.warn(game.i18n.localize("VERMINE.error_select_ability"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const difficulty = this.document.system.combatStatus?.difficulty ?? 7
|
||||||
|
const { VermineUtils } = await import("../../system/roll.mjs")
|
||||||
|
await VermineUtils.roll({
|
||||||
|
actor: this.document,
|
||||||
|
NoD: pool,
|
||||||
|
difficulty: parseInt(difficulty, 10),
|
||||||
|
rollLabel: game.i18n.localize("ADVERSITY.attack")
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,10 @@ import VermineBaseActorSheet from "./base-actor-sheet.mjs"
|
|||||||
|
|
||||||
export default class VermineNpcSheetV2 extends VermineBaseActorSheet {
|
export default class VermineNpcSheetV2 extends VermineBaseActorSheet {
|
||||||
|
|
||||||
|
// La fiche PNJ s'ouvre en mode édition : caractéristiques, compétences et
|
||||||
|
// niveaux se règlent dès l'ouverture (le mode jeu reste accessible via le toggle).
|
||||||
|
_sheetMode = this.constructor.SHEET_MODES.EDIT
|
||||||
|
|
||||||
static DEFAULT_OPTIONS = {
|
static DEFAULT_OPTIONS = {
|
||||||
classes: ["npc"],
|
classes: ["npc"],
|
||||||
position: { width: 750, height: 680 },
|
position: { width: 750, height: 680 },
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ export default class VermineItem extends Item {
|
|||||||
*/
|
*/
|
||||||
getRollData() {
|
getRollData() {
|
||||||
// If present, return the actor's roll data.
|
// If present, return the actor's roll data.
|
||||||
if (!this.actor) return null;
|
if (!this.actor) return this.system;
|
||||||
const rollData = this.actor.getRollData();
|
const rollData = this.actor.getRollData();
|
||||||
// Grab the item's system data as well.
|
// Grab the item's system data as well.
|
||||||
rollData.item = foundry.utils.deepClone(this.system);
|
rollData.item = foundry.utils.deepClone(this.system);
|
||||||
|
|||||||
@@ -219,7 +219,7 @@ const reqInt = { required: true, nullable: false, integer: true }
|
|||||||
export function raritySchema() {
|
export function raritySchema() {
|
||||||
const fields = foundry.data.fields
|
const fields = foundry.data.fields
|
||||||
return new fields.SchemaField({
|
return new fields.SchemaField({
|
||||||
value: new fields.NumberField({ ...reqInt, initial: 3, min: 1, max: 5 }),
|
value: new fields.NumberField({ ...reqInt, initial: 3, min: 1, max: 10 }),
|
||||||
handicap: new fields.NumberField({ ...reqInt, initial: 0, min: 0 })
|
handicap: new fields.NumberField({ ...reqInt, initial: 0, min: 0 })
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
+32
-11
@@ -48,7 +48,7 @@ export default class VermineCreatureData extends foundry.abstract.TypeDataModel
|
|||||||
|
|
||||||
// Niveaux de créature (patron, taille, rôle, meute)
|
// Niveaux de créature (patron, taille, rôle, meute)
|
||||||
pattern: attributeSchema(1, 1, 4),
|
pattern: attributeSchema(1, 1, 4),
|
||||||
size: attributeSchema(1, 1, 3),
|
size: attributeSchema(0, 0, 3),
|
||||||
role: attributeSchema(1, 1, 4),
|
role: attributeSchema(1, 1, 4),
|
||||||
pack: attributeSchema(0, 0, 3),
|
pack: attributeSchema(0, 0, 3),
|
||||||
|
|
||||||
@@ -97,28 +97,38 @@ export default class VermineCreatureData extends foundry.abstract.TypeDataModel
|
|||||||
*/
|
*/
|
||||||
_calculateCreatureComputedValues() {
|
_calculateCreatureComputedValues() {
|
||||||
const patternLevel = this.pattern?.value || 1
|
const patternLevel = this.pattern?.value || 1
|
||||||
const sizeLevel = this.size?.value || 1
|
const sizeLevel = this.size?.value || 0
|
||||||
const roleLevel = this.role?.value || 1
|
const roleLevel = this.role?.value || 1
|
||||||
const packLevel = this.pack?.value || 0
|
const packLevel = this.pack?.value || 0
|
||||||
|
|
||||||
const patternConfig = CONFIG.VERMINE.creaturePatternLevels[patternLevel] || {}
|
const patternConfig = CONFIG.VERMINE.creaturePatternLevels[patternLevel] || {}
|
||||||
const sizeConfig = CONFIG.VERMINE.creatureSizeLevels[sizeLevel] || {}
|
|
||||||
const roleConfig = CONFIG.VERMINE.creatureRoleLevels[roleLevel] || {}
|
const roleConfig = CONFIG.VERMINE.creatureRoleLevels[roleLevel] || {}
|
||||||
const packConfig = CONFIG.VERMINE.creaturePackLevels[packLevel] || {}
|
const packConfig = CONFIG.VERMINE.creaturePackLevels[packLevel] || {}
|
||||||
|
|
||||||
|
// Les modificateurs de Taille se cumulent : une créature de Taille N applique
|
||||||
|
// les modificateurs de chaque Taille de 1 à N (Taille 0 = insecte, aucun).
|
||||||
|
const sizeLevels = CONFIG.VERMINE.creatureSizeLevels || {}
|
||||||
|
let sizeAttack = 0
|
||||||
|
let sizeVigor = 0
|
||||||
|
for (let i = 1; i <= sizeLevel; i++) {
|
||||||
|
const cfg = sizeLevels[i] || {}
|
||||||
|
sizeAttack += cfg.attack || 0
|
||||||
|
sizeVigor += cfg.vigor || 0
|
||||||
|
}
|
||||||
|
|
||||||
// Attaque : patron + taille + meute + réaction du rôle
|
// Attaque : patron + taille + meute + réaction du rôle
|
||||||
this.computed.attack = (patternConfig.attack || 0)
|
this.computed.attack = (patternConfig.attack || 0)
|
||||||
+ (sizeConfig.attack || 0)
|
+ sizeAttack
|
||||||
+ (packConfig.attack || 0)
|
+ (packConfig.attack || 0)
|
||||||
+ (roleConfig.reaction || 0)
|
+ (roleConfig.reaction || 0)
|
||||||
|
|
||||||
// Dégâts : patron + vigueur de taille + meute
|
// Dégâts : patron + vigueur de taille + meute
|
||||||
this.computed.damage = (patternConfig.damage || 0)
|
this.computed.damage = (patternConfig.damage || 0)
|
||||||
+ (sizeConfig.vigor || 0)
|
+ sizeVigor
|
||||||
+ (packConfig.damage || 0)
|
+ (packConfig.damage || 0)
|
||||||
|
|
||||||
// Vigueur : taille + meute
|
// Vigueur : taille + meute
|
||||||
this.computed.vigor = (sizeConfig.vigor || 0) + (packConfig.damage || 0)
|
this.computed.vigor = sizeVigor + (packConfig.damage || 0)
|
||||||
|
|
||||||
// Réaction : rôle
|
// Réaction : rôle
|
||||||
this.computed.reaction = (roleConfig.reaction || 0) + (roleConfig.reaction_bonus || 0)
|
this.computed.reaction = (roleConfig.reaction || 0) + (roleConfig.reaction_bonus || 0)
|
||||||
@@ -141,21 +151,32 @@ export default class VermineCreatureData extends foundry.abstract.TypeDataModel
|
|||||||
*/
|
*/
|
||||||
_calculateCreatureWoundThresholds() {
|
_calculateCreatureWoundThresholds() {
|
||||||
const patternLevel = this.pattern?.value || 1
|
const patternLevel = this.pattern?.value || 1
|
||||||
const sizeLevel = this.size?.value || 1
|
const sizeLevel = this.size?.value || 0
|
||||||
const packLevel = this.pack?.value || 0
|
const packLevel = this.pack?.value || 0
|
||||||
|
|
||||||
const patternConfig = CONFIG.VERMINE.creaturePatternLevels[patternLevel] || {}
|
const patternConfig = CONFIG.VERMINE.creaturePatternLevels[patternLevel] || {}
|
||||||
const sizeConfig = CONFIG.VERMINE.creatureSizeLevels[sizeLevel] || {}
|
|
||||||
const packConfig = CONFIG.VERMINE.creaturePackLevels[packLevel] || {}
|
const packConfig = CONFIG.VERMINE.creaturePackLevels[packLevel] || {}
|
||||||
|
|
||||||
|
// Les modificateurs de Taille se cumulent (Taille N = somme des tailles 1..N).
|
||||||
|
const sizeLevels = CONFIG.VERMINE.creatureSizeLevels || {}
|
||||||
|
let sizeMinor = 0
|
||||||
|
let sizeMajor = 0
|
||||||
|
let sizeDeadly = 0
|
||||||
|
for (let i = 1; i <= sizeLevel; i++) {
|
||||||
|
const cfg = sizeLevels[i] || {}
|
||||||
|
sizeMinor += cfg.minorWound || 0
|
||||||
|
sizeMajor += cfg.majorWound || 0
|
||||||
|
sizeDeadly += cfg.deadlyWound || 0
|
||||||
|
}
|
||||||
|
|
||||||
this.minorWound.threshold = (patternConfig.minorWound || 0)
|
this.minorWound.threshold = (patternConfig.minorWound || 0)
|
||||||
+ (sizeConfig.minorWound || 0)
|
+ sizeMinor
|
||||||
+ (packConfig.minorWound || 0)
|
+ (packConfig.minorWound || 0)
|
||||||
this.majorWound.threshold = (patternConfig.majorWound || 0)
|
this.majorWound.threshold = (patternConfig.majorWound || 0)
|
||||||
+ (sizeConfig.majorWound || 0)
|
+ sizeMajor
|
||||||
+ (packConfig.majorWound || 0)
|
+ (packConfig.majorWound || 0)
|
||||||
this.deadlyWound.threshold = (patternConfig.deadlyWound || 0)
|
this.deadlyWound.threshold = (patternConfig.deadlyWound || 0)
|
||||||
+ (sizeConfig.deadlyWound || 0)
|
+ sizeDeadly
|
||||||
+ (packConfig.deadlyWound || 0)
|
+ (packConfig.deadlyWound || 0)
|
||||||
|
|
||||||
// Max de blessures
|
// Max de blessures
|
||||||
|
|||||||
@@ -10,9 +10,11 @@ export default class VermineSpecialtyData extends foundry.abstract.TypeDataModel
|
|||||||
/** @override */
|
/** @override */
|
||||||
static defineSchema() {
|
static defineSchema() {
|
||||||
const fields = foundry.data.fields
|
const fields = foundry.data.fields
|
||||||
|
const reqInt = { required: true, nullable: false, integer: true }
|
||||||
return {
|
return {
|
||||||
name: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
name: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||||
skill: new fields.StringField({ required: true, nullable: false, initial: "" })
|
skill: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||||
|
level: new fields.NumberField({ ...reqInt, initial: 1, min: 0, max: 5 })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ export default class VermineWeaponData extends foundry.abstract.TypeDataModel {
|
|||||||
const reqInt = { required: true, nullable: false, integer: true }
|
const reqInt = { required: true, nullable: false, integer: true }
|
||||||
return {
|
return {
|
||||||
...baseItemSchema(),
|
...baseItemSchema(),
|
||||||
|
skill: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||||
min_range: new fields.NumberField({ ...reqInt, initial: 0, min: 0 }),
|
min_range: new fields.NumberField({ ...reqInt, initial: 0, min: 0 }),
|
||||||
max_range: new fields.NumberField({ ...reqInt, initial: 0, min: 0 }),
|
max_range: new fields.NumberField({ ...reqInt, initial: 0, min: 0 }),
|
||||||
damage: new fields.SchemaField({
|
damage: new fields.SchemaField({
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api
|
||||||
|
|
||||||
export class TotemPicker extends HandlebarsApplicationMixin(ApplicationV2) {
|
export class TotemPicker extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||||
|
|
||||||
constructor(linkEl, actor) {
|
constructor(linkEl, actor) {
|
||||||
@@ -24,9 +26,9 @@ export class TotemPicker extends HandlebarsApplicationMixin(ApplicationV2) {
|
|||||||
return { config: CONFIG.VERMINE };
|
return { config: CONFIG.VERMINE };
|
||||||
}
|
}
|
||||||
|
|
||||||
activateListeners(html) {
|
_onRender(context, options) {
|
||||||
super.activateListeners(html);
|
super._onRender(context, options);
|
||||||
html.querySelectorAll('.totem').forEach(el => {
|
this.element.querySelectorAll('.totem').forEach(el => {
|
||||||
el.addEventListener('click', event => {
|
el.addEventListener('click', event => {
|
||||||
const link = event.target.closest('a');
|
const link = event.target.closest('a');
|
||||||
if (!link?.dataset.totem) return;
|
if (!link?.dataset.totem) return;
|
||||||
@@ -80,9 +82,9 @@ export class ActorPicker extends HandlebarsApplicationMixin(ApplicationV2) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
activateListeners(html) {
|
_onRender(context, options) {
|
||||||
super.activateListeners(html);
|
super._onRender(context, options);
|
||||||
html.querySelectorAll('.actor').forEach(el => {
|
this.element.querySelectorAll('.actor').forEach(el => {
|
||||||
el.addEventListener('click', async event => {
|
el.addEventListener('click', async event => {
|
||||||
const div = event.target.closest('div');
|
const div = event.target.closest('div');
|
||||||
const actorId = div?.dataset.actorId;
|
const actorId = div?.dataset.actorId;
|
||||||
@@ -148,15 +150,15 @@ export class TraitSelector extends HandlebarsApplicationMixin(ApplicationV2) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
activateListeners(html) {
|
_onRender(context, options) {
|
||||||
super.activateListeners(html);
|
super._onRender(context, options);
|
||||||
this._validateTraits(html);
|
this._validateTraits(this.element);
|
||||||
html.querySelectorAll('input').forEach(el => {
|
this.element.querySelectorAll('input').forEach(el => {
|
||||||
el.addEventListener('change', ev => this._onChangeInput(ev));
|
el.addEventListener('change', ev => this._onChangeInput(ev));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async _validateTraits(html) {
|
_validateTraits(html) {
|
||||||
const checks = html.querySelectorAll("input.trait-selector");
|
const checks = html.querySelectorAll("input.trait-selector");
|
||||||
for (const inp of checks) {
|
for (const inp of checks) {
|
||||||
if (this.targetItem.system.traits[inp.dataset.trait]) {
|
if (this.targetItem.system.traits[inp.dataset.trait]) {
|
||||||
@@ -165,7 +167,6 @@ export class TraitSelector extends HandlebarsApplicationMixin(ApplicationV2) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await this.render(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async _onChangeInput(ev) {
|
async _onChangeInput(ev) {
|
||||||
|
|||||||
@@ -139,9 +139,10 @@ VERMINE.creaturePatternLevels = {
|
|||||||
* Creature Size Levels configuration
|
* Creature Size Levels configuration
|
||||||
*/
|
*/
|
||||||
VERMINE.creatureSizeLevels = {
|
VERMINE.creatureSizeLevels = {
|
||||||
1: { "label": "SIZE_LEVELS.small", "attack": 2, "vigor": 1, "minorWound": 0, "majorWound": 0, "deadlyWound": 1 },
|
0: { "label": "SIZE_LEVELS.tiny", "attack": 0, "vigor": 0, "minorWound": 0, "majorWound": 0, "deadlyWound": 0 },
|
||||||
2: { "label": "SIZE_LEVELS.medium", "attack": 3, "vigor": 2, "minorWound": 0, "majorWound": 1, "deadlyWound": 1 },
|
1: { "label": "SIZE_LEVELS.small", "attack": 1, "vigor": 1, "minorWound": 0, "majorWound": 1, "deadlyWound": 1 },
|
||||||
3: { "label": "SIZE_LEVELS.large", "attack": 4, "vigor": 3, "minorWound": 1, "majorWound": 1, "deadlyWound": 1 }
|
2: { "label": "SIZE_LEVELS.medium", "attack": 2, "vigor": 2, "minorWound": 2, "majorWound": 2, "deadlyWound": 2 },
|
||||||
|
3: { "label": "SIZE_LEVELS.large", "attack": 3, "vigor": 3, "minorWound": 3, "majorWound": 3, "deadlyWound": 3 }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -112,17 +112,32 @@ export default class RollDialog extends HandlebarsApplicationMixin(foundry.appli
|
|||||||
#getHandicap() { return this.#el.querySelector("#handicap"); }
|
#getHandicap() { return this.#el.querySelector("#handicap"); }
|
||||||
#getSelfCtrl() { return this.#el.querySelector("#self_control"); }
|
#getSelfCtrl() { return this.#el.querySelector("#self_control"); }
|
||||||
|
|
||||||
getDicePool() {
|
/** Décomposition du pool de dés pour affichage dans le message. */
|
||||||
|
getPoolBreakdown() {
|
||||||
const abil = this.#getAbility();
|
const abil = this.#getAbility();
|
||||||
const abilVal = parseInt(abil?.options[abil?.selectedIndex]?.value, 10) || 0;
|
const ability = parseInt(abil?.options[abil?.selectedIndex]?.value, 10) || 0;
|
||||||
const skill = this.#getSkill();
|
const skill = this.#getSkill();
|
||||||
const skillPool = parseInt(skill?.options[skill?.selectedIndex]?.dataset?.pool, 10) || 0;
|
const skillPool = parseInt(skill?.options[skill?.selectedIndex]?.dataset?.pool, 10) || 0;
|
||||||
const sc = parseInt(this.#getSelfCtrl()?.value, 10) || 0;
|
const selfControl = parseInt(this.#getSelfCtrl()?.value, 10) || 0;
|
||||||
const specChecked = this.#el.querySelector("#usingSpecialization")?.checked;
|
const specChecked = this.hasSpecialtySelected();
|
||||||
const helped = this.#el.querySelector("#helped")?.checked;
|
const helped = this.#el.querySelector("#helped")?.checked;
|
||||||
const tools = this.#el.querySelector("input[name='usingTools']:checked")?.value !== "0";
|
const toolsChecked = this.#el.querySelector("input[name='usingTools']:checked");
|
||||||
const bonuses = (specChecked ? 1 : 0) + (helped ? 1 : 0) + (tools ? 1 : 0);
|
const tools = toolsChecked && toolsChecked.value !== "0";
|
||||||
return (abilVal + sc + skillPool + bonuses) || 0;
|
const group = parseInt(this.#el.querySelector("#group")?.value, 10) || 0;
|
||||||
|
const specialty = specChecked ? 1 : 0;
|
||||||
|
const help = helped ? 1 : 0;
|
||||||
|
const tooling = tools ? 1 : 0;
|
||||||
|
const total = ability + skillPool + selfControl + specialty + help + tooling + group;
|
||||||
|
return { ability, skill: skillPool, selfControl, specialty, help, tooling, group, total };
|
||||||
|
}
|
||||||
|
|
||||||
|
getDicePool() {
|
||||||
|
return this.getPoolBreakdown().total;
|
||||||
|
}
|
||||||
|
|
||||||
|
getSpecialtyName() {
|
||||||
|
const checked = this.#el.querySelector("input[name='usingSpecialization']:checked");
|
||||||
|
return checked && checked.value !== "aucune" ? checked.value : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
getDifficultySelect() {
|
getDifficultySelect() {
|
||||||
@@ -206,18 +221,8 @@ export default class RollDialog extends HandlebarsApplicationMixin(foundry.appli
|
|||||||
}
|
}
|
||||||
|
|
||||||
#calculateBonusCount() {
|
#calculateBonusCount() {
|
||||||
let b = 0;
|
const b = this.getPoolBreakdown();
|
||||||
if (this.#el.querySelector("#helped")?.checked) b += 1;
|
return b.specialty + b.help + b.tooling + b.group + b.selfControl;
|
||||||
b += parseInt(this.#el.querySelector("#group")?.value, 10) || 0;
|
|
||||||
b += parseInt(this.#getSelfCtrl()?.value, 10) || 0;
|
|
||||||
const tools = this.#el.querySelector("input[name='usingTools']:checked");
|
|
||||||
if (tools && tools.value !== "0") b += 1;
|
|
||||||
const human = this.#el.querySelector("#human-totem");
|
|
||||||
if (human?.checked) b += parseInt(this.#actor?.system?.adaptation?.totems?.human?.value, 10) || 0;
|
|
||||||
const adapted = this.#el.querySelector("#adapted-totem");
|
|
||||||
if (adapted?.checked) b += parseInt(this.#actor?.system?.adaptation?.totems?.adapted?.value, 10) || 0;
|
|
||||||
if (this.hasSpecialtySelected()) b += 1;
|
|
||||||
return b;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#updateUI() {
|
#updateUI() {
|
||||||
@@ -318,7 +323,9 @@ export default class RollDialog extends HandlebarsApplicationMixin(foundry.appli
|
|||||||
keepTotem: this.getKeepTotem(),
|
keepTotem: this.getKeepTotem(),
|
||||||
skillCategory: this.getSkillCategory(),
|
skillCategory: this.getSkillCategory(),
|
||||||
skillLevel: this.getSkillLevel(),
|
skillLevel: this.getSkillLevel(),
|
||||||
hasSpecialty: this.hasSpecialtySelected()
|
hasSpecialty: this.hasSpecialtySelected(),
|
||||||
|
poolBreakdown: this.getPoolBreakdown(),
|
||||||
|
specialtyName: this.getSpecialtyName()
|
||||||
});
|
});
|
||||||
|
|
||||||
this.close();
|
this.close();
|
||||||
|
|||||||
@@ -54,7 +54,6 @@ export function prepareActiveEffectCategories(effects) {
|
|||||||
|
|
||||||
// Iterate over active effects, classifying them into categories
|
// Iterate over active effects, classifying them into categories
|
||||||
for ( let e of effects ) {
|
for ( let e of effects ) {
|
||||||
e._getSourceName(); // Trigger a lookup for the source name
|
|
||||||
if ( e.disabled ) categories.inactive.effects.push(e);
|
if ( e.disabled ) categories.inactive.effects.push(e);
|
||||||
else if ( e.isTemporary ) categories.temporary.effects.push(e);
|
else if ( e.isTemporary ) categories.temporary.effects.push(e);
|
||||||
else categories.passive.effects.push(e);
|
else categories.passive.effects.push(e);
|
||||||
|
|||||||
+64
-15
@@ -184,10 +184,9 @@ export class VermineCombat extends Combat {
|
|||||||
// encounter check
|
// encounter check
|
||||||
}
|
}
|
||||||
|
|
||||||
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
async rollInitiative(ids, {formula=null, updateTurn=true, messageMode, messageOptions={}}={}) {
|
||||||
// roll initiative
|
// roll initiative
|
||||||
return super.rollInitiative(ids, formula, messageOptions)
|
return super.rollInitiative(ids, {formula, updateTurn, messageMode, messageOptions});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nextRound() {
|
nextRound() {
|
||||||
@@ -224,24 +223,74 @@ export class VermineCombat extends Combat {
|
|||||||
|
|
||||||
export class VermineCombatTracker extends foundry.applications.sidebar.tabs.CombatTracker {
|
export class VermineCombatTracker extends foundry.applications.sidebar.tabs.CombatTracker {
|
||||||
|
|
||||||
get template() {
|
/** @override */
|
||||||
return "systems/vermine2047/templates/combat-tracker.hbs";
|
static PARTS = {
|
||||||
}
|
main: {
|
||||||
|
template: "systems/vermine2047/templates/combat-tracker.hbs",
|
||||||
async getData(options) {
|
root: true
|
||||||
const context = await super.getData(options);
|
|
||||||
|
|
||||||
if (!context.hasCombat) {
|
|
||||||
return context;
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @override */
|
||||||
|
async _prepareContext(options) {
|
||||||
|
const context = await super._prepareContext(options);
|
||||||
|
context.user = game.user;
|
||||||
|
|
||||||
|
const combat = this.viewed;
|
||||||
|
const hasCombat = combat !== null;
|
||||||
|
const combats = this.combats;
|
||||||
|
const currentIdx = combats.indexOf(combat);
|
||||||
|
const isPlayerTurn = combat?.combatant?.players?.includes(game.user);
|
||||||
|
const canControl = combat?.turn && combat.turn.between(1, combat.turns.length - 2)
|
||||||
|
? combat.canUserModify(game.user, "update", { turn: 0 })
|
||||||
|
: combat?.canUserModify(game.user, "update", { round: 0 });
|
||||||
|
|
||||||
|
Object.assign(context, {
|
||||||
|
combat,
|
||||||
|
hasCombat,
|
||||||
|
combatCount: combats.length,
|
||||||
|
currentIndex: currentIdx + 1,
|
||||||
|
previousId: combats[currentIdx - 1]?.id,
|
||||||
|
nextId: combats[currentIdx + 1]?.id,
|
||||||
|
round: combat?.round,
|
||||||
|
control: isPlayerTurn && canControl,
|
||||||
|
linked: combat?.scene !== null,
|
||||||
|
cssClass: combats.length > 7 ? "cycle" : combats.length ? "tabbed" : "",
|
||||||
|
cssId: "combat",
|
||||||
|
tabName: "combat",
|
||||||
|
labels: {
|
||||||
|
scope: game.i18n.localize(`COMBAT.${combat?.scene ? "Linked" : "Unlinked"}`)
|
||||||
|
},
|
||||||
|
turns: []
|
||||||
|
});
|
||||||
|
|
||||||
|
if ( combat ) {
|
||||||
|
for ( const [i, combatant] of combat.turns.entries() ) {
|
||||||
|
if ( !combatant.visible ) continue;
|
||||||
|
context.turns.push(await this._prepareTurnContext(combat, combatant, i));
|
||||||
|
}
|
||||||
|
}
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
activateListeners(html) {
|
/** @override */
|
||||||
super.activateListeners(html);
|
async _prepareTurnContext(combat, combatant, index) {
|
||||||
html.querySelectorAll("[data-attitude]").forEach(el => {
|
const turn = await super._prepareTurnContext(combat, combatant, index);
|
||||||
|
const actor = combatant.actor;
|
||||||
|
turn.attitude = combatant.getFlag("world", "attitude") || "active";
|
||||||
|
turn.isPlayer = actor?.hasPlayerOwner ?? false;
|
||||||
|
turn.isNpc = !!actor && !actor.hasPlayerOwner;
|
||||||
|
turn.owner = combatant.isOwner;
|
||||||
|
turn.defeated = combatant.isDefeated;
|
||||||
|
turn.hasRolled = combatant.initiative !== null;
|
||||||
|
turn.hasResource = combatant.resource !== null && combatant.resource !== undefined;
|
||||||
|
turn.effects = (turn.effects?.icons ?? []).map(e => e.img);
|
||||||
|
return turn;
|
||||||
|
}
|
||||||
|
|
||||||
|
_onRender(context, options) {
|
||||||
|
super._onRender(context, options);
|
||||||
|
this.element.querySelectorAll("[data-attitude]").forEach(el => {
|
||||||
el.addEventListener("click", this._setStatut.bind(this));
|
el.addEventListener("click", this._setStatut.bind(this));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ export const preloadHandlebarsTemplates = async function () {
|
|||||||
// npc partials
|
// npc partials
|
||||||
"systems/vermine2047/templates/actor/npc/npc-combat.hbs",
|
"systems/vermine2047/templates/actor/npc/npc-combat.hbs",
|
||||||
"systems/vermine2047/templates/actor/parts/npc-skill-category.hbs",
|
"systems/vermine2047/templates/actor/parts/npc-skill-category.hbs",
|
||||||
|
"systems/vermine2047/templates/actor/parts/npc-skill-item.hbs",
|
||||||
|
|
||||||
// creature partials
|
// creature partials
|
||||||
"systems/vermine2047/templates/actor/creature/creature-combat.hbs",
|
"systems/vermine2047/templates/actor/creature/creature-combat.hbs",
|
||||||
@@ -100,6 +101,21 @@ export const registerHandlebarsHelpers = function () {
|
|||||||
return game.i18n.localize(arrayLabel + "." + objectLabel + ".name");
|
return game.i18n.localize(arrayLabel + "." + objectLabel + ".name");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Return an object of skills ordered alphabetically by their localized
|
||||||
|
// display name (easier to find a skill quickly). Use with `{{#each}}`.
|
||||||
|
Handlebars.registerHelper('sortedSkills', function (skills) {
|
||||||
|
if (!skills || typeof skills !== 'object') return skills;
|
||||||
|
const sorted = {};
|
||||||
|
Object.keys(skills)
|
||||||
|
.sort((a, b) => {
|
||||||
|
const na = game.i18n.localize(`SKILLS.${a}.name`).toLocaleLowerCase();
|
||||||
|
const nb = game.i18n.localize(`SKILLS.${b}.name`).toLocaleLowerCase();
|
||||||
|
return na.localeCompare(nb, game.i18n.lang);
|
||||||
|
})
|
||||||
|
.forEach(k => { sorted[k] = skills[k]; });
|
||||||
|
return sorted;
|
||||||
|
});
|
||||||
|
|
||||||
Handlebars.registerHelper('smarttlk', function (arrayLabel, objectLabel, key) {
|
Handlebars.registerHelper('smarttlk', function (arrayLabel, objectLabel, key) {
|
||||||
return game.i18n.localize(arrayLabel + "." + objectLabel + "." + key);
|
return game.i18n.localize(arrayLabel + "." + objectLabel + "." + key);
|
||||||
});
|
});
|
||||||
@@ -347,6 +363,9 @@ export const registerHandlebarsHelpers = function () {
|
|||||||
Handlebars.registerHelper('ifincludes', function (arg1, arg2, options) {
|
Handlebars.registerHelper('ifincludes', function (arg1, arg2, options) {
|
||||||
return (arg1.includes(arg2)) ? options.fn(this) : options.inverse(this);
|
return (arg1.includes(arg2)) ? options.fn(this) : options.inverse(this);
|
||||||
});
|
});
|
||||||
|
Handlebars.registerHelper('ifStartsWith', function (arg1, arg2, options) {
|
||||||
|
return (typeof arg1 === 'string' && arg1.startsWith(arg2)) ? options.fn(this) : options.inverse(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
//math operations
|
//math operations
|
||||||
@@ -388,4 +407,15 @@ export const registerHandlebarsHelpers = function () {
|
|||||||
Handlebars.registerHelper("setVar", function (varName, varValue, options) {
|
Handlebars.registerHelper("setVar", function (varName, varValue, options) {
|
||||||
options.data.root[varName] = varValue;
|
options.data.root[varName] = varValue;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// assign local variables in the current context (used by roll-message.hbs)
|
||||||
|
Handlebars.registerHelper("set", function (options) {
|
||||||
|
const ctx = (this && typeof this === "object") ? this : options.contexts?.[0];
|
||||||
|
if ( ctx && typeof ctx === "object" ) {
|
||||||
|
for ( const [key, value] of Object.entries(options.hash) ) {
|
||||||
|
ctx[key] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
});
|
||||||
}
|
}
|
||||||
@@ -69,8 +69,8 @@ export const registerHooks = function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// changement de la pause
|
// changement de la pause
|
||||||
Hooks.on("renderPause", async function () {
|
Hooks.on("renderGamePause", async function (app, element) {
|
||||||
const pauseEl = document.getElementById("pause");
|
const pauseEl = element ?? document.getElementById("pause");
|
||||||
if (!pauseEl || pauseEl.className !== "paused") return;
|
if (!pauseEl || pauseEl.className !== "paused") return;
|
||||||
pauseEl.querySelectorAll("img").forEach(img => {
|
pauseEl.querySelectorAll("img").forEach(img => {
|
||||||
img.src = 'systems/vermine2047/assets/images/ui/vermine_pause.webp';
|
img.src = 'systems/vermine2047/assets/images/ui/vermine_pause.webp';
|
||||||
@@ -94,17 +94,17 @@ export const registerHooks = function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
Hooks.on('getSceneControlButtons', async (controls) => {
|
Hooks.on('getSceneControlButtons', async (controls) => {
|
||||||
const tokenControls = controls.token;
|
const tokenControls = controls.tokens;
|
||||||
if (tokenControls && tokenControls.tools) {
|
if (tokenControls && tokenControls.tools) {
|
||||||
tokenControls.tools.push({
|
tokenControls.tools['dice-roller'] = {
|
||||||
name: 'Dice Roller',
|
name: 'Dice Roller',
|
||||||
title: game.i18n.localize("VERMINE.RollTool"),
|
title: game.i18n.localize("VERMINE.RollTool"),
|
||||||
icon: 'fas fa-dice-d10',
|
icon: 'fas fa-dice-d10',
|
||||||
button: true,
|
button: true,
|
||||||
onClick() {
|
onChange() {
|
||||||
RollDialog.create().then(d => d.render(true));
|
RollDialog.create().then(d => d.render(true));
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
+120
-102
@@ -29,7 +29,9 @@ export class VermineUtils {
|
|||||||
keepTotem = null,
|
keepTotem = null,
|
||||||
skillLevel = null,
|
skillLevel = null,
|
||||||
hasSpecialty = false,
|
hasSpecialty = false,
|
||||||
handicap = 0
|
handicap = 0,
|
||||||
|
poolBreakdown = null,
|
||||||
|
specialtyName = null
|
||||||
}) {
|
}) {
|
||||||
// Validate inputs
|
// Validate inputs
|
||||||
if (!actor) {
|
if (!actor) {
|
||||||
@@ -49,22 +51,13 @@ export class VermineUtils {
|
|||||||
totemBonus = this._calculateTotemDomainBonuses(skillCategory, actor);
|
totemBonus = this._calculateTotemDomainBonuses(skillCategory, actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply auto-successes and auto-thresholds
|
// Apply automatic successes from skill mastery
|
||||||
let autoSuccesses = 0;
|
|
||||||
let adjustedDifficulty = difficulty;
|
let adjustedDifficulty = difficulty;
|
||||||
|
|
||||||
if (skillLevel !== null && skillLevel !== undefined) {
|
|
||||||
autoSuccesses = this._calculateAutoSuccesses(skillLevel, hasSpecialty);
|
|
||||||
const autoThreshold = this._getAutoThreshold(skillLevel);
|
|
||||||
if (autoThreshold !== null) {
|
|
||||||
adjustedDifficulty = autoThreshold;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle human totem
|
// Handle human totem
|
||||||
if (totems.human) {
|
if (totems.human) {
|
||||||
NoD--;
|
NoD--;
|
||||||
const humanDifficulty = skillLevel !== null ? Math.max(adjustedDifficulty, difficulty) : adjustedDifficulty;
|
const humanDifficulty = adjustedDifficulty;
|
||||||
const humanFormula = `(1D10cs>=${humanDifficulty}[human_${safeUserName}]*2)`;
|
const humanFormula = `(1D10cs>=${humanDifficulty}[human_${safeUserName}]*2)`;
|
||||||
|
|
||||||
// Apply domain bonus/malus
|
// Apply domain bonus/malus
|
||||||
@@ -78,7 +71,7 @@ export class VermineUtils {
|
|||||||
// Handle adapted totem
|
// Handle adapted totem
|
||||||
if (totems.adapted) {
|
if (totems.adapted) {
|
||||||
NoD--;
|
NoD--;
|
||||||
const adaptedDifficulty = skillLevel !== null ? Math.max(adjustedDifficulty, difficulty) : adjustedDifficulty;
|
const adaptedDifficulty = adjustedDifficulty;
|
||||||
const adaptedFormula = `(1D10cs>=${adaptedDifficulty}[adapted_${safeUserName}]*2)`;
|
const adaptedFormula = `(1D10cs>=${adaptedDifficulty}[adapted_${safeUserName}]*2)`;
|
||||||
|
|
||||||
// Apply domain bonus/malus
|
// Apply domain bonus/malus
|
||||||
@@ -105,8 +98,8 @@ export class VermineUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply handicap (wounds/maluses reduce dice pool)
|
// Ensure the dice pool cannot go below zero
|
||||||
NoD = Math.max(1, NoD - handicap)
|
NoD = Math.max(0, NoD)
|
||||||
|
|
||||||
// Build base formula
|
// Build base formula
|
||||||
const baseFormula = `${NoD}d10cs>=${adjustedDifficulty}[regular_${safeUserName}]`;
|
const baseFormula = `${NoD}d10cs>=${adjustedDifficulty}[regular_${safeUserName}]`;
|
||||||
@@ -114,6 +107,27 @@ export class VermineUtils {
|
|||||||
// Build final formula
|
// Build final formula
|
||||||
formula = modFormula !== null ? `${baseFormula}+${modFormula}` : baseFormula;
|
formula = modFormula !== null ? `${baseFormula}+${modFormula}` : baseFormula;
|
||||||
|
|
||||||
|
// Reconcile the breakdown displayed in chat with the dice actually rolled.
|
||||||
|
// Domain bonuses/malus are only applied when the corresponding totem die
|
||||||
|
// is used, and totem dice replace (not add to) base-pool dice.
|
||||||
|
if (poolBreakdown) {
|
||||||
|
// Count totem dice present in the final modifier formula.
|
||||||
|
let totemDice = 0;
|
||||||
|
if (modFormula) {
|
||||||
|
if (modFormula.includes("human_")) totemDice += 1;
|
||||||
|
if (modFormula.includes("adapted_")) totemDice += 1;
|
||||||
|
}
|
||||||
|
// Only count the domain bonus of totems actually activated in the roll.
|
||||||
|
const domainBonus = (totems.human ? totemBonus.human : 0)
|
||||||
|
+ (totems.adapted ? totemBonus.adapted : 0);
|
||||||
|
const basePool = poolBreakdown.total;
|
||||||
|
poolBreakdown.totemDice = totemDice;
|
||||||
|
poolBreakdown.domainBonus = domainBonus;
|
||||||
|
// Total = nombre réel de dés lancés (NoD réguliers + dés de totem).
|
||||||
|
// Équivaut à basePool + domainBonus sauf si le pool régulier clampe à 0.
|
||||||
|
poolBreakdown.total = NoD + totemDice;
|
||||||
|
}
|
||||||
|
|
||||||
// Create the roll
|
// Create the roll
|
||||||
const roll = new Roll(formula, actor.getRollData());
|
const roll = new Roll(formula, actor.getRollData());
|
||||||
|
|
||||||
@@ -126,7 +140,6 @@ export class VermineUtils {
|
|||||||
skillCategory: skillCategory,
|
skillCategory: skillCategory,
|
||||||
skillLevel: skillLevel,
|
skillLevel: skillLevel,
|
||||||
hasSpecialty: hasSpecialty,
|
hasSpecialty: hasSpecialty,
|
||||||
autoSuccesses: autoSuccesses,
|
|
||||||
totemBonuses: { ...totemBonus },
|
totemBonuses: { ...totemBonus },
|
||||||
baseNoD: NoD,
|
baseNoD: NoD,
|
||||||
rerolls: Reroll,
|
rerolls: Reroll,
|
||||||
@@ -152,7 +165,10 @@ export class VermineUtils {
|
|||||||
skillCategory,
|
skillCategory,
|
||||||
keepTotem,
|
keepTotem,
|
||||||
skillLevel,
|
skillLevel,
|
||||||
hasSpecialty
|
hasSpecialty,
|
||||||
|
handicap,
|
||||||
|
poolBreakdown,
|
||||||
|
specialtyName
|
||||||
});
|
});
|
||||||
|
|
||||||
return roll;
|
return roll;
|
||||||
@@ -205,70 +221,13 @@ export class VermineUtils {
|
|||||||
return bonuses;
|
return bonuses;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculates automatic successes based on skill mastery level.
|
|
||||||
* @param {number} skillLevel - Skill level (0-5)
|
|
||||||
* @param {boolean} [hasSpecialty=false] - Whether a specialty is used
|
|
||||||
* @returns {number} Number of automatic successes
|
|
||||||
*/
|
|
||||||
static _calculateAutoSuccesses(skillLevel, hasSpecialty = false) {
|
|
||||||
// According to Vermine2047 rules, automatic successes are based on mastery level:
|
|
||||||
// Level 0 (Incompetent): 0 automatic successes
|
|
||||||
// Level 1 (Beginner): 0 automatic successes
|
|
||||||
// Level 2 (Proficient): 1 automatic success if specialty is used
|
|
||||||
// Level 3 (Expert): 1 automatic success
|
|
||||||
// Level 4 (Master): 1 automatic success + 1 if specialty is used
|
|
||||||
// Level 5 (Legend): 2 automatic successes
|
|
||||||
|
|
||||||
if (!skillLevel) return 0;
|
|
||||||
|
|
||||||
let autoSuccesses = 0;
|
|
||||||
|
|
||||||
switch (skillLevel) {
|
|
||||||
case 2: // Compétent
|
|
||||||
if (hasSpecialty) autoSuccesses = 1;
|
|
||||||
break;
|
|
||||||
case 3: // Expert
|
|
||||||
autoSuccesses = 1;
|
|
||||||
break;
|
|
||||||
case 4: // Maître
|
|
||||||
autoSuccesses = 1;
|
|
||||||
if (hasSpecialty) autoSuccesses += 1;
|
|
||||||
break;
|
|
||||||
case 5: // Légende
|
|
||||||
autoSuccesses = 2;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
autoSuccesses = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return autoSuccesses;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determines the automatic threshold if the skill is not mastered.
|
|
||||||
* @param {number} skillLevel - Skill level
|
|
||||||
* @returns {number|null} Automatic threshold or null if skill is mastered
|
|
||||||
*/
|
|
||||||
static _getAutoThreshold(skillLevel) {
|
|
||||||
// If the skill is not mastered (level 0 or 1), use a default threshold
|
|
||||||
// Level 0 (Incompetent): threshold = 9 (very hard)
|
|
||||||
// Level 1 (Beginner): threshold = 7 (hard)
|
|
||||||
// Level >= 2: null (use normal threshold)
|
|
||||||
|
|
||||||
if (skillLevel === 0) return 9; // Very hard
|
|
||||||
if (skillLevel === 1) return 7; // Hard
|
|
||||||
|
|
||||||
return null; // Utiliser le seuil normal
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles reroll events on dice in chat messages.
|
* Handles reroll events on dice in chat messages.
|
||||||
* @param {Object} message - The chat message containing the reroll event
|
* @param {Object} message - The chat message containing the reroll event
|
||||||
* @param {Object} ev - The reroll event
|
* @param {HTMLElement} target - The clicked die element
|
||||||
* @returns {Promise<boolean>} Whether the reroll was successful
|
* @returns {Promise<boolean>} Whether the reroll was successful
|
||||||
*/
|
*/
|
||||||
static async onReroll(message, ev) {
|
static async onReroll(message, target) {
|
||||||
// Verify user permissions
|
// Verify user permissions
|
||||||
const msgUserId = message.user?.id ?? message.user;
|
const msgUserId = message.user?.id ?? message.user;
|
||||||
if (msgUserId !== game.user?.id && !game.user?.isGM) {
|
if (msgUserId !== game.user?.id && !game.user?.isGM) {
|
||||||
@@ -277,7 +236,7 @@ export class VermineUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get reroll count
|
// Get reroll count
|
||||||
const rollMessage = ev.currentTarget.closest('div.vermine-roll-message');
|
const rollMessage = target.closest('div.vermine-roll-message');
|
||||||
if (!rollMessage) {
|
if (!rollMessage) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -287,22 +246,22 @@ export class VermineUtils {
|
|||||||
// Check if rerolls are available
|
// Check if rerolls are available
|
||||||
if (!rerollCount || parseInt(rerollCount, 10) < 1) {
|
if (!rerollCount || parseInt(rerollCount, 10) < 1) {
|
||||||
ui.notifications.warn(game.i18n.localize('VERMINE.error_no_rerolls_left'));
|
ui.notifications.warn(game.i18n.localize('VERMINE.error_no_rerolls_left'));
|
||||||
const rerollables = ev.currentTarget.closest('ul')?.querySelectorAll('.rerollable');
|
const rerollables = target.closest('ul')?.querySelectorAll('.rerollable');
|
||||||
if (rerollables) {
|
if (rerollables) {
|
||||||
rerollables.forEach(el => el.classList.remove('rerollable'));
|
rerollables.forEach(el => el.classList.remove('rerollable'));
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ev.currentTarget.classList.add('rerolled');
|
target.classList.add('rerolled');
|
||||||
|
|
||||||
// Set reroll flag
|
// Set reroll flag
|
||||||
await message.setFlag("world", "reroll", true);
|
await message.setFlag("world", "reroll", true);
|
||||||
|
|
||||||
// Get difficulty and dice type
|
// Get difficulty and dice type
|
||||||
const ulElement = ev.currentTarget.closest('ul');
|
const ulElement = target.closest('ul');
|
||||||
const difficulty = ulElement?.dataset.difficulty ?? 7;
|
const difficulty = ulElement?.dataset.difficulty ?? 7;
|
||||||
let diceType = ev.currentTarget.dataset.diceType;
|
let diceType = target.dataset.diceType;
|
||||||
|
|
||||||
// Sanitize user name
|
// Sanitize user name
|
||||||
const safeUserName = (game.user?.name ?? "user").replace(/[^a-zA-Z0-9_]/g, '_');
|
const safeUserName = (game.user?.name ?? "user").replace(/[^a-zA-Z0-9_]/g, '_');
|
||||||
@@ -331,30 +290,68 @@ export class VermineUtils {
|
|||||||
|
|
||||||
// Update die display
|
// Update die display
|
||||||
const result = reroll.dice[0]?.results[0]?.result ?? 0;
|
const result = reroll.dice[0]?.results[0]?.result ?? 0;
|
||||||
const dieSpan = ev.currentTarget.querySelector('span');
|
const dieSpan = target.querySelector('span');
|
||||||
if (dieSpan) {
|
if (dieSpan) {
|
||||||
dieSpan.innerText = result;
|
dieSpan.innerText = result;
|
||||||
}
|
}
|
||||||
|
// Update the face used for the CSS background image.
|
||||||
|
target.dataset.result = result;
|
||||||
|
|
||||||
// Update total if successful
|
// Set/clear the success class from the rerolled die (a previous success
|
||||||
|
// must be removed if the new result fails).
|
||||||
const success = reroll.dice[0]?.results[0]?.success;
|
const success = reroll.dice[0]?.results[0]?.success;
|
||||||
if (success) {
|
target.classList.toggle('success', !!success);
|
||||||
ev.currentTarget.classList.add('success');
|
target.classList.remove("rerollable");
|
||||||
const totalElement = rollMessage.querySelector('#total');
|
|
||||||
if (totalElement) {
|
// Recompute the total from the live dice in the DOM. This avoids the
|
||||||
const currentTotal = parseInt(totalElement.innerText, 10) || 0;
|
// cumulative-increment drift of the old logic (which never removed a
|
||||||
totalElement.innerText = currentTotal + reroll.total;
|
// removed success from #total). Totem dice (human/adapted) count double.
|
||||||
}
|
const totalEl = rollMessage.querySelector('#total');
|
||||||
|
if (totalEl) {
|
||||||
|
let total = 0;
|
||||||
|
rollMessage.querySelectorAll('li.die.success').forEach(die => {
|
||||||
|
const isTotem = die.classList.contains('human') || die.classList.contains('adapted');
|
||||||
|
total += isTotem ? 2 : 1;
|
||||||
|
});
|
||||||
|
totalEl.innerText = total;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update message content
|
// Update message content
|
||||||
ev.currentTarget.classList.remove("rerollable");
|
const messageContent = target.closest('div.message-content');
|
||||||
|
|
||||||
const messageContent = ev.currentTarget.closest('div.message-content');
|
|
||||||
if (messageContent) {
|
if (messageContent) {
|
||||||
const newRerollCount = parseInt(rerollCount, 10) - 1;
|
const newRerollCount = parseInt(rerollCount, 10) - 1;
|
||||||
rollMessage.querySelector('#allowed_reroll').innerText = newRerollCount;
|
rollMessage.querySelector('#allowed_reroll').innerText = newRerollCount;
|
||||||
|
|
||||||
|
// Recompute the verdict banner from the recomputed total.
|
||||||
|
const verdictEl = rollMessage.querySelector('.roll-verdict');
|
||||||
|
const requiredEl = rollMessage.querySelector('#required');
|
||||||
|
if (verdictEl && totalEl && requiredEl) {
|
||||||
|
const total = parseInt(totalEl.innerText, 10) || 0;
|
||||||
|
const required = parseInt(requiredEl.innerText, 10) || 1;
|
||||||
|
const won = total >= required;
|
||||||
|
verdictEl.classList.toggle('success', won);
|
||||||
|
verdictEl.classList.toggle('failure', !won);
|
||||||
|
const label = won
|
||||||
|
? game.i18n.localize('VERMINE.roll_success')
|
||||||
|
: game.i18n.localize('VERMINE.roll_failure');
|
||||||
|
verdictEl.innerHTML = `${won ? '<i class="fas fa-check-circle"></i>' : '<i class="fas fa-times-circle"></i>'}<span>${label}</span>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recompute the dice summary from the current die list.
|
||||||
|
const summaryEl = rollMessage.querySelector('.roll-dice-summary');
|
||||||
|
if (summaryEl) {
|
||||||
|
const stats = { regular: { count: 0, success: 0 }, human: { count: 0, success: 0 }, adapted: { count: 0, success: 0 } };
|
||||||
|
rollMessage.querySelectorAll('li.die').forEach(die => {
|
||||||
|
const type = die.classList.contains('human') ? 'human' : die.classList.contains('adapted') ? 'adapted' : 'regular';
|
||||||
|
stats[type].count += 1;
|
||||||
|
if (die.classList.contains('success')) stats[type].success += 1;
|
||||||
|
});
|
||||||
|
const mk = (key, count, s) => count ? `<span class="die-summary ${key}">${count} ${game.i18n.localize(`VERMINE.die_${key}`)} · ${s} ${game.i18n.localize('VERMINE.die_successes')}</span>` : '';
|
||||||
|
summaryEl.innerHTML = mk('regular', stats.regular.count, stats.regular.success)
|
||||||
|
+ mk('human', stats.human.count, stats.human.success)
|
||||||
|
+ mk('adapted', stats.adapted.count, stats.adapted.success);
|
||||||
|
}
|
||||||
|
|
||||||
await message.update({
|
await message.update({
|
||||||
content: messageContent.outerHTML
|
content: messageContent.outerHTML
|
||||||
});
|
});
|
||||||
@@ -380,10 +377,11 @@ export class VermineUtils {
|
|||||||
html.querySelectorAll('.rerollable').forEach(el => {
|
html.querySelectorAll('.rerollable').forEach(el => {
|
||||||
el.addEventListener('click', async (ev) => {
|
el.addEventListener('click', async (ev) => {
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
const msgId = ev.currentTarget.closest("li.message")?.dataset?.messageId;
|
const dieEl = ev.currentTarget;
|
||||||
|
const msgId = dieEl.closest("li.message")?.dataset?.messageId;
|
||||||
if (msgId) {
|
if (msgId) {
|
||||||
const message = await game.messages.get(msgId);
|
const message = await game.messages.get(msgId);
|
||||||
await VermineUtils.onReroll(message, ev);
|
await VermineUtils.onReroll(message, dieEl);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -402,6 +400,7 @@ export class VermineUtils {
|
|||||||
// Add click event for granting rerolls
|
// Add click event for granting rerolls
|
||||||
html.querySelectorAll("button.grant-reroll").forEach(el => {
|
html.querySelectorAll("button.grant-reroll").forEach(el => {
|
||||||
el.addEventListener('click', async (ev) => {
|
el.addEventListener('click', async (ev) => {
|
||||||
|
const btn = ev.currentTarget;
|
||||||
const grantedRerollElement = html.querySelector('#granted-reroll');
|
const grantedRerollElement = html.querySelector('#granted-reroll');
|
||||||
const allowedRerollElement = html.querySelector("#allowed_reroll");
|
const allowedRerollElement = html.querySelector("#allowed_reroll");
|
||||||
|
|
||||||
@@ -409,13 +408,13 @@ export class VermineUtils {
|
|||||||
allowedRerollElement.innerText = grantedRerollElement.innerText;
|
allowedRerollElement.innerText = grantedRerollElement.innerText;
|
||||||
}
|
}
|
||||||
|
|
||||||
const mesEl = ev.currentTarget.closest('[data-message-id]');
|
const mesEl = btn.closest('[data-message-id]');
|
||||||
const messageId = mesEl?.dataset?.messageId;
|
const messageId = mesEl?.dataset?.messageId;
|
||||||
|
|
||||||
if (messageId) {
|
if (messageId) {
|
||||||
ev.currentTarget.closest('.reroll-from-effort').style.display = "none";
|
btn.closest('.reroll-from-effort').style.display = "none";
|
||||||
|
|
||||||
const rollMessage = ev.currentTarget.closest(".vermine-roll-message");
|
const rollMessage = btn.closest(".vermine-roll-message");
|
||||||
if (rollMessage) {
|
if (rollMessage) {
|
||||||
const content = rollMessage.outerHTML;
|
const content = rollMessage.outerHTML;
|
||||||
const message = await game.messages.get(messageId);
|
const message = await game.messages.get(messageId);
|
||||||
@@ -467,15 +466,34 @@ export class VermineUtils {
|
|||||||
* @returns {Promise<ChatMessage>} The created chat message
|
* @returns {Promise<ChatMessage>} The created chat message
|
||||||
*/
|
*/
|
||||||
static async diplayChatRoll(roll, param) {
|
static async diplayChatRoll(roll, param) {
|
||||||
const content = await foundry.applications.handlebars.renderTemplate("systems/vermine2047/templates/roll-message.hbs", { roll, param });
|
// Aggregate dice stats per type (regular / human / adapted)
|
||||||
|
const diceStats = { regular: { count: 0, success: 0 }, human: { count: 0, success: 0 }, adapted: { count: 0, success: 0 } };
|
||||||
|
for (const die of roll.dice ?? []) {
|
||||||
|
// Flavors look like "<type>_<user>"; classify from the leading token.
|
||||||
|
const flavor = die.options?.flavor ?? "";
|
||||||
|
const prefix = flavor.split("_")[0];
|
||||||
|
const type = prefix === "human" ? "human" : prefix === "adapted" ? "adapted" : "regular";
|
||||||
|
for (const r of die.results ?? []) {
|
||||||
|
diceStats[type].count += 1;
|
||||||
|
if (r.success) diceStats[type].success += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Verdict
|
||||||
|
const required = 1 + (param.handicap ?? 0);
|
||||||
|
const total = roll._total ?? 0;
|
||||||
|
const verdict = {
|
||||||
|
success: total >= required,
|
||||||
|
total,
|
||||||
|
required
|
||||||
|
};
|
||||||
|
|
||||||
|
const content = await foundry.applications.handlebars.renderTemplate("systems/vermine2047/templates/roll-message.hbs", { roll, param, diceStats, verdict });
|
||||||
const chatData = {
|
const chatData = {
|
||||||
user: game.user?._id,
|
user: game.user?._id,
|
||||||
speaker: ChatMessage.getSpeaker(),
|
speaker: ChatMessage.getSpeaker(),
|
||||||
content: content,
|
content: content
|
||||||
roll: roll
|
|
||||||
};
|
};
|
||||||
const msg = await ChatMessage.create(chatData);
|
const msg = await ChatMessage.create(chatData);
|
||||||
await msg.setFlag('world', 'roll', roll);
|
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ Hooks.once('init', async function () {
|
|||||||
|
|
||||||
// Register sheet application classes (ApplicationV2)
|
// Register sheet application classes (ApplicationV2)
|
||||||
// Unregister core sheets
|
// Unregister core sheets
|
||||||
foundry.applications.sheets.ActorSheetV2?.unregisterSheet?.("core", "Actor", {
|
foundry.documents.collections.Actors.unregisterSheet("core", foundry.applications.sheets.ActorSheetV2, {
|
||||||
types: ["character", "npc", "group", "creature"]
|
types: ["character", "npc", "group", "creature"]
|
||||||
})
|
})
|
||||||
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1?.sheets?.ItemSheet)
|
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1?.sheets?.ItemSheet)
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Acuité auditive
|
||||||
|
type: evolution
|
||||||
|
_id: vPA7gekUx8kUNOWB
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage est doté d’une ouïe extraordinaire. Il perçoit des ondes
|
||||||
|
sonores très aigües, ce qui lui permet d’entendre les ultrasons. Son acuité
|
||||||
|
est aussi surdéveloppée. Il peut ainsi entendre un son à une distance cinq
|
||||||
|
fois supérieure aux autres personnages. Enfin, sa sensibilité lui permet de
|
||||||
|
distinguer les sons entre eux, et ainsi d’entendre distinctement un son qui
|
||||||
|
serait couvert par le vent, par exemple. Son ouïe extraordinaire lui offre
|
||||||
|
un Bonus de 3D à tous les jets de Perception basés sur l’audition.</p>
|
||||||
|
level:
|
||||||
|
value: 3
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198965
|
||||||
|
modifiedTime: 1785775198965
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!vPA7gekUx8kUNOWB'
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Adrénaline
|
||||||
|
type: evolution
|
||||||
|
_id: DItkLLGSyjAGzruO
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le corps du personnage s’est adapté au stress du combat. Quand le
|
||||||
|
personnage subit des Blessures lors d’un combat, il ne subit pas la perte de
|
||||||
|
Dés de Réserve associée. En revanche, à la fin du combat, il perd 2D
|
||||||
|
d’Effort et 1D de Sang-Froid pour chaque Blessure subie.</p>
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198966
|
||||||
|
modifiedTime: 1785775198966
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!DItkLLGSyjAGzruO'
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Analgésie
|
||||||
|
type: evolution
|
||||||
|
_id: Cs6ibCrcPxim7QHR
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Pour le personnage, la douleur n’est qu’une information dont il ne subit
|
||||||
|
pas les conséquences néfastes. Lorsqu’il subit une Blessure, il ne perd
|
||||||
|
aucun Dé de Sang- Froid. En outre, le Malus qu’il subit à la suite de
|
||||||
|
Blessures est diminué de 1D.</p>
|
||||||
|
level:
|
||||||
|
value: 3
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198966
|
||||||
|
modifiedTime: 1785775198966
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!Cs6ibCrcPxim7QHR'
|
||||||
|
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Anticipation
|
||||||
|
type: evolution
|
||||||
|
_id: pP9hfvk5JKsoFcnt
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>En décryptant le langage corporel – ou peut-être en percevant les
|
||||||
|
phéromones – de son adversaire, le personnage ressent ses intentions. Il
|
||||||
|
peut utiliser la caractéristique Empathie plutôt que Réflexes pour esquiver
|
||||||
|
les attaques d’un adversaire humain. S’il réussit une telle esquive, il
|
||||||
|
regagne 1D dans sa Réserve de Sang-Froid.</p>
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198967
|
||||||
|
modifiedTime: 1785775198967
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!pP9hfvk5JKsoFcnt'
|
||||||
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Au bout de l’effort
|
||||||
|
type: evolution
|
||||||
|
_id: h3Q6LwnnVuj6MH4Y
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage peut dépasser ses limites. Il peut dépenser, sur un jet, un
|
||||||
|
nombre de Dés de Réserve égal à la Caractéristique utilisée +1 (contre un
|
||||||
|
seul normalement).</p>
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198967
|
||||||
|
modifiedTime: 1785775198967
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!h3Q6LwnnVuj6MH4Y'
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Aura d’optimisme
|
||||||
|
type: evolution
|
||||||
|
_id: JrtHAUqFgA75e6pq
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage dégage une imperceptible aura bienfaisante autour de lui.
|
||||||
|
La présence réconfortante du personnage réduit de 2D les pertes de Dés de la
|
||||||
|
Réserve de Groupe à la suite d’un événement traumatisant. Le personnage doit
|
||||||
|
être témoin de l’événement pour que sa Capacité fonctionne.</p>
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198967
|
||||||
|
modifiedTime: 1785775198967
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!JrtHAUqFgA75e6pq'
|
||||||
|
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Camouflage
|
||||||
|
type: evolution
|
||||||
|
_id: t4p4n73kwwVoeSMe
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage ne dégage aucune odeur et émet des phéromones qui le
|
||||||
|
rendent insignifiant aux yeux des créatures qui l’entourent. Il peut ajouter
|
||||||
|
son score en Volonté aux jets destinés à camoufler sa présence, son odeur,
|
||||||
|
ses traces ou un objet lui appartenant. S’il camoufle sa présence et qu’il
|
||||||
|
reste immobile, il bénéficie en outre de trois Réussites supplémentaires.
|
||||||
|
Dès qu’il se déplace, il doit retenter le jet sans pouvoir bénéficier des
|
||||||
|
Réussites supplémentaires.</p>
|
||||||
|
level:
|
||||||
|
value: 3
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198967
|
||||||
|
modifiedTime: 1785775198967
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!t4p4n73kwwVoeSMe'
|
||||||
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Cicatrisation rapide
|
||||||
|
type: evolution
|
||||||
|
_id: 2h0xUozy1xqLdKcE
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>La Difficulté des Actions de soin sur le personnage est réduite de 2. Le
|
||||||
|
coût en Dés de Réserves pour guérir est diminué de 1D pour chaque type de
|
||||||
|
Blessure.</p>
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198968
|
||||||
|
modifiedTime: 1785775198968
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!2h0xUozy1xqLdKcE'
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Défenses immunitaires
|
||||||
|
type: evolution
|
||||||
|
_id: oNfjRGGRVFGtfbK0
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>La Virulence d’une infection affectant le personnage est réduite de 1 –
|
||||||
|
voir Les Règles, « Maladies et infections », page 105. Lorsque le personnage
|
||||||
|
reçoit des soins pour soigner une infection, le soigneur reçoit une Réussite
|
||||||
|
supplémentaire en cas de jet réussi.</p>
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198968
|
||||||
|
modifiedTime: 1785775198968
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!oNfjRGGRVFGtfbK0'
|
||||||
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Dur au mal
|
||||||
|
type: evolution
|
||||||
|
_id: vgYLoiEqEOxrGdy6
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: <p>Le Seuil de Blessure Légère du personnage augmente de 1.</p>
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198968
|
||||||
|
modifiedTime: 1785775198968
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!vgYLoiEqEOxrGdy6'
|
||||||
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Endurance
|
||||||
|
type: evolution
|
||||||
|
_id: uGG0FrBn1QtMcxbz
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage a toujours été particulièrement résistant. Toutes les
|
||||||
|
pertes de Réserve d’Effort qu’il subit sont réduites de 1D, jusqu’à un
|
||||||
|
minimum de 1D.</p>
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198968
|
||||||
|
modifiedTime: 1785775198968
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!uGG0FrBn1QtMcxbz'
|
||||||
|
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Exosquelette
|
||||||
|
type: evolution
|
||||||
|
_id: bV6V4i1v4ORWDJSQ
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage a développé un exosquelette fait de chitine. De nombreux
|
||||||
|
endroits de son corps et de son visage sont recouverts de plaques rigides
|
||||||
|
qui lui procurent une Protection de 3/5 (L) sans lui infliger de Handicap de
|
||||||
|
Mobilité – voir Les Règles, « Handicap de Mobilité », page 70. Il bénéficie
|
||||||
|
en outre d’un Bonus de 2D aux Actions dont le but est d’intimider ou
|
||||||
|
d’effrayer. En revanche, il subit un Malus identique pour toutes les autres
|
||||||
|
Actions sociales.</p>
|
||||||
|
level:
|
||||||
|
value: 4
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198968
|
||||||
|
modifiedTime: 1785775198968
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!bV6V4i1v4ORWDJSQ'
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Force mentale
|
||||||
|
type: evolution
|
||||||
|
_id: S8AwTKDxIdez7vHB
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage a des ressources mentales insoupçonnées. Il ne subit pas de
|
||||||
|
Malus d’Épuisement aux Actions mentales et sociales quand sa Réserve de
|
||||||
|
Sang-Froid est vide. Si ses deux Réserves sont vides, il subit néanmoins le
|
||||||
|
Malus normal de 2D à toutes ses Actions.</p>
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198969
|
||||||
|
modifiedTime: 1785775198969
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!S8AwTKDxIdez7vHB'
|
||||||
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Frappe lourde
|
||||||
|
type: evolution
|
||||||
|
_id: RjdZB4Qd2V8mp44x
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Lorsque le personnage attaque à mains nues, ses dommages sont égaux à
|
||||||
|
Vigueur (C).</p>
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198969
|
||||||
|
modifiedTime: 1785775198969
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!RjdZB4Qd2V8mp44x'
|
||||||
|
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Griffes
|
||||||
|
type: evolution
|
||||||
|
_id: kPoioCvlK7H0uJB1
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Les ongles du personnage peuvent pousser en un instant pour devenir des
|
||||||
|
armes dangereuses. Ces griffes infligent des Dommages de 2 (L) et
|
||||||
|
bénéficient du Trait Rapide (2). Quand le personnage réussit une attaque et
|
||||||
|
passe la protection de sa cible, il peut dépenser jusqu’à 3D de sa Réserve
|
||||||
|
d’Effort pour infliger 1 point de Dommages supplémentaire par dé dépensé.
|
||||||
|
Ces griffes se brisent à la fin du combat et ne peuvent repousser que
|
||||||
|
lorsque le personnage aura intégralement reconstitué sa Réserve
|
||||||
|
d’Effort.</p>
|
||||||
|
level:
|
||||||
|
value: 3
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198969
|
||||||
|
modifiedTime: 1785775198969
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!kPoioCvlK7H0uJB1'
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Habitué à la faim
|
||||||
|
type: evolution
|
||||||
|
_id: EqeONvUCK7OhJaNN
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le premier jour de rationnement ou de privation totale de nourriture n’a
|
||||||
|
pas d’effet sur le personnage. Ainsi, il ne subira aucune perte de Dés de
|
||||||
|
Réserves avant le deuxième jour de privation totale ou le troisième jour de
|
||||||
|
rationnement.</p>
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198969
|
||||||
|
modifiedTime: 1785775198969
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!EqeONvUCK7OhJaNN'
|
||||||
|
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Hyperosmie
|
||||||
|
type: evolution
|
||||||
|
_id: 8ShwJQCWKHsfXLko
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage est doté d’un odorat extrêmement développé, proche de celui
|
||||||
|
d’un chien. Cette acuité lui permet de distinguer des odeurs imperceptibles
|
||||||
|
pour ses semblables. Il peut ainsi reconnaître une personne ou un animal à
|
||||||
|
son odeur et savoir si cet individu est passé dans un endroit jusqu’à une
|
||||||
|
semaine après son passage. Cela lui offre un talent incroyable pour suivre
|
||||||
|
une piste et traquer une proie : il bénéficie d’un Bonus de 3D aux jets de
|
||||||
|
Perception quand l’odorat entre en jeu. Cette Mutation s’accompagne d’une
|
||||||
|
mémoire olfactive très développée. Une fois qu’il a senti une odeur, le
|
||||||
|
personnage ne l’oublie jamais et peut la distinguer et la reconnaître sans
|
||||||
|
faillir.</p>
|
||||||
|
level:
|
||||||
|
value: 3
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198969
|
||||||
|
modifiedTime: 1785775198969
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!8ShwJQCWKHsfXLko'
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Immunité absolue
|
||||||
|
type: evolution
|
||||||
|
_id: ivx8gS0XBEcoqtdl
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage est immunisé à toutes les Infections et toutes les Toxines.
|
||||||
|
Il ne peut par ailleurs pas développer d’addiction. En contrepartie, les
|
||||||
|
médicaments et autres stimulants sont totalement inefficaces sur lui et
|
||||||
|
n’octroient aucun bénéfice que ce soit.</p>
|
||||||
|
level:
|
||||||
|
value: 4
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198970
|
||||||
|
modifiedTime: 1785775198970
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!ivx8gS0XBEcoqtdl'
|
||||||
|
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Indestructible
|
||||||
|
type: evolution
|
||||||
|
_id: HfC2oOARrpKnpoQf
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le corps du personnage a gagné en densité, mais son poids augmente de 25
|
||||||
|
% et ses besoins nutritionnels explosent. Il gagne un cercle dans chaque
|
||||||
|
type de Blessure, subit (I) Handicap permanent de Mobilité, et a besoin de
|
||||||
|
deux rations de nourriture plutôt qu’une. En cas de rationnement de
|
||||||
|
nourriture, il subit des pertes de Réserves équivalentes à une absence
|
||||||
|
totale de nourriture.</p>
|
||||||
|
level:
|
||||||
|
value: 4
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198970
|
||||||
|
modifiedTime: 1785775198970
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!HfC2oOARrpKnpoQf'
|
||||||
|
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Insensible
|
||||||
|
type: evolution
|
||||||
|
_id: Re0aeZzupnz3EL6E
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le corps du personnage sécrète de grandes quantités d’hormones en cas de
|
||||||
|
stress intense, ce qui lui permet d’y résister plus facilement. L’Intensité
|
||||||
|
des événements stressants est diminuée d’un niveau pour le personnage. Il
|
||||||
|
n’a même pas à tenter de jet pour résister à un événement Mineur – voir Les
|
||||||
|
Règles, « Événements », page 92.</p>
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198970
|
||||||
|
modifiedTime: 1785775198970
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!Re0aeZzupnz3EL6E'
|
||||||
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Instinct
|
||||||
|
type: evolution
|
||||||
|
_id: UxNguZd8K62nt1GH
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Un jet d’Empathie + Vigilance contre une Difficulté de 9 permet au
|
||||||
|
personnage de pressentir un danger ou une menace imminente d’origine
|
||||||
|
naturelle ou animale. Chaque Réussite obtenue lui permet d’obtenir une
|
||||||
|
information sur le danger pressenti. Si celui-ci tourne au combat, le
|
||||||
|
personnage sera considéré comme Actif pour son jet de Réaction. S’il a le
|
||||||
|
temps d’informer ses compagnons du danger, ces derniers seront Actifs
|
||||||
|
également.</p>
|
||||||
|
|
||||||
|
<p>En Modes <strong>Cauchemar </strong>et <strong>Apocalypse</strong>,
|
||||||
|
chaque Réussite au jet de Vigilance octroie au personnage 1D de Bonus au jet
|
||||||
|
de Réaction ou au jet permettant d’éviter le danger perçu.</p>
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198970
|
||||||
|
modifiedTime: 1785775198970
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!UxNguZd8K62nt1GH'
|
||||||
|
|
||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Musculature surdéveloppée
|
||||||
|
type: evolution
|
||||||
|
_id: AAw7U5tUxbUczorz
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage est exceptionnellement fort, ce que reflète sa silhouette
|
||||||
|
impressionnante. Il bénéficie d’un Bonus de 3D aux jets de Vigueur quand une
|
||||||
|
force musculaire élevée peut l’aider (soulever ou porter un objet lourd,
|
||||||
|
enfoncer une porte, abattre un mur, etc.) Lorsqu’il porte une attaque de
|
||||||
|
corps à corps ou de mêlée, sa Vigueur est considérée comme augmentée de 3D
|
||||||
|
pour calculer les Dommages de base de ses attaques. En revanche, sa force
|
||||||
|
surhumaine n’augmente pas sa précision, il ne gagne donc aucun Bonus à
|
||||||
|
l’attaque.</p>
|
||||||
|
level:
|
||||||
|
value: 3
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198971
|
||||||
|
modifiedTime: 1785775198971
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!AAw7U5tUxbUczorz'
|
||||||
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: OEil de lynx
|
||||||
|
type: evolution
|
||||||
|
_id: guC1pOfmcmitRGDo
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage bénéficie d’un Bonus de 1D sur les Actions impliquant
|
||||||
|
l’acuité visuelle.</p>
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198971
|
||||||
|
modifiedTime: 1785775198971
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!guC1pOfmcmitRGDo'
|
||||||
|
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Peau mimétique
|
||||||
|
type: evolution
|
||||||
|
_id: kFak0PMoNAuPnSfX
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>La peau du personnage peut prendre la teinte globale de son environnement
|
||||||
|
pour l’aider à se camoufler : elle deviendra plus sombre dans l’obscurité,
|
||||||
|
plus verte dans la nature… Pour activer cette Mutation, le personnage doit
|
||||||
|
dépenser 1D de sa Réserve de Sang-Froid. Dès cet instant, il bénéficie de 4D
|
||||||
|
Bonus sur tous les jets de Perception visant à rester discret. S’il attaque
|
||||||
|
sous ce camouflage sans avoir été préalablement repéré, il est considéré
|
||||||
|
comme Offensif et tous ses adversaires comme Passifs.</p>
|
||||||
|
level:
|
||||||
|
value: 4
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198971
|
||||||
|
modifiedTime: 1785775198971
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!kFak0PMoNAuPnSfX'
|
||||||
|
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Phéromones attractives
|
||||||
|
type: evolution
|
||||||
|
_id: 4jRJw5vuhZeqoKy9
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage est capable de dégager des phéromones qui attirent la
|
||||||
|
sympathie des créatures vivantes. Sans autre motivation, les humains et les
|
||||||
|
animaux sont instinctivement attirés par le personnage et ont un a priori
|
||||||
|
positif à son encontre. Le personnage peut en outre désigner un individu par
|
||||||
|
dé de Volonté et par scène. Il bénéficie d’un Bonus de 3D à ses Actions
|
||||||
|
sociales envers ces cibles. Les phéromones peuvent même annihiler toute
|
||||||
|
intention hostile. Une personne ou un animal qui souhaite agresser le
|
||||||
|
personnage, verbalement ou physiquement, doit d’abord réussir un Jet de
|
||||||
|
Volonté + Psychologie (ou de sa valeur d’Attaque s’il n’a pas de score de
|
||||||
|
Volonté) contre une Difficulté de 7. Chaque Réussite lui permet d’agir
|
||||||
|
normalement envers le personnage pendant une minute (ou un tour pendant un
|
||||||
|
combat). Le meneur est laissé seul juge d’éventuelles réactions indésirables
|
||||||
|
que ces phéromones pourraient produire chez des animaux ou des créatures
|
||||||
|
rencontrées…</p>
|
||||||
|
level:
|
||||||
|
value: 4
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198971
|
||||||
|
modifiedTime: 1785775198971
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!4jRJw5vuhZeqoKy9'
|
||||||
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Phéromones répulsives
|
||||||
|
type: evolution
|
||||||
|
_id: Y8UeTOYpGkM3nt9R
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage peut dégager des phéromones qui créent le dégoût et la
|
||||||
|
répulsion chez toutes les créatures vivantes. Lorsqu’il dégage ces
|
||||||
|
phéromones, tous les humains et les animaux dans un rayon d’une dizaine de
|
||||||
|
mètres se sentent mal à l’aise en présence du personnage et, sauf autre
|
||||||
|
motivation, s’éloignent de lui sans réellement comprendre pourquoi. Le
|
||||||
|
personnage peut en outre désigner un individu ou une créature par point de
|
||||||
|
Volonté et par scène. Ces cibles ne peuvent ni lui adresser la parole, ni
|
||||||
|
s’approcher, ni attaquer le personnage sauf si elles réussissent un Jet de
|
||||||
|
Volonté + Psychologie (ou de leur valeur d’Attaque si elles n’ont pas de
|
||||||
|
score de Volonté) contre une Difficulté de 7. Chaque Réussite leur permet
|
||||||
|
d’agir normalement envers le personnage pendant une minute (ou un tour
|
||||||
|
pendant un combat) mais elles subissent un Malus de 1D à toutes leurs
|
||||||
|
Actions envers lui. Le meneur est laissé seul juge d’éventuelles réactions
|
||||||
|
indésirables que ces phéromones pourraient produire chez des animaux ou des
|
||||||
|
créatures rencontrées…</p>
|
||||||
|
level:
|
||||||
|
value: 4
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198972
|
||||||
|
modifiedTime: 1785775198972
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!Y8UeTOYpGkM3nt9R'
|
||||||
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Réflexes éclairs
|
||||||
|
type: evolution
|
||||||
|
_id: BNZeEd0CpTgYkEou
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage réagit si rapidement au danger qu’il bénéficie d’un Bonus
|
||||||
|
de 2D à son jet de Réaction.</p>
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198972
|
||||||
|
modifiedTime: 1785775198972
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!BNZeEd0CpTgYkEou'
|
||||||
|
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Régénération
|
||||||
|
type: evolution
|
||||||
|
_id: wH5OPnv4cenzpgws
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Les plaies du personnage se referment très rapidement. Après une nuit de
|
||||||
|
repos complet, le personnage peut réduire le niveau d’une Blessure ou
|
||||||
|
effacer une Blessure Légère sans dépenser de dés, il peut ensuite dépenser
|
||||||
|
des dés pour soigner plusieurs autres Blessures s’il possède suffisamment de
|
||||||
|
Dés de Réserves. Le coût de guérison est réduit de 2D pour chaque type de
|
||||||
|
Blessure.</p>
|
||||||
|
level:
|
||||||
|
value: 3
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198972
|
||||||
|
modifiedTime: 1785775198972
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!wH5OPnv4cenzpgws'
|
||||||
|
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Résistance à la chaleur
|
||||||
|
type: evolution
|
||||||
|
_id: rCQOrAzaCgCF0Dri
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage est particulièrement résistant aux températures élevées. Il
|
||||||
|
ne subit jamais de perte de Dés de Réserves ni de Malus à la récupération à
|
||||||
|
cause de fortes chaleurs. Il ne subit pas non plus les Dommages cumulatifs
|
||||||
|
en cas d’exposition prolongée<em> – voir Les Règles, « Brûlures »</em>, page
|
||||||
|
99.</p>
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198973
|
||||||
|
modifiedTime: 1785775198973
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!rCQOrAzaCgCF0Dri'
|
||||||
|
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Résistance au froid
|
||||||
|
type: evolution
|
||||||
|
_id: DHv0PXsIgQ8rPPUY
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage est particulièrement résistant aux grands froids. Il ne
|
||||||
|
subit jamais de perte de Dés de Réserves ni de Malus à la récupération à
|
||||||
|
cause du froid extrême. Il ne subit pas non plus les Dommages cumulatifs en
|
||||||
|
cas d’exposition prolongée<em> – voir Les Règles, « Froid et chaleur »</em>,
|
||||||
|
page 99.</p>
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198972
|
||||||
|
modifiedTime: 1785775198972
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!DHv0PXsIgQ8rPPUY'
|
||||||
|
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Résistance aux toxines
|
||||||
|
type: evolution
|
||||||
|
_id: IMXQRepTNtiHZcaf
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>La Virulence des poisons et toxines qui affectent le personnage est
|
||||||
|
réduite de 1 – voir Les Règles, « Venins et poisons », page 107. Le
|
||||||
|
personnage peut en outre sélectionner une famille animale ou végétale
|
||||||
|
(guêpes, araignées, champignons, méduses, batraciens…) en accord avec le
|
||||||
|
meneur. Les toxines sécrétées par cette famille voient leur Virulence
|
||||||
|
réduite de 3.</p>
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198973
|
||||||
|
modifiedTime: 1785775198973
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!IMXQRepTNtiHZcaf'
|
||||||
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Résistance
|
||||||
|
type: evolution
|
||||||
|
_id: nxy53EF4ZRSSwCvr
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage ne subit pas de Malus d’Épuisement à ses Actions physiques
|
||||||
|
et manuelles quand sa Réserve d’Effort est vide. Si ses deux Réserves sont
|
||||||
|
vides, il subit néanmoins le Malus normal de 2D à toutes ses Actions.</p>
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198972
|
||||||
|
modifiedTime: 1785775198972
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!nxy53EF4ZRSSwCvr'
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Santé de fer
|
||||||
|
type: evolution
|
||||||
|
_id: uneyg1G0Gpbb7l5P
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Lorsque le personnage est blessé, les Malus de récupération à la Réserve
|
||||||
|
d’Effort ne se cumulent pas, seule la Blessure la plus grave est prise en
|
||||||
|
compte. Le coût en Dés de Réserves pour réduire une Blessure est en outre
|
||||||
|
réduit de 2D.</p>
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198973
|
||||||
|
modifiedTime: 1785775198973
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!uneyg1G0Gpbb7l5P'
|
||||||
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Silencieux
|
||||||
|
type: evolution
|
||||||
|
_id: mxzf2Od6SMlvhKon
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage anticipe chaque mouvement qui pourrait le faire repérer. Il
|
||||||
|
bénéficie d’un Bonus de 1D sur toutes ses Actions liées à la discrétion
|
||||||
|
lorsqu’il est seul.</p>
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198973
|
||||||
|
modifiedTime: 1785775198973
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!mxzf2Od6SMlvhKon'
|
||||||
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Sommeil réparateur
|
||||||
|
type: evolution
|
||||||
|
_id: 71goz10chR7bPQZY
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage n’a besoin de dormir que quatre heures par nuit. Il
|
||||||
|
récupère toujours la totalité de ses Réserves s’il a pu bénéficier de quatre
|
||||||
|
heures de repos ininterrompu, même dans des conditions difficiles.</p>
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198973
|
||||||
|
modifiedTime: 1785775198973
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!71goz10chR7bPQZY'
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Surhumain
|
||||||
|
type: evolution
|
||||||
|
_id: haijrxkf8tAxmWx5
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le joueur sélectionne une de ses Caractéristiques. Il augmente son score
|
||||||
|
de 1D et peut atteindre 4D. Quelle que soit la Caractéristique choisie, le
|
||||||
|
personnage dégage une aura étrange, difficilement identifiable, mais à
|
||||||
|
laquelle personne n’est indifférent.</p>
|
||||||
|
level:
|
||||||
|
value: 4
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198974
|
||||||
|
modifiedTime: 1785775198974
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!haijrxkf8tAxmWx5'
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Sympathie
|
||||||
|
type: evolution
|
||||||
|
_id: qdtjHLeC7pKh57tP
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage dégage des phéromones qui rendent les personnes qui le
|
||||||
|
côtoient au quotidien plus compatissantes envers lui. Lorsqu’il souhaite
|
||||||
|
dépenser des Dés de la Réserve de Groupe, il a le droit de voter avec les
|
||||||
|
autres membres du Groupe.</p>
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198974
|
||||||
|
modifiedTime: 1785775198974
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!qdtjHLeC7pKh57tP'
|
||||||
|
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Toucher empoisonné
|
||||||
|
type: evolution
|
||||||
|
_id: VIPHgGAqSklGFhFh
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage sécrète par la paume de ses mains un poison
|
||||||
|
particulièrement dangereux. S’il entre en contact avec la peau d’un humain
|
||||||
|
ou d’un animal (ce qui, en combat, nécessite une attaque au Corps à corps
|
||||||
|
qui passe la Protection de la cible), il peut dépenser un ou plusieurs Dés
|
||||||
|
de ses deux Réserves pour sécréter du poison. Ce dernier a une Virulence de
|
||||||
|
5 + le nombre de Dés d’Efforts dépensés – voir Les Règles, « Venins et
|
||||||
|
poisons », page 107. La victime subira alors une Blessure Légère
|
||||||
|
immédiatement, et une autre par minute pour chaque Dé de Sang-Froid dépensé.
|
||||||
|
Chaque Réussite au jet de Santé réalisé par la victime pour résister au
|
||||||
|
poison réduit la durée de l’empoisonnement d’une minute.</p>
|
||||||
|
level:
|
||||||
|
value: 4
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198974
|
||||||
|
modifiedTime: 1785775198974
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!VIPHgGAqSklGFhFh'
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Vigilance
|
||||||
|
type: evolution
|
||||||
|
_id: ZcvIaqqfjvy67qWx
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage est habitué à ne dormir que d’un oeil et à réagir au
|
||||||
|
moindre bruit ou mouvement suspect. Il n’est jamais considéré comme Passif
|
||||||
|
et gagne une Réussite supplémentaire sur tous ses jets réussis impliquant la
|
||||||
|
Compétence Vigilance.</p>
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198974
|
||||||
|
modifiedTime: 1785775198974
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!ZcvIaqqfjvy67qWx'
|
||||||
|
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Vision nocturne
|
||||||
|
type: evolution
|
||||||
|
_id: noIASNejaUkv0Qo3
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Les yeux du personnage se rapprochent de ceux d’un félin. Une faible
|
||||||
|
lumière, comme celle des étoiles, lui suffit à voir très clairement. En
|
||||||
|
revanche, quand la luminosité est si faible, il ne perçoit que très peu les
|
||||||
|
nuances de couleur. Tant qu’une infime source de lumière est disponible, le
|
||||||
|
manque de luminosité ne lui inflige aucun Malus aux jets de Perception basés
|
||||||
|
sur la vue. Dans le noir complet, cependant, il est aussi aveugle que
|
||||||
|
quiconque. Lorsque ses yeux percent les ténèbres, ils reflètent la lumière,
|
||||||
|
ce qui peut le rendre visible de loin et lui donner une apparence
|
||||||
|
troublante.</p>
|
||||||
|
level:
|
||||||
|
value: 3
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198974
|
||||||
|
modifiedTime: 1785775198974
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!noIASNejaUkv0Qo3'
|
||||||
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
folder: WTyHT2h0fsSnUHFT
|
||||||
|
name: Volonté de fer
|
||||||
|
type: evolution
|
||||||
|
_id: flRHah4HO4JQ4DaM
|
||||||
|
img: systems/vermine2047/assets/icons/items/evolution.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage bénéficie d’un Bonus de 1D sur tous ses jets liés au moral,
|
||||||
|
au stress ou à la détermination.</p>
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 4
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198975
|
||||||
|
modifiedTime: 1785775198975
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!flRHah4HO4JQ4DaM'
|
||||||
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
name: Adaptation
|
||||||
|
sorting: a
|
||||||
|
folder: null
|
||||||
|
type: Item
|
||||||
|
_id: WTyHT2h0fsSnUHFT
|
||||||
|
description: ''
|
||||||
|
sort: 100000
|
||||||
|
color: null
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: Folder.WTyHT2h0fsSnUHFT
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775198946
|
||||||
|
modifiedTime: 1785775198993
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!folders!WTyHT2h0fsSnUHFT'
|
||||||
|
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
folder: 965pjqqbhRQqxXE4
|
||||||
|
name: Adaptabilité
|
||||||
|
type: ability
|
||||||
|
_id: zfeNmyLcOyfD4AxI
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Lorsque le personnage utilise une Compétence qu’il ne possède pas, il
|
||||||
|
ignore son Handicap de Rareté, comme s’il s’agissait d’une Compétence
|
||||||
|
basique.</p>
|
||||||
|
type: character
|
||||||
|
totem: loner
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498760
|
||||||
|
modifiedTime: 1785775498760
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!zfeNmyLcOyfD4AxI'
|
||||||
|
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
folder: BJAxv25PiSk29dK0
|
||||||
|
name: Adaptation
|
||||||
|
type: ability
|
||||||
|
_id: CQeFYqMRYMFa6pAa
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage peut se lier avec une espèce animale ou végétale. Il
|
||||||
|
devient immunisé aux poisons ou venins de cette espèce. S’il s’agit
|
||||||
|
d’animaux, il peut apaiser des individus de cette espèce comme s’il
|
||||||
|
possédait la Capacité « Apaisement » – voir page 99. S’il l’a acquise, un
|
||||||
|
jet réussi permet de les rendre amicaux et il peut être accompagné d’une
|
||||||
|
nuée d’animaux de Taille 0 ou d’un petit groupe de Taille 1 qui le
|
||||||
|
défendront de leur mieux. S’il s’agit de végétaux, il bénéficie des effets
|
||||||
|
de la Capacité « Berceau » comme s’il la possédait – voir page 99. S’il l’a
|
||||||
|
acquise, les effets sont doublés (Bonus de 2D et coûts de guérison diminués
|
||||||
|
de 2D) et le personnage est capable de les faire pousser en quelques
|
||||||
|
heures.</p>
|
||||||
|
type: character
|
||||||
|
totem: symbiote
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 3
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498762
|
||||||
|
modifiedTime: 1785775498762
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!CQeFYqMRYMFa6pAa'
|
||||||
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
folder: K27yLKAXwiIQTzfW
|
||||||
|
name: Alpha
|
||||||
|
type: ability
|
||||||
|
_id: NOBtH3xQJPptBU6I
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le Groupe laisse l’un des siens combattre l’un des membres d’un groupe
|
||||||
|
adverse. Il désigne un personnage comme son champion (en recourant au vote
|
||||||
|
au besoin). Ce dernier affronte l’adversaire de son choix, pendant que tous
|
||||||
|
les autres protagonistes doivent assister à ce duel singulier sans
|
||||||
|
intervenir. Les créatures sans aucun intellect ne sont pas affectées. Cette
|
||||||
|
Capacité ne fonctionne qu’en présence d’au moins la moitié du Groupe.</p>
|
||||||
|
type: group
|
||||||
|
totem: predator
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775496862
|
||||||
|
modifiedTime: 1785775496862
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!NOBtH3xQJPptBU6I'
|
||||||
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
folder: 84EDVIIqk9YkrBgF
|
||||||
|
name: Analyse
|
||||||
|
type: ability
|
||||||
|
_id: Vggeykg6wQGTaR2o
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage étudie une zone ou un objet pour savoir ce qui s’y est
|
||||||
|
passé ou ce à quoi il a servi. Il peut poser une question au meneur, avant
|
||||||
|
d’effectuer un jet de Perception + Armurerie / Artisanat / Mécanique /
|
||||||
|
Technologie (en fonction de l’objet). Le tableau ci-dessous indique la
|
||||||
|
Difficulté en fonction de la période à laquelle remontent les événements.
|
||||||
|
Pour chaque Réussite, le personnage obtient une information.</p>
|
||||||
|
type: character
|
||||||
|
totem: builder
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498746
|
||||||
|
modifiedTime: 1785775498746
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!Vggeykg6wQGTaR2o'
|
||||||
|
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
folder: BJAxv25PiSk29dK0
|
||||||
|
name: Apaisement
|
||||||
|
type: ability
|
||||||
|
_id: X1RckrwGCbG7IQVR
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage peut apaiser un animal ou une créature solitaire. Il lui
|
||||||
|
faudra réussir un jet d’Empathie + Animalisme dont la Difficulté dépend du
|
||||||
|
degré d’agressivité de la créature, déterminé par le meneur. La taille est
|
||||||
|
appliquée en Handicap. S’il s’agit d’une espèce incapable de communiquer
|
||||||
|
avec l’homme, le jet aura deux degrés de Handicap supplémentaires. Si le jet
|
||||||
|
est réussi, l’état d’esprit de l’animal ou de la créature s’améliore d’un
|
||||||
|
cran. Il ne deviendra pas amical d’un coup.</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li>En Mode <strong>Cauchemar</strong>, le Handicap ne sera que de (I), peu
|
||||||
|
importe la taille de la créature.</li>
|
||||||
|
|
||||||
|
<li>En Mode <strong>Apocalypse</strong>, la Capacité peut également affecter
|
||||||
|
une meute ou une nuée.</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
type: character
|
||||||
|
totem: symbiote
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498763
|
||||||
|
modifiedTime: 1785775498763
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!X1RckrwGCbG7IQVR'
|
||||||
|
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
folder: X6lFKdHexGbMpMHh
|
||||||
|
name: Appât du gain
|
||||||
|
type: ability
|
||||||
|
_id: 1UA2GqAD1OXwuAZx
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Les personnages tirent leur force de leurs trouvailles. Chaque découverte
|
||||||
|
est pour eux l’occasion de se réjouir. Après chaque scène où le Groupe a mis
|
||||||
|
la main sur des ressources ou du matériel de Rareté supérieur ou égale à 7
|
||||||
|
sans avoir recours à une Capacité, ses membres regagnent 1D dans chacune de
|
||||||
|
leurs réserves, y compris celle de Groupe. S’ils trouvent un objet de Rareté
|
||||||
|
supérieure ou égale à 9, le gain est de 2D par Réserve, et le Groupe gagne
|
||||||
|
1D d’expérience de Découverte.</p>
|
||||||
|
type: group
|
||||||
|
totem: scavenger
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 3
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775496847
|
||||||
|
modifiedTime: 1785775496847
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!1UA2GqAD1OXwuAZx'
|
||||||
|
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
folder: xtfO1fRGXZx3bm2j
|
||||||
|
name: Apprentissage commun
|
||||||
|
type: ability
|
||||||
|
_id: dDIHKXaimA3aaOdO
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Les personnages apprennent au contact les uns des autres : les Dés
|
||||||
|
d’Expérience de Groupe peuvent bénéficier à tous les personnages pour leurs
|
||||||
|
jets individuels sur un apprentissage commun, moyennant la dépense de 1D de
|
||||||
|
Réserve de Groupe par personnage impliqué dans l’apprentissage.</p>
|
||||||
|
type: group
|
||||||
|
totem: symbiote
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775496872
|
||||||
|
modifiedTime: 1785775496872
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!dDIHKXaimA3aaOdO'
|
||||||
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
folder: YdwBSZ49OdVFRGIW
|
||||||
|
name: Architecture d'antan
|
||||||
|
type: ability
|
||||||
|
_id: vXAgLueVVeORjEzO
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le Groupe érige une structure de bric et de broc aussi solide que si elle
|
||||||
|
était construite en matériaux de l’ancien temps. Tant que les personnages
|
||||||
|
disposent de quoi monter un abri – moyennant quelques Actions de fouille –,
|
||||||
|
le meneur considérera qu’il s’agit d’une construction en dur, pour tout ce
|
||||||
|
qui est repos, protection des intempéries, couvert face aux tirs…
|
||||||
|
L’intérieur de la construction reste cependant vide et si les personnages
|
||||||
|
doivent dormir, ils le feront à même le sol – ou dans les sacs de couchage
|
||||||
|
dont ils disposent dans leur équipement ou sur des couches qu’ils auront
|
||||||
|
fabriquées par ailleurs.</p>
|
||||||
|
type: group
|
||||||
|
totem: builder
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775496840
|
||||||
|
modifiedTime: 1785775496840
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!vXAgLueVVeORjEzO'
|
||||||
|
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
folder: QIrB0DXlWitQf77h
|
||||||
|
name: Attitude positive
|
||||||
|
type: ability
|
||||||
|
_id: 37V8cS5XqgodzRYB
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>La coopération entre membres du Groupe est inébranlable et se manifeste
|
||||||
|
dans toutes les situations possibles. Les événements négatifs font baisser
|
||||||
|
la Réserve de Groupe de 1D de moins que la normale – voir Les Règles, « La
|
||||||
|
Réserve de Groupe » page 21.</p>
|
||||||
|
|
||||||
|
<p>En Mode <strong>Apocalypse</strong>, les événements négatifs font baisser
|
||||||
|
la Réserve de Groupe de 2D de moins que la normale.</p>
|
||||||
|
type: group
|
||||||
|
totem: hive
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775496825
|
||||||
|
modifiedTime: 1785775496825
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!37V8cS5XqgodzRYB'
|
||||||
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
folder: dgcQogTYNhmMOwbG
|
||||||
|
name: Autorité
|
||||||
|
type: ability
|
||||||
|
_id: aHRsfu7k2kEQusni
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Une fois par jour, le personnage peut effectuer un jet de Volonté +
|
||||||
|
Psychologie contre une Difficulté de 7 pour exalter, fédérer ou recadrer ses
|
||||||
|
compagnons. Tous les personnages présents regagnent 1D de Réserve de
|
||||||
|
Sang-Froid par Réussite obtenue. Si au moins la moitié du Groupe est réunie,
|
||||||
|
le Groupe regagne également le même nombre de Dés de Réserve de Groupe.</p>
|
||||||
|
type: character
|
||||||
|
totem: hive
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498741
|
||||||
|
modifiedTime: 1785775498741
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!aHRsfu7k2kEQusni'
|
||||||
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
folder: X6lFKdHexGbMpMHh
|
||||||
|
name: Bagout du roublard
|
||||||
|
type: ability
|
||||||
|
_id: svA8aIY2ACliNr4f
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Deux membres du Groupe travaillant de concert pour baratiner autrui ont
|
||||||
|
bien plus de chances de réussir : ils additionnent leurs Niveaux de
|
||||||
|
Compétence pour constituer leurs Groupements de dés. Pour cela, considérer
|
||||||
|
le Niveau Débutant équivalent à un Niveau 1, Confirmé 2, Expert 3, Maître 4
|
||||||
|
et Légende 5. Cette Capacité est limitée à un Niveau final de Maître.</p>
|
||||||
|
|
||||||
|
<p>En Mode <strong>Apocalypse</strong>, il est possible de dépasser le
|
||||||
|
Niveau Maître, avec un total de 5 correspondant à un Bonus de 3D et 2
|
||||||
|
Relances, et un total de 6 à un Bonus de 3D et 3 Relances.</p>
|
||||||
|
type: group
|
||||||
|
totem: scavenger
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775496848
|
||||||
|
modifiedTime: 1785775496848
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!svA8aIY2ACliNr4f'
|
||||||
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
folder: BJAxv25PiSk29dK0
|
||||||
|
name: Berceau
|
||||||
|
type: ability
|
||||||
|
_id: uzUrffNWChsgFiEm
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage sait se faire accepter par l’environnement naturel. Il
|
||||||
|
bénéficie d’un Bonus de 1D pour se cacher dans la nature ou y trouver de la
|
||||||
|
nourriture ou de l’eau. Il peut faire bénéficier ses compagnons de ce Bonus
|
||||||
|
du moment qu’ils ne dégradent rien. Le coût en Dés de Réserves pour la
|
||||||
|
guérison est diminué de 1D (seulement pour lui).</p>
|
||||||
|
type: character
|
||||||
|
totem: symbiote
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498763
|
||||||
|
modifiedTime: 1785775498763
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!uzUrffNWChsgFiEm'
|
||||||
|
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
folder: 84EDVIIqk9YkrBgF
|
||||||
|
name: Bidouillage
|
||||||
|
type: ability
|
||||||
|
_id: NBsKcx5rMfarenBE
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage peut créer un objet (pas plus grand qu’un fusil) à partir
|
||||||
|
de trois fois rien : quelques vis, un peu de corde, une vieille canette
|
||||||
|
rouillée… et voilà un piège à fourmi géante. En réussissant un jet de
|
||||||
|
Précision + Bricolage le personnage peut créer un objet rudimentaire et à
|
||||||
|
usage unique de son choix à partir de bric et de broc. La Difficulté du jet
|
||||||
|
est égale à la Rareté de l’objet qu’il veut créer, augmentée de 2 si l’objet
|
||||||
|
contient des éléments technologiques. Cette fabrication prend un nombre de
|
||||||
|
minutes égal à la Rareté de l’objet.</p>
|
||||||
|
|
||||||
|
<p>En Mode <strong>Apocalypse</strong>, le temps d’assemblage se compte en
|
||||||
|
tours et non en minutes.</p>
|
||||||
|
type: character
|
||||||
|
totem: builder
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498746
|
||||||
|
modifiedTime: 1785775498746
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!NBsKcx5rMfarenBE'
|
||||||
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
folder: xtfO1fRGXZx3bm2j
|
||||||
|
name: Bouclier
|
||||||
|
type: ability
|
||||||
|
_id: O9hdMXTIln6hx0LU
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Les personnages peuvent se substituer les uns aux autres pour subir les
|
||||||
|
effets négatifs de Capacités ou d’attaques adverses. Les deux personnages
|
||||||
|
impliqués dépensent 1D d’Effort, et la nouvelle cible doit effectuer un jet
|
||||||
|
de Volonté + Vigilance, dont la Difficulté dépend de la distance entre eux
|
||||||
|
(5 s’ils se tiennent côte à côte, 7 s’ils sont séparés de 5 m et 9 s’ils
|
||||||
|
sont séparés d’au moins 10 m). En cas de Succès, elle subit tous les effets
|
||||||
|
qui visaient son camarade : elle peut se mettre devant lui et encaisser
|
||||||
|
l’effet, le tir qui le visait peut être dévié ou le tireur peut décider au
|
||||||
|
dernier moment qu’elle est plus dangereuse que sa cible initiale…</p>
|
||||||
|
type: group
|
||||||
|
totem: symbiote
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775496873
|
||||||
|
modifiedTime: 1785775496873
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!O9hdMXTIln6hx0LU'
|
||||||
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
folder: hhVX2G8bxhMshf0M
|
||||||
|
name: Calculateur
|
||||||
|
type: ability
|
||||||
|
_id: tF1w6c1e8oX04Xd7
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Lorsqu’il prend part à une Action coordonnée au sein d’un Groupe, le
|
||||||
|
personnage gagne 1D d’Effort et de Sang-Froid s’il se met en dehors de toute
|
||||||
|
action dangereuse et que le reste du Groupe rencontre des obstacles
|
||||||
|
dangereux. Il doit faire des efforts pour se placer dans une situation
|
||||||
|
sûre.</p>
|
||||||
|
type: character
|
||||||
|
totem: scavenger
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498749
|
||||||
|
modifiedTime: 1785775498749
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!tF1w6c1e8oX04Xd7'
|
||||||
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
folder: DZFKjNvydLbAJAVv
|
||||||
|
name: Carnage
|
||||||
|
type: ability
|
||||||
|
_id: wR5Qric1BMavNQkz
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage se délecte du carnage et de la destruction. Chaque fois
|
||||||
|
qu’il assiste à la mort d’un adversaire, une explosion, la destruction d’un
|
||||||
|
objet de la taille d’une voiture ou plus, etc. le personnage regagne 1D dans
|
||||||
|
chacune de ses Réserves. S’il y participe directement, il regagne 2D à la
|
||||||
|
place.</p>
|
||||||
|
type: character
|
||||||
|
totem: horde
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 3
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498737
|
||||||
|
modifiedTime: 1785775498737
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!wR5Qric1BMavNQkz'
|
||||||
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
folder: xtfO1fRGXZx3bm2j
|
||||||
|
name: Cavalerie
|
||||||
|
type: ability
|
||||||
|
_id: lzOUWDZAxF9l8VKM
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Les membres du Groupe ne sont presque jamais complètement isolés. Cette
|
||||||
|
Capacité joue sur la souplesse du récit et la structure d’une histoire. Si
|
||||||
|
un personnage se retrouve isolé et en danger, au prix de 1D de Réserve de
|
||||||
|
Groupe, le meneur pourra accorder qu’un autre membre du Groupe arrive in
|
||||||
|
extremis pour le secourir. Ainsi, le nouvel arrivant était déjà en train de
|
||||||
|
le rejoindre lors d’une ellipse, ou la scène dans laquelle il intervenait de
|
||||||
|
son côté se déroulait en fait quelque temps avant. Cela ne garantit pas que
|
||||||
|
les deux se sortiront du mauvais pas où était le membre secouru, mais au
|
||||||
|
moins seront-ils deux pour tenter de s’en sortir.</p>
|
||||||
|
type: group
|
||||||
|
totem: symbiote
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775496873
|
||||||
|
modifiedTime: 1785775496873
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!lzOUWDZAxF9l8VKM'
|
||||||
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
folder: cq1blnuTc35cNHFI
|
||||||
|
name: Chapardeur
|
||||||
|
type: ability
|
||||||
|
_id: AGNubryebJC1eymx
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage est du genre à laisser traîner ses mains un peu partout. Il
|
||||||
|
bénéficie d’un Bonus de 1D sur toutes ses tentatives pour subtiliser
|
||||||
|
discrètement un objet. Il peut également découvrir, en réussissant un jet de
|
||||||
|
Perception + Rumeurs, où un Groupe cache ses possessions les plus précieuses
|
||||||
|
et comment s’en emparer.</p>
|
||||||
|
type: character
|
||||||
|
totem: parasite
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498752
|
||||||
|
modifiedTime: 1785775498752
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!AGNubryebJC1eymx'
|
||||||
|
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
folder: lRtSWN1uMwwTGFhY
|
||||||
|
name: Chasseurs Cueilleurs
|
||||||
|
type: ability
|
||||||
|
_id: WDTWtHGkUBpBxDog
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Les personnages font preuve d’un talent sans égal pour trouver leur
|
||||||
|
nourriture dans la nature. Lorsque plusieurs d’entre eux coopèrent pour
|
||||||
|
chasser ou cueillir de la nourriture, ils bénéficient d’un Bonus de 1D pour
|
||||||
|
leur Action.</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li>En Mode <strong>Cauchemar</strong>, chaque Réussite affectée à la Durée
|
||||||
|
compte double.</li>
|
||||||
|
|
||||||
|
<li>En Mode <strong>Apocalypse</strong>, chaque Réussite affectée à la Durée
|
||||||
|
ou à la Quantité compte double.</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
type: group
|
||||||
|
totem: loner
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775496867
|
||||||
|
modifiedTime: 1785775496867
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!WDTWtHGkUBpBxDog'
|
||||||
|
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
folder: BJAxv25PiSk29dK0
|
||||||
|
name: Clan
|
||||||
|
type: ability
|
||||||
|
_id: S3qBRezOvanXVMAa
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage sait rassurer instinctivement les autres membres de son
|
||||||
|
Groupe, même dans des situations horribles. Une fois par jour, le personnage
|
||||||
|
peut effectuer un jet de Volonté + Psychologie contre une Difficulté de 7 et
|
||||||
|
diminuer les pertes de Sang-Froid dues au stress ou aux chocs de 1D.</p>
|
||||||
|
|
||||||
|
<p>En Mode <strong>Cauchemar</strong>, cela concerne également les pertes de
|
||||||
|
Sang-Froid dues aux privations (faim et soif).</p>
|
||||||
|
type: character
|
||||||
|
totem: human
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498763
|
||||||
|
modifiedTime: 1785775498763
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!S3qBRezOvanXVMAa'
|
||||||
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
folder: Lz6hzBURjQnhIAQp
|
||||||
|
name: Coûte que coûte
|
||||||
|
type: ability
|
||||||
|
_id: iWm54dGGGQqZl9OW
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage fait preuve d’une détermination sans faille. Il est capable
|
||||||
|
d’encaisser tension et visions d’horreur sans broncher et de continuer à
|
||||||
|
avancer en voyant ses camarades tomber les uns après les autres. Ses pertes
|
||||||
|
de Dés de Réserve et les Malus liés au stress ou des chocs psychologiques
|
||||||
|
sont réduits de 1D, jusqu’à un minimum de 1D.</p>
|
||||||
|
type: character
|
||||||
|
totem: predator
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498757
|
||||||
|
modifiedTime: 1785775498757
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!iWm54dGGGQqZl9OW'
|
||||||
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
folder: QIrB0DXlWitQf77h
|
||||||
|
name: Communication silencieuse
|
||||||
|
type: ability
|
||||||
|
_id: siTvEyg8Me69DcB4
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>À l’instar de certains insectes, la communication entre les membres du
|
||||||
|
Groupe passe par d’autres signaux que la voix. Ils peuvent se transmettre
|
||||||
|
des idées basiques (danger, nourriture, besoin d’aide…) par simple contact
|
||||||
|
visuel, sans avoir besoin de gestes particuliers ou autre.</p>
|
||||||
|
|
||||||
|
<p>En Mode <strong>Apocalypse</strong>, les personnages n’ont même plus
|
||||||
|
besoin de se voir, ils ressentent, comme grâce à un sixième sens ou par des
|
||||||
|
phéromones, les pensées basiques de leurs camarades situés à moins de 10
|
||||||
|
mètres par Dé dans la Réserve du Groupe.</p>
|
||||||
|
type: group
|
||||||
|
totem: hive
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775496826
|
||||||
|
modifiedTime: 1785775496826
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!siTvEyg8Me69DcB4'
|
||||||
|
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
folder: BJAxv25PiSk29dK0
|
||||||
|
name: Communion
|
||||||
|
type: ability
|
||||||
|
_id: WGm1c8FRAndILvEd
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage est sensible à l’ambiance d’un lieu. Il peut savoir si une
|
||||||
|
zone est paisible ou au contraire dangereuse. Il peut lire l’environnement
|
||||||
|
en interprétant quantité de petits détails que les autres ne verront pas :
|
||||||
|
bruit (ou absence de bruit) de la faune, traces de passage, plantes adaptées
|
||||||
|
à certains biotopes, etc. Chaque Réussite sur un jet d’Empathie +
|
||||||
|
Environnement, contre une Difficulté de 7 lui permet de poser une question
|
||||||
|
précise sur l’environnement au meneur, à laquelle celui-ci devra répondre
|
||||||
|
sincèrement.</p>
|
||||||
|
|
||||||
|
<p>En Mode <strong>Cauchemar </strong>ou <strong>Apocalypse</strong>, le
|
||||||
|
personnage est affligé de visions plus ou moins cryptiques lui montrant les
|
||||||
|
dangers potentiels du lieu en question.</p>
|
||||||
|
type: character
|
||||||
|
totem: symbiote
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498764
|
||||||
|
modifiedTime: 1785775498764
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!WGm1c8FRAndILvEd'
|
||||||
|
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
folder: Lz6hzBURjQnhIAQp
|
||||||
|
name: Connais ton ennemi
|
||||||
|
type: ability
|
||||||
|
_id: J2tvfWt0tsp3SVA7
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Vous bénéficiez d’un Bonus de 1D sur toutes vos Actions d’opposition
|
||||||
|
mentales ou sociales face à un adversaire agressif. En réussissant un jet de
|
||||||
|
Perception + Psychologie contre une Difficulté de 7 (I), vous pouvez deviner
|
||||||
|
l’objectif caché ou les ruses d’un adversaire lors d’un combat. Chaque
|
||||||
|
Réussite donne un degré de précision ou une information supplémentaire sur
|
||||||
|
ce que vous cherchez à savoir. Cette Capacité ne peut être utilisée qu’une
|
||||||
|
seule fois par combat.</p>
|
||||||
|
type: character
|
||||||
|
totem: predator
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498757
|
||||||
|
modifiedTime: 1785775498757
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!J2tvfWt0tsp3SVA7'
|
||||||
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
folder: dgcQogTYNhmMOwbG
|
||||||
|
name: Conscience partagée
|
||||||
|
type: ability
|
||||||
|
_id: LC5fpgXlgGWwnDWf
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage partage les connaissances et les savoir-faire de ses
|
||||||
|
camarades. Une fois par scène, il peut décider de copier le Niveau de
|
||||||
|
Compétence d’un autre membre du Groupe pour le restant de la scène ou faire
|
||||||
|
bénéficier un camarade du Niveau d’une de ses Compétences à lui, au
|
||||||
|
choix.</p>
|
||||||
|
type: character
|
||||||
|
totem: hive
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 3
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498741
|
||||||
|
modifiedTime: 1785775498741
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!LC5fpgXlgGWwnDWf'
|
||||||
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
folder: 84EDVIIqk9YkrBgF
|
||||||
|
name: Construit pour durer
|
||||||
|
type: ability
|
||||||
|
_id: Bjwg3AaN1tMDDsD8
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage augmente la Fiabilité maximale d’un objet non endommagé de
|
||||||
|
1 par Réussite obtenue sur un jet de Précision + Armurerie / Artisanat /
|
||||||
|
Mécanique / Technologie (en fonction de l’objet) contre une Difficulté égale
|
||||||
|
à sa Fiabilité actuelle. En s’imposant un Handicap (de II à IV), le
|
||||||
|
personnage peut offrir à cet objet le Trait Coque pour une valeur
|
||||||
|
équivalente au degré du Handicap –1.</p>
|
||||||
|
type: character
|
||||||
|
totem: builder
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498747
|
||||||
|
modifiedTime: 1785775498747
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!Bjwg3AaN1tMDDsD8'
|
||||||
|
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
folder: K27yLKAXwiIQTzfW
|
||||||
|
name: Crocs acérés
|
||||||
|
type: ability
|
||||||
|
_id: cwJPBMHw3KZMlhPy
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Les armes se révèlent plus efficaces entre les mains des personnages.
|
||||||
|
Tels les crocs du lion ou le dard du scorpion, chacun d’entre eux possède
|
||||||
|
une arme emblématique : il choisit une arme, différente de celle de ses
|
||||||
|
compagnons. Entre ses mains, elle inflige 1 Dommage supplémentaire.</p>
|
||||||
|
|
||||||
|
<p>En Mode <strong>Apocalypse</strong>, au prix de 1D d’Effort, l’arme
|
||||||
|
inflige 2 Dommages supplémentaires par attaque pour la durée du combat.</p>
|
||||||
|
type: group
|
||||||
|
totem: predator
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 1
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775496863
|
||||||
|
modifiedTime: 1785775496863
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!cwJPBMHw3KZMlhPy'
|
||||||
|
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
folder: hhVX2G8bxhMshf0M
|
||||||
|
name: Défendre sa peau
|
||||||
|
type: ability
|
||||||
|
_id: wXXsRmijs23mvn6j
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le personnage est un survivant et fera tout pour subsister coûte que
|
||||||
|
coûte. Il bénéficie d’un Bonus de 1D sur tous les jets de défense,
|
||||||
|
d’esquive, de discrétion ou de négociation où sa vie est directement
|
||||||
|
menacée.</p>
|
||||||
|
type: character
|
||||||
|
totem: scavenger
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498749
|
||||||
|
modifiedTime: 1785775498749
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!wXXsRmijs23mvn6j'
|
||||||
|
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
folder: Uzy0SspULFe8AX72
|
||||||
|
name: Désespoir
|
||||||
|
type: ability
|
||||||
|
_id: rvRpORlT2W1ocBDp
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: "<p>L’entourage des personnages semble affaibli en leur présence : quiconque se trouve à une certaine distance d’un membre du Groupe voit ses Seuils de Blessure réduits de 1, jusqu’à un minimum de 1. Tant qu’ils restent à portée des personnages, les victimes ne peuvent annuler cet effet, d’aucune manière.</p>\n<table style=\"width:400px;border-width:1px;margin-left:auto;margin-right:auto;height:80px\" border=\"1\"><colgroup><col style=\"width:71px\"></col><col style=\"width:124px\"></col><col style=\"width:94px\"></col><col style=\"width:111px\"></col></colgroup>\n<tbody>\n<tr style=\"height:16px\">\n<td style=\"height:16px;text-align:center\" colspan=\"4\"><strong>Portée du Desespoir</strong></td>\n</tr>\n<tr style=\"height:16px\">\n<td style=\"height:16px;text-align:center\"><strong>Mode</strong></td>\n<td style=\"height:16px;text-align:center\"><strong>Survie</strong></td>\n<td style=\"height:16px;text-align:center\"><strong>Cauchemar</strong></td>\n<td style=\"height:16px;text-align:center\"><strong>Apocalypse</strong></td>\n</tr>\n<tr style=\"height:48px\">\n<td style=\"height:48px;text-align:center\"><strong>Distance</strong></td>\n<td style=\"height:48px;text-align:center\">Corps à corps</td>\n<td style=\"height:48px;text-align:center\">Niveau de Groupe x5m</td>\n<td style=\"height:48px;text-align:center\">Niveau de Groupe x10m</td>\n</tr>\n</tbody>\n</table>\n<p>\_</p>"
|
||||||
|
type: group
|
||||||
|
totem: parasite
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775496856
|
||||||
|
modifiedTime: 1785775496856
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!rvRpORlT2W1ocBDp'
|
||||||
|
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
folder: DZFKjNvydLbAJAVv
|
||||||
|
name: Destruction
|
||||||
|
type: ability
|
||||||
|
_id: 6Ke1zIZTDTKNO8Pu
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Chaque fois qu’il frappe ou s’attaque à du matériel, y compris une
|
||||||
|
Protection, le personnage réduit la Fiabilité de l’objet du nombre de
|
||||||
|
Réussites obtenues sur son jet. La réduction de Fiabilité s’applique
|
||||||
|
immédiatement, avant le calcul des Dommages.</p>
|
||||||
|
type: character
|
||||||
|
totem: horde
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775498738
|
||||||
|
modifiedTime: 1785775498738
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!6Ke1zIZTDTKNO8Pu'
|
||||||
|
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
folder: lRtSWN1uMwwTGFhY
|
||||||
|
name: Deuxième chance
|
||||||
|
type: ability
|
||||||
|
_id: 7Lz6PNimkvJ6tkPP
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Les personnages jouissent d’une certaine dose de chance (ou de maîtrise)
|
||||||
|
pour assurer leur survie : une fois par session de jeu, lorsqu’une Action
|
||||||
|
profitable au Groupe échoue, chaque joueur peut relancer intégralement sa
|
||||||
|
Main.</p>
|
||||||
|
type: group
|
||||||
|
totem: loner
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775496868
|
||||||
|
modifiedTime: 1785775496868
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!7Lz6PNimkvJ6tkPP'
|
||||||
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
folder: YdwBSZ49OdVFRGIW
|
||||||
|
name: Efficacité
|
||||||
|
type: ability
|
||||||
|
_id: 06pJWJzlZvADuGrI
|
||||||
|
img: systems/vermine2047/assets/icons/items/ability.webp
|
||||||
|
system:
|
||||||
|
description: >-
|
||||||
|
<p>Le temps nécessaire pour accomplir les tâches entreprises par le Groupe
|
||||||
|
dans son ensemble est divisé par 2.</p>
|
||||||
|
|
||||||
|
<p>En Mode <strong>Apocalypse</strong>, le Groupe peut se scinder pour
|
||||||
|
entreprendre une activité sur deux lieux différents en bénéficiant des
|
||||||
|
effets de cette Capacité.</p>
|
||||||
|
type: group
|
||||||
|
totem: builder
|
||||||
|
learn:
|
||||||
|
threshold: 5
|
||||||
|
hindrance: 0
|
||||||
|
level:
|
||||||
|
value: 2
|
||||||
|
min: 1
|
||||||
|
max: 3
|
||||||
|
effects: []
|
||||||
|
effects: []
|
||||||
|
sort: 0
|
||||||
|
ownership:
|
||||||
|
default: 0
|
||||||
|
GXSW26kNdNoaabl8: 3
|
||||||
|
kb05teJOwuTQVHwZ: 3
|
||||||
|
flags: {}
|
||||||
|
_stats:
|
||||||
|
compendiumSource: null
|
||||||
|
duplicateSource: null
|
||||||
|
coreVersion: '14.365'
|
||||||
|
systemId: vermine2047
|
||||||
|
systemVersion: 0.1.13
|
||||||
|
createdTime: 1785775496841
|
||||||
|
modifiedTime: 1785775496841
|
||||||
|
lastModifiedBy: kb05teJOwuTQVHwZ
|
||||||
|
exportSource: null
|
||||||
|
_key: '!items!06pJWJzlZvADuGrI'
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user