Compare commits

..

31 Commits

Author SHA1 Message Date
36c771518d v13.0.21 2025-12-08 20:12:17 +01:00
dd7a3700dc Appréciation des services 2025-12-08 20:10:56 +01:00
f0736015a7 Surcharge de couleurs de style
Les titres dans les descriptions n'étaient pas bien affichés dans la
fenêtre de jet
2025-12-08 19:40:21 +01:00
aae603d798 Appréciation de plats 2025-12-08 19:39:21 +01:00
d9bc6309fb Correction des bonus des Cyans 2025-12-08 01:42:57 +01:00
c14361919c Update compendiums 2025-12-08 01:42:55 +01:00
b26c39cf21 Ajout des options d'appréciation
L'appréciation utilise:

- un niveau de qualité (qui réutilise la qualité sur les items en ayant)
- un bon moment (coeur/musique/...)
- un niveau de jet de moral
- une caractéristique (perception)
- une compétence

Les bon moments passés sont remis à zéro lors du passage de
château dormant.

Ajout des jets de moral très heureux.

Ajout de jet d'appréciation sur les résultats des oeuvres et des jeux.
2025-12-08 01:42:47 +01:00
ca2d17bd25 Encombrement avec décimales 2025-12-07 23:48:41 +01:00
a243209c90 Fix: selection parmi les cibles 2025-12-07 02:52:19 +01:00
90435c07b4 cleanup unused imports 2025-12-06 21:12:30 +01:00
46d09c7bd9 Dimension des zones editeur
amélioration des zones de saisie des éditeurs (journaux, ...)
2025-12-06 21:12:30 +01:00
05036877ed Possessions dans HUD
Permettre de commencer les possessions V2
2025-12-06 21:12:25 +01:00
98e8c7a10c Gestion de possession - fin de round
- affichage du message pour indiquer l'état d'une possession en fin de
round
- bouton de conjuration depuis la feuille de personnage
2025-12-05 20:12:14 +01:00
19cabe816e Gestion défense et compteur de possession 2025-12-05 20:12:14 +01:00
706aa657b1 Méthode rollPossession pour attaque possession
- Ajout d'une méthode pour ouvrir le dialogue en mode possession
- gestion des information de possession
- fenêtre défense possession
- préparation des messages de tchat
2025-12-05 20:12:09 +01:00
fd3f988a4f Roll V2 mode possession 2025-11-28 19:44:06 +01:00
981282d809 Ajout de méthode getConjurations
Pour lister les compétences de possession/conjuration de manière
homogène (tout actor doué de rêve)
2025-11-28 00:04:16 +01:00
fcce8b0a4b Merge pull request 'feature/v13-empoignade-v2' (#785) from feature/v13-empoignade-v2 into v13
All checks were successful
Release Creation / build (release) Successful in 16m21s
Reviewed-on: https, #785
2025-11-27 14:38:25 +01:00
461a398965 Police homogène pour la navigation 2025-11-27 02:08:25 +01:00
eef0893d1a Version 13.0.20 2025-11-27 01:55:19 +01:00
c50f1287b5 Ajustement astrologique rituels 2025-11-27 01:14:46 +01:00
acd40f3154 Fix dépense rêve sort
La dépense de rêve de sort se faisait en parallèle de la fermeture
de fenêtre des TMRs, qui modifiait la fatigue. Du coup, l'update de
la dépense de rêve ne se faisait pas
2025-11-27 01:02:09 +01:00
764f9f81c8 Centrage logo pause 2025-11-26 23:39:15 +01:00
70e8cd74a2 Correction feuille méditation joueur 2025-11-26 21:27:39 +01:00
e96f4e01bd Majuscule Survie en désert 2025-11-24 18:04:43 +01:00
c44c2d7c96 Ajout d'un statut "malade/empoisonné" 2025-11-24 18:04:43 +01:00
e2ee73bc4e Empoignade V2
Correction, de l'empoignade en mode jet V2

- le défenseur diminue le nombre de points d'empoignade
- amélioration des messages liés à l'empoignade
- ajout de choix de pertes d'endurance à infliger
2025-11-24 18:04:43 +01:00
3f19886342 Fix affichage sur perte d'endurance
décaller l'ajout d'effets après l'update permet
d'éviter les résultats "invisibles"
2025-11-24 18:04:43 +01:00
9a5afc918e Fix suppression effets 2025-11-24 18:04:43 +01:00
2ac35ef5d1 Corrections de styles incorrects
- combo de sélection des dommages d'empoignade
- boutons de navigation dans les journaux
- boutons de blessures dans la feuille de personnage
2025-11-24 18:04:42 +01:00
33c6b35601 Merge pull request '## 13.0.19 - L'introspection d'Illysis' (#784) from feature/v13-combats-v2 into v13
All checks were successful
Release Creation / build (release) Successful in 2m10s
Reviewed-on: https, #784
2025-11-14 17:46:26 +01:00
1228 changed files with 40215 additions and 10277 deletions

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 256px; width: 256px;"><g class="" transform="translate(0,0)" style=""><path d="M256.25 20.313c-108.64 0-196.78 90.592-196.78 202.937 0 84.615 49.994 156.904 121.093 187.438v-16.375c0-25.638-6.2-40.132-13.875-48.47-7.675-8.336-17.567-11.4-27.72-11.937-18.252-.97-32.4-12.266-40.905-27-6.47-11.205-5.975-24.767-.532-36.97 5.444-12.2 15.49-23.71 29.19-33.905 27.394-20.39 69.79-35.56 122.436-35.56 52.702 0 98.475 15.648 129.344 36.218 15.435 10.284 27.24 21.746 34.22 33.968 6.976 12.222 8.93 26.41 2.186 38.094-4.19 7.257-11.026 11.988-18.687 15.938-7.663 3.95-16.085 6.78-24.595 6.78-11.865 0-20.63 2.214-27.438 10.157s-12.437 23.63-12.437 52.688v16.437c71.195-30.488 121.28-102.814 121.28-187.5 0-112.347-88.14-202.938-196.78-202.938zm-76.656 86.718c1.53.02 3.05.078 4.562.157 14.525.766 28.29 4.3 41.063 9.97l17.31 7.687-16.624 9.062-84.062 45.875-8.938-16.405 65.156-35.563c-24.195-5.513-50.92-1.877-82.062 17.532l-9.875-15.844c25.778-16.066 50.528-22.75 73.47-22.47zm150.312 0c22.944-.28 47.722 6.404 73.5 22.47l-9.875 15.844c-31.14-19.41-57.865-23.045-82.06-17.53l65.155 35.56-8.938 16.407-84.062-45.874L267 124.844l17.313-7.688c12.772-5.67 26.506-9.203 41.03-9.97 1.514-.078 3.034-.136 4.563-.155zm-73.594 170.282c-68.947 0-113.104 15.367-116.843 37.907l.5.03c13.487.714 28.843 5.31 40.468 17.938 11.624 12.627 18.812 32.418 18.812 61.125v100.312h113.813V394.312c0-31.4 5.766-51.81 16.937-64.843 11.17-13.034 27.003-16.69 41.625-16.69.352 0 .76-.03 1.156-.06-6.417-22.614-49.872-35.408-116.467-35.408z" fill="#fff" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 256px; width: 256px;"><polygon points="256,512,0,256,256,0,512,256" fill="#000" fill-opacity="1"></polygon><g class="" transform="translate(8,-12)" style=""><path d="M282.83 18.877c21.567 6.146 36.328 15.205 40.572 28.77a71.007 71.007 0 0 0-4.066 2.363c-25.655 5.807-53.084 18.634-81.047 34.363 20.225-4.69 36.705-4.42 47.544 3.324-5.712 10.3-10.797 22.294-15.123 36.06-21.343 67.922-125.678-80.577-189.065-5.255C41.47 166.24 92.702 212.342 26.5 294.29c35.583-4.14 45.11-9.47 62.416-36.21 10.44-16.13 28.52-22.1 44.668-21.45-12.718 11.206-25.786 30.354-38.21 59.895 19.832-18.528 44.927-38.68 71.603-40.005.912 6.354-2.408 13.74-12.008 21.418C93.21 327.327 15.58 364.185 19.83 476.504c5.558-11.267 11.646-20.31 17.574-28.617 5.98 29.582 28.2 53.8 92.99 40.482-46.928-6.407-76.268-59.586-45.355-82.528 62.716-46.544 128.82 1.436 269.9-75.342a79.832 79.832 0 0 1 7.164-3.46c-2.246 19.6-12.367 39.84-22.362 57.14 14.26-10.38 25.415-20.147 33.928-29.262 2.14 26.14-11.748 54.65-25.393 78.268 43.26-31.49 61.19-57.976 63.207-78.422 9.334 36.678-1.895 95.547-25.03 123.492 77.553-39.433 106.608-77.127 109.76-190.664 1.662-59.824-66.23-60.536-56.435-101.344 11.945-49.756 6.768-84.69-7.565-107.947-19.6-49.73-79.99-59.74-149.385-59.423zM89.8 47.684C54.69 47.534 45.233 83.056 55.724 117c17.146-51.504 70.414-44.24 111.17-34.367-33.282-25.005-58.707-34.87-77.096-34.95zm254.595 30.742c18.643 21.37 29.373 43.02 10.105 65.732-26.562-16.677-26.985-39.252-10.105-65.732zm74.494 48.6c3.655-.013 7.78.35 12.473 1.09-1.706 30.506-14.4 33-46.634 32.154 8.335-22.146 14.416-33.176 34.16-33.245zm-84.677 40.316c9.652.1 20.258 2.84 30.598 8.918 44.65 26.246 21.934 73.314-4.1 74.78-15.174.855 1.443-23.842-16.17-38.476-15.258-12.678-38.596 12.53-45.204-5.78-8.218-22.693 10.21-39.696 34.877-39.442zm60.18 246.168c-24.195 27.825-58.89 60.1-99.444 31.41 16.625 45.643 68.87 70.465 99.443-31.41z" fill="#fff" fill-opacity="1" transform="translate(102.4, 102.4) scale(0.6, 0.6) rotate(0, 256, 256) skewX(0) skewY(0)"></path></g></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

@@ -1,5 +1,35 @@
# 13.0
## 13.0.21 - La folie d'Illysis
- Jets d'appréciation et de moral
- concerne la danse, musique, chant, jeu, les oeuvres, la nourriture, les services
- gestion des compétences d'appréciation pour les oeuvres
- pas de jet de moral si la qualité n'est pas suffisante (inférieure au moral,
à la compétence, moral déjà gagné pour la même raison)
- jet d'appréciation avec en option la compétence et la qualité
- jet de moral très heureux (pour Spasme)
- les jets de moral sont liés à des "bon moments"
- la liste des bons moments passés par un acteur est remise à zéro à Château Dormant
- Fenêtre de jet v2
- les possessions sont maintenant gérées avec les fenêtres V2
- on peut choisir sa voie de draconic pour contrer une possession ou conjurer
- La zone de saisie dans les journaux est mieux adaptée
- Correction des bonus de caractéristiques des cyans
## 13.0.20 - L'immobilisme d'Illysis
- Centrage du logo de pause
- Ajout d'un statut malade/empoisonné
- Fenêtre de jet v2
- correction du compteur empoignade
- amélioration des messages liés à l'empoignade
- amélioration des choix de perte d'endurance
- correction de la dépense de rêve sur lancement de sort
- ajustement astrologique sur rituels
## 13.0.19 - L'introspection d'Illysis
- Ajout d'un bouton pour les jets de résistance sous rêve actuel

View File

@@ -60,8 +60,7 @@
/* Fonts */
.sheet header.sheet-header h1 input,
.window-app .window-header,
#actors .directory-list,
#navigation #scene-list .scene.nav-item {
#sidebar {
font-family: "GoudyAcc";
}
/* For title, sidebar character and scene */
@@ -71,17 +70,16 @@
.sheet header.sheet-header .flex-group-center.flex-fatigue,
select,
.item-checkbox,
#sidebar,
#players,
#navigation #nav-toggle {
#players {
font-family: "CaslonAntique";
/* For sheet parts; For nav and title */
}
:root {
body {
/* =================== 2. DEBUGGING HIGHLIGHTERS ============ */
/* =================== 3. some constants ============ */
--fieldset-background: url(/ui/parchment.jpg);
--rdd-color-text-primary: hsla(0, 0%, 4%, 0.9);
--color-text-primary: hsla(0, 0%, 4%, 0.9);
--rdd-input-background: hsla(0, 0%, 0%, 0.1);
--rdd-color-border-input: hsla(0, 0%, 0%, 0.2);
--rdd-bg-input: hsla(0, 0%, 100%, 0.1);
@@ -99,7 +97,9 @@ select,
--gradient-warning: linear-gradient(150deg, hsla(32, 100%, 50%, 0.3), hsla(52, 60%, 50%, 0.1), hsla(32, 60%, 50%, 0.1), hsla(32, 100%, 50%, 0.3));
--gradient-silver-light: linear-gradient(30deg, rgba(61, 55, 93, 0.2), rgba(178, 179, 196, 0.1), rgba(59, 62, 63, 0.2), rgba(206, 204, 199, 0.1), rgba(61, 46, 49, 0.2));
--gradient-daylight: conic-gradient(from 0deg, hsla(50, 100%, 80%, 0.7), hsla(30, 30%, 40%, 0.1) 25%, hsla(250, 50%, 40%, 0.1) 25%, hsla(250, 30%, 30%, 0.7) 50%, hsla(250, 50%, 40%, 0.1) 75%, hsla(30, 30%, 40%, 0.1) 75%, hsla(50, 100%, 80%, 0.7));
--background-custom-button: linear-gradient(to bottom, hsla(208, 38%, 21%, 0.988) 5%, hsla(202, 42%, 14%, 0.671) 100%);
--background-color-button: hsl(25, 5%, 60%);
--background-color-custom-button: hsla(208, 38%, 21%, 0.988);
--background-custom-button: linear-gradient(to bottom, var(--background-color-custom-button) 5%, hsla(202, 42%, 14%, 0.671) 100%);
--background-custom-button-hover: linear-gradient(to bottom, hsl(0, 100%, 25%) 5%, hsl(0, 97%, 12%) 100%);
--background-control-selected: linear-gradient(to bottom, hsla(0, 100%, 25%, 0.5) 5%, hsla(0, 100%, 12%, 0.5) 100%);
--background-tooltip: hsla(60, 12%, 85%, 0.95);
@@ -683,7 +683,7 @@ select,
.system-foundryvtt-reve-de-dragon .dialog-content div.roll-chat {
font-family: CaslonAntique;
display: grid;
grid-template-areas: "img header buttons" "img resume buttons" "details details details" "actions actions actions";
grid-template-areas: "img header buttons" "img resume buttons" "details details details" "description description description" "actions actions actions";
grid-template-columns: 3rem 1fr 1.4rem;
grid-template-rows: max-content max-content max-content max-content;
gap: 0 0.5rem;
@@ -739,6 +739,17 @@ select,
.system-foundryvtt-reve-de-dragon .dialog-content div.roll-chat div.chat-actions a img {
margin-right: 0.5rem;
}
.system-foundryvtt-reve-de-dragon .chat-message div.roll-chat div.chat-description,
.system-foundryvtt-reve-de-dragon .dialog-content div.roll-chat div.chat-description {
grid-area: description;
text-align: justify;
display: flex;
flex-direction: column;
}
.system-foundryvtt-reve-de-dragon .chat-message div.roll-chat div.chat-description div,
.system-foundryvtt-reve-de-dragon .dialog-content div.roll-chat div.chat-description div {
display: block;
}
.system-foundryvtt-reve-de-dragon .chat-message div.roll-chat div.chat-buttons,
.system-foundryvtt-reve-de-dragon .dialog-content div.roll-chat div.chat-buttons {
grid-area: buttons;
@@ -947,6 +958,13 @@ select,
flex-basis: inherit;
flex: "flex-shrink";
}
.system-foundryvtt-reve-de-dragon :is(section.scenes-sidebar, section.compendium-sidebar) li.directory-item.folder a {
text-shadow: 1px 1px 2px var(--rdd-color-text-primary);
color: var(--color-background-chat-message);
}
.system-foundryvtt-reve-de-dragon :is(section.scenes-sidebar, section.compendium-sidebar) li.directory-item.folder a:hover {
text-shadow: 1px 0px 0px #ff6600;
}
.system-foundryvtt-reve-de-dragon .tabs .item.active,
.system-foundryvtt-reve-de-dragon .blessures-list li ul li:first-child:hover,
.system-foundryvtt-reve-de-dragon i.moral-radio-checkmark-off:hover,
@@ -1382,12 +1400,22 @@ select,
margin-inline: 0.1rem;
margin-block: 0.1rem;
}
.system-foundryvtt-reve-de-dragon .prosemirror menu {
background-color: var(--color-background-chat-message);
}
.system-foundryvtt-reve-de-dragon .app.sheet fieldset :is(label, input) {
font-family: CaslonAntique;
text-align: justify;
font-size: 1rem;
letter-spacing: 1px;
}
.system-foundryvtt-reve-de-dragon .app.sheet input.attribute-value {
background-color: rgba(0, 0, 0, 0.05);
border: 1px solid var(--color-border-light-tertiary);
padding: 1px 3px;
height: var(--form-field-height);
border-radius: 3px;
}
.system-foundryvtt-reve-de-dragon .app.sheet div.form-group {
clear: both;
display: flex;
@@ -1396,19 +1424,22 @@ select,
margin: 0.1rem 0;
align-items: center;
}
.system-foundryvtt-reve-de-dragon .prosemirror menu {
background-color: var(--color-background-chat-message);
}
.system-foundryvtt-reve-de-dragon .app.sheet .editor.prosemirror {
height: fit-content;
min-height: 5rem;
min-height: 6rem;
}
.system-foundryvtt-reve-de-dragon .app.sheet .editor.prosemirror .editor-container {
min-height: 5rem;
height: 8rem;
min-height: 6rem;
height: calc(100% - 3rem);
margin: 0;
flex: none;
}
.system-foundryvtt-reve-de-dragon .app.sheet.journal-entry-page .editor.prosemirror {
height: 100%;
}
.system-foundryvtt-reve-de-dragon .app.sheet.journal-entry-page .editor.prosemirror .editor-container {
height: calc(100% - 6rem);
}
.system-foundryvtt-reve-de-dragon .large-editor {
border: 2;
height: fit-content;
@@ -1418,18 +1449,18 @@ select,
.system-foundryvtt-reve-de-dragon .editor {
border: 2;
height: fit-content;
min-height: 5rem;
min-height: 6rem;
padding: 0 3px;
}
.system-foundryvtt-reve-de-dragon .medium-editor {
border: 2;
min-height: 8rem;
min-height: 9rem;
padding: 0 3px;
align-items: top;
}
.system-foundryvtt-reve-de-dragon .small-editor {
border: 2;
min-height: 2rem;
min-height: 4rem;
padding: 0 3px;
}
.system-foundryvtt-reve-de-dragon .foundryvtt-reve-de-dragon.sheet :is(.large-editor, .editor, .medium-editor, .small-editor) {
@@ -1607,28 +1638,18 @@ select,
.system-foundryvtt-reve-de-dragon .journal-entry .journal-sidebar .permissions-list,
.system-foundryvtt-reve-de-dragon .window-app.sheet .window-content .sheet-body nav.tabs,
.system-foundryvtt-reve-de-dragon .application .window-content nav.tabs,
.system-foundryvtt-reve-de-dragon .journal-entry .journal-sidebar nav.tabs,
.system-foundryvtt-reve-de-dragon .window-app.sheet .window-content .sheet-body nav.tabs button,
.system-foundryvtt-reve-de-dragon .application .window-content nav.tabs button,
.system-foundryvtt-reve-de-dragon .journal-entry .journal-sidebar nav.tabs button,
.system-foundryvtt-reve-de-dragon .window-app.sheet .window-content .sheet-body nav.tabs button .count,
.system-foundryvtt-reve-de-dragon .application .window-content nav.tabs button .count,
.system-foundryvtt-reve-de-dragon .journal-entry .journal-sidebar nav.tabs button .count,
.system-foundryvtt-reve-de-dragon .journal-entry .journal-sidebar nav.tabs {
color: var(--rdd-color-text-primary);
}
.system-foundryvtt-reve-de-dragon .window-app.sheet .window-content .sheet-body button .count,
.system-foundryvtt-reve-de-dragon .application .window-content button .count,
.system-foundryvtt-reve-de-dragon .journal-entry .journal-sidebar button .count,
.system-foundryvtt-reve-de-dragon .window-app.sheet .window-content .sheet-body button,
.system-foundryvtt-reve-de-dragon .application .window-content button,
.system-foundryvtt-reve-de-dragon .journal-entry .journal-sidebar button {
background-color: var(--background-color-button);
color: var(--rdd-color-text-primary);
}
.system-foundryvtt-reve-de-dragon .window-app.sheet .window-content .sheet-body a,
.system-foundryvtt-reve-de-dragon .application .window-content a,
.system-foundryvtt-reve-de-dragon .journal-entry .journal-sidebar a {
color: var(--color-dark-3);
}
.system-foundryvtt-reve-de-dragon .window-app.sheet .window-content .sheet-body a.filter.active,
.system-foundryvtt-reve-de-dragon .application .window-content a.filter.active,
.system-foundryvtt-reve-de-dragon .journal-entry .journal-sidebar a.filter.active {
color: var(--color-dark-1);
}
.system-foundryvtt-reve-de-dragon .window-app .window-content {
background: url(../assets/ui/bg_left.webp) no-repeat left top;
color: var(--rdd-color-text-primary);
@@ -2200,7 +2221,7 @@ select,
.system-foundryvtt-reve-de-dragon #sidebar-tabs > .collapsed,
.system-foundryvtt-reve-de-dragon #chat-controls .chat-control-icon {
color: rgba(220, 220, 220, 0.75);
text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.75);
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.75);
}
.system-foundryvtt-reve-de-dragon .sidebar-tab .directory-list .entity {
border-top: 1px dashed rgba(0, 0, 0, 0.25);
@@ -2809,24 +2830,6 @@ select,
.system-foundryvtt-reve-de-dragon aside#tooltip .toolclip p.faint {
color: var(--color-tooltip-faint);
}
.system-foundryvtt-reve-de-dragon .chat-card-button,
.system-foundryvtt-reve-de-dragon .chat-card-button-pushed {
border-radius: 0.2rem;
cursor: pointer;
font-family: CaslonPro;
font-size: 0.9rem;
padding: 0.2rem 0.4rem 0rem 0.4rem;
text-decoration: none;
position: relative;
margin: 0.3rem;
border: 2px ridge #846109;
display: inline-block;
}
.system-foundryvtt-reve-de-dragon .chat-card-button img,
.system-foundryvtt-reve-de-dragon .chat-card-button-pushed img {
max-width: 1rem;
max-height: 1rem;
}
.system-foundryvtt-reve-de-dragon .chat-card-info {
font-size: 1.1rem;
display: flex;
@@ -2841,14 +2844,42 @@ select,
.system-foundryvtt-reve-de-dragon .jet-astrologie {
color: var(--major-button-color) !important;
}
.system-foundryvtt-reve-de-dragon .chat-card-button,
.system-foundryvtt-reve-de-dragon .chat-card-button-checked,
.system-foundryvtt-reve-de-dragon select.chat-card-select {
border-radius: 0.2rem;
cursor: pointer;
font-family: CaslonPro;
font-size: 0.9rem;
padding: 0.2rem 0.4rem 0rem 0.4rem;
text-decoration: none;
position: relative;
margin: 0.3rem;
border: 2px ridge #846109;
display: inline-block;
}
.system-foundryvtt-reve-de-dragon .chat-card-button img,
.system-foundryvtt-reve-de-dragon .chat-card-button-checked img,
.system-foundryvtt-reve-de-dragon select.chat-card-select img {
max-width: 1rem;
max-height: 1rem;
}
.system-foundryvtt-reve-de-dragon select.chat-card-select {
width: calc(100% - 0.6rem);
color: var(--major-button-color);
background-color: var(--background-color-custom-button);
}
.system-foundryvtt-reve-de-dragon select.chat-card-select option {
background-color: var(--background-color-custom-button);
}
.system-foundryvtt-reve-de-dragon .chat-card-button {
text-shadow: 1px 1px #4d3534;
box-shadow: inset 1x 1px #a6827e;
color: var(--major-button-color) !important;
color: var(--major-button-color);
background: var(--background-custom-button);
background-color: #7d5d3b00;
background-color: var(--background-color-custom-button);
}
.system-foundryvtt-reve-de-dragon .chat-card-button-pushed {
.system-foundryvtt-reve-de-dragon .chat-card-button-checked {
text-shadow: 1px 1px hsla(202, 30%, 70%, 0.5);
box-shadow: inset -1px -1px #a6827e;
color: hsla(202, 42%, 14%, 0.7);
@@ -2858,11 +2889,11 @@ select,
.system-foundryvtt-reve-de-dragon .chat-card-button:hover {
background: var(--background-custom-button-hover);
}
.system-foundryvtt-reve-de-dragon .chat-card-button-pushed:hover {
.system-foundryvtt-reve-de-dragon .chat-card-button-checked:hover {
background: var(--background-custom-button-hover);
}
.system-foundryvtt-reve-de-dragon .chat-card-button:active,
.system-foundryvtt-reve-de-dragon .chat-card-button-pushed:active {
.system-foundryvtt-reve-de-dragon .chat-card-button-checked:active {
position: relative;
top: 1px;
}

View File

@@ -63,6 +63,7 @@
"StatusUnarmed": "Désarmé",
"StatusGrappling": "Empoignade",
"StatusGrappled": "Empoigné",
"StatusMalade": "Malade",
"StatusRestrained": "Immobilisé",
"StatusComma": "Comma",
"StatusDead": "Mort",

View File

@@ -1,4 +1,4 @@
:root {
body {
/* =================== 2. DEBUGGING HIGHLIGHTERS ============ */
// --debug-background-color-red: #ff000054;
@@ -13,6 +13,7 @@
/* =================== 3. some constants ============ */
--fieldset-background: url(/ui/parchment.jpg);
--rdd-color-text-primary: hsla(0, 0%, 4%, 0.9);
--color-text-primary: hsla(0, 0%, 4%, 0.9);
--rdd-input-background:hsla(0, 0%, 0%, 0.1);
--rdd-color-border-input: hsla(0, 0%, 0%, 0.2);
--rdd-bg-input: hsla(0, 0%, 100%, 0.1);
@@ -44,7 +45,9 @@
hsla(50, 100%, 80%, 0.7)
);
--background-custom-button: linear-gradient(to bottom, hsla(208, 38%, 21%, 0.988) 5%, hsla(202, 42%, 14%, 0.671) 100%);
--background-color-button: hsl(25, 5%, 60%);
--background-color-custom-button: hsla(208, 38%, 21%, 0.988);
--background-custom-button: linear-gradient(to bottom, var(--background-color-custom-button) 5%, hsla(202, 42%, 14%, 0.671) 100%);
--background-custom-button-hover: linear-gradient(to bottom, hsla(0, 100%, 25%, 1) 5%, hsla(0, 97%, 12%, 1) 100%);
--background-control-selected: linear-gradient(to bottom, hsla(0, 100%, 25%, 0.5) 5%, hsla(0, 100%, 12%, 0.5) 100%);
--background-tooltip: hsla(60, 12%, 85%, 0.95);

View File

@@ -70,8 +70,7 @@
/* Fonts */
.sheet header.sheet-header h1 input,
.window-app .window-header,
#actors .directory-list,
#navigation #scene-list .scene.nav-item {
#sidebar {
font-family: "GoudyAcc"
}
@@ -80,6 +79,6 @@
.window-app input,
.sheet header.sheet-header .header-compteurs,
.sheet header.sheet-header .flex-group-center.flex-fatigue,
select, .item-checkbox, #sidebar, #players, #navigation #nav-toggle {
select, .item-checkbox, #players {
font-family: "CaslonAntique"; /* For sheet parts; For nav and title */
}

View File

@@ -216,7 +216,15 @@
}
/* =================== Autres ============ */
:is(section.scenes-sidebar, section.compendium-sidebar) li.directory-item.folder {
a {
text-shadow: 1px 1px 2px var(--rdd-color-text-primary);
color: var( --color-background-chat-message);
}
a:hover {
text-shadow: 1px 0px 0px #ff6600;
}
}
.tabs .item.active,
.blessures-list li ul li:first-child:hover,
i.moral-radio-checkmark-off:hover,
@@ -681,6 +689,7 @@
}
}
}
fieldset {
border-style: groove;
border-width: 0.1rem;
@@ -689,36 +698,56 @@
margin-inline: 0.1rem;
margin-block: 0.1rem;
}
.app.sheet fieldset :is(label, input) {
font-family: CaslonAntique;
text-align: justify;
font-size: 1rem;
letter-spacing: 1px;
}
.app.sheet div.form-group {
clear: both;
display: flex;
flex-direction: row;
flex-wrap: wrap;
margin: 0.1rem 0;
align-items: center;
}
.prosemirror {
menu {
background-color: var(--color-background-chat-message);
}
}
.app.sheet .editor.prosemirror {
height: fit-content;
min-height: 5rem;
}
.app.sheet .editor.prosemirror .editor-container {
min-height: 5rem;
height: 8rem;
margin: 0;
flex: none;
.app.sheet{
fieldset :is(label, input) {
font-family: CaslonAntique;
text-align: justify;
font-size: 1rem;
letter-spacing: 1px;
}
input.attribute-value {
background-color: rgba(0, 0, 0, 0.05);
border: 1px solid var(--color-border-light-tertiary);
padding: 1px 3px;
height: var(--form-field-height);
border-radius: 3px;
}
div.form-group {
clear: both;
display: flex;
flex-direction: row;
flex-wrap: wrap;
margin: 0.1rem 0;
align-items: center;
}
.editor.prosemirror {
height: fit-content;
min-height: 6rem;
.editor-container {
min-height: 6rem;
height: calc(100% - 3rem);
margin: 0;
flex: none;
}
}
}
.app.sheet.journal-entry-page .editor.prosemirror{
height: 100%;
.editor-container {
height: calc(100% - 6rem);
}
}
.large-editor {
border: 2;
@@ -730,20 +759,20 @@
.editor {
border: 2;
height: fit-content;
min-height: 5rem;
min-height: 6rem;
padding: 0 3px;
}
.medium-editor {
border: 2;
min-height: 8rem;
min-height: 9rem;
padding: 0 3px;
align-items: top;
}
.small-editor {
border: 2;
min-height: 2rem;
min-height: 4rem;
padding: 0 3px;
}
@@ -934,20 +963,14 @@
.journal-entry .journal-sidebar {
background: url(../assets/ui/bg_left.webp) no-repeat left top;
color: var(--rdd-color-text-primary);
label,
.hint,
.permissions-list,
nav.tabs,
nav.tabs button,
nav.tabs button .count,
button {
label, .hint, .permissions-list, nav.tabs {
color: var(--rdd-color-text-primary);
}
a {
color: var(--color-dark-3);
}
a.filter.active {
color: var(--color-dark-1);
button .count,
button {
background-color: var(--background-color-button);
color: var(--rdd-color-text-primary);
}
}
@@ -1590,7 +1613,7 @@
#sidebar-tabs > .collapsed,
#chat-controls .chat-control-icon {
color: rgba(220, 220, 220, 0.75);
text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.75);
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.75);
}
.sidebar-tab .directory-list .entity {
@@ -2264,24 +2287,6 @@
color: var(--color-tooltip-faint);
}
.chat-card-button,
.chat-card-button-pushed {
border-radius: 0.2rem;
cursor: pointer;
font-family: CaslonPro;
font-size: 0.9rem;
padding: 0.2rem 0.4rem 0rem 0.4rem;
text-decoration: none;
position: relative;
margin: 0.3rem;
border: 2px ridge #846109;
display: inline-block;
img {
max-width: 1rem;
max-height: 1rem;
}
}
.chat-card-info {
font-size: 1.1rem;
display: flex;
@@ -2298,16 +2303,47 @@
.jet-astrologie {
color: var(--major-button-color) !important;
}
.chat-card-button,
.chat-card-button-checked,
select.chat-card-select {
border-radius: 0.2rem;
cursor: pointer;
font-family: CaslonPro;
font-size: 0.9rem;
padding: 0.2rem 0.4rem 0rem 0.4rem;
text-decoration: none;
position: relative;
margin: 0.3rem;
border: 2px ridge #846109;
display: inline-block;
img {
max-width: 1rem;
max-height: 1rem;
}
}
select.chat-card-select {
width: calc(100% - 0.6rem);
color: var(--major-button-color);
background-color: var(--background-color-custom-button);
option {
background-color: var(--background-color-custom-button);
}
}
.chat-card-button {
text-shadow: 1px 1px #4d3534;
box-shadow: inset 1x 1px #a6827e;
color: var(--major-button-color) !important;
color: var(--major-button-color);
background: var(--background-custom-button);
background-color: #7d5d3b00;
background-color: var(--background-color-custom-button);
}
.chat-card-button-pushed {
.chat-card-button-checked {
text-shadow: 1px 1px hsla(202, 30%, 70%, 0.5);
box-shadow: inset -1px -1px #a6827e;
color: hsla(202, 42%, 14%, 0.7);
@@ -2319,12 +2355,12 @@
background: var(--background-custom-button-hover);
}
.chat-card-button-pushed:hover {
.chat-card-button-checked:hover {
background: var(--background-custom-button-hover);
}
.chat-card-button:active,
.chat-card-button-pushed:active {
.chat-card-button-checked:active {
position: relative;
top: 1px;
}

View File

@@ -6,7 +6,9 @@
"img header buttons"
"img resume buttons"
"details details details"
"actions actions actions";
"description description description"
"actions actions actions"
;
grid-template-columns: 3rem 1fr 1.4rem;
grid-template-rows: max-content max-content max-content max-content;
gap: 0 0.5rem;
@@ -53,6 +55,15 @@
}
}
}
div.chat-description {
grid-area: description;
text-align: justify;
display: flex;
flex-direction: column;
div {
display: block;
}
}
div.chat-buttons {
grid-area: buttons;

View File

@@ -18,6 +18,7 @@ import { RdDBaseActorSangSheet } from "./actor/base-actor-sang-sheet.js";
import { RdDCoeur } from "./coeur/rdd-coeur.js";
import { AppPersonnageAleatoire } from "./actor/random/app-personnage-aleatoire.js";
import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js";
import { MORAL } from "./moral/apprecier.mjs";
/* -------------------------------------------- */
/**
@@ -275,9 +276,9 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
this.html.find('.seuil-reve-value').change(async event => await this.actor.setPointsDeSeuil(event.currentTarget.value))
this.html.find('.stress-test').click(async event => await this.actor.transformerStress())
this.html.find('.moral-malheureux').click(async event => await this.actor.jetDeMoral('malheureuse'))
this.html.find('.moral-neutre').click(async event => await this.actor.jetDeMoral('neutre'))
this.html.find('.moral-heureux').click(async event => await this.actor.jetDeMoral('heureuse'))
this.html.find('.moral-malheureux').click(async event => await this.actor.jetDeMoral(MORAL.MALHEUREUX))
this.html.find('.moral-neutre').click(async event => await this.actor.jetDeMoral(MORAL.NEUTRE))
this.html.find('.moral-heureux').click(async event => await this.actor.jetDeMoral(MORAL.HEUREUX))
this.html.find('.button-ethylisme').click(async event => await this.actor.jetEthylisme())
this.html.find('.ptreve-actuel-plus').click(async event => await this.actor.reveActuelIncDec(1))

View File

@@ -41,17 +41,19 @@ import { RdDItemCompetence } from "./item-competence.js";
import { RdDItemSigneDraconique } from "./item/signedraconique.js";
import { RdDRencontre } from "./item/rencontre.js";
import { DialogSelect } from "./dialog-select.js";
import { PAS_DE_DRACONIC, POSSESSION_SANS_DRACONIC } from "./item/base-items.js";
import { CATEGORIES_COMPETENCES, PAS_DE_DRACONIC, POSSESSION_SANS_DRACONIC } from "./item/base-items.js";
import { RdDRollResult } from "./rdd-roll-result.js";
import { RdDInitiative } from "./initiative.mjs";
import RollDialog from "./roll/roll-dialog.mjs";
import { OptionsAvancees, ROLL_DIALOG_V2, ROLL_DIALOG_V2_TEST } from "./settings/options-avancees.js";
import { OptionsAvancees, ROLL_DIALOG_V2 } from "./settings/options-avancees.js";
import { ROLL_TYPE_JEU, ROLL_TYPE_MEDITATION, ROLL_TYPE_SORT } from "./roll/roll-constants.mjs";
import { PART_TACHE } from "./roll/roll-part-tache.mjs";
import { PART_COMP } from "./roll/roll-part-comp.mjs";
import { PART_OEUVRE } from "./roll/roll-part-oeuvre.mjs";
import { PART_CUISINE } from "./roll/roll-part-cuisine.mjs";
import { RdDPossessionV2 } from "./rdd-possession-v2.mjs";
import { Apprecier, MORAL, SITUATION_MORAL } from "./moral/apprecier.mjs";
export const MAINS_DIRECTRICES = ['Droitier', 'Gaucher', 'Ambidextre']
@@ -130,11 +132,6 @@ export class RdDActor extends RdDBaseActorSang {
return etatGeneral
}
/* -------------------------------------------- */
getActivePoisons() {
return foundry.utils.duplicate(this.items.filter(item => item.type == 'poison' && item.system.active))
}
/* -------------------------------------------- */
getMalusArmure() {
return this.itemTypes[ITEM_TYPES.armure].filter(it => it.system.equipe)
@@ -165,12 +162,15 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
getDemiReve() { return this.system.reve.tmrpos.coord }
getDraconics() { return this.itemTypes[ITEM_TYPES.competence].filter(it => it.system.categorie == 'draconic') }
getDraconics() {
return this.isHautRevant()
? this.itemTypes[ITEM_TYPES.competence].filter(it => it.system.categorie == CATEGORIES_COMPETENCES.draconic.key)
: []
}
getBestDraconic() { return foundry.utils.duplicate([...this.getDraconics(), PAS_DE_DRACONIC].sort(Misc.descending(it => it.system.niveau)).find(it => true)) }
getDraconicOuPossession() {
return [...this.getDraconics().filter(it => it.system.niveau >= 0), POSSESSION_SANS_DRACONIC]
.sort(Misc.descending(it => it.system.niveau))
.find(it => true)
getConjurationNaturelle() {
return new RdDItemCompetence(POSSESSION_SANS_DRACONIC)
}
isForceInsuffisante(forceRequise) {
@@ -332,10 +332,6 @@ export class RdDActor extends RdDBaseActorSang {
await this._recupererVie(message, isMaladeEmpoisonne);
}
getMaladiesPoisons() {
return this.items.filter(item => item.type == 'maladie' || (item.type == 'poison' && item.system.active));
}
_messageRecuperationMaladiePoisons(maladiesPoisons, message) {
if (maladiesPoisons.length > 0) {
const identifies = maladiesPoisons.filter(it => it.system.identifie);
@@ -367,15 +363,15 @@ export class RdDActor extends RdDBaseActorSang {
content: ""
};
await this._recuperationSante(message);
await this._recupereMoralChateauDormant(message);
await this._recupereChance();
await this.transformerStress();
await this.retourSeuilDeReve(message);
await this.setBonusPotionSoin(0);
await this.retourSust(message);
await this.$perteReveEnchantementsChateauDormants();
await this.$suppressionLancementsSort();
await this._recuperationSante(message)
await this._recupereMoralChateauDormant(message)
await this._recupereChance()
await this.transformerStress()
await this.retourSeuilDeReve(message)
await this.setBonusPotionSoin(0)
await this.retourSust(message)
await this.$perteReveEnchantementsChateauDormants()
await this.$suppressionLancementsSort()
await RdDCoeur.applyCoeurChateauDormant(this, message);
if (message.content != "") {
message.content = `A la fin Chateau Dormant, ${message.content}<br>Un nouveau jour se lève`;
@@ -419,11 +415,13 @@ export class RdDActor extends RdDBaseActorSang {
}
async _recupereMoralChateauDormant(message) {
await this.update({ 'system.compteurs.bonmoments': [] }, { render: false })
if (!ReglesOptionnelles.isUsing("recuperation-moral")) { return }
const etatMoral = this.system.sommeil?.moral ?? 'neutre';
const jetMoral = await this._jetDeMoral(etatMoral);
message.content += ` -- le jet de moral est ${etatMoral}, le moral ` + this._messageAjustementMoral(jetMoral.ajustement);
const etatMoral = this.system.sommeil?.moral ?? MORAL.NEUTRE
const jetMoral = await this._jetDeMoral(etatMoral)
message.content += ` -- le jet de moral est ${etatMoral}, le moral ` + this._messageAjustementMoral(jetMoral.ajustement)
}
_messageAjustementMoral(ajustement) {
@@ -697,7 +695,7 @@ export class RdDActor extends RdDBaseActorSang {
const rencontre = await game.system.rdd.rencontresTMR.getReveDeDragon(force);
let rollData = {
actor: this,
competence: this.getDraconicOuPossession(),
competence: this.getDraconicOuPossession().find(it => true),
canClose: false,
rencontre: rencontre,
tmr: true,
@@ -1200,17 +1198,21 @@ export class RdDActor extends RdDBaseActorSang {
}
/* -------------------------------------------- */
async jetDeMoral(situation, messageReussi = undefined, messageManque = undefined) {
const jetMoral = await this._jetDeMoral(situation);
const finMessage = (jetMoral.succes ? messageReussi : messageManque) ?? (jetMoral.ajustement == 0 ? "Vous gardez votre moral" : jetMoral.ajustement > 0 ? "Vous gagnez du moral" : "Vous perdez du moral");
async jetDeMoral(situation, bonmoment = "") {
if (bonmoment != "" && bonmoment != undefined && this.system.compteurs.bonmoments.includes(bonmoment)) {
ui.notifications.info(`${this.name} a déjà gagné du moral après avoir passé un bon moment (${bonmoment}) pendant la journée, pas de gain de moral`)
return
}
const jetMoral = await this._jetDeMoral(situation, bonmoment)
const finMessage = (jetMoral.ajustement == 0 ? "Vous gardez votre moral" : jetMoral.ajustement > 0 ? "Vous gagnez du moral" : "Vous perdez du moral");
ChatMessage.create({
whisper: ChatUtility.getOwners(this),
content: `${finMessage} - jet ${jetMoral.succes ? "réussi" : "manqué"} en situation ${situation} (${jetMoral.jet}/${jetMoral.difficulte}).`
});
return jetMoral.ajustement;
content: `${finMessage} - jet ${jetMoral.succes ? "réussi" : "manqué"} en situation ${SITUATION_MORAL[situation] ?? situation} (${jetMoral.jet}/${jetMoral.difficulte}).`
})
return jetMoral.ajustement
}
async _jetDeMoral(situation) {
async _jetDeMoral(situation, bonmoment = "") {
const moralActuel = Misc.toInt(this.system.compteurs.moral.value);
const jet = await RdDDice.rollTotal("1d20");
const difficulte = 10 + moralActuel;
@@ -1222,14 +1224,18 @@ export class RdDActor extends RdDBaseActorSang {
difficulte: difficulte,
succes: succes,
ajustement: this._calculAjustementMoral(succes, moralActuel, situation)
};
await this.moralIncDec(jetMoral.ajustement);
}
await this.moralIncDec(jetMoral.ajustement, bonmoment);
return jetMoral;
}
/* -------------------------------------------- */
async moralIncDec(ajustementMoral) {
async moralIncDec(ajustementMoral, bonmoment = "") {
if (ajustementMoral != 0) {
if (ajustementMoral > 0 && bonmoment != "" && bonmoment != undefined) {
const bonmoments = [...this.system.compteurs.bonmoments, bonmoment]
await this.update({ 'system.compteurs.bonmoments': bonmoments }, { render: false })
}
const startMoral = parseInt(this.system.compteurs.moral.value)
const moralTheorique = startMoral + ajustementMoral
if (moralTheorique > 3) { // exaltation
@@ -1250,13 +1256,14 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
_calculAjustementMoral(succes, moral, situation) {
switch (situation) {
case 'heureux': case 'heureuse': return succes ? 1 : 0;
case 'malheureuse': case 'malheureux': return succes ? 0 : -1;
case 'neutre':
if (succes && moral < 0) return 1;
if (!succes && moral > 0) return -1;
case MORAL.TRESHEUREUX: return succes ? 2 : 1
case MORAL.HEUREUX: case 'heureuse': return succes ? 1 : 0
case MORAL.MALHEUREUX: case 'malheureuse': return succes ? 0 : -1
case MORAL.NEUTRE:
if (succes && moral < 0) return 1
if (!succes && moral > 0) return -1
}
return 0;
return 0
}
/* -------------------------------------------- */
@@ -1315,33 +1322,31 @@ export class RdDActor extends RdDBaseActorSang {
}
const item = this.getItem(itemId)
if (!item.getUtilisationCuisine()) {
return;
return
}
if (choix.doses > item.system.quantite) {
ui.notifications.warn(`Il n'y a pas assez de ${item.name} pour manger ${choix.doses}`)
return;
return
}
if (!this._apprecierCuisine(item, choix.seForcer)) {
ui.notifications.info(`${this.name} ne n'arrive pas à manger de ${item.name}`)
return;
}
await this.manger(item, choix.doses, { diminuerQuantite: false });
await this.boire(item, choix.doses, { diminuerQuantite: false });
await item.diminuerQuantite(choix.doses, choix);
}
async _apprecierCuisine(item, seForcer) {
const surmonteExotisme = await this._surmonterExotisme(item, seForcer);
if (surmonteExotisme) {
await this.apprecier(CARACS.ODORATGOUT, 'cuisine', item.system.qualite, item.system.boisson ? "apprécie la boisson" : "apprécie le plat");
const onManger = [
async () => await this.manger(item, choix.doses, { diminuerQuantite: false }),
async () => await this.boire(item, choix.doses, { diminuerQuantite: false }),
async () => await item.diminuerQuantite(choix.doses, choix)
]
if (await this._surmonterExotisme(item)) {
const appreciation = item.system.appreciation;
new Apprecier(this, appreciation, item.system.qualite)
.apprecier(onManger)
}
else if (seForcer) {
await this.jetDeMoral('malheureux');
else if (choix.seForcer) {
await this.jetDeMoral(MORAL.MALHEUREUX)
await Promise.all(onManger.map(async callback => await callback()))
}
else {
return false;
ui.notifications.info(`${this.name} ne n'arrive pas à manger de ${item.name}`)
}
return true;
}
/* -------------------------------------------- */
@@ -1367,7 +1372,7 @@ export class RdDActor extends RdDBaseActorSang {
}
const rolled = await this.doRollCaracCompetence(carac, undefined, 0, { title });
if (rolled?.isSuccess) {
await this.jetDeMoral('heureux');
await this.jetDeMoral(MORAL.HEUREUX);
}
}
@@ -1434,7 +1439,7 @@ export class RdDActor extends RdDBaseActorSang {
ethylismeData.perteEndurance = await this.santeIncDec("endurance", -perte);
if (!ethylisme.jet_moral) {
ethylismeData.jetMoral = await this._jetDeMoral('heureuse');
ethylismeData.jetMoral = await this._jetDeMoral(MORAL.HEUREUX, "Ethylisme");
if (ethylismeData.jetMoral.ajustement == 1) {
ethylismeData.moralAlcool = 'heureux';
ethylisme.jet_moral = true;
@@ -1442,7 +1447,7 @@ export class RdDActor extends RdDBaseActorSang {
ethylismeData.jetMoral.ajustement = -1;
ethylismeData.moralAlcool = 'triste';
ethylisme.jet_moral = true;
await this.moralIncDec(-1);
await this.moralIncDec(-1, "Ethylisme");
}
}
if (ethylisme.value < 0) {
@@ -1735,16 +1740,16 @@ export class RdDActor extends RdDBaseActorSang {
type: { allowed: [ROLL_TYPE_SORT], current: ROLL_TYPE_SORT }
};
const dialog = await RollDialog.create(rollData, {
callbacks: [roll => {
this.tmrApp?.restoreTMRAfterAction();
callbacks: [async roll => {
await this.tmrApp?.restoreTMRAfterAction();
if (roll.closeTMR) {
this.tmrApp?.close();
await this.tmrApp?.close();
this.tmrApp = undefined;
}
}],
onRollDone: RollDialog.onRollDoneClose,
onClose: () => {
this.tmrApp?.restoreTMRAfterAction();
onClose: async () => {
await this.tmrApp?.restoreTMRAfterAction();
}
});
this.tmrApp?.setTMRPendingAction(dialog);
@@ -2573,7 +2578,12 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
conjurerPossession(possession) {
RdDPossession.onConjurerPossession(this, possession)
if (OptionsAvancees.isUsing(ROLL_DIALOG_V2)) {
RdDPossessionV2.rollConjurerPossession(this, possession)
}
else {
RdDPossession.onConjurerPossession(this, possession)
}
}
/* -------------------------------------------- */

View File

@@ -1,4 +1,4 @@
import { renderTemplate, SHOW_DICE, SYSTEM_RDD } from "../constants.js";
import { RDD_CONFIG, renderTemplate, SHOW_DICE, SYSTEM_RDD } from "../constants.js";
import { Grammar } from "../grammar.js";
import { Misc } from "../misc.js";
import { RdDResolutionTable } from "../rdd-resolution-table.js";
@@ -22,13 +22,16 @@ import { DialogValidationEncaissement } from "../dialog-validation-encaissement.
import { RdDCombat } from "../rdd-combat.js";
import { RdDEmpoignade } from "../rdd-empoignade.js";
import { RdDPossession } from "../rdd-possession.js";
import { BASE_CORPS_A_CORPS, BASE_ESQUIVE, POSSESSION_SANS_DRACONIC } from "../item/base-items.js";
import { BASE_CORPS_A_CORPS, BASE_ESQUIVE, CATEGORIES_COMPETENCES_CREATURES } from "../item/base-items.js";
import { RollDataAjustements } from "../rolldata-ajustements-v1.js";
import { MappingCreatureArme } from "../item/mapping-creature-arme.mjs";
import RollDialog from "../roll/roll-dialog.mjs";
import { ATTAQUE_ROLL_TYPES, DEFAULT_ROLL_TYPES, DIFF, DIFFS, ROLL_TYPE_ATTAQUE, ROLL_TYPE_COMP, ROLL_TYPE_JEU, ROLL_TYPE_MEDITATION, ROLL_TYPE_OEUVRE, ROLL_TYPE_TACHE } from "../roll/roll-constants.mjs";
import { ATTAQUE_ROLL_TYPES, DEFAULT_ROLL_TYPES, DIFF, ROLL_TYPE_ATTAQUE} from "../roll/roll-constants.mjs";
import { OptionsAvancees, ROLL_DIALOG_V2 } from "../settings/options-avancees.js";
import { PART_COMP } from "../roll/roll-part-comp.mjs";
import { RdDInitiative } from "../initiative.mjs";
import { RdDItemCompetenceCreature } from "../item-competencecreature.js";
import { RdDPossessionV2 } from "../rdd-possession-v2.mjs";
/**
* Classe de base pour les acteurs disposant de rêve (donc, pas des objets)
@@ -114,11 +117,54 @@ export class RdDBaseActorReve extends RdDBaseActor {
return this.system.carac[competence.system.defaut_carac].value;
}
getDraconics() { return [] }
getDraconicOuPossession() {
return [
...this.getDraconics(),
...this.itemTypes[ITEM_TYPES.competencecreature].filter(it => it.isCompetencePossession()),
this.getConjurationNaturelle()
].sort(Misc.descending(it => it.system.niveau));
}
getConjurations() {
return this.getDraconicOuPossession()
.map(it => this.toActionConjuration(it))
}
getConjurationNaturelle() {
return new RdDItemCompetenceCreature({
name: 'Sans compétence',
type: ITEM_TYPES.competencecreature,
img: RDD_CONFIG.icons.possession,
system: {
carac_value: this.getReveActuel(),
niveau: 0,
default_diffLibre: 0,
categorie: CATEGORIES_COMPETENCES_CREATURES.possession.key,
ispossession: true,
}
})
}
toActionConjuration(comp) {
const caracCode = this.isPersonnage() ? CARACS.REVE_ACTUEL : CARACS.REVE
const caracValue = this.getReveActuel()
const ajustement = this.getEtatGeneral()
return {
label: `Conjuration (${comp.name})`,
action: 'possession',
initOnly: false,
comp: comp,
carac: { key: caracCode, value: caracValue },
initiative: RdDInitiative.getRollInitiative(caracValue, comp.system.niveau, ajustement)
}
}
listActions({ isAttaque = false, isEquipe = false }) {
return this.itemTypes[ITEM_TYPES.competencecreature]
.filter(it => it.isAttaque())
.map(it => it.attaqueCreature())
.filter(it => it != undefined);
.filter(it => it != undefined)
}
async computeArmure(dmg) { return this.getProtectionNaturelle() }
@@ -130,13 +176,14 @@ export class RdDBaseActorReve extends RdDBaseActor {
async santeIncDec(name, inc, isCritique = false) { }
async finDeRound(options = { terminer: false }) {
await this.$finDeRoundSuppressionEffetsTermines(options);
await this.finDeRoundBlessures();
await this.$finDeRoundSupprimerObsoletes();
await this.$finDeRoundEmpoignade();
await this.finDeRoundSuppressionEffetsTermines(options)
await this.finDeRoundBlessures()
await this.finDeRoundSupprimerObsoletes()
await this.finDeRoundEmpoignade()
await this.finDeRoundPossession()
}
async $finDeRoundSuppressionEffetsTermines(options) {
async finDeRoundSuppressionEffetsTermines(options) {
for (let effect of this.getEffects()) {
if (effect.duration.type !== 'none' && (effect.duration.remaining <= 0 || options.terminer)) {
await effect.delete();
@@ -148,20 +195,22 @@ export class RdDBaseActorReve extends RdDBaseActor {
async finDeRoundBlessures() {
}
async $finDeRoundSupprimerObsoletes() {
async finDeRoundSupprimerObsoletes() {
const obsoletes = []
.concat(this.itemTypes[ITEM_TYPES.empoignade].filter(it => it.system.pointsemp <= 0))
.concat(this.itemTypes[ITEM_TYPES.possession].filter(it => it.system.compteur < -2 || it.system.compteur > 2))
.map(it => it.id);
.map(it => it.id)
await this.deleteEmbeddedDocuments('Item', obsoletes);
}
async $finDeRoundEmpoignade() {
const immobilisations = this.itemTypes[ITEM_TYPES.empoignade].filter(it => it.system.pointsemp >= 2 && it.system.empoigneurid == this.id);
immobilisations.forEach(emp => RdDEmpoignade.onImmobilisation(this,
game.actors.get(emp.system.empoigneid),
emp
))
async finDeRoundEmpoignade() {
await Promise.all(this.itemTypes[ITEM_TYPES.empoignade]
.filter(it => it.system.pointsemp >= 2 && it.system.empoigneurid == this.id)
.map(async it => await RdDEmpoignade.onImmobilisation(this, it)))
}
async finDeRoundPossession(){
await Promise.all(this.itemTypes[ITEM_TYPES.possession]
.map(async it => await RdDPossessionV2.onPossession(this, it)))
}
async setSonne(sonne = true) { }
@@ -200,8 +249,6 @@ export class RdDBaseActorReve extends RdDBaseActor {
return false
}
getDraconicOuPossession() { return POSSESSION_SANS_DRACONIC }
getPossession(possessionId) {
return this.itemTypes[ITEM_TYPES.possession].find(it => it.system.possessionid == possessionId);
}
@@ -557,6 +604,10 @@ export class RdDBaseActorReve extends RdDBaseActor {
})
}
rollPossession() {
RdDPossessionV2.rollAttaquePossession(this)
}
verifierForceMin(item) { }
/* -------------------------------------------- */

View File

@@ -130,7 +130,7 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
let result = {
sonne: false,
};
let perteEndurance = 0
let minValue = name == "vie" ? -this.getSConst() - 1 : 0;
result.newValue = Math.max(minValue, Math.min(compteur.value + inc, compteur.max));
@@ -145,16 +145,10 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
if (inc > 0) { // le max d'endurance s'applique seulement à la récupération
result.newValue = Math.min(result.newValue, this._computeEnduranceMax())
}
const perte = compteur.value - result.newValue;
result.perte = perte;
if (perte > 1) {
// Peut-être sonné si 2 points d'endurance perdus d'un coup
foundry.utils.mergeObject(result, await this.jetEndurance(result.newValue));
} else if (inc > 0) {
await this.setSonne(false);
}
perteEndurance = compteur.value - result.newValue;
result.perte = perteEndurance
if (sante.fatigue && inc < 0) { // Each endurance lost -> fatigue lost
fatigue = perte;
fatigue = perteEndurance;
}
}
compteur.value = result.newValue;
@@ -163,6 +157,14 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
sante.fatigue.value = Math.max(sante.fatigue.value + fatigue, this.getFatigueMin());
}
await this.update({ "system.sante": sante }, { render: true })
if (perteEndurance > 1) {
// Peut-être sonné si 2 points d'endurance perdus d'un coup
foundry.utils.mergeObject(result, await this.jetEndurance(result.newValue));
} else if (name == "endurance" && inc > 0) {
await this.setSonne(false);
}
if (this.isDead()) {
await this.setEffect(STATUSES.StatusComma, true);
}
@@ -181,28 +183,46 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
}
async onCreateItem(item, options, id) {
switch (item.type) {
case ITEM_TYPES.blessure:
await this.changeBleedingState()
break
}
await this.changeItemEffects(item)
await super.onCreateItem(item, options, id)
}
async onUpdateItem(item, options, id) {
switch (item.type) {
case ITEM_TYPES.blessure:
await this.changeBleedingState()
break
}
await this.changeItemEffects(item);
await super.onUpdateItem(item, options, id)
}
async changeBleedingState() {
async onDeleteItem(item, options, id) {
await this.changeItemEffects(item);
await super.onDeleteItem(item, options, id)
}
async changeItemEffects(item) {
switch (item.type) {
case ITEM_TYPES.blessure:
await this.changeStateBleeding();
break;
case ITEM_TYPES.maladie:
case ITEM_TYPES.poison:
await this.changeStateMalade();
break;
}
}
async changeStateBleeding() {
const bleeding = this.itemTypes[ITEM_TYPES.blessure].find(it => it.isBleeding())
await this.setEffect(STATUSES.StatusBleeding, bleeding ? true : false)
}
async changeStateMalade() {
const maladiePoisons = this.getMaladiesPoisons()
await this.setEffect(STATUSES.StatusMalade, maladiePoisons.length > 0)
}
getMaladiesPoisons() {
return this.items.filter(it => [ITEM_TYPES.maladie, ITEM_TYPES.poison].includes(it.type))
}
/* -------------------------------------------- */
async ajouterBlessure(encaissement, attackerToken = undefined) {
if (encaissement.gravite < 0) return;

View File

@@ -11,6 +11,7 @@ import { RdDUtility } from "../rdd-utility.js";
import { SystemCompendiums } from "../settings/system-compendiums.js";
import { RdDItem } from "../item.js";
import { StatusEffects, STATUSES } from "../settings/status-effects.js";
import { Apprecier } from "../moral/apprecier.mjs";
export class RdDBaseActor extends Actor {
@@ -220,6 +221,7 @@ export class RdDBaseActor extends Actor {
isEntite() { return false }
isEntiteIncarnee() { return false }
isEntiteNonIncarnee() { return false }
isEntiteBlurette() { return false }
isHautRevant() { return false }
isVehicule() { return false }
isPersonnage() { return false }
@@ -279,14 +281,16 @@ export class RdDBaseActor extends Actor {
async removeEffects(filter = e => true) {
if (game.user.isGM) {
const effectsToRemove = this.getEffects(filter)
if (this.canRemoveEffect(effectsToRemove)) {
const ids = effectsToRemove.map(it => it.id)
const ids = this.getEffects(filter)
.filter(it => this.canRemoveEffects(it))
.map(it => it.id)
if (ids.length > 0) {
await this.deleteEmbeddedDocuments('ActiveEffect', ids)
}
}
}
canRemoveEffect(effect) {
canRemoveEffects(effect) {
if (effect.statuses.has(STATUSES.StatusSurEnc)) {
return !this.isSurenc()
}
@@ -514,10 +518,13 @@ export class RdDBaseActor extends Actor {
async acheter(item, quantite, cout, achat) {
await this.depenserSols(cout)
const createdItemId = await this.creerQuantiteItem(item, quantite)
if (achat.choix.consommer && item.type == 'nourritureboisson' && createdItemId != undefined) {
if (item.type == ITEM_TYPES.nourritureboisson && achat.choix.consommer && createdItemId != undefined) {
achat.choix.doses = achat.choix.nombreLots;
await this.consommerNourritureboisson(createdItemId, achat.choix, achat.vente.actingUserId);
}
if (item.type == ITEM_TYPES.service) {
new Apprecier(this, item.system.appreciation, item.system.qualite).apprecier()
}
}
verifierFortune(cout) {
@@ -846,6 +853,7 @@ export class RdDBaseActor extends Actor {
listActionsPossessions() {
return this.itemTypes[ITEM_TYPES.possession]
.filter(it => !it.system.possede)
.map(p => {
return {
label: p.name,
@@ -854,9 +862,4 @@ export class RdDBaseActor extends Actor {
}
})
}
listActionsCombat() {
const possessions = this.listActionsPossessions()
return possessions.length > 0 ? possessions : this.listActions({})
}
}

View File

@@ -19,8 +19,8 @@ export class RdDEntite extends RdDBaseActorReve {
isEntite() { return true }
isEntiteNonIncarnee() { return this.system.definition.typeentite == ENTITE_NONINCARNE }
isEntiteIncarnee() { return [ENTITE_INCARNE, ENTITE_BLURETTE].includes(this.system.definition.typeentite) }
isEntiteBlurette() { return this.system.definition.typeentite !== ENTITE_BLURETTE }
isEntiteIncarnee() { return !this.isEntiteNonIncarnee() }
isEntiteBlurette() { return this.system.definition.typeentite == ENTITE_BLURETTE }
getReveActuel() {
return Misc.toInt(this.system.carac.reve?.value)
@@ -41,13 +41,6 @@ export class RdDEntite extends RdDBaseActorReve {
getChance() { return this.getReve() }
getEnduranceMax() { return Math.max(1, this.getTaille() + this.getReve()) }
getDraconicOuPossession() {
return this.itemTypes[ITEM_TYPES.competencecreature]
.filter(it => it.system.categorie == 'possession')
.sort(Misc.descending(it => it.system.niveau))
.find(it => true);
}
async remiseANeuf() {
if (!this.isEntiteNonIncarnee()) {
await this.update({
@@ -108,6 +101,15 @@ export class RdDEntite extends RdDBaseActorReve {
return true
}
listActionsPossessions() {
if (this.isEntiteNonIncarnee()) {
return this.itemTypes[ITEM_TYPES.competencecreature]
.filter(it => it.system.ispossession)
.map(it => it.attaqueCreature())
.filter(it => it != undefined)
}
return super.listActionsPossessions()
}
/* -------------------------------------------- */
async setEntiteReveAccordee(actor) {
if (this.isEntiteIncarnee()) {

View File

@@ -76,6 +76,15 @@ export class ChatUtility {
ChatUtility.removeMessages({ part: part });
}
static remover(chatMessage) {
const messageId = chatMessage.id;
if (messageId) {
return (..._) => ChatUtility.removeMessages({ messageId: messageId });
}
return (..._) => { }
}
static removeChatMessageId(messageId) {
if (messageId) {
ChatUtility.removeMessages({ messageId: messageId });

View File

@@ -1,6 +1,7 @@
import { RdDBaseActor } from "../actor/base-actor.js";
import { ChatUtility } from "../chat-utility.js";
import { renderTemplate } from "../constants.js";
import { MORAL } from "../moral/apprecier.mjs";
const INFO_COEUR = 'info-coeur';
@@ -122,7 +123,7 @@ export class RdDCoeur {
const diff = Math.abs(infoCoeur.source.jetTendre - infoCoeur.target.jetTendre)
for (let amoureux of [infoCoeur.source, infoCoeur.target]) {
const actorAmoureux = game.actors.get(amoureux.actor.id);
amoureux.situation = diff <= amoureux.coeur ? 'heureux' : 'neutre'
amoureux.situation = diff <= amoureux.coeur ? MORAL.HEUREUX : MORAL.NEUTRE
amoureux.gainMoral = await actorAmoureux.jetDeMoral(amoureux.situation)
}
const chatHtml = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/coeur/chat-accepter-tendre-moment.hbs`, infoCoeur)

View File

@@ -61,10 +61,12 @@ export const RDD_CONFIG = {
armesDisparates: 'systems/foundryvtt-reve-de-dragon/assets/actions/armes-disparates.svg',
demiReve: 'systems/foundryvtt-reve-de-dragon/assets/actions/sort.svg',
empoignade: 'systems/foundryvtt-reve-de-dragon/assets/actions/empoignade.svg',
possession: 'systems/foundryvtt-reve-de-dragon/assets/actions/possession.svg',
forceWeak: 'systems/foundryvtt-reve-de-dragon/assets/actions/weak.svg',
surenc: 'systems/foundryvtt-reve-de-dragon/assets/actions/surenc.svg',
magique: 'systems/foundryvtt-reve-de-dragon/assets/actions/magique.svg',
armebrisee: 'systems/foundryvtt-reve-de-dragon/assets/actions/arme-brisee.svg',
malade: 'systems/foundryvtt-reve-de-dragon/assets/actions/malade.svg',
},
encaissement: {
mortel: 'mortel',

View File

@@ -3,6 +3,7 @@ import { renderTemplate } from "./constants.js"
export class DialogSelect extends Dialog {
static extractIdNameImg(it) { return { id: it.id, name: it.name, img: it.img } }
static async select(selectionData, onSelectChoice) {
const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-select.hbs", selectionData)

View File

@@ -14,6 +14,8 @@ import { RdDTimestamp } from "./time/rdd-timestamp.js";
import { FLEUVE_COORD, TMRUtility } from "./tmr-utility.js";
import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js";
import { ItemAction } from "./item/item-actions.js";
import { SANS_COMPETENCE } from "./item/base-items.js";
import { Apprecier } from "./moral/apprecier.mjs";
/**
* Extend the basic ItemSheet for RdD specific items
@@ -89,6 +91,7 @@ export class RdDItemSheetV1 extends foundry.appv1.sheets.ItemSheet {
/* -------------------------------------------- */
async getData() {
const competences = (await SystemCompendiums.getCompetences(ACTOR_TYPES.personnage))
let formData = {
title: this.item.name,
id: this.item.id,
@@ -101,8 +104,9 @@ export class RdDItemSheetV1 extends foundry.appv1.sheets.ItemSheet {
descriptionmj: await RdDTextEditor.enrichHTML(this.item.system.descriptionmj, this.item),
isComestible: this.item.getUtilisationCuisine(),
options: RdDSheetUtility.mergeDocumentRights({}, this.item, this.isEditable),
competences: await SystemCompendiums.getCompetences(ACTOR_TYPES.personnage),
competences: [SANS_COMPETENCE, ...competences],
categories: RdDItem.getCategories(this.item.type),
isAppreciable: Apprecier.isAppreciable(this.item)
}
if (this.item.type == ITEM_TYPES.competencecreature) {

View File

@@ -28,7 +28,7 @@ const typesInventaireMateriel = [
]
const typesInventaire = {
materiel: typesInventaireMateriel,
all: ['service'].concat(typesInventaireMateriel),
all: [ITEM_TYPES.service].concat(typesInventaireMateriel),
}
const typesObjetsOeuvres = [ITEM_TYPES.oeuvre, ITEM_TYPES.recettecuisine, ITEM_TYPES.musique, ITEM_TYPES.chant, ITEM_TYPES.danse, ITEM_TYPES.jeu]
@@ -36,6 +36,10 @@ const typesObjetsDraconiques = [ITEM_TYPES.queue, ITEM_TYPES.ombre, ITEM_TYPES.s
const typesObjetsConnaissance = [ITEM_TYPES.meditation, ITEM_TYPES.recettealchimique, ITEM_TYPES.sort]
const typesObjetsEffet = [ITEM_TYPES.possession, ITEM_TYPES.poison, ITEM_TYPES.maladie, ITEM_TYPES.blessure]
const typesObjetsCompetence = [ITEM_TYPES.competence, ITEM_TYPES.competencecreature]
const typesAppreciable = [
ITEM_TYPES.oeuvre, ITEM_TYPES.musique, ITEM_TYPES.chant, ITEM_TYPES.danse, ITEM_TYPES.nourritureboisson,
ITEM_TYPES.jeu, ITEM_TYPES.service
]
const typesObjetsTemporels = [ITEM_TYPES.blessure, ITEM_TYPES.poison, ITEM_TYPES.maladie, ITEM_TYPES.queue, ITEM_TYPES.ombre, ITEM_TYPES.souffle, ITEM_TYPES.signedraconique, ITEM_TYPES.rencontre]
const typesObjetsEquipable = [ITEM_TYPES.arme, ITEM_TYPES.armure, ITEM_TYPES.objet];
const typesEnvironnement = typesInventaireMateriel;
@@ -96,14 +100,14 @@ export class RdDItem extends Item {
switch (field) {
case 'quantite':
if (ITEM_TYPES.conteneur == type) {
return false;
return false
}
break;
case 'cout':
if (ITEM_TYPES.monnaie == type) {
return game.user.isGM;
}
break;
break
}
return true;
}
@@ -180,10 +184,10 @@ export class RdDItem extends Item {
isCompetencePersonnage() { return this.type == ITEM_TYPES.competence }
isCompetenceCreature() { return this.type == ITEM_TYPES.competencecreature }
isConteneur() { return this.type == ITEM_TYPES.conteneur; }
isMonnaie() { return this.type == ITEM_TYPES.monnaie; }
isConteneur() { return this.type == ITEM_TYPES.conteneur }
isMonnaie() { return this.type == ITEM_TYPES.monnaie }
isNourritureBoisson() { return this.type == ITEM_TYPES.nourritureboisson; }
isService() { return this.type == ITEM_TYPES.service; }
isService() { return this.type == ITEM_TYPES.service }
isAttaque() { return false }
isParade() { return false }
isBouclier() { return false }
@@ -205,7 +209,7 @@ export class RdDItem extends Item {
return this.isCompetence() && ['melee', 'tir', 'lancer'].includes(this.system.categorie)
}
isCompetencePossession() { return ITEM_TYPES.competencecreature == this.type && this.system.categorie == "possession" }
isCompetencePossession() { return ITEM_TYPES.competencecreature == this.type && this.system.categorie == CATEGORIES_COMPETENCES_CREATURES.possession.key }
isTemporel() { return typesObjetsTemporels.includes(this.type) }
isOeuvre() { return typesObjetsOeuvres.includes(this.type) }
isDraconique() { return RdDItem.getItemTypesDraconiques().includes(this.type) }
@@ -214,6 +218,7 @@ export class RdDItem extends Item {
isConnaissance() { return typesObjetsConnaissance.includes(this.type) }
isInventaire(mode = 'materiel') { return RdDItem.getItemTypesInventaire(mode).includes(this.type); }
isAppreciable() { return typesAppreciable.includes(this.type) }
isBoisson() { return this.isNourritureBoisson() && this.system.boisson; }
isAlcool() { return this.isNourritureBoisson() && this.system.boisson && this.system.alcoolise; }
isHerbeAPotion() { return this.type == ITEM_TYPES.herbe && (this.system.categorie == 'Soin' || this.system.categorie == 'Repos'); }
@@ -364,11 +369,11 @@ export class RdDItem extends Item {
getEnc() {
switch (this.type) {
case ITEM_TYPES.service:
return 0;
return 0
case ITEM_TYPES.herbe:
return this.getEncHerbe();
return this.getEncHerbe()
}
return Math.max(this.system.encombrement ?? 0, 0);
return Math.max(this.system.encombrement ?? 0.0, 0.0);
}
getEncContenu() {
@@ -384,9 +389,9 @@ export class RdDItem extends Item {
getEncHerbe() {
switch (this.system.categorie) {
case 'Repos': case 'Soin': case 'Alchimie':
return encBrin;
return encBrin
}
return this.system.encombrement;
return this.system.encombrement
}

View File

@@ -278,6 +278,10 @@ export class RdDItemArme extends RdDItem {
return this.system.mortalite == RDD_CONFIG.encaissement.empoignade
}
isPossession() {
return this.system.mortalite == RDD_CONFIG.encaissement.possession
}
isUtilisableEmpoigne() {
return this.system.baseInit == 3 || this.system.baseInit == 4 || this.system.competence == "Dague"
}

View File

@@ -1,22 +1,5 @@
export const POSSESSION_SANS_DRACONIC = { name: 'Sans draconic', type: 'competence', system: { niveau: 0, defaut_carac: "reve-actuel", }, img: 'systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp' }
export const PAS_DE_DRACONIC = { name: 'Pas de draconic', type: 'competence', system: { niveau: -11, defaut_carac: "reve" }, img: 'systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp' }
export const BASE_CORPS_A_CORPS = { name: 'Corps à Corps', type: 'competence', system: { niveau: -6, defaut_carac: "melee" }, img: 'systems/foundryvtt-reve-de-dragon/icons/competence_corps_a_corps.webp' }
export const BASE_ESQUIVE = { name: 'Esquive', type: 'competence', system: { niveau: -6, defaut_carac: "derobee" }, img: 'systems/foundryvtt-reve-de-dragon/icons/competence_esquive.webp' }
export const SANS_COMPETENCE = {
name: "Sans compétence",
type: 'competence',
system: {
niveau: 0,
default_diffLibre: 0,
base: 0,
categorie: "Aucune",
description: "",
descriptionmj: "",
defaut_carac: "",
},
img: "systems/foundryvtt-reve-de-dragon/icons/templates/icone_parchement_vierge.webp"
}
import { ITEM_TYPES, RDD_CONFIG } from "../constants.js"
import { CARACS } from "../rdd-carac.js"
export const CATEGORIES_COMPETENCES = {
generale: { key: 'generale', base: -4, label: "Générales" },
@@ -39,3 +22,25 @@ export const CATEGORIES_COMPETENCES_CREATURES = {
lancer: { key: 'lancer', base: 0, label: "Lancer" },
possession: { key: 'possession', base: 0, label: "Possession" },
}
export const POSSESSION_SANS_DRACONIC = {
name: 'Sans draconic',
type: ITEM_TYPES.competence,
img: RDD_CONFIG.icons.possession,
system: { niveau: 0, defaut_carac: CARACS.REVE_ACTUEL, categorie: CATEGORIES_COMPETENCES.draconic.key }
}
export const PAS_DE_DRACONIC = { name: 'Pas de draconic', type: 'competence', system: { niveau: -11, defaut_carac: "reve" }, img: 'systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp' }
export const BASE_CORPS_A_CORPS = { name: 'Corps à Corps', type: 'competence', system: { niveau: -6, defaut_carac: "melee" }, img: 'systems/foundryvtt-reve-de-dragon/icons/competence_corps_a_corps.webp' }
export const BASE_ESQUIVE = { name: 'Esquive', type: 'competence', system: { niveau: -6, defaut_carac: "derobee" }, img: 'systems/foundryvtt-reve-de-dragon/icons/competence_esquive.webp' }
export const SANS_COMPETENCE = {
name: "Sans compétence",
type: ITEM_TYPES.competence,
img: "systems/foundryvtt-reve-de-dragon/icons/templates/icone_parchement_vierge.webp",
system: {
niveau: 0,
default_diffLibre: 0,
categorie: CATEGORIES_COMPETENCES.generale.key,
}
}

View File

@@ -76,7 +76,7 @@ export class RdDItemRace extends RdDItem {
ui.notifications.warn("La Taille est inférieur au minimum racial")
return min
}
const raceMax = this.system.carac.taille.max;
const raceMax = this.system.carac.taille.max == undefined ? 15 + this.system.carac.taille.value : this.system.carac.taille.max
const max = raceMax < 0 ? taille + 1 : raceMax
if (max < taille) {
ui.notifications.warn("La Taille est supérieure au maximum racial")

View File

@@ -68,7 +68,7 @@ export class RdDRencontre extends RdDItem {
}
static async appliquer(codes, tmrDialog, rencData) {
for(const effet of RdDRencontre.mapEffets(codes)){
for(let effet of RdDRencontre.mapEffets(codes)){
await effet.method(tmrDialog, rencData);
}
}

View File

@@ -8,6 +8,7 @@ import { RdDTimestamp } from "./time/rdd-timestamp.js";
import { RdDRaretes } from "./item/raretes.js";
import { VOIES_DRACONIC } from "./item-sort.js";
import { SystemCompendiums } from "./settings/system-compendiums.js";
import { APPRECIATION } from "./moral/apprecier.mjs";
class Migration {
get code() { return "sample"; }
@@ -33,7 +34,6 @@ class Migration {
await Item.updateDocuments(itemUpdates);
}
}
}
class _1_5_34_migrationPngWebp {
@@ -662,6 +662,37 @@ class _13_0_7_FixNiveauOeuvres extends Migration {
}
}
class _13_0_21_AjoutAppreciation extends Migration {
get code() { return "ajout-appreciation" }
get version() { return "13.0.21" }
async migrate() {
await this.applyItemsUpdates(items => items
.filter(it => it.isAppreciable())
.filter(it => this.getBaseAppreciation(it))
.map(it => {
return { _id: it.id, 'system.appreciation': this.getBaseAppreciation(it) }
})
)
}
getBaseAppreciation(item) {
switch (item.type) {
case ITEM_TYPES.nourritureboisson: return APPRECIATION.CUISINE
case ITEM_TYPES.service: return APPRECIATION.SERVICE
case ITEM_TYPES.musique: return APPRECIATION.MUSIQUE
case ITEM_TYPES.chant: return APPRECIATION.CHANT
case ITEM_TYPES.danse: return APPRECIATION.DANSE
case ITEM_TYPES.oeuvre: {
const appreciation = foundry.utils.duplicate(APPRECIATION.OEUVRE)
appreciation.competence = item.system.competence
return appreciation
}
}
return undefined
}
}
export class Migrations {
static getMigrations() {
return [
@@ -687,6 +718,7 @@ export class Migrations {
new _12_0_38_TachesEcriture(),
new _13_0_4_FixReveActuel(),
new _13_0_7_FixNiveauOeuvres(),
new _13_0_21_AjoutAppreciation(),
];
}
@@ -707,7 +739,10 @@ export class Migrations {
}
if (foundry.utils.isNewerVersion(game.system.version, currentVersion)) {
// if (true) { /* comment previous and uncomment here to test before upgrade */
const migrations = Migrations.getMigrations().filter(m => foundry.utils.isNewerVersion(m.version, currentVersion));
const migrations = Migrations.getMigrations().filter(m => foundry.utils.isNewerVersion(m.version, currentVersion)
/* uncomment and set the version to migrate to to force a migration */
// ||m.version == "13.0.21"
)
if (migrations.length > 0) {
migrations.sort((a, b) => this.compareVersions(a, b));
migrations.forEach(async (m) => {

177
module/moral/apprecier.mjs Normal file
View File

@@ -0,0 +1,177 @@
import { ITEM_TYPES } from "../constants.js"
import { SANS_COMPETENCE } from "../item/base-items.js"
import { Misc } from "../misc.js"
import { CARACS } from "../rdd-carac.js"
import { RdDUtility } from "../rdd-utility.js"
import { DIFF } from "../roll/roll-constants.mjs"
import RollDialog from "../roll/roll-dialog.mjs"
import { PART_COMP } from "../roll/roll-part-comp.mjs"
export const MORAL = {
MALHEUREUX: "malheureux",
NEUTRE: "neutre",
HEUREUX: "heureux",
TRESHEUREUX: "très heureux"
}
export const SITUATION_MORAL = {
[MORAL.MALHEUREUX]: "malheureuse",
[MORAL.NEUTRE]: "neutre",
[MORAL.HEUREUX]: "heureuse",
[MORAL.TRESHEUREUX]: "très heureuse",
}
export const APPRECIATION = {
CUISINE: {
bonmoment: "Cuisine", carac: CARACS.ODORATGOUT, competence: "Cuisine",
moral: MORAL.HEUREUX, jetComp: false, jetQualite: false, compMinimum: true
},
MUSIQUE: {
bonmoment: "Musique", carac: CARACS.OUIE, competence: "Musique",
moral: MORAL.HEUREUX, jetComp: false, jetQualite: false, compMinimum: true
},
CHANT: {
bonmoment: "Musique", carac: CARACS.OUIE, competence: "Chant",
moral: MORAL.HEUREUX, jetComp: false, jetQualite: false, compMinimum: true
},
DANSE: {
bonmoment: "Spectacle", carac: CARACS.EMPATHIE, competence: "Danse",
moral: MORAL.HEUREUX, jetComp: false, jetQualite: false, compMinimum: true
},
JEU: {
bonmoment: "Jeu", carac: CARACS.EMPATHIE, competence: "Jeu",
moral: MORAL.HEUREUX, jetComp: false, jetQualite: false, compMinimum: true
},
OEUVRE: {
bonmoment: "Spectacle", carac: CARACS.EMPATHIE, competence: "",
moral: MORAL.HEUREUX, jetComp: false, jetQualite: false, compMinimum: true
},
SERVICE: {
bonmoment: "Confort", carac: CARACS.EMPATHIE, competence: "",
moral: MORAL.HEUREUX, jetComp: false, jetQualite: false, compMinimum: false
},
}
export class Apprecier {
static isAppreciable(item) {
switch (item.type) {
case ITEM_TYPES.nourritureboisson:
case ITEM_TYPES.service:
return item.system.qualite > 0
case ITEM_TYPES.chant:
case ITEM_TYPES.musique:
case ITEM_TYPES.danse:
case ITEM_TYPES.oeuvre:
case ITEM_TYPES.jeu:
return true
}
return false
}
static qualite(qualite, roll = undefined, comp = undefined) {
if (roll && comp) {
return roll.rolled.isSuccess ? qualite : Math.min(qualite, comp.system.niveau)
}
return
}
static getAppreciation(qualite, appreciable, roll = undefined, comp = undefined) {
return {
qualite: (roll?.rolled.ptQualite ?? 0) + Apprecier.qualite(qualite, roll, comp),
appreciation: foundry.utils.duplicate(appreciable.system.appreciation),
messages: []
}
}
static onClickApprecier(roll) {
const appreciation = roll.result.appreciation
if (appreciation.moral == "") {
return
}
RdDUtility.doWithSelectedActor(
actor => new Apprecier(actor, appreciation, roll.result.qualite).apprecier(),
actor => actor.isPersonnage())
}
constructor(actor, appreciation, qualite) {
this.actor = actor
this.appreciation = foundry.utils.duplicate(appreciation)
this.appreciation.situation = SITUATION_MORAL[appreciation.moral]
this.qualite = qualite
this.raisons = []
}
apprecier(callbacks = []) {
if (this.qualite <= 0) {
this.raisons.push(`la qualité ${this.qualite} est négative.`)
}
if (this.qualite <= this.actor.getMoralTotal()) {
this.raisons.push(`la qualité de ${this.qualite} est inférieure au moral de ${this.actor.getMoralTotal()}.`)
}
const competence = this.getCompetenceAppreciation()
if (this.appreciation.compMinimum && this.qualite <= competence.system.niveau && competence.system.niveau > 0 && competence.id) {
this.raisons.push(`la qualité ${this.qualite} est insuffisante pour le niveau ${competence.system.niveau} en ${competence.name}`)
}
const bonmoment = this.appreciation.bonmoment
if (!["", undefined].includes(bonmoment) && this.actor.system.compteurs.bonmoments.includes(bonmoment)) {
this.raisons.push(`du moral a déjà été gagné pour cause de ${bonmoment}`)
}
if (this.appreciation.carac != "") {
this.rollAppreciation(callbacks)
}
else {
this.rollMoral()
}
}
getCompetenceAppreciation() {
return [SANS_COMPETENCE.name, ""].includes(this.appreciation.competence) ? SANS_COMPETENCE : this.actor.getCompetence(this.appreciation.competence)
}
rollAppreciation(rollCallbacks = []) {
const competence = (this.appreciation.jetComp && this.appreciation.competence) ? this.appreciation.competence : ""
const rollData = {
ids: { actorId: this.actor.id },
type: { allowed: [PART_COMP], current: PART_COMP, appreciation: true },
selected: {
carac: { key: this.appreciation.carac, forced: true },
comp: { key: competence, forced: true },
diff: { type: DIFF.IMPOSEE },
apprecier: {
appreciation: this.appreciation,
qualite: this.qualite,
raisons: this.raisons
}
}
}
RollDialog.create(rollData, {
callbacks: [
async r => await this.onRollAppreciation(r),
...rollCallbacks
]
})
}
async onRollAppreciation(roll) {
if (roll.rolled.isSuccess) {
await this.rollMoral()
}
else {
if (this.appreciation.moral == MORAL.TRESHEUREUX) {
await this.rollMoral(MORAL.HEUREUX)
}
}
}
async rollMoral(moral = undefined) {
if (this.raisons.length > 0) {
ui.notifications.info('Pas de jet de moral:' + Misc.concat(this.raisons.map(r => `<br> - ${r}`)))
return
}
moral = moral ?? this.appreciation.moral
// TODO: jet de moral
await this.actor.jetDeMoral(moral, this.appreciation.bonmoment)
}
}

View File

@@ -105,7 +105,7 @@ export class RdDCombatManager extends Combat {
}
else if (!combatant.actor.isActorCombat()) {
if (options.warning) {
ui.notifications.warn(`${combatant.name} ne peut pas combattre!`)
ui.notifications.warn(`L'acteur ${combatant.name} ne peut pas combattre!`)
}
return undefined
}
@@ -369,8 +369,7 @@ export class RdDCombat {
}
static rddCombatForAttackV2(attackerRoll) {
const defenderRoll = RollBasicParts.prepareDefense(attackerRoll)
return RdDCombat.rddCombatForDefenseV2(defenderRoll)
return RdDCombat.rddCombatForDefenseV2(RollBasicParts.prepareDefense(attackerRoll))
}
static rddCombatForDefenseV2(defenderRoll) {
@@ -755,7 +754,7 @@ export class RdDCombat {
}
async _chatMessageDefenseV2(paramDemandeDefense) {
const attackerRoll = paramDemandeDefense.attackerRoll;
const attackerRoll = paramDemandeDefense.attackerRoll
RollBasicParts.loadSurprises(attackerRoll)
attackerRoll.dmg = RdDBonus.dmgRollV2(attackerRoll, attackerRoll.current.attaque)
@@ -1086,7 +1085,6 @@ export class RdDCombat {
async defenseV2(attackerRoll, callbacks = []) {
// this._prepareParade(attackerRoll, arme, competence);
RollDialog.loadRollData(attackerRoll)
await this.doRollDefense({
ids: {
actorId: this.defender.id,

View File

@@ -127,7 +127,7 @@ export class RdDCommands {
<br><strong>/rdd 15 -2</strong> effectue un jet 15 à -2
<br><strong>/rdd 15 0 s</strong> effectue un jet 15 à 0, avec significative requise
<br><strong>/rdd Vue Vigilance -2</strong> effectue un jet de Vue/Vigilance à -2 pour les tokens sélectionnés
<br><strong>/rdd vol déser +2</strong> effectue un jet de Volonté/Survie en désert à +2 pour les tokens sélectionnés
<br><strong>/rdd vol déser +2</strong> effectue un jet de Volonté/Survie en Désert à +2 pour les tokens sélectionnés
`
});
this.registerCommand({
@@ -137,7 +137,7 @@ export class RdDCommands {
<br><strong>/jet Vue</strong> poste une demande de jet de VUE à 0
<br><strong>/jet Vue -2</strong> poste une demande de jet de VUE à -2
<br><strong>/jet Vue Vigilance -2</strong> poste une demande de jet de VUE / Vigilance à -2
<br><strong>/jet vol déser +2</strong> poste une demande de jet de VOLONTÉ / Survie en désert à +2
<br><strong>/jet vol déser +2</strong> poste une demande de jet de VOLONTÉ / Survie en Désert à +2
`
});
this.registerCommand({ path: ["/ddr"], func: (content, msg, params) => this.rollDeDraconique(msg), descr: "Lance un Dé Draconique" });

View File

@@ -21,14 +21,21 @@ export class RdDEmpoignade {
}
static async ajustementEmpoignade(attacker, defender, adjust = 1) {
const empoignade = RdDEmpoignade.getEmpoignade(attacker, defender)
const empId = empoignade?.system.empoignadeid ?? foundry.utils.randomID(16)
let empoignade = RdDEmpoignade.getEmpoignade(attacker, defender)
if (empoignade?.system.empoigneurid == defender.id) {
let empoignade = RdDEmpoignade.getEmpoignade(defender, attacker)
return await RdDEmpoignade.$ajustementEmpoignade(empoignade, defender, attacker, - adjust);
}
return await RdDEmpoignade.$ajustementEmpoignade(empoignade, attacker, defender, adjust);
}
static async $ajustementEmpoignade(empoignade, attacker, defender, adjust) {
const empId = empoignade?.system.empoignadeid ?? foundry.utils.randomID(16);
const empFin = (empoignade?.system.pointsemp ?? 0) + adjust
if (empoignade) {
if (empoignade.system.empoigneurid == defender.id) {
adjust = - adjust
}
empoignade.system.pointsemp += adjust
await RdDEmpoignade.$updateEtatEmpoignade(empoignade, attacker, defender)
empoignade.system.pointsemp = empFin;
await RdDEmpoignade.$updateEtatEmpoignade(empoignade, attacker, defender);
}
else {
await RdDEmpoignade.$createEtatEmpoignade({
@@ -39,24 +46,26 @@ export class RdDEmpoignade {
empoignadeid: empId,
empoigneurid: attacker.id,
empoigneid: defender.id,
pointsemp: adjust,
pointsemp: empFin,
empoigneurname: attacker.name,
empoignename: defender.name
}
}, attacker, defender)
}, attacker, defender);
}
if (adjust != 0 && empFin == 2) {
await RdDEmpoignade.proposerEntrainerAuSol(attacker, defender, empoignade);
}
const result = RdDEmpoignade.getEmpoignadeById(defender, empId);
const defGrappled = result.system.pointsemp == (result.system.empoigneid == defender.id ? 2 : -2)
const attGrappled = result.system.pointsemp == (result.system.empoigneurid == attacker.id ? -2 : 2)
const grappling = Math.abs(result.system.pointsemp) > 0
await defender.setEffect(STATUSES.StatusGrappling, grappling && !defGrappled)
await attacker.setEffect(STATUSES.StatusGrappling, grappling && !attGrappled)
await defender.setEffect(STATUSES.StatusGrappled, defGrappled)
await attacker.setEffect(STATUSES.StatusGrappled, attGrappled)
const defGrappled = result.system.pointsemp == (result.system.empoigneid == defender.id ? 2 : -2);
const attGrappled = result.system.pointsemp == (result.system.empoigneurid == attacker.id ? -2 : 2);
const grappling = Math.abs(result.system.pointsemp) > 0;
await defender.setEffect(STATUSES.StatusGrappling, grappling && !defGrappled);
await attacker.setEffect(STATUSES.StatusGrappling, grappling && !attGrappled);
await defender.setEffect(STATUSES.StatusGrappled, defGrappled);
await attacker.setEffect(STATUSES.StatusGrappled, attGrappled);
return result
}
/* -------------------------------------------- */
static registerChatCallbacks(html) {
$(html).on("click", '.defense-empoignade-cac', event => {
@@ -80,20 +89,20 @@ export class RdDEmpoignade {
const chatMessage = ChatUtility.getChatMessage(event);
const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
RdDEmpoignade.entrainerAuSol(rollData)
ChatUtility.removeChatMessageId(chatMessage.id)
ChatUtility.remover(chatMessage)()
});
$(html).on("click", '.empoignade-projeter-sol', event => {
const chatMessage = ChatUtility.getChatMessage(event);
const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
RdDEmpoignade.projeterAuSol(rollData)
ChatUtility.removeChatMessageId(chatMessage.id)
ChatUtility.remover(chatMessage)()
});
$(html).on("change", '.empoignade-perte-endurance', event => {
const chatMessage = ChatUtility.getChatMessage(event);
const rollData = RdDEmpoignade.$readRollEmpoignade(chatMessage);
if (event.currentTarget.value && event.currentTarget.value != "none") {
RdDEmpoignade.perteEndurance(rollData, event.currentTarget.value)
ChatUtility.removeChatMessageId(chatMessage.id)
ChatUtility.remover(chatMessage)()
}
});
}
@@ -138,8 +147,7 @@ export class RdDEmpoignade {
/* -------------------------------------------- */
static getEmpoignadeById(actor, id) {
let emp = actor.itemTypes[ITEM_TYPES.empoignade].find(it => it.system.empoignadeid == id)
return emp && foundry.utils.duplicate(emp) || undefined;
return actor.itemTypes[ITEM_TYPES.empoignade].find(it => it.system.empoignadeid == id)
}
/* -------------------------------------------- */
@@ -233,12 +241,24 @@ export class RdDEmpoignade {
MappingCreatureArme.setRollDataCreature(rollData)
}
if (empoignade.system.pointsemp >= 2) {
if (!empoignade.system.ausol) {
let msg = await RdDRollResult.displayRollData(rollData, attacker, 'chat-empoignade-entrainer.hbs');
RdDEmpoignade.$storeRollEmpoignade(msg, rollData);
}
await RdDEmpoignade.proposerEntrainerAuSol(attacker, defender, empoignade)
} else {
await RdDEmpoignade.$rollAttaqueEmpoignade(attacker, rollData, isNouvelle);
await RdDEmpoignade.$rollAttaqueEmpoignade(attacker, rollData, isNouvelle)
}
}
static async proposerEntrainerAuSol(attacker, defender, empoignade) {
if (!empoignade.system.ausol) {
const mode = (empoignade && empoignade.system.empoigneurid == attacker.id) ? "empoigner" : "liberer"
const rollData = {
mode, empoignade, attacker, defender,
isEmpoignade: true,
competence: attacker.getCompetenceCorpsACorps(),
selectedCarac: attacker.system.carac.melee,
malusTaille: RdDEmpoignade.getMalusTaille(empoignade, attacker, defender)
}
const msg = await RdDRollResult.displayRollData(rollData, attacker, 'chat-empoignade-entrainer.hbs');
RdDEmpoignade.$storeRollEmpoignade(msg, rollData);
}
}
@@ -249,7 +269,14 @@ export class RdDEmpoignade {
await this.onAttaqueEmpoignadeValidee(attacker, defender)
}
static async onImmobilisation(attacker, defender, empoignade) {
static async onImmobilisation(attacker, empoignade) {
const defender = game.actors.get(empoignade.system.empoigneid)
const empDefenseur = defender.itemTypes[ITEM_TYPES.empoignade]
.find(it => it.system.empoignadeid == empoignade.system.empoignadeid);
await defender.updateEmbeddedDocuments('Item', [{
_id: empDefenseur.id,
'system.immobilise': true
}])
const rollData = {
mode: "immobilise",
empoignade, attacker, defender,
@@ -372,29 +399,35 @@ export class RdDEmpoignade {
/* -------------------------------------------- */
static async $updateEtatEmpoignade(empoignade, attacker, defender) {
console.log("UPDATE Empoignade", empoignade)
const belligerants = [
attacker ?? game.actors.get(empoignade.system.empoigneurid),
defender ?? game.actors.get(empoignade.system.empoigneid)]
const removeEmp = empoignade.system.pointsemp == 0
await Promise.all(
belligerants.map(async belligerant => {
const emp = RdDEmpoignade.getEmpoignadeById(belligerant, empoignade.system.empoignadeid)
return await belligerant.updateEmbeddedDocuments('Item', [{
_id: emp._id,
"system.pointsemp": empoignade.system.pointsemp,
"system.ausol": empoignade.system.ausol
}])
}))
if (removeEmp) {
const emp = RdDEmpoignade.getEmpoignadeById(attacker, empoignade.system.empoignadeid)
return await attacker.deleteEmbeddedDocuments('Item', [emp.id])
}
else {
await Promise.all(
belligerants.map(async belligerant => {
const emp = RdDEmpoignade.getEmpoignadeById(belligerant, empoignade.system.empoignadeid)
return await belligerant.updateEmbeddedDocuments('Item', [{
_id: emp.id,
"system.pointsemp": empoignade.system.pointsemp,
"system.ausol": empoignade.system.ausol
}])
}))
}
}
/* -------------------------------------------- */
static async $deleteEmpoignade(empoignade) {
console.log("DELETE Empoignade", empoignade)
let defender = game.actors.get(empoignade.system.empoigneid)
let emp = RdDEmpoignade.getEmpoignadeById(defender, empoignade.system.empoignadeid)
await defender.deleteEmbeddedDocuments('Item', [emp._id])
const defender = game.actors.get(empoignade.system.empoigneid)
const emp = RdDEmpoignade.getEmpoignadeById(defender, empoignade.system.empoignadeid)
await defender.deleteEmbeddedDocuments('Item', [emp.id])
}
/* -------------------------------------------- */
@@ -436,29 +469,28 @@ export class RdDEmpoignade {
static async perteEndurance(rollData, perteMode) {
let attacker = game.actors.get(rollData.attacker.id)
let defender = game.actors.get(rollData.defender.id)
if (!RdDEmpoignade.isActionAutorisee("immobilise", attacker, defender)) {
if (perteMode == "none" || !RdDEmpoignade.isActionAutorisee("immobilise", attacker, defender)) {
return
}
let empoignade = RdDEmpoignade.getEmpoignade(attacker, defender)
//console.log("Perte d'endurance :!!!", perteMode)
let endValue = defender.system.sante.endurance.value
if (perteMode == "end0") {
await defender.santeIncDec("endurance", -endValue);
}
if (perteMode == "end1") {
await defender.santeIncDec("endurance", -(endValue - 1));
}
if (perteMode == "endmoitie") {
await defender.santeIncDec("endurance", -Math.floor(endValue / 2));
}
if (perteMode == "endquart") {
await defender.santeIncDec("endurance", -(3 * Math.floor(endValue / 4)));
}
let msg = await RdDRollResult.displayRollData(rollData, attacker, 'chat-empoignade-perte-endurance.hbs');
RdDEmpoignade.$storeRollEmpoignade(msg, rollData);
const perteEndurance = await RdDEmpoignade.$calcPerteEnd(perteMode, defender.system.sante.endurance.value)
await defender.santeIncDec("endurance", -perteEndurance)
await RdDRollResult.displayRollData({ attacker, defender, perteEndurance },
attacker,
'chat-empoignade-perte-endurance.hbs')
}
static async $calcPerteEnd(perteMode, endValue) {
switch (perteMode) {
case "none": return 0
case "end0": return endValue
case "end1": return (endValue - 1)
case "3/4": return Math.floor(3 * endValue / 4)
case "1/2": return Math.floor(endValue / 2)
case "1/4": return Math.floor(endValue / 4)
}
const rolled = await (new Roll(perteMode).evaluate())
return rolled.total
}
/* -------------------------------------------- */
static async deleteAllEmpoignades() {
for (let actor of game.actors) {
@@ -473,7 +505,7 @@ export class RdDEmpoignade {
let actor = game.actors.get(actorDeleteId)
let emp = this.getEmpoignadeById(actor, empoignade.system.empoignadeid)
if (emp) {
await actor.deleteEmbeddedDocuments('Item', [emp._id])
await actor.deleteEmbeddedDocuments('Item', [emp.id])
}
}

View File

@@ -0,0 +1,261 @@
import { ITEM_TYPES, RDD_CONFIG } from "./constants.js";
import { RollBasicParts } from "./roll/roll-basic-parts.mjs";
import { ChatUtility } from "./chat-utility.js";
import RollDialog from "./roll/roll-dialog.mjs";
import { Targets } from "./targets.js";
import { RdDUtility } from "./rdd-utility.js";
import { ROLL_TYPE_POSSESSION } from "./roll/roll-constants.mjs";
import { TokenActor } from "./technical/actor-token.mjs";
export const ACTIONS_POSSESSION = {
ATTAQUE: 'attaque',
POSSEDER: 'posseder',
CONJURER: 'conjurer',
DEFENSE: 'defense',
DEFENSE_POSSESSION: 'defense-possession',
DEFENSE_CONJURATION: 'defense-conjuration'
}
export class RdDPossessionV2 {
static init() {
}
static $isInverse(entite, victime) {
return !entite.actor.isEntiteNonIncarnee() && victime.actor.isEntiteNonIncarnee()
}
/* -------------------------------------------- */
static findPossession(entite, victime) {
if (RdDPossessionV2.$isInverse(entite, victime)) {
return RdDPossessionV2.findPossession(victime, entite)
}
return victime.actor.itemTypes[ITEM_TYPES.possession].find(it => it.system.entiteid == entite.id)
}
static async createPossessionIfMissing(entite, victime) {
if (RdDPossessionV2.$isInverse(entite, victime)) {
return await RdDPossessionV2.createPossessionIfMissing(victime, entite)
}
const existing = RdDPossessionV2.findPossession(entite, victime)
if (!existing) {
await victime.actor.createEmbeddedDocuments('Item', [{
name: `Possession de ${entite.name}`,
type: ITEM_TYPES.possession,
img: RDD_CONFIG.icons.possession,
system: {
entiteid: entite.actor.id,
entitetokenid: entite.token.id,
victimeid: victime.actor.id,
victimetokenid: victime.token.id,
compteur: 0
}
}])
}
}
static getTypePossession(active, opponent) {
const itemPossession = RdDPossessionV2.findPossession(active, opponent)
const isEntite = active.actor.isEntiteNonIncarnee() && !opponent.actor.isEntiteNonIncarnee()
const compteur = itemPossession?.system.compteur ?? 0
return {
isEntite: isEntite,
isPersonnage: active.actor.isPersonnage(),
isCompteurPossession: Math.sign(compteur) >= 0,
compteur: Math.abs(compteur)
}
}
static getTypePossessionAction(active, opponent, action) {
const possession = RdDPossessionV2.getTypePossession(active, opponent)
possession.isAttaque = RdDPossessionV2.isAttaque(action)
possession.action = RdDPossessionV2.$getAction(possession.isAttaque, possession.isEntite)
return possession
}
static $getAction(isAttaque, isEntite) {
if (isAttaque) {
return isEntite ? ACTIONS_POSSESSION.POSSEDER : ACTIONS_POSSESSION.CONJURER
}
return isEntite ? ACTIONS_POSSESSION.DEFENSE_CONJURATION : ACTIONS_POSSESSION.DEFENSE_POSSESSION
}
static actionTitle(action) {
switch (action) {
case ACTIONS_POSSESSION.POSSEDER: return "tente de posséder"
case ACTIONS_POSSESSION.CONJURER: return "tente de conjurer"
case ACTIONS_POSSESSION.DEFENSE_POSSESSION: return "résiste à la possession de"
case ACTIONS_POSSESSION.DEFENSE_CONJURATION: return "résiste à la conjuration de"
case ACTIONS_POSSESSION.DEFENSE: return "résiste à "
}
return "lutte contre"
}
static isDefense(action) {
return [ACTIONS_POSSESSION.DEFENSE, ACTIONS_POSSESSION.DEFENSE_POSSESSION, ACTIONS_POSSESSION.DEFENSE_CONJURATION].includes(action)
}
static isAttaque(action) {
return [ACTIONS_POSSESSION.ATTAQUE, ACTIONS_POSSESSION.POSSEDER, ACTIONS_POSSESSION.CONJURER].includes(action)
}
static async rollAttaquePossession(actor) {
const selectedToken = RdDUtility.getSelectedToken(actor)
Targets.selectOneTargetToken(async target => {
RollDialog.create(
{
ids: {
actorId: actor.id,
actorTokenId: selectedToken.id,
opponentId: target.actor.id,
opponentTokenId: target.id
},
passeArme: foundry.utils.randomID(16),
type: { allowed: [ROLL_TYPE_POSSESSION], current: ROLL_TYPE_POSSESSION, possession: { action: ACTIONS_POSSESSION.ATTAQUE } },
},
{
onRollDone: RollDialog.onRollDoneClose,
callbacks: [
async (roll) => await RdDPossessionV2.createPossessionIfMissing(roll.active, roll.opponent),
async (roll) => RdDPossessionV2.$setParticuliereFinesse(roll),
async (roll) => await RdDPossessionV2.chatMessageDefensePossession(roll)
]
})
})
}
static async rollConjurerPossession(actor, possession) {
if (possession.system.possede){
ui.notifications.warn(`${actor.name} est totalement possédé, impossible de conjurer l'entité`)
return
}
RollDialog.create(
{
ids: {
actorId: possession.system.victimeid,
actorTokenId: possession.system.victimetokenid,
opponentId: possession.system.entiteid,
opponentTokenId: possession.system.entitetokenid
},
passeArme: foundry.utils.randomID(16),
type: { allowed: [ROLL_TYPE_POSSESSION], current: ROLL_TYPE_POSSESSION, possession: { action: ACTIONS_POSSESSION.ATTAQUE } },
},
{
onRollDone: RollDialog.onRollDoneClose,
callbacks: [
async (roll) => await RdDPossessionV2.createPossessionIfMissing(roll.active, roll.opponent),
async (roll) => RdDPossessionV2.$setParticuliereFinesse(roll),
async (roll) => await RdDPossessionV2.chatMessageDefensePossession(roll)
]
})
}
static $setParticuliereFinesse(roll) {
if (roll.rolled.isPart) {
roll.particuliere = RDD_CONFIG.particuliere.finesse.key
}
}
static async rollDefensePossession(savedRoll, chatMessage) {
RollBasicParts.restore(savedRoll)
const attackerRoll = savedRoll.attackerRoll
RollDialog.create(
{
ids: savedRoll.ids,
passeArme: attackerRoll.passeArme,
type: { allowed: [ROLL_TYPE_POSSESSION], current: ROLL_TYPE_POSSESSION, possession: { action: ACTIONS_POSSESSION.DEFENSE } },
selected: { diff: { value: attackerRoll.selected?.diff?.value ?? 0 } },
attackerRoll: attackerRoll
},
{
onRollDone: RollDialog.onRollDoneClose, callbacks: [
async roll => await RdDPossessionV2.onRollDefense(roll),
ChatUtility.remover(chatMessage)
]
});
}
static async onRollDefense(defense) {
if (defense.rolled.isEchec) {
await RdDPossessionV2.addPointPossession(defense.opponent.actor, defense.active.actor)
}
RdDPossessionV2.resetPossession(defense)
}
static async onMarquerPointPossession(roll) {
roll.type = {}
await RdDPossessionV2.addPointPossession(roll.opponent, roll.active)
RdDPossessionV2.resetPossession(roll)
await ChatMessage.create({
// message privé: du défenseur à lui même (et aux GMs)
speaker: ChatMessage.getSpeaker({ actor: roll.active.actor, token: roll.active.token }),
alias: roll.opponent.name,
whisper: ChatUtility.getOwners(roll.active.actor),
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/possession/chat-message-marquer.hbs`, roll)
})
}
static resetPossession(roll) {
roll.type.possession = foundry.utils.mergeObject(
roll.type.possession ?? {},
RdDPossessionV2.getTypePossession(roll.opponent, roll.active))
}
static async addPointPossession(entite, victime, points = 1) {
if (RdDPossessionV2.$isInverse(entite, victime)) {
return await RdDPossessionV2.addPointPossession(victime, entite, - points)
}
const existing = RdDPossessionV2.findPossession(entite, victime)
if (existing) {
const compteur = (existing.system.compteur ?? 0) + points
await victime.actor.updateEmbeddedDocuments('Item', [{ _id: existing.id, 'system.compteur': compteur }])
}
}
static async chatMessageDefensePossession(attackerRoll) {
const defense = RollBasicParts.prepareDefense(attackerRoll)
defense.type = {
possession: RdDPossessionV2.getTypePossessionAction(defense.active, defense.opponent, ACTIONS_POSSESSION.DEFENSE)
}
const chatDemandeDefense = await ChatMessage.create({
// message privé: du défenseur à lui même (et aux GMs)
speaker: ChatMessage.getSpeaker({ actor: defense.active.actor, token: defense.active.token }),
alias: attackerRoll.active.name,
whisper: ChatUtility.getOwners(defense.active.actor),
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/possession/chat-demande-defense.hbs', defense)
});
ChatUtility.setMessageData(chatDemandeDefense, 'demande-defense', true)
// // flag pour garder les jets d'attaque/defense
ChatUtility.setMessageData(chatDemandeDefense, 'rollData', {
ids: defense.ids,
attackerRoll: RollDialog.saveParts(attackerRoll),
passeArme: defense.passeArme
})
}
static async onPossession(actor, possession) {
if (Math.abs(possession.system.compteur) >= 2) {
await ChatMessage.create({
alias: actor.getAlias(),
whisper: ChatUtility.getOwners(actor),
content: await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/possession/chat-fin-possession.hbs', {
possession,
active: TokenActor.fromActor(actor),
opponent: TokenActor.fromActor(game.actors.get(possession.system.entiteid))
})
})
if (possession.system.compteur <= -2) {
await actor.deleteEmbeddedDocuments('Item', [possession.id])
}
if (possession.system.compteur >= 2) {
await actor.updateEmbeddedDocuments('Item', [{ _id: possession.id, 'system.possede': true }])
}
}
}
}

View File

@@ -18,9 +18,9 @@ export class RdDPossession {
/* -------------------------------------------- */
static searchPossessionFromEntite(attacker, defender) {
let poss = attacker.items.find(poss => poss.type == ITEM_TYPES.possession && poss.system.victime.actorid == defender.id);
let poss = attacker.itemTypes[ITEM_TYPES.possession].find(poss => poss.system.victime.actorid == defender.id);
if (!poss) {
poss = defender.items.find(poss => poss.type == ITEM_TYPES.possession && poss.system.victime.actorid == defender.id);
poss = defender.itemTypes[ITEM_TYPES.possession].find(poss => poss.system.victime.actorid == defender.id);
}
return poss && foundry.utils.duplicate(poss) || undefined;
}
@@ -94,7 +94,7 @@ export class RdDPossession {
}
static selectCompetenceDraconicOuPossession(rollData, rollingActor) {
rollData.competence = rollingActor.getDraconicOuPossession();
rollData.competence = rollingActor.getDraconicOuPossession().find(it => true);
if (rollingActor.isCreatureOuEntite()) {
const carac = rollingActor.system.carac
rollData.carac = carac
@@ -132,7 +132,7 @@ export class RdDPossession {
}
const possession = (rollData.isECNIDefender ? rollData.attacker : rollData.defender).getPossession(rollData.possession.system.possessionid)
RdDPossession.storePossessionAttaque(possession, rollData)
await RdDRollResult.displayRollData(rollData, rollData.defender, 'chat-resultat-possession.hbs');
await RdDRollResult.displayRollData(rollData, rollData.defender, 'chat-resultat-possession-v1.hbs');
}
/* -------------------------------------------- */
@@ -172,7 +172,7 @@ export class RdDPossession {
rollData.possession = possession
RdDPossession.$updateEtatPossession(rollData.possession)
await RdDRollResult.displayRollData(rollData, rollData.attacker, 'chat-resultat-possession.hbs')
await RdDRollResult.displayRollData(rollData, rollData.attacker, 'chat-resultat-possession-v1.hbs')
if (rollData.possession.isPosseder || rollData.possession.isConjurer) {
// conjuration
await victime.deleteEmbeddedDocuments("Item", [rollData.possession._id])
@@ -226,15 +226,18 @@ export class RdDPossession {
/* -------------------------------------------- */
static async createPossession(attacker, defender) {
return await Item.create({
name: "Possession en cours de " + attacker.name, type: 'possession',
img: "systems/foundryvtt-reve-de-dragon/icons/entites/possession2.webp",
name: `Possession de ${entite.name}`,
type: ITEM_TYPES.possession,
img: RDD_CONFIG.icons.possession,
system: {
description: "", typepossession: attacker.name,
typepossession: attacker.name,
possede: false,
possessionid: foundry.utils.randomID(16),
entiteid: attacker.id,
victimeid: defender.id,
compteur: 0,
entite: { actorid: attacker.id },
victime: { actorid: defender.id },
compteur: 0
victime: { actorid: defender.id }
}
},
{

View File

@@ -16,7 +16,7 @@ export class RdDEncaisser extends Dialog {
/* -------------------------------------------- */
constructor(html, actor) {
if (actor.isEntiteNonIncarnee([ENTITE_NONINCARNE])) {
if (actor.isEntiteNonIncarnee()) {
throw `${actor.name} est une entité non incarnée et ne peut pas subnir de dommages`
}

View File

@@ -34,7 +34,7 @@ export class RdDTokenHud {
const actor = RdDCombatManager.getActorCombatant(combatant, { warning: false })
if (actor) {
if (OptionsAvancees.isUsing(ROLL_DIALOG_V2)) {
await RdDTokenHud.addExtensionHudCombat(html, combatant, actor, token)
await RdDTokenHud.addExtensionHudCombatV2(html, combatant, actor, token)
}
else {
const actions = RdDCombatManager.listActionsActorCombatant(actor)
@@ -47,17 +47,28 @@ export class RdDTokenHud {
}
}
static async addExtensionHudCombat(html, combatant, actor, token) {
const actionsActor = actor.listActionsCombat();
static async addExtensionHudCombatV2(html, combatant, actor, token) {
const isPossession = actor.listActionsPossessions().length > 0;
const actionsCombat = isPossession ? [] : actor.listAttaques()
const ajustements = combatant?.initiative ?
[
{ label: 'Initiative +1', action: 'delta', value: 1 },
{ label: 'Initiative -1', action: 'delta', value: -1 }
] : []
const autres = [{ label: "Autre action", action: 'autre' }]
const actions = Misc.indexed(actionsActor.concat(ajustements).concat(autres))
const actions = Misc.indexed([
...actionsCombat,
...ajustements,
...autres
])
const hudData = { combatant, token, actions };
const hudData = {
combatant,
token,
isPossession,
isEntiteNonIncarnee: actor.isEntiteNonIncarnee(),
actions,
};
const hud = $(await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/hud-actor-combat.hbs', hudData))
$(html).find('div.col.left').append(hud)
@@ -84,6 +95,7 @@ export class RdDTokenHud {
}
})
list.find('.rdd-attaque-v2').click(event => combatant.actor.rollAttaque(token))
list.find('.rdd-possession-v2').click(event => combatant.actor.rollPossession())
}
static async addExtensionHudInit(html, combatant, actions) {

View File

@@ -18,7 +18,7 @@ import { RdDEmpoignade } from "./rdd-empoignade.js";
import { ExperienceLog } from "./actor/experience-log.js";
import { RdDCoeur } from "./coeur/rdd-coeur.js";
import { APP_ASTROLOGIE_REFRESH } from "./sommeil/app-astrologie.js";
import { ITEM_TYPES, RDD_CONFIG, SYSTEM_RDD } from "./constants.js";
import { ACTOR_TYPES, ITEM_TYPES, RDD_CONFIG, SYSTEM_RDD } from "./constants.js";
import { RdDBaseActor } from "./actor/base-actor.js";
import { RdDCarac } from "./rdd-carac.js";
import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js";
@@ -26,6 +26,8 @@ import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js";
import { RdDItemCompetence } from "./item-competence.js";
import { Monnaie } from "./item-monnaie.js";
import { ItemAction } from "./item/item-actions.js";
import { Targets } from "./targets.js";
import { DialogSelect } from "./dialog-select.js";
/* -------------------------------------------- */
// This table starts at 0 -> niveau -10
@@ -180,9 +182,14 @@ export class RdDUtility {
'systems/foundryvtt-reve-de-dragon/templates/item/partial-inventaire.hbs',
'systems/foundryvtt-reve-de-dragon/templates/item/partial-environnement.hbs',
'systems/foundryvtt-reve-de-dragon/templates/item/partial-tab-environnement.hbs',
'systems/foundryvtt-reve-de-dragon/templates/header-item.hbs',
'systems/foundryvtt-reve-de-dragon/templates/item/queue-sheet.hbs',
'systems/foundryvtt-reve-de-dragon/templates/item/partial-header.hbs',
'systems/foundryvtt-reve-de-dragon/templates/item/partial-hautrevant.hbs',
'systems/foundryvtt-reve-de-dragon/templates/item/partial-frequence.hbs',
'systems/foundryvtt-reve-de-dragon/templates/item/partial-description.hbs',
'systems/foundryvtt-reve-de-dragon/templates/item/partial-appreciable.hbs',
'systems/foundryvtt-reve-de-dragon/templates/item/enum-appreciation-bonmoment.hbs',
'systems/foundryvtt-reve-de-dragon/templates/item/enum-appreciation-carac.hbs',
'systems/foundryvtt-reve-de-dragon/templates/item/enum-appreciation-moral.hbs',
// partial enums
'systems/foundryvtt-reve-de-dragon/templates/enum-aspect-tarot.hbs',
'systems/foundryvtt-reve-de-dragon/templates/enum-base-competence.hbs',
@@ -232,9 +239,6 @@ export class RdDUtility {
'systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.hbs',
'systems/foundryvtt-reve-de-dragon/templates/partial-roll-surenc.hbs',
'systems/foundryvtt-reve-de-dragon/templates/partial-select-carac.hbs',
'systems/foundryvtt-reve-de-dragon/templates/partial-item-hautrevant.hbs',
'systems/foundryvtt-reve-de-dragon/templates/partial-item-frequence.hbs',
'systems/foundryvtt-reve-de-dragon/templates/partial-item-description.hbs',
'systems/foundryvtt-reve-de-dragon/templates/roll/explain.hbs',
'systems/foundryvtt-reve-de-dragon/templates/resolution-table.hbs',
// Dialogs
@@ -776,8 +780,9 @@ export class RdDUtility {
let sommeAPayer = Number(event.currentTarget.attributes['data-somme-a-payer']?.value ?? 0);
let actor = RdDUtility.getSelectedActor("Pour effectuer le paiement:");
if (actor) {
actor.payerSols(sommeAPayer);
ChatUtility.removeChatMessageId(RdDUtility.findChatMessageId(event.currentTarget));
actor.payerSols(sommeAPayer)
const chatMessage = RdDUtility.findChatMessageId(event.currentTarget)
ChatUtility.remover(chatMessage)()
}
});
$(html).on("click", '.rdd-world-content-link', async event => {
@@ -846,6 +851,26 @@ export class RdDUtility {
return undefined;
}
static doWithSelectedActor(onSelected = () => { }, filter = actor => true) {
const selected = RdDUtility.getSelectedActor()
if (selected) {
onSelected(selected)
}
else {
const actors = game.actors
.filter(it => it.getUserLevel(game.user) == CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)
.filter(it => ![ACTOR_TYPES.commerce, ACTOR_TYPES.vehicule].includes(it.type))
.filter(filter)
const selectData = {
title: "Choisir un acteur",
label: "Choisir un acteur",
list: actors.map(it => Targets.extractActorData(it))
};
DialogSelect.select(selectData, it => onSelected(game.actors.get(it.id)))
}
}
/* -------------------------------------------- */
static createMonnaie(name, cout, img = "", enc = 0.01) {
let piece = {

View File

@@ -13,6 +13,9 @@ import { PART_ATTAQUE } from "./roll-part-attaque.mjs"
import { RdDRollTables } from "../rdd-rolltables.js"
import { RdDEmpoignade } from "../rdd-empoignade.js"
import { Misc } from "../misc.js"
import { RollBasicParts } from "./roll-basic-parts.mjs"
import { RdDPossessionV2 } from "../rdd-possession-v2.mjs"
import { Apprecier } from "../moral/apprecier.mjs"
export default class ChatRollResult {
static init() {
@@ -23,14 +26,16 @@ export default class ChatRollResult {
static onReady() {
foundry.applications.handlebars.loadTemplates({
'partial-infojet': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-infojet.hbs',
'partial-appel-chance': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-appel-chance.hbs',
'partial-apprecier': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-apprecier.hbs',
'partial-appreciation': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-appreciation.hbs',
'partial-attaque-particuliere': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-attaque-particuliere.hbs',
'partial-choix-maladresse': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-choix-maladresse.hbs',
'partial-maladresse': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-maladresse.hbs',
'partial-encaissement': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-encaissement.hbs',
'partial-recul-choc': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-recul-choc.hbs',
'partial-infojet': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-infojet.hbs',
'partial-info-appel-moral': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-info-appel-moral.hbs',
'partial-maladresse': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-maladresse.hbs',
'partial-recul-choc': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-recul-choc.hbs',
})
}
@@ -53,19 +58,20 @@ export default class ChatRollResult {
prepareDisplay(roll) {
roll.done = roll.done ?? {}
roll.show = roll.show ?? {}
roll.show.chance = this.isAppelChancePossible(roll)
roll.show.encaissement = this.isShowEncaissement(roll)
roll.show.recul = this.getRecul(roll)
roll.show.maladresse = this.getMaladresse(roll)
roll.show.chance = this.$isAppelChancePossible(roll)
roll.show.encaissement = this.$isShowEncaissement(roll)
roll.show.recul = this.$getRecul(roll)
roll.show.maladresse = this.$getMaladresse(roll)
}
isAppelChancePossible(roll) {
$isAppelChancePossible(roll) {
return roll.active.actor.isPersonnage() &&
roll.rolled.isEchec &&
RdDCarac.isActionPhysique(roll.current.carac?.key)
RdDCarac.isActionPhysique(roll.current.carac?.key) &&
!roll.type.appreciation
}
isShowEncaissement(roll) {
$isShowEncaissement(roll) {
switch (roll.type.current) {
case ROLL_TYPE_DEFENSE:
return roll.rolled.isEchec
@@ -73,7 +79,7 @@ export default class ChatRollResult {
return false
}
getMaladresse(roll) {
$getMaladresse(roll) {
switch (roll.type.current) {
case ROLL_TYPE_DEFENSE:
if (roll.rolled.isETotal) {
@@ -91,7 +97,7 @@ export default class ChatRollResult {
return undefined
}
getRecul(roll, defender = roll.active.actor, attacker = roll.opponent?.actor) {
$getRecul(roll, defender = roll.active.actor, attacker = roll.opponent?.actor) {
switch (roll.type.current) {
case ROLL_TYPE_DEFENSE:
{
@@ -134,10 +140,13 @@ export default class ChatRollResult {
$(html).on("click", '.appel-chance', event => this.onClickAppelChance(event))
$(html).on("click", '.appel-destinee', event => this.onClickAppelDestinee(event))
$(html).on("click", '.button-defense', event => this.onClickDefense(event))
$(html).on("click", '.button-defense-possession', event => this.onClickDefensePossession(event))
$(html).on("click", '.marquer-point-possession', event => this.onClickMarquerPointPossession(event))
$(html).on("click", '.encaissement', event => this.onClickEncaissement(event))
$(html).on("click", '.resister-recul', event => this.onClickRecul(event))
$(html).on("click", '.choix-particuliere', event => this.onClickChoixParticuliere(event))
$(html).on("click", '.faire-gouter', event => this.onClickFaireGouter(event))
$(html).on("click", '.apprecier', event => this.onClickApprecier(event))
$(html).on("click", '.monter-tmr-normale', event => this.onClickMonteeTMR(event, 'normal'))
$(html).on("click", '.monter-tmr-rapide', event => this.onClickMonteeTMR(event, 'rapide'))
$(html).on("click", '.tirer-maladresse', event => this.onClickTirerMaladresse(event))
@@ -187,7 +196,7 @@ export default class ChatRollResult {
console.log('onAppelChanceSuccess savedRoll', savedRoll)
reRoll.type.retry = true
await this.updateChatMessage(chatMessage, reRoll)
const callbacks = [r => ChatUtility.removeChatMessageId(chatMessage.id)]
const callbacks = [ChatUtility.remover(chatMessage)]
// TODO: annuler les effets
switch (reRoll.type.current) {
@@ -195,7 +204,6 @@ export default class ChatRollResult {
this.getCombat(reRoll)?.doRollDefense(reRoll, callbacks)
break
case ROLL_TYPE_ATTAQUE:
// TODO
this.getCombat(reRoll)?.doRollAttaque(reRoll, callbacks)
break
default: {
@@ -227,12 +235,28 @@ export default class ChatRollResult {
async onClickDefense(event) {
const chatMessage = ChatUtility.getChatMessage(event)
const savedRoll = this.loadChatMessageRoll(chatMessage)
RollBasicParts.restore(savedRoll)
const attackerRoll = savedRoll.attackerRoll
RollDialog.loadRollData(attackerRoll)
this.getCombat(attackerRoll)?.defenseV2(attackerRoll,
[roll => { ChatUtility.removeChatMessageId(chatMessage.id) }]
[ChatUtility.remover(chatMessage)]
)
}
async onClickDefensePossession(event) {
const chatMessage = ChatUtility.getChatMessage(event)
const savedRoll = this.loadChatMessageRoll(chatMessage)
await RdDPossessionV2.rollDefensePossession(savedRoll, chatMessage)
}
async onClickMarquerPointPossession(event) {
const chatMessage = ChatUtility.getChatMessage(event)
const savedRoll = this.loadChatMessageRoll(chatMessage)
RollBasicParts.restore(savedRoll)
await RdDPossessionV2.onMarquerPointPossession(savedRoll)
ChatUtility.remover(chatMessage)()
}
async onClickEncaissement(event) {
const chatMessage = ChatUtility.getChatMessage(event)
const isMessageDemande = ChatUtility.getMessageData(chatMessage, 'demande-defense')
@@ -255,7 +279,7 @@ export default class ChatRollResult {
break
}
if (isMessageDemande) {
ChatUtility.removeChatMessageId(chatMessage.id)
ChatUtility.remover(chatMessage)()
} else {
savedRoll.done.encaissement = true
await this.updateChatMessage(chatMessage, savedRoll)
@@ -294,6 +318,11 @@ export default class ChatRollResult {
}
await new RollTypeCuisine().onFaireGouter(savedRoll)
}
async onClickApprecier(event) {
const chatMessage = ChatUtility.getChatMessage(event)
const savedRoll = this.loadChatMessageRoll(chatMessage)
await Apprecier.onClickApprecier(savedRoll)
}
async onClickMonteeTMR(event, mode) {
const chatMessage = ChatUtility.getChatMessage(event)

View File

@@ -11,7 +11,7 @@ export class RollBasicParts {
rollData.ids.sceneId = rollData.ids.sceneId ?? canvas.scene.id
rollData.active = RollBasicParts.getTokenActor(rollData)
rollData.opponent = RollBasicParts.getTokenActorOpponent(rollData)
if (rollData.type.opposed == undefined) {
if (rollData.type && rollData.type.opposed == undefined) {
rollData.type.opposed = rollData.opponent != null
}
}
@@ -46,10 +46,10 @@ export class RollBasicParts {
type: rollData.type,
ids: {
sceneId: rollData.ids.sceneId,
actorId: rollData.active.id,
actorTokenId: rollData.active.tokenId,
opponentId: isOpposed ? rollData.opponent.id : undefined,
opponentTokenId: isOpposed ? rollData.opponent.tokenId : undefined,
actorId: rollData.ids.actorId,
actorTokenId: rollData.ids.actorTokenId,
opponentId: isOpposed ? rollData.ids.opponentId : undefined,
opponentTokenId: isOpposed ? rollData.ids.opponentTokenId : undefined,
}
}
}

View File

@@ -1,5 +1,6 @@
export const ROLL_TYPE_ATTAQUE = 'attaque'
export const ROLL_TYPE_POSSESSION = 'possession'
export const ROLL_TYPE_COMP = 'comp'
export const ROLL_TYPE_CUISINE = 'cuisine'
export const ROLL_TYPE_DEFENSE = 'defense'
@@ -27,8 +28,8 @@ export const DIFF = {
export const DIFFS = {
[DIFF.LIBRE]: { key: DIFF.LIBRE, label: "Difficulté libre", libre: true, visible: true, max: 0 },
[DIFF.ATTAQUE]: { key: DIFF.ATTAQUE, label: "Difficulté d'attaque", libre: true, visible: true, max: 0 },
[DIFF.IMPOSEE]: { key: DIFF.IMPOSEE, label: "Diffficulté imposée", libre: false, visible: true, max: 0 },
[DIFF.DEFENSE]: { key: DIFF.DEFENSE, label: "Diffficulté défense", libre: false, visible: true, max: 0 },
[DIFF.IMPOSEE]: { key: DIFF.IMPOSEE, label: "Difficulté imposée", libre: false, visible: true, max: 20 },
[DIFF.DEFENSE]: { key: DIFF.DEFENSE, label: "Difficulté défense", libre: false, visible: true, max: 0 },
[DIFF.DEFAUT]: { key: DIFF.DEFAUT, label: "Difficulté", libre: true, visible: true, max: 5 },
[DIFF.AUCUN]: { key: DIFF.AUCUN, label: "", libre: false, visible: false, max: 0 },
}

View File

@@ -48,6 +48,9 @@ import { RollPartEmpoignade } from "./roll-part-empoignade.mjs";
import { RollPartEmpoignadeTaille } from "./roll-part-empoignade-taille.mjs";
import { RollPartEcailles } from "./roll-part-ecailles.mjs";
import { RollPartResistance } from "./roll-part-resistance.mjs";
import { RollTypePossession } from "./roll-type-possession.mjs";
import { RollPartPossession } from "./roll-part-possession.mjs";
import { RollPartApprecier } from "./roll-part-apprecier.mjs";
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api
@@ -56,6 +59,7 @@ export const ALL_ROLL_TYPES = [
new RollTypeComp(),
new RollTypeTache(),
new RollTypeAttaque(),
new RollTypePossession(),
new RollTypeDefense(),
new RollTypeSort(),
new RollTypeMeditation(),
@@ -75,7 +79,9 @@ const ROLL_PARTS = [
new RollPartComp(),
new RollPartDiff(),
new RollPartApprecier(),
new RollPartAttaque(),
new RollPartPossession(),
new RollPartDefense(),
new RollPartMeditation(),
new RollPartSort(),
@@ -314,15 +320,33 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
return rollData
}
static saveParts(rollData, impacts) {
static saveParts(rollData, impacts = undefined) {
if (rollData == undefined) {
return undefined
}
function saveBasics(from, to) {
if (from) {
to.passeArme = from.passeArme
to.rolled = from.rolled
to.particuliere = from.particuliere
to.result = from.result
to.done = from.done ?? {}
to.dmg = from.dmg
if (from.attackerRoll) {
to.attackerRoll = {}
saveBasics(from.attackerRoll, to.attackerRoll)
}
}
}
const target = RollBasicParts.initFrom(rollData)
ROLL_PARTS.filter(p => p.isActive(rollData))
.forEach(p => p.storeClean(rollData, target))
target.attackerRoll = rollData.attackerRoll
target.rolled = rollData.rolled
target.result = rollData.result
target.done = rollData.done ?? {}
target.dmg = rollData.dmg
if (rollData.current) {
// stockage de current
ROLL_PARTS.filter(p => p.isActive(rollData))
.forEach(p => p.storeClean(rollData, target))
}
saveBasics(rollData, target)
if (impacts) {
target.reverse = {
active: impacts.active?.reverseImpacts(),
@@ -330,6 +354,7 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
}
}
return target
}
constructor(rollData, rollOptions) {
@@ -348,7 +373,7 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
}
this.chatRollResult = new ChatRollResult()
this.selectType()
this.registerHooks(rollData);
this.registerHooks(rollData)
}
registerHooks(rollData) {
@@ -366,10 +391,11 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
selectType() {
const selectedType = this.getSelectedType();
this.rollData.type.label = selectedType.title(this.rollData)
const selectedType = this.getSelectedType()
selectedType.prepare(this.rollData)
selectedType.setRollDataType(this.rollData)
selectedType.onSelect(this.rollData)
this.rollData.type.label = selectedType.title(this.rollData)
ROLL_PARTS.find(it => it.code == PART_CARAC).filterCaracs(this.rollData)
ROLL_PARTS.find(it => it.code == PART_COMP).filterComps(this.rollData)

View File

@@ -0,0 +1,32 @@
import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs";
export const PART_APPRECIER = "apprecier"
export class RollPartApprecier extends RollPart {
get code() { return PART_APPRECIER }
get section() { return ROLLDIALOG_SECTION.CHOIX }
restore(rollData) {
this.setCurrent(rollData, this.getSaved(rollData))
}
store(rollData, targetData) {
this.setSaved(targetData, this.getCurrent(rollData))
}
visible(rollData) {
return rollData.type.appreciation
}
getAjustements(rollData) {
const current = this.getCurrent(rollData)
if (current.appreciation.jetQualite){
return [{
label: 'Qualité',
value: Math.abs(current.qualite)
}]
}
return []
}
}

View File

@@ -1,5 +1,6 @@
import { Grammar } from "../grammar.js"
import { ReglesOptionnelles } from "../settings/regles-optionnelles.js"
import { ROLL_TYPE_SORT } from "./roll-constants.mjs"
import { RollPartCheckbox } from "./roll-part-checkbox.mjs"
export const PART_ASTROLOGIQUE = "astrologique"
@@ -15,7 +16,7 @@ export class RollPartAstrologique extends RollPartCheckbox {
}
isLancementRituel(rollData) {
return false
return rollData.type.current == ROLL_TYPE_SORT && rollData.current.sort?.sort?.system.isrituel
}
isJetChance(rollData) {

View File

@@ -22,7 +22,12 @@ export class RollPartComp extends RollPartSelect {
if (selected.forced) {
refs.all = all.filter(comp => Grammar.equalsInsensitive(comp.label, selected.key))
if (refs.all.length == 0) {
refs.all = all.filter(comp => Grammar.includesLowerCaseNoAccent(comp.label, selected.key))
if (selected.key.length > 0) {
refs.all = all.filter(comp => Grammar.includesLowerCaseNoAccent(comp.label, selected.key))
}
else {
refs.all = all.filter(comp => comp == SANS_COMPETENCE)
}
}
}
else {

View File

@@ -16,8 +16,8 @@ export class RollPartDefense extends RollPartSelect {
get code() { return PART_DEFENSE }
get section() { return ROLLDIALOG_SECTION.CHOIX }
isValid(rollData) { return rollData.attackerRoll != undefined }
visible(rollData) { return this.isRollType(rollData, ROLL_TYPE_DEFENSE) }
isValid(rollData) { return this.isRollType(rollData, ROLL_TYPE_DEFENSE) && rollData.attackerRoll != undefined }
visible(rollData) { return this.isRollType(rollData, ROLL_TYPE_DEFENSE) && rollData.attackerRoll != undefined }
static getDiffAttaque(attackerRoll) {
// TODO: rollDataV2?

View File

@@ -32,7 +32,7 @@ export class RollPartDiff extends RollPart {
}
visible(rollData) {
if (EXCLUDED_ROLL_TYPES.includes(rollData.type.current)) {
if (EXCLUDED_ROLL_TYPES.includes(rollData.type.current) || rollData.type.appreciation) {
return false
}
const current = this.getCurrent(rollData)

View File

@@ -0,0 +1,85 @@
import { CATEGORIES_COMPETENCES_CREATURES } from "../item/base-items.js"
import { CARACS } from "../rdd-carac.js"
import { RdDPossessionV2 } from "../rdd-possession-v2.mjs"
import { ROLL_TYPE_POSSESSION } from "./roll-constants.mjs"
import { PART_CARAC } from "./roll-part-carac.mjs"
import { PART_COMP } from "./roll-part-comp.mjs"
import { RollPartSelect } from "./roll-part-select.mjs"
import { ROLLDIALOG_SECTION } from "./roll-part.mjs"
export const PART_POSSESSION = "possession"
export class RollPartPossession extends RollPartSelect {
/** TODO: remplacer selectOption par un sélecteur plus sympa (avec image de compétence, par exemple? */
get code() { return PART_POSSESSION }
get name() { return 'Possession' }
get section() { return ROLLDIALOG_SECTION.CHOIX }
visible(rollData) { return this.isRollType(rollData, ROLL_TYPE_POSSESSION) }
loadRefs(rollData) {
const refs = this.getRefs(rollData)
refs.all = this.$getActorConjurations(rollData)
this.$selectPossession(rollData)
}
choices(refs) { return refs.all }
$getActorConjurations(rollData) {
const competences = rollData.active.actor.getDraconicOuPossession()
return competences.map(RollPartPossession.extractPossession)
}
static extractPossession(comp) {
return {
key: comp.id ?? comp.name,
label: `${comp.system.categorie == CATEGORIES_COMPETENCES_CREATURES.possession.key ? 'Possession' : 'Conjuration'} (${comp.name})`,
value: comp.system.niveau,
comp: comp
}
}
prepareContext(rollData) {
this.$selectPossession(rollData)
}
getAjustements(rollData) {
return []
}
async _onRender(rollDialog, context, options) {
const rollData = rollDialog.rollData
const select = rollDialog.element.querySelector(`roll-section[name="${this.code}"] select[name="select-possession"]`)
const button = rollDialog.element.querySelector(`roll-section[name="${this.code}"] button[name="creer-possession"]`)
select?.addEventListener("change", e => {
const selectOptions = e.currentTarget.options
const index = selectOptions.selectedIndex
this.$selectPossession(rollData, selectOptions[index]?.value)
rollDialog.render()
})
button?.addEventListener("click", async e => {
e.preventDefault()
await RdDPossessionV2.createPossessionIfMissing(rollData.active, rollData.opponent)
rollDialog.render()
})
}
$selectPossession(rollData, key) {
this.selectByKey(rollData, key, 0)
}
impactOtherPart(part, rollData) {
if (this.visible(rollData)) {
const current = this.getCurrent(rollData)
switch (part.code) {
case PART_CARAC: return part.filterCaracs(rollData, [rollData.type.possession.isPersonnage ? CARACS.REVE_ACTUEL : CARACS.REVE])
case PART_COMP: return part.filterComps(rollData, [current.comp?.name])
}
}
return undefined
}
}

View File

@@ -1,8 +1,9 @@
import { RDD_CONFIG } from "../constants.js"
import { Misc } from "../misc.js"
import { RdDPossessionV2 } from "../rdd-possession-v2.mjs"
import { ReglesOptionnelles } from "../settings/regles-optionnelles.js"
import { demiReveStatusEffect, StatusEffects } from "../settings/status-effects.js"
import { ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE } from "./roll-constants.mjs"
import { StatusEffects } from "../settings/status-effects.js"
import { ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE, ROLL_TYPE_POSSESSION } from "./roll-constants.mjs"
import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs"
export const PART_SIGN = "sign"
@@ -25,7 +26,7 @@ export class RollPartSign extends RollPart {
}
isCombat(rollData) {
return [ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE].includes(rollData.type.current) || rollData.type.isCombat
return [ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE, ROLL_TYPE_POSSESSION].includes(rollData.type.current)
}
prepareContext(rollData) {
@@ -40,7 +41,7 @@ export class RollPartSign extends RollPart {
const isCombat = this.isCombat(rollData)
const current = this.getCurrent(rollData)
current.armeDisparate = isCombat && current.armeDisparate
current.surprise = actor.getSurprise(isCombat, current.forceRequise ?? 0)
current.surprise = actor.getSurprise(isCombat, current.forceRequise ?? 0)
current.reasons = actor.getEffects(it => StatusEffects.niveauSurprise(it, isCombat) > 0, current.forceRequise ?? 0)
.map(it => { return { img: it.img, label: game.i18n.localize(it.name) } })
current.diviseur = 1
@@ -67,7 +68,16 @@ export class RollPartSign extends RollPart {
}
isAttaqueFinesse(rollData) {
return ROLL_TYPE_DEFENSE == rollData.type.current && rollData.attaque?.particuliere == 'finesse'
const attackerRoll = rollData.attackerRoll
if (rollData.attackerRoll){
switch (rollData.type.current) {
case ROLL_TYPE_DEFENSE:
return attackerRoll?.particuliere == RDD_CONFIG.particuliere.finesse.key
case ROLL_TYPE_POSSESSION:
return RdDPossessionV2.isDefense(rollData.type.possession.action) && attackerRoll?.particuliere == RDD_CONFIG.particuliere.finesse.key
}
}
return false
}
isParadeArmeDisparate(current) {

View File

@@ -5,7 +5,12 @@ export class RollTypeComp extends RollType {
get code() { return ROLL_TYPE_COMP }
get name() { return `Jet de caractéristique / compétence` }
title(rollData) { return `fait un jet ${rollData.type.opposed ? ' contre ' : ''}` }
title(rollData) {
if (rollData.type.appreciation) {
return "fait un jet d'appéciation"
}
return `fait un jet ${rollData.type.opposed ? ' contre ' : ''}`
}
onSelect(rollData) {

View File

@@ -1,4 +1,5 @@
import { ITEM_TYPES } from "../constants.js"
import { APPRECIATION } from "../moral/apprecier.mjs"
import { RollBasicParts } from "./roll-basic-parts.mjs"
import { DIFF, ROLL_TYPE_CUISINE } from "./roll-constants.mjs"
import { PART_CUISINE } from "./roll-part-cuisine.mjs"
@@ -49,7 +50,7 @@ export class RollTypeCuisine extends RollType {
return result
}
onApplyImpacts(roll, impacts) {
if (roll.result.plat) {
if (roll.result.plat) {
// le plat n'est pas créé immédiatement, il faut donc retrouver l'id
roll.result.plat.id = impacts.findCreatedId('Item', roll.result.plat.id)
}
@@ -69,6 +70,7 @@ export class RollTypeCuisine extends RollType {
quantite: current.proportions,
qualite: result.qualite,
cout: result.qualite > 0 ? (result.qualite * 0.01) : 0.01,
appreciation: APPRECIATION.CUISINE
}
}
}

View File

@@ -1,6 +1,7 @@
import { PART_JEU, RollPartJeu } from "./roll-part-jeu.mjs"
import { RollType } from "./roll-type.mjs"
import { DIFF, ROLL_TYPE_JEU } from "./roll-constants.mjs"
import { Apprecier } from "../moral/apprecier.mjs"
export class RollTypeJeu extends RollType {
@@ -20,4 +21,8 @@ export class RollTypeJeu extends RollType {
RollPartJeu.forceCompJeu(rollData)
}
}
getResult(rollData, impacts) {
const current = rollData.current[PART_JEU]
return Apprecier.getAppreciation(current.qualite, current.jeu, rollData, current.comp)
}
}

View File

@@ -1,3 +1,4 @@
import { Apprecier } from "../moral/apprecier.mjs"
import { DIFF, ROLL_TYPE_OEUVRE } from "./roll-constants.mjs"
import { PART_OEUVRE } from "./roll-part-oeuvre.mjs"
import { RollType } from "./roll-type.mjs"
@@ -18,12 +19,7 @@ export class RollTypeOeuvre extends RollType {
getResult(rollData, impacts) {
const current = rollData.current[PART_OEUVRE]
const qualite = rollData.rolled.isSuccess ? current.qualite : Math.min(current.qualite, current.comp.system.niveau)
return {
qualite: qualite + rollData.rolled.ptQualite,
messages: []
}
return Apprecier.getAppreciation(current.qualite, current.oeuvre, rollData, current.comp)
}
}

View File

@@ -0,0 +1,28 @@
import { RdDPossessionV2 } from "../rdd-possession-v2.mjs"
import { DIFF, ROLL_TYPE_POSSESSION } from "./roll-constants.mjs"
import { RollType } from "./roll-type.mjs"
export class RollTypePossession extends RollType {
get code() { return ROLL_TYPE_POSSESSION }
get name() { return "Posséder" }
prepare(rollData) {
rollData.type.possession = RdDPossessionV2.getTypePossessionAction(rollData.active, rollData.opponent, rollData.type.possession?.action)
}
title(rollData) {
return RdDPossessionV2.actionTitle(rollData.type.possession.action)
}
onSelect(rollData) {
this.setDiffType(rollData, this.isAttaque(rollData) ? DIFF.ATTAQUE : DIFF.DEFENSE)
}
isEntite(rollData) {
return rollData.active.actor.isEntiteNonIncarnee()
}
isAttaque(rollData) {
return RdDPossessionV2.isAttaque(rollData.type.possession.action)
}
}

View File

@@ -16,6 +16,7 @@ export class RollType {
return { code: this.code, name: this.name, icon: this.icon, section: 'type', template: this.template, selected: this.isSelected(rollData) }
}
prepare(rollData){}
isAllowed(rollData) { return rollData.type.allowed == undefined || rollData.type.allowed.includes(this.code) }
visible(rollData) { return true }
title(rollData) { return this.code }

View File

@@ -16,6 +16,7 @@ export const STATUSES = {
StatusDemiReve: 'demi-reve',
StatusSurEnc: 'sur-encombrement',
StatusForceWeak: 'force insuffisante',
StatusMalade: 'malade',
}
export const forceWeakStatusEffect = { rdd: true, id: STATUSES.StatusForceWeak, name: 'EFFECT.StatusForceWeak', img: RDD_CONFIG.icons.forceWeak };
@@ -35,11 +36,12 @@ const rddStatusEffects = [
{ rdd: true, id: STATUSES.StatusComma, name: 'EFFECT.StatusComma', img: 'icons/svg/skull.svg' },
{ rdd: true, id: STATUSES.StatusBleeding, name: 'EFFECT.StatusBleeding', img: 'icons/svg/blood.svg' },
{ rdd: true, id: STATUSES.StatusMalade, name: 'EFFECT.StatusMalade', img: RDD_CONFIG.icons.malade },
{ rdd: true, id: STATUSES.StatusDead, name: 'EFFECT.StatusDead', img: 'icons/svg/skull.svg' },
surEncEffect,
demiReveStatusEffect,
forceWeakStatusEffect,
surEncEffect,
];
]
const statusDemiSurprise = new Set([STATUSES.StatusStunned, STATUSES.StatusProne, STATUSES.StatusRestrained, STATUSES.StatusForceWeak])
const statusSurpriseTotale = new Set([STATUSES.StatusUnconscious, STATUSES.StatusBlind, STATUSES.StatusComma])
@@ -73,7 +75,6 @@ export class StatusEffects extends FormApplication {
CONFIG.RDD.allEffects = rddStatusEffects.concat(CONFIG.statusEffects.filter(it => !rddEffectIds.includes(it.id)))
StatusEffects._setUseStatusEffects(StatusEffects._getUseStatusEffects());
console.log('statusEffects', CONFIG.statusEffects);
}
static isSurprise(effect) {

View File

@@ -68,18 +68,20 @@ export class SystemCompendiums extends FormApplication {
if (pack?.metadata.type == docType) {
return await pack.getDocuments();
}
return [];
return []
}
static async getCompetences(actorType) {
switch (actorType ?? 'personnage') {
case 'personnage':
return await SystemCompendiums.getWorldOrCompendiumItems('competence', 'competences')
.then(list => list.sort((a, b) => a.name.localeCompare(b.name)))
case 'entite':
case 'creature':
return await SystemCompendiums.getWorldOrCompendiumItems('competencecreature', 'competences-creatures')
case 'vehicule': return [];
.then(list => list.sort((a, b) => a.name.localeCompare(b.name)))
}
return []
}
/* -------------------------------------------- */

View File

@@ -9,12 +9,12 @@ export class DialogRepos extends Dialog {
return
}
if (!ReglesOptionnelles.isUsing("chateau-dormant-gardien") || !actor.hasPlayerOwner) {
actor.system.sommeil = {
foundry.utils.mergeObject(actor.system.sommeil, {
"nouveaujour": true,
"insomnie": EffetsDraconiques.isSujetInsomnie(actor),
"moral": "neutre",
"heures": 4
}
})
}
const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/sommeil/dialog-repos.hbs", actor);
const dialog = new DialogRepos(html, actor);

View File

@@ -18,6 +18,14 @@ export class Targets {
}
}
static extractActorData(actor) {
return {
id: actor.id,
name: actor.prototypeToken?.name ?? actor.name,
img: actor.prototypeToken?.texture.src ?? actor.img ?? 'icons/svg/mystery-man.svg'
}
}
static buildActorTokenData(tokenId, actor) {
return { id: tokenId, name: actor.name, img: actor.img ?? 'icons/svg/mystery-man.svg' };
}
@@ -41,7 +49,7 @@ export class Targets {
label: "Choisir une seule des cibles",
list: targets.map(it => Targets.extractTokenData(it))
};
DialogSelect.select(selectData, t => onSelectTarget(t.target))
DialogSelect.select(selectData, target => onSelectTarget(targets.find(it => it.id == target.id)))
}
}
}

View File

@@ -1,3 +1,4 @@
import { RollBasicParts } from "../roll/roll-basic-parts.mjs"
const ACTOR_EMBEDDED_DOCTYPES = ['Item', 'ActiveEffect']
/**
@@ -62,14 +63,16 @@ export class ActorImpacts {
addDelta(document, path, value) {
ActorImpacts.$checkDocType(document)
const intValue = Number.parseInt(value)
if (Number.isInteger(intValue) && intValue != 0) {
const delta = [path, intValue]
const existing = this[docType].updates.find(it => it.id == document.id)
if (existing) {
existing.deltas.push(delta)
}
else {
this[docType].updates.push({ id: document.id, updates: [], deltas: [delta] })
if (Number.isInteger(intValue)) {
if (intValue != 0){
const delta = [path, intValue]
const existing = this[docType].updates.find(it => it.id == document.id)
if (existing) {
existing.deltas.push(delta)
}
else {
this[docType].updates.push({ id: document.id, updates: [], deltas: [delta] })
}
}
}
else {
@@ -96,7 +99,9 @@ export class ActorImpacts {
async applyImpacts() {
const actor = this.actorToken.actor
await Promise.all(ACTOR_EMBEDDED_DOCTYPES.map(async docType => await this.$applyDocumentsImpacts(actor, docType)))
for (let docType of ACTOR_EMBEDDED_DOCTYPES) {
await this.$applyDocumentsImpacts(actor, docType)
}
const updates = ActorImpacts.$computeUpdates(this, id => actor)
await actor.update(updates, { render: true })
}
@@ -122,8 +127,8 @@ export class ActorImpacts {
}
}
findCreatedId(docType, origId){
return this[docType].creates.find(it => it.id = origId)?.createdId
findCreatedId(docType, origId) {
return this[docType].creates.find(it => it.id = origId)?.createdId
}
$getEmbeddedDocument(docType, id) {

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!Igt8XPaL7NQrGYlq.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!Igt8XPaL7NQrGYlq.CYpxxf1uTa78NWR9'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!Igt8XPaL7NQrGYlq.lzEdMrKXbOYrWG5S'
- _id: NWmRryjNFkXcd1v9
name: Piétinement
@@ -116,7 +128,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!Igt8XPaL7NQrGYlq.NWmRryjNFkXcd1v9'
effects: []
folder: null
@@ -183,16 +200,16 @@ system:
value: '+4'
label: +dom
derivee: true
vitesse:
type: string
value: 10/40
label: Vitesse
derivee: true
encombrement:
type: number
value: 20
label: Encombrement
derivee: false
vitesse:
type: string
value: 10/40
label: Vitesse
derivee: true
protection:
type: number
value: 4
@@ -295,7 +312,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -307,9 +323,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!Igt8XPaL7NQrGYlq'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!ppjPZoSKp7j841bp.shsUV8UpU18c0RJK'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!ppjPZoSKp7j841bp.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!ppjPZoSKp7j841bp.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!ppjPZoSKp7j841bp.6DK46pyO0hzEuuUg'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -146,7 +162,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!ppjPZoSKp7j841bp.lzEdMrKXbOYrWG5S'
effects: []
folder: null
@@ -213,16 +233,16 @@ system:
value: -2
label: +dom
derivee: true
vitesse:
type: string
value: 14/36
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 14/36
label: Vitesse
derivee: true
protection:
type: number
value: -3
@@ -327,7 +347,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -339,9 +358,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!ppjPZoSKp7j841bp'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!Q0i8frS62Mn7SW5c.shsUV8UpU18c0RJK'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!Q0i8frS62Mn7SW5c.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!Q0i8frS62Mn7SW5c.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!Q0i8frS62Mn7SW5c.6DK46pyO0hzEuuUg'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -146,7 +162,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!Q0i8frS62Mn7SW5c.lzEdMrKXbOYrWG5S'
effects: []
folder: null
@@ -213,16 +233,16 @@ system:
value: '+4'
label: +dom
derivee: true
vitesse:
type: string
value: 10/24
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 10/24
label: Vitesse
derivee: true
protection:
type: number
value: 2
@@ -317,7 +337,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -329,9 +348,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!Q0i8frS62Mn7SW5c'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!ZLROmHLm6G9pElkk.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!ZLROmHLm6G9pElkk.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!ZLROmHLm6G9pElkk.BjqRrGtHtTzuNpZB'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!ZLROmHLm6G9pElkk.lzEdMrKXbOYrWG5S'
effects: []
folder: null
@@ -184,16 +200,16 @@ system:
value: '+9'
label: +dom
derivee: true
vitesse:
type: string
value: 16/60
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 16/60
label: Vitesse
derivee: true
protection:
type: number
value: 10
@@ -304,7 +320,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -316,9 +331,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!ZLROmHLm6G9pElkk'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!zMvyRrp10dkfcS43.LWQHz5ymNBzh6ZEr'
- _id: shsUV8UpU18c0RJK
name: Course
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!zMvyRrp10dkfcS43.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!zMvyRrp10dkfcS43.CYpxxf1uTa78NWR9'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!zMvyRrp10dkfcS43.lzEdMrKXbOYrWG5S'
- _id: iwQo9KoK5tfIN7sw
name: Saut
@@ -145,7 +161,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!zMvyRrp10dkfcS43.iwQo9KoK5tfIN7sw'
effects: []
folder: null
@@ -212,16 +233,16 @@ system:
value: '+4'
label: +dom
derivee: true
vitesse:
type: string
value: 14/54
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 14/54
label: Vitesse
derivee: true
protection:
type: number
value: 1
@@ -319,7 +340,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -331,9 +351,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!zMvyRrp10dkfcS43'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!twCuK1GjVBTUFGXF.shsUV8UpU18c0RJK'
- _id: 4GmpkphbsmQjvVVK
name: Escalade
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!twCuK1GjVBTUFGXF.4GmpkphbsmQjvVVK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!twCuK1GjVBTUFGXF.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!twCuK1GjVBTUFGXF.BjqRrGtHtTzuNpZB'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -146,7 +162,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!twCuK1GjVBTUFGXF.lzEdMrKXbOYrWG5S'
- _id: plIWZXJT0XGKJ5ar
name: Saut
@@ -174,7 +194,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!twCuK1GjVBTUFGXF.plIWZXJT0XGKJ5ar'
effects: []
folder: null
@@ -241,16 +266,16 @@ system:
value: '+0'
label: +dom
derivee: true
vitesse:
type: string
value: 12/24
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/24
label: Vitesse
derivee: true
protection:
type: number
value: 0
@@ -300,9 +325,8 @@ system:
d&eacute;chirure. Celle-l&agrave; se contente de chercher &agrave; fuir en
cas d&rsquo;agression, ou attaque toutes griffes dehors si elle se sent
accul&eacute;e. Pour la distinguer (visuellement) de la rieuse,
r&eacute;ussir @roll[VUE/Zoologie/-5]. Les caract&eacute;ristiques de
combat indiqu&eacute;es ne s&rsquo;appliquent qu&rsquo;&agrave; la
pointue.</p>
r&eacute;ussir @roll[VUE/Zoologie/-5]. Les caract&eacute;ristiques de combat
indiqu&eacute;es ne s&rsquo;appliquent qu&rsquo;&agrave; la pointue.</p>
race: ''
notesmj: ''
ownership:
@@ -371,7 +395,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -383,9 +406,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!twCuK1GjVBTUFGXF'

View File

@@ -31,7 +31,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!LqYHIJf9LVGxRT7S.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -60,7 +64,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!LqYHIJf9LVGxRT7S.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@@ -89,7 +97,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!LqYHIJf9LVGxRT7S.6DK46pyO0hzEuuUg'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -118,7 +130,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!LqYHIJf9LVGxRT7S.lzEdMrKXbOYrWG5S'
- _id: 3MgAaUHeKGBcbyr5
name: Coup de pied
@@ -146,7 +162,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!LqYHIJf9LVGxRT7S.3MgAaUHeKGBcbyr5'
effects: []
system:
@@ -211,16 +232,16 @@ system:
value: '+4'
label: +dom
derivee: true
vitesse:
type: string
value: 12/40
label: Vitesse
derivee: true
encombrement:
type: number
value: 18
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/40
label: Vitesse
derivee: true
protection:
type: number
value: 1
@@ -324,7 +345,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -336,10 +356,20 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
folder: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!LqYHIJf9LVGxRT7S'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!76I21ASdWYBqsg8I.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!76I21ASdWYBqsg8I.CYpxxf1uTa78NWR9'
- _id: ndNshntOYb1JFNqi
name: Ruade
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!76I21ASdWYBqsg8I.ndNshntOYb1JFNqi'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!76I21ASdWYBqsg8I.lzEdMrKXbOYrWG5S'
effects: []
folder: null
@@ -184,16 +200,16 @@ system:
value: '+5'
label: +dom
derivee: true
vitesse:
type: string
value: 14/58
label: Vitesse
derivee: true
encombrement:
type: number
value: 22
label: Encombrement
derivee: false
vitesse:
type: string
value: 14/58
label: Vitesse
derivee: true
protection:
type: number
value: 2
@@ -287,7 +303,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -299,9 +314,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!76I21ASdWYBqsg8I'

View File

@@ -31,7 +31,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!XuDpG772k6PAQ5LJ.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -60,7 +64,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!XuDpG772k6PAQ5LJ.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@@ -89,7 +97,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!XuDpG772k6PAQ5LJ.6DK46pyO0hzEuuUg'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -118,7 +130,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!XuDpG772k6PAQ5LJ.lzEdMrKXbOYrWG5S'
- _id: Rtt7bny59v2jBhuO
name: Saut
@@ -146,7 +162,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!XuDpG772k6PAQ5LJ.Rtt7bny59v2jBhuO'
effects: []
system:
@@ -211,16 +232,16 @@ system:
value: '+0'
label: +dom
derivee: true
vitesse:
type: string
value: 12/36
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/36
label: Vitesse
derivee: true
protection:
type: number
value: -1
@@ -313,7 +334,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -325,10 +345,20 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
folder: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!XuDpG772k6PAQ5LJ'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!yL1XStIKWxGnhKvR.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!yL1XStIKWxGnhKvR.CYpxxf1uTa78NWR9'
- _id: XgfRxSj8Ty1d3JFM
name: Mandibules
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!yL1XStIKWxGnhKvR.XgfRxSj8Ty1d3JFM'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!yL1XStIKWxGnhKvR.lzEdMrKXbOYrWG5S'
effects: []
folder: null
@@ -288,7 +304,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -300,15 +315,21 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.32
coreVersion: '12.331'
coreVersion: '13.350'
createdTime: null
modifiedTime: 1736537299708
lastModifiedBy: Hp9ImM4o9YRTSdfu
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!yL1XStIKWxGnhKvR'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!VsEw24DEekBbU69Z.LWQHz5ymNBzh6ZEr'
- _id: shsUV8UpU18c0RJK
name: Course
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!VsEw24DEekBbU69Z.shsUV8UpU18c0RJK'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!VsEw24DEekBbU69Z.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!VsEw24DEekBbU69Z.CYpxxf1uTa78NWR9'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -146,7 +162,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!VsEw24DEekBbU69Z.lzEdMrKXbOYrWG5S'
effects: []
folder: null
@@ -213,16 +233,16 @@ system:
value: '+4'
label: +dom
derivee: true
vitesse:
type: string
value: 12/36
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/36
label: Vitesse
derivee: true
protection:
type: number
value: 3
@@ -323,7 +343,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -335,9 +354,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!VsEw24DEekBbU69Z'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!IdZUNtuYcDBffZKn.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!IdZUNtuYcDBffZKn.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!IdZUNtuYcDBffZKn.BjqRrGtHtTzuNpZB'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!IdZUNtuYcDBffZKn.lzEdMrKXbOYrWG5S'
- _id: 0bTL8SzhNJoPrXd4
name: Saut
@@ -145,7 +161,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!IdZUNtuYcDBffZKn.0bTL8SzhNJoPrXd4'
effects: []
folder: null
@@ -212,16 +233,16 @@ system:
value: '+1'
label: +dom
derivee: true
vitesse:
type: string
value: 14/38
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 14/38
label: Vitesse
derivee: true
protection:
type: number
value: 3
@@ -326,7 +347,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -338,9 +358,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!IdZUNtuYcDBffZKn'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!kPDswxsWVnSYitfL.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!kPDswxsWVnSYitfL.6DK46pyO0hzEuuUg'
- _id: Kt7WlB5Ui97X211z
name: Vol
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!kPDswxsWVnSYitfL.Kt7WlB5Ui97X211z'
effects: []
folder: null
@@ -155,16 +167,16 @@ system:
value: -1
label: +dom
derivee: true
vitesse:
type: string
value: 12/38
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/38
label: Vitesse
derivee: true
protection:
type: number
value: -3
@@ -206,8 +218,8 @@ system:
&agrave; sa victime qui perd alors automatiquement @roll[1d6] points
d&rsquo;endurance par round sous l&rsquo;effet de la saign&eacute;e. Quand
l&rsquo;endurance tombe &agrave; z&eacute;ro, le drakkule continue &agrave;
la vider de son sang &agrave; raison de @roll[1d6] points de vie par round. Le
drakkule ne se d&eacute;tache que <em>bless&eacute; gravement </em>ou
la vider de son sang &agrave; raison de @roll[1d6] points de vie par round.
Le drakkule ne se d&eacute;tache que <em>bless&eacute; gravement </em>ou
<em>sonn&eacute;</em>. Pour se d&eacute;gager, la victime ne peut utiliser
que Corps &agrave; corps (totaliser 2 points d&rsquo;empoignade) ou une
dague. Tant qu&rsquo;il est accroch&eacute;, le drakkule ne joue plus de jet
@@ -281,7 +293,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -293,9 +304,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!kPDswxsWVnSYitfL'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!tbBCUzaYThtcq3Ch.CYpxxf1uTa78NWR9'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!tbBCUzaYThtcq3Ch.lzEdMrKXbOYrWG5S'
- _id: Kt7WlB5Ui97X211z
name: Vol
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!tbBCUzaYThtcq3Ch.Kt7WlB5Ui97X211z'
effects: []
folder: null
@@ -155,16 +167,16 @@ system:
value: -4
label: +dom
derivee: true
vitesse:
type: string
value: 10/30 vol
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 10/30 vol
label: Vitesse
derivee: true
protection:
type: number
value: -6
@@ -268,7 +280,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -280,9 +291,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!tbBCUzaYThtcq3Ch'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!f31jeCsQgw3hWjk6.shsUV8UpU18c0RJK'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!f31jeCsQgw3hWjk6.yDHZfK4RmwQW4YaW'
- _id: 4GmpkphbsmQjvVVK
name: Escalade
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!f31jeCsQgw3hWjk6.4GmpkphbsmQjvVVK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!f31jeCsQgw3hWjk6.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@@ -146,7 +162,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!f31jeCsQgw3hWjk6.6DK46pyO0hzEuuUg'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -175,7 +195,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!f31jeCsQgw3hWjk6.lzEdMrKXbOYrWG5S'
effects: []
folder: null
@@ -242,16 +266,16 @@ system:
value: '+0'
label: +dom
derivee: true
vitesse:
type: string
value: 12/30
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/30
label: Vitesse
derivee: true
protection:
type: number
value: 0
@@ -352,7 +376,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -364,9 +387,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!f31jeCsQgw3hWjk6'

View File

@@ -29,7 +29,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!igtHarwizNIUhd8M.bwJZ6nTLX9hohV7Q'
- _id: 7td0EmFMtpwNyWwo
name: Esquive
@@ -57,7 +62,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!igtHarwizNIUhd8M.7td0EmFMtpwNyWwo'
- _id: d2yxJ5c57vMatAQV
name: Discrétion
@@ -85,7 +95,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!igtHarwizNIUhd8M.d2yxJ5c57vMatAQV'
- _id: aGm8xRr55CPUo5rM
name: Pickpocket
@@ -113,7 +128,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!igtHarwizNIUhd8M.aGm8xRr55CPUo5rM'
- _id: bL7lL688cp1s1Vke
name: Vigilance
@@ -141,7 +161,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!igtHarwizNIUhd8M.bL7lL688cp1s1Vke'
- _id: Fu61NMCeLxi9nfSD
name: Course
@@ -169,7 +194,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!igtHarwizNIUhd8M.Fu61NMCeLxi9nfSD'
- _id: uW9fTmhw6GBnf1e9
name: Saut
@@ -197,7 +227,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!igtHarwizNIUhd8M.uW9fTmhw6GBnf1e9'
effects: []
folder: null
@@ -264,16 +299,16 @@ system:
value: -1
label: +dom
derivee: true
vitesse:
type: string
value: 12/26
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/26
label: Vitesse
derivee: true
protection:
type: number
value: 0
@@ -384,7 +419,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -396,9 +430,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!igtHarwizNIUhd8M'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!X7j6D136KAhFvItD.shsUV8UpU18c0RJK'
- _id: JTuBQCPdumw3DfxH
name: Crête
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!X7j6D136KAhFvItD.JTuBQCPdumw3DfxH'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!X7j6D136KAhFvItD.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!X7j6D136KAhFvItD.CYpxxf1uTa78NWR9'
- _id: efl1HdDSKpBfImQ1
name: Pierre Lancée
@@ -146,7 +162,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!X7j6D136KAhFvItD.efl1HdDSKpBfImQ1'
- _id: OzHBowOMADRwcVXR
name: Pierre Tenue
@@ -175,7 +195,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!X7j6D136KAhFvItD.OzHBowOMADRwcVXR'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -204,7 +228,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!X7j6D136KAhFvItD.lzEdMrKXbOYrWG5S'
- _id: 2G5PanD98Nj91PQD
name: Saut
@@ -232,7 +260,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!X7j6D136KAhFvItD.2G5PanD98Nj91PQD'
effects: []
folder: null
@@ -299,16 +332,16 @@ system:
value: '+2'
label: +dom
derivee: true
vitesse:
type: string
value: 14/26
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 14/26
label: Vitesse
derivee: true
protection:
type: number
value: 4
@@ -413,7 +446,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -425,9 +457,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!X7j6D136KAhFvItD'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!f6wzOaOzdwy51prt.shsUV8UpU18c0RJK'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!f6wzOaOzdwy51prt.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!f6wzOaOzdwy51prt.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!f6wzOaOzdwy51prt.BjqRrGtHtTzuNpZB'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -146,7 +162,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!f6wzOaOzdwy51prt.lzEdMrKXbOYrWG5S'
effects: []
folder: null
@@ -213,16 +233,16 @@ system:
value: '+1'
label: +dom
derivee: true
vitesse:
type: string
value: 12/24
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/24
label: Vitesse
derivee: true
protection:
type: number
value: 0
@@ -335,7 +355,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -347,9 +366,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!f6wzOaOzdwy51prt'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!VCRmWnhzCF9tJTD0.yDHZfK4RmwQW4YaW'
effects: []
folder: null
@@ -97,16 +101,16 @@ system:
value: '-'
label: +dom
derivee: true
vitesse:
type: string
value: '-'
label: Vitesse
derivee: true
encombrement:
type: number
value: '-'
label: Encombrement
derivee: false
vitesse:
type: string
value: '-'
label: Vitesse
derivee: true
protection:
type: number
value: '-'
@@ -212,7 +216,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -224,9 +227,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!VCRmWnhzCF9tJTD0'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!OWuf2ryyCtipWnpE.shsUV8UpU18c0RJK'
- _id: 4GmpkphbsmQjvVVK
name: Escalade
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!OWuf2ryyCtipWnpE.4GmpkphbsmQjvVVK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!OWuf2ryyCtipWnpE.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!OWuf2ryyCtipWnpE.BjqRrGtHtTzuNpZB'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -146,7 +162,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!OWuf2ryyCtipWnpE.lzEdMrKXbOYrWG5S'
- _id: wxT2H9CD43z4LlnS
name: Saut
@@ -174,7 +194,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!OWuf2ryyCtipWnpE.wxT2H9CD43z4LlnS'
effects: []
folder: null
@@ -241,16 +266,16 @@ system:
value: '+5'
label: +dom
derivee: true
vitesse:
type: string
value: 12/36
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/36
label: Vitesse
derivee: true
protection:
type: number
value: 3
@@ -353,7 +378,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -365,9 +389,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!OWuf2ryyCtipWnpE'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!BgXjyfnolHRQNWCj.CYpxxf1uTa78NWR9'
- _id: ndNshntOYb1JFNqi
name: Serres
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!BgXjyfnolHRQNWCj.ndNshntOYb1JFNqi'
effects: []
folder: null
@@ -126,16 +134,16 @@ system:
value: '+0'
label: +dom
derivee: true
vitesse:
type: string
value: 12/36
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/36
label: Vitesse
derivee: true
protection:
type: number
value: 4
@@ -174,15 +182,14 @@ system:
agressivit&eacute; s&rsquo;appliquant aux humano&iuml;des. S&rsquo;agissant
d&rsquo;un pouvoir inn&eacute;, elles n&rsquo;ont ni &agrave; monter dans
les TMR, ni &agrave; d&eacute;penser de points de r&ecirc;ve. La victime
doit jouer un jet de r&eacute;sistance standard, @roll[reve-actuel/-8], et en cas
d&rsquo;&eacute;chec, r&eacute;ussir un jet de @roll[Volonté/-3]
pour pouvoir attaquer la harpie. Le JR n&rsquo;est &agrave; jouer
qu&rsquo;une seule fois, tandis qu&rsquo;en cas d&rsquo;&eacute;chec, le jet
de VOLONT&Eacute; est &agrave; jouer tous les rounds. La non
agressivit&eacute; ne s&rsquo;applique qu&rsquo;&agrave;
l&rsquo;&eacute;gard de la harpie qui l&rsquo;a lanc&eacute;e, et une harpie
ne peut pas r&eacute;utiliser son pouvoir sur un personnage qui a
r&eacute;ussi son JR.</p>
doit jouer un jet de r&eacute;sistance standard, @roll[reve-actuel/-8], et
en cas d&rsquo;&eacute;chec, r&eacute;ussir un jet de @roll[Volonté/-3] pour
pouvoir attaquer la harpie. Le JR n&rsquo;est &agrave; jouer qu&rsquo;une
seule fois, tandis qu&rsquo;en cas d&rsquo;&eacute;chec, le jet de
VOLONT&Eacute; est &agrave; jouer tous les rounds. La non agressivit&eacute;
ne s&rsquo;applique qu&rsquo;&agrave; l&rsquo;&eacute;gard de la harpie qui
l&rsquo;a lanc&eacute;e, et une harpie ne peut pas r&eacute;utiliser son
pouvoir sur un personnage qui a r&eacute;ussi son JR.</p>
race: ''
notesmj: ''
ownership:
@@ -251,7 +258,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -263,9 +269,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!BgXjyfnolHRQNWCj'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!lHt8Tyexy3qzAerO.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!lHt8Tyexy3qzAerO.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!lHt8Tyexy3qzAerO.BjqRrGtHtTzuNpZB'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!lHt8Tyexy3qzAerO.lzEdMrKXbOYrWG5S'
- _id: 4JttwOCHxLNbsW4R
name: Saut
@@ -145,7 +161,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!lHt8Tyexy3qzAerO.4JttwOCHxLNbsW4R'
effects: []
folder: null
@@ -212,16 +233,16 @@ system:
value: '+1'
label: +dom
derivee: true
vitesse:
type: string
value: 12/24
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/24
label: Vitesse
derivee: true
protection:
type: number
value: 2
@@ -320,7 +341,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -332,9 +352,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!lHt8Tyexy3qzAerO'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!YjBDfNoLA7rlofsh.CYpxxf1uTa78NWR9'
- _id: h9ASt4vrvEgxfj7j
name: Tronçonneuse
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!YjBDfNoLA7rlofsh.h9ASt4vrvEgxfj7j'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!YjBDfNoLA7rlofsh.lzEdMrKXbOYrWG5S'
- _id: Kt7WlB5Ui97X211z
name: Vol
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!YjBDfNoLA7rlofsh.Kt7WlB5Ui97X211z'
effects: []
folder: null
@@ -184,16 +200,16 @@ system:
value: 0
label: +dom
derivee: true
vitesse:
type: string
value: '-/40'
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: '-/40'
label: Vitesse
derivee: true
protection:
type: number
value: -6
@@ -299,7 +315,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -311,9 +326,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!YjBDfNoLA7rlofsh'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!99I06oTwCziLTnnl.shsUV8UpU18c0RJK'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!99I06oTwCziLTnnl.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!99I06oTwCziLTnnl.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!99I06oTwCziLTnnl.6DK46pyO0hzEuuUg'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -146,7 +162,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!99I06oTwCziLTnnl.lzEdMrKXbOYrWG5S'
- _id: PBS6YfmZLbSbwzpH
name: Saut
@@ -174,7 +194,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!99I06oTwCziLTnnl.PBS6YfmZLbSbwzpH'
effects: []
folder: null
@@ -241,16 +266,16 @@ system:
value: '+0'
label: +dom
derivee: true
vitesse:
type: string
value: 12/38
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/38
label: Vitesse
derivee: true
protection:
type: number
value: 0
@@ -353,7 +378,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -365,9 +389,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!99I06oTwCziLTnnl'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!DsE2xomX97onO2mN.shsUV8UpU18c0RJK'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!DsE2xomX97onO2mN.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!DsE2xomX97onO2mN.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!DsE2xomX97onO2mN.6DK46pyO0hzEuuUg'
- _id: efl1HdDSKpBfImQ1
name: Pierre Lancée
@@ -146,7 +162,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!DsE2xomX97onO2mN.efl1HdDSKpBfImQ1'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -175,7 +195,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!DsE2xomX97onO2mN.lzEdMrKXbOYrWG5S'
- _id: WJq3afIoq0xUV2dF
name: Saut
@@ -203,7 +227,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!DsE2xomX97onO2mN.WJq3afIoq0xUV2dF'
effects: []
folder: null
@@ -270,16 +299,16 @@ system:
value: -1
label: +dom
derivee: true
vitesse:
type: string
value: 12/30
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/30
label: Vitesse
derivee: true
protection:
type: number
value: 0
@@ -391,7 +420,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -403,9 +431,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!DsE2xomX97onO2mN'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!i7pvn7kgTwIdKYtP.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!i7pvn7kgTwIdKYtP.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!i7pvn7kgTwIdKYtP.6DK46pyO0hzEuuUg'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!i7pvn7kgTwIdKYtP.lzEdMrKXbOYrWG5S'
- _id: 3MgAaUHeKGBcbyr5
name: Coup de pied
@@ -145,7 +161,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!i7pvn7kgTwIdKYtP.3MgAaUHeKGBcbyr5'
effects: []
folder: null
@@ -212,16 +233,16 @@ system:
value: '+4'
label: +dom
derivee: true
vitesse:
type: string
value: 12/40
label: Vitesse
derivee: true
encombrement:
type: number
value: 18
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/40
label: Vitesse
derivee: true
protection:
type: number
value: 1
@@ -307,7 +328,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -319,9 +339,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!i7pvn7kgTwIdKYtP'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!0ogeNTXl7IwYfWZR.Kt7WlB5Ui97X211z'
effects: []
folder: null
@@ -97,16 +101,16 @@ system:
value: '-'
label: +dom
derivee: true
vitesse:
type: string
value: '-/40'
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: '-/40'
label: Vitesse
derivee: true
protection:
type: number
value: -8
@@ -214,7 +218,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -226,9 +229,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!0ogeNTXl7IwYfWZR'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!c2CVCRQY3FiZXFre.shsUV8UpU18c0RJK'
- _id: qilRzXpVaGceNmQp
name: Dague
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!c2CVCRQY3FiZXFre.qilRzXpVaGceNmQp'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!c2CVCRQY3FiZXFre.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!c2CVCRQY3FiZXFre.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@@ -146,7 +162,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!c2CVCRQY3FiZXFre.BjqRrGtHtTzuNpZB'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -175,7 +195,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!c2CVCRQY3FiZXFre.lzEdMrKXbOYrWG5S'
- _id: tqslo53FM201P3PM
name: Saut
@@ -203,7 +227,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!c2CVCRQY3FiZXFre.tqslo53FM201P3PM'
effects: []
folder: null
@@ -270,16 +299,16 @@ system:
value: '+2'
label: +dom
derivee: true
vitesse:
type: string
value: 14/42
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 14/42
label: Vitesse
derivee: true
protection:
type: number
value: 2
@@ -383,7 +412,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -395,9 +423,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!c2CVCRQY3FiZXFre'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!eGvgsF9uiR4vKLB2.shsUV8UpU18c0RJK'
- _id: 4GmpkphbsmQjvVVK
name: Escalade
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!eGvgsF9uiR4vKLB2.4GmpkphbsmQjvVVK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!eGvgsF9uiR4vKLB2.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!eGvgsF9uiR4vKLB2.BjqRrGtHtTzuNpZB'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -146,7 +162,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!eGvgsF9uiR4vKLB2.lzEdMrKXbOYrWG5S'
- _id: 8O8e3Msr2KPZqwkY
name: Saut
@@ -174,7 +194,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!eGvgsF9uiR4vKLB2.8O8e3Msr2KPZqwkY'
effects: []
folder: null
@@ -241,16 +266,16 @@ system:
value: '+3'
label: +dom
derivee: true
vitesse:
type: string
value: 14/28
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 14/28
label: Vitesse
derivee: true
protection:
type: number
value: 5
@@ -357,7 +382,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -369,9 +393,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!eGvgsF9uiR4vKLB2'

View File

@@ -29,7 +29,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!icS4ht40EGkUbUus.0z35nbSeViandim4'
- _id: w1BjJ6evq83ZMieY
name: Esquive
@@ -57,7 +62,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!icS4ht40EGkUbUus.w1BjJ6evq83ZMieY'
- _id: dv9QLfHGa5ZwDN7l
name: Course
@@ -85,7 +95,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!icS4ht40EGkUbUus.dv9QLfHGa5ZwDN7l'
- _id: VdLbNp5bz8hU6KDl
name: Discrétion
@@ -113,7 +128,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!icS4ht40EGkUbUus.VdLbNp5bz8hU6KDl'
- _id: TXC25fwUDxF6Qp5A
name: Vigilance
@@ -141,7 +161,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!icS4ht40EGkUbUus.TXC25fwUDxF6Qp5A'
effects: []
folder: null
@@ -208,16 +233,16 @@ system:
value: 0
label: +dom
derivee: true
vitesse:
type: string
value: 0
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 0
label: Vitesse
derivee: true
protection:
type: number
value: 0
@@ -364,7 +389,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -376,9 +400,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!icS4ht40EGkUbUus'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!sAcoQO3vvDDEJFva.shsUV8UpU18c0RJK'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!sAcoQO3vvDDEJFva.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!sAcoQO3vvDDEJFva.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!sAcoQO3vvDDEJFva.BjqRrGtHtTzuNpZB'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -146,7 +162,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!sAcoQO3vvDDEJFva.lzEdMrKXbOYrWG5S'
- _id: WML1KyyQrFRbmsLn
name: Saut
@@ -174,7 +194,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!sAcoQO3vvDDEJFva.WML1KyyQrFRbmsLn'
effects: []
folder: null
@@ -241,16 +266,16 @@ system:
value: '+0'
label: +dom
derivee: true
vitesse:
type: string
value: 12/32
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/32
label: Vitesse
derivee: true
protection:
type: number
value: 0
@@ -354,7 +379,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -366,9 +390,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!sAcoQO3vvDDEJFva'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!YwqgGvzxMTgYZFyc.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!YwqgGvzxMTgYZFyc.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!YwqgGvzxMTgYZFyc.6DK46pyO0hzEuuUg'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!YwqgGvzxMTgYZFyc.lzEdMrKXbOYrWG5S'
effects: []
folder: null
@@ -184,16 +200,16 @@ system:
value: -4
label: +dom
derivee: true
vitesse:
type: string
value: 8/14
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 8/14
label: Vitesse
derivee: true
protection:
type: number
value: -8
@@ -289,7 +305,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -301,9 +316,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!YwqgGvzxMTgYZFyc'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!NZfwIplunfOuuzuD.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!NZfwIplunfOuuzuD.BjqRrGtHtTzuNpZB'
- _id: wDH57NvDsoN8IwhS
name: Esquive (sol)
@@ -87,7 +95,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!NZfwIplunfOuuzuD.wDH57NvDsoN8IwhS'
effects: []
folder: null
@@ -154,16 +167,16 @@ system:
value: '+0'
label: +dom
derivee: true
vitesse:
type: string
value: 'Sol : 4/0 Eau : 12/24'
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 'Sol : 4/0 Eau : 12/24'
label: Vitesse
derivee: true
protection:
type: number
value: 2
@@ -220,10 +233,10 @@ system:
corps, m&ecirc;me visage. Certaines sir&egrave;nes, plus rarement, donnent
des illusions d&rsquo;hommes. Contrairement aux illusions des Yeux
d&rsquo;Hypnos, l&rsquo;illusion des sir&egrave;nes donne lieu &agrave; un
jet de r&eacute;sistance (standard, @roll[reve-actuel/-8]). Comme pour les chants, ce JR est
global : s&rsquo;il r&eacute;ussit, toutes les sir&egrave;nes apparaissent
sous leur v&eacute;ritable apparence; s&rsquo;il &eacute;choue, toutes sont
per&ccedil;ues sous leur apparence illusoire.</p>
jet de r&eacute;sistance (standard, @roll[reve-actuel/-8]). Comme pour les
chants, ce JR est global : s&rsquo;il r&eacute;ussit, toutes les
sir&egrave;nes apparaissent sous leur v&eacute;ritable apparence; s&rsquo;il
&eacute;choue, toutes sont per&ccedil;ues sous leur apparence illusoire.</p>
<h1>Alternatives</h1>
@@ -310,7 +323,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -322,9 +334,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!NZfwIplunfOuuzuD'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!dfssLNfeAGrUe70T.shsUV8UpU18c0RJK'
- _id: yDHZfK4RmwQW4YaW
name: Discrétion
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!dfssLNfeAGrUe70T.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -87,7 +95,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!dfssLNfeAGrUe70T.CYpxxf1uTa78NWR9'
- _id: BjqRrGtHtTzuNpZB
name: Griffes et Crocs
@@ -115,7 +128,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!dfssLNfeAGrUe70T.BjqRrGtHtTzuNpZB'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -144,7 +162,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!dfssLNfeAGrUe70T.lzEdMrKXbOYrWG5S'
- _id: MBJkmpxzFM0ZJyyS
name: Saut
@@ -172,7 +194,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!dfssLNfeAGrUe70T.MBJkmpxzFM0ZJyyS'
effects: []
folder: null
@@ -239,16 +266,16 @@ system:
value: '+5'
label: +dom
derivee: true
vitesse:
type: string
value: 14/48
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 14/48
label: Vitesse
derivee: true
protection:
type: number
value: 4
@@ -345,7 +372,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -357,9 +383,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!dfssLNfeAGrUe70T'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!e4KXDpAj4seWov6A.NctG7suzvGE7ZZzj'
- _id: shsUV8UpU18c0RJK
name: Course
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!e4KXDpAj4seWov6A.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!e4KXDpAj4seWov6A.CYpxxf1uTa78NWR9'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!e4KXDpAj4seWov6A.lzEdMrKXbOYrWG5S'
effects: []
folder: null
@@ -184,16 +200,16 @@ system:
value: '+7'
label: +dom
derivee: true
vitesse:
type: string
value: 14/30
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 14/30
label: Vitesse
derivee: true
protection:
type: number
value: 8
@@ -228,18 +244,18 @@ system:
d&eacute;solations et autres lieux o&ugrave; Thanatos a laiss&eacute; son
empreinte. Ils poss&egrave;dent le m&ecirc;me pouvoir de non
agressivit&eacute; s&rsquo;appliquant aux humano&iuml;des que la harpie. La
victime doit jouer un jet de r&eacute;sistance standard, @roll[reve-actuel/-8], et en cas
d&rsquo;&eacute;chec, r&eacute;ussir un jet de @roll[Volonté/-3]
pour pouvoir attaquer le tournedent. Le JR n&rsquo;est &agrave; jouer
qu&rsquo;une seule fois, et en cas d&rsquo;&eacute;chec, le jet de
VOLONT&Eacute; est &agrave; jouer tous les rounds. La non agressivit&eacute;
ne s&rsquo;applique qu&rsquo;&agrave; l&rsquo;&eacute;gard du tournedent qui
l&rsquo;a lanc&eacute;e, et il ne peut pas r&eacute;utiliser son pouvoir sur
un personnage qui a r&eacute;ussi son JR. En combat, les bras-bouches du
tournedent sont capables de parer comme s&rsquo;ils &eacute;taient des
&eacute;p&eacute;es (m&ecirc;mes limitations). Ses r&eacute;ussites
particuli&egrave;res sont usuellement pass&eacute;es en
<em>rapidit&eacute;</em>.</p>
victime doit jouer un jet de r&eacute;sistance standard,
@roll[reve-actuel/-8], et en cas d&rsquo;&eacute;chec, r&eacute;ussir un jet
de @roll[Volonté/-3] pour pouvoir attaquer le tournedent. Le JR n&rsquo;est
&agrave; jouer qu&rsquo;une seule fois, et en cas d&rsquo;&eacute;chec, le
jet de VOLONT&Eacute; est &agrave; jouer tous les rounds. La non
agressivit&eacute; ne s&rsquo;applique qu&rsquo;&agrave;
l&rsquo;&eacute;gard du tournedent qui l&rsquo;a lanc&eacute;e, et il ne
peut pas r&eacute;utiliser son pouvoir sur un personnage qui a r&eacute;ussi
son JR. En combat, les bras-bouches du tournedent sont capables de parer
comme s&rsquo;ils &eacute;taient des &eacute;p&eacute;es (m&ecirc;mes
limitations). Ses r&eacute;ussites particuli&egrave;res sont usuellement
pass&eacute;es en <em>rapidit&eacute;</em>.</p>
race: ''
notesmj: ''
ownership:
@@ -308,7 +324,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -320,9 +335,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!e4KXDpAj4seWov6A'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!PwcnOb8HIb6mBcFo.yDHZfK4RmwQW4YaW'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!PwcnOb8HIb6mBcFo.CYpxxf1uTa78NWR9'
- _id: 6DK46pyO0hzEuuUg
name: Morsure
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!PwcnOb8HIb6mBcFo.6DK46pyO0hzEuuUg'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!PwcnOb8HIb6mBcFo.lzEdMrKXbOYrWG5S'
effects: []
folder: null
@@ -184,16 +200,16 @@ system:
value: -5
label: +dom
derivee: true
vitesse:
type: string
value: 10/16
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 10/16
label: Vitesse
derivee: true
protection:
type: number
value: -8
@@ -285,7 +301,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -297,9 +312,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!PwcnOb8HIb6mBcFo'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!ZjE5HioS5N2GX88S.CYpxxf1uTa78NWR9'
- _id: 5LRlcObZfaefTV6j
name: Pinces
@@ -58,7 +62,12 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors.items!ZjE5HioS5N2GX88S.5LRlcObZfaefTV6j'
effects: []
folder: null
@@ -125,16 +134,16 @@ system:
value: '+2'
label: +dom
derivee: true
vitesse:
type: string
value: 12/24
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/24
label: Vitesse
derivee: true
protection:
type: number
value: 4
@@ -230,7 +239,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -242,9 +250,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!ZjE5HioS5N2GX88S'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!m5clAUpf4PKPD7E9.os88Rsp7mBkahqmh'
- _id: CYpxxf1uTa78NWR9
name: Esquive (vol)
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!m5clAUpf4PKPD7E9.CYpxxf1uTa78NWR9'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!m5clAUpf4PKPD7E9.lzEdMrKXbOYrWG5S'
effects: []
folder: null
@@ -155,16 +167,16 @@ system:
value: '+1'
label: +dom
derivee: true
vitesse:
type: string
value: 12/36
label: Vitesse
derivee: true
encombrement:
type: number
value: 0
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/36
label: Vitesse
derivee: true
protection:
type: number
value: 2
@@ -264,7 +276,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -276,9 +287,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!m5clAUpf4PKPD7E9'

View File

@@ -30,7 +30,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!31XA4x5Yk04TGUHR.os88Rsp7mBkahqmh'
- _id: shsUV8UpU18c0RJK
name: Course
@@ -59,7 +63,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!31XA4x5Yk04TGUHR.shsUV8UpU18c0RJK'
- _id: CYpxxf1uTa78NWR9
name: Esquive
@@ -88,7 +96,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!31XA4x5Yk04TGUHR.CYpxxf1uTa78NWR9'
- _id: lzEdMrKXbOYrWG5S
name: Vigilance
@@ -117,7 +129,11 @@ items:
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
_key: '!actors.items!31XA4x5Yk04TGUHR.lzEdMrKXbOYrWG5S'
effects: []
folder: null
@@ -184,16 +200,16 @@ system:
value: '+1'
label: +dom
derivee: true
vitesse:
type: string
value: 12/36
label: Vitesse
derivee: true
encombrement:
type: number
value: 12
label: Encombrement
derivee: false
vitesse:
type: string
value: 12/36
label: Vitesse
derivee: true
protection:
type: number
value: 0
@@ -306,7 +322,6 @@ prototypeToken:
detectionModes: []
appendNumber: false
prependAdjective: false
hexagonalShape: 0
occludable:
radius: 0
ring:
@@ -318,9 +333,19 @@ prototypeToken:
subject:
scale: 1
texture: null
turnMarker:
mode: 1
animation: null
src: null
disposition: false
movementAction: null
_stats:
systemId: foundryvtt-reve-de-dragon
systemVersion: 12.0.22
coreVersion: '12.331'
coreVersion: '13.350'
lastModifiedBy: null
compendiumSource: null
duplicateSource: null
exportSource: null
flags: {}
_key: '!actors!31XA4x5Yk04TGUHR'

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More