diff --git a/lang/fr.json b/lang/fr.json index 465f180a..6ba5504e 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -43,7 +43,8 @@ "TypeSouffle": "Souffle de Dragon", "TypeTete": "Tête de Dragon", "TypePossession": "Possession", - "TypeSortreserve": "Sort en réserve" + "TypeSortreserve": "Sort en réserve", + "TypeExtraitpoetique": "Extrait poetique" }, "EFFECT": { "StatusStunned": "Sonné", diff --git a/module/actor.js b/module/actor.js index 91a4714b..bb462a4b 100644 --- a/module/actor.js +++ b/module/actor.js @@ -2349,7 +2349,7 @@ export class RdDActor extends Actor { const dialog = await RdDRoll.create(this, rollData, { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-sort.html', - options: { height: 600 }, + options: { height: 'fit-content' }, close: html => { this.currentTMR.maximize() } // Re-display TMR }, { @@ -2674,7 +2674,7 @@ export class RdDActor extends Actor { const dialog = await RdDRoll.create(this, artData, { html: `systems/foundryvtt-reve-de-dragon/templates/dialog-roll-${oeuvre.type}.html`, - options: { height: 500, } + options: { height: 'fit-content', } }, { name: `jet-${artData.art}`, @@ -2814,7 +2814,7 @@ export class RdDActor extends Actor { const dialog = await RdDRoll.create(this, meditationData, { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-meditation.html', - options: { height: 575, } + options: { height: 'fit-content', } }, { name: 'jet-meditation', @@ -2891,7 +2891,7 @@ export class RdDActor extends Actor { const dialog = await RdDRoll.create(this, rollData, { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-signedraconique.html', - options: { height: 600 }, + options: { height: 'fit-content' }, close: html => { this.currentTMR.maximize() } // Re-display TMR }, { diff --git a/module/dialog-item-achat.js b/module/dialog-item-achat.js index 1a0c6ef7..b137b5ab 100644 --- a/module/dialog-item-achat.js +++ b/module/dialog-item-achat.js @@ -49,7 +49,7 @@ export class DialogItemAchat extends Dialog { constructor(html, venteData) { const isConsommable = venteData.item.type == 'nourritureboisson' && venteData.acheteur?.isPersonnage(); - let options = { classes: ["dialogachat"], width: 400, height: isConsommable ? 450 : 350, 'z-index': 99999 }; + let options = { classes: ["dialogachat"], width: 400, height: 'fit-content', 'z-index': 99999 }; const actionAchat = venteData.prixLot > 0 ? "Acheter" : "Prendre"; const buttons = {}; diff --git a/module/dialog-item-consommer.js b/module/dialog-item-consommer.js index 7de062c8..81ef25d9 100644 --- a/module/dialog-item-consommer.js +++ b/module/dialog-item-consommer.js @@ -9,7 +9,7 @@ export class DialogConsommer extends Dialog { } constructor(actor, item, consommerData, html, onActionItem = async ()=>{}) { - const options = { classes: ["dialogconsommer"], width: 350, height: 450, 'z-index': 99999 }; + const options = { classes: ["dialogconsommer"], width: 350, height: 'fit-content', 'z-index': 99999 }; let conf = { title: consommerData.title, content: html, diff --git a/module/dialog-item-vente.js b/module/dialog-item-vente.js index 2b2ebdcd..8669e365 100644 --- a/module/dialog-item-vente.js +++ b/module/dialog-item-vente.js @@ -24,7 +24,7 @@ export class DialogItemVente extends Dialog { } constructor(venteData, html, callback) { - let options = { classes: ["dialogvente"], width: 400, height: 300, 'z-index': 99999 }; + let options = { classes: ["dialogvente"], width: 400, height: 'fit-content', 'z-index': 99999 }; let conf = { title: "Proposer", diff --git a/module/dialog-stress.js b/module/dialog-stress.js index 757cb000..24928c01 100644 --- a/module/dialog-stress.js +++ b/module/dialog-stress.js @@ -23,7 +23,7 @@ export class DialogStress extends Dialog { constructor(dialogData, html) { const options = { classes: ["DialogStress"], width: 400, - height: 205+dialogData.actors.length*25, + height: 'fit-content', 'z-index': 99999 }; const conf = { diff --git a/module/item-monnaie.js b/module/item-monnaie.js index d79c049d..2d48004a 100644 --- a/module/item-monnaie.js +++ b/module/item-monnaie.js @@ -72,19 +72,19 @@ export class Monnaie { let parValeur = Misc.classifyFirst(monnaies, it => it.system.valeur_deniers); for (let valeur of [1000, 100, 10, 1]) { const itemPiece = parValeur[valeur]; - const piecesDeCetteValeur = Math.floor(reste / valeur); if (itemPiece) { - if (piecesDeCetteValeur != itemPiece.system.quantite) { - updates.push({ _id: parValeur[valeur].id, 'system.quantite': piecesDeCetteValeur }); + const quantite = Math.floor(reste / valeur); + if (quantite != itemPiece.system.quantite) { + updates.push({ _id: parValeur[valeur].id, 'system.quantite': quantite }); } - reste -= piecesDeCetteValeur*valeur; + reste -= quantite*valeur; } } console.log('Monnaie.optimiser', actor.name, 'total', fortune, 'parValeur', parValeur, 'updates', updates, 'reste', reste); if (updates.length > 0) { await actor.updateEmbeddedDocuments('Item', updates); } - if (reste>0){ + if (reste > 0){ // créer le reste en deniers fortune en deniers await Monnaie.creerMonnaiesDeniers(actor, reste); } diff --git a/module/item-sheet.js b/module/item-sheet.js index 59c68d95..ee3fc769 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -96,14 +96,18 @@ export class RdDItemSheet extends ItemSheet { formData.competences = await RdDUtility.loadItems(it => RdDItemCompetence.isDraconic(it), RdDItemCompetence.actorCompendium(this.actor?.type)) } 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}) + } + if (this.item.type == 'extraitpoetique') { + formData.extrait = await TextEditor.enrichHTML(this.object.system.extrait, {async: true}) + formData.texte = await TextEditor.enrichHTML(this.object.system.texte, {async: true}) } if (this.item.type == 'recettealchimique') { RdDAlchimie.processManipulation(this.item, this.actor && this.actor.id); - formData.manipulation_update = await TextEditor.enrichHTML(this.object.system.manipulation_update, {async: true}) - formData.utilisation = await TextEditor.enrichHTML(this.object.system.utilisation, {async: true}) - formData.enchantement = await TextEditor.enrichHTML(this.object.system.enchantement, {async: true}) - formData.sureffet = await TextEditor.enrichHTML(this.object.system.sureffet, {async: true}) + formData.manipulation_update = await TextEditor.enrichHTML(this.object.system.manipulation_update, {async: true}) + formData.utilisation = await TextEditor.enrichHTML(this.object.system.utilisation, {async: true}) + formData.enchantement = await TextEditor.enrichHTML(this.object.system.enchantement, {async: true}) + formData.sureffet = await TextEditor.enrichHTML(this.object.system.sureffet, {async: true}) } if (this.item.type == 'gemme') { formData.gemmeTypeList = RdDGemme.getGemmeTypeOptionList(); diff --git a/module/item.js b/module/item.js index 9f2396fe..c18aec5e 100644 --- a/module/item.js +++ b/module/item.js @@ -58,6 +58,7 @@ export const defaultItemImg = { gemme: "systems/foundryvtt-reve-de-dragon/icons/gemmes/almaze.webp", possession: "systems/foundryvtt-reve-de-dragon/icons/entites/possession2.webp", sortreserve: "systems/foundryvtt-reve-de-dragon/icons/competence_oniros.webp", + extraitpoetique: "systems/foundryvtt-reve-de-dragon/icons/competence_ecriture.webp", } /* -------------------------------------------- */ diff --git a/module/poetique.js b/module/poetique.js index 7edde996..7751d13d 100644 --- a/module/poetique.js +++ b/module/poetique.js @@ -1,72 +1,13 @@ -import { Misc } from "./misc.js" import { RdDDice } from "./rdd-dice.js"; - -const poesieHautReve = [ - { - reference: 'Le Ratier Bretonien', - extrait: `Le courant du Fleuve -
Te domine et te Porte -
Avant que tu te moeuves -
Combat le, ou il t'emporte` - }, - { - reference: 'Incompatibilité, Charles Beaudelaire', - extrait: `Et lorsque par hasard une nuée errante -
Assombrit dans son vol le lac silencieux, -
On croirait voir la robe ou l'ombre transparente -
D'un esprit qui voyage et passe dans les cieux.` - }, - { - reference: 'Au fleuve de Loire, Joachim du Bellay', - extrait: `Ô de qui la vive course -
Prend sa bienheureuse source, -
D’une argentine fontaine, -
Qui d’une fuite lointaine, -
Te rends au sein fluctueux -
De l’Océan monstrueux` - }, - { - reference: 'Denis Gerfaud', - extrait: `Et l'on peut savoir qui est le maître d'Oniros, c'est le Fleuve de l'Oubli. - Et l'on sait qui est le créateur du Fleuve de l'Oubli, c'est Hypnos et Narcos. - Mais l'on ne sait pas qui est le maître du Fleuve de l'Oubli, - sinon peut-être lui-même, ou peut-être Thanatos` }, - { - reference: 'Denis Gerfaud', - extrait: `Narcos est la source du Fleuve de l'Oubli et Hypnos l'embouchure - Remonter le Fleuve est la Voie de la Nuit, la Voie du Souvenir. - Descendre le Fleuve est la Voie du Jour, la Voie de l'Oubli` - }, - { - reference: 'Denis Gerfaud', - extrait: `Narcos engendre le fils dont il est la mère à l'heure du Vaisseau, - car Oniros s'embarque pour redescendre le Fleuve - vers son père Hypnos sur la Voie de l'Oubli` - }, - { - reference: 'Denis Gerfaud', - extrait: `Hypnos engendre le fils dont il est la mère à l'heure du Serpent, car - tel les serpents, Oniros commence à remonter le Fleuve - sur le Voie du Souvenir vers son père Narcos` - }, - { - reference: 'Denis Gerfaud', - extrait: `Ainsi se succèdent les Jours et les Ages. -
Les jours des Dragons sont les Ages des Hommes.` - }, - { - reference: 'Denis Gerfaud', - extrait: `Ainsi parlent les sages: - «Les Dragons sont créateurs de leurs rêves, mais ils ne sont pas créateurs d'Oniros - Les Dragons ne sont pas les maîtres de leurs rêvezs, car ils ne sont pas maîtres d'Oniros. - Nul ne sait qui est le créateur des Dragons, ni qui est leur maître. - Mais l'on peut supposer qui est le maître du Rêve des Dragons, c'est Oniros»` - }, -] +import { SystemCompendiums } from "./settings/system-compendiums.js"; export class Poetique { - static async getExtrait(){ - return await RdDDice.rollOneOf(poesieHautReve); + static async getExtrait() { + const items = await SystemCompendiums.getItems('extrait-poetique', 'extraitpoetique') + const selected = await RdDDice.rollOneOf(items); + return { + reference: selected?.name, + extrait: selected?.system.extrait + } } - -} \ No newline at end of file +} diff --git a/module/rdd-commands.js b/module/rdd-commands.js index a8388a29..d124fedc 100644 --- a/module/rdd-commands.js +++ b/module/rdd-commands.js @@ -218,7 +218,7 @@ export class RdDCommands { buttons: {}, }, { - width: 600, height: 500, + width: 600, height: 600, }); d.render(true); diff --git a/module/rdd-dice.js b/module/rdd-dice.js index dbc62e2b..7dd9fa22 100644 --- a/module/rdd-dice.js +++ b/module/rdd-dice.js @@ -144,6 +144,9 @@ export class RdDDice { } static async rollOneOf(array) { + if (array == undefined || array.length == 0) { + return undefined; + } const roll = await RdDDice.rollTotal(`1d${array.length}`); return array[roll - 1]; } diff --git a/module/rdd-main.js b/module/rdd-main.js index 86a15f4d..9dd63aeb 100644 --- a/module/rdd-main.js +++ b/module/rdd-main.js @@ -202,7 +202,7 @@ Hooks.once("init", async function () { "monnaie", "nourritureboisson", "gemme", "meditation", "rencontresTMR", "queue", "ombre", "souffle", "tete", "casetmr", "sort", "sortreserve", "nombreastral", "tache", "maladie", "poison", "possession", - "tarot" + "tarot", "extraitpoetique" ], makeDefault: true }); CONFIG.Combat.documentClass = RdDCombatManager; diff --git a/module/rdd-possession.js b/module/rdd-possession.js index e372d56d..1683d435 100644 --- a/module/rdd-possession.js +++ b/module/rdd-possession.js @@ -92,8 +92,7 @@ export class RdDPossession { const dialog = await RdDRoll.create(defender, rollData, { - html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-defense-possession.html', - options: { height: 450 } + html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-defense-possession.html' }, { name: 'conjurer', @@ -134,8 +133,7 @@ export class RdDPossession { const dialog = await RdDRoll.create(attacker, rollData, { - html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html', - options: { height: 540 } + html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.html' }, { name: 'jet-possession', label: rollData.isECNIDefender ? 'Conjurer la possession' : 'Possession', diff --git a/module/rdd-roll-encaisser.js b/module/rdd-roll-encaisser.js index b791a5f2..a109b35d 100644 --- a/module/rdd-roll-encaisser.js +++ b/module/rdd-roll-encaisser.js @@ -33,7 +33,7 @@ export class RdDEncaisser extends Dialog { let dialogOptions = { classes: ["rdddialog"], width: 320, - height: 260 + height: 'fit-content' } // Select proper roll dialog template and stuff diff --git a/module/rdd-roll-ethylisme.js b/module/rdd-roll-ethylisme.js index a15d823f..ce7580d4 100644 --- a/module/rdd-roll-ethylisme.js +++ b/module/rdd-roll-ethylisme.js @@ -15,7 +15,7 @@ export class RdDRollDialogEthylisme extends Dialog { default: "rollButton", buttons: { "rollButton": { label: "Test d'éthylisme", callback: html => this.onButton(html) } } }; - let dialogOptions = { classes: ["rdddialog"], width: 400, height: 270, 'z-index': 99999 } + let dialogOptions = { classes: ["rdddialog"], width: 400, height: 'fit-content', 'z-index': 99999 } super(dialogConf, dialogOptions) //console.log("ETH", rollData); diff --git a/module/rdd-roll-resolution-table.js b/module/rdd-roll-resolution-table.js index 91ba953b..f276ede4 100644 --- a/module/rdd-roll-resolution-table.js +++ b/module/rdd-roll-resolution-table.js @@ -53,7 +53,7 @@ export class RdDRollResolutionTable extends Dialog { 'lancer-fermer': { label: 'Lancer les dés et fermer', callback: html => this.onLancerFermer() } } }; - super(conf, { classes: ["rdddialog"], width: 800, height: 800, 'z-index': 99999 }); + super(conf, { classes: ["rdddialog"], width: 800, height: 'fit-content', 'z-index': 99999 }); this.rollData = rollData; } diff --git a/module/rdd-roll.js b/module/rdd-roll.js index efbe8c50..e41587e3 100644 --- a/module/rdd-roll.js +++ b/module/rdd-roll.js @@ -29,7 +29,7 @@ export class RdDRoll extends Dialog { const html = await renderTemplate(dialogConfig.html, rollData); - let options = { classes: ["rdddialog"], width: 600, height: 500, 'z-index': 99999 }; + let options = { classes: ["rdddialog"], width: 600, height: 'fit-content', 'z-index': 99999 }; if (dialogConfig.options) { mergeObject(options, dialogConfig.options, { overwrite: true }) } diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index e5fa7516..84a18c8f 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -17,6 +17,7 @@ import { ReglesOptionelles } from "./settings/regles-optionelles.js"; import { RdDDice } from "./rdd-dice.js"; import { STATUSES } from "./settings/status-effects.js"; import { RdDRencontre } from "./item-rencontre.js"; +import { RdDCalendrier } from "./rdd-calendrier.js"; /* -------------------------------------------- */ @@ -773,7 +774,7 @@ export class RdDTMRDialog extends Dialog { const dialog = await RdDRoll.create(this.actor, rollData, { html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-maitrise-tmr.html', - options: { height: 420 }, + options: { height: 'fit-content' }, close: html => { this.maximize(); } // Re-display TMR }, { @@ -838,12 +839,13 @@ export class RdDTMRDialog extends Dialog { async processSortReserve(sortReserve) { await this.actor.deleteEmbeddedDocuments('Item', [sortReserve.id]); console.log("declencheSortEnReserve", sortReserve); + const heureCible = RdDCalendrier.getSigneAs('label', sortReserve.system.heurecible); this._tellToUserAndGM(`Vous avez déclenché ${sortReserve.system.echectotal ? "l'échec total!" : "le sort"} en réserve ${sortReserve.name} avec ${sortReserve.system.ptreve} points de Rêve en ${sortReserve.system.coord} (${TMRUtility.getTMRLabel(sortReserve.system.coord)}). - L'heure ciblée est ${sortReserve.system.heurecible}`); + L'heure ciblée est ${heureCible}`); this.close(); } diff --git a/module/rdd-tmr-rencontre-dialog.js b/module/rdd-tmr-rencontre-dialog.js index 72c65558..804dd160 100644 --- a/module/rdd-tmr-rencontre-dialog.js +++ b/module/rdd-tmr-rencontre-dialog.js @@ -21,7 +21,7 @@ export class RdDTMRRencontreDialog extends Dialog { const dialogOptions = { classes: ["tmrrencdialog"], - width: 320, height: 240, + width: 320, height: 'fit-content', 'z-index': 50 } super(dialogConf, dialogOptions); diff --git a/module/rdd-utility.js b/module/rdd-utility.js index afb589a8..aafce41a 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -193,6 +193,7 @@ export class RdDUtility { '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-possession-sheet.html', + 'systems/foundryvtt-reve-de-dragon/templates/item-extraitpoetique-sheet.html', // partial enums 'systems/foundryvtt-reve-de-dragon/templates/enum-caracteristiques.html', 'systems/foundryvtt-reve-de-dragon/templates/enum-base-competence.html', diff --git a/module/settings/status-effects.js b/module/settings/status-effects.js index 6c2146f6..406797bc 100644 --- a/module/settings/status-effects.js +++ b/module/settings/status-effects.js @@ -100,7 +100,7 @@ export class StatusEffects extends FormApplication { mergeObject(options, { id: "status-effects", template: "systems/foundryvtt-reve-de-dragon/templates/settings/status-effects.html", - height: "800", + height: 800, width: 350, minimizable: false, closeOnSubmit: true, diff --git a/module/settings/system-compendiums.js b/module/settings/system-compendiums.js index 21bdbe9d..bf95c55e 100644 --- a/module/settings/system-compendiums.js +++ b/module/settings/system-compendiums.js @@ -5,6 +5,7 @@ const COMPENDIUM_SETTING_PREFIX = 'compendium-'; const CONFIGURABLE_COMPENDIUMS = { 'tables-diverses': { label: "Tables aléatoires", type: "RollTable" }, 'competences': { label: "Compétences", type: "Item" }, + 'extrait-poetique': { label: "Extraits poetiques", 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" }, @@ -54,8 +55,9 @@ export class SystemCompendiums extends FormApplication { return []; } - static async getItems(compendium) { - return await SystemCompendiums.getContent(compendium, 'Item') + static async getItems(compendium, itemType = undefined) { + const items = await SystemCompendiums.getContent(compendium, 'Item'); + return itemType ? items.filter(it => it.type == itemType) : items; } static async getDefaultItems(compendium) { diff --git a/packs/extrait-poetique.db b/packs/extrait-poetique.db new file mode 100644 index 00000000..bc50144b --- /dev/null +++ b/packs/extrait-poetique.db @@ -0,0 +1,9 @@ +{"name":"Au fleuve de Loire, Joachim du Bellay","type":"extraitpoetique","img":"systems/foundryvtt-reve-de-dragon/icons/competence_ecriture.webp","system":{"extrait":"

Ô de qui la vive course
Prend sa bienheureuse source,
D’une argentine fontaine,
Qui d’une fuite lointaine,
Te rends au sein fluctueux
De l’Océan monstrueux

","texte":""},"effects":[],"flags":{},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.2.0","coreVersion":"10.288"},"_id":"1xzVPsfnO3uukbc4","ownership":{"default":0}} +{"name":"Le Fleuve, Le Ratier Bretonien","type":"extraitpoetique","img":"systems/foundryvtt-reve-de-dragon/icons/competence_ecriture.webp","system":{"extrait":"

Le courant du Fleuve
Te domine et te Porte
Avant que tu te moeuves
Combats le, ou il t'emporte

","texte":""},"effects":[],"flags":{},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.2.0","coreVersion":"10.288"},"_id":"4dPfQh9ovWa90M9o","ownership":{"default":0}} +{"name":"Des voies du Rêve (4), Denis Gerfaud","type":"extraitpoetique","img":"systems/foundryvtt-reve-de-dragon/icons/competence_ecriture.webp","system":{"extrait":"

«Narcos engendre le fils dont il est la mère à l'heure du Vaisseau,
car Oniros s'embarque pour redescendre le Fleuve
vers son père Hypnos sur la Voie de l'Oubli»

","texte":"

Ainsi parlent les sages:
«Les Dragons sont créateurs de leurs rêves, mais ils ne sont pas créateurs d'Oniros
Les Dragons ne sont pas les maîtres de leurs rêves, car ils ne sont pas maîtres d'Oniros.
Nul ne sait qui est le créateur des Dragons, ni qui est leur maître.
Mais l'on peut supposer qui est le maître du Rêve des Dragons, c'est Oniros»

\n

«Et l'on peut savoir qui est le maître d'Oniros, c'est le Fleuve de l'Oubli.
Et l'on sait qui est le créateur du Fleuve de l'Oubli, c'est Hypnos et Narcos.
Mais l'on ne sait pas qui est le maître du Fleuve de l'Oubli,
sinon peut-être lui-même, ou peut-être Thanatos»

\n

«Hypnos engendre le fils dont il est la mère à l'heure du Serpent, car
tel les serpents, Oniros commence à remonter le Fleuve
sur le Voie du Souvenir vers son père Narcos»

\n

«Narcos engendre le fils dont il est la mère à l'heure du Vaisseau,
car Oniros s'embarque pour redescendre le Fleuve
vers son père Hypnos sur la Voie de l'Oubli»

\n

«Narcos est la source du Fleuve de l'Oubli et Hypnos l'embouchure
Remonter le Fleuve est la Voie de la Nuit, la Voie du Souvenir.
Descendre le Fleuve est la Voie du Jour, la Voie de l'Oubli»

\n

«Ainsi se succèdent les Jours et les Ages.
Les jours des Dragons sont les Ages des Hommes.»

"},"effects":[],"flags":{},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.2.0","coreVersion":"10.288"},"_id":"7DNOC40NKHog49rb","ownership":{"default":0}} +{"name":"Des voies du Rêve (5), Denis Gerfaud","type":"extraitpoetique","img":"systems/foundryvtt-reve-de-dragon/icons/competence_ecriture.webp","system":{"extrait":"

«Narcos est la source du Fleuve de l'Oubli et Hypnos l'embouchure
Remonter le Fleuve est la Voie de la Nuit, la Voie du Souvenir.
Descendre le Fleuve est la Voie du Jour, la Voie de l'Oubli»

","texte":"

Ainsi parlent les sages:
«Les Dragons sont créateurs de leurs rêves, mais ils ne sont pas créateurs d'Oniros
Les Dragons ne sont pas les maîtres de leurs rêves, car ils ne sont pas maîtres d'Oniros.
Nul ne sait qui est le créateur des Dragons, ni qui est leur maître.
Mais l'on peut supposer qui est le maître du Rêve des Dragons, c'est Oniros»

\n

«Et l'on peut savoir qui est le maître d'Oniros, c'est le Fleuve de l'Oubli.
Et l'on sait qui est le créateur du Fleuve de l'Oubli, c'est Hypnos et Narcos.
Mais l'on ne sait pas qui est le maître du Fleuve de l'Oubli,
sinon peut-être lui-même, ou peut-être Thanatos»

\n

«Hypnos engendre le fils dont il est la mère à l'heure du Serpent, car
tel les serpents, Oniros commence à remonter le Fleuve
sur le Voie du Souvenir vers son père Narcos»

\n

«Narcos engendre le fils dont il est la mère à l'heure du Vaisseau,
car Oniros s'embarque pour redescendre le Fleuve
vers son père Hypnos sur la Voie de l'Oubli»

\n

«Narcos est la source du Fleuve de l'Oubli et Hypnos l'embouchure
Remonter le Fleuve est la Voie de la Nuit, la Voie du Souvenir.
Descendre le Fleuve est la Voie du Jour, la Voie de l'Oubli»

\n

«Ainsi se succèdent les Jours et les Ages.
Les jours des Dragons sont les Ages des Hommes.»

"},"effects":[],"flags":{},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.2.0","coreVersion":"10.288"},"_id":"Ym0pweWHr8CIZFIR","ownership":{"default":0}} +{"name":"Des voies du Rêve (1), Denis Gerfaud (Copy)","type":"extraitpoetique","img":"systems/foundryvtt-reve-de-dragon/icons/competence_ecriture.webp","system":{"extrait":"

Ainsi parlent les sages:
«Les Dragons sont créateurs de leurs rêves, mais ils ne sont pas créateurs d'Oniros
Les Dragons ne sont pas les maîtres de leurs rêves, car ils ne sont pas maîtres d'Oniros.
Nul ne sait qui est le créateur des Dragons, ni qui est leur maître.
Mais l'on peut supposer qui est le maître du Rêve des Dragons, c'est Oniros»

","texte":"

Ainsi parlent les sages:
«Les Dragons sont créateurs de leurs rêves, mais ils ne sont pas créateurs d'Oniros
Les Dragons ne sont pas les maîtres de leurs rêves, car ils ne sont pas maîtres d'Oniros.
Nul ne sait qui est le créateur des Dragons, ni qui est leur maître.
Mais l'on peut supposer qui est le maître du Rêve des Dragons, c'est Oniros»

\n

«Et l'on peut savoir qui est le maître d'Oniros, c'est le Fleuve de l'Oubli.
Et l'on sait qui est le créateur du Fleuve de l'Oubli, c'est Hypnos et Narcos.
Mais l'on ne sait pas qui est le maître du Fleuve de l'Oubli,
sinon peut-être lui-même, ou peut-être Thanatos»

\n

«Hypnos engendre le fils dont il est la mère à l'heure du Serpent, car
tel les serpents, Oniros commence à remonter le Fleuve
sur le Voie du Souvenir vers son père Narcos»

\n

«Narcos engendre le fils dont il est la mère à l'heure du Vaisseau,
car Oniros s'embarque pour redescendre le Fleuve
vers son père Hypnos sur la Voie de l'Oubli»

\n

«Narcos est la source du Fleuve de l'Oubli et Hypnos l'embouchure
Remonter le Fleuve est la Voie de la Nuit, la Voie du Souvenir.
Descendre le Fleuve est la Voie du Jour, la Voie de l'Oubli»

\n

«Ainsi se succèdent les Jours et les Ages.
Les jours des Dragons sont les Ages des Hommes.»

"},"effects":[],"flags":{},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.2.0","coreVersion":"10.288"},"_id":"fXBZ0YjF12LRtSOp","ownership":{"default":0}} +{"name":"Des voies du Rêve (6), Denis Gerfaud","type":"extraitpoetique","img":"systems/foundryvtt-reve-de-dragon/icons/competence_ecriture.webp","system":{"extrait":"

«Ainsi se succèdent les Jours et les Ages.
Les jours des Dragons sont les Ages des Hommes.»

","texte":"

Ainsi parlent les sages:
«Les Dragons sont créateurs de leurs rêves, mais ils ne sont pas créateurs d'Oniros
Les Dragons ne sont pas les maîtres de leurs rêves, car ils ne sont pas maîtres d'Oniros.
Nul ne sait qui est le créateur des Dragons, ni qui est leur maître.
Mais l'on peut supposer qui est le maître du Rêve des Dragons, c'est Oniros»

\n

«Et l'on peut savoir qui est le maître d'Oniros, c'est le Fleuve de l'Oubli.
Et l'on sait qui est le créateur du Fleuve de l'Oubli, c'est Hypnos et Narcos.
Mais l'on ne sait pas qui est le maître du Fleuve de l'Oubli,
sinon peut-être lui-même, ou peut-être Thanatos»

\n

«Hypnos engendre le fils dont il est la mère à l'heure du Serpent, car
tel les serpents, Oniros commence à remonter le Fleuve
sur le Voie du Souvenir vers son père Narcos»

\n

«Narcos engendre le fils dont il est la mère à l'heure du Vaisseau,
car Oniros s'embarque pour redescendre le Fleuve
vers son père Hypnos sur la Voie de l'Oubli»

\n

«Narcos est la source du Fleuve de l'Oubli et Hypnos l'embouchure
Remonter le Fleuve est la Voie de la Nuit, la Voie du Souvenir.
Descendre le Fleuve est la Voie du Jour, la Voie de l'Oubli»

\n

«Ainsi se succèdent les Jours et les Ages.
Les jours des Dragons sont les Ages des Hommes.»

"},"effects":[],"flags":{},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.2.0","coreVersion":"10.288"},"_id":"k55zGYj5cTis14Cw","ownership":{"default":0}} +{"name":"Des voies du Rêve (2), Denis Gerfaud","type":"extraitpoetique","img":"systems/foundryvtt-reve-de-dragon/icons/competence_ecriture.webp","system":{"extrait":"

«Et l'on peut savoir qui est le maître d'Oniros, c'est le Fleuve de l'Oubli.
Et l'on sait qui est le créateur du Fleuve de l'Oubli, c'est Hypnos et Narcos.
Mais l'on ne sait pas qui est le maître du Fleuve de l'Oubli,
sinon peut-être lui-même, ou peut-être Thanatos»

","texte":"

Ainsi parlent les sages:
«Les Dragons sont créateurs de leurs rêves, mais ils ne sont pas créateurs d'Oniros
Les Dragons ne sont pas les maîtres de leurs rêves, car ils ne sont pas maîtres d'Oniros.
Nul ne sait qui est le créateur des Dragons, ni qui est leur maître.
Mais l'on peut supposer qui est le maître du Rêve des Dragons, c'est Oniros»

\n

«Et l'on peut savoir qui est le maître d'Oniros, c'est le Fleuve de l'Oubli.
Et l'on sait qui est le créateur du Fleuve de l'Oubli, c'est Hypnos et Narcos.
Mais l'on ne sait pas qui est le maître du Fleuve de l'Oubli,
sinon peut-être lui-même, ou peut-être Thanatos»

\n

«Hypnos engendre le fils dont il est la mère à l'heure du Serpent, car
tel les serpents, Oniros commence à remonter le Fleuve
sur le Voie du Souvenir vers son père Narcos»

\n

«Narcos engendre le fils dont il est la mère à l'heure du Vaisseau,
car Oniros s'embarque pour redescendre le Fleuve
vers son père Hypnos sur la Voie de l'Oubli»

\n

«Narcos est la source du Fleuve de l'Oubli et Hypnos l'embouchure
Remonter le Fleuve est la Voie de la Nuit, la Voie du Souvenir.
Descendre le Fleuve est la Voie du Jour, la Voie de l'Oubli»

\n

«Ainsi se succèdent les Jours et les Ages.
Les jours des Dragons sont les Ages des Hommes.»

"},"effects":[],"flags":{},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.2.0","coreVersion":"10.288"},"_id":"rjlGncoP26PljA2G","ownership":{"default":0}} +{"name":"Des voies du Rêve (3), Denis Gerfaud","type":"extraitpoetique","img":"systems/foundryvtt-reve-de-dragon/icons/competence_ecriture.webp","system":{"extrait":"

«Hypnos engendre le fils dont il est la mère à l'heure du Serpent, car
tel les serpents, Oniros commence à remonter le Fleuve
sur le Voie du Souvenir vers son père Narcos»

","texte":"

Ainsi parlent les sages:
«Les Dragons sont créateurs de leurs rêves, mais ils ne sont pas créateurs d'Oniros
Les Dragons ne sont pas les maîtres de leurs rêves, car ils ne sont pas maîtres d'Oniros.
Nul ne sait qui est le créateur des Dragons, ni qui est leur maître.
Mais l'on peut supposer qui est le maître du Rêve des Dragons, c'est Oniros»

\n

«Et l'on peut savoir qui est le maître d'Oniros, c'est le Fleuve de l'Oubli.
Et l'on sait qui est le créateur du Fleuve de l'Oubli, c'est Hypnos et Narcos.
Mais l'on ne sait pas qui est le maître du Fleuve de l'Oubli,
sinon peut-être lui-même, ou peut-être Thanatos»

\n

«Hypnos engendre le fils dont il est la mère à l'heure du Serpent, car
tel les serpents, Oniros commence à remonter le Fleuve
sur le Voie du Souvenir vers son père Narcos»

\n

«Narcos engendre le fils dont il est la mère à l'heure du Vaisseau,
car Oniros s'embarque pour redescendre le Fleuve
vers son père Hypnos sur la Voie de l'Oubli»

\n

«Narcos est la source du Fleuve de l'Oubli et Hypnos l'embouchure
Remonter le Fleuve est la Voie de la Nuit, la Voie du Souvenir.
Descendre le Fleuve est la Voie du Jour, la Voie de l'Oubli»

\n

«Ainsi se succèdent les Jours et les Ages.
Les jours des Dragons sont les Ages des Hommes.»

"},"effects":[],"flags":{},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.2.0","coreVersion":"10.288"},"_id":"xMigGwI39BORZ82r","ownership":{"default":0}} +{"name":"Incompatibilité, Charles Beaudelaire","type":"extraitpoetique","img":"systems/foundryvtt-reve-de-dragon/icons/competence_ecriture.webp","system":{"extrait":"

Et lorsque par hasard une nuée errante
Assombrit dans son vol le lac silencieux,
On croirait voir la robe ou l'ombre transparente
D'un esprit qui voyage et passe dans les cieux.

","texte":""},"effects":[],"flags":{},"_stats":{"systemId":"foundryvtt-reve-de-dragon","systemVersion":"10.2.0","coreVersion":"10.288"},"_id":"yJ3m3fheGJluiGDx","ownership":{"default":0}} diff --git a/system.json b/system.json index 75a2d0ff..b43b0f34 100644 --- a/system.json +++ b/system.json @@ -198,6 +198,15 @@ "private": false, "flags": {} }, + { + "name": "extrait-poetique", + "label": "Extraits poétiques", + "system": "foundryvtt-reve-de-dragon", + "path": "packs/extrait-poetique.db", + "type": "Item", + "private": false, + "flags": {} + }, { "name": "tetes-de-dragon-pour-haut-revants", "label": "Têtes de Dragon (Hauts-Rêvants)", diff --git a/template.json b/template.json index 940c2bf3..b72b6065 100644 --- a/template.json +++ b/template.json @@ -588,7 +588,7 @@ "monnaie", "nourritureboisson", "gemme", "meditation", "rencontre", "rencontresTMR", "queue", "ombre", "souffle", "tete", "casetmr", "signedraconique", "sort", "sortreserve", "nombreastral", "tache", "maladie", "poison", "possession", - "tarot" + "tarot", "extraitpoetique" ], "possession": { "typepossession": "", @@ -1007,6 +1007,10 @@ "ptreve": 0, "heurecible": "", "echectotal": false + }, + "extraitpoetique": { + "extrait": "", + "texte": "" } } } diff --git a/templates/item-extraitpoetique-sheet.html b/templates/item-extraitpoetique-sheet.html new file mode 100644 index 00000000..70ac8a09 --- /dev/null +++ b/templates/item-extraitpoetique-sheet.html @@ -0,0 +1,25 @@ +
+
+ +
+

+ +

+

Référence

+
+
+
+
+ +
+ {{editor extrait target="system.extrait" button=true owner=owner editable=editable}} +
+
+
+ +
+ {{editor texte target="system.texte" button=true owner=owner editable=editable}} +
+
+
+