forked from public/foundryvtt-reve-de-dragon
Compare commits
1 Commits
foundryvtt
...
10.0.28
Author | SHA1 | Date | |
---|---|---|---|
d795968519 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,5 +1,5 @@
|
|||||||
.vscode/settings.json
|
.vscode/settings.json
|
||||||
.idea
|
.idea
|
||||||
|
todo.txt
|
||||||
todo.md
|
todo.md
|
||||||
/.vscode
|
/.vscode
|
||||||
/ignored/
|
|
||||||
|
@ -15,8 +15,7 @@
|
|||||||
"TypeNombreastral": "Nombre astral",
|
"TypeNombreastral": "Nombre astral",
|
||||||
"TypeTarot": "Carte de tarot",
|
"TypeTarot": "Carte de tarot",
|
||||||
"TypeCasetmr": "TMR spéciale",
|
"TypeCasetmr": "TMR spéciale",
|
||||||
"TypeRencontre": "Rencontre TMR",
|
"TypeRencontrestmr": "Rencontre TMR",
|
||||||
"TypeRencontrestmr": "Rencontre TMR (ancien)",
|
|
||||||
"TypeMunition": "Munition",
|
"TypeMunition": "Munition",
|
||||||
"TypeMonnaie": "Monnaie",
|
"TypeMonnaie": "Monnaie",
|
||||||
"TypeHerbe": "Herbe ou plante",
|
"TypeHerbe": "Herbe ou plante",
|
||||||
|
@ -1,9 +1,14 @@
|
|||||||
import { RdDActorSheet } from "./actor-sheet.js";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extend the basic ActorSheet with some very simple modifications
|
* Extend the basic ActorSheet with some very simple modifications
|
||||||
* @extends {ActorSheet}
|
* @extends {ActorSheet}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { RdDUtility } from "./rdd-utility.js";
|
||||||
|
import { RdDActorSheet } from "./actor-sheet.js";
|
||||||
|
import { RdDCarac } from "./rdd-carac.js";
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
export class RdDActorCreatureSheet extends RdDActorSheet {
|
export class RdDActorCreatureSheet extends RdDActorSheet {
|
||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
@ -14,7 +19,7 @@ export class RdDActorCreatureSheet extends RdDActorSheet {
|
|||||||
width: 640,
|
width: 640,
|
||||||
height: 720,
|
height: 720,
|
||||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }],
|
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }],
|
||||||
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: undefined }]
|
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }]
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
import { RdDActorSheet } from "./actor-sheet.js";
|
import { RdDActorSheet } from "./actor-sheet.js";
|
||||||
|
import { HtmlUtility } from "./html-utility.js";
|
||||||
|
import { RdDUtility } from "./rdd-utility.js";
|
||||||
|
|
||||||
export class RdDActorEntiteSheet extends RdDActorSheet {
|
export class RdDActorEntiteSheet extends RdDActorSheet {
|
||||||
|
|
||||||
@ -10,7 +12,7 @@ export class RdDActorEntiteSheet extends RdDActorSheet {
|
|||||||
width: 640,
|
width: 640,
|
||||||
height: 720,
|
height: 720,
|
||||||
tabs: [{navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac"}],
|
tabs: [{navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac"}],
|
||||||
dragDrop: [{dragSelector: ".item-list .item", dropSelector: undefined}]
|
dragDrop: [{dragSelector: ".item-list .item", dropSelector: null}]
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
/**
|
||||||
|
* Extend the basic ActorSheet with some very simple modifications
|
||||||
|
* @extends {ActorSheet}
|
||||||
|
*/
|
||||||
|
|
||||||
import { RdDUtility } from "./rdd-utility.js";
|
import { RdDUtility } from "./rdd-utility.js";
|
||||||
import { HtmlUtility } from "./html-utility.js";
|
import { HtmlUtility } from "./html-utility.js";
|
||||||
import { RdDItemArme } from "./item-arme.js";
|
import { RdDItemArme } from "./item-arme.js";
|
||||||
@ -7,16 +12,12 @@ import { Misc } from "./misc.js";
|
|||||||
import { RdDCombatManager } from "./rdd-combat.js";
|
import { RdDCombatManager } from "./rdd-combat.js";
|
||||||
import { RdDCarac } from "./rdd-carac.js";
|
import { RdDCarac } from "./rdd-carac.js";
|
||||||
import { DialogSplitItem } from "./dialog-split-item.js";
|
import { DialogSplitItem } from "./dialog-split-item.js";
|
||||||
import { ReglesOptionelles } from "./settings/regles-optionelles.js";
|
import { ReglesOptionelles } from "./regles-optionelles.js";
|
||||||
import { DialogRepos } from "./dialog-repos.js";
|
import { DialogRepos } from "./dialog-repos.js";
|
||||||
import { RdDSheetUtility } from "./rdd-sheet-utility.js";
|
import { RdDSheetUtility } from "./rdd-sheet-utility.js";
|
||||||
import { STATUSES } from "./settings/status-effects.js";
|
import { STATUSES } from "./status-effects.js";
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/**
|
|
||||||
* Extend the basic ActorSheet with some very simple modifications
|
|
||||||
* @extends {ActorSheet}
|
|
||||||
*/
|
|
||||||
export class RdDActorSheet extends ActorSheet {
|
export class RdDActorSheet extends ActorSheet {
|
||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
@ -27,7 +28,7 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
template: "systems/foundryvtt-reve-de-dragon/templates/actor-sheet.html",
|
template: "systems/foundryvtt-reve-de-dragon/templates/actor-sheet.html",
|
||||||
width: 640,
|
width: 640,
|
||||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }],
|
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }],
|
||||||
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: undefined }],
|
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
|
||||||
showCompNiveauBase: false,
|
showCompNiveauBase: false,
|
||||||
vueDetaillee: false
|
vueDetaillee: false
|
||||||
});
|
});
|
||||||
@ -101,6 +102,7 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
|
|
||||||
formData.hautreve = {
|
formData.hautreve = {
|
||||||
isDemiReve: this.actor.getEffect(STATUSES.StatusDemiReve),
|
isDemiReve: this.actor.getEffect(STATUSES.StatusDemiReve),
|
||||||
|
rencontres: duplicate(formData.system.reve.rencontre.list),
|
||||||
cacheTMR: this.actor.isTMRCache()
|
cacheTMR: this.actor.isTMRCache()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,6 +171,9 @@ export class RdDActorSheet extends ActorSheet {
|
|||||||
const item = RdDSheetUtility.getItem(event, this.actor);
|
const item = RdDSheetUtility.getItem(event, this.actor);
|
||||||
item.sheet.render(true);
|
item.sheet.render(true);
|
||||||
});
|
});
|
||||||
|
html.find('.rencontre-delete').click(async event => {
|
||||||
|
this.actor.deleteTMRRencontre(RdDSheetUtility.getItemId(event));
|
||||||
|
});
|
||||||
html.find('.item-delete').click(async event => {
|
html.find('.item-delete').click(async event => {
|
||||||
const li = RdDSheetUtility.getEventElement(event);
|
const li = RdDSheetUtility.getEventElement(event);
|
||||||
const item = this.actor.getObjet(li.data("item-id"));
|
const item = this.actor.getObjet(li.data("item-id"));
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { RdDUtility } from "./rdd-utility.js";
|
import { RdDUtility } from "./rdd-utility.js";
|
||||||
|
import { RdDSheetUtility } from "./rdd-sheet-utility.js";
|
||||||
import { RdDActorSheet } from "./actor-sheet.js";
|
import { RdDActorSheet } from "./actor-sheet.js";
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -14,7 +15,7 @@ export class RdDActorVehiculeSheet extends RdDActorSheet {
|
|||||||
width: 640,
|
width: 640,
|
||||||
height: 720,
|
height: 720,
|
||||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }],
|
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }],
|
||||||
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: undefined }]
|
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }]
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
225
module/actor.js
225
module/actor.js
@ -17,11 +17,12 @@ import { RdDAudio } from "./rdd-audio.js";
|
|||||||
import { RdDItemCompetence } from "./item-competence.js";
|
import { RdDItemCompetence } from "./item-competence.js";
|
||||||
import { RdDItemArme } from "./item-arme.js";
|
import { RdDItemArme } from "./item-arme.js";
|
||||||
import { RdDAlchimie } from "./rdd-alchimie.js";
|
import { RdDAlchimie } from "./rdd-alchimie.js";
|
||||||
import { STATUSES, StatusEffects } from "./settings/status-effects.js";
|
import { STATUSES, StatusEffects } from "./status-effects.js";
|
||||||
import { RdDItemCompetenceCreature } from "./item-competencecreature.js";
|
import { RdDItemCompetenceCreature } from "./item-competencecreature.js";
|
||||||
import { RdDItemSigneDraconique } from "./item-signedraconique.js";
|
import { RdDItemSigneDraconique } from "./item-signedraconique.js";
|
||||||
import { ReglesOptionelles } from "./settings/regles-optionelles.js";
|
import { ReglesOptionelles } from "./regles-optionelles.js";
|
||||||
import { TMRRencontres } from "./tmr-rencontres.js";
|
import { TMRRencontres } from "./tmr-rencontres.js";
|
||||||
|
import { Poetique } from "./poetique.js";
|
||||||
import { EffetsDraconiques } from "./tmr/effets-draconiques.js";
|
import { EffetsDraconiques } from "./tmr/effets-draconiques.js";
|
||||||
import { Draconique } from "./tmr/draconique.js";
|
import { Draconique } from "./tmr/draconique.js";
|
||||||
import { RdDCarac } from "./rdd-carac.js";
|
import { RdDCarac } from "./rdd-carac.js";
|
||||||
@ -35,7 +36,6 @@ import { RdDPossession } from "./rdd-possession.js";
|
|||||||
import { ENTITE_BLURETTE, ENTITE_INCARNE, ENTITE_NONINCARNE, HIDE_DICE, SHOW_DICE, SYSTEM_RDD, SYSTEM_SOCKET_ID } from "./constants.js";
|
import { ENTITE_BLURETTE, ENTITE_INCARNE, ENTITE_NONINCARNE, HIDE_DICE, SHOW_DICE, SYSTEM_RDD, SYSTEM_SOCKET_ID } from "./constants.js";
|
||||||
import { RdDConfirm } from "./rdd-confirm.js";
|
import { RdDConfirm } from "./rdd-confirm.js";
|
||||||
import { DialogValidationEncaissement } from "./dialog-validation-encaissement.js";
|
import { DialogValidationEncaissement } from "./dialog-validation-encaissement.js";
|
||||||
import { RdDRencontre } from "./item-rencontre.js";
|
|
||||||
|
|
||||||
const POSSESSION_SANS_DRACONIC = {
|
const POSSESSION_SANS_DRACONIC = {
|
||||||
img: 'systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp',
|
img: 'systems/foundryvtt-reve-de-dragon/icons/entites/possession.webp',
|
||||||
@ -56,7 +56,6 @@ export class RdDActor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static init() {
|
static init() {
|
||||||
Hooks.on("preUpdateItem", (item, change, options, id) => RdDActor.getParentActor(item)?.onPreUpdateItem(item, change, options, id));
|
Hooks.on("preUpdateItem", (item, change, options, id) => RdDActor.getParentActor(item)?.onPreUpdateItem(item, change, options, id));
|
||||||
// TODO: replace with pre-hooks?
|
|
||||||
Hooks.on("createItem", (item, options, id) => RdDActor.getParentActor(item)?.onCreateItem(item, options, id));
|
Hooks.on("createItem", (item, options, id) => RdDActor.getParentActor(item)?.onCreateItem(item, options, id));
|
||||||
Hooks.on("deleteItem", (item, options, id) => RdDActor.getParentActor(item)?.onDeleteItem(item, options, id));
|
Hooks.on("deleteItem", (item, options, id) => RdDActor.getParentActor(item)?.onDeleteItem(item, options, id));
|
||||||
Hooks.on("updateActor", (actor, change, options, actorId) => actor.onUpdateActor(change, options, actorId));
|
Hooks.on("updateActor", (actor, change, options, actorId) => actor.onUpdateActor(change, options, actorId));
|
||||||
@ -65,7 +64,7 @@ export class RdDActor extends Actor {
|
|||||||
static onSocketMessage(sockmsg) {
|
static onSocketMessage(sockmsg) {
|
||||||
switch (sockmsg.msg) {
|
switch (sockmsg.msg) {
|
||||||
case "msg_remote_actor_call":
|
case "msg_remote_actor_call":
|
||||||
return RdDActor.onRemoteActorCall(sockmsg.data, sockmsg.userId);
|
return RdDActor.onRemoteActorCall(sockmsg.data);
|
||||||
case "msg_reset_nombre_astral":
|
case "msg_reset_nombre_astral":
|
||||||
console.log("RESET ASTRAL", game.user.character);
|
console.log("RESET ASTRAL", game.user.character);
|
||||||
game.user.character.resetNombreAstral();
|
game.user.character.resetNombreAstral();
|
||||||
@ -73,26 +72,23 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static remoteActorCall(callData, userId = undefined) {
|
static remoteActorCall(callData, canExecuteLocally = () => Misc.isUniqueConnectedGM()) {
|
||||||
userId = userId ?? Misc.firstConnectedGMId();
|
if (canExecuteLocally()) {
|
||||||
if (userId == game.user.id) {
|
RdDActor.onRemoteActorCall(callData);
|
||||||
RdDActor.onRemoteActorCall(callData, userId);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
game.socket.emit(SYSTEM_SOCKET_ID, { msg: "msg_remote_actor_call", data: callData, userId: userId });
|
game.socket.emit(SYSTEM_SOCKET_ID, { msg: "msg_remote_actor_call", data: callData });
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static onRemoteActorCall(callData, userId) {
|
static onRemoteActorCall(callData) {
|
||||||
if (userId == game.user.id) {
|
const actor = game.actors.get(callData?.actorId);
|
||||||
const actor = game.actors.get(callData?.actorId);
|
if (Misc.isOwnerPlayerOrUniqueConnectedGM(actor)) { // Seul le joueur choisi effectue l'appel: le joueur courant si propriétaire de l'actor, ou le MJ sinon
|
||||||
if (Misc.isOwnerPlayerOrUniqueConnectedGM(actor)) { // Seul le joueur choisi effectue l'appel: le joueur courant si propriétaire de l'actor, ou le MJ sinon
|
const args = callData.args;
|
||||||
const args = callData.args;
|
console.info(`RdDActor.onRemoteActorCall: pour l'Actor ${callData.actorId}, appel de RdDActor.${callData.method}(`, ...args, ')');
|
||||||
console.info(`RdDActor.onRemoteActorCall: pour l'Actor ${callData.actorId}, appel de RdDActor.${callData.method}(`, ...args, ')');
|
actor[callData.method](...args);
|
||||||
actor[callData.method](...args);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -302,7 +298,7 @@ export class RdDActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getObjet(id) {
|
getObjet(id) {
|
||||||
return this.getEmbeddedDocument('Item', id);
|
return id ? this.items.find(it => it.id == id) : undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
listItemsData(type) {
|
listItemsData(type) {
|
||||||
@ -397,7 +393,7 @@ export class RdDActor extends Actor {
|
|||||||
potionImg: potion.img
|
potionImg: potion.img
|
||||||
}
|
}
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-potionenchantee-chateaudormant.html`, messageData)
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-potionenchantee-chateaudormant.html`, messageData)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -760,24 +756,25 @@ export class RdDActor extends Actor {
|
|||||||
actor: this,
|
actor: this,
|
||||||
competence: duplicate(this.getDraconicOuPossession()),
|
competence: duplicate(this.getDraconicOuPossession()),
|
||||||
canClose: false,
|
canClose: false,
|
||||||
rencontre: await TMRRencontres.getReveDeDragon(force),
|
rencontre: duplicate(TMRRencontres.getRencontre('rdd')),
|
||||||
tmr: true,
|
tmr: true,
|
||||||
use: { libre: false, conditions: false },
|
use: { libre: false, conditions: false },
|
||||||
forceCarac: { 'reve-actuel': { label: "Rêve Actuel", value: this.getReveActuel() } }
|
forceCarac: { 'reve-actuel': { label: "Rêve Actuel", value: this.getReveActuel() } }
|
||||||
}
|
}
|
||||||
|
rollData.rencontre.force = force;
|
||||||
rollData.competence.system.defaut_carac = 'reve-actuel';
|
rollData.competence.system.defaut_carac = 'reve-actuel';
|
||||||
|
|
||||||
const dialog = await RdDRoll.create(this, rollData,
|
const dialog = await RdDRoll.create(this, rollData,
|
||||||
{
|
{
|
||||||
html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-reve-de-dragon.html',
|
html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-reve-de-dragon.html',
|
||||||
options: { height: 'fit-content' }
|
options: { height: 400 }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'maitrise',
|
name: 'maitrise',
|
||||||
label: 'Maîtriser le Rêve de Dragon',
|
label: 'Maîtriser le Rêve de Dragon',
|
||||||
callbacks: [
|
callbacks: [
|
||||||
{ action: async r =>
|
this.createCallbackExperience(),
|
||||||
this.resultCombatReveDeDragon(r) }
|
{ action: async r => this.resultCombatReveDeDragon(r) }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -786,11 +783,27 @@ export class RdDActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async resultCombatReveDeDragon(rollData) {
|
async resultCombatReveDeDragon(rollData) {
|
||||||
const result = rollData.rolled.isSuccess
|
rollData.queues = [];
|
||||||
? rollData.rencontre.system.succes
|
if (rollData.rolled.isEchec) {
|
||||||
: rollData.rencontre.system.echec;
|
rollData.queues.push(await this.ajouterQueue());
|
||||||
|
}
|
||||||
|
if (rollData.rolled.isETotal) {
|
||||||
|
rollData.queues.push(await this.ajouterQueue());
|
||||||
|
}
|
||||||
|
if (rollData.rolled.isSuccess) {
|
||||||
|
await this.updatePointDeSeuil();
|
||||||
|
await this.reveActuelIncDec(rollData.rencontre.force);
|
||||||
|
}
|
||||||
|
if (rollData.rolled.isPart) {
|
||||||
|
// TODO: un dialogue pour demander le type de tête?
|
||||||
|
rollData.tete = true;
|
||||||
|
}
|
||||||
|
rollData.poesie = await Poetique.getExtrait();
|
||||||
|
|
||||||
RdDRencontre.appliquer(result.effets, {}, rollData)
|
ChatMessage.create({
|
||||||
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||||
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-reve-de-dragon.html`, rollData)
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -799,7 +812,7 @@ export class RdDActor extends Actor {
|
|||||||
type: 'sortreserve',
|
type: 'sortreserve',
|
||||||
name: sort.name,
|
name: sort.name,
|
||||||
img: sort.img,
|
img: sort.img,
|
||||||
system: { sortid: sort._id, draconic: (draconic?.name ?? sort.system.draconic), ptreve: ptreve, coord: coord, heurecible: 'Vaisseau' } }],
|
system: { sortid: sort.id, draconic: (draconic ?? sort.system.draconic), ptreve: ptreve, coord: coord, heurecible: 'Vaisseau' } }],
|
||||||
{ renderSheet: false});
|
{ renderSheet: false});
|
||||||
this.currentTMR.updateTokens();
|
this.currentTMR.updateTokens();
|
||||||
}
|
}
|
||||||
@ -933,7 +946,7 @@ export class RdDActor extends Actor {
|
|||||||
message += "<br>" + troncName;
|
message += "<br>" + troncName;
|
||||||
}
|
}
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatMessage.getWhisperRecipients(this.name),
|
whisper: ChatMessage.getWhisperRecipients(game.user.name),
|
||||||
content: message
|
content: message
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1174,8 +1187,8 @@ export class RdDActor extends Actor {
|
|||||||
const src = this.getObjet(srcId);
|
const src = this.getObjet(srcId);
|
||||||
const dest = this.getObjet(destId);
|
const dest = this.getObjet(destId);
|
||||||
const cible = this.getContenantOrParent(dest);
|
const cible = this.getContenantOrParent(dest);
|
||||||
const [empilable, message] = item.isEquipementEmpilable(dest);
|
const messageEquipementDifferent = item.messageEquipementDifferent(dest);
|
||||||
if (empilable) {
|
if (dest && !messageEquipementDifferent) {
|
||||||
await this.regrouperEquipementsSimilaires(item, dest);
|
await this.regrouperEquipementsSimilaires(item, dest);
|
||||||
result = false;
|
result = false;
|
||||||
}
|
}
|
||||||
@ -1183,11 +1196,9 @@ export class RdDActor extends Actor {
|
|||||||
else if (!cible || this.conteneurPeutContenir(cible, item)) {
|
else if (!cible || this.conteneurPeutContenir(cible, item)) {
|
||||||
await this.enleverDeConteneur(item, src, params.onEnleverConteneur);
|
await this.enleverDeConteneur(item, src, params.onEnleverConteneur);
|
||||||
await this.ajouterDansConteneur(item, cible, params.onAjouterDansConteneur);
|
await this.ajouterDansConteneur(item, cible, params.onAjouterDansConteneur);
|
||||||
if (message && !dest.isConteneur()) {
|
}
|
||||||
ui.notifications.info(cible
|
else {
|
||||||
? `${message}<br>${item.name} a été déplacé dans: ${cible.name}`
|
ui.notifications.info(messageEquipementDifferent);
|
||||||
: `${message}<br>${item.name} a été sorti du conteneur`);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1413,32 +1424,22 @@ export class RdDActor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async actionRefoulement(item) {
|
async actionRefoulement(item) {
|
||||||
const refoulement = item?.system.refoulement ?? 0;
|
const refoulement = item?.system.refoulement ?? 0;
|
||||||
if (refoulement > 0) {
|
if (refoulement>0){
|
||||||
RdDConfirm.confirmer({
|
await this.ajouterRefoulement(refoulement);
|
||||||
settingConfirmer: "confirmation-refouler",
|
await item.delete();
|
||||||
content: `<p>Prennez-vous le risque de refouler ${item.name} pour ${refoulement} points de refoulement ?</p>`,
|
|
||||||
title: 'Confirmer la refoulement',
|
|
||||||
buttonLabel: 'Refouler',
|
|
||||||
onAction: async () => {
|
|
||||||
await this.ajouterRefoulement(refoulement, `une queue ${item.name}`);
|
|
||||||
await item.delete();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async ajouterRefoulement(value = 1, refouler) {
|
async ajouterRefoulement(value = 1) {
|
||||||
const refoulement = this.system.reve.refoulement.value + value;
|
let refoulement = this.system.reve.refoulement.value + value;
|
||||||
const roll = new Roll("1d20");
|
let total = await RdDDice.rollTotal("1d20");
|
||||||
await roll.evaluate({ async: true });
|
if (total <= refoulement) {
|
||||||
await roll.toMessage({ flavor: `${this.name} refoule ${refouler} pour ${value} points de refoulement (total: ${refoulement})` });
|
|
||||||
if (roll.total <= refoulement) {
|
|
||||||
refoulement = 0;
|
refoulement = 0;
|
||||||
await this.ajouterSouffle({ chat: true });
|
await this.ajouterSouffle({ chat: true });
|
||||||
}
|
}
|
||||||
await this.update({ "system.reve.refoulement.value": refoulement });
|
await this.update({ "system.reve.refoulement.value": refoulement });
|
||||||
return roll;
|
return refoulement == 0 ? "souffle" : "none";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -1448,7 +1449,7 @@ export class RdDActor extends Actor {
|
|||||||
await this.createEmbeddedDocuments('Item', [souffle]);
|
await this.createEmbeddedDocuments('Item', [souffle]);
|
||||||
if (options.chat) {
|
if (options.chat) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||||
content: this.name + " subit un Souffle de Dragon : " + souffle.name
|
content: this.name + " subit un Souffle de Dragon : " + souffle.name
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1468,7 +1469,7 @@ export class RdDActor extends Actor {
|
|||||||
await this.createEmbeddedDocuments('Item', [queue]);
|
await this.createEmbeddedDocuments('Item', [queue]);
|
||||||
if (options.chat) {
|
if (options.chat) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||||
content: this.name + " subit une Queue de Dragon : " + queue.name
|
content: this.name + " subit une Queue de Dragon : " + queue.name
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1506,7 +1507,7 @@ export class RdDActor extends Actor {
|
|||||||
let tmr = await TMRUtility.getTMRAleatoire(tmr => accessible(tmr) && !innaccessible.includes(tmr.coord));
|
let tmr = await TMRUtility.getTMRAleatoire(tmr => accessible(tmr) && !innaccessible.includes(tmr.coord));
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: `${raison} : ré-insertion aléatoire.`,
|
content: `${raison} : ré-insertion aléatoire.`,
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name)
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name)
|
||||||
});
|
});
|
||||||
await this.forcerPositionTMRInconnue(tmr);
|
await this.forcerPositionTMRInconnue(tmr);
|
||||||
return tmr;
|
return tmr;
|
||||||
@ -1527,27 +1528,42 @@ export class RdDActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getTMRRencontres() {
|
getTMRRencontres() {
|
||||||
return this.itemTypes['rencontre'];
|
return this.system.reve.rencontre.list;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async deleteTMRRencontreAtPosition() {
|
async deleteTMRRencontreAtPosition() {
|
||||||
const demiReve = this.getDemiReve()
|
let rencontres = this.getTMRRencontres();
|
||||||
let rencontreIds = this.items.filter(it => it.type == 'rencontre' && it.system.coord == demiReve).map(it => it.id);
|
let newRencontres = rencontres.filter(it => it.coord != this.getDemiReve());
|
||||||
if (rencontreIds.length>0) {
|
if (newRencontres.length != rencontres.length) {
|
||||||
await this.deleteEmbeddedDocuments('Item', rencontreIds);
|
await this.update({ "system.reve.rencontre.list": newRencontres });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async addTMRRencontre(currentRencontre) {
|
async addTMRRencontre(currentRencontre) {
|
||||||
const toCreate = currentRencontre.toObject();
|
let rencontres = this.getTMRRencontres();
|
||||||
console.log('actor.addTMRRencontre(', toCreate,')');
|
let newRencontres = rencontres.filter(it => it.coord != this.getDemiReve());
|
||||||
this.createEmbeddedDocuments('Item', [toCreate]);
|
if (newRencontres.length == rencontres.length) {
|
||||||
|
newRencontres.push(currentRencontre);
|
||||||
|
await this.update({ "system.reve.rencontre.list": newRencontres });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async deleteTMRRencontre(rencontreKey) {
|
||||||
|
let list = duplicate(this.system.reve.rencontre.list);
|
||||||
|
let newList = [];
|
||||||
|
for (let i = 0; i < list.length; i++) {
|
||||||
|
if (i != rencontreKey)
|
||||||
|
newList.push(list[i]);
|
||||||
|
}
|
||||||
|
await this.update({ "system.reve.rencontre.list": newList });
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async updateCoordTMR(coord) {
|
async updateCoordTMR(coord) {
|
||||||
|
//console.log("UPDATE TMR", coord);
|
||||||
await this.update({ "system.reve.tmrpos.coord": coord });
|
await this.update({ "system.reve.tmrpos.coord": coord });
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1558,13 +1574,11 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async regainPointDeSeuil() {
|
async updatePointDeSeuil(value = 1) {
|
||||||
const seuil = Misc.toInt(this.system.reve.seuil.value);
|
const seuil = Misc.toInt(this.system.reve.seuil.value);
|
||||||
const seuilMax = Misc.toInt(this.system.carac.reve.value)
|
const reve = Misc.toInt(this.system.carac.reve.value);
|
||||||
+ 2 * EffetsDraconiques.countAugmentationSeuil(this);
|
if (seuil < reve) {
|
||||||
|
await this.setPointsDeSeuil(Math.min(seuil + value, reve));
|
||||||
if (seuil < seuilMax) {
|
|
||||||
await this.setPointsDeSeuil(Math.min(seuil + 1, seuilMax));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1663,7 +1677,7 @@ export class RdDActor extends Actor {
|
|||||||
const result = await this._jetEndurance(this.system.sante.endurance.value)
|
const result = await this._jetEndurance(this.system.sante.endurance.value)
|
||||||
const message = {
|
const message = {
|
||||||
content: "Jet d'Endurance : " + result.roll.total + " / " + endurance + "<br>",
|
content: "Jet d'Endurance : " + result.roll.total + " / " + endurance + "<br>",
|
||||||
whisper: ChatMessage.getWhisperRecipients(this.name)
|
whisper: ChatMessage.getWhisperRecipients(game.user.name)
|
||||||
};
|
};
|
||||||
if (result.sonne) {
|
if (result.sonne) {
|
||||||
message.content += `${this.name} a échoué son Jet d'Endurance et devient Sonné`;
|
message.content += `${this.name} a échoué son Jet d'Endurance et devient Sonné`;
|
||||||
@ -1713,7 +1727,7 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
const message = {
|
const message = {
|
||||||
content: msgText,
|
content: msgText,
|
||||||
whisper: ChatMessage.getWhisperRecipients(this.name)
|
whisper: ChatMessage.getWhisperRecipients(game.user.name)
|
||||||
};
|
};
|
||||||
ChatMessage.create(message);
|
ChatMessage.create(message);
|
||||||
}
|
}
|
||||||
@ -1822,7 +1836,7 @@ export class RdDActor extends Actor {
|
|||||||
const jetMoral = await this._jetDeMoral(situation);
|
const jetMoral = await this._jetDeMoral(situation);
|
||||||
const finMessage = (jetMoral.succes ? messageReussi : messageManque) ?? (jetMoral.ajustement == 0 ? "Vous gardez votre moral" : jetMoral.ajustement > 0 ? "Vous gagnez du moral" : "Vous perdez du moral");
|
const finMessage = (jetMoral.succes ? messageReussi : messageManque) ?? (jetMoral.ajustement == 0 ? "Vous gardez votre moral" : jetMoral.ajustement > 0 ? "Vous gagnez du moral" : "Vous perdez du moral");
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||||
content: `${finMessage} - jet ${jetMoral.succes ? "réussi" : "manqué"} en situation ${situation} (${jetMoral.jet}/${jetMoral.difficulte}).`
|
content: `${finMessage} - jet ${jetMoral.succes ? "réussi" : "manqué"} en situation ${situation} (${jetMoral.jet}/${jetMoral.difficulte}).`
|
||||||
});
|
});
|
||||||
return jetMoral.ajustement;
|
return jetMoral.ajustement;
|
||||||
@ -1935,24 +1949,15 @@ export class RdDActor extends Actor {
|
|||||||
async consommer(item, choix) {
|
async consommer(item, choix) {
|
||||||
switch (item.type) {
|
switch (item.type) {
|
||||||
case 'nourritureboisson':
|
case 'nourritureboisson':
|
||||||
return await this.consommerNourritureboisson(item.id, choix);
|
return await this.consommerNourritureboisson(item, choix);
|
||||||
case 'potion':
|
case 'potion':
|
||||||
return await this.consommerPotion(item)
|
return await this.consommerPotion(item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async consommerNourritureboisson(itemId, choix = { doses: 1, seForcer: false, supprimerSiZero: false}, userId = undefined) {
|
async consommerNourritureboisson(item, choix = { doses: 1, seForcer: false, supprimerSiZero: false }) {
|
||||||
if (userId != undefined && userId != game.user.id) {
|
|
||||||
RdDActor.remoteActorCall({
|
|
||||||
actorId: this.id,
|
|
||||||
method: 'consommerNourritureboisson',
|
|
||||||
args: [itemId, choix, userId]
|
|
||||||
},
|
|
||||||
userId)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const item = this.getObjet(itemId)
|
|
||||||
if (item.type != 'nourritureboisson') {
|
if (item.type != 'nourritureboisson') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2126,7 +2131,7 @@ export class RdDActor extends Actor {
|
|||||||
};
|
};
|
||||||
|
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-transformer-stress.html`, stressRollData)
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-transformer-stress.html`, stressRollData)
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -2365,7 +2370,7 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
isMauvaiseRencontre() { // Gestion queue/souffle 'Mauvaise Rencontre en Perpective'
|
isRencontreSpeciale() { // Gestion queue/souffle 'Mauvaise Rencontre en Perpective'
|
||||||
let addMsg = "";
|
let addMsg = "";
|
||||||
let rencSpecial = EffetsDraconiques.mauvaiseRencontre(this);
|
let rencSpecial = EffetsDraconiques.mauvaiseRencontre(this);
|
||||||
if (rencSpecial) {
|
if (rencSpecial) {
|
||||||
@ -2377,7 +2382,7 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: "Vous êtes sous le coup d'une Mauvaise Rencontre en Persective." + addMsg,
|
content: "Vous êtes sous le coup d'une Mauvaise Rencontre en Persective." + addMsg,
|
||||||
whisper: ChatMessage.getWhisperRecipients(this.name)
|
whisper: ChatMessage.getWhisperRecipients(game.user.name)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return rencSpecial;
|
return rencSpecial;
|
||||||
@ -2389,7 +2394,7 @@ export class RdDActor extends Actor {
|
|||||||
if (countInertieDraconique > 0) {
|
if (countInertieDraconique > 0) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: `Vous êtes sous le coup d'Inertie Draconique : vous perdrez ${countInertieDraconique + 1} cases de Fatigue par déplacement au lieu d'une.`,
|
content: `Vous êtes sous le coup d'Inertie Draconique : vous perdrez ${countInertieDraconique + 1} cases de Fatigue par déplacement au lieu d'une.`,
|
||||||
whisper: ChatMessage.getWhisperRecipients(this.name)
|
whisper: ChatMessage.getWhisperRecipients(game.user.name)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return countInertieDraconique + 1;
|
return countInertieDraconique + 1;
|
||||||
@ -2401,7 +2406,7 @@ export class RdDActor extends Actor {
|
|||||||
await this.reveActuelIncDec(-1);
|
await this.reveActuelIncDec(-1);
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: "Vous êtes sous le coup d'un Péage : l'entrée sur cette case vous a coûté 1 Point de Rêve (déduit automatiquement).",
|
content: "Vous êtes sous le coup d'un Péage : l'entrée sur cette case vous a coûté 1 Point de Rêve (déduit automatiquement).",
|
||||||
whisper: ChatMessage.getWhisperRecipients(this.name)
|
whisper: ChatMessage.getWhisperRecipients(game.user.name)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3008,7 +3013,7 @@ export class RdDActor extends Actor {
|
|||||||
// Cas de désir lancinant, pas d'expérience sur particulière
|
// Cas de désir lancinant, pas d'expérience sur particulière
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: `Vous souffrez au moins d'un Désir Lancinant, vous ne pouvez pas gagner d'expérience sur une Particulière tant que le désir n'est pas assouvi`,
|
content: `Vous souffrez au moins d'un Désir Lancinant, vous ne pouvez pas gagner d'expérience sur une Particulière tant que le désir n'est pas assouvi`,
|
||||||
whisper: ChatMessage.getWhisperRecipients(this.name)
|
whisper: ChatMessage.getWhisperRecipients(game.user.name)
|
||||||
});
|
});
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
@ -3123,12 +3128,7 @@ export class RdDActor extends Actor {
|
|||||||
case 'chance-actuelle': case 'chance actuelle':
|
case 'chance-actuelle': case 'chance actuelle':
|
||||||
return carac.chance;
|
return carac.chance;
|
||||||
}
|
}
|
||||||
|
let entry = Misc.findFirstLike(name, Object.entries(carac), { mapper: it => it[1].label, description: 'caractéristique' });
|
||||||
const caracList = Object.entries(carac);
|
|
||||||
let entry = Misc.findFirstLike(name, caracList, { mapper: it => it[0], description: 'caractéristique' });
|
|
||||||
if (!entry || entry.length ==0) {
|
|
||||||
entry = Misc.findFirstLike(name, caracList, { mapper: it => it[1].label, description: 'caractéristique' });
|
|
||||||
}
|
|
||||||
return entry && entry.length > 0 ? carac[entry[0]] : undefined;
|
return entry && entry.length > 0 ? carac[entry[0]] : undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3143,7 +3143,7 @@ export class RdDActor extends Actor {
|
|||||||
if (countMonteeLaborieuse > 0) {
|
if (countMonteeLaborieuse > 0) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: `Vous êtes sous le coup d'une Montée Laborieuse : vos montées en TMR coûtent ${countMonteeLaborieuse} Point de Rêve de plus.`,
|
content: `Vous êtes sous le coup d'une Montée Laborieuse : vos montées en TMR coûtent ${countMonteeLaborieuse} Point de Rêve de plus.`,
|
||||||
whisper: ChatMessage.getWhisperRecipients(this.name)
|
whisper: ChatMessage.getWhisperRecipients(game.user.name)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return countMonteeLaborieuse;
|
return countMonteeLaborieuse;
|
||||||
@ -3183,7 +3183,7 @@ export class RdDActor extends Actor {
|
|||||||
if (this.getReveActuel() < minReveValue) {
|
if (this.getReveActuel() < minReveValue) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: `Vous n'avez les ${minReveValue} Points de Reve nécessaires pour monter dans les Terres Médianes`,
|
content: `Vous n'avez les ${minReveValue} Points de Reve nécessaires pour monter dans les Terres Médianes`,
|
||||||
whisper: ChatMessage.getWhisperRecipients(this.name)
|
whisper: ChatMessage.getWhisperRecipients(game.user.name)
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -3661,7 +3661,10 @@ export class RdDActor extends Actor {
|
|||||||
|
|
||||||
const acheteur = achat.acheteurId ? game.actors.get(achat.acheteurId) : undefined;
|
const acheteur = achat.acheteurId ? game.actors.get(achat.acheteurId) : undefined;
|
||||||
const vendeur = achat.vendeurId ? game.actors.get(achat.vendeurId) : undefined;
|
const vendeur = achat.vendeurId ? game.actors.get(achat.vendeurId) : undefined;
|
||||||
const vente = achat.vente;
|
const messageVente = game.messages.get(achat.chatMessageIdVente);
|
||||||
|
const html = await messageVente.getHTML();
|
||||||
|
const button = html.find(".button-acheter")[0];
|
||||||
|
const vente = DialogItemAchat.venteData(button);
|
||||||
const itemId = vente.item._id;
|
const itemId = vente.item._id;
|
||||||
const isItemEmpilable = "quantite" in vente.item.system;
|
const isItemEmpilable = "quantite" in vente.item.system;
|
||||||
|
|
||||||
@ -3698,10 +3701,10 @@ export class RdDActor extends Actor {
|
|||||||
system: mergeObject(vente.item.system, { quantite: isItemEmpilable ? achat.quantiteTotal : undefined }),
|
system: mergeObject(vente.item.system, { quantite: isItemEmpilable ? achat.quantiteTotal : undefined }),
|
||||||
}
|
}
|
||||||
let listeAchat = isItemEmpilable ? [achatData] : Array.from({ length: achat.quantiteTotal }, (_, i) => achatData)
|
let listeAchat = isItemEmpilable ? [achatData] : Array.from({ length: achat.quantiteTotal }, (_, i) => achatData)
|
||||||
let items = await acheteur.createEmbeddedDocuments("Item", listeAchat);
|
let items = await acheteur.createEmbeddedDocuments("Item", listeAchat)
|
||||||
if (achat.choix.consommer && vente.item.type == 'nourritureboisson') {
|
if (achat.choix.consommer && vente.item.type == 'nourritureboisson') {
|
||||||
achat.choix.doses = achat.choix.nombreLots;
|
achat.choix.doses = achat.choix.nombreLots;
|
||||||
await acheteur.consommerNourritureboisson(items[0].id, achat.choix, vente.actingUserId);
|
await acheteur.consommerNourritureboisson(items[0], achat.choix);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (coutDeniers > 0) {
|
if (coutDeniers > 0) {
|
||||||
@ -3804,7 +3807,7 @@ export class RdDActor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_buildActorLinksList(links, actorTransformation = it => RdDActor._buildActorData(it)) {
|
_buildActorLinksList(links, actorTransformation = it => RdDActor._buildActorData(it)) {
|
||||||
return links.map(link => game.actors.get(link.id))
|
return links.map(link => game.actors.get(link.id))
|
||||||
.filter(it => it != undefined)
|
.filter(it => it != null)
|
||||||
.map(actorTransformation);
|
.map(actorTransformation);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3926,7 +3929,7 @@ export class RdDActor extends Actor {
|
|||||||
this.bonusRecuperationPotion = potionData.system.herbeBonus;
|
this.bonusRecuperationPotion = potionData.system.herbeBonus;
|
||||||
}
|
}
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-soin.html`, potionData)
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-soin.html`, potionData)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -3959,7 +3962,7 @@ export class RdDActor extends Actor {
|
|||||||
this.bonusRepos = potionData.system.herbeBonus;
|
this.bonusRepos = potionData.system.herbeBonus;
|
||||||
}
|
}
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-repos.html`, potionData)
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-repos.html`, potionData)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -3997,7 +4000,7 @@ export class RdDActor extends Actor {
|
|||||||
this.diminuerQuantiteObjet(herbeData._id, herbeData.nbBrins);
|
this.diminuerQuantiteObjet(herbeData._id, herbeData.nbBrins);
|
||||||
|
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.html`, messageData)
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.html`, messageData)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -4022,7 +4025,7 @@ export class RdDActor extends Actor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-generique.html`, potionData)
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-generique.html`, potionData)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -4157,7 +4160,7 @@ export class RdDActor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
notifyGestionTeteSouffleQueue(item, manualMessage = true) {
|
notifyGestionTeteSouffleQueue(item, manualMessage = true) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||||
content: `${this.name} a reçu un/une ${item.type}: ${item.name}, qui ${manualMessage ? "n'est pas" : "est"} géré(e) automatiquement. ${manualMessage ? manualMessage : ''}`
|
content: `${this.name} a reçu un/une ${item.type}: ${item.name}, qui ${manualMessage ? "n'est pas" : "est"} géré(e) automatiquement. ${manualMessage ? manualMessage : ''}`
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,125 +0,0 @@
|
|||||||
import { SYSTEM_RDD } from "./constants.js";
|
|
||||||
import { Grammar } from "./grammar.js";
|
|
||||||
|
|
||||||
|
|
||||||
const LATEST_USED_JOURNAL_ID = "chronologie-dernier-journal";
|
|
||||||
|
|
||||||
export class DialogChronologie extends Dialog {
|
|
||||||
|
|
||||||
static init() {
|
|
||||||
game.settings.register(SYSTEM_RDD, LATEST_USED_JOURNAL_ID, {
|
|
||||||
name: "Dernier article de journal utilisé pour enregistrer la chronologie",
|
|
||||||
scope: "client",
|
|
||||||
config: false,
|
|
||||||
default: "",
|
|
||||||
type: String
|
|
||||||
});
|
|
||||||
}
|
|
||||||
static async create() {
|
|
||||||
const dialogData = {
|
|
||||||
auteur: game.user.name,
|
|
||||||
isGM: game.user.isGM,
|
|
||||||
information: "",
|
|
||||||
journalId: game.settings.get(SYSTEM_RDD, LATEST_USED_JOURNAL_ID),
|
|
||||||
journaux: game.journal.filter(it => it.testUserPermission(game.user, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)),
|
|
||||||
dateRdD: game.system.rdd.calendrier.getCalendrier(),
|
|
||||||
heureRdD: game.system.rdd.calendrier.getCurrentHeure(),
|
|
||||||
dateReel: DialogChronologie.getCurrentDateTime()
|
|
||||||
};
|
|
||||||
const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-chronologie.html", dialogData);
|
|
||||||
const dialog = new DialogChronologie(html);
|
|
||||||
dialog.render(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(html) {
|
|
||||||
const options = {
|
|
||||||
classes: ["DialogChronologie"],
|
|
||||||
width: 500,
|
|
||||||
height: 350,
|
|
||||||
'z-index': 99999
|
|
||||||
};
|
|
||||||
const conf = {
|
|
||||||
title: "Chronologie",
|
|
||||||
content: html,
|
|
||||||
buttons: {
|
|
||||||
ajout: { label: "Ajouter", callback: it => this.ajouter() },
|
|
||||||
},
|
|
||||||
default: "ajout"
|
|
||||||
};
|
|
||||||
super(conf, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
static getCurrentDateTime() {
|
|
||||||
return new Date().toLocaleString("sv-SE", {
|
|
||||||
year: "numeric",
|
|
||||||
month: "2-digit",
|
|
||||||
day: "2-digit",
|
|
||||||
hour: "2-digit",
|
|
||||||
minute: "2-digit"
|
|
||||||
}).replace(" ", "T");
|
|
||||||
}
|
|
||||||
|
|
||||||
activateListeners(html) {
|
|
||||||
super.activateListeners(html);
|
|
||||||
}
|
|
||||||
|
|
||||||
async ajouter() {
|
|
||||||
await this.forceValidation();
|
|
||||||
const { journalId, journalEntry } = this.findJournal();
|
|
||||||
// ajouter à la page ou créer une page
|
|
||||||
this.addContentToJournal(journalEntry, await this.prepareChronologieEntry());
|
|
||||||
|
|
||||||
this.storeLatestUsedJournalEntry(journalId);
|
|
||||||
}
|
|
||||||
|
|
||||||
async forceValidation() {
|
|
||||||
await $("form.rdddialogchrono :input").change();
|
|
||||||
}
|
|
||||||
|
|
||||||
findJournal() {
|
|
||||||
const journalId = $("form.rdddialogchrono :input[name='journalId']").val();
|
|
||||||
const journalEntry = game.journal.get(journalId);
|
|
||||||
return { journalId, journalEntry };
|
|
||||||
}
|
|
||||||
|
|
||||||
async prepareChronologieEntry() {
|
|
||||||
return await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/chronologie-entry.html", this.extractJournalParameters());
|
|
||||||
}
|
|
||||||
|
|
||||||
extractJournalParameters() {
|
|
||||||
return {
|
|
||||||
auteur: $("form.rdddialogchrono :input[name='auteur']").val(),
|
|
||||||
information: $("form.rdddialogchrono :input[name='information']").val(),
|
|
||||||
dateRdD: {
|
|
||||||
jour: $("form.rdddialogchrono :input[name='dateRdD.jour']").val(),
|
|
||||||
moisRdD: $("form.rdddialogchrono :input[name='dateRdD.moisRdD.key']").val(),
|
|
||||||
annee: $("form.rdddialogchrono :input[name='dateRdD.annee']").val()
|
|
||||||
},
|
|
||||||
heureRdD: $("form.rdddialogchrono :input[name='heureRdD']").val(),
|
|
||||||
dateReel: $("form.rdddialogchrono :input[name='dateReel']").val().replace('T', ' ')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
addContentToJournal(journalEntry, content) {
|
|
||||||
let page = journalEntry.pages.find(p => p.type == 'text' && Grammar.equalsInsensitive(p.name, 'Chronologie'));
|
|
||||||
if (page) {
|
|
||||||
page.update({ 'text.content': content + '\n' + page.text.content });
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
journalEntry.createEmbeddedDocuments('JournalEntryPage', [this.newPageChronologie(content)]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
newPageChronologie(content) {
|
|
||||||
return new JournalEntryPage({
|
|
||||||
name: 'Chronologie',
|
|
||||||
type: 'text',
|
|
||||||
title: { show: true, level: 1 },
|
|
||||||
text: { content: content, format: 1 }
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
storeLatestUsedJournalEntry(journalId) {
|
|
||||||
game.settings.set(SYSTEM_RDD, LATEST_USED_JOURNAL_ID, journalId);
|
|
||||||
}
|
|
||||||
}
|
|
@ -22,7 +22,6 @@ export class DialogItemAchat extends Dialog {
|
|||||||
const prixLot = Monnaie.arrondiDeniers(button.attributes['data-prixLot']?.value ?? 0);
|
const prixLot = Monnaie.arrondiDeniers(button.attributes['data-prixLot']?.value ?? 0);
|
||||||
return {
|
return {
|
||||||
item: json ? JSON.parse(json) : undefined,
|
item: json ? JSON.parse(json) : undefined,
|
||||||
actingUserId: game.user.id,
|
|
||||||
vendeurId: vendeurId,
|
vendeurId: vendeurId,
|
||||||
vendeur: vendeur,
|
vendeur: vendeur,
|
||||||
acheteur: acheteur,
|
acheteur: acheteur,
|
||||||
@ -40,7 +39,6 @@ export class DialogItemAchat extends Dialog {
|
|||||||
chatMessageIdVente: RdDUtility.findChatMessageId(button)
|
chatMessageIdVente: RdDUtility.findChatMessageId(button)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
static async onAcheter(venteData) {
|
static async onAcheter(venteData) {
|
||||||
const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-achat.html`, venteData);
|
const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-achat.html`, venteData);
|
||||||
const dialog = new DialogItemAchat(html, venteData);
|
const dialog = new DialogItemAchat(html, venteData);
|
||||||
@ -54,7 +52,7 @@ export class DialogItemAchat extends Dialog {
|
|||||||
const actionAchat = venteData.prixLot > 0 ? "Acheter" : "Prendre";
|
const actionAchat = venteData.prixLot > 0 ? "Acheter" : "Prendre";
|
||||||
const buttons = {};
|
const buttons = {};
|
||||||
if (isConsommable) {
|
if (isConsommable) {
|
||||||
buttons["consommer"] = { label: venteData.item.system.boisson ? "Boire" : "Manger", callback: it => this.onAchatConsommer() }
|
buttons["consommer"] = { label: venteData.item.system.boisson ? "Boire" : "Manger", callback: it => { this.onAchatConsommer(); } }
|
||||||
}
|
}
|
||||||
buttons[actionAchat] = { label: actionAchat, callback: it => { this.onAchat(); } };
|
buttons[actionAchat] = { label: actionAchat, callback: it => { this.onAchat(); } };
|
||||||
buttons["decliner"] = { label: "Décliner", callback: it => { } };
|
buttons["decliner"] = { label: "Décliner", callback: it => { } };
|
||||||
@ -78,8 +76,7 @@ export class DialogItemAchat extends Dialog {
|
|||||||
acheteurId: this.venteData.acheteur?.id,
|
acheteurId: this.venteData.acheteur?.id,
|
||||||
prixTotal: this.venteData.prixTotal,
|
prixTotal: this.venteData.prixTotal,
|
||||||
chatMessageIdVente: this.venteData.chatMessageIdVente,
|
chatMessageIdVente: this.venteData.chatMessageIdVente,
|
||||||
choix: this.venteData.choix,
|
choix: this.venteData.choix
|
||||||
vente: this.venteData
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@ import { Misc } from "./misc.js";
|
|||||||
export class DialogRepos extends Dialog {
|
export class DialogRepos extends Dialog {
|
||||||
|
|
||||||
static async create(actor) {
|
static async create(actor) {
|
||||||
const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-repos.html", actor);
|
let actorData = actor
|
||||||
const dialog = new DialogRepos(html, actor);
|
const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-repos.html", actorData);
|
||||||
dialog.render(true);
|
new DialogRepos(html, actor).render(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(html, actor) {
|
constructor(html, actor) {
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { RdDSheetUtility } from "./rdd-sheet-utility.js";
|
||||||
|
|
||||||
export class DialogStress extends Dialog {
|
export class DialogStress extends Dialog {
|
||||||
|
|
||||||
|
@ -1,137 +0,0 @@
|
|||||||
import { ChatUtility } from "./chat-utility.js";
|
|
||||||
import { Poetique } from "./poetique.js";
|
|
||||||
import { RdDDice } from "./rdd-dice.js";
|
|
||||||
import { TMRUtility } from "./tmr-utility.js";
|
|
||||||
|
|
||||||
export class EffetsRencontre {
|
|
||||||
|
|
||||||
static messager = async (dialog, context) => {
|
|
||||||
dialog.setRencontreState('messager', TMRUtility.getTMRPortee(context.tmr.coord, context.rencontre.system.force));
|
|
||||||
}
|
|
||||||
|
|
||||||
static passeur = async (dialog, context) => {
|
|
||||||
dialog.setRencontreState('passeur', TMRUtility.getTMRPortee(context.tmr.coord, context.rencontre.system.force));
|
|
||||||
}
|
|
||||||
|
|
||||||
static teleportation_typecase = async (dialog, context) => {
|
|
||||||
dialog.setRencontreState('changeur', TMRUtility.getCasesType(context.tmr.type));
|
|
||||||
}
|
|
||||||
|
|
||||||
static rencontre_persistante = async (dialog, context) => {
|
|
||||||
dialog.setRencontreState('persistant', []);
|
|
||||||
}
|
|
||||||
|
|
||||||
static reve_plus_force = async (dialog, context) => { await EffetsRencontre.$reve_plus(context.actor, context.rencontre.system.force) }
|
|
||||||
static reve_plus_1 = async (dialog, context) => { await EffetsRencontre.$reve_plus(context.actor, 1) }
|
|
||||||
static reve_moins_force = async (dialog, context) => { await EffetsRencontre.$reve_plus(context.actor, -context.rencontre.system.force) }
|
|
||||||
static reve_moins_1 = async (dialog, context) => { await EffetsRencontre.$reve_plus(context.actor, -1) }
|
|
||||||
static $reve_plus = async (actor, valeur) => { await actor.reveActuelIncDec(valeur) }
|
|
||||||
|
|
||||||
static vie_moins_1 = async (dialog, context) => { await EffetsRencontre.$vie_plus(context.actor, -1) }
|
|
||||||
static vie_moins_force = async (dialog, context) => { await EffetsRencontre.$vie_plus(context.actor, -context.rencontre.system.force) }
|
|
||||||
static $vie_plus = async (actor, valeur) => { await actor.santeIncDec("vie", valeur) }
|
|
||||||
|
|
||||||
static moral_plus_1 = async (dialog, context) => { await EffetsRencontre.$vie_plus(context.actor, 1) }
|
|
||||||
static moral_moins_1 = async (dialog, context) => { await EffetsRencontre.$vie_plus(context.actor, -1) }
|
|
||||||
static $moral_plus = async (actor, valeur) => { await actor.moralIncDec(valeur) }
|
|
||||||
|
|
||||||
static end_moins_1 = async (dialog, context) => { await EffetsRencontre.$vie_plus(context.actor, -1) }
|
|
||||||
static end_moins_force = async (dialog, context) => { await EffetsRencontre.$vie_plus(context.actor, -context.rencontre.system.force) }
|
|
||||||
static $end_plus = async (actor, valeur) => { await actor.santeIncDec("endurance", valeur) }
|
|
||||||
|
|
||||||
static fatigue_plus_1 = async (dialog, context) => { await EffetsRencontre.$fatigue_plus(context.actor, 1) }
|
|
||||||
static fatigue_plus_force = async (dialog, context) => { await EffetsRencontre.$fatigue_plus(context.actor, context.rencontre.system.force) }
|
|
||||||
static fatigue_moins_1 = async (dialog, context) => { await EffetsRencontre.$fatigue_plus(context.actor, -1) }
|
|
||||||
static fatigue_moins_force = async (dialog, context) => { await EffetsRencontre.$fatigue_plus(context.actor, -context.rencontre.system.force) }
|
|
||||||
static $fatigue_plus = async (actor, valeur) => { await actor.santeIncDec("fatigue", valeur) }
|
|
||||||
|
|
||||||
static perte_chance = async (dialog, context) => {
|
|
||||||
const perte = context.rolled.isETotal ? context.rencontre.system.force : 1;
|
|
||||||
await context.actor.chanceActuelleIncDec("fatigue", -perte);
|
|
||||||
}
|
|
||||||
|
|
||||||
static xp_sort_force = async (dialog, context) => {
|
|
||||||
let competence = context.competence;
|
|
||||||
if (competence) {
|
|
||||||
const xpSort = Misc.toInt(competence.system.xp_sort) + context.rencontre.system.force;
|
|
||||||
await this.updateEmbeddedDocuments("Item", [{ _id: compData._id, 'system.xp_sort': xpSort }]);
|
|
||||||
await this.updateExperienceLog("XP Sort", xpSort, `Rencontre d'un ${context.rencontre.name} en TMR`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static stress_plus_1 = async (dialog, context) => {
|
|
||||||
await context.actor.addCompteurValue('stress', 1, `Rencontre d'un ${context.rencontre.name} en TMR`);
|
|
||||||
}
|
|
||||||
|
|
||||||
static reinsertion = async (dialog, context) => {
|
|
||||||
await EffetsRencontre.$reinsertion(dialog, context.actor, it => true)
|
|
||||||
}
|
|
||||||
|
|
||||||
static teleportation_aleatoire_typecase = async (dialog, context) => {
|
|
||||||
await EffetsRencontre.$reinsertion(dialog, context.actor, it => it.type == context.tmr.type && it.coord != context.tmr.coord)
|
|
||||||
}
|
|
||||||
|
|
||||||
static demireve_rompu = async (dialog, context) => {
|
|
||||||
dialog.close()
|
|
||||||
}
|
|
||||||
|
|
||||||
static sort_aleatoire = async (dialog, context) => {
|
|
||||||
context.sortReserve = await RdDDice.rollOneOf(context.actor.itemTypes['sortreserve']);
|
|
||||||
if (context.sortReserve) {
|
|
||||||
context.newTMR = TMRUtility.getTMR(context.sortReserve.system.coord);
|
|
||||||
await dialog.positionnerDemiReve(context.newTMR.coord);
|
|
||||||
await dialog.processSortReserve(context.sortReserve);
|
|
||||||
dialog.close();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
await EffetsRencontre.$reinsertion(dialog, context.actor, it => true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static deplacement_aleatoire = async (dialog, context) => {
|
|
||||||
const oldCoord = context.actor.system.reve.tmrpos.coord;
|
|
||||||
const newTmr = await TMRUtility.deplaceTMRAleatoire(context.actor, oldCoord);
|
|
||||||
await dialog.positionnerDemiReve(newTmr.coord)
|
|
||||||
}
|
|
||||||
|
|
||||||
static rdd_part_tete = async (dialog, context) => {
|
|
||||||
mergeObject(context, {
|
|
||||||
tete: context.rolled.isPart,
|
|
||||||
poesie: await Poetique.getExtrait()
|
|
||||||
})
|
|
||||||
ChatMessage.create({
|
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(context.actor.name),
|
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-reve-de-dragon.html`, context)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
static rdd_echec_queue = async (dialog, context) => {
|
|
||||||
mergeObject(context, {
|
|
||||||
queues: [await context.actor.ajouterQueue()],
|
|
||||||
poesie: await Poetique.getExtrait()
|
|
||||||
})
|
|
||||||
if (context.rolled.isETotal) {
|
|
||||||
context.queues.push(await context.actor.ajouterQueue());
|
|
||||||
}
|
|
||||||
|
|
||||||
ChatMessage.create({
|
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-reve-de-dragon.html`, context)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
static experience_particuliere = async (dialog, context) => {
|
|
||||||
await context.actor.appliquerAjoutExperience(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
static regain_seuil = async (dialog, context) => {
|
|
||||||
await context.actor.regainPointDeSeuil()
|
|
||||||
}
|
|
||||||
|
|
||||||
static async $reinsertion(dialog, actor, filter) {
|
|
||||||
const newTMR = await TMRUtility.getTMRAleatoire(filter);
|
|
||||||
await actor.forcerPositionTMRInconnue(newTMR);
|
|
||||||
await dialog.positionnerDemiReve(newTMR.coord);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -19,14 +19,10 @@ export class Grammar {
|
|||||||
return word.match(/^[aeiouy]/i)
|
return word.match(/^[aeiouy]/i)
|
||||||
}
|
}
|
||||||
|
|
||||||
static equalsInsensitive(a, b) {
|
|
||||||
return Grammar.toLowerCaseNoAccent(a) == Grammar.toLowerCaseNoAccent(b)
|
|
||||||
}
|
|
||||||
|
|
||||||
static includesLowerCaseNoAccent(value, content) {
|
static includesLowerCaseNoAccent(value, content) {
|
||||||
return Grammar.toLowerCaseNoAccent(value).includes(Grammar.toLowerCaseNoAccent(content));
|
return Grammar.toLowerCaseNoAccent(value).includes(Grammar.toLowerCaseNoAccent(content));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static toLowerCaseNoAccent(words) {
|
static toLowerCaseNoAccent(words) {
|
||||||
return words?.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "") ?? words;
|
return words?.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "") ?? words;
|
||||||
|
@ -85,9 +85,9 @@ export class RdDItemCompetence extends Item {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static getVoieDraconic(competences, voie) {
|
static getVoieDraconic(competences, voie) {
|
||||||
return RdDItemCompetence.findFirstItem(competences, voie, {
|
return RdDItemCompetence.findFirstItem(competences, voie, {
|
||||||
preFilter: it => it.isCompetence() && RdDItemCompetence.isDraconic(it),
|
preFilter: it => it.isCompetence() && RdDItemCompetence.isDraconic(it),
|
||||||
description: 'Draconic',
|
description: 'Draconic',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -199,7 +199,7 @@ export class RdDItemCompetence extends Item {
|
|||||||
item.system.isStressLevelUp = (xpManquant > 0 && stressTransforme >= xpManquant && item.system.niveau < item.system.niveau_archetype);
|
item.system.isStressLevelUp = (xpManquant > 0 && stressTransforme >= xpManquant && item.system.niveau < item.system.niveau_archetype);
|
||||||
item.system.stressXpMax = 0;
|
item.system.stressXpMax = 0;
|
||||||
if (xpManquant > 0 && stressTransforme > 0 && item.system.niveau < item.system.niveau_archetype) {
|
if (xpManquant > 0 && stressTransforme > 0 && item.system.niveau < item.system.niveau_archetype) {
|
||||||
item.system.stressXpMax = Math.min(xpManquant, stressTransforme);
|
item.system.stressXpMax = Math.min(xpManquant , stressTransforme);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -219,10 +219,10 @@ export class RdDItemCompetence extends Item {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static findCompetence(list, idOrName, options = {}) {
|
static findCompetence(list, idOrName, options = {}) {
|
||||||
if (idOrName == undefined || idOrName == "") {
|
if (idOrName == undefined) {
|
||||||
return RdDItemCompetence.sansCompetence();
|
return undefined;
|
||||||
}
|
}
|
||||||
options = mergeObject(options, { preFilter: it => it.isCompetence(), description: 'compétence' }, { overwrite: false });
|
options = mergeObject(options, { preFilter: it => it.isCompetence(), description: 'compétence' }, {overwrite: false});
|
||||||
return RdDItemCompetence.findFirstItem(list, idOrName, options);
|
return RdDItemCompetence.findFirstItem(list, idOrName, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,23 +231,6 @@ export class RdDItemCompetence extends Item {
|
|||||||
return Misc.findAllLike(name, list, { filter: it => it.isCompetence(), description: 'compétence' });
|
return Misc.findAllLike(name, list, { filter: it => it.isCompetence(), description: 'compétence' });
|
||||||
}
|
}
|
||||||
|
|
||||||
static sansCompetence() {
|
|
||||||
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))
|
||||||
?? Misc.findFirstLike(idOrName, list, options);
|
?? Misc.findFirstLike(idOrName, list, options);
|
||||||
|
@ -1,108 +0,0 @@
|
|||||||
import { RdDRencontre } from "./item-rencontre.js";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Item sheet pour configurer les rencontres
|
|
||||||
* @extends {ItemSheet}
|
|
||||||
*/
|
|
||||||
export class RdDRencontreItemSheet extends ItemSheet {
|
|
||||||
|
|
||||||
/** @override */
|
|
||||||
static get defaultOptions() {
|
|
||||||
return mergeObject(super.defaultOptions, {
|
|
||||||
classes: ["rdd", "sheet", "item"],
|
|
||||||
template: "systems/foundryvtt-reve-de-dragon/templates/item-rencontre-sheet.html",
|
|
||||||
width: 500,
|
|
||||||
height: 500,
|
|
||||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "carac" }]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
_getHeaderButtons() {
|
|
||||||
let buttons = super._getHeaderButtons();
|
|
||||||
buttons.unshift({ class: "post", icon: "fas fa-comment", onclick: ev => this.item.postItem() });
|
|
||||||
return buttons;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
/** @override */
|
|
||||||
setPosition(options = {}) {
|
|
||||||
const position = super.setPosition(options);
|
|
||||||
const sheetHeader = this.element.find(".sheet-header");
|
|
||||||
const sheetBody = this.element.find(".sheet-body");
|
|
||||||
sheetBody.css("height", position.height - sheetHeader[0].clientHeight)
|
|
||||||
return position;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
async getData() {
|
|
||||||
const formData = duplicate(this.item);
|
|
||||||
mergeObject(formData, {
|
|
||||||
title: formData.name,
|
|
||||||
isGM: game.user.isGM,
|
|
||||||
owner: this.actor?.isOwner,
|
|
||||||
isOwned: this.actor ? true : false,
|
|
||||||
actorId: this.actor?.id,
|
|
||||||
editable: this.isEditable,
|
|
||||||
cssClass: this.isEditable ? "editable" : "locked",
|
|
||||||
effets: {
|
|
||||||
succes: {
|
|
||||||
liste: RdDRencontre.getEffetsSucces(),
|
|
||||||
select: RdDRencontre.mapEffets(this.item.system.succes.effets)
|
|
||||||
},
|
|
||||||
echec: {
|
|
||||||
liste: RdDRencontre.getEffetsEchec(),
|
|
||||||
select: RdDRencontre.mapEffets(this.item.system.echec.effets)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return formData;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
/** @override */
|
|
||||||
activateListeners(html) {
|
|
||||||
super.activateListeners(html);
|
|
||||||
if (!this.options.editable) return;
|
|
||||||
html.find("a.effet-add").click(event => this.onAddEffet(event));
|
|
||||||
html.find("a.effet-delete").click(event => this.onDeleteEffet(event));
|
|
||||||
}
|
|
||||||
|
|
||||||
async onAddEffet(event) {
|
|
||||||
const resultat = $(event.currentTarget)?.data("effet-resultat");
|
|
||||||
const keyEffets = `system.${resultat}.effets`;
|
|
||||||
|
|
||||||
const code = $(event.currentTarget)?.data("effet-code");
|
|
||||||
const liste = RdDRencontre.getListeEffets(this.item, resultat);
|
|
||||||
liste.push(code);
|
|
||||||
|
|
||||||
await this._updateEffetsRencontre(keyEffets, liste);
|
|
||||||
}
|
|
||||||
|
|
||||||
async onDeleteEffet(event) {
|
|
||||||
const resultat = $(event.currentTarget)?.data("effet-resultat");
|
|
||||||
const keyEffets = `system.${resultat}.effets`;
|
|
||||||
|
|
||||||
const pos = $(event.currentTarget)?.data("effet-pos");
|
|
||||||
const liste = RdDRencontre.getListeEffets(this.item, resultat);
|
|
||||||
liste.splice(pos, 1);
|
|
||||||
|
|
||||||
await this._updateEffetsRencontre(keyEffets, liste);
|
|
||||||
}
|
|
||||||
|
|
||||||
async _updateEffetsRencontre(key, liste) {
|
|
||||||
const updates = {};
|
|
||||||
updates[key] = liste;
|
|
||||||
this.item.update(updates);
|
|
||||||
}
|
|
||||||
|
|
||||||
get template() {
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
return `systems/foundryvtt-reve-de-dragon/templates/item-rencontre-sheet.html`;
|
|
||||||
}
|
|
||||||
|
|
||||||
get title() {
|
|
||||||
return `Rencontre: ${this.object.name}`;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,71 +0,0 @@
|
|||||||
import { EffetsRencontre } from "./effets-rencontres.js";
|
|
||||||
|
|
||||||
const tableEffets = [
|
|
||||||
{ code: "messager", resultat: "succes", description: "Envoie un message à (force) cases", method: EffetsRencontre.messager },
|
|
||||||
{ code: "passeur", resultat: "succes", description: "Déplacer le demi-rêve à (force) cases", method: EffetsRencontre.passeur},
|
|
||||||
{ code: "reve+f", resultat: "succes", description: "Gain de (force) points de rêve" , method: EffetsRencontre.reve_plus_force},
|
|
||||||
{ code: "teleport", resultat: "succes", description: "Déplacer le demi-rêve (même type)", method: EffetsRencontre.teleportation_typecase },
|
|
||||||
{ code: "part+tete", resultat: "succes", description: "Tête de dragon sur réussite particulière", method: EffetsRencontre.rdd_part_tete },
|
|
||||||
{ code: "part+xp", resultat: "succes", description: "Expérience sur réussite particulière", method: EffetsRencontre.experience_particuliere },
|
|
||||||
{ code: "seuil", resultat: "succes", description: "Récupération de seuil de rêve", method: EffetsRencontre.regain_seuil },
|
|
||||||
|
|
||||||
{ code: "reve-1", resultat: "echec", description: "Perte de 1 point de rêve", method: EffetsRencontre.reve_moins_1 },
|
|
||||||
{ code: "reve-f", resultat: "echec", description: "Perte de (force) points de rêve", method: EffetsRencontre.reve_moins_force },
|
|
||||||
{ code: "vie-1", resultat: "echec", description: "Perte de 1 point de vie", method: EffetsRencontre.vie_moins_1 },
|
|
||||||
{ code: "reinsere", resultat: "echec", description: "Réinsertion aléatoire", method: EffetsRencontre.reinsertion },
|
|
||||||
{ code: "persistant", resultat: "echec", description: "Bloque le demi-rêve", method: EffetsRencontre.rencontre_persistante },
|
|
||||||
{ code: "teleport-aleatoire", resultat: "echec", description: "Déplacement aléatoire (même type)", method: EffetsRencontre.teleportation_aleatoire_typecase },
|
|
||||||
{ code: "aleatoire", resultat: "echec", description: "Déplacement aléatoire", method: EffetsRencontre.deplacement_aleatoire },
|
|
||||||
{ code: "sort-aleatoire", resultat: "echec", description: "Déclenche un sort en réserve aléatoire", method: EffetsRencontre.sort_aleatoire },
|
|
||||||
{ code: "rompu", resultat: "echec", description: "Demi-rêve interrompu", method: EffetsRencontre.demireve_rompu },
|
|
||||||
{ code: "echec-queue", resultat: "echec", description: "Queue(s) de dragon sur échec", method: EffetsRencontre.rdd_echec_queue },
|
|
||||||
|
|
||||||
{ code: "reve+1", resultat: "succes", description: "Gain de 1 point de rêve", method: EffetsRencontre.reve_plus_1 },
|
|
||||||
{ code: "vie-f", resultat: "echec", description: "Perte de (force) points de vie", method: EffetsRencontre.vie_moins_force },
|
|
||||||
{ code: "moral+1", resultat: "succes", description: "Gain de 1 point de moral", method: EffetsRencontre.moral_plus_1 },
|
|
||||||
{ code: "moral-1", resultat: "echec", description: "Perte de 1 point de moral", method: EffetsRencontre.moral_moins_1 },
|
|
||||||
{ code: "xpsort+f", resultat: "succes", description: "Gain de (force) xp sort", method: EffetsRencontre.xp_sort_force },
|
|
||||||
{ code: "endurance-1", resultat: "echec", description: "Perte de 1 point d'endurance", method: EffetsRencontre.end_moins_1 },
|
|
||||||
{ code: "endurance-f", resultat: "echec", description: "Perte de (force) points d'endurance", method: EffetsRencontre.end_moins_force },
|
|
||||||
{ code: "fatigue+1", resultat: "echec", description: "Coup de fatigue de 1 point", method: EffetsRencontre.fatigue_plus_1},
|
|
||||||
{ code: "fatigue+f", resultat: "echec", description: "Coup de fatigue de 1 (force) points", method: EffetsRencontre.fatigue_plus_force },
|
|
||||||
{ code: "fatigue-1", resultat: "succes", description: "Récupération de 1 point de fatigue", method: EffetsRencontre.fatigue_moins_1},
|
|
||||||
{ code: "fatigue-f", resultat: "succes", description: "Récupération de 1 (force) points de fatigue", method: EffetsRencontre.fatigue_moins_force },
|
|
||||||
{ code: "perte-chance", resultat: "echec", description: "Perte de chance actuelle", method: EffetsRencontre.perte_chance },
|
|
||||||
{ code: "stress+1", resultat: "succes", description: "Gain de 1 point de stress", method: EffetsRencontre.stress_plus_1 },
|
|
||||||
// { code: "epart-souffle", resultat: "echec", description: "Souffle de dragon sur échec particulier" },
|
|
||||||
];
|
|
||||||
|
|
||||||
export class RdDRencontre {
|
|
||||||
|
|
||||||
static getEffetsSucces() { return RdDRencontre.getEffets("succes"); }
|
|
||||||
static getEffetsEchec() { return RdDRencontre.getEffets("echec"); }
|
|
||||||
static getEffets(resultat) {
|
|
||||||
return tableEffets.filter(e => resultat == e.resultat);
|
|
||||||
}
|
|
||||||
|
|
||||||
static mapEffets(liste) {
|
|
||||||
return liste.map(it => RdDRencontre.getEffet(it));
|
|
||||||
}
|
|
||||||
|
|
||||||
static getListeEffets(item, reussite) {
|
|
||||||
if (reussite == 'echec') {
|
|
||||||
return [...item.system.echec.effets];
|
|
||||||
}
|
|
||||||
if (reussite == 'succes') {
|
|
||||||
return [...item.system.succes.effets];
|
|
||||||
}
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
static getEffet(code) {
|
|
||||||
return tableEffets.find(it => code == it.code)
|
|
||||||
}
|
|
||||||
|
|
||||||
static async appliquer(codes, tmrDialog, rencData) {
|
|
||||||
for(const effet of RdDRencontre.mapEffets(codes)){
|
|
||||||
await effet.method(tmrDialog, rencData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -4,8 +4,9 @@ import { RdDAlchimie } from "./rdd-alchimie.js";
|
|||||||
import { RdDItemCompetence } from "./item-competence.js";
|
import { RdDItemCompetence } from "./item-competence.js";
|
||||||
import { RdDHerbes } from "./rdd-herbes.js";
|
import { RdDHerbes } from "./rdd-herbes.js";
|
||||||
import { RdDGemme } from "./rdd-gemme.js";
|
import { RdDGemme } from "./rdd-gemme.js";
|
||||||
|
import { Misc } from "./misc.js";
|
||||||
import { HtmlUtility } from "./html-utility.js";
|
import { HtmlUtility } from "./html-utility.js";
|
||||||
import { ReglesOptionelles } from "./settings/regles-optionelles.js";
|
import { ReglesOptionelles } from "./regles-optionelles.js";
|
||||||
import { SYSTEM_RDD } from "./constants.js";
|
import { SYSTEM_RDD } from "./constants.js";
|
||||||
import { RdDSheetUtility } from "./rdd-sheet-utility.js";
|
import { RdDSheetUtility } from "./rdd-sheet-utility.js";
|
||||||
|
|
||||||
@ -66,6 +67,8 @@ export class RdDItemSheet extends ItemSheet {
|
|||||||
img: this.item.img,
|
img: this.item.img,
|
||||||
name: this.item.name,
|
name: this.item.name,
|
||||||
system: this.item.system,
|
system: this.item.system,
|
||||||
|
// TODO: v10 remove
|
||||||
|
data: this.item.system,
|
||||||
isGM: game.user.isGM,
|
isGM: game.user.isGM,
|
||||||
actorId: this.actor?.id,
|
actorId: this.actor?.id,
|
||||||
owner: this.item.isOwner,
|
owner: this.item.isOwner,
|
||||||
@ -92,9 +95,6 @@ export class RdDItemSheet extends ItemSheet {
|
|||||||
if (this.item.type == 'arme') {
|
if (this.item.type == 'arme') {
|
||||||
formData.competences = await RdDUtility.loadItems(it => RdDItemCompetence.isCompetenceArme(it), RdDItemCompetence.actorCompendium(this.actor?.type))
|
formData.competences = await RdDUtility.loadItems(it => RdDItemCompetence.isCompetenceArme(it), RdDItemCompetence.actorCompendium(this.actor?.type))
|
||||||
}
|
}
|
||||||
if (['sort', 'sortreserve'].includes(this.item.type)) {
|
|
||||||
formData.competences = await RdDUtility.loadItems(it => RdDItemCompetence.isDraconic(it), RdDItemCompetence.actorCompendium(this.actor?.type))
|
|
||||||
}
|
|
||||||
if (this.item.type == 'recettecuisine') {
|
if (this.item.type == 'recettecuisine') {
|
||||||
formData.ingredients = await TextEditor.enrichHTML(this.object.system.ingredients, {async: true})
|
formData.ingredients = await TextEditor.enrichHTML(this.object.system.ingredients, {async: true})
|
||||||
}
|
}
|
||||||
@ -250,9 +250,9 @@ export class RdDItemSheet extends ItemSheet {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
_updateObject(event, formData) {
|
_updateObject(event, formData) { // Deprecated en v0.8 à clarifier
|
||||||
// Données de bonus de cases ?
|
// Données de bonus de cases ?
|
||||||
formData['system.bonuscase'] = RdDItemSort.buildBonusCaseStringFromFormData(formData.bonusValue, formData.caseValue);
|
formData = RdDItemSort.buildBonusCaseStringFromFormData(formData);
|
||||||
|
|
||||||
return this.item.update(formData);
|
return this.item.update(formData);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { SYSTEM_RDD } from "./constants.js";
|
import { SYSTEM_RDD } from "./constants.js";
|
||||||
import { RdDItemSigneDraconique } from "./item-signedraconique.js";
|
import { RdDItemSigneDraconique } from "./item-signedraconique.js";
|
||||||
import { TMRUtility } from "./tmr-utility.js";
|
import { Misc } from "./misc.js";
|
||||||
|
import { TMRType, TMRUtility } from "./tmr-utility.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Item sheet pour signes draconiques
|
* Item sheet pour signes draconiques
|
||||||
|
@ -63,21 +63,26 @@ export class RdDItemSort extends Item {
|
|||||||
/** Met à jour les données de formulaire
|
/** Met à jour les données de formulaire
|
||||||
* si static des bonus de cases sont présents
|
* si static des bonus de cases sont présents
|
||||||
* */
|
* */
|
||||||
static buildBonusCaseStringFromFormData( bonuses, cases ) {
|
static buildBonusCaseStringFromFormData( formData ) {
|
||||||
if ( bonuses ) {
|
if ( formData.bonusValue ) {
|
||||||
let list = [];
|
let list = [];
|
||||||
let caseCheck = {};
|
let caseCheck = {};
|
||||||
for (let i=0; i<bonuses.length; i++) {
|
for(let i=0; i<formData.bonusValue.length; i++) {
|
||||||
let coord = cases[i]?.toUpperCase() || 'A1';
|
let coord = formData.caseValue[i] || 'A1';
|
||||||
let bonus = bonuses[i] || 0;
|
coord = coord.toUpperCase();
|
||||||
if ( TMRUtility.verifyTMRCoord( coord ) && bonus > 0 && caseCheck[coord] == undefined ) {
|
if ( TMRUtility.verifyTMRCoord( coord ) ) { // Sanity check
|
||||||
caseCheck[coord] = bonus;
|
let bonus = formData.bonusValue[i] || 0;
|
||||||
list.push( coord+":"+bonus );
|
if ( bonus > 0 && caseCheck[coord] == undefined ) {
|
||||||
|
caseCheck[coord] = bonus;
|
||||||
|
list.push( coord+":"+bonus );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return list.toString();
|
formData.bonusValue = undefined;
|
||||||
|
formData.caseValue = undefined;
|
||||||
|
formData.system.bonuscase = list.toString(); // Reset
|
||||||
}
|
}
|
||||||
return undefined;
|
return formData;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
312
module/item.js
312
module/item.js
@ -18,7 +18,7 @@ const typesObjetsEquipement = [
|
|||||||
"potion",
|
"potion",
|
||||||
]
|
]
|
||||||
const typesObjetsOeuvres = ["oeuvre", "recettecuisine", "musique", "chant", "danse", "jeu"]
|
const typesObjetsOeuvres = ["oeuvre", "recettecuisine", "musique", "chant", "danse", "jeu"]
|
||||||
const typesObjetsDraconiques = ["queue", "ombre", "souffle", "tete", "signedraconique", "sortreserve", "rencontre"]
|
const typesObjetsDraconiques = ["queue", "ombre", "souffle", "tete", "signedraconique", "sortreserve"]
|
||||||
const typesObjetsConnaissance = ["meditation", "recettealchimique", "sort"]
|
const typesObjetsConnaissance = ["meditation", "recettealchimique", "sort"]
|
||||||
const typesObjetsEffet = ["possession", "poison", "maladie"]
|
const typesObjetsEffet = ["possession", "poison", "maladie"]
|
||||||
const typesObjetsCompetence = ["competence", "competencecreature"]
|
const typesObjetsCompetence = ["competence", "competencecreature"]
|
||||||
@ -38,7 +38,6 @@ export const defaultItemImg = {
|
|||||||
ingredient: "systems/foundryvtt-reve-de-dragon/icons/objets/sable_poudre.webp",
|
ingredient: "systems/foundryvtt-reve-de-dragon/icons/objets/sable_poudre.webp",
|
||||||
livre: "systems/foundryvtt-reve-de-dragon/icons/objets/livre.webp",
|
livre: "systems/foundryvtt-reve-de-dragon/icons/objets/livre.webp",
|
||||||
potion: "systems/foundryvtt-reve-de-dragon/icons/objets/liqueur_de_bagdol.webp",
|
potion: "systems/foundryvtt-reve-de-dragon/icons/objets/liqueur_de_bagdol.webp",
|
||||||
rencontre: "systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp",
|
|
||||||
queue: "systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp",
|
queue: "systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp",
|
||||||
ombre: "systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp",
|
ombre: "systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp",
|
||||||
souffle: "systems/foundryvtt-reve-de-dragon/icons/souffle_dragon.webp",
|
souffle: "systems/foundryvtt-reve-de-dragon/icons/souffle_dragon.webp",
|
||||||
@ -243,32 +242,30 @@ export class RdDItem extends Item {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
// détermine si deux équipements sont similaires: de même type, et avec les même champs hormis la quantité
|
// détermine si deux équipements sont similaires: de même type, et avec les même champs hormis la quantité
|
||||||
isEquipementEmpilable(other) {
|
messageEquipementDifferent(other) {
|
||||||
if (!other || !this.isEquipement()) {
|
if (!other || !this.isEquipement()) return undefined;
|
||||||
return [false, undefined];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
let message = undefined;
|
||||||
if (this.system.quantite == undefined) {
|
if (this.system.quantite == undefined) {
|
||||||
return [false, `Impossible de regrouper des ${this.type}, ils ne sont pas empilables`];
|
message = `Impossible de regrouper des ${this.type}, ils ne sont pas empilables`;
|
||||||
}
|
}
|
||||||
else if (this.type != other.type) {
|
else if (this.type != other.type) {
|
||||||
return [false, `Impossible de regrouper des ${this.type} avec des ${other.type}`];
|
message = `Impossible de regrouper des ${this.type} avec des ${other.type}`;
|
||||||
}
|
}
|
||||||
else if (this.name != other.name) {
|
else if (this.name != other.name) {
|
||||||
return [false, `Impossible de regrouper ${this.name} avec ${other.name}`];
|
message = `Impossible de regrouper ${this.name} avec ${other.name}`;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const differences = Object.entries(this.system)
|
const differences = Object.entries(this.system)
|
||||||
.filter(([key, value]) => !['quantite', 'cout', 'encTotal'].includes(key) && value != other.system[key]);
|
.filter(([key, value]) => !['quantite', 'cout'].includes(key) && value != other.system[key]);
|
||||||
if (differences.length > 0) {
|
if (differences.length > 0) {
|
||||||
let message = `Impossible de regrouper les ${this.type} ${this.name}: `;
|
message = `Impossible de regrouper les ${this.type} ${this.name}: `;
|
||||||
for (const [key, value] of differences) {
|
for (const [key, value] of differences) {
|
||||||
message += `<br>${key}: ${value} vs ${other.system[key]}`;
|
message += `<br>${key}: ${value} vs ${other.system[key]}`;
|
||||||
}
|
}
|
||||||
return [false, message];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return [true, undefined];
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
async proposerVente() {
|
async proposerVente() {
|
||||||
@ -302,7 +299,8 @@ export class RdDItem extends Item {
|
|||||||
async postItem(modeOverride) {
|
async postItem(modeOverride) {
|
||||||
console.log(this);
|
console.log(this);
|
||||||
let chatData = duplicate(this);
|
let chatData = duplicate(this);
|
||||||
chatData["properties"] = this.getProprietes();
|
const properties = this.getProprietes();
|
||||||
|
chatData["properties"] = properties
|
||||||
if (this.actor) {
|
if (this.actor) {
|
||||||
chatData.actor = { id: this.actor.id };
|
chatData.actor = { id: this.actor.id };
|
||||||
}
|
}
|
||||||
@ -325,218 +323,254 @@ export class RdDItem extends Item {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_objetChatData() {
|
_objetChatData() {
|
||||||
return [].concat(
|
const tplData = this.system
|
||||||
RdDItem.propertyIfDefined('Résistance', this.system.resistance, this.system.resistance),
|
let properties = [].concat(
|
||||||
RdDItem.propertyIfDefined('Qualité', this.system.qualite, this.system.qualite),
|
RdDItem.propertyIfDefined('Résistance', tplData.resistance, tplData.resistance),
|
||||||
RdDItem.propertyIfDefined('Encombrement', this.system.encombrement),
|
RdDItem.propertyIfDefined('Qualité', tplData.qualite, tplData.qualite),
|
||||||
|
RdDItem.propertyIfDefined('Encombrement', tplData.encombrement),
|
||||||
);
|
);
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_nourritureboissonChatData() {
|
_nourritureboissonChatData() {
|
||||||
return [].concat(
|
const tplData = this.system
|
||||||
RdDItem.propertyIfDefined('Sustentation', this.system.sust, this.system.sust > 0),
|
let properties = [].concat(
|
||||||
RdDItem.propertyIfDefined('Désaltère', this.system.desaltere, this.system.boisson),
|
RdDItem.propertyIfDefined('Sustentation', tplData.sust, tplData.sust > 0),
|
||||||
RdDItem.propertyIfDefined('Force alcool', this.system.force, this.system.boisson && this.system.alcoolise),
|
RdDItem.propertyIfDefined('Désaltère', tplData.desaltere, tplData.boisson),
|
||||||
RdDItem.propertyIfDefined('Exotisme', this.system.exotisme, this.system.exotisme < 0),
|
RdDItem.propertyIfDefined('Force alcool', tplData.force, tplData.boisson && tplData.alcoolise),
|
||||||
RdDItem.propertyIfDefined('Qualité', this.system.qualite, this.system.qualite),
|
RdDItem.propertyIfDefined('Exotisme', tplData.exotisme, tplData.exotisme < 0),
|
||||||
RdDItem.propertyIfDefined('Encombrement', this.system.encombrement),
|
RdDItem.propertyIfDefined('Qualité', tplData.qualite, tplData.qualite),
|
||||||
|
RdDItem.propertyIfDefined('Encombrement', tplData.encombrement),
|
||||||
);
|
);
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_armeChatData() {
|
_armeChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Compétence</b>: ${this.system.competence}`,
|
let properties = [
|
||||||
`<b>Dommages</b>: ${this.system.dommages}`,
|
`<b>Compétence</b>: ${tplData.competence}`,
|
||||||
`<b>Force minimum</b>: ${this.system.force}`,
|
`<b>Dommages</b>: ${tplData.dommages}`,
|
||||||
`<b>Resistance</b>: ${this.system.resistance}`,
|
`<b>Force minimum</b>: ${tplData.force}`,
|
||||||
`<b>Encombrement</b>: ${this.system.encombrement}`
|
`<b>Resistance</b>: ${tplData.resistance}`,
|
||||||
|
`<b>Encombrement</b>: ${tplData.encombrement}`
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_conteneurChatData() {
|
_conteneurChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Capacité</b>: ${this.system.capacite} Enc.`,
|
let properties = [
|
||||||
`<b>Encombrement</b>: ${this.system.encombrement}`
|
`<b>Capacité</b>: ${tplData.capacite} Enc.`,
|
||||||
|
`<b>Encombrement</b>: ${tplData.encombrement}`
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_munitionChatData() {
|
_munitionChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Encombrement</b>: ${this.system.encombrement}`
|
let properties = [
|
||||||
|
`<b>Encombrement</b>: ${tplData.encombrement}`
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_armureChatData() {
|
_armureChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Protection</b>: ${this.system.protection}`,
|
let properties = [
|
||||||
`<b>Détérioration</b>: ${this.system.deterioration}`,
|
`<b>Protection</b>: ${tplData.protection}`,
|
||||||
`<b>Malus armure</b>: ${this.system.malus}`,
|
`<b>Détérioration</b>: ${tplData.deterioration}`,
|
||||||
`<b>Encombrement</b>: ${this.system.encombrement}`
|
`<b>Malus armure</b>: ${tplData.malus}`,
|
||||||
|
`<b>Encombrement</b>: ${tplData.encombrement}`
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_competenceChatData() {
|
_competenceChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Catégorie</b>: ${this.system.categorie}`,
|
let properties = [
|
||||||
`<b>Niveau</b>: ${this.system.niveau}`,
|
`<b>Catégorie</b>: ${tplData.categorie}`,
|
||||||
`<b>Caractéristique par défaut</b>: ${this.system.carac_defaut}`,
|
`<b>Niveau</b>: ${tplData.niveau}`,
|
||||||
`<b>XP</b>: ${this.system.xp}`
|
`<b>Caractéristique par défaut</b>: ${tplData.carac_defaut}`,
|
||||||
|
`<b>XP</b>: ${tplData.xp}`
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_competencecreatureChatData() {
|
_competencecreatureChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Catégorie</b>: ${this.system.categorie}`,
|
let properties = [
|
||||||
`<b>Niveau</b>: ${this.system.niveau}`,
|
`<b>Catégorie</b>: ${tplData.categorie}`,
|
||||||
`<b>Caractéristique</b>: ${this.system.carac_value}`,
|
`<b>Niveau</b>: ${tplData.niveau}`,
|
||||||
`<b>XP</b>: ${this.system.xp}`
|
`<b>Caractéristique</b>: ${tplData.carac_value}`,
|
||||||
|
`<b>XP</b>: ${tplData.xp}`
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_sortChatData() {
|
_sortChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Draconic</b>: ${this.system.draconic}`,
|
let properties = [
|
||||||
`<b>Difficulté</b>: ${this.system.difficulte}`,
|
`<b>Draconic</b>: ${tplData.draconic}`,
|
||||||
`<b>Case TMR</b>: ${this.system.caseTMR}`,
|
`<b>Difficulté</b>: ${tplData.difficulte}`,
|
||||||
`<b>Points de Rêve</b>: ${this.system.ptreve}`
|
`<b>Case TMR</b>: ${tplData.caseTMR}`,
|
||||||
|
`<b>Points de Rêve</b>: ${tplData.ptreve}`
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_herbeChatData() {
|
_herbeChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Milieu</b>: ${this.system.milieu}`,
|
let properties = [
|
||||||
`<b>Rareté</b>: ${this.system.rarete}`,
|
`<b>Milieu</b>: ${tplData.milieu}`,
|
||||||
`<b>Catégorie</b>: ${this.system.categorie}`,
|
`<b>Rareté</b>: ${tplData.rarete}`,
|
||||||
|
`<b>Catégorie</b>: ${tplData.categorie}`,
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_ingredientChatData() {
|
_ingredientChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Milieu</b>: ${this.system.milieu}`,
|
let properties = [
|
||||||
`<b>Rareté</b>: ${this.system.rarete}`,
|
`<b>Milieu</b>: ${tplData.milieu}`,
|
||||||
`<b>Catégorie</b>: ${this.system.categorie}`,
|
`<b>Rareté</b>: ${tplData.rarete}`,
|
||||||
|
`<b>Catégorie</b>: ${tplData.categorie}`,
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_tacheChatData() {
|
_tacheChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Caractéristique</b>: ${this.system.carac}`,
|
let properties = [
|
||||||
`<b>Compétence</b>: ${this.system.competence}`,
|
`<b>Caractéristique</b>: ${tplData.carac}`,
|
||||||
`<b>Périodicité</b>: ${this.system.periodicite}`,
|
`<b>Compétence</b>: ${tplData.competence}`,
|
||||||
`<b>Fatigue</b>: ${this.system.fatigue}`,
|
`<b>Périodicité</b>: ${tplData.periodicite}`,
|
||||||
`<b>Difficulté</b>: ${this.system.difficulte}`
|
`<b>Fatigue</b>: ${tplData.fatigue}`,
|
||||||
|
`<b>Difficulté</b>: ${tplData.difficulte}`
|
||||||
].concat([
|
].concat([
|
||||||
this.system.cacher_points_de_tache ? [] :`<b>Points de Tâche</b>: ${this.system.points_de_tache}`
|
tplData.cacher_points_de_tache ? [] :`<b>Points de Tâche</b>: ${tplData.points_de_tache}`
|
||||||
]).concat([
|
]).concat([
|
||||||
`<b>Points de Tâche atteints</b>: ${this.system.points_de_tache_courant}`]
|
`<b>Points de Tâche atteints</b>: ${tplData.points_de_tache_courant}`]
|
||||||
);
|
);
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_livreChatData() {
|
_livreChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Compétence</b>: ${this.system.competence}`,
|
let properties = [
|
||||||
`<b>Auteur</b>: ${this.system.auteur}`,
|
`<b>Compétence</b>: ${tplData.competence}`,
|
||||||
`<b>Difficulté</b>: ${this.system.difficulte}`,
|
`<b>Auteur</b>: ${tplData.auteur}`,
|
||||||
`<b>Points de Tâche</b>: ${this.system.points_de_tache}`,
|
`<b>Difficulté</b>: ${tplData.difficulte}`,
|
||||||
`<b>Encombrement</b>: ${this.system.encombrement}`
|
`<b>Points de Tâche</b>: ${tplData.points_de_tache}`,
|
||||||
|
`<b>Encombrement</b>: ${tplData.encombrement}`
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_potionChatData() {
|
_potionChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Rareté</b>: ${this.system.rarete}`,
|
let properties = [
|
||||||
`<b>Catégorie</b>: ${this.system.categorie}`,
|
`<b>Rareté</b>: ${tplData.rarete}`,
|
||||||
`<b>Encombrement</b>: ${this.system.encombrement}`,
|
`<b>Catégorie</b>: ${tplData.categorie}`,
|
||||||
|
`<b>Encombrement</b>: ${tplData.encombrement}`,
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_queueChatData() {
|
_queueChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Refoulement</b>: ${this.system.refoulement}`
|
let properties = [
|
||||||
|
`<b>Refoulement</b>: ${tplData.refoulement}`
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_ombreChatData() {
|
_ombreChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Refoulement</b>: ${this.system.refoulement}`
|
let properties = [
|
||||||
|
`<b>Refoulement</b>: ${tplData.refoulement}`
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_souffleChatData() {
|
_souffleChatData() {
|
||||||
return [];
|
const tplData = this.system
|
||||||
|
let properties = [];
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_teteChatData() {
|
_teteChatData() {
|
||||||
return [];
|
const tplData = this.system
|
||||||
|
let properties = [];
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_tarotChatData() {
|
_tarotChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Concept</b>: ${this.system.concept}`,
|
let properties = [
|
||||||
`<b>Aspect</b>: ${this.system.aspect}`,
|
`<b>Concept</b>: ${tplData.concept}`,
|
||||||
|
`<b>Aspect</b>: ${tplData.aspect}`,
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_nombreastralChatData() {
|
_nombreastralChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Valeur</b>: ${this.system.value}`,
|
let properties = [
|
||||||
`<b>Jour</b>: ${this.system.jourlabel}`,
|
`<b>Valeur</b>: ${tplData.value}`,
|
||||||
|
`<b>Jour</b>: ${tplData.jourlabel}`,
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_monnaieChatData() {
|
_monnaieChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Valeur en Deniers</b>: ${this.system.valeur_deniers}`,
|
let properties = [
|
||||||
`<b>Encombrement</b>: ${this.system.encombrement}`
|
`<b>Valeur en Deniers</b>: ${tplData.valeur_deniers}`,
|
||||||
|
`<b>Encombrement</b>: ${tplData.encombrement}`
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_meditationChatData() {
|
_meditationChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Thème</b>: ${this.system.theme}`,
|
let properties = [
|
||||||
`<b>Compétence</b>: ${this.system.competence}`,
|
`<b>Thème</b>: ${tplData.theme}`,
|
||||||
`<b>Support</b>: ${this.system.support}`,
|
`<b>Compétence</b>: ${tplData.competence}`,
|
||||||
`<b>Heure</b>: ${this.system.heure}`,
|
`<b>Support</b>: ${tplData.support}`,
|
||||||
`<b>Purification</b>: ${this.system.purification}`,
|
`<b>Heure</b>: ${tplData.heure}`,
|
||||||
`<b>Vêture</b>: ${this.system.veture}`,
|
`<b>Purification</b>: ${tplData.purification}`,
|
||||||
`<b>Comportement</b>: ${this.system.comportement}`,
|
`<b>Vêture</b>: ${tplData.veture}`,
|
||||||
`<b>Case TMR</b>: ${this.system.tmr}`
|
`<b>Comportement</b>: ${tplData.comportement}`,
|
||||||
]
|
`<b>Case TMR</b>: ${tplData.tmr}`
|
||||||
}
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
_rencontreChatData() {
|
|
||||||
if (this.system.coord) {
|
|
||||||
return [
|
|
||||||
`<b>Force</b>: ${this.system.force}`,
|
|
||||||
`<b>Coordonnées</b>: ${this.system.coord}`,
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return [
|
|
||||||
`<b>Force</b>: ${this.system.force}`,
|
|
||||||
`<b>Refoulement</b>: ${this.system.refoulement}`,
|
|
||||||
`<b>Présent de cités</b>: ${this.system.presentCite}`,
|
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_casetmrChatData() {
|
_casetmrChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Coordonnée</b>: ${this.system.coord}`,
|
let properties = [
|
||||||
`<b>Spécificité</b>: ${this.system.specific}`
|
`<b>Coordonnée</b>: ${tplData.coord}`,
|
||||||
|
`<b>Spécificité</b>: ${tplData.specific}`
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_maladieChatData() {
|
_maladieChatData() {
|
||||||
if (!this.system.identifie) {
|
const tplData = this.system
|
||||||
return [`<b>Inconnue</b>`]
|
let properties
|
||||||
}
|
if (tplData.identifie) {
|
||||||
let properties = [
|
properties = [
|
||||||
`<b>Malignité</b>: ${this.system.malignite}`,
|
`<b>Malignité</b>: ${tplData.malignite}`,
|
||||||
`<b>Périodicité</b>: ${this.system.periodicite}`,
|
`<b>Périodicité</b>: ${tplData.periodicite}`,
|
||||||
`<b>Dommages</b>: ${this.system.dommages}`
|
`<b>Dommages</b>: ${tplData.dommages}`
|
||||||
]
|
]
|
||||||
if (this.system.remedesconnus) {
|
if (tplData.remedesconnus) {
|
||||||
properties.push(`<b>Remedes</b>: ${this.system.remedes}`)
|
properties.push(`<b>Remedes</b>: ${tplData.remedes}`)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
properties = [
|
||||||
|
`<b>Inconnue</b>`]
|
||||||
}
|
}
|
||||||
return properties;
|
return properties;
|
||||||
}
|
}
|
||||||
@ -548,13 +582,15 @@ export class RdDItem extends Item {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_gemmeChatData() {
|
_gemmeChatData() {
|
||||||
return [
|
const tplData = this.system
|
||||||
`<b>Pureté</b>: ${this.system.purete}`,
|
let properties = [
|
||||||
`<b>Taille</b>: ${this.system.taille}`,
|
`<b>Pureté</b>: ${tplData.purete}`,
|
||||||
`<b>Inertie</b>: ${this.system.inertie}`,
|
`<b>Taille</b>: ${tplData.taille}`,
|
||||||
`<b>Enchantabilité</b>: ${this.system.enchantabilite}`,
|
`<b>Inertie</b>: ${tplData.inertie}`,
|
||||||
`<b>Prix</b>: ${this.system.cout}`,
|
`<b>Enchantabilité</b>: ${tplData.enchantabilite}`,
|
||||||
|
`<b>Prix</b>: ${tplData.cout}`,
|
||||||
]
|
]
|
||||||
|
return properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import { LOG_HEAD, SYSTEM_RDD } from "./constants.js";
|
import { LOG_HEAD, SYSTEM_RDD } from "./constants.js";
|
||||||
import { Grammar } from "./grammar.js";
|
import { Grammar } from "./grammar.js";
|
||||||
import { Misc } from "./misc.js";
|
|
||||||
|
|
||||||
class Migration {
|
class Migration {
|
||||||
get code() { return "sample"; }
|
get code() { return "sample"; }
|
||||||
@ -43,7 +42,7 @@ class _10_0_16_MigrationSortsReserve extends Migration {
|
|||||||
await actor.createEmbeddedDocuments("Item", sortsReserve, {
|
await actor.createEmbeddedDocuments("Item", sortsReserve, {
|
||||||
renderSheet: false,
|
renderSheet: false,
|
||||||
});
|
});
|
||||||
await actor.update({ 'system.reve.reserve': undefined })
|
await actor.update({ 'system.reve.reserve.list': [] })
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,41 +98,12 @@ class _10_0_21_VehiculeStructureResistanceMax extends Migration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _10_0_33_MigrationNomsDraconic extends Migration {
|
|
||||||
get code() { return "competences-creature-parade"; }
|
|
||||||
get version() { return "10.0.33"; }
|
|
||||||
|
|
||||||
migrationNomDraconic(ancien) {
|
|
||||||
if (typeof ancien == 'string'){
|
|
||||||
switch (ancien) {
|
|
||||||
case 'oniros': case "Voie d'Oniros": return "Voie d'Oniros";
|
|
||||||
case 'hypnos': case "Voie d'Hypnos": return "Voie d'Hypnos";
|
|
||||||
case 'narcos': case "Voie de Narcos": return "Voie de Narcos";
|
|
||||||
case 'thanatos': case "Voie de Thanatos": return "Voie de Thanatos";
|
|
||||||
}
|
|
||||||
return ancien;
|
|
||||||
}
|
|
||||||
else if (typeof ancien.name == 'string') {
|
|
||||||
return this.migrationNomDraconic(ancien.name)
|
|
||||||
}
|
|
||||||
return ancien;
|
|
||||||
}
|
|
||||||
async migrate() {
|
|
||||||
|
|
||||||
await this.applyItemsUpdates(items => items
|
|
||||||
.filter(it => ["sort", "sortreserve"].includes(it.type)
|
|
||||||
&& (typeof it.system.draconic == 'string') || (typeof it.system.draconic?.name == 'string'))
|
|
||||||
.map(it => { return { _id: it.id, "system.draconic": this.migrationNomDraconic(it.system.draconic)} }));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class Migrations {
|
export class Migrations {
|
||||||
static getMigrations() {
|
static getMigrations() {
|
||||||
return [
|
return [
|
||||||
new _10_0_16_MigrationSortsReserve(),
|
new _10_0_16_MigrationSortsReserve(),
|
||||||
new _10_0_17_MigrationCompetenceCreature(),
|
new _10_0_17_MigrationCompetenceCreature(),
|
||||||
new _10_0_21_VehiculeStructureResistanceMax(),
|
new _10_0_21_VehiculeStructureResistanceMax(),
|
||||||
new _10_0_33_MigrationNomsDraconic(),
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,11 +133,7 @@ export class Misc {
|
|||||||
* @returns true pour un seul utilisateur: le premier GM connecté par ordre d'id
|
* @returns true pour un seul utilisateur: le premier GM connecté par ordre d'id
|
||||||
*/
|
*/
|
||||||
static isUniqueConnectedGM() {
|
static isUniqueConnectedGM() {
|
||||||
return game.user.id == Misc.firstConnectedGMId();
|
return game.user.id == Misc.firstConnectedGM()?.id;
|
||||||
}
|
|
||||||
|
|
||||||
static firstConnectedGMId() {
|
|
||||||
return Misc.firstConnectedGM()?.id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -8,24 +8,23 @@ import { Grammar } from "./grammar.js";
|
|||||||
import { RdDDice } from "./rdd-dice.js";
|
import { RdDDice } from "./rdd-dice.js";
|
||||||
import { Misc } from "./misc.js";
|
import { Misc } from "./misc.js";
|
||||||
import { HIDE_DICE, SHOW_DICE, SYSTEM_RDD, SYSTEM_SOCKET_ID } from "./constants.js";
|
import { HIDE_DICE, SHOW_DICE, SYSTEM_RDD, SYSTEM_SOCKET_ID } from "./constants.js";
|
||||||
import { DialogChronologie } from "./dialog-chronologie.js";
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
const dossierIconesHeures = 'systems/foundryvtt-reve-de-dragon/icons/heures/'
|
const dossierIconesHeures = 'systems/foundryvtt-reve-de-dragon/icons/heures/'
|
||||||
const heuresList = ["vaisseau", "sirene", "faucon", "couronne", "dragon", "epees", "lyre", "serpent", "poissonacrobate", "araignee", "roseau", "chateaudormant"];
|
const heuresList = ["vaisseau", "sirene", "faucon", "couronne", "dragon", "epees", "lyre", "serpent", "poissonacrobate", "araignee", "roseau", "chateaudormant"];
|
||||||
const heuresDef = {
|
const heuresDef = {
|
||||||
"vaisseau": {key:"vaisseau", label: "Vaisseau", lettreFont: 'v', saison: "printemps", heure: 0, icon: 'hd01.svg' },
|
"vaisseau": { label: "Vaisseau", lettreFont: 'v', saison: "printemps", heure: 0, icon: 'hd01.svg' },
|
||||||
"sirene": { key: "sirene", label: "Sirène", lettreFont: 'i', saison: "printemps", heure: 1, icon: 'hd02.svg' },
|
"sirene": { label: "Sirène", lettreFont: 'i', saison: "printemps", heure: 1, icon: 'hd02.svg' },
|
||||||
"faucon": { key: "faucon", label: "Faucon", lettreFont: 'f', saison: "printemps", heure: 2, icon: 'hd03.svg' },
|
"faucon": { label: "Faucon", lettreFont: 'f', saison: "printemps", heure: 2, icon: 'hd03.svg' },
|
||||||
"couronne": { key: "couronne", label: "Couronne", lettreFont: '', saison: "ete", heure: 3, icon: 'hd04.svg' },
|
"couronne": { label: "Couronne", lettreFont: '', saison: "ete", heure: 3, icon: 'hd04.svg' },
|
||||||
"dragon": { key: "dragon", label: "Dragon", lettreFont: 'd', saison: "ete", heure: 4, icon: 'hd05.svg' },
|
"dragon": { label: "Dragon", lettreFont: 'd', saison: "ete", heure: 4, icon: 'hd05.svg' },
|
||||||
"epees": { key: "epees", label: "Epées", lettreFont: 'e', saison: "ete", heure: 5, icon: 'hd06.svg' },
|
"epees": { label: "Epées", lettreFont: 'e', saison: "ete", heure: 5, icon: 'hd06.svg' },
|
||||||
"lyre": { key: "lyre", label: "Lyre", lettreFont: 'l', saison: "automne", heure: 6, icon: 'hd07.svg' },
|
"lyre": { label: "Lyre", lettreFont: 'l', saison: "automne", heure: 6, icon: 'hd07.svg' },
|
||||||
"serpent": { key: "serpent", label: "Serpent", lettreFont: 's', saison: "automne", heure: 7, icon: 'hd08.svg' },
|
"serpent": { label: "Serpent", lettreFont: 's', saison: "automne", heure: 7, icon: 'hd08.svg' },
|
||||||
"poissonacrobate": { key: "poissonacrobate", label: "Poisson Acrobate", lettreFont: 'p', saison: "automne", heure: 8, icon: 'hd09.svg' },
|
"poissonacrobate": { label: "Poisson Acrobate", lettreFont: 'p', saison: "automne", heure: 8, icon: 'hd09.svg' },
|
||||||
"araignee": { key: "araignee", label: "Araignée", lettreFont: 'a', saison: "hiver", heure: 9, icon: 'hd10.svg' },
|
"araignee": { label: "Araignée", lettreFont: 'a', saison: "hiver", heure: 9, icon: 'hd10.svg' },
|
||||||
"roseau": { key: "roseau", label: "Roseau", lettreFont: 'r', saison: "hiver", heure: 10, icon: 'hd11.svg' },
|
"roseau": { label: "Roseau", lettreFont: 'r', saison: "hiver", heure: 10, icon: 'hd11.svg' },
|
||||||
"chateaudormant": { key: "chateaudormant", label: "Château Dormant", lettreFont: 'c', saison: "hiver", heure: 11, icon: 'hd12.svg' }
|
"chateaudormant": { label: "Château Dormant", lettreFont: 'c', saison: "hiver", heure: 11, icon: 'hd12.svg' }
|
||||||
};
|
};
|
||||||
const saisonsDef = {
|
const saisonsDef = {
|
||||||
"printemps": { label: "Printemps" },
|
"printemps": { label: "Printemps" },
|
||||||
@ -52,50 +51,21 @@ export class RdDCalendrier extends Application {
|
|||||||
return Object.values(heuresDef).find(h => h.heure == chiffre);
|
return Object.values(heuresDef).find(h => h.heure == chiffre);
|
||||||
}
|
}
|
||||||
|
|
||||||
static getSigneAs(key, value) {
|
|
||||||
const heure = (typeof value == 'string' || typeof value == 'number') && Number.isInteger(Number(value))
|
|
||||||
? Number(value)
|
|
||||||
: (typeof value == 'string') ? RdDCalendrier.getChiffreFromSigne(value)
|
|
||||||
: undefined
|
|
||||||
|
|
||||||
if (heure != undefined && ['key', 'label', 'lettreFont', 'saison', 'heure', 'icon'].includes(key)) {
|
|
||||||
return RdDCalendrier.getDefSigne(heure)[key]
|
|
||||||
}
|
|
||||||
if (heure != undefined && ['webp'].includes(key)) {
|
|
||||||
return RdDCalendrier.getDefSigne(heure)['icon'].replace('svg', 'webp');
|
|
||||||
}
|
|
||||||
console.error(`Appel à getSigneAs('${key}', ${value}) avec une clé/heure incorrects`);
|
|
||||||
return value;
|
|
||||||
|
|
||||||
}
|
|
||||||
static getChiffreFromSigne(signe) {
|
static getChiffreFromSigne(signe) {
|
||||||
return heuresList.indexOf(signe);
|
return heuresList.indexOf(signe);
|
||||||
}
|
}
|
||||||
|
|
||||||
static createCalendrierInitial() {
|
static getCalendrier(index) {
|
||||||
return {
|
let calendrier = {
|
||||||
heureRdD: 0,
|
|
||||||
minutesRelative: 0,
|
|
||||||
indexJour: 0,
|
|
||||||
annee: 0,
|
|
||||||
moisRdD: 0,
|
|
||||||
moisLabel: heuresDef["vaisseau"].label,
|
|
||||||
jour: 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getCalendrier(index) {
|
|
||||||
index = index ?? this.getCurrentDayIndex();
|
|
||||||
const mois = Math.floor(index / RDD_JOUR_PAR_MOIS) % RDD_MOIS_PAR_AN;
|
|
||||||
return {
|
|
||||||
heureRdD: 0, // Index dans heuresList / heuresDef[x].heure
|
heureRdD: 0, // Index dans heuresList / heuresDef[x].heure
|
||||||
minutesRelative: 0,
|
minutesRelative: 0,
|
||||||
indexJour: index,
|
indexJour: index,
|
||||||
annee: Math.floor(index / (RDD_JOUR_PAR_MOIS * RDD_MOIS_PAR_AN)),
|
annee: Math.floor(index / (RDD_JOUR_PAR_MOIS * RDD_MOIS_PAR_AN)),
|
||||||
moisRdD: RdDCalendrier.getDefSigne(mois),
|
moisRdD: Math.floor(index / RDD_JOUR_PAR_MOIS) % RDD_MOIS_PAR_AN,
|
||||||
moisLabel: RdDCalendrier.getDefSigne(mois).label,
|
|
||||||
jour: (index % RDD_JOUR_PAR_MOIS) // Le calendrier stocke le jour en 0-27, mais en 1-28 à l'affichage
|
jour: (index % RDD_JOUR_PAR_MOIS) // Le calendrier stocke le jour en 0-27, mais en 1-28 à l'affichage
|
||||||
}
|
}
|
||||||
|
calendrier.moisLabel = RdDCalendrier.getDefSigne(calendrier.moisRdD).label;
|
||||||
|
return calendrier;
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
@ -108,7 +78,7 @@ export class RdDCalendrier extends Application {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Calendrier
|
// Calendrier
|
||||||
this.calendrier = duplicate(game.settings.get(SYSTEM_RDD, "calendrier") ?? RdDCalendrier.createCalendrierInitial());
|
this.calendrier = duplicate(game.settings.get(SYSTEM_RDD, "calendrier") ?? RdDCalendrier.getCalendrier(0));
|
||||||
this.calendrier.annee = this.calendrier.annee ?? Math.floor((this.calendrier.moisRdD ?? 0) / RDD_MOIS_PAR_AN);
|
this.calendrier.annee = this.calendrier.annee ?? Math.floor((this.calendrier.moisRdD ?? 0) / RDD_MOIS_PAR_AN);
|
||||||
this.calendrier.moisRdD = (this.calendrier.moisRdD ?? 0) % RDD_MOIS_PAR_AN;
|
this.calendrier.moisRdD = (this.calendrier.moisRdD ?? 0) % RDD_MOIS_PAR_AN;
|
||||||
|
|
||||||
@ -137,13 +107,13 @@ export class RdDCalendrier extends Application {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getDateFromIndex(index) {
|
getDateFromIndex(index) {
|
||||||
const dateRdD = this.getCalendrier(index);
|
const date = RdDCalendrier.getCalendrier(index ?? this.getCurrentDayIndex());
|
||||||
return (dateRdD.jour + 1) + ' ' + dateRdD.moisLabel;
|
return (date.jour + 1) + ' ' + RdDCalendrier.getDefSigne(date.moisRdD).label;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getDayMonthFromIndex(index = undefined) {
|
getNumericDateFromIndex(index = undefined) {
|
||||||
const dateRdD = this.getCalendrier(index);
|
const dateRdD = RdDCalendrier.getCalendrier(index ?? this.getCurrentDayIndex());
|
||||||
return {
|
return {
|
||||||
day: dateRdD.jour + 1,
|
day: dateRdD.jour + 1,
|
||||||
month: heuresList[dateRdD.moisRdD]
|
month: heuresList[dateRdD.moisRdD]
|
||||||
@ -294,7 +264,7 @@ export class RdDCalendrier extends Application {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async incrementerJour() {
|
async incrementerJour() {
|
||||||
const index = this.getCurrentDayIndex() + 1;
|
const index = this.getCurrentDayIndex() + 1;
|
||||||
this.calendrier = this.getCalendrier(index);
|
this.calendrier = RdDCalendrier.getCalendrier(index);
|
||||||
await this.rebuildListeNombreAstral();
|
await this.rebuildListeNombreAstral();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -458,7 +428,7 @@ export class RdDCalendrier extends Application {
|
|||||||
function check() {
|
function check() {
|
||||||
let elmnt = document.getElementById("calendar-time-container");
|
let elmnt = document.getElementById("calendar-time-container");
|
||||||
if (elmnt) {
|
if (elmnt) {
|
||||||
elmnt.style.bottom = undefined;
|
elmnt.style.bottom = null;
|
||||||
let xPos = (pos.left) > window.innerWidth ? window.innerWidth - 200 : pos.left;
|
let xPos = (pos.left) > window.innerWidth ? window.innerWidth - 200 : pos.left;
|
||||||
let yPos = (pos.top) > window.innerHeight - 20 ? window.innerHeight - 100 : pos.top;
|
let yPos = (pos.top) > window.innerHeight - 20 ? window.innerHeight - 100 : pos.top;
|
||||||
elmnt.style.top = (yPos) + "px";
|
elmnt.style.top = (yPos) + "px";
|
||||||
@ -566,8 +536,6 @@ export class RdDCalendrier extends Application {
|
|||||||
|
|
||||||
this.updateDisplay();
|
this.updateDisplay();
|
||||||
|
|
||||||
html.find('.ajout-chronologie').click(ev => DialogChronologie.create());
|
|
||||||
|
|
||||||
html.find('.calendar-btn').click(ev => this.onCalendarButton(ev));
|
html.find('.calendar-btn').click(ev => this.onCalendarButton(ev));
|
||||||
|
|
||||||
html.find('.calendar-btn-edit').click(ev => {
|
html.find('.calendar-btn-edit').click(ev => {
|
||||||
@ -615,16 +583,16 @@ export class RdDCalendrier extends Application {
|
|||||||
pos3 = e.clientX;
|
pos3 = e.clientX;
|
||||||
pos4 = e.clientY;
|
pos4 = e.clientY;
|
||||||
// set the element's new position:
|
// set the element's new position:
|
||||||
elmnt.style.bottom = undefined
|
elmnt.style.bottom = null
|
||||||
elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
|
elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
|
||||||
elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
|
elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
|
||||||
}
|
}
|
||||||
|
|
||||||
function closeDragElement() {
|
function closeDragElement() {
|
||||||
// stop moving when mouse button is released:
|
// stop moving when mouse button is released:
|
||||||
elmnt.onmousedown = undefined;
|
elmnt.onmousedown = null;
|
||||||
document.onmouseup = undefined;
|
document.onmouseup = null;
|
||||||
document.onmousemove = undefined;
|
document.onmousemove = null;
|
||||||
let xPos = (elmnt.offsetLeft - pos1) > window.innerWidth ? window.innerWidth - 200 : (elmnt.offsetLeft - pos1);
|
let xPos = (elmnt.offsetLeft - pos1) > window.innerWidth ? window.innerWidth - 200 : (elmnt.offsetLeft - pos1);
|
||||||
let yPos = (elmnt.offsetTop - pos2) > window.innerHeight - 20 ? window.innerHeight - 100 : (elmnt.offsetTop - pos2)
|
let yPos = (elmnt.offsetTop - pos2) > window.innerHeight - 20 ? window.innerHeight - 100 : (elmnt.offsetTop - pos2)
|
||||||
xPos = xPos < 0 ? 0 : xPos;
|
xPos = xPos < 0 ? 0 : xPos;
|
||||||
|
@ -9,8 +9,8 @@ import { RdDBonus } from "./rdd-bonus.js";
|
|||||||
import { RdDResolutionTable } from "./rdd-resolution-table.js";
|
import { RdDResolutionTable } from "./rdd-resolution-table.js";
|
||||||
import { RdDRoll } from "./rdd-roll.js";
|
import { RdDRoll } from "./rdd-roll.js";
|
||||||
import { RdDRollTables } from "./rdd-rolltables.js";
|
import { RdDRollTables } from "./rdd-rolltables.js";
|
||||||
import { ReglesOptionelles } from "./settings/regles-optionelles.js";
|
import { ReglesOptionelles } from "./regles-optionelles.js";
|
||||||
import { STATUSES } from "./settings/status-effects.js";
|
import { STATUSES } from "./status-effects.js";
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
const premierRoundInit = [
|
const premierRoundInit = [
|
||||||
@ -121,7 +121,7 @@ export class RdDCombatManager extends Combat {
|
|||||||
{
|
{
|
||||||
speaker: {
|
speaker: {
|
||||||
scene: canvas.scene._id,
|
scene: canvas.scene._id,
|
||||||
actor: combatant.actor?._id,
|
actor: combatant.actor ? combatant.actor._id : null,
|
||||||
token: combatant.token._id,
|
token: combatant.token._id,
|
||||||
alias: combatant.token.name,
|
alias: combatant.token.name,
|
||||||
sound: CONFIG.sounds.dice,
|
sound: CONFIG.sounds.dice,
|
||||||
@ -498,7 +498,7 @@ export class RdDCombat {
|
|||||||
let defender = canvas.tokens.get(msg.defenderTokenId).actor;
|
let defender = canvas.tokens.get(msg.defenderTokenId).actor;
|
||||||
if (Misc.isOwnerPlayerOrUniqueConnectedGM()) {
|
if (Misc.isOwnerPlayerOrUniqueConnectedGM()) {
|
||||||
let attackerRoll = msg.attackerRoll;
|
let attackerRoll = msg.attackerRoll;
|
||||||
let attacker = msg.attackerId ? game.actors.get(msg.attackerId) : undefined;
|
let attacker = msg.attackerId ? game.actors.get(msg.attackerId) : null;
|
||||||
|
|
||||||
defender.encaisserDommages(attackerRoll, attacker);
|
defender.encaisserDommages(attackerRoll, attacker);
|
||||||
const rddCombat = RdDCombat.createForAttackerAndDefender(msg.attackerId, msg.defenderTokenId);
|
const rddCombat = RdDCombat.createForAttackerAndDefender(msg.attackerId, msg.defenderTokenId);
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
import { DialogChronologie } from "./dialog-chronologie.js";
|
|
||||||
import { DialogCreateSigneDraconique } from "./dialog-create-signedraconique.js";
|
import { DialogCreateSigneDraconique } from "./dialog-create-signedraconique.js";
|
||||||
import { DialogStress } from "./dialog-stress.js";
|
import { DialogStress } from "./dialog-stress.js";
|
||||||
import { Grammar } from "./grammar.js";
|
import { Grammar } from "./grammar.js";
|
||||||
@ -115,11 +114,6 @@ export class RdDCommands {
|
|||||||
<br><strong>/stress 6 Glou Paulo</strong> : Distribue 6 points de Stress au personnage Paulon ou au personnage joueur Paulo, à cause d'un Glou`
|
<br><strong>/stress 6 Glou Paulo</strong> : Distribue 6 points de Stress au personnage Paulon ou au personnage joueur Paulo, à cause d'un Glou`
|
||||||
});
|
});
|
||||||
|
|
||||||
rddCommands.registerCommand({
|
|
||||||
path: ["/chrono"], func: (content, msg, params) => DialogChronologie.create(),
|
|
||||||
descr: `Enregistre une entrée de chronologie dans un article de journal`
|
|
||||||
});
|
|
||||||
|
|
||||||
game.system.rdd.commands = rddCommands;
|
game.system.rdd.commands = rddCommands;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -410,6 +404,5 @@ export class RdDCommands {
|
|||||||
async getMeteo(msg, params) {
|
async getMeteo(msg, params) {
|
||||||
return await RdDMeteo.getMeteo();
|
return await RdDMeteo.getMeteo();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,14 +29,13 @@ export class RddCompendiumOrganiser {
|
|||||||
|
|
||||||
static getEntityTypeLabel(entity) {
|
static getEntityTypeLabel(entity) {
|
||||||
const documentName = entity?.documentName
|
const documentName = entity?.documentName
|
||||||
const type = entity?.type
|
const type = entity?.type
|
||||||
if (documentName === 'Actor' || documentName === 'Item') {
|
if (documentName === 'Actor' || documentName === 'Item') {
|
||||||
const label = CONFIG[documentName]?.typeLabels?.[type] ?? type;
|
const label = CONFIG[documentName]?.typeLabels?.[type] ?? type;
|
||||||
if (game.i18n.has(label)) {
|
return game.i18n.has(label) ? game.i18n.localize(label) : t;
|
||||||
return game.i18n.localize(label);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
import { Grammar } from "./grammar.js";
|
import { Grammar } from "./grammar.js";
|
||||||
import { ReglesOptionelles } from "./settings/regles-optionelles.js";
|
import { ReglesOptionelles } from "./regles-optionelles.js";
|
||||||
|
|
||||||
export class RdDConfirm {
|
export class RdDConfirm {
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -241,7 +241,7 @@ export class RdDDice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static _getWhisperBlind(options) {
|
static _getWhisperBlind(options) {
|
||||||
let whisper = undefined;
|
let whisper = null;
|
||||||
let blind = false;
|
let blind = false;
|
||||||
let rollMode = options.rollMode ?? game.settings.get("core", "rollMode");
|
let rollMode = options.rollMode ?? game.settings.get("core", "rollMode");
|
||||||
switch (rollMode) {
|
switch (rollMode) {
|
||||||
|
@ -42,7 +42,7 @@ export class RdDHerbes extends Item {
|
|||||||
formData.herbesRepos = RdDHerbes.buildHerbesList(this.herbesRepos, 7);
|
formData.herbesRepos = RdDHerbes.buildHerbesList(this.herbesRepos, 7);
|
||||||
formData.jourMoisOptions = RdDCalendrier.buildJoursMois();
|
formData.jourMoisOptions = RdDCalendrier.buildJoursMois();
|
||||||
formData.dateActuelle = game.system.rdd.calendrier.getDateFromIndex();
|
formData.dateActuelle = game.system.rdd.calendrier.getDateFromIndex();
|
||||||
formData.splitDate = game.system.rdd.calendrier.getDayMonthFromIndex(formData.system.prdate);
|
formData.splitDate = game.system.rdd.calendrier.getNumericDateFromIndex(formData.system.prdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -23,9 +23,9 @@ import { RdDTokenHud } from "./rdd-token-hud.js";
|
|||||||
import { RdDCommands } from "./rdd-commands.js";
|
import { RdDCommands } from "./rdd-commands.js";
|
||||||
import { RdDCombatManager, RdDCombat } from "./rdd-combat.js";
|
import { RdDCombatManager, RdDCombat } from "./rdd-combat.js";
|
||||||
import { ChatUtility } from "./chat-utility.js";
|
import { ChatUtility } from "./chat-utility.js";
|
||||||
import { StatusEffects } from "./settings/status-effects.js";
|
import { StatusEffects } from "./status-effects.js";
|
||||||
import { RddCompendiumOrganiser } from "./rdd-compendium-organiser.js";
|
import { RddCompendiumOrganiser } from "./rdd-compendium-organiser.js";
|
||||||
import { ReglesOptionelles } from "./settings/regles-optionelles.js";
|
import { ReglesOptionelles } from "./regles-optionelles.js";
|
||||||
import { TMRRencontres } from "./tmr-rencontres.js";
|
import { TMRRencontres } from "./tmr-rencontres.js";
|
||||||
import { RdDHotbar } from "./rdd-hotbar-drop.js"
|
import { RdDHotbar } from "./rdd-hotbar-drop.js"
|
||||||
import { EffetsDraconiques } from "./tmr/effets-draconiques.js";
|
import { EffetsDraconiques } from "./tmr/effets-draconiques.js";
|
||||||
@ -36,9 +36,6 @@ import { RdDPossession } from "./rdd-possession.js";
|
|||||||
import { RdDSigneDraconiqueItemSheet } from "./item-signedraconique-sheet.js";
|
import { RdDSigneDraconiqueItemSheet } from "./item-signedraconique-sheet.js";
|
||||||
import { Misc } from "./misc.js";
|
import { Misc } from "./misc.js";
|
||||||
import { Migrations } from './migrations.js';
|
import { Migrations } from './migrations.js';
|
||||||
import { DialogChronologie } from "./dialog-chronologie.js";
|
|
||||||
import { SystemCompendiums } from "./settings/system-compendiums.js";
|
|
||||||
import { RdDRencontreItemSheet } from "./item-rencontre-sheet.js";
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/* Foundry VTT Initialization */
|
/* Foundry VTT Initialization */
|
||||||
@ -80,7 +77,7 @@ Hooks.once("init", async function () {
|
|||||||
name: "calendrier",
|
name: "calendrier",
|
||||||
scope: "world",
|
scope: "world",
|
||||||
config: false,
|
config: false,
|
||||||
default: RdDCalendrier.createCalendrierInitial(),
|
default: RdDCalendrier.getCalendrier(0),
|
||||||
type: Object
|
type: Object
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -110,8 +107,6 @@ Hooks.once("init", async function () {
|
|||||||
default: RdDCalendrier.createCalendrierPos(),
|
default: RdDCalendrier.createCalendrierPos(),
|
||||||
type: Object
|
type: Object
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
game.settings.register(SYSTEM_RDD, "supprimer-dialogues-combat-chat", {
|
game.settings.register(SYSTEM_RDD, "supprimer-dialogues-combat-chat", {
|
||||||
name: "Supprimer les dialogues de combat",
|
name: "Supprimer les dialogues de combat",
|
||||||
@ -153,7 +148,7 @@ Hooks.once("init", async function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
game.socket.on(SYSTEM_SOCKET_ID, async (sockmsg) => {
|
game.socket.on(SYSTEM_SOCKET_ID, sockmsg => {
|
||||||
console.log(">>>>> MSG RECV", sockmsg);
|
console.log(">>>>> MSG RECV", sockmsg);
|
||||||
try {
|
try {
|
||||||
RdDUtility.onSocketMessage(sockmsg);
|
RdDUtility.onSocketMessage(sockmsg);
|
||||||
@ -189,27 +184,14 @@ Hooks.once("init", async function () {
|
|||||||
types: ["signedraconique"],
|
types: ["signedraconique"],
|
||||||
makeDefault: true
|
makeDefault: true
|
||||||
});
|
});
|
||||||
Items.registerSheet(SYSTEM_RDD, RdDRencontreItemSheet, {
|
|
||||||
label: "Rencontre",
|
|
||||||
types: ["rencontre"],
|
|
||||||
makeDefault: true
|
|
||||||
});
|
|
||||||
Items.registerSheet(SYSTEM_RDD, RdDItemSheet, {
|
Items.registerSheet(SYSTEM_RDD, RdDItemSheet, {
|
||||||
types: [
|
types: ["arme", "armure", "objet", "arme", "armure", "conteneur", "competence", "sort", "herbe", "ingredient", "livre", "potion", "munition", "rencontresTMR", "queue", "ombre", "souffle",
|
||||||
"competence", "competencecreature",
|
"tete", "competencecreature", "tarot", "monnaie", "nombreastral", "tache", "meditation", "casetmr", "recettealchimique", "gemme",
|
||||||
"recettealchimique", "musique", "chant", "danse", "jeu", "recettecuisine", "oeuvre",
|
"musique", "chant", "danse", "jeu", "recettecuisine", "maladie", "poison", "oeuvre", "nourritureboisson", "possession", "sortreserve"], makeDefault: true
|
||||||
"objet", "arme", "armure", "conteneur", "herbe", "ingredient", "livre", "potion", "munition",
|
|
||||||
"monnaie", "nourritureboisson", "gemme",
|
|
||||||
"meditation", "rencontresTMR", "queue", "ombre", "souffle", "tete", "casetmr", "sort", "sortreserve",
|
|
||||||
"nombreastral", "tache", "maladie", "poison", "possession",
|
|
||||||
"tarot"
|
|
||||||
], makeDefault: true
|
|
||||||
});
|
});
|
||||||
CONFIG.Combat.documentClass = RdDCombatManager;
|
CONFIG.Combat.documentClass = RdDCombatManager;
|
||||||
|
|
||||||
// préparation des différents modules
|
// préparation des différents modules
|
||||||
SystemCompendiums.init();
|
|
||||||
DialogChronologie.init();
|
|
||||||
ReglesOptionelles.init();
|
ReglesOptionelles.init();
|
||||||
RdDUtility.init();
|
RdDUtility.init();
|
||||||
RdDDice.init();
|
RdDDice.init();
|
||||||
@ -221,6 +203,7 @@ Hooks.once("init", async function () {
|
|||||||
RddCompendiumOrganiser.init();
|
RddCompendiumOrganiser.init();
|
||||||
EffetsDraconiques.init()
|
EffetsDraconiques.init()
|
||||||
TMRUtility.init();
|
TMRUtility.init();
|
||||||
|
TMRRencontres.init();
|
||||||
RdDHotbar.initDropbar();
|
RdDHotbar.initDropbar();
|
||||||
RdDPossession.init();
|
RdDPossession.init();
|
||||||
});
|
});
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { ChatUtility } from "./chat-utility.js";
|
import { ChatUtility } from "./chat-utility.js";
|
||||||
import { Misc } from "./misc.js";
|
import { Misc } from "./misc.js";
|
||||||
import { RdDDice } from "./rdd-dice.js";
|
import { RdDDice } from "./rdd-dice.js";
|
||||||
import { ReglesOptionelles } from "./settings/regles-optionelles.js";
|
import { ReglesOptionelles } from "./regles-optionelles.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* difficultés au delà de -10
|
* difficultés au delà de -10
|
||||||
@ -54,7 +54,7 @@ export class RdDResolutionTable {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static explain(rolled) {
|
static explain(rolled) {
|
||||||
let message = "<br>Jet : <strong>" + rolled.roll + "</strong> sur " + rolled.score + "% ";
|
let message = "<br>Jet : <strong>" + rolled.roll + "</strong> sur " + rolled.score + "% ";
|
||||||
if (rolled.caracValue != undefined && rolled.finalLevel != undefined) {
|
if (rolled.caracValue != null && rolled.finalLevel != null) {
|
||||||
message += (rolled.diviseurSignificative > 1 ? `(1/${rolled.diviseurSignificative} de ` : "(")
|
message += (rolled.diviseurSignificative > 1 ? `(1/${rolled.diviseurSignificative} de ` : "(")
|
||||||
+ rolled.caracValue + " à " + Misc.toSignedString(rolled.finalLevel) + ") ";
|
+ rolled.caracValue + " à " + Misc.toSignedString(rolled.finalLevel) + ") ";
|
||||||
}
|
}
|
||||||
@ -116,7 +116,7 @@ export class RdDResolutionTable {
|
|||||||
static _updateChancesFactor(chances, diviseur) {
|
static _updateChancesFactor(chances, diviseur) {
|
||||||
if (chances.level > -11 && diviseur && diviseur > 1) {
|
if (chances.level > -11 && diviseur && diviseur > 1) {
|
||||||
let newScore = Math.floor(chances.score / diviseur);
|
let newScore = Math.floor(chances.score / diviseur);
|
||||||
mergeObject(chances, this._computeCell(undefined, newScore), { overwrite: true });
|
mergeObject(chances, this._computeCell(null, newScore), { overwrite: true });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,7 +124,7 @@ export class RdDResolutionTable {
|
|||||||
static _updateChancesWithBonus(chances, bonus, finalLevel) {
|
static _updateChancesWithBonus(chances, bonus, finalLevel) {
|
||||||
if (bonus && finalLevel>-11) {
|
if (bonus && finalLevel>-11) {
|
||||||
let newScore = Number(chances.score) + bonus;
|
let newScore = Number(chances.score) + bonus;
|
||||||
mergeObject(chances, this._computeCell(undefined, newScore), { overwrite: true });
|
mergeObject(chances, this._computeCell(null, newScore), { overwrite: true });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ import { Misc } from "./misc.js";
|
|||||||
import { RdDBonus } from "./rdd-bonus.js";
|
import { RdDBonus } from "./rdd-bonus.js";
|
||||||
import { RdDCarac } from "./rdd-carac.js";
|
import { RdDCarac } from "./rdd-carac.js";
|
||||||
import { RdDResolutionTable } from "./rdd-resolution-table.js";
|
import { RdDResolutionTable } from "./rdd-resolution-table.js";
|
||||||
import { ReglesOptionelles } from "./settings/regles-optionelles.js";
|
import { ReglesOptionelles } from "./regles-optionelles.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extend the base Dialog entity to select roll parameters
|
* Extend the base Dialog entity to select roll parameters
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
import { SystemCompendiums } from "./settings/system-compendiums.js";
|
|
||||||
|
|
||||||
export class RdDRollTables {
|
export class RdDRollTables {
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -16,7 +14,7 @@ export class RdDRollTables {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static async getSystemTable(tableName) {
|
static async getSystemTable(tableName) {
|
||||||
const pack = SystemCompendiums.getPack("tables-diverses");
|
const pack = game.packs.get("foundryvtt-reve-de-dragon.tables-diverses");
|
||||||
const index = await pack.getIndex();
|
const index = await pack.getIndex();
|
||||||
const entry = index.find(e => e.name === tableName);
|
const entry = index.find(e => e.name === tableName);
|
||||||
return await pack.getDocument(entry._id);
|
return await pack.getDocument(entry._id);
|
||||||
@ -26,7 +24,8 @@ export class RdDRollTables {
|
|||||||
static async drawItemFromRollTable(tableName, toChat = false) {
|
static async drawItemFromRollTable(tableName, toChat = false) {
|
||||||
const drawResult = await RdDRollTables.genericGetTableResult(tableName, toChat);
|
const drawResult = await RdDRollTables.genericGetTableResult(tableName, toChat);
|
||||||
const pack = game.packs.get(drawResult.documentCollection)
|
const pack = game.packs.get(drawResult.documentCollection)
|
||||||
return await pack.getDocument(drawResult.documentId)
|
let doc = await pack.getDocument(drawResult.documentId)
|
||||||
|
return doc
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import { SHOW_DICE } from "./constants.js";
|
|
||||||
import { RollDataAjustements } from "./rolldata-ajustements.js";
|
import { RollDataAjustements } from "./rolldata-ajustements.js";
|
||||||
import { RdDUtility } from "./rdd-utility.js";
|
import { RdDUtility } from "./rdd-utility.js";
|
||||||
import { TMRUtility } from "./tmr-utility.js";
|
import { TMRUtility } from "./tmr-utility.js";
|
||||||
@ -12,12 +11,11 @@ import { Poetique } from "./poetique.js";
|
|||||||
import { EffetsDraconiques } from "./tmr/effets-draconiques.js";
|
import { EffetsDraconiques } from "./tmr/effets-draconiques.js";
|
||||||
import { PixiTMR } from "./tmr/pixi-tmr.js";
|
import { PixiTMR } from "./tmr/pixi-tmr.js";
|
||||||
import { Draconique } from "./tmr/draconique.js";
|
import { Draconique } from "./tmr/draconique.js";
|
||||||
|
import { Misc } from "./misc.js";
|
||||||
import { HtmlUtility } from "./html-utility.js";
|
import { HtmlUtility } from "./html-utility.js";
|
||||||
import { ReglesOptionelles } from "./settings/regles-optionelles.js";
|
import { ReglesOptionelles } from "./regles-optionelles.js";
|
||||||
import { RdDDice } from "./rdd-dice.js";
|
import { RdDDice } from "./rdd-dice.js";
|
||||||
import { STATUSES } from "./settings/status-effects.js";
|
import { STATUSES } from "./status-effects.js";
|
||||||
import { RdDRencontre } from "./item-rencontre.js";
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
export class RdDTMRDialog extends Dialog {
|
export class RdDTMRDialog extends Dialog {
|
||||||
@ -91,7 +89,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
TMRUtility.getTMR(coord).type == 'fleuve'
|
TMRUtility.getTMR(coord).type == 'fleuve'
|
||||||
? it => TMRUtility.getTMR(it.system.coord).type == 'fleuve'
|
? it => TMRUtility.getTMR(it.system.coord).type == 'fleuve'
|
||||||
: it => it.system.coord == coord
|
: it => it.system.coord == coord
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -148,7 +146,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_tokenRencontre(rencontre) {
|
_tokenRencontre(rencontre) {
|
||||||
return EffetsDraconiques.rencontre.token(this.pixiTMR, rencontre, () => rencontre.system.coord);
|
return EffetsDraconiques.rencontre.token(this.pixiTMR, rencontre, () => rencontre.coord);
|
||||||
}
|
}
|
||||||
_tokenCaseSpeciale(casetmr) {
|
_tokenCaseSpeciale(casetmr) {
|
||||||
const caseData = casetmr;
|
const caseData = casetmr;
|
||||||
@ -250,7 +248,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
|
|
||||||
let tmrpos = document.getElementById("tmr-pos");
|
let tmrpos = document.getElementById("tmr-pos");
|
||||||
if (this.isDemiReveCache()) {
|
if (this.isDemiReveCache()) {
|
||||||
tmrpos.innerHTML = `?? ( ${TMRUtility.getTMRType(coord)})`;
|
tmrpos.innerHTML = `?? ( ${ TMRUtility.getTMRType(coord)})`;
|
||||||
} else {
|
} else {
|
||||||
tmrpos.innerHTML = `${coord} ( ${TMRUtility.getTMRLabel(coord)})`;
|
tmrpos.innerHTML = `${coord} ( ${TMRUtility.getTMRLabel(coord)})`;
|
||||||
}
|
}
|
||||||
@ -282,45 +280,27 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async onActionRencontre(action, tmr) {
|
|
||||||
switch (action) {
|
|
||||||
case 'derober':
|
|
||||||
await this.derober();
|
|
||||||
return;
|
|
||||||
case 'refouler':
|
|
||||||
await this.refouler();
|
|
||||||
break;
|
|
||||||
case 'maitriser':
|
|
||||||
await this.maitriserRencontre();
|
|
||||||
break;
|
|
||||||
case 'ignorer':
|
|
||||||
await this.ignorerRencontre();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
await this.postRencontre(tmr);
|
|
||||||
}
|
|
||||||
|
|
||||||
async derober() {
|
async derober() {
|
||||||
console.log("-> derober", this.currentRencontre);
|
|
||||||
await this.actor.addTMRRencontre(this.currentRencontre);
|
await this.actor.addTMRRencontre(this.currentRencontre);
|
||||||
|
console.log("-> derober", this.currentRencontre);
|
||||||
this._tellToGM(this.actor.name + " s'est dérobé et quitte les TMR.");
|
this._tellToGM(this.actor.name + " s'est dérobé et quitte les TMR.");
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async refouler() {
|
async refouler() {
|
||||||
console.log("-> refouler", this.currentRencontre);
|
this._tellToGM(this.actor.name + " a refoulé : " + this.currentRencontre.name);
|
||||||
await this.actor.ajouterRefoulement(this.currentRencontre.system.refoulement, `${this.currentRencontre.system.genre == 'f' ? 'une' : 'un'} ${this.currentRencontre.name}`);
|
|
||||||
await this.actor.deleteTMRRencontreAtPosition(); // Remove the stored rencontre if necessary
|
await this.actor.deleteTMRRencontreAtPosition(); // Remove the stored rencontre if necessary
|
||||||
|
await this.actor.ajouterRefoulement(this.currentRencontre.refoulement ?? 1);
|
||||||
this.updateTokens();
|
this.updateTokens();
|
||||||
|
console.log("-> refouler", this.currentRencontre)
|
||||||
this.updateValuesDisplay();
|
this.updateValuesDisplay();
|
||||||
this.nettoyerRencontre();
|
this.nettoyerRencontre();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async ignorerRencontre() {
|
async ignorerRencontre() {
|
||||||
console.log("-> ignorer", this.currentRencontre);
|
this._tellToGM(this.actor.name + " a ignoré : " + this.currentRencontre.name);
|
||||||
this._tellToGM(this.actor.name + " a ignoré: " + this.currentRencontre.name);
|
|
||||||
await this.actor.deleteTMRRencontreAtPosition(); // Remove the stored rencontre if necessary
|
await this.actor.deleteTMRRencontreAtPosition(); // Remove the stored rencontre if necessary
|
||||||
this.updateTokens();
|
this.updateTokens();
|
||||||
this.updateValuesDisplay();
|
this.updateValuesDisplay();
|
||||||
@ -328,14 +308,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
// garder la trace de l'état en cours
|
colorierZoneRencontre(listCoordTMR) {
|
||||||
setRencontreState(state, listCoordTMR) {
|
|
||||||
this.rencontreState = state;
|
|
||||||
this.$marquerCasesTMR(listCoordTMR ?? []);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
$marquerCasesTMR(listCoordTMR) {
|
|
||||||
this.currentRencontre.graphics = []; // Keep track of rectangles to delete it
|
this.currentRencontre.graphics = []; // Keep track of rectangles to delete it
|
||||||
this.currentRencontre.locList = duplicate(listCoordTMR); // And track of allowed location
|
this.currentRencontre.locList = duplicate(listCoordTMR); // And track of allowed location
|
||||||
for (let coordTMR of listCoordTMR) {
|
for (let coordTMR of listCoordTMR) {
|
||||||
@ -351,6 +324,23 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
// garder la trace de l'état en cours
|
||||||
|
setStateRencontre(state) {
|
||||||
|
this.rencontreState = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async choisirCasePortee(coord, portee) {
|
||||||
|
// Récupère la liste des cases à portées
|
||||||
|
this.colorierZoneRencontre(TMRUtility.getTMRPortee(coord, portee));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async choisirCaseType(type) {
|
||||||
|
this.colorierZoneRencontre(TMRUtility.filterTMR(it => it.type == type).map(it => it.coord));
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
checkQuitterTMR() {
|
checkQuitterTMR() {
|
||||||
|
|
||||||
@ -375,15 +365,15 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async quitterLesTMRInconscient() {
|
async quitterLesTMRInconscient() {
|
||||||
await this.refouler();
|
if (this.currentRencontre?.isPersistant) {
|
||||||
|
await this.refouler();
|
||||||
|
}
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async maitriserRencontre() {
|
async maitriserRencontre() {
|
||||||
console.log("-> maitriser", this.currentRencontre);
|
this.actor.deleteTMRRencontreAtPosition();
|
||||||
|
|
||||||
await this.actor.deleteTMRRencontreAtPosition();
|
|
||||||
this.updateTokens();
|
this.updateTokens();
|
||||||
|
|
||||||
let rencontreData = {
|
let rencontreData = {
|
||||||
@ -394,7 +384,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
rencontre: this.currentRencontre,
|
rencontre: this.currentRencontre,
|
||||||
nbRounds: 1,
|
nbRounds: 1,
|
||||||
canClose: false,
|
canClose: false,
|
||||||
selectedCarac: { label: "reve-actuel" },
|
selectedCarac: {label: "reve-actuel"},
|
||||||
tmr: TMRUtility.getTMR(this._getActorCoord())
|
tmr: TMRUtility.getTMR(this._getActorCoord())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -403,6 +393,8 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async _tentativeMaitrise(rencData) {
|
async _tentativeMaitrise(rencData) {
|
||||||
|
console.log("-> matriser", rencData);
|
||||||
|
|
||||||
rencData.reve = this.actor.getReveActuel();
|
rencData.reve = this.actor.getReveActuel();
|
||||||
rencData.etat = this.actor.getEtatGeneral();
|
rencData.etat = this.actor.getEtatGeneral();
|
||||||
|
|
||||||
@ -412,67 +404,41 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
? this._rollPresentCite(rencData)
|
? this._rollPresentCite(rencData)
|
||||||
: await RdDResolutionTable.roll(rencData.reve, RollDataAjustements.sum(rencData.ajustements));
|
: await RdDResolutionTable.roll(rencData.reve, RollDataAjustements.sum(rencData.ajustements));
|
||||||
|
|
||||||
const result = rencData.rolled.isSuccess
|
let postProcess = await TMRRencontres.gererRencontre(this, rencData);
|
||||||
? rencData.rencontre.system.succes
|
|
||||||
: rencData.rencontre.system.echec;
|
|
||||||
|
|
||||||
await RdDRencontre.appliquer(result.effets, this, rencData);
|
|
||||||
|
|
||||||
rencData.poesie = { extrait: result.poesie, reference: result.reference };
|
|
||||||
rencData.message = this.formatMessageRencontre(rencData, result.message);
|
|
||||||
|
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
|
||||||
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-rencontre-tmr.html`, rencData)
|
content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-rencontre-tmr.html`, rencData)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (postProcess) {
|
||||||
|
/** Gère les rencontres avec du post-processing (passeur, messagers, tourbillons, ...) */
|
||||||
|
await postProcess(this, rencData);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.currentRencontre = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
this.updateValuesDisplay();
|
this.updateValuesDisplay();
|
||||||
if (this.checkQuitterTMR()) {
|
if (this.checkQuitterTMR()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (this.rencontreState == 'persistant') {
|
else if (rencData.rolled.isEchec && rencData.rencontre.isPersistant) {
|
||||||
this._nouvelleTentativeMaitrise(rencData);
|
setTimeout(() => {
|
||||||
}
|
rencData.nbRounds++;
|
||||||
else if (!this.isRencontreDeplacement()) {
|
if (ReglesOptionelles.isUsing("appliquer-fatigue")) {
|
||||||
this.nettoyerRencontre();
|
this.cumulFatigue += this.fatigueParCase;
|
||||||
}
|
}
|
||||||
}
|
this._tentativeMaitrise(rencData);
|
||||||
|
this._deleteTmrMessages(rencData.actor, rencData.nbRounds);
|
||||||
_nouvelleTentativeMaitrise(rencData) {
|
}, 2000);
|
||||||
setTimeout(() => {
|
|
||||||
// TODO: remplacer par une boucle while(this.currentRencontre) ?
|
|
||||||
rencData.nbRounds++;
|
|
||||||
if (ReglesOptionelles.isUsing("appliquer-fatigue")) {
|
|
||||||
this.cumulFatigue += this.fatigueParCase;
|
|
||||||
}
|
|
||||||
this._tentativeMaitrise(rencData);
|
|
||||||
this._deleteTmrMessages(rencData.actor, rencData.nbRounds);
|
|
||||||
}, 2000);
|
|
||||||
this.rencontreState == 'normal';
|
|
||||||
}
|
|
||||||
|
|
||||||
formatMessageRencontre(rencData, template) {
|
|
||||||
let messageDuree = ''
|
|
||||||
if (rencData.nbRounds > 1) {
|
|
||||||
if (rencData.rolled.isSuccess) {
|
|
||||||
messageDuree = ` Au total, vous avez passé ${rencData.nbRounds} rounds à vous battre!`;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
messageDuree = ` Vous avez passé ${rencData.nbRounds} rounds à lutter!`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
const compiled = Handlebars.compile(template);
|
|
||||||
return compiled(rencData) + messageDuree ;
|
|
||||||
} catch (error) {
|
|
||||||
return template + messageDuree ;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_rollPresentCite(rencData) {
|
_rollPresentCite(rencontreData) {
|
||||||
let rolled = RdDResolutionTable.computeChances(rencData.reve, 0);
|
let rolled = RdDResolutionTable.computeChances(rencontreData.reve, 0);
|
||||||
mergeObject(rolled, { caracValue: rencData.reve, finalLevel: 0, roll: rolled.score });
|
mergeObject(rolled, { caracValue: rencontreData.reve, finalLevel: 0, roll: rolled.score });
|
||||||
RdDResolutionTable.succesRequis(rolled);
|
RdDResolutionTable.succesRequis(rolled);
|
||||||
return rolled;
|
return rolled;
|
||||||
}
|
}
|
||||||
@ -516,16 +482,15 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
if (this._presentCite(tmr)) {
|
if (this._presentCite(tmr)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.currentRencontre = await this._jetDeRencontre(tmr);
|
let rencontre = await this._jetDeRencontre(tmr);
|
||||||
if (this.currentRencontre) {
|
|
||||||
if (this.rencontresExistantes.find(it => it.id == this.currentRencontre.id)){
|
if (rencontre) { // Manages it
|
||||||
// rencontre en attente suite à dérobade
|
if (rencontre.rencontre) rencontre = rencontre.rencontre; // Manage stored rencontres
|
||||||
await this.maitriserRencontre();
|
console.log("manageRencontre", rencontre);
|
||||||
}
|
this.currentRencontre = duplicate(rencontre);
|
||||||
else {
|
|
||||||
let dialog = new RdDTMRRencontreDialog(this, this.currentRencontre, tmr);
|
let dialog = new RdDTMRRencontreDialog(this, this.currentRencontre, () => this.postRencontre(tmr));
|
||||||
dialog.render(true);
|
dialog.render(true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.postRencontre(tmr);
|
this.postRencontre(tmr);
|
||||||
@ -538,18 +503,15 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
if (presentCite) {
|
if (presentCite) {
|
||||||
this.minimize();
|
this.minimize();
|
||||||
const caseData = presentCite;
|
const caseData = presentCite;
|
||||||
EffetsDraconiques.presentCites.choisirUnPresent(caseData, (present => this._utiliserPresentCite(presentCite, present, tmr)));
|
EffetsDraconiques.presentCites.choisirUnPresent(caseData, (type => this._utiliserPresentCite(presentCite, type, tmr)));
|
||||||
}
|
}
|
||||||
return presentCite;
|
return presentCite;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async _utiliserPresentCite(presentCite, present, tmr) {
|
async _utiliserPresentCite(presentCite, typeRencontre, tmr) {
|
||||||
this.currentRencontre = present.clone({
|
this.currentRencontre = TMRRencontres.getRencontre(typeRencontre);
|
||||||
'system.force': await RdDDice.rollTotal(present.system.formule),
|
await TMRRencontres.evaluerForceRencontre(this.currentRencontre);
|
||||||
'system.coord': tmr.coord
|
|
||||||
}, {save: false});
|
|
||||||
|
|
||||||
await EffetsDraconiques.presentCites.ouvrirLePresent(this.actor, presentCite);
|
await EffetsDraconiques.presentCites.ouvrirLePresent(this.actor, presentCite);
|
||||||
this.removeToken(tmr, presentCite);
|
this.removeToken(tmr, presentCite);
|
||||||
|
|
||||||
@ -571,26 +533,33 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async _jetDeRencontre(tmr) {
|
async _jetDeRencontre(tmr) {
|
||||||
let rencontre = this.lookupRencontreExistente(tmr);
|
let rencontre = this.rencontresExistantes.find(prev => prev.coord == tmr.coord);
|
||||||
if (rencontre) {
|
if (rencontre) {
|
||||||
return TMRRencontres.calculRencontre(rencontre, tmr);
|
return rencontre;
|
||||||
}
|
}
|
||||||
let locTMR = (this.isDemiReveCache()
|
let locTMR = (this.isDemiReveCache()
|
||||||
? TMRUtility.getTMRType(tmr.coord) + " ??"
|
? Misc.upperFirst(tmr.type) + " ??"
|
||||||
: tmr.label + " (" + tmr.coord + ")");
|
: tmr.label + " (" + tmr.coord + ")");
|
||||||
|
|
||||||
let myRoll = await RdDDice.rollTotal("1dt", { showDice: SHOW_DICE });
|
let myRoll = await RdDDice.rollTotal("1dt");
|
||||||
if (myRoll == 7) {
|
if (TMRUtility.isForceRencontre() || myRoll == 7) {
|
||||||
this._tellToUser(myRoll + ": Rencontre en " + locTMR);
|
this._tellToUser(myRoll + ": Rencontre en " + locTMR);
|
||||||
return await TMRRencontres.getRencontreAleatoire(tmr, this.actor.isMauvaiseRencontre())
|
return await this.rencontreTMRRoll(tmr, this.actor.isRencontreSpeciale());
|
||||||
} else {
|
} else {
|
||||||
this._tellToUser(myRoll + ": Pas de rencontre en " + locTMR);
|
this._tellToUser(myRoll + ": Pas de rencontre en " + locTMR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lookupRencontreExistente(tmr) {
|
/* -------------------------------------------- */
|
||||||
return this.rencontresExistantes.find(it => it.system.coord == tmr.coord)
|
async rencontreTMRRoll(tmr, isMauvaise = false) {
|
||||||
?? this.rencontresExistantes.find(it => it.system.coord == "");
|
let rencontre = TMRUtility.utiliseForceRencontre() ??
|
||||||
|
(isMauvaise
|
||||||
|
? await TMRRencontres.getMauvaiseRencontre()
|
||||||
|
: await TMRRencontres.getRencontreAleatoire(tmr.type));
|
||||||
|
rencontre.coord = tmr.coord;
|
||||||
|
rencontre.date = game.system.rdd.calendrier.getDateFromIndex();
|
||||||
|
rencontre.heure = game.system.rdd.calendrier.getCurrentHeure();
|
||||||
|
return rencontre;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -618,7 +587,7 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
maitrise: { verbe: 'maîtriser', action: 'Maîtriser le fleuve' }
|
maitrise: { verbe: 'maîtriser', action: 'Maîtriser le fleuve' }
|
||||||
}
|
}
|
||||||
rollData.double = EffetsDraconiques.isDoubleResistanceFleuve(this.actor) ? true : undefined,
|
rollData.double = EffetsDraconiques.isDoubleResistanceFleuve(this.actor) ? true : undefined,
|
||||||
rollData.competence.system.defaut_carac = 'reve-actuel';
|
rollData.competence.system.defaut_carac = 'reve-actuel';
|
||||||
await this._rollMaitriseCaseHumide(rollData);
|
await this._rollMaitriseCaseHumide(rollData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -909,14 +878,16 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
|
|
||||||
if (this.isDemiReveCache()) {
|
if (this.isDemiReveCache()) {
|
||||||
if (this.isTerreAttache(targetCoord)
|
if (this.isTerreAttache(targetCoord)
|
||||||
|| this.isConnaissanceFleuve(currentCoord, targetCoord)
|
|| this.isConnaissanceFleuve(currentCoord, targetCoord)
|
||||||
|| deplacementType == 'changeur') {
|
|| deplacementType == 'changeur')
|
||||||
|
{
|
||||||
// déplacement possible
|
// déplacement possible
|
||||||
await this.actor.setTMRVisible(true);
|
await this.actor.setTMRVisible(true);
|
||||||
this.demiReve = this._tokenDemiReve();
|
this.demiReve = this._tokenDemiReve();
|
||||||
this._trackToken(this.demiReve);
|
this._trackToken(this.demiReve);
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
ui.notifications.error(`Vous ne connaissez plus votre position dans les TMR.
|
ui.notifications.error(`Vous ne connaissez plus votre position dans les TMR.
|
||||||
Vous devez utiliser les boutons de direction pour vous déplacer.
|
Vous devez utiliser les boutons de direction pour vous déplacer.
|
||||||
Une fois que vous aurez retrouvé votre demi-rêve, demandez au gardien de vérifier et rendre les TMR visibles.
|
Une fois que vous aurez retrouvé votre demi-rêve, demandez au gardien de vérifier et rendre les TMR visibles.
|
||||||
@ -925,18 +896,20 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (deplacementType) {
|
switch (deplacementType){
|
||||||
case 'normal':
|
case 'normal':
|
||||||
case 'changeur':
|
|
||||||
case 'passeur':
|
|
||||||
await this._deplacerDemiReve(targetCoord, deplacementType);
|
await this._deplacerDemiReve(targetCoord, deplacementType);
|
||||||
break;
|
break;
|
||||||
case 'messager':
|
case 'messager':
|
||||||
await this._messagerDemiReve(targetCoord);
|
await this._messagerDemiReve(targetCoord);
|
||||||
break;
|
break;
|
||||||
|
case 'changeur':
|
||||||
|
case 'passeur':
|
||||||
|
await this._deplacerDemiReve(targetCoord, deplacementType);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ui.notifications.error("Vous ne pouvez pas vous déplacer que sur des cases adjacentes à votre position ou valides dans le cas d'une rencontre");
|
ui.notifications.error("Vous ne pouvez pas vous déplacer que sur des cases adjacentes à votre position ou valides dans le cas d'une rencontre");
|
||||||
console.log("STATUS :", this.rencontreState, this.currentRencontre);
|
console.log("STATUS :", this.rencontreState, this.currentRencontre);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.checkQuitterTMR();
|
this.checkQuitterTMR();
|
||||||
@ -944,23 +917,19 @@ export class RdDTMRDialog extends Dialog {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_calculDeplacement(targetCoord, currentCoord, fromOddq, toOddq) {
|
_calculDeplacement(targetCoord, currentCoord, fromOddq, toOddq) {
|
||||||
if (this.isRencontreDeplacement()) {
|
|
||||||
if (this.currentRencontre?.locList?.find(coord => coord == targetCoord)) {
|
const isInArea = this.rencontreState == 'aucune'
|
||||||
return this.rencontreState;
|
? (this.isTerreAttache(targetCoord) || this.isConnaissanceFleuve(currentCoord, targetCoord) || TMRUtility.distanceOddq(fromOddq, toOddq) <= 1)
|
||||||
}
|
: this.currentRencontre?.locList?.find(coord => coord == targetCoord) ?? false
|
||||||
}
|
if (isInArea) {
|
||||||
else {
|
switch (this.rencontreState) {
|
||||||
if (this.isTerreAttache(targetCoord) || this.isConnaissanceFleuve(currentCoord, targetCoord) || TMRUtility.distanceOddq(fromOddq, toOddq) <= 1) {
|
case 'aucune': return 'normal';
|
||||||
return 'normal'
|
case 'passeur': case 'changeur': case 'messager': return this.rencontreState;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 'erreur';
|
return 'erreur';
|
||||||
}
|
}
|
||||||
|
|
||||||
isRencontreDeplacement() {
|
|
||||||
return ['passeur', 'changeur', 'messager'].includes(this.rencontreState);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async _messagerDemiReve(targetCoord) {
|
async _messagerDemiReve(targetCoord) {
|
||||||
/*
|
/*
|
||||||
|
@ -2,22 +2,20 @@
|
|||||||
export class RdDTMRRencontreDialog extends Dialog {
|
export class RdDTMRRencontreDialog extends Dialog {
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
constructor(tmrApp, rencontre, tmr) {
|
constructor(tmrApp, rencontre, postRencontre) {
|
||||||
const dialogConf = {
|
const dialogConf = {
|
||||||
title: "Rencontre en TMR!",
|
title: "Rencontre en TMR!",
|
||||||
content: "Vous rencontrez un " + rencontre.name + " de force " + rencontre.system.force + "<br>",
|
content: "Vous rencontrez un " + rencontre.name + " de force " + rencontre.force + "<br>",
|
||||||
buttons: {
|
buttons: {
|
||||||
derober: { icon: '<i class="fas fa-check"></i>', label: "Se dérober", callback: () => this.onButtonAction('derober') },
|
derober: { icon: '<i class="fas fa-check"></i>', label: "Se dérober", callback: () => { this.onButtonFuir(() => tmrApp.derober()); } },
|
||||||
maitiser: { icon: '<i class="fas fa-check"></i>', label: "Maîtriser", callback: () => this.onButtonAction('maitriser') }
|
refouler: { icon: '<i class="fas fa-check"></i>', label: "Refouler", callback: () => this.onButtonAction(() => tmrApp.refouler()) },
|
||||||
|
maitiser: { icon: '<i class="fas fa-check"></i>', label: "Maîtriser", callback: () => this.onButtonAction(() => tmrApp.maitriserRencontre()) }
|
||||||
},
|
},
|
||||||
default: "derober"
|
default: "derober"
|
||||||
}
|
};
|
||||||
if ((rencontre.system.refoulement ?? 0) == 0) {
|
if (rencontre.ignorer) {
|
||||||
dialogConf.buttons.ignorer = { icon: '<i class="fas fa-check"></i>', label: "Ignorer", callback: () => this.onButtonAction('ignorer') }
|
dialogConf.buttons.ignorer = { icon: '<i class="fas fa-check"></i>', label: "Ignorer", callback: () => this.onButtonAction(() => tmrApp.ignorerRencontre()) }
|
||||||
}
|
};
|
||||||
else {
|
|
||||||
dialogConf.buttons.refouler = { icon: '<i class="fas fa-check"></i>', label: "Refouler", callback: () => this.onButtonAction('refouler') }
|
|
||||||
}
|
|
||||||
|
|
||||||
const dialogOptions = {
|
const dialogOptions = {
|
||||||
classes: ["tmrrencdialog"],
|
classes: ["tmrrencdialog"],
|
||||||
@ -27,16 +25,23 @@ export class RdDTMRRencontreDialog extends Dialog {
|
|||||||
super(dialogConf, dialogOptions);
|
super(dialogConf, dialogOptions);
|
||||||
|
|
||||||
this.toClose = false;
|
this.toClose = false;
|
||||||
this.tmr = tmr;
|
this.rencontreData = duplicate(rencontre);
|
||||||
|
this.postRencontre = postRencontre;
|
||||||
this.tmrApp = tmrApp;
|
this.tmrApp = tmrApp;
|
||||||
this.tmrApp.minimize();
|
this.tmrApp.minimize();
|
||||||
}
|
}
|
||||||
|
|
||||||
async onButtonAction(action) {
|
async onButtonAction(action) {
|
||||||
this.toClose = true;
|
this.toClose = true;
|
||||||
this.tmrApp.onActionRencontre(action, this.tmr)
|
await action();
|
||||||
|
this.postRencontre();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async onButtonFuir(action) {
|
||||||
|
this.toClose = true;
|
||||||
|
await action();
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
close() {
|
close() {
|
||||||
if (this.toClose) {
|
if (this.toClose) {
|
||||||
|
@ -6,14 +6,14 @@ import { Misc } from "./misc.js";
|
|||||||
import { Grammar } from "./grammar.js";
|
import { Grammar } from "./grammar.js";
|
||||||
import { TMRUtility } from "./tmr-utility.js";
|
import { TMRUtility } from "./tmr-utility.js";
|
||||||
import { DialogItemAchat } from "./dialog-item-achat.js";
|
import { DialogItemAchat } from "./dialog-item-achat.js";
|
||||||
import { ReglesOptionelles } from "./settings/regles-optionelles.js";
|
import { ReglesOptionelles } from "./regles-optionelles.js";
|
||||||
import { RdDDice } from "./rdd-dice.js";
|
import { RdDDice } from "./rdd-dice.js";
|
||||||
import { RdDItem } from "./item.js";
|
import { RdDItem } from "./item.js";
|
||||||
import { Monnaie } from "./item-monnaie.js";
|
import { Monnaie } from "./item-monnaie.js";
|
||||||
import { RdDPossession } from "./rdd-possession.js";
|
import { RdDPossession } from "./rdd-possession.js";
|
||||||
import { RdDNameGen } from "./rdd-namegen.js";
|
import { RdDNameGen } from "./rdd-namegen.js";
|
||||||
import { RdDConfirm } from "./rdd-confirm.js";
|
import { RdDConfirm } from "./rdd-confirm.js";
|
||||||
import { RdDCalendrier } from "./rdd-calendrier.js";
|
import { RdDActor } from "./actor.js";
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
// This table starts at 0 -> niveau -10
|
// This table starts at 0 -> niveau -10
|
||||||
@ -181,7 +181,6 @@ export class RdDUtility {
|
|||||||
'systems/foundryvtt-reve-de-dragon/templates/item-livre-sheet.html',
|
'systems/foundryvtt-reve-de-dragon/templates/item-livre-sheet.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/item-tache-sheet.html',
|
'systems/foundryvtt-reve-de-dragon/templates/item-tache-sheet.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/item-potion-sheet.html',
|
'systems/foundryvtt-reve-de-dragon/templates/item-potion-sheet.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/item-rencontre-sheet.html',
|
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/item-rencontresTMR-sheet.html',
|
'systems/foundryvtt-reve-de-dragon/templates/item-rencontresTMR-sheet.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/item-queue-sheet.html',
|
'systems/foundryvtt-reve-de-dragon/templates/item-queue-sheet.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/item-souffle-sheet.html',
|
'systems/foundryvtt-reve-de-dragon/templates/item-souffle-sheet.html',
|
||||||
@ -193,24 +192,33 @@ export class RdDUtility {
|
|||||||
'systems/foundryvtt-reve-de-dragon/templates/item-nourritureboisson-sheet.html',
|
'systems/foundryvtt-reve-de-dragon/templates/item-nourritureboisson-sheet.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/item-signedraconique-sheet.html',
|
'systems/foundryvtt-reve-de-dragon/templates/item-signedraconique-sheet.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/item-possession-sheet.html',
|
'systems/foundryvtt-reve-de-dragon/templates/item-possession-sheet.html',
|
||||||
// partial enums
|
'systems/foundryvtt-reve-de-dragon/templates/competence-carac-defaut.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-caracteristiques.html',
|
'systems/foundryvtt-reve-de-dragon/templates/competence-base.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-base-competence.html',
|
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-aspect-tarot.html',
|
'systems/foundryvtt-reve-de-dragon/templates/enum-aspect-tarot.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-competence.html',
|
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-competence.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-ingredient.html',
|
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-ingredient.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-parade.html',
|
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-parade.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-potion.html',
|
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-vehicule.html',
|
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-vehicule.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-competence.html',
|
'systems/foundryvtt-reve-de-dragon/templates/enum-competence.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-herbesoin-ingredient.html',
|
'systems/foundryvtt-reve-de-dragon/templates/enum-herbesoin-ingredient.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-heures.html',
|
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-potion.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-initpremierround.html',
|
'systems/foundryvtt-reve-de-dragon/templates/enum-initpremierround.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-niveau-ethylisme.html',
|
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-rarete.html',
|
'systems/foundryvtt-reve-de-dragon/templates/enum-rarete.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-draconic.html',
|
'systems/foundryvtt-reve-de-dragon/templates/sort-draconic.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-tmr-type.html',
|
'systems/foundryvtt-reve-de-dragon/templates/sort-tmr.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/enum-tmr-effet.html',
|
'systems/foundryvtt-reve-de-dragon/templates/niveau-ethylisme.html',
|
||||||
|
'systems/foundryvtt-reve-de-dragon/templates/casetmr-specific-list.html',
|
||||||
|
// Dialogs
|
||||||
|
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-resolution.html',
|
||||||
|
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html',
|
||||||
|
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html',
|
||||||
|
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-sort.html',
|
||||||
|
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-encaisser.html',
|
||||||
|
'systems/foundryvtt-reve-de-dragon/templates/dialog-validation-encaissement.html',
|
||||||
|
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-meditation.html',
|
||||||
|
'systems/foundryvtt-reve-de-dragon/templates/dialog-tmr.html',
|
||||||
|
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-alchimie.html',
|
||||||
|
'systems/foundryvtt-reve-de-dragon/templates/dialog-astrologie-joueur.html',
|
||||||
// Partials
|
// Partials
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/partial-description-overflow.html',
|
'systems/foundryvtt-reve-de-dragon/templates/partial-description-overflow.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/partial-description-sort.html',
|
'systems/foundryvtt-reve-de-dragon/templates/partial-description-sort.html',
|
||||||
@ -224,20 +232,10 @@ export class RdDUtility {
|
|||||||
'systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html',
|
'systems/foundryvtt-reve-de-dragon/templates/partial-roll-forcer.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/partial-select-carac.html',
|
'systems/foundryvtt-reve-de-dragon/templates/partial-select-carac.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html',
|
'systems/foundryvtt-reve-de-dragon/templates/partial-item-description.html',
|
||||||
// Dialogs
|
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-resolution.html',
|
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html',
|
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html',
|
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-sort.html',
|
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-encaisser.html',
|
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-validation-encaissement.html',
|
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-meditation.html',
|
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-tmr.html',
|
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-alchimie.html',
|
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/dialog-astrologie-joueur.html',
|
|
||||||
// Calendrier
|
// Calendrier
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/calendar-template.html',
|
'systems/foundryvtt-reve-de-dragon/templates/calendar-template.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/calendar-editor-template.html',
|
'systems/foundryvtt-reve-de-dragon/templates/calendar-editor-template.html',
|
||||||
|
'systems/foundryvtt-reve-de-dragon/templates/heures-select-option.html',
|
||||||
// HUD
|
// HUD
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/hud-actor-init.html',
|
'systems/foundryvtt-reve-de-dragon/templates/hud-actor-init.html',
|
||||||
'systems/foundryvtt-reve-de-dragon/templates/hud-actor-attaque.html',
|
'systems/foundryvtt-reve-de-dragon/templates/hud-actor-attaque.html',
|
||||||
@ -280,11 +278,9 @@ export class RdDUtility {
|
|||||||
Handlebars.registerHelper('caseTmr-label', coord => TMRUtility.getTMRLabel(coord));
|
Handlebars.registerHelper('caseTmr-label', coord => TMRUtility.getTMRLabel(coord));
|
||||||
Handlebars.registerHelper('caseTmr-type', coord => TMRUtility.getTMRType(coord));
|
Handlebars.registerHelper('caseTmr-type', coord => TMRUtility.getTMRType(coord));
|
||||||
Handlebars.registerHelper('typeTmr-name', coord => TMRUtility.typeTmrName(coord));
|
Handlebars.registerHelper('typeTmr-name', coord => TMRUtility.typeTmrName(coord));
|
||||||
Handlebars.registerHelper('effetRencontre-name', coord => TMRUtility.typeTmrName(coord));
|
|
||||||
Handlebars.registerHelper('signeHeure', (key, heure) => RdDCalendrier.getSigneAs(key, heure));
|
|
||||||
Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1)));
|
Handlebars.registerHelper('min', (...args) => Math.min(...args.slice(0, -1)));
|
||||||
Handlebars.registerHelper('regle-optionnelle', (option) => ReglesOptionelles.isUsing(option));
|
Handlebars.registerHelper('regle-optionnelle', (option) => ReglesOptionelles.isUsing(option));
|
||||||
Handlebars.registerHelper('trier', list => list.sort((a, b) => a.name.localeCompare(b.name)));
|
|
||||||
Handlebars.registerHelper('filtreTriCompetences', competences => competences.filter(it => it.system.isVisible)
|
Handlebars.registerHelper('filtreTriCompetences', competences => competences.filter(it => it.system.isVisible)
|
||||||
.sort((a, b) => {
|
.sort((a, b) => {
|
||||||
if (a.name.startsWith("Survie") && b.name.startsWith("Survie")) {
|
if (a.name.startsWith("Survie") && b.name.startsWith("Survie")) {
|
||||||
@ -416,7 +412,6 @@ export class RdDUtility {
|
|||||||
RdDUtility.filterEquipementParType(formData, itemTypes);
|
RdDUtility.filterEquipementParType(formData, itemTypes);
|
||||||
|
|
||||||
formData.sorts = this.arrayOrEmpty(itemTypes['sort']);
|
formData.sorts = this.arrayOrEmpty(itemTypes['sort']);
|
||||||
formData.rencontres = this.arrayOrEmpty(itemTypes['rencontre']);
|
|
||||||
formData.casestmr = this.arrayOrEmpty(itemTypes['casetmr']);
|
formData.casestmr = this.arrayOrEmpty(itemTypes['casetmr']);
|
||||||
formData.signesdraconiques = this.arrayOrEmpty(itemTypes['signedraconique']);
|
formData.signesdraconiques = this.arrayOrEmpty(itemTypes['signedraconique']);
|
||||||
formData.queues = this.arrayOrEmpty(itemTypes['queue']);
|
formData.queues = this.arrayOrEmpty(itemTypes['queue']);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { SYSTEM_RDD } from "../constants.js";
|
import { SYSTEM_RDD } from "./constants.js";
|
||||||
import { Misc } from "../misc.js";
|
import { Misc } from "./misc.js";
|
||||||
|
|
||||||
const listeReglesOptionelles = [
|
const listeReglesOptionelles = [
|
||||||
{ group: 'Règles de combat', name: 'recul', descr: "Appliquer le recul en cas de particulière en force ou de charge" },
|
{ group: 'Règles de combat', name: 'recul', descr: "Appliquer le recul en cas de particulière en force ou de charge" },
|
||||||
@ -18,9 +18,8 @@ const listeReglesOptionelles = [
|
|||||||
{ group: 'Règles générales', name: 'appliquer-fatigue', descr: "Appliquer les règles de fatigue"},
|
{ group: 'Règles générales', name: 'appliquer-fatigue', descr: "Appliquer les règles de fatigue"},
|
||||||
{ group: 'Règles générales', name: 'afficher-colonnes-reussite', descr: "Afficher le nombre de colonnes de réussite ou d'échec", default: false },
|
{ group: 'Règles générales', name: 'afficher-colonnes-reussite', descr: "Afficher le nombre de colonnes de réussite ou d'échec", default: false },
|
||||||
|
|
||||||
{ group: 'Confirmations', name: 'confirmation-tmr', descr: "Confirmer pour monter dans les TMR", scope: "client"},
|
{ group: 'Confirmations', name: 'confirmation-tmr', descr: "Confirmer pour monter dans les TMR", scope: "client"},
|
||||||
{ group: 'Confirmations', name: 'confirmation-refouler', descr: "Confirmer avant de refouler", scope: "client"},
|
{ group: 'Confirmations', name: 'confirmation-vider', descr: "Confirmer pour vider l'équipement", scope: "client"},
|
||||||
{ group: 'Confirmations', name: 'confirmation-vider', descr: "Confirmer pour vider l'équipement", scope: "client"},
|
|
||||||
{ group: 'Confirmations', name: 'confirmation-supprimer-lien-acteur', descr: "Confirmer pour détacher un animal/suivant/véhicule", scope: "client"},
|
{ group: 'Confirmations', name: 'confirmation-supprimer-lien-acteur', descr: "Confirmer pour détacher un animal/suivant/véhicule", scope: "client"},
|
||||||
{ group: 'Confirmations', name: 'confirmation-supprimer-equipement', descr: "Confirmer la suppression des équipements", scope: "client"},
|
{ group: 'Confirmations', name: 'confirmation-supprimer-equipement', descr: "Confirmer la suppression des équipements", scope: "client"},
|
||||||
{ group: 'Confirmations', name: 'confirmation-supprimer-oeuvre', descr: "Confirmer la suppression des oeuvres", scope: "client"},
|
{ group: 'Confirmations', name: 'confirmation-supprimer-oeuvre', descr: "Confirmer la suppression des oeuvres", scope: "client"},
|
||||||
@ -43,7 +42,7 @@ export class ReglesOptionelles extends FormApplication {
|
|||||||
|
|
||||||
game.settings.registerMenu(SYSTEM_RDD, "rdd-options-regles", {
|
game.settings.registerMenu(SYSTEM_RDD, "rdd-options-regles", {
|
||||||
name: "Choisir les règles optionelles",
|
name: "Choisir les règles optionelles",
|
||||||
label: "Règles optionelles",
|
label: "Choix des règles optionelles",
|
||||||
hint: "Ouvre la fenêtre de sélection des règles optionelles",
|
hint: "Ouvre la fenêtre de sélection des règles optionelles",
|
||||||
icon: "fas fa-bars",
|
icon: "fas fa-bars",
|
||||||
type: ReglesOptionelles
|
type: ReglesOptionelles
|
||||||
@ -61,8 +60,8 @@ export class ReglesOptionelles extends FormApplication {
|
|||||||
static get defaultOptions() {
|
static get defaultOptions() {
|
||||||
const options = super.defaultOptions;
|
const options = super.defaultOptions;
|
||||||
mergeObject(options, {
|
mergeObject(options, {
|
||||||
id: "regles-optionelles",
|
id: "optional-settings",
|
||||||
template: "systems/foundryvtt-reve-de-dragon/templates/settings/regles-optionelles.html",
|
template: "systems/foundryvtt-reve-de-dragon/templates/regles-optionelles.html",
|
||||||
height: 600,
|
height: 600,
|
||||||
width: 450,
|
width: 450,
|
||||||
minimizable: false,
|
minimizable: false,
|
@ -6,7 +6,7 @@ import { Misc } from "./misc.js";
|
|||||||
import { RdDBonus } from "./rdd-bonus.js";
|
import { RdDBonus } from "./rdd-bonus.js";
|
||||||
import { RdDCarac } from "./rdd-carac.js";
|
import { RdDCarac } from "./rdd-carac.js";
|
||||||
import { RdDUtility } from "./rdd-utility.js";
|
import { RdDUtility } from "./rdd-utility.js";
|
||||||
import { ReglesOptionelles } from "./settings/regles-optionelles.js";
|
import { ReglesOptionelles } from "./regles-optionelles.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* tous les ajustements pouvant s'appliquer.
|
* tous les ajustements pouvant s'appliquer.
|
||||||
@ -120,7 +120,7 @@ export const referenceAjustements = {
|
|||||||
isVisible: (rollData, actor) => rollData.tmr && rollData.rencontre?.name,
|
isVisible: (rollData, actor) => rollData.tmr && rollData.rencontre?.name,
|
||||||
isUsed: (rollData, actor) => rollData.tmr && rollData.rencontre?.name,
|
isUsed: (rollData, actor) => rollData.tmr && rollData.rencontre?.name,
|
||||||
getLabel: (rollData, actor) => rollData.rencontre?.name,
|
getLabel: (rollData, actor) => rollData.rencontre?.name,
|
||||||
getValue: (rollData, actor) => - (rollData.rencontre?.system.force ?? 0)
|
getValue: (rollData, actor) => - (rollData.rencontre?.force ?? 0)
|
||||||
},
|
},
|
||||||
ethylismeAlcool: {
|
ethylismeAlcool: {
|
||||||
isVisible: (rollData, actor) => rollData.nbDoses != undefined,
|
isVisible: (rollData, actor) => rollData.nbDoses != undefined,
|
||||||
|
@ -1,124 +0,0 @@
|
|||||||
import { SYSTEM_RDD } from "../constants.js";
|
|
||||||
|
|
||||||
const COMPENDIUM_SETTING_PREFIX = 'compendium-';
|
|
||||||
|
|
||||||
const CONFIGURABLE_COMPENDIUMS = {
|
|
||||||
'tables-diverses': { label: "Tables aléatoires", type: "RollTable" },
|
|
||||||
'competences': { label: "Compétences", type: "Item" },
|
|
||||||
'queues-de-dragon': { label: "Queues de dragon", type: "Item" },
|
|
||||||
'ombres-de-thanatos': { label: "Ombres de Thanatos", type: "Item" },
|
|
||||||
'souffles-de-dragon': { label: "Souffles de Dragon", type: "Item" },
|
|
||||||
'tarot-draconique': { label: "Tarots draconiques", type: "Item" },
|
|
||||||
'rencontres': { label: "Rencontres dans les TMR", type: "Item" },
|
|
||||||
'tetes-de-dragon-pour-haut-revants': { label: "Têtes de dragons (haut-rêvant)", type: "Item" },
|
|
||||||
'tetes-de-dragon-pour-tous-personnages': { label: "Têtes de dragons (tous)", type: "Item" },
|
|
||||||
}
|
|
||||||
|
|
||||||
export class SystemCompendiums extends FormApplication {
|
|
||||||
static init() {
|
|
||||||
Object.keys(CONFIGURABLE_COMPENDIUMS).forEach(compendium => {
|
|
||||||
const definition = CONFIGURABLE_COMPENDIUMS[compendium];
|
|
||||||
mergeObject(definition, {
|
|
||||||
compendium: compendium,
|
|
||||||
default: SystemCompendiums._getDefaultCompendium(compendium),
|
|
||||||
setting: SystemCompendiums._getSettingCompendium(compendium)
|
|
||||||
});
|
|
||||||
|
|
||||||
game.settings.register(SYSTEM_RDD, definition.setting, {
|
|
||||||
name: definition.label,
|
|
||||||
default: definition.default,
|
|
||||||
scope: "world",
|
|
||||||
config: false,
|
|
||||||
type: String
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
game.settings.registerMenu(SYSTEM_RDD, "compendium-settings", {
|
|
||||||
name: "Choisir les compendiums système",
|
|
||||||
label: "Compendiums système",
|
|
||||||
hint: "Ouvre la fenêtre de sélection des compendiums système",
|
|
||||||
icon: "fas fa-bars",
|
|
||||||
type: SystemCompendiums
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
static getPack(compendium) {
|
|
||||||
return game.packs.get(SystemCompendiums.getCompendium(compendium));
|
|
||||||
}
|
|
||||||
|
|
||||||
static async getContent(compendium, docType) {
|
|
||||||
const pack = SystemCompendiums.getPack(compendium);
|
|
||||||
if (pack.metadata.type == docType) {
|
|
||||||
return await pack.getDocuments();
|
|
||||||
}
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
static async getItems(compendium) {
|
|
||||||
return await SystemCompendiums.getContent(compendium, 'Item')
|
|
||||||
}
|
|
||||||
|
|
||||||
static async getDefaultItems(compendium) {
|
|
||||||
const pack = game.packs.get(SystemCompendiums._getDefaultCompendium(compendium));
|
|
||||||
if (pack.metadata.type == 'Item') {
|
|
||||||
return await pack.getDocuments();
|
|
||||||
}
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
static getCompendium(compendium) {
|
|
||||||
const setting = CONFIGURABLE_COMPENDIUMS[compendium]?.setting;
|
|
||||||
return setting ? game.settings.get(SYSTEM_RDD, setting) : SystemCompendiums._getDefaultCompendium(compendium);
|
|
||||||
}
|
|
||||||
|
|
||||||
static _getSettingCompendium(compendium) {
|
|
||||||
return COMPENDIUM_SETTING_PREFIX + compendium;
|
|
||||||
}
|
|
||||||
|
|
||||||
static _getDefaultCompendium(compendium) {
|
|
||||||
return `${SYSTEM_RDD}.${compendium}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(...args) {
|
|
||||||
super(...args);
|
|
||||||
}
|
|
||||||
|
|
||||||
static get defaultOptions() {
|
|
||||||
const options = super.defaultOptions;
|
|
||||||
mergeObject(options, {
|
|
||||||
id: "system-compendiums",
|
|
||||||
template: "systems/foundryvtt-reve-de-dragon/templates/settings/system-compendiums.html",
|
|
||||||
height: 'fit-content',
|
|
||||||
width: 600,
|
|
||||||
minimizable: false,
|
|
||||||
closeOnSubmit: true,
|
|
||||||
title: "Compendiums système"
|
|
||||||
});
|
|
||||||
return options;
|
|
||||||
}
|
|
||||||
|
|
||||||
getData() {
|
|
||||||
const systemCompendiums = Object.values(CONFIGURABLE_COMPENDIUMS)
|
|
||||||
.map(it => mergeObject(it, { value: SystemCompendiums.getCompendium(it.compendium) }));
|
|
||||||
const availableCompendiums = game.packs.map(pack => { return {
|
|
||||||
name: pack.collection,
|
|
||||||
path: pack.collection.replace('.', " / "),
|
|
||||||
type: pack.metadata.type
|
|
||||||
} });
|
|
||||||
return mergeObject(super.getData(), {
|
|
||||||
systemCompendiums: systemCompendiums,
|
|
||||||
availableCompendiums: availableCompendiums
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
activateListeners(html) {
|
|
||||||
html.find("select.system-compendium-setting").change((event) => {
|
|
||||||
const compendium = $(event.currentTarget).data('compendium')
|
|
||||||
const value = $(event.currentTarget).val();
|
|
||||||
const systemCompendium = CONFIGURABLE_COMPENDIUMS[compendium];
|
|
||||||
|
|
||||||
game.settings.set(SYSTEM_RDD, systemCompendium.setting, value);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,4 +1,4 @@
|
|||||||
import { SYSTEM_RDD } from "../constants.js";
|
import { SYSTEM_RDD } from "./constants.js";
|
||||||
|
|
||||||
export const STATUSES = {
|
export const STATUSES = {
|
||||||
StatusStunned : 'stun',
|
StatusStunned : 'stun',
|
||||||
@ -32,7 +32,7 @@ const demiReveStatusEffect = rddStatusEffects.find(it => it.id == STATUSES.Statu
|
|||||||
const statusDemiSurprise = [STATUSES.StatusStunned, STATUSES.StatusProne, STATUSES.StatusRestrained];
|
const statusDemiSurprise = [STATUSES.StatusStunned, STATUSES.StatusProne, STATUSES.StatusRestrained];
|
||||||
const statusSurpriseTotale = [STATUSES.StatusUnconscious, STATUSES.StatusBlind, STATUSES.StatusComma];
|
const statusSurpriseTotale = [STATUSES.StatusUnconscious, STATUSES.StatusBlind, STATUSES.StatusComma];
|
||||||
|
|
||||||
export class StatusEffects extends FormApplication {
|
export class StatusEffects {
|
||||||
static onReady() {
|
static onReady() {
|
||||||
const rddStatusIds = rddStatusEffects.map(it => it.id);
|
const rddStatusIds = rddStatusEffects.map(it => it.id);
|
||||||
rddStatusEffects.forEach(it => it.flags = { core: { statusId: it.id } });
|
rddStatusEffects.forEach(it => it.flags = { core: { statusId: it.id } });
|
||||||
@ -50,7 +50,7 @@ export class StatusEffects extends FormApplication {
|
|||||||
label: "Choix des effets",
|
label: "Choix des effets",
|
||||||
hint: "Ouvre la fenêtre de sélection des effets/status appliqués aux acteurs",
|
hint: "Ouvre la fenêtre de sélection des effets/status appliqués aux acteurs",
|
||||||
icon: "fas fa-bars",
|
icon: "fas fa-bars",
|
||||||
type: StatusEffects,
|
type: StatusEffectsSettings,
|
||||||
restricted: true
|
restricted: true
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -69,12 +69,13 @@ export class StatusEffects extends FormApplication {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static _getUseStatusEffects() {
|
static _getUseStatusEffects() {
|
||||||
return game.settings.get(SYSTEM_RDD, "use-status-effects")?.split(',') ?? [];
|
const setting = game.settings.get(SYSTEM_RDD, "use-status-effects");
|
||||||
|
return setting ? setting.split(',') : [];
|
||||||
}
|
}
|
||||||
|
|
||||||
static _setUseStatusEffects(statusIds) {
|
static _setUseStatusEffects(statusIds) {
|
||||||
if (game.user.isGM) {
|
if (game.user.isGM) {
|
||||||
game.settings.set(SYSTEM_RDD, "use-status-effects", statusIds.join());
|
game.settings.set(SYSTEM_RDD, "use-status-effects", StatusEffects._toSetting(statusIds));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let effect of CONFIG.RDD.allEffects) {
|
for (let effect of CONFIG.RDD.allEffects) {
|
||||||
@ -83,6 +84,10 @@ export class StatusEffects extends FormApplication {
|
|||||||
CONFIG.statusEffects = CONFIG.RDD.allEffects.filter(it => it.active);
|
CONFIG.statusEffects = CONFIG.RDD.allEffects.filter(it => it.active);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static _toSetting(statusIds) {
|
||||||
|
return statusIds.join();
|
||||||
|
}
|
||||||
|
|
||||||
static status(statusId) {
|
static status(statusId) {
|
||||||
return rddStatusEffects.find(it => it.flags?.core?.statusId == statusId);
|
return rddStatusEffects.find(it => it.flags?.core?.statusId == statusId);
|
||||||
}
|
}
|
||||||
@ -90,7 +95,9 @@ export class StatusEffects extends FormApplication {
|
|||||||
static demiReve() {
|
static demiReve() {
|
||||||
return demiReveStatusEffect;
|
return demiReveStatusEffect;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class StatusEffectsSettings extends FormApplication {
|
||||||
constructor(...args) {
|
constructor(...args) {
|
||||||
super(...args);
|
super(...args);
|
||||||
}
|
}
|
||||||
@ -98,8 +105,8 @@ export class StatusEffects extends FormApplication {
|
|||||||
static get defaultOptions() {
|
static get defaultOptions() {
|
||||||
const options = super.defaultOptions;
|
const options = super.defaultOptions;
|
||||||
mergeObject(options, {
|
mergeObject(options, {
|
||||||
id: "status-effects",
|
id: "status-effects-settings",
|
||||||
template: "systems/foundryvtt-reve-de-dragon/templates/settings/status-effects.html",
|
template: "systems/foundryvtt-reve-de-dragon/templates/status-effects-settings.html",
|
||||||
height: "800",
|
height: "800",
|
||||||
width: 350,
|
width: 350,
|
||||||
minimizable: false,
|
minimizable: false,
|
@ -1,142 +1,500 @@
|
|||||||
import { Grammar } from "./grammar.js";
|
import { Grammar } from "./grammar.js";
|
||||||
import { Misc } from "./misc.js";
|
import { Misc } from "./misc.js";
|
||||||
import { RdDDice } from "./rdd-dice.js";
|
import { RdDDice } from "./rdd-dice.js";
|
||||||
import { SystemCompendiums } from "./settings/system-compendiums.js";
|
|
||||||
import { TMRUtility } from "./tmr-utility.js";
|
import { TMRUtility } from "./tmr-utility.js";
|
||||||
|
import { TMRType } from "./tmr-utility.js";
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
const typeRencontres = {
|
||||||
|
|
||||||
|
messager: {
|
||||||
|
msgSucces: async (rencData) => {
|
||||||
|
if (rencData.actor.isTMRCache()){
|
||||||
|
return `Le ${rencData.rencontre.name} vous propose d'emmener le message de votre un sort, mais vous ne savez pas où vous êtes.`;
|
||||||
|
}
|
||||||
|
return `Le ${rencData.rencontre.name} vous propose d'emmener le message de votre un sort à ${rencData.rencontre.force} cases ${rencData.tmr.label}.`;
|
||||||
|
},
|
||||||
|
msgEchec: async (rencData)=> `Le ${rencData.rencontre.name} est pressé et continue son chemin d'une traite sans vous accorder un regard.`,
|
||||||
|
postSucces: async (tmrDialog, rencData) => {
|
||||||
|
tmrDialog.setStateRencontre(rencData.rencontre.type);
|
||||||
|
tmrDialog.choisirCasePortee(rencData.tmr.coord, rencData.rencontre.force);
|
||||||
|
},
|
||||||
|
poesieSucces: {
|
||||||
|
reference: "La chevelure, Charles Baudelaire",
|
||||||
|
extrait: `J'irai là-bas où l'arbre et l'homme, pleins de sève,
|
||||||
|
<br>Se pâment longuement sous l'ardeur des climats ;
|
||||||
|
<br>Fortes tresses, soyez la houle qui m'enlève !`
|
||||||
|
},
|
||||||
|
poesieEchec: {
|
||||||
|
reference: "Rêve de Dragon, Denis Gerfaud",
|
||||||
|
extrait: `En réalité, tous les éléments du rêve des Dragons expriment
|
||||||
|
le Draconic : chaque pierre, chaque fleur, chaque goutte d'eau,
|
||||||
|
chaque nuage est porteur d'un message dans la langue des Dragons`}
|
||||||
|
},
|
||||||
|
|
||||||
|
passeur: {
|
||||||
|
msgSucces: async (rencData) => {
|
||||||
|
if (rencData.actor.isTMRCache()){
|
||||||
|
return `Le ${rencData.rencontre.name} vous propose de vous transporter, mais vous ne savez pas où vous êtes.`;
|
||||||
|
}
|
||||||
|
return `Le ${rencData.rencontre.name} vous propose de vous transporter à ${rencData.rencontre.force} cases des ${rencData.tmr.label}.`;
|
||||||
|
},
|
||||||
|
msgEchec: async (rencData)=> `Le prix que demande le ${rencData.rencontre.name} est trop élevé, vous êtes réduit à poursuivre votre chemin par vos propres moyens.`,
|
||||||
|
postSucces: async (tmrDialog, rencData) => {
|
||||||
|
tmrDialog.setStateRencontre(rencData.rencontre.type);
|
||||||
|
tmrDialog.choisirCasePortee(rencData.tmr.coord, rencData.rencontre.force);
|
||||||
|
},
|
||||||
|
poesieSucces: {
|
||||||
|
reference: "Femmes damnées (2), Charles Baudelaire",
|
||||||
|
extrait: `Comme je descendais des Fleuves impassibles,
|
||||||
|
<br>Je ne me sentis plus guidé par les haleurs :
|
||||||
|
<br>Des Peaux-Rouges criards les avaient pris pour cibles,
|
||||||
|
<br>Les ayant cloués nus aux poteaux de couleurs.`},
|
||||||
|
poesieEchec: {
|
||||||
|
reference: "Le bateau ivre, Arthur Rimbaud",
|
||||||
|
extrait: `Loin des peuples vivants, errantes, condamnées,
|
||||||
|
<br>A travers les déserts courez comme les loups ;
|
||||||
|
<br>Faites votre destin, âmes désordonnées,
|
||||||
|
<br>Et fuyez l'infini que vous portez en vous !`}
|
||||||
|
},
|
||||||
|
|
||||||
|
fleur: {
|
||||||
|
msgSucces: async (rencData) => `Vous cueillez la ${rencData.rencontre.name}, son parfum vous apporte ${rencData.rencontre.force} points de Rêve.`,
|
||||||
|
msgEchec: async (rencData)=> `La ${rencData.rencontre.name} se fâne et disparaît entre vos doigts.`,
|
||||||
|
postSucces: async (tmrDialog, rencData) => tmrDialog.actor.reveActuelIncDec(rencData.rencontre.force),
|
||||||
|
poesieSucces: {
|
||||||
|
reference: "L'Ennemi, Charles Baudelaire",
|
||||||
|
extrait: `Et qui sait si les fleurs nouvelles que je rêve
|
||||||
|
<br>Trouveront dans ce sol lavé comme une grève
|
||||||
|
<br>Le mystique aliment qui ferait leur vigueur ?`},
|
||||||
|
poesieEchec: {
|
||||||
|
reference: "Une charogne, Charles Baudelaire",
|
||||||
|
extrait: `Et le ciel regardait la carcasse superbe
|
||||||
|
<br>Comme une fleur s'épanouir.
|
||||||
|
<br>La puanteur était si forte, que sur l'herbe
|
||||||
|
<br>Vous crûtes vous évanouir.`},
|
||||||
|
},
|
||||||
|
|
||||||
|
mangeur: {
|
||||||
|
msgSucces: async (rencData) => `Le ${rencData.rencontre.name} claque de sa machoire dans le vide avant de fuir.`,
|
||||||
|
msgEchec: async (rencData)=> `Le ${rencData.rencontre.name} croque votre Rêve ! Il emporte ${rencData.rencontre.force} de vos points de rêve actuels`,
|
||||||
|
postEchec: async (tmrDialog, rencData) => tmrDialog.actor.reveActuelIncDec(-rencData.rencontre.force),
|
||||||
|
poesieSucces: {
|
||||||
|
reference: "Conseil, Victor Hugo",
|
||||||
|
extrait: `Rois ! la bure est souvent jalouse du velours.
|
||||||
|
<br>Le peuple a froid l'hiver, le peuple a faim toujours.
|
||||||
|
<br>Rendez-lui son sort plus facile.
|
||||||
|
<br>Le peuple souvent porte un bien rude collier.
|
||||||
|
<br>Ouvrez l'école aux fils, aux pères l'atelier,
|
||||||
|
<br>À tous vos bras, auguste asile !`},
|
||||||
|
poesieEchec: {
|
||||||
|
reference: "El Desdichado, Gérard de Nerval",
|
||||||
|
extrait: `Suis-je Amour ou Phébus ?... Lusignan ou Biron ?
|
||||||
|
<br>Mon front est rouge encor du baiser de la Reine ;
|
||||||
|
<br>J'ai rêvé dans la Grotte où nage la sirène...`}
|
||||||
|
},
|
||||||
|
|
||||||
|
changeur: {
|
||||||
|
msgSucces: async (rencData) => `Le ${rencData.rencontre.name} vaincu accepte de vous déplacer sur une autre ${TMRType[rencData.tmr.type].name} de votre choix en échange de sa liberté.`,
|
||||||
|
msgEchec: async (rencData) => `Le ${rencData.rencontre.name} vous embobine avec des promesses, et vous transporte sur une autre ${TMRType[rencData.tmr.type].name} sans attendre votre avis.`,
|
||||||
|
postSucces: async (tmrDialog, rencData) => {
|
||||||
|
tmrDialog.setStateRencontre(rencData.rencontre.type);
|
||||||
|
tmrDialog.choisirCaseType(rencData.tmr.type);
|
||||||
|
},
|
||||||
|
postEchec: async (tmrDialog, rencData) => {
|
||||||
|
const newTMR = await TMRUtility.getTMRAleatoire(it => it.type == rencData.tmr.type && it.coord != rencData.tmr.coord);
|
||||||
|
await tmrDialog.actor.forcerPositionTMRInconnue(newTMR);
|
||||||
|
tmrDialog.positionnerDemiReve(newTMR.coord);
|
||||||
|
},
|
||||||
|
poesieSucces: {
|
||||||
|
reference: "Caligula - IIIème chant, Gérard de Nerval",
|
||||||
|
extrait: `Allez, que le caprice emporte
|
||||||
|
<br>Chaque âme selon son désir,
|
||||||
|
<br>Et que, close après vous, la porte
|
||||||
|
<br>Ne se rouvre plus qu'au plaisir.`},
|
||||||
|
poesieEchec: {
|
||||||
|
reference: "Rêve de Dragon, Denis Gerfaud",
|
||||||
|
extrait: `Les sages ont encore coutume de dire :
|
||||||
|
<br>« Mais comment les Dragons peuvent-ils
|
||||||
|
être influencés par une créature qui, tout
|
||||||
|
bien considéré, n'existe pas vraiment pour eux,
|
||||||
|
qui n'est que le fantasme de leur activité nocturne ? »`}
|
||||||
|
},
|
||||||
|
|
||||||
|
briseur: {
|
||||||
|
msgSucces: async (rencData) => `Le ${rencData.rencontre.name} tente vainement de vous déconcentrer, avant de fuir sans demander son reste.`,
|
||||||
|
msgEchec: async (rencData)=> `Le ${rencData.rencontre.name} vous déconcentre au point de briser votre demi-rêve.`,
|
||||||
|
postEchec: async (tmrDialog, rencData) => tmrDialog.close(),
|
||||||
|
poesieSucces: {
|
||||||
|
reference: "Rêve de Dragon, Denis Gerfaud",
|
||||||
|
extrait: `La légende affirme que ce sont les Gnomes qui furent
|
||||||
|
les premiers haut-rêvants. En observant les pierres précieuses,
|
||||||
|
les gemmes qui sont les larmes de joie des Dragons, ils parvinrent à
|
||||||
|
en comprendre la langue. Et l'ayant comprise, ils purent s'en servir
|
||||||
|
pour influencer le cours du rêve`},
|
||||||
|
poesieEchec: {
|
||||||
|
reference: "Quand le rêve se brise, Cypora Sebagh",
|
||||||
|
extrait: `Quand le rêve se brise,
|
||||||
|
<br>Dans la plainte du jour,
|
||||||
|
<br>Ma mémoire devient grise
|
||||||
|
<br>Et sombre, tour à tour,
|
||||||
|
<br>Dans le puits du silence
|
||||||
|
<br>Et de la solitude ;
|
||||||
|
<br>Elle reprend son errance
|
||||||
|
<br>Parmi la multitude.`}
|
||||||
|
},
|
||||||
|
|
||||||
|
reflet: {
|
||||||
|
msgSucces: async (rencData) => `Le ${rencData.rencontre.name} s'estompe dans l'oubli.`,
|
||||||
|
msgEchec: async (rencData)=> `Vous êtes submergé par un ${rencData.rencontre.name}, les souvenirs vous retiennent tant qu'il ne sera pas vaincu!`,
|
||||||
|
poesieSucces: {
|
||||||
|
reference: "Une charogne, Charles Baudelaire",
|
||||||
|
extrait: `Les formes s'effaçaient et n'étaient plus qu'un rêve,
|
||||||
|
<br>Une ébauche lente à venir
|
||||||
|
<br>Sur la toile oubliée, et que l'artiste achève
|
||||||
|
<br>Seulement par le souvenir.`},
|
||||||
|
poesieEchec: {
|
||||||
|
reference: "La chevelure, Charles Baudelaire",
|
||||||
|
extrait: `Longtemps ! toujours ! ma main dans ta crinière lourde
|
||||||
|
<br>Sèmera le rubis, la perle et le saphir,
|
||||||
|
<br>Afin qu'à mon désir tu ne sois jamais sourde !
|
||||||
|
<br>N'es-tu pas l'oasis où je rêve, et la gourde
|
||||||
|
<br>Où je hume à longs traits le vin du souvenir`}
|
||||||
|
},
|
||||||
|
|
||||||
|
passeurfou: {
|
||||||
|
msgSucces: async (rencData) => `Le ${rencData.rencontre.name} tente vainement de découvrir où vous avez caché vos réserves. Vous le chassez, et en déroute il part harceler un autre voyageur du rêve.`,
|
||||||
|
msgEchec: async (rencData)=> TMRRencontres.msgEchecPasseurFou(rencData),
|
||||||
|
postEchec: async (tmrDialog, rencData) => TMRRencontres.postEchecPasseurFou(tmrDialog, rencData),
|
||||||
|
poesieSucces: {
|
||||||
|
reference: "Un Fou et un Sage, Jean de La Fontaine",
|
||||||
|
extrait: `Certain Fou poursuivait à coups de pierre un Sage.
|
||||||
|
<br>Le Sage se retourne et lui dit : Mon ami,
|
||||||
|
<br>C'est fort bien fait à toi ; reçois cet écu-ci :
|
||||||
|
<br>Tu fatigues assez pour gagner davantage.`},
|
||||||
|
poesieEchec: {
|
||||||
|
reference: "Guitare, Victor Hugo",
|
||||||
|
extrait: `Je la voyais passer de ma demeure,
|
||||||
|
<br>Et c'était tout.
|
||||||
|
<br>Mais à présent je m'ennuie à toute heure,
|
||||||
|
<br>Plein de dégoût,
|
||||||
|
<br>Rêveur oisif, l'âme dans la campagne,
|
||||||
|
<br>La dague au clou ... –
|
||||||
|
<br>Le vent qui vient à travers la montagne
|
||||||
|
<br>M'a rendu fou !`}
|
||||||
|
},
|
||||||
|
|
||||||
|
tbblanc: {
|
||||||
|
msgSucces: async (rencData) => `Le ${rencData.rencontre.name} souleve une poussière blanche, vous tenez bon, et il tourbillonne en s'éloignant.`,
|
||||||
|
msgEchec: async (rencData)=> `Le souffle du ${rencData.rencontre.name} vous déstabilise et vous emmène dans un nuage de poussière.`,
|
||||||
|
postEchec: async (tmrDialog, rencData) => TMRRencontres.onPostEchecTourbillon(tmrDialog, rencData, 1),
|
||||||
|
poesieSucces: {
|
||||||
|
reference: "Rêve de Dragon, Denis Gerfaud",
|
||||||
|
extrait: `Le Premier Âge fut appelé l'Âge des Dragons. Ce fut le commencement
|
||||||
|
des temps, le commencement des rêves. Durant cette période plus mythique
|
||||||
|
que réellement historique, les Dragons aimaient à se rêver eux-mêmes.`},
|
||||||
|
poesieEchec: {
|
||||||
|
reference: "Les Djinns, Victor Hugo",
|
||||||
|
extrait: `C'est l'essaim des Djinns qui passe,
|
||||||
|
<br>Et tourbillonne en sifflant !
|
||||||
|
<br>Les ifs, que leur vol fracasse,
|
||||||
|
<br>Craquent comme un pin brûlant.`},
|
||||||
|
},
|
||||||
|
|
||||||
|
tbnoir: {
|
||||||
|
msgSucces: async (rencData) => `Le ${rencData.rencontre.name} orageux vous enveloppe de fureur et d'éclairs, vous tenez bon face à la tempête qui s'éloigne sans vous éloigner de votre chemin.`,
|
||||||
|
msgEchec: async (rencData)=> `Le ${rencData.rencontre.name} furieux vous secoue tel un fichu de paille malmené par les vents, et vous emporte dans la tourmente.`,
|
||||||
|
postEchec: async (tmrDialog, rencData) => TMRRencontres.onPostEchecTourbillon(tmrDialog, rencData, 2),
|
||||||
|
poesieSucces: {
|
||||||
|
reference: "Rêve de Dragon, Denis Gerfaud",
|
||||||
|
extrait: `Car le Second Âge fut bel et bien celui des Magiciens. Durant cette période, les
|
||||||
|
Gnomes s'enfoncèrent profondément sous les montagnes et la magie passa aux
|
||||||
|
mains des Humains qui en usèrent et abusèrent, se croyant devenus les maîtres du monde`},
|
||||||
|
poesieEchec: {
|
||||||
|
reference: "Lily, Pierre Perret",
|
||||||
|
extrait: `Elle aurait pas cru sans le voir
|
||||||
|
<br>Que la couleur du désespoir
|
||||||
|
<br>Là-bas aussi ce fût le noir.`},
|
||||||
|
},
|
||||||
|
|
||||||
|
tbrouge: {
|
||||||
|
msgSucces: async (rencData) => `Le ${rencData.rencontre.name} s'abat avec violence mais vous êtes plus rapide et parvenez à lui échapper.`,
|
||||||
|
msgEchec: async (rencData)=> `Le ${rencData.rencontre.name} vous frappe de milliers de morsure et vous malmène à travers les terres médianes.`,
|
||||||
|
postEchec: async (tmrDialog, rencData) => TMRRencontres.onPostEchecTourbillonRouge(tmrDialog, rencData),
|
||||||
|
poesieSucces: {
|
||||||
|
reference: "Qu'est-ce de votre vie ? une bouteille molle, Jean-Baptiste Chassignet",
|
||||||
|
extrait: `Qu'est-ce de votre vie ? un tourbillon rouant
|
||||||
|
<br>De fumière à flot gris, parmi l'air se jouant,
|
||||||
|
<br>Qui passe plus soudain que foudre meurtrière.`},
|
||||||
|
poesieEchec: {
|
||||||
|
reference: "Les Djinns, poème Victor Hugo",
|
||||||
|
extrait: `Cris de l'enfer! voix qui hurle et qui pleure !
|
||||||
|
<br>L'horrible essaim, poussé par l'aquilon,
|
||||||
|
<br>Sans doute, ô ciel ! s'abat sur ma demeure.
|
||||||
|
<br>Le mur fléchit sous le noir bataillon.
|
||||||
|
<br>La maison crie et chancelle penchée,
|
||||||
|
<br>Et l'on dirait que, du sol arrachée,
|
||||||
|
<br>Ainsi qu'il chasse une feuille séchée,
|
||||||
|
<br>Le vent la roule avec leur tourbillon !`},
|
||||||
|
},
|
||||||
|
|
||||||
|
rdd: {
|
||||||
|
msgSucces: async (rencData) => `A tout seigneur, tout honneur, vous faites face à un ${rencData.rencontre.name}. Vous le maîtrisez et récupérez ses rêves. Vous gagnez ses ${rencData.rencontre.force} points de rêve`,
|
||||||
|
msgEchec: async (rencData)=> `A tout seigneur, tout honneur, vous faites face à un ${rencData.rencontre.name}. La rencontre tourne au cauchemar, dans la lutte épique, vous subissez ${rencData.rolled.isETotal ? 'deux queues' : 'une queue'} de dragon!`,
|
||||||
|
postSucces: async (tmrDialog, rencData) => TMRRencontres.onPostSuccessReveDeDragon(tmrDialog, rencData),
|
||||||
|
postEchec: async (tmrDialog, rencData) => TMRRencontres.onPostEchecReveDeDragon(tmrDialog, rencData),
|
||||||
|
poesieSucces: {
|
||||||
|
reference: "Rêve de Dragon, Denis Gerfaud",
|
||||||
|
extrait: `Le monde est Rêve de Dragons, mais nous ne savons
|
||||||
|
<br>ni leur apparence ni qui sont les dragons.
|
||||||
|
<br>En dépit de l'iconographie qui les clame
|
||||||
|
<br>immenses créatures ailées crachant des flammes`},
|
||||||
|
poesieEchec: {
|
||||||
|
reference: "El Desdichado, Gérard de Nerval",
|
||||||
|
extrait: `Je suis le Ténébreux, – le Veuf, – l'Inconsolé,
|
||||||
|
<br>Le Prince d'Aquitaine à la Tour abolie :
|
||||||
|
<br>Ma seule Etoile est morte, – et mon luth constellé
|
||||||
|
<br>Porte le Soleil noir de la Mélancolie.`}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
const mauvaisesRencontres = [
|
||||||
|
{ code: "mangeur", name: "Mangeur de Rêve", type: "mangeur", genre: "m", force: "1d6", refoulement: 2, isMauvaise: true },
|
||||||
|
{ code: "mangeur2d6", name: "Mangeur de Rêve", type: "mangeur", genre: "m", force: "2d6", refoulement: 2, isMauvaise: true },
|
||||||
|
{ code: "reflet+4", name: "Reflet d'ancien Rêve", type: "reflet", genre: "m", force: "2d6+4", refoulement: 2, isPersistant: true, isMauvaise: true },
|
||||||
|
{ code: "tbblanc+4", name: "Tourbillon blanc", type: "tbblanc", genre: "m", force: "2d6+4", refoulement: 2, isPersistant: true, isMauvaise: true },
|
||||||
|
{ code: "tbnoir+4", name: "Tourbillon noir", type: "tbnoir", genre: "m", force: "2d8+4", refoulement: 2, isPersistant: true, isMauvaise: true },
|
||||||
|
{ code: "passfou", name: "Passeur fou", type: "passeurfou", genre: "m", force: "2d8", refoulement: 2, isMauvaise: true },
|
||||||
|
{ code: "tbrouge", name: "Tourbillon rouge", type: "tbrouge", genre: "m", force: "2d8", refoulement: 3, isPersistant: true, isMauvaise: true }
|
||||||
|
]
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
const rencontresStandard = [
|
||||||
|
{ code: "messager", name: "Messager des Rêves", type: "messager", genre: "m", force: "2d4", ignorer: true },
|
||||||
|
{ code: "passeur", name: "Passeur des Rêves", type: "passeur", genre: "m", force: "2d4", ignorer: true },
|
||||||
|
{ code: "fleur", name: "Fleur des Rêves", type: "fleur", genre: "f", force: "1d6", ignorer: true },
|
||||||
|
{ code: "mangeur", name: "Mangeur de Rêve", type: "mangeur", genre: "m", force: "1d6" },
|
||||||
|
{ code: "changeur", name: "Changeur de Rêve", type: "changeur", genre: "m", force: "2d6" },
|
||||||
|
{ code: "briseur", name: "Briseur de Rêve", type: "briseur", genre: "m", force: "2d6", quitterTMR: true },
|
||||||
|
{ code: "reflet", name: "Reflet d'ancien Rêve", type: "reflet", genre: "m", force: "2d6", isPersistant: true },
|
||||||
|
{ code: "tbblanc", name: "Tourbillon blanc", type: "tbblanc", genre: "m", force: "2d6", isPersistant: true },
|
||||||
|
{ code: "tbnoir", name: "Tourbillon noir", type: "tbnoir", genre: "m", force: "2d8", isPersistant: true },
|
||||||
|
{ code: "rdd", name: "Rêve de Dragon", type: "rdd", genre: "m", force: "1dr + 7", refoulement: 2, quitterTMR: true }
|
||||||
|
];
|
||||||
|
|
||||||
|
const rencontresPresentCite = [
|
||||||
|
{ code: "messager2d6", name: "Messager des Rêves", type: "messager", genre: "m", force: "2d6", ignorer: true },
|
||||||
|
{ code: "passeur2d6", name: "Passeur des Rêves", type: "passeur", genre: "m", force: "2d6", ignorer: true },
|
||||||
|
{ code: "fleur2d6", name: "Fleur des Rêves", type: "fleur", genre: "f", force: "2d6", ignorer: true }
|
||||||
|
]
|
||||||
|
const rencontresAll = [].concat(rencontresStandard).concat(mauvaisesRencontres).concat(rencontresPresentCite);
|
||||||
|
|
||||||
|
const tableRencontres = {
|
||||||
|
cite: [{ code: 'messager', range: [1, 25] }, { code: 'passeur', range: [26, 50] }, { code: 'fleur', range: [51, 65] }, { code: 'mangeur', range: [66, 70] }, { code: 'changeur', range: [71, 80] }, { code: 'briseur', range: [81, 85] }, { code: 'reflet', range: [86, 90] }, { code: 'tbblanc', range: [91, 94] }, { code: 'tbnoir', range: [95, 97] }, { code: 'rdd', range: [98, 100] }],
|
||||||
|
sanctuaire: [{ code: 'messager', range: [1, 25] }, { code: 'passeur', range: [26, 50] }, { code: 'fleur', range: [51, 65] }, { code: 'mangeur', range: [66, 70] }, { code: 'changeur', range: [71, 80] }, { code: 'briseur', range: [81, 85] }, { code: 'reflet', range: [86, 90] }, { code: 'tbblanc', range: [91, 94] }, { code: 'tbnoir', range: [95, 97] }, { code: 'rdd', range: [98, 100] }],
|
||||||
|
plaines: [{ code: 'messager', range: [1, 20] }, { code: 'passeur', range: [21, 40] }, { code: 'fleur', range: [41, 55] }, { code: 'mangeur', range: [56, 60] }, { code: 'changeur', range: [61, 75] }, { code: 'briseur', range: [76, 82] }, { code: 'reflet', range: [83, 88] }, { code: 'tbblanc', range: [89, 93] }, { code: 'tbnoir', range: [94, 97] }, { code: 'rdd', range: [98, 100] }],
|
||||||
|
pont: [{ code: 'messager', range: [1, 20] }, { code: 'passeur', range: [21, 40] }, { code: 'fleur', range: [41, 55] }, { code: 'mangeur', range: [56, 60] }, { code: 'changeur', range: [61, 75] }, { code: 'briseur', range: [76, 82] }, { code: 'reflet', range: [83, 88] }, { code: 'tbblanc', range: [89, 93] }, { code: 'tbnoir', range: [94, 97] }, { code: 'rdd', range: [98, 100] }],
|
||||||
|
collines: [{ code: 'messager', range: [1, 15] }, { code: 'passeur', range: [16, 30] }, { code: 'fleur', range: [31, 42] }, { code: 'mangeur', range: [43, 54] }, { code: 'changeur', range: [55, 69] }, { code: 'briseur', range: [70, 82] }, { code: 'reflet', range: [83, 88] }, { code: 'tbblanc', range: [89, 93] }, { code: 'tbnoir', range: [94, 97] }, { code: 'rdd', range: [98, 100] }],
|
||||||
|
foret: [{ code: 'messager', range: [1, 15] }, { code: 'passeur', range: [16, 30] }, { code: 'fleur', range: [31, 42] }, { code: 'mangeur', range: [43, 54] }, { code: 'changeur', range: [55, 69] }, { code: 'briseur', range: [70, 82] }, { code: 'reflet', range: [83, 88] }, { code: 'tbblanc', range: [89, 93] }, { code: 'tbnoir', range: [94, 97] }, { code: 'rdd', range: [98, 100] }],
|
||||||
|
monts: [{ code: 'messager', range: [1, 10] }, { code: 'passeur', range: [11, 20] }, { code: 'fleur', range: [21, 26] }, { code: 'mangeur', range: [27, 44] }, { code: 'changeur', range: [45, 59] }, { code: 'briseur', range: [60, 75] }, { code: 'reflet', range: [76, 85] }, { code: 'tbblanc', range: [86, 92] }, { code: 'tbnoir', range: [93, 97] }, { code: 'rdd', range: [98, 100] }],
|
||||||
|
desert: [{ code: 'messager', range: [1, 10] }, { code: 'passeur', range: [11, 20] }, { code: 'fleur', range: [21, 26] }, { code: 'mangeur', range: [27, 44] }, { code: 'changeur', range: [45, 59] }, { code: 'briseur', range: [60, 75] }, { code: 'reflet', range: [76, 85] }, { code: 'tbblanc', range: [86, 92] }, { code: 'tbnoir', range: [93, 97] }, { code: 'rdd', range: [98, 100] }],
|
||||||
|
fleuve: [{ code: 'messager', range: [1, 5] }, { code: 'passeur', range: [6, 10] }, { code: 'fleur', range: [11, 13] }, { code: 'mangeur', range: [14, 37] }, { code: 'changeur', range: [38, 49] }, { code: 'briseur', range: [50, 65] }, { code: 'reflet', range: [66, 79] }, { code: 'tbblanc', range: [80, 89] }, { code: 'tbnoir', range: [90, 97] }, { code: 'rdd', range: [98, 100] }],
|
||||||
|
lac: [{ code: 'messager', range: [1, 5] }, { code: 'passeur', range: [6, 10] }, { code: 'fleur', range: [11, 13] }, { code: 'mangeur', range: [14, 37] }, { code: 'changeur', range: [38, 49] }, { code: 'briseur', range: [50, 65] }, { code: 'reflet', range: [66, 79] }, { code: 'tbblanc', range: [80, 89] }, { code: 'tbnoir', range: [90, 97] }, { code: 'rdd', range: [98, 100] }],
|
||||||
|
marais: [{ code: 'messager', range: [1, 2] }, { code: 'passeur', range: [3, 4] }, { code: 'fleur', range: [5, 5] }, { code: 'mangeur', range: [6, 29] }, { code: 'changeur', range: [30, 39] }, { code: 'briseur', range: [40, 60] }, { code: 'reflet', range: [61, 75] }, { code: 'tbblanc', range: [76, 86] }, { code: 'tbnoir', range: [87, 97] }, { code: 'rdd', range: [98, 100] }],
|
||||||
|
gouffre: [{ code: 'messager', range: [1, 2] }, { code: 'passeur', range: [3, 4] }, { code: 'fleur', range: [5, 5] }, { code: 'mangeur', range: [6, 29] }, { code: 'changeur', range: [30, 39] }, { code: 'briseur', range: [40, 60] }, { code: 'reflet', range: [61, 75] }, { code: 'tbblanc', range: [76, 86] }, { code: 'tbnoir', range: [87, 97] }, { code: 'rdd', range: [98, 100] }],
|
||||||
|
necropole: [{ code: 'mangeur', range: [1, 20] }, { code: 'changeur', range: [21, 30] }, { code: 'briseur', range: [31, 50] }, { code: 'reflet', range: [51, 65] }, { code: 'tbblanc', range: [66, 80] }, { code: 'tbnoir', range: [81, 97] }, { code: 'rdd', range: [98, 100] }],
|
||||||
|
desolation: [{ code: 'mangeur', range: [1, 20] }, { code: 'changeur', range: [21, 30] }, { code: 'briseur', range: [31, 50] }, { code: 'reflet', range: [51, 65] }, { code: 'tbblanc', range: [66, 80] }, { code: 'tbnoir', range: [81, 97] }, { code: 'rdd', range: [98, 100] }]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
export class TMRRencontres {
|
export class TMRRencontres {
|
||||||
|
static gestionRencontre = {}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static init() {
|
||||||
|
for (let type in typeRencontres) {
|
||||||
|
TMRRencontres.register(type, typeRencontres[type]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static register(type, rencontre) {
|
||||||
|
TMRRencontres.gestionRencontre[type] = rencontre;
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/**
|
/**
|
||||||
* Retourne une recontre en fonction de la case et du tirage
|
* Retourne une recontre en fonction de la case et du tirage
|
||||||
* @param {*} terrain
|
* @param {*} terrain
|
||||||
* @param {*} forcedRoll
|
* @param {*} roll
|
||||||
*/
|
*/
|
||||||
static async rollRencontre(terrain, forcedRoll) {
|
static async rollRencontre(terrain, roll = undefined) {
|
||||||
// TODO: recherche parmi les types de terrains + mauvaise, rejet si plusieurs choix
|
|
||||||
const codeTerrain = Grammar.toLowerCaseNoAccent(terrain);
|
|
||||||
if (!terrain) {
|
if (!terrain) {
|
||||||
ChatMessage.create({
|
ChatMessage.create({ content: "Un type de case doit être indiqué (par exemple sanctuaire, desert ou cité)" });
|
||||||
user: game.user.id,
|
|
||||||
whisper: [game.user.id],
|
|
||||||
content: "Un type de case doit être indiqué (par exemple sanctuaire, desert ou cité)"
|
|
||||||
});
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (!roll || roll <= 0 || roll > 100) {
|
||||||
if (forcedRoll && (forcedRoll <= 0 || forcedRoll > 100)) {
|
roll = await RdDDice.rollTotal("1d100");
|
||||||
forcedRoll = undefined;
|
|
||||||
}
|
}
|
||||||
|
let rencontre = await TMRRencontres.getRencontreAleatoire(terrain, roll);
|
||||||
const table = await TMRRencontres.$buildTableRencontre(codeTerrain);
|
|
||||||
const [selected, roll] = await TMRRencontres.$selectRencontre(codeTerrain, table, forcedRoll);
|
|
||||||
const rencontre = await TMRRencontres.createRencontre(selected.rencontre);
|
|
||||||
TMRRencontres.$chatRolledRencontre(rencontre, terrain, table, roll, true);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static async $buildTableRencontre(codeTerrain) {
|
|
||||||
let max = 0;
|
|
||||||
const items = await SystemCompendiums.getItems('rencontres');
|
|
||||||
const filtreMauvaise = codeTerrain == 'mauvaise' ? it => it.system.mauvaiseRencontre : it => !it.system.mauvaiseRencontre;
|
|
||||||
const rencontres = items.filter(it => it.type == 'rencontre')
|
|
||||||
.filter(filtreMauvaise)
|
|
||||||
.filter(it => it.system.frequence[codeTerrain] > 0)
|
|
||||||
.sort(Misc.ascending(it => it.system.ordreTri))
|
|
||||||
.map(it => {
|
|
||||||
const frequence = it.system.frequence[codeTerrain];
|
|
||||||
max += frequence;
|
|
||||||
return { rencontre: it, min: max - frequence + 1, max: max,frequence: frequence };
|
|
||||||
});
|
|
||||||
return rencontres;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static async $selectRencontre(terrain, table, roll = undefined) {
|
|
||||||
const total = table.map(it => it.frequence).reduce(Misc.sum(), 0);
|
|
||||||
if (total == 0){
|
|
||||||
ui.notifications.warn(`Pas de rencontres définies pour ${terrain}`);
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
if (roll != undefined && (roll > total || roll <= 0)) {
|
|
||||||
ui.notifications.warn(`Jet de rencontre ${roll} en dehors de la table [1..${total}], le jet est relancé`);
|
|
||||||
roll = undefined;
|
|
||||||
}
|
|
||||||
if (!roll) {
|
|
||||||
roll = await RdDDice.rollTotal(`1d${total}`);
|
|
||||||
}
|
|
||||||
return [table.find(it => it.min <= roll && roll <= it.max), roll];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static async createRencontre(rencontre, tmr = undefined) {
|
|
||||||
return rencontre.clone({
|
|
||||||
'system.force': await RdDDice.rollTotal(rencontre.system.formule),
|
|
||||||
'system.coord': tmr?.coord,
|
|
||||||
'system.date': game.system.rdd.calendrier.getDateFromIndex(),
|
|
||||||
'system.heure': game.system.rdd.calendrier.getCurrentHeure()
|
|
||||||
}, {save: false});
|
|
||||||
}
|
|
||||||
|
|
||||||
static async calculRencontre(rencontre, tmr = undefined) {
|
|
||||||
if (rencontre.system.coord == ""){
|
|
||||||
rencontre.system.coord = tmr?.coord;
|
|
||||||
}
|
|
||||||
if (rencontre.system.force == 0){
|
|
||||||
rencontre.system.force = await RdDDice.rollTotal(rencontre.system.formule);
|
|
||||||
}
|
|
||||||
if (rencontre.system.date == "" ) {
|
|
||||||
rencontre.system.date = game.system.rdd.calendrier.getDateFromIndex();
|
|
||||||
}
|
|
||||||
if (rencontre.system.heure == "") {
|
|
||||||
rencontre.system.heure = game.system.rdd.calendrier.getCurrentHeure();
|
|
||||||
}
|
|
||||||
return rencontre;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static $chatRolledRencontre(rencontre, terrain, table, roll = 0, displayTable=false){
|
|
||||||
const total = table.map(it => it.frequence).reduce(Misc.sum(), 0);
|
|
||||||
const namesPercent = displayTable ?
|
|
||||||
table.map(it => `<br>${it.rencontre.name} : ${it.frequence}${total == 100 ? '%' : ''} (${it.min} - ${it.max})`).reduce((a, b) => a + b, '<hr>')
|
|
||||||
: '';
|
|
||||||
const chances = game.user.isGM
|
|
||||||
? (roll ? `Jet: ${roll} / ${total}` : `Valeurs: [1..${total}]`)
|
|
||||||
: (roll ? `Jet: ${Math.ceil(roll*100/total)} / 100` : '');
|
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
user: game.user.id,
|
user: game.user.id,
|
||||||
whisper: [game.user.id],
|
whisper: [game.user.id],
|
||||||
content: `Compendium: ${SystemCompendiums.getCompendium('rencontres')}
|
content: `Rencontre en ${terrain} (jet : ${roll}%)<br>Vous rencontrez un ${rencontre.name} de ${rencontre.force} Points de Rêve`
|
||||||
<br>Rencontre en ${terrain}:
|
|
||||||
${namesPercent}<hr>
|
|
||||||
<br>${chances}
|
|
||||||
<br>Rencontre: ${rencontre.name} ${rencontre.system.force} (${rencontre.system.formule})`
|
|
||||||
});
|
});
|
||||||
}
|
return false;
|
||||||
|
|
||||||
static async getPresentsCite() {
|
|
||||||
const rencontres = await SystemCompendiums.getDefaultItems('rencontres');
|
|
||||||
return rencontres.filter(it => !it.system.mauvaiseRencontre && it.system.presentCite).map(it =>
|
|
||||||
it.clone({ 'system.formule': "2d6" }, {save: false}));
|
|
||||||
}
|
|
||||||
|
|
||||||
static async getReveDeDragon(force) {
|
|
||||||
const rencontres = await SystemCompendiums.getDefaultItems('rencontres');
|
|
||||||
const reveDeDragon = rencontres.find(it => Grammar.equalsInsensitive(it.name, 'Rêve de Dragon'));
|
|
||||||
return reveDeDragon?.clone({ 'system.force': force }, {save: false});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async getRencontreAleatoire(tmr, mauvaise) {
|
static getRencontre(index) {
|
||||||
const codeTerrain = mauvaise ? 'mauvaise' : tmr.type;
|
let rencontre;
|
||||||
const table = await TMRRencontres.$buildTableRencontre(codeTerrain);
|
if (isNaN(index)) {
|
||||||
const [selected, roll] = await TMRRencontres.$selectRencontre(codeTerrain, table);
|
rencontre = rencontresAll.find(r => r.type == index) ?? rencontresAll.find(r => r.code == index)
|
||||||
const rencontre = await TMRRencontres.createRencontre(selected.rencontre, tmr);
|
}
|
||||||
TMRRencontres.$chatRolledRencontre(rencontre, TMRUtility.getTMRType(tmr.coord), table, roll);
|
else if (0 <= index && index < rencontresAll.length) {
|
||||||
|
rencontre = rencontresAll[index];
|
||||||
|
}
|
||||||
|
if (rencontre) {
|
||||||
|
return duplicate(rencontre);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ui.notifications.info(`Pas de rencontre pour ${index}, seulement ${rencontresAll.length} rencontres sont connues.<br>Vous pouvez aussi essayer par type (ie: mangeur, fleur, fleur2d6, ...)`)
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static async getRencontreAleatoire(terrain, roll = undefined) {
|
||||||
|
if (!roll || roll <= 0 || roll > 100) {
|
||||||
|
roll = await RdDDice.rollTotal("1d100");
|
||||||
|
}
|
||||||
|
terrain = Grammar.toLowerCaseNoAccent(terrain);
|
||||||
|
const code = tableRencontres[terrain].find(it => it.range[0] <= roll && roll <= it.range[1]).code;
|
||||||
|
const rencontre = duplicate(rencontresStandard.find(it => it.code == code));
|
||||||
|
rencontre.roll = roll;
|
||||||
|
await TMRRencontres.evaluerForceRencontre(rencontre);
|
||||||
return rencontre;
|
return rencontre;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static async getMauvaiseRencontre(index = undefined) {
|
||||||
|
const rencontre = duplicate(
|
||||||
|
(index && index >= 0 && index < mauvaisesRencontres.length)
|
||||||
|
? mauvaisesRencontres[index]
|
||||||
|
: await RdDDice.rollOneOf(mauvaisesRencontres));
|
||||||
|
await TMRRencontres.evaluerForceRencontre(rencontre);
|
||||||
|
return rencontre;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static async evaluerForceRencontre(rencontre) {
|
||||||
|
const rollForce = new Roll(rencontre.force);
|
||||||
|
await rollForce.evaluate();
|
||||||
|
rencontre.force = rollForce.total;
|
||||||
|
return rencontre.force;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static isReveDeDragon(rencontre) {
|
||||||
|
return rencontre.type == "rdd";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static getGestionRencontre(name) {
|
||||||
|
let gestion = TMRRencontres.gestionRencontre[name];
|
||||||
|
if (!gestion) {
|
||||||
|
ui.notifications.error(`La rencontre ${name} est inconnue, pas de méthode de gestion associée`)
|
||||||
|
gestion = TMRRencontres.gestionRencontre['messager'];
|
||||||
|
}
|
||||||
|
return gestion;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static async gererRencontre(tmrDialog, rencData) {
|
||||||
|
let gestion = TMRRencontres.getGestionRencontre(rencData.rencontre.type);
|
||||||
|
if (rencData.rolled.isSuccess) {
|
||||||
|
rencData.message = await gestion.msgSucces(rencData);
|
||||||
|
if (rencData.nbRounds > 1) {
|
||||||
|
rencData.message += ` Au total, vous avez passé ${rencData.nbRounds} rounds à vous battre!`;
|
||||||
|
}
|
||||||
|
rencData.poesie = gestion.poesieSucces;
|
||||||
|
return gestion.postSucces;
|
||||||
|
}
|
||||||
|
|
||||||
|
rencData.message = await gestion.msgEchec(rencData);
|
||||||
|
if (rencData.nbRounds > 1) {
|
||||||
|
rencData.message += ` Vous avez passé ${rencData.nbRounds} rounds à lutter!`;
|
||||||
|
}
|
||||||
|
rencData.poesie = gestion.poesieEchec;
|
||||||
|
return gestion.postEchec;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static async msgEchecPasseurFou(tmrData) {
|
||||||
|
tmrData.sortReserve = RdDDice.rollOneOf(tmrData.actor.itemTypes['sortreserve']);
|
||||||
|
if (tmrData.sortReserve) {
|
||||||
|
// Passeur fou positionne sur la case d'un sort en réserve
|
||||||
|
tmrData.newTMR = TMRUtility.getTMR(tmrData.sortReserve.coord);
|
||||||
|
} else {
|
||||||
|
// Déplacement aléatoire de la force du Passeur Fou
|
||||||
|
const newCoord = await RdDDice.rollOneOf(TMRUtility.getTMRPortee(tmrData.tmr.coord, tmrData.rencontre.force));
|
||||||
|
tmrData.newTMR = TMRUtility.getTMR(newCoord);
|
||||||
|
}
|
||||||
|
if (tmrData.sortReserve) {
|
||||||
|
return `Le ${tmrData.rencontre.name} vous dérobe la clé de vos sorts. Vous vous saisissez de lui, mais dans un nuage violet, il vous emporte en ${tmrData.newTMR.label} déclencher votre sort en réserve de ${tmrData.sortReserve.name}.`;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return `Le ${tmrData.rencontre.name} tente de vous dérober la clé de vos sorts. Ne la trouvant pas, il déclenche un nuage violet et vous emporte en ${tmrData.newTMR.label}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static async postEchecPasseurFou(tmrDialog, tmrData) {
|
||||||
|
if (tmrData.sortReserve) {
|
||||||
|
await tmrDialog.processSortReserve(tmrData.sortReserve);
|
||||||
|
}
|
||||||
|
await tmrDialog.positionnerDemiReve(tmrData.newTMR.coord);
|
||||||
|
if (tmrData.sortReserve) {
|
||||||
|
tmrDialog.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static async onPostEchecTourbillon(tmrDialog, tmrData, cases) {
|
||||||
|
await tmrData.actor.reveActuelIncDec(-cases);
|
||||||
|
await TMRRencontres._toubillonner(tmrDialog, tmrData.actor, cases);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static async onPostEchecTourbillonRouge(tmrDialog, rencontre) {
|
||||||
|
await rencontre.actor.reveActuelIncDec(-2); // -2 pts de Reve a chaque itération
|
||||||
|
TMRRencontres._toubillonner(tmrDialog, rencontre.actor, 4);
|
||||||
|
await rencontre.actor.santeIncDec("vie", -1); // Et -1 PV
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static async _toubillonner(tmrDialog, actor, cases) {
|
||||||
|
let coord = actor.system.reve.tmrpos.coord;
|
||||||
|
for (let i = 0; i < cases; i++) {
|
||||||
|
coord = await TMRUtility.deplaceTMRAleatoire(actor, coord).coord;
|
||||||
|
}
|
||||||
|
await tmrDialog.positionnerDemiReve(coord)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static async onPostSuccessReveDeDragon(tmrDialog, tmrData) {
|
||||||
|
if (tmrData.rolled.isPart) {
|
||||||
|
await tmrData.actor.appliquerAjoutExperience(tmrData);
|
||||||
|
}
|
||||||
|
await tmrData.actor.resultCombatReveDeDragon(tmrData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static async onPostEchecReveDeDragon(tmrDialog, tmrData) {
|
||||||
|
await tmrData.actor.resultCombatReveDeDragon(tmrData);
|
||||||
|
tmrDialog.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -307,6 +307,35 @@ export class TMRUtility {
|
|||||||
return tmr.type == 'fleuve' || tmr.type == 'lac' || tmr.type == 'marais';
|
return tmr.type == 'fleuve' || tmr.type == 'lac' || tmr.type == 'marais';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
/** Some debug functions */
|
||||||
|
static async setForceRencontre(index, force = undefined) {
|
||||||
|
this.prochaineRencontre = TMRRencontres.getRencontre(index);
|
||||||
|
if (this.prochaineRencontre) {
|
||||||
|
if (force) {
|
||||||
|
this.prochaineRencontre.force = force;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
await TMRRencontres.evaluerForceRencontre(this.prochaineRencontre);
|
||||||
|
}
|
||||||
|
console.log("La prochaine rencontre sera:", this.prochaineRencontre.name, " force:", this.prochaineRencontre.force);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ui.notifications.warn("Pas de prochaine rencontre valide pour " + index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static isForceRencontre() {
|
||||||
|
return this.prochaineRencontre;
|
||||||
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static utiliseForceRencontre() {
|
||||||
|
const rencontre = this.prochaineRencontre;
|
||||||
|
this.prochaineRencontre = undefined;
|
||||||
|
return rencontre;
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async getDirectionPattern() {
|
static async getDirectionPattern() {
|
||||||
return await RdDDice.rollOneOf(tmrRandomMovePatten);
|
return await RdDDice.rollOneOf(tmrRandomMovePatten);
|
||||||
@ -314,15 +343,24 @@ export class TMRUtility {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async deplaceTMRAleatoire(actor, coord) {
|
static async deplaceTMRAleatoire(actor, coord) {
|
||||||
const currentOddq = TMRUtility.coordTMRToOddq(coord);
|
return TMRUtility.deplaceTMRSelonPattern(actor, coord, await TMRUtility.getDirectionPattern(), 1);
|
||||||
const direction = await TMRUtility.getDirectionPattern();
|
}
|
||||||
currentOddq.col = currentOddq.col + direction.col;
|
|
||||||
currentOddq.row = currentOddq.row + direction.row;
|
/* -------------------------------------------- */
|
||||||
if (this.isOddqInTMR(currentOddq)) { // Sortie de carte ! Ré-insertion aléatoire
|
static async deplaceTMRSelonPattern(actor, coordTMR, direction, nTime) {
|
||||||
return TMRUtility.getTMR(TMRUtility.oddqToCoordTMR(currentOddq));
|
let coord;
|
||||||
} else {
|
for (let i = 0; i < nTime; i++) {
|
||||||
return await actor.reinsertionAleatoire('Sortie de carte');
|
let currentOddq = TMRUtility.coordTMRToOddq(coordTMR);
|
||||||
|
currentOddq.col = currentOddq.col + direction.col;
|
||||||
|
currentOddq.row = currentOddq.row + direction.row;
|
||||||
|
if (this.isOddqInTMR(currentOddq)) { // Sortie de carte ! Ré-insertion aléatoire
|
||||||
|
coord = TMRUtility.getTMR(TMRUtility.oddqToCoordTMR(currentOddq));
|
||||||
|
} else {
|
||||||
|
coord = await actor.reinsertionAleatoire('Sortie de carte');
|
||||||
|
}
|
||||||
|
console.log("Nouvelle case iteration !!!", i, coord);
|
||||||
}
|
}
|
||||||
|
return coord;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -334,10 +372,6 @@ export class TMRUtility {
|
|||||||
return Object.values(TMRMapping).filter(filter);
|
return Object.values(TMRMapping).filter(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
static getCasesType(type) {
|
|
||||||
return TMRUtility.filterTMR(it => it.type == type).map(it => it.coord);
|
|
||||||
}
|
|
||||||
|
|
||||||
static findTMR(search) {
|
static findTMR(search) {
|
||||||
const labelSearch = Grammar.toLowerCaseNoAccent(search)
|
const labelSearch = Grammar.toLowerCaseNoAccent(search)
|
||||||
return TMRUtility.filterTMR(it => Grammar.toLowerCaseNoAccent(it.label).match(labelSearch) || it.coord == search);
|
return TMRUtility.filterTMR(it => Grammar.toLowerCaseNoAccent(it.label).match(labelSearch) || it.coord == search);
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
import { Grammar } from "../grammar.js";
|
|
||||||
import { Draconique } from "./draconique.js";
|
|
||||||
import { Misc } from "../misc.js";
|
|
||||||
|
|
||||||
export class AugmentationSeuil extends Draconique {
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
type() { return 'tete' }
|
|
||||||
match(item) { return Draconique.isTeteDragon(item) && Grammar.toLowerCaseNoAccent(item.name).includes('augmentation du seuil de reve'); }
|
|
||||||
manualMessage() { return false }
|
|
||||||
async onActorCreateOwned(actor, tete) {
|
|
||||||
const seuil = Misc.toInt(actor.system.reve.seuil.value) + 2;
|
|
||||||
await actor.update({ "system.reve.seuil.value": seuil })
|
|
||||||
}
|
|
||||||
}
|
|
@ -17,7 +17,6 @@ import { Pelerinage } from "./pelerinage.js";
|
|||||||
import { Periple } from "./periple.js";
|
import { Periple } from "./periple.js";
|
||||||
import { UrgenceDraconique } from "./urgence-draconique.js";
|
import { UrgenceDraconique } from "./urgence-draconique.js";
|
||||||
import { Grammar } from "../grammar.js";
|
import { Grammar } from "../grammar.js";
|
||||||
import { AugmentationSeuil } from "./augmentation-seuil.js";
|
|
||||||
|
|
||||||
|
|
||||||
export class EffetsDraconiques {
|
export class EffetsDraconiques {
|
||||||
@ -38,7 +37,6 @@ export class EffetsDraconiques {
|
|||||||
static pelerinage = new Pelerinage();
|
static pelerinage = new Pelerinage();
|
||||||
static periple = new Periple();
|
static periple = new Periple();
|
||||||
static urgenceDraconique = new UrgenceDraconique();
|
static urgenceDraconique = new UrgenceDraconique();
|
||||||
static augmentationSeuil = new AugmentationSeuil();
|
|
||||||
|
|
||||||
static init() {
|
static init() {
|
||||||
Draconique.register(EffetsDraconiques.carteTmr);
|
Draconique.register(EffetsDraconiques.carteTmr);
|
||||||
@ -58,7 +56,6 @@ export class EffetsDraconiques {
|
|||||||
Draconique.register(EffetsDraconiques.pelerinage);
|
Draconique.register(EffetsDraconiques.pelerinage);
|
||||||
Draconique.register(EffetsDraconiques.periple);
|
Draconique.register(EffetsDraconiques.periple);
|
||||||
Draconique.register(EffetsDraconiques.urgenceDraconique);
|
Draconique.register(EffetsDraconiques.urgenceDraconique);
|
||||||
Draconique.register(EffetsDraconiques.augmentationSeuil)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -119,10 +116,6 @@ export class EffetsDraconiques {
|
|||||||
.filter(it => Grammar.includesLowerCaseNoAccent(it.name, name));
|
.filter(it => Grammar.includesLowerCaseNoAccent(it.name, name));
|
||||||
}
|
}
|
||||||
|
|
||||||
static countAugmentationSeuil(actor) {
|
|
||||||
return EffetsDraconiques.filterItems(actor, Draconique.isTeteDragon, 'Augmentation du seuil de rêve').length;
|
|
||||||
}
|
|
||||||
|
|
||||||
static isDonDoubleReve(actor) {
|
static isDonDoubleReve(actor) {
|
||||||
return EffetsDraconiques.filterItems(actor, Draconique.isTeteDragon, 'Don de double-rêve').length>0;
|
return EffetsDraconiques.filterItems(actor, Draconique.isTeteDragon, 'Don de double-rêve').length>0;
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,6 @@ import { Grammar } from "../grammar.js";
|
|||||||
import { TMRUtility } from "../tmr-utility.js";
|
import { TMRUtility } from "../tmr-utility.js";
|
||||||
import { tmrConstants, tmrTokenZIndex } from "../tmr-constants.js";
|
import { tmrConstants, tmrTokenZIndex } from "../tmr-constants.js";
|
||||||
import { Draconique } from "./draconique.js";
|
import { Draconique } from "./draconique.js";
|
||||||
import { TMRRencontres } from "../tmr-rencontres.js";
|
|
||||||
|
|
||||||
export class PresentCites extends Draconique {
|
export class PresentCites extends Draconique {
|
||||||
|
|
||||||
@ -47,13 +46,15 @@ export class PresentCites extends Draconique {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async choisirUnPresent(casetmr, onChoixPresent) {
|
async choisirUnPresent(casetmr, onChoixPresent) {
|
||||||
const presents = await TMRRencontres.getPresentsCite()
|
|
||||||
const buttons = {};
|
|
||||||
presents.forEach(r => buttons['present'+r.id] = { icon: '<i class="fas fa-check"></i>', label: r.name, callback: async () => onChoixPresent(r) });
|
|
||||||
let d = new Dialog({
|
let d = new Dialog({
|
||||||
title: "Présent des cités",
|
title: "Présent des cités",
|
||||||
content: `La ${this.tmrLabel(casetmr)} vous offre un présent, faites votre choix`,
|
content: `La ${this.tmrLabel(casetmr)} vous offre un présent, faite votre choix`,
|
||||||
buttons: buttons
|
buttons: {
|
||||||
|
messager: { icon: '<i class="fas fa-check"></i>', label: "Un Messager des rêves", callback: () => onChoixPresent('messager2d6') },
|
||||||
|
passeur: { icon: '<i class="fas fa-check"></i>', label: "Un Passeur des rêves", callback: () => onChoixPresent('passeur2d6') },
|
||||||
|
fleur: { icon: '<i class="fas fa-check"></i>', label: "Une Fleur des rêves", callback: () => onChoixPresent('fleur2d6') },
|
||||||
|
},
|
||||||
|
default: "fleur"
|
||||||
});
|
});
|
||||||
d.render(true);
|
d.render(true);
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ export class Rencontre extends Draconique {
|
|||||||
async onActorCreateOwned(actor, item) { }
|
async onActorCreateOwned(actor, item) { }
|
||||||
|
|
||||||
code() { return 'rencontre' }
|
code() { return 'rencontre' }
|
||||||
tooltip(rencontre) { return `${rencontre.name} de force ${rencontre.system.force}` }
|
tooltip(rencontre) { return `${rencontre.name} de force ${rencontre.force}` }
|
||||||
img() { return 'systems/foundryvtt-reve-de-dragon/icons/heures/hd06.webp' }
|
img() { return 'systems/foundryvtt-reve-de-dragon/icons/heures/hd06.webp' }
|
||||||
|
|
||||||
createSprite(pixiTMR) {
|
createSprite(pixiTMR) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{"_id":"0jrEZ62Q2Jz4kBGf","name":"Mauvaise rencontre en perspective","type":"queue","flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp","effects":[],"system":{"description":"<p>La prochaine rencontre dans les TMR sera tirée de la @Compendium[foundryvtt-reve-de-dragon.tables-diverses.66ye0OOxBO9LEjdd]{Table spéciale de rencontres}</p>","descriptionmj":"","refoulement":1,"duree":"","restant":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":null,"modifiedTime":1668033514731,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"0jrEZ62Q2Jz4kBGf","name":"Mauvaise rencontre en perspective","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"queue","data":{"description":"<p>Tirer la prochaine rencontre dans les TMR sur la @Compendium[foundryvtt-reve-de-dragon.tables-diverses.66ye0OOxBO9LEjdd]{Table spéciale de rencontres}</p>","refoulement":1},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp","effects":[]}
|
||||||
{"_id":"0uc2pMIGL03Hq2Hn","name":"Idée fixe : Anorexie. Ne rien avaler, ni solide, ni liquide, pas même une potion","type":"queue","img":"systems/foundryvtt-reve-de-dragon/icons/queues/idee_fixe.webp","data":{"description":"<p>Prend effet immédiatement et dure jusqu'à la <strong>fin de l'heure du Château Dormant </strong>du <strong>lendemain.<br /></strong>Si passé ce délai, l'occasion de la manifester ne s'est pas présentée, la queue prend fin.</p>\n<p>Si elle entre en contradiction avec une autre queue, retirer.</p>","descriptionmj":"","refoulement":1,"duree":"","restant":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rYShh2P1DNavdoBD":3},"flags":{}}
|
{"_id":"0uc2pMIGL03Hq2Hn","name":"Idée fixe : Anorexie. Ne rien avaler, ni solide, ni liquide, pas même une potion","type":"queue","img":"systems/foundryvtt-reve-de-dragon/icons/queues/idee_fixe.webp","data":{"description":"<p>Prend effet immédiatement et dure jusqu'à la <strong>fin de l'heure du Château Dormant </strong>du <strong>lendemain.<br /></strong>Si passé ce délai, l'occasion de la manifester ne s'est pas présentée, la queue prend fin.</p>\n<p>Si elle entre en contradiction avec une autre queue, retirer.</p>","descriptionmj":"","refoulement":1,"duree":"","restant":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rYShh2P1DNavdoBD":3},"flags":{}}
|
||||||
{"_id":"1gGVlZM0UyifL6RK","name":"Souvenir obsessionnel de l'archétype","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"queue","data":{"description":"<p>Les prochains points d’expérience dus au stress doivent être mis dans une compétence déterminée aléatoirement par la table de @Compendium[foundryvtt-reve-de-dragon.tables-diverses.E0WLgjn6LA9WsvKJ]{Détermination aléatoire de compétence}.</p>","refoulement":1},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp","effects":[]}
|
{"_id":"1gGVlZM0UyifL6RK","name":"Souvenir obsessionnel de l'archétype","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"queue","data":{"description":"<p>Les prochains points d’expérience dus au stress doivent être mis dans une compétence déterminée aléatoirement par la table de @Compendium[foundryvtt-reve-de-dragon.tables-diverses.E0WLgjn6LA9WsvKJ]{Détermination aléatoire de compétence}.</p>","refoulement":1},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp","effects":[]}
|
||||||
{"_id":"1l59lWbtvYp74OTb","name":"Désir lancinant : Briser un objet de verre","type":"queue","img":"systems/foundryvtt-reve-de-dragon/icons/queues/desir_lancinant.webp","data":{"description":"<p>Tant que satisfaction n'est pas obtenue, aucun point d'expérience ne peut plus être gagné par l'exercice en cas de particulière et d'ajustement final négatif.<br />Les points d'expérience dus au stress ne sont pas affectés.</p>","descriptionmj":"","refoulement":1,"duree":"","restant":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rYShh2P1DNavdoBD":3},"flags":{}}
|
{"_id":"1l59lWbtvYp74OTb","name":"Désir lancinant : Briser un objet de verre","type":"queue","img":"systems/foundryvtt-reve-de-dragon/icons/queues/desir_lancinant.webp","data":{"description":"<p>Tant que satisfaction n'est pas obtenue, aucun point d'expérience ne peut plus être gagné par l'exercice en cas de particulière et d'ajustement final négatif.<br />Les points d'expérience dus au stress ne sont pas affectés.</p>","descriptionmj":"","refoulement":1,"duree":"","restant":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"rYShh2P1DNavdoBD":3},"flags":{}}
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
{"name":"Passeur des Rêves","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp","system":{"genre":"m","formule":"2d4","refoulement":0,"presentCite":true,"mauvaiseRencontre":false,"ordreTri":2,"force":0,"coord":"","date":"","heure":"","succes":{"effets":["passeur"],"message":"Le Passeur des Rêves propose de vous transporter{{#if actor.system.reve.tmrpos.cache}}, mais vous ne savez pas où vous êtes{{else}} à {{rencontre.system.force}} cases de {{tmr.label}}{{/if}}.","poesie":"<p>Comme je descendais des Fleuves impassibles,<br>Je ne me sentis plus guidé par les haleurs :<br>Des Peaux-Rouges criards les avaient pris pour cibles,<br>Les ayant cloués nus aux poteaux de couleurs.</p>","reference":"Le bateau ivre, Arthur Rimbaud"},"echec":{"effets":[],"message":"Le prix que demande le Passeur des Rêves est trop élevé, vous êtes réduit à poursuivre votre chemin par vos propres moyens.","poesie":"<p>Loin des peuples vivants, errantes, condamnées,<br>A travers les déserts courez comme les loups ;<br>Faites votre destin, âmes désordonnées,<br>Et fuyez l'infini que vous portez en vous !</p>","reference":"Femmes damnées (2), Charles Baudelaire"},"frequence":{"cite":25,"sanctuaire":25,"plaines":20,"pont":20,"collines":15,"foret":15,"monts":10,"desert":10,"fleuve":5,"lac":5,"marais":2,"gouffre":2,"necropole":0,"desolation":0,"mauvaise":0},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.Ffk9pio1qy4Z28Lc"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667846036337,"modifiedTime":1668036933995,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"0IQLIYklxPIGjHT8","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
|
||||||
{"name":"Messager des Rêves","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp","system":{"genre":"m","formule":"2d4","refoulement":0,"presentCite":true,"mauvaiseRencontre":false,"ordreTri":1,"force":0,"coord":"","date":"","heure":"","succes":{"effets":["messager"],"message":"Le Messager des rêves propose d'emmener votre message {{#if actor.system.reve.tmrpos.cache}}, mais vous ne savez pas où vous êtes{{else}} à {{rencontre.system.force}} cases de {{tmr.label}}{{/if}}.","poesie":"<p>J'irai là-bas où l'arbre et l'homme, pleins de sève,<br>Se pâment longuement sous l'ardeur des climats ;<br>Fortes tresses, soyez la houle qui m'enlève !</p>","reference":"La chevelure, Charles Baudelaire"},"echec":{"effets":[],"message":"Le Messager des Rêves est pressé et continue son chemin d'une traite sans vous accorder un regard.","poesie":"<p>En réalité, tous les éléments du rêve des Dragons expriment<br>le Draconic : chaque pierre, chaque fleur, chaque goutte d'eau,<br>chaque nuage est porteur d'un message dans la langue des Dragons</p>","reference":"Rêve de Dragon, Denis Gerfaud"},"frequence":{"cite":25,"sanctuaire":25,"plaines":20,"pont":20,"collines":15,"foret":15,"monts":10,"desert":10,"fleuve":5,"lac":5,"marais":2,"gouffre":2,"necropole":0,"desolation":0,"mauvaise":0},"description":""},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.rencontres.Ffk9pio1qy4Z28Lc"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667846036337,"modifiedTime":1668036933994,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"0MwHtPpFV2lTeCtt","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
|
||||||
{"name":"Briseur de Rêve","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp","system":{"genre":"m","formule":"2d6","refoulement":1,"presentCite":false,"mauvaiseRencontre":false,"ordreTri":6,"force":0,"coord":"","date":"","heure":"","succes":{"effets":[],"message":"Le {{rencontre.name}} tente vainement de vous déconcentrer, avant de fuir sans demander son reste.","poesie":"<p>La légende affirme que ce sont les Gnomes qui furent les premiers haut-rêvants. En observant les pierres précieuses, les gemmes qui sont les larmes de joie des Dragons, ils parvinrent à en comprendre la langue. Et l'ayant comprise, ils purent s'en servir pour influencer le cours du rêve.</p>","reference":"Rêve de Dragon, Denis Gerfaud"},"echec":{"effets":["rompu"],"message":"Le {{rencontre.name}} vous déconcentre au point de briser votre demi-rêve.","poesie":"<p>Quand le rêve se brise,<br>Dans la plainte du jour,<br>Ma mémoire devient grise<br>Et sombre, tour à tour,<br>Dans le puits du silence<br>Et de la solitude ;<br>Elle reprend son errance<br>Parmi la multitude.</p>","reference":"Quand le rêve se brise, Cypora Sebagh"},"frequence":{"cite":5,"sanctuaire":5,"plaines":7,"pont":7,"collines":13,"foret":13,"monts":16,"desert":16,"fleuve":16,"lac":16,"marais":21,"gouffre":21,"necropole":20,"desolation":20,"mauvaise":0},"description":""},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.rencontres.dvEiIk0HFGsvyb5F"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667846036340,"modifiedTime":1668036933993,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"3e6jIvyy1e7OzYcB","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
|
||||||
{"name":"Reflet d'ancien Rêve","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp","system":{"genre":"m","formule":"2d6","refoulement":1,"presentCite":false,"mauvaiseRencontre":false,"ordreTri":7,"force":"0","coord":"","date":"","heure":"","succes":{"effets":[],"message":"Le {{rencontre.name}} s'estompe dans l'oubli.","poesie":"<p>Les formes s'effaçaient et n'étaient plus qu'un rêve,<br>Une ébauche lente à venir<br>Sur la toile oubliée, et que l'artiste achève<br>Seulement par le souvenir.</p>","reference":"Une charogne, Charles Baudelaire"},"echec":{"effets":["persistant"],"message":"Vous êtes submergé par un {{rencontre.name}}, les souvenirs vous retiennent tant qu'il ne sera pas vaincu!","poesie":"<p>Longtemps ! toujours ! ma main dans ta crinière lourde<br>Sèmera le rubis, la perle et le saphir,<br>Afin qu'à mon désir tu ne sois jamais sourde !<br>N'es-tu pas l'oasis où je rêve, et la gourde<br>Où je hume à longs traits le vin du souvenir</p>","reference":"La chevelure, Charles Baudelaire"},"frequence":{"cite":5,"sanctuaire":5,"plaines":6,"pont":6,"collines":6,"foret":6,"monts":10,"desert":10,"fleuve":14,"lac":14,"marais":15,"gouffre":15,"necropole":15,"desolation":15,"mauvaise":0},"description":""},"effects":[],"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3},"flags":{"core":{"sourceId":"Item.drXUmMGrrY9jyJPp"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667773074055,"modifiedTime":1668036933995,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"_id":"5IEjrkpQ2YNFiUP4"}
|
|
||||||
{"name":"Tourbillon noir","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp","system":{"genre":"m","formule":"2d8","refoulement":1,"presentCite":false,"mauvaiseRencontre":false,"ordreTri":9,"force":0,"coord":"","date":"","heure":"","succes":{"effets":[],"message":"Le {{rencontre.name}} orageux vous enveloppe de fureur et d'éclairs, vous tenez bon face à la tempête qui s'éloigne sans vous éloigner de votre chemin.","poesie":"<p>Car le Second Âge fut bel et bien celui des Magiciens. Durant cette période, les Gnomes s'enfoncèrent profondément sous les montagnes et la magie passa aux mains des Humains qui en usèrent et abusèrent, se croyant devenus les maîtres du monde</p>","reference":"Rêve de Dragon, Denis Gerfaud"},"echec":{"effets":["reve-1","reve-1","aleatoire","aleatoire","persistant"],"message":"Le {{rencontre.name}} furieux vous secoue tel un fichu de paille malmené par les vents, et vous emporte dans la tourmente.","poesie":"<p>Elle aurait pas cru sans le voir<br>Que la couleur du désespoir<br>Là-bas aussi ce fût le noir.</p>","reference":"Lily, Pierre Perret"},"frequence":{"cite":3,"sanctuaire":3,"plaines":4,"pont":4,"collines":4,"foret":4,"monts":5,"desert":5,"fleuve":8,"lac":8,"marais":11,"gouffre":11,"necropole":17,"desolation":17,"mauvaise":0},"description":""},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.rencontres.81b2cjAzl9hfK7Zt"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667846036336,"modifiedTime":1668036933995,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"89NtInRn4uWArlct","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
|
||||||
{"name":"Reflet d'ancien Rêve","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp","system":{"genre":"m","formule":"2d6+4","refoulement":2,"presentCite":false,"mauvaiseRencontre":true,"ordreTri":3,"force":0,"coord":"","date":"","heure":"","succes":{"effets":[],"message":"Le {{rencontre.name}} s'estompe dans l'oubli.","poesie":"<p>Les formes s'effaçaient et n'étaient plus qu'un rêve,<br>Une ébauche lente à venir<br>Sur la toile oubliée, et que l'artiste achève<br>Seulement par le souvenir.</p>","reference":"Une charogne, Charles Baudelaire"},"echec":{"effets":["persistant"],"message":"Vous êtes submergé par un {{rencontre.name}}, les souvenirs vous retiennent tant qu'il ne sera pas vaincu!","poesie":"<p>Longtemps ! toujours ! ma main dans ta crinière lourde<br>Sèmera le rubis, la perle et le saphir,<br>Afin qu'à mon désir tu ne sois jamais sourde !<br>N'es-tu pas l'oasis où je rêve, et la gourde<br>Où je hume à longs traits le vin du souvenir</p>","reference":"La chevelure, Charles Baudelaire"},"frequence":{"cite":5,"sanctuaire":5,"plaines":6,"pont":6,"collines":6,"foret":6,"monts":10,"desert":10,"fleuve":14,"lac":14,"marais":15,"gouffre":15,"necropole":15,"desolation":15,"mauvaise":23},"description":""},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.rencontres.MB2qOlTsEUTQkRVL"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667846036338,"modifiedTime":1668036933995,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"U6WoTkHRwC4DicuZ","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
|
||||||
{"name":"Changeur de Rêve","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp","system":{"genre":"m","formule":"2d6","refoulement":1,"presentCite":false,"mauvaiseRencontre":false,"ordreTri":5,"force":0,"coord":"","date":"","heure":"","succes":{"effets":["teleport"],"message":"Le {{rencontre.name}} vaincu accepte de vous déplacer sur une autre case {{caseTmr-type tmr.coord}} de votre choix en échange de sa liberté.","poesie":"<p>Allez, que le caprice emporte<br>Chaque âme selon son désir,<br>Et que, close après vous, la porte<br>Ne se rouvre plus qu'au plaisir.</p>","reference":"Caligula - IIIème chant, Gérard de Nerval"},"echec":{"effets":["teleport-aleatoire"],"message":"Le {{rencontre.name}} vous embobine avec des promesses, et vous transporte sur une autre case {{caseTmr-type tmr.coord}} sans attendre votre avis.","poesie":"<p>Les sages ont encore coutume de dire : <br>« Mais comment les Dragons peuvent-ils être influencés par une créature qui, tout bien considéré, n'existe pas vraiment pour eux, qui n'est que le fantasme de leur activité nocturne ? »</p>","reference":"Rêve de Dragon, Denis Gerfaud"},"frequence":{"cite":10,"sanctuaire":10,"plaines":15,"pont":15,"collines":15,"foret":15,"monts":15,"desert":15,"fleuve":12,"lac":12,"marais":10,"gouffre":10,"necropole":10,"desolation":10,"mauvaise":0},"description":""},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.rencontres.q4uyAZoFPyc4x8XI"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667846036340,"modifiedTime":1668036933994,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"WeCnQirDR1r3TUFw","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
|
||||||
{"name":"Rêve de Dragon","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/styles/img/rdd_pause.webp","system":{"genre":"m","formule":"1dr+7","refoulement":2,"presentCite":false,"mauvaiseRencontre":false,"ordreTri":10,"force":0,"coord":"","date":"","heure":"","succes":{"effets":["reve+f","part+tete","part+xp","seuil"],"message":"A tout seigneur, tout honneur, vous faites face à un {{rencontre.name}}. Vous le maîtrisez et gagnez ses {{rencontre.system.force}} points de rêve.","poesie":"<p>Le monde est Rêve de Dragons, mais nous ne savons <br>Ni leur apparence ni qui sont les dragons. <br>En dépit de l'iconographie qui les clame <br>Immenses créatures ailées crachant des flammes</p>","reference":"Rêve de Dragon, Denis Gerfaud"},"echec":{"effets":["echec-queue"],"message":"A tout seigneur, tout honneur, vous faites face à un {{rencontre.name}}. La rencontre tourne au cauchemar, dans la lutte épique, vous subissez {{#if rolled.isETotal}}deux queues{{else}}une queue{{/if}} de dragon!","poesie":"<p>Je suis le Ténébreux, – le Veuf, – l'Inconsolé, <br>Le Prince d'Aquitaine à la Tour abolie : <br>Ma seule Etoile est morte, – et mon luth constellé <br>Porte le Soleil noir de la Mélancolie.</p>","reference":"El Desdichado, Gérard de Nerval"},"frequence":{"cite":3,"sanctuaire":3,"plaines":3,"pont":3,"collines":3,"foret":3,"monts":3,"desert":3,"fleuve":3,"lac":3,"marais":3,"gouffre":3,"necropole":3,"desolation":3,"mauvaise":0},"description":""},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.rencontres.Hw40Q8jS9wmukgU4"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667846036338,"modifiedTime":1668036933995,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"dWKuUc29ysrlPZFg","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
|
||||||
{"name":"Passeur fou","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp","system":{"genre":"m","formule":"2d8","refoulement":2,"presentCite":false,"mauvaiseRencontre":true,"ordreTri":26,"force":0,"coord":"","date":"","heure":"","succes":{"effets":[],"message":"Le Passeur fou tente vainement de découvrir où vous avez caché vos réserves. Vous le chassez, et en déroute il part harceler un autre voyageur du rêve.","poesie":"<p>Certain Fou poursuivait à coups de pierre un Sage.<br>Le Sage se retourne et lui dit : Mon ami,<br>C'est fort bien fait à toi ; reçois cet écu-ci :<br>Tu fatigues assez pour gagner davantage.</p>","reference":"Un Fou et un Sage, Jean de La Fontaine"},"echec":{"effets":["sort-aleatoire"],"message":"{{#if sortReserve}}Le Passeur fou dérobe la clé de vos sorts. Vous vous saisissez de lui, mais dans un nuage violet, il vous emporte {{newTMR.label}} déclencher votre sort en réserve de {{sortReserve.name}}.{{else}}Le Passeur fou tente de vous dérober la clé de vos sorts. Ne la trouvant pas, il déclenche un nuage violet et vous emporte en {{newTMR.label}}.{{/if}}","poesie":"<p>Je la voyais passer de ma demeure,<br>Et c'était tout.<br>Mais à présent je m'ennuie à toute heure,<br>Plein de dégoût,<br>Rêveur oisif, l'âme dans la campagne,<br>La dague au clou ... –<br>Le vent qui vient à travers la montagne<br>M'a rendu fou !</p>","reference":"Guitare, Victor Hugo"},"frequence":{"cite":0,"sanctuaire":0,"plaines":0,"pont":0,"collines":0,"foret":0,"monts":0,"desert":0,"fleuve":0,"lac":0,"marais":0,"gouffre":0,"necropole":0,"desolation":0,"mauvaise":1},"description":""},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.rencontres.HkYBb3Ls4W15tKwo"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667846036338,"modifiedTime":1668036933995,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"eVxv2FMRZOo7aTWB","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
|
||||||
{"name":"Mangeur de Rêve","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp","system":{"genre":"m","formule":"1d6","refoulement":1,"presentCite":false,"mauvaiseRencontre":false,"ordreTri":4,"force":0,"coord":"","date":"","heure":"","succes":{"effets":[],"message":"Le {{rencontre.name}} claque de sa machoire dans le vide avant de fuir.","poesie":"<p>Rois ! la bure est souvent jalouse du velours.<br>Le peuple a froid l'hiver, le peuple a faim toujours.<br>Rendez-lui son sort plus facile.<br>Le peuple souvent porte un bien rude collier.<br>Ouvrez l'école aux fils, aux pères l'atelier,<br>À tous vos bras, auguste asile !</p>","reference":"Conseil, Victor Hugo"},"echec":{"effets":["reve-f"],"message":"Le {{rencontre.name}} croque votre Rêve ! Il emporte {{rencontre.system.force}} de vos points de rêve actuels","poesie":"<div>\n<div>Suis-je Amour ou Phébus ?... Lusignan ou Biron ?</div>\n<div>Mon front est rouge encor du baiser de la Reine ;</div>\n<div>J'ai rêvé dans la Grotte où nage la sirène...</div>\n</div>","reference":"El Desdichado, Gérard de Nerval"},"frequence":{"cite":5,"sanctuaire":5,"plaines":5,"pont":5,"collines":12,"foret":12,"monts":18,"desert":18,"fleuve":24,"lac":24,"marais":24,"gouffre":24,"necropole":20,"desolation":20,"mauvaise":1},"description":""},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.rencontres.3SA5An6kPlpcDEIj"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667846036336,"modifiedTime":1668036933994,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"fd89RWxlO8BF1FFJ","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
|
||||||
{"name":"Tourbillon noir","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp","system":{"genre":"m","formule":"2d8+4","refoulement":2,"presentCite":false,"mauvaiseRencontre":true,"ordreTri":25,"force":0,"coord":"","date":"","heure":"","succes":{"effets":[],"message":"Le {{rencontre.name}} orageux vous enveloppe de fureur et d'éclairs, vous tenez bon face à la tempête qui s'éloigne sans vous éloigner de votre chemin.","poesie":"<p>Car le Second Âge fut bel et bien celui des Magiciens. Durant cette période, les Gnomes s'enfoncèrent profondément sous les montagnes et la magie passa aux mains des Humains qui en usèrent et abusèrent, se croyant devenus les maîtres du monde</p>","reference":"Rêve de Dragon, Denis Gerfaud"},"echec":{"effets":["reve-1","reve-1","aleatoire","aleatoire","persistant"],"message":"Le {{rencontre.name}} furieux vous secoue tel un fichu de paille malmené par les vents, et vous emporte dans la tourmente.","poesie":"<p>Elle aurait pas cru sans le voir<br>Que la couleur du désespoir<br>Là-bas aussi ce fût le noir.</p>","reference":"Lily, Pierre Perret"},"frequence":{"cite":3,"sanctuaire":3,"plaines":4,"pont":4,"collines":4,"foret":4,"monts":5,"desert":5,"fleuve":8,"lac":8,"marais":11,"gouffre":11,"necropole":17,"desolation":17,"mauvaise":1},"description":""},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.rencontres.D0gbC3plAesQx3uq"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667846036336,"modifiedTime":1668036933995,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"hmeuLiLh5nkuQ4eD","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
|
||||||
{"name":"Fleur des rêves","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp","system":{"genre":"f","formule":"1d6","refoulement":0,"presentCite":true,"mauvaiseRencontre":false,"ordreTri":3,"force":"0","coord":"","date":"","heure":"","succes":{"effets":["reve+f"],"message":"Vous cueillez la {{rencontre.name}}, son parfum vous apporte {{rencontre.system.force}} points de Rêve.","poesie":"<p>Et qui sait si les fleurs nouvelles que je rêve<br>Trouveront dans ce sol lavé comme une grève<br>Le mystique aliment qui ferait leur vigueur ?</p>","reference":"L'Ennemi, Charles Baudelaire","effet":["reve+f"]},"echec":{"effets":[],"message":"La {{rencontre.name}} se fane et disparaît entre vos doigts.","poesie":"<p>Et le ciel regardait la carcasse superbe<br>Comme une fleur s'épanouir.<br>La puanteur était si forte, que sur l'herbe<br>Vous crûtes vous évanouir.</p>","reference":"Une charogne, Charles Baudelaire"},"frequence":{"cite":15,"sanctuaire":15,"plaines":15,"pont":15,"collines":12,"foret":12,"monts":6,"desert":6,"fleuve":3,"lac":3,"marais":1,"gouffre":1,"necropole":0,"desolation":0,"mauvaise":0},"description":"","onSucces":{"effets":[],"message":"","poesie":"","reference":""},"onEchec":{"effets":[],"message":"","poesie":"","reference":""},"descriptionmj":"","code":"","onSuccess":{"effets":[],"message":"","poesie":"","reference":""}},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.rencontres.2ywduc2BHGpVvUbz"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667846036335,"modifiedTime":1668036933994,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"jtJk1ptJXsdsGZHA","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
|
||||||
{"name":"Tourbillon rouge","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp","system":{"genre":"m","formule":"2d8","refoulement":3,"presentCite":false,"mauvaiseRencontre":true,"ordreTri":27,"force":0,"coord":"","date":"","heure":"","succes":{"effets":[],"message":"Le {{rencontre.name}} s'abat avec violence mais vous êtes plus rapide et parvenez à lui échapper.","poesie":"<p>Qu'est-ce de votre vie ? un tourbillon rouant<br>De fumière à flot gris, parmi l'air se jouant,<br>Qui passe plus soudain que foudre meurtrière.</p>","reference":"Qu'est-ce de votre vie ? une bouteille molle, Jean-Baptiste Chassignet"},"echec":{"effets":["aleatoire","aleatoire","aleatoire","aleatoire","reve-1","reve-1","vie-1","persistant"],"message":"Le {{rencontre.name}} vous frappe de milliers de morsure et vous malmène à travers les terres médianes.","poesie":"<p>Cris de l'enfer! voix qui hurle et qui pleure !<br>L'horrible essaim, poussé par l'aquilon,<br>Sans doute, ô ciel ! s'abat sur ma demeure.<br>Le mur fléchit sous le noir bataillon.<br>La maison crie et chancelle penchée,<br>Et l'on dirait que, du sol arrachée,<br>Ainsi qu'il chasse une feuille séchée,<br>Le vent la roule avec leur tourbillon !</p>","reference":"Les Djinns, poème Victor Hugo"},"frequence":{"cite":0,"sanctuaire":0,"plaines":0,"pont":0,"collines":0,"foret":0,"monts":0,"desert":0,"fleuve":0,"lac":0,"marais":0,"gouffre":0,"necropole":0,"desolation":0,"mauvaise":1},"description":""},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.rencontres.WiyUvZX4oTAd82s3"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667846036339,"modifiedTime":1668036933996,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"nD7p8ROloR6ElTpW","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
|
||||||
{"name":"Tourbillon blanc","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp","system":{"genre":"m","formule":"2d6","refoulement":1,"presentCite":false,"mauvaiseRencontre":false,"ordreTri":8,"force":"0","coord":"","date":"","heure":"","succes":{"effets":[],"message":"Le {{rencontre.name}} souleve une poussière blanche, vous tenez bon, et il tourbillonne en s'éloignant.","poesie":"<p>Le Premier Âge fut appelé l'Âge des Dragons. Ce fut le commencement<br>des temps, le commencement des rêves. Durant cette période plus mythique<br>que réellement historique, les Dragons aimaient à se rêver eux-mêmes.</p>","reference":"Rêve de Dragon, Denis Gerfaud"},"echec":{"effets":["reve-1","aleatoire","persistant"],"message":"Le souffle du {{rencontre.name}} vous déstabilise et vous emmène dans un nuage de poussière.","poesie":"<p>C'est l'essaim des Djinns qui passe,<br>Et tourbillonne en sifflant !<br>Les ifs, que leur vol fracasse,<br>Craquent comme un pin brûlant.</p>","reference":"Les Djinns, Victor Hugo"},"frequence":{"cite":4,"sanctuaire":4,"plaines":5,"pont":5,"collines":5,"foret":5,"monts":7,"desert":7,"fleuve":10,"lac":10,"marais":11,"gouffre":11,"necropole":15,"desolation":15,"mauvaise":0},"description":""},"effects":[],"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3},"flags":{"core":{"sourceId":"Item.GIG8SbYrl60p50u3"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667773090153,"modifiedTime":1668036933995,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"folder":null,"sort":0,"_id":"ph6qZi1yDgh68Y5l"}
|
|
||||||
{"name":"Mangeur de Rêve","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp","system":{"genre":"m","formule":"1d6","refoulement":2,"presentCite":false,"mauvaiseRencontre":true,"ordreTri":21,"force":0,"coord":"","date":"","heure":"","succes":{"effets":[],"message":"Le {{rencontre.name}} claque de sa machoire dans le vide avant de fuir.","poesie":"<p>Rois ! la bure est souvent jalouse du velours.<br>Le peuple a froid l'hiver, le peuple a faim toujours.<br>Rendez-lui son sort plus facile.<br>Le peuple souvent porte un bien rude collier.<br>Ouvrez l'école aux fils, aux pères l'atelier,<br>À tous vos bras, auguste asile !</p>","reference":"Conseil, Victor Hugo"},"echec":{"effets":["reve-f"],"message":"Le {{rencontre.name}} croque votre Rêve ! Il emporte {{rencontre.system.force}} de vos points de rêve actuels","poesie":"<div>\n<div>Suis-je Amour ou Phébus ?... Lusignan ou Biron ?</div>\n<div>Mon front est rouge encor du baiser de la Reine ;</div>\n<div>J'ai rêvé dans la Grotte où nage la sirène...</div>\n</div>","reference":"El Desdichado, Gérard de Nerval"},"frequence":{"cite":5,"sanctuaire":5,"plaines":5,"pont":5,"collines":12,"foret":12,"monts":18,"desert":18,"fleuve":24,"lac":24,"marais":24,"gouffre":24,"necropole":20,"desolation":20,"mauvaise":1},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.3SA5An6kPlpcDEIj"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667846036340,"modifiedTime":1668036933994,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"uhdiBoim26qSmVJ7","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
|
||||||
{"name":"Mangeur de Rêve","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp","system":{"genre":"m","formule":"2d6","refoulement":2,"presentCite":false,"mauvaiseRencontre":true,"ordreTri":22,"force":0,"coord":"","date":"","heure":"","succes":{"effets":[],"message":"Le {{rencontre.name}} claque de sa machoire dans le vide avant de fuir.","poesie":"<p>Rois ! la bure est souvent jalouse du velours.<br>Le peuple a froid l'hiver, le peuple a faim toujours.<br>Rendez-lui son sort plus facile.<br>Le peuple souvent porte un bien rude collier.<br>Ouvrez l'école aux fils, aux pères l'atelier,<br>À tous vos bras, auguste asile !</p>","reference":"Conseil, Victor Hugo"},"echec":{"effets":["reve-f"],"message":"Le {{rencontre.name}} croque votre Rêve ! Il emporte {{rencontre.system.force}} de vos points de rêve actuels","poesie":"<div>\n<div>Suis-je Amour ou Phébus ?... Lusignan ou Biron ?</div>\n<div>Mon front est rouge encor du baiser de la Reine ;</div>\n<div>J'ai rêvé dans la Grotte où nage la sirène...</div>\n</div>","reference":"El Desdichado, Gérard de Nerval"},"frequence":{"cite":5,"sanctuaire":5,"plaines":5,"pont":5,"collines":12,"foret":12,"monts":18,"desert":18,"fleuve":24,"lac":24,"marais":24,"gouffre":24,"necropole":20,"desolation":20,"mauvaise":1},"description":""},"effects":[],"flags":{"core":{"sourceId":"Item.3SA5An6kPlpcDEIj"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667846036340,"modifiedTime":1668036933994,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"yHm1Rqa8CP5qhg69","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
|
||||||
{"name":"Tourbillon blanc","type":"rencontre","img":"systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp","system":{"genre":"m","formule":"2d6+4","refoulement":2,"presentCite":false,"mauvaiseRencontre":true,"ordreTri":24,"force":0,"coord":"","date":"","heure":"","succes":{"effets":[],"message":"Le {{rencontre.name}} souleve une poussière blanche, vous tenez bon, et il tourbillonne en s'éloignant.","poesie":"<p>Le Premier Âge fut appelé l'Âge des Dragons. Ce fut le commencement<br>des temps, le commencement des rêves. Durant cette période plus mythique<br>que réellement historique, les Dragons aimaient à se rêver eux-mêmes.</p>","reference":"Rêve de Dragon, Denis Gerfaud"},"echec":{"effets":["reve-1","aleatoire","persistant"],"message":"Le souffle du {{rencontre.name}} vous déstabilise et vous emmène dans un nuage de poussière.","poesie":"<p>C'est l'essaim des Djinns qui passe,<br>Et tourbillonne en sifflant !<br>Les ifs, que leur vol fracasse,<br>Craquent comme un pin brûlant.</p>","reference":"Les Djinns, Victor Hugo"},"frequence":{"cite":4,"sanctuaire":4,"plaines":5,"pont":5,"collines":5,"foret":5,"monts":7,"desert":7,"fleuve":10,"lac":10,"marais":11,"gouffre":11,"necropole":15,"desolation":15,"mauvaise":1},"description":""},"effects":[],"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.rencontres.GIG8SbYrl60p50u3"}},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.1.0","coreVersion":"10.288","createdTime":1667846036337,"modifiedTime":1668036933995,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"yXZW5cDrGoZxD9lK","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
|
@ -1,45 +1,45 @@
|
|||||||
{"_id":"1PskCeKgFa9XiKoS","name":"Invoquer sa voix","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.1PskCeKgFa9XiKoS"}},"system":{"description":"<p>Les rituels de lecture d’Hypnos sont d’étonnantes démonstrations d’auto-suggestion. Aidé par un support, le haut-rêvant se persuade qu’il peut voir ou entendre à distance, et il le fait. Couplé à l’ultime forme d’illusion que sont les invocations, il peut pareillement projeter son image ou sa voix à distance. Tous obéissent aux règles usuelles d’application des rituels. Si un rituel de lecture est paramétré sur une personne et que 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>\n<p>Ce rituel est en quelque sorte le négatif de Harpe d’Hypnos. Les conditions de ciblage et de paramétrage sont exactement les mêmes. Lorsque le murmure émane de l’instrument sonore, provoquant l’état hypnotique, le haut-rêvant peut commencer à parler mentalement, dans sa tête.</p>\n<p>Dans l’instant même, sa voix et ses paroles se font entendre près de la personne ou au centre du lieu choisi. Pour le destinataire, la voix, claire et reconnaissable, semble émaner de nulle part. La communication est de 1 round par point de rêve dépensé. Étant à sens unique, le haut-rêvant n’a pas le retour.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Selon r dépensé","JR":"Aucun","cible":"Un instrument sonore","difficulte":"-6","portée":"","caseTMR":"cite","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426558,"modifiedTime":1667260032849,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"1PskCeKgFa9XiKoS","name":"Invoquer sa voix","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","data":{"description":"<p>Les rituels de lecture d’Hypnos sont d’étonnantes démonstrations d’auto-suggestion. Aidé par un support, le haut-rêvant se persuade qu’il peut voir ou entendre à distance, et il le fait. Couplé à l’ultime forme d’illusion que sont les invocations, il peut pareillement projeter son image ou sa voix à distance. Tous obéissent aux règles usuelles d’application des rituels. Si un rituel de lecture est paramétré sur une personne et que 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>\n<p>Ce rituel est en quelque sorte le négatif de Harpe d’Hypnos. Les conditions de ciblage et de paramétrage sont exactement les mêmes. Lorsque le murmure émane de l’instrument sonore, provoquant l’état hypnotique, le haut-rêvant peut commencer à parler mentalement, dans sa tête.</p>\n<p>Dans l’instant même, sa voix et ses paroles se font entendre près de la personne ou au centre du lieu choisi. Pour le destinataire, la voix, claire et reconnaissable, semble émaner de nulle part. La communication est de 1 round par point de rêve dépensé. Étant à sens unique, le haut-rêvant n’a pas le retour.</p>","descriptionmj":"","draconic":"hypnos","duree":"Selon r dépensé","JR":"Aucun","cible":"Un instrument sonore","difficulte":"-6","portée":"","caseTMR":"cite","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jOzRscDxoXZWpGS6":3},"flags":{}}
|
||||||
{"_id":"2lsRjTYEef4HdQDB","name":"Fatigue","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.2lsRjTYEef4HdQDB"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>Ce sort provoque l’illusion d’une grande fatigue, qui est interprétée comme une fatigue réelle. La victime marque instantanément 6 cases de fatigue, puis joue un jet de VOLONTÉ à -5 avec un éventuel bonus de +1 par point de CONSTITUTION au-dessus de 15. Si le jet de VOLONTÉ réussit, il n’y a pas d’autre conséquence que les cases de fatigue. Si le jet échoue, tout dépend alors de l’activité actuelle de la cible. Si elle est en condition de repos physique, couchée, assise, adossée, elle s’endort instantanément. Son sommeil n’est pas magique, il n’est dû qu’à un coup de barre, et obéit à toutes les règles de sommeil normal. Si la victime est en activité physique, marchant, se battant, le coup de barre ne fait que la <em>sonner</em>. Puis le jet de VOLONTÉ doit être renouvelé de round en round jusqu’à ce qu’il réussisse. Tant qu’il échoue, la victime reste en <em>demi-surprise</em>.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Instantanée","JR":"Humanoïde selon HN, animal r-8","cible":"Toutes créatures","difficulte":"-7","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"5","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426558,"modifiedTime":1667260032847,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"2lsRjTYEef4HdQDB","name":"Fatigue","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>Ce sort provoque l’illusion d’une grande fatigue, qui est interprétée comme une fatigue réelle. La victime marque instantanément 6 cases de fatigue, puis joue un jet de VOLONTÉ à -5 avec un éventuel bonus de +1 par point de CONSTITUTION au-dessus de 15. Si le jet de VOLONTÉ réussit, il n’y a pas d’autre conséquence que les cases de fatigue. Si le jet échoue, tout dépend alors de l’activité actuelle de la cible. Si elle est en condition de repos physique, couchée, assise, adossée, elle s’endort instantanément. Son sommeil n’est pas magique, il n’est dû qu’à un coup de barre, et obéit à toutes les règles de sommeil normal. Si la victime est en activité physique, marchant, se battant, le coup de barre ne fait que la <em>sonner</em>. Puis le jet de VOLONTÉ doit être renouvelé de round en round jusqu’à ce qu’il réussisse. Tant qu’il échoue, la victime reste en <em>demi-surprise</em>.</p>","draconic":"hypnos","duree":"Instantanée","JR":"Humanoïde selon HN, animal r-8","cible":"Toutes créatures","difficulte":"-7","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"5"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"3z46S8xGPH97ejcx","name":"Grand sommeil d'Hypnos","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.3z46S8xGPH97ejcx"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>Le Grand Sommeil d’Hypnos ne s’applique qu’aux humanoïdes, c’est la plus puissante des suggestions hypnotiques. Il plonge la victime dans un sommeil <em>magique </em>que rien, absolument rien, ne peut parvenir à réveiller. Le paramétrage du rituel doit inclure un <em>mot de réveil</em> et le sommeil dure jusqu’à ce que ce mot soit prononcé aux oreilles de l’endormi. Noter que si ce mot tarde à être prononcé, la victime a toutes les chances de mourir de faim ou de soif dans l’intervalle. Accomplie sur la victime, une Lecture d’Aura révèle tous les paramètres du sort, y compris le mot de réveil. Grand Sommeil d’Hypnos est un rituel et obéit en cela à toutes les règles concernant les rituels.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Spéciale","JR":"Selon HN","cible":"Humanoïde","difficulte":"-11","portée":"","caseTMR":"marais","caseTMRspeciale":"","ptreve":"8","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426559,"modifiedTime":1667260032847,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"3z46S8xGPH97ejcx","name":"Grand sommeil d'Hypnos","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>Le Grand Sommeil d’Hypnos ne s’applique qu’aux humanoïdes, c’est la plus puissante des suggestions hypnotiques. Il plonge la victime dans un sommeil <em>magique </em>que rien, absolument rien, ne peut parvenir à réveiller. Le paramétrage du rituel doit inclure un <em>mot de réveil</em> et le sommeil dure jusqu’à ce que ce mot soit prononcé aux oreilles de l’endormi. Noter que si ce mot tarde à être prononcé, la victime a toutes les chances de mourir de faim ou de soif dans l’intervalle. Accomplie sur la victime, une Lecture d’Aura révèle tous les paramètres du sort, y compris le mot de réveil. Grand Sommeil d’Hypnos est un rituel et obéit en cela à toutes les règles concernant les rituels.</p>","draconic":"hypnos","duree":"Spéciale","JR":"Selon HN","cible":"Humanoïde","difficulte":"-11","portée":"","caseTMR":"marais","caseTMRspeciale":"","ptreve":"8"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"7crOGyhdtdoLi7D2","name":"Panoplistes","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.7crOGyhdtdoLi7D2"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de créatures}</p>\n<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 chapiteau à l’endroit désigné par l’invocateur, qui doit en avoir paramétré la dimension lors du lancer du rituel. Le chapiteau peut faire de 1 à 6 m de diamètre, pour une hauteur de 1 à 3 m. Le haut-rêvant peut également en spécifier la couleur, unie ou bicolore à bandes verticales. L’ouverture peut être relevée en petit auvent, ou fermée assujettie par des lacets. Le mât est situé au centre, et le chapiteau est dressé à même l’endroit désigné, sans tapis de sol. Les Panoplistes dressent tout cela en trois minutes, puis disparaissent quant à eux.</p>\n<p>Ainsi dressé, le chapiteau durera jusqu’à la fin de l’heure de naissance de l’invocateur ou jusqu’à ce qu’il soit « agressé ». Tout ce qui tend à modifier sa structure, ne serait-ce que déplacer un bout de cordage, est une agression.</p>\n<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>\n<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures invoquées}</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"HN","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"special","caseTMRspeciale":"Cité de Panople F5","ptreve":"7","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426559,"modifiedTime":1667260032851,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"7crOGyhdtdoLi7D2","name":"Panoplistes","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de créatures}</p>\n<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 chapiteau à l’endroit désigné par l’invocateur, qui doit en avoir paramétré la dimension lors du lancer du rituel. Le chapiteau peut faire de 1 à 6 m de diamètre, pour une hauteur de 1 à 3 m. Le haut-rêvant peut également en spécifier la couleur, unie ou bicolore à bandes verticales. L’ouverture peut être relevée en petit auvent, ou fermée assujettie par des lacets. Le mât est situé au centre, et le chapiteau est dressé à même l’endroit désigné, sans tapis de sol. Les Panoplistes dressent tout cela en trois minutes, puis disparaissent quant à eux.</p>\n<p>Ainsi dressé, le chapiteau durera jusqu’à la fin de l’heure de naissance de l’invocateur ou jusqu’à ce qu’il soit « agressé ». Tout ce qui tend à modifier sa structure, ne serait-ce que déplacer un bout de cordage, est une agression.</p>\n<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>\n<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures invoquées}</p>","draconic":"hypnos","duree":"HN","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"special","caseTMRspeciale":"Cité de Panople F5","ptreve":"7","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"7eeKT1BbsGdyY1GL","name":"Robe d'Hypnos","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.7eeKT1BbsGdyY1GL"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>L’illusion <em>visuelle </em>de Robe d’Hypnos est une variante de <em>Transfiguration objet en objet</em> s’appliquant à l’ensemble des vêtements et pièces d’équipement de la cible. Tout ce que porte cette dernière au moment du ciblage est concerné par l’illusion, avec les règles suivantes :</p>\n<ul>\n<li>Le sort n’a aucun effet si la cible est surchargée, ne serait-ce que de 0,1 enc. Les points de rêve sont dépensés quand même.</li>\n<li>N’est affecté par l’illusion que ce qui existe préalablement. L’illusion peut transformer, mais pas faire disparaître. De même, elle ne peut inventer ce qui n’existe pas. Selon la règle standard, la <em>taille </em>ne peut être modifiée. Cela signifie ici que la superficie des vêtements doit rester la même : on ne peut recouvrir une partie dénudée, ni dénuder une partie couverte.</li>\n<li>N’est affecté que ce qui est visible (montré) au moment du ciblage, c’est-à-dire la couche de vêtements la plus extérieure. Cette \"couche\" peut être illusoirement transformée en toute autre couche, en respectant la règle précédente.</li>\n<li>Aucune pièce d’équipement (arme, bouclier, bagage) ne peut être occultée. Chacune doit recevoir une nouvelle apparence, respectant la taille de la réalité, ou demeurer inchangée. Inversement, on ne peut pas créer une nouvelle pièce d’équipement <em>ex nihilo</em>.</li>\n<li>Les objets ultérieurement saisis et portés par la cible ne sont pas concernés par l’illusion et demeurent ce qu’ils sont.</li>\n<li>Toute pièce d’équipement qui cesse d’être tenue ou portée par la cible recouvre instantanément et définitivement son apparence réelle, quand bien même elle serait aussitôt récupérée par la cible.</li>\n<li>Si une pièce de vêtement est retirée et que son absence rend impossible l’ensemble de l’illusion vestimentaire, c’est toute l’illusion qui est instantanément et définitivement annulée.</li>\n<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, utiliser conjointement à son sujet le sort standard de @Item[skPIvFb5tRRPHDGU]{Transfiguration}.</li>\n</ul>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde","difficulte":"-6","portée":"","caseTMR":"monts","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426559,"modifiedTime":1667260032851,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"7eeKT1BbsGdyY1GL","name":"Robe d'Hypnos","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>L’illusion <em>visuelle </em>de Robe d’Hypnos est une variante de <em>Transfiguration objet en objet</em> s’appliquant à l’ensemble des vêtements et pièces d’équipement de la cible. Tout ce que porte cette dernière au moment du ciblage est concerné par l’illusion, avec les règles suivantes :</p>\n<ul>\n<li>Le sort n’a aucun effet si la cible est surchargée, ne serait-ce que de 0,1 enc. Les points de rêve sont dépensés quand même.</li>\n<li>N’est affecté par l’illusion que ce qui existe préalablement. L’illusion peut transformer, mais pas faire disparaître. De même, elle ne peut inventer ce qui n’existe pas. Selon la règle standard, la <em>taille </em>ne peut être modifiée. Cela signifie ici que la superficie des vêtements doit rester la même : on ne peut recouvrir une partie dénudée, ni dénuder une partie couverte.</li>\n<li>N’est affecté que ce qui est visible (montré) au moment du ciblage, c’est-à-dire la couche de vêtements la plus extérieure. Cette \"couche\" peut être illusoirement transformée en toute autre couche, en respectant la règle précédente.</li>\n<li>Aucune pièce d’équipement (arme, bouclier, bagage) ne peut être occultée. Chacune doit recevoir une nouvelle apparence, respectant la taille de la réalité, ou demeurer inchangée. Inversement, on ne peut pas créer une nouvelle pièce d’équipement <em>ex nihilo</em>.</li>\n<li>Les objets ultérieurement saisis et portés par la cible ne sont pas concernés par l’illusion et demeurent ce qu’ils sont.</li>\n<li>Toute pièce d’équipement qui cesse d’être tenue ou portée par la cible recouvre instantanément et définitivement son apparence réelle, quand bien même elle serait aussitôt récupérée par la cible.</li>\n<li>Si une pièce de vêtement est retirée et que son absence rend impossible l’ensemble de l’illusion vestimentaire, c’est toute l’illusion qui est instantanément et définitivement annulée.</li>\n<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, utiliser conjointement à son sujet le sort standard de @Item[skPIvFb5tRRPHDGU]{Transfiguration}.</li>\n</ul>","draconic":"hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde","difficulte":"-6","portée":"","caseTMR":"monts","caseTMRspeciale":"","ptreve":"4"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"7q0zFbBhxYdf6OZ2","name":"Dérision","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.7q0zFbBhxYdf6OZ2"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<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 l’Ancien</p>\n<p>Cette illusion visuelle donne à la cible un air comique, drôle, dérisoire, bouffon, quoique ne la modifiant pas physiquement. Si la cible veut paraître grave, sérieuse, elle souffre d’un malus de -8 à ses jets d’APPARENCE. Inversement, si elle veut paraître drôle, elle gagne un bonus de +4 à ses jets d’APPARENCE/Comédie.</p>\n<p>Si un personnage ainsi rendu dérisoire participe à un combat, il peut tenter une fois par round de lancer une plaisanterie en guise d’attaque (tout en esquivant/parant normalement). Il joue pour cela APPARENCE/ Comédie à -1d4 (ce d4 résume les conditions ponctuelles plus ou moins propices, et il est en fait soustrait du bonus de +4 conféré par le sort). Puis selon la réussite, on obtient un ajustement :</p>\n<table style=\"width: 129px;\" border=\"1\">\n<tbody>\n<tr>\n<td style=\"width: 90px;\">Normale :</td>\n<td style=\"width: 32px;\">0</td>\n</tr>\n<tr>\n<td style=\"width: 90px;\">Significative :</td>\n<td style=\"width: 32px;\">-2</td>\n</tr>\n<tr>\n<td style=\"width: 90px;\">Particulière :</td>\n<td style=\"width: 32px;\">-4</td>\n</tr>\n</tbody>\n</table>\n<p>Tous les autres engagés dans la mêlée capables de comprendre la blague, y compris les compagnons du plaisantin, jouent alors VOLONTÉ/<em>moins </em>moral à + (ajustement) + (Comédie facultativement). Tout échec provoque un état de demi-surprise pour la fin du round et tout le round suivant. En cas d’échec total à son jet d’APPARENCE/Comédie, le plaisantin est le seul à rire de sa blague, et entre automatiquement en demi-surprise jusqu’à la fin du round suivant.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde","difficulte":"-6","portée":"","caseTMR":"gouffre","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426559,"modifiedTime":1667260032847,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"7q0zFbBhxYdf6OZ2","name":"Dérision","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<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 l’Ancien</p>\n<p>Cette illusion visuelle donne à la cible un air comique, drôle, dérisoire, bouffon, quoique ne la modifiant pas physiquement. Si la cible veut paraître grave, sérieuse, elle souffre d’un malus de -8 à ses jets d’APPARENCE. Inversement, si elle veut paraître drôle, elle gagne un bonus de +4 à ses jets d’APPARENCE/Comédie.</p>\n<p>Si un personnage ainsi rendu dérisoire participe à un combat, il peut tenter une fois par round de lancer une plaisanterie en guise d’attaque (tout en esquivant/parant normalement). Il joue pour cela APPARENCE/ Comédie à -1d4 (ce d4 résume les conditions ponctuelles plus ou moins propices, et il est en fait soustrait du bonus de +4 conféré par le sort). Puis selon la réussite, on obtient un ajustement :</p>\n<table style=\"width: 129px;\" border=\"1\">\n<tbody>\n<tr>\n<td style=\"width: 90px;\">Normale :</td>\n<td style=\"width: 32px;\">0</td>\n</tr>\n<tr>\n<td style=\"width: 90px;\">Significative :</td>\n<td style=\"width: 32px;\">-2</td>\n</tr>\n<tr>\n<td style=\"width: 90px;\">Particulière :</td>\n<td style=\"width: 32px;\">-4</td>\n</tr>\n</tbody>\n</table>\n<p>Tous les autres engagés dans la mêlée capables de comprendre la blague, y compris les compagnons du plaisantin, jouent alors VOLONTÉ/<em>moins </em>moral à + (ajustement) + (Comédie facultativement). Tout échec provoque un état de demi-surprise pour la fin du round et tout le round suivant. En cas d’échec total à son jet d’APPARENCE/Comédie, le plaisantin est le seul à rire de sa blague, et entre automatiquement en demi-surprise jusqu’à la fin du round suivant.</p>","draconic":"hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde","difficulte":"-6","portée":"","caseTMR":"gouffre","caseTMRspeciale":"","ptreve":"4"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"8qdOVBr3S7AhRsJw","name":"Miroir d'Hypnos","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.8qdOVBr3S7AhRsJw"}},"system":{"description":"<p>Les rituels de lecture d’Hypnos sont d’étonnantes démonstrations d’auto-suggestion. Aidé par un support, le haut-rêvant se persuade qu’il peut voir ou entendre à distance, et il le fait. Couplé à l’ultime forme d’illusion que sont les invocations, il peut pareillement projeter son image ou sa voix à distance. Tous obéissent aux règles usuelles d’application des rituels. Si un rituel de lecture est paramétré sur une personne et que 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>\n<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 l’on aboutit à un cas de @JournalEntry[eANDHKJXMPmPNJ2F]{Magie impossible}. 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 sort étant ciblé sur le miroir, le haut-rêvant croit voir y évoluer des formes, qui le plongent aussitôt dans un état hypnotique particulier, où il voit réellement la personne ou le lieu choisi. S’il s’agit d’une personne, son point de vue est comme s’il se tenait debout à un mètre devant elle ; s’il s’agit d’un lieu, il s’en trouve au centre. Dans les deux cas, le haut-rêvant peut mentalement tourner sur lui-même à 360° pour mieux voir ce qui l’entoure, mais ne peut se déplacer. Noter qu’il a l’image, mais pas le son. La communication est de 1 round par point de rêve dépensé.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Selon r dépensé","JR":"Aucun","cible":"Un miroir","difficulte":"-5","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426559,"modifiedTime":1667260032850,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"8qdOVBr3S7AhRsJw","name":"Miroir d'Hypnos","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","data":{"description":"<p>Les rituels de lecture d’Hypnos sont d’étonnantes démonstrations d’auto-suggestion. Aidé par un support, le haut-rêvant se persuade qu’il peut voir ou entendre à distance, et il le fait. Couplé à l’ultime forme d’illusion que sont les invocations, il peut pareillement projeter son image ou sa voix à distance. Tous obéissent aux règles usuelles d’application des rituels. Si un rituel de lecture est paramétré sur une personne et que 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>\n<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 l’on aboutit à un cas de @JournalEntry[eANDHKJXMPmPNJ2F]{Magie impossible}. 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 sort étant ciblé sur le miroir, le haut-rêvant croit voir y évoluer des formes, qui le plongent aussitôt dans un état hypnotique particulier, où il voit réellement la personne ou le lieu choisi. S’il s’agit d’une personne, son point de vue est comme s’il se tenait debout à un mètre devant elle ; s’il s’agit d’un lieu, il s’en trouve au centre. Dans les deux cas, le haut-rêvant peut mentalement tourner sur lui-même à 360° pour mieux voir ce qui l’entoure, mais ne peut se déplacer. Noter qu’il a l’image, mais pas le son. La communication est de 1 round par point de rêve dépensé.</p>","descriptionmj":"","draconic":"hypnos","duree":"Selon r dépensé","JR":"Aucun","cible":"Un miroir","difficulte":"-5","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jOzRscDxoXZWpGS6":3},"flags":{}}
|
||||||
{"_id":"BibuJdKmaQJm3kFw","name":"Annulation de magie","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.BibuJdKmaQJm3kFw"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp","effects":[],"system":{"description":"<p>Ce rituel permet d’annuler un effet magique, que celui-ci ait été accompli par soi-même ou par un autre haut-rêvant. On peut annuler l’effet d’un sort, de zone ou individuel, d’un rituel d’enchantement, d’une invocation, etc.</p>\n<p>Le haut-rêvant doit se trouver dans la case <em>spécifique </em>des TMR d’où la magie a été accomplie. Le jet de RÊVE qu’il doit réussir a alors la même difficulté que celui ayant permis la magie, avec une dépense de points de rêve pareillement identique.</p>\n<p>Pour annuler une invocation, le rituel d’Annulation doit être ciblé sur la créature invoquée. Quand la magie est le résultat conjoint de plusieurs rituels, ce qui est notamment le cas des objets magiques, chacun doit être annulé tour à tour, en commençant toujours par le dernier à avoir été accompli chronologiquement. D’une manière générale, ce sont les mêmes opérations qui doivent être répétées à l’envers. Quand un rituel coûte des points de seuil, son annulation en coûte également (le même nombre). Annulation de Magie sert également à exorciser les entités de cauchemar non incarnées. La difficulté d’un exorcisme est toujours R-7, et le coût en points de rêve égal au RÊVE de l’entité. Le ciblage doit être fait sur la créature possédée.</p>\n<p>Avant d’accomplir une Annulation de Magie, les paramètres de la magie à annuler (case des TMR, R-, r) peuvent être découverts au moyen du rituel Lecture d’Aura.</p>\n<p>Pour la synthèse d’Annulation de Magie, considérer que ce rituel est de difficulté R-7. Il peut être utilisé indifféremment par Oniros, Hypnos ou Narcos (mais jamais Thanatos), quelle que soit la voie ayant servi à accomplir la magie à annuler.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Instantanée","JR":"Aucun","cible":"Effet magique","difficulte":"variable","portée":"","caseTMR":"special","caseTMRspeciale":"variable","ptreve":"variable","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"Q2G6GTdrotKzYGUC":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426559,"modifiedTime":1667260032846,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"BibuJdKmaQJm3kFw","name":"Annulation de magie","permission":{"default":0,"Q2G6GTdrotKzYGUC":3},"type":"sort","data":{"description":"<p>Ce rituel permet d’annuler un effet magique, que celui-ci ait été accompli par soi-même ou par un autre haut-rêvant. On peut annuler l’effet d’un sort, de zone ou individuel, d’un rituel d’enchantement, d’une invocation, etc.</p>\n<p>Le haut-rêvant doit se trouver dans la case <em>spécifique </em>des TMR d’où la magie a été accomplie. Le jet de RÊVE qu’il doit réussir a alors la même difficulté que celui ayant permis la magie, avec une dépense de points de rêve pareillement identique.</p>\n<p>Pour annuler une invocation, le rituel d’Annulation doit être ciblé sur la créature invoquée. Quand la magie est le résultat conjoint de plusieurs rituels, ce qui est notamment le cas des objets magiques, chacun doit être annulé tour à tour, en commençant toujours par le dernier à avoir été accompli chronologiquement. D’une manière générale, ce sont les mêmes opérations qui doivent être répétées à l’envers. Quand un rituel coûte des points de seuil, son annulation en coûte également (le même nombre). Annulation de Magie sert également à exorciser les entités de cauchemar non incarnées. La difficulté d’un exorcisme est toujours R-7, et le coût en points de rêve égal au RÊVE de l’entité. Le ciblage doit être fait sur la créature possédée.</p>\n<p>Avant d’accomplir une Annulation de Magie, les paramètres de la magie à annuler (case des TMR, R-, r) peuvent être découverts au moyen du rituel Lecture d’Aura.</p>\n<p>Pour la synthèse d’Annulation de Magie, considérer que ce rituel est de difficulté R-7. Il peut être utilisé indifféremment par Oniros, Hypnos ou Narcos (mais jamais Thanatos), quelle que soit la voie ayant servi à accomplir la magie à annuler.</p>","draconic":"oniros","duree":"Instantanée","JR":"Aucun","cible":"Effet magique","difficulte":"variable","portée":"","caseTMR":"special","caseTMRspeciale":"variable","ptreve":"variable","xp":0,"isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp","effects":[]}
|
||||||
{"_id":"CRLUPWjMpBxO5jkV","name":"Marmitons de Pavois","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.CRLUPWjMpBxO5jkV"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de créatures}</p>\n<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 bonbonne. Le premier demande où dresser le couvert. Cela fait, le second soulève la cloche du plat et en annonce fièrement l’intitulé, tandis que le troisième présente la boisson.</p>\n<p>Les Marmitons de Pavois dressent toujours le couvert pour sept convives, 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 bonbonne contient pareillement 21 mesures.</p>\n<p>Nourriture et boisson sont toujours très exotiques, le degré d’exotisme pouvant aller de 0 à 7 (1d8-1). Pour en supporter le goût \"étrange et venu d’ailleurs\", les convives doivent réussir un jet de :</p>\n<p><strong>VOLONTÉ/moral à - (degré d’exotisme) + (Cuisine)</strong></p>\n<p>Si le jet est réussi, le personnage n’est pas choqué par l’exotisme et peut même en apprécier la gastronomie. Pour tout échec, le personnage est choqué. Il peut alors soit renoncer à manger, soit se forcer à avaler. S’il se force, il peut manger autant de sust qu’il le veut, mais accompagne son repas d’un jet de moral malheureux.</p>\n<p>Les Marmitons assistent au repas, jusqu’à ce qu’on leur donne l’ordre de desservir, moment auquel tout se dématérialise, marmitons, nappe, vaisselle… Seule la nourriture ingérée demeure présente (dans les estomacs).</p>\n<p>Les Marmitons sont très susceptibles, et le moindre commentaire péjoratif 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>\n<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures invoquées}</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Tâche","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"special","caseTMRspeciale":"Cité Pavois C6","ptreve":"7","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426559,"modifiedTime":1667260032849,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"CRLUPWjMpBxO5jkV","name":"Marmitons de Pavois","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de créatures}</p>\n<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 bonbonne. Le premier demande où dresser le couvert. Cela fait, le second soulève la cloche du plat et en annonce fièrement l’intitulé, tandis que le troisième présente la boisson.</p>\n<p>Les Marmitons de Pavois dressent toujours le couvert pour sept convives, 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 bonbonne contient pareillement 21 mesures.</p>\n<p>Nourriture et boisson sont toujours très exotiques, le degré d’exotisme pouvant aller de 0 à 7 (1d8-1). Pour en supporter le goût \"étrange et venu d’ailleurs\", les convives doivent réussir un jet de :</p>\n<p><strong>VOLONTÉ/moral à - (degré d’exotisme) + (Cuisine)</strong></p>\n<p>Si le jet est réussi, le personnage n’est pas choqué par l’exotisme et peut même en apprécier la gastronomie. Pour tout échec, le personnage est choqué. Il peut alors soit renoncer à manger, soit se forcer à avaler. S’il se force, il peut manger autant de sust qu’il le veut, mais accompagne son repas d’un jet de moral malheureux.</p>\n<p>Les Marmitons assistent au repas, jusqu’à ce qu’on leur donne l’ordre de desservir, moment auquel tout se dématérialise, marmitons, nappe, vaisselle… Seule la nourriture ingérée demeure présente (dans les estomacs).</p>\n<p>Les Marmitons sont très susceptibles, et le moindre commentaire péjoratif 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>\n<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures invoquées}</p>","draconic":"hypnos","duree":"Tâche","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"special","caseTMRspeciale":"Cité Pavois C6","ptreve":"7","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"CcF8WGINp1cOVsfk","name":"Non-rêve","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.CcF8WGINp1cOVsfk"}},"system":{"description":"<p>L’effet de Non-Rêve ne s’applique qu’aux humanoïdes. L’illusion-suggestion que les portes du rêve viennent irrévocablement de se fermer, empêche l’humanoïde visé de rêver sous aucune forme : ni Basses, ni Médianes, ni Hautes Terres du Rêve, jusqu’à la fin de l’heure en cours pour un coût de base de 4 points de rêve. Chaque point de rêve dépensé en plus augmente la durée d’une heure. Si par exemple le haut-rêvant dépense 6 points de rêve, la victime n’aura aucune forme de rêve jusqu’à la fin de l’heure en cours et pendant les 2 heures suivantes. Pratiquement, ce sort empêche un haut-rêvant de <em>fonctionner</em>, puisqu’il ne peut plus ni monter en TMR ni récupérer ses points de rêve.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Selon r dépensé","JR":"Selon HN","cible":"Humanoïde","difficulte":"-7","portée":"","caseTMR":"desolation","caseTMRspeciale":"","ptreve":"4+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426560,"modifiedTime":1667260032850,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"CcF8WGINp1cOVsfk","name":"Non-rêve","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","data":{"description":"<p>L’effet de Non-Rêve ne s’applique qu’aux humanoïdes. L’illusion-suggestion que les portes du rêve viennent irrévocablement de se fermer, empêche l’humanoïde visé de rêver sous aucune forme : ni Basses, ni Médianes, ni Hautes Terres du Rêve, jusqu’à la fin de l’heure en cours pour un coût de base de 4 points de rêve. Chaque point de rêve dépensé en plus augmente la durée d’une heure. Si par exemple le haut-rêvant dépense 6 points de rêve, la victime n’aura aucune forme de rêve jusqu’à la fin de l’heure en cours et pendant les 2 heures suivantes. Pratiquement, ce sort empêche un haut-rêvant de <em>fonctionner</em>, puisqu’il ne peut plus ni monter en TMR ni récupérer ses points de rêve.</p>","descriptionmj":"","draconic":"hypnos","duree":"Selon r dépensé","JR":"Selon HN","cible":"Humanoïde","difficulte":"-7","portée":"","caseTMR":"desolation","caseTMRspeciale":"","ptreve":"4+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jOzRscDxoXZWpGS6":3},"flags":{}}
|
||||||
{"_id":"D63sxgni1kdD4xft","name":"Kanaillou","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.D63sxgni1kdD4xft"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de créatures}</p>\n<p>Le 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 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 bricoleur et possède dans ses mystérieuses poches d’insoupçonnables ressources : outils, matériel de chirurgie, remèdes, antidotes, etc. Il connaît virtuellement toutes les compétences à un niveau très élevé. Son défaut est qu’il ne fait jamais rien gratuitement et qu’il est exigeant. L’ayant invoqué et le Kanaillou se retrouvant devant lui, le haut-rêvant lui indique le service qu’il en attend, et le Kanaillou propose son prix. Si le haut-rêvant accepte et paie, le Kanaillou accomplit la chose demandée, qui peut être virtuellement n’importe quoi, à l’exception d’utiliser une compétence de combat ou de lancer un sort. Il peut par exemple crocheter une serrure, déchiffrer une inscription, accomplir des soins, fournir un antidote dont il possède (quel heureux hasard !) une fiole dans sa poche, désamorcer un piège, etc. Il est toujours censé réussir dans le temps le plus bref possible permis par les règles (une blessure critique est soignée en 2 rounds). Le prix qu’il demande n’est pas forcément de l’argent : ce peut être un objet (il a la connaissance infuse de tout ce qui se trouve dans les affaires du haut-rêvant), un autre service ou une action bizarre et ridicule pouvant concerner le haut-rêvant ou ses compagnons : manger son chapeau, jouer à saute-mouton, hurler des gros mots, etc. Il ne fait jamais crédit et ne travaille qu’une fois payé. Cela fait, il se dématérialise, ne laissant d’éventuel souvenir physique que le matériel utilisé, des pansements par exemple. Si le haut-rêvant refuse son prix, il disparaît. Même chose si on l’agresse, à commencer par vouloir lui dérober son matériel. Ses caractéristiques sont donc sans importance, et aucune magie n’a le temps de faire effet sur lui.</p>\n<p>En termes de jeu, le Kanaillou est une sorte de joker pouvant être utilisé dans les moments les plus cruciaux. C’est de cela que doit juger le gardien des rêves pour décider du prix ou du gage exigé. S’il estime que les joueurs pourraient fort bien se débrouiller autrement, le prix est exorbitant ; s’il estime par contre que seul un Kanaillou peut en effet les tirer d’affaire, le prix est plus modique. Mais cela ne doit jamais être 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>\n<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures invoquées}</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Tâche","JR":"Aucun","cible":"","difficulte":"-5","portée":"","caseTMR":"special","caseTMRspeciale":"Mont de Kanaï E1","ptreve":"4","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426560,"modifiedTime":1667260032849,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"D63sxgni1kdD4xft","name":"Kanaillou","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de créatures}</p>\n<p>Le 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 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 bricoleur et possède dans ses mystérieuses poches d’insoupçonnables ressources : outils, matériel de chirurgie, remèdes, antidotes, etc. Il connaît virtuellement toutes les compétences à un niveau très élevé. Son défaut est qu’il ne fait jamais rien gratuitement et qu’il est exigeant. L’ayant invoqué et le Kanaillou se retrouvant devant lui, le haut-rêvant lui indique le service qu’il en attend, et le Kanaillou propose son prix. Si le haut-rêvant accepte et paie, le Kanaillou accomplit la chose demandée, qui peut être virtuellement n’importe quoi, à l’exception d’utiliser une compétence de combat ou de lancer un sort. Il peut par exemple crocheter une serrure, déchiffrer une inscription, accomplir des soins, fournir un antidote dont il possède (quel heureux hasard !) une fiole dans sa poche, désamorcer un piège, etc. Il est toujours censé réussir dans le temps le plus bref possible permis par les règles (une blessure critique est soignée en 2 rounds). Le prix qu’il demande n’est pas forcément de l’argent : ce peut être un objet (il a la connaissance infuse de tout ce qui se trouve dans les affaires du haut-rêvant), un autre service ou une action bizarre et ridicule pouvant concerner le haut-rêvant ou ses compagnons : manger son chapeau, jouer à saute-mouton, hurler des gros mots, etc. Il ne fait jamais crédit et ne travaille qu’une fois payé. Cela fait, il se dématérialise, ne laissant d’éventuel souvenir physique que le matériel utilisé, des pansements par exemple. Si le haut-rêvant refuse son prix, il disparaît. Même chose si on l’agresse, à commencer par vouloir lui dérober son matériel. Ses caractéristiques sont donc sans importance, et aucune magie n’a le temps de faire effet sur lui.</p>\n<p>En termes de jeu, le Kanaillou est une sorte de joker pouvant être utilisé dans les moments les plus cruciaux. C’est de cela que doit juger le gardien des rêves pour décider du prix ou du gage exigé. S’il estime que les joueurs pourraient fort bien se débrouiller autrement, le prix est exorbitant ; s’il estime par contre que seul un Kanaillou peut en effet les tirer d’affaire, le prix est plus modique. Mais cela ne doit jamais être 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>\n<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures invoquées}</p>","draconic":"hypnos","duree":"Tâche","JR":"Aucun","cible":"","difficulte":"-5","portée":"","caseTMR":"special","caseTMRspeciale":"Mont de Kanaï E1","ptreve":"4","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"D9eSbTGp3i5gdbc5","name":"Tympan d'Hypnos","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.D9eSbTGp3i5gdbc5"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<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 @Item[skPIvFb5tRRPHDGU]{Transfiguration}, l’illusion doit toujours 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 autre <em>voix </em>d’humanoïde, le cri d’un animal en <em>cri </em>d’un autre animal, ou le son d’un objet sonore en son d’un autre 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 lui apportant son complément sonore, diminuant ainsi les risques de @JournalEntry[9bvrfDaudPqvQZPY]{Conflit de sens}. Le cri illusoire d’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, avec les mêmes remarques que pour Transfiguration. Noter que seule la voix est changée, sans affecter en rien le contenu du discours. Enfin, de même que la taille reste la même pour les illusions visuelles, le volume sonore de l’illusion auditive est celui de la cible. Une souris ne produira qu’un faible meuglement, une grincette produira un rugissement phénoménal.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde, animal, objet","difficulte":"-5","portée":"","caseTMR":"collines","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426560,"modifiedTime":1667260032852,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"D9eSbTGp3i5gdbc5","name":"Tympan d'Hypnos","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<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 @Item[skPIvFb5tRRPHDGU]{Transfiguration}, l’illusion doit toujours 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 autre <em>voix </em>d’humanoïde, le cri d’un animal en <em>cri </em>d’un autre animal, ou le son d’un objet sonore en son d’un autre 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 lui apportant son complément sonore, diminuant ainsi les risques de @JournalEntry[9bvrfDaudPqvQZPY]{Conflit de sens}. Le cri illusoire d’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, avec les mêmes remarques que pour Transfiguration. Noter que seule la voix est changée, sans affecter en rien le contenu du discours. Enfin, de même que la taille reste la même pour les illusions visuelles, le volume sonore de l’illusion auditive est celui de la cible. Une souris ne produira qu’un faible meuglement, une grincette produira un rugissement phénoménal.</p>","draconic":"hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde, animal, objet","difficulte":"-5","portée":"","caseTMR":"collines","caseTMRspeciale":"","ptreve":"4"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"DOgOLvKG54GvUVuB","name":"Sommeil","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.DOgOLvKG54GvUVuB"}},"system":{"description":"<p>Moins puissant que le rituel de Grand Sommeil, le sort de Sommeil n’en demeure pas moins une arme redoutable. Son fonctionnement est identique, plongeant la victime dans un sommeil que rien ne peut réveiller, sauf que la durée est limitée et qu’il n’y a pas de mot de réveil. Le sommeil magique dure un nombre de rounds égal au nombre de points de rêve dépensés. Si par exemple 5 points sont dépensés, la victime s’effondre, en proie à un inexorable sommeil, pour une durée de 5 rounds (30 secondes). C’est plus de temps qu’il n’en faut pour l’assommer ou lui trancher la gorge.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Selon r dépensé","JR":"Humanoïde selon HN, animal r-8","cible":"Toutes créatures","difficulte":"-9","portée":"","caseTMR":"marais","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426560,"modifiedTime":1667260032851,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"DOgOLvKG54GvUVuB","name":"Sommeil","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","data":{"description":"<p>Moins puissant que le rituel de Grand Sommeil, le sort de Sommeil n’en demeure pas moins une arme redoutable. Son fonctionnement est identique, plongeant la victime dans un sommeil que rien ne peut réveiller, sauf que la durée est limitée et qu’il n’y a pas de mot de réveil. Le sommeil magique dure un nombre de rounds égal au nombre de points de rêve dépensés. Si par exemple 5 points sont dépensés, la victime s’effondre, en proie à un inexorable sommeil, pour une durée de 5 rounds (30 secondes). C’est plus de temps qu’il n’en faut pour l’assommer ou lui trancher la gorge.</p>","descriptionmj":"","draconic":"hypnos","duree":"Selon r dépensé","JR":"Humanoïde selon HN, animal r-8","cible":"Toutes créatures","difficulte":"-9","portée":"","caseTMR":"marais","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jOzRscDxoXZWpGS6":3},"flags":{}}
|
||||||
{"_id":"DvP1kqAtGpr5Kux2","name":"Harpe d'Hypnos","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.DvP1kqAtGpr5Kux2"}},"system":{"description":"<p>Les rituels de lecture d’Hypnos sont d’étonnantes démonstrations d’auto-suggestion. Aidé par un support, le haut-rêvant se persuade qu’il peut voir ou entendre à distance, et il le fait. Couplé à l’ultime forme d’illusion que sont les invocations, il peut pareillement projeter son image ou sa voix à distance. Tous obéissent aux règles usuelles d’application des rituels. Si un rituel de lecture est paramétré sur une personne et que 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>\n<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 aboutit à un cas de @JournalEntry[eANDHKJXMPmPNJ2F]{Magie impossible}. 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, escalier, balcon, etc.). Les éléments naturels du paysage (rochers, arbres, sources, etc.) ne sont pas des lieux architecturaux. La distance séparant le haut-rêvant du lieu ou de la personne n’est sujette à aucune limitation. Il doit avoir déjà vu réellement la personne ou visité le lieu en question. Puis le sort étant ciblé sur l’instrument sonore, le haut-rêvant croit entendre un murmure en émaner. Ce murmure le plonge alors dans un état hypnotique particulier, où il entend réellement tous les sons audibles produits à proximité de la personne ou du lieu paramétré. S’il s’agit d’une personne, il entend tous les sons comme s’il se trouvait tout près de cette personne; s’il s’agit d’un lieu, il entend comme s’il se trouvait en son centre précis. L’état hypnotique (la communication) dure un round par point de rêve dépensé.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Selon r dépensé","JR":"Aucun","cible":"Un instrument sonore","difficulte":"-4","portée":"","caseTMR":"monts","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426560,"modifiedTime":1667260032848,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"DvP1kqAtGpr5Kux2","name":"Harpe d'Hypnos","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","data":{"description":"<p>Les rituels de lecture d’Hypnos sont d’étonnantes démonstrations d’auto-suggestion. Aidé par un support, le haut-rêvant se persuade qu’il peut voir ou entendre à distance, et il le fait. Couplé à l’ultime forme d’illusion que sont les invocations, il peut pareillement projeter son image ou sa voix à distance. Tous obéissent aux règles usuelles d’application des rituels. Si un rituel de lecture est paramétré sur une personne et que 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>\n<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 aboutit à un cas de @JournalEntry[eANDHKJXMPmPNJ2F]{Magie impossible}. 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, escalier, balcon, etc.). Les éléments naturels du paysage (rochers, arbres, sources, etc.) ne sont pas des lieux architecturaux. La distance séparant le haut-rêvant du lieu ou de la personne n’est sujette à aucune limitation. Il doit avoir déjà vu réellement la personne ou visité le lieu en question. Puis le sort étant ciblé sur l’instrument sonore, le haut-rêvant croit entendre un murmure en émaner. Ce murmure le plonge alors dans un état hypnotique particulier, où il entend réellement tous les sons audibles produits à proximité de la personne ou du lieu paramétré. S’il s’agit d’une personne, il entend tous les sons comme s’il se trouvait tout près de cette personne; s’il s’agit d’un lieu, il entend comme s’il se trouvait en son centre précis. L’état hypnotique (la communication) dure un round par point de rêve dépensé.</p>","descriptionmj":"","draconic":"hypnos","duree":"Selon r dépensé","JR":"Aucun","cible":"Un instrument sonore","difficulte":"-4","portée":"","caseTMR":"monts","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jOzRscDxoXZWpGS6":3},"flags":{}}
|
||||||
{"_id":"EARPoGnXOFS7EDy6","name":"Annulation de ses propres illusions","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.EARPoGnXOFS7EDy6"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>Ce rituel permet à un haut-rêvant d’annuler ses propres illusions-suggestions, pour celles qui ont une durée, ou ses propres illusions sensorielles, à une difficulté et un coût plus avantageux que s’il utilisait Annulation de Magie. Tout comme avec cet autre rituel, il doit se trouver en TMR dans la case exacte d’où a été lancé le sort, mais la difficulté est toujours fixe (R-4), de même que la dépense de points de rêve (r2). La portée est la même que celle du sort à annuler, de même que le ciblage.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Instantanée","JR":"Aucun","cible":"Selon sort","difficulte":"-4","portée":"","caseTMR":"special","caseTMRspeciale":"Variable","ptreve":"2","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426560,"modifiedTime":1667260032846,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"EARPoGnXOFS7EDy6","name":"Annulation de ses propres illusions","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>Ce rituel permet à un haut-rêvant d’annuler ses propres illusions-suggestions, pour celles qui ont une durée, ou ses propres illusions sensorielles, à une difficulté et un coût plus avantageux que s’il utilisait Annulation de Magie. Tout comme avec cet autre rituel, il doit se trouver en TMR dans la case exacte d’où a été lancé le sort, mais la difficulté est toujours fixe (R-4), de même que la dépense de points de rêve (r2). La portée est la même que celle du sort à annuler, de même que le ciblage.</p>","draconic":"hypnos","duree":"Instantanée","JR":"Aucun","cible":"Selon sort","difficulte":"-4","portée":"","caseTMR":"special","caseTMRspeciale":"Variable","ptreve":"2","isrituel":true,"portee":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"KnyfTatO8GmV5wtt","name":"Peur","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.KnyfTatO8GmV5wtt"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>L’effet de Peur ne s’applique qu’aux humanoïdes. La suggestion d’une horreur intense cause une peur réelle. La victime doit réussir un jet de VOLONTÉ à -5 ou être sonnée en cas d’échec. Le jet de VOLONTÉ doit être renouvelé de round en round jusqu’à ce qu’il réussisse. Tant qu’il échoue, la victime reste en <em>demi-surprise</em>.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Instantanée","JR":"Selon HN","cible":"Humanoïde","difficulte":"-5","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"5","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426561,"modifiedTime":1667260032851,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"KnyfTatO8GmV5wtt","name":"Peur","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>L’effet de Peur ne s’applique qu’aux humanoïdes. La suggestion d’une horreur intense cause une peur réelle. La victime doit réussir un jet de VOLONTÉ à -5 ou être sonnée en cas d’échec. Le jet de VOLONTÉ doit être renouvelé de round en round jusqu’à ce qu’il réussisse. Tant qu’il échoue, la victime reste en <em>demi-surprise</em>.</p>","draconic":"hypnos","duree":"Instantanée","JR":"Selon HN","cible":"Humanoïde","difficulte":"-5","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"5"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"L5z5oRovCjyKI6XX","name":"Concentration","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.L5z5oRovCjyKI6XX"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<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é par Wanister de Bravo.</p>\n<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. Il est également possible, sous l’effet de Concentration, de monter en TMR et de lancer un sort tout en étant engagé dans une mêlée de combat. La seule condition est de ne pas attaquer pendant le séjour en TMR sous peine de rompre néanmoins la concentration. Il est par contre possible d’esquiver/parer, sans malus. L’effet du sort n’est pas rompu si l’on est touché et n’encaisse qu’une contusion (non sonnante) ; il est rompu pour blessure légère et au-delà, et si l’on est sonné.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"HN","JR":"","cible":"Soi-même","difficulte":"-6","portée":"","caseTMR":"monts","caseTMRspeciale":"","ptreve":"2","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426561,"modifiedTime":1667260032846,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"L5z5oRovCjyKI6XX","name":"Concentration","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<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é par Wanister de Bravo.</p>\n<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. Il est également possible, sous l’effet de Concentration, de monter en TMR et de lancer un sort tout en étant engagé dans une mêlée de combat. La seule condition est de ne pas attaquer pendant le séjour en TMR sous peine de rompre néanmoins la concentration. Il est par contre possible d’esquiver/parer, sans malus. L’effet du sort n’est pas rompu si l’on est touché et n’encaisse qu’une contusion (non sonnante) ; il est rompu pour blessure légère et au-delà, et si l’on est sonné.</p>","draconic":"hypnos","duree":"HN","JR":"","cible":"Soi-même","difficulte":"-6","portée":"","caseTMR":"monts","caseTMRspeciale":"","ptreve":"2","portee":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"MwOFKhaB235JFaOj","name":"Langue d'Hypnos","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.MwOFKhaB235JFaOj"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>Langue d’Hypnos est une illusion purement <em>gustative </em>ne s’appliquant qu’aux objets et aux objets ayant de préférence un goût, aux 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 tous les sorts d’illusions sensorielles, la saveur illusoire ne peut être qu’une saveur connue du haut-rêvant. Couplé à @Item[dEs7qg5UsqpQxok6]{Narine d'Hypnos} et à @Item[skPIvFb5tRRPHDGU]{Transfiguration}, ce sort peut 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 langue comme du velours ?... Illusion de bout en bout, ce n’est que de l’eau du baquet à vaisselle.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"HN","JR":"Aucun","cible":"Objet","difficulte":"-3","portée":"","caseTMR":"cite","caseTMRspeciale":"","ptreve":"2","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426561,"modifiedTime":1667260032849,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"MwOFKhaB235JFaOj","name":"Langue d'Hypnos","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>Langue d’Hypnos est une illusion purement <em>gustative </em>ne s’appliquant qu’aux objets et aux objets ayant de préférence un goût, aux 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 tous les sorts d’illusions sensorielles, la saveur illusoire ne peut être qu’une saveur connue du haut-rêvant. Couplé à @Item[dEs7qg5UsqpQxok6]{Narine d'Hypnos} et à @Item[skPIvFb5tRRPHDGU]{Transfiguration}, ce sort peut 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 langue comme du velours ?... Illusion de bout en bout, ce n’est que de l’eau du baquet à vaisselle.</p>","draconic":"hypnos","duree":"HN","JR":"Aucun","cible":"Objet","difficulte":"-3","portée":"","caseTMR":"cite","caseTMRspeciale":"","ptreve":"2"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"OTtXNS1SnVfWWGKi","name":"Métamorphose","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.OTtXNS1SnVfWWGKi"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>Comme Invisibilité, l’illusion purement <em>visuelle </em>de Métamorphose peut être indifféremment lancée sur un humanoïde, un animal, un végétal ou un objet, mais une seule cible à la fois de l’une des quatre catégories. L’effet consiste à donner à la cible une apparence appartenant à l’une des trois autres catégories : par exemple, humanoïde \"métamorphosé\" en animal ou en objet, animal en végétal, végétal en humanoïde, objet en animal, etc., toujours d’une catégorie à une autre. L’apparence de l’illusion souhaitée doit être très précisément paramétrée lors du lancer, puis le sort est normalement ciblé sur la cible de son choix (humanoïde, animal, végétal ou objet). Si la cible est de la même catégorie que l’illusion, par exemple une illusion de caillou lancée sur une pomme (objet en objet), une illusion de Groin lancée sur un aubergiste (humanoïde en humanoïde), elle se dissipe sans effet, mais les points de rêve sont tout de même dépensés.</p>\n<p>Les choses inanimées (végétal, objet) métamorphosées en humanoïde ou en animal ne restent pas figées. Quoiqu’elles ne peuvent se déplacer (pour cause), elles sont néanmoins dotées de petits mouvements restreints donnant l’illusion de la vie. Une cruche en chat donnera un chat immobile, mais battant par exemple de la queue, se frottant les moustaches.</p>\n<p>Le haut-rêvant ne peut obtenir l’illusion d’un type de créature (humanoïde, animal) que s’il en a déjà réellement vu un spécimen au cours de sa vie. On ne peut pas inventer de créatures fantastiques ni d’espèces inconnues. Enfin, l’illusion a toujours la même TAILLE, la même masse apparente, que la cible. Un homme en pomme donnera l’illusion d’une énorme pomme ; une cerise en cheval donnera l’illusion d’un minuscule cheval. S’étonner de la disproportion est un raisonnement et n’entraîne pas de brume limbaire.</p>\n<p>Noter aussi que l’équipement de l’humanoïde sera \"adapté\" à la métamorphose, de sorte à rester cohérent. Dans le cas d’une pomme, ce sera bien évidemment une pomme toute nue.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde, animal, végétal, objet","difficulte":"-8","portée":"","caseTMR":"gouffre","caseTMRspeciale":"","ptreve":"6","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426561,"modifiedTime":1667260032850,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"OTtXNS1SnVfWWGKi","name":"Métamorphose","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>Comme Invisibilité, l’illusion purement <em>visuelle </em>de Métamorphose peut être indifféremment lancée sur un humanoïde, un animal, un végétal ou un objet, mais une seule cible à la fois de l’une des quatre catégories. L’effet consiste à donner à la cible une apparence appartenant à l’une des trois autres catégories : par exemple, humanoïde \"métamorphosé\" en animal ou en objet, animal en végétal, végétal en humanoïde, objet en animal, etc., toujours d’une catégorie à une autre. L’apparence de l’illusion souhaitée doit être très précisément paramétrée lors du lancer, puis le sort est normalement ciblé sur la cible de son choix (humanoïde, animal, végétal ou objet). Si la cible est de la même catégorie que l’illusion, par exemple une illusion de caillou lancée sur une pomme (objet en objet), une illusion de Groin lancée sur un aubergiste (humanoïde en humanoïde), elle se dissipe sans effet, mais les points de rêve sont tout de même dépensés.</p>\n<p>Les choses inanimées (végétal, objet) métamorphosées en humanoïde ou en animal ne restent pas figées. Quoiqu’elles ne peuvent se déplacer (pour cause), elles sont néanmoins dotées de petits mouvements restreints donnant l’illusion de la vie. Une cruche en chat donnera un chat immobile, mais battant par exemple de la queue, se frottant les moustaches.</p>\n<p>Le haut-rêvant ne peut obtenir l’illusion d’un type de créature (humanoïde, animal) que s’il en a déjà réellement vu un spécimen au cours de sa vie. On ne peut pas inventer de créatures fantastiques ni d’espèces inconnues. Enfin, l’illusion a toujours la même TAILLE, la même masse apparente, que la cible. Un homme en pomme donnera l’illusion d’une énorme pomme ; une cerise en cheval donnera l’illusion d’un minuscule cheval. S’étonner de la disproportion est un raisonnement et n’entraîne pas de brume limbaire.</p>\n<p>Noter aussi que l’équipement de l’humanoïde sera \"adapté\" à la métamorphose, de sorte à rester cohérent. Dans le cas d’une pomme, ce sera bien évidemment une pomme toute nue.</p>","draconic":"hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde, animal, végétal, objet","difficulte":"-8","portée":"","caseTMR":"gouffre","caseTMRspeciale":"","ptreve":"6"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"SqjZL3XlZew1eCzP","name":"Coursiers de Psark","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.SqjZL3XlZew1eCzP"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de créatures}</p>\n<p>Les 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 bride. Ils n’ont pas de caractéristiques, mais leur utilisation obéit aux règles suivantes :</p>\n<ul>\n<li>Les coursiers doivent être montés à cru, le cavalier s’agrippant à leur crinière et les dirigeant avec la voix. Ils ne supportent aucune forme d’entrave et n’acceptent strictement de porter qu’un (seul) cavalier. Ce dernier doit porter sur lui ses propres bagages, lesquels constituent son <em>encombrement </em>tout comme s’il était piéton. Il n’y a aucune limite au poids total que peut porter un coursier, mais plus le cavalier est personnellement encombré, plus ses jets d’Équitation sont difficiles.</li>\n<li>Vouloir entraver un coursier ou lui faire porter un bagage directement le dématérialise aussitôt. Même chose si on veut lui adjoindre un second cavalier. Les coursiers se dématérialisent pareillement à la moindre agression.</li>\n<li>Chaque coursier doit recevoir un cavalier dans les deux minutes (20 rounds) qui suivent l’invocation, faute de quoi les coursiers non pourvus se dématérialisent. Ils disparaissent dans tous les cas dès que leur tâche est accomplie, c’est-à-dire au plus tard à la fin de la prochaine heure de naissance de leur invocateur, et au plus tôt dès qu’ils se retrouvent sans cavalier, que celui-ci démonte volontairement ou accidentellement.</li>\n<li>Chaque coursier ne peut se trouver éloigné de <em>chacun </em>de ses congénères d’une distance supérieure à E3 mètres (3 fois l’EMPATHIE du haut-rêvant). Il respecte de lui-même cette limite, mais se dématérialise si son cavalier l’oblige à la dépasser.</li>\n<li>Les coursiers peuvent franchir des obstacles en sautant, s’ils sentent que c’est possible. C’est au gardien des rêves de déterminer si tel obstacle est ou non franchissable. Dans l’affirmative, le coursier réussit toujours sans jet de dés. Dans la négative, il refuse tout bonnement de sauter. Si son cavalier tente de l’y obliger, il s’estime agressé et se dématérialise. Que le coursier saute sans jet de dés n’implique pas que son cavalier en soit dispensé : AGILITÉ/Équitation - difficulté envisagée.</li>\n<li>Les coursiers ont une vitesse maximale de 60 km/heure draconique et peuvent effectivement parcourir 60 kilomètres en une heure, quel que soit le type de terrain. Si celui-ci est accidenté, c’est simplement le jet d’Équitation qui est rendu plus difficile.</li>\n<li>Monter un coursier de Psark est d’une difficulté de base -1 et correspond au trot/galop en plaine ou sur route. Les malus de sur-encombrement du cavalier sont applicables.</li>\n<li>Chaque heure de chevauchée coûte 4 points de fatigue.</li>\n</ul>\n<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures invoquées}</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Tâche ou fin HN","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"special","caseTMRspeciale":"Plaines de Psark H4","ptreve":"7","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426561,"modifiedTime":1667260032847,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"SqjZL3XlZew1eCzP","name":"Coursiers de Psark","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de créatures}</p>\n<p>Les 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 bride. Ils n’ont pas de caractéristiques, mais leur utilisation obéit aux règles suivantes :</p>\n<ul>\n<li>Les coursiers doivent être montés à cru, le cavalier s’agrippant à leur crinière et les dirigeant avec la voix. Ils ne supportent aucune forme d’entrave et n’acceptent strictement de porter qu’un (seul) cavalier. Ce dernier doit porter sur lui ses propres bagages, lesquels constituent son <em>encombrement </em>tout comme s’il était piéton. Il n’y a aucune limite au poids total que peut porter un coursier, mais plus le cavalier est personnellement encombré, plus ses jets d’Équitation sont difficiles.</li>\n<li>Vouloir entraver un coursier ou lui faire porter un bagage directement le dématérialise aussitôt. Même chose si on veut lui adjoindre un second cavalier. Les coursiers se dématérialisent pareillement à la moindre agression.</li>\n<li>Chaque coursier doit recevoir un cavalier dans les deux minutes (20 rounds) qui suivent l’invocation, faute de quoi les coursiers non pourvus se dématérialisent. Ils disparaissent dans tous les cas dès que leur tâche est accomplie, c’est-à-dire au plus tard à la fin de la prochaine heure de naissance de leur invocateur, et au plus tôt dès qu’ils se retrouvent sans cavalier, que celui-ci démonte volontairement ou accidentellement.</li>\n<li>Chaque coursier ne peut se trouver éloigné de <em>chacun </em>de ses congénères d’une distance supérieure à E3 mètres (3 fois l’EMPATHIE du haut-rêvant). Il respecte de lui-même cette limite, mais se dématérialise si son cavalier l’oblige à la dépasser.</li>\n<li>Les coursiers peuvent franchir des obstacles en sautant, s’ils sentent que c’est possible. C’est au gardien des rêves de déterminer si tel obstacle est ou non franchissable. Dans l’affirmative, le coursier réussit toujours sans jet de dés. Dans la négative, il refuse tout bonnement de sauter. Si son cavalier tente de l’y obliger, il s’estime agressé et se dématérialise. Que le coursier saute sans jet de dés n’implique pas que son cavalier en soit dispensé : AGILITÉ/Équitation - difficulté envisagée.</li>\n<li>Les coursiers ont une vitesse maximale de 60 km/heure draconique et peuvent effectivement parcourir 60 kilomètres en une heure, quel que soit le type de terrain. Si celui-ci est accidenté, c’est simplement le jet d’Équitation qui est rendu plus difficile.</li>\n<li>Monter un coursier de Psark est d’une difficulté de base -1 et correspond au trot/galop en plaine ou sur route. Les malus de sur-encombrement du cavalier sont applicables.</li>\n<li>Chaque heure de chevauchée coûte 4 points de fatigue.</li>\n</ul>\n<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures invoquées}</p>","draconic":"hypnos","duree":"Tâche ou fin HN","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"special","caseTMRspeciale":"Plaines de Psark H4","ptreve":"7","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"U10gDpI4RdSmldWq","name":"Non-agressivité","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.U10gDpI4RdSmldWq"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>L’effet de Non-Agressivité ne s’applique qu’aux animaux. Soumis à cette influence, un animal non encore agressif (mais s’apprêtant peut-être à le devenir) se détourne et passe son chemin sans davantage s’occuper du haut-rêvant ni de ses éventuels compagnons. L’effet magique n’a pas de durée en soi, ce n’est qu’une impulsion qui force l’animal à se détourner. S’il est poursuivi, attaqué, soumis à un stress, son agressivité ressurgit de façon toute naturelle. Si l’animal est déjà agressif, offensif, l’effet de Non-Agressivité ne fait que l’empêcher d’attaquer durant le round où il est ciblé. L’animal peut par contre se défendre (esquiver). Si personne ne l’attaque durant le round où le sort fait effet et s’il n’a pas encore été blessé, une non-agressivité naturelle opère au round d’après et il passe son chemin comme plus haut. Sinon, il est libre de ses actes.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Instantanée","JR":"r-8","cible":"Animal","difficulte":"-4","portée":"","caseTMR":"sanctuaire","caseTMRspeciale":"","ptreve":"3","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426561,"modifiedTime":1667260032850,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"U10gDpI4RdSmldWq","name":"Non-agressivité","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>L’effet de Non-Agressivité ne s’applique qu’aux animaux. Soumis à cette influence, un animal non encore agressif (mais s’apprêtant peut-être à le devenir) se détourne et passe son chemin sans davantage s’occuper du haut-rêvant ni de ses éventuels compagnons. L’effet magique n’a pas de durée en soi, ce n’est qu’une impulsion qui force l’animal à se détourner. S’il est poursuivi, attaqué, soumis à un stress, son agressivité ressurgit de façon toute naturelle. Si l’animal est déjà agressif, offensif, l’effet de Non-Agressivité ne fait que l’empêcher d’attaquer durant le round où il est ciblé. L’animal peut par contre se défendre (esquiver). Si personne ne l’attaque durant le round où le sort fait effet et s’il n’a pas encore été blessé, une non-agressivité naturelle opère au round d’après et il passe son chemin comme plus haut. Sinon, il est libre de ses actes.</p>","draconic":"hypnos","duree":"Instantanée","JR":"r-8","cible":"Animal","difficulte":"-4","portée":"","caseTMR":"sanctuaire","caseTMRspeciale":"","ptreve":"3"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"UJeEpHdc0wuIWmV6","name":"Guerrier Turme","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.UJeEpHdc0wuIWmV6"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de créatures}</p>\n<p>Le 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 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 a pas même besoin de le lui demander : il ne peut et ne sait faire que cela. Doté d’une forte perception empathique, il est capable de déceler tout danger réel à l’égard de son invocateur, qui se manifeste ou s’approche dans un rayon de E4 mètres. Il sonne alors du cor et continue à sonner jusqu’à ce que le haut-rêvant soit pleinement réveillé. Puis estimant sa tâche accomplie, il se dématérialise. Sa dague ne lui sert qu’à se défendre s’il est agressé avant le réveil du haut-rêvant. Ayant invoqué le Guerrier Turme, le haut-rêvant doit s’endormir avant la fin de l’heure en cours, faute de quoi le guerrier se dématérialise, s’estimant dérangé pour rien. Les Guerriers Turmes ont tous les mêmes caractéristiques et sont affectés par les sorts comme les Guerriers Sordes.</p>\n<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures invoquées}</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Tâche","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"special","caseTMRspeciale":"Forêt Turmide C8","ptreve":"7","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426561,"modifiedTime":1667260032848,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"UJeEpHdc0wuIWmV6","name":"Guerrier Turme","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de créatures}</p>\n<p>Le 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 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 a pas même besoin de le lui demander : il ne peut et ne sait faire que cela. Doté d’une forte perception empathique, il est capable de déceler tout danger réel à l’égard de son invocateur, qui se manifeste ou s’approche dans un rayon de E4 mètres. Il sonne alors du cor et continue à sonner jusqu’à ce que le haut-rêvant soit pleinement réveillé. Puis estimant sa tâche accomplie, il se dématérialise. Sa dague ne lui sert qu’à se défendre s’il est agressé avant le réveil du haut-rêvant. Ayant invoqué le Guerrier Turme, le haut-rêvant doit s’endormir avant la fin de l’heure en cours, faute de quoi le guerrier se dématérialise, s’estimant dérangé pour rien. Les Guerriers Turmes ont tous les mêmes caractéristiques et sont affectés par les sorts comme les Guerriers Sordes.</p>\n<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures invoquées}</p>","draconic":"hypnos","duree":"Tâche","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"special","caseTMRspeciale":"Forêt Turmide C8","ptreve":"7","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"UQYy9WjsKqqrjLc7","name":"Guerrier Sorde","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.UQYy9WjsKqqrjLc7"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de créatures}</p>\n<p>Le 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 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. Une fois invoqué, il attaque toute créature que le haut-rêvant lui désigne expressément, et se bat contre elle jusqu’à ce qu’il l’extermine ou reçoive un contre-ordre. On peut alors lui ordonner de commencer un autre combat, à condition que le délai entre deux combats n’excède pas 10 rounds, faute de quoi il considère sa tâche accomplie et se dématérialise. S’il est invoqué alors qu’il n’y a pas de créature à combattre immédiatement, il ne patiente que jusqu’à la fin de l’heure en cours, après quoi il s’estime dérangé pour rien et se dématérialise. Durant le délai, il peut accompagner le haut-rêvant où qu’il aille, mais sans pouvoir s’éloigner de lui de plus de E1 mètres. Sa vitesse est limitée à 12 m/round, il ne court, n’escalade ni ne nage jamais. Il n’obéit qu’au haut-rêvant qui l’a invoqué. Le rituel peut être répété pour invoquer plusieurs Guerriers Sordes dans un même combat. Tous ont les mêmes caractéristiques. La PERCEPTION indiquée tient compte des malus dus au heaume. Les Guerriers Sordes sont 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>\n<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures invoquées}</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Tâche","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"special","caseTMRspeciale":"Cité Sordide D13","ptreve":"7","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426561,"modifiedTime":1667260032848,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"UQYy9WjsKqqrjLc7","name":"Guerrier Sorde","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de créatures}</p>\n<p>Le 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 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. Une fois invoqué, il attaque toute créature que le haut-rêvant lui désigne expressément, et se bat contre elle jusqu’à ce qu’il l’extermine ou reçoive un contre-ordre. On peut alors lui ordonner de commencer un autre combat, à condition que le délai entre deux combats n’excède pas 10 rounds, faute de quoi il considère sa tâche accomplie et se dématérialise. S’il est invoqué alors qu’il n’y a pas de créature à combattre immédiatement, il ne patiente que jusqu’à la fin de l’heure en cours, après quoi il s’estime dérangé pour rien et se dématérialise. Durant le délai, il peut accompagner le haut-rêvant où qu’il aille, mais sans pouvoir s’éloigner de lui de plus de E1 mètres. Sa vitesse est limitée à 12 m/round, il ne court, n’escalade ni ne nage jamais. Il n’obéit qu’au haut-rêvant qui l’a invoqué. Le rituel peut être répété pour invoquer plusieurs Guerriers Sordes dans un même combat. Tous ont les mêmes caractéristiques. La PERCEPTION indiquée tient compte des malus dus au heaume. Les Guerriers Sordes sont 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>\n<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures invoquées}</p>","draconic":"hypnos","duree":"Tâche","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"special","caseTMRspeciale":"Cité Sordide D13","ptreve":"7","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"VG89vfk7KsO01eJv","name":"Secouriste blanc","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.VG89vfk7KsO01eJv"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de créatures}</p>\n<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, premiers soins et soins complets, ce qu’il fait spontanément. En plein combat, il peut même s’approcher de la mêlée pour tirer en arrière d’éventuels tombés à terre. Quand il a plusieurs blessés à soigner, il commence par le plus proche de lui. Mais l’invocateur peut lui désigner un blessé à soigner en priorité.</p>\n<p>Le Secouriste possède son propre matériel de chirurgie, mais il n’a aucun consommable (eau, chiffons) qu’il faut lui fournir.</p>\n<p>Pour la résolution des soins, le Secouriste ne joue pas de jet de Chirurgie. À la place, c’est le blessé qui joue des jets de CHANCE, pour déterminer les points de tâche obtenus :</p>\n<table style=\"height: 102px; width: 260px;\" border=\"0\">\n<tbody>\n<tr style=\"height: 17px;\">\n<td style=\"height: 17px; width: 119px;\">Particulière :</td>\n<td style=\"height: 17px; width: 134px;\">4 points</td>\n</tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 119px; height: 17px;\">Significative :</td>\n<td style=\"width: 134px; height: 17px;\">3 points</td>\n</tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 119px; height: 17px;\">Normale :</td>\n<td style=\"width: 134px; height: 17px;\">2 points</td>\n</tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 119px; height: 17px;\">Échec :</td>\n<td style=\"width: 134px; height: 17px;\">1 pt</td>\n</tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 119px; height: 17px;\">Échec particulier :</td>\n<td style=\"width: 134px; height: 17px;\">0 pt</td>\n</tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 119px; height: 17px;\">Échec total :</td>\n<td style=\"width: 134px; height: 17px;\">0 pt (et sans malus)</td>\n</tr>\n</tbody>\n</table>\n<p>Le Secouriste disparaît dès que le combat est terminé ET que tous les blessés ont été soignés.</p>\n<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures invoquées}</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Tâche ou fin HN","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"special","caseTMRspeciale":"Sanctuaire Blanc G4","ptreve":"7","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426561,"modifiedTime":1667260032851,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"VG89vfk7KsO01eJv","name":"Secouriste blanc","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de créatures}</p>\n<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, premiers soins et soins complets, ce qu’il fait spontanément. En plein combat, il peut même s’approcher de la mêlée pour tirer en arrière d’éventuels tombés à terre. Quand il a plusieurs blessés à soigner, il commence par le plus proche de lui. Mais l’invocateur peut lui désigner un blessé à soigner en priorité.</p>\n<p>Le Secouriste possède son propre matériel de chirurgie, mais il n’a aucun consommable (eau, chiffons) qu’il faut lui fournir.</p>\n<p>Pour la résolution des soins, le Secouriste ne joue pas de jet de Chirurgie. À la place, c’est le blessé qui joue des jets de CHANCE, pour déterminer les points de tâche obtenus :</p>\n<table style=\"height: 102px; width: 260px;\" border=\"0\">\n<tbody>\n<tr style=\"height: 17px;\">\n<td style=\"height: 17px; width: 119px;\">Particulière :</td>\n<td style=\"height: 17px; width: 134px;\">4 points</td>\n</tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 119px; height: 17px;\">Significative :</td>\n<td style=\"width: 134px; height: 17px;\">3 points</td>\n</tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 119px; height: 17px;\">Normale :</td>\n<td style=\"width: 134px; height: 17px;\">2 points</td>\n</tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 119px; height: 17px;\">Échec :</td>\n<td style=\"width: 134px; height: 17px;\">1 pt</td>\n</tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 119px; height: 17px;\">Échec particulier :</td>\n<td style=\"width: 134px; height: 17px;\">0 pt</td>\n</tr>\n<tr style=\"height: 17px;\">\n<td style=\"width: 119px; height: 17px;\">Échec total :</td>\n<td style=\"width: 134px; height: 17px;\">0 pt (et sans malus)</td>\n</tr>\n</tbody>\n</table>\n<p>Le Secouriste disparaît dès que le combat est terminé ET que tous les blessés ont été soignés.</p>\n<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures invoquées}</p>","draconic":"hypnos","duree":"Tâche ou fin HN","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"special","caseTMRspeciale":"Sanctuaire Blanc G4","ptreve":"7","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"WvTkEYb216X0XiJc","name":"Voix d'Hypnos","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.WvTkEYb216X0XiJc"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>Les rituels de lecture d’Hypnos sont d’étonnantes démonstrations d’auto-suggestion. Aidé par un support, le haut-rêvant se persuade qu’il peut voir ou entendre à distance, et il le fait. Couplé à l’ultime forme d’illusion que sont les invocations, il peut pareillement projeter son image ou sa voix à distance. Tous obéissent aux règles usuelles d’application des rituels. Si un rituel de lecture est paramétré sur une personne et que 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>\n<p>Le rituel de Voix d’Hypnos permet de détecter le mensonge. Il n’y a pas de véritable ciblage, le rituel opère sur le haut-rêvant directement sans passer par un support. Lors du paramétrage, le haut-rêvant se reporte à une certaine conversation de son choix, datant au maximum de 12 heures. La conversation peut avoir eu plusieurs interlocuteurs, mais Voix d’Hypnos ne fonctionne que sur un seul d’entre eux à la fois.</p>\n<p>Pour les détecter tous, il faut recommencer autant de fois le rituel. Puis, le sort étant ciblé sur lui-même, le haut-rêvant se plonge dans un état hypnotique dans lequel il réentend toute la conversation, comme si on repassait la bande. La durée de réécoute est d’un round, quelle qu’ait été la conversation, le temps mental du haut-rêvant devenant élastique. Tant que son interlocuteur dit la vérité, sa voix est mélodieuse ; dès qu’il ment <em>volontairement</em>, elle devient horrible et grinçante. On ne peut ainsi détecter que les mensonges volontaires, pas les mensonges inconscients ou par omission.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"1 round","JR":"Aucun","cible":"Soi-même","difficulte":"-4","portée":"","caseTMR":"desert","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426562,"modifiedTime":1667260032852,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"WvTkEYb216X0XiJc","name":"Voix d'Hypnos","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>Les rituels de lecture d’Hypnos sont d’étonnantes démonstrations d’auto-suggestion. Aidé par un support, le haut-rêvant se persuade qu’il peut voir ou entendre à distance, et il le fait. Couplé à l’ultime forme d’illusion que sont les invocations, il peut pareillement projeter son image ou sa voix à distance. Tous obéissent aux règles usuelles d’application des rituels. Si un rituel de lecture est paramétré sur une personne et que 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>\n<p>Le rituel de Voix d’Hypnos permet de détecter le mensonge. Il n’y a pas de véritable ciblage, le rituel opère sur le haut-rêvant directement sans passer par un support. Lors du paramétrage, le haut-rêvant se reporte à une certaine conversation de son choix, datant au maximum de 12 heures. La conversation peut avoir eu plusieurs interlocuteurs, mais Voix d’Hypnos ne fonctionne que sur un seul d’entre eux à la fois.</p>\n<p>Pour les détecter tous, il faut recommencer autant de fois le rituel. Puis, le sort étant ciblé sur lui-même, le haut-rêvant se plonge dans un état hypnotique dans lequel il réentend toute la conversation, comme si on repassait la bande. La durée de réécoute est d’un round, quelle qu’ait été la conversation, le temps mental du haut-rêvant devenant élastique. Tant que son interlocuteur dit la vérité, sa voix est mélodieuse ; dès qu’il ment <em>volontairement</em>, elle devient horrible et grinçante. On ne peut ainsi détecter que les mensonges volontaires, pas les mensonges inconscients ou par omission.</p>","draconic":"hypnos","duree":"1 round","JR":"Aucun","cible":"Soi-même","difficulte":"-4","portée":"","caseTMR":"desert","caseTMRspeciale":"","ptreve":"4","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"Y4r9kTN2brWC2N0n","name":"Lecture d'aura","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.Y4r9kTN2brWC2N0n"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp","effects":[],"system":{"description":"<p>Les rituels de Lecture d’Aura peuvent indifféremment être accomplis par n’importe laquelle des quatre voies.</p>\n<p>Ce rituel permet d’approfondir les informations fournies par Détection d’Aura. Pratiquer Lecture d’Aura quand il n’y a pas d’aura revient à demander une magie impossible et crée immédiatement une déchirure du rêve.</p>\n<p>Lecture d’Aura est effectuée en plusieurs étapes, toutes étant de difficulté R-3 et coûtant 3 points de rêve. La première a toujours lieu dans un sanctuaire et ne fait que révéler dans quel(s) autre(s) genre(s) de case(s) le haut-rêvant doit se rendre pour continuer sa lecture. Là, il apprend quel genre de magie a été produit ou à quel type de rêve il a affaire, de même que les cases spécifiques concernées. Enfin dans les cases spécifiques, le haut-rêvant peut apprendre la force du rêve ou de la magie en cours, c’est-à-dire pratiquement la difficulté et le nombre de points de rêve impliqués, information indispensable dans l’optique d’une annulation de magie.</p>\n<p>Lecture d’Aura révèle également la couleur de l’aura (fixe ou pulsative) comme Détection d’Aura. Pour les créatures vivantes, on peut donc sauter l’étape de Détection d’Aura et commencer directement par la lecture, puisqu’on est sûr de trouver une aura. Dans les autres cas, il est plus prudent de commencer par la détection si, en l’absence finale d’une aura, on ne veut pas créer de magie impossible. Effectuée sur une créature non soumise à un effet magique ni sous l’emprise d’une entité, Lecture d’Aura indique toujours le Fleuve. Là, dans n’importe quelle case du Fleuve, le haut-rêvant se contente d’apprendre qu’il a affaire à une créature vivante et douée de rêve.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-3","portée":"","caseTMR":"special","caseTMRspeciale":"Sanctuaire / variable","ptreve":"3","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"Q2G6GTdrotKzYGUC":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426562,"modifiedTime":1667260032849,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"Y4r9kTN2brWC2N0n","name":"Lecture d'aura","permission":{"default":0,"Q2G6GTdrotKzYGUC":3},"type":"sort","data":{"description":"<p>Les rituels de Lecture d’Aura peuvent indifféremment être accomplis par n’importe laquelle des quatre voies.</p>\n<p>Ce rituel permet d’approfondir les informations fournies par Détection d’Aura. Pratiquer Lecture d’Aura quand il n’y a pas d’aura revient à demander une magie impossible et crée immédiatement une déchirure du rêve.</p>\n<p>Lecture d’Aura est effectuée en plusieurs étapes, toutes étant de difficulté R-3 et coûtant 3 points de rêve. La première a toujours lieu dans un sanctuaire et ne fait que révéler dans quel(s) autre(s) genre(s) de case(s) le haut-rêvant doit se rendre pour continuer sa lecture. Là, il apprend quel genre de magie a été produit ou à quel type de rêve il a affaire, de même que les cases spécifiques concernées. Enfin dans les cases spécifiques, le haut-rêvant peut apprendre la force du rêve ou de la magie en cours, c’est-à-dire pratiquement la difficulté et le nombre de points de rêve impliqués, information indispensable dans l’optique d’une annulation de magie.</p>\n<p>Lecture d’Aura révèle également la couleur de l’aura (fixe ou pulsative) comme Détection d’Aura. Pour les créatures vivantes, on peut donc sauter l’étape de Détection d’Aura et commencer directement par la lecture, puisqu’on est sûr de trouver une aura. Dans les autres cas, il est plus prudent de commencer par la détection si, en l’absence finale d’une aura, on ne veut pas créer de magie impossible. Effectuée sur une créature non soumise à un effet magique ni sous l’emprise d’une entité, Lecture d’Aura indique toujours le Fleuve. Là, dans n’importe quelle case du Fleuve, le haut-rêvant se contente d’apprendre qu’il a affaire à une créature vivante et douée de rêve.</p>","draconic":"oniros","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-3","portée":"","caseTMR":"special","caseTMRspeciale":"Sanctuaire / variable","ptreve":"3","xp":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp","effects":[]}
|
||||||
{"_id":"YOJsOLpHTQYreZ6i","name":"Soufflet","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.YOJsOLpHTQYreZ6i"}},"system":{"description":"<p>Le Soufflet peut être dirigé contre toute créature, humanoïde ou animale. Son effet, instantané, est celui d’une gifle magistrale, causant ses dommages sur la table des Coups non mortels. Le +dom de l’agression est égal au nombre de points de rêve dépensés. Sauf pour les animaux qui peuvent faire jouer entièrement leur protection naturelle, la protection applicable peut être au maximum de 2 points.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Instantanée","JR":"Humanoïde selon HN, animal r-8","cible":"Toutes créatures","difficulte":"-6","portée":"","caseTMR":"gouffre","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426562,"modifiedTime":1667260032851,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"YOJsOLpHTQYreZ6i","name":"Soufflet","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","data":{"description":"<p>Le Soufflet peut être dirigé contre toute créature, humanoïde ou animale. Son effet, instantané, est celui d’une gifle magistrale, causant ses dommages sur la table des Coups non mortels. Le +dom de l’agression est égal au nombre de points de rêve dépensés. Sauf pour les animaux qui peuvent faire jouer entièrement leur protection naturelle, la protection applicable peut être au maximum de 2 points.</p>","descriptionmj":"","draconic":"hypnos","duree":"Instantanée","JR":"Humanoïde selon HN, animal r-8","cible":"Toutes créatures","difficulte":"-6","portée":"","caseTMR":"gouffre","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jOzRscDxoXZWpGS6":3},"flags":{}}
|
||||||
{"_id":"aYOfXEuDp6xGDO4N","name":"Égarement","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.aYOfXEuDp6xGDO4N"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>L’effet d’Égarement ne s’applique qu’aux humanoïdes. L’apport massif de pseudo-souvenirs, informulés et insaisissables, empêche l’humanoïde visé de se concentrer sur son activité intellectuelle, manuelle ou verbale. Il ne fait plus ou ne dit plus que des <em>bêtises</em>, en termes de jeu des échecs totaux. Un intellectuel devient incapable de lire ou d’écrire, un artisan se tape sur les doigts, un musicien rate tous ses accords, un orateur bafouille, etc. L’état d’égarement dure jusqu’à la fin de l’heure en cours + une heure complète, ou se dissipe de lui-même dès qu’il y a stress, par exemple une agression. Ce sort est donc totalement inutile et inefficace en combat.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Une heure","JR":"Selon HN","cible":"Humanoïde","difficulte":"-4","portée":"","caseTMR":"desolation","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426562,"modifiedTime":1667260032847,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"aYOfXEuDp6xGDO4N","name":"Égarement","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>L’effet d’Égarement ne s’applique qu’aux humanoïdes. L’apport massif de pseudo-souvenirs, informulés et insaisissables, empêche l’humanoïde visé de se concentrer sur son activité intellectuelle, manuelle ou verbale. Il ne fait plus ou ne dit plus que des <em>bêtises</em>, en termes de jeu des échecs totaux. Un intellectuel devient incapable de lire ou d’écrire, un artisan se tape sur les doigts, un musicien rate tous ses accords, un orateur bafouille, etc. L’état d’égarement dure jusqu’à la fin de l’heure en cours + une heure complète, ou se dissipe de lui-même dès qu’il y a stress, par exemple une agression. Ce sort est donc totalement inutile et inefficace en combat.</p>","draconic":"hypnos","duree":"Une heure","JR":"Selon HN","cible":"Humanoïde","difficulte":"-4","portée":"","caseTMR":"desolation","caseTMRspeciale":"","ptreve":"4"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"cghxHRstw7cXLEm4","name":"Invoquer son image","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.cghxHRstw7cXLEm4"}},"system":{"description":"<p>Les rituels de lecture d’Hypnos sont d’étonnantes démonstrations d’auto-suggestion. Aidé par un support, le haut-rêvant se persuade qu’il peut voir ou entendre à distance, et il le fait. Couplé à l’ultime forme d’illusion que sont les invocations, il peut pareillement projeter son image ou sa voix à distance. Tous obéissent aux règles usuelles d’application des rituels. Si un rituel de lecture est paramétré sur une personne et que 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>\n<p>Ce rituel est comme le négatif de @Item[Ew5JzQ2lzcpGoF11]{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 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 pouvoir se déplacer. Dans l’instant même, un hologramme de lui-même, grandeur nature et fidèle jusqu’au moindre geste, prend naissance près de la personne ou au centre du lieu choisi.</p>\n<p>Les spectateurs peuvent se déplacer à travers l’hologramme, ce n’est qu’une illusion sans substance. Par ce rituel, le haut-rêvant ne peut communiquer aucun son, et lui-même n’entend ni ne voit rien. Il ne peut pas savoir comment est accueillie sa \"visite\". La communication est de 1 round par point de rêve dépensé.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Selon r dépensé","JR":"Aucun","cible":"Un miroir","difficulte":"-6","portée":"","caseTMR":"sanctuaire","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426562,"modifiedTime":1667260032849,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"cghxHRstw7cXLEm4","name":"Invoquer son image","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","data":{"description":"<p>Les rituels de lecture d’Hypnos sont d’étonnantes démonstrations d’auto-suggestion. Aidé par un support, le haut-rêvant se persuade qu’il peut voir ou entendre à distance, et il le fait. Couplé à l’ultime forme d’illusion que sont les invocations, il peut pareillement projeter son image ou sa voix à distance. Tous obéissent aux règles usuelles d’application des rituels. Si un rituel de lecture est paramétré sur une personne et que 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>\n<p>Ce rituel est comme le négatif de @Item[Ew5JzQ2lzcpGoF11]{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 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 pouvoir se déplacer. Dans l’instant même, un hologramme de lui-même, grandeur nature et fidèle jusqu’au moindre geste, prend naissance près de la personne ou au centre du lieu choisi.</p>\n<p>Les spectateurs peuvent se déplacer à travers l’hologramme, ce n’est qu’une illusion sans substance. Par ce rituel, le haut-rêvant ne peut communiquer aucun son, et lui-même n’entend ni ne voit rien. Il ne peut pas savoir comment est accueillie sa \"visite\". La communication est de 1 round par point de rêve dépensé.</p>","descriptionmj":"","draconic":"hypnos","duree":"Selon r dépensé","JR":"Aucun","cible":"Un miroir","difficulte":"-6","portée":"","caseTMR":"sanctuaire","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jOzRscDxoXZWpGS6":3},"flags":{}}
|
||||||
{"_id":"hKL3ed13OoawY0UP","name":"Robe fantasmagorique","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.hKL3ed13OoawY0UP"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<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é d'Hypnos}. Il est alors possible de lui inventer tous les vêtements imaginables, couvrant plus ou moins totalement son corps, y compris une armure. Des pièces d’équipement illusoires sont également possibles, armes, bouclier, etc.</p>\n<p>Si la cible n’est pas préalablement nue (réellement ou illusoirement), le sort n’a aucun effet mais les points de rêve sont dépensés quand même.</p>\n<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, 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 l’utilisation de son équipement réel (rendu invisible par @Item[m2pwvCCImJnbKVcW]{Nudité d'Hypnos}) et son équipement illusoire (celui inventé par Robe Fantasmagorique).</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde","difficulte":"-7","portée":"","caseTMR":"gouffre","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426562,"modifiedTime":1667260032851,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"hKL3ed13OoawY0UP","name":"Robe fantasmagorique","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<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é d'Hypnos}. Il est alors possible de lui inventer tous les vêtements imaginables, couvrant plus ou moins totalement son corps, y compris une armure. Des pièces d’équipement illusoires sont également possibles, armes, bouclier, etc.</p>\n<p>Si la cible n’est pas préalablement nue (réellement ou illusoirement), le sort n’a aucun effet mais les points de rêve sont dépensés quand même.</p>\n<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, 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 l’utilisation de son équipement réel (rendu invisible par @Item[m2pwvCCImJnbKVcW]{Nudité d'Hypnos}) et son équipement illusoire (celui inventé par Robe Fantasmagorique).</p>","draconic":"hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde","difficulte":"-7","portée":"","caseTMR":"gouffre","caseTMRspeciale":"","ptreve":"4"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"kl0BdfICGDXIhv7u","name":"Repos","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.kl0BdfICGDXIhv7u"}},"system":{"description":"<p>L’illusion-suggestion d’un grand repos crée la sensation réelle d’être reposé. Pratiquement, la créature visée regagne un segment de fatigue pour chaque 2r dépensés. Si par exemple 6 points de rêve sont dépensés, 3 segments de fatigue sont effacés. En cas de segment entamé, appliquer la règle normale : tout segment entamé de la moitié ou plus compte pour un segment plein.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Instantanée","JR":"Humanoïde selon HN, animal r-8","cible":"Toutes créatures","difficulte":"-3","portée":"","caseTMR":"cite","caseTMRspeciale":"","ptreve":"2+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426562,"modifiedTime":1667260032851,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"kl0BdfICGDXIhv7u","name":"Repos","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","data":{"description":"<p>L’illusion-suggestion d’un grand repos crée la sensation réelle d’être reposé. Pratiquement, la créature visée regagne un segment de fatigue pour chaque 2r dépensés. Si par exemple 6 points de rêve sont dépensés, 3 segments de fatigue sont effacés. En cas de segment entamé, appliquer la règle normale : tout segment entamé de la moitié ou plus compte pour un segment plein.</p>","descriptionmj":"","draconic":"hypnos","duree":"Instantanée","JR":"Humanoïde selon HN, animal r-8","cible":"Toutes créatures","difficulte":"-3","portée":"","caseTMR":"cite","caseTMRspeciale":"","ptreve":"2+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jOzRscDxoXZWpGS6":3},"flags":{}}
|
||||||
{"_id":"kodXKQROy6l0jlHz","name":"Invisibilité","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.kodXKQROy6l0jlHz"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>Le sort d’Invisibilité peut être indifféremment lancé sur un humanoïde, un animal, un végétal ou un objet, mais une seule cible à la fois de l’une des quatre catégories. C’est une illusion strictement <em>visuelle</em>. L’effet consiste à rendre la cible invisible aux regards comme si elle n’existait pas. On peut supposer que l’œil la voit toujours, mais que 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 place de la cible, affectant grossièrement la forme de cette dernière (voir @JournalEntry[9bvrfDaudPqvQZPY]{Conflit de sens}). Le sort n’affecte 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 réelle invisibilité, un humanoïde doit être intégralement nu, ou bien d’autres Invisibilités doivent également avoir été lancées sur chaque composant de son équipement, chaque pièce de vêtement, chaque arme, etc. En combat, un attaquant invisible bénéficie de la <em>complète surprise</em> à sa première attaque. Ensuite, il est localisé par sa brume limbaire et les conditions du combat redeviennent normales.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde, animal, végétal, objet","difficulte":"-10","portée":"","caseTMR":"fleuve","caseTMRspeciale":"","ptreve":"8","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426563,"modifiedTime":1667260032848,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"kodXKQROy6l0jlHz","name":"Invisibilité","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>Le sort d’Invisibilité peut être indifféremment lancé sur un humanoïde, un animal, un végétal ou un objet, mais une seule cible à la fois de l’une des quatre catégories. C’est une illusion strictement <em>visuelle</em>. L’effet consiste à rendre la cible invisible aux regards comme si elle n’existait pas. On peut supposer que l’œil la voit toujours, mais que 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 place de la cible, affectant grossièrement la forme de cette dernière (voir @JournalEntry[9bvrfDaudPqvQZPY]{Conflit de sens}). Le sort n’affecte 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 réelle invisibilité, un humanoïde doit être intégralement nu, ou bien d’autres Invisibilités doivent également avoir été lancées sur chaque composant de son équipement, chaque pièce de vêtement, chaque arme, etc. En combat, un attaquant invisible bénéficie de la <em>complète surprise</em> à sa première attaque. Ensuite, il est localisé par sa brume limbaire et les conditions du combat redeviennent normales.</p>","draconic":"hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde, animal, végétal, objet","difficulte":"-10","portée":"","caseTMR":"fleuve","caseTMRspeciale":"","ptreve":"8"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"ktFI49xqZ0mGfTzt","name":"Transfiguration","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.ktFI49xqZ0mGfTzt"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>L’illusion purement visuelle de Transfiguration fonctionne de la même façon que @Item[Z2U35toRL5nSBr1k]{Métamorphose}, sauf que l’illusion doit 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 disparité de catégorie entre la cible et l’illusion entraîne la dissipation sans effet, mais avec tout de même la dépense des points de rêve. Comme précédemment la TAILLE de l’illusion sera la même que celle de la cible, et le type de créature de l’illusion (humanoïde, animal) doit être connu. Inversement, il est quasiment impossible d’obtenir le sosie parfait de quelqu’un, tout comme il est difficile à un peintre d’obtenir un portrait parfaitement ressemblant. Si un haut-rêvant désire donner à sa cible la même apparence que quelqu’un d’autre, il doit jouer un jet de VUE à -8, et obtiendra une ressemblance plus ou moins approchante selon son genre de résultat. Inventer un humanoïde anonyme quoique doté de traits spécifiques (blond, gros nez, une verrue au menton, etc.) s’obtient sans problème. Comme toujours en ce qui concerne l’humanoïde, c’est lui seul qui est concerné et non son équipement.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde, animal, végétal, objet","difficulte":"-6","portée":"","caseTMR":"monts","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426563,"modifiedTime":1667260032851,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"ktFI49xqZ0mGfTzt","name":"Transfiguration","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>L’illusion purement visuelle de Transfiguration fonctionne de la même façon que @Item[Z2U35toRL5nSBr1k]{Métamorphose}, sauf que l’illusion doit 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 disparité de catégorie entre la cible et l’illusion entraîne la dissipation sans effet, mais avec tout de même la dépense des points de rêve. Comme précédemment la TAILLE de l’illusion sera la même que celle de la cible, et le type de créature de l’illusion (humanoïde, animal) doit être connu. Inversement, il est quasiment impossible d’obtenir le sosie parfait de quelqu’un, tout comme il est difficile à un peintre d’obtenir un portrait parfaitement ressemblant. Si un haut-rêvant désire donner à sa cible la même apparence que quelqu’un d’autre, il doit jouer un jet de VUE à -8, et obtiendra une ressemblance plus ou moins approchante selon son genre de résultat. Inventer un humanoïde anonyme quoique doté de traits spécifiques (blond, gros nez, une verrue au menton, etc.) s’obtient sans problème. Comme toujours en ce qui concerne l’humanoïde, c’est lui seul qui est concerné et non son équipement.</p>","draconic":"hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde, animal, végétal, objet","difficulte":"-6","portée":"","caseTMR":"monts","caseTMRspeciale":"","ptreve":"4"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"mFRytxLSwDrACr5f","name":"Fauchage","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.mFRytxLSwDrACr5f"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>L’effet de Fauchage ne s’applique qu’aux humanoïdes. Il provoque chez la cible l’illusion qu’on vient de lui faucher les jambes, illusion si saisissante que le personnage chute, sans pouvoir se rattraper. L’effet de Fauchage n’a pas d’autre conséquence, mais la chute peut, elle, en avoir. En fonction du type d’activité, marche, course, escalade, et du sol de réception, c’est au gardien des rêves d’en déterminer le jet d’encaissement. La victime peut normalement se relever le round suivant. Noter qu’un Fauchage sur un humanoïde couché ou assis n’a virtuellement aucun effet.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Instantanée","JR":"Selon HN","cible":"Humanoïde","difficulte":"-6","portée":"","caseTMR":"plaines","caseTMRspeciale":"","ptreve":"5","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426563,"modifiedTime":1667260032847,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"mFRytxLSwDrACr5f","name":"Fauchage","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>L’effet de Fauchage ne s’applique qu’aux humanoïdes. Il provoque chez la cible l’illusion qu’on vient de lui faucher les jambes, illusion si saisissante que le personnage chute, sans pouvoir se rattraper. L’effet de Fauchage n’a pas d’autre conséquence, mais la chute peut, elle, en avoir. En fonction du type d’activité, marche, course, escalade, et du sol de réception, c’est au gardien des rêves d’en déterminer le jet d’encaissement. La victime peut normalement se relever le round suivant. Noter qu’un Fauchage sur un humanoïde couché ou assis n’a virtuellement aucun effet.</p>","draconic":"hypnos","duree":"Instantanée","JR":"Selon HN","cible":"Humanoïde","difficulte":"-6","portée":"","caseTMR":"plaines","caseTMRspeciale":"","ptreve":"5"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"nNh8N9nF8m6zLtrt","name":"Narine d'Hypnos","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.nNh8N9nF8m6zLtrt"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>Narine d’Hypnos est une illusion purement <em>olfactive</em>. Son fonctionnement est identique à @Item[QdtcV9WVi9BdL153]{Tympan d'Hypnos}, 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 et les animaux, à moins d’avoir une raison très précise de vouloir qu’un humanoïde ait la même odeur qu’un autre type d’humanoïde, ou un animal la même odeur qu’un autre type d’animal, ce sort est surtout utilisé sur les objets, notamment les aliments, où il peut se combiner avec Langue d’Hypnos. Ici aussi, l’intensité de l’odeur est celle de la cible. Donner illusoirement une odeur de poisson frais à un poisson avarié, donne un poisson qui émet une odeur particulièrement forte de poisson frais. Donner à un fromage pourri un parfum de rose peut embaumer durablement une pièce (une rose <em>cueillie </em>est un objet).</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde, animal, végétal, objet","difficulte":"-4","portée":"","caseTMR":"plaines","caseTMRspeciale":"","ptreve":"3","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426563,"modifiedTime":1667260032850,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"nNh8N9nF8m6zLtrt","name":"Narine d'Hypnos","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>Narine d’Hypnos est une illusion purement <em>olfactive</em>. Son fonctionnement est identique à @Item[QdtcV9WVi9BdL153]{Tympan d'Hypnos}, 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 et les animaux, à moins d’avoir une raison très précise de vouloir qu’un humanoïde ait la même odeur qu’un autre type d’humanoïde, ou un animal la même odeur qu’un autre type d’animal, ce sort est surtout utilisé sur les objets, notamment les aliments, où il peut se combiner avec Langue d’Hypnos. Ici aussi, l’intensité de l’odeur est celle de la cible. Donner illusoirement une odeur de poisson frais à un poisson avarié, donne un poisson qui émet une odeur particulièrement forte de poisson frais. Donner à un fromage pourri un parfum de rose peut embaumer durablement une pièce (une rose <em>cueillie </em>est un objet).</p>","draconic":"hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde, animal, végétal, objet","difficulte":"-4","portée":"","caseTMR":"plaines","caseTMRspeciale":"","ptreve":"3"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"o99y8VPp7x2mGbaU","name":"Nudité d'Hypnos","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.o99y8VPp7x2mGbaU"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>Comme @Item[viSBXe0CnbRI1O2J]{Robe d'Hypnos}, cette illusion visuelle 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 semble nue.</p>\n<p>Le sort n’est pas sélectif : on ne peut faire disparaître une partie de l’équipement, c’est toujours l’intégralité. Pour un effet sélectif, utiliser le sort standard d’Invisibilité.</p>\n<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 de la cible. Toucher ce corps nu entraîne évidemment un @JournalEntry[9bvrfDaudPqvQZPY]{Conflit de sens} et une brume limbaire.</p>\n<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 être plus nu que nu.) L’illusion est toutefois définitivement annulée sur ce vêtement, y compris s’il est remis. La nudité devient alors \"partielle\". Même chose pour les pièces d’équipement, armes, etc. Même chose encore pour un vêtement supplémentaire, ne faisant pas partie au départ de l’illusion, dont se vêtirait la cible.</p>\n<p>Noter qu’une arme ainsi rendue invisible touchant un adversaire se contente de générer, et pour lui seul, une brume limbaire ; elle redevient invisible dès que cesse le conflit de sens. L’invisibilité n’est perdue, et définitivement, que si l’arme est lâchée par la cible. Même chose pour toute autre pièce d’équipement.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde","difficulte":"-8","portée":"","caseTMR":"lac","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426563,"modifiedTime":1667260032850,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"o99y8VPp7x2mGbaU","name":"Nudité d'Hypnos","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>Comme @Item[viSBXe0CnbRI1O2J]{Robe d'Hypnos}, cette illusion visuelle 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 semble nue.</p>\n<p>Le sort n’est pas sélectif : on ne peut faire disparaître une partie de l’équipement, c’est toujours l’intégralité. Pour un effet sélectif, utiliser le sort standard d’Invisibilité.</p>\n<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 de la cible. Toucher ce corps nu entraîne évidemment un @JournalEntry[9bvrfDaudPqvQZPY]{Conflit de sens} et une brume limbaire.</p>\n<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 être plus nu que nu.) L’illusion est toutefois définitivement annulée sur ce vêtement, y compris s’il est remis. La nudité devient alors \"partielle\". Même chose pour les pièces d’équipement, armes, etc. Même chose encore pour un vêtement supplémentaire, ne faisant pas partie au départ de l’illusion, dont se vêtirait la cible.</p>\n<p>Noter qu’une arme ainsi rendue invisible touchant un adversaire se contente de générer, et pour lui seul, une brume limbaire ; elle redevient invisible dès que cesse le conflit de sens. L’invisibilité n’est perdue, et définitivement, que si l’arme est lâchée par la cible. Même chose pour toute autre pièce d’équipement.</p>","draconic":"hypnos","duree":"HN","JR":"Aucun","cible":"Humanoïde","difficulte":"-8","portée":"","caseTMR":"lac","caseTMRspeciale":"","ptreve":"4"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"pwLlEm5mtUMIWFts","name":"Transparence des langues","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.pwLlEm5mtUMIWFts"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>Ce sort donne l’illusion que l’on comprend la langue parlée par un certain humanoïde. L’illusion est interprétée comme vraie, et le parler de l’humanoïde devient transparent et compréhensible.</p>\n<p>Lors de la montée en TMR, le sort doit être paramétré sur l’individu que l’on veut comprendre. Ce doit être une personne présente, ou à défaut, connue du haut-rêvant. Lors du lancer, le sort doit être ciblé sur l’auditeur (une tierce personne ou le haut-rêvant lui-même). Pour que l’auditeur puisse comprendre le parler de l’individu paramétré, il doit manquer un JR standard selon l’heure de naissance. Pour l’auditeur ciblé, la langue de l’individu paramétré demeure transparente jusqu’à la fin de l’heure en cours.</p>\n<p>Le sort ne fonctionne que dans un sens, permettant uniquement à l’auditeur ciblé de comprendre l’individu paramétré. Pour que ce dernier comprenne également la langue de l’auditeur, le sort doit être lancé une seconde fois en inversant les rôles.</p>\n<p>Noter que le sort ne fonctionne que par rapport à des individus et non pas par rapport à la langue elle-même. À l’issue du sort, aucun progrès n’aura pu être fait dans la langue étrangère, celle-ci s’étant effacée de la mémoire de l’auditeur.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Fin de l'heure en cours","JR":"Selon HN","cible":"Humanoïde","difficulte":"-8","portée":"","caseTMR":"pont","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426563,"modifiedTime":1667260032851,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"pwLlEm5mtUMIWFts","name":"Transparence des langues","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>Ce sort donne l’illusion que l’on comprend la langue parlée par un certain humanoïde. L’illusion est interprétée comme vraie, et le parler de l’humanoïde devient transparent et compréhensible.</p>\n<p>Lors de la montée en TMR, le sort doit être paramétré sur l’individu que l’on veut comprendre. Ce doit être une personne présente, ou à défaut, connue du haut-rêvant. Lors du lancer, le sort doit être ciblé sur l’auditeur (une tierce personne ou le haut-rêvant lui-même). Pour que l’auditeur puisse comprendre le parler de l’individu paramétré, il doit manquer un JR standard selon l’heure de naissance. Pour l’auditeur ciblé, la langue de l’individu paramétré demeure transparente jusqu’à la fin de l’heure en cours.</p>\n<p>Le sort ne fonctionne que dans un sens, permettant uniquement à l’auditeur ciblé de comprendre l’individu paramétré. Pour que ce dernier comprenne également la langue de l’auditeur, le sort doit être lancé une seconde fois en inversant les rôles.</p>\n<p>Noter que le sort ne fonctionne que par rapport à des individus et non pas par rapport à la langue elle-même. À l’issue du sort, aucun progrès n’aura pu être fait dans la langue étrangère, celle-ci s’étant effacée de la mémoire de l’auditeur.</p>","draconic":"hypnos","duree":"Fin de l'heure en cours","JR":"Selon HN","cible":"Humanoïde","difficulte":"-8","portée":"","caseTMR":"pont","caseTMRspeciale":"","ptreve":"4"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"q5neLDsVxmPUMFVs","name":"Invoquer sa présence","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.q5neLDsVxmPUMFVs"}},"system":{"description":"<p>Les rituels de lecture d’Hypnos sont d’étonnantes démonstrations d’auto-suggestion. Aidé par un support, le haut-rêvant se persuade qu’il peut voir ou entendre à distance, et il le fait. Couplé à l’ultime forme d’illusion que sont les invocations, il peut pareillement projeter son image ou sa voix à distance. Tous obéissent aux règles usuelles d’application des rituels. Si un rituel de lecture est paramétré sur une personne et que 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>\n<p>La perfection de ce rituel opère la synthèse de @Item[Ew5JzQ2lzcpGoF11]{Miroir d'Hypnos}, @Item[M99MFM5GalPJxIdW]{Harpe d'Hypnos}, @Item[phT9NLxLGFQp5CSI]{Invoquer sa voix} et@Item[vygR045EwEOsNqJl]{Invoquer son image}. Paramétrage et ciblage 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 formes y bougent et que l’état hypnotique commence, le haut-rêvant voit la personne ou le lieu choisi comme avec Miroir d’Hypnos, entend les sons audibles comme avec Harpe d’Hypnos, tandis que son hologramme se forme au même endroit comme avec Invoquer son Image et qu’il peut se faire entendre comme avec Invoquer sa Voix. Tout se passe alors comme s’il se trouvait réellement sur place, sauf qu’il n’est qu’une image sans substance. Il peut parler, entendre, dialoguer, tourner sur place à 360°, mais ne peut se déplacer ni entreprendre aucune action physique. La durée de la communication est de 1 round par point de rêve dépensé.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Selon r dépensé","JR":"Aucun","cible":"Un miroir","difficulte":"-9","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426564,"modifiedTime":1667260032848,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"q5neLDsVxmPUMFVs","name":"Invoquer sa présence","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","data":{"description":"<p>Les rituels de lecture d’Hypnos sont d’étonnantes démonstrations d’auto-suggestion. Aidé par un support, le haut-rêvant se persuade qu’il peut voir ou entendre à distance, et il le fait. Couplé à l’ultime forme d’illusion que sont les invocations, il peut pareillement projeter son image ou sa voix à distance. Tous obéissent aux règles usuelles d’application des rituels. Si un rituel de lecture est paramétré sur une personne et que 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>\n<p>La perfection de ce rituel opère la synthèse de @Item[Ew5JzQ2lzcpGoF11]{Miroir d'Hypnos}, @Item[M99MFM5GalPJxIdW]{Harpe d'Hypnos}, @Item[phT9NLxLGFQp5CSI]{Invoquer sa voix} et@Item[vygR045EwEOsNqJl]{Invoquer son image}. Paramétrage et ciblage 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 formes y bougent et que l’état hypnotique commence, le haut-rêvant voit la personne ou le lieu choisi comme avec Miroir d’Hypnos, entend les sons audibles comme avec Harpe d’Hypnos, tandis que son hologramme se forme au même endroit comme avec Invoquer son Image et qu’il peut se faire entendre comme avec Invoquer sa Voix. Tout se passe alors comme s’il se trouvait réellement sur place, sauf qu’il n’est qu’une image sans substance. Il peut parler, entendre, dialoguer, tourner sur place à 360°, mais ne peut se déplacer ni entreprendre aucune action physique. La durée de la communication est de 1 round par point de rêve dépensé.</p>","descriptionmj":"","draconic":"hypnos","duree":"Selon r dépensé","JR":"Aucun","cible":"Un miroir","difficulte":"-9","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jOzRscDxoXZWpGS6":3},"flags":{}}
|
||||||
{"_id":"qqcLydulFkL25Ipc","name":"Conjurer l'oubli","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.qqcLydulFkL25Ipc"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>Ce rituel permet de faire renaître chez la cible un souvenir oublié, la cause de l’oubli pouvant être magique ou naturelle. Le souvenir oublié peut appartenir à une précédente incarnation si le gardien des rêves l’estime possible ou pertinent. Dans tous les cas, le souvenir ne peut revenir que sous la forme d’une <em>réponse </em>à une <em>question </em>précise. Et l’accomplissement du rituel ne permet qu’une seule question-réponse.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Une question","JR":"Aucun","cible":"Humanoïde","difficulte":"-4","portée":"","caseTMR":"lac","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426564,"modifiedTime":1667260032846,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"qqcLydulFkL25Ipc","name":"Conjurer l'oubli","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>Ce rituel permet de faire renaître chez la cible un souvenir oublié, la cause de l’oubli pouvant être magique ou naturelle. Le souvenir oublié peut appartenir à une précédente incarnation si le gardien des rêves l’estime possible ou pertinent. Dans tous les cas, le souvenir ne peut revenir que sous la forme d’une <em>réponse </em>à une <em>question </em>précise. Et l’accomplissement du rituel ne permet qu’une seule question-réponse.</p>","draconic":"hypnos","duree":"Une question","JR":"Aucun","cible":"Humanoïde","difficulte":"-4","portée":"","caseTMR":"lac","caseTMRspeciale":"","ptreve":"4","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"rrSE9c7KKsqcKueo","name":"Nonechalepasse","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.rrSE9c7KKsqcKueo"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de créatures}</p>\n<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é 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 il doit veiller, et le Nonechalepasse ne laissera personne d’autre que l’invocateur franchir la limite indiquée, c’est-à-dire pas même ses compagnons. La garde peut avoir lieu en la présence du haut-rêvant, ou en son absence s’il désire vaquer à d’autres affaires, et dure jusqu’à la fin de son heure de naissance. Dès qu’une créature est en voie d’enfreindre la consigne donnée, le Nonechalepasse l’en prévient en clamant son propre nom à plusieurs reprises ; et si la créature insiste, il la combat jusqu’à ce qu’il l’extermine ou qu’elle recule et s’enfuie. Les Nonechalepasses ont tous les mêmes caractéristiques que les Guerriers Sordes et sont comme eux affectés par les sorts.</p>\n<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures invoquées}</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Tâche","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"special","caseTMRspeciale":"Cité Jalouse M1","ptreve":"7","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426564,"modifiedTime":1667260032850,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"rrSE9c7KKsqcKueo","name":"Nonechalepasse","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>@JournalEntry[vid6uJc66QFgHSUr]{Note sur les invocations de créatures}</p>\n<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é 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 il doit veiller, et le Nonechalepasse ne laissera personne d’autre que l’invocateur franchir la limite indiquée, c’est-à-dire pas même ses compagnons. La garde peut avoir lieu en la présence du haut-rêvant, ou en son absence s’il désire vaquer à d’autres affaires, et dure jusqu’à la fin de son heure de naissance. Dès qu’une créature est en voie d’enfreindre la consigne donnée, le Nonechalepasse l’en prévient en clamant son propre nom à plusieurs reprises ; et si la créature insiste, il la combat jusqu’à ce qu’il l’extermine ou qu’elle recule et s’enfuie. Les Nonechalepasses ont tous les mêmes caractéristiques que les Guerriers Sordes et sont comme eux affectés par les sorts.</p>\n<p>@JournalEntry[R3q4vUTEfyxYgmGr]{Communication avec les créatures invoquées}</p>","draconic":"hypnos","duree":"Tâche","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"special","caseTMRspeciale":"Cité Jalouse M1","ptreve":"7","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
{"_id":"sVA94h9Reimmfw5B","name":"Suggestion","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.sVA94h9Reimmfw5B"}},"system":{"description":"<p>L’effet de Suggestion ne s’applique qu’aux humanoïdes. Comme l’indique le titre, c’est la suggestion à l’état pur. Il permet de donner un ordre bref à la victime, et cette dernière ne pourra pas s’empêcher d’y obéir machinalement. Il est impératif que la victime puisse obéir à l’ordre de façon <em>immédiate</em>, dans la seconde qui suit l’ordre, et que l’action soit uniquement <em>physique</em>, ni mentale ni réfléchie. Si la Suggestion est telle qu’elle oblige la victime à une autre action préalable ou si l’action demandée ne peut être qu’une action réfléchie, pensée, la Suggestion avorte automatiquement.</p>\n<p>Un passant a sa bourse accrochée à la ceinture. On lui donne l’ordre de suggestion : \"donne ta bourse !\" L’effet avorte automatiquement. En effet, le passant doit d’abord en dénouer les cordons, action préalable, et qui plus est réfléchie. Si le passant avait déjà sa bourse à la main, l’ordre : \"donne ta bourse !\" ou \"donne\"! tout court, pouvant être obéi de façon <em>immédiate</em>, aurait été accepté.</p>\n<p>Des ordres tels que \"réponds à la question \" ou \" dis la vérité\" sont pareillement inacceptables (actions mentales). Si la victime est au bord d’un gouffre, et qu’on lui suggère : \" saute dans le gouffre !\", elle saute. Si elle est à trois mètres du gouffre, la suggestion avorte. Il faut d’abord qu’elle y coure. Des ordres tels que : \"Fuis, saute, plonge, assieds-toi, agenouille-toi, lève les bras, ferme les yeux, hurle, donne (ce que la victime a déjà en main), mange ou bois (ce que la victime a déjà à portée de ses lèvres), lâche (ce qu’elle tient en main), etc.\" sont possibles. Des ordres tels que : \"endors-toi, suicide-toi, va faire ceci, déshabille-toi (actions multiples), écris ceci, avoue, lance tel sort, etc.\" sont impossibles.</p>\n<p>L’ordre donné dans la suggestion doit être unique, c’est-à-dire pratiquement ne comporter qu’un seul verbe. \"Cours et saute !\" est impossible. Quand l’action implique une durée, elle est obéie pendant un round. Si par exemple l’ordre donné est \"cours !\" ou \"fuis !\", la victime courra, fuira, pendant un round. À ce moment, toutefois, l’ordre pourra être donné une seconde fois, et la victime obéira pour la durée d’un nouveau round.</p>\n<p>L’ordre contenu dans la suggestion doit être paramétré lors du lancer. Mais le ciblage de la victime ne le déclenche pas aussitôt. La victime étant maintenant sous l’effet du sort, il faut que l’ordre soit donné réellement, <em>verbalement</em>. La victime doit pouvoir l’entendre et le comprendre (parler la même langue). Peu importe qui donne l’ordre verbal, le haut-rêvant ou quelqu’un d’autre. Chaque 3r dépensés permet verbalement de réitérer l’ordre une fois. Si par exemple 9 points de rêve ont été dépensés, l’ordre \"cours !\" pourra être donné trois fois. Il n’y a aucune limite de temps entre le ciblage et le moment où le premier ordre est donné verbalement, ni non plus entre chaque ordre. Tant que le dernier ordre n’a pas été donné, la victime est sous l’influence du sort, influence qui peut être détectée et lue par Lecture d’Aura. Le libellé de l’ordre est également révélé dans la case spécifique par Lecture d’Aura, et le sort peut être annulé dans cette même case. Dès que le dernier ordre est donné, l’effet se dissipe totalement.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Spéciale","JR":"Selon HN","cible":"Humanoïde","difficulte":"-9","portée":"","caseTMR":"desert","caseTMRspeciale":"","ptreve":"3+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426564,"modifiedTime":1667260032851,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"sVA94h9Reimmfw5B","name":"Suggestion","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","data":{"description":"<p>L’effet de Suggestion ne s’applique qu’aux humanoïdes. Comme l’indique le titre, c’est la suggestion à l’état pur. Il permet de donner un ordre bref à la victime, et cette dernière ne pourra pas s’empêcher d’y obéir machinalement. Il est impératif que la victime puisse obéir à l’ordre de façon <em>immédiate</em>, dans la seconde qui suit l’ordre, et que l’action soit uniquement <em>physique</em>, ni mentale ni réfléchie. Si la Suggestion est telle qu’elle oblige la victime à une autre action préalable ou si l’action demandée ne peut être qu’une action réfléchie, pensée, la Suggestion avorte automatiquement.</p>\n<p>Un passant a sa bourse accrochée à la ceinture. On lui donne l’ordre de suggestion : \"donne ta bourse !\" L’effet avorte automatiquement. En effet, le passant doit d’abord en dénouer les cordons, action préalable, et qui plus est réfléchie. Si le passant avait déjà sa bourse à la main, l’ordre : \"donne ta bourse !\" ou \"donne\"! tout court, pouvant être obéi de façon <em>immédiate</em>, aurait été accepté.</p>\n<p>Des ordres tels que \"réponds à la question \" ou \" dis la vérité\" sont pareillement inacceptables (actions mentales). Si la victime est au bord d’un gouffre, et qu’on lui suggère : \" saute dans le gouffre !\", elle saute. Si elle est à trois mètres du gouffre, la suggestion avorte. Il faut d’abord qu’elle y coure. Des ordres tels que : \"Fuis, saute, plonge, assieds-toi, agenouille-toi, lève les bras, ferme les yeux, hurle, donne (ce que la victime a déjà en main), mange ou bois (ce que la victime a déjà à portée de ses lèvres), lâche (ce qu’elle tient en main), etc.\" sont possibles. Des ordres tels que : \"endors-toi, suicide-toi, va faire ceci, déshabille-toi (actions multiples), écris ceci, avoue, lance tel sort, etc.\" sont impossibles.</p>\n<p>L’ordre donné dans la suggestion doit être unique, c’est-à-dire pratiquement ne comporter qu’un seul verbe. \"Cours et saute !\" est impossible. Quand l’action implique une durée, elle est obéie pendant un round. Si par exemple l’ordre donné est \"cours !\" ou \"fuis !\", la victime courra, fuira, pendant un round. À ce moment, toutefois, l’ordre pourra être donné une seconde fois, et la victime obéira pour la durée d’un nouveau round.</p>\n<p>L’ordre contenu dans la suggestion doit être paramétré lors du lancer. Mais le ciblage de la victime ne le déclenche pas aussitôt. La victime étant maintenant sous l’effet du sort, il faut que l’ordre soit donné réellement, <em>verbalement</em>. La victime doit pouvoir l’entendre et le comprendre (parler la même langue). Peu importe qui donne l’ordre verbal, le haut-rêvant ou quelqu’un d’autre. Chaque 3r dépensés permet verbalement de réitérer l’ordre une fois. Si par exemple 9 points de rêve ont été dépensés, l’ordre \"cours !\" pourra être donné trois fois. Il n’y a aucune limite de temps entre le ciblage et le moment où le premier ordre est donné verbalement, ni non plus entre chaque ordre. Tant que le dernier ordre n’a pas été donné, la victime est sous l’influence du sort, influence qui peut être détectée et lue par Lecture d’Aura. Le libellé de l’ordre est également révélé dans la case spécifique par Lecture d’Aura, et le sort peut être annulé dans cette même case. Dès que le dernier ordre est donné, l’effet se dissipe totalement.</p>","descriptionmj":"","draconic":"hypnos","duree":"Spéciale","JR":"Selon HN","cible":"Humanoïde","difficulte":"-9","portée":"","caseTMR":"desert","caseTMRspeciale":"","ptreve":"3+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jOzRscDxoXZWpGS6":3},"flags":{}}
|
||||||
{"_id":"xOicgRMCUxJNmVzF","name":"Détection d'aura","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.xOicgRMCUxJNmVzF"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp","effects":[],"system":{"description":"<p>Les rituels de Détection d’Aura peuvent indifféremment être accomplis par n’importe laquelle des quatre voies.</p>\n<p>Toutes les créatures vivantes animées (humains, humanoïdes, animaux) ont une caractéristique RÊVE. Les objets enchantés possèdent des points de rêve, de même que les produits de magie naturelle, comme certaines pierres de chance. Les entités de cauchemar, incarnées ou non, en ont également. Quelle qu’elle soit, la présence de rêve émet une aura, laquelle est détectable par Détection d’Aura. Parallèlement, toute cible d’un sort ou d’un rituel, émet une aura propre, quand bien même ladite cible ne possède pas de points de rêve (centre de zone, objet ou plante soumis à une illusion d’Hypnos). Cette aura est également détectable par Détection d’Aura.</p>\n<p>L’aura de présence de rêve se traduit par un halo bleuté constant ; l’aura résultant d’un effet magique par un halo parcouru de pulsations. Quand les deux auras sont présentes conjointement, le halo est pulsatif et d’un bleu plus foncé. On peut toujours effectuer Détection d’Aura sans aucun risque, il y a toujours une réponse. Soit une aura est perçue, constante ou pulsative, et l’on peut tenter une Lecture d’Aura pour en savoir plus ; soit aucune aura n’est perçue et il s’agit de matière inerte, sans rêve, non soumise à un sort.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-3","portée":"","caseTMR":"sanctuaire","caseTMRspeciale":"","ptreve":"1","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"Q2G6GTdrotKzYGUC":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426564,"modifiedTime":1667260032847,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"xOicgRMCUxJNmVzF","name":"Détection d'aura","permission":{"default":0,"Q2G6GTdrotKzYGUC":3},"type":"sort","data":{"description":"<p>Les rituels de Détection d’Aura peuvent indifféremment être accomplis par n’importe laquelle des quatre voies.</p>\n<p>Toutes les créatures vivantes animées (humains, humanoïdes, animaux) ont une caractéristique RÊVE. Les objets enchantés possèdent des points de rêve, de même que les produits de magie naturelle, comme certaines pierres de chance. Les entités de cauchemar, incarnées ou non, en ont également. Quelle qu’elle soit, la présence de rêve émet une aura, laquelle est détectable par Détection d’Aura. Parallèlement, toute cible d’un sort ou d’un rituel, émet une aura propre, quand bien même ladite cible ne possède pas de points de rêve (centre de zone, objet ou plante soumis à une illusion d’Hypnos). Cette aura est également détectable par Détection d’Aura.</p>\n<p>L’aura de présence de rêve se traduit par un halo bleuté constant ; l’aura résultant d’un effet magique par un halo parcouru de pulsations. Quand les deux auras sont présentes conjointement, le halo est pulsatif et d’un bleu plus foncé. On peut toujours effectuer Détection d’Aura sans aucun risque, il y a toujours une réponse. Soit une aura est perçue, constante ou pulsative, et l’on peut tenter une Lecture d’Aura pour en savoir plus ; soit aucune aura n’est perçue et il s’agit de matière inerte, sans rêve, non soumise à un sort.</p>","draconic":"oniros","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-3","portée":"","caseTMR":"sanctuaire","caseTMRspeciale":"","ptreve":"1","xp":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp","effects":[]}
|
||||||
{"_id":"yNMa8DlBaZyTGFSr","name":"Oubli","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.yNMa8DlBaZyTGFSr"}},"system":{"description":"<p>L’effet d’Oubli ne s’applique qu’aux humanoïdes. C’est une des plus puissantes suggestions hypnotiques. L’effet d’amnésie ne survient pas aussitôt le sort ciblé, mais intervient à la fin de l’heure en cours. À ce moment la victime perd tout souvenir de ce qu’elle a vécu, de ce qu’elle a pu dire ou faire, entre le moment présent et celui où le sort a été ciblé. Pratiquement, cette période est comme un grand trou noir dans sa tête, et aucun moyen normal ne peut lui restituer ses souvenirs. Chaque point de rêve dépensé en plus des 6 de base augmente la durée d’une heure. Soit un haut-rêvant lançant ce sort au cours de l’heure du Dragon et dépensant 8 points : à la fin de l’heure de la Lyre, la victime se retrouve brusquement amnésique de ce qu’elle a pu faire depuis la mi-Dragon jusqu’à maintenant, sans comprendre comment elle est arrivée dans le lieu où elle se trouve actuellement, comme si elle venait de se réveiller d’une période de sommeil noir, encore plus opaque que le gris rêve. Une Lecture d’Aura révèle la présence d’un sort d’Oubli en train d’œuvrer, et Annulation de Magie peut l’annuler selon les règles normales. À défaut, le rituel de Conjurer l’Oubli peut être utilisé, mais ne restitue les souvenirs que sélectivement, en réponse à une question précise. Quand c’est un personnage de joueur qui lance ce sort sur un PNJ, sa mise en œuvre est sans problème. L’inverse est plus délicat. Le mieux est alors de faire sortir de la salle le joueur du personnage victime, et de le faire rentrer au moment où l’amnésie opère. De cette façon, il ne se souvient effectivement de rien. Entre temps, si besoin est par rapport aux autres joueurs, jouer ce personnage comme un PNJ.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Selo n r dépensé","JR":"Selon HN","cible":"Humanoïde","difficulte":"-8","portée":"","caseTMR":"fleuve","caseTMRspeciale":"","ptreve":"6+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426564,"modifiedTime":1667260032850,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"yNMa8DlBaZyTGFSr","name":"Oubli","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","data":{"description":"<p>L’effet d’Oubli ne s’applique qu’aux humanoïdes. C’est une des plus puissantes suggestions hypnotiques. L’effet d’amnésie ne survient pas aussitôt le sort ciblé, mais intervient à la fin de l’heure en cours. À ce moment la victime perd tout souvenir de ce qu’elle a vécu, de ce qu’elle a pu dire ou faire, entre le moment présent et celui où le sort a été ciblé. Pratiquement, cette période est comme un grand trou noir dans sa tête, et aucun moyen normal ne peut lui restituer ses souvenirs. Chaque point de rêve dépensé en plus des 6 de base augmente la durée d’une heure. Soit un haut-rêvant lançant ce sort au cours de l’heure du Dragon et dépensant 8 points : à la fin de l’heure de la Lyre, la victime se retrouve brusquement amnésique de ce qu’elle a pu faire depuis la mi-Dragon jusqu’à maintenant, sans comprendre comment elle est arrivée dans le lieu où elle se trouve actuellement, comme si elle venait de se réveiller d’une période de sommeil noir, encore plus opaque que le gris rêve. Une Lecture d’Aura révèle la présence d’un sort d’Oubli en train d’œuvrer, et Annulation de Magie peut l’annuler selon les règles normales. À défaut, le rituel de Conjurer l’Oubli peut être utilisé, mais ne restitue les souvenirs que sélectivement, en réponse à une question précise. Quand c’est un personnage de joueur qui lance ce sort sur un PNJ, sa mise en œuvre est sans problème. L’inverse est plus délicat. Le mieux est alors de faire sortir de la salle le joueur du personnage victime, et de le faire rentrer au moment où l’amnésie opère. De cette façon, il ne se souvient effectivement de rien. Entre temps, si besoin est par rapport aux autres joueurs, jouer ce personnage comme un PNJ.</p>","descriptionmj":"","draconic":"hypnos","duree":"Selo n r dépensé","JR":"Selon HN","cible":"Humanoïde","difficulte":"-8","portée":"","caseTMR":"fleuve","caseTMRspeciale":"","ptreve":"6+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jOzRscDxoXZWpGS6":3},"flags":{}}
|
||||||
{"_id":"yhw8f7HKrmfzAxmj","name":"Sérénité","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.yhw8f7HKrmfzAxmj"}},"system":{"description":"<p>L’effet de sérénité ne s’applique qu’aux humanoïdes. La suggestion d’une intense satisfaction est source d’une sérénité réelle. Pour chaque 3r dépensés, le personnage visé regagne 1 point de moral jusqu’à concurrence de zéro. Neuf points de rêve permettent ainsi de remonter un moral de -3 à zéro. Si trop de points sont dépensés, l’excédent est perdu, le moral ne pouvant dépasser zéro par l’influence de ce sort.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Instantanée","JR":"Selon HN","cible":"Humanoïde","difficulte":"-3","portée":"","caseTMR":"collines","caseTMRspeciale":"","ptreve":"3+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426564,"modifiedTime":1667260032851,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"yhw8f7HKrmfzAxmj","name":"Sérénité","type":"sort","img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","data":{"description":"<p>L’effet de sérénité ne s’applique qu’aux humanoïdes. La suggestion d’une intense satisfaction est source d’une sérénité réelle. Pour chaque 3r dépensés, le personnage visé regagne 1 point de moral jusqu’à concurrence de zéro. Neuf points de rêve permettent ainsi de remonter un moral de -3 à zéro. Si trop de points sont dépensés, l’excédent est perdu, le moral ne pouvant dépasser zéro par l’influence de ce sort.</p>","descriptionmj":"","draconic":"hypnos","duree":"Instantanée","JR":"Selon HN","cible":"Humanoïde","difficulte":"-3","portée":"","caseTMR":"collines","caseTMRspeciale":"","ptreve":"3+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jOzRscDxoXZWpGS6":3},"flags":{}}
|
||||||
{"_id":"ze53LdwhuqUFMvqw","name":"Fou-rire","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-hypnos.ze53LdwhuqUFMvqw"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[],"system":{"description":"<p>L’effet de Fou-Rire ne s’applique qu’aux humanoïdes. La suggestion d’une idée drolatique plonge la cible dans un irrépressible fou-rire, automatique le premier round. Puis pour les rounds suivants, la cible doit réussir un jet de VOLONTÉ/ <em>moins </em>moral à -5, ou continuer à rire. Tant que la cible rit, elle est considérée en <em>demi-surprise</em>.</p>","descriptionmj":"","draconic":"Voie d'Hypnos","duree":"Instantanée","JR":"Selon HN","cible":"Humanoïde","difficulte":"-5","portée":"","caseTMR":"cite","caseTMRspeciale":"","ptreve":"5","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"ownership":{"default":0,"jOzRscDxoXZWpGS6":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259426564,"modifiedTime":1667260032847,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"ze53LdwhuqUFMvqw","name":"Fou-rire","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"sort","data":{"description":"<p>L’effet de Fou-Rire ne s’applique qu’aux humanoïdes. La suggestion d’une idée drolatique plonge la cible dans un irrépressible fou-rire, automatique le premier round. Puis pour les rounds suivants, la cible doit réussir un jet de VOLONTÉ/ <em>moins </em>moral à -5, ou continuer à rire. Tant que la cible rit, elle est considérée en <em>demi-surprise</em>.</p>","draconic":"hypnos","duree":"Instantanée","JR":"Selon HN","cible":"Humanoïde","difficulte":"-5","portée":"","caseTMR":"cite","caseTMRspeciale":"","ptreve":"5"},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_hypnos.webp","effects":[]}
|
||||||
|
@ -1,26 +1,26 @@
|
|||||||
{"_id":"0N6ILL5RMgmShyM8","name":"Dague de Force","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.0N6ILL5RMgmShyM8"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Même principe que la @Item[r9onPANmiK5E5Jnw]{Flèche de Feu}. Une dague ainsi modifiée a un +dom de +4.</p>\n<p>La dague de force a une résistance absolue tant que dure l’effet du sort et ne peut être brisée. Les dommages éventuellement reçus sont néanmoins comptabilisés et appliqués au double à l’expiration du sort. Par ailleurs, si la dague modifiée a touché ou été touchée (qu’elle ait blessé, paré, ou été parée), elle perd automatiquement 1 point de résistance à expiration du sort.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"HN","JR":"Il n’y a aucun JR pour les objets ordinaires. Les objets magiques (enchantés) résistent automatiquement, le sort se dissipant sans effet, les points de rêve étant néanmoins dépensés","cible":"Une dague","difficulte":"-5","portée":"","caseTMR":"monts","caseTMRspeciale":"","ptreve":"3","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"Q2G6GTdrotKzYGUC":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638598,"modifiedTime":1667260043441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"0N6ILL5RMgmShyM8","name":"Dague de Force","permission":{"default":0,"Q2G6GTdrotKzYGUC":3},"type":"sort","data":{"description":"<p>Même principe que la @Item[r9onPANmiK5E5Jnw]{Flèche de Feu}. Une dague ainsi modifiée a un +dom de +4.</p>\n<p>La dague de force a une résistance absolue tant que dure l’effet du sort et ne peut être brisée. Les dommages éventuellement reçus sont néanmoins comptabilisés et appliqués au double à l’expiration du sort. Par ailleurs, si la dague modifiée a touché ou été touchée (qu’elle ait blessé, paré, ou été parée), elle perd automatiquement 1 point de résistance à expiration du sort.</p>","draconic":"narcos","duree":"HN","JR":"Il n’y a aucun JR pour les objets ordinaires. Les objets magiques (enchantés) résistent automatiquement, le sort se dissipant sans effet, les points de rêve étant néanmoins dépensés","cible":"Une dague","difficulte":"-5","portée":"","caseTMR":"monts","caseTMRspeciale":"","ptreve":"3","xp":0,"portee":"","isrituel":false,"bonuscase":"","coutseuil":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"1KMBCeC1qPZTfxle","name":"Gourdin-Dragon","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.1KMBCeC1qPZTfxle"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Il s’agit d’une transformation radicale. Sous l’effet du sort, le gourdin devient une véritable épée dragonne, d’une résistance normale (12), d’un +dom de +3 et d’un encombrement standard de 2. Utilisée ou non, l’arme devient un tas de copeaux déchiquetés à l’expiration du sort.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"HN","JR":"Il n’y a aucun JR pour les objets ordinaires. Les objets magiques (enchantés) résistent automatiquement, le sort se dissipant sans effet, les points de rêve étant néanmoins dépensés","cible":"Un gourdin, morceau de bois, branche ou autre, de la taille et du diamètre approximatifs d’une épée dragonne","difficulte":"-7","portée":"","caseTMR":"foret","caseTMRspeciale":"","ptreve":"7","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"Q2G6GTdrotKzYGUC":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638598,"modifiedTime":1667260043442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"1KMBCeC1qPZTfxle","name":"Gourdin-Dragon","permission":{"default":0,"Q2G6GTdrotKzYGUC":3},"type":"sort","data":{"description":"<p>Il s’agit d’une transformation radicale. Sous l’effet du sort, le gourdin devient une véritable épée dragonne, d’une résistance normale (12), d’un +dom de +3 et d’un encombrement standard de 2. Utilisée ou non, l’arme devient un tas de copeaux déchiquetés à l’expiration du sort.</p>","draconic":"narcos","duree":"HN","JR":"Il n’y a aucun JR pour les objets ordinaires. Les objets magiques (enchantés) résistent automatiquement, le sort se dissipant sans effet, les points de rêve étant néanmoins dépensés","cible":"Un gourdin, morceau de bois, branche ou autre, de la taille et du diamètre approximatifs d’une épée dragonne","difficulte":"-7","portée":"","caseTMR":"foret","caseTMRspeciale":"","ptreve":"7","xp":0,"isrituel":false,"portee":"","bonuscase":"","coutseuil":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"4ShhmXKmsIbwoZcG","name":"Maîtrise","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.4ShhmXKmsIbwoZcG"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Ce rituel établit le lien qui unira l'objet à son utilisateur, permettant à ce dernier d'en établir la maîtrise. Antinomique du rituel d'Autonomie, réservé à de très spécifiques Grandes Écailles de Narcos, le rituel de Maîtrise est obligatoire pour toutes les écailles courantes : efficacité, activité, protection.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-7","portée":"","caseTMR":"fleuve","caseTMRspeciale":"","ptreve":"7","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638598,"modifiedTime":1667260043443,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"4ShhmXKmsIbwoZcG","name":"Maîtrise","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Ce rituel établit le lien qui unira l'objet à son utilisateur, permettant à ce dernier d'en établir la maîtrise. Antinomique du rituel d'Autonomie, réservé à de très spécifiques Grandes Écailles de Narcos, le rituel de Maîtrise est obligatoire pour toutes les écailles courantes : efficacité, activité, protection.</p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-7","portée":"","caseTMR":"fleuve","caseTMRspeciale":"","ptreve":"7","portee":"","isrituel":true,"xp":0,"bonuscase":"","coutseuil":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"5NZnTt0mvfPorSHG","name":"Écailles de Protection contre le venin *","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.5NZnTt0mvfPorSHG"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Chaque écaille de protection confère un bons de +1 au jet de CONSTITUTION contre toutes les sortes de venin et de poison, augmentant ainsi les chances de leur résister.</p>\n<p>Une amulette peut avoir n'importe quelle forme, mais ne fonctionne que si elle est en contact avec la peau nue de son possesseur. Si c'est le cas, elle fonctionne spontanément en face du danger pour lequel elle est conçue, même si le possesseur n'a aucune idée de son pouvoir. Pour fonctionner, l'amulette a besoin de points de rêve actifs. Ces points doivent être des points de rêve conférés par le rituel d'Enchantement en plus des points inertes. Autrement dit, voulant fabriquer une amulette, le haut-rêvant ne s'arrête pas d'enchanter quand il atteint un nombre de points de rêve égal à l'inertie totale de l'objet, mais continue à en rajouter. Le nombre maximum de points actifs qu'une amulette puisse posséder est égal à 7 fois l'enchantabilité de sa gemme ; et, comme pour les écailles d'efficacité, le nombre d'écailles de protection qu'elle puisse posséder est égal à l'enchantabilité de celle-ci avec un maximum de 7. Des amulettes plus puissantes ne pourraient être obtenues que par de spécifiques Grandes Écailles de Narcos.</p>\n<p><em>Soit une gemme de taille 6 et de pureté 5, ayant donc une inertie de 2 et une enchantabilité de 4. Elle peut posséder jusqu'à 4 écailles de protection (=enchantabilité) et un maximum de 28 points de rêve actifs (7 x 4 = 28).</em></p>\n<p>Chaque fois qu'une amulette de protection fonctionne, elle dépense un de ses points de rêve actifs quel que soit le nombre d'écailles. Le possesseur, lui, n'en dépense qu'un par heure, quel que soit le nombre de fonctionnements de l'amulette au cours de cette heure. Quand une amulette n'a plus de points actifs, elle cesse de fonctionner. On ne peut lui en redonner que par le rituel de Restauration. Les écailles de protection peuvent être posées progressivement, comme celles d'efficacité, même si l'amulette fonctionne entre temps. Mêmes règles d'application. Une gemme donnée ne peut recevoir que des écailles de protection d'un même type, mais grâce à Individualité, plusieurs gemmes d'une même amulette peuvent offrir des protections différentes. La pose de chaque écaille de protection coûte un point de seuil.</p>\n<p> </p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-6","portée":"","caseTMR":"foret","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":true,"coutseuil":1,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638598,"modifiedTime":1667260043441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"5NZnTt0mvfPorSHG","name":"Écailles de Protection contre le venin *","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Chaque écaille de protection confère un bons de +1 au jet de CONSTITUTION contre toutes les sortes de venin et de poison, augmentant ainsi les chances de leur résister.</p>\n<p>Une amulette peut avoir n'importe quelle forme, mais ne fonctionne que si elle est en contact avec la peau nue de son possesseur. Si c'est le cas, elle fonctionne spontanément en face du danger pour lequel elle est conçue, même si le possesseur n'a aucune idée de son pouvoir. Pour fonctionner, l'amulette a besoin de points de rêve actifs. Ces points doivent être des points de rêve conférés par le rituel d'Enchantement en plus des points inertes. Autrement dit, voulant fabriquer une amulette, le haut-rêvant ne s'arrête pas d'enchanter quand il atteint un nombre de points de rêve égal à l'inertie totale de l'objet, mais continue à en rajouter. Le nombre maximum de points actifs qu'une amulette puisse posséder est égal à 7 fois l'enchantabilité de sa gemme ; et, comme pour les écailles d'efficacité, le nombre d'écailles de protection qu'elle puisse posséder est égal à l'enchantabilité de celle-ci avec un maximum de 7. Des amulettes plus puissantes ne pourraient être obtenues que par de spécifiques Grandes Écailles de Narcos.</p>\n<p><em>Soit une gemme de taille 6 et de pureté 5, ayant donc une inertie de 2 et une enchantabilité de 4. Elle peut posséder jusqu'à 4 écailles de protection (=enchantabilité) et un maximum de 28 points de rêve actifs (7 x 4 = 28).</em></p>\n<p>Chaque fois qu'une amulette de protection fonctionne, elle dépense un de ses points de rêve actifs quel que soit le nombre d'écailles. Le possesseur, lui, n'en dépense qu'un par heure, quel que soit le nombre de fonctionnements de l'amulette au cours de cette heure. Quand une amulette n'a plus de points actifs, elle cesse de fonctionner. On ne peut lui en redonner que par le rituel de Restauration. Les écailles de protection peuvent être posées progressivement, comme celles d'efficacité, même si l'amulette fonctionne entre temps. Mêmes règles d'application. Une gemme donnée ne peut recevoir que des écailles de protection d'un même type, mais grâce à Individualité, plusieurs gemmes d'une même amulette peuvent offrir des protections différentes. La pose de chaque écaille de protection coûte un point de seuil.</p>\n<p> </p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-6","portée":"","caseTMR":"foret","caseTMRspeciale":"","ptreve":"4","portee":"","isrituel":true,"coutseuil":1,"xp":0,"bonuscase":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"74XSU8DqNBXGFn3R","name":"Dragonne Lame","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.74XSU8DqNBXGFn3R"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Même principe que la@Item[r9onPANmiK5E5Jnw]{Flèche de Feu} et la @Item[8BJ9kn3AWLFDwvez]{Dague de Force}, y compris la détérioration automatique de 1 point de résistance. Une épée dragonne ainsi modifiée a un +dom de +6.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"HN","JR":"Il n’y a aucun JR pour les objets ordinaires. Les objets magiques (enchantés) résistent automatiquement, le sort se dissipant sans effet, les points de rêve étant néanmoins dépensés","cible":"Une épée Dragonne (exclusivement)","difficulte":"6","portée":"","caseTMR":"desolation","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"Q2G6GTdrotKzYGUC":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638598,"modifiedTime":1667260043441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"74XSU8DqNBXGFn3R","name":"Dragonne Lame","permission":{"default":0,"Q2G6GTdrotKzYGUC":3},"type":"sort","data":{"description":"<p>Même principe que la@Item[r9onPANmiK5E5Jnw]{Flèche de Feu} et la @Item[8BJ9kn3AWLFDwvez]{Dague de Force}, y compris la détérioration automatique de 1 point de résistance. Une épée dragonne ainsi modifiée a un +dom de +6.</p>","draconic":"narcos","duree":"HN","JR":"Il n’y a aucun JR pour les objets ordinaires. Les objets magiques (enchantés) résistent automatiquement, le sort se dissipant sans effet, les points de rêve étant néanmoins dépensés","cible":"Une épée Dragonne (exclusivement)","difficulte":"6","portée":"","caseTMR":"desolation","caseTMRspeciale":"","ptreve":"4","xp":0,"isrituel":false,"portee":"","bonuscase":"","coutseuil":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"AIBLH8EduhfUQscn","name":"Écaille d'Efficacité *","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.AIBLH8EduhfUQscn"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Les écailles d'efficacité servent à rendre un objet plus efficace, mais uniquement dans sa fonction normale. Une arme magiquement efficace permettra de toucher plus facilement un adversaire ; un bouclier de mieux parer ; un instrument de musique de jouer mieux à moindre effort ; mais un balai magique permettre de mieux balayer et non de voler. Les écailles d'efficacité n'ont de pertinence que sur les objets pouvant être utilisés activement, armes, instruments, outils. Les objets passifs, meubles, contenants, vêtements, armures, ne peuvent pas être rendus plus efficaces.</p>\n<p>En terme de jeu, chaque écaille d'efficacité possédée par l'objet confère un bonus de +1 sur la table de Résolution lors de son utilisation. S'il s'agit d'une arme, chaque écaille d'efficacité augmente également de 1 le facteur d'initiative, ainsi que le +dom de l'arme, mais jusqu'au maximum du double normal de ce dernier. Soit une épée dragonne (+dom +3) possédant 5 écailles d'efficacité. Son utilisateur bénéficie d'un bonus de +5 à l'initiative, de +5 à l'attaque et à la parade, mais d'un +dom de +6 seulement (le double du +dom normal) et non pas de +8. Ne pas oublier néanmoins de rajouter le +dom personnel dû à la taille et à la force. Cette règle s'applique également aux armes de jet (dague, javelot, fouet). En ce qui concerne les armes de tir (arbalète, arc et fronde), l'efficacité ne s'applique qu'aux dommages (toujours pour un maximum du double du +dom normal) et non au toucher. Pour qu'un archer bénéficie d'un bonus d'efficacité au toucher <em>et</em> aux dommages, il doit avoir à la fois un arc magique et une flèche magique.</p>\n<p>Le nombre maximum d'écailles d'efficacité pouvant être posées sur un objet est égal à l'enchantabilité de sa gemme, mais avec un maximum de 7 quelle que soit cette dernière. Pour obtenir des armes magiques d'un bonus supérieur à +7, il faut avoir recours à une éventuelle Grande Écaille de Narcos spécifique.</p>\n<p>La pose de chaque écaille d'efficacité coûte un point de seuil. Mais il n'y a aucune limite de temps entre la pose de chacune, l'objet pouvant être utilisé dans l'intervalle. Par exemple, on peut se contenter provisoirement d'une épée +1 (une écaille), s'en servir plusieurs fois en combat, et plus tard, rajouter une se conde écaille pour obtenir une épée +2. Toutefois, si entretemps l'objet a été maîtrisé par quelqu'un d'autre, il faut effectuer une Lecture d'Aura complète avant de pouvoir reposer une écaille. Si cette précaution est négligée, on aboutit à un cas de <em>magie impossible</em>. L'utilisation d'un objet magiquement efficace coûte un point de rêve par heure quel que soit le nombre d'écailles.</p>\n<p>Si plusieurs gemmes sont alliées à un même objet grâce à Individualité et reçoivent toutes des écailles d'efficacité, leurs bonus <em>ne s'ajoutent pas</em>, on ne considère que le meilleur. Des gemmes différentes sont faites pour des pouvoirs entièrement différents.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"monts","caseTMRspeciale":"","ptreve":"7","xp":0,"bonuscase":"","isrituel":true,"coutseuil":1,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638598,"modifiedTime":1667260043441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"AIBLH8EduhfUQscn","name":"Écaille d'Efficacité *","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Les écailles d'efficacité servent à rendre un objet plus efficace, mais uniquement dans sa fonction normale. Une arme magiquement efficace permettra de toucher plus facilement un adversaire ; un bouclier de mieux parer ; un instrument de musique de jouer mieux à moindre effort ; mais un balai magique permettre de mieux balayer et non de voler. Les écailles d'efficacité n'ont de pertinence que sur les objets pouvant être utilisés activement, armes, instruments, outils. Les objets passifs, meubles, contenants, vêtements, armures, ne peuvent pas être rendus plus efficaces.</p>\n<p>En terme de jeu, chaque écaille d'efficacité possédée par l'objet confère un bonus de +1 sur la table de Résolution lors de son utilisation. S'il s'agit d'une arme, chaque écaille d'efficacité augmente également de 1 le facteur d'initiative, ainsi que le +dom de l'arme, mais jusqu'au maximum du double normal de ce dernier. Soit une épée dragonne (+dom +3) possédant 5 écailles d'efficacité. Son utilisateur bénéficie d'un bonus de +5 à l'initiative, de +5 à l'attaque et à la parade, mais d'un +dom de +6 seulement (le double du +dom normal) et non pas de +8. Ne pas oublier néanmoins de rajouter le +dom personnel dû à la taille et à la force. Cette règle s'applique également aux armes de jet (dague, javelot, fouet). En ce qui concerne les armes de tir (arbalète, arc et fronde), l'efficacité ne s'applique qu'aux dommages (toujours pour un maximum du double du +dom normal) et non au toucher. Pour qu'un archer bénéficie d'un bonus d'efficacité au toucher <em>et</em> aux dommages, il doit avoir à la fois un arc magique et une flèche magique.</p>\n<p>Le nombre maximum d'écailles d'efficacité pouvant être posées sur un objet est égal à l'enchantabilité de sa gemme, mais avec un maximum de 7 quelle que soit cette dernière. Pour obtenir des armes magiques d'un bonus supérieur à +7, il faut avoir recours à une éventuelle Grande Écaille de Narcos spécifique.</p>\n<p>La pose de chaque écaille d'efficacité coûte un point de seuil. Mais il n'y a aucune limite de temps entre la pose de chacune, l'objet pouvant être utilisé dans l'intervalle. Par exemple, on peut se contenter provisoirement d'une épée +1 (une écaille), s'en servir plusieurs fois en combat, et plus tard, rajouter une se conde écaille pour obtenir une épée +2. Toutefois, si entretemps l'objet a été maîtrisé par quelqu'un d'autre, il faut effectuer une Lecture d'Aura complète avant de pouvoir reposer une écaille. Si cette précaution est négligée, on aboutit à un cas de <em>magie impossible</em>. L'utilisation d'un objet magiquement efficace coûte un point de rêve par heure quel que soit le nombre d'écailles.</p>\n<p>Si plusieurs gemmes sont alliées à un même objet grâce à Individualité et reçoivent toutes des écailles d'efficacité, leurs bonus <em>ne s'ajoutent pas</em>, on ne considère que le meilleur. Des gemmes différentes sont faites pour des pouvoirs entièrement différents.</p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"monts","caseTMRspeciale":"","ptreve":"7","portee":"","isrituel":true,"coutseuil":1,"xp":0,"bonuscase":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"FpwaK1qJxKGs9HgS","name":"Permanence *","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.FpwaK1qJxKGs9HgS"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>C'est par ce rituel que le haut-rêvant stabilise les points de rêve d'une potion ou d'un objet, afin d'en prévenir l'évaporation quotidienne. Facultatif pour les potions, le rituel de Permanence est obligatoire pour tous les autres objets magiques. Son accomplissement diminue de 1 point le seuil de rêve du haut-rêvant.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"","cible":"","difficulte":"-5","portée":"","caseTMR":"sanctuaire","caseTMRspeciale":"","ptreve":"5","xp":0,"bonuscase":"","isrituel":true,"coutseuil":1,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638599,"modifiedTime":1667260043444,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"BibuJdKmaQJm3kFw","name":"Annulation de magie","permission":{"default":0,"Q2G6GTdrotKzYGUC":3},"type":"sort","data":{"description":"<p>Ce rituel permet d’annuler un effet magique, que celui-ci ait été accompli par soi-même ou par un autre haut-rêvant. On peut annuler l’effet d’un sort, de zone ou individuel, d’un rituel d’enchantement, d’une invocation, etc.</p>\n<p>Le haut-rêvant doit se trouver dans la case <em>spécifique </em>des TMR d’où la magie a été accomplie. Le jet de RÊVE qu’il doit réussir a alors la même difficulté que celui ayant permis la magie, avec une dépense de points de rêve pareillement identique.</p>\n<p>Pour annuler une invocation, le rituel d’Annulation doit être ciblé sur la créature invoquée. Quand la magie est le résultat conjoint de plusieurs rituels, ce qui est notamment le cas des objets magiques, chacun doit être annulé tour à tour, en commençant toujours par le dernier à avoir été accompli chronologiquement. D’une manière générale, ce sont les mêmes opérations qui doivent être répétées à l’envers. Quand un rituel coûte des points de seuil, son annulation en coûte également (le même nombre). Annulation de Magie sert également à exorciser les entités de cauchemar non incarnées. La difficulté d’un exorcisme est toujours R-7, et le coût en points de rêve égal au RÊVE de l’entité. Le ciblage doit être fait sur la créature possédée.</p>\n<p>Avant d’accomplir une Annulation de Magie, les paramètres de la magie à annuler (case des TMR, R-, r) peuvent être découverts au moyen du rituel Lecture d’Aura.</p>\n<p>Pour la synthèse d’Annulation de Magie, considérer que ce rituel est de difficulté R-7. Il peut être utilisé indifféremment par Oniros, Hypnos ou Narcos (mais jamais Thanatos), quelle que soit la voie ayant servi à accomplir la magie à annuler.</p>","draconic":"oniros","duree":"Instantanée","JR":"Aucun","cible":"Effet magique","difficulte":"variable","portée":"","caseTMR":"special","caseTMRspeciale":"variable","ptreve":"variable","xp":0,"isrituel":true,"bonuscase":"","coutseuil":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp","effects":[]}
|
||||||
{"_id":"KW2VZhuEGJGglGcW","name":"Restauration *","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.KW2VZhuEGJGglGcW"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Restauration est un rituel secondaire nullement obligatoire. Son seul usage est de redonner des points de rêve actifs à une amulette de protection. Il est en effet impossible d'utiliser le simple Enchantement une fois le rituel de Permanence accompli. Restauration fonctionne de façon semblable à un Enchantement, sauf que son accomplissement coûte chaque fois un point de seuil. On peut restaurer les points de rêve d'une amulette en plusieurs fois en intercalant un rituel de Purifcation entre chaque rituel de Restauration (qui coûte chaque fois un point de seuil). Il est possible de redonner plus de points de rêve actifs à l'objet qu'il n'en avait au départ, jusqu'à concurrence du maximum possible. Le nombre maximum de points de rêve actifs qu'un objet puisse posséder est égal à 7 fois l'enchantabilité de sa gemme.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-6","portée":"","caseTMR":"cite","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":1,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638599,"modifiedTime":1667260043444,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"FpwaK1qJxKGs9HgS","name":"Permanence *","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>C'est par ce rituel que le haut-rêvant stabilise les points de rêve d'une potion ou d'un objet, afin d'en prévenir l'évaporation quotidienne. Facultatif pour les potions, le rituel de Permanence est obligatoire pour tous les autres objets magiques. Son accomplissement diminue de 1 point le seuil de rêve du haut-rêvant.</p>","draconic":"narcos","duree":"Instantanée","JR":"","cible":"","difficulte":"-5","portée":"","caseTMR":"sanctuaire","caseTMRspeciale":"","ptreve":"5","portee":"","isrituel":true,"coutseuil":1,"xp":0,"bonuscase":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"name":"Annulation de magie","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.BibuJdKmaQJm3kFw"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp","effects":[],"system":{"description":"<p>Ce rituel permet d’annuler un effet magique, que celui-ci ait été accompli par soi-même ou par un autre haut-rêvant. On peut annuler l’effet d’un sort, de zone ou individuel, d’un rituel d’enchantement, d’une invocation, etc.</p>\n<p>Le haut-rêvant doit se trouver dans la case <em>spécifique </em>des TMR d’où la magie a été accomplie. Le jet de RÊVE qu’il doit réussir a alors la même difficulté que celui ayant permis la magie, avec une dépense de points de rêve pareillement identique.</p>\n<p>Pour annuler une invocation, le rituel d’Annulation doit être ciblé sur la créature invoquée. Quand la magie est le résultat conjoint de plusieurs rituels, ce qui est notamment le cas des objets magiques, chacun doit être annulé tour à tour, en commençant toujours par le dernier à avoir été accompli chronologiquement. D’une manière générale, ce sont les mêmes opérations qui doivent être répétées à l’envers. Quand un rituel coûte des points de seuil, son annulation en coûte également (le même nombre). Annulation de Magie sert également à exorciser les entités de cauchemar non incarnées. La difficulté d’un exorcisme est toujours R-7, et le coût en points de rêve égal au RÊVE de l’entité. Le ciblage doit être fait sur la créature possédée.</p>\n<p>Avant d’accomplir une Annulation de Magie, les paramètres de la magie à annuler (case des TMR, R-, r) peuvent être découverts au moyen du rituel Lecture d’Aura.</p>\n<p>Pour la synthèse d’Annulation de Magie, considérer que ce rituel est de difficulté R-7. Il peut être utilisé indifféremment par Oniros, Hypnos ou Narcos (mais jamais Thanatos), quelle que soit la voie ayant servi à accomplir la magie à annuler.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"Effet magique","difficulte":"variable","portée":"","caseTMR":"special","caseTMRspeciale":"variable","ptreve":"variable","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638598,"modifiedTime":1667260043440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"MM7Qe6gDaeuIggIR","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
{"_id":"KW2VZhuEGJGglGcW","name":"Restauration *","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Restauration est un rituel secondaire nullement obligatoire. Son seul usage est de redonner des points de rêve actifs à une amulette de protection. Il est en effet impossible d'utiliser le simple Enchantement une fois le rituel de Permanence accompli. Restauration fonctionne de façon semblable à un Enchantement, sauf que son accomplissement coûte chaque fois un point de seuil. On peut restaurer les points de rêve d'une amulette en plusieurs fois en intercalant un rituel de Purifcation entre chaque rituel de Restauration (qui coûte chaque fois un point de seuil). Il est possible de redonner plus de points de rêve actifs à l'objet qu'il n'en avait au départ, jusqu'à concurrence du maximum possible. Le nombre maximum de points de rêve actifs qu'un objet puisse posséder est égal à 7 fois l'enchantabilité de sa gemme.</p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-6","portée":"","caseTMR":"cite","caseTMRspeciale":"","ptreve":"1+","portee":"","isrituel":true,"coutseuil":1,"xp":0,"bonuscase":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"name":"Détection d'aura","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.xOicgRMCUxJNmVzF"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp","effects":[],"system":{"description":"<p>Les rituels de Détection d’Aura peuvent indifféremment être accomplis par n’importe laquelle des quatre voies.</p>\n<p>Toutes les créatures vivantes animées (humains, humanoïdes, animaux) ont une caractéristique RÊVE. Les objets enchantés possèdent des points de rêve, de même que les produits de magie naturelle, comme certaines pierres de chance. Les entités de cauchemar, incarnées ou non, en ont également. Quelle qu’elle soit, la présence de rêve émet une aura, laquelle est détectable par Détection d’Aura. Parallèlement, toute cible d’un sort ou d’un rituel, émet une aura propre, quand bien même ladite cible ne possède pas de points de rêve (centre de zone, objet ou plante soumis à une illusion d’Hypnos). Cette aura est également détectable par Détection d’Aura.</p>\n<p>L’aura de présence de rêve se traduit par un halo bleuté constant ; l’aura résultant d’un effet magique par un halo parcouru de pulsations. Quand les deux auras sont présentes conjointement, le halo est pulsatif et d’un bleu plus foncé. On peut toujours effectuer Détection d’Aura sans aucun risque, il y a toujours une réponse. Soit une aura est perçue, constante ou pulsative, et l’on peut tenter une Lecture d’Aura pour en savoir plus ; soit aucune aura n’est perçue et il s’agit de matière inerte, sans rêve, non soumise à un sort.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-3","portée":"","caseTMR":"sanctuaire","caseTMRspeciale":"","ptreve":"1","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638601,"modifiedTime":1667260043441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"NVGQJp4lPcMxnpaT","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
{"_id":"P9jMT8pl4pgKEoEW","name":"Écailles de Protection contre le feu *","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Chaque écaille de protection diminue de 1 point le jet d'encaissement de tout dommage dû au feu, jouant le rôle d'une \"armure ignifugée\". Soit un personnage possédant une telle amulette dotée de 5 écailles, et se retrouvant dans une zone d'Air en Feu. Au lieu de jouer un jet d'encaissement à +10, il ne la joue qu'à +5. La protection de l'amulette est <em>en plus </em>de la protection physique qu'il peut avoir, laquelle ne peut être - rappelons-le - que d'un maximum de 2 points.</p>\n<p>Une amulette peut avoir n'importe quelle forme, mais ne fonctionne que si elle est en contact avec la peau nue de son possesseur. Si c'est le cas, elle fonctionne spontanément en face du danger pour lequel elle est conçue, même si le possesseur n'a aucune idée de son pouvoir. Pour fonctionner, l'amulette a besoin de points de rêve actifs. Ces points doivent être des points de rêve conférés par le rituel d'Enchantement en plus des points inertes. Autrement dit, voulant fabriquer une amulette, le haut-rêvant ne s'arrête pas d'enchanter quand il atteint un nombre de points de rêve égal à l'inertie totale de l'objet, mais continue à en rajouter. Le nombre maximum de points actifs qu'une amulette puisse posséder est égal à 7 fois l'enchantabilité de sa gemme ; et, comme pour les écailles d'efficacité, le nombre d'écailles de protection qu'elle puisse posséder est égal à l'enchantabilité de celle-ci avec un maximum de 7. Des amulettes plus puissantes ne pourraient être obtenues que par de spécifiques Grandes Écailles de Narcos.</p>\n<p><em>Soit une gemme de taille 6 et de pureté 5, ayant donc une inertie de 2 et une enchantabilité de 4. Elle peut posséder jusqu'à 4 écailles de protection (=enchantabilité) et un maximum de 28 points de rêve actifs (7 x 4 = 28).</em></p>\n<p>Chaque fois qu'une amulette de protection fonctionne, elle dépense un de ses points de rêve actifs quel que soit le nombre d'écailles. Le possesseur, lui, n'en dépense qu'un par heure, quel que soit le nombre de fonctionnements de l'amulette au cours de cette heure. Quand une amulette n'a plus de points actifs, elle cesse de fonctionner. On ne peut lui en redonner que par le rituel de Restauration. Les écailles de protection peuvent être posées progressivement, comme celles d'efficacité, même si l'amulette fonctionne entre temps. Mêmes règles d'application. Une gemme donnée ne peut recevoir que des écailles de protection d'un même type, mais grâce à Individualité, plusieurs gemmes d'une même amulette peuvent offrir des protections différentes. La pose de chaque écaille de protection coûte un point de seuil.</p>\n<p> </p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-6","portée":"","caseTMR":"desert","caseTMRspeciale":"","ptreve":"4","portee":"","isrituel":true,"coutseuil":1,"xp":0,"bonuscase":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"P9jMT8pl4pgKEoEW","name":"Écailles de Protection contre le feu *","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.P9jMT8pl4pgKEoEW"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Chaque écaille de protection diminue de 1 point le jet d'encaissement de tout dommage dû au feu, jouant le rôle d'une \"armure ignifugée\". Soit un personnage possédant une telle amulette dotée de 5 écailles, et se retrouvant dans une zone d'Air en Feu. Au lieu de jouer un jet d'encaissement à +10, il ne la joue qu'à +5. La protection de l'amulette est <em>en plus </em>de la protection physique qu'il peut avoir, laquelle ne peut être - rappelons-le - que d'un maximum de 2 points.</p>\n<p>Une amulette peut avoir n'importe quelle forme, mais ne fonctionne que si elle est en contact avec la peau nue de son possesseur. Si c'est le cas, elle fonctionne spontanément en face du danger pour lequel elle est conçue, même si le possesseur n'a aucune idée de son pouvoir. Pour fonctionner, l'amulette a besoin de points de rêve actifs. Ces points doivent être des points de rêve conférés par le rituel d'Enchantement en plus des points inertes. Autrement dit, voulant fabriquer une amulette, le haut-rêvant ne s'arrête pas d'enchanter quand il atteint un nombre de points de rêve égal à l'inertie totale de l'objet, mais continue à en rajouter. Le nombre maximum de points actifs qu'une amulette puisse posséder est égal à 7 fois l'enchantabilité de sa gemme ; et, comme pour les écailles d'efficacité, le nombre d'écailles de protection qu'elle puisse posséder est égal à l'enchantabilité de celle-ci avec un maximum de 7. Des amulettes plus puissantes ne pourraient être obtenues que par de spécifiques Grandes Écailles de Narcos.</p>\n<p><em>Soit une gemme de taille 6 et de pureté 5, ayant donc une inertie de 2 et une enchantabilité de 4. Elle peut posséder jusqu'à 4 écailles de protection (=enchantabilité) et un maximum de 28 points de rêve actifs (7 x 4 = 28).</em></p>\n<p>Chaque fois qu'une amulette de protection fonctionne, elle dépense un de ses points de rêve actifs quel que soit le nombre d'écailles. Le possesseur, lui, n'en dépense qu'un par heure, quel que soit le nombre de fonctionnements de l'amulette au cours de cette heure. Quand une amulette n'a plus de points actifs, elle cesse de fonctionner. On ne peut lui en redonner que par le rituel de Restauration. Les écailles de protection peuvent être posées progressivement, comme celles d'efficacité, même si l'amulette fonctionne entre temps. Mêmes règles d'application. Une gemme donnée ne peut recevoir que des écailles de protection d'un même type, mais grâce à Individualité, plusieurs gemmes d'une même amulette peuvent offrir des protections différentes. La pose de chaque écaille de protection coûte un point de seuil.</p>\n<p> </p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-6","portée":"","caseTMR":"desert","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":true,"coutseuil":1,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638599,"modifiedTime":1667260043441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"SUrdOuvvelLtiZMy","name":"Écailles de Protection contre les projectiles *","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Chaque écaille de protection diminue de 1 point le jet d'encaissement de tout dommage dû à un projectile, flèche, carreau, pierre de fronde, dague, javelot, fouet. La protection de l'amulette est <em>en plus </em>de l'armure véritable du personnage. Soit un personnage vêtu de cuir épais (prot. 3), possédant une amulette de 3 écailles, et recevant une flèche (+dom +2). Face à une flèche, le cuir épais ne vaut plus que 1, mais on y rajoute les 3 écailles de l'amulette, pour un jet d'encaissement final de -2 au lieu de +1.</p>\n<p>Une amulette peut avoir n'importe quelle forme, mais ne fonctionne que si elle est en contact avec la peau nue de son possesseur. Si c'est le cas, elle fonctionne spontanément en face du danger pour lequel elle est conçue, même si le possesseur n'a aucune idée de son pouvoir. Pour fonctionner, l'amulette a besoin de points de rêve actifs. Ces points doivent être des points de rêve conférés par le rituel d'Enchantement en plus des points inertes. Autrement dit, voulant fabriquer une amulette, le haut-rêvant ne s'arrête pas d'enchanter quand il atteint un nombre de points de rêve égal à l'inertie totale de l'objet, mais continue à en rajouter. Le nombre maximum de points actifs qu'une amulette puisse posséder est égal à 7 fois l'enchantabilité de sa gemme ; et, comme pour les écailles d'efficacité, le nombre d'écailles de protection qu'elle puisse posséder est égal à l'enchantabilité de celle-ci avec un maximum de 7. Des amulettes plus puissantes ne pourraient être obtenues que par de spécifiques Grandes Écailles de Narcos.</p>\n<p><em>Soit une gemme de taille 6 et de pureté 5, ayant donc une inertie de 2 et une enchantabilité de 4. Elle peut posséder jusqu'à 4 écailles de protection (=enchantabilité) et un maximum de 28 points de rêve actifs (7 x 4 = 28).</em></p>\n<p>Chaque fois qu'une amulette de protection fonctionne, elle dépense un de ses points de rêve actifs quel que soit le nombre d'écailles. Le possesseur, lui, n'en dépense qu'un par heure, quel que soit le nombre de fonctionnements de l'amulette au cours de cette heure. Quand une amulette n'a plus de points actifs, elle cesse de fonctionner. On ne peut lui en redonner que par le rituel de Restauration. Les écailles de protection peuvent être posées progressivement, comme celles d'efficacité, même si l'amulette fonctionne entre temps. Mêmes règles d'application. Une gemme donnée ne peut recevoir que des écailles de protection d'un même type, mais grâce à Individualité, plusieurs gemmes d'une même amulette peuvent offrir des protections différentes. La pose de chaque écaille de protection coûte un point de seuil.</p>\n<p> </p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"gouffre","caseTMRspeciale":"","ptreve":"6","portee":"","isrituel":true,"coutseuil":1,"xp":0,"bonuscase":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"name":"Lecture d'aura","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.Y4r9kTN2brWC2N0n"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp","effects":[],"system":{"description":"<p>Les rituels de Lecture d’Aura peuvent indifféremment être accomplis par n’importe laquelle des quatre voies.</p>\n<p>Ce rituel permet d’approfondir les informations fournies par Détection d’Aura. Pratiquer Lecture d’Aura quand il n’y a pas d’aura revient à demander une magie impossible et crée immédiatement une déchirure du rêve.</p>\n<p>Lecture d’Aura est effectuée en plusieurs étapes, toutes étant de difficulté R-3 et coûtant 3 points de rêve. La première a toujours lieu dans un sanctuaire et ne fait que révéler dans quel(s) autre(s) genre(s) de case(s) le haut-rêvant doit se rendre pour continuer sa lecture. Là, il apprend quel genre de magie a été produit ou à quel type de rêve il a affaire, de même que les cases spécifiques concernées. Enfin dans les cases spécifiques, le haut-rêvant peut apprendre la force du rêve ou de la magie en cours, c’est-à-dire pratiquement la difficulté et le nombre de points de rêve impliqués, information indispensable dans l’optique d’une annulation de magie.</p>\n<p>Lecture d’Aura révèle également la couleur de l’aura (fixe ou pulsative) comme Détection d’Aura. Pour les créatures vivantes, on peut donc sauter l’étape de Détection d’Aura et commencer directement par la lecture, puisqu’on est sûr de trouver une aura. Dans les autres cas, il est plus prudent de commencer par la détection si, en l’absence finale d’une aura, on ne veut pas créer de magie impossible. Effectuée sur une créature non soumise à un effet magique ni sous l’emprise d’une entité, Lecture d’Aura indique toujours le Fleuve. Là, dans n’importe quelle case du Fleuve, le haut-rêvant se contente d’apprendre qu’il a affaire à une créature vivante et douée de rêve.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-3","portée":"","caseTMR":"special","caseTMRspeciale":"Sanctuaire / variable","ptreve":"3","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638600,"modifiedTime":1667260043443,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"QvAyeJIIEssOhJoV","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
{"_id":"TSDY6o00ri2ktlVM","name":"Puits de rêve *","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Le Puits de rêve permet de stocker des points de rêve et de les y puiser à volonté, c'est en quelque sorte une tirelire de points de rêve. Le Puits de rêve peut avoir la forme de n'importe quel objet et même se contenter d'être une gemme seule. Pour y stocker des points de rêve, l'utilisateur doit le tenir dans sa main nue et se concentrer pendant un round. Il perd autant de points de rêve que souhaité, points qui sont instantanément transvasés dans le Puits de rêve. Aucune montée en TMR ni jets de dés ne sont nécessaires. Pareillement, pour puiser des points de rêve dans le Puits, il suffit de le tenir dans sa main nue au moment de lancer un sort. Au lieu de dépenser ses propres points, l'utilisateur les puise dans le Puits de rêve. Les points puisés ne peuvent avoir qu'un seul usage : alimenter un sort, lancé naturellement ou via une écaille d'activité, ou alimenter un rituel. Rien d'autre. Il ne peuvent pas servir à payer un coût de maîtrise ni un coût d'objet efficace, ni un coût d'amulette de protection. La dépense de points de rêve doit provenir intégralement de l'une ou l'autre source, utilisateur ou Puits de rêve, on ne peut pas partager. On ne peut pas non plus les récupérer pour les \"remettre dans sa tête\".</p>\n<p>La gemme destinée à recevoir un Puits de rêve n'a pas besoin de points actifs ; si elle en a lors de l'accomplissement de Permanence, ils sont purement et simplement ignorés (annulés). La gemme peut recevoir autant de Grandes Écailles de Puits de rêve que son enchantibilité jusqu'à un maximum de 7. Chaque Grande Écaille permet de stocker jusqu'à 7 points de rêve. <em>Soit une gemme d'enchantabilité 6 possédant 6 Grandes Écailles de Puits de rêve, on peut y stocker jusqu'à 42 points de rêve.</em> Un Puits de rêve n'a jamais besoin d'être entièrement plein et peut pareillement rester vide sans en souffrir. Face à une grosse dépense, on peut le vider entièrement d'un seul coup.</p>\n<p>Un Puits de rêve peut être posé (avec Individualité) sur une seconde gemme d'un objet possédant une écaille d'activité. Lors de l'utilisation de l'objet, les points de rêve de coût de sort pourront être dépensés par le Puits de rêve ou par l'utilisateur au choix de ce dernier. Un Puits de rêve changeant de main doit être maîtrisé selon la règle normale. La maîtrise a lieu soit au moment où l'on stocke, soit où l'on puise, le premier des deux, et coûte 1 point de rêve par Grande Écaille. <em>Note </em> : les points dépensés pour la maîtrise ne <em>vont pas</em> dans le Puis de rêve, sils ont perdus.</p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"lac","caseTMRspeciale":"","ptreve":"8","portee":"","isrituel":true,"coutseuil":1,"xp":0,"bonuscase":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"SUrdOuvvelLtiZMy","name":"Écailles de Protection contre les projectiles *","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.SUrdOuvvelLtiZMy"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Chaque écaille de protection diminue de 1 point le jet d'encaissement de tout dommage dû à un projectile, flèche, carreau, pierre de fronde, dague, javelot, fouet. La protection de l'amulette est <em>en plus </em>de l'armure véritable du personnage. Soit un personnage vêtu de cuir épais (prot. 3), possédant une amulette de 3 écailles, et recevant une flèche (+dom +2). Face à une flèche, le cuir épais ne vaut plus que 1, mais on y rajoute les 3 écailles de l'amulette, pour un jet d'encaissement final de -2 au lieu de +1.</p>\n<p>Une amulette peut avoir n'importe quelle forme, mais ne fonctionne que si elle est en contact avec la peau nue de son possesseur. Si c'est le cas, elle fonctionne spontanément en face du danger pour lequel elle est conçue, même si le possesseur n'a aucune idée de son pouvoir. Pour fonctionner, l'amulette a besoin de points de rêve actifs. Ces points doivent être des points de rêve conférés par le rituel d'Enchantement en plus des points inertes. Autrement dit, voulant fabriquer une amulette, le haut-rêvant ne s'arrête pas d'enchanter quand il atteint un nombre de points de rêve égal à l'inertie totale de l'objet, mais continue à en rajouter. Le nombre maximum de points actifs qu'une amulette puisse posséder est égal à 7 fois l'enchantabilité de sa gemme ; et, comme pour les écailles d'efficacité, le nombre d'écailles de protection qu'elle puisse posséder est égal à l'enchantabilité de celle-ci avec un maximum de 7. Des amulettes plus puissantes ne pourraient être obtenues que par de spécifiques Grandes Écailles de Narcos.</p>\n<p><em>Soit une gemme de taille 6 et de pureté 5, ayant donc une inertie de 2 et une enchantabilité de 4. Elle peut posséder jusqu'à 4 écailles de protection (=enchantabilité) et un maximum de 28 points de rêve actifs (7 x 4 = 28).</em></p>\n<p>Chaque fois qu'une amulette de protection fonctionne, elle dépense un de ses points de rêve actifs quel que soit le nombre d'écailles. Le possesseur, lui, n'en dépense qu'un par heure, quel que soit le nombre de fonctionnements de l'amulette au cours de cette heure. Quand une amulette n'a plus de points actifs, elle cesse de fonctionner. On ne peut lui en redonner que par le rituel de Restauration. Les écailles de protection peuvent être posées progressivement, comme celles d'efficacité, même si l'amulette fonctionne entre temps. Mêmes règles d'application. Une gemme donnée ne peut recevoir que des écailles de protection d'un même type, mais grâce à Individualité, plusieurs gemmes d'une même amulette peuvent offrir des protections différentes. La pose de chaque écaille de protection coûte un point de seuil.</p>\n<p> </p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"gouffre","caseTMRspeciale":"","ptreve":"6","xp":0,"bonuscase":"","isrituel":true,"coutseuil":1,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638599,"modifiedTime":1667260043442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"TjhnUMh6UL04k0k8","name":"Purification","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Purification est un rituel secondaire, mais néanmoins obligatoire. A moins de disposer d'une énorme quantité de points de rêve, il est vain d'espérer enchanter l'objet en une seule fois. Purifcation doit toujours s'intercaler entre deux rituels identiques : entre deux Enchantements, mais également entre deux écailles, d'activité ou de protection. Sauter cette étape aboutit à un cas de <em>magie impossible</em>.</p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-4","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"4","portee":"","isrituel":true,"xp":0,"bonuscase":"","coutseuil":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"TSDY6o00ri2ktlVM","name":"Puits de rêve *","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.TSDY6o00ri2ktlVM"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Le Puits de rêve permet de stocker des points de rêve et de les y puiser à volonté, c'est en quelque sorte une tirelire de points de rêve. Le Puits de rêve peut avoir la forme de n'importe quel objet et même se contenter d'être une gemme seule. Pour y stocker des points de rêve, l'utilisateur doit le tenir dans sa main nue et se concentrer pendant un round. Il perd autant de points de rêve que souhaité, points qui sont instantanément transvasés dans le Puits de rêve. Aucune montée en TMR ni jets de dés ne sont nécessaires. Pareillement, pour puiser des points de rêve dans le Puits, il suffit de le tenir dans sa main nue au moment de lancer un sort. Au lieu de dépenser ses propres points, l'utilisateur les puise dans le Puits de rêve. Les points puisés ne peuvent avoir qu'un seul usage : alimenter un sort, lancé naturellement ou via une écaille d'activité, ou alimenter un rituel. Rien d'autre. Il ne peuvent pas servir à payer un coût de maîtrise ni un coût d'objet efficace, ni un coût d'amulette de protection. La dépense de points de rêve doit provenir intégralement de l'une ou l'autre source, utilisateur ou Puits de rêve, on ne peut pas partager. On ne peut pas non plus les récupérer pour les \"remettre dans sa tête\".</p>\n<p>La gemme destinée à recevoir un Puits de rêve n'a pas besoin de points actifs ; si elle en a lors de l'accomplissement de Permanence, ils sont purement et simplement ignorés (annulés). La gemme peut recevoir autant de Grandes Écailles de Puits de rêve que son enchantibilité jusqu'à un maximum de 7. Chaque Grande Écaille permet de stocker jusqu'à 7 points de rêve. <em>Soit une gemme d'enchantabilité 6 possédant 6 Grandes Écailles de Puits de rêve, on peut y stocker jusqu'à 42 points de rêve.</em> Un Puits de rêve n'a jamais besoin d'être entièrement plein et peut pareillement rester vide sans en souffrir. Face à une grosse dépense, on peut le vider entièrement d'un seul coup.</p>\n<p>Un Puits de rêve peut être posé (avec Individualité) sur une seconde gemme d'un objet possédant une écaille d'activité. Lors de l'utilisation de l'objet, les points de rêve de coût de sort pourront être dépensés par le Puits de rêve ou par l'utilisateur au choix de ce dernier. Un Puits de rêve changeant de main doit être maîtrisé selon la règle normale. La maîtrise a lieu soit au moment où l'on stocke, soit où l'on puise, le premier des deux, et coûte 1 point de rêve par Grande Écaille. <em>Note </em> : les points dépensés pour la maîtrise ne <em>vont pas</em> dans le Puis de rêve, sils ont perdus.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"lac","caseTMRspeciale":"","ptreve":"8","xp":0,"bonuscase":"","isrituel":true,"coutseuil":1,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638599,"modifiedTime":1667260043444,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"WUYaL4yvr0wFRLjk","name":"Enchantement","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>C'est le rituel de base de tout enchantement, c'est par lui que le haut-rêvant confère des points de rêve à la gemme ou à la potion. Le nombre de points conférés, paramétré au lancer du sort, est à son entière discrétion. Entre deux Enchantements de la même potion ou de la même gemme doit être accompli un rituel de Purificiation.</p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-4","portée":"","caseTMR":"cite","caseTMRspeciale":"","ptreve":"1+","portee":"","isrituel":true,"xp":0,"bonuscase":"","coutseuil":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"TjhnUMh6UL04k0k8","name":"Purification","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.TjhnUMh6UL04k0k8"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Purification est un rituel secondaire, mais néanmoins obligatoire. A moins de disposer d'une énorme quantité de points de rêve, il est vain d'espérer enchanter l'objet en une seule fois. Purifcation doit toujours s'intercaler entre deux rituels identiques : entre deux Enchantements, mais également entre deux écailles, d'activité ou de protection. Sauter cette étape aboutit à un cas de <em>magie impossible</em>.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-4","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638599,"modifiedTime":1667260043444,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"X8yMNrnbFIwTB6oL","name":"Écailles de Protection contre griffes et crocs *","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Chaque écaille de protection diminue de 1 point le jet d'encaissement de tout dommage dû aux armes naturelles des animaux, griffes, crocs, mais également piétinement, cornes, tentacules, etc. Elle protège également des dommages au corps à corps de pugilat, coups de poing, coups de pied, mais ne s'applique pas à l'empoignade. La protection est en plus de l'armure véritable du personnage. </p>\n<p>Une amulette peut avoir n'importe quelle forme, mais ne fonctionne que si elle est en contact avec la peau nue de son possesseur. Si c'est le cas, elle fonctionne spontanément en face du danger pour lequel elle est conçue, même si le possesseur n'a aucune idée de son pouvoir. Pour fonctionner, l'amulette a besoin de points de rêve actifs. Ces points doivent être des points de rêve conférés par le rituel d'Enchantement en plus des points inertes. Autrement dit, voulant fabriquer une amulette, le haut-rêvant ne s'arrête pas d'enchanter quand il atteint un nombre de points de rêve égal à l'inertie totale de l'objet, mais continue à en rajouter. Le nombre maximum de points actifs qu'une amulette puisse posséder est égal à 7 fois l'enchantabilité de sa gemme ; et, comme pour les écailles d'efficacité, le nombre d'écailles de protection qu'elle puisse posséder est égal à l'enchantabilité de celle-ci avec un maximum de 7. Des amulettes plus puissantes ne pourraient être obtenues que par de spécifiques Grandes Écailles de Narcos.</p>\n<p><em>Soit une gemme de taille 6 et de pureté 5, ayant donc une inertie de 2 et une enchantabilité de 4. Elle peut posséder jusqu'à 4 écailles de protection (=enchantabilité) et un maximum de 28 points de rêve actifs (7 x 4 = 28).</em></p>\n<p>Chaque fois qu'une amulette de protection fonctionne, elle dépense un de ses points de rêve actifs quel que soit le nombre d'écailles. Le possesseur, lui, n'en dépense qu'un par heure, quel que soit le nombre de fonctionnements de l'amulette au cours de cette heure. Quand une amulette n'a plus de points actifs, elle cesse de fonctionner. On ne peut lui en redonner que par le rituel de Restauration. Les écailles de protection peuvent être posées progressivement, comme celles d'efficacité, même si l'amulette fonctionne entre temps. Mêmes règles d'application. Une gemme donnée ne peut recevoir que des écailles de protection d'un même type, mais grâce à Individualité, plusieurs gemmes d'une même amulette peuvent offrir des protections différentes. La pose de chaque écaille de protection coûte un point de seuil.</p>\n<p> </p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-10","portée":"","caseTMR":"marais","caseTMRspeciale":"","ptreve":"8","portee":"","isrituel":true,"coutseuil":1,"xp":0,"bonuscase":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"WUYaL4yvr0wFRLjk","name":"Enchantement","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.WUYaL4yvr0wFRLjk"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>C'est le rituel de base de tout enchantement, c'est par lui que le haut-rêvant confère des points de rêve à la gemme ou à la potion. Le nombre de points conférés, paramétré au lancer du sort, est à son entière discrétion. Entre deux Enchantements de la même potion ou de la même gemme doit être accompli un rituel de Purificiation.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-4","portée":"","caseTMR":"cite","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638599,"modifiedTime":1667260043442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"Y4r9kTN2brWC2N0n","name":"Lecture d'aura","permission":{"default":0,"Q2G6GTdrotKzYGUC":3},"type":"sort","data":{"description":"<p>Les rituels de Lecture d’Aura peuvent indifféremment être accomplis par n’importe laquelle des quatre voies.</p>\n<p>Ce rituel permet d’approfondir les informations fournies par Détection d’Aura. Pratiquer Lecture d’Aura quand il n’y a pas d’aura revient à demander une magie impossible et crée immédiatement une déchirure du rêve.</p>\n<p>Lecture d’Aura est effectuée en plusieurs étapes, toutes étant de difficulté R-3 et coûtant 3 points de rêve. La première a toujours lieu dans un sanctuaire et ne fait que révéler dans quel(s) autre(s) genre(s) de case(s) le haut-rêvant doit se rendre pour continuer sa lecture. Là, il apprend quel genre de magie a été produit ou à quel type de rêve il a affaire, de même que les cases spécifiques concernées. Enfin dans les cases spécifiques, le haut-rêvant peut apprendre la force du rêve ou de la magie en cours, c’est-à-dire pratiquement la difficulté et le nombre de points de rêve impliqués, information indispensable dans l’optique d’une annulation de magie.</p>\n<p>Lecture d’Aura révèle également la couleur de l’aura (fixe ou pulsative) comme Détection d’Aura. Pour les créatures vivantes, on peut donc sauter l’étape de Détection d’Aura et commencer directement par la lecture, puisqu’on est sûr de trouver une aura. Dans les autres cas, il est plus prudent de commencer par la détection si, en l’absence finale d’une aura, on ne veut pas créer de magie impossible. Effectuée sur une créature non soumise à un effet magique ni sous l’emprise d’une entité, Lecture d’Aura indique toujours le Fleuve. Là, dans n’importe quelle case du Fleuve, le haut-rêvant se contente d’apprendre qu’il a affaire à une créature vivante et douée de rêve.</p>","draconic":"oniros","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-3","portée":"","caseTMR":"special","caseTMRspeciale":"Sanctuaire / variable","ptreve":"3","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp","effects":[]}
|
||||||
{"_id":"X8yMNrnbFIwTB6oL","name":"Écailles de Protection contre griffes et crocs *","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.X8yMNrnbFIwTB6oL"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Chaque écaille de protection diminue de 1 point le jet d'encaissement de tout dommage dû aux armes naturelles des animaux, griffes, crocs, mais également piétinement, cornes, tentacules, etc. Elle protège également des dommages au corps à corps de pugilat, coups de poing, coups de pied, mais ne s'applique pas à l'empoignade. La protection est en plus de l'armure véritable du personnage. </p>\n<p>Une amulette peut avoir n'importe quelle forme, mais ne fonctionne que si elle est en contact avec la peau nue de son possesseur. Si c'est le cas, elle fonctionne spontanément en face du danger pour lequel elle est conçue, même si le possesseur n'a aucune idée de son pouvoir. Pour fonctionner, l'amulette a besoin de points de rêve actifs. Ces points doivent être des points de rêve conférés par le rituel d'Enchantement en plus des points inertes. Autrement dit, voulant fabriquer une amulette, le haut-rêvant ne s'arrête pas d'enchanter quand il atteint un nombre de points de rêve égal à l'inertie totale de l'objet, mais continue à en rajouter. Le nombre maximum de points actifs qu'une amulette puisse posséder est égal à 7 fois l'enchantabilité de sa gemme ; et, comme pour les écailles d'efficacité, le nombre d'écailles de protection qu'elle puisse posséder est égal à l'enchantabilité de celle-ci avec un maximum de 7. Des amulettes plus puissantes ne pourraient être obtenues que par de spécifiques Grandes Écailles de Narcos.</p>\n<p><em>Soit une gemme de taille 6 et de pureté 5, ayant donc une inertie de 2 et une enchantabilité de 4. Elle peut posséder jusqu'à 4 écailles de protection (=enchantabilité) et un maximum de 28 points de rêve actifs (7 x 4 = 28).</em></p>\n<p>Chaque fois qu'une amulette de protection fonctionne, elle dépense un de ses points de rêve actifs quel que soit le nombre d'écailles. Le possesseur, lui, n'en dépense qu'un par heure, quel que soit le nombre de fonctionnements de l'amulette au cours de cette heure. Quand une amulette n'a plus de points actifs, elle cesse de fonctionner. On ne peut lui en redonner que par le rituel de Restauration. Les écailles de protection peuvent être posées progressivement, comme celles d'efficacité, même si l'amulette fonctionne entre temps. Mêmes règles d'application. Une gemme donnée ne peut recevoir que des écailles de protection d'un même type, mais grâce à Individualité, plusieurs gemmes d'une même amulette peuvent offrir des protections différentes. La pose de chaque écaille de protection coûte un point de seuil.</p>\n<p> </p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-10","portée":"","caseTMR":"marais","caseTMRspeciale":"","ptreve":"8","xp":0,"bonuscase":"","isrituel":true,"coutseuil":1,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638599,"modifiedTime":1667260043441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"asVUMvyZ0OocReY6","name":"Individualité","permission":{"default":0,"Q2G6GTdrotKzYGUC":3},"type":"sort","data":{"description":"<p>Rituel secondaire, Individualité est néanmoins obligatoire pour les objets possédant plusieurs pouvoirs distincts. Il doit être accompli sur toute nouvelle gemme, enchantée d’au moins un point de rêve actif, avant le rituel d’Alliance. Lors, c’est uniquement à cette nouvelle gemme que s’adresseront les points de rêve et les écailles. Vis à vis d’une nouvelle gemme, le matériau re-possède toute son inertie et doit à nouveau être saturé. Quand un objet a plusieurs gemmes, toutes ont dû recevoir Individualité sauf la première. Les pouvoirs d’un objet doivent être élaborés l’un après l’autre. Dès que l’on a commencé une nouvelle gemme, on ne peut plus revenir sur les précédentes.</p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-4","portée":"","caseTMR":"desert","caseTMRspeciale":"","ptreve":"4","xp":0,"isrituel":true,"portee":"","bonuscase":"","coutseuil":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"asVUMvyZ0OocReY6","name":"Individualité","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.asVUMvyZ0OocReY6"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Rituel secondaire, Individualité est néanmoins obligatoire pour les objets possédant plusieurs pouvoirs distincts. Il doit être accompli sur toute nouvelle gemme, enchantée d’au moins un point de rêve actif, avant le rituel d’Alliance. Lors, c’est uniquement à cette nouvelle gemme que s’adresseront les points de rêve et les écailles. Vis à vis d’une nouvelle gemme, le matériau re-possède toute son inertie et doit à nouveau être saturé. Quand un objet a plusieurs gemmes, toutes ont dû recevoir Individualité sauf la première. Les pouvoirs d’un objet doivent être élaborés l’un après l’autre. Dès que l’on a commencé une nouvelle gemme, on ne peut plus revenir sur les précédentes.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-4","portée":"","caseTMR":"desert","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"Q2G6GTdrotKzYGUC":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638600,"modifiedTime":1667260043442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"ckH9xONcfsffpRVr","name":"Écailles de Protection contre la magie *","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Chaque écaille de protection rajoute un +1 à tous les jets de résistance contre les sorts d'illusion-suggestion d'Hypnos ainsi que les rituels de Possession et les sorts et griffes de Thanatos. L'amulette n'est pas spécifique à un sort, elle protège de tous. Soit un personnage possédant une amulette de 4 écailles et devant jouer une JR r-8, il ne joue en réalité qu'un JR r-4, augmentant considérablement ses chances de résister à la magie. La protection ne s'applique qu'à la magie autorisant un JR.</p>\n<p>Une amulette peut avoir n'importe quelle forme, mais ne fonctionne que si elle est en contact avec la peau nue de son possesseur. Si c'est le cas, elle fonctionne spontanément en face du danger pour lequel elle est conçue, même si le possesseur n'a aucune idée de son pouvoir. Pour fonctionner, l'amulette a besoin de points de rêve actifs. Ces points doivent être des points de rêve conférés par le rituel d'Enchantement en plus des points inertes. Autrement dit, voulant fabriquer une amulette, le haut-rêvant ne s'arrête pas d'enchanter quand il atteint un nombre de points de rêve égal à l'inertie totale de l'objet, mais continue à en rajouter. Le nombre maximum de points actifs qu'une amulette puisse posséder est égal à 7 fois l'enchantabilité de sa gemme ; et, comme pour les écailles d'efficacité, le nombre d'écailles de protection qu'elle puisse posséder est égal à l'enchantabilité de celle-ci avec un maximum de 7. Des amulettes plus puissantes ne pourraient être obtenues que par de spécifiques Grandes Écailles de Narcos.</p>\n<p><em>Soit une gemme de taille 6 et de pureté 5, ayant donc une inertie de 2 et une enchantabilité de 4. Elle peut posséder jusqu'à 4 écailles de protection (=enchantabilité) et un maximum de 28 points de rêve actifs (7 x 4 = 28).</em></p>\n<p>Chaque fois qu'une amulette de protection fonctionne, elle dépense un de ses points de rêve actifs quel que soit le nombre d'écailles. Le possesseur, lui, n'en dépense qu'un par heure, quel que soit le nombre de fonctionnements de l'amulette au cours de cette heure. Quand une amulette n'a plus de points actifs, elle cesse de fonctionner. On ne peut lui en redonner que par le rituel de Restauration. Les écailles de protection peuvent être posées progressivement, comme celles d'efficacité, même si l'amulette fonctionne entre temps. Mêmes règles d'application. Une gemme donnée ne peut recevoir que des écailles de protection d'un même type, mais grâce à Individualité, plusieurs gemmes d'une même amulette peuvent offrir des protections différentes. La pose de chaque écaille de protection coûte un point de seuil.</p>\n<p> </p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"sanctuaire","caseTMRspeciale":"","ptreve":"6","portee":"","isrituel":true,"coutseuil":1,"xp":0,"bonuscase":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"ckH9xONcfsffpRVr","name":"Écailles de Protection contre la magie *","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.ckH9xONcfsffpRVr"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Chaque écaille de protection rajoute un +1 à tous les jets de résistance contre les sorts d'illusion-suggestion d'Hypnos ainsi que les rituels de Possession et les sorts et griffes de Thanatos. L'amulette n'est pas spécifique à un sort, elle protège de tous. Soit un personnage possédant une amulette de 4 écailles et devant jouer une JR r-8, il ne joue en réalité qu'un JR r-4, augmentant considérablement ses chances de résister à la magie. La protection ne s'applique qu'à la magie autorisant un JR.</p>\n<p>Une amulette peut avoir n'importe quelle forme, mais ne fonctionne que si elle est en contact avec la peau nue de son possesseur. Si c'est le cas, elle fonctionne spontanément en face du danger pour lequel elle est conçue, même si le possesseur n'a aucune idée de son pouvoir. Pour fonctionner, l'amulette a besoin de points de rêve actifs. Ces points doivent être des points de rêve conférés par le rituel d'Enchantement en plus des points inertes. Autrement dit, voulant fabriquer une amulette, le haut-rêvant ne s'arrête pas d'enchanter quand il atteint un nombre de points de rêve égal à l'inertie totale de l'objet, mais continue à en rajouter. Le nombre maximum de points actifs qu'une amulette puisse posséder est égal à 7 fois l'enchantabilité de sa gemme ; et, comme pour les écailles d'efficacité, le nombre d'écailles de protection qu'elle puisse posséder est égal à l'enchantabilité de celle-ci avec un maximum de 7. Des amulettes plus puissantes ne pourraient être obtenues que par de spécifiques Grandes Écailles de Narcos.</p>\n<p><em>Soit une gemme de taille 6 et de pureté 5, ayant donc une inertie de 2 et une enchantabilité de 4. Elle peut posséder jusqu'à 4 écailles de protection (=enchantabilité) et un maximum de 28 points de rêve actifs (7 x 4 = 28).</em></p>\n<p>Chaque fois qu'une amulette de protection fonctionne, elle dépense un de ses points de rêve actifs quel que soit le nombre d'écailles. Le possesseur, lui, n'en dépense qu'un par heure, quel que soit le nombre de fonctionnements de l'amulette au cours de cette heure. Quand une amulette n'a plus de points actifs, elle cesse de fonctionner. On ne peut lui en redonner que par le rituel de Restauration. Les écailles de protection peuvent être posées progressivement, comme celles d'efficacité, même si l'amulette fonctionne entre temps. Mêmes règles d'application. Une gemme donnée ne peut recevoir que des écailles de protection d'un même type, mais grâce à Individualité, plusieurs gemmes d'une même amulette peuvent offrir des protections différentes. La pose de chaque écaille de protection coûte un point de seuil.</p>\n<p> </p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"sanctuaire","caseTMRspeciale":"","ptreve":"6","xp":0,"bonuscase":"","isrituel":true,"coutseuil":1,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638600,"modifiedTime":1667260043441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"hWAoVheMfyLIMKZy","name":"Alliance","permission":{"default":0,"Q4cUvqxCxMoTJXDL":3},"type":"sort","data":{"description":"<p>Ce rituel unit magiquement la gemme, seul véritable réceptacle du rêve,au reste de l’objet, en sorte que son pouvoir puisse s’étendre à lui. Ce qui s’applique à la gemme s’applique désormais à l’objet, et inversement. La forme de l’objet participe maintenant à la magie. C’est pourquoi il doit être utilisé comme l’exige sa fonction normale (bague au doigt, etc.) et pourquoi sa forme doit être en analogie avec le ciblage. Pratiquement, une gemme seule ne peut être utilisée que pour une écaille d’activité lançant un sort sur l’utilisateur lui-même (la gemme ne lui permettant pas d’autre ciblage). Une gemme seule pourrait être une amulette de protection, mais il faudrait la tenir sans cesse dans le creux de la main (seule façon d’utiliser une gemme seule). En revanche, on peut s’en contenter pour la Grande Écaille de Narcos Puits de rêve.</p>\n<p> </p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-4","portée":"","caseTMR":"pont","caseTMRspeciale":"","ptreve":"4","portee":"","isrituel":true,"xp":0,"bonuscase":"","coutseuil":0},"flags":{"core":{"sourceId":"Item.5UQMurs8lNa8eBr0"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"hWAoVheMfyLIMKZy","name":"Alliance","type":"sort","flags":{"core":{"sourceId":"Item.5UQMurs8lNa8eBr0"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Ce rituel unit magiquement la gemme, seul véritable réceptacle du rêve,au reste de l’objet, en sorte que son pouvoir puisse s’étendre à lui. Ce qui s’applique à la gemme s’applique désormais à l’objet, et inversement. La forme de l’objet participe maintenant à la magie. C’est pourquoi il doit être utilisé comme l’exige sa fonction normale (bague au doigt, etc.) et pourquoi sa forme doit être en analogie avec le ciblage. Pratiquement, une gemme seule ne peut être utilisée que pour une écaille d’activité lançant un sort sur l’utilisateur lui-même (la gemme ne lui permettant pas d’autre ciblage). Une gemme seule pourrait être une amulette de protection, mais il faudrait la tenir sans cesse dans le creux de la main (seule façon d’utiliser une gemme seule). En revanche, on peut s’en contenter pour la Grande Écaille de Narcos Puits de rêve.</p>\n<p> </p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-4","portée":"","caseTMR":"pont","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"Q4cUvqxCxMoTJXDL":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638601,"modifiedTime":1667260043440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"hunCnz9KW1gc5ab7","name":"Autonomie **","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Le rituel d'Autonomie doit obligatoirement être utilisé à la place du rituel de Maîtrise pour les objets <em>autonomes</em>, c'est-à-dire fonctionnant uniquement à partir d'une certaine programmation, sans l'intervention d'un utilisateur. Chaque cas d'objet autonome correspond à une Grande Écaille de Narcos spécifique. Il s'agit usuellement de dispositifs se mettant automatiquement à fonctionner en présence d'un signal prévu dans leur programmation : piège magique qui se déclenche au moindre bruit, statue qui répète un message quand on passe devant elle, feu ou torche qui s'allume dès qu'on frappe dans ses mains, etc. Les objets autonomes étaient la grande passion des hauts-rêvants du Second Âge, qui les agençaient souvent en de grandioses mises en scène. Pratiquement, un objet autonome dépense ses points de rêve actifs pour obtenir son effet, tout comme un haut-rêvant dépense les siens. Autonomie permet de les récupérer tout seul, à raison de 3 points par heure complète de non-utilisation, sans pouvoir dépasser le nombre de points actifs initial. L'accomplissement du rituel d'Autonomie coûte 2 points de seuil.</p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-10","portée":"","caseTMR":"lac","caseTMRspeciale":"","ptreve":"10","portee":"","isrituel":true,"coutseuil":2,"xp":0,"bonuscase":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"hunCnz9KW1gc5ab7","name":"Autonomie **","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.hunCnz9KW1gc5ab7"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Le rituel d'Autonomie doit obligatoirement être utilisé à la place du rituel de Maîtrise pour les objets <em>autonomes</em>, c'est-à-dire fonctionnant uniquement à partir d'une certaine programmation, sans l'intervention d'un utilisateur. Chaque cas d'objet autonome correspond à une Grande Écaille de Narcos spécifique. Il s'agit usuellement de dispositifs se mettant automatiquement à fonctionner en présence d'un signal prévu dans leur programmation : piège magique qui se déclenche au moindre bruit, statue qui répète un message quand on passe devant elle, feu ou torche qui s'allume dès qu'on frappe dans ses mains, etc. Les objets autonomes étaient la grande passion des hauts-rêvants du Second Âge, qui les agençaient souvent en de grandioses mises en scène. Pratiquement, un objet autonome dépense ses points de rêve actifs pour obtenir son effet, tout comme un haut-rêvant dépense les siens. Autonomie permet de les récupérer tout seul, à raison de 3 points par heure complète de non-utilisation, sans pouvoir dépasser le nombre de points actifs initial. L'accomplissement du rituel d'Autonomie coûte 2 points de seuil.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-10","portée":"","caseTMR":"lac","caseTMRspeciale":"","ptreve":"10","xp":0,"bonuscase":"","isrituel":true,"coutseuil":2,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638601,"modifiedTime":1667260043440,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"lq3jQDJsAflJ2PEy","name":"Flèche de Feu","permission":{"default":0,"Q2G6GTdrotKzYGUC":3},"type":"sort","data":{"description":"<p>L’intitulé de ce sort n’est que métaphorique. Le sort ne rend pas la flèche ignée, mais augmente son tranchant et son pouvoir de pénétration. Un projectile ainsi modifié (quelle que soit l’arme, flèche ou carreau) a un +dom de +5 et annule 5 points d’armure au lieu de 2 (armure véritable et non pas protection naturelle).</p>\n<p>Si le projectile n’est pas utilisé, il est retrouvé intact à expiration du sort. Inversement, qu’il ait atteint ou non une cible, sa pointe devient inutilisable, le métal ayant fondu et coulé comme sous l’effet d’une intense chaleur.</p>","draconic":"narcos","duree":"HN","JR":"Il n’y a aucun JR pour les objets ordinaires. Les objets magiques (enchantés) résistent automatiquement, le sort se dissipant sans effet, les points de rêve étant néanmoins dépensés","cible":"Une flèche d'arc ou un carreau d'arbalète","difficulte":"-4","portée":"","caseTMR":"foret","caseTMRspeciale":"","ptreve":"2","xp":0,"isrituel":false,"portee":"","bonuscase":"","coutseuil":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"lq3jQDJsAflJ2PEy","name":"Flèche de Feu","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.lq3jQDJsAflJ2PEy"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>L’intitulé de ce sort n’est que métaphorique. Le sort ne rend pas la flèche ignée, mais augmente son tranchant et son pouvoir de pénétration. Un projectile ainsi modifié (quelle que soit l’arme, flèche ou carreau) a un +dom de +5 et annule 5 points d’armure au lieu de 2 (armure véritable et non pas protection naturelle).</p>\n<p>Si le projectile n’est pas utilisé, il est retrouvé intact à expiration du sort. Inversement, qu’il ait atteint ou non une cible, sa pointe devient inutilisable, le métal ayant fondu et coulé comme sous l’effet d’une intense chaleur.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"HN","JR":"Il n’y a aucun JR pour les objets ordinaires. Les objets magiques (enchantés) résistent automatiquement, le sort se dissipant sans effet, les points de rêve étant néanmoins dépensés","cible":"Une flèche d'arc ou un carreau d'arbalète","difficulte":"-4","portée":"","caseTMR":"foret","caseTMRspeciale":"","ptreve":"2","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"Q2G6GTdrotKzYGUC":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638601,"modifiedTime":1667260043442,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"mh9JjaKckzz1eAoe","name":"Écailles de Protection contre la maladie* ","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Chaque écaille de protection confère un bons de +1 au jet de CONSTITUTION contre toutes les maladies, augmentant ainsi les chances de leur résister.</p>\n<p>Une amulette peut avoir n'importe quelle forme, mais ne fonctionne que si elle est en contact avec la peau nue de son possesseur. Si c'est le cas, elle fonctionne spontanément en face du danger pour lequel elle est conçue, même si le possesseur n'a aucune idée de son pouvoir. Pour fonctionner, l'amulette a besoin de points de rêve actifs. Ces points doivent être des points de rêve conférés par le rituel d'Enchantement en plus des points inertes. Autrement dit, voulant fabriquer une amulette, le haut-rêvant ne s'arrête pas d'enchanter quand il atteint un nombre de points de rêve égal à l'inertie totale de l'objet, mais continue à en rajouter. Le nombre maximum de points actifs qu'une amulette puisse posséder est égal à 7 fois l'enchantabilité de sa gemme ; et, comme pour les écailles d'efficacité, le nombre d'écailles de protection qu'elle puisse posséder est égal à l'enchantabilité de celle-ci avec un maximum de 7. Des amulettes plus puissantes ne pourraient être obtenues que par de spécifiques Grandes Écailles de Narcos.</p>\n<p><em>Soit une gemme de taille 6 et de pureté 5, ayant donc une inertie de 2 et une enchantabilité de 4. Elle peut posséder jusqu'à 4 écailles de protection (=enchantabilité) et un maximum de 28 points de rêve actifs (7 x 4 = 28).</em></p>\n<p>Chaque fois qu'une amulette de protection fonctionne, elle dépense un de ses points de rêve actifs quel que soit le nombre d'écailles. Le possesseur, lui, n'en dépense qu'un par heure, quel que soit le nombre de fonctionnements de l'amulette au cours de cette heure. Quand une amulette n'a plus de points actifs, elle cesse de fonctionner. On ne peut lui en redonner que par le rituel de Restauration. Les écailles de protection peuvent être posées progressivement, comme celles d'efficacité, même si l'amulette fonctionne entre temps. Mêmes règles d'application. Une gemme donnée ne peut recevoir que des écailles de protection d'un même type, mais grâce à Individualité, plusieurs gemmes d'une même amulette peuvent offrir des protections différentes. La pose de chaque écaille de protection coûte un point de seuil.</p>\n<p> </p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-6","portée":"","caseTMR":"cite","caseTMRspeciale":"","ptreve":"4","portee":"","isrituel":true,"coutseuil":1,"xp":0,"bonuscase":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"mh9JjaKckzz1eAoe","name":"Écailles de Protection contre la maladie*","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.mh9JjaKckzz1eAoe"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Chaque écaille de protection confère un bons de +1 au jet de CONSTITUTION contre toutes les maladies, augmentant ainsi les chances de leur résister.</p>\n<p>Une amulette peut avoir n'importe quelle forme, mais ne fonctionne que si elle est en contact avec la peau nue de son possesseur. Si c'est le cas, elle fonctionne spontanément en face du danger pour lequel elle est conçue, même si le possesseur n'a aucune idée de son pouvoir. Pour fonctionner, l'amulette a besoin de points de rêve actifs. Ces points doivent être des points de rêve conférés par le rituel d'Enchantement en plus des points inertes. Autrement dit, voulant fabriquer une amulette, le haut-rêvant ne s'arrête pas d'enchanter quand il atteint un nombre de points de rêve égal à l'inertie totale de l'objet, mais continue à en rajouter. Le nombre maximum de points actifs qu'une amulette puisse posséder est égal à 7 fois l'enchantabilité de sa gemme ; et, comme pour les écailles d'efficacité, le nombre d'écailles de protection qu'elle puisse posséder est égal à l'enchantabilité de celle-ci avec un maximum de 7. Des amulettes plus puissantes ne pourraient être obtenues que par de spécifiques Grandes Écailles de Narcos.</p>\n<p><em>Soit une gemme de taille 6 et de pureté 5, ayant donc une inertie de 2 et une enchantabilité de 4. Elle peut posséder jusqu'à 4 écailles de protection (=enchantabilité) et un maximum de 28 points de rêve actifs (7 x 4 = 28).</em></p>\n<p>Chaque fois qu'une amulette de protection fonctionne, elle dépense un de ses points de rêve actifs quel que soit le nombre d'écailles. Le possesseur, lui, n'en dépense qu'un par heure, quel que soit le nombre de fonctionnements de l'amulette au cours de cette heure. Quand une amulette n'a plus de points actifs, elle cesse de fonctionner. On ne peut lui en redonner que par le rituel de Restauration. Les écailles de protection peuvent être posées progressivement, comme celles d'efficacité, même si l'amulette fonctionne entre temps. Mêmes règles d'application. Une gemme donnée ne peut recevoir que des écailles de protection d'un même type, mais grâce à Individualité, plusieurs gemmes d'une même amulette peuvent offrir des protections différentes. La pose de chaque écaille de protection coûte un point de seuil.</p>\n<p> </p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-6","portée":"","caseTMR":"cite","caseTMRspeciale":"","ptreve":"4","xp":0,"bonuscase":"","isrituel":true,"coutseuil":1,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638601,"modifiedTime":1667260043441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"mzAV6EdQlGkVkWEN","name":"Écailles de Protection contre les lames *","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Chaque écaille de protection diminue de 1 point le jet d'encaissement de tout dommage dû à une arme de mêlée (dague, épée, hache, lance, masse, fléeau, arme d'hast), mais ni les projectiles ni les dommages au corps à corps. La protection est en plus de l'armure véritable du personnage. </p>\n<p>Une amulette peut avoir n'importe quelle forme, mais ne fonctionne que si elle est en contact avec la peau nue de son possesseur. Si c'est le cas, elle fonctionne spontanément en face du danger pour lequel elle est conçue, même si le possesseur n'a aucune idée de son pouvoir. Pour fonctionner, l'amulette a besoin de points de rêve actifs. Ces points doivent être des points de rêve conférés par le rituel d'Enchantement en plus des points inertes. Autrement dit, voulant fabriquer une amulette, le haut-rêvant ne s'arrête pas d'enchanter quand il atteint un nombre de points de rêve égal à l'inertie totale de l'objet, mais continue à en rajouter. Le nombre maximum de points actifs qu'une amulette puisse posséder est égal à 7 fois l'enchantabilité de sa gemme ; et, comme pour les écailles d'efficacité, le nombre d'écailles de protection qu'elle puisse posséder est égal à l'enchantabilité de celle-ci avec un maximum de 7. Des amulettes plus puissantes ne pourraient être obtenues que par de spécifiques Grandes Écailles de Narcos.</p>\n<p><em>Soit une gemme de taille 6 et de pureté 5, ayant donc une inertie de 2 et une enchantabilité de 4. Elle peut posséder jusqu'à 4 écailles de protection (=enchantabilité) et un maximum de 28 points de rêve actifs (7 x 4 = 28).</em></p>\n<p>Chaque fois qu'une amulette de protection fonctionne, elle dépense un de ses points de rêve actifs quel que soit le nombre d'écailles. Le possesseur, lui, n'en dépense qu'un par heure, quel que soit le nombre de fonctionnements de l'amulette au cours de cette heure. Quand une amulette n'a plus de points actifs, elle cesse de fonctionner. On ne peut lui en redonner que par le rituel de Restauration. Les écailles de protection peuvent être posées progressivement, comme celles d'efficacité, même si l'amulette fonctionne entre temps. Mêmes règles d'application. Une gemme donnée ne peut recevoir que des écailles de protection d'un même type, mais grâce à Individualité, plusieurs gemmes d'une même amulette peuvent offrir des protections différentes. La pose de chaque écaille de protection coûte un point de seuil.</p>\n<p> </p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-10","portée":"","caseTMR":"lac","caseTMRspeciale":"","ptreve":"8","portee":"","isrituel":true,"coutseuil":1,"xp":0,"bonuscase":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"mzAV6EdQlGkVkWEN","name":"Écailles de Protection contre les lames *","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.mzAV6EdQlGkVkWEN"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Chaque écaille de protection diminue de 1 point le jet d'encaissement de tout dommage dû à une arme de mêlée (dague, épée, hache, lance, masse, fléeau, arme d'hast), mais ni les projectiles ni les dommages au corps à corps. La protection est en plus de l'armure véritable du personnage. </p>\n<p>Une amulette peut avoir n'importe quelle forme, mais ne fonctionne que si elle est en contact avec la peau nue de son possesseur. Si c'est le cas, elle fonctionne spontanément en face du danger pour lequel elle est conçue, même si le possesseur n'a aucune idée de son pouvoir. Pour fonctionner, l'amulette a besoin de points de rêve actifs. Ces points doivent être des points de rêve conférés par le rituel d'Enchantement en plus des points inertes. Autrement dit, voulant fabriquer une amulette, le haut-rêvant ne s'arrête pas d'enchanter quand il atteint un nombre de points de rêve égal à l'inertie totale de l'objet, mais continue à en rajouter. Le nombre maximum de points actifs qu'une amulette puisse posséder est égal à 7 fois l'enchantabilité de sa gemme ; et, comme pour les écailles d'efficacité, le nombre d'écailles de protection qu'elle puisse posséder est égal à l'enchantabilité de celle-ci avec un maximum de 7. Des amulettes plus puissantes ne pourraient être obtenues que par de spécifiques Grandes Écailles de Narcos.</p>\n<p><em>Soit une gemme de taille 6 et de pureté 5, ayant donc une inertie de 2 et une enchantabilité de 4. Elle peut posséder jusqu'à 4 écailles de protection (=enchantabilité) et un maximum de 28 points de rêve actifs (7 x 4 = 28).</em></p>\n<p>Chaque fois qu'une amulette de protection fonctionne, elle dépense un de ses points de rêve actifs quel que soit le nombre d'écailles. Le possesseur, lui, n'en dépense qu'un par heure, quel que soit le nombre de fonctionnements de l'amulette au cours de cette heure. Quand une amulette n'a plus de points actifs, elle cesse de fonctionner. On ne peut lui en redonner que par le rituel de Restauration. Les écailles de protection peuvent être posées progressivement, comme celles d'efficacité, même si l'amulette fonctionne entre temps. Mêmes règles d'application. Une gemme donnée ne peut recevoir que des écailles de protection d'un même type, mais grâce à Individualité, plusieurs gemmes d'une même amulette peuvent offrir des protections différentes. La pose de chaque écaille de protection coûte un point de seuil.</p>\n<p> </p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-10","portée":"","caseTMR":"lac","caseTMRspeciale":"","ptreve":"8","xp":0,"bonuscase":"","isrituel":true,"coutseuil":1,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638601,"modifiedTime":1667260043441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"sEBhR48HagKNbkob","name":"Écaille d'activité *","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Le rituel d'Écaille d'Activité confère à l'objet magique le pouvoir de lancer un sort. Ce peut être un sort de zone d'Oniros, un sort d'illusion-suggestion ou d'illusion sensorielle d'Hypnos, ou un sort de Thanatos, mais ne peut en aucun cas être un rituel d'aucune des quatre voies. Ayant <em>posé</em> l'écaille d'activité sur l'objet (\"poser\" est le terme consacré à l'accomplissement des rituels d'Écaille), le Haut-Rêvant y lance le sort de son choix et l'objet devient capable de le lancer à son tour. Pratiquement, le haut-rêvant effectue toutes les opérations nécessaires au lancer d'un sort, y compris son paramétrage précis, puis le lance normalement en dépensant les points de rêve du coût. Toutefois, au lieu de cibler comme l'exige le ciblage normal du sort, il touche l'objet possédant l'écaille d'activité. En résultat, aucun effet ne se produit, mais le sort est maintenant <em>enregistré </em>dans la \"mémoire\" de la gemme. Il suffit ensuite à l'utilisateur de se concentrer mentalement sur l'effet voulu (dont il doit avoir une idée) pour que l'objet lance le sort. Il pourra le lancer indéfiniment.</p>\n<p>A la fin du round de concentration, l'utilisateur doit être capable de dépenser les points de rêve exigés par le coût du sort tel qu'il est paramétéré. S'il n'en a pas assez, il ne dépense rien, mais l'objet ne fonctionne pas. Puis cela étant fait, le sort opère au tout début du round suivant, selon le ciblage voulu par l'utilisateur, fonction de la forme de l'objet et de la façon dont il est utilisé. Pour que le sort puisse être ciblé ailleurs que sur l'utilisateur lui-même, l'objet doit avoir une forme oblongue, analogue au doigt pointé d'un haut-rêvant. Le sort enregistré dans la gemme est paramétré une fois pour toutes. Un objet lançant un sort de Sommeil de 5 rounds lancera toujours un sort de Sommeil de 5 rounds, ni plus ni moins. Un objet lançant une illusion visuelle ne lancera toujours que la même illusion au moindre détail près. La portée est celle de l'EMPATHIE du créateur de l'objet et non de l'utilisateur, et quand le sort a une durée HN, c'est également l'heure de naissance du créateur. Le seul paramétrage inutile est l'heure de naissance de la cible en prévision du jet de résistance. Quand un JR est possible, il est toujours r-8, quelle que soit la cible. S'il réussit, le sort se dissipe aussitôt sans revenir vers l'utilisateur.</p>\n<p>L'objet réussit son lancer, sans jet de dés. Lancer un sort via un objet magique n'est pas plus économique en points de rêve que de la lancer soi-même, mais évite la montée en TMR, les rencontres, et confère la certitude que le sort partira à coup sûr. L'effet d'un sort lancé par un objet peut être annulé par Annulatrion de Magie, mais pas par Annulation de ses Propres Zones ni Annulation de ses Propres Illusions.</p>\n<p>Chaque gemme d'un objet ne peut recevoir qu'une seule écaille d'activité, et la pose de cette dernière coûte un point de seuil. Une écaille d'activité ne peut enregistrer et lancer q'un seul sort. Mais un même objet peut avoir plusieurs gemmes, grâce à Individualité, chacune possédant une écaille d'activité pour lancer un sort différent.</p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-9","portée":"","caseTMR":"desolation","caseTMRspeciale":"","ptreve":"7","portee":"","isrituel":true,"coutseuil":1,"xp":0,"bonuscase":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
{"_id":"sEBhR48HagKNbkob","name":"Écaille d'activité *","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.sEBhR48HagKNbkob"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>Le rituel d'Écaille d'Activité confère à l'objet magique le pouvoir de lancer un sort. Ce peut être un sort de zone d'Oniros, un sort d'illusion-suggestion ou d'illusion sensorielle d'Hypnos, ou un sort de Thanatos, mais ne peut en aucun cas être un rituel d'aucune des quatre voies. Ayant <em>posé</em> l'écaille d'activité sur l'objet (\"poser\" est le terme consacré à l'accomplissement des rituels d'Écaille), le Haut-Rêvant y lance le sort de son choix et l'objet devient capable de le lancer à son tour. Pratiquement, le haut-rêvant effectue toutes les opérations nécessaires au lancer d'un sort, y compris son paramétrage précis, puis le lance normalement en dépensant les points de rêve du coût. Toutefois, au lieu de cibler comme l'exige le ciblage normal du sort, il touche l'objet possédant l'écaille d'activité. En résultat, aucun effet ne se produit, mais le sort est maintenant <em>enregistré </em>dans la \"mémoire\" de la gemme. Il suffit ensuite à l'utilisateur de se concentrer mentalement sur l'effet voulu (dont il doit avoir une idée) pour que l'objet lance le sort. Il pourra le lancer indéfiniment.</p>\n<p>A la fin du round de concentration, l'utilisateur doit être capable de dépenser les points de rêve exigés par le coût du sort tel qu'il est paramétéré. S'il n'en a pas assez, il ne dépense rien, mais l'objet ne fonctionne pas. Puis cela étant fait, le sort opère au tout début du round suivant, selon le ciblage voulu par l'utilisateur, fonction de la forme de l'objet et de la façon dont il est utilisé. Pour que le sort puisse être ciblé ailleurs que sur l'utilisateur lui-même, l'objet doit avoir une forme oblongue, analogue au doigt pointé d'un haut-rêvant. Le sort enregistré dans la gemme est paramétré une fois pour toutes. Un objet lançant un sort de Sommeil de 5 rounds lancera toujours un sort de Sommeil de 5 rounds, ni plus ni moins. Un objet lançant une illusion visuelle ne lancera toujours que la même illusion au moindre détail près. La portée est celle de l'EMPATHIE du créateur de l'objet et non de l'utilisateur, et quand le sort a une durée HN, c'est également l'heure de naissance du créateur. Le seul paramétrage inutile est l'heure de naissance de la cible en prévision du jet de résistance. Quand un JR est possible, il est toujours r-8, quelle que soit la cible. S'il réussit, le sort se dissipe aussitôt sans revenir vers l'utilisateur.</p>\n<p>L'objet réussit son lancer, sans jet de dés. Lancer un sort via un objet magique n'est pas plus économique en points de rêve que de la lancer soi-même, mais évite la montée en TMR, les rencontres, et confère la certitude que le sort partira à coup sûr. L'effet d'un sort lancé par un objet peut être annulé par Annulatrion de Magie, mais pas par Annulation de ses Propres Zones ni Annulation de ses Propres Illusions.</p>\n<p>Chaque gemme d'un objet ne peut recevoir qu'une seule écaille d'activité, et la pose de cette dernière coûte un point de seuil. Une écaille d'activité ne peut enregistrer et lancer q'un seul sort. Mais un même objet peut avoir plusieurs gemmes, grâce à Individualité, chacune possédant une écaille d'activité pour lancer un sort différent.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-9","portée":"","caseTMR":"desolation","caseTMRspeciale":"","ptreve":"7","xp":0,"bonuscase":"","isrituel":true,"coutseuil":1,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638601,"modifiedTime":1667260043441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"xOicgRMCUxJNmVzF","name":"Détection d'aura","permission":{"default":0,"Q2G6GTdrotKzYGUC":3},"type":"sort","data":{"description":"<p>Les rituels de Détection d’Aura peuvent indifféremment être accomplis par n’importe laquelle des quatre voies.</p>\n<p>Toutes les créatures vivantes animées (humains, humanoïdes, animaux) ont une caractéristique RÊVE. Les objets enchantés possèdent des points de rêve, de même que les produits de magie naturelle, comme certaines pierres de chance. Les entités de cauchemar, incarnées ou non, en ont également. Quelle qu’elle soit, la présence de rêve émet une aura, laquelle est détectable par Détection d’Aura. Parallèlement, toute cible d’un sort ou d’un rituel, émet une aura propre, quand bien même ladite cible ne possède pas de points de rêve (centre de zone, objet ou plante soumis à une illusion d’Hypnos). Cette aura est également détectable par Détection d’Aura.</p>\n<p>L’aura de présence de rêve se traduit par un halo bleuté constant ; l’aura résultant d’un effet magique par un halo parcouru de pulsations. Quand les deux auras sont présentes conjointement, le halo est pulsatif et d’un bleu plus foncé. On peut toujours effectuer Détection d’Aura sans aucun risque, il y a toujours une réponse. Soit une aura est perçue, constante ou pulsative, et l’on peut tenter une Lecture d’Aura pour en savoir plus ; soit aucune aura n’est perçue et il s’agit de matière inerte, sans rêve, non soumise à un sort.</p>","draconic":"oniros","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-3","portée":"","caseTMR":"sanctuaire","caseTMRspeciale":"","ptreve":"1","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp","effects":[]}
|
||||||
{"_id":"zT72qy3Xb8ye9YKb","name":"Bouilloire de Mélimnod *","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.zT72qy3Xb8ye9YKb"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[],"system":{"description":"<p>La Grande Écaille <em>Bouilloire de Mélimnod</em>, du nom d'un célèbre haut-rêvant du Second Âge, est un exemple abordable d'objet autonome. Elle doit être posée sur une bouilloire ou un petit chaudron intégralement fait d'argent, de cuivre ou d'étain, à l'exclusion de tout autre métal, d'une capacité de 2 mesures (40 centilitres). La gemme peut être incrustée dans le fond du récipient ou participer à son alliage. A la fin de l'enchantement, avant l'accomplissement de Permanence, elle doit posséder au minimum 1 point de rêve actif. (Le maximum étant comme toujours 7 fois son enchantabilité.) Puis, à la place de Maîtrise, il est obligatoire d'accomplir le rituel d'Autonomie (qui coûte 2 points de seuil). La Grande Écaille peut alors être posée. Il n'en est besoin que d'une seule.</p>\n<p>Dès que la bouilloire se retrouve pleine d'eau (2 mesures), ou d'un liquide appartenant à l'élément Eau, elle se met à chauffer spontanément et porte le liquide à ébullition ern l'espace d'un seul round. Au bout d'un second round, le liquide est réduit de moitié (une mesure). Puis la bouilloire le fait refroidir, et il se retrouve tout juste tiède au bout d'un troisième round. Il peut alors demeurer indéfiniment dans la bouilloire ou être transvasé, mais dès que la bouilloire se retrouve <em>intégralement</em> pleine, le processus recommence. Chaque chauffe lui coûte un de ses points de rêve actifs. Le rituel d'Autonomie les lui fait récupérer à raison de 3 par heure de complète non-utilisation.</p>\n<p>Il est bien entendu possible de mettre des herbes de soin dans la bouilloire avant d'y verser l'eau, de façon à obtenir une décoction en un temps record. Etant autonome, la Bouilloire de Mélimnod n'a pas être maîtrisée. La pose de la Grande Écaille coûte 1 point de seuil.</p>","descriptionmj":"","draconic":"Voie de Narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-9","portée":"","caseTMR":"special","caseTMRspeciale":"Monts Brûlants E5","ptreve":"9","xp":0,"bonuscase":"","isrituel":true,"coutseuil":1,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638601,"modifiedTime":1667260043441,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"zT72qy3Xb8ye9YKb","name":"Bouilloire de Mélimnod *","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>La Grande Écaille <em>Bouilloire de Mélimnod</em>, du nom d'un célèbre haut-rêvant du Second Âge, est un exemple abordable d'objet autonome. Elle doit être posée sur une bouilloire ou un petit chaudron intégralement fait d'argent, de cuivre ou d'étain, à l'exclusion de tout autre métal, d'une capacité de 2 mesures (40 centilitres). La gemme peut être incrustée dans le fond du récipient ou participer à son alliage. A la fin de l'enchantement, avant l'accomplissement de Permanence, elle doit posséder au minimum 1 point de rêve actif. (Le maximum étant comme toujours 7 fois son enchantabilité.) Puis, à la place de Maîtrise, il est obligatoire d'accomplir le rituel d'Autonomie (qui coûte 2 points de seuil). La Grande Écaille peut alors être posée. Il n'en est besoin que d'une seule.</p>\n<p>Dès que la bouilloire se retrouve pleine d'eau (2 mesures), ou d'un liquide appartenant à l'élément Eau, elle se met à chauffer spontanément et porte le liquide à ébullition ern l'espace d'un seul round. Au bout d'un second round, le liquide est réduit de moitié (une mesure). Puis la bouilloire le fait refroidir, et il se retrouve tout juste tiède au bout d'un troisième round. Il peut alors demeurer indéfiniment dans la bouilloire ou être transvasé, mais dès que la bouilloire se retrouve <em>intégralement</em> pleine, le processus recommence. Chaque chauffe lui coûte un de ses points de rêve actifs. Le rituel d'Autonomie les lui fait récupérer à raison de 3 par heure de complète non-utilisation.</p>\n<p>Il est bien entendu possible de mettre des herbes de soin dans la bouilloire avant d'y verser l'eau, de façon à obtenir une décoction en un temps record. Etant autonome, la Bouilloire de Mélimnod n'a pas être maîtrisée. La pose de la Grande Écaille coûte 1 point de seuil.</p>","draconic":"narcos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-9","portée":"","caseTMR":"special","caseTMRspeciale":"Monts Brûlants E5","ptreve":"9","portee":"","isrituel":true,"coutseuil":1,"xp":0,"bonuscase":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_narcos.webp","effects":[]}
|
||||||
|
File diff suppressed because one or more lines are too long
@ -1,25 +1,25 @@
|
|||||||
{"_id":"2Bf9INN5L1WSTrnf","name":"Fletrissement","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.2Bf9INN5L1WSTrnf"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Le sort de Flétrissement ne s'applique qu'aux humanoïdes et a pour effet de les flétrir et de les enlaidir. Chaque point de rêve dépensé fait baisser de 1 point l'APPARENCE de la cible et sa Beauté de 2 points. Si elle réussit son JR, standard r-8, non seulement elle n'est pas affectée, mais le haut-rêvant de Thanatos doit immédiatement réussir un JR r0 (points de rêve à zéro) ou subir en retour l'effet de son sort.</p>\n<p>Le flétrissement n'est pas définitif. Chaque jour, à lextrême fin du Château Dormant, la victime peur jouer un jet d'APPARENCE à zéro en prenant non pas son APPARENCE actuelle, mais son APPARENCE initiale. Toute réussite : regain de 1 point en APPARENCE et de 2 points de Beauté. Tout échec : pas de regain pour aujourd'hui. Dans tous les cas, ni l'APPARENCE ni la Beauté d'un personnage ne peuvent tomber en dessous de 1. Tant qu'elle n'a pas tout récupéré, la victime émet une aura de sort qui peut être lue par Lecture d'Aura et le sort peut normalement être annulé par Annulation de Magie.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Spéciale","JR":"r-8","cible":"Humanoïde","difficulte":"-8","portée":"","caseTMR":"fleuve","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843439,"modifiedTime":1667260048926,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"2Bf9INN5L1WSTrnf","name":"Fletrissement","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Le sort de Flétrissement ne s'applique qu'aux humanoïdes et a pour effet de les flétrir et de les enlaidir. Chaque point de rêve dépensé fait baisser de 1 point l'APPARENCE de la cible et sa Beauté de 2 points. Si elle réussit son JR, standard r-8, non seulement elle n'est pas affectée, mais le haut-rêvant de Thanatos doit immédiatement réussir un JR r0 (points de rêve à zéro) ou subir en retour l'effet de son sort.</p>\n<p>Le flétrissement n'est pas définitif. Chaque jour, à lextrême fin du Château Dormant, la victime peur jouer un jet d'APPARENCE à zéro en prenant non pas son APPARENCE actuelle, mais son APPARENCE initiale. Toute réussite : regain de 1 point en APPARENCE et de 2 points de Beauté. Tout échec : pas de regain pour aujourd'hui. Dans tous les cas, ni l'APPARENCE ni la Beauté d'un personnage ne peuvent tomber en dessous de 1. Tant qu'elle n'a pas tout récupéré, la victime émet une aura de sort qui peut être lue par Lecture d'Aura et le sort peut normalement être annulé par Annulation de Magie.</p>","draconic":"thanatos","duree":"Spéciale","JR":"r-8","cible":"Humanoïde","difficulte":"-8","portée":"","caseTMR":"fleuve","caseTMRspeciale":"","ptreve":"1+","portee":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"3SUbeB9OBaxbRwwy","name":"Dague de meurtre","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.3SUbeB9OBaxbRwwy"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Ayant élaboré une dague magique au moyen des rituels normaux de la voie de Narcos, le haut-rêvant peut y poser la Grande Griffe de Thanatos <em>Dague de meurtre</em>. Lors du lancer, le haut-rêvant doit paramétrer le nom d'une victime précise ou d'un type de victime, par exemple : <em>Uhn Telh</em> (nom d'un personnage unique), <em>le roi de Parissy</em> (n'importe quel personnage occupant successivement cette fonction), <em>une fille blonde</em> (toute personne correspondant à cette description). La dague peut être normale hormis la Grande Griffe, ou avoir reçu en outre des écailles d'efficacité de Narcos. Ceci fait, le haut-rêvant de Thanatos n'a plus qu'à s'arranger pour que la dague se trouve un nouveau propriétaire.</p>\n<p>Le seul fait de toucher à la dague, même à travers un gant ou une étoffe, déclenche le pouvoir de la Dague de meutre. La maîtrise de la Grande Griffe opère, coûtant 1 point de rêve au personnage (coût d'une écaille), qui doit aussi jouer un JR standard r-8. JR réussi, le personnage n'est pas affecté et peut utiliser la dague à son gré ; JR échoué, le personnage est atteint de l'équivalent d'un envoûtement de Tâche, et doit accomplir le meutre paramétré dans les plus brefs délais. Parallèlement, le personnage fait tout pour protéger la dague dont il se croit le possesseur (alors que c'est l'inverse). Dès que le meutre est accompli, le meurtrier joue un second JR r-8. Réussi, il laisse tomber la dague et s'en détourne horrifié ; échoué, il la retourne contre son propre sein et se suicide. Cela dit, et dans le cas où la victime paramétrée n'est pas une personne unique, la dague est prête à se trouver une nouvelle main pour continuer son oeuvre de mort.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Permanente","JR":"r-8","cible":"","difficulte":"-13","portée":"","caseTMR":"desolation","caseTMRspeciale":"Désolation de Sel G9","ptreve":"13","xp":0,"bonuscase":"","isrituel":true,"coutseuil":2,"portee":""},"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843440,"modifiedTime":1667260048926,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"3SUbeB9OBaxbRwwy","name":"Dague de meurtre","permission **":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Ayant élaboré une dague magique au moyen des rituels normaux de la voie de Narcos, le haut-rêvant peut y poser la Grande Griffe de Thanatos <em>Dague de meurtre</em>. Lors du lancer, le haut-rêvant doit paramétrer le nom d'une victime précise ou d'un type de victime, par exemple : <em>Uhn Telh</em> (nom d'un personnage unique), <em>le roi de Parissy</em> (n'importe quel personnage occupant successivement cette fonction), <em>une fille blonde</em> (toute personne correspondant à cette description). La dague peut être normale hormis la Grande Griffe, ou avoir reçu en outre des écailles d'efficacité de Narcos. Ceci fait, le haut-rêvant de Thanatos n'a plus qu'à s'arranger pour que la dague se trouve un nouveau propriétaire.</p>\n<p>Le seul fait de toucher à la dague, même à travers un gant ou une étoffe, déclenche le pouvoir de la Dague de meutre. La maîtrise de la Grande Griffe opère, coûtant 1 point de rêve au personnage (coût d'une écaille), qui doit aussi jouer un JR standard r-8. JR réussi, le personnage n'est pas affecté et peut utiliser la dague à son gré ; JR échoué, le personnage est atteint de l'équivalent d'un envoûtement de Tâche, et doit accomplir le meutre paramétré dans les plus brefs délais. Parallèlement, le personnage fait tout pour protéger la dague dont il se croit le possesseur (alors que c'est l'inverse). Dès que le meutre est accompli, le meurtrier joue un second JR r-8. Réussi, il laisse tomber la dague et s'en détourne horrifié ; échoué, il la retourne contre son propre sein et se suicide. Cela dit, et dans le cas où la victime paramétrée n'est pas une personne unique, la dague est prête à se trouver une nouvelle main pour continuer son oeuvre de mort.</p>","draconic":"thanatos","duree":"Permanente","JR":"r-8","cible":"","difficulte":"-13","portée":"","caseTMR":"desolation","caseTMRspeciale":"Désolation de Sel G9","ptreve":"13","portee":"","isrituel":true,"coutseuil":2},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"5U7KXTsxph9wmbXH","name":"Invocation des entités de cauchemar non incarnées","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.5U7KXTsxph9wmbXH"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>INVOCATION D'UN DÉSESPOIR (Désolation) R-7 r7</p>\n<p>INVOCATION D'UNE HAINE (Marais) R-7 r7</p>\n<p>INVOCATION D'UNE PEUR (Gouffre) R-7 r7</p>\n<p>Ayant ciblé l'effet de son rituel sur un objet entièrement noir, le haut-rêvant de Thanatos invoque une entité de cauchemar non incarnée (ECNI) à se présenter devant lui. L'entité n'est pas créée magiquement, le rituel ne fait qu'appeler l'entité l aplus proche, qui se met aussitôt en route pour se présenter devant le haut-rêvant. Si, par rapport au scénario, on sait où se trouve l'entité la plus proche, il suffit de calculer le temps mis pour venir, sachant qu'elle parcourt 6 m par round. Dans le cas contraire, on la suppose arriver au bout de 1d7 heures. Sur son chemin vers le haut-rêvant, elle n'attaque personne, même si on lui barre le chemin, elle se contente de passer. Puis, dès qu'elle se retrouve en présence de son invocateur, elle l'attaque, cherchant à le posséder. Si ce dernier la combat par Thanatos et sort vainqueur, il peut alors la contrôler. A moins qu'on ne sache spécifiquement le nombre de points de rêve de l'entité la plus proche, les entités invoquées peuvent avoir de 4 à 24 points de rêve (4d6).</p>\n<p> </p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Spéciale","JR":"Aucun","cible":"Un objet noir","difficulte":"","portée":"","caseTMR":"special","caseTMRspeciale":"","ptreve":"","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843440,"modifiedTime":1667260048927,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"5U7KXTsxph9wmbXH","name":"Invocation des entités de cauchemar non incarnées","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>INVOCATION D'UN DÉSESPOIR (Désolation) R-7 r7</p>\n<p>INVOCATION D'UNE HAINE (Marais) R-7 r7</p>\n<p>INVOCATION D'UNE PEUR (Gouffre) R-7 r7</p>\n<p>Ayant ciblé l'effet de son rituel sur un objet entièrement noir, le haut-rêvant de Thanatos invoque une entité de cauchemar non incarnée (ECNI) à se présenter devant lui. L'entité n'est pas créée magiquement, le rituel ne fait qu'appeler l'entité l aplus proche, qui se met aussitôt en route pour se présenter devant le haut-rêvant. Si, par rapport au scénario, on sait où se trouve l'entité la plus proche, il suffit de calculer le temps mis pour venir, sachant qu'elle parcourt 6 m par round. Dans le cas contraire, on la suppose arriver au bout de 1d7 heures. Sur son chemin vers le haut-rêvant, elle n'attaque personne, même si on lui barre le chemin, elle se contente de passer. Puis, dès qu'elle se retrouve en présence de son invocateur, elle l'attaque, cherchant à le posséder. Si ce dernier la combat par Thanatos et sort vainqueur, il peut alors la contrôler. A moins qu'on ne sache spécifiquement le nombre de points de rêve de l'entité la plus proche, les entités invoquées peuvent avoir de 4 à 24 points de rêve (4d6).</p>\n<p> </p>","draconic":"thanatos","duree":"Spéciale","JR":"Aucun","cible":"Un objet noir","difficulte":"","portée":"","caseTMR":"special","caseTMRspeciale":"","ptreve":"","portee":"","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"8hCVBWM48GNb8e6P","name":"Faire parler un crâne","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.8hCVBWM48GNb8e6P"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Ce rituel permet de faire parler un crâne d'humanoïde. Le haut-rêvant de Thanatos doit le toucher et lui poser des questions, le crâne ne répondant qu'aux questions posées. Il peut parler de tout ce dont il a été témoin, aussi bien durant sa vie que depuis qu'il est mort, c'est-à-dire de ce dont, en tant qu'objet abandonné quelque part, il a pu être témoin. La durée de communication est de 1 round par point de rêve dépensé.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Selon r dépensé","JR":"Aucun","cible":"Un crâne","difficulte":"-6","portée":"","caseTMR":"desert","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843440,"modifiedTime":1667260048926,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"8hCVBWM48GNb8e6P","name":"Faire parler un crâne","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Ce rituel permet de faire parler un crâne d'humanoïde. Le haut-rêvant de Thanatos doit le toucher et lui poser des questions, le crâne ne répondant qu'aux questions posées. Il peut parler de tout ce dont il a été témoin, aussi bien durant sa vie que depuis qu'il est mort, c'est-à-dire de ce dont, en tant qu'objet abandonné quelque part, il a pu être témoin. La durée de communication est de 1 round par point de rêve dépensé.</p>","draconic":"thanatos","duree":"Selon r dépensé","JR":"Aucun","cible":"Un crâne","difficulte":"-6","portée":"","caseTMR":"desert","caseTMRspeciale":"","ptreve":"1+","portee":"","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"name":"Lecture d'aura","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.Y4r9kTN2brWC2N0n"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp","effects":[],"system":{"description":"<p>Les rituels de Lecture d’Aura peuvent indifféremment être accomplis par n’importe laquelle des quatre voies.</p>\n<p>Ce rituel permet d’approfondir les informations fournies par Détection d’Aura. Pratiquer Lecture d’Aura quand il n’y a pas d’aura revient à demander une magie impossible et crée immédiatement une déchirure du rêve.</p>\n<p>Lecture d’Aura est effectuée en plusieurs étapes, toutes étant de difficulté R-3 et coûtant 3 points de rêve. La première a toujours lieu dans un sanctuaire et ne fait que révéler dans quel(s) autre(s) genre(s) de case(s) le haut-rêvant doit se rendre pour continuer sa lecture. Là, il apprend quel genre de magie a été produit ou à quel type de rêve il a affaire, de même que les cases spécifiques concernées. Enfin dans les cases spécifiques, le haut-rêvant peut apprendre la force du rêve ou de la magie en cours, c’est-à-dire pratiquement la difficulté et le nombre de points de rêve impliqués, information indispensable dans l’optique d’une annulation de magie.</p>\n<p>Lecture d’Aura révèle également la couleur de l’aura (fixe ou pulsative) comme Détection d’Aura. Pour les créatures vivantes, on peut donc sauter l’étape de Détection d’Aura et commencer directement par la lecture, puisqu’on est sûr de trouver une aura. Dans les autres cas, il est plus prudent de commencer par la détection si, en l’absence finale d’une aura, on ne veut pas créer de magie impossible. Effectuée sur une créature non soumise à un effet magique ni sous l’emprise d’une entité, Lecture d’Aura indique toujours le Fleuve. Là, dans n’importe quelle case du Fleuve, le haut-rêvant se contente d’apprendre qu’il a affaire à une créature vivante et douée de rêve.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-3","portée":"","caseTMR":"special","caseTMRspeciale":"Sanctuaire / variable","ptreve":"3","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638600,"modifiedTime":1667260048927,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"AYmxbu3HzeNU9l2A","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
{"_id":"B7gtpMz81LZIv450","name":"Maladie","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Quand la victime est entièrement possédée de corps, le haut-rêvant de Thanatos peut commencer l'envoûtement de Maladie. Chaque ensemble de 5 points de rêve dépensés (5r), fait perdre 1 point de vie à la victime. Dès qu'elle dépasse son seuil négatif, elle meurt. La maladie semble être une maladie de langueur, une inexplicable faiblesse. Aucune médecine, aucune herbe ne parvient à la soigner, pas même une potion enchantée. Annuler la possession brise en même temps l'envoûtement de Maladie, et la victime recouvre instantanément tous ses points de vie.</p>","draconic":"thanatos","duree":"Illimitée","JR":"Aucun","cible":"Relique","difficulte":"-11","portée":"","caseTMR":"desolation","caseTMRspeciale":"","ptreve":"5+","portee":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"B7gtpMz81LZIv450","name":"Maladie","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.B7gtpMz81LZIv450"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Quand la victime est entièrement possédée de corps, le haut-rêvant de Thanatos peut commencer l'envoûtement de Maladie. Chaque ensemble de 5 points de rêve dépensés (5r), fait perdre 1 point de vie à la victime. Dès qu'elle dépasse son seuil négatif, elle meurt. La maladie semble être une maladie de langueur, une inexplicable faiblesse. Aucune médecine, aucune herbe ne parvient à la soigner, pas même une potion enchantée. Annuler la possession brise en même temps l'envoûtement de Maladie, et la victime recouvre instantanément tous ses points de vie.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Illimitée","JR":"Aucun","cible":"Relique","difficulte":"-11","portée":"","caseTMR":"desolation","caseTMRspeciale":"","ptreve":"5+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843440,"modifiedTime":1667260048927,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"ChIxJ7jOvpJgctMz","name":"Interdiction","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Quand la victime est entièrement possédée d'esprit, le haut-rêvant de Thanatos peut lancer sur elle un interdit, et la victime ne pourra en aucun cas contrevenir à cette interdiction. Cette dernière doit pouvoir être obéie par la VOLONTÉ normale de la victime : l'interdiction de vivre ou de respirer est impossible. L'interdiction doit être formulée très exactement ; en cas de doute sur son interprétation, c'est au gardien des rêves de statuer. L'interdiction ne peut comporter qu'un seul verbe, à l'impératif, et par définition à la forme négative :<em> ne fais pas</em>. Il ne peut comporter qu'un seul complément d'objet direct ou indirect, et ce dernier ne prut avoir qu'un seul qualificatif ou autre complément. <em>Exemples : n'ouvre pas les yeux, ne prend pas tes armes, ne parle à personne, ne touche pas à la pierre noire, ne préviens pas les gardes du palais, etc.</em> La contrainte de l'interdiction dure jusqu'à la fin de l'heure de naissnace de la vitime. Le haut-rêvant peut renouveler l'interdiction de jour en jour ou en apporter une nouvelle, mais ne peut pas en faire coexister deux simultanément. Annuler la possession brise en même temps l'envoûtement d'Interdiction, et la victime recouvre instantanément toute sa liberté.</p>","draconic":"thanatos","duree":"HN de la victime","JR":"Aucun","cible":"Relique","difficulte":"-7","portée":"","caseTMR":"desert","caseTMRspeciale":"","ptreve":"7","portee":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"ChIxJ7jOvpJgctMz","name":"Interdiction","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.ChIxJ7jOvpJgctMz"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Quand la victime est entièrement possédée d'esprit, le haut-rêvant de Thanatos peut lancer sur elle un interdit, et la victime ne pourra en aucun cas contrevenir à cette interdiction. Cette dernière doit pouvoir être obéie par la VOLONTÉ normale de la victime : l'interdiction de vivre ou de respirer est impossible. L'interdiction doit être formulée très exactement ; en cas de doute sur son interprétation, c'est au gardien des rêves de statuer. L'interdiction ne peut comporter qu'un seul verbe, à l'impératif, et par définition à la forme négative :<em> ne fais pas</em>. Il ne peut comporter qu'un seul complément d'objet direct ou indirect, et ce dernier ne prut avoir qu'un seul qualificatif ou autre complément. <em>Exemples : n'ouvre pas les yeux, ne prend pas tes armes, ne parle à personne, ne touche pas à la pierre noire, ne préviens pas les gardes du palais, etc.</em> La contrainte de l'interdiction dure jusqu'à la fin de l'heure de naissnace de la vitime. Le haut-rêvant peut renouveler l'interdiction de jour en jour ou en apporter une nouvelle, mais ne peut pas en faire coexister deux simultanément. Annuler la possession brise en même temps l'envoûtement d'Interdiction, et la victime recouvre instantanément toute sa liberté.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"HN de la victime","JR":"Aucun","cible":"Relique","difficulte":"-7","portée":"","caseTMR":"desert","caseTMRspeciale":"","ptreve":"7","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843440,"modifiedTime":1667260048927,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"H4K9R6zq7nyC9Qkf","name":"Cauchemar","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Quand la victime est entièrement possédée d'esprit, le haut-rêvant de Thanataos peut peupler de cauchemars ses rêves accomplis dans les Basses Terres du Rêve. Les cauchemars durent depuis le moment où est lancé le sort d'envoûtement jusqu'à l'heure du Châteu Dormant. Le sommeil de la victime en est à tel point empoisonné qu'elle ne récupère qu'une case de fatigue par heure au lieu d'un segment. Si la règle du Moral est utilisée, la victime en perd automatiquement 2 points au réveil au lieu de jouer normalement le jet de Moral journalier. Si elle est déjà à -3, elle prend 2 points de dissolution. Annuler la possession brise en même temps l'envoûtement de Cauchemar, et la victime recouvre instantanément son sommeil normal.</p>","draconic":"thanatos","duree":"Fin de la nuit en cours","JR":"Aucun","cible":"Relique","difficulte":"-5","portée":"","caseTMR":"monts","caseTMRspeciale":"","ptreve":"5","portee":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"name":"Détection d'aura","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-narcos.xOicgRMCUxJNmVzF"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp","effects":[],"system":{"description":"<p>Les rituels de Détection d’Aura peuvent indifféremment être accomplis par n’importe laquelle des quatre voies.</p>\n<p>Toutes les créatures vivantes animées (humains, humanoïdes, animaux) ont une caractéristique RÊVE. Les objets enchantés possèdent des points de rêve, de même que les produits de magie naturelle, comme certaines pierres de chance. Les entités de cauchemar, incarnées ou non, en ont également. Quelle qu’elle soit, la présence de rêve émet une aura, laquelle est détectable par Détection d’Aura. Parallèlement, toute cible d’un sort ou d’un rituel, émet une aura propre, quand bien même ladite cible ne possède pas de points de rêve (centre de zone, objet ou plante soumis à une illusion d’Hypnos). Cette aura est également détectable par Détection d’Aura.</p>\n<p>L’aura de présence de rêve se traduit par un halo bleuté constant ; l’aura résultant d’un effet magique par un halo parcouru de pulsations. Quand les deux auras sont présentes conjointement, le halo est pulsatif et d’un bleu plus foncé. On peut toujours effectuer Détection d’Aura sans aucun risque, il y a toujours une réponse. Soit une aura est perçue, constante ou pulsative, et l’on peut tenter une Lecture d’Aura pour en savoir plus ; soit aucune aura n’est perçue et il s’agit de matière inerte, sans rêve, non soumise à un sort.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-3","portée":"","caseTMR":"sanctuaire","caseTMRspeciale":"","ptreve":"1","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259638601,"modifiedTime":1667260048926,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"},"_id":"GHsNBFq6uFOzAwK5","folder":null,"sort":0,"ownership":{"default":0,"Hp9ImM4o9YRTSdfu":3}}
|
{"_id":"IfVWI1LIk2PcT89J","name":"Autométamorphose en bête","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Par l'usage de ce sort, le haut-rêvant de Thanatos se transforme lui-même en l'animal de son choix. La métamorphose est instantanée, et correspond dans son résultat à une métamorphose de corps uniquement, et non d'esprit. Le haut-rêvant peut choisir n'importe quelle forme animale d'une TAILLE maximale égale à la sienne, et minimale de 1 (souris). Seul son corps est affecté, pas ses vêtements ni son équipement. Il peut continuer à monter en TMR et lancer des sorts sous cette forme.</p>\n<p>Ses caractéristiques physiques deviennent celles de l'animal choisi, c'est à dire TAILLE, CONSTITUTION, FORCE, PERCEPTION. Les seules qu'il conserve sont INTELLECT, VOLONTÉ, RÊVE. Son Endurance et ses points de vie sont calculés d'après les caractéristiques de l'animal et selon les règles de cacul de ces dernières (Endurance = Vie + CONSTITUTION). Les notions d'Apparence et de Chance disparaissent. Dextérite et Agilité (ou leur équivalent) sont directement inclues dans les compétences de l'animal. Le haut-rêvant n'acquiert que les caractéristiques physiques de l'animal, pas ses caractéristiques spéciales ou magiques. Ainsi un haut-rêvant de Thanatos métamorphosé en sirène, ne pourra pas obtenir les illusions dont ces créatures sont capables, ni d'avoir un chant irrésistible. Transformé en oiseau-oracle, il pourra toujours parler, mais son discours ne reflétera pas automatiquement la vérité. Pour déterminer les caractéristiques physiques des animaux, se fonder sur les modèles présentés dans le Livre III.</p>\n<p>La caractéristique VOLONTÉ reste la sienne. Mais toutes les heures d'autométamorphose et chaque fois que survient un incident pouvant faire réagir l'instinct de l'animal (proie ou prédateur, partenaire de l'autre sexe, etc), tirer un jet de VOLONTÉ à zéro.</p>\n<p><em>Toute réussite. </em>Le haut-rêvant garde ou reprend le contrôle de l'animal et à la prochaine occasion, le jet de VOLONTÉ sera à nouveau à zéro.</p>\n<p>Echec et Ech.P. L'instinct de l'animal l'emporte et la VOLONTÉ du haut-rêvant s'obscurcit. En termes de jeu, l'animal passe sous le contrôle du gardien des rêves pour la durée du round. Au round suivant, rejouer VOLONTÉ à -1, et ainsi de suite de round en round, avec des ajustements cumulatifs de -1 jusqu'à la réussite ou l'échec total.</p>\n<p>Ech.T. La VOLONTÉ du haut-rêvant est définitivement annihilée. A partir de cet instant, l'animal passe entièrement sous le contrôle du gardien des rêves jusqu'à la fin de la durée de l'autométamorphose. Redevenu humain, le haut-rêvant de Thanatos n'a aucun souvenir de ce qu'il a vécu sous forme animale. Qui plus est, son esprit est toujours celui de l'animal, exactement comme s'il était envoûté de métamorphose d'esprit. Il doit alors jouer un jet de VOLONTÉ toutes les heures. Le premier jet à une difficulté de zéro, mais chaque nouvel échec s'incrémente d'un maus de -1. Dès qu'une réussite survient, le haut-rêvant recouvre son mental. Dès qu'un échec total survient, son esprit est définitivement animal, comme s'il avait été envoûté et métamorphosé d'esprit. Seule une Annulation de Magie accomplie par un tiers pourra le délivrer.</p>\n<p>Les points de vie perdus et les blessures sont conservés dans les deux sens, c'est-à-dire au passage de l'humain à l'animal et inversement. Lors du passage à l'état animal, soustraire les points d'endurance dus aux blessures existantes sur l'humain en retirant les jets comme si ces blessures venaient tout juste d'être reçues. Les blessures elles-mêmes figureront sur l'animal. Lors du retour à l'humain, l'endurance est celles qu'il restait à l'animal (jusqu'à concurrence de l'endurance de l'humain), de même que ses éventuelles blessures.</p>","draconic":"thanatos","duree":"HN","JR":"Aucun","cible":"Soi-même","difficulte":"-7","portée":"","caseTMR":"foret","caseTMRspeciale":"","ptreve":"7","portee":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"H4K9R6zq7nyC9Qkf","name":"Cauchemar","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.H4K9R6zq7nyC9Qkf"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Quand la victime est entièrement possédée d'esprit, le haut-rêvant de Thanataos peut peupler de cauchemars ses rêves accomplis dans les Basses Terres du Rêve. Les cauchemars durent depuis le moment où est lancé le sort d'envoûtement jusqu'à l'heure du Châteu Dormant. Le sommeil de la victime en est à tel point empoisonné qu'elle ne récupère qu'une case de fatigue par heure au lieu d'un segment. Si la règle du Moral est utilisée, la victime en perd automatiquement 2 points au réveil au lieu de jouer normalement le jet de Moral journalier. Si elle est déjà à -3, elle prend 2 points de dissolution. Annuler la possession brise en même temps l'envoûtement de Cauchemar, et la victime recouvre instantanément son sommeil normal.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Fin de la nuit en cours","JR":"Aucun","cible":"Relique","difficulte":"-5","portée":"","caseTMR":"monts","caseTMRspeciale":"","ptreve":"5","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843441,"modifiedTime":1667260048926,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"Ix0zKfupAloZoUCK","name":"Faire parler un mort","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Ce rituel permet de faire parler un cadavre dont il reste au moins la tête, peu importe son degré de décomposition. Le haut-rêvant de Thanatos doit le toucher et lui poser des questions, le mort ne répondant qu'aux questions posées. Les seuls souvenirs qu'il peut communiquer sont ceux de la dernière heure de sa vie. La durée de la communication est de 1 round par point de rêve dépensé.</p>","draconic":"thanatos","duree":"Selon r dépensé","JR":"Aucun","cible":"Un cadavre","difficulte":"-4","portée":"","caseTMR":"pont","caseTMRspeciale":"","ptreve":"1+","portee":"","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"IfVWI1LIk2PcT89J","name":"Autométamorphose en bête","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.IfVWI1LIk2PcT89J"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Par l'usage de ce sort, le haut-rêvant de Thanatos se transforme lui-même en l'animal de son choix. La métamorphose est instantanée, et correspond dans son résultat à une métamorphose de corps uniquement, et non d'esprit. Le haut-rêvant peut choisir n'importe quelle forme animale d'une TAILLE maximale égale à la sienne, et minimale de 1 (souris). Seul son corps est affecté, pas ses vêtements ni son équipement. Il peut continuer à monter en TMR et lancer des sorts sous cette forme.</p>\n<p>Ses caractéristiques physiques deviennent celles de l'animal choisi, c'est à dire TAILLE, CONSTITUTION, FORCE, PERCEPTION. Les seules qu'il conserve sont INTELLECT, VOLONTÉ, RÊVE. Son Endurance et ses points de vie sont calculés d'après les caractéristiques de l'animal et selon les règles de cacul de ces dernières (Endurance = Vie + CONSTITUTION). Les notions d'Apparence et de Chance disparaissent. Dextérite et Agilité (ou leur équivalent) sont directement inclues dans les compétences de l'animal. Le haut-rêvant n'acquiert que les caractéristiques physiques de l'animal, pas ses caractéristiques spéciales ou magiques. Ainsi un haut-rêvant de Thanatos métamorphosé en sirène, ne pourra pas obtenir les illusions dont ces créatures sont capables, ni d'avoir un chant irrésistible. Transformé en oiseau-oracle, il pourra toujours parler, mais son discours ne reflétera pas automatiquement la vérité. Pour déterminer les caractéristiques physiques des animaux, se fonder sur les modèles présentés dans le Livre III.</p>\n<p>La caractéristique VOLONTÉ reste la sienne. Mais toutes les heures d'autométamorphose et chaque fois que survient un incident pouvant faire réagir l'instinct de l'animal (proie ou prédateur, partenaire de l'autre sexe, etc), tirer un jet de VOLONTÉ à zéro.</p>\n<p><em>Toute réussite. </em>Le haut-rêvant garde ou reprend le contrôle de l'animal et à la prochaine occasion, le jet de VOLONTÉ sera à nouveau à zéro.</p>\n<p>Echec et Ech.P. L'instinct de l'animal l'emporte et la VOLONTÉ du haut-rêvant s'obscurcit. En termes de jeu, l'animal passe sous le contrôle du gardien des rêves pour la durée du round. Au round suivant, rejouer VOLONTÉ à -1, et ainsi de suite de round en round, avec des ajustements cumulatifs de -1 jusqu'à la réussite ou l'échec total.</p>\n<p>Ech.T. La VOLONTÉ du haut-rêvant est définitivement annihilée. A partir de cet instant, l'animal passe entièrement sous le contrôle du gardien des rêves jusqu'à la fin de la durée de l'autométamorphose. Redevenu humain, le haut-rêvant de Thanatos n'a aucun souvenir de ce qu'il a vécu sous forme animale. Qui plus est, son esprit est toujours celui de l'animal, exactement comme s'il était envoûté de métamorphose d'esprit. Il doit alors jouer un jet de VOLONTÉ toutes les heures. Le premier jet à une difficulté de zéro, mais chaque nouvel échec s'incrémente d'un maus de -1. Dès qu'une réussite survient, le haut-rêvant recouvre son mental. Dès qu'un échec total survient, son esprit est définitivement animal, comme s'il avait été envoûté et métamorphosé d'esprit. Seule une Annulation de Magie accomplie par un tiers pourra le délivrer.</p>\n<p>Les points de vie perdus et les blessures sont conservés dans les deux sens, c'est-à-dire au passage de l'humain à l'animal et inversement. Lors du passage à l'état animal, soustraire les points d'endurance dus aux blessures existantes sur l'humain en retirant les jets comme si ces blessures venaient tout juste d'être reçues. Les blessures elles-mêmes figureront sur l'animal. Lors du retour à l'humain, l'endurance est celles qu'il restait à l'animal (jusqu'à concurrence de l'endurance de l'humain), de même que ses éventuelles blessures.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"HN","JR":"Aucun","cible":"Soi-même","difficulte":"-7","portée":"","caseTMR":"foret","caseTMRspeciale":"","ptreve":"7","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843441,"modifiedTime":1667260048926,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"NxgEqpaYPeNsUmhF","name":"Thanatoeil","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Le Thanatoeil, parfois simplement appelé mauvais oeil, est un sort de malédiction qui ne se lance que sur des humanoïdes. Si la victime manque son JR standard r-8, sa prochaine action impliquant Mêlée, Tir, Lancer, Dérobée, FORCE, DEXTÉRITÉ ou AGILITÉ, obtiendra automatiquement un échec total. Par ailleurs, et cela jusqu'à la fin de sa prochaine heure de naissance, tous ses jets de Chance seront ajustés d'un malus de -1 par point de rêve dépensé. Si le JR r-8 réussit, non seulement la victime n'est pas affectée, mais le haut-rêvant doit quant à lui réussir un JR r0 (points de rêve à zéro) ou subir en retour l'effet de son sort. Lecture d'Aura donne une réponse affirmative sur une personne victime d'un Thanatoeil, et ce dernier peut être annulé selon les règles normales.</p>","draconic":"thanatos","duree":"HN de la victime","JR":"r-8","cible":"Humanoïde","difficulte":"-5","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"1+","portee":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"Ix0zKfupAloZoUCK","name":"Faire parler un mort","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.Ix0zKfupAloZoUCK"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Ce rituel permet de faire parler un cadavre dont il reste au moins la tête, peu importe son degré de décomposition. Le haut-rêvant de Thanatos doit le toucher et lui poser des questions, le mort ne répondant qu'aux questions posées. Les seuls souvenirs qu'il peut communiquer sont ceux de la dernière heure de sa vie. La durée de la communication est de 1 round par point de rêve dépensé.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Selon r dépensé","JR":"Aucun","cible":"Un cadavre","difficulte":"-4","portée":"","caseTMR":"pont","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843441,"modifiedTime":1667260048926,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"O1QllxIvIkWxntmO","name":"Animer un squelette","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>En invoquant les forces du cauchemar à venir hanter un corps mort, le haut-rêvant de Thanatos crée un hideux simulacre de vie. Sous l'effet du rituel, le cadavre se décompose à vue d'oeil, se dépouillant de toute chair, jusqu'à ce qu'il n'en reste plus que les os, magiquement liés. Le squelette se redresse alors en position verticale, capable de se déplacer sur ses jambes en une parodie de vie réelle, utilisant se smains griffues pour attaquer. Ainsi créé, le squelette est en tout point semblable à l'entité de cauchemar incarnée du même nom, tant au niveau de ses caractéristiques que de ses compétences (voir livre III, page 225). Sa caractéristique TAILLE est celle du cadavre utilisé, sa caractéristique RÊVE est égale au nombre de points de rêve dépensés par le haut-rêvant, sachant que comme pour les zombis, et contrairement aux entités de cauchemar incarnées qui peuvent dépasser cette limite, la caractéristique RÊVE d'un squelette invoqué ne peut jamais dépasser sa caractéristique TAILLE. Sa hideur est telle que quiconque l'aperçoit doit réussir un jet de VOLONTÉ à -3 ou être en demi-surprise jusqu'à la fin du round suivant.</p>\n<p>Un squelette invoqué est aux ordres de son invocateur et n'agit qu'aux ordres reçus. Pour donner un nouvel ordre à son squelette, le haut-rêvant de Thanatos doit s'en trouver à une portée maximale égale à E1. A la mort de son invocateur, le squelette n'est pas détruit, mais devient une entité sauvage, se comportant librement comme l'entitéde cauchemar incarnée du même nom.</p>","draconic":"thanatos","duree":"Permanente","JR":"Aucun","cible":"Un cadavre","difficulte":"-9","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"1+","portee":"","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"NxgEqpaYPeNsUmhF","name":"Thanatoeil","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.NxgEqpaYPeNsUmhF"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Le Thanatoeil, parfois simplement appelé mauvais oeil, est un sort de malédiction qui ne se lance que sur des humanoïdes. Si la victime manque son JR standard r-8, sa prochaine action impliquant Mêlée, Tir, Lancer, Dérobée, FORCE, DEXTÉRITÉ ou AGILITÉ, obtiendra automatiquement un échec total. Par ailleurs, et cela jusqu'à la fin de sa prochaine heure de naissance, tous ses jets de Chance seront ajustés d'un malus de -1 par point de rêve dépensé. Si le JR r-8 réussit, non seulement la victime n'est pas affectée, mais le haut-rêvant doit quant à lui réussir un JR r0 (points de rêve à zéro) ou subir en retour l'effet de son sort. Lecture d'Aura donne une réponse affirmative sur une personne victime d'un Thanatoeil, et ce dernier peut être annulé selon les règles normales.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"HN de la victime","JR":"r-8","cible":"Humanoïde","difficulte":"-5","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843441,"modifiedTime":1667260048930,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"W0JXIoChz3IXuaCc","name":"Putrescence","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>L'effet de Putrescence ne peut être ciblé que sur un objet. L'effet est un vieilllissement instantané de plusieurs années, supposé s'être accompli dans les pires concditions, avec pour résultat un délabrement, une putrescence de l'objet. Le vieillissement est de 10 ans par point de rêve dépensé.</p>\n<p>Dans tous les cas, c'est au gardien des rêves de juger de l'état final de l'objet en se souvenant que les conditions de vieillissement sont censées avoir été très mauvaises : humidité, moisissure, chaud et froid, etc. Ainsi dix ans seront suffisants pour venir à bout du tissu et du papier, vingt ans pour du parchemin ou du cuir souple, trente pour du cuir épais et du bois léger. Quarante ans et plus auront presque entièrement dévoré de rouille le métal ferreux et corrompu le bois épais, tout dépendant de leur qualité initiale. Noter par contre que verre et céramique sont pratiquement imprutescibles. La putrescence étant instantanée et définitive, l'objet altéré ne dispense aucune aura. </p>","draconic":"thanatos","duree":"Permanente","JR":"Aucun","cible":"Un objet","difficulte":"-8","portée":"","caseTMR":"marais","caseTMRspeciale":"","ptreve":"1+","portee":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"O1QllxIvIkWxntmO","name":"Animer un squelette","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.O1QllxIvIkWxntmO"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>En invoquant les forces du cauchemar à venir hanter un corps mort, le haut-rêvant de Thanatos crée un hideux simulacre de vie. Sous l'effet du rituel, le cadavre se décompose à vue d'oeil, se dépouillant de toute chair, jusqu'à ce qu'il n'en reste plus que les os, magiquement liés. Le squelette se redresse alors en position verticale, capable de se déplacer sur ses jambes en une parodie de vie réelle, utilisant se smains griffues pour attaquer. Ainsi créé, le squelette est en tout point semblable à l'entité de cauchemar incarnée du même nom, tant au niveau de ses caractéristiques que de ses compétences (voir livre III, page 225). Sa caractéristique TAILLE est celle du cadavre utilisé, sa caractéristique RÊVE est égale au nombre de points de rêve dépensés par le haut-rêvant, sachant que comme pour les zombis, et contrairement aux entités de cauchemar incarnées qui peuvent dépasser cette limite, la caractéristique RÊVE d'un squelette invoqué ne peut jamais dépasser sa caractéristique TAILLE. Sa hideur est telle que quiconque l'aperçoit doit réussir un jet de VOLONTÉ à -3 ou être en demi-surprise jusqu'à la fin du round suivant.</p>\n<p>Un squelette invoqué est aux ordres de son invocateur et n'agit qu'aux ordres reçus. Pour donner un nouvel ordre à son squelette, le haut-rêvant de Thanatos doit s'en trouver à une portée maximale égale à E1. A la mort de son invocateur, le squelette n'est pas détruit, mais devient une entité sauvage, se comportant librement comme l'entitéde cauchemar incarnée du même nom.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Permanente","JR":"Aucun","cible":"Un cadavre","difficulte":"-9","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843441,"modifiedTime":1667260048926,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"XldJiyXL4gSrfx4t","name":"Surdité","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Quand la victime est entièrement possédée de corps, le haut-rêvant de Thanatos peut commencer l'envoûtement de Surdité. Chaque ensemble de 2 points de rêve dépensés (2r), fait perdre 1 point de caractéristique OUÏE à la victime. A zéro point d'OUÏE, elle est totalement sourde. La surdité semble inexplicable, et aucune médecine ne peut la guérir. Annuler la possession brise en même temps l'envoûtement de Cécité, et la victime recouvre instantanément toute son OUÏE.</p>","draconic":"thanatos","duree":"Illimitée","JR":"Aucun","cible":"Relique","difficulte":"-6","portée":"","caseTMR":"gouffre","caseTMRspeciale":"","ptreve":"2+","portee":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"W0JXIoChz3IXuaCc","name":"Putrescence","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.W0JXIoChz3IXuaCc"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>L'effet de Putrescence ne peut être ciblé que sur un objet. L'effet est un vieilllissement instantané de plusieurs années, supposé s'être accompli dans les pires concditions, avec pour résultat un délabrement, une putrescence de l'objet. Le vieillissement est de 10 ans par point de rêve dépensé.</p>\n<p>Dans tous les cas, c'est au gardien des rêves de juger de l'état final de l'objet en se souvenant que les conditions de vieillissement sont censées avoir été très mauvaises : humidité, moisissure, chaud et froid, etc. Ainsi dix ans seront suffisants pour venir à bout du tissu et du papier, vingt ans pour du parchemin ou du cuir souple, trente pour du cuir épais et du bois léger. Quarante ans et plus auront presque entièrement dévoré de rouille le métal ferreux et corrompu le bois épais, tout dépendant de leur qualité initiale. Noter par contre que verre et céramique sont pratiquement imprutescibles. La putrescence étant instantanée et définitive, l'objet altéré ne dispense aucune aura. </p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Permanente","JR":"Aucun","cible":"Un objet","difficulte":"-8","portée":"","caseTMR":"marais","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843441,"modifiedTime":1667260048928,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"Y4r9kTN2brWC2N0n","name":"Lecture d'aura","permission":{"default":0,"Q2G6GTdrotKzYGUC":3},"type":"sort","data":{"description":"<p>Les rituels de Lecture d’Aura peuvent indifféremment être accomplis par n’importe laquelle des quatre voies.</p>\n<p>Ce rituel permet d’approfondir les informations fournies par Détection d’Aura. Pratiquer Lecture d’Aura quand il n’y a pas d’aura revient à demander une magie impossible et crée immédiatement une déchirure du rêve.</p>\n<p>Lecture d’Aura est effectuée en plusieurs étapes, toutes étant de difficulté R-3 et coûtant 3 points de rêve. La première a toujours lieu dans un sanctuaire et ne fait que révéler dans quel(s) autre(s) genre(s) de case(s) le haut-rêvant doit se rendre pour continuer sa lecture. Là, il apprend quel genre de magie a été produit ou à quel type de rêve il a affaire, de même que les cases spécifiques concernées. Enfin dans les cases spécifiques, le haut-rêvant peut apprendre la force du rêve ou de la magie en cours, c’est-à-dire pratiquement la difficulté et le nombre de points de rêve impliqués, information indispensable dans l’optique d’une annulation de magie.</p>\n<p>Lecture d’Aura révèle également la couleur de l’aura (fixe ou pulsative) comme Détection d’Aura. Pour les créatures vivantes, on peut donc sauter l’étape de Détection d’Aura et commencer directement par la lecture, puisqu’on est sûr de trouver une aura. Dans les autres cas, il est plus prudent de commencer par la détection si, en l’absence finale d’une aura, on ne veut pas créer de magie impossible. Effectuée sur une créature non soumise à un effet magique ni sous l’emprise d’une entité, Lecture d’Aura indique toujours le Fleuve. Là, dans n’importe quelle case du Fleuve, le haut-rêvant se contente d’apprendre qu’il a affaire à une créature vivante et douée de rêve.</p>","draconic":"oniros","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-3","portée":"","caseTMR":"special","caseTMRspeciale":"Sanctuaire / variable","ptreve":"3","xp":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp","effects":[]}
|
||||||
{"_id":"XldJiyXL4gSrfx4t","name":"Surdité","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.XldJiyXL4gSrfx4t"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Quand la victime est entièrement possédée de corps, le haut-rêvant de Thanatos peut commencer l'envoûtement de Surdité. Chaque ensemble de 2 points de rêve dépensés (2r), fait perdre 1 point de caractéristique OUÏE à la victime. A zéro point d'OUÏE, elle est totalement sourde. La surdité semble inexplicable, et aucune médecine ne peut la guérir. Annuler la possession brise en même temps l'envoûtement de Cécité, et la victime recouvre instantanément toute son OUÏE.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Illimitée","JR":"Aucun","cible":"Relique","difficulte":"-6","portée":"","caseTMR":"gouffre","caseTMRspeciale":"","ptreve":"2+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843441,"modifiedTime":1667260048928,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"cM9eo2VuJSCkIZvd","name":"Cécité","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Quand la victime est entièrement possédée de corps, le haut-rêvant de Thanatos peut commencer l'envoûtement de Cécité. Chaque ensemble de 2 points de rêve dépensés (2r), fait perdre 1 point de caractéristique VUE à la victime. A zéro point de VUE, elle est aveugle. La cécité semble inexplicable, et aucune médecine ne peut la guérir. Annuler la possession brise en même temps l'envoûtement de Cécité, et la victime recouvre instantanément toute sa VUE.</p>","draconic":"thanatos","duree":"Illimitée","JR":"Aucun","cible":"Relique","difficulte":"-8","portée":"","caseTMR":"cite","caseTMRspeciale":"","ptreve":"2+","portee":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"cM9eo2VuJSCkIZvd","name":"Cécité","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.cM9eo2VuJSCkIZvd"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Quand la victime est entièrement possédée de corps, le haut-rêvant de Thanatos peut commencer l'envoûtement de Cécité. Chaque ensemble de 2 points de rêve dépensés (2r), fait perdre 1 point de caractéristique VUE à la victime. A zéro point de VUE, elle est aveugle. La cécité semble inexplicable, et aucune médecine ne peut la guérir. Annuler la possession brise en même temps l'envoûtement de Cécité, et la victime recouvre instantanément toute sa VUE.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Illimitée","JR":"Aucun","cible":"Relique","difficulte":"-8","portée":"","caseTMR":"cite","caseTMRspeciale":"","ptreve":"2+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843441,"modifiedTime":1667260048926,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"dK54iZkb7ypIuKwn","name":"Peur thanataire","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Le sort de Peur Thanataire doit être ciblé sur un objet, lequel, et jusqu'à la fin de l'heure de naissance du haut-rêvant, distillera ensuite une peur intense. Toute personne apercevant l'objet en question et manquant un jet de résistance standard r-8, sera contrainte de s'en détourner, ne pouvant supporter de le regarder ni de s'en approcher ou le regarder le(s) round(s) suivant(s), il faudra réussir unjet de VOLONTÉ ajusté négativement aux points de rêve dépensés. Même chose pour le toucher, le prendre, le frapper. Ce jet de VOLONTÉ doit être renouvelé de round en round jusqu'à ce qui réussisse.</p>\n<p>Le haut-rêvant de Thanatos est lui-même immunisé contre les effets de sa peur thanataire. Par ailleurs, comme c'est la seule vue de l'objet qui déclenche la peur, il n'y a aucun effet tant que l'objet est dissimulé, dans une poche par exemple.</p>","draconic":"thanatos","duree":"HN","JR":"r-8","cible":"Un objet","difficulte":"-9","portée":"","caseTMR":"lac","caseTMRspeciale":"","ptreve":"1+","portee":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"dK54iZkb7ypIuKwn","name":"Peur thanataire","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.dK54iZkb7ypIuKwn"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Le sort de Peur Thanataire doit être ciblé sur un objet, lequel, et jusqu'à la fin de l'heure de naissance du haut-rêvant, distillera ensuite une peur intense. Toute personne apercevant l'objet en question et manquant un jet de résistance standard r-8, sera contrainte de s'en détourner, ne pouvant supporter de le regarder ni de s'en approcher ou le regarder le(s) round(s) suivant(s), il faudra réussir unjet de VOLONTÉ ajusté négativement aux points de rêve dépensés. Même chose pour le toucher, le prendre, le frapper. Ce jet de VOLONTÉ doit être renouvelé de round en round jusqu'à ce qui réussisse.</p>\n<p>Le haut-rêvant de Thanatos est lui-même immunisé contre les effets de sa peur thanataire. Par ailleurs, comme c'est la seule vue de l'objet qui déclenche la peur, il n'y a aucun effet tant que l'objet est dissimulé, dans une poche par exemple.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"HN","JR":"r-8","cible":"Un objet","difficulte":"-9","portée":"","caseTMR":"lac","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843442,"modifiedTime":1667260048928,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"gZHrkEnR88mEv67I","name":"Griffe de Thanatos *","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Placée en guise d'écaille de pouvoir sur un objet enchanté, la griffe de Thanatos n'est qu'un piège. Son fonctionnement intervient au moment de la maîtrise. Cette dernière est automatique, comme avec les écailles de Narcos, mais au lieu de coûter des points de rêve, elle coûte un nombre de <em>points de vie</em> égal au nombre de griffes, chaque point de vie perdu s'accompagnant d'une perte d'1d6 points d'endurance. Il n'y a pas de jet de résistance. La maîtrise (et la perte de points de vie) a lieu au moment où l'objet contenant la griffe est utilisé selon sa fonction : arme frappant, bague au doigt, bracelet au poignet, etc. Si l'objet n'a pas de fonction évidente, statuette, bibelot, ou s'il n'est qu'une gemme seule, la maîtrise a lieu dès que l'objet est pris dasn la main nue.</p>\n<p>Un objet peut n'avoir qu'une gemme contenant une ou plusieurs griffes de Thanatos, ce n'est alors qu'un piège en soi ; il peut avoir avoir plusieurs gemmes, grâce à Individualité, certaines possédant des pouvoirs réels (écailles de Narcos), et l'une d'entre elles ne possédant que des griffes de Thanatos. La maîtrise de la grifef (perte de points de vie) accompagne alors la maîtrise de chacun des vrais pouvoirs. Le créateur de l'objet, le maîtrisant tacitement, n'a pas à subir de perte de points de vie, mais si l'objet est maîtrisé par quelqu'un d'autre et lui revient, il en subit les conséquences. Les points de vie perdus sont regagnés selon la règle normale.</p>","draconic":"thanatos","duree":"Permanente","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"8","portee":"","isrituel":true,"coutseuil":1},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"gZHrkEnR88mEv67I","name":"Griffe de Thanatos *","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.gZHrkEnR88mEv67I"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Placée en guise d'écaille de pouvoir sur un objet enchanté, la griffe de Thanatos n'est qu'un piège. Son fonctionnement intervient au moment de la maîtrise. Cette dernière est automatique, comme avec les écailles de Narcos, mais au lieu de coûter des points de rêve, elle coûte un nombre de <em>points de vie</em> égal au nombre de griffes, chaque point de vie perdu s'accompagnant d'une perte d'1d6 points d'endurance. Il n'y a pas de jet de résistance. La maîtrise (et la perte de points de vie) a lieu au moment où l'objet contenant la griffe est utilisé selon sa fonction : arme frappant, bague au doigt, bracelet au poignet, etc. Si l'objet n'a pas de fonction évidente, statuette, bibelot, ou s'il n'est qu'une gemme seule, la maîtrise a lieu dès que l'objet est pris dasn la main nue.</p>\n<p>Un objet peut n'avoir qu'une gemme contenant une ou plusieurs griffes de Thanatos, ce n'est alors qu'un piège en soi ; il peut avoir avoir plusieurs gemmes, grâce à Individualité, certaines possédant des pouvoirs réels (écailles de Narcos), et l'une d'entre elles ne possédant que des griffes de Thanatos. La maîtrise de la grifef (perte de points de vie) accompagne alors la maîtrise de chacun des vrais pouvoirs. Le créateur de l'objet, le maîtrisant tacitement, n'a pas à subir de perte de points de vie, mais si l'objet est maîtrisé par quelqu'un d'autre et lui revient, il en subit les conséquences. Les points de vie perdus sont regagnés selon la règle normale.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Permanente","JR":"Aucun","cible":"","difficulte":"-8","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"8","xp":0,"bonuscase":"","isrituel":true,"coutseuil":1,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843442,"modifiedTime":1667260048926,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"qaCjZ5V874ZImf9l","name":"Griffe morbide de Thanatos *","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Le principe de fonctionnement de la griffe morbide de Thanatos est analogue à celui de la simple griffe. C'en est une variante plus mortelle. La maîtrise ayant lieu, la victime perd autant de points de vie qu'il y a de griffes morbides, ainsi que 1d6 points d'endurance par point de vie perdu, puis joue une JR standard r-8. JR réussi, l'effet s'arrête là ; JR échoué, le mal s'est implanté en elle. Tous les jours, à l'extrême fin du Château Dormant, la victime de la griffe morbide doit tenter un jet de Vie et en appliquer les résultats suivants : 20 = perte de 2 points de vie ; échec = perte de 1 point de vie ; réussite = pas de perte pour aujoud'hui ; 01 = prochain jet de Vie joué le surlendemain au lieu du lendemain. Il n'y a qu'un jet de Vie par jour quel que soit le nombre de griffes morbides.</p>\n<p>Tant que dure l'effet de la griffe morbide, la victime ne peut regagner ses points de vie par aucun moyen, pas même par une potion enchantée. Le seul moyen de la tirer d'affaire est d'annuler magiquement l'effet que les griffes morbides ont sur elle. Une Lecture d'Aura précise doit avoir lieu, ciblée surla victime pour déterminer à quel case de marais spécifique est lié son mal. Puis celui-ci peut-être annulé par un rituel d'Annulation de Magie R-11 r11, accompli une seule fois quel que soit le nombre de griffes morbides. Noter que seul l'effet sur la victime est annulé, pas l'existence des griffes morbides sur l'objet. Annuler l'effet sur la victime ne coûte pas de point de seuil.</p>","draconic":"thanatos","duree":"Permanente","JR":"Partiel","cible":"","difficulte":"-11","portée":"","caseTMR":"marais","caseTMRspeciale":"","ptreve":"11","portee":"","isrituel":true,"coutseuil":1},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"qaCjZ5V874ZImf9l","name":"Griffe morbide de Thanatos *","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.qaCjZ5V874ZImf9l"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Le principe de fonctionnement de la griffe morbide de Thanatos est analogue à celui de la simple griffe. C'en est une variante plus mortelle. La maîtrise ayant lieu, la victime perd autant de points de vie qu'il y a de griffes morbides, ainsi que 1d6 points d'endurance par point de vie perdu, puis joue une JR standard r-8. JR réussi, l'effet s'arrête là ; JR échoué, le mal s'est implanté en elle. Tous les jours, à l'extrême fin du Château Dormant, la victime de la griffe morbide doit tenter un jet de Vie et en appliquer les résultats suivants : 20 = perte de 2 points de vie ; échec = perte de 1 point de vie ; réussite = pas de perte pour aujoud'hui ; 01 = prochain jet de Vie joué le surlendemain au lieu du lendemain. Il n'y a qu'un jet de Vie par jour quel que soit le nombre de griffes morbides.</p>\n<p>Tant que dure l'effet de la griffe morbide, la victime ne peut regagner ses points de vie par aucun moyen, pas même par une potion enchantée. Le seul moyen de la tirer d'affaire est d'annuler magiquement l'effet que les griffes morbides ont sur elle. Une Lecture d'Aura précise doit avoir lieu, ciblée surla victime pour déterminer à quel case de marais spécifique est lié son mal. Puis celui-ci peut-être annulé par un rituel d'Annulation de Magie R-11 r11, accompli une seule fois quel que soit le nombre de griffes morbides. Noter que seul l'effet sur la victime est annulé, pas l'existence des griffes morbides sur l'objet. Annuler l'effet sur la victime ne coûte pas de point de seuil.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Permanente","JR":"Partiel","cible":"","difficulte":"-11","portée":"","caseTMR":"marais","caseTMRspeciale":"","ptreve":"11","xp":0,"bonuscase":"","isrituel":true,"coutseuil":1,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843442,"modifiedTime":1667260048927,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"tFNWrWlOzCmYPYdG","name":"Possession de Corps","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Pour posséder de corps une victime, le haut-rêvant de Thanatos doit prendre son entière contitution sous son contrôle. Le ciblage du rituel doit s'effectuer en touchant la relique. Pour chaque ensemble de 2 points de rêve dépensés (2r), le haut-rêvant contrôle 1 point de CONSTITUTION de sa victime. Dès qu'il la contrôle entièrement, elle est possédée de corps. Pour posséder une victime ayant une CONSTITUTION de 14, il faut ainsi dépenser 28 points de rêve. Le haut-rêvant peut s'y prendre en plusieurs fois, mais la victime a droit à un JR à chaque fois, et il suffit qu'un seul d'entre eux réussisse pour annuler toute la possessions précédemment accomplie ; simultanément, le haut-rêvant de Thanataos doit lui-même réussir un JR r0 (points de rêve à zéro) ou être frappé en retour par un souffle de Dragon. </p>\n<p><em>Note</em>. Le haut-râvant ne fait que <em>contrôler</em> la CONSTITUTION de sa victime, celle-ci n'en perd aucun point. Tant qu'aucun envoûtement n'est à l'oeuvre, il n'y a aucun effet physique, et la victime ne se rend même compte de rien.</p>","draconic":"thanatos","duree":"Illimitée","JR":"Avec HN r-9, sans HN r-8","cible":"Relique","difficulte":"-9","portée":"","caseTMR":"marais","caseTMRspeciale":"","ptreve":"2+","portee":"","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"tFNWrWlOzCmYPYdG","name":"Possession de Corps","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.tFNWrWlOzCmYPYdG"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Pour posséder de corps une victime, le haut-rêvant de Thanatos doit prendre son entière contitution sous son contrôle. Le ciblage du rituel doit s'effectuer en touchant la relique. Pour chaque ensemble de 2 points de rêve dépensés (2r), le haut-rêvant contrôle 1 point de CONSTITUTION de sa victime. Dès qu'il la contrôle entièrement, elle est possédée de corps. Pour posséder une victime ayant une CONSTITUTION de 14, il faut ainsi dépenser 28 points de rêve. Le haut-rêvant peut s'y prendre en plusieurs fois, mais la victime a droit à un JR à chaque fois, et il suffit qu'un seul d'entre eux réussisse pour annuler toute la possessions précédemment accomplie ; simultanément, le haut-rêvant de Thanataos doit lui-même réussir un JR r0 (points de rêve à zéro) ou être frappé en retour par un souffle de Dragon. </p>\n<p><em>Note</em>. Le haut-râvant ne fait que <em>contrôler</em> la CONSTITUTION de sa victime, celle-ci n'en perd aucun point. Tant qu'aucun envoûtement n'est à l'oeuvre, il n'y a aucun effet physique, et la victime ne se rend même compte de rien.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Illimitée","JR":"Avec HN r-9, sans HN r-8","cible":"Relique","difficulte":"-9","portée":"","caseTMR":"marais","caseTMRspeciale":"","ptreve":"2+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843442,"modifiedTime":1667260048928,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"wGXeubRhLPScDkNF","name":"Possession d'Esprit","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Pour posséder d'esprit une victime, le haut-rêvant de Thanatos doit prendre son entière volonté sous son contrôle. Le ciblage du rituel doit s'effectuer en touchant la relique. Pour chaque ensemble de 2 points de rêve dépensés (2r), le haut-rêvant contrôle 1 point de VOLONTÉ de sa victime. Dès qu'il la contrôle entièrement, elle est possédée d'esprit. Pour posséder une victime ayant une VOLONTÉ de 14, il faut ainsi dépenser 28 points de rêve. Le haut-rêvant peut s'y prendre en plusieurs fois, mais la victime a droit à un JR à chaque fois, et il suffit qu'un seul d'entre eux réussisse pour annuler toute la possessions précédemment accomplie ; simultanément, le haut-rêvant de Thanataos doit lui-même réussir un JR r0 (points de rêve à zéro) ou être frappé en retour par un souffle de Dragon. </p>\n<p><em>Note</em>. Le haut-rêvant ne fait que <em>contrôler</em> la VOLONTÉ de sa victime, celle-ci n'en perd aucun point. Tant qu'aucun envoûtement n'est à l'oeuvre, il n'y a aucun effet mental, et la victime ne se rend même compte de rien.</p>","draconic":"thanatos","duree":"Illimitée","JR":"Avec HN r-9, sans HN r-8","cible":"Relique","difficulte":"-9","portée":"","caseTMR":"lac","caseTMRspeciale":"","ptreve":"2+","portee":"","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"wGXeubRhLPScDkNF","name":"Possession d'Esprit","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.wGXeubRhLPScDkNF"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Pour posséder d'esprit une victime, le haut-rêvant de Thanatos doit prendre son entière volonté sous son contrôle. Le ciblage du rituel doit s'effectuer en touchant la relique. Pour chaque ensemble de 2 points de rêve dépensés (2r), le haut-rêvant contrôle 1 point de VOLONTÉ de sa victime. Dès qu'il la contrôle entièrement, elle est possédée d'esprit. Pour posséder une victime ayant une VOLONTÉ de 14, il faut ainsi dépenser 28 points de rêve. Le haut-rêvant peut s'y prendre en plusieurs fois, mais la victime a droit à un JR à chaque fois, et il suffit qu'un seul d'entre eux réussisse pour annuler toute la possessions précédemment accomplie ; simultanément, le haut-rêvant de Thanataos doit lui-même réussir un JR r0 (points de rêve à zéro) ou être frappé en retour par un souffle de Dragon. </p>\n<p><em>Note</em>. Le haut-rêvant ne fait que <em>contrôler</em> la VOLONTÉ de sa victime, celle-ci n'en perd aucun point. Tant qu'aucun envoûtement n'est à l'oeuvre, il n'y a aucun effet mental, et la victime ne se rend même compte de rien.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Illimitée","JR":"Avec HN r-9, sans HN r-8","cible":"Relique","difficulte":"-9","portée":"","caseTMR":"lac","caseTMRspeciale":"","ptreve":"2+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843442,"modifiedTime":1667260048928,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"wuqqLld48IagimXp","name":"Poing de Thanatos","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Le Poing de Thanatos peut être dirigé contre toute créature, humanoïde ou animal. Son effet, instantané, est celui d'un violent coup de poing en pleine tête, ne causant toutefois ses dommages que sur la table des Coups non mortels. Le +dom de l'agression est égal au nombre de points de rêve dépensés. Sauf pour les animaux qui peuvent faire jouer entièrement leur protection naturelle ainsi que pour les humanoïdes de grande TAILLE qui en possèdent, la protection applicable peut être au maximum de 2 points. Si la victime réussit son JR standard r-8, le haut-rêvant de Thanatos doit jouer un JR r0 (points de rêve à zéro) ou subir l'effet de son sort en retour.</p>","draconic":"thanatos","duree":"Instantanée","JR":"r-8","cible":"Toutes créatures","difficulte":"-6","portée":"","caseTMR":"plaines","caseTMRspeciale":"","ptreve":"1+","portee":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"wuqqLld48IagimXp","name":"Poing de Thanatos","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.wuqqLld48IagimXp"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Le Poing de Thanatos peut être dirigé contre toute créature, humanoïde ou animal. Son effet, instantané, est celui d'un violent coup de poing en pleine tête, ne causant toutefois ses dommages que sur la table des Coups non mortels. Le +dom de l'agression est égal au nombre de points de rêve dépensés. Sauf pour les animaux qui peuvent faire jouer entièrement leur protection naturelle ainsi que pour les humanoïdes de grande TAILLE qui en possèdent, la protection applicable peut être au maximum de 2 points. Si la victime réussit son JR standard r-8, le haut-rêvant de Thanatos doit jouer un JR r0 (points de rêve à zéro) ou subir l'effet de son sort en retour.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Instantanée","JR":"r-8","cible":"Toutes créatures","difficulte":"-6","portée":"","caseTMR":"plaines","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843442,"modifiedTime":1667260048928,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"xFkdsI0FnhCCszDR","name":"Métamorphose en bête","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>L'envoûtement de Métamorphose en bête peut être accompli sur une possession de corps ou d'esprit. Il s'agit de deux métamorphoses différentes devant faire l'objet d'envoûtements séparés.</p>\n<p>L'accomplissant sur une victime possédée d'esprit, le haut-rêvant de Thanatos transforme le mental de cette dernière en celui d'un animal de son choix. Le corps physique de la victime reste inchangé, mais son esprit, son comportement, ses instincts deviennent ceux de l'animal. La victime perd le sens de la parole et de la compréhension du langage pour ne plus s'exprimer que par des cris : aboiements, miaulements, sifflements, caquètements, etc. Le tout dans un corps normal.</p>\n<p>Sur une victime possédée de corps, le haut-rêvant transforme réellement son corps en celui d'un animal de son choix, dont la TAILLE finale ne peut être supérieure à celle de la victime et doit être au minimum de 1 (souris). Il ne s'agit pas d'une illusion : la transformation est réelle. Le nouveau gosier de la victime l'empêche de parler, mais elle continue à comprendre le langage. Son intelligence et son mental restent inchangés, mais dans un corps d'animal. Un haut-rêvant métamorphosé peut continuer à monter en TMR mais doit posséder l'équivalent d'un doigt pour cibler des sorts ailleurs que sur lui-même.</p>\n<p>Si les deux métamorphoses, d'esprit ou de corps, sont effectuées conjointement, la victime devient en tout point un animal réel.</p>\n<p>Annuler l'une ou l'autre possession brise en même temps l'envoûtement de Métamorphose correspondant, et la victime recouvre une part de son identité.</p>","draconic":"thanatos","duree":"Illimitée","JR":"Aucun","cible":"Relique","difficulte":"-10","portée":"","caseTMR":"fleuve","caseTMRspeciale":"","ptreve":"10","portee":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"xFkdsI0FnhCCszDR","name":"Métamorphose en bête","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.xFkdsI0FnhCCszDR"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>L'envoûtement de Métamorphose en bête peut être accompli sur une possession de corps ou d'esprit. Il s'agit de deux métamorphoses différentes devant faire l'objet d'envoûtements séparés.</p>\n<p>L'accomplissant sur une victime possédée d'esprit, le haut-rêvant de Thanatos transforme le mental de cette dernière en celui d'un animal de son choix. Le corps physique de la victime reste inchangé, mais son esprit, son comportement, ses instincts deviennent ceux de l'animal. La victime perd le sens de la parole et de la compréhension du langage pour ne plus s'exprimer que par des cris : aboiements, miaulements, sifflements, caquètements, etc. Le tout dans un corps normal.</p>\n<p>Sur une victime possédée de corps, le haut-rêvant transforme réellement son corps en celui d'un animal de son choix, dont la TAILLE finale ne peut être supérieure à celle de la victime et doit être au minimum de 1 (souris). Il ne s'agit pas d'une illusion : la transformation est réelle. Le nouveau gosier de la victime l'empêche de parler, mais elle continue à comprendre le langage. Son intelligence et son mental restent inchangés, mais dans un corps d'animal. Un haut-rêvant métamorphosé peut continuer à monter en TMR mais doit posséder l'équivalent d'un doigt pour cibler des sorts ailleurs que sur lui-même.</p>\n<p>Si les deux métamorphoses, d'esprit ou de corps, sont effectuées conjointement, la victime devient en tout point un animal réel.</p>\n<p>Annuler l'une ou l'autre possession brise en même temps l'envoûtement de Métamorphose correspondant, et la victime recouvre une part de son identité.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Illimitée","JR":"Aucun","cible":"Relique","difficulte":"-10","portée":"","caseTMR":"fleuve","caseTMRspeciale":"","ptreve":"10","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843442,"modifiedTime":1667260048928,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"xOicgRMCUxJNmVzF","name":"Détection d'aura","permission":{"default":0,"Q2G6GTdrotKzYGUC":3},"type":"sort","data":{"description":"<p>Les rituels de Détection d’Aura peuvent indifféremment être accomplis par n’importe laquelle des quatre voies.</p>\n<p>Toutes les créatures vivantes animées (humains, humanoïdes, animaux) ont une caractéristique RÊVE. Les objets enchantés possèdent des points de rêve, de même que les produits de magie naturelle, comme certaines pierres de chance. Les entités de cauchemar, incarnées ou non, en ont également. Quelle qu’elle soit, la présence de rêve émet une aura, laquelle est détectable par Détection d’Aura. Parallèlement, toute cible d’un sort ou d’un rituel, émet une aura propre, quand bien même ladite cible ne possède pas de points de rêve (centre de zone, objet ou plante soumis à une illusion d’Hypnos). Cette aura est également détectable par Détection d’Aura.</p>\n<p>L’aura de présence de rêve se traduit par un halo bleuté constant ; l’aura résultant d’un effet magique par un halo parcouru de pulsations. Quand les deux auras sont présentes conjointement, le halo est pulsatif et d’un bleu plus foncé. On peut toujours effectuer Détection d’Aura sans aucun risque, il y a toujours une réponse. Soit une aura est perçue, constante ou pulsative, et l’on peut tenter une Lecture d’Aura pour en savoir plus ; soit aucune aura n’est perçue et il s’agit de matière inerte, sans rêve, non soumise à un sort.</p>","draconic":"oniros","duree":"Instantanée","JR":"Aucun","cible":"","difficulte":"-3","portée":"","caseTMR":"sanctuaire","caseTMRspeciale":"","ptreve":"1","xp":0},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_vigilance.webp","effects":[]}
|
||||||
{"_id":"xdWVcaPvSH8tNZIZ","name":"Tâche","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.xdWVcaPvSH8tNZIZ"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Quand la victime est entièrement possédée d'esprit, le haut-rêvant de Thanatos peut l'obliger à accomplir une certaine tâche ou quête. Comem avec Interdiction, la tâche doit être possible par la VOLONTÉ normale de la victime : <em>dors !</em> ou <em>meurs !</em> sont impossibles. L'ordre doit être formulé de façon très précise, comme pour Interdiction, sauf que cette fois le seul verbe possible doit être à l'impératif affirmatif. C'est pareillement au gardien des rêves de juger des interprétations litigieuses. E<em>xemples : monte en haut de la tour ; brûle le livre noir, mets le feu au château, assassine le roi, etc. </em>La victime s'efforcera d'accomplir la tâche par les moyens les plus rapides et les plus efficaces. L'effet du sort prend fin dès que la tâche est accomplie ou que survient la fin de l'heure de la naissance de la victime. Le haut-rêvant peut renouveler la tâche de jour en jour ou en apporter une nouvelle, mais ne peut pas en faire coexister deux simultanément. Annuler la possession brise en même temps l'envoûtement de Tâche, et la victime recouvre instantanément toute sa liberté.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"HN de la victime","JR":"Aucun","cible":"Relique","difficulte":"-8","portée":"","caseTMR":"foret","caseTMRspeciale":"","ptreve":"8","xp":0,"bonuscase":"","isrituel":false,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843442,"modifiedTime":1667260048928,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"xdWVcaPvSH8tNZIZ","name":"Tâche","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Quand la victime est entièrement possédée d'esprit, le haut-rêvant de Thanatos peut l'obliger à accomplir une certaine tâche ou quête. Comem avec Interdiction, la tâche doit être possible par la VOLONTÉ normale de la victime : <em>dors !</em> ou <em>meurs !</em> sont impossibles. L'ordre doit être formulé de façon très précise, comme pour Interdiction, sauf que cette fois le seul verbe possible doit être à l'impératif affirmatif. C'est pareillement au gardien des rêves de juger des interprétations litigieuses. E<em>xemples : monte en haut de la tour ; brûle le livre noir, mets le feu au château, assassine le roi, etc. </em>La victime s'efforcera d'accomplir la tâche par les moyens les plus rapides et les plus efficaces. L'effet du sort prend fin dès que la tâche est accomplie ou que survient la fin de l'heure de la naissance de la victime. Le haut-rêvant peut renouveler la tâche de jour en jour ou en apporter une nouvelle, mais ne peut pas en faire coexister deux simultanément. Annuler la possession brise en même temps l'envoûtement de Tâche, et la victime recouvre instantanément toute sa liberté.</p>","draconic":"thanatos","duree":"HN de la victime","JR":"Aucun","cible":"Relique","difficulte":"-8","portée":"","caseTMR":"foret","caseTMRspeciale":"","ptreve":"8","portee":""},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
{"_id":"yCrVicu7rLWmMwxe","name":"Animer un zombi","type":"sort","flags":{"core":{"sourceId":"Compendium.foundryvtt-reve-de-dragon.sorts-thanatos.yCrVicu7rLWmMwxe"}},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[],"system":{"description":"<p>Le principe d'animation du zombi est semblable à celui du squelette. Comme ce dernier, sa TAILLE est celle du cadavre utilisé, son RÊVE est égal aux points de rêve dépensés, avec un maximum égal à la TAILLE (voir le Livre III, page 225). Comme le squelette, le zombi n'obéit qu'aux ordres reçus, mêmes règles d'application.</p>\n<p>La différence esssentielle est que le rituel d'Animation de Zombi interrompt totalement le processus de putréfaction au lieu de l'accélérer. Une fois animé, un zombi reste dans l'état physique qui était le seien lors de l'accomplissement du rituel, sans plus jamais subir la moindre trace de décomposition. La conséquence est qu'un cadavre frais, dont la mort ne remonte qu'à quelques minutes ou quelques heures, une fois animé, ne se distingue des vivants que par une pâleur inhabituelle, un regard un peu fixe, et des lèvres un peu exsangues, mais pour peu qu'il ne fasse pas très clair ou que son maître l'ait bien emmitouflé, capable de passer pour un vivant. Pour cette raison, les zombis sont souvent préférés aux squelettes par les haut-rêvants de Thanatos plus circonspects et moins enclins au tape-à-l'oeil.</p>","descriptionmj":"","draconic":"Voie de Thanatos","duree":"Permanente","JR":"Aucun","cible":"Un cadavre","difficulte":"-7","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"1+","xp":0,"bonuscase":"","isrituel":true,"coutseuil":0,"portee":""},"ownership":{"default":0,"6ibmdmaeRSMTjU4c":3},"folder":null,"sort":0,"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.0.32","coreVersion":"10.288","createdTime":1667259843442,"modifiedTime":1667260048926,"lastModifiedBy":"Hp9ImM4o9YRTSdfu"}}
|
{"_id":"yCrVicu7rLWmMwxe","name":"Animer un zombi","permission":{"default":0,"6ibmdmaeRSMTjU4c":3},"type":"sort","data":{"description":"<p>Le principe d'animation du zombi est semblable à celui du squelette. Comme ce dernier, sa TAILLE est celle du cadavre utilisé, son RÊVE est égal aux points de rêve dépensés, avec un maximum égal à la TAILLE (voir le Livre III, page 225). Comme le squelette, le zombi n'obéit qu'aux ordres reçus, mêmes règles d'application.</p>\n<p>La différence esssentielle est que le rituel d'Animation de Zombi interrompt totalement le processus de putréfaction au lieu de l'accélérer. Une fois animé, un zombi reste dans l'état physique qui était le seien lors de l'accomplissement du rituel, sans plus jamais subir la moindre trace de décomposition. La conséquence est qu'un cadavre frais, dont la mort ne remonte qu'à quelques minutes ou quelques heures, une fois animé, ne se distingue des vivants que par une pâleur inhabituelle, un regard un peu fixe, et des lèvres un peu exsangues, mais pour peu qu'il ne fasse pas très clair ou que son maître l'ait bien emmitouflé, capable de passer pour un vivant. Pour cette raison, les zombis sont souvent préférés aux squelettes par les haut-rêvants de Thanatos plus circonspects et moins enclins au tape-à-l'oeil.</p>","draconic":"thanatos","duree":"Permanente","JR":"Aucun","cible":"Un cadavre","difficulte":"-7","portée":"","caseTMR":"necropole","caseTMRspeciale":"","ptreve":"1+","portee":"","isrituel":true},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/competence_thanatos.webp","effects":[]}
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 193 KiB |
Binary file not shown.
Before Width: | Height: | Size: 40 KiB |
Binary file not shown.
Before Width: | Height: | Size: 37 KiB |
@ -1,53 +0,0 @@
|
|||||||
<?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"
|
|
||||||
version="1.1"
|
|
||||||
id="svg4"
|
|
||||||
sodipodi:docname="icon-search.svg"
|
|
||||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
|
||||||
<metadata
|
|
||||||
id="metadata10">
|
|
||||||
<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="defs8" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1"
|
|
||||||
objecttolerance="10"
|
|
||||||
gridtolerance="10"
|
|
||||||
guidetolerance="10"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:window-width="1721"
|
|
||||||
inkscape:window-height="1376"
|
|
||||||
id="namedview6"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="1.7568812"
|
|
||||||
inkscape:cx="256"
|
|
||||||
inkscape:cy="256"
|
|
||||||
inkscape:window-x="971"
|
|
||||||
inkscape:window-y="275"
|
|
||||||
inkscape:window-maximized="0"
|
|
||||||
inkscape:current-layer="svg4" />
|
|
||||||
<!-- Font Awesome Pro 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) -->
|
|
||||||
<path
|
|
||||||
d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"
|
|
||||||
id="path2"
|
|
||||||
style="fill:#000000;fill-opacity:0.1" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.9 KiB |
@ -77,10 +77,6 @@
|
|||||||
--gradient-violet: linear-gradient(150deg, rgba(100, 45, 124, 0.6), rgba(216, 157, 192, 0.3), rgba(177, 157, 216, 0.5), rgba(107, 62, 121, 0.3), rgba(100, 45, 124, 0.6));
|
--gradient-violet: linear-gradient(150deg, rgba(100, 45, 124, 0.6), rgba(216, 157, 192, 0.3), rgba(177, 157, 216, 0.5), rgba(107, 62, 121, 0.3), rgba(100, 45, 124, 0.6));
|
||||||
--gradient-purple-black: linear-gradient(150deg, rgba(0, 0, 0, 0.7), rgba(100, 45, 124, 0.4), rgba(82, 17, 131, 0.3),rgba(100, 45, 124, 0.4), rgba(0, 0, 0, 0.7));
|
--gradient-purple-black: linear-gradient(150deg, rgba(0, 0, 0, 0.7), rgba(100, 45, 124, 0.4), rgba(82, 17, 131, 0.3),rgba(100, 45, 124, 0.4), rgba(0, 0, 0, 0.7));
|
||||||
--gradient-silver-light: linear-gradient(30deg, rgba(61, 55, 93, 0.2), rgba(178, 179, 196, 0.1), rgba(59, 62, 63, 0.2), rgba(206, 204, 199, 0.1), rgba(61, 46, 49, 0.2));
|
--gradient-silver-light: linear-gradient(30deg, rgba(61, 55, 93, 0.2), rgba(178, 179, 196, 0.1), rgba(59, 62, 63, 0.2), rgba(206, 204, 199, 0.1), rgba(61, 46, 49, 0.2));
|
||||||
|
|
||||||
--background-custom-button: linear-gradient(to bottom, rgba(33, 55, 74, 0.988) 5%, rgba(21, 40, 51, 0.671) 100%);
|
|
||||||
--background-custom-button-hover: linear-gradient(to bottom, rgb(128, 0, 0) 5%, rgb(62, 1, 1) 100%);
|
|
||||||
--background-tooltip: rgba(220,220,210,0.95);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*@import url("https://fonts.googleapis.com/css2?family=Martel:wght@400;800&family=Roboto:wght@300;400;500&display=swap");*/
|
/*@import url("https://fonts.googleapis.com/css2?family=Martel:wght@400;800&family=Roboto:wght@300;400;500&display=swap");*/
|
||||||
@ -232,12 +228,9 @@ table {border: 1px solid #7a7971;}
|
|||||||
.flex-shrink {
|
.flex-shrink {
|
||||||
flex: 'flex-shrink' ;
|
flex: 'flex-shrink' ;
|
||||||
}
|
}
|
||||||
:is(.flex-grow, .flex-grow-3) {
|
.flex-grow {
|
||||||
flex-grow : 3;
|
flex-grow : 3;
|
||||||
}
|
}
|
||||||
.flex-grow-2 {
|
|
||||||
flex-grow : 2;
|
|
||||||
}
|
|
||||||
/* Styles limited to foundryvtt-reve-de-dragon sheets */
|
/* Styles limited to foundryvtt-reve-de-dragon sheets */
|
||||||
.equipement-nom {
|
.equipement-nom {
|
||||||
flex-grow : 4;
|
flex-grow : 4;
|
||||||
@ -320,6 +313,7 @@ input:is(.blessure-premiers_soins, .blessure-soins_complets) {
|
|||||||
-webkit-box-pack: start;
|
-webkit-box-pack: start;
|
||||||
-ms-flex-pack: start;
|
-ms-flex-pack: start;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.foundryvtt-reve-de-dragon .sheet-header .profile-img {
|
.foundryvtt-reve-de-dragon .sheet-header .profile-img {
|
||||||
@ -626,31 +620,13 @@ input:is(.blessure-premiers_soins, .blessure-soins_complets) {
|
|||||||
color: rgba(255, 255, 255, 1);
|
color: rgba(255, 255, 255, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.window-app.sheet .window-content .sheet-header :is(
|
.window-app.sheet .window-content .sheet-header input[type="text"], .window-app.sheet .window-content .sheet-header input[type="number"], .window-app.sheet .window-content .sheet-header input[type="password"], .window-app.sheet .window-content .sheet-header input[type="date"], .window-app.sheet .window-content .sheet-header input[type="time"] {
|
||||||
input[type="text"],
|
|
||||||
input[type="number"],
|
|
||||||
input[type="password"],
|
|
||||||
input[type="datetime-local"],
|
|
||||||
input[type="date"],
|
|
||||||
input[type="time"]) {
|
|
||||||
color: rgba(255, 255, 255, 0.75);
|
color: rgba(255, 255, 255, 0.75);
|
||||||
background: rgba(255, 255, 255, 0.05);
|
background: rgba(255, 255, 255, 0.05);
|
||||||
border: 0 none;
|
border: 0 none;
|
||||||
margin-bottom: 0.2rem;
|
margin-bottom: 0.2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
form.rdddialogchrono input[type=datetime-local] {
|
|
||||||
min-width: 20px;
|
|
||||||
padding: 0;
|
|
||||||
background: rgba(0, 0, 0, 0.05);
|
|
||||||
border: 1px solid var(--color-border-dark);
|
|
||||||
width: calc(100% - 2px);
|
|
||||||
height: var(--form-field-height);
|
|
||||||
margin: 0;
|
|
||||||
color: var(--color-text-dark-primary);
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.window-app .window-content, .window-app.sheet .window-content .sheet-body{
|
.window-app .window-content, .window-app.sheet .window-content .sheet-body{
|
||||||
background: rgb(245,245,240) url(img/bg_left.webp) no-repeat left top;
|
background: rgb(245,245,240) url(img/bg_left.webp) no-repeat left top;
|
||||||
}
|
}
|
||||||
@ -808,14 +784,6 @@ ul, li {
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
.sheet input.recherche {
|
|
||||||
background-image: url("img/ui/icon-search.svg");
|
|
||||||
background-position: 0.1rem 0.1rem;
|
|
||||||
background-size: 1rem;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
padding: 0.1rem 0.1rem 0.1rem 1.2rem;
|
|
||||||
max-height: 1.2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.alterne-list > .list-item:hover {
|
.alterne-list > .list-item:hover {
|
||||||
background: rgba(100, 100, 50, 0.25);
|
background: rgba(100, 100, 50, 0.25);
|
||||||
@ -1599,7 +1567,7 @@ display: inline-flex;
|
|||||||
|
|
||||||
.tooltip .ttt-ajustements {
|
.tooltip .ttt-ajustements {
|
||||||
width: 150px;
|
width: 150px;
|
||||||
background: var(--background-tooltip);
|
background: rgba(220,220,210,0.95);
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
padding: 3px 0;
|
padding: 3px 0;
|
||||||
@ -1609,15 +1577,15 @@ display: inline-flex;
|
|||||||
text-align: justify;
|
text-align: justify;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
top: 30px;
|
top: 30px;
|
||||||
background: var(--background-tooltip);
|
background: rgba(220,220,210,0.95);
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tooltip :is(.ttt-xp,.ttt-levelup) {
|
.tooltip .ttt-xp {
|
||||||
width: 250px;
|
width: 250px;
|
||||||
background: var(--background-tooltip) !important;
|
background: rgba(220,220,210,0.95) !important;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
padding: 3px 0;
|
padding: 3px 0;
|
||||||
@ -1631,7 +1599,7 @@ display: inline-flex;
|
|||||||
|
|
||||||
.chat-card-button {
|
.chat-card-button {
|
||||||
box-shadow: inset 0px 1px 0px 0px #a6827e;
|
box-shadow: inset 0px 1px 0px 0px #a6827e;
|
||||||
background: var(--background-custom-button);
|
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
|
||||||
background-color: #7d5d3b00;
|
background-color: #7d5d3b00;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
border: 2px ridge #846109;
|
border: 2px ridge #846109;
|
||||||
@ -1647,51 +1615,14 @@ display: inline-flex;
|
|||||||
margin:5px;
|
margin:5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.chat-card-button:hover {
|
.chat-card-button:hover {
|
||||||
background: var(--background-custom-button-hover);
|
background: linear-gradient(to bottom, #800000 5%, #3e0101 100%);
|
||||||
background-color: red;
|
background-color: red;
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-card-button:active {
|
.chat-card-button:active {
|
||||||
position:relative;
|
position:relative;
|
||||||
top:1px;
|
top:1px;
|
||||||
}
|
}
|
||||||
/* Dropdown Content (Hidden by Default) */
|
|
||||||
.button-dropdown-content {
|
|
||||||
display: none;
|
|
||||||
position: absolute;
|
|
||||||
width: max-content;
|
|
||||||
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
|
|
||||||
background: var(--background-tooltip) ;
|
|
||||||
overflow-y: scroll;
|
|
||||||
max-height: 14rem;
|
|
||||||
z-index: 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
.button-dropdown {
|
|
||||||
position: relative;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
/* Change the background color of the dropdown button when the dropdown content is shown */
|
|
||||||
.button-dropdown:hover .button-dropbutton {
|
|
||||||
text-shadow: 1px 0px 0px #ff6600;
|
|
||||||
}
|
|
||||||
/* Show the dropdown menu on hover */
|
|
||||||
.button-dropdown:hover .button-dropdown-content {display: block;}
|
|
||||||
|
|
||||||
/* Links inside the dropdown */
|
|
||||||
.button-dropdown-content a {
|
|
||||||
color: black;
|
|
||||||
padding: 0.2rem 0.4rem;
|
|
||||||
text-decoration: none;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Change color of dropdown links on hover */
|
|
||||||
.button-dropdown-content a:hover {background-color: #ddd;}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************/
|
/*************************************************************/
|
||||||
#pause
|
#pause
|
||||||
|
74
system.json
74
system.json
@ -1,13 +1,12 @@
|
|||||||
{
|
{
|
||||||
"id": "foundryvtt-reve-de-dragon",
|
"id": "foundryvtt-reve-de-dragon",
|
||||||
"title": "Rêve de Dragon",
|
"title": "Rêve de Dragon",
|
||||||
"version": "10.2.1",
|
"version": "10.0.28",
|
||||||
"download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-10.2.1.zip",
|
"download": "https://www.uberwald.me/gitea/VincentVk/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-10.0.28.zip",
|
||||||
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v10/system.json",
|
"manifest": "https://www.uberwald.me/gitea/VincentVk/foundryvtt-reve-de-dragon/raw/v10/system.json",
|
||||||
"compatibility": {
|
"compatibility": {
|
||||||
"minimum": "10",
|
"minimum": "10",
|
||||||
"verified": "10",
|
"verified": "10.288"
|
||||||
"maximum": "10"
|
|
||||||
},
|
},
|
||||||
"description": "Rêve de Dragon RPG for FoundryVTT",
|
"description": "Rêve de Dragon RPG for FoundryVTT",
|
||||||
"authors": [
|
"authors": [
|
||||||
@ -69,7 +68,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/competences.db",
|
"path": "packs/competences.db",
|
||||||
"type": "Item",
|
"type": "Item",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -87,7 +86,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/competences-creatures.db",
|
"path": "packs/competences-creatures.db",
|
||||||
"type": "Item",
|
"type": "Item",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -96,7 +95,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/competences-entites.db",
|
"path": "packs/competences-entites.db",
|
||||||
"type": "Item",
|
"type": "Item",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -150,7 +149,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/maladies-et-poisons.db",
|
"path": "packs/maladies-et-poisons.db",
|
||||||
"type": "Item",
|
"type": "Item",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -168,7 +167,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/queues-de-dragon.db",
|
"path": "packs/queues-de-dragon.db",
|
||||||
"type": "Item",
|
"type": "Item",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -177,7 +176,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/ombres-de-thanatos.db",
|
"path": "packs/ombres-de-thanatos.db",
|
||||||
"type": "Item",
|
"type": "Item",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -186,7 +185,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/souffles-de-dragon.db",
|
"path": "packs/souffles-de-dragon.db",
|
||||||
"type": "Item",
|
"type": "Item",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -204,7 +203,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/tetes-de-dragon-pour-haut-revants.db",
|
"path": "packs/tetes-de-dragon-pour-haut-revants.db",
|
||||||
"type": "Item",
|
"type": "Item",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -213,16 +212,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/tetes-de-dragon-pour-tous-personnages.db",
|
"path": "packs/tetes-de-dragon-pour-tous-personnages.db",
|
||||||
"type": "Item",
|
"type": "Item",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "rencontres",
|
|
||||||
"label": "Rencontres",
|
|
||||||
"system": "foundryvtt-reve-de-dragon",
|
|
||||||
"path": "packs/rencontres.db",
|
|
||||||
"type": "Item",
|
|
||||||
"private": true,
|
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -231,7 +221,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/tables-diverses.db",
|
"path": "packs/tables-diverses.db",
|
||||||
"type": "RollTable",
|
"type": "RollTable",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -240,7 +230,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/animaux.db",
|
"path": "packs/animaux.db",
|
||||||
"type": "Actor",
|
"type": "Actor",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -258,7 +248,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/vehicules.db",
|
"path": "packs/vehicules.db",
|
||||||
"type": "Actor",
|
"type": "Actor",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -267,7 +257,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/archetypes.db",
|
"path": "packs/archetypes.db",
|
||||||
"type": "Actor",
|
"type": "Actor",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -276,7 +266,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/humanoides.db",
|
"path": "packs/humanoides.db",
|
||||||
"type": "Actor",
|
"type": "Actor",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -285,7 +275,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/entites-de-cauchemar.db",
|
"path": "packs/entites-de-cauchemar.db",
|
||||||
"type": "Actor",
|
"type": "Actor",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -294,7 +284,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/invocations.db",
|
"path": "packs/invocations.db",
|
||||||
"type": "Actor",
|
"type": "Actor",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -303,7 +293,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/botanique.db",
|
"path": "packs/botanique.db",
|
||||||
"type": "Item",
|
"type": "Item",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -339,7 +329,7 @@
|
|||||||
"system": "foundryvtt-reve-de-dragon",
|
"system": "foundryvtt-reve-de-dragon",
|
||||||
"path": "packs/scenes-rdd.db",
|
"path": "packs/scenes-rdd.db",
|
||||||
"type": "Scene",
|
"type": "Scene",
|
||||||
"private": true,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -347,23 +337,5 @@
|
|||||||
"gridDistance": 1,
|
"gridDistance": 1,
|
||||||
"gridUnits": "m",
|
"gridUnits": "m",
|
||||||
"primaryTokenAttribute": "sante.vie",
|
"primaryTokenAttribute": "sante.vie",
|
||||||
"secondaryTokenAttribute": "sante.endurance",
|
"secondaryTokenAttribute": "sante.endurance"
|
||||||
"manifestPlusVersion": "1.2.0",
|
|
||||||
"media": [
|
|
||||||
{
|
|
||||||
"type": "icon",
|
|
||||||
"url": "systems/foundryvtt-reve-de-dragon/styles/img/reve-de-dragon-icon.webp",
|
|
||||||
"caption": "Logo Rêve de Dragon"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "cover",
|
|
||||||
"url": "systems/foundryvtt-reve-de-dragon/styles/img/reve-de-dragon-cover.webp",
|
|
||||||
"caption": "Logo Rêve de Dragon"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "screenshot",
|
|
||||||
"url": "systems/foundryvtt-reve-de-dragon/styles/img/apercu.webp",
|
|
||||||
"caption": "Capture d'écran de Rêve de Dragon sur Foundry"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
1933
template.json
1933
template.json
File diff suppressed because it is too large
Load Diff
@ -60,8 +60,9 @@
|
|||||||
{{#if options.showCompNiveauBase}}Montrer tout{{else}}Filtrer{{/if}}</a>
|
{{#if options.showCompNiveauBase}}Montrer tout{{else}}Filtrer{{/if}}</a>
|
||||||
</span>
|
</span>
|
||||||
<span class="flexrow">
|
<span class="flexrow">
|
||||||
|
<i class="fas fa-search flex-shrink"></i>
|
||||||
<input class="recherche flex-grow" type="text" value="{{options.recherche.text}}" name="recherche"
|
<input class="recherche flex-grow" type="text" value="{{options.recherche.text}}" name="recherche"
|
||||||
size="8" data-dtype="String" placeholder=""/>
|
size="8" data-dtype="String" placeholder="chercher"/>
|
||||||
</span>
|
</span>
|
||||||
<span>
|
<span>
|
||||||
</span>
|
</span>
|
||||||
@ -162,7 +163,7 @@
|
|||||||
<label for="system.heure">Heure de naissance :</label>
|
<label for="system.heure">Heure de naissance :</label>
|
||||||
<select type="text" name="system.heure" value="{{system.heure}}" data-dtype="String">
|
<select type="text" name="system.heure" value="{{system.heure}}" data-dtype="String">
|
||||||
{{#select system.heure}}
|
{{#select system.heure}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-heures.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/heures-select-option.html"}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</li>
|
</li>
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
{{#if (eq compteur.label 'Ethylisme')}}
|
{{#if (eq compteur.label 'Ethylisme')}}
|
||||||
<select class="description-value" name="system.compteurs.ethylisme.value" id="ethylisme" data-dtype="Number">
|
<select class="description-value" name="system.compteurs.ethylisme.value" id="ethylisme" data-dtype="Number">
|
||||||
{{#select compteur.value}}
|
{{#select compteur.value}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-niveau-ethylisme.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/niveau-ethylisme.html"}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
{{else}}
|
{{else}}
|
||||||
|
@ -11,13 +11,13 @@
|
|||||||
<label class="carac-xp"/>
|
<label class="carac-xp"/>
|
||||||
{{else}}
|
{{else}}
|
||||||
{{#if carac.derivee}}
|
{{#if carac.derivee}}
|
||||||
<span class="carac-label" name="system.carac.{{key}}.label"><a name={{key}}>{{carac.label}}</a></span>
|
<span class="carac-label" name="system.carac.{{key}}.label"> <a name={{key}}>{{carac.label}}</a></span>
|
||||||
<label class="competence-value">{{carac.value}}</label>
|
<label class="competence-value">{{carac.value}}</label>
|
||||||
<label class="carac-xp"/>
|
<label class="carac-xp"/>
|
||||||
{{else}}
|
{{else}}
|
||||||
{{#if carac.isLevelUp}}
|
{{#if carac.isLevelUp}}
|
||||||
<span class="carac-label tooltip" name="system.carac.{{key}}.label">
|
<span class="carac-label tooltip" name="system.carac.{{key}}.label">
|
||||||
<span class="tooltiptext ttt-levelup">
|
<span class="tooltiptext ttt-xp">
|
||||||
Vous pouvez dépenser {{carac.xpNext}} points d'Experience pour augmenter de 1 votre caractéristique {{carac.label}}
|
Vous pouvez dépenser {{carac.xpNext}} points d'Experience pour augmenter de 1 votre caractéristique {{carac.label}}
|
||||||
</span>
|
</span>
|
||||||
<a name={{key}}>{{carac.label}}</a></span>
|
<a name={{key}}>{{carac.label}}</a></span>
|
||||||
@ -26,8 +26,8 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
<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}} />
|
||||||
<span class="carac-xp tooltip">
|
<span class="carac-xp tooltip">
|
||||||
<input class="carac-xp" type="text" name="system.carac.{{key}}.xp" value="{{carac.xp}}" data-dtype="number" {{#unless @root.options.vueDetaillee}}disabled{{/unless}} />
|
<input class="carac-xp" type="text" name="system.carac.{{key}}.xp" value="{{carac.xp}}" data-dtype="number" {{#unless @root.options.vueDetaillee}}disabled{{/unless}} />
|
||||||
<span class="tooltiptext ttt-xp">Vous devez acquérir {{carac.xpNext}} points d'Experience pour augmenter de 1 votre {{carac.label}}</span>
|
<span class="tooltiptext ttt-xp">Vous devez acquérir {{carac.xpNext}} points d'Experience pour augmenter de 1 votre {{carac.label}}</span>
|
||||||
</span>
|
</span>
|
||||||
{{#if carac.isLevelUp}}
|
{{#if carac.isLevelUp}}
|
||||||
<a class="carac-xp-augmenter" name="augmenter.{{key}}" title="Augmenter">
|
<a class="carac-xp-augmenter" name="augmenter.{{key}}" title="Augmenter">
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<ol class="item-list alterne-list">
|
<ol class="item-list alterne-list">
|
||||||
{{#each (trier competences) as |comp key|}}
|
{{#each 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">
|
<a class="competence-label">
|
||||||
<img class="sheet-competence-img" src="{{comp.img}}" />
|
<img class="sheet-competence-img" src="{{comp.img}}" />
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
</a>
|
</a>
|
||||||
|
|
||||||
{{#if system.isLevelUp}}
|
{{#if system.isLevelUp}}
|
||||||
<span class="tooltiptext ttt-levelup">Vous pouvez dépenser {{system.xpNext}} points d'Experience pour augmenter de 1 votre compétence {{name}}</span>
|
<span class="tooltiptext ttt-xp">Vous pouvez dépenser {{system.xpNext}} points d'Experience pour augmenter de 1 votre compétence {{name}}</span>
|
||||||
<a class="competence-xp-augmenter" compname="{{name}}" title="Augmenter">
|
<a class="competence-xp-augmenter" compname="{{name}}" title="Augmenter">
|
||||||
<i class="fas fa-arrow-alt-circle-up"></i>
|
<i class="fas fa-arrow-alt-circle-up"></i>
|
||||||
</a>
|
</a>
|
||||||
@ -17,12 +17,10 @@
|
|||||||
{{#unless @root.options.vueDetaillee}}disabled{{/unless}} />
|
{{#unless @root.options.vueDetaillee}}disabled{{/unless}} />
|
||||||
|
|
||||||
{{#if @root.options.vueDetaillee}}
|
{{#if @root.options.vueDetaillee}}
|
||||||
<span class="competence-xp {{#unless system.isLevelUp}}tooltip{{/unless}}">
|
<span class="competence-xp tooltip">
|
||||||
<input class="competence-xp " type="text" compname="{{name}}" name="comp-xp-{{name}}"
|
<input class="competence-xp " type="text" compname="{{name}}" name="comp-xp-{{name}}"
|
||||||
value="{{numberFormat system.xp decimals=0 sign=false}}" data-dtype="number"/>
|
value="{{numberFormat system.xp decimals=0 sign=false}}" data-dtype="number"/>
|
||||||
{{#unless system.isLevelUp}}
|
|
||||||
<span class="tooltiptext left-competence ttt-xp">Vous devez acquérir {{system.xpNext}} points d'Experience pour augmenter de 1 votre compétence {{name}}</span>
|
<span class="tooltiptext left-competence ttt-xp">Vous devez acquérir {{system.xpNext}} points d'Experience pour augmenter de 1 votre compétence {{name}}</span>
|
||||||
{{/unless}}
|
|
||||||
</span>
|
</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if (eq system.categorie 'draconic')}}
|
{{#if (eq system.categorie 'draconic')}}
|
||||||
|
@ -1,17 +1,15 @@
|
|||||||
{{#if rencontres.length}}
|
{{#if hautreve.rencontres.length}}
|
||||||
<h3>Rencontres en attente dans les TMR</h3>
|
<h3>Rencontres en attente dans les TMR</h3>
|
||||||
<ul class="item-list">
|
<ul class="item-list">
|
||||||
{{#each rencontres as |rencontre key|}}
|
{{#each hautreve.rencontres as |rencontre key|}}
|
||||||
<li class="item flexrow" data-item-id="{{rencontre._id}}" data-attribute="{{key}}">
|
<li class="item flexrow" data-item-id="{{key}}" data-attribute="{{key}}">
|
||||||
<img class="sheet-competence-img" src="{{rencontre.img}}" />
|
<span class="display-label"><a data-item-id="{{key}}">{{rencontre.name}} r{{rencontre.force}}</a></span>
|
||||||
<span class="display-label flex-grow"><a>
|
<span class="flex-shrink">{{rencontre.coord}} - {{caseTmr-label rencontre.coord}}</span>
|
||||||
{{rencontre.name}} r{{rencontre.system.force}} ({{rencontre.system.coord}} - {{caseTmr-label rencontre.system.coord}})
|
{{#if rencontre.date}}
|
||||||
</a></span>
|
<span>{{upperFirst rencontre.heure}}, le {{rencontre.date}}</span>
|
||||||
{{#if rencontre.system.date}}
|
|
||||||
<span class="flex-shrink">{{upperFirst rencontre.system.heure}}, le {{rencontre.system.date}}</span>
|
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<div class="item-controls flex-shrink">
|
<div class="item-controls flex-shrink">
|
||||||
<a class="item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
|
<a class="rencontre-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
@ -4,11 +4,11 @@
|
|||||||
{{#each sorts as |sort key|}}
|
{{#each sorts as |sort key|}}
|
||||||
<li class="item list-item flexrow" data-item-id="{{sort._id}}" data-attribute="{{key}}">
|
<li class="item list-item flexrow" data-item-id="{{sort._id}}" data-attribute="{{key}}">
|
||||||
<img class="sheet-competence-img" src="{{sort.img}}" />
|
<img class="sheet-competence-img" src="{{sort.img}}" />
|
||||||
<span class="display-label flex-grow-2">
|
<span class="display-label flex-grow">
|
||||||
<a data-item-id="{{sort._id}}">{{sort.name}}
|
<a data-item-id="{{sort._id}}">{{sort.name}}
|
||||||
- {{#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}}
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
<span>{{sort.system.draconic}} / {{sort.system.difficulte}}</span>
|
<span>{{sort.system.draconic}} / {{sort.system.difficulte}}</span>
|
||||||
<div class="item-controls flex-shrink">
|
<div class="item-controls flex-shrink">
|
||||||
<a class="item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
|
<a class="item-delete" title="Supprimer"><i class="fas fa-trash"></i></a>
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
<label for="mois">Mois</label>
|
<label for="mois">Mois</label>
|
||||||
<select name="nomMois" id="nomMois" data-dtype="String">
|
<select name="nomMois" id="nomMois" data-dtype="String">
|
||||||
{{#select nomMois}}
|
{{#select nomMois}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-heures.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/heures-select-option.html"}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
@ -29,7 +29,7 @@
|
|||||||
<label for="heure">Heure Draconique</label>
|
<label for="heure">Heure Draconique</label>
|
||||||
<select name="nomHeure" id="nomHeure" data-dtype="String">
|
<select name="nomHeure" id="nomHeure" data-dtype="String">
|
||||||
{{#select nomHeure}}
|
{{#select nomHeure}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-heures.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/heures-select-option.html"}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<i class="calendar-btn astrologie-btn-edit fas fa-cog" title="Astrologie"></i>
|
<i class="calendar-btn astrologie-btn-edit fas fa-cog" title="Astrologie"></i>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<div class="calendar-hdr">
|
<div class="calendar-hdr">
|
||||||
<p id="calendar-move-handle" class="calendar-date-rdd" title="Deplacer">Jour {{jourMois}} de {{nomMois}} ({{nomSaison}})</p>
|
<p id="calendar-move-handle" class="calendar-date-rdd" title="Deplacer">Jour {{jourMois}} de {{nomMois}} ({{nomSaison}})</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="calendar-container">
|
<div class="calendar-container">
|
||||||
{{#if isGM}}
|
{{#if isGM}}
|
||||||
@ -20,16 +20,8 @@
|
|||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<div class="calendar-weekday-time">
|
<div class="calendar-weekday-time">
|
||||||
{{#if isGM}}
|
<p class="calendar-weekday"><img class="calendar-heure-img" src="{{iconHeure}}" alt="{{nomHeure}}"/> <span class="calendar-heure-texte">{{nomHeure}}</span></p>
|
||||||
<a class="ajout-chronologie calendar-weekday">
|
<span class="calendar-time isGM"><p class="calendar-time-disp">{{minutesRelative}} minutes</p></span>
|
||||||
<img class="calendar-heure-img" src="{{iconHeure}}" alt="{{nomHeure}}"/> <span class="calendar-heure-texte">{{nomHeure}}</span>
|
|
||||||
</a>
|
|
||||||
<p class="calendar-time-disp calendar-time isGM">{{minutesRelative}} minutes</p>
|
|
||||||
{{else}}
|
|
||||||
<a class="ajout-chronologie">
|
|
||||||
<img class="calendar-heure-img" src="{{iconHeure}}" alt="{{nomHeure}}"/> <span class="calendar-heure-texte">{{nomHeure}}</span>
|
|
||||||
</a>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
</div>
|
||||||
{{#if isGM}}
|
{{#if isGM}}
|
||||||
<div class="calendar-btn-container-right">
|
<div class="calendar-btn-container-right">
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<img class="chat-icon" src="{{competence.img}}" alt="{{competence.name}}"/>
|
<img class="chat-icon" src="{{competence.img}}" alt="{{competence.name}}"/>
|
||||||
<h4 data-categorie="tmr" data-actor-id="{{actor._id}}" data-rencontre-round="{{nbRounds}}">
|
<h4 data-categorie="tmr" data-actor-id="{{actor._id}}" data-rencontre-round="{{nbRounds}}">
|
||||||
{{alias}} rencontre {{#if (eq rencontre.system.genre 'f')}}une{{else}}un{{/if}} {{rencontre.name}} de force {{rencontre.system.force}}
|
{{alias}} rencontre {{#if (eq genre 'f')}}une{{else}}un{{/if}} {{rencontre.name}} de force {{rencontre.force}}
|
||||||
</h4>
|
</h4>
|
||||||
{{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
|
{{> "systems/foundryvtt-reve-de-dragon/templates/chat-infojet.html"}}
|
||||||
<hr>
|
<hr>
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<hr>
|
<hr>
|
||||||
<span>
|
<span>
|
||||||
{{#if rolled.isSuccess}}
|
{{#if rolled.isSuccess}}
|
||||||
{{alias}} maîtrise le Rêve de Dragon! ll gagne {{rencontre.system.force}} points de Rêve.
|
{{alias}} maîtrise le Rêve de Dragon! ll gagne {{rencontre.force}} points de Rêve.
|
||||||
{{#if tete}}
|
{{#if tete}}
|
||||||
<br>{{alias}} doit <strong>demander au Gardien des Rêves</strong> de faire un tirage sur une des
|
<br>{{alias}} doit <strong>demander au Gardien des Rêves</strong> de faire un tirage sur une des
|
||||||
tables des têtes de dragon (Haut-rêvant ou Tous personnages).
|
tables des têtes de dragon (Haut-rêvant ou Tous personnages).
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
<h2>{{dateRdD.jour}} {{signeHeure 'label' dateRdD.moisRdD}}, an {{dateRdD.annee}} à l'heure de {{signeHeure 'label' heureRdD}}</h2>
|
|
||||||
<p>{{information}}</p>
|
|
||||||
<p class="poesie-reference">Par {{auteur}} ({{dateReel}})</p>
|
|
||||||
<hr>
|
|
@ -6,7 +6,7 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<label> Conditions</label>
|
<label> Conditions</label>
|
||||||
<select name="diffConditions" id="diffConditions" data-dtype="Number">
|
<select name="diffConditions" id="diffConditions" data-dtype="number">
|
||||||
{{#select diffConditions}}
|
{{#select diffConditions}}
|
||||||
{{#each ajustementsConditions as |key|}}
|
{{#each ajustementsConditions as |key|}}
|
||||||
<option value={{key}}>{{numberFormat key decimals=0 sign=true}}</option>
|
<option value={{key}}>{{numberFormat key decimals=0 sign=true}}</option>
|
||||||
@ -14,7 +14,7 @@
|
|||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
<label> Jours</label>
|
<label> Jours</label>
|
||||||
<select name="joursAstrologie" id="joursAstrologie" data-dtype="Number">
|
<select name="joursAstrologie" id="joursAstrologie" data-dtype="number">
|
||||||
{{#select joursSuivants}}
|
{{#select joursSuivants}}
|
||||||
{{#each dates as |date key|}}
|
{{#each dates as |date key|}}
|
||||||
<option value={{date.index}}>{{date.label}}</option>
|
<option value={{date.index}}>{{date.label}}</option>
|
||||||
|
@ -1,55 +0,0 @@
|
|||||||
<form class="rdddialogchrono">
|
|
||||||
<div class="flexcol">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="auteur">Auteur</label>
|
|
||||||
<input type="text" name="auteur" value="{{auteur}}" data-dtype="String" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="information">Information</label>
|
|
||||||
<textarea autocomplete="off" title="Information" name="information">{{information}}</textarea>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="heureRdD">Heure</label>
|
|
||||||
<select type="text" name="heureRdD" value="{{heureRdD}}" data-dtype="String" />
|
|
||||||
{{#select heureRdD}}
|
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-heures.html"}}
|
|
||||||
{{/select}}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="dateRdD.jour">Date en jeu</label>
|
|
||||||
<span class="flexrow">
|
|
||||||
<input type="text" name="dateRdD.jour" value="{{dateRdD.jour}}" data-dtype="Number" min="1" max="28"/>
|
|
||||||
<select type="text" name="dateRdD.moisRdD.key" value="{{dateRdD.moisRdD.key}}" data-dtype="String" >
|
|
||||||
{{#select dateRdD.moisRdD.key}}
|
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-heures.html"}}
|
|
||||||
{{/select}}
|
|
||||||
</select>
|
|
||||||
<input type="text" name="dateRdD.annee" value="{{dateRdD.annee}}" data-dtype="Number" />
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="dateReel">Date réelle</label>
|
|
||||||
<input type="datetime-local" name="dateReel" value="{{dateReel}}" data-dtype="String" />
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="journalId">Journal</label>
|
|
||||||
<select type="text" name="journalId" value="{{journalId}}" data-dtype="String">
|
|
||||||
{{#select journalId}}
|
|
||||||
<option value=""></option>
|
|
||||||
{{#each (trier journaux) as |journal key|}}
|
|
||||||
<option value="{{journal.id}}">
|
|
||||||
{{#if journal.folder}}
|
|
||||||
{{#if journal.folder.ancestors}}
|
|
||||||
{{#each journal.folder.ancestors as |parent key|}}{{parent.name}} / {{/each}}
|
|
||||||
{{/if}}
|
|
||||||
{{journal.folder.name}} /
|
|
||||||
{{/if}}
|
|
||||||
{{journal.name}}
|
|
||||||
</option>
|
|
||||||
{{/each}}
|
|
||||||
{{/select}}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
@ -1,5 +1,5 @@
|
|||||||
<form class="skill-roll-dialog">
|
<form class="skill-roll-dialog">
|
||||||
<h2>{{rencontre.name}} de force {{rencontre.system.force}}!</h2>
|
<h2>Rêve de Dragon de force {{rencontre.force}}!</h2>
|
||||||
<div class="grid grid-2col">
|
<div class="grid grid-2col">
|
||||||
<div class="flex-group-left">
|
<div class="flex-group-left">
|
||||||
<img class="chat-icon" src="{{competence.img}}" alt="{{competence.name}}"/>
|
<img class="chat-icon" src="{{competence.img}}" alt="{{competence.name}}"/>
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
{{#each (trier @root.competences) as |competence key|}}
|
{{#each @root.competences as |competence key|}}
|
||||||
<option value="{{competence.name}}">{{competence.name}}</option>
|
<option value="{{competence.name}}">{{competence.name}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
{{#each (trier @root.competences) as |competence key|}}
|
|
||||||
{{#if (eq competence.system.categorie 'draconic')}}
|
|
||||||
<option value="{{competence.name}}">{{competence.name}}</option>
|
|
||||||
{{/if}}
|
|
||||||
{{/each}}
|
|
5
templates/herbe-categorie.html
Normal file
5
templates/herbe-categorie.html
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<option value=""></option>
|
||||||
|
<option value="Alchimie">Alchimie</option>
|
||||||
|
<option value="Cuisine">Cuisine</option>
|
||||||
|
<option value="Repos">Repos</option>
|
||||||
|
<option value="Soin">Soin</option>
|
5
templates/herbe-frequence.html
Normal file
5
templates/herbe-frequence.html
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<option value=""></option>
|
||||||
|
<option value="Commune">Commune</option>
|
||||||
|
<option value="Frequente">Fréquente</option>
|
||||||
|
<option value="Rare">Rare</option>
|
||||||
|
<option value="Rarissime">Rarissime</option>
|
@ -10,7 +10,7 @@
|
|||||||
<label for="niveau">Mode spécifique</label>
|
<label for="niveau">Mode spécifique</label>
|
||||||
<select name="system.specific" id="specific" data-dtype="String">
|
<select name="system.specific" id="specific" data-dtype="String">
|
||||||
{{#select system.specific}}
|
{{#select system.specific}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-tmr-effet.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/casetmr-specific-list.html"}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
{{#if isGM}}
|
{{#if isGM}}
|
||||||
<select name="system.base" id="base" data-dtype="Number">
|
<select name="system.base" id="base" data-dtype="Number">
|
||||||
{{#select system.base}}
|
{{#select system.base}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-base-competence.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/competence-base.html"}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
{{else}}
|
{{else}}
|
||||||
@ -46,7 +46,7 @@
|
|||||||
<label for="defaut_carac">Caractéristique par défaut </label>
|
<label for="defaut_carac">Caractéristique par défaut </label>
|
||||||
<select name="system.defaut_carac" id="defaut_carac" data-dtype="String">
|
<select name="system.defaut_carac" id="defaut_carac" data-dtype="String">
|
||||||
{{#select system.defaut_carac}}
|
{{#select system.defaut_carac}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-caracteristiques.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/competence-carac-defaut.html"}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
@ -21,7 +21,9 @@
|
|||||||
<label for="xp">Compétence</label>
|
<label for="xp">Compétence</label>
|
||||||
<select name="system.competence" id="competenceselect" data-dtype="String">
|
<select name="system.competence" id="competenceselect" data-dtype="String">
|
||||||
{{#select system.competence}}
|
{{#select system.competence}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-competence.html"}}
|
{{#each competences as |competence key|}}
|
||||||
|
<option value="{{competence.name}}">{{competence.name}}</option>
|
||||||
|
{{/each}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
@ -6,7 +6,9 @@
|
|||||||
<label for="xp">Compétence</label>
|
<label for="xp">Compétence</label>
|
||||||
<select name="system.competence" id="competenceselect" data-dtype="String">
|
<select name="system.competence" id="competenceselect" data-dtype="String">
|
||||||
{{#select system.competence}}
|
{{#select system.competence}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-competence.html"}}
|
{{#each competences as |competence key|}}
|
||||||
|
<option value="{{competence.name}}">{{competence.name}}</option>
|
||||||
|
{{/each}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
@ -22,7 +24,7 @@
|
|||||||
<label for="xp">Heure</label>
|
<label for="xp">Heure</label>
|
||||||
<select name="system.heure" id="heure" data-dtype="String">
|
<select name="system.heure" id="heure" data-dtype="String">
|
||||||
{{#select system.heure}}
|
{{#select system.heure}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-heures.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/heures-select-option.html"}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
@ -42,7 +44,7 @@
|
|||||||
<label for="xp">Case TMR</label>
|
<label for="xp">Case TMR</label>
|
||||||
<select name="system.tmr" id="tmr" data-dtype="String">
|
<select name="system.tmr" id="tmr" data-dtype="String">
|
||||||
{{#select system.tmr}}
|
{{#select system.tmr}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-tmr-type.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/sort-tmr.html"}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
<label>Caractéristique</label>
|
<label>Caractéristique</label>
|
||||||
<select name="system.default_carac" id="default_carac" data-dtype="String">
|
<select name="system.default_carac" id="default_carac" data-dtype="String">
|
||||||
{{#select system.default_carac}}
|
{{#select system.default_carac}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-caracteristiques.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/competence-carac-defaut.html"}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
@ -20,7 +20,9 @@
|
|||||||
<label>Compétence</label>
|
<label>Compétence</label>
|
||||||
<select name="system.competence" id="competenceselect" data-dtype="String">
|
<select name="system.competence" id="competenceselect" data-dtype="String">
|
||||||
{{#select system.competence}}
|
{{#select system.competence}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-competence.html"}}
|
{{#each competences as |competence key|}}
|
||||||
|
<option value="{{competence.name}}">{{competence.name}}</option>
|
||||||
|
{{/each}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
@ -105,7 +105,7 @@
|
|||||||
</select>
|
</select>
|
||||||
<select name="splitDate.month" class="enchanteDate" id="nomMois" data-dtype="String">
|
<select name="splitDate.month" class="enchanteDate" id="nomMois" data-dtype="String">
|
||||||
{{#select splitDate.month}}
|
{{#select splitDate.month}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-heures.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/heures-select-option.html"}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,232 +0,0 @@
|
|||||||
<form class="{{cssClass}}" autocomplete="off">
|
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/header-item.html"}}
|
|
||||||
{{!-- Sheet Body --}}
|
|
||||||
<nav class="sheet-tabs tabs" data-group="primary">
|
|
||||||
<a class="item" data-tab="rencontre">Rencontre</a>
|
|
||||||
<a class="item" data-tab="succes">Victoire</a>
|
|
||||||
<a class="item" data-tab="echec">Défaite</a>
|
|
||||||
{{#unless system.mauvaiseRencontre}}
|
|
||||||
<a class="item" data-tab="frequence">Fréquences</a>
|
|
||||||
{{/unless}}
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<section class="sheet-body">
|
|
||||||
|
|
||||||
<div class="tab items" data-group="primary" data-tab="rencontre">
|
|
||||||
{{#if isOwned}}
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.force">Rêve</label>
|
|
||||||
<input type="text" name="system.force" value="{{system.force}}" data-dtype="Number"/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.coord">Case TMR - {{caseTmr-label system.coord}}</label>
|
|
||||||
<input class="attribute-value" type="text" name="system.coord" value="{{system.coord}}" data-dtype="String" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.date">Date/heure</label>
|
|
||||||
<div class="flexrow">
|
|
||||||
<input class="attribute-value" type="text" name="system.date" value="{{system.date}}" data-dtype="String" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
<input class="attribute-value" type="text" name="system.heure" value="{{system.heure}}" data-dtype="String" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{else}}
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.formule">Rêve</label>
|
|
||||||
<input type="text" name="system.formule" value="{{system.formule}}" data-dtype="String" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.genre">Genre</label>
|
|
||||||
<select type="text" name="system.genre" data-dtype="String" {{#unless isGM}}disabled{{/unless}}>
|
|
||||||
{{#select system.genre}}
|
|
||||||
<option value=""></option>
|
|
||||||
<option value="f">Féminin</option>
|
|
||||||
<option value="m">Masculin</option>
|
|
||||||
{{/select}}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.ordreTri">Position dans la table</label>
|
|
||||||
<input type="number" name="system.ordreTri" value="{{system.ordreTri}}" min="0" max="100" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.presentCite">Offert par les Présents des cités</label>
|
|
||||||
<input type="checkbox" name="system.presentCite" data-dtype="Boolean" {{#if system.presentCite}}checked{{/if}} {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.refoulement">Refoulement</label>
|
|
||||||
<input type="number" name="system.refoulement" value="{{system.refoulement}}" min="0" max="4" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.mauvaiseRencontre">Mauvaise rencontre</label>
|
|
||||||
<input type="checkbox" name="system.mauvaiseRencontre" data-dtype="Boolean" {{#if system.mauvaiseRencontre}}checked{{/if}} {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
{{#unless isOwned}}
|
|
||||||
{{#if system.mauvaiseRencontre}}
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.frequence.mauvaise">Fréquence mauvaise rencontre</label>
|
|
||||||
<input type="number" name="system.frequence.mauvaise" value="{{system.frequence.mauvaise}}" min="0" max="100" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
{{/unless}}
|
|
||||||
<div class="flexcol">
|
|
||||||
<span><label>Description : </label></span>
|
|
||||||
<div class="form-group editor">
|
|
||||||
{{editor description target="system.description" button=true owner=owner editable=editable}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="tab items" data-group="primary" data-tab="succes">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.succes.message">Message</label>
|
|
||||||
<textarea autocomplete="off" title="Message en cas de succès" name="system.succes.message" {{#unless isGM}}disabled{{/unless}}/>{{system.succes.message}}</textarea>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="button-dropdown">
|
|
||||||
{{#if isGM}}
|
|
||||||
<label class="button-dropbutton" title="Ajouter">Effets <i class="fas fa-plus-circle"></i></label>
|
|
||||||
<div class="button-dropdown-content">
|
|
||||||
{{#each effets.succes.liste as |effet|}}
|
|
||||||
<a class="effet-add" data-effet-code="{{effet.code}}" data-effet-resultat="{{effet.resultat}}">{{effet.description}}</a>
|
|
||||||
{{/each}}
|
|
||||||
</div>
|
|
||||||
{{else}}
|
|
||||||
<label>Effets</label>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label></label>
|
|
||||||
<div class="flexcol">
|
|
||||||
{{#each effets.succes.select as |effet pos|}}
|
|
||||||
<label>
|
|
||||||
{{effet.description}}
|
|
||||||
{{#if @root.isGM}}
|
|
||||||
<a class="effet-delete" data-effet-code="{{effet.code}}" data-effet-resultat="{{effet.resultat}}" data-effet-pos="{{pos}}" title="Supprimer"><i class="fas fa-trash"></i></a>
|
|
||||||
{{/if}}
|
|
||||||
</label>
|
|
||||||
{{/each}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.succes.reference">Réference</label>
|
|
||||||
<input type="text" name="system.succes.reference" value="{{system.succes.reference}}" data-dtype="String" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="flexcol">
|
|
||||||
<label for="system.succes.poesie">Poésie</label>
|
|
||||||
<div class="form-group editor">
|
|
||||||
{{editor system.succes.poesie target="system.succes.poesie" button=true owner=owner editable=editable}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="tab items" data-group="primary" data-tab="echec">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.echec.message">Message</label>
|
|
||||||
<textarea autocomplete="off" title="Message en cas d'échec" name="system.echec.message" {{#unless isGM}}disabled{{/unless}}/>{{system.echec.message}}</textarea>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="button-dropdown">
|
|
||||||
{{#if isGM}}
|
|
||||||
<label class="button-dropbutton" title="Ajouter">Effets <i class="fas fa-plus-circle"></i></label>
|
|
||||||
<div class="button-dropdown-content">
|
|
||||||
{{#each effets.echec.liste as |effet|}}
|
|
||||||
<a class="effet-add" data-effet-code="{{effet.code}}" data-effet-resultat="{{effet.resultat}}">{{effet.description}}</a>
|
|
||||||
{{/each}}
|
|
||||||
</div>
|
|
||||||
{{else}}
|
|
||||||
<label>Effets</label>
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label></label>
|
|
||||||
<div class="flexcol">
|
|
||||||
{{#each effets.echec.select as |effet pos|}}
|
|
||||||
<label>
|
|
||||||
{{effet.description}}
|
|
||||||
{{#if @root.isGM}}
|
|
||||||
<a class="effet-delete" data-effet-code="{{effet.code}}" data-effet-resultat="{{effet.resultat}}" data-effet-pos="{{pos}}" title="Supprimer"><i class="fas fa-trash"></i></a>
|
|
||||||
{{/if}}
|
|
||||||
</label>
|
|
||||||
{{/each}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.echec.reference">Réference</label>
|
|
||||||
<input type="text" name="system.echec.reference" value="{{system.echec.reference}}" data-dtype="String" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="flexcol">
|
|
||||||
<label for="system.echec.poesie">Poésie</label>
|
|
||||||
<div class="form-group editor">
|
|
||||||
{{editor system.echec.poesie target="system.echec.poesie" button=true owner=owner editable=editable}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{#unless system.mauvaiseRencontre}}
|
|
||||||
<div class="tab items" data-group="primary" data-tab="frequence">
|
|
||||||
<hr>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.frequence.cite">Fréquence en Cité</label>
|
|
||||||
<input type="number" name="system.frequence.cite" value="{{system.frequence.cite}}" min="0" max="100" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.frequence.sanctuaire">Fréquence en Sanctuaire</label>
|
|
||||||
<input type="number" name="system.frequence.sanctuaire" value="{{system.frequence.sanctuaire}}" min="0" max="100" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.frequence.plaines">Fréquence en Plaines</label>
|
|
||||||
<input type="number" name="system.frequence.plaines" value="{{system.frequence.plaines}}" min="0" max="100" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.frequence.pont">Fréquence en Pont</label>
|
|
||||||
<input type="number" name="system.frequence.pont" value="{{system.frequence.pont}}" min="0" max="100" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.frequence.collines">Fréquence en Collines</label>
|
|
||||||
<input type="number" name="system.frequence.collines" value="{{system.frequence.collines}}" min="0" max="100" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.frequence.foret">Fréquence en Forêt</label>
|
|
||||||
<input type="number" name="system.frequence.foret" value="{{system.frequence.foret}}" min="0" max="100" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.frequence.monts">Fréquence en Monts</label>
|
|
||||||
<input type="number" name="system.frequence.monts" value="{{system.frequence.monts}}" min="0" max="100" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.frequence.desert">Fréquence en Désert</label>
|
|
||||||
<input type="number" name="system.frequence.desert" value="{{system.frequence.desert}}" min="0" max="100" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.frequence.fleuve">Fréquence en Fleuve</label>
|
|
||||||
<input type="number" name="system.frequence.fleuve" value="{{system.frequence.fleuve}}" min="0" max="100" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.frequence.lac">Fréquence en Lac</label>
|
|
||||||
<input type="number" name="system.frequence.lac" value="{{system.frequence.lac}}" min="0" max="100" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.frequence.marais">Fréquence en Marais</label>
|
|
||||||
<input type="number" name="system.frequence.marais" value="{{system.frequence.marais}}" min="0" max="100" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.frequence.gouffre">Fréquence en Gouffre</label>
|
|
||||||
<input type="number" name="system.frequence.gouffre" value="{{system.frequence.gouffre}}" min="0" max="100" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.frequence.necropole">Fréquence en Nécropole</label>
|
|
||||||
<input type="number" name="system.frequence.necropole" value="{{system.frequence.necropole}}" min="0" max="100" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="system.frequence.desolation">Fréquence en Désolation</label>
|
|
||||||
<input type="number" name="system.frequence.desolation" value="{{system.frequence.desolation}}" min="0" max="100" data-dtype="Number" {{#unless isGM}}disabled{{/unless}}/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{/unless}}
|
|
||||||
</section>
|
|
||||||
</form>
|
|
@ -6,7 +6,7 @@
|
|||||||
<label>Draconic</label>
|
<label>Draconic</label>
|
||||||
<select name="system.draconic" id="draconic" data-dtype="String">
|
<select name="system.draconic" id="draconic" data-dtype="String">
|
||||||
{{#select system.draconic}}
|
{{#select system.draconic}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-draconic.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/sort-draconic.html"}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
@ -14,7 +14,7 @@
|
|||||||
<label for="system.caseTMR">Case TMR</label>
|
<label for="system.caseTMR">Case TMR</label>
|
||||||
<select name="system.caseTMR" id="caseTMR" data-dtype="String">
|
<select name="system.caseTMR" id="caseTMR" data-dtype="String">
|
||||||
{{#select system.caseTMR}}
|
{{#select system.caseTMR}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-tmr-type.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/sort-tmr.html"}}
|
||||||
<option value="special">Case spéciale TMR (saisie ci-dessous)</option>
|
<option value="special">Case spéciale TMR (saisie ci-dessous)</option>
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
<label>Draconic</label>
|
<label>Draconic</label>
|
||||||
<select name="system.draconic" id="draconic" data-dtype="String">
|
<select name="system.draconic" id="draconic" data-dtype="String">
|
||||||
{{#select system.draconic}}
|
{{#select system.draconic}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-draconic.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/sort-draconic.html"}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
@ -33,7 +33,7 @@
|
|||||||
<label for="system.heurecible">Heure de naissance cible</label>
|
<label for="system.heurecible">Heure de naissance cible</label>
|
||||||
<select type="text" name="system.heurecible" value="{{system.heurecible}}" data-dtype="String">
|
<select type="text" name="system.heurecible" value="{{system.heurecible}}" data-dtype="String">
|
||||||
{{#select system.heurecible}}
|
{{#select system.heurecible}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-heures.html"}}
|
{{>"systems/foundryvtt-reve-de-dragon/templates/heures-select-option.html"}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
@ -16,8 +16,9 @@
|
|||||||
<label for="xp">Compétence</label>
|
<label for="xp">Compétence</label>
|
||||||
<select name="system.competence" id="competenceselect" data-dtype="String">
|
<select name="system.competence" id="competenceselect" data-dtype="String">
|
||||||
{{#select system.competence}}
|
{{#select system.competence}}
|
||||||
<option value="">Sans compétence</option>
|
{{#each competences as |competence key|}}
|
||||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-competence.html"}}
|
<option value="{{competence.name}}">{{competence.name}}</option>
|
||||||
|
{{/each}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
1
templates/logger.html
Normal file
1
templates/logger.html
Normal file
@ -0,0 +1 @@
|
|||||||
|
{{log 'HandleBars' this}}
|
@ -1,21 +0,0 @@
|
|||||||
<form autocomplete="off" onsubmit="event.preventDefault();">
|
|
||||||
{{log 'systemCompendiums'systemCompendiums}}
|
|
||||||
{{log 'availableCompendiums' availableCompendiums}}
|
|
||||||
<ul>
|
|
||||||
{{#each systemCompendiums as |definition key|}}
|
|
||||||
<li class="flexrow">
|
|
||||||
<label>{{definition.label}}</label>
|
|
||||||
<select data-dtype="String" class="system-compendium-setting flex-grow-2" data-compendium="{{definition.compendium}}" >
|
|
||||||
{{#select definition.value}}
|
|
||||||
{{#each @root.availableCompendiums as |available key|}}
|
|
||||||
{{#if (eq available.type definition.type)}}
|
|
||||||
<option value="{{available.name}}">{{available.path }}</option>
|
|
||||||
{{/if}}
|
|
||||||
{{/each}}
|
|
||||||
{{/select}}
|
|
||||||
</select>
|
|
||||||
</li>
|
|
||||||
{{/each}}
|
|
||||||
</ul>
|
|
||||||
</form>
|
|
||||||
|
|
4
templates/sort-draconic.html
Normal file
4
templates/sort-draconic.html
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<option value="oniros">Oniros</option>
|
||||||
|
<option value="hypnos">Hypnos</option>
|
||||||
|
<option value="narcos">Narcos</option>
|
||||||
|
<option value="thanatos">Thanatos</option>
|
@ -5,4 +5,4 @@
|
|||||||
Dans la console dans les "devtools" de Chrome, quelques commandes sont utiles:
|
Dans la console dans les "devtools" de Chrome, quelques commandes sont utiles:
|
||||||
|
|
||||||
* `CONFIG.debug.hooks = true` permet de logger les appels des hooks et les objets passés
|
* `CONFIG.debug.hooks = true` permet de logger les appels des hooks et les objets passés
|
||||||
|
* `game.system.rdd.TMRUtility.setForceRencontre('changeur', 3)` pour forcer une rencontre avec un changeur de rêves
|
||||||
|
Reference in New Issue
Block a user