Compare commits
64 Commits
fvtt-mourn
...
main
Author | SHA1 | Date | |
---|---|---|---|
a0502dc467 | |||
c8b94b74a1 | |||
c9e4f125b4 | |||
e840b70ac9 | |||
03b8779862 | |||
580a2ccaba | |||
699dba5511 | |||
aac552102a | |||
4762dc33ac | |||
0a030460e4 | |||
ed2dc58680 | |||
9c20f277ea | |||
2a8617d781 | |||
91ad26730a | |||
e1816b3dd7 | |||
c48401a199 | |||
f487908ecd | |||
e9dc31ada1 | |||
e504427dbb | |||
6aa63f9a98 | |||
861aa19637 | |||
ddb3f9dee1 | |||
da074d6ea1 | |||
1c0c722bd0 | |||
fef42b7093 | |||
a63ec19362 | |||
a26af23c9c | |||
983bc6a2ed | |||
da6d6584c4 | |||
f08ec8eaff | |||
c34bfbf229 | |||
e7de42cf16 | |||
0f2348fec6 | |||
98ccd8fde1 | |||
fcec785f00 | |||
734945d68e | |||
33916c9ec2 | |||
dda8fee616 | |||
1730a8d390 | |||
4a0a57870c | |||
8d43ae6b6e | |||
3f91a161ab | |||
1e72eaec04 | |||
09cdd1923a | |||
fce03107b5 | |||
43183d60ea | |||
55cb3ca806 | |||
e7ed5bd02c | |||
cb74799b42 | |||
b985da2eca | |||
f23bdca66d | |||
d7387ac062 | |||
fb6463aba5 | |||
665feac605 | |||
cd1ecf1d96 | |||
ea0de0e8cd | |||
c7a1133334 | |||
8a4efaad9a | |||
7654401f37 | |||
2ee6c285ea | |||
eda51dec7f | |||
cca4383c33 | |||
dca9dab577 | |||
960f380306 |
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.history/
|
23
README.md
@ -1,4 +1,23 @@
|
||||
# fvtt-mournblade
|
||||
# Système Foundry pour Mournblade (French RPG, Titam France/Sombres Projets)
|
||||
|
||||
FoundryVTT system for Mournblade from Sombres Projets
|
||||
## EN
|
||||
|
||||
Unofficial system for Mournblade (French version from Titam France).
|
||||
|
||||
Books are mandatory to play and are available at : http://www.titam-france.fr
|
||||
|
||||
## FR
|
||||
|
||||
Système non-officiel pour le JDR Mournblade (Titam France).
|
||||
|
||||
Ce système a été autorisé par Le Département des Sombres Projets, merci à eux !
|
||||
|
||||
Les livres du jeu sont nécessaires pour jouer, et sont disponibles ici : http://www.titam-france.fr
|
||||
|
||||
# Credits
|
||||
|
||||
Mournblade, le jeu de rôle de Sword & Sorcery, is a property of Titam France/Sombres Projets.
|
||||
|
||||
# Developmement
|
||||
|
||||
LeRatierBretonnien
|
||||
|
BIN
assets/fonts/CentaurMT.otf
Normal file
BIN
assets/fonts/Chaparral Pro Regular.ttf
Normal file
BIN
assets/fonts/CharlemagneStd-Bold.otf
Normal file
BIN
assets/icons/adresse.webp
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
assets/icons/arme.webp
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
assets/icons/bonneaventure.webp
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
assets/icons/capacite.webp
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
assets/icons/clairvoyance.webp
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
assets/icons/competence.webp
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
assets/icons/don.webp
Normal file
After Width: | Height: | Size: 9.3 KiB |
BIN
assets/icons/eclat.webp
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
assets/icons/equipement.webp
Normal file
After Width: | Height: | Size: 6.5 KiB |
BIN
assets/icons/heritage.webp
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
assets/icons/monnaie.webp
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
assets/icons/origine.webp
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
assets/icons/pacte.webp
Normal file
After Width: | Height: | Size: 8.9 KiB |
BIN
assets/icons/predilection.webp
Normal file
After Width: | Height: | Size: 6.9 KiB |
BIN
assets/icons/presence.webp
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
assets/icons/profession.webp
Normal file
After Width: | Height: | Size: 7.1 KiB |
BIN
assets/icons/protection.webp
Normal file
After Width: | Height: | Size: 6.1 KiB |
BIN
assets/icons/puissance.webp
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
assets/icons/rune.webp
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
assets/icons/tendance.webp
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
assets/icons/traitchaotique.webp
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
assets/icons/trempe.webp
Normal file
After Width: | Height: | Size: 8.2 KiB |
BIN
assets/tokens/token_chaos.webp
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
assets/tokens/token_chaos2.webp
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
assets/tokens/token_chaos3.webp
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
assets/tokens/token_loi.webp
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
assets/tokens/token_loi2.webp
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
assets/tokens/token_loi3.webp
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
assets/tokens/token_loi4.webp
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
assets/ui/fond_mournblade.webp
Normal file
After Width: | Height: | Size: 236 KiB |
BIN
assets/ui/landing_page_mournblade.webp
Normal file
After Width: | Height: | Size: 380 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 11 KiB |
201
lang/en.json
Normal file
@ -0,0 +1,201 @@
|
||||
{
|
||||
"Adresse": "Agility",
|
||||
"Clairvoyance": "Clarity",
|
||||
"MNBL.abilities": "Gifts/Pacts",
|
||||
"MNBL.activatedrunes": "Activated Runes",
|
||||
"MNBL.addpredilection": "Add a specialization",
|
||||
"MNBL.aimingbonus": "Aiming Bonus",
|
||||
"MNBL.alignement": "Alignment",
|
||||
"MNBL.all": "All",
|
||||
"MNBL.allegiance": "Allegiance",
|
||||
"MNBL.applydamage": "Apply damage/bonus/penalty",
|
||||
"MNBL.aspect": "Aspect",
|
||||
"MNBL.Assaut": "Smite",
|
||||
"MNBL.attack": "Attack",
|
||||
"MNBL.attackcapacity": "Offensive Ability",
|
||||
"MNBL.attackmountbonus": "Mounted attacker vs ground defender (+5)",
|
||||
"MNBL.attacks": "Attacks",
|
||||
"MNBL.attribut": "Attribute",
|
||||
"MNBL.attributes": "Attributes",
|
||||
"MNBL.automalus": "Auto Penalty",
|
||||
"MNBL.base": "Base",
|
||||
"MNBL.beastslords": "Beast Lords",
|
||||
"MNBL.bio": "Bio & Notes",
|
||||
"MNBL.bonus": "Bonus",
|
||||
"MNBL.candoublebonusskill": "Bonuses can be doubled (cf. Profession)",
|
||||
"MNBL.chaos": "Chaos",
|
||||
"MNBL.chaotictraits": "Chaotic Traits",
|
||||
"MNBL.charge": "Charge",
|
||||
"MNBL.consumed": "Consumed",
|
||||
"MNBL.contain": "Contain the opponent",
|
||||
"MNBL.creatureresourcecost": "Resource Cost (creatures)",
|
||||
"MNBL.current": "Current",
|
||||
"MNBL.currentmax": "Current Max",
|
||||
"MNBL.damage": "Damage",
|
||||
"MNBL.damagebonus": "Damage Bonus",
|
||||
"MNBL.defense": "Defense",
|
||||
"MNBL.defensebonus": "Defense Bonus",
|
||||
"MNBL.defensecapacity": "Defensive Ability",
|
||||
"MNBL.dice": "Dice",
|
||||
"MNBL.difficulty": "Difficulty",
|
||||
"MNBL.dirtyattack": "Cheap Shot",
|
||||
"MNBL.disadvantagepositions": "Disadvantageous positions (Max bonus +15)",
|
||||
"MNBL.disarm": "Disarm",
|
||||
"MNBL.doubleD20": "Double d20 (1 Shard Point)",
|
||||
"MNBL.dramaticfailure": "Dramatic Failure",
|
||||
"MNBL.duration": "Duration",
|
||||
"MNBL.easy": "Easy (5)",
|
||||
"MNBL.eclat": "Shard",
|
||||
"MNBL.elementslords": "Elemental Lords",
|
||||
"MNBL.equipmentactions": "Equipment/Actions",
|
||||
"MNBL.equipments": "Equipments",
|
||||
"MNBL.equipped": "Equipped",
|
||||
"MNBL.exp": "Experience",
|
||||
"MNBL.eyes": "Eyes",
|
||||
"MNBL.failure": "Failure",
|
||||
"MNBL.feint": "Feint",
|
||||
"MNBL.flee": "Flee",
|
||||
"MNBL.formula": "Formula",
|
||||
"MNBL.genre": "Gender",
|
||||
"MNBL.gifts": "Gifts",
|
||||
"MNBL.goodadventure": "Good Adventure",
|
||||
"MNBL.hair": "Hair",
|
||||
"MNBL.hard": "Hard (15)",
|
||||
"MNBL.hascover": "Cover",
|
||||
"MNBL.hazardous": "Tricky (20)",
|
||||
"MNBL.health": "Health",
|
||||
"MNBL.healthmalus": "Health Penalty",
|
||||
"MNBL.heavycover": "Almost complete (-10)",
|
||||
"MNBL.heroicsuccess": "Heroic Success",
|
||||
"MNBL.highlanguage": "High Melnibonéan",
|
||||
"MNBL.ignorearmor": "Ignore Armor",
|
||||
"MNBL.ignorehealthmalus": "Ignore Health Penalty",
|
||||
"MNBL.ignoresoulmalus": "Ignore Soul Penalty",
|
||||
"MNBL.immobilize": "Immobilize",
|
||||
"MNBL.insane": "Ridiculous (25)",
|
||||
"MNBL.isdefense": "Defensive",
|
||||
"MNBL.knockout": "Knock Out",
|
||||
"MNBL.law": "Law",
|
||||
"MNBL.legacy": "Legacy",
|
||||
"MNBL.lessthanshort": "Less than short (10)",
|
||||
"MNBL.lethal": "Lethal",
|
||||
"MNBL.level": "Level",
|
||||
"MNBL.lightcover": "Buckler or light (-2)",
|
||||
"MNBL.longmore": "Long and more (25)",
|
||||
"MNBL.longrange": "Long Range",
|
||||
"MNBL.malus": "Penalty",
|
||||
"MNBL.margin": "Margin",
|
||||
"MNBL.medium": "Average (10)",
|
||||
"MNBL.mediumcover": "Pavise or half (-5)",
|
||||
"MNBL.mediummore": "Medium and more (20)",
|
||||
"MNBL.mediumrange": "Medium Range",
|
||||
"MNBL.meleethrowweapon": "Melee and Throwing Weapon",
|
||||
"MNBL.meleeweapon": "Melee Weapon",
|
||||
"MNBL.mode": "Mode",
|
||||
"MNBL.modifier": "Modifiers",
|
||||
"MNBL.modifiertype": "Modifier Type",
|
||||
"MNBL.mounted": "Mounted",
|
||||
"MNBL.nextactionmalus": "Penalty for next action",
|
||||
"MNBL.nextattackbonus": "Bonus for next attack",
|
||||
"MNBL.none": "None",
|
||||
"MNBL.noneunknwon": "None/Unknown",
|
||||
"MNBL.nonlethal": "Non-Lethal",
|
||||
"MNBL.nonlethaldamage": "Non-Lethal Damage",
|
||||
"MNBL.notarget": "No designated target",
|
||||
"MNBL.origin": "Origin",
|
||||
"MNBL.pacts": "Pacts",
|
||||
"MNBL.points": "Points",
|
||||
"MNBL.preciseattack": "Precision Attack",
|
||||
"MNBL.predilections": "Specializations",
|
||||
"MNBL.preferredhand": "Preferred Hand",
|
||||
"MNBL.prerequisites": "Prerequisites",
|
||||
"MNBL.price": "Price",
|
||||
"MNBL.profession": "Profession",
|
||||
"MNBL.pronounced": "Spoken",
|
||||
"MNBL.pronouncedrune": "Spoken Rune",
|
||||
"MNBL.pronouncerune": "Speak the rune",
|
||||
"MNBL.protections": "Protections",
|
||||
"MNBL.puremadness": "Insane (30)",
|
||||
"MNBL.quantity": "Quantity",
|
||||
"MNBL.range": "Range",
|
||||
"MNBL.rarity": "Rarity",
|
||||
"MNBL.registeredmodifiers": "Registered Modifiers",
|
||||
"MNBL.reloadduration": "Reload Time",
|
||||
"MNBL.ressources": "Resources",
|
||||
"MNBL.roll": "Roll",
|
||||
"MNBL.runes": "Runes",
|
||||
"MNBL.runningtarget": "Running target (-5/-10 depending on range)",
|
||||
"MNBL.shootmodifier": "Shooting Modifiers",
|
||||
"MNBL.shootweapon": "Shoot Weapon",
|
||||
"MNBL.shortmore": "Short and more (10)",
|
||||
"MNBL.shortrange": "Short Range",
|
||||
"MNBL.size": "Size",
|
||||
"MNBL.skill": "Skill",
|
||||
"MNBL.skills": "Skills",
|
||||
"MNBL.smallroomtarget": "Target in confined space (+5)",
|
||||
"MNBL.soul": "Soul",
|
||||
"MNBL.soulmalus": "Soul Penalty",
|
||||
"MNBL.soulmultiplier": "Soul Multiplier",
|
||||
"MNBL.soulpoints": "Soul Points",
|
||||
"MNBL.specialactions": "Special Actions",
|
||||
"MNBL.specialweapon": "Special (ability/gift)",
|
||||
"MNBL.speciestrait": "Species Trait",
|
||||
"MNBL.speed": "Speed",
|
||||
"MNBL.success": "Success",
|
||||
"MNBL.target": "Target",
|
||||
"MNBL.targetbelow": "Target below (+5)",
|
||||
"MNBL.targetcantmove": "Target immobilized (+5)",
|
||||
"MNBL.targetdefense": "Opponent's Defense",
|
||||
"MNBL.targetground": "Target on the ground (+5)",
|
||||
"MNBL.targetseeshoot": "Target is aware of the shot",
|
||||
"MNBL.tendancies": "Tendencies",
|
||||
"MNBL.throwweapon": "Throwing Weapon",
|
||||
"MNBL.totalprotection": "Total Protection",
|
||||
"MNBL.traced": "Written",
|
||||
"MNBL.tracedrune": "Written Rune",
|
||||
"MNBL.tracerune": "Write the rune",
|
||||
"MNBL.treasuremoney": "Treasures and Money",
|
||||
"MNBL.twohands": "Two-handed",
|
||||
"MNBL.type": "Type",
|
||||
"MNBL.unarmedtarget": "Unarmed target (+5)",
|
||||
"MNBL.unit": "Unit",
|
||||
"MNBL.use": "Use",
|
||||
"MNBL.usedpredilection": "Used Predilection",
|
||||
"MNBL.value": "Value",
|
||||
"MNBL.weapon": "Weapon",
|
||||
"MNBL.weaponbonusattack": "Handling Bonus (offensive)",
|
||||
"MNBL.weaponbonusdefense": "Handling Bonus (defensive)",
|
||||
"MNBL.weapons": "Weapons",
|
||||
"MNBL.weaponscapacities": "Weapons/Abilities",
|
||||
"MNBL.weapontype": "Weapon Type",
|
||||
"MNBL.weight": "Weight",
|
||||
"Présence": "Presence",
|
||||
"Puissance": "Might",
|
||||
"Trempe": "Mettle",
|
||||
"TYPES": {
|
||||
"Actor": {
|
||||
"creature": "Creature",
|
||||
"personnage": "Character"
|
||||
},
|
||||
"Item": {
|
||||
"arme": "Weapon",
|
||||
"bouclier": "Shield",
|
||||
"capacite": "Ability",
|
||||
"competence": "Skill",
|
||||
"don": "Gifts",
|
||||
"equipement": "Equipment",
|
||||
"heritage": "Background",
|
||||
"metier": "Profession",
|
||||
"modifier": "Modifier",
|
||||
"monnaie": "Currency",
|
||||
"origine": "Origin",
|
||||
"pacte": "Pacts",
|
||||
"protection": "Protections",
|
||||
"rune": "Rune",
|
||||
"runeeffect": "Rune Effect",
|
||||
"tendance": "Signs of Chaos",
|
||||
"traitchaotique": "Background",
|
||||
"traitespece": "Species Trait"
|
||||
}
|
||||
}
|
||||
}
|
218
lang/fr.json
Normal file
@ -0,0 +1,218 @@
|
||||
{
|
||||
"TYPES": {
|
||||
"Actor": {
|
||||
"personnage": "Personnage",
|
||||
"creature": "Créature"
|
||||
},
|
||||
"Item": {
|
||||
"arme": "Arme",
|
||||
"competence": "Compétence",
|
||||
"protection": "Protection",
|
||||
"pacte": "Pacte",
|
||||
"traitchaotique": "Trait Chaotique",
|
||||
"monnaie": "Monnaie",
|
||||
"don": "Don",
|
||||
"tendance": "Tendance",
|
||||
"rune": "Rune",
|
||||
"equipement": "Equipement",
|
||||
"capacite": "Capacité",
|
||||
"origine": "Origine",
|
||||
"heritage": "Héritage",
|
||||
"metier": "Métier",
|
||||
"runeeffect": "Effet de Rune",
|
||||
"bouclier": "Bouclier",
|
||||
"modifier": "Modificateur",
|
||||
"traitespece": "Trait d'Espèce"
|
||||
}
|
||||
},
|
||||
"Adresse": "Adresse",
|
||||
"Puissance": "Puissance",
|
||||
"Clairvoyance": "Clairvoyance",
|
||||
"Présence": "Présence",
|
||||
"Trempe": "Trempe",
|
||||
|
||||
"MNBL.assaut": "Assaut",
|
||||
"MNBL.preciseattack": "Attaque Précise",
|
||||
"MNBL.feint": "Feinte",
|
||||
"MNBL.dirtyattack": "Coup Bas",
|
||||
"MNBL.charge": "Charger",
|
||||
"MNBL.contain": "Contenir l'adversaire",
|
||||
"MNBL.disarm": "Désarmer",
|
||||
|
||||
"MNBL.none": "Aucun",
|
||||
"MNBL.lightcover": "Rondache ou léger (-2)",
|
||||
"MNBL.mediumcover": "Pavois ou à moitié (-5)",
|
||||
"MNBL.heavycover": "Quasi complet (-10)",
|
||||
"MNBL.roll": "Jet",
|
||||
"MNBL.defensecapacity": "Capacité défensive",
|
||||
"MNBL.attackcapacity": "Capacité offensive",
|
||||
|
||||
"MNBL.lessthanshort": "Moins que courte (10)",
|
||||
"MNBL.shortmore": "Courte et + (10)",
|
||||
"MNBL.mediummore": "Moyenne et + (20)",
|
||||
"MNBL.longmore": "Longue et + (25)",
|
||||
|
||||
"MNBL.noneunknwon": "Aucune/Inconnue",
|
||||
"MNBL.easy": "Facile (5)",
|
||||
"MNBL.medium": "Moyenne (10)",
|
||||
"MNBL.hard": "Ardue (15)",
|
||||
"MNBL.hazardous": "Hasardeuse (20)",
|
||||
"MNBL.insane": "Insensée (25)",
|
||||
"MNBL.puremadness": "Pure Folie (30)",
|
||||
|
||||
"MNBL.pronouncerune": "Prononcer la rune",
|
||||
"MNBL.tracerune": "Tracer la rune",
|
||||
"MNBL.pronounced": "Prononcée",
|
||||
"MNBL.traced": "Tracée",
|
||||
|
||||
"MNBL.meleeweapon": "Arme de contact",
|
||||
"MNBL.meleethrowweapon": "Arme de contact et de Jet",
|
||||
"MNBL.throwweapon": "Arme de Lancer",
|
||||
"MNBL.shootweapon": "Arme de Tir",
|
||||
"MNBL.specialweapon": "Spécial (capacité/don)",
|
||||
|
||||
"MNBL.all": "Tous",
|
||||
"MNBL.beastslords": "Seigneurs des Bêtes",
|
||||
"MNBL.elementslords": "Seigneurs Elementaires",
|
||||
|
||||
"MNBL.law": "Loi",
|
||||
"MNBL.chaos": "Chaos",
|
||||
"MNBL.level": "Niveau",
|
||||
"MNBL.points": "Points",
|
||||
"MNBL.aspect": "Aspect",
|
||||
"MNBL.margin": "Marge",
|
||||
"MNBL.goodadventure" : "Bonne Aventure",
|
||||
"MNBL.base": "Base",
|
||||
"MNBL.current": "Actuelle",
|
||||
"MNBL.alignement" : "Alignement",
|
||||
"MNBL.eclat": "Eclat",
|
||||
"MNBL.exp": "Expérience",
|
||||
"MNBL.attributes": "Attributs",
|
||||
"MNBL.skills": "Compétences",
|
||||
"MNBL.abilities": "Dons/Pactes",
|
||||
"MNBL.equipmentactions": "Equipements/Actions",
|
||||
"MNBL.bio": "Bio&Notes",
|
||||
"MNBL.health": "Santé",
|
||||
"MNBL.bonus": "Bonus",
|
||||
"MNBL.malus": "Malus",
|
||||
"MNBL.nonlethal": "Non Létaux",
|
||||
"MNBL.lethal": "Létaux",
|
||||
"MNBL.automalus" : "Malus Auto",
|
||||
"MNBL.soul": "Ame",
|
||||
"MNBL.currentmax": "Max Actuel",
|
||||
"MNBL.consumed": "Consommé",
|
||||
"MNBL.damagebonus": "B. Dégats",
|
||||
"MNBL.speed": "Vitesse",
|
||||
"MNBL.defense": "Défense",
|
||||
"MNBL.totalprotection": "Protection Totale",
|
||||
"MNBL.modifier": "Modificateurs",
|
||||
"MNBL.type": "Type",
|
||||
"MNBL.value": "Valeur",
|
||||
"MNBL.gifts": "Dons",
|
||||
"MNBL.allegiance": "Allégeance",
|
||||
"MNBL.pacts": "Pactes",
|
||||
"MNBL.runes": "Runes",
|
||||
"MNBL.highlanguage": "Haut Parler",
|
||||
"MNBL.difficulty": "Difficulté",
|
||||
"MNBL.tendancies": "Tendances",
|
||||
"MNBL.chaotictraits": "Traits Chaotique",
|
||||
"MNBL.activatedrunes": "Runes actives",
|
||||
"MNBL.mode": "Mode",
|
||||
"MNBL.duration": "Durée",
|
||||
"MNBL.treasuremoney": "Richesses et Argent",
|
||||
"MNBL.quantity": "Quantité",
|
||||
"MNBL.unit": "Unité",
|
||||
"MNBL.specialactions": "Actions spéciales",
|
||||
"MNBL.knockout": "Assomer",
|
||||
"MNBL.flee": "Fuir",
|
||||
"MNBL.immobilize": "Immobiliser",
|
||||
"MNBL.mounted": "Monté",
|
||||
"MNBL.weapons": "Armes",
|
||||
"MNBL.attack": "Attaque",
|
||||
"MNBL.damage": "Dégats",
|
||||
"MNBL.protections": "Protections",
|
||||
"MNBL.equipments": "Equipements",
|
||||
"MNBL.equipment": "Equipement",
|
||||
"MNBL.origin": "Origine",
|
||||
"MNBL.legacy": "Héritage",
|
||||
"MNBL.profession": "Métier",
|
||||
"MNBL.genre": "Genre",
|
||||
"MNBL.size": "Taille",
|
||||
"MNBL.hair": "Cheveux",
|
||||
"MNBL.eyes": "Yeux",
|
||||
"MNBL.preferredhand": "Main Préférée",
|
||||
"MNBL.weight": "Weight",
|
||||
"MNBL.soulmultiplier": "Multiplicateur d'âme",
|
||||
"MNBL.ignorehealthmalus": "Ignore le malus de santé",
|
||||
"MNBL.ignoresoulmalus": "Ignore le malus d'âme",
|
||||
|
||||
"MNBL.weapon": "Arme",
|
||||
"MNBL.nextattackbonus": "Bonus pour prochaine attaque",
|
||||
"MNBL.nextactionmalus": "Malus au défenseur pour prochaine action",
|
||||
"MNBL.applydamage": "Appliquer les dégats/bonus/malus",
|
||||
"MNBL.attribut": "Attribut",
|
||||
"MNBL.skill": "Compétence",
|
||||
"MNBL.target": "Cible",
|
||||
"MNBL.usedpredilection": "Prédilection utilisée",
|
||||
"MNBL.soulpoints": "Points d'âme",
|
||||
"MNBL.formula": "Formule",
|
||||
"MNBL.dice":"Dé",
|
||||
"MNBL.success": "Succés",
|
||||
"MNBL.failure": "Echec",
|
||||
"MNBL.heroicsuccess": "Succés Héroïque",
|
||||
"MNBL.dramaticfailure": "Echec Dramatique",
|
||||
|
||||
"MNBL.attackmountbonus": "Attaquant monté vs def. au sol (+5)",
|
||||
"MNBL.targetdefense": "Défense adversaire",
|
||||
"MNBL.shootmodifier": "Modificateurs de Tir",
|
||||
"MNBL.aimingbonus": "Bonus de visée",
|
||||
"MNBL.targetseeshoot": "La cible est consciente du tir",
|
||||
"MNBL.notarget": "Pas de cible désignée",
|
||||
"MNBL.runningtarget": "La cible court (-5/-10 selon portée)",
|
||||
"MNBL.hascover": "Couvert",
|
||||
"MNBL.range": "Portée",
|
||||
"MNBL.disadvantagepositions": "Positions désavantageuses (Bonus max +15)",
|
||||
"MNBL.targetground": "Cible au sol (+5)",
|
||||
"MNBL.unarmedtarget": "Cible désarmée (+5)",
|
||||
"MNBL.smallroomtarget": "Cible en espace restreint (+5)",
|
||||
"MNBL.targetcantmove": "Cible immobilisée (+5)",
|
||||
"MNBL.targetbelow": "Cible surplombée (+5)",
|
||||
"MNBL.healthmalus": "Malus de santé",
|
||||
"MNBL.soulmalus": "Malus d'âme",
|
||||
"MNBL.registeredmodifiers": "Modificateurs enregistrés",
|
||||
"MNBL.doubleD20": "Doubler le d20 (1 Point d'Eclat)",
|
||||
|
||||
"MNBL.pronouncedrune": "Rune prononcée",
|
||||
"MNBL.tracedrune": "Rune tracée",
|
||||
"MNBL.equipped": "Equipé",
|
||||
"MNBL.rarity": "Rareté",
|
||||
"MNBL.price": "Prix",
|
||||
"MNBL.modifiertype": "Type de modificateur",
|
||||
"MNBL.prerequisites": "Prérequis",
|
||||
"MNBL.predilections": "Prédilections",
|
||||
"MNBL.candoublebonusskill": "Les bonus de Bonne Aventure et d'Eclat peuvent être doublés (cf. Métier)",
|
||||
"MNBL.addpredilection": "Ajouter une prédilection",
|
||||
"MNBL.defensebonus": "Bonus de défense",
|
||||
"MNBL.nonlethaldamage": "Dégâts non létaux",
|
||||
"MNBL.weapontype": "Type d'arme",
|
||||
"MNBL.weaponbonusattack": "Bonus de maniement (offensif)",
|
||||
"MNBL.weaponbonusdefense": "Bonus de maniement (défensif)",
|
||||
"MNBL.isdefense": "Défensive",
|
||||
"MNBL.twohands": "A deux mains",
|
||||
"MNBL.ignorearmor": "Ignore l'armure",
|
||||
"MNBL.creatureresourcecost": "Cout en Ressources (créatures)",
|
||||
"MNBL.shortrange": "Portée courte",
|
||||
"MNBL.mediumrange":"Portée moyenne",
|
||||
"MNBL.longrange":"Portée longue",
|
||||
"MNBL.reloadduration": "Temps de rechargement",
|
||||
"MNBL.attacks": "Attaques",
|
||||
"MNBL.ressources": "Ressources",
|
||||
"MNBL.weaponscapacities": "Armes/Capacités",
|
||||
"MNBL.use": "Utiliser",
|
||||
"MNBL.speciestrait": "Trait d'espèce",
|
||||
|
||||
"MNBL.attribute": "Attribut",
|
||||
"MNBL.Protections": "Protections",
|
||||
"MNBL.rune": "Rune"
|
||||
|
||||
}
|
@ -7,12 +7,12 @@ import { MournbladeUtility } from "./mournblade-utility.js";
|
||||
import { MournbladeRollDialog } from "./mournblade-roll-dialog.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class MournbladeActorSheet extends ActorSheet {
|
||||
export class MournbladeActorSheet extends foundry.appv1.sheets.ActorSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-mournblade", "sheet", "actor"],
|
||||
template: "systems/fvtt-mournblade/templates/actor-sheet.html",
|
||||
width: 640,
|
||||
@ -25,9 +25,8 @@ export class MournbladeActorSheet extends ActorSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = MournbladeUtility.data(this.object);
|
||||
|
||||
let actorData = duplicate(MournbladeUtility.templateData(this.object));
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
let actorData = objectData
|
||||
|
||||
let formData = {
|
||||
title: this.title,
|
||||
@ -37,12 +36,34 @@ export class MournbladeActorSheet extends ActorSheet {
|
||||
name: objectData.name,
|
||||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
data: actorData,
|
||||
data: actorData.system,
|
||||
effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)),
|
||||
limited: this.object.limited,
|
||||
weapons: duplicate(this.actor.getWeapons()),
|
||||
armors: duplicate(this.actor.getArmors()),
|
||||
//equipments: duplicate(this.actor.getEquipments()),
|
||||
skills: this.actor.getSkills(),
|
||||
armes: foundry.utils.duplicate(this.actor.getWeapons()),
|
||||
protections: foundry.utils.duplicate(this.actor.getArmors()),
|
||||
dons: foundry.utils.duplicate(this.actor.getDons()),
|
||||
pactes: foundry.utils.duplicate(this.actor.getPactes()),
|
||||
alignement: this.actor.getAlignement(),
|
||||
aspect: this.actor.getAspect(),
|
||||
marge: this.actor.getMarge(),
|
||||
tendances:foundry.utils.duplicate(this.actor.getTendances()),
|
||||
runes:foundry.utils.duplicate(this.actor.getRunes()),
|
||||
traitsChaotiques:foundry.utils.duplicate(this.actor.getTraitsChaotiques()),
|
||||
traitsEspeces: foundry.utils.duplicate(this.actor.getTraitsEspeces()),
|
||||
origine: foundry.utils.duplicate(this.actor.getOrigine() || {}),
|
||||
heritage: foundry.utils.duplicate(this.actor.getHeritage() || {}),
|
||||
metier: foundry.utils.duplicate(this.actor.getMetier() || {}),
|
||||
combat: this.actor.getCombatValues(),
|
||||
equipements: foundry.utils.duplicate(this.actor.getEquipments()),
|
||||
modifiers: foundry.utils.duplicate(this.actor.getModifiers()),
|
||||
monnaies: foundry.utils.duplicate(this.actor.getMonnaies()),
|
||||
runeEffects: foundry.utils.duplicate(this.actor.getRuneEffects()),
|
||||
config: game.system.mournblade.config,
|
||||
protectionTotal: this.actor.getProtectionTotal(),
|
||||
santeMalus: this.actor.getStatusMalus(),
|
||||
ameMalus: this.actor.getAmeMalus(),
|
||||
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.biodata.description, {async: true}),
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
editScore: this.options.editScore,
|
||||
@ -54,7 +75,7 @@ export class MournbladeActorSheet extends ActorSheet {
|
||||
return formData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
activateListeners(html) {
|
||||
@ -62,82 +83,29 @@ export class MournbladeActorSheet extends ActorSheet {
|
||||
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) return;
|
||||
|
||||
html.bind("keydown", function(e) { // Ignore Enter in actores sheet
|
||||
if (e.keyCode === 13) return false;
|
||||
});
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
let itemId = li.data("item-id");
|
||||
const item = this.actor.items.get( itemId );
|
||||
item.sheet.render(true);
|
||||
});
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let itemId = li.data("item-id")
|
||||
const item = this.actor.items.get( itemId )
|
||||
item.sheet.render(true)
|
||||
})
|
||||
// Delete Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
MournbladeUtility.confirmDelete(this, li);
|
||||
});
|
||||
|
||||
html.find('.spec-group-activate').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
let itemId = li.data("item-id");
|
||||
this.actor.specPowerActivate( itemId)
|
||||
});
|
||||
html.find('.spec-group-deactivate').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
let itemId = li.data("item-id");
|
||||
this.actor.specPowerDeactivate( itemId)
|
||||
});
|
||||
|
||||
html.find('.equip-activate').click(ev => {
|
||||
})
|
||||
html.find('.edit-item-data').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let itemId = li.data("item-id")
|
||||
this.actor.equipActivate( itemId)
|
||||
});
|
||||
html.find('.equip-deactivate').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let itemId = li.data("item-id")
|
||||
this.actor.equipDeactivate( itemId)
|
||||
});
|
||||
let itemId = li.data("item-id")
|
||||
let itemType = li.data("item-type")
|
||||
let itemField = $(ev.currentTarget).data("item-field")
|
||||
let dataType = $(ev.currentTarget).data("dtype")
|
||||
let value = ev.currentTarget.value
|
||||
this.actor.editItemField(itemId, itemType, itemField, dataType, value)
|
||||
})
|
||||
|
||||
html.find('.effect-used').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
let itemId = li.data("item-id");
|
||||
this.actor.perkEffectUsed( itemId)
|
||||
});
|
||||
|
||||
html.find('.perk-status').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
let itemId = li.data("item-id");
|
||||
this.actor.updatePerkStatus( itemId, ev.currentTarget.value)
|
||||
});
|
||||
html.find('.power-cost-spent').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
let itemId = li.data("item-id");
|
||||
this.actor.updatePowerSpentCost( itemId, ev.currentTarget.value)
|
||||
});
|
||||
html.find('.perk-used').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let itemId = li.data("item-id")
|
||||
let index = Number($(ev.currentTarget).data("use-index") )
|
||||
this.actor.updatePerkUsed( itemId, index, ev.currentTarget.checked )
|
||||
});
|
||||
|
||||
html.find('.subactor-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
let actorId = li.data("actor-id");
|
||||
let actor = game.actors.get( actorId );
|
||||
actor.sheet.render(true);
|
||||
});
|
||||
|
||||
html.find('.subactor-delete').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
let actorId = li.data("actor-id");
|
||||
this.actor.delSubActor(actorId);
|
||||
});
|
||||
|
||||
html.find('.quantity-minus').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
this.actor.incDecQuantity( li.data("item-id"), -1 );
|
||||
@ -147,112 +115,79 @@ export class MournbladeActorSheet extends ActorSheet {
|
||||
this.actor.incDecQuantity( li.data("item-id"), +1 );
|
||||
} );
|
||||
|
||||
html.find('.unarmed-attack').click((event) => {
|
||||
this.actor.rollUnarmedAttack();
|
||||
});
|
||||
html.find('.generic-pool-roll').click((event) => {
|
||||
this.openGenericRoll()
|
||||
} );
|
||||
html.find('.attack-melee').click((event) => {
|
||||
this.actor.rollPool( 'com');
|
||||
});
|
||||
html.find('.attack-ranged').click((event) => {
|
||||
this.actor.rollPool( 'agi');
|
||||
});
|
||||
html.find('.defense-roll').click((event) => {
|
||||
this.actor.rollPool( 'def', true);
|
||||
});
|
||||
html.find('.damage-melee').click((event) => {
|
||||
this.actor.rollPool( 'str');
|
||||
});
|
||||
html.find('.damage-ranged').click((event) => {
|
||||
this.actor.rollPool( 'per');
|
||||
});
|
||||
html.find('.damage-resistance').click((event) => {
|
||||
this.actor.rollPool( 'phy');
|
||||
});
|
||||
|
||||
html.find('.roll-stat').click((event) => {
|
||||
const statId = $(event.currentTarget).data("stat-key");
|
||||
this.actor.rollStat(statId);
|
||||
});
|
||||
html.find('.roll-mr').click((event) => {
|
||||
this.actor.rollMR();
|
||||
});
|
||||
|
||||
html.find('.roll-spec').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
const specId = li.data("item-id");
|
||||
this.actor.rollSpec(specId);
|
||||
});
|
||||
html.find('.power-roll').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
const powerId = li.data("item-id");
|
||||
this.actor.rollPower(powerId);
|
||||
});
|
||||
html.find('.weapon-roll').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
const weaponId = li.data("item-id");
|
||||
this.actor.rollWeapon(weaponId);
|
||||
});
|
||||
html.find('.armor-roll').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
const armorId = li.data("item-id");
|
||||
this.actor.rollArmor(armorId);
|
||||
});
|
||||
|
||||
html.find('.weapon-damage-roll').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
const weaponId = li.data("item-id");
|
||||
this.actor.rollWeapon(weaponId, true);
|
||||
});
|
||||
|
||||
html.find('.weapon-damage').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
const weapon = this.actor.getOwnedItem(li.data("item-id"));
|
||||
this.actor.rollDamage(weapon, 'damage');
|
||||
});
|
||||
|
||||
html.find('.roll-attribut').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let attrKey = li.data("attr-key")
|
||||
this.actor.rollAttribut(attrKey)
|
||||
})
|
||||
html.find('.roll-competence').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let attrKey = $(event.currentTarget).data("attr-key")
|
||||
let compId = li.data("item-id")
|
||||
this.actor.rollCompetence(attrKey, compId)
|
||||
})
|
||||
html.find('.roll-rune').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let runeId = li.data("item-id")
|
||||
this.actor.rollRune(runeId)
|
||||
})
|
||||
html.find('.roll-arme-offensif').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let armeId = li.data("item-id")
|
||||
this.actor.rollArmeOffensif(armeId)
|
||||
})
|
||||
html.find('.roll-assomer').click((event) => {
|
||||
this.actor.rollAssomer()
|
||||
})
|
||||
html.find('.roll-fuir').click((event) => {
|
||||
this.actor.rollFuir()
|
||||
})
|
||||
html.find('.roll-immobiliser').click((event) => {
|
||||
this.actor.rollImmobiliser()
|
||||
})
|
||||
html.find('.roll-arme-special').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let armeId = li.data("item-id")
|
||||
this.actor.rollArmeSpecial(armeId)
|
||||
})
|
||||
|
||||
html.find('.roll-arme-degats').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
let armeId = li.data("item-id")
|
||||
this.actor.rollArmeDegats(armeId)
|
||||
})
|
||||
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('.item-add').click((event) => {
|
||||
const itemType = $(event.currentTarget).data("type")
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true })
|
||||
})
|
||||
html.find('.sante-modify').click((event) => {
|
||||
const santeType = $(event.currentTarget).data("type")
|
||||
const value = $(event.currentTarget).data("value")
|
||||
this.actor.incDecSante(santeType, value, false)
|
||||
})
|
||||
html.find('.ame-modify').click((event) => {
|
||||
const value = $(event.currentTarget).data("value")
|
||||
this.actor.incDecAme(value)
|
||||
})
|
||||
|
||||
|
||||
html.find('.lock-unlock-sheet').click((event) => {
|
||||
this.options.editScore = !this.options.editScore;
|
||||
this.render(true);
|
||||
});
|
||||
html.find('.item-link a').click((event) => {
|
||||
const itemId = $(event.currentTarget).data("item-id");
|
||||
const item = this.actor.getOwnedItem(itemId);
|
||||
item.sheet.render(true);
|
||||
});
|
||||
});
|
||||
html.find('.item-equip').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
this.actor.equipItem( li.data("item-id") );
|
||||
this.render(true);
|
||||
});
|
||||
html.find('.power-activate').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
this.actor.activatePower( li.data("item-id") );
|
||||
this.render(true);
|
||||
});
|
||||
|
||||
html.find('.change-worstfear').change(ev => {
|
||||
this.actor.manageWorstFear( ev.currentTarget.checked )
|
||||
});
|
||||
html.find('.change-desires').change(ev => {
|
||||
this.actor.manageDesires( ev.currentTarget.checked )
|
||||
});
|
||||
|
||||
html.find('.update-field').change(ev => {
|
||||
const fieldName = $(ev.currentTarget).data("field-name");
|
||||
let value = Number(ev.currentTarget.value);
|
||||
this.actor.update( { [`${fieldName}`]: value } );
|
||||
});
|
||||
html.find('.perk-active').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
this.actor.activatePerk( li.data("item-id") );
|
||||
this.render(true);
|
||||
this.render(true);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
setPosition(options = {}) {
|
||||
@ -264,11 +199,11 @@ export class MournbladeActorSheet extends ActorSheet {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _onDropItem(event, dragData) {
|
||||
/*async _onDropItem(event, dragData) {
|
||||
let item = await MournbladeUtility.searchItem( dragData)
|
||||
this.actor.preprocessItem( event, item, true )
|
||||
super._onDropItem(event, dragData)
|
||||
}
|
||||
}*/
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
|
@ -3,6 +3,9 @@ import { MournbladeUtility } from "./mournblade-utility.js";
|
||||
import { MournbladeRollDialog } from "./mournblade-roll-dialog.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
const __degatsBonus = [-2, -2, -1, -1, 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 8, 8, 9, 9, 10, 10]
|
||||
const __vitesseBonus = [-2, -2, -1, -1, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8]
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/**
|
||||
* Extend the base Actor entity by defining a custom roll data structure which is ideal for the Simple system.
|
||||
@ -14,8 +17,8 @@ export class MournbladeActor extends Actor {
|
||||
/**
|
||||
* Override the create() function to provide additional SoS functionality.
|
||||
*
|
||||
* This overrided create() function adds initial items
|
||||
* Namely: Basic skills, money,
|
||||
* This overrided create() function adds initial items
|
||||
* Namely: Basic skills, money,
|
||||
*
|
||||
* @param {Object} data Barebones actor data which this function adds onto.
|
||||
* @param {Object} options (Unused) Additional options which customize the creation workflow.
|
||||
@ -28,46 +31,243 @@ export class MournbladeActor extends Actor {
|
||||
if (data instanceof Array) {
|
||||
return super.create(data, options);
|
||||
}
|
||||
// If the created actor has items (only applicable to duplicated actors) bypass the new actor creation logic
|
||||
// If the created actor has items (only applicable to foundry.utils.duplicated actors) bypass the new actor creation logic
|
||||
if (data.items) {
|
||||
let actor = super.create(data, options);
|
||||
return actor;
|
||||
}
|
||||
|
||||
if (data.type == 'character') {
|
||||
if (data.type == 'personnage') {
|
||||
const skills = await MournbladeUtility.loadCompendium("fvtt-mournblade.skills")
|
||||
data.items = skills.map(i => i.toObject());
|
||||
data.items = skills.map(i => i.toObject())
|
||||
}
|
||||
if (data.type == 'npc') {
|
||||
if (data.type == 'creature') {
|
||||
const skills = await MournbladeUtility.loadCompendium("fvtt-mournblade.skills-creatures")
|
||||
data.items = skills.map(i => i.toObject())
|
||||
data.items.push({ name: "Arme naturelle 1", type: 'arme', img: "systems/fvtt-mournblade/assets/icons/arme.webp", system: { typearme: "contact", bonusmaniementoff: 0, seuildefense: 0, degats: "0" } })
|
||||
data.items.push({ name: "Arme naturelle 2", type: 'arme', img: "systems/fvtt-mournblade/assets/icons/arme.webp", system: { typearme: "contact", bonusmaniementoff: 0, seuildefense: 0, degats: "0" } })
|
||||
}
|
||||
|
||||
|
||||
return super.create(data, options);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getWeapons() {
|
||||
return this.data.items.filter(item => item.type == "arme" )
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getArmors() {
|
||||
return this.data.items.filter(item => item.type == "protection" )
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
prepareBaseData() {
|
||||
setModifier(name, type, value) {
|
||||
this.createEmbeddedDocuments("Item", [{ type: "modifier", name: name, system: { modifiertype: type, value: value } }])
|
||||
ui.notifications.info("Le modificateur " + name + " a été ajouté à " + this.name + ".")
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async prepareData() {
|
||||
super.prepareData();
|
||||
prepareArme(arme) {
|
||||
arme = foundry.utils.duplicate(arme)
|
||||
let combat = this.getCombatValues()
|
||||
if (arme.system.typearme == "contact" || arme.system.typearme == "contactjet") {
|
||||
arme.system.isMelee = true
|
||||
arme.system.competence = foundry.utils.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 + combat.attaqueModifier
|
||||
if (arme.system.isdefense) {
|
||||
arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.bonusmaniementdef
|
||||
}
|
||||
}
|
||||
if (arme.system.typearme == "jet" || arme.system.typearme == "tir") {
|
||||
arme.system.isDistance = true
|
||||
arme.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance"))
|
||||
arme.system.attrKey = "adr"
|
||||
arme.system.totalOffensif = this.system.attributs.adr.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff + combat.attaqueModifier
|
||||
arme.system.totalDegats = arme.system.degats
|
||||
if (arme.system.isdefense) {
|
||||
arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.bonusmaniementdef
|
||||
}
|
||||
}
|
||||
return arme
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
prepareBouclier(bouclier) {
|
||||
bouclier = foundry.utils.duplicate(bouclier)
|
||||
let combat = this.getCombatValues()
|
||||
bouclier.system.competence = foundry.utils.duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "mêlée"))
|
||||
bouclier.system.attrKey = "pui"
|
||||
bouclier.system.totalDegats = bouclier.system.degats + "+" + combat.bonusDegatsTotal
|
||||
bouclier.system.totalOffensif = this.system.attributs.pui.value + bouclier.system.competence.system.niveau
|
||||
bouclier.system.isdefense = true
|
||||
bouclier.system.bonusmaniementoff = 0
|
||||
bouclier.system.totalDefensif = combat.defenseTotal + bouclier.system.competence.system.niveau + bouclier.system.bonusdefense
|
||||
return bouclier
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getWeapons() {
|
||||
let armes = []
|
||||
for (let arme of this.items) {
|
||||
if (arme.type == "arme") {
|
||||
armes.push(this.prepareArme(arme))
|
||||
}
|
||||
if (arme.type == "bouclier") {
|
||||
armes.push(this.prepareBouclier(arme))
|
||||
}
|
||||
}
|
||||
MournbladeUtility.sortArrayObjectsByName(armes)
|
||||
return armes
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getModifiersForRoll() {
|
||||
let modifiers = []
|
||||
for (let mod of this.items) {
|
||||
if (mod.type == "modifier" && mod.system.modifiertype == "roll") {
|
||||
let modObj = mod.toObject()
|
||||
modObj.system.apply = true
|
||||
modifiers.push(modObj)
|
||||
}
|
||||
}
|
||||
MournbladeUtility.sortArrayObjectsByName(modifiers)
|
||||
return modifiers
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getItemSorted(types) {
|
||||
let items = this.items.filter(item => types.includes(item.type)) || []
|
||||
MournbladeUtility.sortArrayObjectsByName(items)
|
||||
return items
|
||||
}
|
||||
getDons() {
|
||||
return this.getItemSorted(["don"])
|
||||
}
|
||||
getPactes() {
|
||||
return this.getItemSorted(["pacte"])
|
||||
}
|
||||
getTendances() {
|
||||
return this.getItemSorted(["tendance"])
|
||||
}
|
||||
getRunes() {
|
||||
return this.getItemSorted(["rune"])
|
||||
}
|
||||
getEquipments() {
|
||||
return this.getItemSorted(["equipement"])
|
||||
}
|
||||
getModifiers() {
|
||||
return this.getItemSorted(["modifier"])
|
||||
}
|
||||
getTraitsChaotiques() {
|
||||
return this.getItemSorted(["traitchaotique"])
|
||||
}
|
||||
getTraitsEspeces() {
|
||||
return this.getItemSorted(["traitespece"])
|
||||
}
|
||||
getMonnaies() {
|
||||
return this.getItemSorted(["monnaie"])
|
||||
}
|
||||
getArmors() {
|
||||
return this.getItemSorted(["protection"])
|
||||
}
|
||||
getRuneEffects() {
|
||||
return this.getItemSorted(["runeeffect"])
|
||||
}
|
||||
getOrigine() {
|
||||
return this.items.find(item => item.type == "origine")
|
||||
}
|
||||
getMetier() {
|
||||
return this.items.find(item => item.type == "metier")
|
||||
}
|
||||
getHeritage() {
|
||||
return this.items.find(item => item.type == "heritage")
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getSkills() {
|
||||
let comp = []
|
||||
for (let item of this.items) {
|
||||
item = foundry.utils.duplicate(item)
|
||||
if (item.type == "competence") {
|
||||
item.system.attribut1total = item.system.niveau + (this.system.attributs[item.system.attribut1]?.value || 0)
|
||||
item.system.attribut2total = item.system.niveau + (this.system.attributs[item.system.attribut2]?.value || 0)
|
||||
item.system.attribut3total = item.system.niveau + (this.system.attributs[item.system.attribut3]?.value || 0)
|
||||
if (item.system.niveau == 0) {
|
||||
item.system.attribut1total -= 3
|
||||
item.system.attribut2total -= 3
|
||||
item.system.attribut3total -= 3
|
||||
}
|
||||
item.system.attribut1label = this.system.attributs[item.system.attribut1]?.label || ""
|
||||
item.system.attribut2label = this.system.attributs[item.system.attribut2]?.label || ""
|
||||
item.system.attribut3label = this.system.attributs[item.system.attribut3]?.label || ""
|
||||
comp.push(item)
|
||||
}
|
||||
}
|
||||
MournbladeUtility.sortArrayObjectsByName(comp)
|
||||
return comp
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getProtectionTotal() {
|
||||
let protection = 0
|
||||
for (let item of this.items) {
|
||||
if (item.type == "protection" && item.system.equipped) {
|
||||
protection += item.system.protection
|
||||
}
|
||||
}
|
||||
return protection
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getAspect() {
|
||||
return (this.system.balance.loi > this.system.balance.chaos) ? this.system.balance.loi : this.system.balance.chaos
|
||||
}
|
||||
getMarge() {
|
||||
return Math.abs(this.system.balance.loi - this.system.balance.chaos)
|
||||
}
|
||||
getAlignement() {
|
||||
return (this.system.balance.loi > this.system.balance.chaos) ? "loyal" : "chaotique"
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getDefenseBase() {
|
||||
return this.system.attributs.tre.value + 5
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getVitesseBase() {
|
||||
return 5 + __vitesseBonus[this.system.attributs.adr.value]
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCombatValues() {
|
||||
let defenserModifier = 0
|
||||
this.items.filter(item => item.type == "modifier" && item.system.modifiertype == "defense").map(e => defenserModifier += e.system.value)
|
||||
let attaqueModifier = 0
|
||||
this.items.filter(item => item.type == "modifier" && item.system.modifiertype == "attaque").map(e => attaqueModifier += e.system.value)
|
||||
|
||||
let combat = {
|
||||
defenserModifier,
|
||||
attaqueModifier,
|
||||
initBase: this.system.attributs.adr.value,
|
||||
initTotal: this.system.attributs.adr.value + this.system.combat.initbonus,
|
||||
bonusDegats: this.getBonusDegats(),
|
||||
bonusDegatsTotal: this.getBonusDegats() + this.system.combat.bonusdegats,
|
||||
vitesseBase: this.getVitesseBase(),
|
||||
vitesseTotal: this.getVitesseBase() + this.system.combat.vitessebonus,
|
||||
defenseBase: this.getDefenseBase(),
|
||||
defenseTotal: this.getDefenseBase() + this.system.combat.defensebonus + defenserModifier
|
||||
}
|
||||
return combat
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
prepareDerivedData() {
|
||||
|
||||
if (this.type == 'character') {
|
||||
if (this.type == 'personnage') {
|
||||
let newSante = this.system.sante.bonus + (this.system.attributs.pui.value + this.system.attributs.tre.value) * 2 + 5
|
||||
if (this.system.sante.base != newSante) {
|
||||
this.update({ 'system.sante.base': newSante })
|
||||
}
|
||||
let newAme = (this.system.attributs.cla.value + this.system.attributs.tre.value) * this.system.biodata.amemultiplier + 5
|
||||
if (this.system.ame.fullmax != newAme) {
|
||||
this.update({ 'system.ame.fullmax': newAme })
|
||||
}
|
||||
}
|
||||
|
||||
super.prepareDerivedData();
|
||||
super.prepareDerivedData()
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -76,29 +276,153 @@ export class MournbladeActor extends Actor {
|
||||
super._preUpdate(changed, options, user);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getActivePerks() {
|
||||
let perks = this.data.items.filter(item => item.type == 'perk' && item.data.data.active);
|
||||
return perks;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getItemById(id) {
|
||||
let item = this.data.items.find(item => item.id == id);
|
||||
let item = this.items.find(item => item.id == id);
|
||||
if (item) {
|
||||
item = duplicate(item)
|
||||
item = foundry.utils.duplicate(item)
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async equipItem(itemId) {
|
||||
let item = this.data.items.find(item => item.id == itemId);
|
||||
if (item && item.data.data) {
|
||||
let update = { _id: item.id, "data.equipped": !item.data.data.equipped };
|
||||
let item = this.items.find(item => item.id == itemId)
|
||||
if (item?.system) {
|
||||
let update = { _id: item.id, "system.equipped": !item.system.equipped }
|
||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getStatusMalus() {
|
||||
if (this.system.biodata.ignoresantemalus) {
|
||||
return 0
|
||||
}
|
||||
|
||||
let malusL = 0
|
||||
let malusNL = 0
|
||||
if (this.system.sante.base - this.system.sante.letaux < 10) {
|
||||
malusL = -2
|
||||
}
|
||||
if (this.system.sante.base - this.system.sante.letaux < 5) {
|
||||
malusL = -5
|
||||
}
|
||||
if (this.system.sante.base - this.system.sante.nonletaux < 10) {
|
||||
malusNL = -2
|
||||
}
|
||||
if (this.system.sante.base - this.system.sante.nonletaux < 5) {
|
||||
malusNL = -5
|
||||
}
|
||||
return Math.min(malusL, malusNL)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getAmeMalus() {
|
||||
if (this.system.biodata.ignoreamemalus) {
|
||||
return 0
|
||||
}
|
||||
let malusA = 0
|
||||
if (this.system.ame.currentmax - this.system.ame.value < 10) {
|
||||
malusA = -2
|
||||
}
|
||||
if (this.system.ame.currentmax - this.system.ame.value < 5) {
|
||||
malusA = -5
|
||||
}
|
||||
return malusA
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
editItemField(itemId, itemType, itemField, dataType, value) {
|
||||
let item = this.items.find(item => item.id == itemId)
|
||||
if (item) {
|
||||
console.log("Item ", item, itemField, dataType, value)
|
||||
if (dataType.toLowerCase() == "number") {
|
||||
value = Number(value)
|
||||
} else {
|
||||
value = String(value)
|
||||
}
|
||||
let update = { _id: item.id, [`system.${itemField}`]: value };
|
||||
this.updateEmbeddedDocuments("Item", [update])
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
incDecSante(type, value, applyArmure = true) {
|
||||
value = Number(value)
|
||||
if (value && applyArmure) {
|
||||
let protection = this.getProtectionTotal()
|
||||
value -= protection
|
||||
value = Math.max(0, Number(value))
|
||||
}
|
||||
if (value) {
|
||||
let newSante = foundry.utils.duplicate(this.system.sante)
|
||||
newSante[type] += Number(value)
|
||||
newSante[type] = Math.max(0, newSante[type])
|
||||
if (newSante[type] > this.system.sante.base) {
|
||||
value -= this.system.sante.base - newSante[type]
|
||||
newSante[type] = this.system.sante.base
|
||||
} else {
|
||||
value = 0
|
||||
}
|
||||
newSante[type] = Math.min(newSante[type], newSante.base)
|
||||
if (value && type == "nonletaux") {
|
||||
newSante["letaux"] += value
|
||||
}
|
||||
this.update({ 'system.sante': newSante })
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
incDecAme(value) {
|
||||
value = Number(value)
|
||||
if (value) {
|
||||
let newAme = foundry.utils.duplicate(this.system.ame)
|
||||
newAme.value += Number(value)
|
||||
newAme.value = Math.max(0, newAme.value)
|
||||
newAme.value = Math.min(newAme.value, newAme.currentmax)
|
||||
this.update({ 'system.ame': newAme })
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getBonneAventure() {
|
||||
return this.system.bonneaventure.actuelle
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
changeBonneAventure(value) {
|
||||
let newBA = this.system.bonneaventure.actuelle
|
||||
newBA += value
|
||||
this.update({ 'system.bonneaventure.actuelle': newBA })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getEclat() {
|
||||
return this.system.eclat.value
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
changeEclat(value) {
|
||||
let newE = this.system.eclat.value
|
||||
newE += value
|
||||
this.update({ 'system.eclat.value': newE })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
canEclatDoubleD20() {
|
||||
return (this.getAlignement() == "loyal" && this.system.eclat.value > 0)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
subPointsAme(runeMode, value) {
|
||||
let ame = foundry.utils.duplicate(this.system.ame)
|
||||
if (runeMode == "prononcer") {
|
||||
ame.value += value
|
||||
} else {
|
||||
ame.currentmax -= value
|
||||
}
|
||||
this.update({ 'system.ame': ame })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
compareName(a, b) {
|
||||
if (a.name < b.name) {
|
||||
@ -112,14 +436,22 @@ export class MournbladeActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getAttribute(attrKey) {
|
||||
return this.data.data.attributes[attrKey];
|
||||
return this.system.attributes[attrKey]
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getBonusDegats() {
|
||||
if (this.type == "creature") {
|
||||
return 0
|
||||
}
|
||||
return __degatsBonus[this.system.attributs.pui.value]
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async equipGear(equipmentId) {
|
||||
let item = this.data.items.find(item => item.id == equipmentId);
|
||||
if (item && item.data.data) {
|
||||
let update = { _id: item.id, "data.equipped": !item.data.data.equipped };
|
||||
let item = this.items.find(item => item.id == equipmentId);
|
||||
if (item && item.system.data) {
|
||||
let update = { _id: item.id, "system.equipped": !item.system.equipped };
|
||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
@ -127,71 +459,271 @@ export class MournbladeActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
getSubActors() {
|
||||
let subActors = [];
|
||||
for (let id of this.data.data.subactors) {
|
||||
subActors.push(duplicate(game.actors.get(id)));
|
||||
for (let id of this.system.subactors) {
|
||||
subActors.push(foundry.utils.duplicate(game.actors.get(id)));
|
||||
}
|
||||
return subActors;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async addSubActor(subActorId) {
|
||||
let subActors = duplicate(this.data.data.subactors);
|
||||
let subActors = foundry.utils.duplicate(this.system.subactors);
|
||||
subActors.push(subActorId);
|
||||
await this.update({ 'data.subactors': subActors });
|
||||
await this.update({ 'system.subactors': subActors });
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async delSubActor(subActorId) {
|
||||
let newArray = [];
|
||||
for (let id of this.data.data.subactors) {
|
||||
for (let id of this.system.subactors) {
|
||||
if (id != subActorId) {
|
||||
newArray.push(id);
|
||||
}
|
||||
}
|
||||
await this.update({ 'data.subactors': newArray });
|
||||
await this.update({ 'system.subactors': newArray });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async incDecQuantity(objetId, incDec = 0) {
|
||||
let objetQ = this.data.items.get(objetId)
|
||||
let objetQ = this.items.get(objetId)
|
||||
if (objetQ) {
|
||||
let newQ = objetQ.data.data.quantity + incDec;
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'data.quantity': newQ }]); // pdates one EmbeddedEntity
|
||||
let newQ = objetQ.system.quantite + incDec;
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantite': newQ }]); // pdates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getCompetence(compId) {
|
||||
return this.items.get(compId)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async setPredilectionUsed(compId, predIdx) {
|
||||
let comp = this.items.get(compId)
|
||||
let pred = foundry.utils.duplicate(comp.system.predilections)
|
||||
pred[predIdx].used = true
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: compId, 'system.predilections': pred }])
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getInitiativeScore() {
|
||||
return Number(this.system.attributs.adr.value) + Number(this.system.combat.initbonus)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getBestDefenseValue() {
|
||||
let defenseList = this.items.filter(item => (item.type == "arme" || item.type == "bouclier") && item.system.equipped)
|
||||
let maxDef = 0
|
||||
let bestArme
|
||||
for (let arme of defenseList) {
|
||||
if (arme.type == "arme" && arme.system.isdefense) {
|
||||
arme = this.prepareArme(arme)
|
||||
}
|
||||
if (arme.type == "bouclier") {
|
||||
arme = this.prepareBouclier(arme)
|
||||
}
|
||||
if (arme.system.totalDefensif > maxDef) {
|
||||
maxDef = arme.system.totalDefensif
|
||||
bestArme = foundry.utils.duplicate(arme)
|
||||
}
|
||||
}
|
||||
return bestArme
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
depenseRessources(arme) {
|
||||
if (arme.system.nbressources && Number(arme.system.nbressources) > 0) {
|
||||
if (this.type == "creature") {
|
||||
let ressources = foundry.utils.duplicate(this.system.ressources)
|
||||
if (Number(ressources.value) >= Number(arme.system.nbressources)) {
|
||||
ressources.value -= arme.system.nbressources
|
||||
this.update({ 'system.ressources': ressources })
|
||||
ChatMessage.create({
|
||||
content: "L'utilisation de la capacité/arme a dépensé " + arme.system.nbressources + " ressources.",
|
||||
whisper: game.user._id,
|
||||
user: game.user._id
|
||||
});
|
||||
} else {
|
||||
ui.notifications.warn("Points de ressources insuffisants.")
|
||||
}
|
||||
} else {
|
||||
ui.notifications.warn("Les ressources ne sont pas disponibles pour les personnages.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCommonRollData(statKey = undefined, useShield = false) {
|
||||
getCommonRollData(attrKey = undefined, compId = undefined, compName = undefined) {
|
||||
let rollData = MournbladeUtility.getBasicRollData()
|
||||
rollData.alias = this.name
|
||||
rollData.actorImg = this.img
|
||||
rollData.actorId = this.id
|
||||
rollData.tokenId = this.token?.id
|
||||
rollData.img = this.img
|
||||
rollData.activePerks = duplicate(this.getActivePerks())
|
||||
|
||||
if (statKey) {
|
||||
rollData.statKey = statKey
|
||||
rollData.stat = this.getStat(statKey)
|
||||
rollData.statDicesLevel = rollData.stat.value
|
||||
rollData.statMod = rollData.stat.mod
|
||||
rollData.specList = this.getRelevantSpec(statKey)
|
||||
rollData.selectedSpec = "0"
|
||||
rollData.canEclatDoubleD20 = this.canEclatDoubleD20()
|
||||
rollData.doubleD20 = false
|
||||
rollData.attributs = MournbladeUtility.getAttributs()
|
||||
rollData.selectDifficulte = true
|
||||
rollData.malusSante = this.getStatusMalus() + this.system.sante.malusmanuel
|
||||
rollData.malusAme = this.getAmeMalus()
|
||||
rollData.modifiers = this.getModifiersForRoll()
|
||||
rollData.desavantages = {}
|
||||
rollData.isMonte = this.system.combat.monte
|
||||
if (rollData.isMonte) {
|
||||
rollData.config.attaques["chargecavalerie"] = "Charge de cavalerie"
|
||||
}
|
||||
|
||||
this.addEffects(rollData)
|
||||
this.addArmorsShields(rollData, statKey, useShield)
|
||||
this.addWeapons(rollData, statKey, useShield)
|
||||
this.addEquipments(rollData, statKey)
|
||||
|
||||
if (attrKey) {
|
||||
rollData.attrKey = attrKey
|
||||
if (attrKey != "tochoose") {
|
||||
rollData.actionImg = "systems/fvtt-mournblade/assets/icons/" + this.system.attributs[attrKey].labelnorm + ".webp"
|
||||
rollData.attr = foundry.utils.duplicate(this.system.attributs[attrKey])
|
||||
}
|
||||
}
|
||||
if (compId) {
|
||||
rollData.competence = foundry.utils.duplicate(this.items.get(compId) || {})
|
||||
rollData.actionImg = rollData.competence?.img
|
||||
}
|
||||
if (compName) {
|
||||
rollData.competence = foundry.utils.duplicate(this.items.find(item => item.name.toLowerCase() == compName.toLowerCase()) || {})
|
||||
rollData.actionImg = rollData.competence?.img
|
||||
}
|
||||
return rollData
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async startRoll(rollData) {
|
||||
this.syncRoll(rollData);
|
||||
//console.log("ROLL DATA", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData);
|
||||
console.log(rollDialog);
|
||||
rollDialog.render(true);
|
||||
|
||||
async rollAttribut(attrKey) {
|
||||
let rollData = this.getCommonRollData(attrKey)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollCompetence(attrKey, compId) {
|
||||
let rollData = this.getCommonRollData(attrKey, compId)
|
||||
console.log("RollDatra", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollRune(runeId) {
|
||||
let comp = this.items.find(comp => comp.type == "competence" && comp.name.toLowerCase() == "savoir : runes")
|
||||
if (!comp) {
|
||||
ui.notifications.warn("La compétence Savoirs : Runes n'a pas été trouvée, abandon.")
|
||||
return
|
||||
}
|
||||
let rollData = this.getCommonRollData("cla", undefined, "Savoir : Runes")
|
||||
rollData.rune = foundry.utils.duplicate(this.items.get(runeId) || {})
|
||||
rollData.difficulte = rollData.rune?.system?.seuil || 0
|
||||
rollData.runemode = "prononcer"
|
||||
rollData.runeame = 1
|
||||
console.log("runeData", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollArmeOffensif(armeId) {
|
||||
let arme = this.items.get(armeId)
|
||||
if (arme.type == "arme") {
|
||||
arme = this.prepareArme(arme)
|
||||
}
|
||||
if (arme.type == "bouclier") {
|
||||
arme = this.prepareBouclier(arme)
|
||||
}
|
||||
let rollData = this.getCommonRollData(arme.system.attrKey, arme.system.competence._id)
|
||||
rollData.arme = arme
|
||||
rollData.typeAttaque = "assaut"
|
||||
rollData.typeCouvert = "aucun"
|
||||
rollData.hasDesavantageBonus = true
|
||||
rollData.visee = false
|
||||
rollData.ciblecourt = false
|
||||
rollData.cibleconsciente = false
|
||||
// Do not display difficulte if defense weapon or distance
|
||||
if (rollData.armeDefense || rollData.arme.system.isDistance) {
|
||||
rollData.selectDifficulte = false
|
||||
rollData.difficulte = (rollData.arme.system.isDistance) ? 0 : rollData.difficulte
|
||||
}
|
||||
console.log("ARME!", rollData)
|
||||
this.depenseRessources(arme)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollAssomer() {
|
||||
let rollData = this.getCommonRollData("adr", undefined, "Filouterie")
|
||||
rollData.typeAttaque = "assomer"
|
||||
rollData.typeCouvert = "aucun"
|
||||
rollData.hasDesavantageBonus = true
|
||||
if (rollData.defender) {
|
||||
rollData.selectDifficulte = false
|
||||
rollData.difficulte = rollData.defender.system.attributs.tre.value * 2
|
||||
}
|
||||
console.log("Assomer!", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async rollFuir() {
|
||||
let rollData = this.getCommonRollData("adr", undefined, "Mouvements")
|
||||
rollData.typeAttaque = "fuir"
|
||||
rollData.typeCouvert = "aucun"
|
||||
rollData.hasDesavantageBonus = true
|
||||
if (rollData.defender) {
|
||||
rollData.selectDifficulte = false
|
||||
let comp = rollData.defender.items.find(it => it.type == "competence" && it.name.toLowerCase() == "mouvements")
|
||||
rollData.difficulte = rollData.defender.system.attributs.adr.value + ((comp) ? comp.system.niveau : rollData.defender.system.attributs.adr.value)
|
||||
}
|
||||
console.log("Fuir!", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async rollImmobiliser() {
|
||||
let rollData = this.getCommonRollData("pui", undefined, "Mêlée")
|
||||
rollData.typeAttaque = "immobiliser"
|
||||
rollData.typeCouvert = "aucun"
|
||||
rollData.hasDesavantageBonus = true
|
||||
if (rollData.defender) {
|
||||
rollData.selectDifficulte = false
|
||||
rollData.difficulte = rollData.defenderCombatValues.defenseTotal
|
||||
}
|
||||
console.log("Immobiliser!", rollData)
|
||||
let rollDialog = await MournbladeRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async rollArmeSpecial(armeId) {
|
||||
let arme = this.items.get(armeId)
|
||||
if (arme) {
|
||||
MournbladeUtility.createChatWithRollMode("GM", {
|
||||
content: await renderTemplate(`systems/fvtt-mournblade/templates/chat-display-description.html`, arme)
|
||||
}, arme)
|
||||
this.depenseRessources(arme)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollArmeDegats(armeId) {
|
||||
let arme = this.items.get(armeId)
|
||||
if (arme.type == "arme") {
|
||||
arme = this.prepareArme(arme)
|
||||
}
|
||||
if (arme.type == "bouclier") {
|
||||
arme = this.prepareBouclier(arme)
|
||||
}
|
||||
//Unused rollData.degatsFormula = arme.system.totalDegats
|
||||
let roll = await new Roll(arme.system.totalDegats).roll()
|
||||
await MournbladeUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode"));
|
||||
let rollData = {
|
||||
degatsFormula:arme.system.totalDegats,
|
||||
arme: arme,
|
||||
finalResult: roll.total,
|
||||
alias: this.name,
|
||||
actorImg: this.img,
|
||||
actorId: this.id,
|
||||
actionImg: arme.img,
|
||||
}
|
||||
MournbladeUtility.createChatWithRollMode(rollData.alias, {
|
||||
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-mournblade/templates/chat-degats-result.html`, rollData)
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -9,8 +9,11 @@ export class MournbladeCombat extends Combat {
|
||||
for (let cId = 0; cId < ids.length; cId++) {
|
||||
const c = this.combatants.get(ids[cId]);
|
||||
let id = c._id || c.id;
|
||||
let initBonus = c.actor ? c.actor.getInitiativeScore( this.id, id ) : -1;
|
||||
await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: initBonus } ]);
|
||||
let initBonus = c.actor ? c.actor.getInitiativeScore() : 0
|
||||
let roll = new Roll("1d10 + "+initBonus).roll({ async: false})
|
||||
await MournbladeUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode"))
|
||||
//console.log("Init bonus", initBonus, roll.total)
|
||||
await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: roll.total } ]);
|
||||
}
|
||||
|
||||
return this;
|
||||
|
81
modules/mournblade-config.js
Normal file
@ -0,0 +1,81 @@
|
||||
|
||||
export class MournbladeConfig {
|
||||
|
||||
static getConfig() {
|
||||
let MOURNBLADE_CONFIG = {
|
||||
|
||||
attaques: {
|
||||
assaut: game.i18n.localize("MNBL.assaut"),
|
||||
precise: game.i18n.localize("MNBL.preciseattack"),
|
||||
feinte: game.i18n.localize("MNBL.feint"),
|
||||
coupbas: game.i18n.localize("MNBL.dirtyattack"),
|
||||
charger: game.i18n.localize("MNBL.charge"),
|
||||
contenir: game.i18n.localize("MNBL.contain"),
|
||||
desarmer: game.i18n.localize("MNBL.disarm")
|
||||
},
|
||||
couverts: {
|
||||
aucun: { name: game.i18n.localize("MNBL.none"), value: 0 },
|
||||
rondache: { name: game.i18n.localize("MNBL.lightcover"), value: -2 },
|
||||
pavois: { name: game.i18n.localize("MNBL.mediumcover"), value: -5 },
|
||||
complet: { name: game.i18n.localize("MNBL.heavycover"), value: -10 },
|
||||
},
|
||||
modifierTypes: {
|
||||
aucun: { name: game.i18n.localize("MNBL.none"), value: 0 },
|
||||
roll: { name: game.i18n.localize("MNBL.roll"), value: 0 },
|
||||
degats: { name: game.i18n.localize("MNBL.damage"), value: 0 },
|
||||
defense: { name: game.i18n.localize("MNBL.defensecapacity"), value: 0 },
|
||||
attaque: { name: game.i18n.localize("MNBL.attackcapacity"), value: 0 },
|
||||
},
|
||||
listeNiveau: {
|
||||
},
|
||||
listeNiveauCreature: {
|
||||
},
|
||||
listePortees: {
|
||||
"10": game.i18n.localize("MNBL.lessthanshort"),
|
||||
"15": game.i18n.localize("MNBL.shortmore"),
|
||||
"20": game.i18n.localize("MNBL.mediummore"),
|
||||
"25": game.i18n.localize("MNBL.longmore")
|
||||
},
|
||||
modificateurOptions: {},
|
||||
pointsAmeOptions: {},
|
||||
difficulteOptions: {
|
||||
"0": game.i18n.localize("MNBL.noneunknwon"),
|
||||
"5": game.i18n.localize("MNBL.easy"),
|
||||
"10": game.i18n.localize("MNBL.medium"),
|
||||
"15": game.i18n.localize("MNBL.hard"),
|
||||
"20": game.i18n.localize("MNBL.hazardous"),
|
||||
"25": game.i18n.localize("MNBL.insane"),
|
||||
"30": game.i18n.localize("MNBL.puremadness")
|
||||
},
|
||||
attributs: {
|
||||
adr: game.i18n.localize("Adresse"), pui: game.i18n.localize("Puissance"),
|
||||
cla: game.i18n.localize("Clairvoyance"), pre: game.i18n.localize("Présence"), tre: game.i18n.localize("Trempe")
|
||||
},
|
||||
lancementRuneOptions: {
|
||||
prononcer: game.i18n.localize("MNBL.pronouncerune"),
|
||||
inscrire: game.i18n.localize("MNBL.tracerune")
|
||||
},
|
||||
effetRuneOptions: {
|
||||
prononcee: game.i18n.localize("MNBL.pronounced"),
|
||||
inscrite: game.i18n.localize("MNBL.traced")
|
||||
},
|
||||
typeArmeOptions: {
|
||||
contact: game.i18n.localize("MNBL.meleeweapon"),
|
||||
contactjet: game.i18n.localize("MNBL.meleethrowweapon"),
|
||||
jet: game.i18n.localize("MNBL.throwweapon"),
|
||||
tir: game.i18n.localize("MNBL.shootweapon"),
|
||||
special: game.i18n.localize("MNBL.specialweapon")
|
||||
},
|
||||
allegeanceOptions: {
|
||||
tous: game.i18n.localize("MNBL.all"),
|
||||
chaos: game.i18n.localize("MNBL.chaos"),
|
||||
loi: game.i18n.localize("MNBL.law"),
|
||||
betes: game.i18n.localize("MNBL.beastslords"),
|
||||
elementaires: game.i18n.localize("MNBL.elementslords")
|
||||
}
|
||||
}
|
||||
|
||||
return MOURNBLADE_CONFIG;
|
||||
}
|
||||
|
||||
};
|
25
modules/mournblade-creature-sheet.js
Normal file
@ -0,0 +1,25 @@
|
||||
/**
|
||||
* Extend the basic ActorSheet with some very simple modifications
|
||||
* @extends {ActorSheet}
|
||||
*/
|
||||
|
||||
import { MournbladeActorSheet } from "./mournblade-actor-sheet.js";
|
||||
import { MournbladeUtility } from "./mournblade-utility.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class MournbladeCreatureSheet extends MournbladeActorSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-mournblade", "sheet", "actor"],
|
||||
template: "systems/fvtt-mournblade/templates/creature-sheet.html",
|
||||
width: 640,
|
||||
height: 720,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }],
|
||||
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
|
||||
editScore: false
|
||||
})
|
||||
}
|
||||
}
|
@ -4,12 +4,12 @@ import { MournbladeUtility } from "./mournblade-utility.js";
|
||||
* Extend the basic ItemSheet with some very simple modifications
|
||||
* @extends {ItemSheet}
|
||||
*/
|
||||
export class MournbladeItemSheet extends ItemSheet {
|
||||
export class MournbladeItemSheet extends foundry.appv1.sheets.ItemSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-mournblade", "sheet", "item"],
|
||||
template: "systems/fvtt-mournblade/templates/item-sheet.html",
|
||||
dragDrop: [{ dragSelector: null, dropSelector: null }],
|
||||
@ -48,9 +48,8 @@ export class MournbladeItemSheet extends ItemSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = MournbladeUtility.data(this.object);
|
||||
|
||||
let itemData = foundry.utils.deepClone(MournbladeUtility.templateData(this.object));
|
||||
const objectData = foundry.utils.duplicate(this.object)
|
||||
let itemData = objectData
|
||||
let formData = {
|
||||
title: this.title,
|
||||
id: this.id,
|
||||
@ -60,15 +59,20 @@ export class MournbladeItemSheet extends ItemSheet {
|
||||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
attributs: MournbladeUtility.getAttributs(),
|
||||
data: itemData,
|
||||
data: itemData.system,
|
||||
limited: this.object.limited,
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.description, {async: true}),
|
||||
config: game.system.mournblade.config,
|
||||
mr: (this.object.type == 'specialisation'),
|
||||
isGM: game.user.isGM
|
||||
}
|
||||
|
||||
this.options.editable = !(this.object.data.origin == "embeddedItem");
|
||||
if ( objectData.type == "don") {
|
||||
formData.sacrifice = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.object.system.sacrifice, {async: true})
|
||||
}
|
||||
//this.options.editable = !(this.object.origin == "embeddedItem");
|
||||
console.log("ITEM DATA", formData, this);
|
||||
return formData;
|
||||
}
|
||||
@ -87,7 +91,7 @@ export class MournbladeItemSheet extends ItemSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
postItem() {
|
||||
let chatData = duplicate(MournbladeUtility.data(this.item));
|
||||
let chatData = foundry.utils.duplicate(MournbladeUtility.data(this.item));
|
||||
if (this.actor) {
|
||||
chatData.actor = { id: this.actor.id };
|
||||
}
|
||||
@ -119,26 +123,40 @@ export class MournbladeItemSheet extends ItemSheet {
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
const item = this.object.options.actor.getOwnedItem(li.data("item-id"));
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
const item = this.object.options.actor.getOwnedItem(li.data("item-id"))
|
||||
item.sheet.render(true);
|
||||
});
|
||||
|
||||
html.find('.delete-spec').click(ev => {
|
||||
this.object.update({ "data.specialisation": [{ name: 'None' }] });
|
||||
});
|
||||
|
||||
html.find('.delete-subitem').click(ev => {
|
||||
this.deleteSubitem(ev);
|
||||
});
|
||||
|
||||
html.find('.stat-choice-flag').click(ev => {
|
||||
let idx = $(ev.currentTarget).data("stat-idx");
|
||||
let array = duplicate(this.object.data.data.statincreasechoice);
|
||||
array[Number(idx)].flag = !array[Number(idx)].flag;
|
||||
this.object.update({ "data.statincreasechoice": array });
|
||||
});
|
||||
|
||||
})
|
||||
html.find('.edit-prediction').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred[index].name = ev.currentTarget.value
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
html.find('.delete-prediction').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred.splice(index,1)
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
html.find('.use-prediction').change(ev => {
|
||||
const li = $(ev.currentTarget).parents(".prediction-item")
|
||||
let index = li.data("prediction-index")
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred[index].used = ev.currentTarget.checked
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
html.find('#add-predilection').click(ev => {
|
||||
let pred = foundry.utils.duplicate(this.object.system.predilections)
|
||||
pred.push( { name: "Nouvelle prédilection", id: randomID(), used: false })
|
||||
this.object.update( { 'system.predilections': pred })
|
||||
})
|
||||
// Update Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
@ -146,14 +164,6 @@ export class MournbladeItemSheet extends ItemSheet {
|
||||
let itemType = li.data("item-type");
|
||||
});
|
||||
|
||||
html.find('.view-subitem').click(ev => {
|
||||
this.viewSubitem(ev);
|
||||
});
|
||||
|
||||
html.find('.view-spec').click(ev => {
|
||||
this.manageSpec();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@ -1,6 +1,20 @@
|
||||
import { MournbladeUtility } from "./mournblade-utility.js";
|
||||
|
||||
export const defaultItemImg = {
|
||||
competence: "systems/fvtt-mournblade/assets/icons/competence.webp",
|
||||
arme: "systems/fvtt-mournblade/assets/icons/arme.webp",
|
||||
capacite: "systems/fvtt-mournblade/assets/icons/capacite.webp",
|
||||
don: "systems/fvtt-mournblade/assets/icons/don.webp",
|
||||
equipement: "systems/fvtt-mournblade/assets/icons/equipement.webp",
|
||||
monnaie: "systems/fvtt-mournblade/assets/icons/monnaie.webp",
|
||||
pacte: "systems/fvtt-mournblade/assets/icons/pacte.webp",
|
||||
predilection: "systems/fvtt-mournblade/assets/icons/predilection.webp",
|
||||
protection: "systems/fvtt-mournblade/assets/icons/protection.webp",
|
||||
rune: "systems/fvtt-mournblade/assets/icons/rune.webp",
|
||||
runeeffect: "systems/fvtt-mournblade/assets/icons/rune.webp",
|
||||
tendance: "systems/fvtt-mournblade/assets/icons/tendance.webp",
|
||||
traitchaotique: "systems/fvtt-mournblade/assets/icons/traitchaotique.webp",
|
||||
traitespece: "systems/fvtt-mournblade/assets/icons/capacite.webp"
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -11,10 +11,11 @@
|
||||
import { MournbladeActor } from "./mournblade-actor.js";
|
||||
import { MournbladeItemSheet } from "./mournblade-item-sheet.js";
|
||||
import { MournbladeActorSheet } from "./mournblade-actor-sheet.js";
|
||||
//import { MournbladeNPCSheet } from "./mournblade-npc-sheet.js";
|
||||
import { MournbladeCreatureSheet } from "./mournblade-creature-sheet.js";
|
||||
import { MournbladeUtility } from "./mournblade-utility.js";
|
||||
import { MournbladeCombat } from "./mournblade-combat.js";
|
||||
import { MournbladeItem } from "./mournblade-item.js";
|
||||
import { MournbladeConfig } from "./mournblade-config.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* Foundry VTT Initialization */
|
||||
@ -29,7 +30,7 @@ Hooks.once("init", async function () {
|
||||
MournbladeUtility.preloadHandlebarsTemplates();
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// Set an initiative formula for the system
|
||||
// Set an initiative formula for the system
|
||||
CONFIG.Combat.initiative = {
|
||||
formula: "1d6",
|
||||
decimals: 1
|
||||
@ -45,19 +46,21 @@ Hooks.once("init", async function () {
|
||||
CONFIG.Combat.documentClass = MournbladeCombat
|
||||
CONFIG.Actor.documentClass = MournbladeActor
|
||||
CONFIG.Item.documentClass = MournbladeItem
|
||||
game.system.mournblade = { }
|
||||
game.system.mournblade = {
|
||||
config : MournbladeConfig.getConfig(),
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// Register sheet application classes
|
||||
Actors.unregisterSheet("core", ActorSheet);
|
||||
Actors.registerSheet("fvtt-mournblade", MournbladeActorSheet, { types: ["character"], makeDefault: true });
|
||||
//Actors.registerSheet("fvtt-mournblade", MournbladeNPCSheet, { types: ["npc"], makeDefault: false });
|
||||
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet);
|
||||
foundry.documents.collections.Actors.registerSheet("fvtt-mournblade", MournbladeActorSheet, { types: ["personnage"], makeDefault: true })
|
||||
foundry.documents.collections.Actors.registerSheet("fvtt-mournblade", MournbladeCreatureSheet, { types: ["creature"], makeDefault: true })
|
||||
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
Items.registerSheet("fvtt-mournblade", MournbladeItemSheet, { makeDefault: true });
|
||||
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet);
|
||||
foundry.documents.collections.Items.registerSheet("fvtt-mournblade", MournbladeItemSheet, { makeDefault: true })
|
||||
|
||||
MournbladeUtility.init();
|
||||
|
||||
|
||||
});
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -66,31 +69,58 @@ function welcomeMessage() {
|
||||
user: game.user.id,
|
||||
whisper: [game.user.id],
|
||||
content: `<div id="welcome-message-Mournblade"><span class="rdd-roll-part">
|
||||
<strong>Welcome to Mournblade RPG.</strong>
|
||||
<strong>Bienvenue dans les Jeunes Royaumes de Mournblade !</strong>
|
||||
<p>Les livres de Mournblade sont nécessaires pour jouer : https://www.titam-france.fr</p>
|
||||
<p>Mournblade est 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>
|
||||
` });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async function importDefaultScene() {
|
||||
let exists = game.scenes.find(j => j.name == "Accueil");
|
||||
if (!exists) {
|
||||
const scenes = await MournbladeUtility.loadCompendium("fvtt-mournblade.scenes")
|
||||
let newDocuments = scenes.filter(i => i.name == "Accueil");
|
||||
await game.scenes.documentClass.create(newDocuments);
|
||||
game.scenes.find(i => i.name == "Accueil").activate();
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* Foundry VTT Initialization */
|
||||
/* -------------------------------------------- */
|
||||
Hooks.once("ready", function () {
|
||||
|
||||
game.system.mournblade = {
|
||||
config : MournbladeConfig.getConfig(),
|
||||
}
|
||||
|
||||
MournbladeUtility.ready();
|
||||
// User warning
|
||||
if (!game.user.isGM && game.user.character == undefined) {
|
||||
ui.notifications.info("Warning ! No character linked to your user !");
|
||||
ui.notifications.info("Attention ! Aucun personnage n'est relié au joueur !");
|
||||
ChatMessage.create({
|
||||
content: "<b>WARNING</b> The player " + game.user.name + " is not linked to a character !",
|
||||
content: "<b>ATTENTION</b> Le joueur " + game.user.name + " n'est relié à aucun personnage !",
|
||||
user: game.user._id
|
||||
});
|
||||
}
|
||||
|
||||
// CSS patch for v9
|
||||
if (game.version) {
|
||||
let sidebar = document.getElementById("sidebar");
|
||||
sidebar.style.width = "min-content";
|
||||
if (!game.user.isGM && game.user.character && !game.user.character.prototypeToken.actorLink) {
|
||||
ui.notifications.info("Le token de du joueur n'est pas connecté à l'acteur !");
|
||||
ChatMessage.create({
|
||||
content: "<b>ATTENTION</b> Le token du joueur " + game.user.name + " n'est pas connecté à l'acteur !",
|
||||
user: game.user._id
|
||||
});
|
||||
}
|
||||
|
||||
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter=>{
|
||||
console.log("ClassCounter loaded", moduleCounter)
|
||||
moduleCounter.ClassCounter.registerUsageCount()
|
||||
}).catch(err=>
|
||||
console.log("No stats available, giving up.")
|
||||
)
|
||||
|
||||
importDefaultScene();
|
||||
welcomeMessage();
|
||||
});
|
||||
|
||||
@ -107,4 +137,3 @@ Hooks.on("chatMessage", (html, content, msg) => {
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
|
@ -5,8 +5,8 @@ export class MournbladeRollDialog extends Dialog {
|
||||
/* -------------------------------------------- */
|
||||
static async create(actor, rollData ) {
|
||||
|
||||
let options = { classes: ["MournbladeDialog"], width: 620, height: 380, 'z-index': 99999 };
|
||||
let html = await renderTemplate('systems/fvtt-mournblade/templates/roll-dialog-generic.html', rollData);
|
||||
let options = { classes: ["MournbladeDialog"], width: 340, height: 'fit-content', 'z-index': 99999 };
|
||||
let html = await foundry.applications.handlebars.renderTemplate('systems/fvtt-mournblade/templates/roll-dialog-generic.html', rollData);
|
||||
|
||||
return new MournbladeRollDialog(actor, rollData, html, options );
|
||||
}
|
||||
@ -14,17 +14,22 @@ export class MournbladeRollDialog extends Dialog {
|
||||
/* -------------------------------------------- */
|
||||
constructor(actor, rollData, html, options, close = undefined) {
|
||||
let conf = {
|
||||
title: (rollData.mode == "skill") ? "Skill" : "Roll",
|
||||
title: "Test de Capacité",
|
||||
content: html,
|
||||
buttons: {
|
||||
roll: {
|
||||
buttons: {
|
||||
rolld10: {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
label: "Roll !",
|
||||
callback: () => { this.roll() }
|
||||
label: "Lancer 1d10",
|
||||
callback: () => { this.roll("1d10") }
|
||||
},
|
||||
rolld20: {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
label: "Lancer 1d20",
|
||||
callback: () => { this.roll("1d20") }
|
||||
},
|
||||
cancel: {
|
||||
icon: '<i class="fas fa-times"></i>',
|
||||
label: "Cancel",
|
||||
label: "Annuler",
|
||||
callback: () => { this.close() }
|
||||
} },
|
||||
close: close
|
||||
@ -32,208 +37,84 @@ export class MournbladeRollDialog extends Dialog {
|
||||
|
||||
super(conf, options);
|
||||
|
||||
this.actor = actor;
|
||||
this.rollData = rollData;
|
||||
this.actor = actor
|
||||
this.rollData = rollData
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
roll () {
|
||||
roll ( dice) {
|
||||
this.rollData.mainDice = dice
|
||||
MournbladeUtility.rollMournblade( this.rollData )
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
manageEffects( effectIdx, toggled) {
|
||||
let effect = this.rollData.effectsList[effectIdx]
|
||||
if (effect) {
|
||||
effect.applied = toggled
|
||||
|
||||
let level, genre, idVal
|
||||
if (effect.type == 'hindrance' ) {
|
||||
level = effect.value
|
||||
genre = 'positive'
|
||||
idVal = "#hindranceDicesLevel"
|
||||
}
|
||||
if (effect.type == 'effect' ) {
|
||||
let effectData = effect.effect
|
||||
level = effectData.data.effectlevel
|
||||
genre = effectData.data.genre
|
||||
effectData.data.isUsed = toggled
|
||||
if (effectData.data.bonusdice) {
|
||||
idVal = "#bonusDicesLevel"
|
||||
}
|
||||
if (effectData.data.reducedicevalue || effectData.data.statdice) {
|
||||
idVal = "#statDicesLevel"
|
||||
}
|
||||
if (effectData.data.otherdice) {
|
||||
idVal = "#otherDicesLevel"
|
||||
}
|
||||
if (effectData.data.hindrance) {
|
||||
idVal = "#hindranceDicesLevel"
|
||||
genre = 'positive' // Dynamic fix
|
||||
}
|
||||
}
|
||||
// Now process the dice level update
|
||||
let newLevel = Number($(idVal).val())
|
||||
console.log("Ongoing", newLevel, toggled, idVal )
|
||||
if (toggled) {
|
||||
if ( genre == 'positive') {
|
||||
newLevel += Number(level)
|
||||
}else {
|
||||
newLevel -= Number(level)
|
||||
}
|
||||
}else {
|
||||
if ( genre == 'positive') {
|
||||
newLevel -= Number(level)
|
||||
}else {
|
||||
newLevel += Number(level)
|
||||
}
|
||||
}
|
||||
newLevel = (newLevel<0) ? 0 : newLevel
|
||||
$(idVal).val(newLevel)
|
||||
}
|
||||
//console.log("Effect", effect, toggled)
|
||||
this.rollData.statDicesLevel = Number($('#statDicesLevel').val())
|
||||
this.rollData.specDicesLevel = Number($('#specDicesLevel').val())
|
||||
this.rollData.bonusDicesLevel = Number($('#bonusDicesLevel').val())
|
||||
this.rollData.hindranceDicesLevel = Number($('#hindranceDicesLevel').val())
|
||||
this.rollData.otherDicesLevel = Number($('#otherDicesLevel').val())
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
manageArmors( armorIdx, toggled) {
|
||||
let armor = this.rollData.armorsList[armorIdx]
|
||||
if (armor) {
|
||||
armor.applied = toggled
|
||||
if (armor.type == 'other' ) {
|
||||
if (toggled) {
|
||||
this.rollData.otherDicesLevel += Number(armor.value)
|
||||
} else {
|
||||
this.rollData.otherDicesLevel -= Number(armor.value)
|
||||
this.rollData.otherDicesLevel = (this.rollData.otherDicesLevel<0) ? 0 : this.rollData.otherDicesLevel
|
||||
}
|
||||
$("#otherDicesLevel").val(this.rollData.otherDicesLevel)
|
||||
}
|
||||
}
|
||||
console.log("Armor", armorIdx, toggled)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
manageWeapons( weaponIdx, toggled) {
|
||||
let weapon = this.rollData.weaponsList[weaponIdx]
|
||||
if (weapon) {
|
||||
if (toggled) {
|
||||
this.rollData.weaponName = weapon.weapon.name
|
||||
} else {
|
||||
this.rollData.weaponName = undefined
|
||||
}
|
||||
weapon.applied = toggled
|
||||
if (weapon.type == 'damage' || weapon.type == 'enhanced' ) {
|
||||
if (toggled) {
|
||||
this.rollData.otherDicesLevel += Number(weapon.value)
|
||||
} else {
|
||||
this.rollData.weaponName = undefined
|
||||
this.rollData.otherDicesLevel -= Number(weapon.value)
|
||||
this.rollData.otherDicesLevel = (this.rollData.otherDicesLevel<0) ? 0 : this.rollData.otherDicesLevel
|
||||
}
|
||||
$("#otherDicesLevel").val(this.rollData.otherDicesLevel)
|
||||
}
|
||||
}
|
||||
console.log("Weapon", weaponIdx, toggled, this.rollData.otherDicesLevel, weapon)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
manageEquip( equipIdx, toggled) {
|
||||
let equip = this.rollData.equipmentsList[equipIdx]
|
||||
if (equip) {
|
||||
equip.applied = toggled
|
||||
let idVal = "#otherDicesLevel" // Default
|
||||
if (equip.equip.data.bonusdice) {
|
||||
idVal = "#bonusDicesLevel"
|
||||
}
|
||||
if (equip.equip.data.statdice) {
|
||||
idVal = "#statDicesLevel"
|
||||
}
|
||||
if (equip.equip.data.otherdice) {
|
||||
idVal = "#otherDicesLevel"
|
||||
}
|
||||
let newLevel = Number($(idVal).val())
|
||||
if (toggled) {
|
||||
newLevel += Number(equip.value)
|
||||
} else {
|
||||
newLevel -= Number(equip.value)
|
||||
}
|
||||
newLevel = (newLevel <0) ? 0 : newLevel
|
||||
$(idVal).val(newLevel)
|
||||
// Then refresh
|
||||
this.rollData.statDicesLevel = Number($('#statDicesLevel').val())
|
||||
this.rollData.specDicesLevel = Number($('#specDicesLevel').val())
|
||||
this.rollData.bonusDicesLevel = Number($('#bonusDicesLevel').val())
|
||||
this.rollData.hindranceDicesLevel = Number($('#hindranceDicesLevel').val())
|
||||
this.rollData.otherDicesLevel = Number($('#otherDicesLevel').val())
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
var dialog = this;
|
||||
function onLoad() {
|
||||
}
|
||||
$(function () { onLoad(); });
|
||||
|
||||
html.find('#specList').change(async (event) => {
|
||||
this.rollData.selectedSpec = event.currentTarget.value
|
||||
let spec = this.rollData.specList.find(item => item._id == this.rollData.selectedSpec)
|
||||
if ( spec) {
|
||||
this.rollData.specDiceLevel = spec.data.level
|
||||
this.rollData.specName = spec.name
|
||||
$('#specDicesLevel').val(this.rollData.specDiceLevel)
|
||||
} else {
|
||||
this.rollData.specName = undefined
|
||||
$('#specDicesLevel').val(0)
|
||||
}
|
||||
const content = await renderTemplate("systems/fvtt-Mournblade-rpg/templates/roll-dialog-generic.html", this.rollData)
|
||||
this.data.content = content
|
||||
this.render(true)
|
||||
});
|
||||
html.find('#statDicesLevel').change((event) => {
|
||||
this.rollData.statDicesLevel = Number(event.currentTarget.value)
|
||||
});
|
||||
html.find('#specDicesLevel').change((event) => {
|
||||
this.rollData.specDicesLevel = Number(event.currentTarget.value)
|
||||
});
|
||||
html.find('#bonusDicesLevel').change((event) => {
|
||||
this.rollData.bonusDicesLevel = Number(event.currentTarget.value)
|
||||
});
|
||||
html.find('#hindranceDicesLevel').change((event) => {
|
||||
this.rollData.hindranceDicesLevel = Number(event.currentTarget.value)
|
||||
});
|
||||
html.find('#otherDicesLevel').change((event) => {
|
||||
this.rollData.otherDicesLevel = Number(event.currentTarget.value)
|
||||
});
|
||||
html.find('.effect-clicked').change((event) => {
|
||||
let toggled = event.currentTarget.checked
|
||||
let effectIdx = $(event.currentTarget).data("effect-idx")
|
||||
this.manageEffects( effectIdx, toggled)
|
||||
});
|
||||
html.find('.armor-clicked').change((event) => {
|
||||
let toggled = event.currentTarget.checked
|
||||
let armorIdx = $(event.currentTarget).data("armor-idx")
|
||||
this.manageArmors( armorIdx, toggled)
|
||||
});
|
||||
html.find('.weapon-clicked').change((event) => {
|
||||
let toggled = event.currentTarget.checked
|
||||
let weaponIdx = $(event.currentTarget).data("weapon-idx")
|
||||
this.manageWeapons( weaponIdx, toggled)
|
||||
});
|
||||
html.find('.equip-clicked').change((event) => {
|
||||
let toggled = event.currentTarget.checked
|
||||
let equipIdx = $(event.currentTarget).data("equip-idx")
|
||||
this.manageEquip( equipIdx, toggled)
|
||||
});
|
||||
|
||||
|
||||
|
||||
html.find('.apply-modifier').change(async (event) => {
|
||||
let modifierIdx = $(event.currentTarget).data("modifier-idx")
|
||||
let modifier = this.rollData.modifiers[modifierIdx]
|
||||
modifier.system.apply = event.currentTarget.checked
|
||||
})
|
||||
|
||||
html.find('#modificateur').change(async (event) => {
|
||||
this.rollData.modificateur = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#typeAttaque').change(async (event) => {
|
||||
this.rollData.typeAttaque = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#difficulte').change(async (event) => {
|
||||
this.rollData.difficulte = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#attrKey').change(async (event) => {
|
||||
this.rollData.attrKey = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#runemode').change(async (event) => {
|
||||
this.rollData.runemode = String(event.currentTarget.value)
|
||||
})
|
||||
html.find('#runeame').change(async (event) => {
|
||||
this.rollData.runeame = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#isMonte').change(async (event) => {
|
||||
this.rollData.desavantages.isMonte = event.currentTarget.checked
|
||||
})
|
||||
|
||||
html.find('#cibleausol').change(async (event) => {
|
||||
this.rollData.desavantages.cibleausol = event.currentTarget.checked
|
||||
})
|
||||
html.find('#cibledesarmee').change(async (event) => {
|
||||
this.rollData.desavantages.cibledesarmee = event.currentTarget.checked
|
||||
})
|
||||
html.find('#ciblerestreint').change(async (event) => {
|
||||
this.rollData.desavantages.ciblerestreint = event.currentTarget.checked
|
||||
})
|
||||
html.find('#cibleimmobilisée').change(async (event) => {
|
||||
this.rollData.desavantages.cibleimmobilisée = event.currentTarget.checked
|
||||
})
|
||||
html.find('#ciblesurplomb').change(async (event) => {
|
||||
this.rollData.desavantages.ciblesurplomb = event.currentTarget.checked
|
||||
})
|
||||
|
||||
html.find('#doubleD20').change(async (event) => {
|
||||
this.rollData.doubleD20 = event.currentTarget.checked
|
||||
})
|
||||
html.find('#visee').change(async (event) => {
|
||||
this.rollData.visee = event.currentTarget.checked
|
||||
})
|
||||
html.find('#cibleconsciente').change(async (event) => {
|
||||
this.rollData.cibleconsciente = event.currentTarget.checked
|
||||
})
|
||||
html.find('#ciblecourt').change(async (event) => {
|
||||
this.rollData.ciblecourt = event.currentTarget.checked
|
||||
})
|
||||
html.find('#typeCouvert').change(async (event) => {
|
||||
this.rollData.typeCouvert = String(event.currentTarget.value)
|
||||
})
|
||||
|
||||
}
|
||||
}
|
@ -8,13 +8,13 @@ export class MournbladeUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async init() {
|
||||
Hooks.on('renderChatLog', (log, html, data) => MournbladeUtility.chatListeners(html));
|
||||
Hooks.on('renderChatMessageHTML', (log, html, data) => MournbladeUtility.chatListeners(html))
|
||||
Hooks.on("getChatMessageContextOptions", (html, options) => MournbladeUtility.chatRollMenu(html, options))
|
||||
Hooks.on('renderChatMessageHTML', (message, html, data) => MournbladeUtility.chatMessageHandler(message, html, data))
|
||||
|
||||
Hooks.on("getCombatTrackerEntryContext", (html, options) => {
|
||||
MournbladeUtility.pushInitiativeOptions(html, options);
|
||||
});
|
||||
Hooks.on("dropCanvasData", (canvas, data) => {
|
||||
MournbladeUtility.dropItemOnToken(canvas, data)
|
||||
});
|
||||
})
|
||||
|
||||
this.rollDataStore = {}
|
||||
this.defenderStore = {}
|
||||
@ -22,26 +22,50 @@ export class MournbladeUtility {
|
||||
|
||||
Handlebars.registerHelper('count', function (list) {
|
||||
return list.length;
|
||||
});
|
||||
})
|
||||
Handlebars.registerHelper('includes', function (array, val) {
|
||||
return array.includes(val);
|
||||
});
|
||||
})
|
||||
Handlebars.registerHelper('upper', function (text) {
|
||||
return text.toUpperCase();
|
||||
});
|
||||
})
|
||||
Handlebars.registerHelper('lower', function (text) {
|
||||
return text.toLowerCase()
|
||||
})
|
||||
Handlebars.registerHelper('upperFirst', function (text) {
|
||||
if (typeof text !== 'string') return text
|
||||
return text.charAt(0).toUpperCase() + text.slice(1)
|
||||
});
|
||||
})
|
||||
Handlebars.registerHelper('notEmpty', function (list) {
|
||||
return list.length > 0;
|
||||
});
|
||||
})
|
||||
Handlebars.registerHelper('mul', function (a, b) {
|
||||
return parseInt(a) * parseInt(b);
|
||||
})
|
||||
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
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
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static sortArrayObjectsByName(myArray) {
|
||||
myArray.sort((a, b) => {
|
||||
return a.name.localeCompare(b.name);
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getAttributs() {
|
||||
return { adr: "Adresse", pui: "Puissance", cla: "Clairvoyance", pre: "Présence", tre: "Trempe"}
|
||||
return game.system.mournblade.config.attributs
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static pushInitiativeOptions(html, options) {
|
||||
@ -56,6 +80,11 @@ export class MournbladeUtility {
|
||||
static async ready() {
|
||||
const skills = await MournbladeUtility.loadCompendium("fvtt-mournblade.skills")
|
||||
this.skills = skills.map(i => i.toObject())
|
||||
|
||||
game.system.mournblade.config.listeNiveauSkill = MournbladeUtility.createDirectOptionList(0, 10)
|
||||
game.system.mournblade.config.listeNiveauCreature = MournbladeUtility.createDirectOptionList(0, 35)
|
||||
game.system.mournblade.config.modificateurOptions = MournbladeUtility.createArrayOptionList(-15, 15)
|
||||
game.system.mournblade.config.pointsAmeOptions = MournbladeUtility.createDirectOptionList(0, 20)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -74,22 +103,70 @@ export class MournbladeUtility {
|
||||
static getOptionsStatusList() {
|
||||
return this.optionsStatusList;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getPredilection(comp, predIdx) {
|
||||
let pred = foundry.utils.duplicate(comp.system.predilections)
|
||||
return foundry.utils.duplicate(pred[predIdx] || { name: "Error!" })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async chatMessageHandler(message, html, data) {
|
||||
const chatCard = $(html).find('.action-section')
|
||||
if (chatCard.length > 0) {
|
||||
// If the user is the message author or the actor owner, proceed
|
||||
const actor = game.actors.get(data.message.speaker.actor)
|
||||
// DEBUG : console.log("FOUND 1!!! ", actor, data.message)
|
||||
if (actor?.isOwner || game.user.isGM) {
|
||||
return
|
||||
}
|
||||
chatCard.hide()
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async chatListeners(html) {
|
||||
|
||||
html.on("click", '.view-item-from-chat', event => {
|
||||
game.system.Mournblade.creator.openItemView(event)
|
||||
});
|
||||
$(html).on("click", '.predilection-reroll', async event => {
|
||||
let predIdx = $(event.currentTarget).data("predilection-index")
|
||||
let messageId = MournbladeUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
await actor.setPredilectionUsed(rollData.competence._id, predIdx)
|
||||
rollData.competence = foundry.utils.duplicate(actor.getCompetence(rollData.competence._id))
|
||||
rollData.predilectionUsed = MournbladeUtility.getPredilection(rollData.competence, predIdx)
|
||||
await MournbladeUtility.rollMournblade(rollData)
|
||||
})
|
||||
|
||||
$(html).on("click", '.arme-roll-degats', async event => {
|
||||
let messageId = MournbladeUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
MournbladeUtility.rollDegatsFromAttaque(rollData)
|
||||
|
||||
})
|
||||
|
||||
$(html).on("click", '.arme-apply-degats', async event => {
|
||||
let messageId = MournbladeUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
if (game.user.isGM) {
|
||||
MournbladeUtility.applyDegatsFromAttaque(rollData)
|
||||
} else {
|
||||
game.socket.emit("system.fvtt-mournblade", { name: "msg_apply_damage", data: { rolLData: rollData } })
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async preloadHandlebarsTemplates() {
|
||||
|
||||
const templatePaths = [
|
||||
'systems/fvtt-mournblade/templates/editor-notes-gm.html',
|
||||
'systems/fvtt-mournblade/templates/partial-item-description.html'
|
||||
'systems/fvtt-mournblade/templates/editor-notes-gm.html',
|
||||
'systems/fvtt-mournblade/templates/partial-item-description.html'
|
||||
]
|
||||
return loadTemplates(templatePaths);
|
||||
return foundry.applications.handlebars.loadTemplates(templatePaths);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -108,7 +185,7 @@ export class MournbladeUtility {
|
||||
}
|
||||
|
||||
static findChatMessage(current) {
|
||||
return MournbladeUtility.findNodeMatching(current, it => it.classList.contains('chat-message') && it.attributes.getNamedItem('data-message-id'));
|
||||
return MournbladeUtility.findNodeMatching(current, it => it.classList.contains('chat-message') && it.attributes.getNamedItem('data-message-id'))
|
||||
}
|
||||
|
||||
static findNodeMatching(current, predicate) {
|
||||
@ -121,19 +198,6 @@ export class MournbladeUtility {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static templateData(it) {
|
||||
return MournbladeUtility.data(it)?.data ?? {}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static data(it) {
|
||||
if (it instanceof Actor || it instanceof Item || it instanceof Combatant) {
|
||||
return it.data;
|
||||
}
|
||||
return it;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static createDirectOptionList(min, max) {
|
||||
let options = {};
|
||||
@ -142,12 +206,10 @@ export class MournbladeUtility {
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static buildListOptions(min, max) {
|
||||
let options = ""
|
||||
static createArrayOptionList(min, max) {
|
||||
let options = [];
|
||||
for (let i = min; i <= max; i++) {
|
||||
options += `<option value="${i}">${i}</option>`
|
||||
options.push({key:`${i}`, label:`${i}`});
|
||||
}
|
||||
return options;
|
||||
}
|
||||
@ -162,27 +224,6 @@ export class MournbladeUtility {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getDefenseState(actorId) {
|
||||
return this.defenderStore[actorId];
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static updateRollData(rollData) {
|
||||
|
||||
let id = rollData.rollId;
|
||||
let oldRollData = this.rollDataStore[id] || {};
|
||||
let newRollData = mergeObject(oldRollData, rollData);
|
||||
this.rollDataStore[id] = newRollData;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static saveRollData(rollData) {
|
||||
game.socket.emit("system.Mournblade-rpg", {
|
||||
name: "msg_update_roll", data: rollData
|
||||
}); // Notify all other clients of the roll
|
||||
this.updateRollData(rollData);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getRollData(id) {
|
||||
return this.rollDataStore[id];
|
||||
@ -190,12 +231,10 @@ export class MournbladeUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static onSocketMesssage(msg) {
|
||||
//console.log("SOCKET MESSAGE", msg.name, game.user.character.id, msg.data.defenderId);
|
||||
if (msg.name == "msg_update_defense_state") {
|
||||
this.updateDefenseState(msg.data.defenderId, msg.data.rollId);
|
||||
}
|
||||
if (msg.name == "msg_update_roll") {
|
||||
this.updateRollData(msg.data);
|
||||
if (msg.name == "msg_apply_damage") {
|
||||
if (game.user.isGM) {
|
||||
this.applyDegatsFromAttaque(msg.data.rollData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -244,21 +283,304 @@ export class MournbladeUtility {
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static computeResult(rollData) {
|
||||
if (rollData.mainDice == "1d20") {
|
||||
let diceValue = rollData.roll.terms[0].results[0].result
|
||||
diceValue *= (rollData.doubleD20) ? 2 : 1
|
||||
//console.log("PAIR/IMP", diceValue)
|
||||
if (diceValue % 2 == 1) {
|
||||
//console.log("PAIR/IMP2", diceValue)
|
||||
rollData.finalResult -= rollData.roll.terms[0].results[0].result // Substract value
|
||||
if (diceValue == 1 || diceValue == 11) {
|
||||
rollData.isDramatique = true
|
||||
rollData.isSuccess = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//console.log("Result : ", rollData)
|
||||
if (rollData.difficulte > 0 && !rollData.isDramatique) {
|
||||
rollData.isSuccess = (rollData.finalResult >= rollData.difficulte)
|
||||
rollData.isHeroique = ((rollData.finalResult - rollData.difficulte) >= 10)
|
||||
rollData.isDramatique = ((rollData.finalResult - rollData.difficulte) <= -10)
|
||||
rollData.isPureSuccess = (rollData.isSuccess && !rollData.isHeroique)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rollMournblade(rollData) {
|
||||
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-Mournblade-rpg/templates/chat-generic-result.html`, rollData)
|
||||
});
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
if (rollData.attrKey == "tochoose") { // No attr selected, force address
|
||||
rollData.attrKey = "adr"
|
||||
}
|
||||
if (!rollData.attr) {
|
||||
rollData.actionImg = "systems/fvtt-mournblade/assets/icons/" + actor.system.attributs[rollData.attrKey].labelnorm + ".webp"
|
||||
rollData.attr = foundry.utils.duplicate(actor.system.attributs[rollData.attrKey])
|
||||
}
|
||||
|
||||
rollData.diceFormula = rollData.mainDice
|
||||
if (rollData.doubleD20) { // Multiply result !
|
||||
rollData.diceFormula += "*2"
|
||||
if (!rollData.isReroll) {
|
||||
actor.changeEclat(-1)
|
||||
}
|
||||
}
|
||||
//console.log("BEFORE COMP", rollData)
|
||||
if (rollData.competence) {
|
||||
rollData.predilections = foundry.utils.duplicate(rollData.competence.system.predilections)
|
||||
let compmod = (rollData.competence.system.niveau == 0) ? -3 : 0
|
||||
rollData.diceFormula += `+${rollData.attr.value}+${rollData.competence.system.niveau}+${rollData.modificateur}+${compmod}`
|
||||
} else {
|
||||
rollData.diceFormula += `+${rollData.attr.value}*2+${rollData.modificateur}`
|
||||
}
|
||||
rollData.diceFormula += `+${rollData.malusSante}+${rollData.malusAme}`
|
||||
|
||||
if (rollData.arme?.type == "arme") {
|
||||
rollData.diceFormula += `+${rollData.arme.system.bonusmaniementoff}`
|
||||
}
|
||||
|
||||
// Apply modifiers
|
||||
for (let modifier of rollData.modifiers) {
|
||||
if (modifier.system.modifiertype == "roll" && modifier.system.apply) {
|
||||
rollData.diceFormula += `+${modifier.system.value}`
|
||||
}
|
||||
}
|
||||
// Apply desavantages
|
||||
let desavantagesBonus = 0
|
||||
for (let desavantage in rollData.desavantages) {
|
||||
if (rollData.desavantages[desavantage]) {
|
||||
desavantagesBonus += 5
|
||||
}
|
||||
}
|
||||
desavantagesBonus = Math.min(15, desavantagesBonus)
|
||||
rollData.diceFormula += `+${desavantagesBonus}`
|
||||
|
||||
// Monté ?
|
||||
if (rollData.isMonte) {
|
||||
rollData.diceFormula += "+5"
|
||||
}
|
||||
|
||||
// Specific modifier for distance
|
||||
if (rollData.arme?.system?.isDistance) {
|
||||
if (rollData.visee) {
|
||||
rollData.diceFormula += "+5"
|
||||
}
|
||||
if (rollData.cibleconsciente) {
|
||||
rollData.diceFormula += `-${rollData.defender.system.attributs.adr.value}`
|
||||
}
|
||||
if (rollData.ciblecourt) {
|
||||
if (rollData.difficulte <= 15) { // Portée courte ou moins
|
||||
rollData.diceFormula += `-5`
|
||||
} else {
|
||||
rollData.diceFormula += `-10`
|
||||
}
|
||||
}
|
||||
if (rollData.typeCouvert != "aucun") {
|
||||
rollData.diceFormula += `+${rollData.config.couverts[rollData.typeCouvert].value}`
|
||||
}
|
||||
}
|
||||
|
||||
if (rollData.rune) {
|
||||
rollData.runeduree = Math.ceil((rollData.runeame + 3) / 3)
|
||||
if (rollData.runemode == "inscrire") {
|
||||
rollData.runeduree *= 2
|
||||
}
|
||||
if (rollData.runemode == "prononcer") {
|
||||
rollData.runeduree = 1
|
||||
}
|
||||
}
|
||||
|
||||
let myRoll = await new Roll(rollData.diceFormula).evaluate();
|
||||
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.roll = foundry.utils.duplicate(myRoll)
|
||||
rollData.diceResult = myRoll.terms[0].results[0].result
|
||||
console.log(">>>> ", myRoll)
|
||||
|
||||
rollData.finalResult = myRoll.total
|
||||
this.computeResult(rollData)
|
||||
|
||||
// Application immédiate selon type de jet
|
||||
if (rollData.rune) {
|
||||
let subAme = rollData.runeame
|
||||
if (rollData.isEchec && !rollData.isDramatique) {
|
||||
subAme = Math.ceil((subAme + 1) / 2)
|
||||
}
|
||||
actor.subPointsAme(rollData.runemode, subAme)
|
||||
}
|
||||
if (rollData.typeAttaque == "assomer" && rollData.defenderTokenId && rollData.isPureSuccess) {
|
||||
let defender = game.canvas.tokens.get(rollData?.defenderTokenId)?.actor
|
||||
defender.setModifier("Assomer : Prochaine action", "roll", -5)
|
||||
}
|
||||
if (rollData.typeAttaque == "fuir" && rollData.difficulte > 0 && !rollData.isSuccess) {
|
||||
actor.setModifier("Fuite échouée : -5 en défense ce round et suivant", "defense", -5)
|
||||
}
|
||||
if (rollData.typeAttaque == "immobiliser" && rollData.difficulte > 0 && rollData.isPureSuccess) {
|
||||
actor.setModifier("Immobilisation en cours : -5 pour prochaine action", "roll", -5)
|
||||
}
|
||||
if (rollData.typeAttaque == "chargecavalerie") {
|
||||
actor.setModifier("Charge de Cavalerie : -5 défense pour le tour", "defense", -5)
|
||||
}
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await foundry.applications.handlebars.renderTemplate(`systems/fvtt-mournblade/templates/chat-generic-result.html`, rollData)
|
||||
}, rollData)
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rollDegatsFromAttaque(rollData) {
|
||||
let maximize = false
|
||||
let degatsMessage = "Degats normaux"
|
||||
|
||||
if (rollData.arme?.system?.isMelee) {
|
||||
rollData.degatsFormula = rollData.arme.system.totalDegats
|
||||
if (rollData.isHeroique) { // Deux fois les dés de dégats
|
||||
degatsMessage = "Dégats doublés"
|
||||
}
|
||||
|
||||
if (rollData.typeAttaque == "assomer") {
|
||||
rollData.degatsFormula = false
|
||||
}
|
||||
|
||||
if (rollData.typeAttaque == "charger") {
|
||||
rollData.degatsFormula += "+2"
|
||||
}
|
||||
if (rollData.typeAttaque == "chargecavalerie") {
|
||||
rollData.degatsFormula += "+5"
|
||||
}
|
||||
|
||||
if (rollData.typeAttaque == "precise") {
|
||||
degatsMessage = "Degats normaux"
|
||||
if (rollData.isHeroique) { // Degats max
|
||||
maximize = true
|
||||
degatsMessage = "Dégats maximaux, ignore l'armure du défenseur";
|
||||
rollData.ignoreDefenseArmor = true
|
||||
}
|
||||
}
|
||||
if (rollData.typeAttaque == "feinte") {
|
||||
degatsMessage = "Pas de dégats, mais bonus pour prochaine attaque"
|
||||
rollData.degatsFormula = false
|
||||
rollData.nextBonus = 5
|
||||
if (rollData.isHeroique) { // Bonus pour prochaine action
|
||||
rollData.nextBonus = 10
|
||||
rollData.nextBonusDegats = 10
|
||||
}
|
||||
}
|
||||
if (rollData.typeAttaque == "coupbas") {
|
||||
degatsMessage = "Pas de dégats, mais malus pour prochaine action complexe du défenseur"
|
||||
rollData.degatsFormula = false
|
||||
rollData.nextMalus = 5
|
||||
if (rollData.isHeroique) { // Malus pour prochaine action
|
||||
rollData.nextMalus = 15
|
||||
}
|
||||
}
|
||||
if (rollData.typeAttaque == "contenir") {
|
||||
degatsMessage = "Pas de dégats, mais l'adversaire ne peut pas vous attaquer pour le reste du tour"
|
||||
rollData.degatsFormula = false
|
||||
if (rollData.isHeroique) { // Malus pour prochaine action
|
||||
degatsMessage = "Pas de dégats, mais tout les adversaires avec une défense inférieure ou égale à " + rollData.finalResult - 10 +
|
||||
" ne peuvent pas vous attaquer pour le reste du tour"
|
||||
}
|
||||
}
|
||||
if (rollData.typeAttaque == "desarmer") {
|
||||
degatsMessage = "Pas de dégats, mais l'adversaire reçoit un malus de -5 pour sa prochaine action"
|
||||
rollData.degatsFormula = false
|
||||
if (rollData.isHeroique) { // Malus pour prochaine action
|
||||
rollData.defenderDesarme = true
|
||||
degatsMessage = "Pas de dégats, mais l'arme de votre adversaire est arrachée de ses mains"
|
||||
}
|
||||
}
|
||||
} else { // Armes à distance
|
||||
rollData.degatsFormula = rollData.arme.system.totalDegats
|
||||
}
|
||||
|
||||
// Perform the roll, show the dice
|
||||
rollData.finalResult = 0
|
||||
rollData.degatsMessage = degatsMessage
|
||||
if (rollData.degatsFormula) {
|
||||
console.log("Degats formula", rollData.degatsFormula)
|
||||
// Twice!maximize
|
||||
if (rollData.isHeroique && !maximize) {
|
||||
rollData.degatsFormula += "+" + rollData.degatsFormula
|
||||
}
|
||||
// Latest modifiers
|
||||
for (let mod of rollData.modifiers) {
|
||||
if (mod.system.modifiertype == "degats") {
|
||||
rollData.degatsFormula += `+${mod.system.value}`
|
||||
}
|
||||
}
|
||||
let degatsRoll = await new Roll(rollData.degatsFormula).evaluate({ maximize: maximize })
|
||||
await this.showDiceSoNice(degatsRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.degatsRoll = foundry.utils.duplicate(degatsRoll)
|
||||
rollData.finalResult = degatsRoll.total
|
||||
}
|
||||
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-mournblade/templates/chat-degats-result.html`, rollData)
|
||||
}, rollData)
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static applyDegatsFromAttaque(rollData) {
|
||||
let defender = game.canvas.tokens.get(rollData?.defenderTokenId)?.actor
|
||||
if (defender && rollData.arme) {
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
if (rollData.typeAttaque == "desarmer" && !rollData.isHeroique) {
|
||||
defender.setModifier("Malus suite à désarmement", "roll", -5)
|
||||
}
|
||||
if (rollData.typeAttaque == "charger") {
|
||||
actor.setModifier("Défense suite à charge", "roll", -5)
|
||||
}
|
||||
if (rollData.nextBonus) {
|
||||
actor.setModifier("Prochaine attaque", "roll", rollData.nextBonus)
|
||||
if (rollData.nextDegatsBonus) {
|
||||
actor.setModifier("Prochaine attaque", "degats", rollData.nextDegatsBonus)
|
||||
}
|
||||
}
|
||||
if (rollData.nextMalus) {
|
||||
defender.setModifier("Prochaine action complexe", "roll", -rollData.nextMalus)
|
||||
}
|
||||
if (rollData.defenderDesarme) {
|
||||
ui.notifications.info("L'arme de " + defender.name + " est arrachée de ses mains (à gérer manuellement)")
|
||||
}
|
||||
let degats = rollData.finalResult
|
||||
|
||||
let type = (rollData.arme.system.nonletaux) ? "nonletaux" : "letaux"
|
||||
if (rollData.arme.system.ignorearmure) {
|
||||
rollData.ignoreDefenseArmor = true
|
||||
}
|
||||
defender.incDecSante(type, +degats, rollData.ignoreDefenseArmor)
|
||||
ui.notifications.info(defender.name + "a subi " + degats + " points de santé " + type + ".")
|
||||
} else {
|
||||
ui.notifications.warn("Pas de cible sélectionnée ou pas d'arme de défense équipée.")
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async bonusRollMournblade(rollData) {
|
||||
rollData.bonusFormula = rollData.addedBonus
|
||||
|
||||
let bonusRoll = await new Roll(rollData.bonusFormula).evaluate()
|
||||
await this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode"));
|
||||
rollData.bonusRoll = foundry.utils.duplicate(bonusRoll)
|
||||
|
||||
rollData.finalResult += rollData.bonusRoll.total
|
||||
|
||||
this.computeResult(rollData)
|
||||
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-mournblade/templates/chat-generic-result.html`, rollData)
|
||||
}, rollData)
|
||||
|
||||
// And save the roll
|
||||
this.saveRollData(rollData);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getUsers(filter) {
|
||||
return game.users.filter(filter).map(user => user.data._id);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getWhisperRecipients(rollMode, name) {
|
||||
switch (rollMode) {
|
||||
@ -276,7 +598,7 @@ export class MournbladeUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static blindMessageToGM(chatOptions) {
|
||||
let chatGM = duplicate(chatOptions);
|
||||
let chatGM = foundry.utils.duplicate(chatOptions);
|
||||
chatGM.whisper = this.getUsers(user => user.isGM);
|
||||
chatGM.content = "Blinde message of " + game.user.name + "<br>" + chatOptions.content;
|
||||
console.log("blindMessageToGM", chatGM);
|
||||
@ -291,7 +613,7 @@ export class MournbladeUtility {
|
||||
} else {
|
||||
item = game.items.get(dataItem.id)
|
||||
}
|
||||
return item;
|
||||
return item
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -312,7 +634,7 @@ export class MournbladeUtility {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static createChatMessage(name, rollMode, chatOptions) {
|
||||
static async createChatMessage(name, rollMode, chatOptions, rollData = undefined) {
|
||||
switch (rollMode) {
|
||||
case "blindroll": // GM only
|
||||
if (!game.user.isGM) {
|
||||
@ -330,14 +652,20 @@ export class MournbladeUtility {
|
||||
break;
|
||||
}
|
||||
chatOptions.alias = chatOptions.alias || name;
|
||||
ChatMessage.create(chatOptions);
|
||||
chatOptions.speaker = ChatMessage.getSpeaker();
|
||||
let msg = await ChatMessage.create(chatOptions)
|
||||
console.log("=======>", rollData)
|
||||
msg.setFlag("world", "mournblade-roll", rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getBasicRollData() {
|
||||
let rollData = {
|
||||
rollId: randomID(16),
|
||||
rollId: foundry.utils.randomID(16),
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
difficulte: 0,
|
||||
modificateur: 0,
|
||||
config: foundry.utils.duplicate(game.system.mournblade.config),
|
||||
}
|
||||
MournbladeUtility.updateWithTarget(rollData)
|
||||
return rollData
|
||||
@ -345,31 +673,180 @@ export class MournbladeUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static updateWithTarget(rollData) {
|
||||
let objectDefender
|
||||
let target = MournbladeUtility.getTarget();
|
||||
let target = MournbladeUtility.getTarget()
|
||||
if (target) {
|
||||
let defenderActor = game.actors.get(target.data.actorId)
|
||||
objectDefender = MournbladeUtility.data(defenderActor)
|
||||
objectDefender = mergeObject(objectDefender, target.data.actorData)
|
||||
rollData.defender = objectDefender
|
||||
rollData.attackerId = this.id
|
||||
rollData.defenderId = objectDefender._id
|
||||
rollData.defenderTokenId = target.id
|
||||
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
||||
rollData.defenderCombatValues = defender.getCombatValues()
|
||||
rollData.defender = defender.toObject() // Simpler
|
||||
rollData.defenderDefense = defender.getBestDefenseValue()
|
||||
rollData.armeDefense = defender.getBestDefenseValue()
|
||||
if (rollData.armeDefense) {
|
||||
rollData.difficulte = rollData.armeDefense.system.totalDefensif
|
||||
} else {
|
||||
ui.notifications.warn("Aucune arme de défense équipée, difficulté manuelle à positionner.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static createChatWithRollMode(name, chatOptions) {
|
||||
this.createChatMessage(name, game.settings.get("core", "rollMode"), chatOptions);
|
||||
static createChatWithRollMode(name, chatOptions, rollData = undefined) {
|
||||
this.createChatMessage(name, game.settings.get("core", "rollMode"), chatOptions, rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static applyBonneAventureRoll(li, changed, addedBonus) {
|
||||
let msgId = $(li).data("message-id")
|
||||
let msg = game.messages.get(msgId)
|
||||
if (msg) {
|
||||
let rollData = msg.getFlag("world", "mournblade-roll")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
actor.changeBonneAventure(changed)
|
||||
rollData.isReroll = true
|
||||
rollData.textBonus = "Bonus de Points d'Aventure"
|
||||
if (addedBonus == "reroll") {
|
||||
MournbladeUtility.rollMournblade(rollData)
|
||||
} else {
|
||||
rollData.addedBonus = addedBonus
|
||||
MournbladeUtility.bonusRollMournblade(rollData)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static applyEclatRoll(li, changed, addedBonus) {
|
||||
let msgId = $(li).data("message-id")
|
||||
let msg = game.messages.get(msgId)
|
||||
if (msg) {
|
||||
let rollData = msg.getFlag("world", "mournblade-roll")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
actor.changeEclat(changed)
|
||||
rollData.isReroll = true
|
||||
rollData.textBonus = "Bonus d'Eclat"
|
||||
rollData.addedBonus = addedBonus
|
||||
MournbladeUtility.bonusRollMournblade(rollData)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static chatRollMenu(html, options) {
|
||||
let canApply = li => canvas.tokens.controlled.length && li.find(".mournblade-roll").length
|
||||
let canApplyBALoyal = function (li) {
|
||||
let message = game.messages.get($(li).attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getBonneAventure() > 0 && actor.getAlignement() == "loyal")
|
||||
}
|
||||
let canApplyPELoyal = function (li) {
|
||||
let message = game.messages.get($(li).attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getEclat() > 0 && actor.getAlignement() == "loyal")
|
||||
}
|
||||
let canApplyBAChaotique = function (li) {
|
||||
let message = game.messages.get($(li).attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getBonneAventure() > 0 && actor.getAlignement() == "chaotique")
|
||||
}
|
||||
let canApplyBAChaotique3 = function (li) {
|
||||
let message = game.messages.get($(li).attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getBonneAventure() > 2 && actor.getAlignement() == "chaotique")
|
||||
}
|
||||
let canApplyPEChaotique = function (li) {
|
||||
let message = game.messages.get($(li).attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
return (!rollData.isReroll && actor.getEclat() > 0 && actor.getAlignement() == "chaotique")
|
||||
}
|
||||
let hasPredilection = function (li) {
|
||||
let message = game.messages.get($(li).attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
if (rollData.competence) {
|
||||
let nbPred = rollData.competence.data.predilections.filter(pred => !pred.used).length
|
||||
return (!rollData.isReroll && rollData.competence && nbPred > 0)
|
||||
}
|
||||
return false
|
||||
}
|
||||
let canCompetenceDouble = function (li) {
|
||||
let message = game.messages.get($(li).attr("data-message-id"))
|
||||
let rollData = message.getFlag("world", "mournblade-roll")
|
||||
let actor = MournbladeUtility.getActorFromRollData(rollData)
|
||||
if (rollData.competence) {
|
||||
return rollData.competence.data.doublebonus
|
||||
}
|
||||
return false
|
||||
}
|
||||
options.push(
|
||||
{
|
||||
name: "Ajouer +3 (1 point de Bonne Aventure)",
|
||||
icon: "<i class='fas fa-user-plus'></i>",
|
||||
condition: canApply && canApplyBALoyal,
|
||||
callback: li => MournbladeUtility.applyBonneAventureRoll(li, -1, "+3")
|
||||
}
|
||||
)
|
||||
options.push(
|
||||
{
|
||||
name: "Ajouer +6 (1 point de Bonne Aventure)",
|
||||
icon: "<i class='fas fa-user-plus'></i>",
|
||||
condition: canApply && canApplyBALoyal && canCompetenceDouble,
|
||||
callback: li => MournbladeUtility.applyBonneAventureRoll(li, -1, "+6")
|
||||
}
|
||||
)
|
||||
options.push(
|
||||
{
|
||||
name: "Ajouer +1d6 (1 point de Bonne Aventure)",
|
||||
icon: "<i class='fas fa-user-plus'></i>",
|
||||
condition: canApply && canApplyBAChaotique,
|
||||
callback: li => MournbladeUtility.applyBonneAventureRoll(li, -1, "+1d6")
|
||||
}
|
||||
)
|
||||
options.push(
|
||||
{
|
||||
name: "Ajouer +2d6 (1 point de Bonne Aventure)",
|
||||
icon: "<i class='fas fa-user-plus'></i>",
|
||||
condition: canApply && canApplyBAChaotique && canCompetenceDouble,
|
||||
callback: li => MournbladeUtility.applyBonneAventureRoll(li, -1, "+2d6")
|
||||
}
|
||||
)
|
||||
options.push(
|
||||
{
|
||||
name: "Relancer le dé (3 points de Bonne Aventure)",
|
||||
icon: "<i class='fas fa-user-plus'></i>",
|
||||
condition: canApply && canApplyBAChaotique3,
|
||||
callback: li => MournbladeUtility.applyBonneAventureRoll(li, -3, "reroll")
|
||||
}
|
||||
)
|
||||
options.push(
|
||||
{
|
||||
name: "Ajouter +10 (1 Point d'Eclat)",
|
||||
icon: "<i class='fas fa-user-plus'></i>",
|
||||
condition: canApply && canApplyPELoyal,
|
||||
callback: li => MournbladeUtility.applyEclatRoll(li, -1, "+10")
|
||||
}
|
||||
)
|
||||
options.push(
|
||||
{
|
||||
name: "Ajouter +20 (1 Point d'Eclat)",
|
||||
icon: "<i class='fas fa-user-plus'></i>",
|
||||
condition: canApply && canApplyPELoyal && canCompetenceDouble,
|
||||
callback: li => MournbladeUtility.applyEclatRoll(li, -1, "+20")
|
||||
}
|
||||
)
|
||||
return options
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async confirmDelete(actorSheet, li) {
|
||||
let itemId = li.data("item-id");
|
||||
let msgTxt = "<p>Are you sure to remove this Item ?";
|
||||
let msgTxt = "<p>Voulez vous supprimer cet item ?";
|
||||
let buttons = {
|
||||
delete: {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
label: "Yes, remove it",
|
||||
label: "Oui !",
|
||||
callback: () => {
|
||||
actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]);
|
||||
li.slideUp(200, () => actorSheet.render(false));
|
||||
@ -377,12 +854,12 @@ export class MournbladeUtility {
|
||||
},
|
||||
cancel: {
|
||||
icon: '<i class="fas fa-times"></i>',
|
||||
label: "Cancel"
|
||||
label: "Non !"
|
||||
}
|
||||
}
|
||||
msgTxt += "</p>";
|
||||
let d = new Dialog({
|
||||
title: "Confirm removal",
|
||||
title: "Confirmer la suppression",
|
||||
content: msgTxt,
|
||||
buttons: buttons,
|
||||
default: "cancel"
|
||||
|
46
packs/armes.db
Normal file
@ -0,0 +1,46 @@
|
||||
{"name":"Fouet","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Qb1h25U88mTM4h72"}},"_id":"0swiE8k5zfUIqmXu","system":{"description":"","typearme":"contactjet","isdefense":false,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d4 + 1","nonletaux":true,"deuxmains":false,"courte":3,"moyenne":0,"longue":0,"tr":0,"rarete":4,"prix":40,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964292,"modifiedTime":1664573659387,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"2BSVJXr0FGZZJ9fh","name":"Hache des mers","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.mGYFgteaWBDo10Xb"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"2d6","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":150,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964293,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Ecu d'acier","type":"bouclier","img":"systems/fvtt-mournblade/assets/icons/protection.webp","system":{"description":"","bonusdefense":3,"degats":"1d8","nonletaux":"false","rarete":9,"prix":10,"equipped":false,"isdefense":null},"effects":[],"ownership":{"default":0,"1Hr6ON03ooIXzvIm":3},"flags":{"core":{"sourceId":"Item.Gn52Vfp6Vg4cnpd0"}},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572521380,"modifiedTime":1664573706183,"lastModifiedBy":"1Hr6ON03ooIXzvIm"},"folder":null,"sort":0,"_id":"2PmIgKP4wZLHGp0s"}
|
||||
{"_id":"2qezkR1BdC0DcRIl","name":"Fléau d’armes","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.PHQabMgfk1GNOjKo"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D10+1","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":70,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964293,"modifiedTime":1664573659387,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arbalète","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.WYp8ojQN8HYJwUJc"}},"_id":"2zIdrBK88iuMbOF0","system":{"description":"","typearme":"tir","isdefense":null,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"2d6","nonletaux":null,"deuxmains":"","courte":25,"moyenne":50,"longue":75,"tr":3,"rarete":10,"prix":500,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964293,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"3Iv1oLpZcPEJVaI4","name":"Cimeterre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.RYxEg0gJfAlIZ4mw"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":1,"degats":"1d10","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":100,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Fronde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.TgVuNnytO9k2K0Xe"}},"_id":"4To8rLxv4efsoZK0","system":{"description":"","typearme":"tir","isdefense":false,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D4","nonletaux":false,"deuxmains":false,"courte":10,"moyenne":25,"longue":50,"tr":1,"rarete":2,"prix":1,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Pierre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.3YS9IfQddECnoagK"}},"_id":"4yKlK8MeSj5Zk8lM","system":{"description":"","typearme":"contactjet","isdefense":false,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D4","nonletaux":true,"deuxmains":false,"courte":3,"moyenne":6,"longue":15,"tr":1,"rarete":0,"prix":0,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659390,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"6e1JHoD1Jrz020R7","name":"Grand marteau","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.vjic4cPkJ0iMCIt5"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"2D6+2","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":120,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arc de cavalerie","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.5EWrgNQjJMx1t2v1"}},"_id":"88UuW1bdpFuCmkqb","system":{"description":"","typearme":"tir","isdefense":null,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d6","nonletaux":null,"deuxmains":null,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":7,"prix":100,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"9Eo9mRbPPZHN98Cr","name":"Épée de maître","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.kX3MbDFu9uYZVNf2"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1d8+ 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":120,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"9xPd4ITtyk3nmMoN","name":"Lance ilmioréenne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.8ApbiVgkx79OHVp2"}},"system":{"description":"<p>La lance ilmioréenne est un solide bâton de combat surmonté d’une pointe sur lequel est fi xé quasi perpendiculairement un fer de hache plat et étroit. Un contrepoids fi xé à l’autre extrémité sert à équilibrer l’arme qui peut être maniée à la fois comme une lance et comme une hache à deux mains, ce qui permet de maintenir ses ennemis à distance ou de leur porter des coups dévastateurs. Ces lances furent inventées à l’époque de la tribu d’Ilm, quand les lances et épées étaient déclarées illégales par les gouverneurs melnibonéens de la région. Certaines écoles militaires ilmioréennes enseignent toujours le Style Imar, qui mêle en une seule et même technique le combat à deux mains à la lance et le combat au bâton.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":2,"degats":"1d8 + 2","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":100,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"CeC5lAKs7NdPF05l","name":"Masse lourde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.DPfXgFj3gpjJ3nbR"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d10 + 1","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":80,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"CqP80SQFQOefpGgd","name":"Gourdin","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.CBIfq9eRd2RmoI4H"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1D6","nonletaux":true,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":5,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964294,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"CupT9m8L909l4Fo5","name":"Rapière","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.XIStcClTnmLoSwyR"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":3,"bonusmaniementdef":1,"degats":"1d8+ 1","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":150,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659390,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Hachette / Hache de lancer","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.5NHbRanxXA5vUE3B"}},"_id":"DzkeP7jbruqW4nQH","system":{"description":"","typearme":"contactjet","isdefense":false,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d4 + 1","nonletaux":false,"deuxmains":false,"courte":5,"moyenne":10,"longue":15,"tr":1,"rarete":5,"prix":50,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"FDeRBkxXwoZIuL9B","name":"Lance légère","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.LIVeq22E9EanRS9L"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d8","nonletaux":false,"deuxmains":false,"courte":10,"moyenne":25,"longue":50,"tr":1,"rarete":5,"prix":5,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arc de chasse","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.TrYZ9BxYukS1mbBX"}},"_id":"Hrm08cpgAMMV6Jpq","system":{"description":"","typearme":"tir","isdefense":false,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 - 1","nonletaux":false,"deuxmains":false,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":8,"prix":250,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"Iw3j4oC6H8HJ9MFQ","name":"Coup de pied / poing / tête","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.nBPKHsYIM0HgMcBy"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":3,"bonusmaniementdef":0,"degats":"1d4","nonletaux":true,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":0,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"KY22L6Lx5WxgvyGD","name":"Lance lourde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Kcl07bs7TOcne37W"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":2,"degats":"1d10","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":50,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964295,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arc du Désert des Larmes","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.QmYjdRCAk3MnxKJg"}},"_id":"MDpFpqmXpIX5VV80","system":{"description":"<p>Cet arc composite fait de bois, d’andouillers de cerf et/ou d’os est un arc court et très recourbé utilisé par les barbares du Désert des Larmes pour la chasse. On peut également trouver ce type d’arcs à Pikarayd et au Dorel.</p>","typearme":"tir","isdefense":null,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 + 1","nonletaux":null,"deuxmains":null,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":8,"prix":250,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964296,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"MP49mYF7FVuW9ALB","name":"Hache de bataille dite lormyrienne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Lpa6kesbzgKVtogn"}},"system":{"description":"<p>Cette double hache parfaitement équilibrée et proportionnée est l’arme favorite des chevaliers lormyriens. Il s’agit de l’arme idéale pour trancher, découper les lances ennemies et fendre les crânes.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"2d6 + 2","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":250,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964296,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"N5BbO2lGwzQnpvH0","name":"Couteau / Dague","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.5a9GKIvNgbbXBq3s"}},"system":{"description":"","typearme":"contactjet","isdefense":true,"bonusmaniementoff":3,"bonusmaniementdef":0,"degats":"1d4","nonletaux":false,"deuxmains":false,"courte":3,"moyenne":6,"longue":15,"tr":1,"rarete":1,"prix":10,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964297,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"QwrZbFeJUQv2OBqI","name":"Pique filkharienne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.dF9LxfA1crZBmT92"}},"system":{"description":"<p>Cette longue pique à grande lame de près de trois mètres de long est l’arme de prédilection des piquiers de l’armée de Filkhar. Très effi cace pour lutter contre des cavaliers ou des ennemis en train de charger, elle l’est beaucoup moins en combat rapproché.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d8 + 2","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":150,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964297,"modifiedTime":1664573659390,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"SzgkzHvzma8NiMd5","name":"Masse légère","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.xrWRNZBrEzkUQzRG"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 + 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":5,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964297,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"U8CoqFhGuT3ZHeq1","name":"Sabre d’abordage","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.aNUqO9OZT0GBszvv"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d8","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":50,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964297,"modifiedTime":1664573659390,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Javelot","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Zwiz9E3TbeUP8qHH"}},"_id":"aELvOR7A9DIJKgBk","system":{"description":"","typearme":"jet","isdefense":false,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d6","nonletaux":false,"deuxmains":false,"courte":25,"moyenne":50,"longue":75,"tr":1,"rarete":5,"prix":30,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964297,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"aJBVfqQ3JQNyVL7c","name":"Fourche / Faux de paysan","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.K5Ayim6mPKZoCSCc"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1D6","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":1,"prix":10,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964298,"modifiedTime":1664573659387,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Pavois","type":"bouclier","img":"systems/fvtt-mournblade/assets/icons/protection.webp","system":{"description":"<p>Le Pavois se plante dans le sol au début du combat et ne peut plus être déplacé jusqu'à son issue.</p>","bonusdefense":3,"degats":"0","nonletaux":"false","rarete":7,"prix":5,"equipped":false,"isdefense":"false"},"effects":[],"ownership":{"default":0,"1Hr6ON03ooIXzvIm":3},"flags":{"core":{"sourceId":"Item.E3A8EnGzQctvYndd"}},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572521380,"modifiedTime":1664573708981,"lastModifiedBy":"1Hr6ON03ooIXzvIm"},"folder":null,"sort":0,"_id":"b2VNhFBgbvlzaMw8"}
|
||||
{"name":"Bouclier d'Infanterie","type":"bouclier","img":"systems/fvtt-mournblade/assets/icons/protection.webp","system":{"description":"","bonusdefense":2,"degats":"1d6","nonletaux":"false","rarete":5,"prix":2,"equipped":false},"effects":[],"ownership":{"default":0,"1Hr6ON03ooIXzvIm":3},"flags":{"core":{"sourceId":"Item.jeMLhLTJhTU6TJ58"}},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572521380,"modifiedTime":1664573703190,"lastModifiedBy":"1Hr6ON03ooIXzvIm"},"folder":null,"sort":0,"_id":"bqDEyPj9OlGnEJsr"}
|
||||
{"_id":"c6l49ZmEBjUxfI3W","name":"Arme improvisée","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.E7gcmnNQK2t5OQjv"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d6","nonletaux":true,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":0,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964298,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arc de guerre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Tq6lUFPTkBN5cBwn"}},"_id":"cKf5z3fajUnxJh0r","system":{"description":"","typearme":"tir","isdefense":false,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d10 + 1","nonletaux":false,"deuxmains":false,"courte":30,"moyenne":50,"longue":100,"tr":1,"rarete":6,"prix":70,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964298,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Targe","type":"bouclier","img":"systems/fvtt-mournblade/assets/icons/protection.webp","system":{"description":"","bonusdefense":1,"degats":"1d4","nonletaux":"false","rarete":4,"prix":2,"equipped":false},"effects":[],"ownership":{"default":0,"1Hr6ON03ooIXzvIm":3},"flags":{"core":{"sourceId":"Item.9rJkBsRltxH08QT8"}},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572521380,"modifiedTime":1664573712553,"lastModifiedBy":"1Hr6ON03ooIXzvIm"},"folder":null,"sort":0,"_id":"cZorS8WAKNS0dN0T"}
|
||||
{"_id":"fLHX6ut131CQI630","name":"Main gauche","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.BBii0qi1unvSRNO4"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":3,"degats":"1d4 + 1","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":10,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964298,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"freCCeiYGfWmUAQU","name":"Marteau de guerre","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.6n2uSdYfRAsSqQnA"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":0,"degats":"1d8 + 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":6,"prix":70,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964298,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"j5659PJlrHz56V1k","name":"Sabre de Pan Tang","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.l3ffzso7GyHMKguD"}},"system":{"description":"<p>Ce long sabre effi lé sert aux Cavaliers démoniaques de Pan Tang pour couper les têtes depuis le dos de leurs monstrueuses montures reptiliennes à six pattes.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d10 + 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":120,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964299,"modifiedTime":1664573659390,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"lYtm5MwP96numskx","name":"Hallebarde","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.ZTdyIoMzE9kqm4e6"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":0,"bonusmaniementdef":2,"degats":"2d6","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":150,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964299,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"mQGT0vmDjoTZCW5u","name":"Lance melnibonéenne","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.KAl5qXHeYDoYRU6G"}},"system":{"description":"<p>La lance melnibonéenne, faite pour le combat à cheval ou à dos de dragon, ressemble à une lance ordinaire. Son fer est cependant plus fi n et plus étroit. Avant la chute d’Imrryr, il est quasi impossible de se procurer de telles armes sur les marchés des Jeunes Royaumes. Elles peuvent être maniées à une main comme lors des joutes à cheval ou à deux mains au cœur des mêlées.</p>","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":2,"degats":"2d6+ 4","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":10,"prix":70,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964299,"modifiedTime":1664573659389,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"name":"Arc en os","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Dy9dzVhXbNAVm3zn"}},"_id":"nzve5qucVN6FC5wn","system":{"description":"<p>Arc composite recourbé fait de bois, d’os et d’acier, l’arc en os melnibonéen est une arme extraordinairement puissante entre les mains d’un guerrier melnibonéen ou d’un archer esclave du Glorieux Empire. On peut se le procurer dans les Jeunes Royaumes après la chute d’Imrryr.</p>","typearme":"tir","isdefense":false,"bonusmaniementoff":3,"bonusmaniementdef":0,"degats":"1d8 + 1","nonletaux":false,"deuxmains":false,"courte":30,"moyenne":60,"longue":125,"tr":2,"rarete":10,"prix":500,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964299,"modifiedTime":1664573659385,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"sHj90bPcMaDlOw51","name":"Bâton ferré ou lesté","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.zoBHSbvJPnjbtPh6"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":2,"degats":"1D8","nonletaux":true,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":0,"prix":1,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964299,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"sju2r73hUHyGbHYg","name":"Épée courte / Glaive","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.Mxv5gMHRvRrsuhPA"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1D6+1","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":4,"prix":40,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964300,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"t2uQcWe7kirUOp3D","name":"Faucheur","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.OlmzE29fh9DFd8TF"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1d4 + 1","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":100,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964300,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"uatjBTFCE5ZCqhAd","name":"Fléau lourd","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.vDDw0qqM1Kg7Pu6T"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":1,"bonusmaniementdef":0,"degats":"1d10+ 3","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":7,"prix":150,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964300,"modifiedTime":1664573659387,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"v7ymzlEALvsk0poA","name":"Hache","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.2MwgptY2kE4tgYBe"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"1d6 + 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":2,"prix":30,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964300,"modifiedTime":1664573659388,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"wWk0Wfer06Ttmouv","name":"Épée large","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.iuAizxCvnUxmsjrn"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":1,"degats":"1d6+ 2","nonletaux":false,"deuxmains":false,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":5,"prix":70,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964300,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
||||
{"_id":"wv5EiePmPTpqFutt","name":"Épée longue","type":"arme","img":"systems/fvtt-mournblade/assets/icons/arme.webp","effects":[],"folder":null,"sort":0,"flags":{"core":{"sourceId":"Item.yiYtZ0sCUpMihvzz"}},"system":{"description":"","typearme":"contact","isdefense":true,"bonusmaniementoff":2,"bonusmaniementdef":0,"degats":"2d6 + 1","nonletaux":false,"deuxmains":true,"courte":0,"moyenne":0,"longue":0,"tr":0,"rarete":8,"prix":250,"equipped":false},"ownership":{"default":0,"RiMAsQHaUMojde7N":3},"_stats":{"systemId":"fvtt-mournblade","systemVersion":"10.0.9","coreVersion":"10.286","createdTime":1664572964301,"modifiedTime":1664573659386,"lastModifiedBy":"1Hr6ON03ooIXzvIm"}}
|
BIN
packs/armes/000235.ldb
Normal file
0
packs/armes/000242.log
Normal file
1
packs/armes/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000240
|
0
packs/armes/LOCK
Normal file
8
packs/armes/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2025/06/03-13:38:34.829840 7f53e4df86c0 Recovering log #238
|
||||
2025/06/03-13:38:34.883917 7f53e4df86c0 Delete type=3 #236
|
||||
2025/06/03-13:38:34.884056 7f53e4df86c0 Delete type=0 #238
|
||||
2025/06/03-13:46:40.549617 7f53df3ff6c0 Level-0 table #243: started
|
||||
2025/06/03-13:46:40.549726 7f53df3ff6c0 Level-0 table #243: 0 bytes OK
|
||||
2025/06/03-13:46:40.591881 7f53df3ff6c0 Delete type=0 #241
|
||||
2025/06/03-13:46:40.701236 7f53df3ff6c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
||||
2025/06/03-13:46:40.701447 7f53df3ff6c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
9
packs/armes/LOG.old
Normal file
@ -0,0 +1,9 @@
|
||||
2025/05/29-15:55:26.176609 7f53e5dfa6c0 Recovering log #233
|
||||
2025/05/29-15:55:26.190009 7f53e5dfa6c0 Delete type=3 #229
|
||||
2025/05/29-15:55:26.190103 7f53e5dfa6c0 Delete type=3 #221
|
||||
2025/05/29-15:55:26.190162 7f53e5dfa6c0 Delete type=0 #233
|
||||
2025/05/29-16:03:58.142314 7f53df3ff6c0 Level-0 table #239: started
|
||||
2025/05/29-16:03:58.142371 7f53df3ff6c0 Level-0 table #239: 0 bytes OK
|
||||
2025/05/29-16:03:58.149718 7f53df3ff6c0 Delete type=0 #237
|
||||
2025/05/29-16:03:58.170022 7f53df3ff6c0 Manual compaction at level-0 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
||||
2025/05/29-16:03:58.170098 7f53df3ff6c0 Manual compaction at level-1 from '!items!0swiE8k5zfUIqmXu' @ 72057594037927935 : 1 .. '!items!wv5EiePmPTpqFutt' @ 0 : 0; will stop at (end)
|
BIN
packs/armes/MANIFEST-000240
Normal file
30
packs/dons.db
Normal file
@ -0,0 +1,30 @@
|
||||
{"name":"Protection du Sorcier","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu est protégé contre les attaques des créatures nées ou invoquées par la sorcellerie (un type d’Élémentaire, les Démons, les Automata…). La protection dont il bénéficie dépend du nombre de points d’Âme sacrifiés.</p>","allegeance":"chaos","prerequis":"6 ou plus en Trempe.","sacrifice":"<ul>\n<li>1 point d’Âme pour 1 point de protection. Accès réservé aux Novices et aux Adeptes.</li>\n<li>2 points d’Âme pour 2 points de protection. Accès réservé aux Chevaliers et aux Hérauts.</li>\n<li>3 points d’Âme pour un 3 points de protection. Accès réservé aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.WUPne9oDFTcdLtW9"}},"_id":"5dGXNiL3WN4cAk7X"}
|
||||
{"name":"Conscience extraplanaire","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu a conscience du tissu de la réalité. Il peut percevoir les passages et les portails menant vers d’autres plans dans une zone de 10 mètres par point d’Aspect chaotique grâce à un simple test de Clairvoyance + Perception / 15. S’il ignore l’existence de ce passage et qu’il passe devant, le MJ peut faire un test de Clairvoyance + Perception / 25 pour l’Élu derrière son écran.</p>","allegeance":"chaos","prerequis":"6 ou plus en Clairvoyance.","sacrifice":"<p>1 point d’Âme.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.1nIGWsNtx1NKxjPn"}},"_id":"5v0Y35LzqfAd0KnX"}
|
||||
{"name":"Santé renforcée (Loi)","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Les points de Santé de l’Élu sont recalculés en ajoutant à [(Puissance + Trempe) x 2]+ 5 le nombre de points d’Âme sacrifiés. Ce Don ne peut être pris qu’une seule fois même si l’Élu conclut plusieurs Pactes.</p>","allegeance":"loi","prerequis":"6 ou plus en Trempe.","sacrifice":"<p>1 point d’Âme par point de Santé supplémentaire, pour un maximum égal à l’Aspect du personnage.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.4ow7N6kdAWXbTApf"}},"_id":"6IS4zstVwJxG2lwy"}
|
||||
{"name":"Repos de l’Âme","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu récupère deux fois plus vite ses points d’Âme, soit 2 par heure et 4 en cas de repos.</p>","allegeance":"chaos","prerequis":"6 ou plus en Présence.","sacrifice":"<p>3 points d’Âme.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.KXciI0xwd6gSOLcZ"}},"_id":"8WLUjxBJtd33mZFp"}
|
||||
{"name":"Trait chaotique","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu gagne un trait du Chaos qu’il tire au hasard dans le tableau de la page 185 avec un d20. Il peut prendre ce Don trois fois. S’il tire un trait qu’il possède déjà, il doit relancer le d20. Ces traits sont permanents et définitifs, à moins que les Seigneurs du Chaos n’en décident autrement, notamment si l’Élu les dissimule trop à leur goût alors qu’il n’y est pas absolument contraint par des impératifs de survie immédiats.</p>","allegeance":"chaos","prerequis":"aucun","sacrifice":"<p>2 points d’Âme par Trait chaotique. L’Élu ne peut en avoir plus que sa Marge.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.BKzeOjGA13wQgO0S"}},"_id":"BuZM5BnSaPIGEiEq"}
|
||||
{"name":"Guérison","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu régénère rapidement. Chaque jour de repos, il regagne un nombre de points de Santé égal à sa Trempe /2 + son Aspect.</p>","allegeance":"loi","prerequis":"6 ou plus en Trempe.","sacrifice":"<p>3 point d’Âme.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.yvY0G3PffZWEl92R"}},"_id":"Eme2iVAF670LCeIH"}
|
||||
{"name":"Aide Élémentaire","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Ce Don permet d’appeler un Élémentaire à son secours une fois par scénario. La Puissance de l’Élémentaire est fi xée lors de l’octroi du Don. La nature de l’Élémentaire correspond à celle du Seigneur Élémentaire avec lequel le Pacte a été passé. Ce Don ne peut être pris qu’une fois par Seigneur Élémentaire vénéré.</p>","allegeance":"elementaires","prerequis":"","sacrifice":"<ul>\n<li>1 point d’Âme pour un Élémentaire mineur disposant de 5 points d’Âme. Accès réservé aux Novices et aux Adeptes.</li>\n<li>3 points d’Âme pour un Élémentaire médian disposant de 10 points d’Âme. Accès réservé aux Chevaliers et aux Hérauts.</li>\n<li>5 points d’Âme pour un Élémentaire majeur disposant de 15 points d’Âme. Accès réservé aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Wo42z8L33wLerUM8"}},"_id":"JAkSopwrh4QmKrPY"}
|
||||
{"name":"Augmentation du modificateur de dégâts","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Les dégâts causés par l’Élu bénéficient d’un bonus pour <em>un type d’armes donné</em>. Le bonus dépend du nombre de points d’Âme sacrifiés.</p>","allegeance":"loi","prerequis":"6 ou plus en Puissance.","sacrifice":"<ul>\n<li>1 point d’Âme pour un bonus de + 1. Accès réservé aux Novices et aux Adeptes.</li>\n<li>3 points d’Âme pour un bonus de + 2. Accès réservé aux Chevaliers et aux Hérauts.</li>\n<li>5 points d’Âme pour un bonus de + 3. Accès réservé aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.bqdkbOf7EsdsCRqu"}},"_id":"K4H2VC0jTCy7pYj7"}
|
||||
{"name":"L’exemple du Juste","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu est un exemple rayonnant pour ses camarades. Une fois par scénario, si l’Élu adresse pendant un tour de jeu une prière à une divinité de la Loi, lui et ses camarades (une dizaine tout au plus) seront bénis et recevront jusqu’à la fin de la scène un bonus à toutes leurs actions.</p>","allegeance":"loi","prerequis":"6 ou plus en Trempe.","sacrifice":"<ul>\n<li>1 point d’Âme pour un bonus de + 1. Accès réservé aux Novices et aux Adeptes.</li>\n<li>2 points d’Âme pour un bonus de + 2. Accès réservé aux Chevaliers et aux Hérauts.</li>\n<li>3 points d’Âme pour un bonus de + 3. Accès réservé aux Champions. </li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.C5ofSFNXoXZFo8ak"}},"_id":"KlfScJjqvlPtkcdZ"}
|
||||
{"name":"Abstinence","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu peut survivre en se privant d’un élément vital (nourriture, eau, sommeil, mais pas air) pendant un certain temps. La durée de ce pouvoir dépend du nombre de points d’Âme sacrifiés.</p>","allegeance":"tous","prerequis":"6 ou plus en Trempe","sacrifice":"<ul>\n<li>2 points d’Âme pour un jour. Accès réservé aux Novices et aux Adeptes.</li>\n<li>6 points d’Âme pour une semaine. Accès réservé aux Che\u0002valiers et aux Hérauts.</li>\n<li>10 points d’Âme pour un mois. Accès réservé aux Cham\u0002pions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Q4Sy7vOGgU7Zgi9p"}},"_id":"OJKMNtFsuVgkV3gh"}
|
||||
{"name":"Rupture Chaotique","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Lorsque l’Élu manie un certain type d’armes, il peut ajouter un bonus à son initiative ou bénéficier d’un bonus aux dégâts lors d’un combat, une fois par séance de jeu.</p>","allegeance":"chaos","prerequis":"6 ou plus en Puissance.","sacrifice":"<ul>\n<li>1 point d’Âme pour un bonus de + 1 aux dégâts ou + 5 en initiative. Accès réservé aux Novices et aux Adeptes.</li>\n<li>3 points d’Âme pour un bonus de + 2 aux dégâts ou + 7 en initiative. Accès réservé aux Chevaliers et aux Hérauts.</li>\n<li>5 points d’Âme pour un bonus de + 3 aux dégâts ou + 10 en initiative. Accès réservé aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.gMI6F4qY5Fi6okZ7"}},"_id":"Q1xDyjQy59lr5wAG"}
|
||||
{"name":"Sens du Pur","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu a immédiatement conscience de la présence passée ou actuelle du Chaos (sortilège à l’œuvre, puissant serviteur…). Le personnage est très sensible aux émanations chaotiques, elles lui soulèvent le cœur. La distance de détection peut aug\u0002menter en sacrifiant davantage de points d’Âme</p>","allegeance":"loi","prerequis":"6 ou plus en Adresse ou Clairvoyance.","sacrifice":"<ul>\n<li>1 point d’Âme pour détecter les ennemis dans un rayon de 10 mètres. Accès réservé aux Novices et aux Adeptes.</li>\n<li>2 points d’Âme pour détecter les ennemis dans un rayon de 100 mètres. Accès réservé aux Chevaliers et aux Hérauts.</li>\n<li>3 points d’Âme pour détecter les ennemis dans un rayon de 1000 mètres. Accès réservé aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.tp2435vHrj63GeAK"}},"_id":"RYgdBIikcBfN8xAp"}
|
||||
{"name":"Gardien des Millions de Sphères","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu a conscience du tissu de la réalité. Il peut sceller, par de longues prières psalmodiées, les passages et les portails donnant sur d’autres plans du Multivers. Cette action lui coûte le sacrifice d’un point d’Éclat. Tant que sa concentration reste tournée vers ce passage, le portail demeure scellé, comme si Donblas lui-même le gardait. Mais dès que le personnage s’endort, la porte, bien que fermée, n’est plus scellée. Certains plans très importants possèdent plusieurs passages menant vers les Jeunes Royaumes.</p>","allegeance":"loi","prerequis":"6 ou plus en Clairvoyance.","sacrifice":"<p>5 points d’Âme.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.tm1fjaETqhMAldqJ"}},"_id":"TKCaHLHccYw7JvFy"}
|
||||
{"name":"Vivacité","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Lors d’un test de Capacité Offensive, l’Élu voit la marge nécessaire à l’obtention d’une réussite héroïque diminuer de 1 (9 ou plus), de 2 (8 ou plus) ou de 3 (7 ou plus). </p>","allegeance":"tous","prerequis":"6 ou plus en Adresse ou Clairvoyance.","sacrifice":"<ul>\n<li>3 points d’Âme pour diminuer la marge de 1 (réussite héroïque sur 9 ou plus). Accès réservé aux Novices et aux Adeptes.</li>\n<li>5 points d’Âme pour diminuer la marge de 2 (réussite héroïque sur 8 ou plus). Accès réservé aux Chevaliers et aux Hérauts.</li>\n<li>7 points d’Âme pour diminuer la marge de 3 (réussite héroïque sur 7 ou plus). Accès réservé aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.GlhqSASDW0XdR243"}},"_id":"XaJAo8otOXmgtjzA"}
|
||||
{"name":"Augmentation de compétence (Chaos)","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Ce Don permet d’augmenter une compétence importante pour la voie spirituelle choisie. Le bonus octroyé dépend du nombre de points d’Âme sacrifi és. Ce Don peut être choisi plusieurs fois, mais il ne peut s’appliquer qu’une fois par compétence. </p>","allegeance":"chaos","prerequis":"6 ou plus en Clairvoyance.","sacrifice":"<ul>\n<li>1 point d’Âme pour un + 1 à une compétence. Accès réservé aux Novices et aux Adeptes.</li>\n<li>2 points d’Âme pour un + 2 à une compétence. Accès réservé aux Chevaliers et aux Hérauts.</li>\n<li>3 points d’Âme pour un + 3 à une compétence. Accès réservé aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.75OYBq5iGgdXVQcA"}},"_id":"aP4vSk6WOL4wXyyb"}
|
||||
{"name":"Dur à cuire","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu résiste aux effets liés à la fatigue et à la maladie. Le béné\u0002fi ciaire de ce Don a droit à un bonus de + 1 lors de ses tests de Trempe pour résister à la fatigue et à la maladie. Ce bonus peut augmenter en sacrifi ant davantage de points d’Âme.</p>","allegeance":"tous","prerequis":"6 ou plus en Trempe.","sacrifice":"<ul>\n<li>1 point d’Âme pour un bonus de + 2. Accès réservé aux Novices et aux Adeptes.</li>\n<li>2 points d’Âme pour un bonus de + 3. Accès réservé aux Chevaliers et aux Hérauts.</li>\n<li>3 points d’Âme pour un bonus de + 4. Accès réservé aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.jNeLj9DyylUj7LAl"}},"_id":"gK3glTgKTKRw9ref"}
|
||||
{"name":"Animal apprivoisé","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Le croyant se voit confier un animal normal (c’est-à-dire non surnaturel). L’animal apprivoisé est un membre standard de son espèce et obéit à des ordres simples, mais sans jamais aller contre sa nature. Le coût de ce Don dépend de la Puissance de la créature qui est fixée lors de son octroi. Si 1 point d’Âme supplémentaire est investi, la créature peut communiquer télé\u0002pathiquement avec son maître (et uniquement avec lui).</p>","allegeance":"betes","prerequis":"6 ou plus en Présence.","sacrifice":"<ul>\n<li>1 point d’Âme pour une créature d’une Puissance de 0 à 4. Accès réservé aux Novices et aux Adeptes.</li>\n<li>3 points d’Âme pour une créature d’une Puissance de 5 à 7. Accès réservé aux Chevaliers et aux Hérauts.</li>\n<li>5 points d’Âme pour une créature d’une Puissance de 8 à 10. Accès réservé aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.qDUei4wRjpRYi9Ps"}},"_id":"gN7DtvMJPASpPpQl"}
|
||||
{"name":"Protection du Mage","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu est protégé contre les attaques des créatures engendrées ou invoquées par la Sorcellerie (les Élémentaires, les Démons, les Automata…). La protection dont il bénéficie dépend du nombre de points d’Âme sacrifiés.</p>","allegeance":"loi","prerequis":"6 ou plus en Trempe.","sacrifice":"<ul>\n<li>1 point d’Âme pour 1 point de protection. Accès réservé aux Novices et aux Adeptes.</li>\n<li>2 points d’Âme pour 2 points de protection. Accès réservé aux Chevaliers et aux Hérauts.</li>\n<li>3 points d’Âme pour un 3 points de protection. Accès réservé aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.NVIG52HOiWGm6JcW"}},"_id":"j7iTQOFdiJUviTC9"}
|
||||
{"name":"Sang-Froid","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu peut supporter n’importe quel type de souffrance psy\u0002chique. Il ne subit pas les pénalités dues à l’état Déstabilisé (– 2) et Choqué (– 5). Il est immunisé à la torture mentale.</p>","allegeance":"chaos","prerequis":"6 ou plus en Trempe.","sacrifice":"<p>1 point d’Âme.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.KvdQLDhSpfAd2Iig"}},"_id":"lWXxInM05EiBu6uX"}
|
||||
{"name":"Dur à cuire (Chaos)","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu résiste aux effets liés à la fatigue et à la maladie. Le bénéfi ciaire de ce Don a droit à un bonus de + 1 lors de ses tests de Trempe pour résister à la fatigue et à la maladie. Ce bonus peut augmenter en sacrifi ant davantage de points d’Âme.</p>","allegeance":"chaos","prerequis":"6 ou plus en Trempe.","sacrifice":"<ul>\n<li>1 point d’Âme pour un bonus de + 1. Accès réservé aux Novices et aux Adeptes.</li>\n<li>2 points d’Âme pour un bonus de + 2. Accès réservé aux Chevaliers et aux Hérauts.</li>\n<li>3 points d’Âme pour un bonus de + 3.Accès réservé aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.E0kyJQ5gqCEcm0Aj"}},"_id":"oAKqbsLVd8cX4tjN"}
|
||||
{"name":"Augmentation de compétence","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Ce Don permet d’augmenter une compétence relative à la voie spirituelle choisie. Le bonus octroyé dépend du nombre de points d’Âme sacrifi és. Ce Don peut être choisi plusieurs fois, mais il ne peut s’appliquer qu’une fois par compétence. </p>","allegeance":"tous","prerequis":"6 ou plus en Clairvoyance.","sacrifice":"<ul>\n<li>1 point d’Âme pour un + 1 à une compétence. Accès réservé aux Novices et aux Adeptes.</li>\n<li>2 points d’Âme pour un + 2 à une compétence. Accès réservé aux Chevaliers et aux Hérauts.</li>\n<li>3 points d’Âme pour un + 3 à une compétence. Accès réservé aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.djDFklKJaW1oVTds"}},"_id":"pPNKneH7scfaEmGq"}
|
||||
{"name":"Augmentation de compétence (Loi)","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Ce Don permet d’augmenter une compétence importante pour la voie spirituelle choisie. Le bonus octroyé dépend du nombre de points d’Âme sacrifiés. Ce Don peut être choisi plusieurs fois mais il ne peut s’appliquer qu’une fois par compétence.</p>","allegeance":"loi","prerequis":"6 ou plus en Clairvoyance.","sacrifice":"<ul>\n<li>1 point d’Âme pour un + 1 à une compétence. Accès réservé aux Novices et aux Adeptes.</li>\n<li>2 points d’Âme pour un + 2 à une compétence. Accès réservé aux Chevaliers et aux Hérauts.</li>\n<li>3 points d’Âme pour un + 3 à une compétence. Accès réservé aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.gNL9lD7hofK32H7D"}},"_id":"qhOE8OTe5hNNgDtt"}
|
||||
{"name":"Santé renforcée","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Les points de Santé de l’Élu sont recalculés en ajoutant à [(Puissance + Trempe) x 2]+ 5 le nombre de points d’Âme sacrifiés. Ce Don ne peut être pris qu’une seule fois même si l’Élu conclut plusieurs Pactes.</p>","allegeance":"tous","prerequis":"6 ou plus en Trempe.","sacrifice":"<p>1 point d’Âme par point de Santé supplémentaire.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.dJnYsDcETkidd2s5"}},"_id":"sLgGn6zhkDdbpQlH"}
|
||||
{"name":"Rectitude","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu peut supporter n’importe quel type de souffrance. Il ne subit pas les pénalités dues à l’état Blessé (-2) et Gravement Blessé (-5). Il est immunisé contre la torture.</p>","allegeance":"loi","prerequis":"6 ou plus en Trempe.","sacrifice":"<p>1 point d’Âme.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.HpoTP9idEKi1NQGL"}},"_id":"t7Ez0rzqYOf48GfY"}
|
||||
{"name":"La voie du milieu","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Lors d’un combat, l’Élu ne subit plus les effets d’une réussite héroïque contre lui lors des tests de Capacité offensive. Il n’en profite plus non plus. À un haut niveau, il ne peut plus être affecté par les échecs dramatiques.</p>","allegeance":"loi","prerequis":"6 ou plus en Adresse ou Clairvoyance.","sacrifice":"<ul>\n<li>3 points d’Âme pour ne plus être affecté par les réussite héroïques.</li>\n<li>7 points d’Âme pour ne plus être affecté ni par les réus\u0002sites héroïques ni par les échecs dramatiques. Accès réser\u0002vé aux Champions</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.rOXDZ2020snvhtR2"}},"_id":"taXCPXiPEuOIKaUO"}
|
||||
{"name":"Perfection","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’un des attributs de l’Élu est augmenté, grâce à la bienveil\u0002lance de la divinité. Il ne peut dépasser le maximum imposé par l’espèce. Ce Don peut être choisi plusieurs fois, mais il ne peut s’appliquer qu’une fois par attribut.</p>","allegeance":"tous","prerequis":"6 ou plus dans l’attribut modifié.","sacrifice":"<ul>\n<li>3 points d’Âme pour un bonus de + 1. Accès réservé aux Novices et aux Adeptes.</li>\n<li>6 points d’Âme pour un bonus de + 2. Accès réservé aux Chevaliers et aux Hérauts.</li>\n<li>9 points d’Âme pour un bonus de + 3. Accès réservé aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.nSlFw6q7TCqxZ6tH"}},"_id":"vZBNRTeGGU5hsXtT"}
|
||||
{"name":"Sixième sens","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu sait où se trouvent des ennemis dont il a conscience et qui cherchent à lui nuire directement dans un rayon de 10 mètres. Attention, cette détection ne fonctionnera pas pour deviner que quelqu’un est simplement hostile à l’Élu ou le hait viscéralement. Il s’agit d’un pouvoir de localisation et de vigilance. La distance de détection peut augmenter en sacrifiant davantage de points d’Âme.</p>","allegeance":"chaos","prerequis":"6 ou plus en Adresse ou Clairvoyance.","sacrifice":"<ul>\n<li>1 point d’Âme pour détecter les ennemis dans un rayon de 10 mètres. Accès réservé aux Novices et aux Adeptes.</li>\n<li>2 points d’Âme pour détecter les ennemis dans un rayon de 100 mètres. Accès réservé aux Chevaliers et aux Hérauts.</li>\n<li>3 points d’Âme pour détecter les ennemis dans un rayon de 1000 mètres. Accès réservé aux Champions.</li>\n</ul>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.6CIPAVjSVsOqZBYc"}},"_id":"wsbGuOoFjHO6aQEm"}
|
||||
{"name":"Endurance","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu peut supporter n’importe quel type de souffrance. Il ne subit pas les pénalités dues à l’état Blessé (-2) et Gravement Blessé (-5). Il est immunisé à la torture si elle est infl igée à partir d’un des éléments tutélaires du personnage.</p>","allegeance":"elementaires","prerequis":"6 ou plus en Trempe.","sacrifice":"<p>3 points d’Âme.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.on94N7pylXJ8gtdF"}},"_id":"yJ6K9dYrdNxr5uWj"}
|
||||
{"name":"Le pilier de la Loi","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>Une fois par scénario, l’Élu peut résister à une menace ou agres\u0002sion, physique ou mentale, sans jeter les dés. Il est toutefois néces\u0002saire que l’Élu ait conscience du danger. L’Élu pourra par exemple résister à la terreur provoquée par une créature du Chaos parti\u0002culièrement abominable ou légendaire, mais ne pourra pas éviter d’être assommé par un habile voleur de Bakshaan qu’il n’avait pas vu. Cette résistance peut même être « extraordinaire » si l’Aspect de l’Élu est très haut.</p>\n<p>S’il est un Adepte ou un Novice, l’Élu peut résister à l’ivresse lors d’une nuit de beuverie chez un Prince-Marchand de Bakshaan.</p>\n<p>S’il est un Chevalier ou un Héraut, l’Élu peut résister à un coup surpuissant (celui-ci est annulé) ou à l’apparition gla\u0002çante d’un Démon. S’il est un Champion, il peut par exemple soutenir l’arche d’un temple qui s’écroule pendant quelques précieuses secondes afi n de laisser le temps à ses camarades de se mettre à l’abri (songez à Maciste, à Samson, ou tout simplement à Conan). Bref, n’hésitez pas à faire dans l’extraordinaire, mais ne bas\u0002culez pas dans le grosbillisme sans limite (ou alors ne nous le dites pas). Il revient au MJ de doser avec justesse ce Don.</p>","allegeance":"loi","prerequis":"7 ou plus en Trempe","sacrifice":"<p>3 points d’Âme.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.yZ84qzrGeIDfZXr1"}},"_id":"zef3VQat06Ronc5W"}
|
||||
{"name":"Œil exercé","type":"don","img":"systems/fvtt-mournblade/assets/icons/don.webp","data":{"description":"<p>L’Élu reçoit de la divinité qu’il vénère l’équivalent d’une Prédilection dans la Capacité spéciale Œil du sorcier (voir p. 199). Une fois par séance, il peut donc relancer le test de Clairvoyance + Perception.</p>","allegeance":"chaos","prerequis":"6 ou plus en Clairvoyance.","sacrifice":"<p>2 points d’Âme.</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.9Xrm1cfrCmkRtOBc"}},"_id":"zzz9JrtWjELdoAfK"}
|
BIN
packs/dons/000234.ldb
Normal file
0
packs/dons/000241.log
Normal file
1
packs/dons/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000239
|
0
packs/dons/LOCK
Normal file
8
packs/dons/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2025/06/03-13:38:35.003129 7f53dffff6c0 Recovering log #237
|
||||
2025/06/03-13:38:35.063448 7f53dffff6c0 Delete type=3 #235
|
||||
2025/06/03-13:38:35.063543 7f53dffff6c0 Delete type=0 #237
|
||||
2025/06/03-13:46:40.628405 7f53df3ff6c0 Level-0 table #242: started
|
||||
2025/06/03-13:46:40.628456 7f53df3ff6c0 Level-0 table #242: 0 bytes OK
|
||||
2025/06/03-13:46:40.666357 7f53df3ff6c0 Delete type=0 #240
|
||||
2025/06/03-13:46:40.701286 7f53df3ff6c0 Manual compaction at level-0 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
||||
2025/06/03-13:46:40.701434 7f53df3ff6c0 Manual compaction at level-1 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
9
packs/dons/LOG.old
Normal file
@ -0,0 +1,9 @@
|
||||
2025/05/29-15:55:26.234910 7f53dffff6c0 Recovering log #232
|
||||
2025/05/29-15:55:26.245499 7f53dffff6c0 Delete type=3 #228
|
||||
2025/05/29-15:55:26.245611 7f53dffff6c0 Delete type=3 #220
|
||||
2025/05/29-15:55:26.245670 7f53dffff6c0 Delete type=0 #232
|
||||
2025/05/29-16:03:58.183794 7f53df3ff6c0 Level-0 table #238: started
|
||||
2025/05/29-16:03:58.183822 7f53df3ff6c0 Level-0 table #238: 0 bytes OK
|
||||
2025/05/29-16:03:58.189942 7f53df3ff6c0 Delete type=0 #236
|
||||
2025/05/29-16:03:58.196960 7f53df3ff6c0 Manual compaction at level-0 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
||||
2025/05/29-16:03:58.197030 7f53df3ff6c0 Manual compaction at level-1 from '!items!5dGXNiL3WN4cAk7X' @ 72057594037927935 : 1 .. '!items!zzz9JrtWjELdoAfK' @ 0 : 0; will stop at (end)
|
BIN
packs/dons/MANIFEST-000239
Normal file
55
packs/equipement.db
Normal file
@ -0,0 +1,55 @@
|
||||
{"name":"Chapeau fatigué","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":0,"prix":2},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.D26fUtZxrzcTR07B"}},"_id":"1cZd2hlTV9tykDED"}
|
||||
{"name":"Bœuf","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.whAhz9pO1NUt8Pjm"}},"_id":"3pvWKiyXhc9mmg70"}
|
||||
{"name":"Manteau","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":4},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.FZztAyGbF2cL9wyc"}},"_id":"40P9lOUYI16gEGZS"}
|
||||
{"name":"Poney","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":30},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.VKZrNcrCm9Ju7ayv"}},"_id":"7MdI99vLmaytPNKE"}
|
||||
{"name":"Tenue complète d’homme fortuné","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>(pantalons de coton, chemise de drap fi n, pourpoint de velours, chapeau, bottes montantes ou chaussures à boucles)</p>","rarete":7,"prix":6},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.dw6wLsNmwmEW79ei"}},"_id":"82fzHPjxUkGMCVUX"}
|
||||
{"name":"Laboratoire d’Alchimiste","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Permet de mettre au point les objets les plus complexes (difficulté de 25 et au-delà)</p>","rarete":10,"prix":2000},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.eq0FJtwQd2jHbdvv"}},"_id":"8GK1Hn6le3JlsT6T"}
|
||||
{"name":"Vieille carne","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Modificateur de Monte -2</p>","rarete":2,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.iikcWs26aEjtXDKo"}},"_id":"8NPElVs0cYrGbmXO"}
|
||||
{"name":"Nuit d’auberge à l’étable","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":3,"prix":1},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.uo464pRDCNIPsUvW"}},"_id":"9dEaZklkBs1GgdD7"}
|
||||
{"name":"Coursier","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Modificateur de Monte +2</p>","rarete":7,"prix":120},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.t4PPYVE2B6B9tUy1"}},"_id":"AZDTSEUo52dnf37U"}
|
||||
{"name":"Papier, plume et encre","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":6,"prix":20},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.545S2qajtz6DSzzq"}},"_id":"Bg8jNqGusEdHxV00"}
|
||||
{"name":"Chariot couvert ou bâché","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":3,"prix":100},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.GRhCO7lW7NaHThqU"}},"_id":"FlK49ZIVnceUTy1P"}
|
||||
{"name":"Tenue complète bourgeoise","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p> (chausses, chemise, pourpoint, chapeau, bottes)</p>","rarete":6,"prix":30},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.XZSiLPhbhlj1Wil1"}},"_id":"HdlqqXJ393Pf3GxA"}
|
||||
{"name":"Nuit d’auberge dans une chambre particulière","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":5,"prix":5},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.xtlOL4VOsTDvyUvR"}},"_id":"LnKDtuhsacvcet7B"}
|
||||
{"name":"Louer une petite maison de ville pour un mois","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Se paie généralement d’avance…</p>","rarete":0,"prix":40},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Tfu7ywqXoXzXgP6H"}},"_id":"NZ28hyteLgOxlXC7"}
|
||||
{"name":"Repas de fête","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":5,"prix":4},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.gTCljExvFFpG7K1s"}},"_id":"OyRix5REF10GPbSp"}
|
||||
{"name":"Cheval d’attelage","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":4,"prix":80},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.KDfgGmQ4tUj765MN"}},"_id":"QHPoow1iDYEdExgs"}
|
||||
{"name":"Repas chaud","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":0,"prix":1},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.ErKXhChAfgugKU1a"}},"_id":"QojR7XS4mGjbMq5w"}
|
||||
{"name":"Charrette","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":70},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.4HRLU67Ipd1PFqUV"}},"_id":"RXMBJNKXfy3S3yck"}
|
||||
{"name":"Onguent de soin","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>10 tours de jeu sont nécessaires pour l’appliquer. Permet de récupérer [[/roll 1D4]] points de Santé après (10 – Trempe) heures</p>","rarete":5,"prix":20},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.RdqMNJzemUcCYO1H"}},"_id":"RyNJqjQvDbMixok0"}
|
||||
{"name":"Barge","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":5,"prix":300},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.l7tiShWweGQ8fzDp"}},"_id":"TyeTRm4FxLeRNDTU"}
|
||||
{"name":"Pommade à frotter pour faire circuler le sang","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Protège des effets du froid (+ 5 aux tests de Trempe)</p>","rarete":4,"prix":2},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.BbzFc96y1QHi0Old"}},"_id":"VPkZxH3bkTR8WqXQ"}
|
||||
{"name":"Cape","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":2},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.HZkgEeG4apx4I4Tn"}},"_id":"WL0809BYVR9JxaMM"}
|
||||
{"name":"Poudre blanche","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>(à inhaler pour se sentir en forme)</p>\n<p>S’inhale le temps d’une action (à inhaler pour se sentir en forme) simple. Permet de récupérer immédiatement [[/roll 1D4]] cases de Santé (dégâts non létaux). À chaque inhalation, lancez un [[/roll 1d20]]. Sur un 1 ou un 11, celui qui vient de priser la poudre s’eff ondre et reste inconscient durant (10 – Trempe) heures.</p>\n<p> </p>","rarete":7,"prix":5},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.axOu6tHgHC7kYnG3"}},"_id":"WntSrr0j00DLntZV"}
|
||||
{"name":"Lanterne","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.OKydo5obAtmOVNup"}},"_id":"Wo0tplt93X9wemlV"}
|
||||
{"name":"Chien dressé","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.5jFTzXfwTgkVvjv7"}},"_id":"Wus5fIYO731eLG0i"}
|
||||
{"name":"Pain de route (rations pour une semaine)","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":0,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.18Hb7BDncVyHgyeM"}},"_id":"X4nIqFrjWy0hCVbZ"}
|
||||
{"name":"Matériel de survie","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>(sac, gourde, couverture, tente)</p>","rarete":2,"prix":5},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.wv6tWbuJjnZ7jiXH"}},"_id":"e8ZbG2WQCzJTRzBK"}
|
||||
{"name":"Herbes à infuser contre les fièvres légères","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":1},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.iL0fjlODZ4JnNpwN"}},"_id":"eH4V6AlAZNEuwlrw"}
|
||||
{"name":"Barque à rames, canoë","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":60},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.HKxNf2i5EEu5wAN5"}},"_id":"eXP5rck0IJK4Az8c"}
|
||||
{"name":"Petit atelier et son outillage","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Permet de fabriquer les objets les plus simples (jusqu’à une difficulté de 20)</p>","rarete":8,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.TD0bN2tEIG8VqnbD"}},"_id":"fc2fReiW3mV6jekF"}
|
||||
{"name":"Antipoison","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Confère un bonus de + 5 au test de Soins pour arrêter les pertes de points de Santé. Note : tous les poisons n’ont pas d’antipoison connu.</p>","rarete":7,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.7NDLIEeS4WVyXDqo"}},"_id":"fkleifA7qbOzRZCy"}
|
||||
{"name":"Fonderie","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":10,"prix":10000},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.Y14CMXm2avlCnqPC"}},"_id":"frS3jj7bs0l9zMGi"}
|
||||
{"name":"Roulotte","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":5,"prix":150},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.X5GxbvOMqQ8aHh49"}},"_id":"g5rDtYzyQ4IxUWXu"}
|
||||
{"name":"Forge","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":4,"prix":100},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.cma6u26NRsZL1awt"}},"_id":"gJStREuVAaaBuwXR"}
|
||||
{"name":"Miroir et peigne","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.IzlENy0Oxg82cke0"}},"_id":"hRlPFzsoUjbu3Noj"}
|
||||
{"name":"Tenue complète citadine","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>(chausses et chemise de coton, chapeau, chaussures)</p>","rarete":3,"prix":7},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.1ldZnq4lDPHOeVba"}},"_id":"hTLeVLn5yUd2etoS"}
|
||||
{"name":"Nuit d’auberge dans la salle commune","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":3,"prix":3},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.D7HcsRBK8uH6NBi4"}},"_id":"hc4w2PBpYLMQKsXS"}
|
||||
{"name":"Matériel de cuisine","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":0,"prix":2},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.lJafSILU0LtNMONn"}},"_id":"i8BBr1WjfphuLTLI"}
|
||||
{"name":"Chapeau à la mode","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":6,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.lmlWH96vjfTMN2OO"}},"_id":"kkNZoJdG86Dqci2b"}
|
||||
{"name":"Herbes à mâcher les lendemains de beuverie","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":1},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.STMfa8tVupqJPllD"}},"_id":"muCWd5AKL21AbTg8"}
|
||||
{"name":"Tenue complète paysanne","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>(chausses et chemise de jute, grand foulard, sandales)</p>","rarete":0,"prix":4},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.4WIrBhrpn4AlSnh3"}},"_id":"nJKLD6BqEHbBHmOY"}
|
||||
{"name":"Selle et fontes","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":20},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.J1HAwhIBjgkBZ3FH"}},"_id":"oIZv9KxLVQUOfi5d"}
|
||||
{"name":"Destrier","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":8,"prix":800},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.MF74kXfkiwLOwWNS"}},"_id":"oIob9qCttaQw7Aea"}
|
||||
{"name":"Vêtements rapiécés, nippes","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":0,"prix":2},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.rPYf2u8b3qizxxFk"}},"_id":"sLZgByw2rA2PvQms"}
|
||||
{"name":"Petit voilier","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":6,"prix":50},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.tuAI18GrGFkqVHpQ"}},"_id":"tAFXmBLUXcSUKZRL"}
|
||||
{"name":"Matériel hivernal","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>(piolets, raquettes, manteau et graisses)</p>","rarete":4,"prix":20},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.LpdplcMj4j7dWnZU"}},"_id":"tRSk0np2smLpdixK"}
|
||||
{"name":"Herbes parfumées contre les mauvaises odeurs","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":1},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.y6G9LprDaOAoVn9v"}},"_id":"tXYzLGS6SFolD8k4"}
|
||||
{"name":"Barque de pêcheur avec voile","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":3,"prix":100},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.ZXEq8059S3YlFhN0"}},"_id":"vUFnyal2islmmpZF"}
|
||||
{"name":"Torche","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p> (lot de 3)</p>","rarete":1,"prix":5},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.aVBCMdM69vwfrSMW"}},"_id":"vahvt9QGYjnRlY4p"}
|
||||
{"name":"Verre de vin ou de bière","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":0,"prix":1},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.5yA9UC3kExUx6CqN"}},"_id":"vmSrygoMxy6G87EO"}
|
||||
{"name":"Matériel d’escalade","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>(marteau, cordes, pitons)</p>","rarete":3,"prix":8},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.TXj9b73MGGI6L9Av"}},"_id":"vtpjGFTYO7fiKXwE"}
|
||||
{"name":"Longue-vue","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":8,"prix":250},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.n1UQvGJ8Zq6dGuEY"}},"_id":"wHU6MvZuBMmN9xfG"}
|
||||
{"name":"Dose de poison violent","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Voir le chapitre « Le Combat et la santé » pour connaître les eff ets des principaux poisons</p>","rarete":6,"prix":3},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.EuGLW5D5SIP58uaa"}},"_id":"wQ8cgwazhlIF6WG7"}
|
||||
{"name":"Louer une grange pour un mois","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"<p>Se paie généralement d’avance...</p>","rarete":0,"prix":10},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.8utWpkdD1FvHSYfv"}},"_id":"xy356PaIZisHJdUR"}
|
||||
{"name":"Grande écharpe","type":"equipement","img":"systems/fvtt-mournblade/assets/icons/equipement.webp","data":{"description":"","rarete":2,"prix":2},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"RiMAsQHaUMojde7N":3},"flags":{"core":{"sourceId":"Item.j5Hei6F2XN5nrh7t"}},"_id":"y47dBO3Mf5Pn7tOd"}
|
BIN
packs/equipement/000234.ldb
Normal file
0
packs/equipement/000241.log
Normal file
1
packs/equipement/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000239
|
0
packs/equipement/LOCK
Normal file
8
packs/equipement/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2025/06/03-13:38:34.942102 7f53e4df86c0 Recovering log #237
|
||||
2025/06/03-13:38:35.000785 7f53e4df86c0 Delete type=3 #235
|
||||
2025/06/03-13:38:35.000863 7f53e4df86c0 Delete type=0 #237
|
||||
2025/06/03-13:46:40.592034 7f53df3ff6c0 Level-0 table #242: started
|
||||
2025/06/03-13:46:40.592075 7f53df3ff6c0 Level-0 table #242: 0 bytes OK
|
||||
2025/06/03-13:46:40.628226 7f53df3ff6c0 Delete type=0 #240
|
||||
2025/06/03-13:46:40.701268 7f53df3ff6c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
||||
2025/06/03-13:46:40.701319 7f53df3ff6c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
9
packs/equipement/LOG.old
Normal file
@ -0,0 +1,9 @@
|
||||
2025/05/29-15:55:26.213516 7f53e4df86c0 Recovering log #232
|
||||
2025/05/29-15:55:26.225680 7f53e4df86c0 Delete type=3 #228
|
||||
2025/05/29-15:55:26.225779 7f53e4df86c0 Delete type=3 #220
|
||||
2025/05/29-15:55:26.225833 7f53e4df86c0 Delete type=0 #232
|
||||
2025/05/29-16:03:58.177296 7f53df3ff6c0 Level-0 table #238: started
|
||||
2025/05/29-16:03:58.177336 7f53df3ff6c0 Level-0 table #238: 0 bytes OK
|
||||
2025/05/29-16:03:58.183675 7f53df3ff6c0 Delete type=0 #236
|
||||
2025/05/29-16:03:58.196949 7f53df3ff6c0 Manual compaction at level-0 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
||||
2025/05/29-16:03:58.197004 7f53df3ff6c0 Manual compaction at level-1 from '!items!1cZd2hlTV9tykDED' @ 72057594037927935 : 1 .. '!items!y47dBO3Mf5Pn7tOd' @ 0 : 0; will stop at (end)
|
BIN
packs/equipement/MANIFEST-000239
Normal file
10
packs/heritages.db
Normal file
@ -0,0 +1,10 @@
|
||||
{"name":"Abomination","type":"heritage","img":"systems/fvtt-mournblade/assets/icons/heritage.webp","data":{"description":"<div class=\"page\" title=\"Page 120\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantage : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">avec l’accord du MJ, le personnage choisit un bonus de + 1 dans un attribut (ou un bonus de + 2 dans une Compétence, ou tout autre avantage équivalent).<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Défaut : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">avec l’accord du MJ, le personnage choisit un malus de – 1 dans un attribut (ou tout autre désavantage équivalent). Il souffre par ailleurs du désavantage « Répulsion ». </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Effets </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">:<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-style: italic; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Répulsion : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">si la nature abominable du personnage est découverte, il subit un malus de – 3 à tous ses tests de Présence devant quelqu’un qui a des préjugés défavorables contre de tels personnages (ce qui veut dire pratiquement tout le monde dans les Jeunes Royaumes). </span></p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"page\" title=\"Page 120\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Exemples de mutations : </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-style: italic; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Longues jambes : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">le personnage a + 2 en Vitesse et – 1 en Présence.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-style: italic; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Froideur reptilienne : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">le personnage a + 1 en Trempe et – 3 à tous ses tests de Persuasion. Son impassibilité met facilement ses interlocuteurs mal à l’aise. </span></p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"page\" title=\"Page 121\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-style: italic; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Régénération : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">le sang du personnage est d’une couleur étrange, mais à chaque fois qu’il regagne de la Santé, le nombre de points récupérés est doublé.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-style: italic; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Résistance à la corruption : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">le personnage est naturellement résistant aux poisons et aux maladies courantes, mais sa peau ressemble par endroits à celle d’un grand brûlé. Il est immunisé contre ces dernières mais subit un malus de – 1 en Présence. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.OxYgUbhQ92N44GLs"}},"_id":"2GaJZsqr2c2mcDRv"}
|
||||
{"name":"Isolationniste","type":"heritage","img":"systems/fvtt-mournblade/assets/icons/heritage.webp","data":{"description":"<div class=\"page\" title=\"Page 120\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantage : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">le personnage bénéficie du trait « J’ai mieux à la maison ».<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Défaut : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">vous subissez un malus permanent de – 2 à tous vos tests de Savoir : Jeunes Royaumes. C’est un sujet qui ne vous intéresse pas et il se peut même que certaines choses que vous sachiez soient fausses (et probablement le fruit d’un bon bourrage de crâne). </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Effets </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">:<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-style: italic; color: rgb(29.700000%, 0.600000%, 13.200000%);\">J’ai mieux à la maison : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">vous tirez un grand réconfort moral de la supériorité évidente de vos origines. Vous gagnez + 2 en Âme. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.hYd6nv1QDp0EkFQY"}},"_id":"9bao8syTKYQDLjpR"}
|
||||
{"name":"Noble","type":"heritage","img":"systems/fvtt-mournblade/assets/icons/heritage.webp","data":{"description":"<div class=\"page\" title=\"Page 121\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">le personnage possède la Prédilection Comman- dement (Coercition) et commence la partie avec une arme, une armure et un cheval.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Défaut : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">peu habitué à faire profil bas, le personnage subit un malus de – 2 aux tests de Discrétion. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.S7GzdRLOlRHqyRcb"}},"_id":"Hl7o7HTX5OYoOLWV"}
|
||||
{"name":"Paria","type":"heritage","img":"systems/fvtt-mournblade/assets/icons/heritage.webp","data":{"description":"<div class=\"page\" title=\"Page 119\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantage : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">le personnage bénéficie d’un bonus de + 1 en Trempe.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Défaut : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">« Persécuté ».<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Effets </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-style: italic; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Persécuté : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">le personnage a tendance à se croire l’objet de moqueries ou de regards méprisants... et il se trompe souvent sur le compte de ses interlocuteurs. Il souffre d’un malus de – 2 à tous ses tests de Perception lorsqu’ils concernent le domaine de l’empathie. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.w24oZ4LobhR9KXt3"}},"_id":"JChFEYx3dueDB3i0"}
|
||||
{"name":"Colosse","type":"heritage","img":"systems/fvtt-mournblade/assets/icons/heritage.webp","data":{"description":"<div class=\"page\" title=\"Page 120\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantage : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">votre taille est augmentée de 20 cm et vous avez + 1 en Puissance.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Défaut : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">– 1 en Adresse. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.L8Jijr1R3uKveuum"}},"_id":"LsQhqznKS70nzLtB"}
|
||||
{"name":"Commun","type":"heritage","img":"systems/fvtt-mournblade/assets/icons/heritage.webp","data":{"description":"<div class=\"page\" title=\"Page 120\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantage : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">aucun<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Défaut : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">aucun </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.O8laCAr0z6FSdd4t"}},"_id":"OZpha6BHfwq1siGM"}
|
||||
{"name":"Crapule","type":"heritage","img":"systems/fvtt-mournblade/assets/icons/heritage.webp","data":{"description":"<div class=\"page\" title=\"Page 121\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantage : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">le personnage bénéficie d’un bonus de + 2 en Filouterie. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Défaut : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">« Sales manières » </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Effets </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-style: italic; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Sales manières : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">– 2 aux tests de Présence devant des person- nages d’une classe sociale supérieure. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.hZDnJDQsTP0Q34vt"}},"_id":"WfM40Irs2ZybFPz6"}
|
||||
{"name":"Érudit","type":"heritage","img":"systems/fvtt-mournblade/assets/icons/heritage.webp","data":{"description":"<div class=\"page\" title=\"Page 121\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantage : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 3, + 2, + 2 dans trois compétences de Savoir au choix, dont Lire & Écrire. </span></p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"page\" title=\"Page 121\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Défaut : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">– 3 en Santé. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.85lFszp9ztGHJ2Gh"}},"_id":"g1XSpX4Khnedpz4I"}
|
||||
{"name":"Voyageur","type":"heritage","img":"systems/fvtt-mournblade/assets/icons/heritage.webp","data":{"description":"<div class=\"page\" title=\"Page 121\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantage : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">le personnage bénéficie d’un bonus de + 2 dans la compétence Savoir : Jeunes Royaumes et il dispose de la Prédilection Routes (Commerce). </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Défaut : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">« Le feu aux trousses ». </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Effets : </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-style: italic; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Le feu aux trousses : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">vous avez du mal à rester longtemps au même endroit. Cela vous rend nerveux. Vous subissez un malus de – 1 en Trempe chaque fois que vous restez plus d’une semaine dans la même communauté (ville, village, navire). </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.sIwut35hb96eQwdi"}},"_id":"i1RCQ66Lep3UfHr7"}
|
||||
{"name":"Sang-mêlé","type":"heritage","img":"systems/fvtt-mournblade/assets/icons/heritage.webp","data":{"description":"<div class=\"page\" title=\"Page 120\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">vous partagez avec vos ancêtres melnibonéens des ressources mentales insoupçonnées. Votre réserve d’Âme est égale à (Trempe + Clairvoyance) x 3 + 5. </span></p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"page\" title=\"Page 120\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Défauts : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">vous êtes l’objet de toutes les haines et de tous les préjugés. Vous subissez en permanence un malus de – 2 à tout test lors d’une interaction sociale avec une personne n’appar- tenant pas à votre cercle proche. Ce malus ne s’applique évi- demment pas à la Sorcellerie. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.rFZS2h1BHUa6vk3l"}},"_id":"ui4JGsGwHNlSXVK3"}
|
BIN
packs/heritages/000234.ldb
Normal file
0
packs/heritages/000241.log
Normal file
1
packs/heritages/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000239
|
0
packs/heritages/LOCK
Normal file
8
packs/heritages/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2025/06/03-13:38:35.120991 7f53e4df86c0 Recovering log #237
|
||||
2025/06/03-13:38:35.175559 7f53e4df86c0 Delete type=3 #235
|
||||
2025/06/03-13:38:35.175657 7f53e4df86c0 Delete type=0 #237
|
||||
2025/06/03-13:46:40.666519 7f53df3ff6c0 Level-0 table #242: started
|
||||
2025/06/03-13:46:40.666557 7f53df3ff6c0 Level-0 table #242: 0 bytes OK
|
||||
2025/06/03-13:46:40.701027 7f53df3ff6c0 Delete type=0 #240
|
||||
2025/06/03-13:46:40.701306 7f53df3ff6c0 Manual compaction at level-0 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
||||
2025/06/03-13:46:40.815749 7f53df3ff6c0 Manual compaction at level-1 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
9
packs/heritages/LOG.old
Normal file
@ -0,0 +1,9 @@
|
||||
2025/05/29-15:55:26.270465 7f53e55f96c0 Recovering log #232
|
||||
2025/05/29-15:55:26.282262 7f53e55f96c0 Delete type=3 #228
|
||||
2025/05/29-15:55:26.282411 7f53e55f96c0 Delete type=3 #220
|
||||
2025/05/29-15:55:26.282478 7f53e55f96c0 Delete type=0 #232
|
||||
2025/05/29-16:03:58.203630 7f53df3ff6c0 Level-0 table #238: started
|
||||
2025/05/29-16:03:58.203677 7f53df3ff6c0 Level-0 table #238: 0 bytes OK
|
||||
2025/05/29-16:03:58.209907 7f53df3ff6c0 Delete type=0 #236
|
||||
2025/05/29-16:03:58.224352 7f53df3ff6c0 Manual compaction at level-0 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
||||
2025/05/29-16:03:58.224420 7f53df3ff6c0 Manual compaction at level-1 from '!items!2GaJZsqr2c2mcDRv' @ 72057594037927935 : 1 .. '!items!ui4JGsGwHNlSXVK3' @ 0 : 0; will stop at (end)
|
BIN
packs/heritages/MANIFEST-000239
Normal file
17
packs/metiers.db
Normal file
@ -0,0 +1,17 @@
|
||||
{"name":"Esclave en fuite","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 131\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacité spéciale : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">lorsqu’un esclave dépense un point de Bonne Aventure ou un point d’Éclat pour obtenir un bonus à un test de Trempe, ce bonus est doublé.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 2 en Trempe, + 1 en Puissance. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Discrétion, Filouterie, Mêlée, Mouvements, Perception, Savoir : un artisanat au choix, Survie. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">la marque de son ancien propriétaire et une arme de fortune. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.3ERM97vfdcd0YwHi"}},"_id":"09s33sFuju8zjPqI"}
|
||||
{"name":"Marin","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 132\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacité spéciale : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">tant que le marin se trouve sur une embarcation, chaque point de Bonne Aventure qu’il dépense double le bonus aux tests de Capacité.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Adresse, + 2 en Trempe. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Commerce, Mêlée, Mouvements, Nage, Navigation, Savoir : Bas-fonds, Savoir : Jeunes Royaumes, Savoir : Jeux. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">une arme de son choix, une veste et des bottes de mer. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.6j1tKkyPuwo5uaPL"}},"_id":"35f1mCziUKfGWgTu"}
|
||||
{"name":"Racaille","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 132\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacité spéciale : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">lorsqu’une racaille dépense un point de Bonne Aventure ou un point d’Éclat pour obtenir un bonus à un test de Discrétion ou Savoir : Bas-fonds, ce bonus est doublé. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Adresse, + 1 en Clairvoyance, + 1 en Présence. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Coercition, Discrétion, Filouterie, Mêlée, Mouvements, Perception, Persuasion, Savoir : Bas-fonds, Savoir : Jeux.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">une arme de son choix et un jeu de carte ou une paire de dés truqués. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.mKsk20fOPrcDNgMW"}},"_id":"4vOELIgz6PlyEBXz"}
|
||||
{"name":"Chasseur de primes","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 126\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacité spéciale : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">lorsqu’un chasseur de prime fait un test de Per- ception ou de Savoir : Bas-fonds pour trouver une personne dont il connaît le nom (collecte d’information auprès de ses proches, piste à suivre dans la nature, vigilance devant un déguisement qu’il pourrait revêtir, etc.), et qu’il dépense un point de Bonne Aventure ou un point d’Éclat le bonus octroyé est doublé. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 2 en Trempe, + 1 en Clairvoyance. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Coercition, Discrétion, Filoute- rie, Mêlée, Perception, Savoir : Bas-fonds, Savoir : Jeunes Royaumes.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">une arme de son choix, une descrip- tion de la personne ou de l’objet recherché et une lettre de recommandation émanant d’un client satisfait. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.7srRNPIWcpvbvqho"}},"_id":"DuHrBepvID2T5iiG"}
|
||||
{"name":"Assassin","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 126\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacité spéciale : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">en dépensant 3 points de Bonne Aven- ture, un assassin peut lancer 1d8 points de dégâts supplémen- taires. Cette capacité ne peut être utilisée qu’une seule fois par attaque. En dépensant un point d’Éclat, l’assassin peut, à la place, choisir le résultat de ce dé. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Adresse, + 1 en Clairvoyance, + 1 en Puissance.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Armes à Distance, Discrétion, Filou- terie, Mêlée, Mouvements, Perception, Savoir : Alchimie, Savoir : Bas-fonds. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">une arme de son choix, une dague et une grande pélerine à capuche. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.lNQwoZdyMOgwIdlL"}},"_id":"ENN5Hbnhh9FurhNg"}
|
||||
{"name":"Dresseur","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 127\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacité spéciale : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">lorsqu’un dresseur dépense un point de Bonne Aventure ou un point d’Éclat pour obtenir un bonus à un test de Coercition ou de Monte impliquant un animal, ce bonus est doublé. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Adresse, + 1 en Présence, + 1 en Trempe.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Coercition, Monte, Mouvements, Nage, Perception, Savoir : Plantes & Animaux, Soins, Survie. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold;\">Compagnon animal : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">choisissez votre compagnon animal avec l’accord du Maître. Ce dernier est un membre standard de son espèce. Il connaît un nombre de tours simples égal à votre score en Coercition. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">un compagnon animal au choix, un bâton de marche et des vêtements de voyage </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.guXczFFiJxwvXqy5"}},"_id":"Kbfmr5bdBKKX1HPG"}
|
||||
{"name":"Courtisan","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 127\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacité spéciale : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">lorsqu’un courtisan dépense un point de Bonne Aventure ou un point d’Éclat pour obtenir un bonus à un test de Savoir : Courtisan ou de Persuasion, ce bonus est doublé. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Clairvoyance, + 2 en Présence. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Discrétion, Mêlée, Perception, Per- suasion, Savoir : Courtisan, Savoir : Droit, Savoir : Jeunes Royaumes, Savoir : Lire & Écrire, Savoir : Bas-Parler. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">une arme d’apparat et un élégant habit de cour. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.7dwahKzRakMU36N3"}},"_id":"Mmbet07iWYFBXdkM"}
|
||||
{"name":"Capitaine","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 126\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacité spéciale : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">le capitaine peut coordonner ses alliés afin d’améliorer leur efficacité au combat. En dépensant 3 points de Bonne Aventure lors d’un combat, il fait bénéficier ses alliés d’un + 1 à leur Capacité offensive et à leur Défense jusqu’à la fin de l’affrontement. En dépensant à la place 1 point d’Éclat, ce bonus est porté à + 3. </span></p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"page\" title=\"Page 126\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Présence, + 1 en Puissance, + 1 en Trempe.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Coercition, Mêlée, Monte, Mouve- ments, Persuasion, Savoir : Art de la guerre, Savoir : Courti- san, Savoir : Jeunes Royaumes, Savoir : Lire & Écrire. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">une arme de son choix, un cheval fatigué et un habit d’apparat démodé. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.iihYwC2uJXsa1Goz"}},"_id":"NToYuFMXJgu88HCz"}
|
||||
{"name":"Ecclésiaste","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 129\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacités spéciales : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">lorsqu’un ecclésiaste dépense un point de Bonne Aventure ou un point d’Éclat pour obte- nir un bonus à un test de Savoir ou de Persuasion lié à son culte ou à sa propagation, ce bonus est doublé. L’ecclésiaste maîtrise l’Œil d’Arkyn ou l’Œil du Sorcier </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Pacte obligatoire : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">vous devez lier un pacte avec votre divinité. Pour ce faire, vous devez respecter les prérequis. Vous gagnez un niveau en Loi si votre divinité fait partie des Seigneurs de la Loi ou un niveau en Chaos si votre divinité fait partie des Seigneurs du Chaos et un niveau dans l’Alignement que vous souhaitez si votre divinité est un Seigneur Élémentaire ou des Bêtes. Vous êtes limité à un pacte de base lors de la création de votre Élu mais vous pouvez choisir un deuxième Don en rapport avec votre divinité. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 2 en Présence, + 1 en Trempe. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Persuasion, Savoir : Alchimie, Savoir : Jeunes Royaumes, Savoir : Bas-Parler, Savoir : Lire & Écrire, Savoir : Haut-Parler, Savoir : Loi & Chaos, Savoir : Seigneurs Élémentaires, Savoir : Seigneurs des Bêtes, Savoir : Runes, Soins. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">un vêtement ecclésiastique, un livre de prière ou son équivalent, le symbole de son culte. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.utPrwKXVt7Ry1rJC"}},"_id":"QX7Nx1jfkOd5rzmP"}
|
||||
{"name":"Sorcier","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 134\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacités spéciales : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">lorsqu’un sorcier dépense un point de Bonne Aventure ou un point d’Éclat pour obtenir un bonus à un test de Terreur ou d’Extase, ce bonus est doublé.<br />Le sorcier maîtrise l’Œil du Sorcier ou l’Œil d’Arkyn. </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold;\">De plus, contrairement aux autres personnages, le sorcier maîtrise à la création un nombre de Runes égal à deux fois son score en Savoir : Runes. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 2 en Clairvoyance, + 1 en Trempe. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Coercition, Persuasion, Savoir : Alchi- mie, Savoir : Jeunes Royaumes, Savoir : Bas-Parler, Savoir : Lire & Écrire, Savoir : Haut-Parler, Savoir : Loi & Chaos, Savoir : Runes, Savoir : Seigneurs Élémentaires, Savoir : Sei- gneurs des Bêtes. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">un couteau sacrificiel, un bol, un pinceau et une robe de cérémonie. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.o1FzLjXoOx8n3vpH"}},"_id":"UOITxMrVdITBe0W7"}
|
||||
{"name":"Artiste","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 124\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacité spéciale : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">lorsque l’artiste pratique son art et dépense un point de Bonne Aventure ou un point d’Éclat pour obtenir un bonus à son test de compétence, ce bonus est doublé. De surcroît, si l’artiste a dépensé un point d’Éclat et obtenu à son test une réussite héroïque, il crée un véritable chef-d’œuvre ou produit une performance hors du commun qui est à même d’augmenter sa renommée, de lui obtenir un nouveau patron ou de faire d’un ou de plusieurs spectateurs des admirateurs prêts à presque tout pour satisfaire l’artiste. Enfin, tous les spectateurs ou personnes qui voient pour la première fois ce chef-d’œuvre doivent faire un test d’Extase </span></p>\n</div>\n</div>\n</div>\n</div>\n<div class=\"page\" title=\"Page 124\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 2 en Présence, + 1 en Adresse. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Mouvements, Persuasion, Percep- tion, Savoir : Chant & Musique, Savoir : Courtisan, Savoir : Jeunes Royaumes, Savoir : Lire & Écrire, Savoir : Bas-Parler, Savoir : Peinture & Sculpture, Savoir : Théâtre & Poésie. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">l’équipement et les accessoires néces- saires à son art, des vêtements de voyage et un vieil habit de cour défraîchi. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.DowptUubMeGDEdC3"}},"_id":"XCkrH4ZihwM9l4HF"}
|
||||
{"name":"Soldat de fortune","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 135\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacité spéciale : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">en dépensant 2 points de Bonne Aven- ture lors d’un combat, le soldat de fortune perd dorénavant 1 point de Santé de moins à chaque blessure et ce jusqu’à la fin du combat. En dépensant à la place 1 point d’Éclat, le soldat de fortune perd 3 points de Santé de moins à chaque blessure jusqu’à la fin du combat. Toutefois, dans ce dernier cas, sa réserve de points de Santé tombe à 1 une fois le combat achevé. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 2 en Puissance, + 1 en Trempe. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Armes à distance, Coercition, Mêlée, Monte, Mouvements, Savoir : Art de la guerre, Savoir : Jeunes Royaumes, Savoir : Jeux, Soins.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">une arme de son choix, une armure de son choix et une cicatrice impressionnante et reconnaissable. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.JsYaRLD7xkXq8qV4"}},"_id":"ZhMLA8SYagTCZAPu"}
|
||||
{"name":"Artisan","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 122\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacité spéciale : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">lorsque l’artisan dépense un point de Bonne Aventure ou un point d’Éclat pour obtenir un bonus à un test d’artisanat, ce bonus est doublé. De surcroît, si l’artisan a dépensé un point d’Éclat et obtenu à son test une réussite héroïque, il crée un véritable chef-d’œuvre (doué d’une propriété spéciale définie par le MJ, par exemple un bonus à une arme comme + 1 aux dégâts, + 1 au BM, ou + 1 en protection pour une armure etc.) </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Clairvoyance, + 2 en Adresse. </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Commerce, Perception, Persuasion, Savoir : Architecture, Savoir : un artisanat au choix, Savoir : un deuxième artisanat au choix, Savoir : Jeunes Royaumes, Savoir : Lire & Écrire. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les outils nécessaires à son art, un carnet de note et un matériel d’écriture si le personnage pos- sède un niveau en Savoir : Lire & Écrire ou de solides bottes et un bâton de marche dans le cas contraire. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.kEGlsQqhdtPfqg6d"}},"_id":"agSi2gNfXcBDD0A6"}
|
||||
{"name":"Érudit","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 130\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacité spéciale : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">lorsqu’un érudit dépense un point de Bonne Aventure ou un point d’Éclat pour obtenir un bonus à un test de Savoir, ce bonus est doublé.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 2 en Clairvoyance, + 1 en Présence. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">tous les savoirs sauf Bas-fonds, Courtisan et Runes. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">un carnet de croquis, une plume et un ouvrage savant. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.Y3F5yjwrlKhKaRDP"}},"_id":"nMkFZvawdalFjlKW"}
|
||||
{"name":"Éclaireur","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 130\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacité spéciale : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">lorsqu’un éclaireur dépense un point de Bonne Aventure ou un point d’Éclat pour obtenir un bonus à un test de Savoir : Jeunes Royaumes ou de Survie, ce bonus est doublé. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Adresse, + 1 en Clairvoyance, + 1 en Trempe.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Armes à distance, Discrétion, Monte, Mouvements, Nage, Navigation, Perception, Savoir : Jeunes Royaumes, Savoir : Plantes & Animaux, Survie. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">une arme à distance, un couteau et une tenue adaptée à l’environnement du lieu de départ. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.TW3TxALpjCwsYM3o"}},"_id":"tqspjN18J3I11XMW"}
|
||||
{"name":"Spadassin","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 135\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacité spéciale : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">lorsqu’un spadassin veut assommer quelqu’un et dépense un point de Bonne Aventure ou un point d’Éclat pour obtenir un bonus à son test de Filouterie, ce bonus est doublé. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Adresse, + 1 en Puissance, + 1 en Trempe.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Armes à Distance, Coercition, Com- merce, Discrétion, Filouterie, Mêlée, Mouvements, Survie. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">un assommoir, une arme de son choix, un grand chapeau et de quoi masquer son visage. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.kwUJsy2uCziq4Tdo"}},"_id":"xDZsB5dza1cgurXe"}
|
||||
{"name":"Marchand","type":"metier","img":"systems/fvtt-mournblade/assets/icons/profession.webp","data":{"description":"<div class=\"page\" title=\"Page 131\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Capacité spéciale : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">lorsqu’un marchand dépense un point de Bonne Aventure ou un point d’Éclat pour obtenir un bonus à un test de Commerce, ce bonus est doublé.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Bonus d’attributs : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Présence, + 1 en Clairvoyance et + 1 en Trempe. </span></p>\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Compétences exercées : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Commerce, Monte, Navigation, Persuasion, Savoir : Courtisan, Savoir : Droit, Savoir : Lire & Écrire, Savoir : Jeunes Royaumes, Survie.<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Équipement de départ : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">un attelage ou un bateau, et quelques marchandises à vendre. </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.XSL2MnXd6Q642JFO"}},"_id":"xlyFCQClBZ1N3O1B"}
|
BIN
packs/metiers/000234.ldb
Normal file
0
packs/metiers/000241.log
Normal file
1
packs/metiers/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000239
|
0
packs/metiers/LOCK
Normal file
8
packs/metiers/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2025/06/03-13:38:35.178238 7f53e5dfa6c0 Recovering log #237
|
||||
2025/06/03-13:38:35.231112 7f53e5dfa6c0 Delete type=3 #235
|
||||
2025/06/03-13:38:35.231235 7f53e5dfa6c0 Delete type=0 #237
|
||||
2025/06/03-13:46:40.815886 7f53df3ff6c0 Level-0 table #242: started
|
||||
2025/06/03-13:46:40.815947 7f53df3ff6c0 Level-0 table #242: 0 bytes OK
|
||||
2025/06/03-13:46:40.852810 7f53df3ff6c0 Delete type=0 #240
|
||||
2025/06/03-13:46:40.963250 7f53df3ff6c0 Manual compaction at level-0 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
||||
2025/06/03-13:46:40.963359 7f53df3ff6c0 Manual compaction at level-1 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
9
packs/metiers/LOG.old
Normal file
@ -0,0 +1,9 @@
|
||||
2025/05/29-15:55:26.287199 7f53dffff6c0 Recovering log #232
|
||||
2025/05/29-15:55:26.297484 7f53dffff6c0 Delete type=3 #228
|
||||
2025/05/29-15:55:26.298188 7f53dffff6c0 Delete type=3 #220
|
||||
2025/05/29-15:55:26.298300 7f53dffff6c0 Delete type=0 #232
|
||||
2025/05/29-16:03:58.210092 7f53df3ff6c0 Level-0 table #238: started
|
||||
2025/05/29-16:03:58.210134 7f53df3ff6c0 Level-0 table #238: 0 bytes OK
|
||||
2025/05/29-16:03:58.216327 7f53df3ff6c0 Delete type=0 #236
|
||||
2025/05/29-16:03:58.224370 7f53df3ff6c0 Manual compaction at level-0 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
||||
2025/05/29-16:03:58.224436 7f53df3ff6c0 Manual compaction at level-1 from '!items!09s33sFuju8zjPqI' @ 72057594037927935 : 1 .. '!items!xlyFCQClBZ1N3O1B' @ 0 : 0; will stop at (end)
|
BIN
packs/metiers/MANIFEST-000239
Normal file
20
packs/origines.db
Normal file
@ -0,0 +1,20 @@
|
||||
{"name":"Les Terres Silencieuses","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 118\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres de l’Ouest<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">aucune<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 Savoir : Logique & Mécanique ou + 1 en Survie </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.oh4K1mgUrcUc4zdl"}},"_id":"2t1KmBeQNuKK5qlN"}
|
||||
{"name":"Le Dorel","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 114\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres du Sud<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Lassa (Élémentaire), Grome (Élémentaire), Kakatal (Élémentaire)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Savoir : Théâtre & Poésie ou Prédilection : Arme à une Main (Mêlée) ou Prédilection : Attelage (Monte) </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.9zbcuoRfiWVEMTmF"}},"_id":"8cStkkGtsnEqyMMV"}
|
||||
{"name":"Le Dharijor","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 117\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres de l’Ouest<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Chardros (Chaos), Pyaray (Chaos), Hionhurn (Chaos)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Savoir : Art de la Guerre ou + 1 en Mêlée </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.eqh8NilLhxKsHPzY"}},"_id":"8ytKK10eQ9KWomUx"}
|
||||
{"name":"Le Lormyr","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 116\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres du Sud<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Arkyn (Loi), Donblas (Loi), Shalod (Loi) </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Savoir : Courtisan ou Prédilection : Arme à deux mains (Mêlée) ou Prédilection : Chevaucher (Monte) </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.uEO1bupVGqZtwGoV"}},"_id":"BMjZUFdt23TcZolr"}
|
||||
{"name":"Le Vilmir","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 113\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres du Nord<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Arkyn (Loi), Miggea (Loi), Tovik (Loi)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Savoir : Loi & Chaos ou Prédilection : Intimidation (Coercition) ou Prédilection : Se Cacher (Discrétion) </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.gdu6A7llcbDAu55D"}},"_id":"CJAC49IJOYwSn27K"}
|
||||
{"name":"Oin & Yu","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 116\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres du Sud<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Straasha (Élémentaire), Ap-yss-Alara (Bête), Teer (Chaos)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Navigation ou Prédilection : Pêche (Sur- vie) ou Prédilection : Arme de Jet (Armes à Distance) </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.0AkiZr4ZbIH8Mk3i"}},"_id":"HPgTW8rEMwKXaV3y"}
|
||||
{"name":"Désert des Larmes","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 111\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres du Nord<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Lassa (Élémentaire), Straasha (Élémentaire), Grome (Élémentaire)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Monte ou Prédilection : Arme à Projectile (Armes à Distance) ou Prédilection : Steppe (Survie) </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.u1PZyAQpywvcf5nl"}},"_id":"JhhvvGRFo2vW8hao"}
|
||||
{"name":"Nadsokor","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 111\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres du Nord<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Mashabak (Chaos), Balo (Chaos), Checkalakh (Chaos)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Filouterie ou Prédilection : Escamoter (Filouterie) ou Prédilection : Baratin (Persuasion) </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.FE1qvvd0k4SYZoGn"}},"_id":"JsG2lEiGLLr5mKaX"}
|
||||
{"name":"Org","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 113\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres du Nord<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Teer (Chaos), Hionhurn (Chaos), Balaan (Chaos)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Survie ou Prédilection : Forêt (Survie) ou Prédilection : Mains Nues (Mêlée) </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.jPYHmcP6BxDRH0KU"}},"_id":"Pt2RP047qe8sj8MA"}
|
||||
{"name":"L’Argimiliar","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 113\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres du Sud<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Arkyn (Loi), Donblas (Loi), Shalod (Loi)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Monte ou + 1 en Savoir : une Connaissance au choix </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.CcUF5rrbuiFCdpTv"}},"_id":"b12em5uYSh5Fegrs"}
|
||||
{"name":"Le Pikarayd","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 117\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres du Sud<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Lassa (Élémentaire), Chardros (Cha- os), Hionhurn (Chaos)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Mêlée ou Prédilection : Arme à une Main (Mêlée) ou Prédilection : Mains Nues (Mêlée) </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.ftXOOnpHGyMRADCu"}},"_id":"bQ7Kh9ydUDzl3p82"}
|
||||
{"name":"Le Jharkor","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 117\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres de l’Ouest<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Arkyn (Loi), Donblas (Loi), Grome (Élémentaire)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 Savoir : Chant & Musique ou + 1 Savoir : Agriculture </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.5HT5Pz9FZ6zQe9dF"}},"_id":"bV5olFnvZUja7eKV"}
|
||||
{"name":"Séred Öma","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 111\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres du Nord<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Arkyn (Loi), Arioch (Chaos), Shalod (Loi)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Savoir : Art (au choix) ou + 1 en Commerce </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.jI24OzfnMcmvECtC"}},"_id":"iCy3p5teOoBZ5zG6"}
|
||||
{"name":"Le Shazaar (ou Shazar)","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 117\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres de l’Ouest<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Arkyn (Loi), Donblas (Loi), Aponaä, Seigneur des Chevaux (Bête)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Monte ou Prédilection : Soins aux Animaux (Monte) ou Prédilection : Combat Monté (Mêlée) </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.YY1bH6U8s8xvG3p5"}},"_id":"jXCdgNNIOAOEjGDt"}
|
||||
{"name":"Le Tarkesh","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 118\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres de l’Ouest<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Donblas (Loi), Straasha (Élémentaire), Roofdrak (Bête)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 Savoir : Travail du Bois ou + 1 en Navigation </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.CKkvlezivsKCgb7q"}},"_id":"kk9ysBFuqedZqJ1U"}
|
||||
{"name":"Pan Tang","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 119\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Îles des Jeunes Royaumes<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Chardros (Chaos), Balaan (Chaos), Maluk (Chaos)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Savoir : Loi & Chaos ou Prédilection : Arme à une Main (Mêlée) ou Prédilection : Éloquence (Persuasion) </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.rc82LHSc7a9925uY"}},"_id":"lHUMxB4peDFfhvod"}
|
||||
{"name":"Quarzhasaat","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 113\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres du Nord<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Mabelode (Chaos), Eequor (Chaos), Maluk (Chaos)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Savoir : Courtisan ou Prédilection : Charme (Persuasion) ou Prédilection : Désert (Survie) </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.izSuvh9fVBvgtmG6"}},"_id":"tGD2uoQgNEoSqHnj"}
|
||||
{"name":"Le Filkhar","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 116\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres du Sud<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Arkyn (Loi), Donblas (Loi), Shalod (Loi) </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Persuasion ou + 1 en Savoir : Artisanat (Cuisine) </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.dUJk3mrziQM5Rnbd"}},"_id":"wmI6blFpV0BIYHtE"}
|
||||
{"name":"L’Ilmiora","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 110\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Terres du Nord<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Arkyn (Loi), Donblas (Loi), Shalod (Loi)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Savoir : Artisanat (au choix) ou + 1 en Savoir : Courtisan </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.8GzEvygEWuX3QNZ9"}},"_id":"xBXKDFKKxua8RGoy"}
|
||||
{"name":"Les Îles des Cités Pourpres","type":"origine","img":"systems/fvtt-mournblade/assets/icons/origine.webp","data":{"description":"<div class=\"page\" title=\"Page 119\">\n<div class=\"section\">\n<div class=\"layoutArea\">\n<div class=\"column\">\n<p><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Région : </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">les Îles des Jeunes Royaumes<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Divinités principales </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">: </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">Donblas (Loi), Slortar (Chaos), Straasha (Élémentaire)<br /></span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; font-weight: bold; color: rgb(29.700000%, 0.600000%, 13.200000%);\">Avantages </span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT'; color: rgb(29.700000%, 0.600000%, 13.200000%);\">:</span><span style=\"font-size: 11.000000pt; font-family: 'CentaurMT';\">+ 1 en Commerce ou + 1 en Navigation </span></p>\n</div>\n</div>\n</div>\n</div>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"xLCohqWYqWL3nwTN":3},"flags":{"core":{"sourceId":"Item.3s6ixAvW5lPVoRg9"}},"_id":"yBvkQb9S64s908sR"}
|
BIN
packs/origines/000234.ldb
Normal file
0
packs/origines/000241.log
Normal file
1
packs/origines/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000239
|
0
packs/origines/LOCK
Normal file
8
packs/origines/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2025/06/03-13:38:35.066449 7f53e55f96c0 Recovering log #237
|
||||
2025/06/03-13:38:35.118619 7f53e55f96c0 Delete type=3 #235
|
||||
2025/06/03-13:38:35.118742 7f53e55f96c0 Delete type=0 #237
|
||||
2025/06/03-13:46:41.647962 7f53df3ff6c0 Level-0 table #242: started
|
||||
2025/06/03-13:46:41.648023 7f53df3ff6c0 Level-0 table #242: 0 bytes OK
|
||||
2025/06/03-13:46:41.687775 7f53df3ff6c0 Delete type=0 #240
|
||||
2025/06/03-13:46:41.746023 7f53df3ff6c0 Manual compaction at level-0 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
||||
2025/06/03-13:46:41.785457 7f53df3ff6c0 Manual compaction at level-1 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
9
packs/origines/LOG.old
Normal file
@ -0,0 +1,9 @@
|
||||
2025/05/29-15:55:26.251480 7f53e5dfa6c0 Recovering log #232
|
||||
2025/05/29-15:55:26.263256 7f53e5dfa6c0 Delete type=3 #228
|
||||
2025/05/29-15:55:26.263429 7f53e5dfa6c0 Delete type=3 #220
|
||||
2025/05/29-15:55:26.263489 7f53e5dfa6c0 Delete type=0 #232
|
||||
2025/05/29-16:03:58.190030 7f53df3ff6c0 Level-0 table #238: started
|
||||
2025/05/29-16:03:58.190053 7f53df3ff6c0 Level-0 table #238: 0 bytes OK
|
||||
2025/05/29-16:03:58.196709 7f53df3ff6c0 Delete type=0 #236
|
||||
2025/05/29-16:03:58.196970 7f53df3ff6c0 Manual compaction at level-0 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
||||
2025/05/29-16:03:58.197022 7f53df3ff6c0 Manual compaction at level-1 from '!items!2t1KmBeQNuKK5qlN' @ 72057594037927935 : 1 .. '!items!yBvkQb9S64s908sR' @ 0 : 0; will stop at (end)
|
BIN
packs/origines/MANIFEST-000239
Normal file
BIN
packs/pnj-creatures/000130.ldb
Normal file
0
packs/pnj-creatures/000137.log
Normal file
1
packs/pnj-creatures/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000135
|