diff --git a/module/actor.js b/module/actor.js
index 0d9cbc42..853cebc8 100644
--- a/module/actor.js
+++ b/module/actor.js
@@ -22,6 +22,8 @@ import { StatusEffects } from "./status-effects.js";
import { RdDItemCompetenceCreature } from "./item-competencecreature.js";
import { ReglesOptionelles } from "./regles-optionelles.js";
import { RdDItem } from "./item.js";
+import { TMRRencontres } from "./tmr-rencontres.js";
+import { Poetique } from "./poetique.js";
/* -------------------------------------------- */
@@ -580,15 +582,57 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */
async combattreReveDeDragon(force) {
- let draconic = this.getBestDraconic();
- let niveau = Math.max(0, draconic.data.niveau);
- let etat = this.getEtatGeneral();
- let difficulte = niveau - etat - force;
- let reveActuel = this.getReveActuel();
- let rolled = await RdDResolutionTable.roll(reveActuel, difficulte);
- // TODO: xp particulière
- console.log("combattreReveDeDragon", rolled);
- return await this.appliquerReveDeDragon(rolled, force);
+ let rollData = {
+ actor: this,
+ competence: duplicate(this.getBestDraconic()),
+ canClose: false,
+ rencontre: duplicate(TMRRencontres.getRencontre('rdd')),
+ tmr: true,
+ use: {libre: false, conditions: false},
+ forceCarac: { 'reve-actuel': { label: "Rêve Actuel", value: this.getReveActuel() } }
+ }
+ rollData.rencontre.force = force;
+ rollData.competence.data.defaut_carac = 'reve-actuel';
+
+ const dialog = await RdDRoll.create(this, rollData,
+ {
+ html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-reve-de-dragon.html',
+ options: { height: 400 }
+ },
+ {
+ name: 'maitrise',
+ label: 'Maîtriser le Rêve de Dragon',
+ callbacks: [
+ this.createCallbackExperience(),
+ { action: r => this.resultCombatReveDeDragon(r) }
+ ]
+ }
+ );
+ dialog.render(true);
+ }
+
+ async resultCombatReveDeDragon(rollData) {
+ rollData.queues = [];
+ if (rollData.rolled.isEchec) {
+ 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 = Poetique.getExtrait();
+
+ ChatMessage.create({
+ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
+ content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-reve-de-dragon.html`, rollData)
+ });
}
/* -------------------------------------------- */
@@ -1074,7 +1118,7 @@ export class RdDActor extends Actor {
content: this.name + " subit une Queue de Dragon : " + queue.name
});
}
- return queue.name;
+ return queue;
}
/* -------------------------------------------- */
diff --git a/module/poetique.js b/module/poetique.js
new file mode 100644
index 00000000..dcbb15f1
--- /dev/null
+++ b/module/poetique.js
@@ -0,0 +1,69 @@
+
+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 cuccè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»`
+ },
+]
+
+export class Poetique {
+ static getExtrait(){
+ return poesieHautReve[new Roll("1d" + poesieHautReve.length).evaluate().total - 1]
+ }
+
+}
\ No newline at end of file
diff --git a/module/rdd-rolltables.js b/module/rdd-rolltables.js
index c0152062..629a180a 100644
--- a/module/rdd-rolltables.js
+++ b/module/rdd-rolltables.js
@@ -41,9 +41,9 @@ export class RdDRollTables {
/* -------------------------------------------- */
static async getQueue(toChat = false) {
- let queue = await RdDRollTables.drawItemFromRollTable("Queues de dragon", toChat);
+ let queue = await RdDRollTables.drawItemFromRollTable("Queues de dragon", toChat);
if (queue.name.toLowerCase().includes('lancinant') ) {
- queue = await RdDRollTables.drawItemFromRollTable("Désirs lancinants", toChat);
+ queue = await RdDRollTables.drawItemFromRollTable("Désirs lancinants", toChat);
}
if (queue.name.toLowerCase().includes('fixe') ) {
queue = await RdDRollTables.drawItemFromRollTable("Idées fixes", toChat);
diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js
index a3b1b18e..298a12a5 100644
--- a/module/rdd-tmr-dialog.js
+++ b/module/rdd-tmr-dialog.js
@@ -4,13 +4,14 @@
*/
import { RollDataAjustements } from "./rolldata-ajustements.js";
import { RdDUtility } from "./rdd-utility.js";
-import { poesieCaseHumide, TMRUtility } from "./tmr-utility.js";
+import { TMRUtility } from "./tmr-utility.js";
import { tmrConstants } from "./tmr-utility.js";
import { RdDResolutionTable } from "./rdd-resolution-table.js";
import { RdDTMRRencontreDialog } from "./rdd-tmr-rencontre-dialog.js";
import { TMRRencontres } from "./tmr-rencontres.js";
import { ChatUtility } from "./chat-utility.js";
import { RdDRoll } from "./rdd-roll.js";
+import { Poetique } from "./poetique.js";
/* -------------------------------------------- */
@@ -373,9 +374,9 @@ export class RdDTMRDialog extends Dialog {
tmr: tmr,
canClose: false,
diffLibre: -7,
- forceCarac: { "reveactuel": { label: "Rêve Actuel", value: this.actor.getReveActuel() } }
+ forceCarac: { 'reve-actuel': { label: "Rêve Actuel", value: this.actor.getReveActuel() } }
}
- rollData.competence.data.defaut_carac = "reveactuel";
+ rollData.competence.data.defaut_carac = 'reve-actuel';
await this._rollMaitriseCaseHumide(rollData);
}
@@ -437,12 +438,10 @@ export class RdDTMRDialog extends Dialog {
return;
}
}
- rollData.poesie = poesieCaseHumide[new Roll("1d" + poesieCaseHumide.length).evaluate().total - 1];
- const whisperTo = ChatUtility.getWhisperRecipientsAndGMs(game.user.name);
- const content = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-fleuve-tmr.html`, rollData);
+ rollData.poesie = Poetique.getExtrait();
ChatMessage.create({
- whisper: whisperTo,
- content: content
+ whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
+ content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-fleuve-tmr.html`, rollData)
});
if (rollData.rolled.isEchec) {
this.close();
diff --git a/module/tmr-rencontres.js b/module/tmr-rencontres.js
index 6d55b615..b70d49d3 100644
--- a/module/tmr-rencontres.js
+++ b/module/tmr-rencontres.js
@@ -253,8 +253,8 @@ const mauvaisesRencontres = [
{ 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: "passfou2d8", name: "Passeur fou", type: "passeurfou", genre: "m", force: "2d8", refoulement: 2, isMauvaise: true },
- { code: "tbrouge2d8", name: "Tourbillon rouge", type: "tbrouge", genre: "m", force: "2d8", refoulement: 3, 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 }
]
/* -------------------------------------------- */
@@ -472,14 +472,14 @@ export class TMRRencontres {
}
static async onPostSuccessReveDeDragon(tmrDialog, data) {
- await data.actor.appliquerReveDeDragon(data.rolled, data.rencontre.force);
if (data.rolled.isPart) {
await data.actor.appliquerExperience(data.rolled, 'reve', data.competence);
}
+ await data.actor.resultCombattreReveDeDragon(data.rolled);
}
-
+
static async onPostEchecReveDeDragon(tmrDialog, data) {
- await data.actor.appliquerReveDeDragon(data.rolled, data.rencontre.force);
+ await data.actor.resultCombattreReveDeDragon(data.rolled);
tmrDialog.close();
}
}
diff --git a/module/tmr-utility.js b/module/tmr-utility.js
index 34c32967..33f5e1da 100644
--- a/module/tmr-utility.js
+++ b/module/tmr-utility.js
@@ -227,7 +227,7 @@ export const TMRType = {
desolation: { name: "désolation", genre: "f" }
}
-export const poesieCaseHumide = [
+export const poesieHautReve = [
{
reference: 'Le Ratier Bretonien',
extrait: `Le courant du Fleuve
diff --git a/templates/chat-resultat-reve-de-dragon.html b/templates/chat-resultat-reve-de-dragon.html
new file mode 100644
index 00000000..f1aa7992
--- /dev/null
+++ b/templates/chat-resultat-reve-de-dragon.html
@@ -0,0 +1,28 @@
+
+
{{poesie.reference}}
+ +{{/if}} diff --git a/templates/dialog-roll-reve-de-dragon.html b/templates/dialog-roll-reve-de-dragon.html new file mode 100644 index 00000000..6b584c51 --- /dev/null +++ b/templates/dialog-roll-reve-de-dragon.html @@ -0,0 +1,12 @@ + + + + \ No newline at end of file