Compare commits

...

19 Commits

Author SHA1 Message Date
c34d223d8f Ajout statut resistant 2023-03-26 20:33:57 +02:00
0e5be07fb9 Alpha sort 2023-03-19 18:58:28 +01:00
22ae4fb588 Fix protections 2023-03-14 07:18:14 +01:00
42ac857c06 Fix protections 2023-03-14 07:13:33 +01:00
1c143f542c Fix creature 2023-03-13 23:58:43 +01:00
4d447c9783 Enhance creatures 2022-12-21 19:15:03 +01:00
8760e3eb6e Fix ajout equipements 2022-12-19 10:15:46 +01:00
b3ddfb802e Fix name 2022-12-18 17:50:18 +01:00
9f111771df Fix Historiques 2022-12-11 18:42:35 +01:00
44141e3982 Fix Historiques 2022-12-11 18:42:16 +01:00
35b47d5aaf Mise à jour diu README 2022-12-06 07:41:57 +01:00
c48116de54 Mise à jour diu README 2022-12-06 07:41:51 +01:00
295c68a16e Mise à jour diu README 2022-12-06 07:37:11 +01:00
b9d12843a5 Ajout Artefacts et syntaxe item/acteurs 2022-12-06 07:27:51 +01:00
dd3f13f095 Gestion des quantites et de l'argent 2022-12-03 23:58:18 +01:00
5dde9ac72f Gestion des quantites et de l'argent 2022-12-03 23:57:30 +01:00
5ab6b99ef6 HUD + liste de talents 2022-12-03 23:13:08 +01:00
6b508c96be Better use of tokens/actors 2022-11-30 12:15:45 +01:00
567710d922 Dur au mal, parade, initiative management, amelioration dialogues, bonus/malus sur jets 2022-11-29 10:54:56 +01:00
29 changed files with 706 additions and 151 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.history/

25
LICENCE.txt Normal file
View File

@ -0,0 +1,25 @@
MIT License
Copyright (c) 2022 Uberwald/LeRatierBretonnien
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
This license does not apply to the compendium content listed in this software's
"packs" directory. See the README for licensing information for the compendium
packs.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,23 +1,29 @@
# Système Foundry pour Mournblade (French RPG, Titam France/Sombres Projets)
# Système Foundry pour Hawkmoon (French RPG, Titam France/Sombres Projets)
## EN
Unofficial system for Mournblade (French version from Titam France).
Unofficial system for Hawkmoon (French version from Titam France).
This system has been approved by Département des Sombres Projets ( http://www.titam-france.fr/ ), thanks !
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).
Système non-officiel pour le JDR Hawkmoon (Titam France/Sombres Projets).
Ce système a été autorisé par Ludospherik ( http://www.ludospherik.fr/ ), merci à eux !
Ce système a été autorisé par le Département des Sombres Projets ( http://www.titam-france.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.
Hawkmoon, le jeu de rôle du Troisième Millénaire, is a property of Titam France/Sombres Projets.
# Developmement
LeRatierBretonnien
# Tests, icones et saisie des données
Prêtre, Blondin, Zechrub/Chris, Kyllian, Lightbringer

31
lang/fr.json Normal file
View File

@ -0,0 +1,31 @@
{
"ACTOR": {
"TypePersonnage": "Personnage",
"TypeCellule": "Cellule",
"TypeCreature": "Créature"
},
"ITEM": {
"TypeArtefact": "Artefact",
"TypeArme": "Arme",
"TypeTalent": "Talent",
"TypeHistorique": "Historique",
"TypeProfil": "Profil",
"TypeCompetence": "Compétence",
"TypeProtection": "Protection",
"TypeMonnaie": "Monnaie",
"TypeEquipement": "Equipement",
"TypeRessource": "Ressource",
"TypeContact": "Contact"
},
"HAWKMOON": {
"ui": {
"editContact": "Modifier le contact",
"deleteContact": "Supprimer le contact",
"editTrait": "Modifier le trait",
"deleteTrait": "Supprimer le trait"
}
}
}

View File

@ -42,12 +42,17 @@ export class HawkmoonActorSheet extends ActorSheet {
armes: duplicate(this.actor.getWeapons()),
monnaies: duplicate(this.actor.getMonnaies()),
protections: duplicate(this.actor.getArmors()),
historique: duplicate(this.actor.getHistorique() || {}),
talents: duplicate(this.actor.getTalents() || {}),
historiques: duplicate(this.actor.getHistoriques() || []),
talents: duplicate(this.actor.getTalents() || []),
talentsCell: this.getCelluleTalents(),
profils: duplicate(this.actor.getProfils() || {}),
profils: duplicate(this.actor.getProfils() || []),
combat: this.actor.getCombatValues(),
equipements: duplicate(this.actor.getEquipments()),
artefacts: duplicate(this.actor.getArtefacts()),
monnaies: duplicate(this.actor.getMonnaies()),
richesse: this.actor.computeRichesse(),
valeurEquipement: this.actor.computeValeurEquipement(),
initiative: this.actor.getFlag("world", "last-initiative") || -1,
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
habitat: await TextEditor.enrichHTML(this.object.system.biodata.habitat, {async: true}),
options: this.options,
@ -111,15 +116,12 @@ export class HawkmoonActorSheet extends ActorSheet {
let value = Number($(event.currentTarget).data("adversite-value"))
this.actor.incDecAdversite(adv, value)
})
html.find('.quantity-minus').click(event => {
const li = $(event.currentTarget).parents(".item");
this.actor.incDecQuantity( li.data("item-id"), -1 );
} );
html.find('.quantity-plus').click(event => {
const li = $(event.currentTarget).parents(".item");
this.actor.incDecQuantity( li.data("item-id"), +1 );
} );
html.find('.quantity-modify').click(event => {
const li = $(event.currentTarget).parents(".item")
const value = Number($(event.currentTarget).data("quantite-value"))
this.actor.incDecQuantity( li.data("item-id"), value );
})
html.find('.roll-initiative').click((event) => {
this.actor.rollAttribut("pre", true)
@ -146,7 +148,11 @@ export class HawkmoonActorSheet extends ActorSheet {
let armeId = li.data("item-id")
this.actor.rollArmeDegats(armeId)
})
html.find('.item-add').click((event) => {
const itemType = $(event.currentTarget).data("type")
this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true })
})
html.find('.lock-unlock-sheet').click((event) => {
this.options.editScore = !this.options.editScore;

View File

@ -41,22 +41,41 @@ export class HawkmoonActor extends Actor {
const skills = await HawkmoonUtility.loadCompendium("fvtt-hawkmoon-cyd.skills")
data.items = skills.map(i => i.toObject())
}
if (data.type == 'pnj') {
if (data.type == 'creature') {
const skills = await HawkmoonUtility.loadCompendium("fvtt-hawkmoon-cyd.skills-creatures")
data.items = skills.map(i => i.toObject())
data.items.push({ name: "Arme naturelle 1", type: 'arme', img: "systems/fvtt-hawkmoon-cyd/assets/icons/melee.webp", system: { typearme: "contact", bonusmaniementoff: 0, seuildefense: 0, degats: "0" } })
data.items.push({ name: "Arme naturelle 2", type: 'arme', img: "systems/fvtt-hawkmoon-cyd/assets/icons/melee.webp", system: { typearme: "contact", bonusmaniementoff: 0, seuildefense: 0, degats: "0" } })
}
return super.create(data, options);
}
/* -------------------------------------------- */
getBonusDefenseFromTalents() {
let talents = this.items.filter(item => item.type == "talent" && item.system.isautomated)
let bonus = 0
for (let talent of talents) {
for (let auto of talent.system.automations) {
if (auto.eventtype == "bonus-permanent" && auto.bonusname == "bonus-defensif") {
bonus += Number(auto.bonus || 0)
}
}
}
return bonus
}
/* -------------------------------------------- */
prepareArme(arme) {
arme = duplicate(arme)
let combat = this.getCombatValues()
if (arme.system.typearme == "contact" || arme.system.typearme == "contactjet") {
let bonusDefense = this.getBonusDefenseFromTalents()
arme.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
arme.system.attrKey = "pui"
arme.system.totalDegats = arme.system.degats + "+" + combat.bonusDegatsTotal
arme.system.totalOffensif = this.system.attributs.pui.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff
arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.seuildefense
arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.seuildefense + bonusDefense
arme.system.isdefense = true
}
if (arme.system.typearme == "jet" || arme.system.typearme == "tir") {
@ -72,6 +91,11 @@ export class HawkmoonActor extends Actor {
}
/* -------------------------------------------- */
getItemSorted(types) {
let items = this.items.filter(item => types.includes(item.type)) || []
HawkmoonUtility.sortArrayObjectsByName(items)
return items
}
getWeapons() {
let armes = []
for (let arme of this.items) {
@ -79,47 +103,37 @@ export class HawkmoonActor extends Actor {
armes.push(this.prepareArme(arme))
}
}
HawkmoonUtility.sortArrayObjectsByName(armes)
return armes
}
/* -------------------------------------------- */
getMonnaies() {
return this.items.filter( it => it.type == "monnaie")
return this.getItemSorted(["monnaie"])
}
/* ----------------------- --------------------- */
addMember( actorId) {
let members = duplicate(this.system.members)
members.push( {id: actorId} )
this.update ({'system.members': members})
}
async removeMember(actorId) {
let members = this.system.members.filter(it => it.id != actorId )
this.update ({'system.members': members})
}
/* ----------------------- --------------------- */
getEquipments() {
return this.items.filter(item => item.type == "equipement")
return this.getItemSorted(["equipement"])
}
/* -------------------------------------------- */
getArtefacts() {
return this.getItemSorted(["artefact"])
}
getArmors() {
return this.items.filter(item => item.type == "protection")
return this.getItemSorted(["protection"])
}
getHistorique() {
return this.items.find(item => item.type == "historique")
getHistoriques() {
return this.getItemSorted(["historique"])
}
getProfils() {
return this.items.filter(item => item.type == "profil")
return this.getItemSorted(["profil"])
}
getTalents() {
return this.items.filter(item => item.type == "talent")
return this.getItemSorted(["talent"])
}
getRessources() {
return this.items.filter(item => item.type == "ressource")
return this.getItemSorted(["ressource"])
}
getContacts() {
return this.items.filter(item => item.type == "contact")
return this.getItemSorted(["contact"])
}
/* -------------------------------------------- */
getSkills() {
let comp = []
@ -140,17 +154,19 @@ export class HawkmoonActor extends Actor {
comp.push(item)
}
}
return comp.sort(function (a, b) {
let fa = a.name.toLowerCase(),
fb = b.name.toLowerCase();
if (fa < fb) {
return -1;
}
if (fa > fb) {
return 1;
}
return 0;
})
HawkmoonUtility.sortArrayObjectsByName(comp)
return comp
}
/* ----------------------- --------------------- */
addMember(actorId) {
let members = duplicate(this.system.members)
members.push({ id: actorId })
this.update({ 'system.members': members })
}
async removeMember(actorId) {
let members = this.system.members.filter(it => it.id != actorId)
this.update({ 'system.members': members })
}
/* -------------------------------------------- */
@ -165,7 +181,7 @@ export class HawkmoonActor extends Actor {
/* -------------------------------------------- */
getProtection() {
let equipProtection = 0
for(let armor in this.items) {
for (let armor in this.items) {
if (armor.type == "protection" && armor.system.equipped) {
equipProtection += Number(armor.system.protection)
}
@ -186,7 +202,7 @@ export class HawkmoonActor extends Actor {
vitesseBase: this.getVitesseBase(),
vitesseTotal: this.getVitesseBase() + this.system.combat.vitessebonus,
defenseBase: this.getDefenseBase(),
protection : this.getProtection(),
protection: this.getProtection(),
defenseTotal: this.getDefenseBase() + this.system.combat.defensebonus + this.getProtection() - this.getTotalAdversite()
}
return combat
@ -205,7 +221,8 @@ export class HawkmoonActor extends Actor {
prepareDerivedData() {
if (this.type == 'personnage') {
let vigueur = Math.floor((this.system.attributs.pui.value + this.system.attributs.tre.value) / 2)
let talentBonus = this.getVigueurBonus()
let vigueur = Math.floor((this.system.attributs.pui.value + this.system.attributs.tre.value) / 2) + talentBonus
if (vigueur != this.system.sante.vigueur) {
this.update({ 'system.sante.vigueur': vigueur })
}
@ -298,6 +315,21 @@ export class HawkmoonActor extends Actor {
getVigueur() {
return this.system.sante.vigueur
}
/* -------------------------------------------- */
getVigueurBonus() {
let talents = this.items.filter(item => item.type == "talent" && item.system.isautomated)
let bonus = 0
for (let talent of talents) {
for (let auto of talent.system.automations) {
if (auto.eventtype == "bonus-permanent" && auto.bonusname == "vigueur") {
bonus += Number(auto.bonus || 0)
}
}
}
return bonus
}
/* -------------------------------------------- */
getBonneAventure() {
return this.system.bonneaventure.actuelle
@ -343,7 +375,7 @@ export class HawkmoonActor extends Actor {
/* -------------------------------------------- */
getBonusDegats() {
return 0;
return 0;
}
/* -------------------------------------------- */
@ -396,12 +428,36 @@ export class HawkmoonActor extends Actor {
async incDecQuantity(objetId, incDec = 0) {
let objetQ = this.items.get(objetId)
if (objetQ) {
let newQ = objetQ.system.quantity + incDec
let newQ = objetQ.system.quantite + incDec
newQ = Math.max(newQ, 0)
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantity': newQ }]); // pdates one EmbeddedEntity
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantite': newQ }]); // pdates one EmbeddedEntity
}
}
/* -------------------------------------------- */
computeRichesse() {
let valueSC = 0
for (let monnaie of this.items) {
if (monnaie.type == "monnaie") {
valueSC += Number(monnaie.system.prixsc) * Number(monnaie.system.quantite)
}
}
return HawkmoonUtility.computeMonnaieDetails(valueSC)
}
/* -------------------------------------------- */
computeValeurEquipement() {
let valueSC = 0
for (let equip of this.items) {
if (equip.type == "equipement" || equip.type == "arme" || equip.type == "protection") {
valueSC += Number(equip.system.prixsc) * Number(equip.system.quantite ?? 1)
valueSC += (Number(equip.system.prixca) * Number(equip.system.quantite ?? 1)) * 20
valueSC += (Number(equip.system.prixpo) * Number(equip.system.quantite ?? 1)) * 400
}
}
return HawkmoonUtility.computeMonnaieDetails(valueSC)
}
/* -------------------------------------------- */
getCompetence(compId) {
return this.items.get(compId)
@ -417,7 +473,8 @@ export class HawkmoonActor extends Actor {
/* -------------------------------------------- */
getInitiativeScore() {
return this.lastInit || -1
let init = this.getFlag("world", "last-initiative")
return init || -1
}
/* -------------------------------------------- */
@ -426,7 +483,7 @@ export class HawkmoonActor extends Actor {
let maxDef = 0
let bestArme
for (let arme of defenseList) {
if (arme.type == "arme" ) {
if (arme.type == "arme") {
arme = this.prepareArme(arme)
}
if (arme.system.totalDefensif > maxDef) {
@ -458,12 +515,18 @@ export class HawkmoonActor extends Actor {
return talents
}
/* -------------------------------------------- */
buildListeAdversites() {
return []
}
/* -------------------------------------------- */
getCommonRollData(attrKey = undefined, compId = undefined, compName = undefined) {
let rollData = HawkmoonUtility.getBasicRollData()
rollData.alias = this.name
rollData.actorImg = this.img
rollData.actorId = this.id
rollData.tokenId = this.token?.id
rollData.img = this.img
rollData.attributs = HawkmoonUtility.getAttributs()
rollData.maitriseId = "none"
@ -494,8 +557,8 @@ export class HawkmoonActor extends Actor {
/* -------------------------------------------- */
async rollAttribut(attrKey, isInit = false) {
let rollData = this.getCommonRollData(attrKey)
rollData.multiplier = (isInit)? 1 : 2
let rollData = this.getCommonRollData(attrKey)
rollData.multiplier = (isInit) ? 1 : 2
rollData.isInit = isInit
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
rollDialog.render(true)
@ -518,6 +581,7 @@ export class HawkmoonActor extends Actor {
}
let rollData = this.getCommonRollData(arme.system.attrKey, arme.system.competence._id)
rollData.arme = arme
HawkmoonUtility.updateWithTarget(rollData)
console.log("ARME!", rollData)
let rollDialog = await HawkmoonRollDialog.create(this, rollData)
rollDialog.render(true)
@ -530,9 +594,9 @@ export class HawkmoonActor extends Actor {
arme = this.prepareArme(arme)
}
console.log("DEGATS", arme)
let roll = new Roll( "1d10+"+arme.system.totalDegats).roll({ async: false })
let roll = new Roll("1d10+" + arme.system.totalDegats).roll({ async: false })
await HawkmoonUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode"));
let nbEtatPerdus = 0
let nbEtatPerdus = 0
if (targetVigueur) {
nbEtatPerdus = Math.floor(roll.total / targetVigueur)
}

View File

@ -8,9 +8,9 @@ export class HawkmoonCombat extends Combat {
ids = typeof ids === "string" ? [ids] : ids;
for (let cId = 0; cId < ids.length; cId++) {
const c = this.combatants.get(ids[cId]);
let id = c._id || c.id;
//console.log("Init for combattant", c )
let id = c._id || c.id
let initValue = c.actor ? c.actor.getInitiativeScore() : 0
//console.log("Init bonus", initBonus, roll.total)
await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: initValue } ]);
}

71
modules/hawkmoon-hud.js Normal file
View File

@ -0,0 +1,71 @@
/* -------------------------------------------- */
/* -------------------------------------------- */
export class HawkmoonTokenHud {
static init() {
// Integration du TokenHUD
Hooks.on('renderTokenHUD', (app, html, data) => { HawkmoonTokenHud.addTokenHudExtensions(app, html, data._id) });
}
/* -------------------------------------------- */
static async removeExtensionHud(app, html, tokenId) {
html.find('.control-icon.hawkmoon-adversite').remove()
}
/* -------------------------------------------- */
static async addExtensionHud(app, html, tokenId) {
let token = canvas.tokens.get(tokenId)
let actor = token.actor
app.hasExtension = true
const hudData = { actor: actor }
const controlIconActions = html.find('.control-icon[data-action=combat]');
// initiative
await HawkmoonTokenHud._configureSubMenu(controlIconActions, 'systems/fvtt-hawkmoon-cyd/templates/hud-adversites.html', hudData,
(event) => {
let adversite = event.currentTarget.attributes['data-action-index'].value
let value = Number(event.currentTarget.attributes['data-action-value'].value)
hudData.actor.incDecAdversite( adversite, value)
} )
}
/* -------------------------------------------- */
static async addTokenHudExtensions(app, html, tokenId) {
const controlIconCombat = html.find('.control-icon[data-action=combat]')
if (controlIconCombat.length>0 ) {
HawkmoonTokenHud.addExtensionHud(app, html, tokenId);
}
}
/* -------------------------------------------- */
static async _configureSubMenu(insertionPoint, template, hudData, onMenuItem) {
const hud = $(await renderTemplate(template, hudData))
const list = hud.find('div.hawkmoon-hud-list')
HawkmoonTokenHud._toggleHudListActive(hud, list);
hud.find('img.hawkmoon-hud-togglebutton').click(event => HawkmoonTokenHud._toggleHudListActive(hud, list));
list.find('.hawkmoon-hud-adversite').click(onMenuItem);
insertionPoint.after(hud);
}
/* -------------------------------------------- */
static _showControlWhen(control, condition) {
if (condition) {
control.show()
}
else {
control.hide()
}
}
/* -------------------------------------------- */
static _toggleHudListActive(hud, list) {
hud.toggleClass('active')
HawkmoonTokenHud._showControlWhen(list, hud.hasClass('active'))
}
}

View File

@ -17,6 +17,7 @@ import { HawkmoonUtility } from "./hawkmoon-utility.js";
import { HawkmoonCombat } from "./hawkmoon-combat.js";
import { HawkmoonItem } from "./hawkmoon-item.js";
import { HawkmoonAutomation } from "./hawkmoon-automation.js";
import { HawkmoonTokenHud } from "./hawkmoon-hud.js";
/* -------------------------------------------- */
/* Foundry VTT Initialization */
@ -64,6 +65,7 @@ Hooks.once("init", async function () {
HawkmoonUtility.init()
HawkmoonAutomation.init()
HawkmoonTokenHud.init()
});
@ -75,7 +77,8 @@ function welcomeMessage() {
content: `<div id="welcome-message-Hawkmoon"><span class="rdd-roll-part">
<strong>Bienvenue dans Hawkmoon et le troisième Millénaire !</strong>
<p>Les livres de Hawkmoon sont nécessaires pour jouer : https://www.titam-france.fr</p>
<p>Hawkmoon est jeude rôle publié par Titam France/Sombres projets, tout les droits leur appartiennent.<p>
<p>Hawkmoon est jeu de rôle publié par Titam France/Sombres projets, tout les droits leur appartiennent.</p>
<p>Système développé par LeRatierBretonnien, support sur le <a href="https://discord.gg/pPSDNJk">Discord FR de Foundry</a>.</p>
` });
}
@ -110,7 +113,8 @@ function registerUsageCount(registerKey) {
/* -------------------------------------------- */
Hooks.once("ready", function () {
HawkmoonUtility.ready();
HawkmoonUtility.ready()
// User warning
if (!game.user.isGM && game.user.character == undefined) {
ui.notifications.info("Attention ! Aucun personnage n'est relié au joueur !");

View File

@ -5,7 +5,7 @@ export class HawkmoonRollDialog extends Dialog {
/* -------------------------------------------- */
static async create(actor, rollData ) {
let options = { classes: ["HawkmoonDialog"], width: 340, height: 'fit-content', 'z-index': 99999 };
let options = { classes: ["HawkmoonDialog"], width: 320, height: 'fit-content', 'z-index': 99999 };
let html = await renderTemplate('systems/fvtt-hawkmoon-cyd/templates/roll-dialog-generic.html', rollData);
return new HawkmoonRollDialog(actor, rollData, html, options );
@ -70,7 +70,11 @@ export class HawkmoonRollDialog extends Dialog {
this.rollData.maitriseId = String(event.currentTarget.value)
})
html.find('#competence-talents').change((event) => {
this.rollData.selectedTalents = $('#competence-talents').val()
this.rollData.selectedTalents = $('#competence-talents').val()
})
html.find('#bonus-malus-context').change((event) => {
this.rollData.bonusMalusContext = Number(event.currentTarget.value)
})
}
}

View File

@ -61,6 +61,13 @@ export class HawkmoonUtility {
}
/* -------------------------------------------- */
static sortArrayObjectsByName(myArray) {
myArray.sort((a, b) => {
return a.name.localeCompare(b.name);
})
}
/* -------------------------------------------- */
static getModificateurOptions() {
let opt = []
@ -96,7 +103,7 @@ export class HawkmoonUtility {
static async ready() {
const skills = await HawkmoonUtility.loadCompendium("fvtt-hawkmoon-cyd.skills")
this.skills = skills.map(i => i.toObject())
// Setup pause logo
let logoPause = "systems/fvtt-hawkmoon-cyd/assets/logos/" + game.settings.get("fvtt-hawkmoon-cyd", "hawkmoon-pause-logo") + ".webp"
let logoImg = document.querySelector('#pause').children[0]
@ -127,7 +134,7 @@ export class HawkmoonUtility {
let messageId = HawkmoonUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId)
let rollData = message.getFlag("world", "hawkmoon-roll")
let actor = game.actors.get(rollData.actorId)
let actor = this.getActorFromRollData(rollData)
await actor.setPredilectionUsed(rollData.competence._id, predIdx)
rollData.competence = duplicate(actor.getCompetence(rollData.competence._id))
HawkmoonUtility.rollHawkmoon(rollData)
@ -137,7 +144,7 @@ export class HawkmoonUtility {
let messageId = HawkmoonUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId)
let rollData = message.getFlag("world", "hawkmoon-roll")
let actor = game.actors.get(rollData.actorId)
let actor = this.getActorFromRollData(rollData)
actor.rollArmeDegats(rollData.arme._id, rollData.targetVigueur)
})
}
@ -151,9 +158,11 @@ export class HawkmoonUtility {
'systems/fvtt-hawkmoon-cyd/templates/partial-item-description.html',
'systems/fvtt-hawkmoon-cyd/templates/partial-item-nav.html',
'systems/fvtt-hawkmoon-cyd/templates/partial-list-niveau.html',
'systems/fvtt-hawkmoon-cyd/templates/partial-list-niveau-creature.html',
'systems/fvtt-hawkmoon-cyd/templates/partial-item-prix.html',
'systems/fvtt-hawkmoon-cyd/templates/partial-sante-etat.html',
'systems/fvtt-hawkmoon-cyd/templates/partial-automation.html',
'systems/fvtt-hawkmoon-cyd/templates/hud-adversites.html',
]
return loadTemplates(templatePaths);
}
@ -216,8 +225,15 @@ export class HawkmoonUtility {
}
/* -------------------------------------------- */
static getDefenseState(actorId) {
return this.defenderStore[actorId];
static getActorFromRollData(rollData) {
let actor = game.actors.get(rollData.actorId)
if (rollData.tokenId) {
let token = canvas.tokens.placeables.find(t => t.id == rollData.tokenId)
if (token) {
actor = token.actor
}
}
return actor
}
/* -------------------------------------------- */
@ -297,10 +313,20 @@ export class HawkmoonUtility {
}
}
/* -------------------------------------------- */
static computeMonnaieDetails(valueSC) {
let po = Math.floor(valueSC / 400)
let pa = Math.floor((valueSC - (po * 400)) / 20)
let sc = valueSC - (po * 400) - (pa * 20)
return {
po: po, pa: pa, sc: sc, valueSC: valueSC
}
}
/* -------------------------------------------- */
static computeResult(rollData) {
rollData.diceResult = rollData.roll.terms[0].results[0].result
if (rollData.mainDice.includes("d20") ) {
if (rollData.mainDice.includes("d20")) {
let diceValue = rollData.roll.terms[0].results[0].result
if (diceValue % 2 == 1) {
//console.log("PAIR/IMP2", diceValue)
@ -318,13 +344,13 @@ export class HawkmoonUtility {
rollData.isHeroique = ((rollData.finalResult - rollData.difficulte) >= 10)
rollData.isDramatique = ((rollData.finalResult - rollData.difficulte) <= -10)
}
}
/* -------------------------------------------- */
static async rollHawkmoon(rollData) {
let actor = game.actors.get(rollData.actorId)
let actor = this.getActorFromRollData(rollData)
if (rollData.attrKey == "tochoose") { // No attr selected, force address
rollData.attrKey = "adr"
}
@ -333,8 +359,8 @@ export class HawkmoonUtility {
rollData.attr = duplicate(actor.system.attributs[rollData.attrKey])
}
if ( rollData.maitriseId != "none") {
rollData.selectedMaitrise = rollData.maitrises.find(p => p.id == rollData.maitriseId )
if (rollData.maitriseId != "none") {
rollData.selectedMaitrise = rollData.maitrises.find(p => p.id == rollData.maitriseId)
rollData.diceFormula = "2" + rollData.mainDice + "kh"
} else {
rollData.diceFormula = "1" + rollData.mainDice
@ -345,15 +371,15 @@ export class HawkmoonUtility {
rollData.predilections = duplicate(rollData.competence.system.predilections.filter(pred => pred.acquise && !pred.maitrise && !pred.used) || [])
let compmod = (rollData.competence.system.niveau == 0) ? -3 : 0
rollData.diceFormula += `+${rollData.attr.value}+${rollData.competence.system.niveau}+${rollData.modificateur}+${compmod}`
if ( rollData.selectedTalents && rollData.selectedTalents.length > 0) {
if (rollData.selectedTalents && rollData.selectedTalents.length > 0) {
for (let id of rollData.selectedTalents) {
let talent = rollData.talents.find(t => t._id == id)
let bonusOK = true
if ( talent.system.baCost ) {
bonusOK = actor.checkBonneAventure( talent.system.baCost)
if ( bonusOK ) {
actor.changeBonneAventure( -talent.system.baCost )
if (talent.system.baCost) {
bonusOK = actor.checkBonneAventure(talent.system.baCost)
if (bonusOK) {
actor.changeBonneAventure(-talent.system.baCost)
} else {
ui.notifications.warn("Vous n'avez pas assez de points de Bonne Aventure !")
}
@ -362,9 +388,10 @@ export class HawkmoonUtility {
rollData.diceFormula += `+${talent.system.bonus}`
}
}
}
}
rollData.diceFormula += `+${rollData.bonusMalusContext}`
} else {
rollData.diceFormula += `+${rollData.attr.value}*${rollData.multiplier}+${rollData.modificateur}`
rollData.diceFormula += `+${rollData.attr.value}*${rollData.multiplier}+${rollData.modificateur}+${rollData.bonusMalusContext}`
}
// Ajout adversités
@ -382,7 +409,7 @@ export class HawkmoonUtility {
rollData.finalResult = myRoll.total
this.computeResult(rollData)
if (rollData.isInit) {
actor.lastInit = rollData.finalResult
actor.setFlag("world", "last-initiative", rollData.finalResult)
}
this.createChatWithRollMode(rollData.alias, {
@ -411,7 +438,7 @@ export class HawkmoonUtility {
/* -------------------------------------------- */
static getUsers(filter) {
return game.users.filter(filter).map(user => user.data._id);
return game.users.filter(filter).map(user => user._id);
}
/* -------------------------------------------- */
@ -501,8 +528,8 @@ export class HawkmoonUtility {
pointAmeOptions: this.getPointAmeOptions(),
difficulte: 0,
modificateur: 0,
bonusMalusContext: 0
}
HawkmoonUtility.updateWithTarget(rollData)
return rollData
}
@ -514,7 +541,7 @@ export class HawkmoonUtility {
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
rollData.armeDefense = defender.getBestDefenseValue()
rollData.targetVigueur = defender.getVigueur()
if ( rollData.armeDefense) {
if (rollData.armeDefense) {
rollData.difficulte = rollData.armeDefense.system.totalDefensif
} else {
ui.notifications.warn("Aucune arme de défense équipée, difficulté manuelle à positionner.")
@ -533,7 +560,7 @@ export class HawkmoonUtility {
let msg = game.messages.get(msgId)
if (msg) {
let rollData = msg.getFlag("world", "hawkmoon-roll")
let actor = game.actors.get(rollData.actorId)
let actor = this.getActorFromRollData(rollData)
actor.changeBonneAventure(changed)
rollData.isReroll = true
rollData.textBonus = "Bonus de Points d'Aventure"
@ -552,7 +579,7 @@ export class HawkmoonUtility {
let msg = game.messages.get(msgId)
if (msg) {
let rollData = msg.getFlag("world", "hawkmoon-roll")
let actor = game.actors.get(rollData.actorId)
let actor = this.getActorFromRollData(rollData)
actor.changeEclat(changed)
rollData.isReroll = true
rollData.textBonus = "Bonus d'Eclat"
@ -571,14 +598,14 @@ export class HawkmoonUtility {
let canApplyBA = function (li) {
let message = game.messages.get(li.attr("data-message-id"))
let rollData = message.getFlag("world", "hawkmoon-roll")
let actor = game.actors.get(rollData.actorId)
return (!rollData.isReroll && actor.getBonneAventure() > 0 )
let actor = this.getActorFromRollData(rollData)
return (!rollData.isReroll && actor.getBonneAventure() > 0)
}
let canApplyPE = function (li) {
let message = game.messages.get(li.attr("data-message-id"))
let rollData = message.getFlag("world", "hawkmoon-roll")
let actor = game.actors.get(rollData.actorId)
return (!rollData.isReroll && actor.getEclat() > 0 )
let actor = this.getActorFromRollData(rollData)
return (!rollData.isReroll && actor.getEclat() > 0)
}
options.push(
{
@ -635,4 +662,21 @@ export class HawkmoonUtility {
d.render(true);
}
}
/************************************************************************************/
static async __create_talents_table() {
let compName = "fvtt-hawkmoon-cyd.talents-cellule"
const compData = await HawkmoonUtility.loadCompendium(compName)
let talents = compData.map(i => i.toObject())
let htmlTab = "<table border='1'><tbody>";
for (let entryData of talents) {
console.log(entryData)
htmlTab += `<tr><td>@UUID[Compendium.${compName}.${entryData._id}]{${entryData.name}}</td>`
htmlTab += `<td>${entryData.system.description}</td>`;
//htmlTab += `<td>${entryData.system.resumebonus}</td>`;
htmlTab += "</tr>\n";
}
htmlTab += "</table>";
await JournalEntry.create({ name: 'Liste des Talents de Cellule', content: htmlTab });
}
}

2
packs/aides-de-jeu.db Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,8 @@
{"name":"Mêlée","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">M&ecirc;l&eacute;e repr&eacute;sente la ma&icirc;trise martiale et l&rsquo;habilet&eacute; au combat rapproch&eacute;, avec ou sans arme. Plus cette Comp&eacute;tence est &eacute;lev&eacute;e, plus le personnage est &agrave; m&ecirc;me de passer la garde de ses adversaires en combat au corps-&agrave;-corps.</p>","niveau":0,"attribut1":"pui","attribut2":"none","attribut3":"none","doublebonus":false,"predilections":[{"name":"Armes à une main (Puissance)","used":false,"description":"Pour utiliser des armes comme lépée courte, la hache, une arme improvisée à une main, etc.\n\n"},{"name":"Armes à deux mains (Puissance)","used":false,"description":"Pour utiliser des armes comme la hache nordaine ou lépée arthurienne, une arme improvisée à deux mains, etc."},{"name":"Mains nues (Puissance)","used":false,"description":"Pour se battre à mains nues, quil sagisse dune bagarre ou dun pugilat codifié."}],"predilections[0]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.VM3TSQYxseYdCFjv"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645643952,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"0nhTxujlIUB63Aqt"}
{"name":"Discrétion","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Discr&eacute;tion repr&eacute;sente la capacit&eacute; &agrave; ne pas se faire remarquer, qu&rsquo;il s&rsquo;agisse de se fondre dans la foule, de prendre l'apparence de quelqu&rsquo;un d&rsquo;autre, de se cacher dans l&rsquo;ombre ou encore de se d&eacute;placer en silence. Plus cette Comp&eacute;tence est &eacute;lev&eacute;e, plus le personnage est apte &agrave; passer<br>physiquement inaper&ccedil;u.</p>","niveau":0,"attribut1":"adr","attribut2":"tre","attribut3":"none","doublebonus":false,"predilections":[{"name":"Cacher et se cacher (Trempe)","used":false,"description":"Pour se fondre dans le décor. Le personnage adopte un comportement décontracté qui le fait passer inaperçu, il trouve une cachette, etc. Permet également de dissimuler un objet sur soi (quil sagisse dune bourse, dune arme, dun tatouage, etc.).\n\n"},{"name":"Déguisement (Trempe)","used":false,"description":"Pour dissimuler son identité, altérer ses traits ou prendre ceux d'une personne spécifique."},{"name":"Déplacement silencieux (Adresse)","used":false,"description":"Pour se déplacer sans éveiller lattention lorsquon ne peut être vu (dans lobscurité ou à couvert, lorsquun garde est derrière une porte ou un angle\nde mur, etc.)."}]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.gBmAdYl4rhbY89ee"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645638028,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"J4x6SP6l6njOrZn3"}
{"name":"Armes à distance","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Repr&eacute;sente l&rsquo;habilet&eacute; au lancer ou avec une arme &agrave; distance. Plus cette Comp&eacute;tence est &eacute;lev&eacute;e, plus les tirs du personnage sont pr&eacute;cis.&nbsp;</p>\n<p style=\"text-align: justify;\">&nbsp;</p>\n<p style=\"text-align: justify;\">&nbsp;</p>\n<p style=\"text-align: justify;\">&nbsp;</p>","niveau":0,"attribut1":"adr","attribut2":"none","attribut3":"none","doublebonus":false,"predilections":[{"name":"Armes à feu (Adresse) ","used":false,"description":"Pour des armes comme le lance-feu. "},{"name":"Armes à projectile (Adresse)","used":false,"description":"Pour des armes comme l'arc, la fronde, l'arbalète, etc."},{"name":"Armes de jet (Adresse)","used":false,"description":"Pour des armes comme la dague de lancer, la bombe à mèche, le javelot, les projectiles improvisés, etc. "}],"predilections[0]":["Nouvelle prédilection",""],"predilections[1]":["Nouvelle prédilection",""],"predilections[2]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.MLMlscPBb1ZCPTRl"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666619959067,"modifiedTime":1671645649970,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"UfVYwmPFwy2T7jZM"}
{"name":"Survie","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Survie repr&eacute;sente la capacit&eacute; &agrave; trouver de quoi subsister dans la nature, &agrave; &eacute;tablir un campement, &agrave; faire du feu avec les moyens du bord, &agrave; se rep&eacute;rer. Avec Clairvoyance, cette Comp&eacute;tence permet de trouver des baies comestibles, de poser tous les types de pi&egrave;ges, de pister, de trouver le meilleur emplacement pour un campement. Avec Adresse, elle permet de chasser, de p&ecirc;cher, de faire du feu dans des conditions difficiles et de confectionner les pi&egrave;ges les plus simples (collets, fosses, etc.).</p>\n<p style=\"text-align: justify;\">Les Pr&eacute;dilections repr&eacute;sentent quant &agrave; elles les diff&eacute;rents milieux ou climats.</p>","niveau":0,"attribut1":"adr","attribut2":"cla","attribut3":"none","doublebonus":false,"predilections":[{"name":"Fleuve, Forêt, Hiver, Mer, Montagne, Souterrains, etc. (Adresse ou Clairvoyance)","used":false,"description":"En fonction de chaque milieu, la Prédilection permet dy évoluer de la façon la plus adaptée."}],"predilections[0]":["Nouvelle prédilection",""],"predilections[1]":["Nouvelle prédilection",""],"predilections[2]":["Nouvelle prédilection",""],"predilections[3]":["Nouvelle prédilection",""],"predilections[4]":["Nouvelle prédilection",""],"predilections[5]":["Nouvelle prédilection",""],"predilections[6]":["Nouvelle prédilection",""],"predilections[7]":["Nouvelle prédilection",""],"predilections[8]":["Nouvelle prédilection",""],"predilections[9]":["Nouvelle prédilection",""],"predilections[10]":["Nouvelle prédilection",""],"predilections[11]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.yI1zY5k8mAdx9wHK"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645647913,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"Vpth0atT9qS6VqUB"}
{"name":"Perception","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Perception repr&eacute;sente &agrave; la fois la conscience de son environnement, la capacit&eacute; &agrave; remarquer les d&eacute;tails incongrus, et l&rsquo;aptitude &agrave; lire le langage corporel. Plus cette Comp&eacute;tence est &eacute;lev&eacute;e, plus les sens du personnage sont aff&ucirc;t&eacute;s.</p>","niveau":0,"attribut1":"cla","attribut2":"none","attribut3":"none","doublebonus":false,"predilections":[{"name":"Empathie (Clairvoyance)","used":false,"description":"Pour déchiffrer, par son attitude ou ses gestes, lopinion ou la sincérité dun interlocuteur, pour deviner les choses exprimées à mots couverts, pour comprendre quelquun qui sexprime par signes."},{"name":"Recherche (Clairvoyance)","used":false,"description":"Pour remarquer les détails les plus infimes, pour trouver un objet ou un passage dissimulés."},{"name":"Vigilance (Clairvoyance) ","used":false,"description":"Pour détecter un personnage ou un animal qui se cache, pour remarquer une menace potentielle (piège, terrain dangereux, tireur embusqué), pour rester attentif lors dun tour de garde."}],"predilections[0]":["Nouvelle prédilection",""],"predilections[1]":["Nouvelle prédilection",""],"predilections[2]":["Nouvelle prédilection",""],"predilections[3]":["Nouvelle prédilection",""],"predilections[4]":["Nouvelle prédilection",""],"predilections[5]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.7p2MTjttE4fllp9e"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645646434,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"cunjmZoXNhSX5qdV"}
{"name":"Coercition","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Coercition repr&eacute;sente la capacit&eacute; de forcer quelqu&rsquo;un &agrave; agir contre son gr&eacute;, &agrave; r&eacute;v&eacute;ler des secrets ou &agrave; ob&eacute;ir aveugl&eacute;ment. Plus cette Comp&eacute;tence est &eacute;lev&eacute;e, plus le personnage sait se montrer intimidant et jouer sur l&rsquo;autorit&eacute; qu&rsquo;il inspire pour briser la volont&eacute; de ses interlocuteurs.</p>","niveau":0,"attribut1":"pre","attribut2":"none","attribut3":"none","doublebonus":false,"predilections":[{"name":"Commandement (Présence) ","used":false,"description":"Pour donner des ordres auxquels on obéira sans poser de question. "},{"name":"Interrogatoire (Présence)","used":false,"description":"Pour forcer quelqu'un à révéler des informations, que ce soit par la torture ou à l'aide de techniques de manipulation plus subtiles. "},{"name":"Intimidation (Présence)","used":false,"description":"Pour faire peur, pour convaincre quelqu'un de renoncer à se battre, pour donner l'impression d'être dangereux. "}]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.15IDGG6JoZnRCQtY"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620317429,"modifiedTime":1671645635525,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"lchi2ulzWdm8j1l7"}
{"name":"Nage","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Nage repr&eacute;sente la vitesse (Adresse), mais aussi l&rsquo;endurance du nageur (Puissance). La natation est une Comp&eacute;tence assez rare dans le monde de Hawkmoon. Un personnage qui n&rsquo;a plus pied et ne sait pas nager commence &agrave; se noyer au bout d&rsquo;un tour de jeu (soit six secondes). Reportez-vous &agrave; la r&egrave;gle de noyade p. 214.</p>\n<p style=\"text-align: justify;\">&nbsp;</p>\n<h3 style=\"text-align: justify;\"><strong>Pr&eacute;dilections/Ma&icirc;trises</strong></h3>\n<ul>\n<li style=\"text-align: justify;\"><strong>Au choix du joueur et du MJ.</strong></li>\n</ul>","niveau":0,"attribut1":"adr","attribut2":"pui","attribut3":"none","doublebonus":false,"predilections":[],"predilections[0]":["Nouvelle prédilection",""],"predilections[1]":["Nouvelle prédilection",""],"predilections[2]":["Nouvelle prédilection",""],"predilections[3]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.Dw7q0dGCoaBy1Smu"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645639961,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"pyeEZFo46NTnV8WK"}
{"name":"Mouvements","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Mouvements indique la capacit&eacute; du personnage &agrave; se d&eacute;placer rapidement et longtemps. Cette Comp&eacute;tence repr&eacute;sente aussi bien la souplesse et la vivacit&eacute; des gestes que l&rsquo;endurance physique et la r&eacute;sistance &agrave; l&rsquo;effort. Plus cette Comp&eacute;tence est &eacute;lev&eacute;e, plus le personnage est en forme et peut courir, grimper ou sauter longtemps et rapidement sans se fatiguer.</p>","niveau":0,"attribut1":"adr","attribut2":"pui","attribut3":"none","doublebonus":false,"predilections":[{"name":"Acrobaties (Adresse)","used":true,"description":"Pour faire des figures acrobatiques, sauter en hauteur ou en longueur, jongler, ou encore pour rattraper un objet fragile sans labîmer (ou un ustensile dangereux sans se blesser).\n\n"},{"name":"Course (Puissance)","used":false,"description":"Pour sprinter ou pour tenir la distance dans une course dendurance."},{"name":"Escalade (Puissance) ","used":false,"description":"Pour escalader murs, arbres, etc. Sert également à avancer en étant suspendu à une corde horizontale."}],"predilections[0]":["Nouvelle prédilection",""],"predilections[1]":["Nouvelle prédilection",""],"predilections[2]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.bP7pPSCekexUEf7m"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645642114,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"tFU5yISK6spdNWco"}

View File

@ -28,6 +28,7 @@
{"name":"Gourde de cuir","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"<p>1 litre</p>","prixpo":0,"prixca":0,"prixsc":5,"rarete":3,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.Bk7CwCfqllFJyRzo"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667052151738,"modifiedTime":1667056681209,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"BBHGx79XunHAqgLm"}
{"name":"Anneau en argent","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"","prixpo":0,"prixca":8,"prixsc":0,"rarete":7,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.euNUZvN2AaNQX5Eh"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667053448337,"modifiedTime":1667056840190,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"BDzR3nDpE58cpzMf"}
{"name":"Ceinture de cuir","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"","prixpo":0,"prixca":0,"prixsc":8,"rarete":3,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.zUMIT05ItRjqyXzx"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667050981153,"modifiedTime":1667056547008,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"BWpLFLDuRQTntKNW"}
{"name":"Sous de Cuivre","type":"monnaie","img":"systems/fvtt-hawkmoon-cyd/assets/icons/monnaie.webp","system":{"description":"","prixpo":0,"prixca":0,"prixsc":1,"rarete":0,"quantite":1,"equipped":false},"effects":[],"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Item.BuH79gmBwS61TNMs"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.3","coreVersion":"10.291","createdTime":1670105962535,"modifiedTime":1670108270030,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"CUHVKLJStGcH1pfV"}
{"name":"Écharpe de laine","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"","prixpo":0,"prixca":0,"prixsc":3,"rarete":2,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.gu8GIe9rTpa30y0L"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667051095332,"modifiedTime":1667056566818,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"D4FStoSsSD5t1pyR"}
{"name":"Antipoison","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"<p>Effets et notes :</p>\n<p>Conf&egrave;re un bonus de + 5 au test de Soins pour stopper les effets d&rsquo;un empoisonnement.</p>\n<p>&nbsp;</p>","prixpo":0,"prixca":20,"prixsc":0,"rarete":8,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.6JwVwbG95Jro0jyA"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667056200587,"modifiedTime":1667056884888,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"DEAaZnyqfZTSnj5l"}
{"name":"Peigne en ivoire sculpté","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"","prixpo":0,"prixca":100,"prixsc":0,"rarete":9,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.qO3PbRUDrBAsl9Eg"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667052473087,"modifiedTime":1667056725327,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"DWbXCgeKhtxBop5k"}
@ -97,6 +98,7 @@
{"name":"Tambourin","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"","prixpo":0,"prixca":2,"prixsc":0,"rarete":5,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.3w6hbSQaxhkKHeNK"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667053372874,"modifiedTime":1667056832786,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"gRXQlfeiJzEYGcRL"}
{"name":"Robe de bal","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"<p>Co&ucirc;t : 20 &agrave; 200 PA</p>","prixpo":0,"prixca":20,"prixsc":0,"rarete":8,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.oXhEGerIeFe5qWPe"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667051286585,"modifiedTime":1667056586658,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"gbG7p0z7UVXdfNSR"}
{"name":"Cor de chasse en corne","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"","prixpo":0,"prixca":2,"prixsc":0,"rarete":5,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.KEsLoT5TtwpUgb5g"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667053304777,"modifiedTime":1667056825041,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"hi1uIij2vnhblvyc"}
{"name":"Pièce d'Or","type":"monnaie","img":"systems/fvtt-hawkmoon-cyd/assets/icons/monnaie.webp","system":{"description":"","prixpo":0,"prixca":0,"prixsc":400,"rarete":0,"quantite":1,"equipped":false},"effects":[],"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Item.arqqVEV5qwgVh1qz"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.3","coreVersion":"10.291","createdTime":1670105962535,"modifiedTime":1670108267437,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"iDsF5gfusUp56ffF"}
{"name":"Sphère noire","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"","prixpo":0,"prixca":30,"prixsc":0,"rarete":9,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.wgZufKzZs1mv6U7m"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667053281244,"modifiedTime":1667056823317,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"iTgpQBOfOLKOOIpx"}
{"name":"Lampe à huile","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"<p>dur&eacute;e huit heures</p>","prixpo":0,"prixca":0,"prixsc":15,"rarete":3,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.52qKfCHjAXnPd42R"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667050221162,"modifiedTime":1667056522865,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"k549mRHCTM5qvoAq"}
{"name":"Parfum dItalia","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"","prixpo":1,"prixca":0,"prixsc":0,"rarete":8,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.nQpYaf3lVGlHWZDd"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667053201541,"modifiedTime":1667056816027,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"kimJnMkFr6mx2GR2"}
@ -110,6 +112,7 @@
{"name":"Miroir","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"","prixpo":0,"prixca":1,"prixsc":0,"rarete":5,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.w2y1ZIQwrq16pyro"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667052391234,"modifiedTime":1667056715568,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"oF4ctqBDkAw6gNkd"}
{"name":"Nuit en dortoir sur une paillasse sale","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"","prixpo":0,"prixca":0,"prixsc":3,"rarete":2,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.4GmLW6TqSQaDktX6"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667049989473,"modifiedTime":1667056509383,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"oOuBI5T6XB91aHCE"}
{"name":"Pourpoint de cuir","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"","prixpo":0,"prixca":3,"prixsc":0,"rarete":5,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.WzLzKVbZzw68cXko"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667051273146,"modifiedTime":1667056584869,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"oRg2ar1k6VMZpy77"}
{"name":"Pièce d'Argent","type":"monnaie","img":"systems/fvtt-hawkmoon-cyd/assets/icons/monnaie.webp","system":{"description":"","prixpo":0,"prixca":0,"prixsc":20,"rarete":0,"quantite":1,"equipped":false},"effects":[],"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Item.I6sMdUOBJV7DuOB2"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.3","coreVersion":"10.291","createdTime":1670105962535,"modifiedTime":1670108264731,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"pHLxatpIeOjQ4SY9"}
{"name":"Couverts en argent","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"<p>un couteau, une fourchette, une cuiller</p>","prixpo":0,"prixca":30,"prixsc":0,"rarete":9,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.QszRAgf7F0ZSbN6z"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667051873930,"modifiedTime":1667056657906,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"pJAfqX7SieQmRGDF"}
{"name":"Cataplasme miraculeux","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"<p>cr&egrave;me de nanocompo\u0002sites r&eacute;g&eacute;n&eacute;rants &ndash; cr&eacute;ation technologique</p>\n<p><strong>Effets et notes :</strong><br>Permet de d&eacute;fausser jusqu&rsquo;&agrave; 2 Adversit&eacute;s noires apr&egrave;s (10 &ndash; Trempe) x 10 minutes.</p>","prixpo":0,"prixca":100,"prixsc":0,"rarete":10,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.6fA5jRN6HAXN3sLM"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667055976728,"modifiedTime":1667056878533,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"q6gtm9fNDyIWJ90X"}
{"name":"Nuit sur le plancher de la salle commune ou à létable","type":"equipement","img":"systems/fvtt-hawkmoon-cyd/assets/icons/equipement.webp","system":{"description":"","prixpo":0,"prixca":0,"prixsc":1,"rarete":1,"equipped":false},"effects":[],"flags":{"core":{"sourceId":"Item.V0lq8ve5orlZBG3G"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.7","coreVersion":"10.286","createdTime":1667049973754,"modifiedTime":1667056508034,"lastModifiedBy":"aU5ncDYkHS7NmLl4"},"folder":null,"sort":0,"ownership":{"default":0,"aU5ncDYkHS7NmLl4":3},"_id":"q8jVTrkQM9EDa6E1"}

View File

@ -74,7 +74,6 @@
{"name":"Rumeur du monde","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Toujours au fait des rumeurs les plus diverses, vous avez probablement entendu parler de tel homme en vue ou de telle affaire en cours. Quand vous d&eacute;pensez 2 points de Bonne Aventure pour un test de Savoir : Europe, le bonus est de + 10.</p>","isautomated":true,"automations":[{"eventtype":"prepare-roll","name":"Automatisation 1","competence":"Savoir : Europe","minLevel":0,"id":"qP2b05qqq1LPsPfS","bonus":"10","baCost":"0"}],"talenttype":"personnage","utilisation":"permanent","prerequis":"","resumebonus":"Quand vous dépensez 2 points de Bonne Aventure pour un test de Savoir : Europe, le bonus est de + 10.","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.6vVfteW1VMQO7FEU"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666907153831,"modifiedTime":1668941455539,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"NMogAhUITTgOJ3fO","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Chemin le plus sûr","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Votre exp&eacute;rience et votre flair vous aident &agrave; prendre les bonnes d&eacute;cisions quand vous voyagez. Lorsque vous d&eacute;pensez 2 points de Bonne Aventure pour un test de Routes (Commerce), le bonus est de + 10.&nbsp;</p>","isautomated":true,"automations":[{"eventtype":"prepare-roll","name":"Automatisation 1","competence":"Routes","minLevel":0,"id":"ho5pyZmo1Np1KwkV","bonus":"10","baCost":"2"}],"talenttype":"personnage","utilisation":"permanent","prerequis":"","resumebonus":"Lorsque vous dépensez 2 points de Bonne Aventure pour un test de Routes (Commerce), le bonus est de + 10. ","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.ahxYvtVMa0wn9lvd"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666898124086,"modifiedTime":1668941455518,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"NqPn79uFDSspYbW1","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Avec les tripes","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vous pouvez utiliser votre Trempe plut&ocirc;t que l&rsquo;Attribut habituellement associ&eacute; &agrave; la Comp&eacute;tence, par exemple en M&ecirc;l&eacute;e. Vous devez expliquer comment vous sollicitez votre Trempe dans ce contexte particulier.&nbsp;</p>","isautomated":true,"automations":[{"eventtype":"on-drop","name":"Automatisation 1","script":"actor.checkAttribut(\"Trempe\", 6)","id":"QPfzcI6nHXfbBO1d","competence":"Trempe","minLevel":"6"}],"talenttype":"personnage","utilisation":"sceance","prerequis":"Trempe 6","resumebonus":"Vous pouvez utiliser votre Trempe plutôt que lAttribut habituellement associé à la Compétence","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.QowafGt1zBKr96sb"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666815309617,"modifiedTime":1668941455516,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"NxeONiYARHdzhdoX","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Dur(e) au mal","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vous &ecirc;tes devenu(e) particuli&egrave;rement robuste. Votre Vigueur est augment&eacute;e d&rsquo;1 point.</p>","isautomated":false,"automations":[],"talenttype":"personnage","utilisation":"permanent","prerequis":"","resumebonus":"","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.xsapWqPy734d1z7K"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666901026461,"modifiedTime":1668941455521,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"PCW6YLO6IFSU28tt","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Ingéniosité","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vous pouvez utiliser votre Clairvoyance plut&ocirc;t que l&rsquo;Attribut habituellement associ&eacute; &agrave; la Comp&eacute;tence. Vous devez expliquer comment vous sollicitez votre Clairvoyance dans ce contexte particulier.</p>","isautomated":false,"automations":[],"talenttype":"personnage","utilisation":"sceance","prerequis":"","resumebonus":"","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.aNHKGIdMrDIYY0eq"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666903896953,"modifiedTime":1668941455529,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"PLk6bMyj7in5GBX0","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Faussaire-né(e)","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vous avez des facilit&eacute;s dans l&rsquo;art de produire des faux documents. Quand vous d&eacute;pensez 2 points de Bonne Aventure pour un test de Savoir : Falsification, le bonus est de + 10.</p>","isautomated":true,"automations":[{"eventtype":"prepare-roll","name":"Automatisation 1","competence":"Savoir : Falsification","minLevel":0,"id":"BHx9xNjbS1Bp3VRF","bonus":"10","baCost":"2"}],"talenttype":"personnage","utilisation":"permanent","prerequis":"","resumebonus":"Quand vous dépensez 2 points de Bonne Aventure pour un test de Savoir : Falsification, le bonus est de + 10.","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.7ibsPEkOYJqO4PZl"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666901958786,"modifiedTime":1668941455523,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"PVJX9BXGwaUMfPWD","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Captivant(e)","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vous &ecirc;tes tr&egrave;s dou&eacute;(e) pour la vulgarisation. Vous parlez avec passion des domaines qui vous int&eacute;ressent et l&rsquo;on vous &eacute;coute le plus souvent avec int&eacute;r&ecirc;t. Si vous r&eacute;ussissez un test de Pr&eacute;sence<br>+ un Savoir au choix, votre cours improvis&eacute; captive jusqu&rsquo;&agrave; 1d5 individus qui en sont les auditeurs. Le MJ ajustera le SD en fonction du public : 15 pour un jeune esprit avide de connaissances,<br>18 pour une aubergiste pas sp&eacute;cialement bien dispos&eacute;e &agrave; votre &eacute;gard, 30 pour un religieux obscurantiste. Consid&eacute;rez que cette r&eacute;ussite &eacute;quivaut &agrave; l&rsquo;effet que vous obtiendriez si vous aviez<br>r&eacute;ussi un test de Persuasion de SD 20. Pour obtenir une faveur &eacute;quivalente &agrave; un SD plus &eacute;lev&eacute;, ce Talent ne peut pas &ecirc;tre mobilis&eacute;. Ce ne sera donc sans doute pas suffisant pour mettre fin &agrave; votre captivit&eacute;, mais peut-&ecirc;tre cela vous &eacute;vitera-t-il une ex&eacute;cution imm&eacute;diate&hellip;&nbsp;</p>","isautomated":false,"automations":[],"talenttype":"personnage","utilisation":"sceance","prerequis":"","resumebonus":"Test de Présence + un Savoir au choix, votre cours improvisé captive jusquà 1d5 individus ","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.Ziu2DbjI5tnNJ1Aw"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666897627590,"modifiedTime":1668941455517,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"PdtVqObUozdhQdKQ","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
@ -117,6 +116,7 @@
{"name":"Galimatias","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vous savez parler dans une langue obscure, pleine de termes compliqu&eacute;s qui embrouillent l&rsquo;esprit de votre interlocuteur. Quand vous d&eacute;pensez 2 points de Bonne Aventure pour un test de Baratin (Persuasion), le bonus est de + 10.</p>\n<p>Note : le MJ devrait inviter le personnage &agrave; improviser ce propos alambiqu&eacute; &agrave; la table de jeu.</p>","isautomated":true,"automations":[{"eventtype":"prepare-roll","name":"Automatisation 1","competence":"Persuasion","minLevel":0,"id":"pZQhEkinrofGRTpv","bonus":"10","baCost":"2"}],"talenttype":"personnage","utilisation":"permanent","prerequis":"","resumebonus":"Quand vous dépensez 2 points de Bonne Aventure pour un test de Baratin (Persuasion), le bonus est de + 10.","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.R1w5NF07iKgpqI1P"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666902747212,"modifiedTime":1668941455526,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"bFFT84gkgybEpj41","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Trompe-loeil","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Si vous d&eacute;pensez 1 point de Bonne Aventure, l&rsquo;objet que vous produisez gr&acirc;ce &agrave; l&rsquo;art que vous poss&eacute;dez au niveau 9 (sculpture ou peinture) est si parfaitement ex&eacute;cut&eacute; qu&rsquo;il ressemble &agrave; s&rsquo;y m&eacute;prendre &agrave; son mod&egrave;le r&eacute;el. Il faut r&eacute;ussir un test de Clairvoyance + Persuasion / 25 pour remarquer l&rsquo;illusion.&nbsp;</p>","isautomated":true,"automations":[{"eventtype":"on-drop","name":"Automatisation 1","competence":"Savoir : Peinture & Sculpture","minLevel":"9","id":"ihQKyJa787nitQsq"}],"talenttype":"personnage","utilisation":"sceance","prerequis":"Savoir : Peinture & Sculpture au niveau 9.","resumebonus":"Si vous dépensez 1 point de Bonne Aventure, lobjet que vous produisez grâce à lart que vous possédez au niveau 9 (sculpture ou peinture) est si parfaitement exécuté quil ressemble à sy méprendre à son modèle réel","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.SEvYDrbtczrZhS0k"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666941447428,"modifiedTime":1668941455541,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"bWVfw78hUa5uibnt","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Passe-partout","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Les serrures n&rsquo;ont presque plus de secret pour vous. Lorsque vous faites un test de Filouterie afin de crocheter une porte, vous b&eacute;n&eacute;ficiez d&rsquo;un + 3.</p>","isautomated":true,"automations":[{"eventtype":"on-drop","name":"Automatisation 1","competence":"Filouterie","minLevel":"6","id":"cfOF8CS031BkS0Cp"},{"eventtype":"prepare-roll","name":"Automatisation 1","competence":"Filouterie","minLevel":0,"id":"SHg4jPvigVo7PHiX","bonus":"3","baCost":"0"}],"talenttype":"personnage","utilisation":"permanent","prerequis":"Filouterie 6.","resumebonus":"Lorsque vous faites un test de Filouterie afin de crocheter une porte, vous bénéficiez dun + 3.","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.TjDQlpT0asXGBwfU"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666905900995,"modifiedTime":1668941455534,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"bgJ2lEngn7UZMplj","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Parade","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vous avez d&eacute;velopp&eacute;, en combat, l&rsquo;art de parer les coups. Votre Seuil de D&eacute;fense est augment&eacute; d&rsquo;un point.&nbsp;</p>","isautomated":true,"automations":[{"eventtype":"on-drop","name":"Automatisation 1","competence":"Mêlée","minLevel":"6","id":"IkwLfxWGCGEVbuik"},{"eventtype":"bonus-permanent","name":"Automatisation 1","competence":"","minLevel":0,"id":"sPi6NiM5wUIkrajE","bonusname":"bonus-defensif","bonus":"1"}],"talenttype":"personnage","utilisation":"permanent","prerequis":"Mêlée 6.","resumebonus":"Vous avez développé, en combat, lart de parer les coups. Votre Seuil de Défense est augmenté dun point. ","used":false},"effects":[],"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Item.LFMsAxdir7MiMBjQ"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.0","coreVersion":"10.290","createdTime":1666905763861,"modifiedTime":1669715660873,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"cAxpTU6FBb5UItLs"}
{"name":"Coup dévastateur","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vos coups peuvent &ecirc;tre surpuissants. Vous ajoutez votre niveau de Puissance / 2 (arrondi &agrave; l&rsquo;inf&eacute;rieur) aux d&eacute;g&acirc;ts inflig&eacute;s en m&ecirc;l&eacute;e.</p>","isautomated":true,"automations":[{"eventtype":"on-drop","name":"Automatisation 1","competence":"Mêlée","minLevel":"6","id":"7HSfr8L3CDZzwXrq"}],"talenttype":"personnage","utilisation":"sceance","prerequis":"Mêlée 6.","resumebonus":"Vous ajoutez votre niveau de Puissance / 2 (arrondi à linférieur) aux dégâts infligés en mêlée.","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.6aa76XCuV2czNM7H"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666899784026,"modifiedTime":1668941455520,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"cQLCQafJydtoxmwy","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Massue","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vous avez pris le coup de main, dirait-on. Lorsqu&rsquo;un test de Filouterie est effectu&eacute; dans le but d&rsquo;assommer quelqu&rsquo;un, vous b&eacute;n&eacute;ficiez d&rsquo;un + 3.&nbsp;</p>","isautomated":true,"automations":[{"eventtype":"on-drop","name":"Automatisation 1","competence":"Filouterie","minLevel":"5","id":"7BFwnvtOYV2cqtiO"},{"eventtype":"prepare-roll","name":"Automatisation 1","competence":"Filouterie","minLevel":0,"id":"VB3gPB0OuRupmm11","bonus":"3","baCost":"0"}],"talenttype":"personnage","utilisation":"permanent","prerequis":"Filouterie 5.","resumebonus":"Lorsquun test de Filouterie est effectué dans le but dassommer quelquun, vous bénéficiez dun + 3. ","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.aN0WyT6NLBbXCysb"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666905173546,"modifiedTime":1668941455532,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"cTRoeHjWPLC2byRM","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Rudiments sorciers","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vos connaissances et votre capacit&eacute; de r&eacute;flexion vous permettent d&rsquo;embrasser plus facilement la sorcellerie. Bifurquer vers ce Profil (voir p. 148) ne vous co&ucirc;te aucun point d&rsquo;Exp&eacute;rience.&nbsp;</p>","isautomated":false,"automations":[],"talenttype":"personnage","utilisation":"permanent","prerequis":"","resumebonus":"","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.lrb4kanVjR4KILIQ"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666907129143,"modifiedTime":1668941455538,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"d7CNKeK4SvjFACmu","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
@ -151,7 +151,7 @@
{"name":"Dans chaque port","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>M&ecirc;me chose qu&rsquo;@UUID[Compendium.fvtt-hawkmoon-cyd.talents.UOEolcYPAMHV9jNK]{ALLI&Eacute;S DE POIDS} (voir p. 167), mais les Alli&eacute;s sont de niveau 1 et la zone dans laquelle ils se trouvent poss&egrave;de obligatoirement un port ou un littoral.&nbsp;</p>","isautomated":false,"automations":[],"talenttype":"personnage","utilisation":"scenario","prerequis":"","resumebonus":"Personnes qui se comporteront avec vous comme des Alliés de niveau 1. Chacun de ces Alliés ne vous aidera quune seule fois.","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.f5aGzDoWY9t0P1v9"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666900264043,"modifiedTime":1668941455520,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"kwVjT9LvsEpMGIjs","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Sous la main","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vous avez l&rsquo;habitude de vous battre avec ce qui vous tombe sous la main. Les armes improvis&eacute;es ne causent la perte que d&rsquo;un seul niveau de Combativit&eacute; en cas de r&eacute;ussite simple ? Pas quand vous les maniez. En cas de r&eacute;ussite simple, vous lancez un d10, comme s&rsquo;il s&rsquo;agissait d&rsquo;une arme normale.</p>","isautomated":false,"automations":[],"talenttype":"personnage","utilisation":"permanent","prerequis":"","resumebonus":"","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.q2Hdd1MtM10Lt3AO"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666907955009,"modifiedTime":1668941455540,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"m1YHV1M2sFZQfJ56","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Savoir druidique","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vous comprenez le chant du monde comme une langue maternelle. Quand vous d&eacute;pensez 2 points de Bonne Aventure, le bonus &agrave; votre test de Savoir : Monde naturel est de + 10.&nbsp;</p>","isautomated":true,"automations":[{"eventtype":"prepare-roll","name":"Automatisation 1","competence":"Savoir : Monde naturel","minLevel":0,"id":"0IIzKJ7OWluoLHDe","bonus":"10","baCost":"2"}],"talenttype":"personnage","utilisation":"permanent","prerequis":"","resumebonus":"Quand vous dépensez 2 points de Bonne Aventure, le bonus à votre test de Savoir : Monde naturel est de + 10. ","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.Z6IVtLn2g1NTuoZk"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666907507886,"modifiedTime":1668941455539,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"mChIOEmLkQriVxkR","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Parade","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vous avez d&eacute;velopp&eacute;, en combat, l&rsquo;art de parer les coups. Votre Seuil de D&eacute;fense est augment&eacute; d&rsquo;un point.&nbsp;</p>","isautomated":true,"automations":[{"eventtype":"on-drop","name":"Automatisation 1","competence":"Mêlée","minLevel":"6","id":"IkwLfxWGCGEVbuik"}],"talenttype":"personnage","utilisation":"permanent","prerequis":"Mêlée 6.","resumebonus":"Vous avez développé, en combat, lart de parer les coups. Votre Seuil de Défense est augmenté dun point. ","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.LFMsAxdir7MiMBjQ"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666905763861,"modifiedTime":1668941455533,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"mN54PDKiYBk4mXbR","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Dur(e) au mal","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vous &ecirc;tes devenu(e) particuli&egrave;rement robuste. Votre Vigueur est augment&eacute;e d&rsquo;1 point.</p>","isautomated":true,"automations":[{"eventtype":"bonus-permanent","name":"Automatisation 1","competence":"","minLevel":0,"id":"hJSJxfOlzpVNBLs5","bonus":"1","bonusname":"vigueur"}],"talenttype":"personnage","utilisation":"permanent","prerequis":"","resumebonus":"","used":false},"effects":[],"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Item.xsapWqPy734d1z7K"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.0","coreVersion":"10.290","createdTime":1666901026461,"modifiedTime":1669715645981,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"mSueeCXldbJfgJG4"}
{"name":"Tout-terrain","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vous avez l&rsquo;habitude d&rsquo;&eacute;voluer sur des terrains difficiles. Lorsque vous vous d&eacute;placez, le modificateur de difficult&eacute; li&eacute; au terrain est ignor&eacute; ou amoindri. Le SD que vous devez atteindre pour un test donn&eacute; est en cons&eacute;quence diminu&eacute; de deux ou trois niveaux, &agrave; la discr&eacute;tion du MJ.&nbsp;</p>","isautomated":false,"automations":[],"talenttype":"personnage","utilisation":"permanent","prerequis":"","resumebonus":"","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.cir8bwIl5fQ6EjKl"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666941298020,"modifiedTime":1668941455541,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"mZGH7DQuNP6c5GcE","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Coûts maîtrisés","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vous &ecirc;tes en mesure de diviser par deux le co&ucirc;t de fabrication de tous les artefacts technologiques que vous cr&eacute;ez.</p>","isautomated":true,"automations":[{"eventtype":"on-drop","name":"Automatisation 1","competence":"Savoir : Sorcellerie","minLevel":"6","id":"Br7QaKQsWXdkUOuu"}],"talenttype":"personnage","utilisation":"permanent","prerequis":"Savoir : Sorcellerie 6.","resumebonus":"Vous êtes en mesure de diviser par deux le coût de fabrication de tous les artefacts technologiques que vous créez.","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.TWBovBcpp4fd2lk1"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666899840277,"modifiedTime":1668941455520,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"mZzzd66l7wyZBgZu","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}
{"name":"Encaissement","type":"talent","img":"systems/fvtt-hawkmoon-cyd/assets/icons/talent.webp","system":{"description":"<p>Vous avez appris &agrave; souffrir et &agrave; surmonter la douleur. Quand votre &eacute;tat atteint le niveau Affaibli, ignorez les deux Adversit&eacute;s qui vous sont inflig&eacute;es jusqu&rsquo;&agrave; la fin de la sc&egrave;ne. Une fois le combat ou la sc&egrave;ne achev&eacute;(e), prenez normalement en compte ces deux Adversit&eacute;s.&nbsp;</p>","isautomated":false,"automations":[],"talenttype":"personnage","utilisation":"permanent","prerequis":"","resumebonus":"","used":false},"effects":[],"flags":{"core":{"sourceId":"Item.paT3LilYY44t8Jxz"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.0.18","coreVersion":"10.290","createdTime":1666901415829,"modifiedTime":1668941455522,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"_id":"mkHqOHLGKEU0zeMi","folder":null,"sort":0,"ownership":{"default":0,"wYQCdPQVeRKBJmZI":3}}

View File

@ -634,6 +634,7 @@ ul, li {
}
.roll-dialog-label {
margin: 4px 0;
padding-top: 7px;
}
.short-label {
@ -789,6 +790,7 @@ ul, li {
width: fit-content;
height: fit-content;
min-width: 6rem;
min-height: 1.2rem;
flex-basis: auto;
padding: 0;
line-height: 1rem;
@ -895,6 +897,22 @@ ul, li {
border: 0px;
}
.hud-adversite-container {
position: relative;
text-align: center;
color: white;
width: 64px;
min-height: 64px;
}
.hud-adversite-text {
font-weight: bold;
font-size:0.9rem;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -85%);
}
.actor-icon {
float: left;
width: 48px;
@ -1190,13 +1208,11 @@ ul, li {
text-decoration: none;
text-shadow: 0px 1px 0px #4d3534;
position: relative;
max-height:1.8rem;
margin-left:4px;
max-height:1.7rem;
flex-grow:1;
max-width: 4rem;
min-width: 4rem;
max-width: 3.5rem;
min-width: 3.5rem;
}
.button-sheet-roll:hover {
background: linear-gradient(to bottom, #800000 5%, #3e0101 100%);
background-color: rgb(56, 33, 33);
@ -1206,6 +1222,21 @@ ul, li {
top:1px;
}
.defense-sheet {
border-radius: 4px;
text-align: center;
display: inline-block;
font-size: 0.8rem;
padding: 1px 1px 0px 1px;
text-decoration: none;
position: relative;
max-height:1.7rem;
margin-left:4px;
flex-grow:1;
max-width: 3.5rem;
min-width: 3.5rem;
}
.plus-minus-button {
box-shadow: inset 0px 1px 0px 0px #a6827e;
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
@ -1297,13 +1328,10 @@ ul, li {
/*************************************************************/
.arme-defensif {
padding-top: 7px;
padding-left: 4px;
margin-left: 4px;
text-align: center;
flex-grow: 2;
}
/*************************************************************/
.item-name-img {
flex-grow:1;
@ -1418,4 +1446,7 @@ ul, li {
}
.adversite-modify {
margin-top: 12px;
}
.argent-total-text {
margin-left: 4px;
}

View File

@ -1,7 +1,7 @@
{
"id": "fvtt-hawkmoon-cyd",
"description": "Hawmoon RPG for FoundryVTT (CYD system - French)",
"version": "10.0.19",
"description": "Hawkmoon RPG for FoundryVTT (CYD system - French)",
"version": "10.1.12",
"authors": [
{
"name": "Uberwald/LeRatierBretonnien",
@ -35,7 +35,15 @@
"gridUnits": "m",
"license": "LICENSE.txt",
"manifest": "https://www.uberwald.me/gitea/public/fvtt-hawkmoon-cyd/raw/branch/master/system.json",
"download": "https://www.uberwald.me/gitea/public/fvtt-hawkmoon-cyd/archive/fvtt-hawkmoon-cyd-10.0.19.zip",
"download": "https://www.uberwald.me/gitea/public/fvtt-hawkmoon-cyd/archive/fvtt-hawkmoon-cyd-10.1.12.zip",
"languages": [
{
"lang": "fr",
"name": "French",
"path": "lang/fr.json",
"flags": {}
}
],
"packs": [
{
"type": "Item",
@ -46,6 +54,15 @@
"private": false,
"flags": {}
},
{
"type": "Item",
"label": "Compétences de Créatures",
"name": "skills-creatures",
"path": "packs/competences-creatures.db",
"system": "fvtt-hawkmoon-cyd",
"private": false,
"flags": {}
},
{
"type": "Item",
"label": "Historiques",
@ -117,6 +134,15 @@
"system": "fvtt-hawkmoon-cyd",
"private": false,
"flags": {}
},
{
"type": "JournalEntry",
"label": "Aides de Jeu",
"name": "aides-de-jeu",
"path": "packs/aides-de-jeu.db",
"system": "fvtt-hawkmoon-cyd",
"private": false,
"flags": {}
}
],
"primaryTokenAttribute": "sante.vigueur",
@ -130,7 +156,6 @@
"background": "systems/fvtt-hawkmoon-cyd/assets/ui/fond_hawkmoon.webp",
"compatibility": {
"minimum": "10",
"verified": "10",
"maximum": "10"
"verified": "10"
}
}

View File

@ -19,7 +19,8 @@
"habitat": "",
"notes": "",
"statut": "",
"gmnotes": ""
"gmnotes": "",
"statutresistant": "commun"
}
},
"core": {
@ -82,6 +83,7 @@
"initbonus": 0,
"vitessebonus": 0,
"bonusdegats": 0,
"attaquebonus": 0,
"defensebonus": 0
}
},
@ -123,6 +125,7 @@
"prixca": 0,
"prixsc": 0,
"rarete": 0,
"quantite": 0,
"equipped": false
},
"automation": {

View File

@ -233,7 +233,7 @@
<ul class="item-list alternate-list">
<li class="item flexrow">
<button class="chat-card-button roll-initiative">Initiative</button>
<button class="chat-card-button roll-initiative">Initiative (actuelle : {{initiative}} )</button>
</li>
</ul>
@ -275,11 +275,11 @@
{{#if arme.system.isdefense}}
<span class="item-field-label-short arme-defensif item-field-label-short"><label
class="arme-defensif item-field-label-short">{{arme.system.totalDefensif}}</label></span>
class="arme-defensif item-field-label-short defense-sheet">{{arme.system.totalDefensif}}</label></span>
{{else}}
<span class="item-field-label-short arme-defensif"><label
class="item-field-label-short arme-defensif">-</label></span>
{{/if}}
<span class="item-field-label-short arme-defensif item-field-label-short"><label
class="arme-defensif item-field-label-short defense-sheet">N/A</label></span>
{{/if}}
<span class="item-field-label-short">
{{#if arme.system.equipped}}
@ -312,7 +312,7 @@
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="arme" title="Ajouter une arme"><i
<a class="item-control item-add" data-type="protection" title="Ajouter une arme"><i
class="fas fa-plus"></i></a>
</div>
</li>
@ -340,6 +340,58 @@
<div class="tab equipement" data-group="primary" data-tab="equipement">
<div class="flexcol">
<hr>
<div class="sheet-box color-bg-archetype">
<h4>
<label class="argent-total-text">
Argent Total : {{richesse.po}} PO - {{richesse.pa}} PA - {{richesse.sc}} SC (total {{richesse.valueSC}} SC)
</label>
</h4>
</div>
<div class="sheet-box color-bg-archetype">
<ul class="item-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header">
<h3><label class="items-title-text">Richesses et Argent</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Quantité</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="monnaie" title="Ajouter une monnaie"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each monnaies as |monnaie key|}}
<li class="item flexrow " data-item-id="{{monnaie._id}}" data-item-type="monnaie">
<img class="item-name-img" src="{{monnaie.img}}" />
<span class="item-name-label competence-name">{{monnaie.name}}</span>
<span class="item-name-label competence-name item-field-label-medium">{{monnaie.system.quantite}}
<a class="quantity-modify plus-minus-button" data-quantite-value="-1">-</a>
<a class="quantity-modify plus-minus-button" data-quantite-value="+1">+</a>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
<hr>
<div class="sheet-box color-bg-archetype">
<h4>
<label class="argent-total-text">
Valeur Total Equipement : {{valeurEquipement.po}} PO - {{valeurEquipement.pa}} PA - {{valeurEquipement.sc}} SC (total {{valeurEquipement.valueSC}} SC)
</label>
</h4>
</div>
<div class="sheet-box color-bg-archetype">
<ul class="item-list alternate-list">
@ -347,9 +399,14 @@
<span class="item-name-label-header">
<h3><label class="items-title-text">Equipements</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Quantité</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="arme" title="Ajouter une arme"><i
<a class="item-control item-add" data-type="equipement" title="Ajouter un équipement"><i
class="fas fa-plus"></i></a>
</div>
</li>
@ -357,6 +414,45 @@
<li class="item flexrow " data-item-id="{{equipement._id}}" data-item-type="equipement">
<img class="item-name-img" src="{{equipement.img}}" />
<span class="item-name-label competence-name">{{equipement.name}}</span>
<span class="item-name-label competence-name item-field-label-medium">{{equipement.system.quantite}}
<a class="quantity-modify plus-minus-button" data-quantite-value="-1">-</a>
<a class="quantity-modify plus-minus-button" data-quantite-value="+1">+</a>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
<div class="sheet-box color-bg-archetype">
<ul class="item-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header">
<h3><label class="items-title-text">Artefacts</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Quantité</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="artefact" title="Ajouter un artefact"><i
class="fas fa-plus"></i></a>
</div>
</li>
{{#each artefacts as |artefact key|}}
<li class="item flexrow " data-item-id="{{artefact._id}}" data-item-type="artefact">
<img class="item-name-img" src="{{artefact.img}}" />
<span class="item-name-label competence-name">{{artefact.name}}</span>
<span class="item-name-label competence-name item-field-label-medium">{{artefact.system.quantite}}
<a class="quantity-modify plus-minus-button" data-quantite-value="-1">-</a>
<a class="quantity-modify plus-minus-button" data-quantite-value="+1">+</a>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
@ -377,6 +473,7 @@
<div>
<ul class="item-list alternate-list">
{{#each historiques as |historique key|}}
<li class="item flexrow" data-item-id="{{historique._id}}">
<label class="generic-label">Historique : </label>
<label class="generic-label">{{historique.name}}</label>
@ -386,6 +483,7 @@
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
{{#each profils as |profil key|}}
<li class="item flexrow" data-item-id="{{profil._id}}">
<label class="generic-label">Profil : </label>
@ -404,6 +502,17 @@
<div class="grid grid-3col">
<div>
<ul>
<li class="flexrow item">
<label class="generic-label">Statut de résistant</label>
<select class="status-small-label color-class-common item-field-label-long" type="text"
name="system.biodata.statutresistant" value="{{system.biodata.statutresistant}}" data-dtype="String">
{{#select system.biodata.statutresistant}}
<option value="commun">Commun</option>
<option value="clandestin">Clandestin</option>
<option value="insurge">Insurgé</option>
{{/select}}
</select>
</li>
<li class="flexrow item">
<label class="generic-label">Sexe</label>
<input type="text" class="" name="system.biodata.sex" value="{{system.biodata.sex}}"

View File

@ -22,7 +22,7 @@
<li>Dégats : {{finalResult}}</li>
{{#if targetVigueur}}
<li>Vigueur de la cible : {{targetVigueur}}</li>
<li>Etats de Combativité perdus : {{nbEtatPerdus}}</li>
<li>Etats Combativité supplémentaires perdus (manuel): {{nbEtatPerdus}} </li>
{{/if}}
</ul>
</div>

View File

@ -64,7 +64,7 @@
{{#if isSuccess}}
{{#if arme}}
<li>Votre adversaire perd 1 Etat de Combativité </li>
<li>Votre adversaire perd 1 Etat de Combativité (manuel) </li>
{{#if (not arme.system.onlevelonly)}}
<button class="chat-card-button roll-chat-degat">Dégats de l'arme</button>
{{/if}}

View File

@ -49,7 +49,7 @@
<select class="status-small-label color-class-common edit-item-data competence-niveau" type="text"
name="system.attributs.{{key}}.value" value="{{attr.value}}" data-dtype="Number">
{{#select attr.value}}
{{> systems/fvtt-hawkmoon-cyd/templates/partial-list-niveau.html}}
{{> systems/fvtt-hawkmoon-cyd/templates/partial-list-niveau-creature.html}}
{{/select}}
</select>
</li>
@ -65,7 +65,7 @@
<ul class="item-list alternate-list">
<li class="item flexrow">
<label class="label-name item-field-label-short">Vigueur</label>
<label class="label-name item-field-label-short">{{system.sante.vigueur}}</label>
<input type="text" class="padd-right numeric-input item-field-label-short" data-dtype="Number" name="system.sante.vigueur" value="{{system.sante.vigueur}}" >
</li>
<li class="item flexrow">
<label class="label-name item-field-label-short">Etat</label>
@ -104,14 +104,6 @@
{{/each}}
</ul>
<h4 class="item-name-label competence-name">Vitesse</h4>
<ul class="item-list alternate-list">
<li class="item flexrow" data-adversite="{{key}}">
<input type="text" class="padd-right numeric-input item-field-label-short" name="system.vitesse.value"
value="{{system.vitesse.value}}" data-dtype="Number" />
</li>
</ul>
</div>
@ -277,10 +269,11 @@
</span>
{{#if arme.system.isdefense}}
<span class="item-field-label-short arme-defensif item-field-label-short"><label
class="arme-defensif item-field-label-short">{{arme.system.totalDefensif}}</label></span>
<span class="item-field-label-short arme-defensif item-field-label-short"><label
class="arme-defensif item-field-label-short defense-sheet">{{arme.system.totalDefensif}}</label></span>
{{else}}
<span class="item-field-label-short arme-defensif"><label class="item-field-label-short arme-defensif">-</label></span>
<span class="item-field-label-short arme-defensif item-field-label-short"><label
class="arme-defensif item-field-label-short defense-sheet">N/A</label></span>
{{/if}}
<span class="item-field-label-short">
@ -314,7 +307,7 @@
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="arme" title="Ajouter une arme"><i
<a class="item-control item-add" data-type="protection" title="Ajouter une arme"><i
class="fas fa-plus"></i></a>
</div>
</li>

View File

@ -0,0 +1,48 @@
<div class="control-icon hawkmoon-adversite ">
<img class="hawkmoon-hud-togglebutton" src="icons/svg/sword.svg" width="36" height="36" title="Action" />
<div class="hawkmoon-hud-list tokenhudext right">
<div class="flexrow tokenhudicon">
<div class="hawkmoon-hud-adversite hud-adversite-container" data-action-value="-1"
data-action-index="bleue" title="Adversite Bleue">
<img class="icon-adversite" src="systems/fvtt-hawkmoon-cyd/assets/icons/gemme_bleue.webp">
<div class="hud-adversite-text">&nbsp;-1</div>
</div>
<div class="hawkmoon-hud-adversite hud-adversite-container" data-action-value="+1"
data-action-index="bleue" title="Adversite Bleue">
<img class="icon-adversite" src="systems/fvtt-hawkmoon-cyd/assets/icons/gemme_bleue.webp">
<div class="hud-adversite-text">&nbsp;+1</div>
</div>
</div>
<div class="flexrow tokenhudicon">
<div class="hawkmoon-hud-adversite hud-adversite-container" data-action-value="-1"
data-action-index="rouge" title="Adversite Rouge">
<img class="icon-adversite" src="systems/fvtt-hawkmoon-cyd/assets/icons/gemme_rouge.webp">
<div class="hud-adversite-text">&nbsp;-1</div>
</div>
<div class="hawkmoon-hud-adversite hud-adversite-container" data-action-value="+1"
data-action-index="rouge" title="Adversite Rouge">
<img class="icon-adversite" src="systems/fvtt-hawkmoon-cyd/assets/icons/gemme_rouge.webp">
<div class="hud-adversite-text">&nbsp;+1</div>
</div>
</div>
<div class="flexrow tokenhudicon">
<div class="hawkmoon-hud-adversite hud-adversite-container" data-action-value="-1"
data-action-index="noire" title="Adversite Noire">
<img class="icon-adversite" src="systems/fvtt-hawkmoon-cyd/assets/icons/gemme_noire.webp">
<div class="hud-adversite-text">&nbsp;-1</div>
</div>
<div class="hawkmoon-hud-adversite hud-adversite-container" data-action-value="+1"
data-action-index="noire" title="Adversite Noire">
<img class="icon-adversite" src="systems/fvtt-hawkmoon-cyd/assets/icons/gemme_noire.webp">
<div class="hud-adversite-text">&nbsp;+1</div>
</div>
</div>
</div>
</div>

View File

@ -42,7 +42,7 @@
<li class="flexrow item">
<label class="generic-label item-field-label-long">Dégâts : </label>
<input type="text" class="padd-right numeric-input item-field-label-short" name="system.degats"
value="{{system.degats}}" data-dtype="Number" />
value="{{system.degats}}" data-dtype="String" />
</li>
{{/if}}
<li class="flexrow item">

View File

@ -13,8 +13,19 @@
<ul class="item-list alternate-list">
{{> systems/fvtt-hawkmoon-cyd/templates/partial-item-prix.html}}
<li class="flexrow item">
<label class="generic-label item-field-label-long">Quantite </label>
<input type="text" class="padd-right numeric-input item-field-label-short" name="system.quantite"
value="{{system.quantite}}" data-dtype="Number" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Valeur en Sous de Cuivre (SC)</label>
<input type="text" class="numeric-input item-field-label-short" name="system.prixsc" value="{{system.prixsc}}"
data-dtype="Number" />
</li>
</ul>
</div>

View File

@ -16,8 +16,8 @@
value="{{automation.eventtype}}" data-dtype="String">
{{#select automation.eventtype}}
<option value="on-drop">Drop sur l'acteur</option>
<option value="prepare-actor">Préparation de l'acteur</option>
<option value="prepare-roll">Préparation d'un jet</option>
<option value="bonus-permanent">Bonus permanent</option>
{{/select}}
</select>
@ -39,6 +39,23 @@
</li>
{{/if}}
{{#if (eq automation.eventtype "bonus-permanent")}}
<li class="automation-item item flexrow">
<label class="generic-label item-field-label-long">Désignation</label>
<select class="item-field-label-long automation-edit-field" type="text" data-automation-index="{{key}}" data-automation-field="bonusname"
value="{{automation.bonusname}}" data-dtype="String">
{{#select automation.bonusname}}
<option value="vigueur">Vigueur</option>
<option value="bonus-defensif">Bonus au Seuil de Défense</option>
{{/select}}
</select>
</li>
<li class="automation-item item flexrow">
<label class="generic-label item-field-label-long">Bonus</label>
<input type="text" class="item-field-label-medium automation-edit-field" data-automation-index="{{key}}" data-automation-field="bonus" value="{{automation.bonus}}" data-dtype="Number" />
</li>
{{/if}}
{{#if (eq automation.eventtype "prepare-roll")}}
<li class="automation-item item flexrow">
<label class="generic-label item-field-label-long">Compétence/Attribut</label>

View File

@ -9,6 +9,12 @@
<input type="checkbox" name="system.equipped" {{checked system.equipped}} />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Quantite </label>
<input type="text" class="padd-right numeric-input item-field-label-short" name="system.quantite"
value="{{system.quantite}}" data-dtype="Number" />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long">Prix (PA) </label>

View File

@ -0,0 +1,21 @@
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>

View File

@ -20,21 +20,21 @@
</select>
{{else}}
<span class="roll-dialog-label">{{attr.label}}</span>
<span class="small-label">{{attr.value}}</span>
<span class="small-label roll-dialog-label">{{attr.value}}</span>
{{/if}}
</div>
{{#if nbAdversites}}
<div class="flexrow">
<span class="roll-dialog-label">Malus d'adversités : </span>
<span class="small-label">- {{nbAdversites}}</span>
<span class="roll-dialog-label">Malus d'adversités </span>
<span class="small-label roll-dialog-label">- {{nbAdversites}}</span>
</div>
{{/if}}
{{#if competence}}
<div class="flexrow">
<span class="roll-dialog-label">{{competence.name}}</span>
<span class="small-label">{{competence.system.niveau}}</span>
<span class="small-label roll-dialog-label">{{competence.system.niveau}}</span>
</div>
{{#if maitrises}}
<div class="flexrow">
@ -53,7 +53,7 @@
{{#if (count talents)}}
<div class="flexrow">
<span class="roll-dialog-label">Talents applicables :</span>
<span class="roll-dialog-label">Talents </span>
<select class="flex1" name="competence-talents" id="competence-talents" data-type="String" multiple>
{{#each talents as |talent key|}}
<option value="{{talent._id}}">{{talent.name}}</option>
@ -62,12 +62,33 @@
</div>
{{/if}}
<div class="flexrow">
<span class="roll-dialog-label">Bonus/Malus </span>
<select class="roll-dialog-label" id="bonus-malus-context" type="text" value="{{bonusMalusContext}}"
data-dtype="Number">
{{#select bonusMalusContext}}
<option value="-4">-4</option>
<option value="-3">-3</option>
<option value="-2">-2</option>
<option value="-1">-1</option>
<option value="0">0</option>
<option value="1">+1</option>
<option value="2">+2</option>
<option value="3">+3</option>
<option value="4">+4</option>
{{/select}}
</select>
</div>
{{#if armeDefense}}
<div class="flexrow">
<span class="roll-dialog-label">Défense adversaire : </span>
<span class="roll-dialog-label"><strong>{{difficulte}}</strong> </span>
</div>
{{else}}
{{#if isInit}}
{{else}}
<div class="flexrow">
<span class="roll-dialog-label">Difficulté : </span>
<select class="roll-dialog-label" id="difficulte" type="text" name="difficulte" value="{{difficulte}}"
@ -82,9 +103,10 @@
<option value="30">Pure Folie (30)</option>
{{/select}}
</select>
{{/if}}
</div>
{{/if}}
</div>
</form>