Compare commits
6 Commits
fvtt-mourn
...
fvtt-mourn
| Author | SHA1 | Date | |
|---|---|---|---|
| da6d6584c4 | |||
| f08ec8eaff | |||
| c34bfbf229 | |||
| e7de42cf16 | |||
| 0f2348fec6 | |||
| 98ccd8fde1 |
23
README.md
23
README.md
@@ -1,4 +1,23 @@
|
|||||||
# fvtt-mournblade
|
# Système Foundry pour Mournblade (French RPG, Titam France/Sombres Projets)
|
||||||
|
|
||||||
FoundryVTT system for Mournblade from Sombres Projets
|
## EN
|
||||||
|
|
||||||
|
Unofficial system for Mournblade (French version from Titam France).
|
||||||
|
|
||||||
|
Books are mandatory to play and are available at : http://www.titam-france.fr
|
||||||
|
|
||||||
|
## FR
|
||||||
|
|
||||||
|
Système non-officiel pour le JDR Mournblade (Titam France).
|
||||||
|
|
||||||
|
Ce système a été autorisé par Ludospherik ( http://www.ludospherik.fr/ ), merci à eux !
|
||||||
|
|
||||||
|
Les livres du jeu sont nécessaires pour jouer, et sont disponibles ici : http://www.titam-france.fr
|
||||||
|
|
||||||
|
# Credits
|
||||||
|
|
||||||
|
Mournblade, le jeu de rôle de Sword & Sorcery, is a property of Titam France/Sombres Projets.
|
||||||
|
|
||||||
|
# Developmement
|
||||||
|
|
||||||
|
LeRatierBretonnien
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ export class MournbladeActorSheet extends ActorSheet {
|
|||||||
protections: duplicate(this.actor.getArmors()),
|
protections: duplicate(this.actor.getArmors()),
|
||||||
dons: duplicate(this.actor.getDons()),
|
dons: duplicate(this.actor.getDons()),
|
||||||
alignement: this.actor.getAlignement(),
|
alignement: this.actor.getAlignement(),
|
||||||
|
aspect: this.actor.getAspect(),
|
||||||
|
marge: this.actor.getMarge(),
|
||||||
tendances:duplicate(this.actor.getTendances()),
|
tendances:duplicate(this.actor.getTendances()),
|
||||||
runes:duplicate(this.actor.getRunes()),
|
runes:duplicate(this.actor.getRunes()),
|
||||||
origine: duplicate(this.actor.getOrigine() || {}),
|
origine: duplicate(this.actor.getOrigine() || {}),
|
||||||
@@ -51,6 +53,7 @@ export class MournbladeActorSheet extends ActorSheet {
|
|||||||
metier: duplicate(this.actor.getMetier() || {}),
|
metier: duplicate(this.actor.getMetier() || {}),
|
||||||
combat: this.actor.getCombatValues(),
|
combat: this.actor.getCombatValues(),
|
||||||
equipements: duplicate(this.actor.getEquipments()),
|
equipements: duplicate(this.actor.getEquipments()),
|
||||||
|
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
|
||||||
options: this.options,
|
options: this.options,
|
||||||
owner: this.document.isOwner,
|
owner: this.document.isOwner,
|
||||||
editScore: this.options.editScore,
|
editScore: this.options.editScore,
|
||||||
|
|||||||
@@ -145,6 +145,12 @@ export class MournbladeActor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
getAspect() {
|
||||||
|
return (this.system.balance.loi > this.system.balance.chaos) ? this.system.balance.loi : this.system.balance.chaos
|
||||||
|
}
|
||||||
|
getMarge() {
|
||||||
|
return Math.abs( this.system.balance.loi - this.system.balance.chaos)
|
||||||
|
}
|
||||||
getAlignement() {
|
getAlignement() {
|
||||||
return (this.system.balance.loi > this.system.balance.chaos) ? "loyal" : "chaotique"
|
return (this.system.balance.loi > this.system.balance.chaos) ? "loyal" : "chaotique"
|
||||||
}
|
}
|
||||||
@@ -406,6 +412,11 @@ export class MournbladeActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollRune(runeId) {
|
async rollRune(runeId) {
|
||||||
|
let comp = this.items.find(comp => comp.type == "competence" && comp.name.toLowerCase() == "savoir : runes")
|
||||||
|
if ( !comp) {
|
||||||
|
ui.notifications.warn("La compétence Savoirs : Runes n'a pas été trouvée, abandon.")
|
||||||
|
return
|
||||||
|
}
|
||||||
let rollData = this.getCommonRollData("cla", undefined, "Savoir : Runes")
|
let rollData = this.getCommonRollData("cla", undefined, "Savoir : Runes")
|
||||||
rollData.rune = duplicate(this.items.get(runeId) || {})
|
rollData.rune = duplicate(this.items.get(runeId) || {})
|
||||||
rollData.difficulte = rollData.rune?.system?.seuil || 0
|
rollData.difficulte = rollData.rune?.system?.seuil || 0
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export class MournbladeCombat extends Combat {
|
|||||||
let initBonus = c.actor ? c.actor.getInitiativeScore() : 0
|
let initBonus = c.actor ? c.actor.getInitiativeScore() : 0
|
||||||
let roll = new Roll("1d10 + "+initBonus).roll({ async: false})
|
let roll = new Roll("1d10 + "+initBonus).roll({ async: false})
|
||||||
await MournbladeUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode"))
|
await MournbladeUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode"))
|
||||||
console.log("Init bonus", initBonus, roll.total)
|
//console.log("Init bonus", initBonus, roll.total)
|
||||||
await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: roll.total } ]);
|
await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: roll.total } ]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,10 +63,14 @@ export class MournbladeItemSheet extends ItemSheet {
|
|||||||
limited: this.object.limited,
|
limited: this.object.limited,
|
||||||
options: this.options,
|
options: this.options,
|
||||||
owner: this.document.isOwner,
|
owner: this.document.isOwner,
|
||||||
|
description: await TextEditor.enrichHTML(this.object.system.description, {async: true}),
|
||||||
mr: (this.object.type == 'specialisation'),
|
mr: (this.object.type == 'specialisation'),
|
||||||
isGM: game.user.isGM
|
isGM: game.user.isGM
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( objectData.type =="don") {
|
||||||
|
sacrifice = await TextEditor.enrichHTML(this.object.system.sacrifice, {async: true})
|
||||||
|
}
|
||||||
//this.options.editable = !(this.object.origin == "embeddedItem");
|
//this.options.editable = !(this.object.origin == "embeddedItem");
|
||||||
console.log("ITEM DATA", formData, this);
|
console.log("ITEM DATA", formData, this);
|
||||||
return formData;
|
return formData;
|
||||||
|
|||||||
@@ -67,9 +67,37 @@ function welcomeMessage() {
|
|||||||
whisper: [game.user.id],
|
whisper: [game.user.id],
|
||||||
content: `<div id="welcome-message-Mournblade"><span class="rdd-roll-part">
|
content: `<div id="welcome-message-Mournblade"><span class="rdd-roll-part">
|
||||||
<strong>Bienvenue dans les Jeunes Royaumes de Mournblade !</strong>
|
<strong>Bienvenue dans les Jeunes Royaumes de Mournblade !</strong>
|
||||||
|
<p>Les livres de Mournblade sont nécessaires pour jouer : https://www.titam-france.fr</p>
|
||||||
|
<p>Mournblade est jeude rôle publié par Titam France/Sombres projets, tout les droits leur appartiennent.<p>
|
||||||
` });
|
` });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
// Register world usage statistics
|
||||||
|
function registerUsageCount( registerKey ) {
|
||||||
|
if ( game.user.isGM ) {
|
||||||
|
game.settings.register(registerKey, "world-key", {
|
||||||
|
name: "Unique world key",
|
||||||
|
scope: "world",
|
||||||
|
config: false,
|
||||||
|
default: "",
|
||||||
|
type: String
|
||||||
|
});
|
||||||
|
|
||||||
|
let worldKey = game.settings.get(registerKey, "world-key")
|
||||||
|
if ( worldKey == undefined || worldKey == "" ) {
|
||||||
|
worldKey = randomID(32)
|
||||||
|
game.settings.set(registerKey, "world-key", worldKey )
|
||||||
|
}
|
||||||
|
// Simple API counter
|
||||||
|
let regURL = `https://www.uberwald.me/fvtt_appcount/count.php?name="${registerKey}"&worldKey="${worldKey}"&version="${game.release.generation}.${game.release.build}"&system="${game.system.id}"&systemversion="${game.system.version}"`
|
||||||
|
//$.ajaxSetup({
|
||||||
|
//headers: { 'Access-Control-Allow-Origin': '*' }
|
||||||
|
//})
|
||||||
|
$.ajax(regURL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/* Foundry VTT Initialization */
|
/* Foundry VTT Initialization */
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -90,7 +118,7 @@ Hooks.once("ready", function () {
|
|||||||
let sidebar = document.getElementById("sidebar");
|
let sidebar = document.getElementById("sidebar");
|
||||||
sidebar.style.width = "min-content";
|
sidebar.style.width = "min-content";
|
||||||
}
|
}
|
||||||
|
registerUsageCount('fvtt-mournblade')
|
||||||
welcomeMessage();
|
welcomeMessage();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -281,10 +281,11 @@ export class MournbladeUtility {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//console.log("Result : ", rollData)
|
||||||
if (rollData.difficulte > 0 && !rollData.isDramatique) {
|
if (rollData.difficulte > 0 && !rollData.isDramatique) {
|
||||||
rollData.isSuccess = (rollData.roll.finalResult >= rollData.difficulte)
|
rollData.isSuccess = (rollData.finalResult >= rollData.difficulte)
|
||||||
rollData.isHeroique = ((rollData.roll.finalResult - rollData.difficulte) >= 10)
|
rollData.isHeroique = ((rollData.finalResult - rollData.difficulte) >= 10)
|
||||||
rollData.isDramatique = ((rollData.roll.finalResult - rollData.difficulte) <= -10)
|
rollData.isDramatique = ((rollData.finalResult - rollData.difficulte) <= -10)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,6 +308,7 @@ export class MournbladeUtility {
|
|||||||
actor.changeEclat(-1)
|
actor.changeEclat(-1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//console.log("BEFORE COMP", rollData)
|
||||||
if (rollData.competence) {
|
if (rollData.competence) {
|
||||||
rollData.predilections = duplicate( rollData.competence.system.predilections.filter( pred => !pred.used) || [] )
|
rollData.predilections = duplicate( rollData.competence.system.predilections.filter( pred => !pred.used) || [] )
|
||||||
let compmod = (rollData.competence.system.niveau == 0) ? -3 : 0
|
let compmod = (rollData.competence.system.niveau == 0) ? -3 : 0
|
||||||
@@ -324,6 +326,9 @@ export class MournbladeUtility {
|
|||||||
if ( rollData.runemode == "inscrire") {
|
if ( rollData.runemode == "inscrire") {
|
||||||
rollData.runeduree *= 2
|
rollData.runeduree *= 2
|
||||||
}
|
}
|
||||||
|
if ( rollData.runemode == "prononcer") {
|
||||||
|
rollData.runeduree = 1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"id": "fvtt-mournblade",
|
"id": "fvtt-mournblade",
|
||||||
"description": "Mournblade RPG for FoundryVTT",
|
"description": "Mournblade RPG for FoundryVTT",
|
||||||
"version": "10.0.2",
|
"version": "10.0.7",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Uberwald/LeRatierBretonnien",
|
"name": "Uberwald/LeRatierBretonnien",
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
"gridUnits": "m",
|
"gridUnits": "m",
|
||||||
"license": "LICENSE.txt",
|
"license": "LICENSE.txt",
|
||||||
"manifest": "https://www.uberwald.me/gitea/public/fvtt-mournblade/raw/branch/v10/system.json",
|
"manifest": "https://www.uberwald.me/gitea/public/fvtt-mournblade/raw/branch/v10/system.json",
|
||||||
"download": "https://www.uberwald.me/gitea/public/fvtt-mournblade/archive/fvtt-mournblade-10.0.2.zip",
|
"download": "https://www.uberwald.me/gitea/public/fvtt-mournblade/archive/fvtt-mournblade-10.0.7.zip",
|
||||||
"packs": [
|
"packs": [
|
||||||
{
|
{
|
||||||
"type": "Item",
|
"type": "Item",
|
||||||
|
|||||||
@@ -8,41 +8,62 @@
|
|||||||
<div class="flexcol">
|
<div class="flexcol">
|
||||||
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
|
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<span class="flexrow">
|
|
||||||
<h4 class="item-name-label competence-name item-field-label-short">{{upperFirst alignement}}</h4>
|
|
||||||
<label class="item-name-label competence-name item-field-label-short">Loi</label>
|
|
||||||
<select class="status-small-label color-class-common item-field-label-short" type="text"
|
|
||||||
name="system.balance.loi" value="{{data.balance.loi}}" data-dtype="Number">
|
|
||||||
{{#select data.balance.loi}}
|
|
||||||
{{> systems/fvtt-mournblade/templates/partial-list-niveau.html}}
|
|
||||||
{{/select}}
|
|
||||||
</select>
|
|
||||||
<label class="item-name-label competence-name item-field-label-short">Chaos</label>
|
|
||||||
<select class="status-small-label color-class-common item-field-label-short" type="text"
|
|
||||||
name="system.balance.chaos" value="{{data.balance.chaos}}" data-dtype="Number">
|
|
||||||
{{#select data.balance.chaos}}
|
|
||||||
{{> systems/fvtt-mournblade/templates/partial-list-niveau.html}}
|
|
||||||
{{/select}}
|
|
||||||
</select>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div class="flexrow">
|
|
||||||
<h4 class="item-name-label competence-name">Bonne Aventure</h4>
|
|
||||||
<label class="item-name-label competence-name item-field-label-short">Base</label>
|
|
||||||
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
|
|
||||||
name="system.bonneaventure.base" value="{{data.bonneaventure.base}}" data-dtype="Number" />
|
|
||||||
<label class="item-name-label competence-name item-field-label-short">Actuelle</label>
|
|
||||||
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
|
|
||||||
name="system.bonneaventure.actuelle" value="{{data.bonneaventure.actuelle}}" data-dtype="Number" />
|
|
||||||
</div>
|
|
||||||
<div class="flexrow">
|
|
||||||
<h4 class="item-name-label competence-name item-field-label-short">Eclat</h4>
|
|
||||||
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
|
|
||||||
name="system.eclat.value" value="{{data.eclat.value}}" data-dtype="Number" />
|
|
||||||
|
|
||||||
<h4 class="item-name-label competence-name item-field-label-medium">Expérience</h4>
|
<ul class="item-list alternate-list">
|
||||||
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
|
<li class="item flexrow ">
|
||||||
name="system.experience.value" value="{{data.experience.value}}" data-dtype="Number" />
|
<label class="item-name-label competence-name item-field-label-short"><strong>Loi</strong></label>
|
||||||
|
|
||||||
|
<label class="item-name-label competence-name item-field-label-short">Niveau</label><input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
|
||||||
|
name="system.balance.loi" value="{{data.balance.loi}}" data-dtype="Number" />
|
||||||
|
|
||||||
|
<label class="item-name-label competence-name item-field-label-short">Points</label>
|
||||||
|
<select class="status-small-label color-class-common item-field-label-short" type="text"
|
||||||
|
name="system.balance.pointsloi" value="{{data.balance.pointsloi}}" data-dtype="Number">
|
||||||
|
{{#select data.balance.pointsloi}}
|
||||||
|
{{> systems/fvtt-mournblade/templates/partial-list-niveau.html}}
|
||||||
|
{{/select}}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<label class="item-name-label competence-name item-field-label-medium">Aspect {{aspect}}</label>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="item flexrow ">
|
||||||
|
<label class="item-name-label competence-name item-field-label-short"><strong>Chaos</strong></label>
|
||||||
|
|
||||||
|
<label class="item-name-label competence-name item-field-label-short">Niveau</label><input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
|
||||||
|
name="system.balance.chaos" value="{{data.balance.chaos}}" data-dtype="Number" />
|
||||||
|
|
||||||
|
<label class="item-name-label competence-name item-field-label-short">Points</label><select class="status-small-label color-class-common item-field-label-short" type="text"
|
||||||
|
name="system.balance.pointschaos" value="{{data.balance.pointschaos}}" data-dtype="Number">
|
||||||
|
{{#select data.balance.pointschaos}}
|
||||||
|
{{> systems/fvtt-mournblade/templates/partial-list-niveau.html}}
|
||||||
|
{{/select}}
|
||||||
|
</select>
|
||||||
|
<label class="item-name-label competence-name item-field-label-medium">Marge {{marge}}</label>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="item flexrow ">
|
||||||
|
<h4 class="item-name-label competence-name">Bonne Aventure</h4>
|
||||||
|
<label class="item-name-label competence-name item-field-label-short">Base</label>
|
||||||
|
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
|
||||||
|
name="system.bonneaventure.base" value="{{data.bonneaventure.base}}" data-dtype="Number" />
|
||||||
|
<label class="item-name-label competence-name item-field-label-short">Actuelle</label>
|
||||||
|
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
|
||||||
|
name="system.bonneaventure.actuelle" value="{{data.bonneaventure.actuelle}}" data-dtype="Number" />
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="item flexrow ">
|
||||||
|
<h4 class="item-name-label competence-name">Alignement {{alignement}}</h4>
|
||||||
|
<h4 class="item-name-label competence-name item-field-label-short">Eclat</h4>
|
||||||
|
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
|
||||||
|
name="system.eclat.value" value="{{data.eclat.value}}" data-dtype="Number" />
|
||||||
|
|
||||||
|
<h4 class="item-name-label competence-name item-field-label-medium">Expérience</h4>
|
||||||
|
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
|
||||||
|
name="system.experience.value" value="{{data.experience.value}}" data-dtype="Number" />
|
||||||
|
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -511,7 +532,7 @@
|
|||||||
<h3>Description</h3>
|
<h3>Description</h3>
|
||||||
</span>
|
</span>
|
||||||
<div class="medium-editor item-text-long-line">
|
<div class="medium-editor item-text-long-line">
|
||||||
{{editor data.biodata.description target="system.biodata.description" button=true owner=owner editable=editable}}
|
{{editor description target="system.biodata.description" button=true owner=owner editable=editable}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
</span>
|
</span>
|
||||||
|
|
||||||
<div class="small-editor item-text-long-line">
|
<div class="small-editor item-text-long-line">
|
||||||
{{editor data.sacrifice target="system.sacrifice" button=true owner=owner editable=editable}}
|
{{editor sacrifice target="system.sacrifice" button=true owner=owner editable=editable}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{> systems/fvtt-mournblade/templates/partial-item-description.html}}
|
{{> systems/fvtt-mournblade/templates/partial-item-description.html}}
|
||||||
|
|||||||
@@ -2,5 +2,5 @@
|
|||||||
<h3>Description</h3>
|
<h3>Description</h3>
|
||||||
</span>
|
</span>
|
||||||
<div class="medium-editor item-text-long-line">
|
<div class="medium-editor item-text-long-line">
|
||||||
{{editor data.description target="system.description" button=true owner=owner editable=editable}}
|
{{editor description target="system.description" button=true owner=owner editable=editable}}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user