diff --git a/assets/bol_monnaies_v1_1.pdf b/assets/bol_monnaies_v1_1.pdf new file mode 100755 index 0000000..7b448ab Binary files /dev/null and b/assets/bol_monnaies_v1_1.pdf differ diff --git a/lang/fr.json b/lang/fr.json index a725af2..98b858c 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -166,6 +166,11 @@ "BOL.ui.rabble": "Piétaille", "BOL.ui.tough": "Coriace", "BOL.ui.villain": "Rival", + "BOL.ui.attributaptitude": "Attribut ou Aptitude", + "BOL.ui.always": "Tout les jets (ie toujours)", + "BOL.ui.effectbonusmalus": "Bonus ou Malus à appliquer", + "BOL.ui.boleffects": "Effets (automatiques)", + "BOL.ui.modifier": "Modificateur", "BOL.featureCategory.origins": "Origines", "BOL.featureCategory.races": "Races", @@ -179,6 +184,7 @@ "BOL.bougette.easylife": "A l'aise", "BOL.bougette.luxury": "Luxe&Volupté", "BOL.bougette.rich": "Richissime", + "BOL.featureSubtypes.origin": "Origine", "BOL.featureSubtypes.race": "Race", "BOL.featureSubtypes.career": "Carrière", @@ -187,6 +193,10 @@ "BOL.featureSubtypes.language": "Langue", "BOL.featureSubtypes.gods": "Dieux & Foi", "BOL.featureSubtypes.fightOption": "Option de Combat", + "BOL.featureSubtypes.effect": "Effet", + "BOL.featureSubtypes.effects": "Effets", + "BOL.featureSubtypes.boleffect": "Effet", + "BOL.fightOptionTypes.armor": "Attaque au défaut d'armure", "BOL.fightOptionTypes.intrepid": "Attaque intrépide", "BOL.fightOptionTypes.twoweaponsdef": "Combat à 2 armes (Défense)", @@ -194,6 +204,7 @@ "BOL.fightOptionTypes.fulldefense": "Défense totale", "BOL.fightOptionTypes.defense": "Posture défensive", "BOL.fightOptionTypes.attack": "Posture offensive", + "BOL.itemCategory.object": "Objet", "BOL.itemCategory.equipment": "Équipement", "BOL.itemCategory.consumable": "Consommable", @@ -203,12 +214,14 @@ "BOL.itemCategory.capacity": "Capacité", "BOL.itemCategory.alchemy": "Préparation Alchimique", "BOL.itemCategory.vehicleweapon": "Armes de Véhicule", + "BOL.combatCategory.protections": "Protections", "BOL.combatCategory.shields": "Boucliers", "BOL.combatCategory.melee": "Armes de contact", "BOL.combatCategory.ranged": "Armes à distance", "BOL.combatCategory.fightOptions": "Options de combat", "BOL.combatCategory.natural": "Armes Naturelless", + "BOL.equipmentCategory.weapon": "Arme", "BOL.equipmentCategory.armor": "Armure", "BOL.equipmentCategory.protection": "Protection", @@ -220,21 +233,26 @@ "BOL.equipmentCategory.container": "Conteneur", "BOL.equipmentCategory.currency": "Monnaie", "BOL.equipmentCategory.other": "Autre", + "BOL.protectionCategory.armor": "Armure", "BOL.protectionCategory.shield": "Bouclier", "BOL.protectionCategory.helm": "Casque", "BOL.protectionCategory.other": "Autre", + "BOL.spellItem.charm": "Charme", "BOL.spellItem.circle1": "Premier Cercle", "BOL.spellItem.circle2": "Second Cercle", "BOL.spellItem.circle3": "Troisième Cercle", + "BOL.alchemyItem.common": "Courante", "BOL.alchemyItem.scarce": "Rare", "BOL.alchemyItem.legend": "Légendaire", "BOL.alchemyItem.mythic": "Mythique", + "BOL.weaponCategory.melee": "Arme de mêlée", "BOL.weaponCategory.ranged": "Arme de tir", "BOL.weaponCategory.other": "Autre", + "BOL.itemProperty.damageMultiplier": "Multiplicateur de dommages", "BOL.itemProperty.attackBonusDice": "Dé de Bonus d'attaque", "BOL.itemProperty.equipable": "Équipable", @@ -298,6 +316,7 @@ "BOL.itemProperty.isboarding": "Abordage", "BOL.itemProperty.isspur": "Eperonnage", "BOL.itemProperty.isbreakrow": "Briser les rames", + "BOL.itemStat.quantity": "Quantité", "BOL.itemStat.weight": "Poids", "BOL.itemStat.price": "Prix", @@ -307,21 +326,26 @@ "BOL.itemStat.soak": "Valeur de protection", "BOL.itemStat.blocking": "Bloquage", "BOL.itemStat.modifiers": "Modificateurs", + "BOL.weaponSize.unarmed": "Mains nues", "BOL.weaponSize.improvised": "Arme improvisée", "BOL.weaponSize.light": "Légère", "BOL.weaponSize.medium": "Moyenne", "BOL.weaponSize.heavy": "Lourde", + "BOL.itemModifiers.init": "Malus (Initiative)", "BOL.itemModifiers.social": "Malus (Social)", "BOL.itemModifiers.agility": "Malus (Agilité)", "BOL.itemModifiers.powercost": "Malus (Coût supplémentaire en PP)", + "BOL.itemBlocking.malus": "Social", "BOL.itemBlocking.nbAttacksPerRound": "Agilité", + "BOL.soakFormula.none": "-", "BOL.soakFormula.light": "Légère (Annule d6-3 dégâts subis)", "BOL.soakFormula.medium": "Moyenne (Annule d6-2 dégâts subis)", "BOL.soakFormula.heavy": "Lourde (Annule d6-1 dégâts subis)", + "BOL.armorQuality.none": "-", "BOL.armorQuality.light": "Légère", "BOL.armorQuality.lightQ": "Légère de qualité", @@ -335,6 +359,7 @@ "BOL.armorQuality.heavyQ": "Lourde de qualité", "BOL.armorQuality.heavySup": "Lourde Supérieure", "BOL.armorQuality.heavyLeg": "Lourde Légendaire", + "BOL.equipmentSlots.none": "-", "BOL.equipmentSlots.head": "Tête", "BOL.equipmentSlots.neck": "Cou", @@ -351,10 +376,12 @@ "BOL.equipmentSlots.feet": "Pieds", "BOL.equipmentSlots.finder": "Doigt", "BOL.equipmentSlots.ear": "Oreille", + "BOL.vehicleCategory.mount": "Monture terrestre", "BOL.vehicleCategory.flying": "Monture volante", "BOL.vehicleCategory.boat": "Bateau", "BOL.vehicleCategory.other": "Autre", + "BOL.range.PointBlank": "Bout portant", "BOL.range.Short": "Courte", "BOL.range.Medium": "Moyenne", @@ -362,6 +389,7 @@ "BOL.range.VeryLong": "Très longue", "BOL.range.Extreme": "Extrême", "BOL.range.Maximum": "Maximale", + "BOL.notification.MacroMultipleTokensSelected": "Vous avez sélectionné plusieurs tokens", "BOL.notification.MacroNoActorAvailable": "Aucun acteur n'a pu être ciblé", "BOL.notification.MacroNoTokenSelected": "Vous devez sélectionner un token", @@ -470,9 +498,10 @@ "BOL.ui.bionotes": "Notes", "BOL.chat.welcome1": "Bienvenue dans Barbarians of Lemuria (Ludospherik version)", - "BOL.chat.welcome2": "Les livres nécessaires pour jouer sont disponibles sur le site de l'éditeur : http://www.ludospherik.fr/content/14-barbarians-of-lemuria", + "BOL.chat.welcome2": "Les livres nécessaires pour jouer sont disponibles sur le site de l'éditeur Ludospherik.", "BOL.chat.welcome3": "Les cartes intégrées au système le sont grace à l'aimable autorisation de leur auteur Guillaume Tavernier et des éditions Ludospherik. Merci à eux !.", - "BOL.chat.welcome4": "Tout le support et le suivi de ce système est disponible via le Discord Foundry FR : https://discord.gg/pPSDNJk", - "BOL.chat.welcome5": "Bon jeu en Lemurie !" + "BOL.chat.welcome4": "Tout le support et le suivi de ce système est disponible via le Discord Foundry FR.", + "BOL.chat.welcome5": "Consulter l'aide en ligne pour plus d'informations : @UUID[Compendium.bol.aides-de-jeu.97rugQOtiwt8zPfQ]{Aide du Jeu}.", + "BOL.chat.welcome6": "Bon jeu en Lemurie !" } \ No newline at end of file diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index 3d02b03..b497f95 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -134,6 +134,7 @@ export class BoLActorSheet extends ActorSheet { formData.alchemy = this.actor.alchemy formData.containers = this.actor.containers formData.treasure = this.actor.treasure + formData.boleffects = this.actor.boleffects formData.alchemyrecipe = this.actor.alchemyrecipe formData.vehicles = this.actor.vehicles formData.fightoptions = this.actor.fightoptions diff --git a/module/actor/actor.js b/module/actor/actor.js index 503349e..583bbf0 100644 --- a/module/actor/actor.js +++ b/module/actor/actor.js @@ -206,6 +206,9 @@ export class BoLActor extends Actor { get resources() { return Object.values(this.system.resources) } + get boleffects() { + return this.items.filter(i => i.type === "feature" && i.system.subtype === "boleffect") + } get boons() { return duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "boon") || []); } @@ -471,6 +474,11 @@ export class BoLActor extends Actor { "label": "BOL.featureSubtypes.gods", "ranked": false, "items": this.godsfaith + }, + "boleffects": { + "label": "BOL.featureSubtypes.effects", + "ranked": false, + "items": this.boleffects } } } diff --git a/module/bol.js b/module/bol.js index c9b58f1..28b8f93 100644 --- a/module/bol.js +++ b/module/bol.js @@ -110,7 +110,8 @@ function welcomeMessage() { game.i18n.localize("BOL.chat.welcome2") + "

" + game.i18n.localize("BOL.chat.welcome3") + "

" + game.i18n.localize("BOL.chat.welcome4") + "

" + - game.i18n.localize("BOL.chat.welcome5") + "

" + game.i18n.localize("BOL.chat.welcome5") + "
" + + game.i18n.localize("BOL.chat.welcome6") } ) } diff --git a/module/controllers/bol-rolls.js b/module/controllers/bol-rolls.js index 212af7b..e7227c2 100644 --- a/module/controllers/bol-rolls.js +++ b/module/controllers/bol-rolls.js @@ -16,27 +16,56 @@ export class BoLRoll { } /* -------------------------------------------- */ - static attributeCheck(actor, key) { + static updateApplicableEffects(rollData) { + let appEffects = [] + for( let effect of rollData.bolEffects) { + if(effect.system.properties.identifier =="always") { + appEffects.push(effect) + } else if (effect.system.properties.identifier.includes(rollData.attribute.key)) { + appEffects.push(effect) + } else if ( rollData.aptitude && effect.system.properties.identifier.includes(rollData.aptitude.key)) { + appEffects.push(effect) + } + } + return appEffects + } - let attribute = eval(`actor.system.attributes.${key}`) - let label = (attribute.label) ? game.i18n.localize(attribute.label) : null - let description = game.i18n.localize('BOL.ui.attributeCheck') + " - " + game.i18n.localize(attribute.label) + /* -------------------------------------------- */ + static getCommonRollData(actor, mode, attribute, aptitude = undefined ) { let rollData = { - mode: "attribute", + mode: mode, actorId: actor.id, img: actor.img, attribute: attribute, attrValue: attribute.value, aptValue: 0, - label: label, careerBonus: 0, - description: description, armorAgiMalus: actor.getArmorAgiMalus(), armorInitMalus: actor.getArmorInitMalus(), adv: "0", - mod: 0 + mod: 0, + modRanged: 0, + aptValue: 0, + bolEffects: actor.boleffects } + if (aptitude) { + rollData.aptitude = aptitude + rollData.aptValue = aptitude.value + } + rollData.bolApplicableEffects = this.updateApplicableEffects(rollData) + return rollData + } + + /* -------------------------------------------- */ + static attributeCheck(actor, key) { + + let attribute = eval(`actor.system.attributes.${key}`) + + let rollData = this.getCommonRollData(actor, "attribute", attribute) + rollData.description = game.i18n.localize('BOL.ui.attributeCheck') + " - " + game.i18n.localize(attribute.label) + rollData.label = (attribute.label) ? game.i18n.localize(attribute.label) : null + console.log(">>>>>>>>>>", rollData, actor) return this.displayRollDialog(rollData) } @@ -48,25 +77,12 @@ export class BoLRoll { let attrKey = this.getDefaultAttribute(key) let attribute = eval(`actor.system.attributes.${attrKey}`) - let label = (aptitude.label) ? game.i18n.localize(aptitude.label) : null; - let description = game.i18n.localize('BOL.ui.aptitudeCheck') + " - " + game.i18n.localize(aptitude.label); - return this.displayRollDialog( - { - mode: "aptitude", - actorId: actor.id, - img: actor.img, - attribute: attribute, - aptitude: aptitude, - attrValue: attribute.value, - aptValue: aptitude.value, - armorAgiMalus: actor.getArmorAgiMalus(), - armorInitMalus: actor.getArmorInitMalus(), - label: label, - careerBonus: 0, - adv: "0", - description: description, - mod: 0 - }) + let rollData = this.getCommonRollData(actor, "aptitude", attribute, aptitude) + + rollData.label = (aptitude.label) ? game.i18n.localize(aptitude.label) : null + rollData.description = game.i18n.localize('BOL.ui.aptitudeCheck') + " - " + game.i18n.localize(aptitude.label) + + return this.displayRollDialog( rollData) } /* -------------------------------------------- */ @@ -116,6 +132,8 @@ export class BoLRoll { let attribute = eval(`actor.system.attributes.${weaponData.properties.attackAttribute}`) let aptitude = eval(`actor.system.aptitudes.${weaponData.properties.attackAptitude}`) + let rollData = this.getCommonRollData(actor, "weapon", attribute, aptitude) + // Compute distance this.detectDistance( weapon, target) @@ -125,31 +143,19 @@ export class BoLRoll { ui.notifications.warn(`{{actor.name}} est en Défense Totale ! Il ne peut pas attaquer ce round.`) return } - // Build the roll structure - let rolldata = { - mode: "weapon", - actorId: actor.id, - img: actor.img, - weapon: weapon, - isRanged: weaponData.properties.ranged || weaponData.properties.throwing, - targetId: target?.id, - fightOption: fightOption, - careerBonus: 0, - defenderId: target?.actor.id, - attribute: attribute, - aptitude: aptitude, - attrValue: attribute.value, - aptValue: aptitude.value, - armorAgiMalus: actor.getArmorAgiMalus(), - armorInitMalus: actor.getArmorInitMalus(), - mod: 0, - modRanged: 0, - adv: "0", - label: (weapon.name) ? weapon.name : game.i18n.localize('BOL.ui.noWeaponName'), - description: game.i18n.localize('BOL.ui.weaponAttack') + " : " + weapon.name, - } - return this.displayRollDialog(rolldata) + + // Update the roll structure + rollData.weapon = weapon + rollData.isRanged = weaponData.properties.ranged || weaponData.properties.throwing + rollData.targetId = target?.id + rollData.fightOption = fightOption + rollData.defenderId = target?.actor.id + rollData.label = (weapon.name) ? weapon.name : game.i18n.localize('BOL.ui.noWeaponName') + rollData.description = game.i18n.localize('BOL.ui.weaponAttack') + " : " + weapon.name + + return this.displayRollDialog(rollData) } + /* -------------------------------------------- */ static weaponCheck(actor, event) { const li = $(event.currentTarget).parents(".item") @@ -173,55 +179,39 @@ export class BoLRoll { alchemy = duplicate(alchemy) let alchemyData = alchemy.system if (alchemyData.properties.pccurrent < alchemyData.properties.pccost) { - ui.notifications.warn("Pas assez de Points de Cration investis dans la Préparation !") + ui.notifications.warn("Pas assez de Points de Création investis dans la Préparation !") return } - let alchemyDef = { - mode: "alchemy", - actorId: actor.id, - img: actor.img, - alchemy: alchemy, - attribute: actor.system.attributes.mind, - attrValue: actor.system.attributes.mind.value, - aptValue: 0, - adv: "0", - careerBonus: actor.getAlchemistBonus(), - pcCost: Number(alchemyData.properties.pccost), - pcCostCurrent: Number(alchemyData.properties.pccurrent), - mod: Number(alchemyData.properties.difficulty), - armorAgiMalus: actor.getArmorAgiMalus(), - armorInitMalus: actor.getArmorInitMalus(), - label: alchemy.name, - description: game.i18n.localize('BOL.ui.makeAlchemy') + "+" + alchemy.name, - } + let rollData = this.getCommonRollData(actor, "alchemy", actor.system.attributes.mind) + + rollData.alchemy = alchemy + rollData.careerBonus = actor.getAlchemistBonus() + rollData.pcCost = Number(alchemyData.properties.pccost) + rollData.pcCostCurrent = Number(alchemyData.properties.pccurrent) + rollData.mod = Number(alchemyData.properties.difficulty) + rollData.label = alchemy.name + rollData.description = game.i18n.localize('BOL.ui.makeAlchemy') + "+" + alchemy.name + console.log("ALCHEMY!", alchemyDef); return this.displayRollDialog(alchemyDef); } /* -------------------------------------------- */ static spellCheckWithSpell( actor, spell ) { - let spellDef = { - mode: "spell", - actorId: actor.id, - img: actor.img, - spell: spell, - attribute: actor.system.attributes.mind, - attrValue: actor.system.attributes.mind.value, - aptValue: 0, - adv: "0", - ppCurrent: Number(actor.system.resources.power.value), - careerBonus: actor.getSorcererBonus(), - ppCostArmor: actor.getPPCostArmor(), - ppCost: Number(spell.system.properties.ppcost), - mod: Number(spell.system.properties.difficulty), - armorAgiMalus: actor.getArmorAgiMalus(), - armorInitMalus: actor.getArmorInitMalus(), - label: spell.name, - description: game.i18n.localize('BOL.ui.focusSpell') + " : " + spell.name, - } + let rollData = this.getCommonRollData(actor, "spell", actor.system.attributes.mind) + + rollData.spell = spell + rollData.ppCurrent = Number(actor.system.resources.power.value), + rollData.careerBonus = actor.getSorcererBonus(), + rollData.ppCostArmor = actor.getPPCostArmor(), + rollData.ppCost = Number(spell.system.properties.ppcost), + rollData.mod = Number(spell.system.properties.difficulty), + rollData.label = spell.name, + rollData.description = game.i18n.localize('BOL.ui.focusSpell') + " : " + spell.name + //console.log("SPELL!", spellDef) - return this.displayRollDialog(spellDef) + return this.displayRollDialog(rollData) } /* -------------------------------------------- */ @@ -246,8 +236,29 @@ export class BoLRoll { this.updateArmorMalus(this.rollData) this.updatePPCost(this.rollData) + // get basic dices from boons/flaws + let effectModifier = 0 this.rollData.bmDice = this.rollData.nbBoons - this.rollData.nbFlaws + this.rollData.bDice - this.rollData.mDice + // add applicable bonus/malus dices effects + for (let effect of this.rollData.bolApplicableEffects) { + if (effect.system.properties.modifier == "1B") { + this.rollData.bmDice++; + } else if (effect.system.properties.modifier == "1B") { + this.rollData.bmDice+=2; + } else if (effect.system.properties.modifier == "1M") { + this.rollData.bmDice--; + } else if (effect.system.properties.modifier == "2M") { + this.rollData.bmDice-=2; + } else { + effectModifier += Number(effect.system.properties.modifier) + } + } + // Keep track of the final effect modifier + this.rollData.effectModifier = effectModifier + + // Final number of dices this.rollData.nbDice = 2 + Math.abs(this.rollData.bmDice) + // Bonus or Malus ? if (this.rollData.bmDice == 0) { $('#roll-nbdice').val("2") } else { @@ -260,7 +271,14 @@ export class BoLRoll { } $('#roll-modifier').val(rollbase + "+" + this.rollData.careerBonus + "+" + this.rollData.mod + "+" + this.rollData.modRanged + "+" + this.rollData.weaponModifier + "-" + this.rollData.defence + "-" + this.rollData.modArmorMalus + "-" + - this.rollData.shieldMalus + "+" + this.rollData.attackModifier + "+" + this.rollData.appliedArmorMalus) + this.rollData.shieldMalus + "+" + this.rollData.attackModifier + "+" + this.rollData.appliedArmorMalus + "+" + effectModifier) + + // Rebuild lits of applicable effects + let selectEffects = "" + for(let effect of this.rollData.bolApplicableEffects) { + selectEffects += `` + } + $('#applicable-effects').html(selectEffects) } /* -------------------------------------------- */ @@ -337,6 +355,7 @@ export class BoLRoll { let actor = game.actors.get( this.rollData.actorId) this.rollData.attribute = duplicate(actor.system.attributes[attrKey]) this.rollData.attrValue = actor.system.attributes[attrKey].value + this.rollData.bolApplicableEffects = this.updateApplicableEffects(this.rollData) this.updateTotalDice() }) html.find('#apt').change((event) => { @@ -344,6 +363,7 @@ export class BoLRoll { let actor = game.actors.get( this.rollData.actorId) this.rollData.aptitude = duplicate(actor.system.aptitudes[aptKey]) this.rollData.aptValue = actor.system.aptitudes[aptKey].value + this.rollData.bolApplicableEffects = this.updateApplicableEffects(this.rollData) this.updateTotalDice() }) @@ -485,7 +505,7 @@ export class BoLRoll { if ( rollData.weapon && rollData.weapon.system.properties.onlymodifier ) { rollbase = 0 } - const modifiers = rollbase + rollData.careerBonus + rollData.mod + rollData.weaponModifier - rollData.defence - rollData.modArmorMalus + rollData.shieldMalus + rollData.attackModifier + rollData.appliedArmorMalus + const modifiers = rollbase + rollData.careerBonus + rollData.mod + rollData.weaponModifier - rollData.defence - rollData.modArmorMalus + rollData.shieldMalus + rollData.attackModifier + rollData.appliedArmorMalus + rollData.effectModifier const formula = (isMalus) ? rollData.nbDice + "d6kl2 + " + modifiers : rollData.nbDice + "d6kh2 + " + modifiers rollData.formula = formula rollData.modifiers = modifiers diff --git a/module/system/config.js b/module/system/config.js index 2cbde81..048edd5 100644 --- a/module/system/config.js +++ b/module/system/config.js @@ -260,7 +260,8 @@ BOL.featureSubtypes = { "flaw" : "BOL.featureSubtypes.flaw", "language" : "BOL.featureSubtypes.language", "godsfaith" : "BOL.featureSubtypes.gods", - "fightoption" : "BOL.featureSubtypes.fightOption" + "fightoption" : "BOL.featureSubtypes.fightOption", + "boleffect": "BOL.featureSubtypes.effect", } BOL.fightOptionTypes = { @@ -310,4 +311,20 @@ BOL.creatureSize = { "colossal": "BOL.size.colossal" } +BOL.bolEffectModifier = { + "-8": "-8", + "-6": "-6", + "-4": "-4", + "-2": "-2", + "-1": "-1", + "1B": "1B", + "2B": "2B", + "1M": "1M", + "2M": "2M", + "+1": "+1", + "+2": "+2", + "+4": "+4", + "+6": "+6", + "+8": "+8", +} BOL.debug = false; \ No newline at end of file diff --git a/module/system/templates.js b/module/system/templates.js index 8a6bbae..1cabb6d 100644 --- a/module/system/templates.js +++ b/module/system/templates.js @@ -36,6 +36,7 @@ export const preloadHandlebarsTemplates = async function () { "systems/bol/templates/item/parts/properties/feature/career-properties.hbs", "systems/bol/templates/item/parts/properties/feature/boon-properties.hbs", "systems/bol/templates/item/parts/properties/feature/flaw-properties.hbs", + "systems/bol/templates/item/parts/properties/feature/effect-properties.hbs", "systems/bol/templates/item/parts/properties/feature/origin-properties.hbs", "systems/bol/templates/item/parts/properties/feature/race-properties.hbs", "systems/bol/templates/item/parts/properties/feature/fightoption-properties.hbs", @@ -50,6 +51,7 @@ export const preloadHandlebarsTemplates = async function () { "systems/bol/templates/dialogs/mod-roll-part.hbs", "systems/bol/templates/dialogs/adv-roll-part.hbs", "systems/bol/templates/dialogs/career-roll-part.hbs", + "systems/bol/templates/dialogs/effect-roll-part.hbs", "systems/bol/templates/dialogs/boons-roll-part.hbs", "systems/bol/templates/dialogs/flaws-roll-part.hbs", "systems/bol/templates/dialogs/total-roll-part.hbs", diff --git a/packs/aides-de-jeu.db b/packs/aides-de-jeu.db index 302ddff..c1c34dd 100644 --- a/packs/aides-de-jeu.db +++ b/packs/aides-de-jeu.db @@ -1,5 +1,7 @@ {"_id":"3xJg1rCxnWvEmoxS","name":"Points d'héroisme","content":"

Vous pouvez utiliser les points d’héroïsme pour peser sur l’issue d’un combat ou d’une situation afin de faire pencher la balance en votre faveur. Voici les différentes façons d’utiliser un point d’héroïsme :

\n

 

\n

Coup de chance

\n

Quand la description d’une scène n’a pas clairement défini certains détails, le joueur peut suggérer quelque chose qui paraisse raisonnable et utiliser 1 point d’héroïsme pour que cela devienne une réalité. Cette façon d’utiliser un point d’héroïsme reste soumise à l’approbation du MJ. Cela ne doit pas permettre d’apporter un changement majeur dans une scène ni de modifier un élément qui a déjà été déterminé.

\n

Par exemple, si un personnage est emprisonné dans une geôle, il peut utiliser 1 point d’héroïsme pour découvrir une pierre disjointe dans le mur et réussir à l’extraire, peut-être dans le but d’assommer le garde la prochaine fois que celui-ci viendra lui apporter sa pitance.

\n

Un sorcier peut utiliser 1 point d’héroïsme afin de remplir une condition d’incantation. Par exemple, si le MJ n’a pas encore précisé le moment de la journée, le sorcier pourra s’exclamer: « Ah, cette heure du jour est idéale pour la réussite de mon invocation ! »

\n

 

\n

Défier la mort

\n

Les points d’héroïsme peuvent toujours servir à garder un héros en vie alors qu’il devrait mourir. Si vous avez subi des dégâts qui ont fait chuter votre vitalité entre -1 et -5, vous pouvez dépenser 1 point d’héroïsme pour ramener immédiatement votre vitalité à 0. Vous êtes vivant, mais inconscient.

\n

Si les dégâts subis vous amènent au-dessous de -5 en vitalité, vous pouvez dépenser 1 point d’héroïsme pour stabiliser vos blessures. Vous restez inconscient, et vous pourrez vous remettre sur pied avec quelques jours de repos.

\n

 

\n

Faveur divine

\n

Vous pouvez dépenser 1 point d’héroïsme pour relancer les dés d’un jet d’action (même si vous avez obtenu un double 1, qui est un échec automatique). Vous devez relancer tous les dés (y compris les dés de bonus) et conserver le résultat du second jet.

\n

 

\n

Juste une égratignure

\n

Quand un héros subit des dégâts, il peut prendre un petit moment (ce qui lui coûte sa prochaine action) pour se remettre du coup qu’il vient d’encaisser. En d’autres termes, sa blessure n’est finalement pas aussi grave qu’elle paraissait. Vous lancez 1d6 et récupérez le nombre correspondant de points de vitalité (sans pouvoir dépasser le nombre de points de dégâts subis du fait de cette attaque).

\n

 

\n

Parade in extremis

\n

Vous pouvez dépenser 1 point d’héroïsme pour éviter de subir les dégâts d’une attaque en interposant votre bouclier ou votre arme au dernier moment. Toutefois, le coup fracasse votre bouclier ou brise votre arme qui devient alors inutilisable.

\n

 

\n

Négocier avec le MJ

\n

Tout autre avantage ponctuel (non couvert par les différentes options d’utilisation des points d’héroïsme) que vous pourriez convaincre le MJ de vous accorder.

\n

 

\n

Succès héroïque

\n

Lorsque vous obtenez un double 6 sur un jet d’action, il s’agit d’un succès héroïque. Mais vous pouvez aussi convertir un simple succès en succès héroïque par la dépense de 1 point d’héroïsme. Le résultat exact d’un succès héroïque dépend de la tâche entreprise, mais dans tous les cas le héros réussit brillamment son action.

\n

Au combat, un succès héroïque vous permet de choisir une des options suivantes :

\n

Carnage. Vous effectuez immédiatement une nouvelle attaque, contre le même adversaire ou contre un adversaire différent. Vous ne pouvez pas dépenser de point d’héroïsme dans le cadre de cette attaque supplémentaire.

\n

Coup dévastateur. Vous ajoutez +6 aux dégâts.

\n

Coup précis. Vous frappez votre ennemi à un endroit précis, dans l’intention de l’estropier afin de diminuer ses capacités. Vous déterminez les dégâts normalement et imposez à la cible un dé de malus à un type spécifique de jets d’action (en règle générale, vous voudrez affecter ses jets d’attaque, mais ce n’est pas une obligation ; un coup porté à l’œil imposera un dé de malus à tous les jets d’action faisant appel à la vue, ce qui peut inclure – ou pas– les jets d’attaque). Les autres options d’un coup précis peuvent être de trancher un tentacule ou un dard, ou d’ouvrir une large plaie dans le cuir épais d’un monstre (pour réduire la protection de la créature d’une catégorie). Vous pourrez décider avec le MJ d’autres effets similaires en fonction des circonstances.

\n

Désarmement. Si votre adversaire a une arme en main, vous le désarmez (au lieu de lui infliger des dégâts).

\n

Massacrer la piétaille. Si vous combattez de la piétaille, les dégâts infligés représentent le nombre d’adversaires mis hors de combat par votre assaut. Ils ne sont pas forcément morts, mais ils ne sont pas près de revenir vous affronter de sitôt.

\n

Renversement. Vous pouvez renverser un adversaire, dont la taille peut être supérieure à la vôtre d’une catégorie au maximum. L’adversaire se retrouve à terre après avoir été repoussé de quelques pas (il ne fait pas bon combattre au bord d’une falaise !). Si le combat continue, l’adversaire qui se relève subit un dé de malus à sa prochaine action.

\n

 

\n

Succès légendaire

\n

Si vous obtenez un double 6 sur un jet d’action et qu’il s’agit d’un succès héroïque (pas d’un jet d’action qui ne pouvait réussir que sur un double 6), vous pouvez dépenser 1 point d’héroïsme pour transformer ce succès héroïque en succès légendaire, et cela même si vous avez dépensé 1 point d’héroïsme pour refaire votre jet d’action, du moment que vous obtenez un double 6 au second jet.

\n

Le succès légendaire n’est accessible que si vous obtenez un double 6. Vous ne pouvez pas convertir un succès normal en succès héroïque, puis dépenser un deuxième point d’héroïsme pour le transformer en succès légendaire.

\n

Au combat, un succès légendaire vous permet de choisir deux options de succès héroïque. Par exemple, si vous affrontez de la piétaille, vous pouvez choisir Massacrer la piétaille et Coup dévastateur afin d’éliminer encore plus d’adversaires. Vous pouvez choisir deux fois la même option, si vous le souhaitez (par exemple, choisir deux fois Coup dévastateur pour un bonus aux dégâts de +12 !).

\n

 

\n

Récupérer les points d’héroïsme

\n

Vous récupérez à la fin d’une aventure tous les points d’héroïsme utilisés.

\n

Vous ne pouvez pas dépasser votre total de points d’héroïsme de départ, à moins de recevoir un point d’héroïsme en bonus du fait d’un échec critique.

","folder":null,"sort":0,"permission":{"default":0,"zN9ZZg5J7XzNELjd":3},"flags":{"core":{"sourceId":"JournalEntry.yOiargvrodwnCkoY"}}} +{"name":"Aide du Jeu","pages":[{"sort":50000,"name":"Crédits","type":"text","_id":"8agBoLYo99u530d1","title":{"show":true,"level":1},"image":{},"text":{"format":1,"content":"

Ce système a été démarré par Zigmund, puis repris, complété et maintenu par LeRatierBretonnien.

Vous pouvez me contacter sur le Discord FR de Foundry : LeRatierBretonnien#2065

Le dépot git est disponible ici : https://www.uberwald.me/gitea/public/bol

Barbarians of Lemuria est un jeu de Simon Washbourne (Beyond Belief Games), traduit en Français par Ludospherik.

Toute la gamme est disponible sur cette page : http://www.ludospherik.fr/content/14-barbarians-of-lemuria

","markdown":""},"video":{"controls":true,"volume":0.5},"src":null,"system":{},"ownership":{"default":-1},"flags":{}},{"sort":100000,"name":"Fonctions","type":"text","_id":"NAcpMm6NlyhwvWRA","title":{"show":true,"level":1},"image":{},"text":{"format":1,"content":"

Le système BoL sous Foundry vous permet :

","markdown":""},"video":{"controls":true,"volume":0.5},"src":null,"system":{},"ownership":{"default":-1},"flags":{}},{"sort":150000,"name":"Compendiums","type":"text","_id":"hdQixhZGfAytdbSg","title":{"show":true,"level":1},"image":{},"text":{"format":1,"content":"

Le système est livré avec une série de compendiums permettant d'avoir un accès rapide aux carrières, avantages, etc, etc.

Les cartes officielles sont disponibles, avec l'aimable autorisation de Ludospherik.

Pour exploiter un contenu d'un compendium, il suffit de glisser-déplacer l'item dans le \"monde\". Par exemple : ouvrir le compendium de l'équipement, sélectionner l'Armure légère et la glisser-déposer sur la fiche d'un personnage.

","markdown":""},"video":{"controls":true,"volume":0.5},"src":null,"system":{},"ownership":{"default":-1},"flags":{}},{"sort":400000,"name":"Lancer de dés (Attributs/Aptitudes)","type":"text","_id":"UfvTY80U49k6YFwe","title":{"show":true,"level":1},"image":{},"text":{"format":1,"content":"

Lorsqu'un joueur clique sur un attribut ou une aptitude, la fenêtre suivante s'affiche :

  1. Attribut sur lequel le joueur a cliqué. Il peut être changé via ce menu déroulant.

  2. Carrière à appliquer éventuellement. Click gauche pour sélectionner, CTRL+click gauche pour déselectionner. Lorsque sélectionné, le niveau de carrière est appliqué.

  3. Avantages disponibles (ie ceux qui donnent un dé bonus). Mode de sélection identique aux carrières. Lorsque sélectionné, le dé bonus est appliqué sur le jet..

  4. Désavantages disponibles (ie ceux qui donnent un dé malus). Mode de sélection identique aux carrières. Lorsque sélectionné, le dé malus est appliqué sur le jet.

  5. Effets. Les effets sont des modificateurs permanents qui viennent modifier certains jeux. Voir le chapitre correspondant.

  6. Ajout manuel de dés malus ou bonus.

  7. Modificateurs manuel, selon les annonces du MJ.

  8. Rappel du nombre de dés, en fonction des choix effectués dans la fenêtre de dialogue.

  9. Liste complète des modificateurs appliqués au jet.



","markdown":""},"video":{"controls":true,"volume":0.5},"src":null,"system":{},"ownership":{"default":-1},"flags":{}},{"sort":500000,"name":"Lancer de dés (Arme)","type":"text","_id":"4CLyyt3dtpG6YNMi","title":{"show":true,"level":1},"image":{},"text":{"format":1,"content":"

Pour effectuer une attaque avec une arme, se placer dans l'onglet \"Actions\" et cliquer sur le nom de l'arme. Il est recommandé de cibler un adversaire, afin de profiter des automatisations.

  1. Attribut par défaut de l'arme. Peut être changé via ce menu déroulant.

  2. Aptitude par défaut de l'arme. Peut être changée via ce menu déroulant.

  3. Bonus éventuel de l'arme sur le jet d'attaque

  4. Défense de la cible (lorsqu'un adversaire a été ciblé)

  5. Carrière à appliquer éventuellement. Click gauche pour sélectionner, CTRL+click gauche pour déselectionner. Lorsque sélectionné, le niveau de carrière est appliqué.

  6. Avantages disponibles (ie ceux qui donnent un dé bonus). Mode de sélection identique aux carrières. Lorsque sélectionné, le dé bonus est appliqué sur le jet..

  7. Désavantages disponibles (ie ceux qui donnent un dé malus). Mode de sélection identique aux carrières. Lorsque sélectionné, le dé malus est appliqué sur le jet.

  8. Effets. Les effets sont des modificateurs permanents qui viennent modifier certains jeux. Voir le chapitre correspondant.

  9. Ajout manuel de dés malus ou bonus.

  10. Zone d'information si l'arme a l'option \"Dé de bonus\" coché.

  11. Malus à l'agilité, selon bouclier et armure.

  12. Modificateurs manuel, selon les annonces du MJ.

  13. Rappel du nombre de dés, en fonction des choix effectués dans la fenêtre de dialogue.

  14. Liste complète des modificateurs appliqués au jet.

","markdown":""},"video":{"controls":true,"volume":0.5},"src":null,"system":{},"ownership":{"default":-1},"flags":{}},{"sort":250000,"name":"Fiche de personnage","type":"text","_id":"r003R5yIaiKxThOc","title":{"show":true,"level":1},"image":{},"text":{"format":1,"content":"

Attributs

  1. Zone Nom+Expérience.

  2. Barre d'onglets, permettant la navigation entre les zones.

  3. Zone des attributs. Un click sur le nom ouvre la fenêtre de jet, un click sur le chiffre permet l'édition.

  4. Zone des aptirudes, idem qu'attribut.

  5. Zone des compteurs. La valeur en rouge est la valeur courante, la valeur en noir en dessous est la valeur max.

Actions

  1. Armes. Un click sur le nom ouvre la fenêtre d'attaque avec l'arme.

  2. Dommages. Un click sur la formule dégâts effectue le jet.

  3. Liste des protections.

  4. Un click sur la formule de protection effectue le jet.

  5. Liste des boucliers.

  6. Options de combat, si le personnage en connait. Une fois activée, elles apparaissent dans la fenêtre d'attaque des armes.

Traits

  1. Liste des carrières. Click gauche sur la carrière pour les détails.

  2. Assistance pour la gestion du rang de la carrière.

  3. Liste des origines du personnage. Click gauche pour les détails.

  4. Liste des avantages. Click gauche pour les détails.

  5. Liste des désavantages. Click gauche pour les détails.

  6. Liste des langues parlées. Click gauche pour les détails.

  7. Liste des options de combat connues. Click gauche pour les détails.

  8. Liste des croyances du personnage. Click gauche pour les détails.

  9. Liste des effets en cours. Click gauche pour les détails.

Equipements

  1. Permet de créer rapidement un nouvel équipement.

  2. Etat de la bougette (règle optionnelle, option du système, cf section spéciale).

  3. Armes, avec gestion de la quantité.

  4. Un click sur le bouclier permet d'équiper/déséquiper l'arme.

  5. Liste des protections.

  6. Equiper/Déséquiper l'armure.

Sorts & Alchimie

Cet onglet n'est disponible que si le personnage possède les carrières Alchimiste ou Sorcier.

  1. Liste de sorts. Click gauche sur le nom pour la fenêtre de jet spécialisée.

  2. Rappel du cercle et difficulté.

  3. Le bouton carré permet de visualiser les détails du sort.

  4. Liste des préparations alchimiques connues.

  5. Gestion de l'avancement de la fabrication.

  6. Le bouton carré permet de visualiser les détails de la préparation.

Description

La zone de description contient des champs libres à la saisie pour personnaliser le personnage.

","markdown":""},"video":{"controls":true,"volume":0.5},"src":null,"system":{},"ownership":{"default":-1},"flags":{}},{"sort":600000,"name":"Les Effets","type":"text","_id":"eRbEqbCW4AhU0cpm","title":{"show":true,"level":1},"image":{},"text":{"format":1,"content":"

Les effets permettent d'appliquer des modificateurs permanents tant qu'ils sont présents sur la fiche de personnage.

Exemple : Un personnage est empoisonné, et le poison lui provoque une fatigue mentale. En termes de jeu, il subit un malus de -2 à tout ses jets d'Esprit. Pour matérialiser cet effet, ils suffit de créer un \"Effet\" comme suit :

  1. Créer un \"Trait\", et dans l'onglet \"Détails\" sélectionner le sous-type \"Effet\"

  2. Sélectionner \"Esprit\"

  3. Indiquer un malus de -2

Une fois placé sur un personnage, le malus sera systématiquement et automatiquement appliqué dès qu'un jet d'Esprit sera demandé. Il suffit ensuite de supprimer l'effet de la fiche de personnage (onglet \"Traits\") pour enlever l'effet et son malus.
Un compendium d'effets de base est disponible dans le système.

","markdown":""},"video":{"controls":true,"volume":0.5},"src":null,"system":{},"ownership":{"default":-1},"flags":{}},{"sort":700000,"name":"Commandes","type":"text","_id":"QmNF6p0lJf3pJoAy","title":{"show":true,"level":1},"image":{},"text":{"format":1,"content":"

Le système dispose de commande (pour l'instant 1 seule) permettant de réaliser diverses automatisations :

Commande /adventure

  1. Saisissez `/adventure` dans la zone de saisie du tchat (ou en macro)

  2. Le système génère automatiquement une aventure, sur la base des tables du livre de base.

","markdown":""},"video":{"controls":true,"volume":0.5},"src":null,"system":{},"ownership":{"default":-1},"flags":{}}],"ownership":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"JournalEntry.b9BjVFaWB6uyyKsD"}},"_stats":{"systemId":"bol","systemVersion":"10.4.0","coreVersion":"10.290","createdTime":1669231565366,"modifiedTime":1669234957955,"lastModifiedBy":"kQghu0tL1dft5xLu"},"folder":null,"sort":0,"_id":"97rugQOtiwt8zPfQ"} {"_id":"BqmB3vIaTkiDl8q0","name":"Monnaies de Lemurie","content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
  
LieuMonnaies/Echanges
Cote de FeuTroc
Désert de BesharTroc
HalakhSekh
Iles du CrâneToutes monnaies
Jungle de Qo et QushTroc
LysorStratere
MalakutRoue
Marais de FestrelTroc
Marais de KashtTroc
Montagnes de l’AxosTroc
OomisTetras
ParsoolDiobole
Plaines de KlaarTroc, Toutes monnaies
SatarlaSolis
ShamballahDzungli
Terres DésoléesTroc
TyrusDrachme
UrcebPiacor
ValgardOsdul
ZalutAb’Shelar
BeiWeiTroc
GhataïTroc, Bin-Teng
Khansan, Liu, Tor XianBin-Teng
","folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"JournalEntry.6ZssoVs8jkt4AGcG"}}} +{"name":"La Bougette","pages":[{"sort":0,"name":"Bougette","type":"pdf","_id":"kqDbfJK324WDfSH6","title":{"show":true,"level":1},"image":{},"text":{"format":1},"video":{"controls":true,"volume":0.5},"src":"systems/bol/assets/bol_monnaies_v1_1.pdf","system":{},"ownership":{"default":-1},"flags":{"core":{"sourceId":"JournalEntry.b9BjVFaWB6uyyKsD.JournalEntryPage.kqDbfJK324WDfSH6"}}}],"ownership":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"JournalEntry.e1ZujlCxvl0HgpNh"}},"_stats":{"systemId":"bol","systemVersion":"10.4.0","coreVersion":"10.290","createdTime":1669235169564,"modifiedTime":1669235204151,"lastModifiedBy":"kQghu0tL1dft5xLu"},"folder":null,"sort":0,"_id":"H79XdnMtmPW2PD68"} {"name":"Noms de Lemurie","content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n

Bei Wei

\n
\n

Noms masculins : Bongyur, Dongge, Dreugpa, Gempo, Jungnen, Kamzo, Kempo, Lungpo, Nagpo, Nyetri, Phagpa, Sengtsen.

\n

Noms féminins : Bkrubati, Chantra, Chodra, Jigmei, Lhalung, Logzen, Meito, Mirlapa, Palgye, Samaye, Santara, Tangba

\n
\n

Céruléens

\n
\n

Noms masculins : Bork, Chun, Dekk, Erkk,Fakk, Gort, Gozaar, Gurnt, Jaakko, Jank, Jouka,Jrycki, Kall, Kerrik, Kook, Koozo, Kukk, Lekk,Lozzar, Nukk, Penkk, Tarrk, Venk, Vilk, Vork.

\n

Noms féminins : Akki, Bekka, Bezis, Danki,Eeva, Furka, Inka, Irka, Joona, Jurva, Kalli,Karis, Kella, Kooki, Krakki, Lazzis, Likka,Lovi, Marjukka, Marzi, Nukeel, Nukka, Oki,Rikki,Tharki.

\n

 

\n
\n

Désert de Beshaar

\n
\n

Noms masculins : Aban, Akar, Akon, Atak, Basit, Boulos, Darwish, Fath, Ferran, Harith, Jalid, Karim, Makil, Mujib, Nur, Sadin, Samad, Surk, Yazan.

\n

Noms féminins : Alima, Almas, Ambre, Bisara, Dimah, Felina, Hilela, Husina, Isimi, Jamara, Judi, Kalila, Lula, Maysam, Mumi, Namara, Nuha, Qisa, Rua, Thara.

\n
\n

Grooth

\n
\n

Noms masculins et féminins : Ak, Bruk, Cek,Dur, Erg, Fik, Grar, Hig, Ig, Jat, Kof, Lurt, Mak,Nin, Op, Prek, Quh, Rir, Sum, Tulk, Um, Vit,Wat, Zuk.

\n

 

\n
\n

Halakh

\n
\n

Noms masculins : Angada, Balaram, Bhadrakil, Chalam, Chedi, Daruk, Devad, Drajit, Govardan, Iravan, Janak, Jiwal, Karna, Kichaka, Kurava, Maharak, Mapoutra, Parada, Parasara, Shoumat.

\n

Noms féminins : Anjana, Ardana, Charla, Damayanti, Devaki, Gadiva, Hanala, Holi, Ilvala, Jasura, Kalindi, Kesha, Madri, Mashini, Nakula, Nala, Neta, Ralekha, Rasena, Vahana. 

\n
\n

Hommes Oiseaux

\n
\n

Noms masculins : Aaleevic, Aamaneeth,Aaneet, Cloonacool, Easreth, Eemenearl,Eveearic, Faerloec, Flaanaceel, Graaranic, Heael,Heoorl, Himeen, Hoorcaaarl, Iaoween, Jaoor,Laaric, Meerscaaarl, Nyaneeth, Oorlacooth,Raoeeth, Raor, Saamaneal, Soorth, Urllaanic.

\n

Noms féminins : Aaroel, Aellaarree, Aerieena,Earraa, Eeleemeena, Evearilla, Flaermeena,Flitillia, Flooressa, Galaania, Gleeemaa, Gleesinra,Haorellee, Heelestraa, Iastreena, Ieliellaa, Ifeelea,Laeesa, Lolaandrea, Loornaea, Meerceena,Nyleea, Oorea, Raoreea, Seeorea.

\n

 

\n
\n

Khansan, Liu, Tor Xian

\n
\n

Noms masculins : Bai, Chai Liu, Fei, Fen, Ji Leu, Leng, Lie Tseu, Qie, Tsai, T’sson Du, Xian Go, Ze Dong.

\n

Noms féminins : An, Chuang, Fang Yin, Hsi, Jia Len, Li Qin, Lo Siu, Ming Hui, Nia, Phu Lu, Shen, Xia, Yinyu. 

\n
\n

Lysor

\n
\n

Noms masculins : Aklaton, Bardak, Bazyli, Creon, Cyr, Dramik, Erechon, Jenko, Morgos, Myron, Otos, Skorpos, Vaston, Zedek, Zerro.

\n

Noms féminins : Adara, Alesta, Cora, Dresina, Elma, Furka, Honna, Irusina, Jace, Letha, Megara, Melika, Nirla, Timandra, Uvikka, Vara, Zeva.   

\n
\n

Malakut

\n
\n

Noms masculins : Arfi, Badar, Crixas, Darzi, Erfan,Firdos, Gilki, Jandak, Krugar, Lodar, Midum, Nakum, Purdos, Qalader, Qatir, Qorbi, Ralak, Sardan, Tamar, Zemar.

\n

Noms féminins : Adala, Azra, Bursebala, Coza, Daliya, Dua, Ethibela, Lamala, Mirvala, Norva, Qisi, Roshan, Sakina, Saran, Simi, Tala, Tikina, Wella, Xua, Zinah. 

\n
\n

Marais de Kasht

\n
\n

Noms masculins : Achak, Ahmik, Akando, Akule, Ashok, Bidi, Chepi, Chetan, Ciqala, Dogon, Goth, Hinto, Hokee, Jolon, Keme, Knoton, Kourouk, Molimo, T’kala, T’kouna.

\n

Noms féminins : Aiyana, Alawa, Atiaran, Bly, Camarin, Cathecassa, Chapala, Chimalis, Dena, Doli, Donoma, Etania, Kalama, Landina, Mitenah, Nitika, Onatah, Orenda, Z’kala, Z’kouna. 

\n
\n

Montagnes de l'Axos

\n
\n

Noms masculins : Almod, Amerik, Borc, Drogar, Erkil, Fiak, Finvar, Ginnar, Hakon, Krakar, Oslac, Rokar, Salgarth, Sungar, Thork, Thurkil, Travik, Vali, Vikar, Vogg.

\n

Noms féminins : Arlin, Asta, Birla, Dalla, Emelle, Esja, Evenni, Finna, Forla, Froda, Gevi, Glevara, Herdis, Jodis, Jofa, Klima, Runa, Rym, Sivora, Varda. 

\n
\n

Oomis

\n
\n

Noms masculins : Aceld, Algeros, Curcio, Dalmar, Deston, Kaarlo, Norf, Quent, Rust, Sevrik, Vardon, Vik.

\n

Noms féminins : Afrodille, Alix, Daisi, Dany, Delit, Jance, Jenina, Jessamin, Miette, Myrla, Questa. 

\n
\n

Parsool

\n
\n

Noms masculins : Agroc, Bardhyl, Besmir, Dar, Driton, Erion, Jaak, Jeton, Jodoc, Juhan, Kalev, Koit, Lek, Loic, Nighul, Paol, Pavo, Ropar, Skender,

\n

Toomaas.

\n

Noms féminins : Arvesa, Besa, Bora, Dritta, Eha, Genta, Kaias, Kaja, Leka, Liridona, Loviise, Marika, Mimiza, Mirjam, Reet, Riina, Rovena, Tuule, Viu, Zami.

\n
\n

Rois Sorciers

\n
\n

Noms masculins : Apuulluunideeszu, Kadash-masazz, Kiipluuu, Nigsummuzzugal, Niiqarquu-su, Shamazzad, Shudduggaat, Shu-Thuzzul, Thu-suzuu, Ugurnaszir, Vaargaxx, Xhaothigguzzar.

\n

Noms féminins : Aplazza, Arishakka, Deeme-thresu, Labashi, Puzuri, Rihatzzi, Ripaazz, Seluk-zu, Utuala, Yaattirram, Yahattizzi, Zashimbra.

\n

 

\n
\n

Satarla

\n
\n

Noms masculins : Alban, Avitus, Blasius, Brutor,  Cassian, Corvin, Crisus, Drusus, Emilian, Festus, Gallus, Gord, Hilaro, Hort, Juven, Luman, Martis, Nonus, Petron, Regul, Rufin, Sabin, Severan, Terent, Torc, Vitan.

\n

Noms féminins : Amilia, Arlana, Cassi, Cloel, Domitia, Fabula, Floriana, Gemellia, Junia, Laela, Laurenia, Manda, Marina, Nunia, Quina, Severina, Tullia, Valeria, Varinia, Vita. 

\n
\n

Shamballah, jungles

\n
\n

Noms masculins : Akri, Badran, Bello, Diallo, Donkor, Eze, Jaafar, Juma, Kamouzou, M’Boutou, M’Dogo, Nasso, Ohin, Oulan, Rasoul, Simballa,

\n

Talib, Watimou, Zareb, Zouri.

\n

Noms féminins : Afi, Bembel, Binta, Chipi, Damisi, Dayo, Elomi, Geli, Habika, Jahia, Lila, M’Lala, Panya, Sabra, Shani, Tabita, Tisha, Yousra, Zalika,Zina.

\n
\n

Steppe du Khanat,

\n

Ghataï

\n
\n

Noms masculins : Akta, Alagh, Chimeg, Gentulga, Gorgeg, Khubilaï, Mangaï, Nemtar, Subotaï, Telagu, Ulba, Zhengar.

\n

Noms féminins : Bolaarma, Enthu, Erdene, Kushi, Narrantseg, Ner, Odval, Oyunn, Setseg, Silta, Suren, Yeshe. 

\n
\n

Tyrus

\n
\n

Noms masculins : Anxo, Baldo, Bartol, Bento, Dimas, Eloy, Ericos, Gaspar, Helder, Jorg, Mogos, Nuno, Ovanto, Pluco, Qido, Raul, Rui, Tacito, Thiago, Valen.

\n

Noms féminins : Ana, Branca, Carmo, Desideria, Dorotana, Jovita, Judita, Kardelia, Lia, Lotia, Lygia, Miella, Nona, Rebeqa, Sabella, Tuvia, Uxia, Xania, Xoanna, Zeta.

\n
\n

Urceb

\n
\n

Noms masculins : Ambros, Axel, Bodo, Curd, Dolf, Egond, Falkor, Golo, Hegbran, Jonar, Kurnvarn, Londar, Lothar, Mennus, Rudig, Sepp, Till, Torsten, Urs, Volkard.

\n

Noms féminins : Alhella, Barbella, Crika, Dorlina, Erna, Frekka, Gusala, Hannelor, Jolanda, Karolinda, Letta, Lieselotte, Margita, Nadja, Pia, Resi, Seffi, Theda, Ursa, Uta.

\n
\n

Valgard

\n
\n

Noms masculins : Abrak, Ankar, Asvith, Banfar, Borkar, Broti, Craigor, Drakkar, Elkor, Fingor, Gonnar, Grimar, Hevik, Jark, Korik, Krok, Morkrar, Rokor, Thagric, Voldar. 

\n

Noms féminins : Adisa, Alvora, Asara, Berna, Brongara, Disa, Edarra, Erindis, Finnara, Fraorka, Gyllana, Hakatla, Helvera, Jarngera, Jodis, Jolinn, Kitta, Marfora, Rakela, Sesilida. 

\n
\n

Zalut

\n
\n

Noms masculins : Ariistuzuun, Ar’siuqqu, Balathu, Bashaa,Dadanuum, Hunzuu, Ikuppi,Libulluth, Nigsummu,Nikannuur, NurYunna,Nutesh, Puzzur, Rihaatu,Sargon, Suusaandar,Tattaanu, Yamazuubaar,Zorgal, Zuuthusu.

\n

Noms féminins : Amatia,Ashlultum, Banuna,Gemeti, Iltani, Ishtaya,Jaarthula, Kishu, Ku-Aya, Nidintu, Numunia,Nuteshi, Sillashu, Sumia,Thuulia, Yadidatum,Zadia, Zakiti, Zemibi,Zorkara.

\n
","folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"JournalEntry.AWN27fwX41WWQu2U"}},"_id":"Jby0gZeSdYUezH1E"} {"_id":"RY7oMQlyVpmkIDLZ","name":"Points de vilenie","content":"

Les rivaux disposent de points de vilenie, l’équivalent des points d’héroïsme des héros, qui s’utilisent de la même façon, avec quelques options supplémentaires : 

\n

Bouclier humain : un rival peut utiliser un des PNJ piétaille qui l’entourent comme « bouclier humain » pour absorber les dégâts d’une attaque. Cela fonctionne comme l’option «parade in extremis » des points d’héroïsme (cf. @JournalEntry[yOiargvrodwnCkoY]{Utiliser les points d'héroisme}).

\n

Fuite opportune : le rival parvient à s’enfuir quand les choses commencent à tourner mal pour lui :

\n

-Alors que l’attention des héros est détournée, le rival disparaît au coin d’un couloir…

\n

-Alors que les héros avancent vers le nécromancien pour en finir avec lui, il sourit et ouvre un panneau secret dans le mur par lequel il s’enfuit…

\n

-Le rival tombe d’une falaise, mais quand les héros se penchent au bord du précipice pour constater sa mort, nulle trace de son corps en contrebas…

\n

Peu importe la manière, le rival parvient à s’enfuir, pour recommencer à comploter. En combinant cette option à celle de «défier la mort », un rival peut parvenir à s’échapper même s’il semble bel et bien mort. Il doit toutefois avoir une occasion de prendre la fuite, aussi les héros doivent-ils être distraits par autre chose pour que celui-ci puisse utiliser ses points de vilenie afin d’échapper à son destin.

","folder":null,"sort":0,"permission":{"default":0,"zN9ZZg5J7XzNELjd":3},"flags":{"core":{"sourceId":"JournalEntry.OKwvpofahg0lZ4YM"}}} {"name":"Succès Héroïque","pages":[{"name":"Succès Héroïque","type":"text","_id":"kNb9ZrMbgONi1mlE","title":{"show":true,"level":1},"image":{},"text":{"format":1,"content":"

Succès héroïque

Lorsque vous obtenez un double 6 sur un jet d’action, il s’agit d’un succès héroïque. Mais vous pouvez aussi convertir un simple succès en succès héroïque par la dépense de 1 point d’héroïsme. Le résultat exact d’un succès héroïque dépend de la tâche entreprise, mais dans tous les cas le héros réussit brillamment son action.

Au combat, un succès héroïque vous permet de choisir une des options suivantes :

Carnage. Vous effectuez immédiatement une nouvelle attaque, contre le même adversaire ou contre un adversaire différent. Vous ne pouvez pas dépenser de point d’héroïsme dans le cadre de cette attaque supplémentaire.

Coup dévastateur. Vous ajoutez +6 aux dégâts.

Coup précis. Vous frappez votre ennemi à un endroit précis, dans l’intention de l’estropier afin de diminuer ses capacités. Vous déterminez les dégâts normalement et imposez à la cible un dé de malus à un type spécifique de jets d’action (en règle générale, vous voudrez affecter ses jets d’attaque, mais ce n’est pas une obligation ; un coup porté à l’œil imposera un dé de malus à tous les jets d’action faisant appel à la vue, ce qui peut inclure – ou pas– les jets d’attaque). Les autres options d’un coup précis peuvent être de trancher un tentacule ou un dard, ou d’ouvrir une large plaie dans le cuir épais d’un monstre (pour réduire la protection de la créature d’une catégorie). Vous pourrez décider avec le MJ d’autres effets similaires en fonction des circonstances.

Désarmement. Si votre adversaire a une arme en main, vous le désarmez (au lieu de lui infliger des dégâts).

Massacrer la piétaille. Si vous combattez de la piétaille, les dégâts infligés représentent le nombre d’adversaires mis hors de combat par votre assaut. Ils ne sont pas forcément morts, mais ils ne sont pas près de revenir vous affronter de sitôt.

Renversement. Vous pouvez renverser un adversaire, dont la taille peut être supérieure à la vôtre d’une catégorie au maximum. L’adversaire se retrouve à terre après avoir été repoussé de quelques pas (il ne fait pas bon combattre au bord d’une falaise !). Si le combat continue, l’adversaire qui se relève subit un dé de malus à sa prochaine action.

","markdown":""},"video":{"controls":true,"volume":0.5},"src":null,"system":{},"sort":0,"ownership":{"default":-1},"flags":{}}],"ownership":{"default":0,"P6ZGkFAFGiNJSMja":3},"flags":{"core":{"sourceId":"JournalEntry.ei7odd21BCJdQZCw"}},"_stats":{"systemId":"bol","systemVersion":"10.0.5","coreVersion":"10.283","createdTime":1662046190480,"modifiedTime":1662046226912,"lastModifiedBy":"P6ZGkFAFGiNJSMja"},"folder":null,"sort":0,"_id":"Yl1RKQb0BjVUtilk"} diff --git a/packs/effets-exemples.db b/packs/effets-exemples.db new file mode 100644 index 0000000..d0fac01 --- /dev/null +++ b/packs/effets-exemples.db @@ -0,0 +1,4 @@ +{"name":"Vigueur -1","type":"feature","img":"icons/consumables/potions/bottle-conical-corked-labeled-skull-poison-green.webp","system":{"category":null,"subtype":"boleffect","description":"","properties":{"ismalusdice":false,"bonusmalus":-2,"identifier":"system.attributes.vigor","modifier":"-1"},"rank":0},"effects":[],"flags":{"core":{"sourceId":"Item.6fTZ6hOKR4pWbWOe"}},"_stats":{"systemId":"bol","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669218607632,"modifiedTime":1669234720255,"lastModifiedBy":"kQghu0tL1dft5xLu"},"_id":"6fTZ6hOKR4pWbWOe","folder":null,"sort":0,"ownership":{"default":0,"kQghu0tL1dft5xLu":3}} +{"name":"Esprit -1","type":"feature","img":"icons/consumables/potions/bottle-conical-corked-labeled-skull-poison-green.webp","system":{"category":null,"subtype":"boleffect","description":"","properties":{"ismalusdice":false,"bonusmalus":-2,"identifier":"system.attributes.mind","modifier":"-1"},"rank":0},"effects":[],"flags":{"core":{"sourceId":"Item.6fTZ6hOKR4pWbWOe"}},"_stats":{"systemId":"bol","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669218607632,"modifiedTime":1669234720255,"lastModifiedBy":"kQghu0tL1dft5xLu"},"_id":"V2geomwPtTBnBeQW","folder":null,"sort":0,"ownership":{"default":0,"kQghu0tL1dft5xLu":3}} +{"name":"Agilité -1","type":"feature","img":"icons/consumables/potions/bottle-conical-corked-labeled-skull-poison-green.webp","system":{"category":null,"subtype":"boleffect","description":"","properties":{"ismalusdice":false,"bonusmalus":-2,"identifier":"system.attributes.agility","modifier":"-1"},"rank":0},"effects":[],"flags":{"core":{"sourceId":"Item.6fTZ6hOKR4pWbWOe"}},"_stats":{"systemId":"bol","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669218607632,"modifiedTime":1669234720255,"lastModifiedBy":"kQghu0tL1dft5xLu"},"_id":"eXPNwGQiwnIiGYaK","folder":null,"sort":0,"ownership":{"default":0,"kQghu0tL1dft5xLu":3}} +{"name":"Aura -1","type":"feature","img":"icons/consumables/potions/bottle-conical-corked-labeled-skull-poison-green.webp","system":{"category":null,"subtype":"boleffect","description":"","properties":{"ismalusdice":false,"bonusmalus":-2,"identifier":"system.attributes.appeal","modifier":"-1"},"rank":0},"effects":[],"flags":{"core":{"sourceId":"Item.6fTZ6hOKR4pWbWOe"}},"_stats":{"systemId":"bol","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669218607632,"modifiedTime":1669234720256,"lastModifiedBy":"kQghu0tL1dft5xLu"},"_id":"zwSNMO9HpiqUCMt8","folder":null,"sort":0,"ownership":{"default":0,"kQghu0tL1dft5xLu":3}} diff --git a/packs/prepaalchimiques.db b/packs/prepaalchimiques.db deleted file mode 100644 index e69de29..0000000 diff --git a/system.json b/system.json index f711591..f930bf5 100644 --- a/system.json +++ b/system.json @@ -14,7 +14,7 @@ ], "url": "https://www.uberwald.me/gitea/public/bol", "license": "LICENSE.txt", - "version": "10.3.3", + "version": "10.4.0", "compatibility": { "minimum": "10", "verified": "10", @@ -182,6 +182,15 @@ "private": false, "flags": {} }, + { + "label": "Effets - Exemples", + "type": "Item", + "name": "effets-exemples", + "path": "packs/effets-exemples.db", + "system": "bol", + "private": false, + "flags": {} + }, { "label": "Créatures", "type": "Actor", @@ -194,7 +203,7 @@ ], "socket": true, "manifest": "https://www.uberwald.me/gitea/public/bol/raw/v10/system.json", - "download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v10.3.3.zip", + "download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v10.4.0.zip", "background": "systems/images/map_lemurie.webp", "gridDistance": 1.5, "gridUnits": "m", diff --git a/templates/dialogs/alchemy-roll-dialog.hbs b/templates/dialogs/alchemy-roll-dialog.hbs index d3a0882..bfe82c2 100644 --- a/templates/dialogs/alchemy-roll-dialog.hbs +++ b/templates/dialogs/alchemy-roll-dialog.hbs @@ -35,6 +35,8 @@ {{> "systems/bol/templates/dialogs/flaws-roll-part.hbs"}} + {{> "systems/bol/templates/dialogs/effect-roll-part.hbs"}} + {{> "systems/bol/templates/dialogs/adv-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/mod-roll-part.hbs"}} diff --git a/templates/dialogs/aptitude-roll-dialog.hbs b/templates/dialogs/aptitude-roll-dialog.hbs index 3c7cc6a..1e23b9b 100644 --- a/templates/dialogs/aptitude-roll-dialog.hbs +++ b/templates/dialogs/aptitude-roll-dialog.hbs @@ -32,6 +32,8 @@ {{> "systems/bol/templates/dialogs/flaws-roll-part.hbs"}} + {{> "systems/bol/templates/dialogs/effect-roll-part.hbs"}} + {{> "systems/bol/templates/dialogs/adv-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/mod-roll-part.hbs"}} diff --git a/templates/dialogs/attribute-roll-dialog.hbs b/templates/dialogs/attribute-roll-dialog.hbs index 28ba80c..5e57a9f 100644 --- a/templates/dialogs/attribute-roll-dialog.hbs +++ b/templates/dialogs/attribute-roll-dialog.hbs @@ -16,6 +16,8 @@ {{> "systems/bol/templates/dialogs/flaws-roll-part.hbs"}} + {{> "systems/bol/templates/dialogs/effect-roll-part.hbs"}} + {{> "systems/bol/templates/dialogs/adv-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/mod-roll-part.hbs"}} diff --git a/templates/dialogs/effect-roll-part.hbs b/templates/dialogs/effect-roll-part.hbs new file mode 100644 index 0000000..3f82111 --- /dev/null +++ b/templates/dialogs/effect-roll-part.hbs @@ -0,0 +1,14 @@ + {{#if (count bolEffects)}} +
+
+ +
+
+ +
+
+ {{/if}} diff --git a/templates/dialogs/weapon-roll-dialog.hbs b/templates/dialogs/weapon-roll-dialog.hbs index 0dd9d05..20ccf5e 100644 --- a/templates/dialogs/weapon-roll-dialog.hbs +++ b/templates/dialogs/weapon-roll-dialog.hbs @@ -56,6 +56,8 @@ {{> "systems/bol/templates/dialogs/fightoptions-roll-part.hbs"}} + {{> "systems/bol/templates/dialogs/effect-roll-part.hbs"}} + {{> "systems/bol/templates/dialogs/adv-roll-part.hbs"}} {{> "systems/bol/templates/dialogs/mod-roll-part.hbs"}} diff --git a/templates/item/parts/properties/feature-properties.hbs b/templates/item/parts/properties/feature-properties.hbs index e804d6e..d991f8e 100644 --- a/templates/item/parts/properties/feature-properties.hbs +++ b/templates/item/parts/properties/feature-properties.hbs @@ -24,3 +24,6 @@ {{#if (equals item.system.subtype "flaw")}} {{> "systems/bol/templates/item/parts/properties/feature/flaw-properties.hbs"}} {{/if}} +{{#if (equals item.system.subtype "boleffect")}} + {{> "systems/bol/templates/item/parts/properties/feature/effect-properties.hbs"}} +{{/if}} diff --git a/templates/item/parts/properties/feature/effect-properties.hbs b/templates/item/parts/properties/feature/effect-properties.hbs new file mode 100644 index 0000000..d05eed1 --- /dev/null +++ b/templates/item/parts/properties/feature/effect-properties.hbs @@ -0,0 +1,27 @@ +

{{localize 'BOL.featureSubtypes.effect'}}

+ +
+ + +
+ +
+ + +