Compare commits
32 Commits
88c8a70744
...
12.0.30
Author | SHA1 | Date | |
---|---|---|---|
ad4baecdf2 | |||
8dc5616d7c | |||
db6b025e8f | |||
7f53757f26 | |||
879d2d10e5 | |||
016e4463bd | |||
1dfab01c4b | |||
a9cb211dba | |||
4dce510c91 | |||
14abfa8e7d | |||
1f564e0d89 | |||
ab61d5991d | |||
e3a858a9ef | |||
4cacf46ed8 | |||
5a5b5cdbb3 | |||
f90dddfbf8 | |||
d04da56c22 | |||
a87a4d371e | |||
c577fa5f29 | |||
30303330d7 | |||
ded92ddf2d | |||
2d2b75e33f | |||
a9b7dff83a | |||
75d6f78b40 | |||
979d49f96e | |||
22cab26908 | |||
23b3be246b | |||
b160ce78bc | |||
60921cfef1 | |||
12e5c94aba | |||
4dd6e1c3ff | |||
c7dfc8682d |
30
changelog.md
30
changelog.md
@ -1,11 +1,35 @@
|
|||||||
# 12.0
|
# 12.0
|
||||||
|
## 12.0.30 - le cauchemar d'Astrobazzarh
|
||||||
|
- calcul automatique du niveau des entités selon leur rêve
|
||||||
|
- la description des créatures venimeuses contient un lien vers leur venin
|
||||||
|
- Correction: les messages de combats ne marchaient plus (Changement combiné Foundry + rêve de Dragon)
|
||||||
|
|
||||||
|
## 12.0.29 - L'indexation d'Astrobazzarh
|
||||||
|
- les liens dans la descriptions des sorts pointent vers les sorts du compendium
|
||||||
|
- la description du chrasme contient le lien vers son venin plutôt qu'un tableau
|
||||||
|
|
||||||
|
## 12.0.28 - Les réserves d'Astrobazzarh
|
||||||
|
- possibilité de mettre en réserve depuis un sort connu
|
||||||
|
|
||||||
## 12.0.27 - Les vêtements d'Astrobazzarh
|
## 12.0.27 - Les vêtements d'Astrobazzarh
|
||||||
- Ajout de la liste des armures dans l'onglet caractéristiques
|
- Ajout de la liste des armures dans l'onglet caractéristiques
|
||||||
- Ajout d'une option pour choisir une carte des TMR alternatives
|
- Ajout d'une option pour choisir une carte des TMR alternatives
|
||||||
- Le Gardien peut créer des sorts en réserve parmi les sorts d'un personnage
|
- Le Gardien peut créer des sorts en réserve parmi les sorts d'un personnage
|
||||||
|
- Bouton pour ajouter des compétences aux créatures/entités
|
||||||
|
- Bouton pour ajouter un personnage accordé aux entités de cauchemar
|
||||||
- Correction du choix d'une cible parmi toutes les cibles pour les combats
|
- Correction du choix d'une cible parmi toutes les cibles pour les combats
|
||||||
- Correction des ajouts de blessures (prise en compte de l'endurance et des contusions)
|
- Correction des ajouts de blessures (prise en compte de l'endurance et des contusions)
|
||||||
- Correction des rituels de Détection et Lecture d'Aura des personnages prétirés
|
- Correction des rituels de Détection et Lecture d'Aura des personnages prétirés
|
||||||
|
- Correction des invocations
|
||||||
|
- support de "personnages" n'ayant pas toutes les compétences
|
||||||
|
- ajout de lien entre le sort et la créature
|
||||||
|
- correction des liens vers les journaux
|
||||||
|
- limitation aux compétences listées
|
||||||
|
- acteur non lié par défaut
|
||||||
|
- Correction des compendiums
|
||||||
|
- l'import de personnages depuis un compendium respecte les acteurs liés/non-liés
|
||||||
|
- les modèles de voyageurs sont liés par défaut
|
||||||
|
- les modèles de personnages non joueurs sont non-liés par défaut
|
||||||
|
|
||||||
## 12.0.26 - Astrobazzarh le Haut-rêvant
|
## 12.0.26 - Astrobazzarh le Haut-rêvant
|
||||||
- bouton pour le don de haut-rêve en un clic
|
- bouton pour le don de haut-rêve en un clic
|
||||||
@ -103,11 +127,9 @@
|
|||||||
- encodage de l'export en windows-1252
|
- encodage de l'export en windows-1252
|
||||||
- export de l'esquive avec armure et sans armure
|
- export de l'esquive avec armure et sans armure
|
||||||
|
|
||||||
## 12.0.10 - Le scriptorium d'Astrobazzarh
|
## 12.0.9 - 12.0.10 - Le scriptorium d'Astrobazzarh
|
||||||
- corrections de l'export scriptarium
|
- corrections de l'export scriptarium
|
||||||
|
- ajout d'une fonction avancée pour un exporter "scriptarium" des personnages
|
||||||
## 12.0.9 - Le scriptorium d'Astrobazzarh
|
|
||||||
- ajout d'une fonction avancée pour exporter les personnages dans un format csv
|
|
||||||
|
|
||||||
## 12.0.8 - La quincaillerie d'Astrobazzarh
|
## 12.0.8 - La quincaillerie d'Astrobazzarh
|
||||||
- le propriétaire est indiqué dans les feuilles d'équipements/compétences/...
|
- le propriétaire est indiqué dans les feuilles d'équipements/compétences/...
|
||||||
|
@ -22,7 +22,6 @@ import { AppPersonnageAleatoire } from "./actor/random/app-personnage-aleatoire.
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/**
|
/**
|
||||||
* Extend the basic ActorSheet with some very simple modifications
|
* Extend the basic ActorSheet with some very simple modifications
|
||||||
* @extends {ActorSheet}
|
|
||||||
*/
|
*/
|
||||||
export class RdDActorSheet extends RdDBaseActorSangSheet {
|
export class RdDActorSheet extends RdDBaseActorSangSheet {
|
||||||
|
|
||||||
@ -83,7 +82,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
|
|||||||
formData.combat.push(RdDItemArme.corpsACorps(actor));
|
formData.combat.push(RdDItemArme.corpsACorps(actor));
|
||||||
formData.combat.push(RdDItemArme.empoignade(actor));
|
formData.combat.push(RdDItemArme.empoignade(actor));
|
||||||
|
|
||||||
formData.esquives = this.actor.getCompetences("Esquive");
|
formData.esquives = this.actor.getCompetencesEsquive()
|
||||||
formData.combat = RdDCombatManager.listActionsArmes(formData.combat, formData.competences, formData.system.carac);
|
formData.combat = RdDCombatManager.listActionsArmes(formData.combat, formData.competences, formData.system.carac);
|
||||||
formData.empoignades = this.actor.getEmpoignades();
|
formData.empoignades = this.actor.getEmpoignades();
|
||||||
|
|
||||||
@ -184,7 +183,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
|
|||||||
|
|
||||||
// Equip Inventory Item
|
// Equip Inventory Item
|
||||||
this.html.find('.item-equip').click(async event => this.actor.equiperObjet(RdDSheetUtility.getItemId(event)))
|
this.html.find('.item-equip').click(async event => this.actor.equiperObjet(RdDSheetUtility.getItemId(event)))
|
||||||
this.html.find('.chance-actuelle').click(async event => this.actor.rollCarac('chance-actuelle'))
|
this.html.find('.roll-chance-actuelle').click(async event => this.actor.rollCarac('chance-actuelle'))
|
||||||
|
|
||||||
this.html.find('.button-appel-chance').click(async event => this.actor.rollAppelChance())
|
this.html.find('.button-appel-chance').click(async event => this.actor.rollAppelChance())
|
||||||
|
|
||||||
@ -215,7 +214,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
|
|||||||
// Boutons spéciaux MJs
|
// Boutons spéciaux MJs
|
||||||
this.html.find('.forcer-tmr-aleatoire').click(async event => this.actor.reinsertionAleatoire("Action MJ"))
|
this.html.find('.forcer-tmr-aleatoire').click(async event => this.actor.reinsertionAleatoire("Action MJ"))
|
||||||
this.html.find('.don-de-haut-reve').click(async event => this.actor.addDonDeHautReve())
|
this.html.find('.don-de-haut-reve').click(async event => this.actor.addDonDeHautReve())
|
||||||
this.html.find('.nouveau-sort-reserve').click(async event => this.actor.addSortReserve())
|
this.html.find('.sortreserve-add').click(async event => this.actor.addSortReserve(RdDSheetUtility.getItemId(event)))
|
||||||
this.html.find('.afficher-tmr').click(async event => this.actor.changeTMRVisible())
|
this.html.find('.afficher-tmr').click(async event => this.actor.changeTMRVisible())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -285,6 +284,8 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
|
|||||||
|
|
||||||
this.html.find('.ptreve-actuel-plus').click(async event => this.actor.reveActuelIncDec(1))
|
this.html.find('.ptreve-actuel-plus').click(async event => this.actor.reveActuelIncDec(1))
|
||||||
this.html.find('.ptreve-actuel-moins').click(async event => this.actor.reveActuelIncDec(-1))
|
this.html.find('.ptreve-actuel-moins').click(async event => this.actor.reveActuelIncDec(-1))
|
||||||
|
this.html.find('.chance-actuelle-plus').click(async event => this.actor.chanceActuelleIncDec(1))
|
||||||
|
this.html.find('.chance-actuelle-moins').click(async event => this.actor.chanceActuelleIncDec(-1))
|
||||||
this.html.find('.fatigue-plus').click(async event => this.actor.santeIncDec("fatigue", 1))
|
this.html.find('.fatigue-plus').click(async event => this.actor.santeIncDec("fatigue", 1))
|
||||||
this.html.find('.fatigue-moins').click(async event => this.actor.santeIncDec("fatigue", -1))
|
this.html.find('.fatigue-moins').click(async event => this.actor.santeIncDec("fatigue", -1))
|
||||||
}
|
}
|
||||||
|
@ -39,11 +39,12 @@ import { DialogChoixXpCarac } from "./dialog-choix-xp-carac.js";
|
|||||||
import { RdDItemArme } from "./item-arme.js";
|
import { RdDItemArme } from "./item-arme.js";
|
||||||
import { RdDCombatManager } from "./rdd-combat.js";
|
import { RdDCombatManager } from "./rdd-combat.js";
|
||||||
import { RdDItemTete } from "./item/tete.js";
|
import { RdDItemTete } from "./item/tete.js";
|
||||||
import { SystemCompendiums } from "./settings/system-compendiums.js";
|
|
||||||
import { DialogSelect } from "./dialog-select.js";
|
import { DialogSelect } from "./dialog-select.js";
|
||||||
|
import { PAS_DE_DRACONIC, POSSESSION_SANS_DRACONIC } from "./item/base-items.js";
|
||||||
|
|
||||||
export const MAINS_DIRECTRICES = ['Droitier', 'Gaucher', 'Ambidextre']
|
export const MAINS_DIRECTRICES = ['Droitier', 'Gaucher', 'Ambidextre']
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/**
|
/**
|
||||||
* Extend the base Actor entity by defining a custom roll data structure which is ideal for the Simple system.
|
* Extend the base Actor entity by defining a custom roll data structure which is ideal for the Simple system.
|
||||||
@ -94,11 +95,14 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
isHautRevant() { return this.system.attributs.hautrevant.value != "" }
|
isHautRevant() { return this.system.attributs.hautrevant.value != "" }
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getAgilite() { return this.system.carac.agilite?.value ?? 0 }
|
getAgilite() { return Misc.toInt(this.system.carac.agilite?.value ?? 0) }
|
||||||
getChance() { return this.system.carac.chance?.value ?? 0 }
|
getChance() { return Misc.toInt(this.system.carac.chance?.value ?? 0) }
|
||||||
|
|
||||||
getReveActuel() { return this.system.reve?.reve?.value ?? this.carac.reve.value ?? 0 }
|
getReveActuel() { return Misc.toInt(this.system.reve?.reve?.value) ?? this.carac.reve.value ?? 0 }
|
||||||
getChanceActuel() { return this.system.compteurs.chance?.value ?? 10 }
|
getChanceActuel() {
|
||||||
|
return Number.isNumeric(this.system.compteurs.chance.value) ?
|
||||||
|
Misc.toInt(this.system.compteurs.chance.value) : this.getChance()
|
||||||
|
}
|
||||||
getMoralTotal() { return this.system.compteurs.moral?.value ?? 0 }
|
getMoralTotal() { return this.system.compteurs.moral?.value ?? 0 }
|
||||||
|
|
||||||
getEnduranceMax() { return Math.max(1, Math.max(this.getTaille() + this.getConstitution(), this.getVieMax() + this.getVolonte())) }
|
getEnduranceMax() { return Math.max(1, Math.max(this.getTaille() + this.getConstitution(), this.getVieMax() + this.getVolonte())) }
|
||||||
@ -153,10 +157,9 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getDemiReve() { return this.system.reve.tmrpos.coord }
|
getDemiReve() { return this.system.reve.tmrpos.coord }
|
||||||
getDraconicList() { return this.itemTypes[ITEM_TYPES.competence].filter(it => it.system.categorie == 'draconic') }
|
getDraconicList() { return this.itemTypes[ITEM_TYPES.competence].filter(it => it.system.categorie == 'draconic') }
|
||||||
getBestDraconic() { return foundry.utils.duplicate(this.getDraconicList().sort(Misc.descending(it => it.system.niveau)).find(it => true)) }
|
getBestDraconic() { return foundry.utils.duplicate([...this.getDraconicList(), PAS_DE_DRACONIC].sort(Misc.descending(it => it.system.niveau)).find(it => true)) }
|
||||||
getDraconicOuPossession() {
|
getDraconicOuPossession() {
|
||||||
return [...this.getDraconicList().filter(it => it.system.niveau >= 0),
|
return [...this.getDraconicList().filter(it => it.system.niveau >= 0), POSSESSION_SANS_DRACONIC]
|
||||||
super.getDraconicOuPossession()]
|
|
||||||
.sort(Misc.descending(it => it.system.niveau))
|
.sort(Misc.descending(it => it.system.niveau))
|
||||||
.find(it => true)
|
.find(it => true)
|
||||||
}
|
}
|
||||||
@ -991,13 +994,23 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async addSortReserve() {
|
async addSortReserve(itemId) {
|
||||||
|
if (itemId) {
|
||||||
|
const item = this.items.get(itemId)
|
||||||
|
if (item.type == ITEM_TYPES.sort && !item.system.isrituel) {
|
||||||
|
this.$createSortReserve(item)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
const selectSortReserve = {
|
const selectSortReserve = {
|
||||||
title: "Créer un sort en réserve",
|
title: "Créer un sort en réserve",
|
||||||
label: "Choisir un sort",
|
label: "Choisir un sort",
|
||||||
list: this.itemTypes[ITEM_TYPES.sort].filter(it => !it.system.isrituel)
|
list: this.itemTypes[ITEM_TYPES.sort].filter(it => !it.system.isrituel)
|
||||||
}
|
}
|
||||||
DialogSelect.select(selectSortReserve, sort =>
|
DialogSelect.select(selectSortReserve, sort => this.$createSortReserve(sort))
|
||||||
|
}
|
||||||
|
|
||||||
|
$createSortReserve(sort) {
|
||||||
this.createEmbeddedDocuments("Item",
|
this.createEmbeddedDocuments("Item",
|
||||||
[{
|
[{
|
||||||
type: ITEM_TYPES.sortreserve,
|
type: ITEM_TYPES.sortreserve,
|
||||||
@ -1005,7 +1018,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
img: sort.img,
|
img: sort.img,
|
||||||
system: { sortid: sort.id, draconic: sort.system.draconic, ptreve: Number(sort.system.ptreve.match(/\d+/)), coord: 'A1', heurecible: 'Vaisseau' }
|
system: { sortid: sort.id, draconic: sort.system.draconic, ptreve: Number(sort.system.ptreve.match(/\d+/)), coord: 'A1', heurecible: 'Vaisseau' }
|
||||||
}],
|
}],
|
||||||
{ renderSheet: true }))
|
{ renderSheet: true })
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async reinsertionAleatoire(raison, accessible = tmr => true) {
|
async reinsertionAleatoire(raison, accessible = tmr => true) {
|
||||||
@ -1070,6 +1083,11 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
await this.update({ "system.reve.reve.value": reve });
|
await this.update({ "system.reve.reve.value": reve });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async chanceActuelleIncDec(value) {
|
||||||
|
const chance = Math.min(this.getChance(), Math.max(this.getChanceActuel() + value, 0));
|
||||||
|
await this.update({ "system.compteurs.chance.value": chance });
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async regainPointDeSeuil() {
|
async regainPointDeSeuil() {
|
||||||
const seuil = Misc.toInt(this.system.reve.seuil.value);
|
const seuil = Misc.toInt(this.system.reve.seuil.value);
|
||||||
@ -2254,12 +2272,6 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
async chanceActuelleIncDec(value) {
|
|
||||||
const chance = Math.min(this.getChance(), Math.max(this.getChanceActuel() + value, 0));
|
|
||||||
await this.updateCompteurValue("chance", chance);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async appelDestinee(onSuccess = () => { }, onEchec = () => { }) {
|
async appelDestinee(onSuccess = () => { }, onEchec = () => { }) {
|
||||||
let destinee = this.system.compteurs.destinee?.value ?? 0;
|
let destinee = this.system.compteurs.destinee?.value ?? 0;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { Grammar } from "../grammar.js";
|
import { Grammar } from "../grammar.js";
|
||||||
|
import { ITEM_TYPES } from "../item.js";
|
||||||
import { RdDSheetUtility } from "../rdd-sheet-utility.js";
|
import { RdDSheetUtility } from "../rdd-sheet-utility.js";
|
||||||
import { RdDBaseActorSheet } from "./base-actor-sheet.js";
|
import { RdDBaseActorSheet } from "./base-actor-sheet.js";
|
||||||
|
|
||||||
@ -36,7 +37,30 @@ export class RdDBaseActorReveSheet extends RdDBaseActorSheet {
|
|||||||
this.html.find('.delete-active-effect').click(async event => this.actor.removeEffect(this.html.find(event.currentTarget).parents(".active-effect").data('effect')));
|
this.html.find('.delete-active-effect').click(async event => this.actor.removeEffect(this.html.find(event.currentTarget).parents(".active-effect").data('effect')));
|
||||||
this.html.find('.enlever-tous-effets').click(async event => await this.actor.removeEffects());
|
this.html.find('.enlever-tous-effets').click(async event => await this.actor.removeEffects());
|
||||||
}
|
}
|
||||||
|
this.html.find('.competence-add').click(async event =>
|
||||||
|
await this.actor.createEmbeddedDocuments("Item", [{
|
||||||
|
type: ITEM_TYPES.competencecreature,
|
||||||
|
name: 'Nouvelle competence',
|
||||||
|
img: 'systems/foundryvtt-reve-de-dragon/icons/compcreature-serres.webp',
|
||||||
|
system: {
|
||||||
|
carac_value: this.actor.getForce(),
|
||||||
|
}
|
||||||
|
}], { renderSheet: true })
|
||||||
|
)
|
||||||
|
|
||||||
|
if (this.options.vueDetaillee) {
|
||||||
|
// On carac change
|
||||||
|
this.html.find('.carac-value').change(async event => {
|
||||||
|
let caracName = event.currentTarget.name.replace(".value", "").replace("system.carac.", "");
|
||||||
|
this.actor.updateCarac(caracName, parseInt(event.target.value));
|
||||||
|
});
|
||||||
|
// On competence change
|
||||||
|
this.html.find('.competence-value').change(async event => {
|
||||||
|
let compName = event.currentTarget.attributes.compname.value;
|
||||||
|
//console.log("Competence changed :", compName);
|
||||||
|
this.actor.updateCompetence(compName, parseInt(event.target.value));
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,34 +1,27 @@
|
|||||||
import { ChatUtility } from "../chat-utility.js";
|
import { ENTITE_INCARNE, SHOW_DICE, SYSTEM_RDD } from "../constants.js";
|
||||||
import { DialogValidationEncaissement } from "../dialog-validation-encaissement.js";
|
|
||||||
import { Grammar } from "../grammar.js";
|
import { Grammar } from "../grammar.js";
|
||||||
import { RdDItemCompetence } from "../item-competence.js";
|
|
||||||
import { Misc } from "../misc.js";
|
import { Misc } from "../misc.js";
|
||||||
import { RdDEmpoignade } from "../rdd-empoignade.js";
|
|
||||||
import { RdDResolutionTable } from "../rdd-resolution-table.js";
|
import { RdDResolutionTable } from "../rdd-resolution-table.js";
|
||||||
import { RdDEncaisser } from "../rdd-roll-encaisser.js";
|
import { RdDEncaisser } from "../rdd-roll-encaisser.js";
|
||||||
import { RdDRoll } from "../rdd-roll.js";
|
import { RdDRoll } from "../rdd-roll.js";
|
||||||
import { RdDUtility } from "../rdd-utility.js";
|
import { RdDUtility } from "../rdd-utility.js";
|
||||||
import { ReglesOptionnelles } from "../settings/regles-optionnelles.js";
|
import { ReglesOptionnelles } from "../settings/regles-optionnelles.js";
|
||||||
import { RdDBaseActor } from "./base-actor.js";
|
import { RdDBaseActor } from "./base-actor.js";
|
||||||
import { RdDItemCompetenceCreature } from "../item-competencecreature.js";
|
|
||||||
import { StatusEffects } from "../settings/status-effects.js";
|
|
||||||
import { ITEM_TYPES } from "../item.js";
|
import { ITEM_TYPES } from "../item.js";
|
||||||
import { Targets } from "../targets.js";
|
import { RdDItemCompetence } from "../item-competence.js";
|
||||||
import { RdDPossession } from "../rdd-possession.js";
|
import { RdDItemCompetenceCreature } from "../item-competencecreature.js";
|
||||||
import { RdDCombat, RdDCombatManager } from "../rdd-combat.js";
|
|
||||||
import { RdDConfirm } from "../rdd-confirm.js";
|
|
||||||
import { ENTITE_INCARNE, SHOW_DICE, SYSTEM_RDD } from "../constants.js";
|
|
||||||
import { RdDItemArme } from "../item-arme.js";
|
import { RdDItemArme } from "../item-arme.js";
|
||||||
|
import { StatusEffects } from "../settings/status-effects.js";
|
||||||
|
import { Targets } from "../targets.js";
|
||||||
|
import { RdDConfirm } from "../rdd-confirm.js";
|
||||||
import { RdDCarac } from "../rdd-carac.js";
|
import { RdDCarac } from "../rdd-carac.js";
|
||||||
|
|
||||||
const POSSESSION_SANS_DRACONIC = {
|
import { ChatUtility } from "../chat-utility.js";
|
||||||
img: 'systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp',
|
import { DialogValidationEncaissement } from "../dialog-validation-encaissement.js";
|
||||||
name: 'Sans draconic',
|
import { RdDCombat } from "../rdd-combat.js";
|
||||||
system: {
|
import { RdDEmpoignade } from "../rdd-empoignade.js";
|
||||||
niveau: 0,
|
import { RdDPossession } from "../rdd-possession.js";
|
||||||
defaut_carac: "reve-actuel",
|
import { BASE_CORPS_A_CORPS, BASE_ESQUIVE, POSSESSION_SANS_DRACONIC } from "../item/base-items.js";
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Classe de base pour les acteurs disposant de rêve (donc, pas des objets)
|
* Classe de base pour les acteurs disposant de rêve (donc, pas des objets)
|
||||||
@ -44,6 +37,15 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
|||||||
this.system.sante.endurance.value = Math.min(this.system.sante.endurance.value, this.system.sante.endurance.max)
|
this.system.sante.endurance.value = Math.min(this.system.sante.endurance.value, this.system.sante.endurance.max)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getCarac() {
|
||||||
|
return foundry.utils.mergeObject(this.system.carac,
|
||||||
|
{
|
||||||
|
'reve-actuel': this.getCaracReveActuel(),
|
||||||
|
'chance-actuelle': this.getCaracChanceActuelle()
|
||||||
|
},
|
||||||
|
{ inplace: false })
|
||||||
|
}
|
||||||
|
|
||||||
getCaracChanceActuelle() {
|
getCaracChanceActuelle() {
|
||||||
return {
|
return {
|
||||||
label: 'Chance actuelle',
|
label: 'Chance actuelle',
|
||||||
@ -60,7 +62,6 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
getTaille() { return Misc.toInt(this.system.carac.taille?.value) }
|
getTaille() { return Misc.toInt(this.system.carac.taille?.value) }
|
||||||
getConstitution() { return this.getReve() }
|
getConstitution() { return this.getReve() }
|
||||||
getForce() { return this.getReve() }
|
getForce() { return this.getReve() }
|
||||||
@ -163,24 +164,24 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
|||||||
}
|
}
|
||||||
return RdDItemCompetence.findCompetence(this.items, idOrName, options)
|
return RdDItemCompetence.findCompetence(this.items, idOrName, options)
|
||||||
}
|
}
|
||||||
getCompetences(name) {
|
|
||||||
return RdDItemCompetence.findCompetences(this.items, name)
|
getCompetences(name, options = { onMessage: message => { } }) {
|
||||||
|
return RdDItemCompetence.findCompetences(this.items, name, options)
|
||||||
}
|
}
|
||||||
getCompetenceCorpsACorps(options = {}) {
|
|
||||||
return this.getCompetence("Corps à corps", options)
|
getCompetenceCorpsACorps(options = { onMessage: message => { } }) {
|
||||||
|
return this.getCompetence(BASE_CORPS_A_CORPS.name, options) ?? BASE_CORPS_A_CORPS
|
||||||
}
|
}
|
||||||
getCompetencesEsquive() {
|
|
||||||
return this.getCompetences("esquive")
|
getCompetencesEsquive(options = { onMessage: message => { } }) {
|
||||||
|
return this.getCompetences(BASE_ESQUIVE.name, options) ?? [BASE_ESQUIVE]
|
||||||
}
|
}
|
||||||
|
|
||||||
getArmeParade(armeParadeId) {
|
getArmeParade(armeParadeId) {
|
||||||
const item = armeParadeId ? this.getEmbeddedDocument('Item', armeParadeId) : undefined;
|
return RdDItemArme.getArme(armeParadeId ? this.getEmbeddedDocument('Item', armeParadeId) : undefined)
|
||||||
return RdDItemArme.getArme(item);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getDraconicOuPossession() {
|
getDraconicOuPossession() { return POSSESSION_SANS_DRACONIC }
|
||||||
return POSSESSION_SANS_DRACONIC
|
|
||||||
}
|
|
||||||
|
|
||||||
getPossession(possessionId) {
|
getPossession(possessionId) {
|
||||||
return this.itemTypes[ITEM_TYPES.possession].find(it => it.system.possessionid == possessionId);
|
return this.itemTypes[ITEM_TYPES.possession].find(it => it.system.possessionid == possessionId);
|
||||||
@ -313,16 +314,6 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getCarac() {
|
|
||||||
// TODO: le niveau d'une entité de cauchemar devrait être exclu...
|
|
||||||
return foundry.utils.mergeObject(this.system.carac,
|
|
||||||
{
|
|
||||||
'reve-actuel': this.getCaracReveActuel(),
|
|
||||||
'chance-actuelle': this.getCaracChanceActuelle()
|
|
||||||
},
|
|
||||||
{ inplace: false })
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollCarac(caracName, jetResistance = undefined) {
|
async rollCarac(caracName, jetResistance = undefined) {
|
||||||
if (Grammar.equalsInsensitive(caracName, 'taille')) {
|
if (Grammar.equalsInsensitive(caracName, 'taille')) {
|
||||||
@ -506,7 +497,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
|||||||
|| entite.isEntiteAccordee(this)) {
|
|| entite.isEntiteAccordee(this)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
const rolled = await RdDResolutionTable.roll(this.getReveActuel(), - Number(entite.system.carac.niveau.value));
|
const rolled = await RdDResolutionTable.roll(this.getReveActuel(), - Number(entite.getNiveau()));
|
||||||
const rollData = {
|
const rollData = {
|
||||||
alias: this.getAlias(),
|
alias: this.getAlias(),
|
||||||
rolled: rolled,
|
rolled: rolled,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { MAX_ENDURANCE_FATIGUE, RdDUtility } from "../rdd-utility.js";
|
import { RdDUtility } from "../rdd-utility.js";
|
||||||
import { ReglesOptionnelles } from "../settings/regles-optionnelles.js";
|
import { ReglesOptionnelles } from "../settings/regles-optionnelles.js";
|
||||||
import { STATUSES } from "../settings/status-effects.js";
|
import { STATUSES } from "../settings/status-effects.js";
|
||||||
import { ITEM_TYPES } from "../item.js";
|
import { ITEM_TYPES } from "../item.js";
|
||||||
|
@ -177,21 +177,6 @@ export class RdDBaseActorSheet extends ActorSheet {
|
|||||||
this.options.vueDetaillee = !this.options.vueDetaillee;
|
this.options.vueDetaillee = !this.options.vueDetaillee;
|
||||||
this.render(true);
|
this.render(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (this.options.vueDetaillee) {
|
|
||||||
// On carac change
|
|
||||||
this.html.find('.carac-value').change(async event => {
|
|
||||||
let caracName = event.currentTarget.name.replace(".value", "").replace("system.carac.", "");
|
|
||||||
this.actor.updateCarac(caracName, parseInt(event.target.value));
|
|
||||||
});
|
|
||||||
// On competence change
|
|
||||||
this.html.find('.competence-value').change(async event => {
|
|
||||||
let compName = event.currentTarget.attributes.compname.value;
|
|
||||||
//console.log("Competence changed :", compName);
|
|
||||||
this.actor.updateCompetence(compName, parseInt(event.target.value));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_rechercherKeyup(event) {
|
_rechercherKeyup(event) {
|
||||||
|
@ -176,12 +176,20 @@ export class RdDBaseActor extends Actor {
|
|||||||
await super._preCreate(data, options, user);
|
await super._preCreate(data, options, user);
|
||||||
|
|
||||||
// Configure prototype token settings
|
// Configure prototype token settings
|
||||||
const prototypeToken = {};
|
if (this.type === "personnage") {
|
||||||
if (this.type === "personnage") Object.assign(prototypeToken, {
|
this.updateSource({
|
||||||
sight: { enabled: true }, actorLink: true, disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY
|
sight: { enabled: true },
|
||||||
});
|
actorLink: options.fromCompendium ? data.prototypeToken.actorLink : true,
|
||||||
|
disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
const prototypeToken = {
|
||||||
|
sight: { enabled: true },
|
||||||
|
disposition: CONST.TOKEN_DISPOSITIONS.NEUTRAL
|
||||||
|
}
|
||||||
this.updateSource({ prototypeToken });
|
this.updateSource({ prototypeToken });
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
prepareData() {
|
prepareData() {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { RdDBaseActorReveSheet } from "./base-actor-reve-sheet.js";
|
import { RdDBaseActorReveSheet } from "./base-actor-reve-sheet.js";
|
||||||
import { RdDSheetUtility } from "../rdd-sheet-utility.js";
|
import { RdDSheetUtility } from "../rdd-sheet-utility.js";
|
||||||
import { RdDUtility } from "../rdd-utility.js";
|
import { RdDUtility } from "../rdd-utility.js";
|
||||||
|
import { DialogSelect } from "../dialog-select.js";
|
||||||
|
|
||||||
export class RdDActorEntiteSheet extends RdDBaseActorReveSheet {
|
export class RdDActorEntiteSheet extends RdDBaseActorReveSheet {
|
||||||
|
|
||||||
@ -14,6 +15,8 @@ export class RdDActorEntiteSheet extends RdDBaseActorReveSheet {
|
|||||||
|
|
||||||
async getData() {
|
async getData() {
|
||||||
let formData = await super.getData();
|
let formData = await super.getData();
|
||||||
|
formData.niveau = this.actor.getNiveau()
|
||||||
|
delete formData.system.carac.niveau
|
||||||
formData.resonances = this.actor.system.sante.resonnance.actors.map(actorId => game.actors.get(actorId))
|
formData.resonances = this.actor.system.sante.resonnance.actors.map(actorId => game.actors.get(actorId))
|
||||||
.map(actor => { return { id: actor.id, name: actor.name, img: actor.img } })
|
.map(actor => { return { id: actor.id, name: actor.name, img: actor.img } })
|
||||||
return formData
|
return formData
|
||||||
@ -32,26 +35,30 @@ export class RdDActorEntiteSheet extends RdDBaseActorReveSheet {
|
|||||||
let compName = event.currentTarget.attributes.compname.value;
|
let compName = event.currentTarget.attributes.compname.value;
|
||||||
this.actor.updateCreatureCompetence(compName, "carac_value", parseInt(event.target.value));
|
this.actor.updateCreatureCompetence(compName, "carac_value", parseInt(event.target.value));
|
||||||
});
|
});
|
||||||
this.html.find('.creature-niveau').change(async event => {
|
|
||||||
let compName = event.currentTarget.attributes.compname.value;
|
|
||||||
this.actor.updateCreatureCompetence(compName, "niveau", parseInt(event.target.value));
|
|
||||||
});
|
|
||||||
this.html.find('.creature-dommages').change(async event => {
|
this.html.find('.creature-dommages').change(async event => {
|
||||||
let compName = event.currentTarget.attributes.compname.value;
|
let compName = event.currentTarget.attributes.compname.value;
|
||||||
this.actor.updateCreatureCompetence(compName, "dommages", parseInt(event.target.value));
|
this.actor.updateCreatureCompetence(compName, "dommages", parseInt(event.target.value));
|
||||||
});
|
})
|
||||||
|
|
||||||
|
this.html.find('.resonance-add').click(async event =>
|
||||||
|
DialogSelect.select({
|
||||||
|
label: "Choisir un acteur à accorder",
|
||||||
|
list: game.actors.filter(it => it.isPersonnage() && it.prototypeToken.actorLink)
|
||||||
|
},
|
||||||
|
it => this.resonanceAdd(it.id))
|
||||||
|
)
|
||||||
|
|
||||||
this.html.find('.resonance-delete').click(async event => {
|
this.html.find('.resonance-delete').click(async event => {
|
||||||
const li = RdDSheetUtility.getEventElement(event);
|
const li = RdDSheetUtility.getEventElement(event);
|
||||||
const actorId = li.data("actor-id");
|
const actorId = li.data("actor-id");
|
||||||
if (actorId) {
|
if (actorId) {
|
||||||
const actorResonance = game.actors.get(actorId);
|
const actorResonance = game.actors.get(actorId);
|
||||||
RdDUtility.confirmSubActeurDelete(this, actorResonance, li, () => {
|
RdDUtility.confirmSubActeurDelete(this, actorResonance, li, () => {
|
||||||
console.log('Delete : ', actorId);
|
this.resonanceDelete(actorId);
|
||||||
this.deleteSubActeur(actorId);
|
|
||||||
RdDUtility.slideOnDelete(this, li);
|
RdDUtility.slideOnDelete(this, li);
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async _onDropActor(event, dragData) {
|
async _onDropActor(event, dragData) {
|
||||||
@ -60,7 +67,13 @@ export class RdDActorEntiteSheet extends RdDBaseActorReveSheet {
|
|||||||
super._onDropActor(event, dragData)
|
super._onDropActor(event, dragData)
|
||||||
}
|
}
|
||||||
|
|
||||||
async deleteSubActeur(actorId) {
|
async resonanceAdd(actorId) {
|
||||||
|
let newResonances = [...this.actor.system.sante.resonnance.actors, actorId]
|
||||||
|
await this.actor.update({ 'system.sante.resonnance.actors': newResonances });
|
||||||
|
}
|
||||||
|
|
||||||
|
async resonanceDelete(actorId) {
|
||||||
|
console.log('Delete : ', actorId);
|
||||||
let newResonances = this.actor.system.sante.resonnance.actors.filter(id => id != actorId);
|
let newResonances = this.actor.system.sante.resonnance.actors.filter(id => id != actorId);
|
||||||
await this.actor.update({ 'system.sante.resonnance.actors': newResonances }, { renderSheet: false });
|
await this.actor.update({ 'system.sante.resonnance.actors': newResonances }, { renderSheet: false });
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { ENTITE_INCARNE, ENTITE_NONINCARNE } from "../constants.js";
|
import { ENTITE_INCARNE, ENTITE_NONINCARNE } from "../constants.js";
|
||||||
import { ITEM_TYPES } from "../item.js";
|
import { ITEM_TYPES } from "../item.js";
|
||||||
import { Misc } from "../misc.js";
|
import { Misc } from "../misc.js";
|
||||||
|
import { RdDCarac } from "../rdd-carac.js";
|
||||||
import { RdDEncaisser } from "../rdd-roll-encaisser.js";
|
import { RdDEncaisser } from "../rdd-roll-encaisser.js";
|
||||||
import { STATUSES } from "../settings/status-effects.js";
|
import { STATUSES } from "../settings/status-effects.js";
|
||||||
import { RdDBaseActorReve } from "./base-actor-reve.js";
|
import { RdDBaseActorReve } from "./base-actor-reve.js";
|
||||||
@ -18,12 +19,23 @@ export class RdDEntite extends RdDBaseActorReve {
|
|||||||
isEntite(typeentite = []) {
|
isEntite(typeentite = []) {
|
||||||
return (typeentite.length == 0 || typeentite.includes(this.system.definition.typeentite));
|
return (typeentite.length == 0 || typeentite.includes(this.system.definition.typeentite));
|
||||||
}
|
}
|
||||||
|
|
||||||
isNonIncarnee() { return this.isEntite([ENTITE_NONINCARNE]) }
|
isNonIncarnee() { return this.isEntite([ENTITE_NONINCARNE]) }
|
||||||
|
|
||||||
getReveActuel() {
|
getReveActuel() {
|
||||||
return Misc.toInt(this.system.carac.reve?.value)
|
return Misc.toInt(this.system.carac.reve?.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getCarac() {
|
||||||
|
const carac = super.getCarac()
|
||||||
|
delete carac.niveau
|
||||||
|
return carac
|
||||||
|
}
|
||||||
|
|
||||||
|
getNiveau() {
|
||||||
|
const reve = this.getReve()
|
||||||
|
return RdDCarac.getCaracDerivee(reve).niveau
|
||||||
|
}
|
||||||
getForce() { return this.getReve() }
|
getForce() { return this.getReve() }
|
||||||
getAgilite() { return this.getReve() }
|
getAgilite() { return this.getReve() }
|
||||||
getChance() { return this.getReve() }
|
getChance() { return this.getReve() }
|
||||||
@ -64,6 +76,7 @@ export class RdDEntite extends RdDBaseActorReve {
|
|||||||
}
|
}
|
||||||
return {}
|
return {}
|
||||||
}
|
}
|
||||||
|
|
||||||
async encaisser() {
|
async encaisser() {
|
||||||
if (this.isNonIncarnee()) {
|
if (this.isNonIncarnee()) {
|
||||||
return
|
return
|
||||||
|
@ -83,6 +83,7 @@ const MAPPING_BASE = [
|
|||||||
{ column: "protectionarmure", colName: 'Protection', getter: (actor, context) => Mapping.getProtectionArmure(actor, context) },
|
{ column: "protectionarmure", colName: 'Protection', getter: (actor, context) => Mapping.getProtectionArmure(actor, context) },
|
||||||
{ column: "malus_armure", getter: (actor, context) => Mapping.getMalusArmure(actor, context) },
|
{ column: "malus_armure", getter: (actor, context) => Mapping.getMalusArmure(actor, context) },
|
||||||
{ column: "reve_actuel", rollClass: 'roll-reve-actuel', colName: 'Rêve actuel', getter: (actor, context) => actor.system.reve.reve.value },
|
{ column: "reve_actuel", rollClass: 'roll-reve-actuel', colName: 'Rêve actuel', getter: (actor, context) => actor.system.reve.reve.value },
|
||||||
|
{ column: "chance_actuel", rollClass: 'roll-chance-actuelle', colName: 'Chance actuelle', getter: (actor, context) => actor.system.compteurs.chance.value },
|
||||||
{ column: "vie_actuel", rollClass: 'jet-vie', getter: (actor, context) => actor.system.sante.vie.value },
|
{ column: "vie_actuel", rollClass: 'jet-vie', getter: (actor, context) => actor.system.sante.vie.value },
|
||||||
{ column: "endurance_actuel", rollClass: 'jet-endurance', getter: (actor, context) => actor.system.sante.endurance.value },
|
{ column: "endurance_actuel", rollClass: 'jet-endurance', getter: (actor, context) => actor.system.sante.endurance.value },
|
||||||
{ column: "esquive", getter: (actor, context) => Mapping.getEsquive(context) },
|
{ column: "esquive", getter: (actor, context) => Mapping.getEsquive(context) },
|
||||||
@ -278,7 +279,7 @@ export class Mapping {
|
|||||||
const race = ['', 'humain'].includes(Grammar.toLowerCaseNoAccent(actor.system.race)) ? '' : (actor.system.race + ' ')
|
const race = ['', 'humain'].includes(Grammar.toLowerCaseNoAccent(actor.system.race)) ? '' : (actor.system.race + ' ')
|
||||||
const heure = actor.system.heure
|
const heure = actor.system.heure
|
||||||
const hn = `${sexeFeminin} à l'heure ${RdDTimestamp.definition(heure).avecArticle}`
|
const hn = `${sexeFeminin} à l'heure ${RdDTimestamp.definition(heure).avecArticle}`
|
||||||
const age = actor.system.age ? `${actor.system.age} ans` : undefined
|
const age = (actor.system.age && actor.system.age >0) ? `${actor.system.age} ans` : undefined
|
||||||
const taille = actor.system.taille
|
const taille = actor.system.taille
|
||||||
const poids = actor.system.poids
|
const poids = actor.system.poids
|
||||||
const cheveux = actor.system.cheveux ? `cheveux ${actor.system.cheveux}` : undefined
|
const cheveux = actor.system.cheveux ? `cheveux ${actor.system.cheveux}` : undefined
|
||||||
|
@ -6,6 +6,7 @@ import { Grammar } from "../grammar.js";
|
|||||||
import { Misc } from "../misc.js";
|
import { Misc } from "../misc.js";
|
||||||
import { ENTITE_INCARNE, ENTITE_NONINCARNE } from "../constants.js";
|
import { ENTITE_INCARNE, ENTITE_NONINCARNE } from "../constants.js";
|
||||||
import { RdDItemTete } from "../item/tete.js";
|
import { RdDItemTete } from "../item/tete.js";
|
||||||
|
import { ITEM_TYPES } from "../item.js";
|
||||||
|
|
||||||
const WHITESPACES = "\\s+"
|
const WHITESPACES = "\\s+"
|
||||||
const NUMERIC = "[\\+\\-]?\\d+"
|
const NUMERIC = "[\\+\\-]?\\d+"
|
||||||
@ -26,7 +27,7 @@ const MANIEMENTS = {
|
|||||||
'de lancer': (weapon) => { return { name: weapon.system.lancer, categorie: 'lancer' } },
|
'de lancer': (weapon) => { return { name: weapon.system.lancer, categorie: 'lancer' } },
|
||||||
'de jet': (weapon) => { return { name: weapon.system.lancer, categorie: 'lancer' } },
|
'de jet': (weapon) => { return { name: weapon.system.lancer, categorie: 'lancer' } },
|
||||||
'à une main': (weapon) => { return { name: weapon.system.competence, categorie: 'melee' } },
|
'à une main': (weapon) => { return { name: weapon.system.competence, categorie: 'melee' } },
|
||||||
'à deux main': (weapon) => { return { name: weapon.system.competence.replace("à 1 main", "à 2 main"), categorie: 'melee' } },
|
'à deux mains': (weapon) => { return { name: weapon.system.competence.replace("à 1 main", "à 2 mains"), categorie: 'melee' } },
|
||||||
'mêlée': (weapon) => { return { name: weapon.system.competence, categorie: 'melee' } },
|
'mêlée': (weapon) => { return { name: weapon.system.competence, categorie: 'melee' } },
|
||||||
}
|
}
|
||||||
const XREGEXP_WEAPON_MANIEMENT = "(?<maniement>(" + Misc.join(Object.keys(MANIEMENTS), '|') + "))"
|
const XREGEXP_WEAPON_MANIEMENT = "(?<maniement>(" + Misc.join(Object.keys(MANIEMENTS), '|') + "))"
|
||||||
@ -193,6 +194,7 @@ export class RdDStatBlockParser {
|
|||||||
|
|
||||||
let newActor = await RdDBaseActorReve.create({ name, type, system: actorData, items });
|
let newActor = await RdDBaseActorReve.create({ name, type, system: actorData, items });
|
||||||
await newActor.remiseANeuf()
|
await newActor.remiseANeuf()
|
||||||
|
await RdDStatBlockParser.adjustAttacks(newActor)
|
||||||
await RdDStatBlockParser.setValeursActuelles(newActor, statString)
|
await RdDStatBlockParser.setValeursActuelles(newActor, statString)
|
||||||
await newActor?.sheet.render(true)
|
await newActor?.sheet.render(true)
|
||||||
}
|
}
|
||||||
@ -267,7 +269,7 @@ export class RdDStatBlockParser {
|
|||||||
}
|
}
|
||||||
let weapMatch = XRegExp.exec(statString, XRegExp(weapon.name
|
let weapMatch = XRegExp.exec(statString, XRegExp(weapon.name
|
||||||
+ "(\\s*" + XREGEXP_WEAPON_MANIEMENT + ")?"
|
+ "(\\s*" + XREGEXP_WEAPON_MANIEMENT + ")?"
|
||||||
+ "\\s+(?<value>\\+\\d+)", 'giu'));
|
+ "\\s+(?<value>[\\+\\-]?\\d+)", 'giu'));
|
||||||
if (weapMatch) {
|
if (weapMatch) {
|
||||||
weapon = weapon.toObject();
|
weapon = weapon.toObject();
|
||||||
weapon.system.equipe = 'true';
|
weapon.system.equipe = 'true';
|
||||||
@ -296,6 +298,21 @@ export class RdDStatBlockParser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static async adjustAttacks(newActor) {
|
||||||
|
if (["creature", "entite"].includes(newActor.type)) {
|
||||||
|
const bonusDommages = newActor.getBonusDegat()
|
||||||
|
const ajustementAttaques = newActor.itemTypes[ITEM_TYPES.competencecreature].filter(it => it.system.iscombat)
|
||||||
|
.map(it => {
|
||||||
|
return {
|
||||||
|
_id: it.id,
|
||||||
|
'system.categorie': 'melee',
|
||||||
|
'system.dommages': it.system.dommages - bonusDommages
|
||||||
|
}
|
||||||
|
})
|
||||||
|
await newActor.updateEmbeddedDocuments('Item', ajustementAttaques)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static async setValeursActuelles(newActor, statString) {
|
static async setValeursActuelles(newActor, statString) {
|
||||||
const updates = {
|
const updates = {
|
||||||
}
|
}
|
||||||
@ -412,9 +429,9 @@ export class RdDStatBlockParser {
|
|||||||
actorData.taille = taille.value;
|
actorData.taille = taille.value;
|
||||||
}
|
}
|
||||||
// Get weight
|
// Get weight
|
||||||
const poids = XRegExp.exec(statString, XRegExp("(?<value>\\d+ kg)", 'giu'));
|
const poids = XRegExp.exec(statString, XRegExp(",\\s+(?<value>\\d+)\\s+kg", 'giu'));
|
||||||
if (poids?.value) {
|
if (poids?.value) {
|
||||||
actorData.poids = poids.value;
|
actorData.poids = poids.value + ' kg';
|
||||||
}
|
}
|
||||||
// Get cheveux
|
// Get cheveux
|
||||||
const cheveux = XRegExp.exec(statString, XRegExp("kg,\\s+(?<value>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+),\\s+yeux", 'giu'));
|
const cheveux = XRegExp.exec(statString, XRegExp("kg,\\s+(?<value>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+),\\s+yeux", 'giu'));
|
||||||
@ -435,7 +452,7 @@ export class RdDStatBlockParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static parseCreature(statString, actorData) {
|
static parseCreature(statString, actorData) {
|
||||||
let protection = XRegExp.exec(statString, XRegExp("protection\\s+(?<value>[\\-]?\\d+)", 'giu'));
|
let protection = XRegExp.exec(statString, XRegExp("protection(\\s+naturelle)?\\s+(?<value>[\\-]?\\d+)", 'giu'));
|
||||||
if (protection?.value) {
|
if (protection?.value) {
|
||||||
actorData.attributs.protection.value = Number(protection.value);
|
actorData.attributs.protection.value = Number(protection.value);
|
||||||
}
|
}
|
||||||
@ -461,33 +478,40 @@ export class RdDStatBlockParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static parseActorType(statString) {
|
static parseActorType(statString) {
|
||||||
let niveau = XRegExp.exec(statString, XRegExp("Niveau\\s+(?<value>[\\+\\-]?\\d+)", 'giu'))
|
let force = XRegExp.exec(statString, XRegExp("Force\\s+(?<value>[\\+\\-]?\\d+)", 'giu'))
|
||||||
|
let vue = XRegExp.exec(statString, XRegExp("Vue\\s+(?<value>[\\+\\-]?\\d+)", 'giu'))
|
||||||
let perception = XRegExp.exec(statString, XRegExp("perception\\s+(?<value>\\d+)", 'giu'))
|
let perception = XRegExp.exec(statString, XRegExp("perception\\s+(?<value>\\d+)", 'giu'))
|
||||||
if (perception?.value) {
|
if (!force) {
|
||||||
return "creature"
|
|
||||||
}
|
|
||||||
if (niveau?.value) {
|
|
||||||
return "entite"
|
return "entite"
|
||||||
}
|
}
|
||||||
|
if (!vue || perception) {
|
||||||
|
return "creature"
|
||||||
|
}
|
||||||
return "personnage"
|
return "personnage"
|
||||||
}
|
}
|
||||||
|
|
||||||
static extractName(actorType, statString) {
|
static extractName(actorType, statString) {
|
||||||
switch (actorType) {
|
if (actorType == "personnage") {
|
||||||
case "personnage":
|
|
||||||
// Check if ',né le' is present
|
// Check if ',né le' is present
|
||||||
let namePersonnage = "Importé"
|
let namePersonnage = "Importé"
|
||||||
if (statString.includes(", né")) {
|
if (statString.includes(", né")) {
|
||||||
// Name is all string before first comma ','
|
// Name is all string before first comma ','
|
||||||
namePersonnage = XRegExp.exec(statString, XRegExp("(?<value>[\\p{Letter}\\s\\d]+),", 'giu'));
|
namePersonnage = XRegExp.exec(statString, XRegExp("(?<value>[\\p{Letter}\'\\-\\s\\d]+),", 'giu'));
|
||||||
} else {
|
} else {
|
||||||
namePersonnage = XRegExp.exec(statString, XRegExp("(?<value>[\\p{Letter}\\s\\d]+)\\s+TAILLE", 'giu'));
|
namePersonnage = XRegExp.exec(statString, XRegExp("(?<value>[\\p{Letter}\'\\-\\s\\d]+)\\s+TAILLE", 'giu'));
|
||||||
}
|
}
|
||||||
if (namePersonnage?.value) {
|
if (namePersonnage?.value) {
|
||||||
return Misc.upperFirst(namePersonnage?.value);
|
return Misc.upperFirst(namePersonnage?.value.toLowerCase());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const name = XRegExp.exec(statString, XRegExp("(?<value>.+)\\s+taille", 'giu'));
|
const name = XRegExp.exec(statString, XRegExp("(?<value>.+)\\s+taille", 'giu'));
|
||||||
|
if (actorType == "entite") {
|
||||||
|
if (!(name?.value)) {
|
||||||
|
const nameEntiteReve = XRegExp.exec(statString, XRegExp("(?<value>.+)\\s+rêve", 'giu'));
|
||||||
|
return Misc.upperFirst(nameEntiteReve?.value || "Importé");
|
||||||
|
}
|
||||||
|
}
|
||||||
return Misc.upperFirst(name?.value || "Importé");
|
return Misc.upperFirst(name?.value || "Importé");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { Grammar } from "./grammar.js";
|
import { Grammar } from "./grammar.js";
|
||||||
import { RdDItemCompetenceCreature } from "./item-competencecreature.js"
|
import { RdDItemCompetenceCreature } from "./item-competencecreature.js"
|
||||||
import { ITEM_TYPES } from "./item.js";
|
import { ITEM_TYPES } from "./item.js";
|
||||||
|
import { BASE_CORPS_A_CORPS } from "./item/base-items.js";
|
||||||
import { RdDCombatManager } from "./rdd-combat.js";
|
import { RdDCombatManager } from "./rdd-combat.js";
|
||||||
|
|
||||||
const nomCategorieParade = {
|
const nomCategorieParade = {
|
||||||
@ -236,13 +237,13 @@ export class RdDItemArme extends Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static corpsACorps(actor) {
|
static corpsACorps(actor) {
|
||||||
let competence = actor?.getCompetenceCorpsACorps() ?? { system: { niveau: -6 } };
|
let competence = actor?.getCompetenceCorpsACorps() ?? BASE_CORPS_A_CORPS
|
||||||
let melee = actor ? actor.system.carac['melee'].value : 0
|
let melee = actor ? actor.system.carac['melee'].value : 0
|
||||||
return {
|
return {
|
||||||
_id: competence?.id,
|
_id: competence.id,
|
||||||
name: 'Corps à corps',
|
name: 'Corps à corps',
|
||||||
type: ITEM_TYPES.arme,
|
type: ITEM_TYPES.arme,
|
||||||
img: 'systems/foundryvtt-reve-de-dragon/icons/competence_corps_a_corps.webp',
|
img: competence.img,
|
||||||
system: {
|
system: {
|
||||||
initiative: RdDCombatManager.calculInitiative(competence.system.niveau, melee),
|
initiative: RdDCombatManager.calculInitiative(competence.system.niveau, melee),
|
||||||
equipe: true,
|
equipe: true,
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { Grammar } from "./grammar.js";
|
import { Grammar } from "./grammar.js";
|
||||||
import { RdDItem } from "./item.js";
|
import { RdDItem } from "./item.js";
|
||||||
|
import { SANS_COMPETENCE } from "./item/base-items.js";
|
||||||
import { Misc } from "./misc.js";
|
import { Misc } from "./misc.js";
|
||||||
|
|
||||||
const competenceTroncs = [["Esquive", "Dague", "Corps à corps"],
|
const competenceTroncs = [["Esquive", "Dague", "Corps à corps"],
|
||||||
@ -137,7 +138,7 @@ export class RdDItemCompetence extends Item {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static computeEconomieXPTronc(competences) {
|
static computeEconomieXPTronc(competences) {
|
||||||
return competenceTroncs.map(
|
return competenceTroncs.map(
|
||||||
list => list.map(name => RdDItemCompetence.findCompetence(competences, name))
|
list => list.map(name => RdDItemCompetence.findCompetence(competences, name, { onMessage: message => { } }))
|
||||||
// calcul du coût xp jusqu'au niveau 0 maximum
|
// calcul du coût xp jusqu'au niveau 0 maximum
|
||||||
.map(it => RdDItemCompetence.computeDeltaXP(it?.system.base ?? -11, Math.min(it?.system.niveau ?? -11, 0)))
|
.map(it => RdDItemCompetence.computeDeltaXP(it?.system.base ?? -11, Math.min(it?.system.niveau ?? -11, 0)))
|
||||||
.sort(Misc.ascending())
|
.sort(Misc.ascending())
|
||||||
@ -203,26 +204,12 @@ export class RdDItemCompetence extends Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static findCompetences(list, name) {
|
static findCompetences(list, name, options = {}) {
|
||||||
return Misc.findAllLike(name, list, { filter: it => it.isCompetence(), description: 'compétence' });
|
options = foundry.utils.mergeObject(options, { preFilter: it => it.isCompetence(), description: 'compétence' }, { overwrite: false, inplace: false });
|
||||||
|
return Misc.findAllLike(name, list, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
static sansCompetence() {
|
static sansCompetence() { return SANS_COMPETENCE }
|
||||||
return {
|
|
||||||
name: "Sans compétence",
|
|
||||||
type: "competence",
|
|
||||||
img: "systems/foundryvtt-reve-de-dragon/icons/templates/icone_parchement_vierge.webp",
|
|
||||||
system: {
|
|
||||||
niveau: 0,
|
|
||||||
default_diffLibre: 0,
|
|
||||||
base: 0,
|
|
||||||
categorie: "Aucune",
|
|
||||||
description: "",
|
|
||||||
descriptionmj: "",
|
|
||||||
defaut_carac: "",
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
static findFirstItem(list, idOrName, options) {
|
static findFirstItem(list, idOrName, options) {
|
||||||
return list.find(it => it.id == idOrName && options.preFilter(it))
|
return list.find(it => it.id == idOrName && options.preFilter(it))
|
||||||
@ -272,8 +259,9 @@ export class RdDItemCompetence extends Item {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static triVisible(competences) {
|
static triVisible(competences) {
|
||||||
return competences.filter(it => !it.system.isHidden)
|
return competences
|
||||||
.sort((a, b) => RdDItemCompetence.compare(a, b))
|
? competences.filter(it => !it.system.isHidden).sort((a, b) => RdDItemCompetence.compare(a, b))
|
||||||
|
: []
|
||||||
}
|
}
|
||||||
|
|
||||||
static $positionTri(comp) {
|
static $positionTri(comp) {
|
||||||
|
@ -8,6 +8,7 @@ import { SystemCompendiums } from "./settings/system-compendiums.js";
|
|||||||
import { RdDRaretes } from "./item/raretes.js";
|
import { RdDRaretes } from "./item/raretes.js";
|
||||||
import { CATEGORIES_COMPETENCES } from "./item-competence.js";
|
import { CATEGORIES_COMPETENCES } from "./item-competence.js";
|
||||||
import { CATEGORIES_COMPETENCES_CREATURES } from "./item-competencecreature.js";
|
import { CATEGORIES_COMPETENCES_CREATURES } from "./item-competencecreature.js";
|
||||||
|
import { BASE_CORPS_A_CORPS, BASE_ESQUIVE } from "./item/base-items.js";
|
||||||
|
|
||||||
export const ACTOR_TYPES = {
|
export const ACTOR_TYPES = {
|
||||||
personnage: 'personnage',
|
personnage: 'personnage',
|
||||||
@ -244,13 +245,13 @@ export class RdDItem extends Item {
|
|||||||
isEsquive() {
|
isEsquive() {
|
||||||
return (this.isCompetence()
|
return (this.isCompetence()
|
||||||
&& this.system.categorie == 'melee'
|
&& this.system.categorie == 'melee'
|
||||||
&& Grammar.includesLowerCaseNoAccent(this.name, 'Esquive'));
|
&& Grammar.includesLowerCaseNoAccent(this.name, BASE_ESQUIVE.name));
|
||||||
}
|
}
|
||||||
|
|
||||||
isCorpsACorps() {
|
isCorpsACorps() {
|
||||||
return this.isCompetence()
|
return this.isCompetence()
|
||||||
&& this.system.categorie == 'melee'
|
&& this.system.categorie == 'melee'
|
||||||
&& Grammar.includesLowerCaseNoAccent(this.name, 'Corps à Corps')
|
&& Grammar.includesLowerCaseNoAccent(this.name, BASE_CORPS_A_CORPS.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
isCompetenceArme() {
|
isCompetenceArme() {
|
||||||
@ -602,7 +603,7 @@ export class RdDItem extends Item {
|
|||||||
if (!other || !this.isInventaire()) {
|
if (!other || !this.isInventaire()) {
|
||||||
return [false, undefined];
|
return [false, undefined];
|
||||||
}
|
}
|
||||||
if (this.isConteneur()){
|
if (this.isConteneur()) {
|
||||||
return [false, `Impossible de regrouper des conteneurs, ils ne sont pas empilables`];
|
return [false, `Impossible de regrouper des conteneurs, ils ne sont pas empilables`];
|
||||||
}
|
}
|
||||||
if (this.system.quantite == undefined) {
|
if (this.system.quantite == undefined) {
|
||||||
|
20
module/item/base-items.js
Normal file
20
module/item/base-items.js
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
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"
|
||||||
|
}
|
||||||
|
|
@ -197,7 +197,7 @@ export class Misc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static isFirstOwnerPlayer(document) {
|
static isFirstOwnerPlayer(document) {
|
||||||
if (!document.testUserPermission){
|
if (!document.testUserPermission) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return game.users.find(u => document.testUserPermission(u, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)) == game.user
|
return game.users.find(u => document.testUserPermission(u, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)) == game.user
|
||||||
@ -231,7 +231,7 @@ export class Misc {
|
|||||||
preFilter: it => true,
|
preFilter: it => true,
|
||||||
description: 'valeur',
|
description: 'valeur',
|
||||||
onMessage: m => ui.notifications.info(m)
|
onMessage: m => ui.notifications.info(m)
|
||||||
}, options);
|
}, options, { overwrite: true, inplace: false });
|
||||||
|
|
||||||
const subset = this.findAllLike(value, elements, options);
|
const subset = this.findAllLike(value, elements, options);
|
||||||
if (subset.length == 0) {
|
if (subset.length == 0) {
|
||||||
|
@ -3,38 +3,38 @@ import { Misc } from "./misc.js";
|
|||||||
|
|
||||||
const TABLE_CARACTERISTIQUES_DERIVEES = {
|
const TABLE_CARACTERISTIQUES_DERIVEES = {
|
||||||
// xp: coût pour passer du niveau inférieur à ce niveau
|
// xp: coût pour passer du niveau inférieur à ce niveau
|
||||||
1: { xp: 3, poids: "moins de 1kg", poidsMin: 0, poidsMax: 1, plusdom: -5, sconst: 0.5, sust: 0.1 },
|
1: { xp: 3, niveau: -5, poids: "moins de 1kg", poidsMin: 0, poidsMax: 1, plusdom: -5, sconst: 0.5, sust: 0.1 },
|
||||||
2: { xp: 3, poids: "1-5", poidsMin: 1, poidsMax: 5, plusdom: -4, sconst: 0.5, sust: 0.3 },
|
2: { xp: 3, niveau: -4, poids: "1-5", poidsMin: 1, poidsMax: 5, plusdom: -4, sconst: 0.5, sust: 0.3 },
|
||||||
3: { xp: 4, poids: "6-10", poidsMin: 6, poidsMax: 10, plusdom: -3, sconst: 1, sust: 0.5, beaute: 'hideux' },
|
3: { xp: 4, niveau: -3, poids: "6-10", poidsMin: 6, poidsMax: 10, plusdom: -3, sconst: 1, sust: 0.5, beaute: 'hideux' },
|
||||||
4: { xp: 4, poids: "11-20", poidsMin: 11, poidsMax: 20, plusdom: -3, sconst: 1, sust: 1, beaute: 'repoussant' },
|
4: { xp: 4, niveau: -2, poids: "11-20", poidsMin: 11, poidsMax: 20, plusdom: -3, sconst: 1, sust: 1, beaute: 'repoussant' },
|
||||||
5: { xp: 5, poids: "21-30", poidsMin: 21, poidsMax: 30, plusdom: -2, sconst: 1, sust: 1, beaute: 'franchement très laid' },
|
5: { xp: 5, niveau: -1, poids: "21-30", poidsMin: 21, poidsMax: 30, plusdom: -2, sconst: 1, sust: 1, beaute: 'franchement très laid' },
|
||||||
6: { xp: 5, poids: "31-40", poidsMin: 31, poidsMax: 40, plusdom: -1, sconst: 2, sust: 2, beaute: 'laid' },
|
6: { xp: 5, niveau: 0, poids: "31-40", poidsMin: 31, poidsMax: 40, plusdom: -1, sconst: 2, sust: 2, beaute: 'laid' },
|
||||||
7: { xp: 6, poids: "41-50", poidsMin: 41, poidsMax: 50, plusdom: -1, sconst: 2, sust: 2, beaute: 'très désavantagé' },
|
7: { xp: 6, niveau: 0, poids: "41-50", poidsMin: 41, poidsMax: 50, plusdom: -1, sconst: 2, sust: 2, beaute: 'très désavantagé' },
|
||||||
8: { xp: 6, poids: "51-60", poidsMin: 51, poidsMax: 60, plusdom: 0, sconst: 2, sust: 2, beaute: 'désavantagé' },
|
8: { xp: 6, niveau: 0, poids: "51-60", poidsMin: 51, poidsMax: 60, plusdom: 0, sconst: 2, sust: 2, beaute: 'désavantagé' },
|
||||||
9: { xp: 7, poids: "61-65", poidsMin: 61, poidsMax: 65, plusdom: 0, sconst: 3, sust: 2, beaute: 'pas terrible' },
|
9: { xp: 7, niveau: 0, poids: "61-65", poidsMin: 61, poidsMax: 65, plusdom: 0, sconst: 3, sust: 2, beaute: 'pas terrible' },
|
||||||
10: { xp: 7, poids: "66-70", poidsMin: 66, poidsMax: 70, plusdom: 0, sconst: 3, sust: 3, beaute: 'commun' },
|
10: { xp: 7, niveau: 0, poids: "66-70", poidsMin: 66, poidsMax: 70, plusdom: 0, sconst: 3, sust: 3, beaute: 'commun' },
|
||||||
11: { xp: 8, poids: "71-75", poidsMin: 71, poidsMax: 75, plusdom: 0, sconst: 3, sust: 3, beaute: 'pas mal' },
|
11: { xp: 8, niveau: 1, poids: "71-75", poidsMin: 71, poidsMax: 75, plusdom: 0, sconst: 3, sust: 3, beaute: 'pas mal' },
|
||||||
12: { xp: 8, poids: "76-80", poidsMin: 76, poidsMax: 80, plusdom: +1, sconst: 4, sust: 3, beaute: 'avantagé' },
|
12: { xp: 8, niveau: 1, poids: "76-80", poidsMin: 76, poidsMax: 80, plusdom: +1, sconst: 4, sust: 3, beaute: 'avantagé' },
|
||||||
13: { xp: 9, poids: "81-90", poidsMin: 81, poidsMax: 90, plusdom: +1, sconst: 4, sust: 3, beaute: 'mignon' },
|
13: { xp: 9, niveau: 2, poids: "81-90", poidsMin: 81, poidsMax: 90, plusdom: +1, sconst: 4, sust: 3, beaute: 'mignon' },
|
||||||
14: { xp: 9, poids: "91-100", poidsMin: 91, poidsMax: 100, plusdom: +2, sconst: 4, sust: 4, beaute: 'beau' },
|
14: { xp: 9, niveau: 2, poids: "91-100", poidsMin: 91, poidsMax: 100, plusdom: +2, sconst: 4, sust: 4, beaute: 'beau' },
|
||||||
15: { xp: 10, poids: "101-110", poidsMin: 101, poidsMax: 110, plusdom: +2, sconst: 5, sust: 4, beaute: 'très beau' },
|
15: { xp: 10, niveau: 3, poids: "101-110", poidsMin: 101, poidsMax: 110, plusdom: +2, sconst: 5, sust: 4, beaute: 'très beau' },
|
||||||
16: { xp: 20, poids: "111-120", poidsMin: 111, poidsMax: 120, plusdom: +3, sconst: 5, sust: 4, beaute: 'éblouissant' },
|
16: { xp: 20, niveau: 3, poids: "111-120", poidsMin: 111, poidsMax: 120, plusdom: +3, sconst: 5, sust: 4, beaute: 'éblouissant' },
|
||||||
17: { xp: 30, poids: "121-131", poidsMin: 121, poidsMax: 131, plusdom: +3, sconst: 5, sust: 5 },
|
17: { xp: 30, niveau: 4, poids: "121-131", poidsMin: 121, poidsMax: 131, plusdom: +3, sconst: 5, sust: 5 },
|
||||||
18: { xp: 40, poids: "131-141", poidsMin: 131, poidsMax: 141, plusdom: +4, sconst: 6, sust: 5 },
|
18: { xp: 40, niveau: 4, poids: "131-141", poidsMin: 131, poidsMax: 141, plusdom: +4, sconst: 6, sust: 5 },
|
||||||
19: { xp: 50, poids: "141-150", poidsMin: 141, poidsMax: 150, plusdom: +4, sconst: 6, sust: 5 },
|
19: { xp: 50, niveau: 5, poids: "141-150", poidsMin: 141, poidsMax: 150, plusdom: +4, sconst: 6, sust: 5 },
|
||||||
20: { xp: 60, poids: "151-160", poidsMin: 151, poidsMax: 160, plusdom: +4, sconst: 6, sust: 6 },
|
20: { xp: 60, niveau: 5, poids: "151-160", poidsMin: 151, poidsMax: 160, plusdom: +4, sconst: 6, sust: 6 },
|
||||||
21: { xp: 70, poids: "161-180", poidsMin: 161, poidsMax: 180, plusdom: +5, sconst: 7, sust: 6 },
|
21: { xp: 70, niveau: 6, poids: "161-180", poidsMin: 161, poidsMax: 180, plusdom: +5, sconst: 7, sust: 6 },
|
||||||
22: { xp: 80, poids: "181-200", poidsMin: 181, poidsMax: 200, plusdom: +5, sconst: 7, sust: 7 },
|
22: { xp: 80, niveau: 6, poids: "181-200", poidsMin: 181, poidsMax: 200, plusdom: +5, sconst: 7, sust: 7 },
|
||||||
23: { xp: 90, poids: "201-300", poidsMin: 201, poidsMax: 300, plusdom: +6, sconst: 7, sust: 8 },
|
23: { xp: 90, niveau: 7, poids: "201-300", poidsMin: 201, poidsMax: 300, plusdom: +6, sconst: 7, sust: 8 },
|
||||||
24: { xp: 100, poids: "301-400", poidsMin: 301, poidsMax: 400, plusdom: +6, sconst: 8, sust: 9 },
|
24: { xp: 100, niveau: 7, poids: "301-400", poidsMin: 301, poidsMax: 400, plusdom: +6, sconst: 8, sust: 9 },
|
||||||
25: { xp: 110, poids: "401-500", poidsMin: 401, poidsMax: 500, plusdom: +7, sconst: 8, sust: 10 },
|
25: { xp: 110, niveau: 8, poids: "401-500", poidsMin: 401, poidsMax: 500, plusdom: +7, sconst: 8, sust: 10 },
|
||||||
26: { xp: 120, poids: "501-600", poidsMin: 501, poidsMax: 600, plusdom: +7, sconst: 8, sust: 11 },
|
26: { xp: 120, niveau: 8, poids: "501-600", poidsMin: 501, poidsMax: 600, plusdom: +7, sconst: 8, sust: 11 },
|
||||||
27: { xp: 130, poids: "601-700", poidsMin: 601, poidsMax: 700, plusdom: +8, sconst: 9, sust: 12 },
|
27: { xp: 130, niveau: 9, poids: "601-700", poidsMin: 601, poidsMax: 700, plusdom: +8, sconst: 9, sust: 12 },
|
||||||
28: { xp: 140, poids: "701-800", poidsMin: 701, poidsMax: 800, plusdom: +8, sconst: 9, sust: 13 },
|
28: { xp: 140, niveau: 9, poids: "701-800", poidsMin: 701, poidsMax: 800, plusdom: +8, sconst: 9, sust: 13 },
|
||||||
29: { xp: 150, poids: "801-900", poidsMin: 801, poidsMax: 900, plusdom: +9, sconst: 9, sust: 14 },
|
29: { xp: 150, niveau: 10, poids: "801-900", poidsMin: 801, poidsMax: 900, plusdom: +9, sconst: 9, sust: 14 },
|
||||||
30: { xp: 160, poids: "901-1000", poidsMin: 901, poidsMax: 1000, plusdom: +9, sconst: 10, sust: 15 },
|
30: { xp: 160, niveau: 10, poids: "901-1000", poidsMin: 901, poidsMax: 1000, plusdom: +9, sconst: 10, sust: 15 },
|
||||||
31: { xp: 170, poids: "1001-1500", poidsMin: 1001, poidsMax: 1500, plusdom: +10, sconst: 10, sust: 16 },
|
31: { xp: 170, niveau: 11, poids: "1001-1500", poidsMin: 1001, poidsMax: 1500, plusdom: +10, sconst: 10, sust: 16 },
|
||||||
32: { xp: 180, poids: "1501-2000", poidsMin: 1501, poidsMax: 2000, plusdom: +11, sconst: 10, sust: 17 }
|
32: { xp: 180, niveau: 11, poids: "1501-2000", poidsMin: 1501, poidsMax: 2000, plusdom: +11, sconst: 10, sust: 17 }
|
||||||
};
|
};
|
||||||
|
|
||||||
export class RdDCarac {
|
export class RdDCarac {
|
||||||
|
@ -228,16 +228,19 @@ export class RdDCombatManager extends Combat {
|
|||||||
static $prepareAttaqueArme(infoAttaque) {
|
static $prepareAttaqueArme(infoAttaque) {
|
||||||
const comp = infoAttaque.competences.find(it => Grammar.equalsInsensitive(it.name, infoAttaque.competence))
|
const comp = infoAttaque.competences.find(it => Grammar.equalsInsensitive(it.name, infoAttaque.competence))
|
||||||
const arme = infoAttaque.arme;
|
const arme = infoAttaque.arme;
|
||||||
const attaque = foundry.utils.duplicate(arme);
|
const attaque = foundry.utils.duplicate(arme)
|
||||||
|
|
||||||
|
const carac = comp?.system.defaut_carac ?? (infoAttaque.infoMain == '(lancer)' ? 'lancer' : infoAttaque.infoMain == '(lancer)' ? 'tir' : 'melee')
|
||||||
|
const niveau = comp?.system.niveau ?? (infoAttaque.infoMain == '(lancer)' ? -8 : -6)
|
||||||
attaque.action = 'attaque';
|
attaque.action = 'attaque';
|
||||||
attaque.system.competence = infoAttaque.competence;
|
attaque.system.competence = infoAttaque.competence;
|
||||||
attaque.system.dommagesReels = infoAttaque.dommagesReel;
|
attaque.system.dommagesReels = infoAttaque.dommagesReel;
|
||||||
attaque.system.infoMain = infoAttaque.infoMain;
|
attaque.system.infoMain = infoAttaque.infoMain;
|
||||||
attaque.system.niveau = comp.system.niveau;
|
attaque.system.niveau = niveau
|
||||||
|
|
||||||
const ajustement = (arme?.parent?.getEtatGeneral() ?? 0) + (arme?.system.magique) ? arme.system.ecaille_efficacite : 0;
|
const ajustement = (arme.parent?.getEtatGeneral() ?? 0) + (arme.system.magique) ? arme.system.ecaille_efficacite : 0
|
||||||
attaque.system.initiative = RdDCombatManager.calculInitiative(comp.system.niveau, infoAttaque.carac[comp.system.defaut_carac].value, ajustement);
|
attaque.system.initiative = RdDCombatManager.calculInitiative(niveau, infoAttaque.carac[carac].value, ajustement)
|
||||||
return attaque;
|
return attaque
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -759,8 +762,8 @@ export class RdDCombat {
|
|||||||
competence: competence,
|
competence: competence,
|
||||||
surprise: this.attacker.getSurprise(true),
|
surprise: this.attacker.getSurprise(true),
|
||||||
surpriseDefenseur: this.defender.getSurprise(true),
|
surpriseDefenseur: this.defender.getSurprise(true),
|
||||||
sourceToken: this.attackerToken,
|
sourceTokenId: this.attackerToken?.id,
|
||||||
targetToken: this.defenderToken,
|
targetTokenId: this.defenderToken?.id,
|
||||||
essais: {}
|
essais: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bringSubDialogToTop() {
|
bringSubDialogToTop() {
|
||||||
if (this.subdialog?.bringToTop && this.subdialog?.element[0]) {
|
if (this.subdialog?.bringToTop && this.subdialog?.element && this.subdialog?.element[0]) {
|
||||||
this.subdialog.bringToTop();
|
this.subdialog.bringToTop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -245,6 +245,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
updateTokens() {
|
updateTokens() {
|
||||||
this._removeTokens(t => true);
|
this._removeTokens(t => true);
|
||||||
|
this.allTokens = []
|
||||||
this.loadRencontres();
|
this.loadRencontres();
|
||||||
this.loadCasesSpeciales();
|
this.loadCasesSpeciales();
|
||||||
this._createTokens();
|
this._createTokens();
|
||||||
@ -1133,6 +1134,14 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
return tmr;
|
return tmr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getTokensDetails(coordTMR) {
|
||||||
|
const tmrTooltip = `${coordTMR}: ${TMRUtility.getTMRLabel(coordTMR)}`
|
||||||
|
const tokenTooltips = this.allTokens
|
||||||
|
.filter(token => token.coordTMR() == coordTMR)
|
||||||
|
.map(token => token.tooltip);
|
||||||
|
return [tmrTooltip, ...tokenTooltips].reduce(Misc.joining('\n'))
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_removeTokens(filter = it => true) {
|
_removeTokens(filter = it => true) {
|
||||||
this.allTokens.filter(filter).forEach(token => this.pixiTMR.removeToken(token))
|
this.allTokens.filter(filter).forEach(token => this.pixiTMR.removeToken(token))
|
||||||
@ -1144,7 +1153,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (this.demiReve === token && this.isDemiReveCache()) {
|
if (this.demiReve === token && this.isDemiReveCache()) {
|
||||||
return;
|
return
|
||||||
}
|
}
|
||||||
this.pixiTMR.positionToken(token);
|
this.pixiTMR.positionToken(token);
|
||||||
if (!this.allTokens.includes(token)) {
|
if (!this.allTokens.includes(token)) {
|
||||||
|
@ -262,7 +262,24 @@ export class RdDUtility {
|
|||||||
'systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-actor.html'
|
'systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-actor.html'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// foundry et options
|
||||||
|
Handlebars.registerHelper('RDD_CONFIG', path => RDD_CONFIG[path])
|
||||||
|
Handlebars.registerHelper('linkCompendium', (pack, id, name) => RdDUtility.linkCompendium(pack, id, name));
|
||||||
|
Handlebars.registerHelper('regle-optionnelle', (option) => ReglesOptionnelles.isUsing(option));
|
||||||
|
|
||||||
|
Handlebars.registerHelper('plusMoins', diff => (diff > 0 ? '+' : '') + Math.round(diff))
|
||||||
|
|
||||||
|
// Handle v12 removal of this helper
|
||||||
|
Handlebars.registerHelper('select', function (selected, options) {
|
||||||
|
const escapedValue = RegExp.escape(Handlebars.escapeExpression(selected));
|
||||||
|
const rgx = new RegExp(' value=[\"\']' + escapedValue + '[\"\']');
|
||||||
|
const html = options.fn(this);
|
||||||
|
return html.replace(rgx, "$& selected");
|
||||||
|
})
|
||||||
|
|
||||||
|
// logic
|
||||||
Handlebars.registerHelper('either', (a, b) => a ?? b);
|
Handlebars.registerHelper('either', (a, b) => a ?? b);
|
||||||
|
// string manipulation
|
||||||
Handlebars.registerHelper('upperFirst', str => Misc.upperFirst(str ?? 'Null'));
|
Handlebars.registerHelper('upperFirst', str => Misc.upperFirst(str ?? 'Null'));
|
||||||
Handlebars.registerHelper('lowerFirst', str => Misc.lowerFirst(str ?? 'Null'));
|
Handlebars.registerHelper('lowerFirst', str => Misc.lowerFirst(str ?? 'Null'));
|
||||||
Handlebars.registerHelper('uppercase', str => str?.toUpperCase() ?? '');
|
Handlebars.registerHelper('uppercase', str => str?.toUpperCase() ?? '');
|
||||||
@ -272,47 +289,52 @@ export class RdDUtility {
|
|||||||
Handlebars.registerHelper('grammar-un', str => Grammar.articleIndetermine(str));
|
Handlebars.registerHelper('grammar-un', str => Grammar.articleIndetermine(str));
|
||||||
Handlebars.registerHelper('grammar-accord', (genre, ...args) => Grammar.accord(genre, args));
|
Handlebars.registerHelper('grammar-accord', (genre, ...args) => Grammar.accord(genre, args));
|
||||||
|
|
||||||
Handlebars.registerHelper('RDD_CONFIG', path => RDD_CONFIG[path])
|
// math
|
||||||
|
Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1)));
|
||||||
|
Handlebars.registerHelper('repeat', function(n, block) {
|
||||||
|
let accum = '';
|
||||||
|
for(let i = 0; i < n; ++i){
|
||||||
|
accum += block.fn(i)
|
||||||
|
}
|
||||||
|
return accum
|
||||||
|
})
|
||||||
|
|
||||||
|
// tableaux, listes
|
||||||
|
Handlebars.registerHelper('array-includes', (array, value) => array.includes(value));
|
||||||
|
Handlebars.registerHelper('isLastIndex', (index, list) => index + 1 >= list.length);
|
||||||
|
Handlebars.registerHelper('trier', list => list.sort((a, b) => a.name.localeCompare(b.name)));
|
||||||
|
|
||||||
|
// table de résolution
|
||||||
Handlebars.registerHelper('computeResolutionScore', (row, col) => RdDResolutionTable.computePercentage(row, col));
|
Handlebars.registerHelper('computeResolutionScore', (row, col) => RdDResolutionTable.computePercentage(row, col));
|
||||||
Handlebars.registerHelper('computeResolutionChances', (row, col) => RdDResolutionTable.computeChances(row, col));
|
Handlebars.registerHelper('computeResolutionChances', (row, col) => RdDResolutionTable.computeChances(row, col));
|
||||||
Handlebars.registerHelper('buildLigneInventaire', (item, options) => { return new Handlebars.SafeString(RdDUtility.buildLigneInventaire(item, options)); });
|
|
||||||
Handlebars.registerHelper('buildInventaireConteneur', (actorId, itemId, options) => { return new Handlebars.SafeString(RdDUtility.buildInventaireConteneur(actorId, itemId, options)); });
|
|
||||||
Handlebars.registerHelper('buildContenuConteneur', (item, options) => { return new Handlebars.SafeString(RdDUtility.buildContenuConteneur(item, options)); });
|
|
||||||
Handlebars.registerHelper('calculerPrixCommercant', item => item.calculerPrixCommercant());
|
|
||||||
Handlebars.registerHelper('caseTmr-label', coord => TMRUtility.getTMRLabel(coord));
|
|
||||||
Handlebars.registerHelper('caseTmr-type', coord => TMRUtility.getTMRType(coord));
|
|
||||||
Handlebars.registerHelper('typeTmr-name', type => TMRUtility.typeTmrName(type));
|
|
||||||
Handlebars.registerHelper('effetRencontre-name', coord => TMRUtility.typeTmrName(coord));
|
|
||||||
|
|
||||||
|
// gestion des dates et heures
|
||||||
Handlebars.registerHelper('timestamp-imgSigneHeure', (heure) => { return new Handlebars.SafeString(RdDTimestamp.imgSigneHeure(heure)) });
|
Handlebars.registerHelper('timestamp-imgSigneHeure', (heure) => { return new Handlebars.SafeString(RdDTimestamp.imgSigneHeure(heure)) });
|
||||||
Handlebars.registerHelper('timestamp-imgSigne', (heure) => { return new Handlebars.SafeString(RdDTimestamp.imgSigne(heure)) });
|
Handlebars.registerHelper('timestamp-imgSigne', (heure) => { return new Handlebars.SafeString(RdDTimestamp.imgSigne(heure)) });
|
||||||
Handlebars.registerHelper('timestamp-extract', timestamp => new RdDTimestamp(timestamp).toCalendrier());
|
Handlebars.registerHelper('timestamp-extract', timestamp => new RdDTimestamp(timestamp).toCalendrier());
|
||||||
Handlebars.registerHelper('timestamp-formulesDuree', () => RdDTimestamp.formulesDuree());
|
Handlebars.registerHelper('timestamp-formulesDuree', () => RdDTimestamp.formulesDuree());
|
||||||
Handlebars.registerHelper('timestamp-formulesPeriode', () => RdDTimestamp.formulesPeriode());
|
Handlebars.registerHelper('timestamp-formulesPeriode', () => RdDTimestamp.formulesPeriode());
|
||||||
|
|
||||||
|
// informations sur les acteurs
|
||||||
Handlebars.registerHelper('actor-default', (actorType, ...path) => RdDBaseActor.getDefaultValue(actorType, path.slice(0, -1)));
|
Handlebars.registerHelper('actor-default', (actorType, ...path) => RdDBaseActor.getDefaultValue(actorType, path.slice(0, -1)));
|
||||||
|
|
||||||
Handlebars.registerHelper('array-includes', (array, value) => array.includes(value));
|
|
||||||
Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1)));
|
|
||||||
Handlebars.registerHelper('isLastIndex', (index, list) => index + 1 >= list.length);
|
|
||||||
Handlebars.registerHelper('regle-optionnelle', (option) => ReglesOptionnelles.isUsing(option));
|
|
||||||
Handlebars.registerHelper('trier', list => list.sort((a, b) => a.name.localeCompare(b.name)));
|
|
||||||
Handlebars.registerHelper('filtreTriCompetences', competences => RdDItemCompetence.triVisible(competences));
|
Handlebars.registerHelper('filtreTriCompetences', competences => RdDItemCompetence.triVisible(competences));
|
||||||
Handlebars.registerHelper('linkCompendium', (pack, id, name) => RdDUtility.linkCompendium(pack, id, name));
|
|
||||||
Handlebars.registerHelper('uniteQuantite', (itemId, actorId) => RdDUtility.getItem(itemId, actorId)?.getUniteQuantite());
|
|
||||||
Handlebars.registerHelper('isFieldInventaireModifiable', (type, field) => RdDItem.isFieldInventaireModifiable(type, field));
|
|
||||||
Handlebars.registerHelper('rarete-getChamp', (rarete, field) => RdDRaretes.getChamp(rarete, field));
|
|
||||||
|
|
||||||
Handlebars.registerHelper('plusMoins', diff => (diff > 0 ? '+' : '') + Math.round(diff))
|
|
||||||
Handlebars.registerHelper('experienceLog-topic', topic => ExperienceLog.labelTopic(topic));
|
Handlebars.registerHelper('experienceLog-topic', topic => ExperienceLog.labelTopic(topic));
|
||||||
|
|
||||||
// Handle v12 removal of this helper
|
// inventaire et marchands
|
||||||
Handlebars.registerHelper('select', function (selected, options) {
|
Handlebars.registerHelper('buildLigneInventaire', (item, options) => { return new Handlebars.SafeString(RdDUtility.buildLigneInventaire(item, options)); });
|
||||||
const escapedValue = RegExp.escape(Handlebars.escapeExpression(selected));
|
Handlebars.registerHelper('buildInventaireConteneur', (actorId, itemId, options) => { return new Handlebars.SafeString(RdDUtility.buildInventaireConteneur(actorId, itemId, options)); });
|
||||||
const rgx = new RegExp(' value=[\"\']' + escapedValue + '[\"\']');
|
Handlebars.registerHelper('buildContenuConteneur', (item, options) => { return new Handlebars.SafeString(RdDUtility.buildContenuConteneur(item, options)); });
|
||||||
const html = options.fn(this);
|
Handlebars.registerHelper('calculerPrixCommercant', item => item.calculerPrixCommercant());
|
||||||
return html.replace(rgx, "$& selected");
|
Handlebars.registerHelper('uniteQuantite', (itemId, actorId) => RdDUtility.getItem(itemId, actorId)?.getUniteQuantite());
|
||||||
});
|
Handlebars.registerHelper('isFieldInventaireModifiable', (type, field) => RdDItem.isFieldInventaireModifiable(type, field));
|
||||||
|
// Items
|
||||||
|
Handlebars.registerHelper('rarete-getChamp', (rarete, field) => RdDRaretes.getChamp(rarete, field));
|
||||||
|
|
||||||
|
// TMRs
|
||||||
|
Handlebars.registerHelper('caseTmr-label', coord => TMRUtility.getTMRLabel(coord));
|
||||||
|
Handlebars.registerHelper('caseTmr-type', coord => TMRUtility.getTMRType(coord));
|
||||||
|
Handlebars.registerHelper('typeTmr-name', type => TMRUtility.typeTmrName(type));
|
||||||
|
Handlebars.registerHelper('effetRencontre-name', coord => TMRUtility.typeTmrName(coord));
|
||||||
|
|
||||||
return loadTemplates(templatePaths);
|
return loadTemplates(templatePaths);
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ export class CarteTmr extends Draconique {
|
|||||||
name: 'Carte des TMR',
|
name: 'Carte des TMR',
|
||||||
hint: "Choix de l'image de la carte des TMR",
|
hint: "Choix de l'image de la carte des TMR",
|
||||||
scope: "client",
|
scope: "client",
|
||||||
|
requiresReload: true,
|
||||||
config: true,
|
config: true,
|
||||||
choices: {
|
choices: {
|
||||||
[TMR_V3_COULEUR]: "TMR Scriptarium v3 couleur",
|
[TMR_V3_COULEUR]: "TMR Scriptarium v3 couleur",
|
||||||
|
@ -184,12 +184,9 @@ export class PixiTMR {
|
|||||||
const coordTMR = TMRUtility.oddqToCoordTMR(oddq);
|
const coordTMR = TMRUtility.oddqToCoordTMR(oddq);
|
||||||
const tmr = TMRUtility.getTMR(coordTMR)
|
const tmr = TMRUtility.getTMR(coordTMR)
|
||||||
if (tmr) {
|
if (tmr) {
|
||||||
const tmrTooltip = `${coordTMR}: ${TMRUtility.getTMRLabel(coordTMR)}`;
|
return this.tmrDialog.getTokensDetails(coordTMR)
|
||||||
const tokenTooltips = this.tmrDialog.allTokens
|
|
||||||
.filter(token => token.coordTMR() == coordTMR)
|
|
||||||
.map(token => token.tooltip);
|
|
||||||
return [tmrTooltip, ...tokenTooltips].reduce(Misc.joining('\n'))
|
|
||||||
}
|
}
|
||||||
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
computeEventOddq(event) {
|
computeEventOddq(event) {
|
||||||
|
@ -257,47 +257,8 @@ system:
|
|||||||
dévore.</p>
|
dévore.</p>
|
||||||
|
|
||||||
<h1>Venin</h1>
|
<h1>Venin</h1>
|
||||||
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.maladies-et-poisons.Item.v7yZidE9mObKO566]{Venin d'Araflate}</p>
|
||||||
<table style="width: 65.039%; height: 65px;" border="1">
|
<p></p>
|
||||||
|
|
||||||
<tbody>
|
|
||||||
|
|
||||||
<tr style="height: 16px;">
|
|
||||||
|
|
||||||
<td style="width: 30.8567%; height: 16px;">Malignité</td>
|
|
||||||
|
|
||||||
<td style="width: 68.3263%; height: 16px;">6</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr style="height: 16px;">
|
|
||||||
|
|
||||||
<td style="width: 30.8567%; height: 16px;">Périodicité</td>
|
|
||||||
|
|
||||||
<td style="width: 68.3263%; height: 16px;">1 round</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr style="height: 16px;">
|
|
||||||
|
|
||||||
<td style="width: 30.8567%; height: 16px;">Dommages</td>
|
|
||||||
|
|
||||||
<td style="width: 68.3263%; height: 16px;">-1d6 points d'endurance</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr style="height: 17px;">
|
|
||||||
|
|
||||||
<td style="width: 30.8567%; height: 17px;">Antidotes</td>
|
|
||||||
|
|
||||||
<td style="width: 68.3263%; height: 17px;">-3 \ Liqueur de Bagdol +12, Lait
|
|
||||||
de lune +6</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</tbody>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
race: ''
|
race: ''
|
||||||
notesmj: ''
|
notesmj: ''
|
||||||
ownership:
|
ownership:
|
||||||
|
@ -227,47 +227,8 @@ system:
|
|||||||
que vous nous faites un peu peur ?</p>
|
que vous nous faites un peu peur ?</p>
|
||||||
|
|
||||||
<h1>Venin</h1>
|
<h1>Venin</h1>
|
||||||
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.maladies-et-poisons.Item.cFMUtU6LZG0mKeDl]{Venin de chrasme}</p>
|
||||||
<table style="width: 399px; height: 65px;" border="1">
|
<p></p>
|
||||||
|
|
||||||
<tbody>
|
|
||||||
|
|
||||||
<tr style="height: 16px;">
|
|
||||||
|
|
||||||
<td style="width: 121px; height: 16px;">Malignité</td>
|
|
||||||
|
|
||||||
<td style="width: 274px; height: 16px;">3</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr style="height: 16px;">
|
|
||||||
|
|
||||||
<td style="width: 121px; height: 16px;">Périodicité</td>
|
|
||||||
|
|
||||||
<td style="width: 274px; height: 16px;">1 miute</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr style="height: 16px;">
|
|
||||||
|
|
||||||
<td style="width: 121px; height: 16px;">Dommages</td>
|
|
||||||
|
|
||||||
<td style="width: 274px; height: 16px;">-1 point de vie</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr style="height: 17px;">
|
|
||||||
|
|
||||||
<td style="width: 121px; height: 17px;">Antidotes</td>
|
|
||||||
|
|
||||||
<td style="width: 274px; height: 17px;">-2 \ Liqueur de Bagdol +16, Teinture
|
|
||||||
d'Erozonne +10</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</tbody>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
race: ''
|
race: ''
|
||||||
notesmj: ''
|
notesmj: ''
|
||||||
ownership:
|
ownership:
|
||||||
|
@ -257,56 +257,7 @@ system:
|
|||||||
|
|
||||||
<h1 style="box-sizing: border-box; user-select: text; color: #191813;
|
<h1 style="box-sizing: border-box; user-select: text; color: #191813;
|
||||||
font-family: GoudyAcc, sans-serif;">Venin</h1>
|
font-family: GoudyAcc, sans-serif;">Venin</h1>
|
||||||
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.maladies-et-poisons.Item.IF19EUvrY1HL87lr]{Venin paralysant de goule}</p>
|
||||||
<table style="box-sizing: border-box; user-select: text; width: 395px;
|
|
||||||
color: #191813; font-family: GoudyAcc, sans-serif; height: 65px;"
|
|
||||||
border="1">
|
|
||||||
|
|
||||||
<tbody style="box-sizing: border-box; user-select: text;">
|
|
||||||
|
|
||||||
<tr style="box-sizing: border-box; user-select: text; height: 16px;">
|
|
||||||
|
|
||||||
<td style="box-sizing: border-box; user-select: text; width: 122px; height:
|
|
||||||
16px;">Malignité</td>
|
|
||||||
|
|
||||||
<td style="box-sizing: border-box; user-select: text; width: 272px; height:
|
|
||||||
16px;">6</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr style="box-sizing: border-box; user-select: text; height: 16px;">
|
|
||||||
|
|
||||||
<td style="box-sizing: border-box; user-select: text; width: 122px; height:
|
|
||||||
16px;">Périodicité</td>
|
|
||||||
|
|
||||||
<td style="box-sizing: border-box; user-select: text; width: 272px; height:
|
|
||||||
16px;">1 round</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr style="box-sizing: border-box; user-select: text; height: 16px;">
|
|
||||||
|
|
||||||
<td style="box-sizing: border-box; user-select: text; width: 122px; height:
|
|
||||||
16px;">Dommages</td>
|
|
||||||
|
|
||||||
<td style="box-sizing: border-box; user-select: text; width: 272px; height:
|
|
||||||
16px;">1 ligne de fatigue</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr style="box-sizing: border-box; user-select: text; height: 17px;">
|
|
||||||
|
|
||||||
<td style="box-sizing: border-box; user-select: text; width: 122px; height:
|
|
||||||
17px;">Antidotes</td>
|
|
||||||
|
|
||||||
<td style="box-sizing: border-box; user-select: text; width: 272px; height:
|
|
||||||
17px;">-4 \ Floume-dhu +16</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</tbody>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<p>La paralysie intervient quand toutes les lignes de fatigue sont pleines
|
<p>La paralysie intervient quand toutes les lignes de fatigue sont pleines
|
||||||
et dure 6 heures.</p>
|
et dure 6 heures.</p>
|
||||||
|
@ -219,50 +219,8 @@ system:
|
|||||||
attaque dès qu’il est surpris ou se croit en danger.</p>
|
attaque dès qu’il est surpris ou se croit en danger.</p>
|
||||||
|
|
||||||
<h1>Venin</h1>
|
<h1>Venin</h1>
|
||||||
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.maladies-et-poisons.Item.iwlN0bNJ5XNNfjgj]{Venin de scologriffe}</p>
|
||||||
<p>Sensation aiguë de déséquilibre. Jouer VOLONTÉ
|
<p></p>
|
||||||
à -3. En cas d’échec, on chute sans parvenir à se
|
|
||||||
relever.</p>
|
|
||||||
|
|
||||||
<table style="width: 59.506%;" border="1">
|
|
||||||
|
|
||||||
<tbody>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td style="width: 21.6667%;">Malignité</td>
|
|
||||||
|
|
||||||
<td style="width: 77.5%;">3</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td style="width: 21.6667%;">Périodicité</td>
|
|
||||||
|
|
||||||
<td style="width: 77.5%;">1 minute</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td style="width: 21.6667%;">Dommages</td>
|
|
||||||
|
|
||||||
<td style="width: 77.5%;">-1 point de vie</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td style="width: 21.6667%;">Antidotes</td>
|
|
||||||
|
|
||||||
<td style="width: 77.5%;">-3 \ Liqueur de Bagdol +16, Topazoïne +8</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</tbody>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
race: ''
|
race: ''
|
||||||
notesmj: ''
|
notesmj: ''
|
||||||
ownership:
|
ownership:
|
||||||
|
@ -215,47 +215,8 @@ system:
|
|||||||
est mortel.</p>
|
est mortel.</p>
|
||||||
|
|
||||||
<h1>Venin</h1>
|
<h1>Venin</h1>
|
||||||
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.maladies-et-poisons.Item.lUeNPc0ECKqHglbG]{Venin de vipère jaune}</p>
|
||||||
<table style="width: 61.5572%;" border="1">
|
<p></p>
|
||||||
|
|
||||||
<tbody>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td style="width: 21.1221%;">Malignité</td>
|
|
||||||
|
|
||||||
<td style="width: 78.0528%;">2</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td style="width: 21.1221%;">Périodicité</td>
|
|
||||||
|
|
||||||
<td style="width: 78.0528%;">6 rounds</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td style="width: 21.1221%;">Dommages</td>
|
|
||||||
|
|
||||||
<td style="width: 78.0528%;">-1 point de vie</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td style="width: 21.1221%;">Antidotes</td>
|
|
||||||
|
|
||||||
<td style="width: 78.0528%;">-3 \ Liqueur de Bagdol +14, Topazoïne
|
|
||||||
+10</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</tbody>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
race: ''
|
race: ''
|
||||||
notesmj: ''
|
notesmj: ''
|
||||||
ownership:
|
ownership:
|
||||||
|
@ -3,147 +3,7 @@ name: Coursier de Psark
|
|||||||
type: creature
|
type: creature
|
||||||
sort: 100001
|
sort: 100001
|
||||||
img: systems/foundryvtt-reve-de-dragon/icons/invocations/coursier-psark.webp
|
img: systems/foundryvtt-reve-de-dragon/icons/invocations/coursier-psark.webp
|
||||||
items:
|
items: []
|
||||||
- _id: shsUV8UpU18c0RJK
|
|
||||||
name: Course
|
|
||||||
type: competencecreature
|
|
||||||
sort: 500000
|
|
||||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_course.webp
|
|
||||||
effects: []
|
|
||||||
system:
|
|
||||||
description: ''
|
|
||||||
descriptionmj: ''
|
|
||||||
carac_value: 0
|
|
||||||
niveau: 0
|
|
||||||
default_diffLibre: 0
|
|
||||||
categorie: generale
|
|
||||||
categorie_parade: ''
|
|
||||||
iscombat: false
|
|
||||||
isnaturelle: true
|
|
||||||
ispossession: false
|
|
||||||
dommages: 0
|
|
||||||
mortalite: mortel
|
|
||||||
isparade: false
|
|
||||||
folder: null
|
|
||||||
ownership:
|
|
||||||
default: 0
|
|
||||||
_stats:
|
|
||||||
systemId: foundryvtt-reve-de-dragon
|
|
||||||
systemVersion: 12.0.22
|
|
||||||
coreVersion: '12.331'
|
|
||||||
_key: '!actors.items!I0Ogzl5rUmFcMhyH.shsUV8UpU18c0RJK'
|
|
||||||
- _id: CYpxxf1uTa78NWR9
|
|
||||||
name: Esquive
|
|
||||||
type: competencecreature
|
|
||||||
sort: 1000000
|
|
||||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_esquive.webp
|
|
||||||
effects: []
|
|
||||||
system:
|
|
||||||
description: ''
|
|
||||||
descriptionmj: ''
|
|
||||||
carac_value: 0
|
|
||||||
niveau: 0
|
|
||||||
default_diffLibre: 0
|
|
||||||
categorie: ''
|
|
||||||
categorie_parade: ''
|
|
||||||
iscombat: false
|
|
||||||
isnaturelle: true
|
|
||||||
ispossession: false
|
|
||||||
dommages: 0
|
|
||||||
mortalite: mortel
|
|
||||||
isparade: false
|
|
||||||
folder: null
|
|
||||||
ownership:
|
|
||||||
default: 0
|
|
||||||
_stats:
|
|
||||||
systemId: foundryvtt-reve-de-dragon
|
|
||||||
systemVersion: 12.0.22
|
|
||||||
coreVersion: '12.331'
|
|
||||||
_key: '!actors.items!I0Ogzl5rUmFcMhyH.CYpxxf1uTa78NWR9'
|
|
||||||
- _id: 0zRL8bOpCXNQnIR4
|
|
||||||
name: Ruade
|
|
||||||
type: competencecreature
|
|
||||||
sort: 2200000
|
|
||||||
img: systems/foundryvtt-reve-de-dragon/icons/compcreature-pietinement.webp
|
|
||||||
effects: []
|
|
||||||
system:
|
|
||||||
description: null
|
|
||||||
descriptionmj: ''
|
|
||||||
carac_value: 0
|
|
||||||
niveau: 0
|
|
||||||
default_diffLibre: 0
|
|
||||||
categorie: ''
|
|
||||||
categorie_parade: ''
|
|
||||||
iscombat: true
|
|
||||||
isnaturelle: true
|
|
||||||
ispossession: false
|
|
||||||
dommages: 4
|
|
||||||
mortalite: mortel
|
|
||||||
isparade: false
|
|
||||||
folder: null
|
|
||||||
ownership:
|
|
||||||
default: 0
|
|
||||||
_stats:
|
|
||||||
systemId: foundryvtt-reve-de-dragon
|
|
||||||
systemVersion: 12.0.22
|
|
||||||
coreVersion: '12.331'
|
|
||||||
_key: '!actors.items!I0Ogzl5rUmFcMhyH.0zRL8bOpCXNQnIR4'
|
|
||||||
- _id: yBUVTjTXYfwvzusb
|
|
||||||
name: Saut
|
|
||||||
type: competencecreature
|
|
||||||
sort: 2300000
|
|
||||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_saut.webp
|
|
||||||
effects: []
|
|
||||||
system:
|
|
||||||
description: ''
|
|
||||||
descriptionmj: ''
|
|
||||||
carac_value: 0
|
|
||||||
niveau: 0
|
|
||||||
default_diffLibre: 0
|
|
||||||
categorie: ''
|
|
||||||
categorie_parade: ''
|
|
||||||
iscombat: false
|
|
||||||
isnaturelle: true
|
|
||||||
ispossession: false
|
|
||||||
dommages: 0
|
|
||||||
mortalite: mortel
|
|
||||||
isparade: false
|
|
||||||
folder: null
|
|
||||||
ownership:
|
|
||||||
default: 0
|
|
||||||
_stats:
|
|
||||||
systemId: foundryvtt-reve-de-dragon
|
|
||||||
systemVersion: 12.0.22
|
|
||||||
coreVersion: '12.331'
|
|
||||||
_key: '!actors.items!I0Ogzl5rUmFcMhyH.yBUVTjTXYfwvzusb'
|
|
||||||
- _id: lzEdMrKXbOYrWG5S
|
|
||||||
name: Vigilance
|
|
||||||
type: competencecreature
|
|
||||||
sort: 2600000
|
|
||||||
img: systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp
|
|
||||||
effects: []
|
|
||||||
system:
|
|
||||||
description: ''
|
|
||||||
descriptionmj: ''
|
|
||||||
carac_value: 0
|
|
||||||
niveau: 0
|
|
||||||
default_diffLibre: 0
|
|
||||||
categorie: ''
|
|
||||||
categorie_parade: ''
|
|
||||||
iscombat: false
|
|
||||||
isnaturelle: true
|
|
||||||
ispossession: false
|
|
||||||
dommages: 0
|
|
||||||
mortalite: mortel
|
|
||||||
isparade: false
|
|
||||||
folder: null
|
|
||||||
ownership:
|
|
||||||
default: 0
|
|
||||||
_stats:
|
|
||||||
systemId: foundryvtt-reve-de-dragon
|
|
||||||
systemVersion: 12.0.22
|
|
||||||
coreVersion: '12.331'
|
|
||||||
_key: '!actors.items!I0Ogzl5rUmFcMhyH.lzEdMrKXbOYrWG5S'
|
|
||||||
effects: []
|
effects: []
|
||||||
system:
|
system:
|
||||||
carac:
|
carac:
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -6,7 +6,7 @@ _id: v7yZidE9mObKO566
|
|||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>Venin de l'araflate. Sa morsure inflige un venin anesthésiant,
|
<p>Venin de l'araflate. Sa morsure inflige un venin anesthésiant,
|
||||||
inoculé sur toute blessure sauf contusion\ éraflure.</p>
|
inoculé sur toute blessure sauf contusion/éraflure.</p>
|
||||||
|
|
||||||
<p>Chaque perte d’endurance s’accompagne de la fatigue
|
<p>Chaque perte d’endurance s’accompagne de la fatigue
|
||||||
équivalente. À zéro d’endurance, la victime est
|
équivalente. À zéro d’endurance, la victime est
|
||||||
|
@ -4,7 +4,7 @@ img: systems/foundryvtt-reve-de-dragon/icons/maladies_venins/venin.webp
|
|||||||
effects: []
|
effects: []
|
||||||
_id: cFMUtU6LZG0mKeDl
|
_id: cFMUtU6LZG0mKeDl
|
||||||
system:
|
system:
|
||||||
description: <p>Venin du chrasme. </p>
|
description: ''
|
||||||
descriptionmj: ''
|
descriptionmj: ''
|
||||||
temporel:
|
temporel:
|
||||||
debut:
|
debut:
|
||||||
|
@ -5,10 +5,8 @@ effects: []
|
|||||||
_id: iwlN0bNJ5XNNfjgj
|
_id: iwlN0bNJ5XNNfjgj
|
||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>Venin du scologriffe. Il provoque une sensation aiguë de
|
<p>Sensation aiguë de déséquilibre.
|
||||||
déséquilibre.</p>
|
Jouer VOLONTÉ à -3. En cas d’échec, on chute
|
||||||
|
|
||||||
<p>Jouer VOLONTÉ à -3. En cas d’échec, on chute
|
|
||||||
sans parvenir à se relever.</p>
|
sans parvenir à se relever.</p>
|
||||||
descriptionmj: ''
|
descriptionmj: ''
|
||||||
temporel:
|
temporel:
|
||||||
@ -26,7 +24,7 @@ system:
|
|||||||
nombre: 1
|
nombre: 1
|
||||||
remedesconnus: false
|
remedesconnus: false
|
||||||
remedes: '-3 \ Liqueur de Bagdol +16 Topazoïne +8'
|
remedes: '-3 \ Liqueur de Bagdol +16 Topazoïne +8'
|
||||||
dommages: 1 pt de Vie
|
dommages: 1 pt de Vie, sensation de déséquilibre
|
||||||
periodicite: 1 minute
|
periodicite: 1 minute
|
||||||
ownership:
|
ownership:
|
||||||
default: 0
|
default: 0
|
||||||
|
@ -4,7 +4,7 @@ img: systems/foundryvtt-reve-de-dragon/icons/maladies_venins/venin.webp
|
|||||||
effects: []
|
effects: []
|
||||||
_id: lUeNPc0ECKqHglbG
|
_id: lUeNPc0ECKqHglbG
|
||||||
system:
|
system:
|
||||||
description: <p>Venin de la vipère jaune. Il provoque des spasmes musculaires.</p>
|
description: ''
|
||||||
descriptionmj: ''
|
descriptionmj: ''
|
||||||
temporel:
|
temporel:
|
||||||
debut:
|
debut:
|
||||||
@ -21,7 +21,7 @@ system:
|
|||||||
nombre: 6
|
nombre: 6
|
||||||
remedesconnus: false
|
remedesconnus: false
|
||||||
remedes: '-3\ Liqueur de Bagdol +14, Topazoïne +10'
|
remedes: '-3\ Liqueur de Bagdol +14, Topazoïne +10'
|
||||||
dommages: 1 pt de Vie
|
dommages: 1 pt de Vie, spasmes musculaires
|
||||||
periodicite: 6 rounds
|
periodicite: 6 rounds
|
||||||
ownership:
|
ownership:
|
||||||
default: 0
|
default: 0
|
||||||
|
@ -6,9 +6,8 @@ effects: []
|
|||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>Ce sort ne peut être recherché/synthétisé qu’en ayant compris le
|
<p>Ce sort ne peut être recherché/synthétisé qu’en ayant compris le
|
||||||
@Item[u2izNaMF2bnwHAwj]{Le Paradoxe de l’Immobilité Rapide} tel qu’énoncé
|
@UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.aFTL3ynBabEUHdP3]{Le Paradoxe de l’Immobilité Rapide}
|
||||||
par Wanister de Bravo.</p>
|
tel qu’énoncé par Wanister de Bravo.</p>
|
||||||
|
|
||||||
<p>Ce sort permet de monter en TMR et d’y demeurer tout en n’étant qu’à demi
|
<p>Ce sort permet de monter en TMR et d’y demeurer tout en n’étant qu’à demi
|
||||||
libre de ses mouvements : à cheval, secoué dans une voiture, en bateau, etc.
|
libre de ses mouvements : à cheval, secoué dans une voiture, en bateau, etc.
|
||||||
Il est également possible, sous l’effet de Concentration, de monter en TMR
|
Il est également possible, sous l’effet de Concentration, de monter en TMR
|
||||||
|
@ -5,10 +5,11 @@ img: systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp
|
|||||||
effects: []
|
effects: []
|
||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.GRKYbbNDIHdzVNaj.JournalEntryPage.PiKGAswCiDPtmAol]{Note
|
||||||
créatures}</p>
|
sur les invocations de créatures}</p>
|
||||||
|
|
||||||
<p>Les coursiers de Psark apparaissent toujours au nombre de sept. Ce sont
|
<p>Les @UUID[Compendium.foundryvtt-reve-de-dragon.invocations.Actor.I0Ogzl5rUmFcMhyH]{coursiers de Psark}
|
||||||
|
apparaissent toujours au nombre de sept. Ce sont
|
||||||
de grands chevaux blancs à crinière blond doré, se présentant sans selle ni
|
de grands chevaux blancs à crinière blond doré, se présentant sans selle ni
|
||||||
bride. Ils n’ont pas de caractéristiques, mais leur utilisation obéit aux
|
bride. Ils n’ont pas de caractéristiques, mais leur utilisation obéit aux
|
||||||
règles suivantes :</p>
|
règles suivantes :</p>
|
||||||
@ -61,8 +62,8 @@ system:
|
|||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.3wVxF2IRf3c1lOxC.JournalEntryPage.GLzfQkCfkbnxBX8A]{Communication
|
||||||
invoquées}</p>
|
avec les créatures invoquées}</p>
|
||||||
descriptionmj: ''
|
descriptionmj: ''
|
||||||
draconic: Voie d'Hypnos
|
draconic: Voie d'Hypnos
|
||||||
duree: Tâche ou fin HN
|
duree: Tâche ou fin HN
|
||||||
|
@ -6,7 +6,7 @@ effects: []
|
|||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>Ce sort ne peut être recherché/synthétisé qu’en ayant compris le sens
|
<p>Ce sort ne peut être recherché/synthétisé qu’en ayant compris le sens
|
||||||
caché du @Item[qdyYSktETI8mKY6Z]{Premier Chant Dérisoire} de Yester
|
caché du @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.3ya2og0wNFKHZs3Q]{Premier Chant Dérisoire} de Yester
|
||||||
l’Ancien</p>
|
l’Ancien</p>
|
||||||
|
|
||||||
<p>Cette illusion visuelle donne à la cible un air comique, drôle,
|
<p>Cette illusion visuelle donne à la cible un air comique, drôle,
|
||||||
|
@ -5,10 +5,11 @@ img: systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp
|
|||||||
effects: []
|
effects: []
|
||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.GRKYbbNDIHdzVNaj.JournalEntryPage.PiKGAswCiDPtmAol]{Note
|
||||||
créatures}</p>
|
sur les invocations de créatures}</p>
|
||||||
|
|
||||||
<p>Le Guerrier Sorde a l’apparence d’un humanoïde entièrement revêtu d’une
|
<p>Le @UUID[Compendium.foundryvtt-reve-de-dragon.invocations.Actor.xGtM3z3KM6N6lpd5]{Guerrier Sorde}
|
||||||
|
a l’apparence d’un humanoïde entièrement revêtu d’une
|
||||||
armure de plaques, visière du heaume toujours baissée, dissimulant son
|
armure de plaques, visière du heaume toujours baissée, dissimulant son
|
||||||
visage. Il est armé d’une épée sorde, d’un bouclier moyen et d’une dague. La
|
visage. Il est armé d’une épée sorde, d’un bouclier moyen et d’une dague. La
|
||||||
seule tâche que l’on puisse lui demander est de faire usage de ses armes.
|
seule tâche que l’on puisse lui demander est de faire usage de ses armes.
|
||||||
@ -29,8 +30,8 @@ system:
|
|||||||
suggestions et illusions d’Hypnos, avec un JR standard r-8, ainsi que par
|
suggestions et illusions d’Hypnos, avec un JR standard r-8, ainsi que par
|
||||||
les sorts individuels de Thananatos.</p>
|
les sorts individuels de Thananatos.</p>
|
||||||
|
|
||||||
<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.3wVxF2IRf3c1lOxC.JournalEntryPage.GLzfQkCfkbnxBX8A]{Communication
|
||||||
invoquées}</p>
|
avec les créatures invoquées}</p>
|
||||||
descriptionmj: ''
|
descriptionmj: ''
|
||||||
draconic: Voie d'Hypnos
|
draconic: Voie d'Hypnos
|
||||||
duree: Tâche
|
duree: Tâche
|
||||||
|
@ -5,10 +5,11 @@ img: systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp
|
|||||||
effects: []
|
effects: []
|
||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.GRKYbbNDIHdzVNaj.JournalEntryPage.PiKGAswCiDPtmAol]{Note
|
||||||
créatures}</p>
|
sur les invocations de créatures}</p>
|
||||||
|
|
||||||
<p>Le Guerrier Turme a l’apparence d’un Humain vêtu de cuir souple, armé
|
<p>Le @UUID[Compendium.foundryvtt-reve-de-dragon.invocations.Actor.z87rV5CJ3inc6ZPc]{Guerrier Turme}
|
||||||
|
a l’apparence d’un Humain vêtu de cuir souple, armé
|
||||||
d’une unique dague, et porteur d’un cor. Ses traits physiques sont sans
|
d’une unique dague, et porteur d’un cor. Ses traits physiques sont sans
|
||||||
importance, blond ou brun, laid ou beau, homme ou femme. La seule tâche
|
importance, blond ou brun, laid ou beau, homme ou femme. La seule tâche
|
||||||
qu’il puisse accomplir est de veiller sur le sommeil du haut-rêvant. Il n’y
|
qu’il puisse accomplir est de veiller sur le sommeil du haut-rêvant. Il n’y
|
||||||
@ -24,8 +25,8 @@ system:
|
|||||||
Guerriers Turmes ont tous les mêmes caractéristiques et sont affectés par
|
Guerriers Turmes ont tous les mêmes caractéristiques et sont affectés par
|
||||||
les sorts comme les Guerriers Sordes.</p>
|
les sorts comme les Guerriers Sordes.</p>
|
||||||
|
|
||||||
<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.3wVxF2IRf3c1lOxC.JournalEntryPage.GLzfQkCfkbnxBX8A]{Communication
|
||||||
invoquées}</p>
|
avec les créatures invoquées}</p>
|
||||||
descriptionmj: ''
|
descriptionmj: ''
|
||||||
draconic: Voie d'Hypnos
|
draconic: Voie d'Hypnos
|
||||||
duree: Tâche
|
duree: Tâche
|
||||||
|
@ -18,7 +18,7 @@ system:
|
|||||||
|
|
||||||
<p>Ce rituel permet d’entendre à distance. Il doit être ciblé sur un
|
<p>Ce rituel permet d’entendre à distance. Il doit être ciblé sur un
|
||||||
instrument sonore (harpe, luth, gong, cloche, etc.) faute de quoi l’on
|
instrument sonore (harpe, luth, gong, cloche, etc.) faute de quoi l’on
|
||||||
aboutit à un cas de @JournalEntry[eANDHKJXMPmPNJ2F]{Magie impossible}. Lors
|
aboutit à un cas de @UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.erO7AICiN1LtRyFg]{Magie impossible}. Lors
|
||||||
du lancer, le rituel doit être paramétré sur une personne précise
|
du lancer, le rituel doit être paramétré sur une personne précise
|
||||||
(humanoïde) ou un lieu architectural précis (salle, couloir, perron,
|
(humanoïde) ou un lieu architectural précis (salle, couloir, perron,
|
||||||
escalier, balcon, etc.). Les éléments naturels du paysage (rochers, arbres,
|
escalier, balcon, etc.). Les éléments naturels du paysage (rochers, arbres,
|
||||||
|
@ -13,7 +13,7 @@ system:
|
|||||||
l’information n’est plus transmise au cerveau. Toutefois, dès qu’un conflit
|
l’information n’est plus transmise au cerveau. Toutefois, dès qu’un conflit
|
||||||
survient avec l’un des quatre autres sens, une brume limbaire apparaît à la
|
survient avec l’un des quatre autres sens, une brume limbaire apparaît à la
|
||||||
place de la cible, affectant grossièrement la forme de cette dernière (voir
|
place de la cible, affectant grossièrement la forme de cette dernière (voir
|
||||||
@JournalEntry[9bvrfDaudPqvQZPY]{Conflit de sens}). Le sort n’affecte
|
@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.ZmMoOtUdgjMd4cNs]{Conflit de sens}). Le sort n’affecte
|
||||||
rigoureusement que la cible dans sa catégorie. Lancé sur un humanoïde, il
|
rigoureusement que la cible dans sa catégorie. Lancé sur un humanoïde, il
|
||||||
rend son corps invisible, mais pas son équipement. Pour bénéficier d’une
|
rend son corps invisible, mais pas son équipement. Pour bénéficier d’une
|
||||||
réelle invisibilité, un humanoïde doit être intégralement nu, ou bien
|
réelle invisibilité, un humanoïde doit être intégralement nu, ou bien
|
||||||
|
@ -17,9 +17,11 @@ system:
|
|||||||
points de rêve sont tout de même dépensés.</p>
|
points de rêve sont tout de même dépensés.</p>
|
||||||
|
|
||||||
<p>La perfection de ce rituel opère la synthèse de
|
<p>La perfection de ce rituel opère la synthèse de
|
||||||
@Item[Ew5JzQ2lzcpGoF11]{Miroir d'Hypnos}, @Item[M99MFM5GalPJxIdW]{Harpe
|
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.8qdOVBr3S7AhRsJw]{Miroir d'Hypnos},
|
||||||
d'Hypnos}, @Item[phT9NLxLGFQp5CSI]{Invoquer sa voix}
|
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.DvP1kqAtGpr5Kux2]{Harpe d'Hypnos},
|
||||||
et@Item[vygR045EwEOsNqJl]{Invoquer son image}. Paramétrage et ciblage
|
@UUID[phT9Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.1PskCeKgFa9XiKoS]{Invoquer sa voix} et
|
||||||
|
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.cghxHRstw7cXLEm4]{Invoquer son image}.
|
||||||
|
Paramétrage et ciblage
|
||||||
obéissent aux mêmes conditions et restrictions que Miroir d’Hypnos, avec
|
obéissent aux mêmes conditions et restrictions que Miroir d’Hypnos, avec
|
||||||
magie impossible en cas de ciblage ailleurs que sur un miroir. Dès que les
|
magie impossible en cas de ciblage ailleurs que sur un miroir. Dès que les
|
||||||
formes y bougent et que l’état hypnotique commence, le haut-rêvant voit la
|
formes y bougent et que l’état hypnotique commence, le haut-rêvant voit la
|
||||||
|
@ -16,8 +16,9 @@ system:
|
|||||||
celle-ci est morte ou a changé de rêve, aucun effet ne se produit, mais les
|
celle-ci est morte ou a changé de rêve, aucun effet ne se produit, mais les
|
||||||
points de rêve sont tout de même dépensés.</p>
|
points de rêve sont tout de même dépensés.</p>
|
||||||
|
|
||||||
<p>Ce rituel est comme le négatif de @Item[Ew5JzQ2lzcpGoF11]{Miroir
|
<p>Ce rituel est comme le négatif de
|
||||||
d'Hypnos}. Les conditions de ciblage et de paramétrage en sont exactement
|
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.8qdOVBr3S7AhRsJw]{Miroir d'Hypnos}.
|
||||||
|
Les conditions de ciblage et de paramétrage en sont exactement
|
||||||
les mêmes. Lorsqu’un mouvement apparaît au centre du miroir, provoquant
|
les mêmes. Lorsqu’un mouvement apparaît au centre du miroir, provoquant
|
||||||
l’état hypnotique, le haut-rêvant peut commencer à effectuer des gestes, des
|
l’état hypnotique, le haut-rêvant peut commencer à effectuer des gestes, des
|
||||||
mimiques, ou montrer ostensiblement un objet qu’il tient sur lui, mais sans
|
mimiques, ou montrer ostensiblement un objet qu’il tient sur lui, mais sans
|
||||||
|
@ -5,10 +5,11 @@ img: systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp
|
|||||||
effects: []
|
effects: []
|
||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.GRKYbbNDIHdzVNaj.JournalEntryPage.PiKGAswCiDPtmAol]{Note
|
||||||
créatures}</p>
|
sur les invocations de créatures}</p>
|
||||||
|
|
||||||
<p>Le Kanaillou est un petit être pouvant se présenter sous de multiples
|
<p>Le @UUID[Compendium.foundryvtt-reve-de-dragon.invocations.Actor.I8Q3Aj4ZUrsU4yBg]{Kanaillou}
|
||||||
|
est un petit être pouvant se présenter sous de multiples
|
||||||
apparences : humanoïde masculin ou féminin, créature d’apparence bizarre et
|
apparences : humanoïde masculin ou féminin, créature d’apparence bizarre et
|
||||||
fantasque. Cette apparence est chaque fois laissée aux soins du gardien des
|
fantasque. Cette apparence est chaque fois laissée aux soins du gardien des
|
||||||
rêves et n’a aucune importance réelle. Le Kanaillou est extrêmement
|
rêves et n’a aucune importance réelle. Le Kanaillou est extrêmement
|
||||||
@ -46,8 +47,8 @@ system:
|
|||||||
gratuit. Ce n’est pas pour rien que cette invocation est plus facile que les
|
gratuit. Ce n’est pas pour rien que cette invocation est plus facile que les
|
||||||
autres : la véritable difficulté commence une fois qu’elle est lancée.</p>
|
autres : la véritable difficulté commence une fois qu’elle est lancée.</p>
|
||||||
|
|
||||||
<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.3wVxF2IRf3c1lOxC.JournalEntryPage.GLzfQkCfkbnxBX8A]{Communication
|
||||||
invoquées}</p>
|
avec les créatures invoquées}</p>
|
||||||
descriptionmj: ''
|
descriptionmj: ''
|
||||||
draconic: Voie d'Hypnos
|
draconic: Voie d'Hypnos
|
||||||
duree: Tâche
|
duree: Tâche
|
||||||
|
@ -10,8 +10,9 @@ system:
|
|||||||
aliments et aux boissons. Par définition, la catégorie est toujours la même
|
aliments et aux boissons. Par définition, la catégorie est toujours la même
|
||||||
: objet en objet. L’intensité de la saveur est celle de la cible. Comme pour
|
: objet en objet. L’intensité de la saveur est celle de la cible. Comme pour
|
||||||
tous les sorts d’illusions sensorielles, la saveur illusoire ne peut être
|
tous les sorts d’illusions sensorielles, la saveur illusoire ne peut être
|
||||||
qu’une saveur connue du haut-rêvant. Couplé à @Item[dEs7qg5UsqpQxok6]{Narine
|
qu’une saveur connue du haut-rêvant. Couplé à @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.nNh8N9nF8m6zLtrt]{Narine
|
||||||
d'Hypnos} et à @Item[skPIvFb5tRRPHDGU]{Transfiguration}, ce sort peut
|
d'Hypnos} et à @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.ktFI49xqZ0mGfTzt]{Transfiguration},
|
||||||
|
ce sort peut
|
||||||
permettre des ignominies gastronomiques : que pensez- vous de ce vin à la
|
permettre des ignominies gastronomiques : que pensez- vous de ce vin à la
|
||||||
robe de rubis, au savoureux bouquet de framboise, et qui vous roule sur la
|
robe de rubis, au savoureux bouquet de framboise, et qui vous roule sur la
|
||||||
langue comme du velours ?... Illusion de bout en bout, ce n’est que de l’eau
|
langue comme du velours ?... Illusion de bout en bout, ce n’est que de l’eau
|
||||||
|
@ -5,8 +5,8 @@ img: systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp
|
|||||||
effects: []
|
effects: []
|
||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.GRKYbbNDIHdzVNaj.JournalEntryPage.PiKGAswCiDPtmAol]{Note
|
||||||
créatures}</p>
|
sur les invocations de créatures}</p>
|
||||||
|
|
||||||
<p>Trois marmitons apparaissent, chargés d’un panier contenant nappe et
|
<p>Trois marmitons apparaissent, chargés d’un panier contenant nappe et
|
||||||
luxueuse vaisselle, d’un grand plat recouvert d’une cloche, et d’une
|
luxueuse vaisselle, d’un grand plat recouvert d’une cloche, et d’une
|
||||||
@ -14,7 +14,8 @@ system:
|
|||||||
soulève la cloche du plat et en annonce fièrement l’intitulé, tandis que le
|
soulève la cloche du plat et en annonce fièrement l’intitulé, tandis que le
|
||||||
troisième présente la boisson.</p>
|
troisième présente la boisson.</p>
|
||||||
|
|
||||||
<p>Les Marmitons de Pavois dressent toujours le couvert pour sept convives,
|
<p>Les @UUID[Compendium.foundryvtt-reve-de-dragon.invocations.Actor.kB7OSWKvd6m9v0dB]{Marmitons de Pavois}
|
||||||
|
dressent toujours le couvert pour sept convives,
|
||||||
et à raison de 3 points par personne, le plat contient 21 points de
|
et à raison de 3 points par personne, le plat contient 21 points de
|
||||||
sustentation. Aux convives de se les partager selon leur propre nombre. La
|
sustentation. Aux convives de se les partager selon leur propre nombre. La
|
||||||
bonbonne contient pareillement 21 mesures.</p>
|
bonbonne contient pareillement 21 mesures.</p>
|
||||||
@ -39,8 +40,8 @@ system:
|
|||||||
sufit à les faire se dématérialiser instantanément. La différence alors est
|
sufit à les faire se dématérialiser instantanément. La différence alors est
|
||||||
que même la nourriture ingérée disparaît des estomacs.</p>
|
que même la nourriture ingérée disparaît des estomacs.</p>
|
||||||
|
|
||||||
<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.3wVxF2IRf3c1lOxC.JournalEntryPage.GLzfQkCfkbnxBX8A]{Communication
|
||||||
invoquées}</p>
|
avec les créatures invoquées}</p>
|
||||||
descriptionmj: ''
|
descriptionmj: ''
|
||||||
draconic: Voie d'Hypnos
|
draconic: Voie d'Hypnos
|
||||||
duree: Tâche
|
duree: Tâche
|
||||||
|
@ -18,7 +18,7 @@ system:
|
|||||||
|
|
||||||
<p>Ce rituel permet de voir à distance. Il doit être ciblé sur un miroir ou
|
<p>Ce rituel permet de voir à distance. Il doit être ciblé sur un miroir ou
|
||||||
une surface réfléchissante, comme de l’eau parfaitement calme, faute de quoi
|
une surface réfléchissante, comme de l’eau parfaitement calme, faute de quoi
|
||||||
l’on aboutit à un cas de @JournalEntry[eANDHKJXMPmPNJ2F]{Magie impossible}.
|
l’on aboutit à un cas de @UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.erO7AICiN1LtRyFg]{Magie impossible}.
|
||||||
Lors du lancer, le rituel doit être paramétré sur une personne ou un lieu
|
Lors du lancer, le rituel doit être paramétré sur une personne ou un lieu
|
||||||
architectural précis, mêmes restrictions que pour Harpe d’Hypnos. Puis le
|
architectural précis, mêmes restrictions que pour Harpe d’Hypnos. Puis le
|
||||||
sort étant ciblé sur le miroir, le haut-rêvant croit voir y évoluer des
|
sort étant ciblé sur le miroir, le haut-rêvant croit voir y évoluer des
|
||||||
|
@ -6,7 +6,7 @@ effects: []
|
|||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>Narine d’Hypnos est une illusion purement <em>olfactive</em>. Son
|
<p>Narine d’Hypnos est une illusion purement <em>olfactive</em>. Son
|
||||||
fonctionnement est identique à @Item[QdtcV9WVi9BdL153]{Tympan d'Hypnos},
|
fonctionnement est identique à @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.D9eSbTGp3i5gdbc5]{Tympan d'Hypnos},
|
||||||
s’appliquant aux odeurs à la place des sons. L’illusion doit pareillement
|
s’appliquant aux odeurs à la place des sons. L’illusion doit pareillement
|
||||||
rester dans la même catégorie que la cible. Peu utilisé sur les humanoïdes
|
rester dans la même catégorie que la cible. Peu utilisé sur les humanoïdes
|
||||||
et les animaux, à moins d’avoir une raison très précise de vouloir qu’un
|
et les animaux, à moins d’avoir une raison très précise de vouloir qu’un
|
||||||
|
@ -5,11 +5,12 @@ img: systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp
|
|||||||
effects: []
|
effects: []
|
||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.GRKYbbNDIHdzVNaj.JournalEntryPage.PiKGAswCiDPtmAol]{Note
|
||||||
créatures}</p>
|
sur les invocations de créatures}</p>
|
||||||
|
|
||||||
<p>Le Nonechalepasse a la même apparence physique et le même armement que le
|
<p>Le Nonechalepasse a la même apparence physique et le même armement que le
|
||||||
Guerrier Sorde. C’est en fait une variante de ce dernier. Il est invoqué
|
@UUID[Compendium.foundryvtt-reve-de-dragon.invocations.Actor.xGtM3z3KM6N6lpd5]{Guerrier Sorde}.
|
||||||
|
C’est en fait une variante de ce dernier. Il est invoqué
|
||||||
pour garder ou veiller sur quelque chose : une porte, un coffre, un pont,
|
pour garder ou veiller sur quelque chose : une porte, un coffre, un pont,
|
||||||
etc. L’ayant invoqué, le haut-rêvant doit lui indiquer expressément sur quoi
|
etc. L’ayant invoqué, le haut-rêvant doit lui indiquer expressément sur quoi
|
||||||
il doit veiller, et le Nonechalepasse ne laissera personne d’autre que
|
il doit veiller, et le Nonechalepasse ne laissera personne d’autre que
|
||||||
@ -23,8 +24,8 @@ system:
|
|||||||
tous les mêmes caractéristiques que les Guerriers Sordes et sont comme eux
|
tous les mêmes caractéristiques que les Guerriers Sordes et sont comme eux
|
||||||
affectés par les sorts.</p>
|
affectés par les sorts.</p>
|
||||||
|
|
||||||
<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.3wVxF2IRf3c1lOxC.JournalEntryPage.GLzfQkCfkbnxBX8A]{Communication
|
||||||
invoquées}</p>
|
avec les créatures invoquées}</p>
|
||||||
descriptionmj: ''
|
descriptionmj: ''
|
||||||
draconic: Voie d'Hypnos
|
draconic: Voie d'Hypnos
|
||||||
duree: Tâche
|
duree: Tâche
|
||||||
|
@ -5,7 +5,7 @@ img: systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp
|
|||||||
effects: []
|
effects: []
|
||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>Comme @Item[viSBXe0CnbRI1O2J]{Robe d'Hypnos}, cette illusion visuelle
|
<p>Comme @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.7eeKT1BbsGdyY1GL]{Robe d'Hypnos}, cette illusion visuelle
|
||||||
s’applique à tout ce qui est porté par la cible au moment du ciblage.
|
s’applique à tout ce qui est porté par la cible au moment du ciblage.
|
||||||
Vêtements et équipement deviennent invisibles : le résultat est que la cible
|
Vêtements et équipement deviennent invisibles : le résultat est que la cible
|
||||||
semble nue.</p>
|
semble nue.</p>
|
||||||
@ -17,7 +17,7 @@ system:
|
|||||||
<p>La nudité résultante n’est elle-même qu’une illusion. Un corps nu
|
<p>La nudité résultante n’est elle-même qu’une illusion. Un corps nu
|
||||||
apparaît, vraisemblable, mais sans pour autant que ce soit exactement celui
|
apparaît, vraisemblable, mais sans pour autant que ce soit exactement celui
|
||||||
de la cible. Toucher ce corps nu entraîne évidemment un
|
de la cible. Toucher ce corps nu entraîne évidemment un
|
||||||
@JournalEntry[9bvrfDaudPqvQZPY]{Conflit de sens} et une brume limbaire.</p>
|
@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.ZmMoOtUdgjMd4cNs]{Conflit de sens} et une brume limbaire.</p>
|
||||||
|
|
||||||
<p>Tout vêtement retiré, cessant d’être en contact avec la cible, redevient
|
<p>Tout vêtement retiré, cessant d’être en contact avec la cible, redevient
|
||||||
visible quant à lui, mais n’altère pas l’illusion de nudité. (On ne saurait
|
visible quant à lui, mais n’altère pas l’illusion de nudité. (On ne saurait
|
||||||
|
@ -5,8 +5,8 @@ img: systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp
|
|||||||
effects: []
|
effects: []
|
||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.GRKYbbNDIHdzVNaj.JournalEntryPage.PiKGAswCiDPtmAol]{Note
|
||||||
créatures}</p>
|
sur les invocations de créatures}</p>
|
||||||
|
|
||||||
<p>Trois artisans agiles et vigoureux apparaissent, chargés de toile, de
|
<p>Trois artisans agiles et vigoureux apparaissent, chargés de toile, de
|
||||||
cordages et d’un mât télescopique. L’ensemble est destiné à dresser un petit
|
cordages et d’un mât télescopique. L’ensemble est destiné à dresser un petit
|
||||||
@ -27,8 +27,8 @@ system:
|
|||||||
<p>Le chapiteau est imperméable et résiste à de fortes bourrasques. Une
|
<p>Le chapiteau est imperméable et résiste à de fortes bourrasques. Une
|
||||||
tempête véritable peut par contre être considérée comme une agression.</p>
|
tempête véritable peut par contre être considérée comme une agression.</p>
|
||||||
|
|
||||||
<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.3wVxF2IRf3c1lOxC.JournalEntryPage.GLzfQkCfkbnxBX8A]{Communication
|
||||||
invoquées}</p>
|
avec les créatures invoquées}</p>
|
||||||
descriptionmj: ''
|
descriptionmj: ''
|
||||||
draconic: Voie d'Hypnos
|
draconic: Voie d'Hypnos
|
||||||
duree: HN
|
duree: HN
|
||||||
|
@ -47,7 +47,7 @@ system:
|
|||||||
<li>Si l’on prévoit qu’une pièce d’équipement va cesser à un moment d’être
|
<li>Si l’on prévoit qu’une pièce d’équipement va cesser à un moment d’être
|
||||||
en contact avec la cible et que l’on désire que son illusion perdure,
|
en contact avec la cible et que l’on désire que son illusion perdure,
|
||||||
utiliser conjointement à son sujet le sort standard de
|
utiliser conjointement à son sujet le sort standard de
|
||||||
@Item[skPIvFb5tRRPHDGU]{Transfiguration}.</li>
|
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.ktFI49xqZ0mGfTzt]{Transfiguration}.</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
descriptionmj: ''
|
descriptionmj: ''
|
||||||
|
@ -6,7 +6,7 @@ effects: []
|
|||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>Cette illusion visuelle ne peut être lancée que sur un humanoïde nu ou
|
<p>Cette illusion visuelle ne peut être lancée que sur un humanoïde nu ou
|
||||||
étant préalablement sous l’effet de @Item[m2pwvCCImJnbKVcW]{Nudité
|
étant préalablement sous l’effet de @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.o99y8VPp7x2mGbaU]{Nudité
|
||||||
d'Hypnos}. Il est alors possible de lui inventer tous les vêtements
|
d'Hypnos}. Il est alors possible de lui inventer tous les vêtements
|
||||||
imaginables, couvrant plus ou moins totalement son corps, y compris une
|
imaginables, couvrant plus ou moins totalement son corps, y compris une
|
||||||
armure. Des pièces d’équipement illusoires sont également possibles, armes,
|
armure. Des pièces d’équipement illusoires sont également possibles, armes,
|
||||||
@ -16,12 +16,13 @@ system:
|
|||||||
sort n’a aucun effet mais les points de rêve sont dépensés quand même.</p>
|
sort n’a aucun effet mais les points de rêve sont dépensés quand même.</p>
|
||||||
|
|
||||||
<p>Si la cible est réellement nue, seul le fait de la toucher peut générer
|
<p>Si la cible est réellement nue, seul le fait de la toucher peut générer
|
||||||
un @JournalEntry[9bvrfDaudPqvQZPY]{Conflit de sens} et une brume limbaire,
|
un @UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.ZmMoOtUdgjMd4cNs]{Conflit de sens} et une brume limbaire,
|
||||||
pas son comportement. En revanche, si sa nudité est illusoire, son
|
pas son comportement. En revanche, si sa nudité est illusoire, son
|
||||||
comportement peut générer un conflit de sens s’il y a contradiction entre
|
comportement peut générer un conflit de sens s’il y a contradiction entre
|
||||||
l’utilisation de son équipement réel (rendu invisible par
|
l’utilisation de son équipement réel (rendu invisible par
|
||||||
@Item[m2pwvCCImJnbKVcW]{Nudité d'Hypnos}) et son équipement illusoire (celui
|
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.o99y8VPp7x2mGbaU]{Nudité
|
||||||
inventé par Robe Fantasmagorique).</p>
|
d'Hypnos}) et son équipement illusoire (celui inventé par Robe
|
||||||
|
Fantasmagorique).</p>
|
||||||
descriptionmj: ''
|
descriptionmj: ''
|
||||||
draconic: Voie d'Hypnos
|
draconic: Voie d'Hypnos
|
||||||
duree: HN
|
duree: HN
|
||||||
|
@ -5,8 +5,8 @@ img: systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp
|
|||||||
effects: []
|
effects: []
|
||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.GRKYbbNDIHdzVNaj.JournalEntryPage.PiKGAswCiDPtmAol]{Note
|
||||||
créatures}</p>
|
sur les invocations de créatures}</p>
|
||||||
|
|
||||||
<p>Le Secouriste blanc ne peut être invoqué que pendant un combat ou au
|
<p>Le Secouriste blanc ne peut être invoqué que pendant un combat ou au
|
||||||
terme de celui-ci. Sa tâche consiste à prendre les blessés en charge,
|
terme de celui-ci. Sa tâche consiste à prendre les blessés en charge,
|
||||||
@ -82,8 +82,8 @@ system:
|
|||||||
<p>Le Secouriste disparaît dès que le combat est terminé ET que tous les
|
<p>Le Secouriste disparaît dès que le combat est terminé ET que tous les
|
||||||
blessés ont été soignés.</p>
|
blessés ont été soignés.</p>
|
||||||
|
|
||||||
<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.3wVxF2IRf3c1lOxC.JournalEntryPage.GLzfQkCfkbnxBX8A]{Communication
|
||||||
invoquées}</p>
|
avec les créatures invoquées}</p>
|
||||||
descriptionmj: ''
|
descriptionmj: ''
|
||||||
draconic: Voie d'Hypnos
|
draconic: Voie d'Hypnos
|
||||||
duree: Tâche ou fin HN
|
duree: Tâche ou fin HN
|
||||||
|
@ -6,7 +6,7 @@ effects: []
|
|||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>L’illusion purement visuelle de Transfiguration fonctionne de la même
|
<p>L’illusion purement visuelle de Transfiguration fonctionne de la même
|
||||||
façon que @Item[Z2U35toRL5nSBr1k]{Métamorphose}, sauf que l’illusion doit
|
façon que @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.OTtXNS1SnVfWWGKi]{Métamorphose}, sauf que l’illusion doit
|
||||||
rester dans la même catégorie que la cible : humanoïde en humanoïde, animal
|
rester dans la même catégorie que la cible : humanoïde en humanoïde, animal
|
||||||
en animal, végétal en végétal, ou objet en objet, exclusivement. Toute
|
en animal, végétal en végétal, ou objet en objet, exclusivement. Toute
|
||||||
disparité de catégorie entre la cible et l’illusion entraîne la dissipation
|
disparité de catégorie entre la cible et l’illusion entraîne la dissipation
|
||||||
|
@ -7,7 +7,7 @@ system:
|
|||||||
description: >-
|
description: >-
|
||||||
<p>Tympan d’Hypnos est une illusion purement <em>auditive </em>pouvant
|
<p>Tympan d’Hypnos est une illusion purement <em>auditive </em>pouvant
|
||||||
s’appliquer indifféremment à un humanoïde, un animal ou un objet. Comme pour
|
s’appliquer indifféremment à un humanoïde, un animal ou un objet. Comme pour
|
||||||
@Item[skPIvFb5tRRPHDGU]{Transfiguration}, l’illusion doit toujours
|
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.ktFI49xqZ0mGfTzt]{Transfiguration}, l’illusion doit toujours
|
||||||
appartenir à la même catégorie que la cible. Toute disparité entraîne les
|
appartenir à la même catégorie que la cible. Toute disparité entraîne les
|
||||||
mêmes conséquences. On peut ainsi changer la voix d’un humanoïde en une
|
mêmes conséquences. On peut ainsi changer la voix d’un humanoïde en une
|
||||||
autre <em>voix </em>d’humanoïde, le cri d’un animal en <em>cri </em>d’un
|
autre <em>voix </em>d’humanoïde, le cri d’un animal en <em>cri </em>d’un
|
||||||
@ -15,7 +15,7 @@ system:
|
|||||||
Tympan d’Hypnos sur un objet non sonore n’aboutit à aucun effet. Ce sort
|
Tympan d’Hypnos sur un objet non sonore n’aboutit à aucun effet. Ce sort
|
||||||
permet entre autres d’enrichir une illusion visuelle en lui apportant son
|
permet entre autres d’enrichir une illusion visuelle en lui apportant son
|
||||||
complément sonore, diminuant ainsi les risques de
|
complément sonore, diminuant ainsi les risques de
|
||||||
@JournalEntry[9bvrfDaudPqvQZPY]{Conflit de sens}. Le cri illusoire d’un
|
@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.ZmMoOtUdgjMd4cNs]{Conflit de sens}. Le cri illusoire d’un
|
||||||
animal doit être le cri d’un animal connu, et vouloir donner à un humanoïde
|
animal doit être le cri d’un animal connu, et vouloir donner à un humanoïde
|
||||||
la même voix que quelqu’un d’autre demande un jet d’OUÏE à -8, avec les
|
la même voix que quelqu’un d’autre demande un jet d’OUÏE à -8, avec les
|
||||||
mêmes remarques que pour Transfiguration. Noter que seule la voix est
|
mêmes remarques que pour Transfiguration. Noter que seule la voix est
|
||||||
|
@ -5,7 +5,7 @@ img: systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp
|
|||||||
effects: []
|
effects: []
|
||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>Même principe que la @Item[r9onPANmiK5E5Jnw]{Flèche de Feu}.
|
<p>Même principe que la @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-narcos.Item.lq3jQDJsAflJ2PEy]{Flèche de Feu}.
|
||||||
Une dague ainsi modifiée a un +dom de +4.</p>
|
Une dague ainsi modifiée a un +dom de +4.</p>
|
||||||
|
|
||||||
<p>La dague de force a une résistance absolue tant que dure
|
<p>La dague de force a une résistance absolue tant que dure
|
||||||
|
@ -5,8 +5,8 @@ img: systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp
|
|||||||
effects: []
|
effects: []
|
||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>Même principe que la@Item[r9onPANmiK5E5Jnw]{Flèche de Feu}
|
<p>Même principe que la @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-narcos.Item.lq3jQDJsAflJ2PEy]{Flèche de Feu}
|
||||||
et la @Item[8BJ9kn3AWLFDwvez]{Dague de Force}, y compris la
|
et la @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-narcos.Item.0N6ILL5RMgmShyM8]{Dague de Force}, y compris la
|
||||||
détérioration automatique de 1 point de résistance. Une
|
détérioration automatique de 1 point de résistance. Une
|
||||||
épée dragonne ainsi modifiée a un +dom de +6.</p>
|
épée dragonne ainsi modifiée a un +dom de +6.</p>
|
||||||
descriptionmj: ''
|
descriptionmj: ''
|
||||||
|
@ -9,7 +9,7 @@ system:
|
|||||||
description: >-
|
description: >-
|
||||||
<p>Les sorts d’Invulnérabilité Chromatique ne peuvent
|
<p>Les sorts d’Invulnérabilité Chromatique ne peuvent
|
||||||
être recherchés/synthétisés qu’en ayant
|
être recherchés/synthétisés qu’en ayant
|
||||||
compris le @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir Les
|
compris le @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir Les
|
||||||
grimoires, p218).</p>
|
grimoires, p218).</p>
|
||||||
|
|
||||||
<p>Cette zone mobile personnelle, obéissant à toutes les
|
<p>Cette zone mobile personnelle, obéissant à toutes les
|
||||||
@ -27,8 +27,8 @@ system:
|
|||||||
protection chromatique au rouge r2 confère une protection de +2 ;
|
protection chromatique au rouge r2 confère une protection de +2 ;
|
||||||
celle au bleu r6 une protection de +6.</p>
|
celle au bleu r6 une protection de +6.</p>
|
||||||
|
|
||||||
<p>Ce sort est incompatible avec le rituel @Item[qW1vAyoqrvxG0tDn]{Haubert
|
<p>Ce sort est incompatible avec le rituel @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-oniros.Item.K9lspVNJAJmCAQHB]{Haubert
|
||||||
d'Oniros (rituel)}.</p>
|
d'Oniros}.</p>
|
||||||
|
|
||||||
<p>Vêtements et équipement peuvent avoir été
|
<p>Vêtements et équipement peuvent avoir été
|
||||||
colorés dans la teinte voulue par une <em>Transmutation
|
colorés dans la teinte voulue par une <em>Transmutation
|
||||||
|
@ -7,7 +7,7 @@ system:
|
|||||||
description: >-
|
description: >-
|
||||||
<p>Les sorts d’Invulnérabilité Chromatique ne peuvent
|
<p>Les sorts d’Invulnérabilité Chromatique ne peuvent
|
||||||
être recherchés/synthétisés qu’en ayant
|
être recherchés/synthétisés qu’en ayant
|
||||||
compris le @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir Les
|
compris le @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir Les
|
||||||
grimoires, p218).</p>
|
grimoires, p218).</p>
|
||||||
|
|
||||||
<p>Cette zone mobile personnelle, obéissant à toutes les
|
<p>Cette zone mobile personnelle, obéissant à toutes les
|
||||||
@ -25,8 +25,8 @@ system:
|
|||||||
protection chromatique au rouge r2 confère une protection de +2 ;
|
protection chromatique au rouge r2 confère une protection de +2 ;
|
||||||
celle au bleu r6 une protection de +6.</p>
|
celle au bleu r6 une protection de +6.</p>
|
||||||
|
|
||||||
<p>Ce sort est incompatible avec le rituel @Item[qW1vAyoqrvxG0tDn]{Haubert
|
<p>Ce sort est incompatible avec le rituel @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-oniros.Item.K9lspVNJAJmCAQHB]{Haubert
|
||||||
d'Oniros (rituel)}.</p>
|
d'Oniros}.</p>
|
||||||
|
|
||||||
<p>Vêtements et équipement peuvent avoir été
|
<p>Vêtements et équipement peuvent avoir été
|
||||||
colorés dans la teinte voulue par une <em>Transmutation
|
colorés dans la teinte voulue par une <em>Transmutation
|
||||||
|
@ -7,7 +7,7 @@ system:
|
|||||||
description: >-
|
description: >-
|
||||||
<p>Les sorts d’Invulnérabilité Chromatique ne peuvent
|
<p>Les sorts d’Invulnérabilité Chromatique ne peuvent
|
||||||
être recherchés/synthétisés qu’en ayant
|
être recherchés/synthétisés qu’en ayant
|
||||||
compris le @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir Les
|
compris le @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir Les
|
||||||
grimoires, p218).</p>
|
grimoires, p218).</p>
|
||||||
|
|
||||||
<p>Cette zone mobile personnelle, obéissant à toutes les
|
<p>Cette zone mobile personnelle, obéissant à toutes les
|
||||||
@ -25,8 +25,8 @@ system:
|
|||||||
protection chromatique au rouge r2 confère une protection de +2 ;
|
protection chromatique au rouge r2 confère une protection de +2 ;
|
||||||
celle au bleu r6 une protection de +6.</p>
|
celle au bleu r6 une protection de +6.</p>
|
||||||
|
|
||||||
<p>Ce sort est incompatible avec le rituel @Item[qW1vAyoqrvxG0tDn]{Haubert
|
<p>Ce sort est incompatible avec le rituel @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-oniros.Item.K9lspVNJAJmCAQHB]{Haubert
|
||||||
d'Oniros (rituel)}.</p>
|
d'Oniros}.</p>
|
||||||
|
|
||||||
<p>Vêtements et équipement peuvent avoir été
|
<p>Vêtements et équipement peuvent avoir été
|
||||||
colorés dans la teinte voulue par une <em>Transmutation
|
colorés dans la teinte voulue par une <em>Transmutation
|
||||||
|
@ -7,7 +7,7 @@ system:
|
|||||||
description: >-
|
description: >-
|
||||||
<p>Les sorts d’Invulnérabilité Chromatique ne peuvent
|
<p>Les sorts d’Invulnérabilité Chromatique ne peuvent
|
||||||
être recherchés/synthétisés qu’en ayant
|
être recherchés/synthétisés qu’en ayant
|
||||||
compris le @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir Les
|
compris le @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir Les
|
||||||
grimoires, p218).</p>
|
grimoires, p218).</p>
|
||||||
|
|
||||||
<p>Cette zone mobile personnelle, obéissant à toutes les
|
<p>Cette zone mobile personnelle, obéissant à toutes les
|
||||||
@ -25,8 +25,8 @@ system:
|
|||||||
protection chromatique au rouge r2 confère une protection de +2 ;
|
protection chromatique au rouge r2 confère une protection de +2 ;
|
||||||
celle au bleu r6 une protection de +6.</p>
|
celle au bleu r6 une protection de +6.</p>
|
||||||
|
|
||||||
<p>Ce sort est incompatible avec le rituel @Item[qW1vAyoqrvxG0tDn]{Haubert
|
<p>Ce sort est incompatible avec le rituel @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-oniros.Item.K9lspVNJAJmCAQHB]{Haubert
|
||||||
d'Oniros (rituel)}.</p>
|
d'Oniros}.</p>
|
||||||
|
|
||||||
<p>Vêtements et équipement peuvent avoir été
|
<p>Vêtements et équipement peuvent avoir été
|
||||||
colorés dans la teinte voulue par une <em>Transmutation
|
colorés dans la teinte voulue par une <em>Transmutation
|
||||||
|
@ -7,7 +7,7 @@ system:
|
|||||||
description: >-
|
description: >-
|
||||||
<p>Les sorts d’Invulnérabilité Chromatique ne peuvent
|
<p>Les sorts d’Invulnérabilité Chromatique ne peuvent
|
||||||
être recherchés/synthétisés qu’en ayant
|
être recherchés/synthétisés qu’en ayant
|
||||||
compris le @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir Les
|
compris le @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir Les
|
||||||
grimoires, p218).</p>
|
grimoires, p218).</p>
|
||||||
|
|
||||||
<p>Cette zone mobile personnelle, obéissant à toutes les
|
<p>Cette zone mobile personnelle, obéissant à toutes les
|
||||||
@ -25,8 +25,8 @@ system:
|
|||||||
protection chromatique au rouge r2 confère une protection de +2 ;
|
protection chromatique au rouge r2 confère une protection de +2 ;
|
||||||
celle au bleu r6 une protection de +6.</p>
|
celle au bleu r6 une protection de +6.</p>
|
||||||
|
|
||||||
<p>Ce sort est incompatible avec le rituel @Item[qW1vAyoqrvxG0tDn]{Haubert
|
<p>Ce sort est incompatible avec le rituel @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-oniros.Item.K9lspVNJAJmCAQHB]{Haubert
|
||||||
d'Oniros (rituel)}.</p>
|
d'Oniros}.</p>
|
||||||
|
|
||||||
<p>Vêtements et équipement peuvent avoir été
|
<p>Vêtements et équipement peuvent avoir été
|
||||||
colorés dans la teinte voulue par une <em>Transmutation
|
colorés dans la teinte voulue par une <em>Transmutation
|
||||||
|
@ -22,7 +22,7 @@ system:
|
|||||||
<li>Visage et torse (+ épaules/bras/mains) : 4 m</li>
|
<li>Visage et torse (+ épaules/bras/mains) : 4 m</li>
|
||||||
|
|
||||||
<li>Nudité quasi totale : 8 m, comme une lanterne ou le sort de
|
<li>Nudité quasi totale : 8 m, comme une lanterne ou le sort de
|
||||||
@Item[frNisNWwVXP8N5mn]{Lanterne}.</li>
|
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-oniros.Item.tuVJbePw7bmVs2pO]{Lanterne}.</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
descriptionmj: ''
|
descriptionmj: ''
|
||||||
|
@ -6,7 +6,7 @@ effects: []
|
|||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>La recherche des zones de Transmutation Chromatique requiert la
|
<p>La recherche des zones de Transmutation Chromatique requiert la
|
||||||
connaissance du @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir
|
connaissance du @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir
|
||||||
Les grimoires, p218).</p>
|
Les grimoires, p218).</p>
|
||||||
|
|
||||||
<p>Les zones de Transmutation Chromatique modifient la couleur des objets
|
<p>Les zones de Transmutation Chromatique modifient la couleur des objets
|
||||||
|
@ -6,7 +6,7 @@ effects: []
|
|||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>La recherche des zones de Transmutation Chromatique requiert la
|
<p>La recherche des zones de Transmutation Chromatique requiert la
|
||||||
connaissance du @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir
|
connaissance du @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir
|
||||||
Les grimoires, p218).</p>
|
Les grimoires, p218).</p>
|
||||||
|
|
||||||
<p>Les zones de Transmutation Chromatique modifient la couleur des objets
|
<p>Les zones de Transmutation Chromatique modifient la couleur des objets
|
||||||
|
@ -6,7 +6,7 @@ effects: []
|
|||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>La recherche des zones de Transmutation Chromatique requiert la
|
<p>La recherche des zones de Transmutation Chromatique requiert la
|
||||||
connaissance du @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir
|
connaissance du @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir
|
||||||
Les grimoires, p218).</p>
|
Les grimoires, p218).</p>
|
||||||
|
|
||||||
<p>Les zones de Transmutation Chromatique modifient la couleur des objets
|
<p>Les zones de Transmutation Chromatique modifient la couleur des objets
|
||||||
|
@ -6,7 +6,7 @@ effects: []
|
|||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>La recherche des zones de Transmutation Chromatique requiert la
|
<p>La recherche des zones de Transmutation Chromatique requiert la
|
||||||
connaissance du @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir
|
connaissance du @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir
|
||||||
Les grimoires, p218).</p>
|
Les grimoires, p218).</p>
|
||||||
|
|
||||||
<p>Les zones de Transmutation Chromatique modifient la couleur des objets
|
<p>Les zones de Transmutation Chromatique modifient la couleur des objets
|
||||||
|
@ -6,7 +6,7 @@ effects: []
|
|||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>La recherche des zones de Transmutation Chromatique requiert la
|
<p>La recherche des zones de Transmutation Chromatique requiert la
|
||||||
connaissance du @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir
|
connaissance du @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir
|
||||||
Les grimoires, p218).</p>
|
Les grimoires, p218).</p>
|
||||||
|
|
||||||
<p>Les zones de Transmutation Chromatique modifient la couleur des objets
|
<p>Les zones de Transmutation Chromatique modifient la couleur des objets
|
||||||
|
@ -6,7 +6,7 @@ effects: []
|
|||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>La recherche des zones de Transmutation Chromatique requiert la
|
<p>La recherche des zones de Transmutation Chromatique requiert la
|
||||||
connaissance du @Item[5YK6q2KuKArkvDWy]{Le Principe Drachromatique} (voir
|
connaissance du @UUID[Compendium.foundryvtt-reve-de-dragon.meditations-et-ecrits.Item.UoEHSr7Mcz4crdSF]{Le Principe Drachromatique} (voir
|
||||||
Les grimoires, p218).</p>
|
Les grimoires, p218).</p>
|
||||||
|
|
||||||
<p>Les zones de Transmutation Chromatique modifient la couleur des objets
|
<p>Les zones de Transmutation Chromatique modifient la couleur des objets
|
||||||
|
@ -3315,7 +3315,7 @@ prototypeToken:
|
|||||||
height: 1
|
height: 1
|
||||||
lockRotation: false
|
lockRotation: false
|
||||||
rotation: 0
|
rotation: 0
|
||||||
actorLink: false
|
actorLink: true
|
||||||
disposition: 0
|
disposition: 0
|
||||||
displayBars: 0
|
displayBars: 0
|
||||||
bar1:
|
bar1:
|
||||||
|
@ -3021,7 +3021,7 @@ prototypeToken:
|
|||||||
height: 1
|
height: 1
|
||||||
lockRotation: false
|
lockRotation: false
|
||||||
rotation: 0
|
rotation: 0
|
||||||
actorLink: false
|
actorLink: true
|
||||||
disposition: 0
|
disposition: 0
|
||||||
displayBars: 0
|
displayBars: 0
|
||||||
bar1:
|
bar1:
|
||||||
|
@ -2954,7 +2954,7 @@ prototypeToken:
|
|||||||
height: 1
|
height: 1
|
||||||
lockRotation: false
|
lockRotation: false
|
||||||
rotation: 0
|
rotation: 0
|
||||||
actorLink: false
|
actorLink: true
|
||||||
disposition: 0
|
disposition: 0
|
||||||
displayBars: 0
|
displayBars: 0
|
||||||
bar1:
|
bar1:
|
||||||
|
@ -3039,7 +3039,7 @@ prototypeToken:
|
|||||||
height: 1
|
height: 1
|
||||||
lockRotation: false
|
lockRotation: false
|
||||||
rotation: 0
|
rotation: 0
|
||||||
actorLink: false
|
actorLink: true
|
||||||
disposition: 0
|
disposition: 0
|
||||||
displayBars: 0
|
displayBars: 0
|
||||||
bar1:
|
bar1:
|
||||||
|
@ -3113,7 +3113,7 @@ prototypeToken:
|
|||||||
height: 1
|
height: 1
|
||||||
lockRotation: false
|
lockRotation: false
|
||||||
rotation: 0
|
rotation: 0
|
||||||
actorLink: false
|
actorLink: true
|
||||||
disposition: 0
|
disposition: 0
|
||||||
displayBars: 0
|
displayBars: 0
|
||||||
bar1:
|
bar1:
|
||||||
|
@ -2975,7 +2975,7 @@ ownership:
|
|||||||
prototypeToken:
|
prototypeToken:
|
||||||
name: le Coureur des Rues
|
name: le Coureur des Rues
|
||||||
displayName: 0
|
displayName: 0
|
||||||
actorLink: false
|
actorLink: true
|
||||||
width: 1
|
width: 1
|
||||||
height: 1
|
height: 1
|
||||||
lockRotation: false
|
lockRotation: false
|
||||||
|
@ -2146,8 +2146,8 @@ items:
|
|||||||
la même : objet en objet. L’intensité de la saveur est celle de la
|
la même : objet en objet. L’intensité de la saveur est celle de la
|
||||||
cible. Comme pour tous les sorts d’illusions sensorielles, la saveur
|
cible. Comme pour tous les sorts d’illusions sensorielles, la saveur
|
||||||
illusoire ne peut être qu’une saveur connue du haut-rêvant. Couplé à
|
illusoire ne peut être qu’une saveur connue du haut-rêvant. Couplé à
|
||||||
@Item[dEs7qg5UsqpQxok6]{Narine d'Hypnos} et à
|
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.nNh8N9nF8m6zLtrt]{Narine d'Hypnos} et à
|
||||||
@Item[skPIvFb5tRRPHDGU]{Transfiguration}, ce sort peut permettre des
|
@UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.ktFI49xqZ0mGfTzt]{Transfiguration}, ce sort peut permettre des
|
||||||
ignominies gastronomiques : que pensez- vous de ce vin à la robe de
|
ignominies gastronomiques : que pensez- vous de ce vin à la robe de
|
||||||
rubis, au savoureux bouquet de framboise, et qui vous roule sur la
|
rubis, au savoureux bouquet de framboise, et qui vous roule sur la
|
||||||
langue comme du velours ?... Illusion de bout en bout, ce n’est que de
|
langue comme du velours ?... Illusion de bout en bout, ce n’est que de
|
||||||
@ -2183,7 +2183,7 @@ items:
|
|||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>Narine d’Hypnos est une illusion purement <em>olfactive</em>. Son
|
<p>Narine d’Hypnos est une illusion purement <em>olfactive</em>. Son
|
||||||
fonctionnement est identique à @Item[QdtcV9WVi9BdL153]{Tympan d'Hypnos},
|
fonctionnement est identique à @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.D9eSbTGp3i5gdbc5]{Tympan d'Hypnos},
|
||||||
s’appliquant aux odeurs à la place des sons. L’illusion doit
|
s’appliquant aux odeurs à la place des sons. L’illusion doit
|
||||||
pareillement rester dans la même catégorie que la cible. Peu utilisé sur
|
pareillement rester dans la même catégorie que la cible. Peu utilisé sur
|
||||||
les humanoïdes et les animaux, à moins d’avoir une raison très précise
|
les humanoïdes et les animaux, à moins d’avoir une raison très précise
|
||||||
@ -3502,7 +3502,7 @@ ownership:
|
|||||||
prototypeToken:
|
prototypeToken:
|
||||||
name: le Cuisinier Haut-Rêvant
|
name: le Cuisinier Haut-Rêvant
|
||||||
displayName: 0
|
displayName: 0
|
||||||
actorLink: false
|
actorLink: true
|
||||||
width: 1
|
width: 1
|
||||||
height: 1
|
height: 1
|
||||||
lockRotation: false
|
lockRotation: false
|
||||||
|
@ -3262,7 +3262,7 @@ prototypeToken:
|
|||||||
height: 1
|
height: 1
|
||||||
lockRotation: false
|
lockRotation: false
|
||||||
rotation: 0
|
rotation: 0
|
||||||
actorLink: false
|
actorLink: true
|
||||||
disposition: 0
|
disposition: 0
|
||||||
displayBars: 0
|
displayBars: 0
|
||||||
bar1:
|
bar1:
|
||||||
|
@ -2186,10 +2186,11 @@ items:
|
|||||||
effects: []
|
effects: []
|
||||||
system:
|
system:
|
||||||
description: >-
|
description: >-
|
||||||
<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.GRKYbbNDIHdzVNaj.JournalEntryPage.PiKGAswCiDPtmAol]{Note
|
||||||
créatures}</p>
|
sur les invocations de créatures}</p>
|
||||||
|
|
||||||
<p>Le Guerrier Sorde a l’apparence d’un humanoïde entièrement revêtu
|
<p>Le @UUID[Compendium.foundryvtt-reve-de-dragon.invocations.Actor.xGtM3z3KM6N6lpd5]{Guerrier Sorde}
|
||||||
|
a l’apparence d’un humanoïde entièrement revêtu
|
||||||
d’une armure de plaques, visière du heaume toujours baissée, dissimulant
|
d’une armure de plaques, visière du heaume toujours baissée, dissimulant
|
||||||
son visage. Il est armé d’une épée sorde, d’un bouclier moyen et d’une
|
son visage. Il est armé d’une épée sorde, d’un bouclier moyen et d’une
|
||||||
dague. La seule tâche que l’on puisse lui demander est de faire usage de
|
dague. La seule tâche que l’on puisse lui demander est de faire usage de
|
||||||
@ -2211,8 +2212,8 @@ items:
|
|||||||
normalement affectés par les suggestions et illusions d’Hypnos, avec un
|
normalement affectés par les suggestions et illusions d’Hypnos, avec un
|
||||||
JR standard r-8, ainsi que par les sorts individuels de Thananatos.</p>
|
JR standard r-8, ainsi que par les sorts individuels de Thananatos.</p>
|
||||||
|
|
||||||
<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures
|
<p>@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.3wVxF2IRf3c1lOxC.JournalEntryPage.GLzfQkCfkbnxBX8A]{Communication
|
||||||
invoquées}</p>
|
avec les créatures invoquées}</p>
|
||||||
descriptionmj: ''
|
descriptionmj: ''
|
||||||
draconic: hypnos
|
draconic: hypnos
|
||||||
duree: Tâche
|
duree: Tâche
|
||||||
@ -2245,7 +2246,7 @@ items:
|
|||||||
description: >-
|
description: >-
|
||||||
<p>Tympan d’Hypnos est une illusion purement <em>auditive </em>pouvant
|
<p>Tympan d’Hypnos est une illusion purement <em>auditive </em>pouvant
|
||||||
s’appliquer indifféremment à un humanoïde, un animal ou un objet. Comme
|
s’appliquer indifféremment à un humanoïde, un animal ou un objet. Comme
|
||||||
pour @Item[skPIvFb5tRRPHDGU]{Transfiguration}, l’illusion doit toujours
|
pour @UUID[Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Item.ktFI49xqZ0mGfTzt]{Transfiguration}, l’illusion doit toujours
|
||||||
appartenir à la même catégorie que la cible. Toute disparité entraîne
|
appartenir à la même catégorie que la cible. Toute disparité entraîne
|
||||||
les mêmes conséquences. On peut ainsi changer la voix d’un humanoïde en
|
les mêmes conséquences. On peut ainsi changer la voix d’un humanoïde en
|
||||||
une autre <em>voix </em>d’humanoïde, le cri d’un animal en <em>cri
|
une autre <em>voix </em>d’humanoïde, le cri d’un animal en <em>cri
|
||||||
@ -2253,7 +2254,7 @@ items:
|
|||||||
objet. Lancer Tympan d’Hypnos sur un objet non sonore n’aboutit à aucun
|
objet. Lancer Tympan d’Hypnos sur un objet non sonore n’aboutit à aucun
|
||||||
effet. Ce sort permet entre autres d’enrichir une illusion visuelle en
|
effet. Ce sort permet entre autres d’enrichir une illusion visuelle en
|
||||||
lui apportant son complément sonore, diminuant ainsi les risques de
|
lui apportant son complément sonore, diminuant ainsi les risques de
|
||||||
@JournalEntry[9bvrfDaudPqvQZPY]{Conflit de sens}. Le cri illusoire d’un
|
@UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.ZmMoOtUdgjMd4cNs]{Conflit de sens}. Le cri illusoire d’un
|
||||||
animal doit être le cri d’un animal connu, et vouloir donner à un
|
animal doit être le cri d’un animal connu, et vouloir donner à un
|
||||||
humanoïde la même voix que quelqu’un d’autre demande un jet d’OUÏE à -8,
|
humanoïde la même voix que quelqu’un d’autre demande un jet d’OUÏE à -8,
|
||||||
avec les mêmes remarques que pour Transfiguration. Noter que seule la
|
avec les mêmes remarques que pour Transfiguration. Noter que seule la
|
||||||
@ -3584,7 +3585,7 @@ prototypeToken:
|
|||||||
height: 1
|
height: 1
|
||||||
lockRotation: false
|
lockRotation: false
|
||||||
rotation: 0
|
rotation: 0
|
||||||
actorLink: false
|
actorLink: true
|
||||||
disposition: 0
|
disposition: 0
|
||||||
displayBars: 0
|
displayBars: 0
|
||||||
bar1:
|
bar1:
|
||||||
|
@ -2112,7 +2112,7 @@ items:
|
|||||||
|
|
||||||
<p>Ce rituel permet d’entendre à distance. Il doit être ciblé sur un
|
<p>Ce rituel permet d’entendre à distance. Il doit être ciblé sur un
|
||||||
instrument sonore (harpe, luth, gong, cloche, etc.) faute de quoi l’on
|
instrument sonore (harpe, luth, gong, cloche, etc.) faute de quoi l’on
|
||||||
aboutit à un cas de @JournalEntry[eANDHKJXMPmPNJ2F]{Magie impossible}.
|
aboutit à un cas de @UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.erO7AICiN1LtRyFg]{Magie impossible}.
|
||||||
Lors du lancer, le rituel doit être paramétré sur une personne précise
|
Lors du lancer, le rituel doit être paramétré sur une personne précise
|
||||||
(humanoïde) ou un lieu architectural précis (salle, couloir, perron,
|
(humanoïde) ou un lieu architectural précis (salle, couloir, perron,
|
||||||
escalier, balcon, etc.). Les éléments naturels du paysage (rochers,
|
escalier, balcon, etc.). Les éléments naturels du paysage (rochers,
|
||||||
@ -2168,8 +2168,7 @@ items:
|
|||||||
|
|
||||||
<p>Ce rituel permet de voir à distance. Il doit être ciblé sur un miroir
|
<p>Ce rituel permet de voir à distance. Il doit être ciblé sur un miroir
|
||||||
ou une surface réfléchissante, comme de l’eau parfaitement calme, faute
|
ou une surface réfléchissante, comme de l’eau parfaitement calme, faute
|
||||||
de quoi l’on aboutit à un cas de @JournalEntry[eANDHKJXMPmPNJ2F]{Magie
|
de quoi l’on aboutit à un cas de @UUID[Compendium.foundryvtt-reve-de-dragon.rappel-des-regles.JournalEntry.erO7AICiN1LtRyFg]{Magie impossible}. Lors du lancer, le rituel doit être paramétré sur une
|
||||||
impossible}. Lors du lancer, le rituel doit être paramétré sur une
|
|
||||||
personne ou un lieu architectural précis, mêmes restrictions que pour
|
personne ou un lieu architectural précis, mêmes restrictions que pour
|
||||||
Harpe d’Hypnos. Puis le sort étant ciblé sur le miroir, le haut-rêvant
|
Harpe d’Hypnos. Puis le sort étant ciblé sur le miroir, le haut-rêvant
|
||||||
croit voir y évoluer des formes, qui le plongent aussitôt dans un état
|
croit voir y évoluer des formes, qui le plongent aussitôt dans un état
|
||||||
@ -3752,7 +3751,7 @@ prototypeToken:
|
|||||||
height: 1
|
height: 1
|
||||||
lockRotation: false
|
lockRotation: false
|
||||||
rotation: 0
|
rotation: 0
|
||||||
actorLink: false
|
actorLink: true
|
||||||
disposition: 0
|
disposition: 0
|
||||||
displayBars: 0
|
displayBars: 0
|
||||||
bar1:
|
bar1:
|
||||||
|
@ -3661,7 +3661,7 @@ prototypeToken:
|
|||||||
height: 1
|
height: 1
|
||||||
lockRotation: false
|
lockRotation: false
|
||||||
rotation: 0
|
rotation: 0
|
||||||
actorLink: false
|
actorLink: true
|
||||||
disposition: 0
|
disposition: 0
|
||||||
displayBars: 0
|
displayBars: 0
|
||||||
bar1:
|
bar1:
|
||||||
|
@ -3025,7 +3025,7 @@ prototypeToken:
|
|||||||
height: 1
|
height: 1
|
||||||
lockRotation: false
|
lockRotation: false
|
||||||
rotation: 0
|
rotation: 0
|
||||||
actorLink: false
|
actorLink: true
|
||||||
disposition: 0
|
disposition: 0
|
||||||
displayBars: 0
|
displayBars: 0
|
||||||
bar1:
|
bar1:
|
||||||
|
78
styles/img/ui/ajout-competence.svg
Normal file
78
styles/img/ui/ajout-competence.svg
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
viewBox="0 0 512 512"
|
||||||
|
style="height: 256px; width: 256px;"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
sodipodi:docname="add-skill.svg"
|
||||||
|
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||||
|
<metadata
|
||||||
|
id="metadata14">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs12" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="2138"
|
||||||
|
inkscape:window-height="1465"
|
||||||
|
id="namedview10"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="1.0150849"
|
||||||
|
inkscape:cx="466.02267"
|
||||||
|
inkscape:cy="44.586362"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="svg8" />
|
||||||
|
<path
|
||||||
|
d="M0 0h512v512H0z"
|
||||||
|
fill="url(#pattern)"
|
||||||
|
fill-opacity="0.5"
|
||||||
|
id="path2" />
|
||||||
|
<g
|
||||||
|
class=""
|
||||||
|
transform="translate(-81.40366,-2.6174234)"
|
||||||
|
id="g6">
|
||||||
|
<path
|
||||||
|
d="m 119.1,25 v 0.1 c -25,3.2 -47.1,32 -47.1,68.8 0,20.4 7.1,38.4 17.5,50.9 L 99.7,157 84,159.9 c -13.7,2.6 -23.8,9.9 -32.2,21.5 -8.5,11.5 -14.9,27.5 -19.4,45.8 -8.2,33.6 -9.9,74.7 -10.1,110.5 h 44 l 11.9,158.4 h 96.3 L 185,337.7 h 41.9 c 0,-36.2 -0.3,-77.8 -7.8,-111.7 -4,-18.5 -10.2,-34.4 -18.7,-45.9 -8.6,-11.4 -19.2,-18.7 -34.5,-21 l -16,-2.5 L 160,144 c 10,-12.5 16.7,-30.2 16.7,-50.1 0,-39.2 -24.8,-68.8 -52.4,-68.8 -2.9,0 -4.7,-0.1 -5.2,-0.1 z M 311,55 v 48 H 208 v 18 h 103 v 158 h -55 v 18 h 55 V 407 H 208 v 18 h 103 v 32 h 80.8 c -0.5,-2.9 -0.8,-5.9 -0.8,-9 0,-3.1 0.3,-6.1 0.8,-9 H 329 V 297 h 62.8 c -0.5,-2.9 -0.8,-5.9 -0.8,-9 0,-3.1 0.3,-6.1 0.8,-9 H 329 V 73 h 62.8 c -0.5,-2.92 -0.8,-5.93 -0.8,-9 0,-3.07 0.3,-6.08 0.8,-9 z m 129,202 c -17.2,0 -31,13.8 -31,31 0,17.2 13.8,31 31,31 17.2,0 31,-13.8 31,-31 0,-17.2 -13.8,-31 -31,-31 z m 0,160 c -17.2,0 -31,13.8 -31,31 0,17.2 13.8,31 31,31 17.2,0 31,-13.8 31,-31 0,-17.2 -13.8,-31 -31,-31 z"
|
||||||
|
fill="#000000"
|
||||||
|
fill-opacity="0.8"
|
||||||
|
transform="matrix(0.6,0,0,0.6,102.4,102.4)"
|
||||||
|
id="path4"
|
||||||
|
sodipodi:nodetypes="ccsccccccccccccccccssccccccccccccccccsccccsccccsccssssssssss" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
class=""
|
||||||
|
transform="translate(124.63542,-119.78046)"
|
||||||
|
id="g6-1">
|
||||||
|
<path
|
||||||
|
d="m 158.81777,136.77499 c -9.48,32.22 -28.656,28.8 -47.61,26.04 21.39,6.12 29.61,22.38 25.998,47.64 7.596,-27.6 25.572,-31.56 47.652,-26.04 -22.56,-7.26 -34.14,-21.24 -26.04,-47.64 z m -41.76,76.08 c 5.496,10.02 4.578,18.06 -3.366,24 7.476,-4.14 14.91,-8.58 23.946,3.36 -7.542,-9.72 -4.92,-17.4 3.366,-24 -8.352,5.82 -16.482,6.96 -23.946,-3.36 z m 82.32,0.18 c 6.84,16.08 -0.3,24.78 -13.02,30.54 13.62,-5.1 24.48,-2.7 30.54,13.02 -7.62,-19.08 2.88,-24.72 13.02,-30.54 -12.6,5.1 -22.68,0.54 -30.54,-13.02 z m -52.776,31.2 c 9.396,34.68 0.516,58.86 -28.392,71.1 26.076,-7.08 52.428,-15.12 71.208,28.44 -15.84,-35.58 -2.04,-57.24 28.38,-71.28 -30,11.52 -55.86,9 -71.196,-28.26 z"
|
||||||
|
fill="#000000"
|
||||||
|
fill-opacity="0.8"
|
||||||
|
id="path4-2"
|
||||||
|
sodipodi:nodetypes="cccccccccccccccccccc"
|
||||||
|
style="stroke-width:0.6" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.7 KiB |
@ -797,6 +797,9 @@ input:is(.blessure-premiers_soins, .blessure-soins_complets) {
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
.item-list-title{
|
||||||
|
flex: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.foundryvtt-reve-de-dragon .item-list .item-header {
|
.foundryvtt-reve-de-dragon .item-list .item-header {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
@ -816,12 +819,12 @@ input:is(.blessure-premiers_soins, .blessure-soins_complets) {
|
|||||||
.competence-list .item-controls.hidden-controls {
|
.competence-list .item-controls.hidden-controls {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
.item-controls i:is(.fas, .fa, .fa-solid) {
|
.item-controls i:is(.fas, .fa, .fa-solid, .fa-regular) {
|
||||||
font-size: 0.8em;
|
font-size: 0.8em;
|
||||||
color: var(--color-controls);
|
color: var(--color-controls);
|
||||||
}
|
}
|
||||||
.item-controls i:is(.fas, .far, .fa-solid):hover {
|
.item-controls i:is(.fas, .far, .fa-solid, .fa-regular):hover {
|
||||||
opacity: 0.7 ;
|
opacity: 0.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rdd-roll-dialog .description-sort {
|
.rdd-roll-dialog .description-sort {
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
},
|
},
|
||||||
"background": {
|
"background": {
|
||||||
"metier": "",
|
"metier": "",
|
||||||
"biographie": "Histoire personnelle...",
|
"biographie": "",
|
||||||
"notes": "Notes",
|
"notes": "",
|
||||||
"notesmj": "Notes du MJ",
|
"notesmj": "",
|
||||||
"race": "Humain",
|
"race": "Humain",
|
||||||
"yeux": "",
|
"yeux": "",
|
||||||
"cheveux": "",
|
"cheveux": "",
|
||||||
@ -191,18 +191,18 @@
|
|||||||
"label": "+dom",
|
"label": "+dom",
|
||||||
"derivee": true
|
"derivee": true
|
||||||
},
|
},
|
||||||
"vitesse": {
|
|
||||||
"type": "string",
|
|
||||||
"value": 0,
|
|
||||||
"label": "Vitesse",
|
|
||||||
"derivee": false
|
|
||||||
},
|
|
||||||
"encombrement": {
|
"encombrement": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"label": "Encombrement",
|
"label": "Encombrement",
|
||||||
"derivee": true
|
"derivee": true
|
||||||
},
|
},
|
||||||
|
"vitesse": {
|
||||||
|
"type": "string",
|
||||||
|
"value": 0,
|
||||||
|
"label": "Vitesse",
|
||||||
|
"derivee": false
|
||||||
|
},
|
||||||
"protection": {
|
"protection": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"value": 0,
|
"value": 0,
|
||||||
|
@ -47,8 +47,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="grid grid-2col">
|
<div class="grid grid-2col">
|
||||||
<div class="flex-group-left flexcol">
|
<div class="flex-group-left flexcol">
|
||||||
|
<ul class="carac-list alterne-list">
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.html"}}
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-group-left flexcol competence-column">
|
<div class="flex-group-left flexcol competence-column">
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/comp-creature.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/comp-creature.html"}}
|
||||||
|
@ -33,8 +33,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="grid grid-2col">
|
<div class="grid grid-2col">
|
||||||
<div class="flex-group-left flexcol">
|
<div class="flex-group-left flexcol">
|
||||||
|
<ul class="carac-list alterne-list">
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-entitee.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-entitee.html"}}
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-group-left flexcol">
|
<div class="flex-group-left flexcol">
|
||||||
<div class="flex-group-left flexcol competence-column">
|
<div class="flex-group-left flexcol competence-column">
|
||||||
|
@ -41,8 +41,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="grid grid-2col">
|
<div class="grid grid-2col">
|
||||||
<div class="flex-group-left flexcol">
|
<div class="flex-group-left flexcol">
|
||||||
|
<ul class="carac-list alterne-list">
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-main.html"}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-total.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-total.html"}}
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-group-left flexcol" >
|
<div class="flex-group-left flexcol" >
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-derivee.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-derivee.html"}}
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
<ol class="carac-list alterne-list">
|
|
||||||
{{#each system.attributs as |attr key|}}
|
{{#each system.attributs as |attr key|}}
|
||||||
{{#if (and (eq key 'plusdom') (eq @root.system.definition.typeentite 'nonincarne'))}}
|
{{#if (and (eq key 'plusdom') (eq @root.system.definition.typeentite 'nonincarne'))}}
|
||||||
{{else}}
|
{{else}}
|
||||||
<li class="caracteristique flexrow list-item" data-attribute="{{key}}">
|
<li class="caracteristique flexrow list-item" data-attribute="{{key}}">
|
||||||
<span class="carac-label" name="system.attributs.{{key}}.label">{{attr.label}}</span>
|
<span class="carac-label" name="system.attributs.{{key}}.label">{{attr.label}}</span>
|
||||||
{{#if (actor-default @root.type 'attributs' key 'derivee')}}
|
{{#if (actor-default @root.type 'attributs' key 'derivee')}}
|
||||||
<input class="caracteristique streched" type="text" name="system.attributs.{{key}}.value"
|
<input class="carac-value" type="text" name="system.attributs.{{key}}.value"
|
||||||
{{#if (eq key 'plusdom')}}
|
{{#if (eq key 'plusdom')}}
|
||||||
value="{{numberFormat attr.value decimals=0 sign=true}}"
|
value="{{numberFormat attr.value decimals=0 sign=true}}"
|
||||||
{{else}}
|
{{else}}
|
||||||
@ -15,7 +14,7 @@
|
|||||||
{{else}}
|
{{else}}
|
||||||
<input class="caracteristique streched" type="text" name="system.attributs.{{key}}.value" value="{{attr.value}}" data-dtype="{{attr.type}}" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}/>
|
<input class="caracteristique streched" type="text" name="system.attributs.{{key}}.value" value="{{attr.value}}" data-dtype="{{attr.type}}" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}/>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
<label class="carac-xp"/>
|
||||||
</li>
|
</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</ol>
|
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
<input class="derivee-value" type="number" name="system.compteurs.dissolution.value" value="{{system.compteurs.dissolution.value}}" data-dtype="number"/>
|
<input class="derivee-value" type="number" name="system.compteurs.dissolution.value" value="{{system.compteurs.dissolution.value}}" data-dtype="number"/>
|
||||||
</li>
|
</li>
|
||||||
<li class="caracteristique flexrow list-item">
|
<li class="caracteristique flexrow list-item">
|
||||||
<label class="derivee-label chance-actuelle" data-tooltip="Jet de chance actuelle"><a>Chance actuelle</a></label>
|
<label class="derivee-label chance-actuelle" data-tooltip="Jet de chance actuelle"><a class="roll-chance-actuelle">Chance actuelle</a></label>
|
||||||
<input class="derivee-value" type="number" name="system.compteurs.chance.value" value="{{system.compteurs.chance.value}}" data-dtype="number"/>
|
<input class="derivee-value" type="number" name="system.compteurs.chance.value" value="{{system.compteurs.chance.value}}" data-dtype="number"/>
|
||||||
</li>
|
</li>
|
||||||
<li class="caracteristique flexrow list-item">
|
<li class="caracteristique flexrow list-item">
|
||||||
|
@ -1,16 +1,21 @@
|
|||||||
<ol class="carac-list alterne-list">
|
|
||||||
<li class="caracteristique flexrow list-item">
|
<li class="caracteristique flexrow list-item">
|
||||||
<span class="carac-label" name="catEntite">Catégorie : </span>
|
<span class="carac-label">Niveau</span>
|
||||||
|
<label class="carac-value">{{numberFormat niveau decimals=0 sign=true}}
|
||||||
|
</label>
|
||||||
|
<label class="carac-xp"/>
|
||||||
|
</li>
|
||||||
|
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.html"}}
|
||||||
|
<li class="caracteristique flexrow list-item">
|
||||||
|
<span class="carac-label" name="catEntite">Catégorie</span>
|
||||||
<select name="system.definition.categorieentite" value="{{system.definition.categorieentite}}" data-dtype="String" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}>
|
<select name="system.definition.categorieentite" value="{{system.definition.categorieentite}}" data-dtype="String" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}>
|
||||||
{{selectOptions (RDD_CONFIG 'categorieEntite') selected=system.definition.categorieentite}}
|
{{selectOptions (RDD_CONFIG 'categorieEntite') selected=system.definition.categorieentite}}
|
||||||
</select>
|
</select>
|
||||||
|
<label class="carac-xp"/>
|
||||||
</li>
|
</li>
|
||||||
<li class="caracteristique flexrow list-item">
|
<li class="caracteristique flexrow list-item">
|
||||||
<span class="carac-label" name="typeEntite">Type d'entité : </span>
|
<span class="carac-label" name="typeEntite">Type d'entité</span>
|
||||||
<select name="system.definition.typeentite" value="{{system.definition.typeentite}}" data-dtype="String" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}>
|
<select name="system.definition.typeentite" value="{{system.definition.typeentite}}" data-dtype="String" {{#unless @root.options.vueDetaillee}}disabled{{/unless}}>
|
||||||
{{selectOptions (RDD_CONFIG 'typeEntite') selected=system.definition.typeentite}}
|
{{selectOptions (RDD_CONFIG 'typeEntite') selected=system.definition.typeentite}}
|
||||||
</select>
|
</select>
|
||||||
|
<label class="carac-xp"/>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
|
||||||
|
|
||||||
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.html"}}
|
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
<ul class="carac-list alterne-list">
|
{{#each system.carac as |carac key|}}
|
||||||
{{#each system.carac as |carac key|}}
|
{{#if (and (eq key 'taille') (eq @root.system.definition.typeentite 'nonincarne'))}}
|
||||||
{{#if (and (eq key 'taille') (eq @root.system.definition.typeentite 'nonincarne'))}}
|
{{else}}
|
||||||
{{else}}
|
<li class="caracteristique flexrow list-item {{#if carac.isLevelUp}}xp-level-up{{/if}}" data-attribute="{{key}}">
|
||||||
<li class="caracteristique flexrow list-item{{#if carac.isLevelUp}} xp-level-up{{/if}}" data-attribute="{{key}}">
|
|
||||||
{{#if (eq key 'taille')}}
|
{{#if (eq key 'taille')}}
|
||||||
<span class="carac-label" name="system.carac.{{key}}.label">{{carac.label}}</span>
|
<span class="carac-label" name="system.carac.{{key}}.label">{{carac.label}}</span>
|
||||||
<input class="carac-value" type="text" name="system.carac.{{key}}.value" value="{{carac.value}}" data-dtype="{{carac.type}}" {{#unless @root.options.vueDetaillee}}disabled{{/unless}} />
|
<input class="carac-value" type="text" name="system.carac.{{key}}.value" value="{{carac.value}}" data-dtype="{{carac.type}}" {{#unless @root.options.vueDetaillee}}disabled{{/unless}} />
|
||||||
@ -10,7 +9,7 @@
|
|||||||
{{else}}
|
{{else}}
|
||||||
{{#if (actor-default @root.type 'carac' key 'derivee')}}
|
{{#if (actor-default @root.type 'carac' key 'derivee')}}
|
||||||
<span class="carac-label" name="system.carac.{{key}}.label"><a class="roll-carac" data-carac-name={{key}}>{{carac.label}}</a></span>
|
<span class="carac-label" name="system.carac.{{key}}.label"><a class="roll-carac" data-carac-name={{key}}>{{carac.label}}</a></span>
|
||||||
<label class="competence-value">{{carac.value}}</label>
|
<label class="carac-value">{{carac.value}}</label>
|
||||||
<label class="carac-xp"/>
|
<label class="carac-xp"/>
|
||||||
{{else}}
|
{{else}}
|
||||||
{{#if carac.isLevelUp}}
|
{{#if carac.isLevelUp}}
|
||||||
@ -35,5 +34,4 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
</li>
|
</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</ul>
|
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
<ol class="item-list alterne-list">
|
<h4 class="item-list-title">Compétences{{#if @root.options.vueDetaillee}} <a class="competence-add" data-tooltip="Ajouter une compétence">
|
||||||
|
<i class="fa-solid fa-books-medical"></i>
|
||||||
|
</a>{{/if}}</h4>
|
||||||
|
<ul class="item-list alterne-list">
|
||||||
{{#each (trier competences) as |comp key|}}
|
{{#each (trier competences) as |comp key|}}
|
||||||
<li class="item flexrow list-item" data-item-id="{{comp._id}}">
|
<li class="item flexrow list-item" data-item-id="{{comp._id}}">
|
||||||
<a class="competence-label roll-competence">
|
<a class="competence-label roll-competence">
|
||||||
<img class="sheet-competence-img" src="{{comp.img}}" data-tooltip="{{comp.name}}"/>
|
<img class="sheet-competence-img" src="{{comp.img}}" data-tooltip="{{comp.name}}"/>
|
||||||
<span>{{comp.name}}</span>
|
<span>{{comp.name}}</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<input class="competence-carac creature-carac" type="text" compname="{{comp.name}}" name="{{comp._id}}.carac"
|
<input class="competence-carac creature-carac" type="text" compname="{{comp.name}}" name="{{comp._id}}.carac"
|
||||||
value="{{comp.system.carac_value}}" data-dtype="number"
|
value="{{comp.system.carac_value}}" data-dtype="number"
|
||||||
{{#unless @root.options.vueDetaillee}}disabled{{/unless}}/>
|
{{#unless @root.options.vueDetaillee}}disabled{{/unless}}/>
|
||||||
@ -29,4 +31,4 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
</li>
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</ol>
|
</ul>
|
||||||
|
@ -54,7 +54,7 @@
|
|||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac.hbs" carac=export.empathie}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac.hbs" carac=export.empathie}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac.hbs" carac=export.intellect}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac.hbs" carac=export.intellect}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac-compteur.hbs" carac=export.reve actuel=export.reve_actuel button-name='ptreve-actuel'}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac-compteur.hbs" carac=export.reve actuel=export.reve_actuel button-name='ptreve-actuel'}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac.hbs" carac=export.chance}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac-compteur.hbs" carac=export.chance actuel=export.chance_actuel button-name='chance-actuelle'}}
|
||||||
</div>
|
</div>
|
||||||
<div class="flexcol flex-group-top">
|
<div class="flexcol flex-group-top">
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac-derivee.hbs" carac=export.melee}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac-derivee.hbs" carac=export.melee}}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
{{#if sortsReserve.length}}
|
{{#if sortsReserve.length}}
|
||||||
<h3>Sorts en Réserve{{#if options.isGM}} <a class="nouveau-sort-reserve"><i class="fa-solid fa-sparkles"></i>
|
<h3>Sorts en Réserve{{#if options.isGM}} <a class="sortreserve-add">
|
||||||
</a>{{/if}}
|
<i class="fa-solid fa-sparkles"></i>
|
||||||
|
</a>{{/if}}
|
||||||
</h3>
|
</h3>
|
||||||
<ul class="item-list alterne-list">
|
<ul class="item-list alterne-list">
|
||||||
{{#each (trier sortsReserve) as |sort key|}}
|
{{#each (trier sortsReserve) as |sort key|}}
|
||||||
|
@ -5,8 +5,12 @@
|
|||||||
<li class="item list-item flexrow" data-item-id="{{sort._id}}" data-attribute="{{key}}" data-tooltip="{{#if sort.system.isrituel}}Rituel{{else}}Sort{{/if}}: {{sort.name}}">
|
<li class="item list-item flexrow" data-item-id="{{sort._id}}" data-attribute="{{key}}" data-tooltip="{{#if sort.system.isrituel}}Rituel{{else}}Sort{{/if}}: {{sort.name}}">
|
||||||
<img class="sheet-competence-img" src="{{sort.img}}"/>
|
<img class="sheet-competence-img" src="{{sort.img}}"/>
|
||||||
<span class="flex-shrink">{{itemSort-shortDraconic sort.system.draconic}}</span>
|
<span class="flex-shrink">{{itemSort-shortDraconic sort.system.draconic}}</span>
|
||||||
<span class="item-edit flex-grow-3">{{sort.name}}{{#if sort.system.isrituel}}
|
<span class="item-edit flex-grow-3">{{sort.name}}
|
||||||
<i class="fa-regular fa-book-sparkles"></i>{{/if}}</span>
|
{{#if sort.system.isrituel}}<i class="fa-solid fa-book-sparkles"></i>{{/if}}
|
||||||
|
{{#if sort.system.coutseuil}}
|
||||||
|
{{#repeat sort.system.coutseuil}}<i class="fa-solid fa-star-sharp" data-tooltip="coût de seuil: {{sort.system.coutseuil}}"></i>{{/repeat}}
|
||||||
|
{{/if}}
|
||||||
|
</span>
|
||||||
<span class="flex-grow-2">
|
<span class="flex-grow-2">
|
||||||
{{#if sort.system.caseTMRspeciale}}{{sort.system.caseTMRspeciale}}{{else}}{{upperFirst sort.system.caseTMR}}{{/if}}
|
{{#if sort.system.caseTMRspeciale}}{{sort.system.caseTMRspeciale}}{{else}}{{upperFirst sort.system.caseTMR}}{{/if}}
|
||||||
</span>
|
</span>
|
||||||
@ -15,6 +19,11 @@
|
|||||||
<a class="item-edit" data-tooltip="Modifier"><i class="fas fa-edit"></i></a>
|
<a class="item-edit" data-tooltip="Modifier"><i class="fas fa-edit"></i></a>
|
||||||
<a class="item-delete" data-tooltip="Supprimer"><i class="fas fa-trash"></i></a>
|
<a class="item-delete" data-tooltip="Supprimer"><i class="fas fa-trash"></i></a>
|
||||||
<a class="item-montrer" data-tooltip="Montrer"><i class="fas fa-comment"></i></a>
|
<a class="item-montrer" data-tooltip="Montrer"><i class="fas fa-comment"></i></a>
|
||||||
|
{{#if (and @root.options.isGM (not sort.system.isrituel))}}
|
||||||
|
<a class="sortreserve-add" data-tooltip="Ajouter ce sort en réserve">
|
||||||
|
<i class="fa-solid fa-sparkles"></i>
|
||||||
|
</a>
|
||||||
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
<span class="item-name"><h4>Personnages accordés</h4></span>
|
<h4>Personnages accordés <a class="resonance-add" data-tooltip="Ajouter un pesonnage accordé">
|
||||||
<ul class="item-list alterne-list">
|
<i class="fa-solid fa-person-circle-plus"></i>
|
||||||
|
</a></h4>
|
||||||
|
<ol class="item-list alterne-list">
|
||||||
{{#each resonances as |actor|}}
|
{{#each resonances as |actor|}}
|
||||||
<li class="item flexrow list-item" data-actor-id="{{actor.id}}">
|
<li class="item flexrow list-item" data-actor-id="{{actor.id}}">
|
||||||
<img class="sheet-competence-img subacteur-open" src="{{actor.img}}" data-tooltip="{{actor.name}}"/>
|
<img class="sheet-competence-img subacteur-open" src="{{actor.img}}" data-tooltip="{{actor.name}}"/>
|
||||||
@ -9,4 +11,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</ul>
|
</ol>
|
||||||
|
Reference in New Issue
Block a user