forked from public/bol
Compare commits
86 Commits
v1.3.5
...
bol-v10.4.
Author | SHA1 | Date | |
---|---|---|---|
7a8cf9f8fd | |||
d74f7784bb | |||
6d6fec99b0 | |||
884823a1bc | |||
399c22d623 | |||
085265df5d | |||
593db9ba5b | |||
ac96f3ca67 | |||
b2fe67ab05 | |||
47178d7359 | |||
e1c7304551 | |||
7b4e5bcbfa | |||
31bd83b0ab | |||
e35187433e | |||
5e7dc3ad9d | |||
add6893864 | |||
3a591e750a | |||
fe1cda67c4 | |||
985aba0318 | |||
5d8cc300e9 | |||
aa27168c2b | |||
1135e3aff2 | |||
30e316d34e | |||
f3bd84c5c9 | |||
985d393de5 | |||
815b5ff2ac | |||
edf8325109 | |||
895aa01419 | |||
9631e5e72a | |||
716cc53b29 | |||
44952d4410 | |||
a7991bce92 | |||
a1c20019e8 | |||
af8576a4a1 | |||
6c35ddfb0b | |||
0cbcaee45e | |||
904ff821e1 | |||
5c13cde07a | |||
51c1e205e9 | |||
90a83f4571 | |||
3311bc091a | |||
fa8f9869a6 | |||
36b905134e | |||
eeb0a906e7 | |||
c552411d61 | |||
d3ae59f70d | |||
cf7d76fdba | |||
89ec404ca8 | |||
8f60aa95ee | |||
d888c6a2eb | |||
165e41fef6 | |||
19bb0798c8 | |||
05f044bc7c | |||
996ac1c88d | |||
cc1964093d | |||
d27b78d1d2 | |||
7259d3dc21 | |||
ef5cf6f393 | |||
3e50a9135f | |||
82c902099f | |||
c26e43bac7 | |||
4159b6b181 | |||
45cb082d8e | |||
2637f698ad | |||
9b8762300e | |||
dfac102925 | |||
fad281a7b3 | |||
1191442f04 | |||
fe93888c1b | |||
127f200c27 | |||
b078ffa992 | |||
d713066b5c | |||
7adfbfe148 | |||
2186d986ca | |||
590fba0cbd | |||
0c9e598958 | |||
049604ce98 | |||
471a18cd14 | |||
58c781f2f2 | |||
c9722b9b04 | |||
44ce88dd17 | |||
a31fe251e0 | |||
76a050b023 | |||
b68a6dbd23 | |||
34c7024191 | |||
33da01707d |
@ -40,4 +40,4 @@ Maps : Emmanuel Roudier.
|
||||
|
||||
# Developmement
|
||||
|
||||
Zigmund, LeRatierBretonnien
|
||||
LeRatierBretonnien, Zigmund (historical)
|
||||
|
BIN
assets/bol_monnaies_v1_2.pdf
Executable file
BIN
assets/bol_monnaies_v1_2.pdf
Executable file
Binary file not shown.
14
changelog.md
Normal file
14
changelog.md
Normal file
@ -0,0 +1,14 @@
|
||||
# v10.4.0
|
||||
|
||||
- Ajout de la gestion d'effets
|
||||
- Aide intégré
|
||||
- Intégration du PDF de la bougette
|
||||
|
||||
# v10.3.3
|
||||
|
||||
- Nouvelles clés de traduction
|
||||
- Lorsqu'une arme a un dé bonus, prise en compte plus claire du dé bonus et affichage de l'information dans la fenêtre de jet
|
||||
- Lorsqu'une arme relance les 1 sur ses dégats, l'information est affichée dans le tchat
|
||||
- Termes corrects pour les PNJs (ie rival)
|
||||
- Nouveaux équipements issus du Dieu Voilé
|
||||
|
57
css/bol.css
57
css/bol.css
@ -59,8 +59,6 @@ a:hover {
|
||||
top: -50px;
|
||||
left: calc(50% - 100px);
|
||||
opacity: 0.7;
|
||||
-webkit-animation: rotation 10s infinite linear;
|
||||
animation: rotation 10s infinite linear;
|
||||
}
|
||||
#pause h3 {
|
||||
font-family: "IMFellDWPicaSC-Regular", serif;
|
||||
@ -389,16 +387,16 @@ ul.no-bullets {
|
||||
background-color: lightgray;
|
||||
}
|
||||
.bol h1.form-header {
|
||||
font-size: 2.5em;
|
||||
font-size: 2.2em;
|
||||
font-weight: 700;
|
||||
}
|
||||
.bol h2.form-header {
|
||||
font-size: 2em;
|
||||
font-size: 1.8em;
|
||||
font-weight: 500;
|
||||
border-bottom: 1px groove #eeede0;
|
||||
}
|
||||
.bol h3.form-header {
|
||||
font-size: 1.5em;
|
||||
font-size: 1.2em;
|
||||
font-weight: 500;
|
||||
border-bottom: 1px groove #eeede0;
|
||||
}
|
||||
@ -444,12 +442,16 @@ ul.no-bullets {
|
||||
.bol .inc-dec-btns {
|
||||
color: #4b4a44;
|
||||
}
|
||||
.summmary-number {
|
||||
padding-left: 4rem;
|
||||
}
|
||||
/* Items List */
|
||||
.items-list {
|
||||
list-style: none;
|
||||
margin: 7px 0;
|
||||
padding: 0;
|
||||
overflow-y: auto;
|
||||
overflow-y:hidden;
|
||||
/*overflow-y: auto;*/
|
||||
}
|
||||
.items-list .item-header {
|
||||
font-family: 'Signika', sans-serif;
|
||||
@ -520,6 +522,18 @@ ul.no-bullets {
|
||||
.items-list .item .item-control {
|
||||
color: #4b4a44;
|
||||
}
|
||||
.items-list .item-name-fixed-medium {
|
||||
min-width: 8rem;
|
||||
width: 8rem;
|
||||
}
|
||||
.items-list .item-field-fixed-short {
|
||||
max-width: 3rem;
|
||||
min-width: 3rem;
|
||||
width: 3rem;
|
||||
}
|
||||
.bougette-dice-img {
|
||||
color:rgba(150, 44, 44, 0.70);
|
||||
}
|
||||
|
||||
/* ----------------------------------------- */
|
||||
/* Premade colors */
|
||||
@ -769,7 +783,7 @@ body.system-bol img#logo {
|
||||
min-height: 700px;
|
||||
height: 700px;
|
||||
}
|
||||
.bol.sheet.actor .window-content form {
|
||||
.bol.sheet.actor .window-content .bol-actor-form {
|
||||
background-image: url("/systems/bol/ui/logo.webp");
|
||||
background-repeat: no-repeat;
|
||||
background-size: 190px 115px;
|
||||
@ -855,11 +869,30 @@ body.system-bol img#logo {
|
||||
font-weight: bold;
|
||||
color: #4b4a44;
|
||||
}
|
||||
.bol.sheet.actor .bonus-text {
|
||||
margin-top: 7px;
|
||||
}
|
||||
.bol.sheet.actor .stat-value {
|
||||
font-size: 1.5rem;
|
||||
font-weight: bold;
|
||||
color: darkred;
|
||||
}
|
||||
.bol.sheet.actor .resource-bonus {
|
||||
font-weight: bold;
|
||||
color: darkred;
|
||||
}
|
||||
.bol.sheet.actor .resources-value {
|
||||
background-color:#2a2a2a30;
|
||||
border-color: #003c1e;
|
||||
margin-top: 4px;
|
||||
border-radius: 0.5rem;
|
||||
}
|
||||
.bol.sheet.actor .resources-novalue {
|
||||
background-color:#2a2a2a00;
|
||||
border-color: #003c1e;
|
||||
margin-top: 4px;
|
||||
border-radius: 0.5rem;
|
||||
}
|
||||
.bol.sheet.actor .stat-roll {
|
||||
font-size: 1.5rem;
|
||||
color: #4b4a44;
|
||||
@ -1032,3 +1065,13 @@ body.system-bol img#logo {
|
||||
.bol-hud-menu label {
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
.bol-margin-tb-2 {
|
||||
margin-top: 2px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
.character-summary-container {
|
||||
opacity: 0.95;
|
||||
}
|
||||
.character-summary-rollable {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
4
images/.directory
Normal file
4
images/.directory
Normal file
@ -0,0 +1,4 @@
|
||||
[Dolphin]
|
||||
Timestamp=2022,7,17,14,58,4.757
|
||||
Version=4
|
||||
VisibleRoles=Details_text,Details_size,Details_modificationtime,Details_creationtime,CustomizedDetails
|
File diff suppressed because it is too large
Load Diff
Before Width: | Height: | Size: 372 KiB |
458
lang/de.json
Normal file
458
lang/de.json
Normal file
@ -0,0 +1,458 @@
|
||||
{
|
||||
"ACTOR.TypeCharacter": "Charakter",
|
||||
"ACTOR.TypeEncounter": "NSC",
|
||||
"ITEM.TypeItem": "Objekt",
|
||||
"ITEM.TypeFeature": "Eigenschaft",
|
||||
"ITEM.TypeWeapon": "Waffe",
|
||||
"ITEM.TypeArmor": "Rüstung",
|
||||
|
||||
"BOL.attributes.vigor": "Stärke",
|
||||
"BOL.attributes.halfvigor" : "Demi-vigueur",
|
||||
"BOL.attributes.agility": "Geschicklichkeit",
|
||||
"BOL.attributes.mind": "Verstand",
|
||||
"BOL.attributes.appeal": "Auftreten",
|
||||
"BOL.aptitudes.init": "Initiative",
|
||||
"BOL.aptitudes.melee": "Nahkampf",
|
||||
"BOL.aptitudes.ranged": "Fernkampf",
|
||||
"BOL.aptitudes.def": "Verteidigung",
|
||||
"BOL.aptitudes.prot": "Schutz",
|
||||
"BOL.resources.hp": "Lebensblut",
|
||||
"BOL.resources.hero": "Heldenpunkte",
|
||||
"BOL.resources.faith": "Glaube",
|
||||
"BOL.resources.creation": "Erschaffung",
|
||||
"BOL.resources.power": "Arkane Macht",
|
||||
"BOL.resources.villainy": "Boshaftigkeit",
|
||||
"BOL.resources.alchemypoints": "Alchemiepunkte",
|
||||
"BOL.traits.xp": "Erfahrung",
|
||||
|
||||
"BOL.ui.tab.stats": "Attribute",
|
||||
"BOL.ui.tab.combat": "Kampf",
|
||||
"BOL.ui.tab.actions": "Aktionen",
|
||||
"BOL.ui.tab.features": "Eigenschaften",
|
||||
"BOL.ui.tab.equipment": "Ausrüstung",
|
||||
"BOL.ui.tab.description": "Beschreibung",
|
||||
"BOL.ui.tab.details": "Details",
|
||||
"BOL.ui.tab.spellalchemy": "Zaubersprüche & Alchemie",
|
||||
|
||||
"BOL.ui.properties": "Eigenschaften",
|
||||
"BOL.ui.description": "Beschreibung",
|
||||
"BOL.ui.actions": "Aktionen",
|
||||
"BOL.ui.capacities": "Fähigkeiten",
|
||||
"BOL.ui.capacityProperties": "Fähigkeitenseigenschaften",
|
||||
"BOL.ui.damages": "Schaden",
|
||||
"BOL.ui.details": "Details",
|
||||
"BOL.ui.category": "Kategorie",
|
||||
"BOL.ui.subcategory": "Unterkategorie",
|
||||
"BOL.ui.type": "Typ",
|
||||
"BOL.ui.subtype": "Untertyp",
|
||||
"BOL.ui.attribute" : "Attribut",
|
||||
"BOL.ui.aptitude" : "Einstellungen",
|
||||
"BOL.ui.advantages" : "Vorteile/Nachteile",
|
||||
"BOL.ui.modifiers": "Modifikatoren",
|
||||
"BOL.ui.item": "Objekt",
|
||||
"BOL.ui.edit": "Ändern",
|
||||
"BOL.ui.unequip": "Ablegen",
|
||||
"BOL.ui.equip": "Anlegen",
|
||||
"BOL.ui.delete": "Löschen",
|
||||
"BOL.ui.roll" : "Würfeln",
|
||||
"BOL.ui.equipment" : "Ausrüstung",
|
||||
"BOL.ui.equipmentProperties" : "Ausrüstungseigenschaften",
|
||||
"BOL.ui.weaponAttack" : "Waffenangriff",
|
||||
"BOL.ui.weaponProperties" : "Waffeneigenschaften",
|
||||
"BOL.ui.protectionProperties" : "Schutzeigenschaften",
|
||||
"BOL.ui.magicalProperties" : "Magieeigenschaften",
|
||||
"BOL.ui.capacatyProperties" : "Fähigkeiteneigenschaften",
|
||||
"BOL.ui.alchemyProperties": "Alchemieeigenschaften",
|
||||
"BOL.ui.armor" : "Rüstung",
|
||||
"BOL.ui.reach" : "Reichweite",
|
||||
"BOL.ui.weapon" : "Waffe",
|
||||
"BOL.ui.melee" : "Nahkampf",
|
||||
"BOL.ui.ranged" : "Fernkampf",
|
||||
"BOL.ui.protection" : "Schutz",
|
||||
"BOL.ui.shield" : "Schild",
|
||||
"BOL.ui.blocking" : "Blocken",
|
||||
"BOL.ui.range" : "Reichweite",
|
||||
"BOL.ui.quantity" : "Menge",
|
||||
"BOL.ui.qty" : "Anz.",
|
||||
"BOL.ui.slot" : "Slot",
|
||||
"BOL.ui.weight" : "Gewicht",
|
||||
"BOL.ui.price": "Preis",
|
||||
"BOL.ui.cancel": "Abbrechen",
|
||||
"BOL.ui.submit": "OK",
|
||||
"BOL.ui.attributeCheck" : "Attributsprobe",
|
||||
"BOL.ui.aptitudeCheck" : "Fähigkeitsprobe",
|
||||
"BOL.ui.weaponCheck" : "Waffenprobe",
|
||||
"BOL.ui.spellCheck" : "Zauberprobe",
|
||||
"BOL.ui.careers" : "Laufbahnen",
|
||||
"BOL.ui.boons" : "Gaben",
|
||||
"BOL.ui.flaws" : "Schwächen",
|
||||
"BOL.ui.rank" : "Rang",
|
||||
"BOL.ui.success" : "Erfolg",
|
||||
"BOL.ui.failure" : "Fehlschlag",
|
||||
"BOL.ui.fumble" : "Kritischer Fehlschlag",
|
||||
"BOL.ui.critical" : "Mächtiger Erfolg",
|
||||
"BOL.ui.criticallegend" : "Legendärer Erfolg",
|
||||
"BOL.ui.maneuvers" : "Kampfmanöver",
|
||||
"BOL.ui.stacksize" : "Stapelgröße (max)",
|
||||
"BOL.ui.weapons" : "Waffen",
|
||||
"BOL.ui.protections" : "Schutz",
|
||||
"BOL.ui.ammos" : "Munition",
|
||||
"BOL.ui.containers" : "Behälter",
|
||||
"BOL.ui.treasure" : "Schätze",
|
||||
"BOL.ui.vehicles" : "Fahrzeuge/Reittiere",
|
||||
"BOL.ui.misc" : "Verschiedenes",
|
||||
"BOL.ui.vehicleProperties" : "Fahrzeugeigenschaften",
|
||||
"BOL.ui.speed" : "Geschwindigkeit",
|
||||
"BOL.ui.noWeaponName" : "Unbekannte Waffe",
|
||||
"BOL.ui.targetDefence": "Verteidigung",
|
||||
"BOL.ui.applyShieldMalus": "Schildmalus anwenden",
|
||||
"BOL.ui.shieldMalus": "Schildmalus",
|
||||
"BOL.ui.defenseScore": "Verteidigungswert",
|
||||
"BOL.ui.defender": "Verteidiger",
|
||||
"BOL.ui.difficulty": "Schwierigkeit",
|
||||
"BOL.ui.spellProperties": "Zaubereigenschaften",
|
||||
"BOL.ui.duration": "Dauer",
|
||||
"BOL.ui.spellkeep": "Aufrechterhalten",
|
||||
"BOL.ui.concentrate": "Konzentrieren",
|
||||
"BOL.ui.registerInit": "Register Init.",
|
||||
"BOL.ui.isSorcerer": "Ist Zauberer?",
|
||||
"BOL.ui.isAlchemist": "Ist Alchemist?",
|
||||
"BOL.ui.isPriest": "Ist Priester/Druide?",
|
||||
"BOL.ui.circle": "Kreis",
|
||||
"BOL.ui.spells": "Zaubersprüche",
|
||||
"BOL.ui.focusSpell": "Zauberspruch wirken",
|
||||
"BOL.ui.sorcererRank" : "Zaubererrang",
|
||||
"BOL.ui.alchemistRank": "Alchemistenrang",
|
||||
"BOL.ui.mandatoryconditions": "Benötigte Vorraussetzungen",
|
||||
"BOL.ui.optionnalconditions": "Optionale Vorraussetzungen",
|
||||
"BOL.ui.ppcost": "Arkane Macht-Kosten",
|
||||
"BOL.ui.ppAvailable": "Verfügbare Arkane Macht",
|
||||
"BOL.ui.pccost": "Creation Points cost",
|
||||
"BOL.ui.pcnow": "Actual Creation Points",
|
||||
"BOL.ui.alchemyType": "Typ",
|
||||
"BOL.ui.alchemy": "Alchemie",
|
||||
"BOL.ui.makeAlchemy": "Alchemika herstellen",
|
||||
"BOL.ui.alchemyCostTotal": "Alchemiepunkte ingesamt",
|
||||
"BOL.ui.alchemyInvest": "Alchemiepunkte investieren",
|
||||
"BOL.ui.alchemyCurrent": "Aktuelle Alchemiepunkte in Objekten",
|
||||
"BOL.ui.advance": "Status",
|
||||
"BOL.ui.isadvantage": "Gibt zusätzlichen Würfel?",
|
||||
"BOL.ui.isbonusdice": "Gibt zusätzlichen Würfel?",
|
||||
"BOL.ui.ismalusdice": "Gibt zusätzlichen Würfel?",
|
||||
"BOL.ui.bonusmalus": "Zusätzliche Boni/Mali?",
|
||||
"BOL.ui.nbdices": "Anzahl der Würfel",
|
||||
"BOL.ui.totalmod": "Kompletter Mod.",
|
||||
"BOL.ui.rangeModifiers": "Reichweitenmodifikator",
|
||||
"BOL.ui.money": "Gold",
|
||||
"BOL.ui.moneyTitle": "Gold & Schätze",
|
||||
"BOL.ui.fightOption": "Kampfoptionen",
|
||||
"BOL.ui.none": "Nichts",
|
||||
"BOL.ui.fightOptionType": "Kampfoptionstypen",
|
||||
"BOL.ui.activated": "Aktiviert",
|
||||
"BOL.ui.deactivated": "Deaktiviert",
|
||||
"BOL.ui.status": "Status",
|
||||
"BOL.ui.toactivated": "Aktiv (>Deaktivieren)",
|
||||
"BOL.ui.todeactivated": "Inaktiv (>Aktivieren)",
|
||||
"BOL.ui.armorAgiMalus": "Rüschtung+Schild-Malus (Geschick)",
|
||||
"BOL.ui.armorInitMalus": "Rüstungsmalus (Init)",
|
||||
"BOL.ui.attackValue": "Angriffswert",
|
||||
|
||||
"BOL.featureCategory.origins": "Herkünfte",
|
||||
"BOL.featureCategory.races": "Rassen",
|
||||
"BOL.featureCategory.careers": "Laufbahnen",
|
||||
"BOL.featureCategory.boons": "Gaben",
|
||||
"BOL.featureCategory.flaws": "Schwächen",
|
||||
"BOL.featureCategory.languages": "Sprachen",
|
||||
"BOL.featureCategory.fightoptions": "Kampfoptionen",
|
||||
|
||||
"BOL.featureSubtypes.origin": "Herkunft",
|
||||
"BOL.featureSubtypes.race": "Rasse",
|
||||
"BOL.featureSubtypes.career": "Laufbahn",
|
||||
"BOL.featureSubtypes.boon": "Gabe",
|
||||
"BOL.featureSubtypes.flaw": "Schwäche",
|
||||
"BOL.featureSubtypes.language": "Sprache",
|
||||
"BOL.featureSubtypes.gods": "Glauben & Götter",
|
||||
"BOL.featureSubtypes.fightOption": "Kampfoption",
|
||||
|
||||
"BOL.bougette.nomoney": "Mittellos",
|
||||
"BOL.bougette.tolive": "Zum Überleben",
|
||||
"BOL.bougette.easylife": "Einfaches Leben",
|
||||
"BOL.bougette.luxury" : "Luxuriöses Leben",
|
||||
"BOL.bougette.rich": "Reich!",
|
||||
|
||||
"BOL.fightOptionTypes.armor": "Angriff um die Rüstung zu umgehen",
|
||||
"BOL.fightOptionTypes.intrepid": "Rücksichtsloser Angriff",
|
||||
"BOL.fightOptionTypes.twoweaponsdef": "Kampf mit zwei Waffen (Verteidigung)",
|
||||
"BOL.fightOptionTypes.twoweaponsatt": "Kampf mit zwei Waffen (Angriff)",
|
||||
"BOL.fightOptionTypes.fulldefense": "Volle Verteidigung",
|
||||
"BOL.fightOptionTypes.defense": "Verteidigungshaltung",
|
||||
"BOL.fightOptionTypes.attack": "Angriffshaltung",
|
||||
|
||||
"BOL.itemCategory.object": "Objekt",
|
||||
"BOL.itemCategory.equipment": "Ausrüstung",
|
||||
"BOL.itemCategory.consumable": "Verbrauchsgut",
|
||||
"BOL.itemCategory.spell": "Zauber",
|
||||
"BOL.itemCategory.vehicle": "Fahrzeug/Reittier",
|
||||
"BOL.itemCategory.other": "Verschiedenes",
|
||||
"BOL.itemCategory.capacity" : "Fähigkeiten",
|
||||
"BOL.itemCategory.alchemy": "Alchemie",
|
||||
|
||||
"BOL.combatCategory.protections": "Schutz",
|
||||
"BOL.combatCategory.shields": "Schilde",
|
||||
"BOL.combatCategory.melee": "Nahkampfwaffen",
|
||||
"BOL.combatCategory.ranged": "Fernkampfwaffen",
|
||||
"BOL.combatCategory.fightOptions": "Kampfoptionen",
|
||||
"BOL.combatCategory.natural": "Natürliche Waffen",
|
||||
|
||||
"BOL.equipmentCategory.weapon": "Waffe",
|
||||
"BOL.equipmentCategory.armor": "Rüstung",
|
||||
"BOL.equipmentCategory.protection": "Schutz",
|
||||
"BOL.equipmentCategory.shield": "Schild",
|
||||
"BOL.equipmentCategory.helm": "Helm",
|
||||
"BOL.equipmentCategory.jewel": "Schmuck",
|
||||
"BOL.equipmentCategory.scroll": "Schriftrolle",
|
||||
"BOL.equipmentCategory.ammunition": "Munition",
|
||||
"BOL.equipmentCategory.container": "Behälter",
|
||||
"BOL.equipmentCategory.currency": "Gold",
|
||||
"BOL.equipmentCategory.other": "Verschiedenes",
|
||||
|
||||
"BOL.protectionCategory.armor": "Rüstung",
|
||||
"BOL.protectionCategory.shield": "Schild",
|
||||
"BOL.protectionCategory.helm": "Helm",
|
||||
"BOL.protectionCategory.other": "Verschiedenes",
|
||||
|
||||
"BOL.spellItem.charm": "Zauber",
|
||||
"BOL.spellItem.circle1": "Erster Kreis",
|
||||
"BOL.spellItem.circle2": "Zweiter Kreis",
|
||||
"BOL.spellItem.circle3": "Dritter Kreis",
|
||||
|
||||
"BOL.alchemyItem.common": "Häufig",
|
||||
"BOL.alchemyItem.scarce": "Selten",
|
||||
"BOL.alchemyItem.legend": "Legendär",
|
||||
"BOL.alchemyItem.mythic": "Mystisch",
|
||||
|
||||
"BOL.weaponCategory.melee": "Nahkampf",
|
||||
"BOL.weaponCategory.ranged": "Fernkampf",
|
||||
"BOL.weaponCategory.other": "Verschiedenes",
|
||||
|
||||
"BOL.itemProperty.damageMultiplier": "Schadensmultiplikator",
|
||||
"BOL.itemProperty.attackBonusDice": "Angriffsbonuswürfel",
|
||||
"BOL.itemProperty.equipable": "Ausrüstbar",
|
||||
"BOL.itemProperty.protection": "Schutz",
|
||||
"BOL.itemProperty.blocking": "Blocken",
|
||||
"BOL.itemProperty.magical": "Magisch",
|
||||
"BOL.itemProperty.magicalProperties": "Magische Eigenschaften",
|
||||
"BOL.itemProperty.concealable": "Versteckbar",
|
||||
"BOL.itemProperty.2H": "Zweihändig",
|
||||
"BOL.itemProperty.helm": "Helm",
|
||||
"BOL.itemProperty.improvised": "Improvisiert",
|
||||
"BOL.itemProperty.shield": "Schild",
|
||||
"BOL.itemProperty.melee": "Nahkampf",
|
||||
"BOL.itemProperty.throwable": "Werfbar",
|
||||
"BOL.itemProperty.ignoreshield": "Ignoriert Schilde",
|
||||
"BOL.itemProperty.bashing": "Nicht-tödlicher Schaden",
|
||||
"BOL.itemProperty.stackable": "Stapelbar",
|
||||
"BOL.itemProperty.ranged": "Fernkampf",
|
||||
"BOL.itemProperty.weapon": "Waffe",
|
||||
"BOL.itemProperty.reloadable": "Nachladbar",
|
||||
"BOL.itemProperty.worn": "Angelegt",
|
||||
"BOL.itemProperty.spell" : "Zauber",
|
||||
"BOL.itemProperty.armor" : "Rüstung",
|
||||
"BOL.itemProperty.consumable" : "Verbrauchsgut",
|
||||
"BOL.itemProperty.bow" : "Bogen",
|
||||
"BOL.itemProperty.crossbow" : "Armbrust",
|
||||
"BOL.itemProperty.throwing" : "Wurfwaffe",
|
||||
"BOL.itemProperty.activable" : "Aktivierbar",
|
||||
"BOL.itemProperty.powder" : "Schießpulverwaffe",
|
||||
"BOL.itemProperty.attackAttribute" : "Angriff (Attribut)",
|
||||
"BOL.itemProperty.attackAptitude" : "Angriff (Fähigkeit)",
|
||||
"BOL.itemProperty.attackModifiers" : "Angriff (Modifikatoren)",
|
||||
"BOL.itemProperty.attackReroll1" : "Angriff (bei 1 erneut würfeln)",
|
||||
"BOL.itemProperty.damage" : "Schaden (Sch)",
|
||||
"BOL.itemProperty.damageModifiers" : "Schaden (Modifikatoren)",
|
||||
"BOL.itemProperty.damageAttribute" : "Schaden (Attribut)",
|
||||
"BOL.itemProperty.damageSpecial" : "Schaden (Spezial)",
|
||||
"BOL.itemProperty.damageReroll1" : "bei 1 erneut würfeln",
|
||||
"BOL.itemProperty.range" : "Reichweite (in m)",
|
||||
"BOL.itemProperty.soakFormula": "Auslösen (Formel)",
|
||||
"BOL.itemProperty.soakModifiers": "Auslösen (Modifikatoren)",
|
||||
"BOL.itemProperty.soakValue": "Auslösen (Wert)",
|
||||
"BOL.itemProperty.armorQuality": "Rüstungsqualität",
|
||||
"BOL.itemProperty.blockingMalus" : "Blockmalus",
|
||||
"BOL.itemProperty.blockingAttacksBlocked" : "Angriff geblockt",
|
||||
"BOL.itemProperty.blocking1Attack" : "Ein Angriff blocken",
|
||||
"BOL.itemProperty.blockingAllAttacks" : "Alle Angriffe blocken",
|
||||
"BOL.itemProperty.slot" : "Slotplatz",
|
||||
"BOL.itemProperty.reload": "Nachladen (Aktion)",
|
||||
"BOL.itemProperty.weaponSize" : "Waffengröße",
|
||||
"BOL.itemProperty.difficulty": "Schwierigkeit",
|
||||
"BOL.itemProperty.natural": "Natürliche Waffe",
|
||||
"BOL.itemProperty.onlymodifier": "Nur Modifikator (d.h. Angriffe von Kreaturen)",
|
||||
|
||||
"BOL.itemStat.quantity": "Anzahl",
|
||||
"BOL.itemStat.weight": "Gewicht",
|
||||
"BOL.itemStat.price": "Preis",
|
||||
"BOL.itemStat.range": "Reichweite",
|
||||
"BOL.itemStat.damage": "Schaden",
|
||||
"BOL.itemStat.reload": "Nachladen (Aktion)",
|
||||
"BOL.itemStat.soak": "Auslösen",
|
||||
"BOL.itemStat.blocking": "Blocken",
|
||||
"BOL.itemStat.modifiers": "Modifikatoren",
|
||||
|
||||
"BOL.weaponSize.unarmed" : "Unbewaffnet",
|
||||
"BOL.weaponSize.improvised" : "Improvisiert",
|
||||
"BOL.weaponSize.light" : "Leicht",
|
||||
"BOL.weaponSize.medium" : "Mittel",
|
||||
"BOL.weaponSize.heavy" : "Schwer",
|
||||
|
||||
"BOL.itemModifiers.init": "Malus (Initiative)",
|
||||
"BOL.itemModifiers.social": "Malus (Sozial)",
|
||||
"BOL.itemModifiers.agility": "Malus (Geschick)",
|
||||
"BOL.itemModifiers.powercost": "Malus (Zusatzkosten Arkane Macht)",
|
||||
|
||||
"BOL.itemBlocking.malus": "Sozial",
|
||||
"BOL.itemBlocking.nbAttacksPerRound": "Beweglichkeit",
|
||||
|
||||
"BOL.soakFormula.none" : "-",
|
||||
"BOL.soakFormula.light" : "Leicht (Verhindert d6-3 erlittenen Schaden)",
|
||||
"BOL.soakFormula.medium" : "Mittel (Verhindert d6-2 erlittenen Schaden)",
|
||||
"BOL.soakFormula.heavy" : "Schwer (Verhindert d6-1 erlittenen Schaden)",
|
||||
|
||||
"BOL.armorQuality.none" : "-",
|
||||
"BOL.armorQuality.light" : "Leicht",
|
||||
"BOL.armorQuality.lightQ" : "Leicht Qualität",
|
||||
"BOL.armorQuality.lightSup" : "Leicht Überlegen",
|
||||
"BOL.armorQuality.lightLeg" : "Leicht Legendär",
|
||||
"BOL.armorQuality.medium" : "Mittel",
|
||||
"BOL.armorQuality.mediumQ" : "Mittel Qualität",
|
||||
"BOL.armorQuality.mediumSup" : "Mittel Überlegen",
|
||||
"BOL.armorQuality.mediumLeg" : "Mittel Legendär",
|
||||
"BOL.armorQuality.heavy" : "Schwer",
|
||||
"BOL.armorQuality.heavyQ" : "Schwer Qualität",
|
||||
"BOL.armorQuality.heavySup" : "Schwer Überlegen",
|
||||
"BOL.armorQuality.heavyLeg" : "Schwer Legendär",
|
||||
|
||||
"BOL.equipmentSlots.none" : "-",
|
||||
"BOL.equipmentSlots.head" : "Kopf",
|
||||
"BOL.equipmentSlots.neck" : "Hals",
|
||||
"BOL.equipmentSlots.shoulders" : "Schultern",
|
||||
"BOL.equipmentSlots.body" : "Körper",
|
||||
"BOL.equipmentSlots.rhand" : "Rechte Hand",
|
||||
"BOL.equipmentSlots.lhand" : "Linke Hand",
|
||||
"BOL.equipmentSlots.2hands" : "Zweihändig",
|
||||
"BOL.equipmentSlots.rarm" : "Rechter Arm",
|
||||
"BOL.equipmentSlots.larm" : "Linker Arm",
|
||||
"BOL.equipmentSlots.chest" : "Torso",
|
||||
"BOL.equipmentSlots.belt" : "Gürtel",
|
||||
"BOL.equipmentSlots.legs" : "Beine",
|
||||
"BOL.equipmentSlots.feet" : "Füße",
|
||||
"BOL.equipmentSlots.finder" : "Finger",
|
||||
"BOL.equipmentSlots.ear" : "Ohr",
|
||||
|
||||
"BOL.vehicleCategory.mount" : "Reittier",
|
||||
"BOL.vehicleCategory.flying" : "Fluggerät",
|
||||
"BOL.vehicleCategory.boat" : "Schiff",
|
||||
"BOL.vehicleCategory.other" : "Anderes",
|
||||
|
||||
|
||||
"BOL.range.PointBlank": "Direkt",
|
||||
"BOL.range.Short": "Kurz",
|
||||
"BOL.range.Medium": "Mittel",
|
||||
"BOL.range.Long": "Weit",
|
||||
"BOL.range.VeryLong": "Sehr weit",
|
||||
"BOL.range.Extreme": "Extrem weit",
|
||||
"BOL.range.Maximum": "Maximale Reichweite",
|
||||
|
||||
"BOL.notification.MacroMultipleTokensSelected": "Du hast mehrere Token ausgewählt",
|
||||
"BOL.notification.MacroNoActorAvailable": "Es konnte kein Akteur gefunden werden",
|
||||
"BOL.notification.MacroNoTokenSelected": "Du musst einen Token auswählen",
|
||||
|
||||
"BOL.size.tiny": "Winzig",
|
||||
"BOL.size.verysmall": "Sehr klein",
|
||||
"BOL.size.small" : "Klein",
|
||||
"BOL.size.medium" : "Mittel",
|
||||
"BOL.size.large" : "Groß",
|
||||
"BOL.size.verylarge": "Sehr groß",
|
||||
"BOL.size.huge" :"Riesig",
|
||||
"BOL.size.massive" : "Massiv",
|
||||
"BOL.size.enormous": "Enorm",
|
||||
"BOL.size.gigantic": "Gigantisch",
|
||||
"BOL.size.immense": "Immens",
|
||||
"BOL.size.colossal": "Kolossal",
|
||||
|
||||
"BOL.chat.fightactive": "{name} aktiviert die Kampfoption {foName} für diese Runde!",
|
||||
"BOL.chat.fightunactive": "{name} deaktiviert die Kampfoption {foName} für diese Runde!",
|
||||
"BOL.chat.isdead": "{name} ist tot!",
|
||||
"BOL.chat.epitaph": "Möge sein Name auf den Schlachtfeldern Lemurias in Ehren gehalten werden.!",
|
||||
"BOL.chat.vitalityzero": "Das Lebensblut von {name} ist {hp}: {name} geht zu Boden und wird bewusstlos!",
|
||||
"BOL.chat.vitalityheroism": "Gib einen Heldenpunkt aus um für eine Runde wieder auf die Beine zu kommen.",
|
||||
"BOL.chat.vitalityheroismhint": "Dadurch steigt dein Lebensblut auf das Maximum geteilt durch 2 (aufgerundet).",
|
||||
"BOL.chat.vitalitydying": "Das Lebensblut von {name} ist {hp}! {name} stirbt...",
|
||||
"BOL.chat.vitalitydyingheroism": "Gib einen Heldenpunkt aus um den Tod herauszufordern.",
|
||||
"BOL.chat.alchemytitle": "Alchemiepräparat: {name}",
|
||||
"BOL.chat.alchemypoints": "Investierte Charaktererschaffungspunkte: {pcCostCurrent}",
|
||||
"BOL.chat.alchemysuccess": "Das alchemistische Präparat wurde erfolgreich abgeschlossen!<br>Erstelle den entsprechenden Gegenstand oder Effekt in deinem Inventar.<br>Der Vorbereitungsfortschritt wurde auf 0 zurückgesetzt.",
|
||||
"BOL.chat.alchemyfailure": "Das Alchemistische Präparat ist fehlgeschlagen!<br>Der Fortschritt wurde auf 0 zurückgesetzt.",
|
||||
"BOL.chat.rolldamage": "Schaden auswürfeln",
|
||||
"BOL.chat.rolldamage6": "Schaden auswürfeln +6",
|
||||
"BOL.chat.rolldamage12": "Schaden auswürfeln +12 (1 Heldenpunkt)",
|
||||
"BOL.chat.damageresult": "Schaden von {name}: {total}",
|
||||
"BOL.chat.damagetarget": "Ziel: {target}",
|
||||
"BOL.chat.applydamagetotarget": "Schaden auf Ziel anwenden",
|
||||
"BOL.chat.fightoption": "Kampfoption",
|
||||
"BOL.chat.reroll": "Erneut Würfeln (1 Heldenpunkt)",
|
||||
"BOL.chat.toheroic": "In mächtigen Erfolg umwandeln (1 Heldenpunkt)",
|
||||
"BOL.chat.tolegend": "In legendären Erfolg umwandeln (1 Heldenpunkt)",
|
||||
"BOL.chat.hurttitle": "{name} wird {damageTotal} Schaden erleiden!",
|
||||
"BOL.chat.armordefault": "Dieser Angriff richtet sich gegen Fehler in deiner Rüstung. Du musst den Schaden ohne den Schutz deiner Rüstung einstecken!",
|
||||
"BOL.chat.witharmor": "Schaden MIT Rüstungsschutz anwenden",
|
||||
"BOL.chat.withoutarmor": "Schaden OHNE Rüstungsschutz anwenden",
|
||||
"BOL.chat.shakeoff": "Nur ein Kratzer (1 Heldenpunkt)",
|
||||
"BOL.chat.splinteredshield": "Opfere dein Schild/Schwert {name} (1 Heldenpunkt)",
|
||||
"BOL.chat.damagesummary": "Schaden durch {name} erlitten",
|
||||
"BOL.chat.protectvalue": "Rüstungsschutz",
|
||||
"BOL.chat.noprotectvalue": "Kein Rüstungsschutz!",
|
||||
"BOL.chat.heroreducedamage": "Gib einen Heldenpunkt aus um eine zusätzliche Schadensreduktion von {total} zu bekommen.",
|
||||
"BOL.chat.herosplintered": "Du hast keinen Schaden eingesteckt dank {weaponHero.name}. Leider wurde es während der Parade zerstört. Du hast einen Heldenpunkt verloren.",
|
||||
"BOL.chat.finaldamage": "Endergebnis: {finalDamage} Schaden!",
|
||||
"BOL.chat.spell": "Zauber",
|
||||
"BOL.chat.spellcost": "Arkane Macht-Kosten",
|
||||
"BOL.chat.spellremaining": "Verbleibende Arkane Macht",
|
||||
"BOL.dialog.soeasy": "Trivial (+4)",
|
||||
"BOL.dialog.veryeasy": "Sehr leicht (+2)",
|
||||
"BOL.dialog.easy": "Leicht (+1)",
|
||||
"BOL.dialog.moderate": "Normal (0)",
|
||||
"BOL.dialog.hard": "Knifflig (-1)",
|
||||
"BOL.dialog.tough": "Schwierig (-2)",
|
||||
"BOL.dialog.demanding": "Sehr Schwierig (-4)",
|
||||
"BOL.dialog.formidable": "Herausfordernd (-6)",
|
||||
"BOL.dialog.heroic": "Heldenhaft (-8)",
|
||||
"BOL.dialog.mythic": "Mystisch (-10)",
|
||||
"BOL.dialog.divine": "Göttlich (-12)",
|
||||
"BOL.dialog.pointblank": "Direkt (+1)",
|
||||
"BOL.dialog.close": "Kurz (0)",
|
||||
"BOL.dialog.medium": "Mittel (-1)",
|
||||
"BOL.dialog.long": "Weit (-2)",
|
||||
"BOL.dialog.distant": "Sehr Weit (-4)",
|
||||
"BOL.dialog.extreme": "Extrem Weit (-6)",
|
||||
"BOL.dialog.utmost": "Maximale Reichweite (-8)",
|
||||
|
||||
"BOL.ui.name": "Name",
|
||||
"BOL.ui.xp": "Erfahrung",
|
||||
"BOL.ui.xpspent": "Ausgegeben",
|
||||
"BOL.ui.xptotal": "Insgesamt",
|
||||
"BOL.ui.biosize": "Größe",
|
||||
"BOL.ui.bioweight": "Gewicht",
|
||||
"BOL.ui.bioage": "Alter",
|
||||
"BOL.ui.biohair": "Haare",
|
||||
"BOL.ui.bioeyes": "Augen",
|
||||
"BOL.ui.biosigns": "Erkennungszeichen",
|
||||
"BOL.ui.biodescription": "Beschreibung",
|
||||
"BOL.ui.bionotes": "Notizen",
|
||||
|
||||
"BOL.chat.welcome1": "Willkommen zu Barbarians of Lemuria (französische Ludospherik-Version, deutsche Übersetzung von Truant Spiele)",
|
||||
"BOL.chat.welcome2": "Zum Spielen werden zwingend die passenden BoL Bücher benötigt. Die französischen Originalbücher für dieses System gibt es hier: http://www.ludospherik.fr/content/14-barbarians-of-lemuria<br>Die deutsche Übersetzung gibt es bei Truant Spiele: https://truant.com/produkt/barbarians-of-lemuria-2",
|
||||
"BOL.chat.welcome3": "Die enthaltenen Karten wurden von Guillaume Tavernier und Ludospherik zur Verfügung gestellt. Vielen Dank dafür!",
|
||||
"BOL.chat.welcome4": "Im Discord findet ihr Support für die FoundryVTT-Implementierung dieses Systems: https://discord.gg/pPSDNJk",
|
||||
"BOL.chat.welcome5": "Auf ein gutes Spiel in Lemuria!"
|
||||
}
|
583
lang/en.json
583
lang/en.json
@ -1,111 +1,111 @@
|
||||
{
|
||||
"ACTOR.TypeCharacter": "Personnage",
|
||||
"ACTOR.TypeEncounter": "Rencontre",
|
||||
"ITEM.TypeItem": "Objet",
|
||||
"ITEM.TypeFeature": "Trait",
|
||||
"ITEM.TypeWeapon": "Arme",
|
||||
"ITEM.TypeArmor": "Armure",
|
||||
"ACTOR.TypeCharacter": "Character",
|
||||
"ACTOR.TypeEncounter": "Encounter",
|
||||
"ITEM.TypeItem": "Item",
|
||||
"ITEM.TypeFeature": "Feature",
|
||||
"ITEM.TypeWeapon": "Weapon",
|
||||
"ITEM.TypeArmor": "Armor",
|
||||
|
||||
"BOL.attributes.vigor": "Vigueur",
|
||||
"BOL.attributes.halfvigor" : "Demi-vigueur",
|
||||
"BOL.attributes.agility": "Agilité",
|
||||
"BOL.attributes.mind": "Esprit",
|
||||
"BOL.attributes.appeal": "Aura",
|
||||
"BOL.attributes.vigor": "Vigor",
|
||||
"BOL.attributes.halfvigor" : "Half-Vigor",
|
||||
"BOL.attributes.agility": "Agility",
|
||||
"BOL.attributes.mind": "Mind",
|
||||
"BOL.attributes.appeal": "Appeal",
|
||||
"BOL.aptitudes.init": "Initiative",
|
||||
"BOL.aptitudes.melee": "Mêlée",
|
||||
"BOL.aptitudes.ranged": "Tir",
|
||||
"BOL.aptitudes.def": "Défense",
|
||||
"BOL.aptitudes.melee": "Melee",
|
||||
"BOL.aptitudes.ranged": "Ranged",
|
||||
"BOL.aptitudes.def": "Defense",
|
||||
"BOL.aptitudes.prot": "Protection",
|
||||
"BOL.resources.hp": "Vitalité",
|
||||
"BOL.resources.hero": "Héroïsme",
|
||||
"BOL.resources.faith": "Foi",
|
||||
"BOL.resources.creation": "Création",
|
||||
"BOL.resources.power": "Pouvoir",
|
||||
"BOL.resources.villainy": "Vilénie",
|
||||
"BOL.resources.hp": "Vitality",
|
||||
"BOL.resources.hero": "Hero",
|
||||
"BOL.resources.faith": "Faith",
|
||||
"BOL.resources.creation": "Creation",
|
||||
"BOL.resources.power": "Power",
|
||||
"BOL.resources.villainy": "Villany",
|
||||
"BOL.resources.alchemypoints": "Alchemy Points",
|
||||
"BOL.traits.xp": "Expérience",
|
||||
"BOL.traits.xp": "Experience",
|
||||
|
||||
"BOL.ui.tab.stats": "Attributs",
|
||||
"BOL.ui.tab.stats": "Attributes",
|
||||
"BOL.ui.tab.combat": "Combat",
|
||||
"BOL.ui.tab.actions": "Actions",
|
||||
"BOL.ui.tab.features": "Traits",
|
||||
"BOL.ui.tab.equipment": "Equipement",
|
||||
"BOL.ui.tab.equipment": "Equipment",
|
||||
"BOL.ui.tab.description": "Description",
|
||||
"BOL.ui.tab.details": "Details",
|
||||
"BOL.ui.tab.spellalchemy": "Spells&Alchemy",
|
||||
"BOL.ui.tab.spellalchemy": "Spells & Alchemy",
|
||||
|
||||
"BOL.ui.properties": "Propriétés",
|
||||
"BOL.ui.properties": "Properties",
|
||||
"BOL.ui.description": "Description",
|
||||
"BOL.ui.actions": "Actions",
|
||||
"BOL.ui.capacities": "Capacités",
|
||||
"BOL.ui.damages": "Dommages",
|
||||
"BOL.ui.details": "Détails",
|
||||
"BOL.ui.category": "Catégorie",
|
||||
"BOL.ui.subcategory": "Sous-catégorie",
|
||||
"BOL.ui.capacities": "Capacity",
|
||||
"BOL.ui.damages": "Damage",
|
||||
"BOL.ui.details": "Details",
|
||||
"BOL.ui.category": "Category",
|
||||
"BOL.ui.subcategory": "Sub-Category",
|
||||
"BOL.ui.type": "Type",
|
||||
"BOL.ui.subtype": "Sous-type",
|
||||
"BOL.ui.attribute" : "Attribut",
|
||||
"BOL.ui.subtype": "Subtype",
|
||||
"BOL.ui.attribute" : "Attribute",
|
||||
"BOL.ui.aptitude" : "Aptitude",
|
||||
"BOL.ui.advantages" : "Avantages/Désavantages",
|
||||
"BOL.ui.modifiers": "Modificateurs",
|
||||
"BOL.ui.item": "Objet",
|
||||
"BOL.ui.edit": "Editer",
|
||||
"BOL.ui.unequip": "Déséquiper",
|
||||
"BOL.ui.equip": "Équiper",
|
||||
"BOL.ui.delete": "Supprimer",
|
||||
"BOL.ui.roll" : "Utiliser",
|
||||
"BOL.ui.equipment" : "Équipement",
|
||||
"BOL.ui.equipmentProperties" : "Propiétés d'équipement",
|
||||
"BOL.ui.advantages" : "Boons/Flaws",
|
||||
"BOL.ui.modifiers": "Modifiers",
|
||||
"BOL.ui.item": "Item",
|
||||
"BOL.ui.edit": "Edit",
|
||||
"BOL.ui.unequip": "Unequip",
|
||||
"BOL.ui.equip": "Equip",
|
||||
"BOL.ui.delete": "Delete",
|
||||
"BOL.ui.roll" : "Roll",
|
||||
"BOL.ui.equipment" : "Equipment",
|
||||
"BOL.ui.equipmentProperties" : "Equipment properties",
|
||||
"BOL.ui.weaponAttack" : "Weapon attack",
|
||||
"BOL.ui.weaponProperties" : "Propiétés offensives",
|
||||
"BOL.ui.protectionProperties" : "Protection",
|
||||
"BOL.ui.magicalProperties" : "Propriétés magiques",
|
||||
"BOL.ui.weaponProperties" : "Weapon properties",
|
||||
"BOL.ui.protectionProperties" : "Protection properties",
|
||||
"BOL.ui.magicalProperties" : "Magical properties",
|
||||
"BOL.ui.alchemyProperties": "Alchemy properties",
|
||||
"BOL.ui.armor" : "Armure",
|
||||
"BOL.ui.reach" : "Allonge",
|
||||
"BOL.ui.weapon" : "Arme",
|
||||
"BOL.ui.melee" : "Arme de contact",
|
||||
"BOL.ui.ranged" : "Arme à distance",
|
||||
"BOL.ui.armor" : "Armor",
|
||||
"BOL.ui.reach" : "Reach",
|
||||
"BOL.ui.weapon" : "Weapon",
|
||||
"BOL.ui.melee" : "Melee",
|
||||
"BOL.ui.ranged" : "Ranged",
|
||||
"BOL.ui.protection" : "Protection",
|
||||
"BOL.ui.shield" : "Bouclier",
|
||||
"BOL.ui.blocking" : "Blocage",
|
||||
"BOL.ui.range" : "Portée",
|
||||
"BOL.ui.quantity" : "Quantité",
|
||||
"BOL.ui.qty" : "Qté",
|
||||
"BOL.ui.slot" : "Empl.",
|
||||
"BOL.ui.weight" : "Poids",
|
||||
"BOL.ui.price": "Prix",
|
||||
"BOL.ui.cancel": "Annuler",
|
||||
"BOL.ui.shield" : "Shield",
|
||||
"BOL.ui.blocking" : "Blocking",
|
||||
"BOL.ui.range" : "Range",
|
||||
"BOL.ui.quantity" : "Quantity",
|
||||
"BOL.ui.qty" : "Qty",
|
||||
"BOL.ui.slot" : "Slot",
|
||||
"BOL.ui.weight" : "Weight",
|
||||
"BOL.ui.price": "Price",
|
||||
"BOL.ui.cancel": "Cancel",
|
||||
"BOL.ui.submit": "OK",
|
||||
"BOL.ui.attributeCheck" : "Test d'attribut",
|
||||
"BOL.ui.aptitudeCheck" : "Test d'aptitude",
|
||||
"BOL.ui.weaponCheck" : "Jet d'attaque",
|
||||
"BOL.ui.spellCheck" : "Jet de sort",
|
||||
"BOL.ui.careers" : "Carrières",
|
||||
"BOL.ui.boons" : "Avantages",
|
||||
"BOL.ui.flaws" : "Désavantages",
|
||||
"BOL.ui.rank" : "Rang",
|
||||
"BOL.ui.success" : "Succès",
|
||||
"BOL.ui.failure" : "Échec",
|
||||
"BOL.ui.fumble" : "Échec critique",
|
||||
"BOL.ui.critical" : "Succès critique",
|
||||
"BOL.ui.maneuvers" : "Actions de combat",
|
||||
"BOL.ui.stacksize" : "Taille de pile (max)",
|
||||
"BOL.ui.weapons" : "Armes",
|
||||
"BOL.ui.protections" : "Protections",
|
||||
"BOL.ui.ammos" : "Munitions",
|
||||
"BOL.ui.containers" : "Conteneurs",
|
||||
"BOL.ui.treasure" : "Trésor",
|
||||
"BOL.ui.vehicles" : "Véhicules/Montures",
|
||||
"BOL.ui.misc" : "Divers",
|
||||
"BOL.ui.vehicleProperties" : " Propriétés de véhicule",
|
||||
"BOL.ui.speed" : "Vitesse",
|
||||
"BOL.ui.noWeaponName" : "Arme Inconnue",
|
||||
"BOL.ui.targetDefence": "Défense",
|
||||
"BOL.ui.applyShieldMalus": "Appliquer le Malus de Petit Bouclier",
|
||||
"BOL.ui.shieldMalus": "Malus de Bouclier",
|
||||
"BOL.ui.defenseScore": "Score de Defense",
|
||||
"BOL.ui.defender": "Défenseur",
|
||||
"BOL.ui.attributeCheck" : "Attribute Check",
|
||||
"BOL.ui.aptitudeCheck" : "Aptitude Check",
|
||||
"BOL.ui.weaponCheck" : "Weapon Check",
|
||||
"BOL.ui.spellCheck" : "Spell Check",
|
||||
"BOL.ui.careers" : "Careers",
|
||||
"BOL.ui.boons" : "Boons",
|
||||
"BOL.ui.flaws" : "Flaws",
|
||||
"BOL.ui.rank" : "Rank",
|
||||
"BOL.ui.success" : "Success",
|
||||
"BOL.ui.failure" : "Failure",
|
||||
"BOL.ui.fumble" : "Fumble",
|
||||
"BOL.ui.critical" : "Critical Success",
|
||||
"BOL.ui.maneuvers" : "Maneuvers",
|
||||
"BOL.ui.stacksize" : "Stack Size (max)",
|
||||
"BOL.ui.weapons" : "Weapons",
|
||||
"BOL.ui.protections" : "Protection",
|
||||
"BOL.ui.ammos" : "Ammo",
|
||||
"BOL.ui.containers" : "Container",
|
||||
"BOL.ui.treasure" : "Treasure",
|
||||
"BOL.ui.vehicles" : "Vehicles/Mounts",
|
||||
"BOL.ui.misc" : "Misc",
|
||||
"BOL.ui.vehicleProperties" : "Vehicle properties",
|
||||
"BOL.ui.speed" : "Speed",
|
||||
"BOL.ui.noWeaponName" : "Weapon Name",
|
||||
"BOL.ui.targetDefence": "Defense",
|
||||
"BOL.ui.applyShieldMalus": "Apply Shield Modifier",
|
||||
"BOL.ui.shieldMalus": "Shield Modifier",
|
||||
"BOL.ui.defenseScore": "Defense Score",
|
||||
"BOL.ui.defender": "Defender",
|
||||
"BOL.ui.difficulty": "Difficulty",
|
||||
"BOL.ui.spellProperties": "Spell Properties",
|
||||
"BOL.ui.duration": "Duration",
|
||||
@ -121,7 +121,7 @@
|
||||
"BOL.ui.sorcererRank" : "Sorcerer Rank",
|
||||
"BOL.ui.alchemistRank": "Alchemist Rank",
|
||||
"BOL.ui.mandatoryconditions": "Mandatory conditions",
|
||||
"BOL.ui.optionnalconditions": "Optionnal conditions",
|
||||
"BOL.ui.optionnalconditions": "Optional conditions",
|
||||
"BOL.ui.ppcost": "Power Points cost",
|
||||
"BOL.ui.ppAvailable": "Available Power Points",
|
||||
"BOL.ui.pccost": "Creation Points cost",
|
||||
@ -134,38 +134,39 @@
|
||||
"BOL.ui.alchemyCurrent": "Current Alchemy Points in Object",
|
||||
"BOL.ui.advance": "Status",
|
||||
"BOL.ui.isadvantage": "Provides a bonus dice?",
|
||||
"BOL.ui.bonusmalus": "Additionnal bonus/malus",
|
||||
"BOL.ui.nbdices": "Number of Dices",
|
||||
"BOL.ui.bonusmalus": "Additional bonus/penalty",
|
||||
"BOL.ui.nbdices": "Number of Dice",
|
||||
"BOL.ui.totalmod": "Total Mod.",
|
||||
"BOL.ui.rangeModifiers": "Range modifier",
|
||||
"BOL.ui.money": "Bougette",
|
||||
"BOL.ui.money": "Money",
|
||||
"BOL.ui.moneyTitle": "Gold & Treasure",
|
||||
"BOL.ui.fightOption": "Fight Options",
|
||||
"BOL.ui.none": "None",
|
||||
"BOL.ui.fightOptionType": "Fight Options types",
|
||||
"BOL.ui.fightOptionType": "Fight Option types",
|
||||
"BOL.ui.activated": "Activated",
|
||||
"BOL.ui.deactivated": "Deactivated",
|
||||
"BOL.ui.status": "Status",
|
||||
"BOL.ui.toactivated": "Active (>Désactiver)",
|
||||
"BOL.ui.todeactivated": "Inactive (>Activer)",
|
||||
"BOL.ui.armorAgiMalus": "Armor+Shield Malus (Agi)",
|
||||
"BOL.ui.armorInitMalus": "Armor Malus (Init)",
|
||||
"BOL.ui.attackValue": "Attack value",
|
||||
"BOL.ui.toactivated": "Active (>Deactivated)",
|
||||
"BOL.ui.todeactivated": "Inactive (>Active)",
|
||||
"BOL.ui.armorAgiMalus": "Armor+Shield Modifier (Agi)",
|
||||
"BOL.ui.armorInitMalus": "Armor Modifier (Init)",
|
||||
"BOL.ui.attackValue": "Attack Value",
|
||||
"BOL.ui.weaponbonus": "Cette arme bénéficie déja d'un Dé de Bonus (Arme Favorite prise en compte, par exemple)",
|
||||
|
||||
"BOL.featureCategory.origins": "Origines",
|
||||
"BOL.featureCategory.origins": "Origins",
|
||||
"BOL.featureCategory.races": "Races",
|
||||
"BOL.featureCategory.careers": "Carrières",
|
||||
"BOL.featureCategory.boons": "Avantages",
|
||||
"BOL.featureCategory.flaws": "Désavantages",
|
||||
"BOL.featureCategory.languages": "Langages",
|
||||
"BOL.featureCategory.careers": "Careers",
|
||||
"BOL.featureCategory.boons": "Boons",
|
||||
"BOL.featureCategory.flaws": "Flaws",
|
||||
"BOL.featureCategory.languages": "Languages",
|
||||
"BOL.featureCategory.fightoptions": "Fight Options",
|
||||
|
||||
"BOL.featureSubtypes.origin": "Origine",
|
||||
"BOL.featureSubtypes.origin": "Origin",
|
||||
"BOL.featureSubtypes.race": "Race",
|
||||
"BOL.featureSubtypes.career": "Carrière",
|
||||
"BOL.featureSubtypes.boon": "Avantage",
|
||||
"BOL.featureSubtypes.flaw": "Désavantage",
|
||||
"BOL.featureSubtypes.language": "Langage",
|
||||
"BOL.featureSubtypes.career": "Career",
|
||||
"BOL.featureSubtypes.boon": "Boon",
|
||||
"BOL.featureSubtypes.flaw": "Flaw",
|
||||
"BOL.featureSubtypes.language": "Language",
|
||||
"BOL.featureSubtypes.gods": "Faith & Gods",
|
||||
"BOL.featureSubtypes.fightOption": "Combat Option",
|
||||
|
||||
@ -175,46 +176,46 @@
|
||||
"BOL.bougette.luxury" : "Luxury life",
|
||||
"BOL.bougette.rich": "Rich!",
|
||||
|
||||
"BOL.fightOptionTypes.armor": "Attaque au défaut d'armure",
|
||||
"BOL.fightOptionTypes.intrepid": "Attaque intrépide",
|
||||
"BOL.fightOptionTypes.twoweaponsdef": "Combat à 2 armes (Défense)",
|
||||
"BOL.fightOptionTypes.twoweaponsatt": "Combat à 2 armes (Attaque)",
|
||||
"BOL.fightOptionTypes.fulldefense": "Défense totale",
|
||||
"BOL.fightOptionTypes.defense": "Posture défensive",
|
||||
"BOL.fightOptionTypes.attack": "Posture offensive",
|
||||
"BOL.fightOptionTypes.armor": "Armor Attack Option",
|
||||
"BOL.fightOptionTypes.intrepid": "Fearless Attack",
|
||||
"BOL.fightOptionTypes.twoweaponsdef": "Two Weapon (Defense)",
|
||||
"BOL.fightOptionTypes.twoweaponsatt": "Two Weapon (Attack)",
|
||||
"BOL.fightOptionTypes.fulldefense": "Full Defense",
|
||||
"BOL.fightOptionTypes.defense": "Defensive Posture",
|
||||
"BOL.fightOptionTypes.attack": "Offensive Posture",
|
||||
|
||||
"BOL.itemCategory.object": "Objet",
|
||||
"BOL.itemCategory.equipment": "Équipement",
|
||||
"BOL.itemCategory.consumable": "Consommable",
|
||||
"BOL.itemCategory.spell": "Sort",
|
||||
"BOL.itemCategory.vehicle": "Monture/Véhicule",
|
||||
"BOL.itemCategory.other": "Autre",
|
||||
"BOL.itemCategory.capacity" : "Capacité",
|
||||
"BOL.itemCategory.object": "Object",
|
||||
"BOL.itemCategory.equipment": "Equipment",
|
||||
"BOL.itemCategory.consumable": "Consumable",
|
||||
"BOL.itemCategory.spell": "Spell",
|
||||
"BOL.itemCategory.vehicle": "Mount/Vehicle",
|
||||
"BOL.itemCategory.other": "Other",
|
||||
"BOL.itemCategory.capacity" : "Capacity",
|
||||
"BOL.itemCategory.alchemy": "Alchemy",
|
||||
|
||||
"BOL.combatCategory.protections": "Protections",
|
||||
"BOL.combatCategory.shields": "Boucliers",
|
||||
"BOL.combatCategory.melee": "Armes de contact",
|
||||
"BOL.combatCategory.ranged": "Armes à distance",
|
||||
"BOL.combatCategory.shields": "Shields",
|
||||
"BOL.combatCategory.melee": "Melee",
|
||||
"BOL.combatCategory.ranged": "Ranged",
|
||||
"BOL.combatCategory.fightOptions": "Fight options",
|
||||
"BOL.combatCategory.natural": "Natural Weapons",
|
||||
|
||||
"BOL.equipmentCategory.weapon": "Arme",
|
||||
"BOL.equipmentCategory.armor": "Armure",
|
||||
"BOL.equipmentCategory.weapon": "Weapon",
|
||||
"BOL.equipmentCategory.armor": "Armor",
|
||||
"BOL.equipmentCategory.protection": "Protection",
|
||||
"BOL.equipmentCategory.shield": "Bouclier",
|
||||
"BOL.equipmentCategory.helm": "Casque",
|
||||
"BOL.equipmentCategory.jewel": "Bijou",
|
||||
"BOL.equipmentCategory.scroll": "Parchemin",
|
||||
"BOL.equipmentCategory.ammunition": "Munition",
|
||||
"BOL.equipmentCategory.container": "Conteneur",
|
||||
"BOL.equipmentCategory.currency": "Monnaie",
|
||||
"BOL.equipmentCategory.other": "Autre",
|
||||
"BOL.equipmentCategory.shield": "Shield",
|
||||
"BOL.equipmentCategory.helm": "Helm",
|
||||
"BOL.equipmentCategory.jewel": "Jewel",
|
||||
"BOL.equipmentCategory.scroll": "Scroll",
|
||||
"BOL.equipmentCategory.ammunition": "Ammunition",
|
||||
"BOL.equipmentCategory.container": "Container",
|
||||
"BOL.equipmentCategory.currency": "Money",
|
||||
"BOL.equipmentCategory.other": "Other",
|
||||
|
||||
"BOL.protectionCategory.armor": "Armure",
|
||||
"BOL.protectionCategory.shield": "Bouclier",
|
||||
"BOL.protectionCategory.helm": "Casque",
|
||||
"BOL.protectionCategory.other": "Autre",
|
||||
"BOL.protectionCategory.armor": "Armor",
|
||||
"BOL.protectionCategory.shield": "Shield",
|
||||
"BOL.protectionCategory.helm": "Helm",
|
||||
"BOL.protectionCategory.other": "Other",
|
||||
|
||||
"BOL.spellItem.charm": "Charm",
|
||||
"BOL.spellItem.circle1": "First Circle",
|
||||
@ -226,140 +227,140 @@
|
||||
"BOL.alchemyItem.legend": "Legendary",
|
||||
"BOL.alchemyItem.mythic": "Mythic",
|
||||
|
||||
"BOL.weaponCategory.melee": "Arme de mêlée",
|
||||
"BOL.weaponCategory.ranged": "Arme de tir",
|
||||
"BOL.weaponCategory.other": "Autre",
|
||||
"BOL.weaponCategory.melee": "Melee",
|
||||
"BOL.weaponCategory.ranged": "Ranged",
|
||||
"BOL.weaponCategory.other": "Other",
|
||||
|
||||
"BOL.itemProperty.damageMultiplier": "Damages Multiplier",
|
||||
"BOL.itemProperty.damageMultiplier": "Damage Multiplier",
|
||||
"BOL.itemProperty.attackBonusDice": "Attack Bonus Dice",
|
||||
"BOL.itemProperty.equipable": "Équipable",
|
||||
"BOL.itemProperty.equipable": "Equipable",
|
||||
"BOL.itemProperty.protection": "Protection",
|
||||
"BOL.itemProperty.blocking": "Blocage",
|
||||
"BOL.itemProperty.magical": "Magique",
|
||||
"BOL.itemProperty.concealable": "Dissimulable",
|
||||
"BOL.itemProperty.2H": "Arme à 2 mains",
|
||||
"BOL.itemProperty.helm": "Casque",
|
||||
"BOL.itemProperty.improvised": "Improvisée",
|
||||
"BOL.itemProperty.shield": "Bouclier",
|
||||
"BOL.itemProperty.melee": "Arme de contact",
|
||||
"BOL.itemProperty.throwable": "Peut être lancée",
|
||||
"BOL.itemProperty.ignoreshield": "Ignore les boucliers",
|
||||
"BOL.itemProperty.bashing": "Dégâts non létaux",
|
||||
"BOL.itemProperty.stackable": "Empilable",
|
||||
"BOL.itemProperty.ranged": "A distance",
|
||||
"BOL.itemProperty.weapon": "Offensive",
|
||||
"BOL.itemProperty.reloadable": "Rechargeable",
|
||||
"BOL.itemProperty.worn": "Équipé",
|
||||
"BOL.itemProperty.spell" : "Sort",
|
||||
"BOL.itemProperty.armor" : "Armure",
|
||||
"BOL.itemProperty.consumable" : "Consommable",
|
||||
"BOL.itemProperty.bow" : "Arc",
|
||||
"BOL.itemProperty.crossbow" : "Arbalète",
|
||||
"BOL.itemProperty.throwing" : "Arme de jet",
|
||||
"BOL.itemProperty.blocking": "Blocking",
|
||||
"BOL.itemProperty.magical": "Magical",
|
||||
"BOL.itemProperty.concealable": "Concealable",
|
||||
"BOL.itemProperty.2H": "2H Weapon",
|
||||
"BOL.itemProperty.helm": "Helm",
|
||||
"BOL.itemProperty.improvised": "Improvised",
|
||||
"BOL.itemProperty.shield": "Shield",
|
||||
"BOL.itemProperty.melee": "Melee",
|
||||
"BOL.itemProperty.throwable": "Throwable",
|
||||
"BOL.itemProperty.ignoreshield": "Ignore Shield",
|
||||
"BOL.itemProperty.bashing": "Bashing",
|
||||
"BOL.itemProperty.stackable": "Stackable",
|
||||
"BOL.itemProperty.ranged": "Ranged",
|
||||
"BOL.itemProperty.weapon": "Weapon",
|
||||
"BOL.itemProperty.reloadable": "Reloadable",
|
||||
"BOL.itemProperty.worn": "Equipped",
|
||||
"BOL.itemProperty.spell" : "Spell",
|
||||
"BOL.itemProperty.armor" : "Armor",
|
||||
"BOL.itemProperty.consumable" : "Consumable",
|
||||
"BOL.itemProperty.bow" : "Bow",
|
||||
"BOL.itemProperty.crossbow" : "Crossbow",
|
||||
"BOL.itemProperty.throwing" : "Throwing",
|
||||
"BOL.itemProperty.activable" : "Activable",
|
||||
"BOL.itemProperty.powder" : "Arme à poudre",
|
||||
"BOL.itemProperty.attackAttribute" : "Attaque (Attribut)",
|
||||
"BOL.itemProperty.attackAptitude" : "Attaque (Aptitude)",
|
||||
"BOL.itemProperty.attackModifiers" : "Attaque (Modificateurs)",
|
||||
"BOL.itemProperty.attackReroll1" : "Attaque (Relancer les 1)",
|
||||
"BOL.itemProperty.damage" : "Dommages (Dés)",
|
||||
"BOL.itemProperty.damageModifiers" : "Dommages (Modificateurs)",
|
||||
"BOL.itemProperty.damageAttribute" : "Dommages (Attribut)",
|
||||
"BOL.itemProperty.damageSpecial" : "Dommages (Spécial)",
|
||||
"BOL.itemProperty.damageReroll1" : "Relancer les 1",
|
||||
"BOL.itemProperty.range" : "Portée (en m)",
|
||||
"BOL.itemProperty.soakFormula": "Encaissement (Formule)",
|
||||
"BOL.itemProperty.soakModifiers": "Encaissement (Modificateur)",
|
||||
"BOL.itemProperty.soakValue": "Encaissement (Valeur par défaut)",
|
||||
"BOL.itemProperty.armorQuality": "Qualité d'armure",
|
||||
"BOL.itemProperty.blockingMalus" : "Malus de blocage",
|
||||
"BOL.itemProperty.blockingAttacksBlocked" : "Attaques bloquée",
|
||||
"BOL.itemProperty.blocking1Attack" : "Bloque 1 attaque",
|
||||
"BOL.itemProperty.blockingAllAttacks" : "Bloque toutes les attaques",
|
||||
"BOL.itemProperty.slot" : "Emplacement utilisé",
|
||||
"BOL.itemProperty.reload": "Rechargement (Actions)",
|
||||
"BOL.itemProperty.weaponSize" : "Classe d'arme",
|
||||
"BOL.itemProperty.powder" : "Powder",
|
||||
"BOL.itemProperty.attackAttribute" : "Attack (Attribute)",
|
||||
"BOL.itemProperty.attackAptitude" : "Attack (Aptitude)",
|
||||
"BOL.itemProperty.attackModifiers" : "Attack (Modifiers)",
|
||||
"BOL.itemProperty.attackReroll1" : "Attack (Reroll 1's)",
|
||||
"BOL.itemProperty.damage" : "Damage (Dmg)",
|
||||
"BOL.itemProperty.damageModifiers" : "Damage (Modifiers)",
|
||||
"BOL.itemProperty.damageAttribute" : "Damage (Attribute)",
|
||||
"BOL.itemProperty.damageSpecial" : "Damage (Special)",
|
||||
"BOL.itemProperty.damageReroll1" : "Reroll 1's",
|
||||
"BOL.itemProperty.range" : "Range (in m)",
|
||||
"BOL.itemProperty.soakFormula": "Soak (Formula)",
|
||||
"BOL.itemProperty.soakModifiers": "Soak (Modifiers)",
|
||||
"BOL.itemProperty.soakValue": "Soak (Default Value)",
|
||||
"BOL.itemProperty.armorQuality": "Armor Quality",
|
||||
"BOL.itemProperty.blockingMalus" : "Blocking Modifier",
|
||||
"BOL.itemProperty.blockingAttacksBlocked" : "Attacks blocked",
|
||||
"BOL.itemProperty.blocking1Attack" : "Block 1 attack",
|
||||
"BOL.itemProperty.blockingAllAttacks" : "Block all attacks",
|
||||
"BOL.itemProperty.slot" : "Slot",
|
||||
"BOL.itemProperty.reload": "Reload (Actions)",
|
||||
"BOL.itemProperty.weaponSize" : "Weapon Size",
|
||||
"BOL.itemProperty.difficulty": "Difficulty",
|
||||
"BOL.itemProperty.natural": "Natural weapon",
|
||||
"BOL.itemProperty.onlymodifier": "Modifier only (ie creatures attacks)",
|
||||
|
||||
"BOL.itemStat.quantity": "Quantité",
|
||||
"BOL.itemStat.weight": "Poids",
|
||||
"BOL.itemStat.price": "Prix",
|
||||
"BOL.itemStat.range": "Portée",
|
||||
"BOL.itemStat.damage": "Dommages",
|
||||
"BOL.itemStat.reload": "Rechargement (Actions)",
|
||||
"BOL.itemStat.soak": "Valeur de protection",
|
||||
"BOL.itemStat.blocking": "Bloquage",
|
||||
"BOL.itemStat.modifiers": "Modificateurs",
|
||||
"BOL.itemStat.quantity": "Quantity",
|
||||
"BOL.itemStat.weight": "Weight",
|
||||
"BOL.itemStat.price": "Price",
|
||||
"BOL.itemStat.range": "Range",
|
||||
"BOL.itemStat.damage": "Damage",
|
||||
"BOL.itemStat.reload": "Reload (Actions)",
|
||||
"BOL.itemStat.soak": "Soak",
|
||||
"BOL.itemStat.blocking": "Blocking",
|
||||
"BOL.itemStat.modifiers": "Modifiers",
|
||||
|
||||
"BOL.weaponSize.unarmed" : "Mains nues",
|
||||
"BOL.weaponSize.improvised" : "Arme improvisée",
|
||||
"BOL.weaponSize.light" : "Légère",
|
||||
"BOL.weaponSize.medium" : "Moyenne",
|
||||
"BOL.weaponSize.heavy" : "Lourde",
|
||||
"BOL.weaponSize.unarmed" : "Unarmed",
|
||||
"BOL.weaponSize.improvised" : "Improvised",
|
||||
"BOL.weaponSize.light" : "Light",
|
||||
"BOL.weaponSize.medium" : "Medium",
|
||||
"BOL.weaponSize.heavy" : "heavy",
|
||||
|
||||
"BOL.itemModifiers.init": "Malus (Initiative)",
|
||||
"BOL.itemModifiers.social": "Malus (Social)",
|
||||
"BOL.itemModifiers.agility": "Malus (Agilité)",
|
||||
"BOL.itemModifiers.powercost": "Malus (Coût supplémentaire en PP)",
|
||||
"BOL.itemModifiers.init": "Modifier (Initiative)",
|
||||
"BOL.itemModifiers.social": "Modifier (Social)",
|
||||
"BOL.itemModifiers.agility": "Modifier (Agility)",
|
||||
"BOL.itemModifiers.powercost": "Modifier (Additional Cost in PP)",
|
||||
|
||||
"BOL.itemBlocking.malus": "Social",
|
||||
"BOL.itemBlocking.nbAttacksPerRound": "Agilité",
|
||||
"BOL.itemBlocking.malus": "Modifier",
|
||||
"BOL.itemBlocking.nbAttacksPerRound": "Agility",
|
||||
|
||||
"BOL.soakFormula.none" : "-",
|
||||
"BOL.soakFormula.light" : "Légère (Annule d6-3 dégâts subis)",
|
||||
"BOL.soakFormula.medium" : "Moyenne (Annule d6-2 dégâts subis)",
|
||||
"BOL.soakFormula.heavy" : "Lourde (Annule d6-1 dégâts subis)",
|
||||
"BOL.soakFormula.light" : "Light (Cancels d6-3 damage)",
|
||||
"BOL.soakFormula.medium" : "Medium (Cancels d6-2 damage)",
|
||||
"BOL.soakFormula.heavy" : "Heavy (Cancels d6-1 damage)",
|
||||
|
||||
"BOL.armorQuality.none" : "-",
|
||||
"BOL.armorQuality.light" : "Légère",
|
||||
"BOL.armorQuality.lightQ" : "Légère de qualité",
|
||||
"BOL.armorQuality.lightSup" : "Légère Supérieure",
|
||||
"BOL.armorQuality.lightLeg" : "Légère Légendaire",
|
||||
"BOL.armorQuality.medium" : "Moyenne",
|
||||
"BOL.armorQuality.mediumQ" : "Moyenne de qualité",
|
||||
"BOL.armorQuality.mediumSup" : "Moyenne Supérieure",
|
||||
"BOL.armorQuality.mediumLeg" : "Moyenne Légendaire",
|
||||
"BOL.armorQuality.heavy" : "Lourde",
|
||||
"BOL.armorQuality.heavyQ" : "Lourde de qualité",
|
||||
"BOL.armorQuality.heavySup" : "Lourde Supérieure",
|
||||
"BOL.armorQuality.heavyLeg" : "Lourde Légendaire",
|
||||
"BOL.armorQuality.light" : "Light",
|
||||
"BOL.armorQuality.lightQ" : "Light Quality",
|
||||
"BOL.armorQuality.lightSup" : "Light Superior",
|
||||
"BOL.armorQuality.lightLeg" : "Light Legendary",
|
||||
"BOL.armorQuality.medium" : "Medium",
|
||||
"BOL.armorQuality.mediumQ" : "Medium Quality",
|
||||
"BOL.armorQuality.mediumSup" : "Medium Superior",
|
||||
"BOL.armorQuality.mediumLeg" : "Medium Legendary",
|
||||
"BOL.armorQuality.heavy" : "Heavy",
|
||||
"BOL.armorQuality.heavyQ" : "Heavy Quality",
|
||||
"BOL.armorQuality.heavySup" : "Heavy Superior",
|
||||
"BOL.armorQuality.heavyLeg" : "Heavy Legendary",
|
||||
|
||||
"BOL.equipmentSlots.none" : "-",
|
||||
"BOL.equipmentSlots.head" : "Tête",
|
||||
"BOL.equipmentSlots.neck" : "Cou",
|
||||
"BOL.equipmentSlots.shoulders" : "Épaules",
|
||||
"BOL.equipmentSlots.body" : "Corps",
|
||||
"BOL.equipmentSlots.rhand" : "Main droite",
|
||||
"BOL.equipmentSlots.lhand" : "Main gauche",
|
||||
"BOL.equipmentSlots.2hands" : "2 mains",
|
||||
"BOL.equipmentSlots.rarm" : "Bras droit",
|
||||
"BOL.equipmentSlots.larm" : "Bras gauche",
|
||||
"BOL.equipmentSlots.chest" : "Torse",
|
||||
"BOL.equipmentSlots.belt" : "Ceinture",
|
||||
"BOL.equipmentSlots.legs" : "Jambes",
|
||||
"BOL.equipmentSlots.feet" : "Pieds",
|
||||
"BOL.equipmentSlots.finder" : "Doigt",
|
||||
"BOL.equipmentSlots.ear" : "Oreille",
|
||||
"BOL.equipmentSlots.head" : "Head",
|
||||
"BOL.equipmentSlots.neck" : "Neck",
|
||||
"BOL.equipmentSlots.shoulders" : "Shoulders",
|
||||
"BOL.equipmentSlots.body" : "Body",
|
||||
"BOL.equipmentSlots.rhand" : "Right hand",
|
||||
"BOL.equipmentSlots.lhand" : "Left hand",
|
||||
"BOL.equipmentSlots.2hands" : "2 hands",
|
||||
"BOL.equipmentSlots.rarm" : "Right arm",
|
||||
"BOL.equipmentSlots.larm" : "Left arm",
|
||||
"BOL.equipmentSlots.chest" : "Chest",
|
||||
"BOL.equipmentSlots.belt" : "Belt",
|
||||
"BOL.equipmentSlots.legs" : "Legs",
|
||||
"BOL.equipmentSlots.feet" : "Feet",
|
||||
"BOL.equipmentSlots.finder" : "Finger",
|
||||
"BOL.equipmentSlots.ear" : "Ear",
|
||||
|
||||
"BOL.vehicleCategory.mount" : "Monture terrestre",
|
||||
"BOL.vehicleCategory.flying" : "Monture volante",
|
||||
"BOL.vehicleCategory.boat" : "Bateau",
|
||||
"BOL.vehicleCategory.other" : "Autre",
|
||||
"BOL.vehicleCategory.mount" : "Ground Mount",
|
||||
"BOL.vehicleCategory.flying" : "Flying Mount",
|
||||
"BOL.vehicleCategory.boat" : "Boat",
|
||||
"BOL.vehicleCategory.other" : "Other",
|
||||
|
||||
|
||||
"BOL.range.PointBlank": "Bout portant",
|
||||
"BOL.range.Short": "Courte",
|
||||
"BOL.range.Medium": "Moyenne",
|
||||
"BOL.range.PointBlank": "Point Blank",
|
||||
"BOL.range.Short": "Short",
|
||||
"BOL.range.Medium": "Medium",
|
||||
"BOL.range.Long": "Long",
|
||||
"BOL.range.VeryLong": "Très longue",
|
||||
"BOL.range.Extreme": "Extrême",
|
||||
"BOL.range.Maximum": "Maximale",
|
||||
"BOL.range.VeryLong": "Very Long",
|
||||
"BOL.range.Extreme": "Extreme",
|
||||
"BOL.range.Maximum": "Maximum",
|
||||
|
||||
"BOL.notification.MacroMultipleTokensSelected": "Vous avez sélectionné plusieurs tokens",
|
||||
"BOL.notification.MacroNoActorAvailable": "Aucun acteur n'a pu être ciblé",
|
||||
"BOL.notification.MacroNoTokenSelected": "Vous devez sélectionner un token",
|
||||
"BOL.notification.MacroMultipleTokensSelected": "You have selected several tokens!",
|
||||
"BOL.notification.MacroNoActorAvailable": "No actor could be targeted!",
|
||||
"BOL.notification.MacroNoTokenSelected": "You must select a token!",
|
||||
|
||||
"BOL.size.tiny": "Tiny",
|
||||
"BOL.size.verysmall": "Very Small",
|
||||
@ -372,6 +373,84 @@
|
||||
"BOL.size.enormous": "Enormous",
|
||||
"BOL.size.gigantic": "Gigantic",
|
||||
"BOL.size.immense": "Immense",
|
||||
"BOL.size.colossal": "Colossal"
|
||||
"BOL.size.colossal": "Colossal",
|
||||
|
||||
"BOL.chat.fightactive": "{name} activates the fight option {foName} for this round !",
|
||||
"BOL.chat.fightunactive": "{name} deactivates the fight option {foName} for this round !",
|
||||
"BOL.chat.isdead": "{name} is dead !",
|
||||
"BOL.chat.epitaph": "Keep his name and memory in honor !",
|
||||
"BOL.chat.vitalityzero": "Lifeblood of {name} is now {hp} : he is going to fall unconscious !",
|
||||
"BOL.chat.vitalityheroism": "You can spent 1 Hero Point to raise up for 1 round.",
|
||||
"BOL.chat.vitalityheroismhint": "In this case, your lifeblood raises up to its maximum divided by 2.",
|
||||
"BOL.chat.vitalitydying": "Lifeblood of {name} is now {hp} ! He is dying ...",
|
||||
"BOL.chat.vitalitydyingheroism": "You can spent 1 Hero Point to Defy Death.",
|
||||
"BOL.chat.alchemytitle": "Alchemy recipe : {name}",
|
||||
"BOL.chat.alchemypoints": "Craft Points cost : {pcCostCurrent}",
|
||||
"BOL.chat.alchemysuccess": "The alchemy recipe is a success !<br>Create the relevant item/effect in your Inventory.<br>Stage counter has been resetted.",
|
||||
"BOL.chat.alchemyfailure": "The alchemy recipe has failed !<br>Stage counter has been resetted.",
|
||||
"BOL.chat.rolldamage": "Roll for damages",
|
||||
"BOL.chat.rolldamage6": "Roll for damages +6",
|
||||
"BOL.chat.rolldamage12": "Roll for damages +12 (1 HP)",
|
||||
"BOL.chat.damageresult": "Damages of {name} : {total}",
|
||||
"BOL.chat.damagetarget": "Target : {target}",
|
||||
"BOL.chat.applydamagetotarget": "Apply damages to the target",
|
||||
"BOL.chat.fightoption": "Combat options",
|
||||
"BOL.chat.reroll": "Reroll (1 HP)",
|
||||
"BOL.chat.toheroic": "Convert to Mighty success (1 HP)",
|
||||
"BOL.chat.tolegend": "Convert to Legendary succes (1 HP)",
|
||||
"BOL.chat.hurttitle": "{name} is going to receive {damageTotal} damages !",
|
||||
"BOL.chat.armordefault": "This attack is bypassing armor : armor is not used to reduce damages !",
|
||||
"BOL.chat.witharmor": "Hit with armor",
|
||||
"BOL.chat.withoutarmor": "Hit without armor",
|
||||
"BOL.chat.shakeoff": "Shake off Wounds (1 HP)",
|
||||
"BOL.chat.splinteredshield": "Splintered Shield/Sword {name} (1 HP)",
|
||||
"BOL.chat.damagesummary": "Damages received by {name}",
|
||||
"BOL.chat.protectvalue": "Armor protect",
|
||||
"BOL.chat.noprotectvalue": "No armor !",
|
||||
"BOL.chat.heroreducedamage": "One Hero Point has been spent, for reducing damges by {total}.",
|
||||
"BOL.chat.herosplintered": "No damages received, thanks to splintered shield/sword with {weaponHero.name}. The weapon/shield has been destroyed ! One HP point has been spent also.",
|
||||
"BOL.chat.finaldamage": "Final Damage : {finalDamage} damages !",
|
||||
"BOL.chat.spell": "Spell",
|
||||
"BOL.chat.spellcost": "Power Points cost",
|
||||
"BOL.chat.spellremaining": "Remaining Power Points",
|
||||
|
||||
"BOL.dialog.soeasy": "So easy (+4)",
|
||||
"BOL.dialog.veryeasy": "Very easy (+2)",
|
||||
"BOL.dialog.easy": "Easy (+1)",
|
||||
"BOL.dialog.moderate": "Moderate (0)",
|
||||
"BOL.dialog.hard": "Hard (-1)",
|
||||
"BOL.dialog.tough": "Tough (-2)",
|
||||
"BOL.dialog.demanding": "Demanding (-4)",
|
||||
"BOL.dialog.formidable": "Formidable (-6)",
|
||||
"BOL.dialog.heroic": "Heroic (-8)",
|
||||
"BOL.dialog.mythic": "Mythic (-10)",
|
||||
"BOL.dialog.divine": "Divine (-12)",
|
||||
|
||||
"BOL.dialog.pointblank": "Point blank (+1)",
|
||||
"BOL.dialog.close": "Close (0)",
|
||||
"BOL.dialog.medium": "Medium (-1))",
|
||||
"BOL.dialog.long": "Long (-2)",
|
||||
"BOL.dialog.distant": "Distant (-4)",
|
||||
"BOL.dialog.extreme": "Extreme (-6)",
|
||||
"BOL.dialog.utmost": "Utmost (-8)",
|
||||
|
||||
"BOL.ui.name": "Name",
|
||||
"BOL.ui.xp": "Experience",
|
||||
"BOL.ui.xpspent": "Spent",
|
||||
"BOL.ui.xptotal": "Total",
|
||||
"BOL.ui.biosize": "Size",
|
||||
"BOL.ui.bioweight": "Weight",
|
||||
"BOL.ui.bioage": "Age",
|
||||
"BOL.ui.biohair": "Hair",
|
||||
"BOL.ui.bioeyes": "Eyes",
|
||||
"BOL.ui.biosigns": "Signs",
|
||||
"BOL.ui.biodescription": "Description",
|
||||
"BOL.ui.bionotes": "Notes",
|
||||
|
||||
"BOL.chat.welcome1": "Welcome to Barbarians of Lemuria (Ludospherik version)",
|
||||
"BOL.chat.welcome2": "Books are necessary to play, and ca be found here : http://www.ludospherik.fr/content/14-barbarians-of-lemuria",
|
||||
"BOL.chat.welcome3": "The integrated maps are authorized by Guillaume Tavernier and Ludospherik. Thanks to them !.",
|
||||
"BOL.chat.welcome4": "All support for this system is available on this Discord server : https://discord.gg/pPSDNJk",
|
||||
"BOL.chat.welcome5": "Good game in Lemuria !"
|
||||
|
||||
}
|
176
lang/fr.json
176
lang/fr.json
@ -1,15 +1,21 @@
|
||||
{
|
||||
"ACTOR.TypeCharacter": "Personnage",
|
||||
"ACTOR.TypeEncounter": "Rencontre",
|
||||
"ACTOR.TypeVehicle": "Véhicule",
|
||||
"ITEM.TypeItem": "Objet",
|
||||
"ITEM.TypeFeature": "Trait",
|
||||
"ITEM.TypeWeapon": "Arme",
|
||||
"ITEM.TypeArmor": "Armure",
|
||||
|
||||
"BOL.attributes.vigor": "Vigueur",
|
||||
"BOL.attributes.halfvigor": "Demi-vigueur",
|
||||
"BOL.attributes.agility": "Agilité",
|
||||
"BOL.attributes.mind": "Esprit",
|
||||
"BOL.attributes.appeal": "Aura",
|
||||
"BOL.attributes.hull": "Coque",
|
||||
"BOL.attributes.crew": "Equipage",
|
||||
"BOL.attributes.resources": "Resources",
|
||||
"BOL.attributes.row": "Rames",
|
||||
"BOL.aptitudes.init": "Initiative",
|
||||
"BOL.aptitudes.melee": "Mêlée",
|
||||
"BOL.aptitudes.ranged": "Tir",
|
||||
@ -87,6 +93,7 @@
|
||||
"BOL.ui.failure": "Échec",
|
||||
"BOL.ui.fumble": "Échec critique",
|
||||
"BOL.ui.critical": "Succès critique",
|
||||
"BOL.ui.criticallegend": "Succès légendaire !",
|
||||
"BOL.ui.maneuvers": "Actions de combat",
|
||||
"BOL.ui.stacksize": "Taille de pile (max)",
|
||||
"BOL.ui.weapons": "Armes",
|
||||
@ -150,6 +157,34 @@
|
||||
"BOL.ui.armorAgiMalus": "Malus d'Armure+Bouclier (Agi)",
|
||||
"BOL.ui.armorInitMalus": "Malus d'Armure (Init)",
|
||||
"BOL.ui.attackValue": "Valeur d'attaque",
|
||||
"BOL.ui.vehicleWeapons": "Armes de véhicules",
|
||||
"BOL.ui.hullDamage": "D.coque",
|
||||
"BOL.ui.crewDamage": "D.équipage",
|
||||
"BOL.ui.fireDamage": "Feu ?",
|
||||
"BOL.ui.weaponbonus": "Cette arme bénéficie déja d'un Dé de Bonus (Arme Favorite prise en compte, par exemple)",
|
||||
"BOL.ui.creature": "Creature",
|
||||
"BOL.ui.rabble": "Piétaille",
|
||||
"BOL.ui.tough": "Coriace",
|
||||
"BOL.ui.villain": "Rival",
|
||||
"BOL.ui.attributaptitude": "Attribut ou Aptitude",
|
||||
"BOL.ui.always": "Tout les jets (ie toujours)",
|
||||
"BOL.ui.effectbonusmalus": "Bonus ou Malus à appliquer",
|
||||
"BOL.ui.boleffects": "Effets (automatiques)",
|
||||
"BOL.ui.modifier": "Modificateur",
|
||||
"BOL.ui.effects": "Effets en cours",
|
||||
"BOL.ui.pcname": "PJs",
|
||||
"BOL.ui.npcname": "PNJs",
|
||||
"BOL.ui.pclistbutton": "Vue compacte",
|
||||
"BOL.ui.noactorfound": "PNJ inconnu, le PNJ doit être présent dans le monde pour s'afficher ici.",
|
||||
"BOL.ui.deletetitle": "Suppression",
|
||||
"BOL.ui.confirmdelete": "Vous êtes sûr de vouloir supprimer cet item ?",
|
||||
"BOL.ui.nomorealchemypoints": "Plus assez de Points de Création !",
|
||||
"BOL.ui.armornoformula": "L'armure {protect.name} n'a pas de formule pour la protection !",
|
||||
"BOL.ui.selectactor": "Selectionnez votre personnage pour utiliser la macro",
|
||||
"BOL.ui.itemnotfound": "Impossible de trouver l'objet de cette macro",
|
||||
"BOL.ui.noinit": "Pas d'initiative trouvée, veuillez en enregistrer une.",
|
||||
"BOL.ui.warninitiative": "Votre initiative n'est pas disponible. Effectuez un jet d'Initiative pour ce combat.",
|
||||
|
||||
"BOL.featureCategory.origins": "Origines",
|
||||
"BOL.featureCategory.races": "Races",
|
||||
"BOL.featureCategory.careers": "Carrières",
|
||||
@ -162,6 +197,7 @@
|
||||
"BOL.bougette.easylife": "A l'aise",
|
||||
"BOL.bougette.luxury": "Luxe&Volupté",
|
||||
"BOL.bougette.rich": "Richissime",
|
||||
|
||||
"BOL.featureSubtypes.origin": "Origine",
|
||||
"BOL.featureSubtypes.race": "Race",
|
||||
"BOL.featureSubtypes.career": "Carrière",
|
||||
@ -170,6 +206,10 @@
|
||||
"BOL.featureSubtypes.language": "Langue",
|
||||
"BOL.featureSubtypes.gods": "Dieux & Foi",
|
||||
"BOL.featureSubtypes.fightOption": "Option de Combat",
|
||||
"BOL.featureSubtypes.effect": "Effet",
|
||||
"BOL.featureSubtypes.effects": "Effets",
|
||||
"BOL.featureSubtypes.boleffect": "Effet",
|
||||
|
||||
"BOL.fightOptionTypes.armor": "Attaque au défaut d'armure",
|
||||
"BOL.fightOptionTypes.intrepid": "Attaque intrépide",
|
||||
"BOL.fightOptionTypes.twoweaponsdef": "Combat à 2 armes (Défense)",
|
||||
@ -177,6 +217,7 @@
|
||||
"BOL.fightOptionTypes.fulldefense": "Défense totale",
|
||||
"BOL.fightOptionTypes.defense": "Posture défensive",
|
||||
"BOL.fightOptionTypes.attack": "Posture offensive",
|
||||
|
||||
"BOL.itemCategory.object": "Objet",
|
||||
"BOL.itemCategory.equipment": "Équipement",
|
||||
"BOL.itemCategory.consumable": "Consommable",
|
||||
@ -185,12 +226,15 @@
|
||||
"BOL.itemCategory.other": "Autre",
|
||||
"BOL.itemCategory.capacity": "Capacité",
|
||||
"BOL.itemCategory.alchemy": "Préparation Alchimique",
|
||||
"BOL.itemCategory.vehicleweapon": "Armes de Véhicule",
|
||||
|
||||
"BOL.combatCategory.protections": "Protections",
|
||||
"BOL.combatCategory.shields": "Boucliers",
|
||||
"BOL.combatCategory.melee": "Armes de contact",
|
||||
"BOL.combatCategory.ranged": "Armes à distance",
|
||||
"BOL.combatCategory.fightOptions": "Options de combat",
|
||||
"BOL.combatCategory.natural": "Armes Naturelless",
|
||||
|
||||
"BOL.equipmentCategory.weapon": "Arme",
|
||||
"BOL.equipmentCategory.armor": "Armure",
|
||||
"BOL.equipmentCategory.protection": "Protection",
|
||||
@ -202,21 +246,26 @@
|
||||
"BOL.equipmentCategory.container": "Conteneur",
|
||||
"BOL.equipmentCategory.currency": "Monnaie",
|
||||
"BOL.equipmentCategory.other": "Autre",
|
||||
|
||||
"BOL.protectionCategory.armor": "Armure",
|
||||
"BOL.protectionCategory.shield": "Bouclier",
|
||||
"BOL.protectionCategory.helm": "Casque",
|
||||
"BOL.protectionCategory.other": "Autre",
|
||||
|
||||
"BOL.spellItem.charm": "Charme",
|
||||
"BOL.spellItem.circle1": "Premier Cercle",
|
||||
"BOL.spellItem.circle2": "Second Cercle",
|
||||
"BOL.spellItem.circle3": "Troisième Cercle",
|
||||
|
||||
"BOL.alchemyItem.common": "Courante",
|
||||
"BOL.alchemyItem.scarce": "Rare",
|
||||
"BOL.alchemyItem.legend": "Légendaire",
|
||||
"BOL.alchemyItem.mythic": "Mythique",
|
||||
|
||||
"BOL.weaponCategory.melee": "Arme de mêlée",
|
||||
"BOL.weaponCategory.ranged": "Arme de tir",
|
||||
"BOL.weaponCategory.other": "Autre",
|
||||
|
||||
"BOL.itemProperty.damageMultiplier": "Multiplicateur de dommages",
|
||||
"BOL.itemProperty.attackBonusDice": "Dé de Bonus d'attaque",
|
||||
"BOL.itemProperty.equipable": "Équipable",
|
||||
@ -269,6 +318,18 @@
|
||||
"BOL.itemProperty.difficulty": "Difficulté",
|
||||
"BOL.itemProperty.natural": "Arme naturelle",
|
||||
"BOL.itemProperty.onlymodifier": "Modificateur uniquement (ie attaques de créatures)",
|
||||
"BOL.itemProperty.vehicleDamageType": "Type de dommages de véhicules",
|
||||
"BOL.itemProperty.isfiredamage": "Dommages de Feu",
|
||||
"BOL.itemProperty.ishulldamage": "Dommages à la coque",
|
||||
"BOL.itemProperty.iscrewdamage": "Dommages à l'équipage",
|
||||
"BOL.itemProperty.hulldamage": "Valeur des dommages à la coque",
|
||||
"BOL.itemProperty.crewdamage": "Valeur des dommages à l'équipage",
|
||||
"BOL.itemProperty.hullDamageMultiplier": "Multiplicateur",
|
||||
"BOL.itemProperty.crewDamageMultiplier": "Multiplicateur",
|
||||
"BOL.itemProperty.isboarding": "Abordage",
|
||||
"BOL.itemProperty.isspur": "Eperonnage",
|
||||
"BOL.itemProperty.isbreakrow": "Briser les rames",
|
||||
|
||||
"BOL.itemStat.quantity": "Quantité",
|
||||
"BOL.itemStat.weight": "Poids",
|
||||
"BOL.itemStat.price": "Prix",
|
||||
@ -278,21 +339,26 @@
|
||||
"BOL.itemStat.soak": "Valeur de protection",
|
||||
"BOL.itemStat.blocking": "Bloquage",
|
||||
"BOL.itemStat.modifiers": "Modificateurs",
|
||||
|
||||
"BOL.weaponSize.unarmed": "Mains nues",
|
||||
"BOL.weaponSize.improvised": "Arme improvisée",
|
||||
"BOL.weaponSize.light": "Légère",
|
||||
"BOL.weaponSize.medium": "Moyenne",
|
||||
"BOL.weaponSize.heavy": "Lourde",
|
||||
|
||||
"BOL.itemModifiers.init": "Malus (Initiative)",
|
||||
"BOL.itemModifiers.social": "Malus (Social)",
|
||||
"BOL.itemModifiers.agility": "Malus (Agilité)",
|
||||
"BOL.itemModifiers.powercost": "Malus (Coût supplémentaire en PP)",
|
||||
|
||||
"BOL.itemBlocking.malus": "Social",
|
||||
"BOL.itemBlocking.nbAttacksPerRound": "Agilité",
|
||||
|
||||
"BOL.soakFormula.none": "-",
|
||||
"BOL.soakFormula.light": "Légère (Annule d6-3 dégâts subis)",
|
||||
"BOL.soakFormula.medium": "Moyenne (Annule d6-2 dégâts subis)",
|
||||
"BOL.soakFormula.heavy": "Lourde (Annule d6-1 dégâts subis)",
|
||||
|
||||
"BOL.armorQuality.none": "-",
|
||||
"BOL.armorQuality.light": "Légère",
|
||||
"BOL.armorQuality.lightQ": "Légère de qualité",
|
||||
@ -306,6 +372,7 @@
|
||||
"BOL.armorQuality.heavyQ": "Lourde de qualité",
|
||||
"BOL.armorQuality.heavySup": "Lourde Supérieure",
|
||||
"BOL.armorQuality.heavyLeg": "Lourde Légendaire",
|
||||
|
||||
"BOL.equipmentSlots.none": "-",
|
||||
"BOL.equipmentSlots.head": "Tête",
|
||||
"BOL.equipmentSlots.neck": "Cou",
|
||||
@ -322,10 +389,12 @@
|
||||
"BOL.equipmentSlots.feet": "Pieds",
|
||||
"BOL.equipmentSlots.finder": "Doigt",
|
||||
"BOL.equipmentSlots.ear": "Oreille",
|
||||
|
||||
"BOL.vehicleCategory.mount": "Monture terrestre",
|
||||
"BOL.vehicleCategory.flying": "Monture volante",
|
||||
"BOL.vehicleCategory.boat": "Bateau",
|
||||
"BOL.vehicleCategory.other": "Autre",
|
||||
|
||||
"BOL.range.PointBlank": "Bout portant",
|
||||
"BOL.range.Short": "Courte",
|
||||
"BOL.range.Medium": "Moyenne",
|
||||
@ -333,6 +402,7 @@
|
||||
"BOL.range.VeryLong": "Très longue",
|
||||
"BOL.range.Extreme": "Extrême",
|
||||
"BOL.range.Maximum": "Maximale",
|
||||
|
||||
"BOL.notification.MacroMultipleTokensSelected": "Vous avez sélectionné plusieurs tokens",
|
||||
"BOL.notification.MacroNoActorAvailable": "Aucun acteur n'a pu être ciblé",
|
||||
"BOL.notification.MacroNoTokenSelected": "Vous devez sélectionner un token",
|
||||
@ -348,5 +418,107 @@
|
||||
"BOL.size.enormous": "Colossale",
|
||||
"BOL.size.gigantic": "Gigantesque",
|
||||
"BOL.size.immense": "Immense",
|
||||
"BOL.size.colossal": "Monstrueuse"
|
||||
}
|
||||
"BOL.size.colossal": "Monstrueuse",
|
||||
|
||||
"BOL.chat.fightactive": "{name} active son option de combat {foName} pour ce round !",
|
||||
"BOL.chat.fightunactive": "{name} désactive son option de combat {foName} pour ce round !",
|
||||
"BOL.chat.isdead": "{name} est mort !",
|
||||
"BOL.chat.epitaph": "Que son nom soit honoré sur les champs de batailles de Lémurie !",
|
||||
"BOL.chat.vitalityzero": "La Vitalité de {name} est {hp} : il va s'écrouler au sol et sombrer dans l'inconscience !",
|
||||
"BOL.chat.vitalityheroism": "Vous pouvez dépenser 1 Point d'Héroisme pour reprendre vos esprits pendant 1 round.",
|
||||
"BOL.chat.vitalityheroismhint": "Dans ce cas votre vitalité remonte à son maximum divisé par 2 (arrondi au supérieur).",
|
||||
"BOL.chat.vitalitydying": "La Vitalité de {name} est de {hp} ! Il est mourant ...",
|
||||
"BOL.chat.vitalitydyingheroism": "Vous pouvez cependant dépenser 1 Point d'Héroisme pour Défier la Mort (cf. page 58).",
|
||||
"BOL.chat.alchemytitle": "Préparation Alchimique : {name}",
|
||||
"BOL.chat.alchemypoints": "Points de Création Investis : {pcCostCurrent}",
|
||||
"BOL.chat.alchemysuccess": "La préparation alchimique a été réalisée avec succès !<br>Créez l'item ou l'effet correspondant dans votre Inventaire.<br>L'avancement dans la préparation a été remis à 0.",
|
||||
"BOL.chat.alchemyfailure": "La préparation alchimique a échouée !<br>L'avancement dans la préparation a été remis à 0.",
|
||||
"BOL.chat.rolldamage": "Lancer les dommages",
|
||||
"BOL.chat.rolldamage6": "Lancer les dommages +6",
|
||||
"BOL.chat.rolldamage12": "Dommages +12 (1 Pt. d'Heroisme)",
|
||||
"BOL.chat.damageresult": "Dommages de {name} : {total}",
|
||||
"BOL.chat.damagetarget": "Cible : {target}",
|
||||
"BOL.chat.applydamagetotarget": "Appliquer les dommages à la cible",
|
||||
"BOL.chat.fightoption": "Option de combat",
|
||||
"BOL.chat.reroll": "Relancer (1 P. Heroisme)",
|
||||
"BOL.chat.toheroic": "Transformer en succés Héroïque (1 P. Héroisme)",
|
||||
"BOL.chat.tolegend": "Transformer en succes Légendaire (1 P. Heroisme)",
|
||||
"BOL.chat.hurttitle": "{name} va encaisser {damageTotal} dégats !",
|
||||
"BOL.chat.armordefault": "C'est une attaque au défaut de l'armure : vous devez encaisser SANS la protection de l'armure !",
|
||||
"BOL.chat.witharmor": "Encaisser avec la protection de l'armure",
|
||||
"BOL.chat.withoutarmor": "Encaisser sans la protection de l'armure",
|
||||
"BOL.chat.shakeoff": "Juste une égratignure (1 Point d'Héroisme)",
|
||||
"BOL.chat.splinteredshield": "Parade in Extremis avec {name} (1 Point d'Héroisme)",
|
||||
"BOL.chat.damagesummary": "Dégats subis par {name}",
|
||||
"BOL.chat.protectvalue": "Protection de l'armure",
|
||||
"BOL.chat.noprotectvalue": "Aucune protection d'armure !",
|
||||
"BOL.chat.heroreducedamage": "Un point d'héroisme dépensé, pour une réduction des dommages supplémentaire de {total}.",
|
||||
"BOL.chat.herosplintered": "Aucun dommage encaissé, grâce à la parade in-extremis avec {weaponHero.name}. L'arme a été détruite pendant cette parade ! Un point d'héroisme a également été dépensé.",
|
||||
"BOL.chat.finaldamage": "Encaissement final : {finalDamage} dégats !",
|
||||
"BOL.chat.spell": "Sort",
|
||||
"BOL.chat.spellcost": "Cout en Points de Pouvoir",
|
||||
"BOL.chat.spellremaining": "Points de Pouvoir restants",
|
||||
"BOL.chat.nodamagesummary": "Aucun dégats n'a été subi ....",
|
||||
"BOL.chat.damageresume": "{name} a subi des blessures ...",
|
||||
"BOL.chat.fumblemessage": "Si vous acceptez les conséquences d'un echec catastrophique (au choix du MJ), vous pourrez bénéficier d'1 point d'Héroïsme supplémentaire",
|
||||
"BOL.chat.rangeinfo": "Tir/Lancer de {attackerName} vers {defenderName}",
|
||||
"BOL.chat.rangeweaponinfo": "Arme : {weaponName} - Portée de base {weaponRange}",
|
||||
"BOL.chat.rangeout": "Modificateur : Hors de portée",
|
||||
"BOL.chat.range0": "Modificateur : Bout portant (+1)",
|
||||
"BOL.chat.range1": "Modificateur : Portée courte (0)",
|
||||
"BOL.chat.range2": "Modificateur : Portée moyenne (-1)",
|
||||
"BOL.chat.range3": "Modificateur : Portée longue (-2)",
|
||||
"BOL.chat.range4": "Modificateur : Portée très longue (-4)",
|
||||
"BOL.chat.range5": "Modificateur : Portée extrême (-6)",
|
||||
"BOL.chat.range6": "Modificateur : Portée maximale (-8)",
|
||||
"BOL.chat.rangeprefix": "Distance évaluée : ",
|
||||
"BOL.chat.rangevisible": "La ligne de vue est dégagée entre les protagonistes.",
|
||||
"BOL.chat.rangenotvisible": "La ligne de vue est bloquée entre les protagonistes.",
|
||||
"BOL.chat.rangetitle": "Information MJ",
|
||||
"BOL.chat.weaponreroll1": "Pour information, cette arme relance les 1 sur ses dégâts.",
|
||||
"BOL.chat.rollbougette": "Jet de Bougette",
|
||||
"BOL.chat.bougettesuccess": "Votre bougette reste inchangée !",
|
||||
"BOL.chat.bougettefailure": "Vous avez trop dépensé, votre bougette s'est réduite...",
|
||||
"BOL.chat.initiative": "Rang d'intiative (10 à 1)",
|
||||
|
||||
"BOL.dialog.soeasy": "Inmanquable (+4)",
|
||||
"BOL.dialog.veryeasy": "Trés Facile (+2)",
|
||||
"BOL.dialog.easy": "Facile (+1)",
|
||||
"BOL.dialog.moderate": "Moyenne (0)",
|
||||
"BOL.dialog.hard": "Ardue (-1)",
|
||||
"BOL.dialog.tough": "Difficile (-2)",
|
||||
"BOL.dialog.demanding": "Très Difficile (-4)",
|
||||
"BOL.dialog.formidable": "Impossible (-6)",
|
||||
"BOL.dialog.heroic": "Héroïque (-8)",
|
||||
"BOL.dialog.mythic": "Mythique (-10)",
|
||||
"BOL.dialog.divine": "Divine (-12)",
|
||||
|
||||
"BOL.dialog.pointblank": "Bout portant (+1)",
|
||||
"BOL.dialog.close": "Courte (0)",
|
||||
"BOL.dialog.medium": "Moyenne (-1))",
|
||||
"BOL.dialog.long": "Longue (-2)",
|
||||
"BOL.dialog.distant": "Très longue (-4)",
|
||||
"BOL.dialog.extreme": "Extrême (-6)",
|
||||
"BOL.dialog.utmost": "Maximale (-8)",
|
||||
|
||||
"BOL.ui.name": "Nom",
|
||||
"BOL.ui.xp": "Experience",
|
||||
"BOL.ui.xpspent": "Dépensée",
|
||||
"BOL.ui.xptotal": "Totale",
|
||||
"BOL.ui.biosize": "Taille",
|
||||
"BOL.ui.bioweight": "Poids",
|
||||
"BOL.ui.bioage": "Age",
|
||||
"BOL.ui.biohair": "Cheveux",
|
||||
"BOL.ui.bioeyes": "Yeux",
|
||||
"BOL.ui.biosigns": "Signes distinctifs",
|
||||
"BOL.ui.biodescription": "Description",
|
||||
"BOL.ui.bionotes": "Notes",
|
||||
|
||||
"BOL.chat.welcome1": "Bienvenue dans Barbarians of Lemuria (Ludospherik version)",
|
||||
"BOL.chat.welcome2": "Les livres nécessaires pour jouer sont disponibles sur le site de <a href='http://www.ludospherik.fr/content/14-barbarians-of-lemuria'>l'éditeur Ludospherik.</a>",
|
||||
"BOL.chat.welcome3": "Les cartes intégrées au système le sont grace à l'aimable autorisation de leur auteur Guillaume Tavernier et des éditions Ludospherik. Merci à eux !.",
|
||||
"BOL.chat.welcome4": "Tout le support et le suivi de ce système est disponible via le <a href='https://discord.gg/pPSDNJk'>Discord Foundry FR</a>.",
|
||||
"BOL.chat.welcome5": "Consulter l'aide en ligne pour plus d'informations : @UUID[Compendium.bol.aides-de-jeu.97rugQOtiwt8zPfQ]{Aide du Jeu}.",
|
||||
"BOL.chat.welcome6": "Bon jeu en Lemurie !"
|
||||
|
||||
}
|
@ -12,7 +12,7 @@ export class BoLActorSheet extends ActorSheet {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
classes: ["bol", "sheet", "actor"],
|
||||
template: "systems/bol/templates/actor/actor-sheet.hbs",
|
||||
width: 600,
|
||||
width: 860,
|
||||
height: 600,
|
||||
dragDrop: [{ dragSelector: ".items-list .item", dropSelector: null }],
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }]
|
||||
@ -25,6 +25,13 @@ export class BoLActorSheet extends ActorSheet {
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
function onLoad() {
|
||||
let logoSheet = BoLUtility.getLogoActorSheet()
|
||||
$(".bol-actor-form").css("backgroundImage",`url(${logoSheet})`)
|
||||
}
|
||||
// Setup everything onload
|
||||
$(function () { onLoad(); });
|
||||
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) return;
|
||||
|
||||
@ -66,10 +73,9 @@ export class BoLActorSheet extends ActorSheet {
|
||||
const incr = parseInt(dataset.incr)
|
||||
const min = parseInt(dataset.min)
|
||||
const max = parseInt(dataset.max) || 10000
|
||||
const itemData = item.data;
|
||||
let value = eval("itemData." + target)
|
||||
let value = eval("item." + target)
|
||||
value = value || 0
|
||||
console.log("IncDec", item, target, value, operator, min, max)
|
||||
//console.log("IncDec", item, target, value, operator, min, max)
|
||||
if (operator === "minus") {
|
||||
if (value >= min + incr) value -= incr;
|
||||
else value = min;
|
||||
@ -88,8 +94,8 @@ export class BoLActorSheet extends ActorSheet {
|
||||
// Delete Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
Dialog.confirm({
|
||||
title: "Suppression",
|
||||
content: `Vous êtes sûr de vouloir supprimer cet item ?`,
|
||||
title: game.i18n.localize("BOL.ui.deletetitle"),
|
||||
content: game.i18n.localize("BOL.ui.confirmdelete"),
|
||||
yes: () => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
this.actor.deleteEmbeddedDocuments("Item", [li.data("itemId")])
|
||||
@ -108,17 +114,18 @@ export class BoLActorSheet extends ActorSheet {
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @override */
|
||||
getData(options) {
|
||||
const data = super.getData(options);
|
||||
const actorData = duplicate(data.data);
|
||||
async getData(options) {
|
||||
const data = super.getData(options)
|
||||
const actorData = duplicate(data)
|
||||
let formData = duplicate(data)
|
||||
|
||||
formData.config = game.bol.config
|
||||
formData.data = actorData.data
|
||||
formData.data = actorData
|
||||
formData.details = this.actor.details
|
||||
formData.attributes = this.actor.attributes
|
||||
formData.aptitudes = this.actor.aptitudes
|
||||
formData.resources = this.actor.getResourcesFromType()
|
||||
formData.xp = this.actor.system.xp
|
||||
formData.equipment = this.actor.equipment
|
||||
formData.equipmentCreature = this.actor.equipmentCreature
|
||||
formData.weapons = this.actor.weapons
|
||||
@ -127,20 +134,26 @@ export class BoLActorSheet extends ActorSheet {
|
||||
formData.alchemy = this.actor.alchemy
|
||||
formData.containers = this.actor.containers
|
||||
formData.treasure = this.actor.treasure
|
||||
formData.boleffects = this.actor.boleffects
|
||||
formData.alchemyrecipe = this.actor.alchemyrecipe
|
||||
formData.vehicles = this.actor.vehicles
|
||||
formData.fightoptions = this.actor.fightoptions
|
||||
formData.ammos = this.actor.ammos
|
||||
formData.misc = this.actor.misc
|
||||
formData.combat = this.actor.buildCombat()
|
||||
formData.combatCreature = this.actor.buildCombatCreature()
|
||||
formData.initiativeRank = this.actor.getInitiativeRank()
|
||||
//formData.combatCreature = this.actor.buildCombatCreature()
|
||||
formData.features = this.actor.buildFeatures()
|
||||
formData.isGM = game.user.isGM
|
||||
formData.options = this.options
|
||||
formData.owner = this.document.isOwner
|
||||
formData.editScore = this.options.editScore
|
||||
formData.useBougette = BoLUtility.getUseBougette()
|
||||
|
||||
formData.useBougette = (this.actor.type == "character" && BoLUtility.getUseBougette()) || false
|
||||
formData.bougette = this.actor.getBougette()
|
||||
formData.charType = this.actor.getCharType()
|
||||
formData.villainy = this.actor.getVillainy()
|
||||
formData.biography = await TextEditor.enrichHTML(this.object.system.details.biography, {async: true})
|
||||
formData.notes = await TextEditor.enrichHTML(this.object.system.details.notes, {async: true})
|
||||
formData.isSorcerer = this.actor.isSorcerer()
|
||||
formData.isAlchemist = this.actor.isAlchemist()
|
||||
formData.isPriest = this.actor.isPriest()
|
||||
@ -225,6 +238,9 @@ export class BoLActorSheet extends ActorSheet {
|
||||
case "attributexp":
|
||||
this.actor.incAttributeXP(dataset.key)
|
||||
break;
|
||||
case "bougette":
|
||||
this.actor.rollBougette()
|
||||
break;
|
||||
case "careerxp":
|
||||
this.actor.incCareerXP( li.data("item-id"))
|
||||
break;
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { BoLDefaultRoll } from "../controllers/bol-rolls.js";
|
||||
import { BoLUtility } from "../system/bol-utility.js";
|
||||
import { BoLRoll } from "../controllers/bol-rolls.js";
|
||||
|
||||
/**
|
||||
* Extend the base Actor entity by defining a custom roll data structure which is ideal for the Simple system.
|
||||
@ -9,60 +10,107 @@ export class BoLActor extends Actor {
|
||||
|
||||
/** @override */
|
||||
prepareData() {
|
||||
const actorData = this.data;
|
||||
|
||||
if (actorData.type === 'character') {
|
||||
actorData.type = 'player';
|
||||
actorData.villainy = false;
|
||||
if (this.type === 'character') {
|
||||
this.chartype = 'player'
|
||||
this.villainy = false
|
||||
}
|
||||
if (actorData.type === 'encounter') {
|
||||
actorData.type = 'tough';
|
||||
actorData.villainy = true;
|
||||
if (this.type === 'encounter') {
|
||||
this.chartype = 'tough'
|
||||
this.villainy = true
|
||||
}
|
||||
super.prepareData();
|
||||
super.prepareData()
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCharType() {
|
||||
if (this.type === 'character') {
|
||||
return 'player'
|
||||
}
|
||||
return this.system.chartype
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getVillainy() {
|
||||
if (this.type === 'character') {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getBougette() {
|
||||
if ( this.type == "character") {
|
||||
let b = duplicate(this.system.bougette)
|
||||
b.label = game.i18n.localize( game.bol.config.bougetteState[String(this.system.bougette.value)] )
|
||||
b.diceImg = "icons/dice/" + game.bol.config.bougetteDice[String(this.system.bougette.value)] + "black.svg"
|
||||
return b
|
||||
}
|
||||
return undefined
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollBougette() {
|
||||
if ( this.type == "character") {
|
||||
let attribute = duplicate(this.system.attributes.vigor)
|
||||
let rollData = BoLRoll.getCommonRollData(this, "bougette", attribute, undefined )
|
||||
rollData.formula = game.bol.config.bougetteDice[String(this.system.bougette.value)]
|
||||
let r = new BoLDefaultRoll(rollData)
|
||||
r.roll()
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
decBougette() {
|
||||
if ( this.type == "character") {
|
||||
let bougette = duplicate(this.system.bougette)
|
||||
bougette.value = Math.max( Number(bougette.value) - 1, 0)
|
||||
this.update( { 'system.bougette': bougette } )
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
updateResourcesData() {
|
||||
if (this.type == 'character') {
|
||||
let newVitality = 10 + this.data.data.attributes.vigor.value + this.data.data.resources.hp.bonus
|
||||
if (this.data.data.resources.hp.max != newVitality) {
|
||||
this.update({ 'data.resources.hp.max': newVitality });
|
||||
let newVitality = 10 + this.system.attributes.vigor.value + this.system.resources.hp.bonus
|
||||
if (this.system.resources.hp.max != newVitality) {
|
||||
this.update({ 'system.resources.hp.max': newVitality })
|
||||
}
|
||||
let newPower = 10 + this.data.data.attributes.mind.value + this.data.data.resources.power.bonus
|
||||
if (this.data.data.resources.power.max != newPower) {
|
||||
this.update({ 'data.resources.power.max': newPower });
|
||||
let newPower = 10 + this.system.attributes.mind.value + this.system.resources.power.bonus
|
||||
if (this.system.resources.power.max != newPower) {
|
||||
this.update({ 'system.resources.power.max': newPower })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
prepareDerivedData() {
|
||||
super.prepareDerivedData()
|
||||
this.updateResourcesData()
|
||||
this.manageHealthState();
|
||||
if (this.type == "vehicle") {
|
||||
|
||||
} else {
|
||||
super.prepareDerivedData()
|
||||
this.updateResourcesData()
|
||||
this.manageHealthState();
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
get itemData() {
|
||||
return Array.from(this.data.items.values()).map(i => i.data)
|
||||
}
|
||||
get details() {
|
||||
return this.data.data.details
|
||||
return this.system.details
|
||||
}
|
||||
get attributes() {
|
||||
return Object.values(this.data.data.attributes)
|
||||
return Object.values(this.system.attributes)
|
||||
}
|
||||
get aptitudes() {
|
||||
return Object.values(this.data.data.aptitudes)
|
||||
return Object.values(this.system.aptitudes)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
clearRoundModifiers() { // Process data/items that are finished at end of a round
|
||||
let foList = this.fightoptions
|
||||
for (let fo of foList) {
|
||||
if (fo.data.properties.used) {
|
||||
this.updateEmbeddedDocuments("Item", [{ _id: fo._id, 'data.properties.used': false }])
|
||||
if (fo.system.properties.used) {
|
||||
this.updateEmbeddedDocuments("Item", [{ _id: fo._id, 'system.properties.used': false }])
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -71,28 +119,35 @@ export class BoLActor extends Actor {
|
||||
get defenseValue() {
|
||||
let defMod = 0
|
||||
let fo = this.getActiveFightOption()
|
||||
if (fo && fo.data.properties.fightoptiontype == "intrepid") {
|
||||
if (fo && fo.system.properties.fightoptiontype == "intrepid") {
|
||||
defMod += -2
|
||||
}
|
||||
if (fo && fo.data.properties.fightoptiontype == "fulldefense") {
|
||||
if (fo && fo.system.properties.fightoptiontype == "fulldefense") {
|
||||
defMod += 2
|
||||
}
|
||||
if (fo && fo.data.properties.fightoptiontype == "twoweaponsdef" && !fo.data.properties.used) {
|
||||
if (fo && fo.system.properties.fightoptiontype == "twoweaponsdef" && !fo.system.properties.used) {
|
||||
defMod += 1
|
||||
this.updateEmbeddedDocuments("Item", [{ _id: fo._id, 'data.properties.used': true }])
|
||||
this.updateEmbeddedDocuments("Item", [{ _id: fo._id, 'system.properties.used': true }])
|
||||
}
|
||||
if (fo && fo.data.properties.fightoptiontype == "defense") {
|
||||
if (fo && fo.system.properties.fightoptiontype == "defense") {
|
||||
defMod += 1
|
||||
}
|
||||
if (fo && fo.data.properties.fightoptiontype == "attack") {
|
||||
if (fo && fo.system.properties.fightoptiontype == "attack") {
|
||||
defMod += -1
|
||||
}
|
||||
return this.data.data.aptitudes.def.value + defMod
|
||||
// Apply defense effects
|
||||
for (let i of this.items) {
|
||||
if (i.type === "feature" && i.system.subtype === "boleffect" && i.system.properties.identifier.includes("aptitudes.def") ) {
|
||||
defMod += Number(i.system.properties.modifier)
|
||||
}
|
||||
}
|
||||
console.log("Defense : ", defMod)
|
||||
return this.system.aptitudes.def.value + defMod
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getActiveFightOption() {
|
||||
let it = this.itemData.find(i => i.type === "feature" && i.data.subtype === "fightoption" && i.data.properties.activated)
|
||||
let it = this.items.find(i => i.type === "feature" && i.system.subtype === "fightoption" && i.system.properties.activated)
|
||||
if (it) {
|
||||
return duplicate(it)
|
||||
}
|
||||
@ -101,14 +156,14 @@ export class BoLActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
incAttributeXP(key) {
|
||||
let attr = duplicate(this.data.data.attributes[key])
|
||||
let attr = duplicate(this.system.attributes[key])
|
||||
if (attr) {
|
||||
let nextXP = (attr.value == -1) ? 2 : attr.value + (attr.value + 1)
|
||||
let xp = duplicate(this.data.data.xp)
|
||||
let xp = duplicate(this.system.xp)
|
||||
if (xp.total - xp.spent >= nextXP) {
|
||||
attr.value += 1
|
||||
xp.spent += nextXP
|
||||
this.update({ [`data.attributes.${key}`]: attr, [`data.xp`]: xp })
|
||||
this.update({ [`system.attributes.${key}`]: attr, [`system.xp`]: xp })
|
||||
} else {
|
||||
ui.notifications.warn("Pas assez de points d'expérience !")
|
||||
}
|
||||
@ -117,14 +172,14 @@ export class BoLActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
incAptitudeXP(key) {
|
||||
let apt = duplicate(this.data.data.aptitudes[key])
|
||||
let apt = duplicate(this.system.aptitudes[key])
|
||||
if (apt) {
|
||||
let nextXP = (apt.value == -1) ? 1 : apt.value + 2
|
||||
let xp = duplicate(this.data.data.xp)
|
||||
let xp = duplicate(this.system.xp)
|
||||
if (xp.total - xp.spent >= nextXP) {
|
||||
apt.value += 1
|
||||
xp.spent += nextXP
|
||||
this.update({ [`data.aptitudes.${key}`]: apt, [`data.xp`]: xp })
|
||||
this.update({ [`system.aptitudes.${key}`]: apt, [`system.xp`]: xp })
|
||||
} else {
|
||||
ui.notifications.warn("Pas assez de points d'expérience !")
|
||||
}
|
||||
@ -132,15 +187,15 @@ export class BoLActor extends Actor {
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
incCareerXP(itemId) {
|
||||
let career = this.data.items.get(itemId)
|
||||
let career = this.items.get(itemId)
|
||||
if (career) {
|
||||
career = duplicate(career)
|
||||
let nextXP = career.data.rank + 1
|
||||
let xp = duplicate(this.data.data.xp)
|
||||
let nextXP = career.system.rank + 1
|
||||
let xp = duplicate(this.system.xp)
|
||||
if (xp.total - xp.spent >= nextXP) {
|
||||
xp.spent += nextXP
|
||||
this.update({ [`data.xp`]: xp })
|
||||
this.updateEmbeddedDocuments('Item', [{ _id: career._id, 'data.rank': career.data.rank + 1 }])
|
||||
this.update({ [`system.xp`]: xp })
|
||||
this.updateEmbeddedDocuments('Item', [{ _id: career._id, 'system.rank': career.system.rank + 1 }])
|
||||
} else {
|
||||
ui.notifications.warn("Pas assez de points d'expérience !")
|
||||
}
|
||||
@ -149,18 +204,18 @@ export class BoLActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async toggleFightOption(itemId) {
|
||||
let fightOption = this.data.items.get(itemId)
|
||||
let fightOption = this.items.get(itemId)
|
||||
let state
|
||||
let updates = []
|
||||
|
||||
if (fightOption) {
|
||||
fightOption = duplicate(fightOption)
|
||||
if (fightOption.data.properties.activated) {
|
||||
if (fightOption.system.properties.activated) {
|
||||
state = false
|
||||
} else {
|
||||
state = true
|
||||
}
|
||||
updates.push({ _id: fightOption._id, 'data.properties.activated': state }) // Update the selected one
|
||||
updates.push({ _id: fightOption._id, 'system.properties.activated': state }) // Update the selected one
|
||||
await this.updateEmbeddedDocuments("Item", updates) // Apply all changes
|
||||
// Then notify
|
||||
ChatMessage.create({
|
||||
@ -175,13 +230,13 @@ export class BoLActor extends Actor {
|
||||
/*-------------------------------------------- */
|
||||
get armorMalusValue() { // used for Fight Options
|
||||
for (let armor of this.armors) {
|
||||
if (armor.data.properties.armorQuality.includes("light")) {
|
||||
if (armor.system.properties.armorQuality.includes("light")) {
|
||||
return 1
|
||||
}
|
||||
if (armor.data.properties.armorQuality.includes("medium")) {
|
||||
if (armor.system.properties.armorQuality.includes("medium")) {
|
||||
return 2
|
||||
}
|
||||
if (armor.data.properties.armorQuality.includes("heavy")) {
|
||||
if (armor.system.properties.armorQuality.includes("heavy")) {
|
||||
return 3
|
||||
}
|
||||
}
|
||||
@ -189,109 +244,118 @@ export class BoLActor extends Actor {
|
||||
}
|
||||
|
||||
get resources() {
|
||||
return Object.values(this.data.data.resources)
|
||||
return Object.values(this.system.resources)
|
||||
}
|
||||
get boleffects() {
|
||||
return this.items.filter(i => i.type === "feature" && i.system.subtype === "boleffect")
|
||||
}
|
||||
get boons() {
|
||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "boon");
|
||||
return duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "boon") || []);
|
||||
}
|
||||
get flaws() {
|
||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "flaw");
|
||||
return duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "flaw") || []);
|
||||
}
|
||||
get careers() {
|
||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "career");
|
||||
return duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "career") || [])
|
||||
}
|
||||
get origins() {
|
||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "origin");
|
||||
return this.items.filter(i => i.type === "feature" && i.system.subtype === "origin");
|
||||
}
|
||||
get races() {
|
||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "race");
|
||||
return this.items.filter(i => i.type === "feature" && i.system.subtype === "race");
|
||||
}
|
||||
get languages() {
|
||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "language")
|
||||
return this.items.filter(i => i.type === "feature" && i.system.subtype === "language")
|
||||
}
|
||||
get fightoptions() {
|
||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "fightoption")
|
||||
return this.items.filter(i => i.type === "feature" && i.system.subtype === "fightoption")
|
||||
}
|
||||
get godsfaith() {
|
||||
return this.items.filter(i => i.type === "feature" && i.system.subtype === "godsfaith")
|
||||
}
|
||||
get features() {
|
||||
return this.itemData.filter(i => i.type === "feature")
|
||||
return this.items.filter(i => i.type === "feature")
|
||||
}
|
||||
get equipment() {
|
||||
return this.itemData.filter(i => i.type === "item")
|
||||
return this.items.filter(i => i.type === "item")
|
||||
}
|
||||
get equipmentCreature() {
|
||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && (( i.data.subtype === "weapon" && i.data.properties.natural === true) || (i.data.subtype === "armor")) )
|
||||
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && ((i.system.subtype === "weapon" && i.system.properties.natural === true) || (i.system.subtype === "armor")))
|
||||
}
|
||||
get armors() {
|
||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "armor");
|
||||
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "armor");
|
||||
}
|
||||
get helms() {
|
||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "helm");
|
||||
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "helm");
|
||||
}
|
||||
get shields() {
|
||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "shield");
|
||||
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "shield");
|
||||
}
|
||||
get vehicleWeapons() {
|
||||
return this.items.filter(i => i.type === "item" && i.system.category === "vehicleweapon")
|
||||
}
|
||||
|
||||
get weapons() {
|
||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "weapon");
|
||||
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "weapon")
|
||||
}
|
||||
get protections() {
|
||||
return this.armors.concat(this.helms).concat(this.shields)
|
||||
}
|
||||
get spells() {
|
||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "spell");
|
||||
return this.items.filter(i => i.type === "item" && i.system.category === "spell");
|
||||
}
|
||||
get alchemy() {
|
||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "alchemy");
|
||||
return this.items.filter(i => i.type === "item" && i.system.category === "alchemy");
|
||||
}
|
||||
get melee() {
|
||||
return this.weapons.filter(i => i.data.properties.melee === true);
|
||||
return this.weapons.filter(i => i.system.properties.melee === true);
|
||||
}
|
||||
get natural() {
|
||||
return this.weapons.filter(i => i.data.properties.natural === true);
|
||||
return this.weapons.filter(i => i.system.properties.natural === true);
|
||||
}
|
||||
get ranged() {
|
||||
return this.weapons.filter(i => i.data.properties.ranged === true);
|
||||
return this.weapons.filter(i => i.system.properties.ranged === true);
|
||||
}
|
||||
|
||||
get containers() {
|
||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "container");
|
||||
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "container");
|
||||
}
|
||||
|
||||
get treasure() {
|
||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "currency");
|
||||
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "currency");
|
||||
}
|
||||
|
||||
get vehicles() {
|
||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "vehicle");
|
||||
return this.items.filter(i => i.type === "item" && i.system.category === "vehicle");
|
||||
}
|
||||
|
||||
get ammos() {
|
||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && i.data.subtype === "ammunition");
|
||||
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && i.system.subtype === "ammunition");
|
||||
}
|
||||
|
||||
get misc() {
|
||||
return this.itemData.filter(i => i.type === "item" && i.data.category === "equipment" && (i.data.subtype === "other" || i.data.subtype === "container" || i.data.subtype === "scroll" || i.data.subtype === "jewel"));
|
||||
return this.items.filter(i => i.type === "item" && i.system.category === "equipment" && (i.system.subtype === "other" || i.system.subtype === "container" || i.system.subtype === "scroll" || i.system.subtype === "jewel"));
|
||||
}
|
||||
|
||||
get bonusBoons() {
|
||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "boon" && i.data.properties.isbonusdice);
|
||||
let boons = this.items.filter(i => i.type === "feature" && i.system.subtype === "boon" && i.system.properties.isbonusdice)
|
||||
return duplicate(boons || [])
|
||||
}
|
||||
get malusFlaws() {
|
||||
return this.itemData.filter(i => i.type === "feature" && i.data.subtype === "flaw" && i.data.properties.ismalusdice);
|
||||
return duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "flaw" && i.system.properties.ismalusdice) || []);
|
||||
}
|
||||
|
||||
isSorcerer() {
|
||||
if (this.careers.find(item => item.data.properties.sorcerer == true))
|
||||
if (this.careers.find(item => item.system.properties.sorcerer == true))
|
||||
return true
|
||||
return false
|
||||
}
|
||||
isAlchemist() {
|
||||
if (this.careers.find(item => item.data.properties.alchemist == true))
|
||||
if (this.careers.find(item => item.system.properties.alchemist == true))
|
||||
return true
|
||||
return false
|
||||
}
|
||||
isPriest() {
|
||||
if (this.careers.find(item => item.data.properties.priest == true))
|
||||
if (this.careers.find(item => item.system.properties.priest == true))
|
||||
return true
|
||||
return false
|
||||
}
|
||||
@ -301,18 +365,35 @@ export class BoLActor extends Actor {
|
||||
let armors = this.armors
|
||||
let ppCostArmor = 0
|
||||
for (let armor of armors) {
|
||||
if (armor.data.worn) {
|
||||
ppCostArmor += Number(armor.data.properties.modifiers.powercost) || 0
|
||||
if (armor.system.worn) {
|
||||
ppCostArmor += Number(armor.system.properties.modifiers.powercost) || 0
|
||||
}
|
||||
}
|
||||
return ppCostArmor
|
||||
}
|
||||
/*-------------------------------------------- */
|
||||
getDamageAttributeValue(attrDamage) {
|
||||
let attrDamageValue = 0
|
||||
if (attrDamage.includes("vigor")) {
|
||||
attrDamageValue = this.system.attributes.vigor.value
|
||||
if (attrDamage.includes("half")) {
|
||||
attrDamageValue = Math.floor(attrDamageValue / 2)
|
||||
}
|
||||
// Apply vigor effects
|
||||
for (let i of this.items) {
|
||||
if (i.type === "feature" && i.system.subtype === "boleffect" && i.system.properties.identifier.includes("vigor") ) {
|
||||
attrDamageValue += Number(i.system.properties.modifier)
|
||||
}
|
||||
}
|
||||
}
|
||||
return attrDamageValue
|
||||
}
|
||||
/*-------------------------------------------- */
|
||||
getArmorAgiMalus() {
|
||||
let malusAgi = 0
|
||||
for (let armor of this.protections) {
|
||||
if (armor.data.worn) {
|
||||
malusAgi += Number(armor.data.properties.modifiers.agility) || 0
|
||||
if (armor.system.worn) {
|
||||
malusAgi += Number(armor.system.properties.modifiers.agility) || 0
|
||||
}
|
||||
}
|
||||
return malusAgi
|
||||
@ -321,8 +402,8 @@ export class BoLActor extends Actor {
|
||||
getArmorInitMalus() {
|
||||
let malusInit = 0
|
||||
for (let armor of this.protections) {
|
||||
if (armor.data.worn) {
|
||||
malusInit += Number(armor.data.properties.modifiers.init) || 0
|
||||
if (armor.system.worn) {
|
||||
malusInit += Number(armor.system.properties.modifiers.init) || 0
|
||||
}
|
||||
}
|
||||
return malusInit
|
||||
@ -330,76 +411,81 @@ export class BoLActor extends Actor {
|
||||
|
||||
/*-------------------------------------------- */
|
||||
spendPowerPoint(ppCost) {
|
||||
let newPP = this.data.data.resources.power.value - ppCost
|
||||
let newPP = this.system.resources.power.value - ppCost
|
||||
newPP = (newPP < 0) ? 0 : newPP
|
||||
this.update({ 'data.resources.power.value': newPP })
|
||||
this.update({ 'system.resources.power.value': newPP })
|
||||
return newPP
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
resetAlchemyStatus(alchemyId) {
|
||||
let alchemy = this.data.items.get(alchemyId)
|
||||
let alchemy = this.items.get(alchemyId)
|
||||
if (alchemy) {
|
||||
this.updateEmbeddedDocuments('Item', [{ _id: alchemy.id, 'data.properties.pccurrent': 0 }])
|
||||
this.updateEmbeddedDocuments('Item', [{ _id: alchemy.id, 'system.properties.pccurrent': 0 }])
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
async spendAlchemyPoint(alchemyId, pcCost) {
|
||||
let alchemy = this.data.items.get(alchemyId)
|
||||
let alchemy = this.items.get(alchemyId)
|
||||
if (alchemy) {
|
||||
pcCost = Number(pcCost) ?? 0
|
||||
if (this.data.data.resources.alchemypoints.value >= pcCost) {
|
||||
let newPC = this.data.data.resources.alchemypoints.value - pcCost
|
||||
if (this.system.resources.alchemypoints.value >= pcCost) {
|
||||
let newPC = this.system.resources.alchemypoints.value - pcCost
|
||||
newPC = (newPC < 0) ? 0 : newPC
|
||||
this.update({ 'data.resources.alchemypoints.value': newPC })
|
||||
newPC = alchemy.data.data.properties.pccurrent + pcCost
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: alchemy.id, 'data.properties.pccurrent': newPC }])
|
||||
newPC = alchemy.system.properties.pccurrent + pcCost
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: alchemy.id, 'system.properties.pccurrent': newPC }])
|
||||
} else {
|
||||
ui.notifications.warn("Plus assez de Points de Création !")
|
||||
ui.notifications.warn( game.i18n.localize("BOL.ui.nomorealchemypoints") )
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
getAlchemistBonus() {
|
||||
let sorcerer = this.careers.find(item => item.data.properties.alchemist == true)
|
||||
let sorcerer = this.careers.find(item => item.system.properties.alchemist == true)
|
||||
if (sorcerer) {
|
||||
return sorcerer.data.rank
|
||||
return sorcerer.system.rank
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/*-------------------------------------------- */
|
||||
getSorcererBonus() {
|
||||
let sorcerer = this.careers.find(item => item.data.properties.sorcerer == true)
|
||||
let sorcerer = this.careers.find(item => item.system.properties.sorcerer == true)
|
||||
if (sorcerer) {
|
||||
return sorcerer.data.rank
|
||||
return sorcerer.system.rank
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
heroReroll() {
|
||||
if (this.type == 'character') {
|
||||
return this.data.data.resources.hero.value > 0;
|
||||
return this.system.resources.hero.value > 0;
|
||||
} else {
|
||||
if (this.data.data.type == 'adversary') {
|
||||
return this.data.data.resources.hero.value > 0;
|
||||
if (this.system.villainy == 'adversary') {
|
||||
return this.system.resources.hero.value > 0;
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
getResourcesFromType() {
|
||||
let resources = {};
|
||||
if (this.type == 'encounter') {
|
||||
resources['hp'] = this.data.data.resources.hp;
|
||||
if (this.data.data.type != 'base') {
|
||||
resources['faith'] = this.data.data.resources.faith
|
||||
resources['power'] = this.data.data.resources.power
|
||||
resources['hp'] = this.system.resources.hp;
|
||||
if (this.system.chartype != 'base') {
|
||||
resources['faith'] = this.system.resources.faith
|
||||
resources['power'] = this.system.resources.power
|
||||
}
|
||||
if (this.data.data.type == 'adversary') {
|
||||
resources['hero'] = duplicate(this.data.data.resources.hero)
|
||||
if (this.system.chartype == 'adversary') {
|
||||
resources['hero'] = duplicate(this.system.resources.hero)
|
||||
resources['hero'].label = "BOL.resources.villainy"
|
||||
}
|
||||
} else {
|
||||
resources = this.data.data.resources;
|
||||
resources = this.system.resources;
|
||||
}
|
||||
return resources
|
||||
}
|
||||
@ -440,6 +526,16 @@ export class BoLActor extends Actor {
|
||||
"label": "BOL.featureCategory.fightoptions",
|
||||
"ranked": false,
|
||||
"items": this.fightoptions
|
||||
},
|
||||
"godsfaith": {
|
||||
"label": "BOL.featureSubtypes.gods",
|
||||
"ranked": false,
|
||||
"items": this.godsfaith
|
||||
},
|
||||
"boleffects": {
|
||||
"label": "BOL.featureSubtypes.effects",
|
||||
"ranked": false,
|
||||
"items": this.boleffects
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -455,6 +551,15 @@ export class BoLActor extends Actor {
|
||||
"options": false,
|
||||
"items": this.melee
|
||||
},
|
||||
"natural": {
|
||||
"label": "BOL.combatCategory.natural",
|
||||
"weapon": true,
|
||||
"protection": false,
|
||||
"blocking": false,
|
||||
"ranged": false,
|
||||
"options": false,
|
||||
"items": this.natural
|
||||
},
|
||||
"ranged": {
|
||||
"label": "BOL.combatCategory.ranged",
|
||||
"weapon": true,
|
||||
@ -494,39 +599,17 @@ export class BoLActor extends Actor {
|
||||
}
|
||||
}
|
||||
|
||||
buildCombatCreature() {
|
||||
return {
|
||||
"natural": {
|
||||
"label": "BOL.combatCategory.natural",
|
||||
"weapon": true,
|
||||
"protection": false,
|
||||
"blocking": false,
|
||||
"ranged": false,
|
||||
"options": false,
|
||||
"items": this.natural
|
||||
},
|
||||
"protections": {
|
||||
"label": "BOL.combatCategory.protections",
|
||||
"weapon": false,
|
||||
"protection": true,
|
||||
"blocking": false,
|
||||
"ranged": false,
|
||||
"options": false,
|
||||
"items": this.protections
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
buildRollList() {
|
||||
let rolls = []
|
||||
for (let key in this.data.data.attributes) {
|
||||
let attr = this.data.data.attributes[key]
|
||||
for (let key in this.system.attributes) {
|
||||
let attr = this.system.attributes[key]
|
||||
rolls.push({ key: key, value: attr.value, name: attr.label, type: "attribute" })
|
||||
}
|
||||
for (let key in this.data.data.aptitudes) {
|
||||
for (let key in this.system.aptitudes) {
|
||||
if (key != "def") {
|
||||
let apt = this.data.data.aptitudes[key]
|
||||
let apt = this.system.aptitudes[key]
|
||||
rolls.push({ key: key, value: apt.value, name: apt.label, type: "aptitude" })
|
||||
}
|
||||
}
|
||||
@ -535,67 +618,121 @@ export class BoLActor extends Actor {
|
||||
|
||||
/*-------------------------------------------- */
|
||||
buildListeActions() {
|
||||
return this.melee.concat(this.ranged)
|
||||
return this.melee.concat(this.ranged).concat(this.natural)
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
async manageHealthState() {
|
||||
let hpID = "lastHP" + this.id
|
||||
let lastHP = await this.getFlag("world", hpID)
|
||||
if (lastHP != this.data.data.resources.hp.value && this.isOwner ) {
|
||||
await this.setFlag("world", hpID, this.data.data.resources.hp.value)
|
||||
if (this.data.data.resources.hp.value <= 0) {
|
||||
if (lastHP != this.system.resources.hp.value && game.user.isGM) { // Only GM sends this
|
||||
await this.setFlag("world", hpID, this.system.resources.hp.value)
|
||||
let prone = this.effects.find( ef => ef.label == "EFFECT.StatusProne")
|
||||
let dead = this.effects.find( ef => ef.label == "EFFECT.StatusDead")
|
||||
if (this.system.resources.hp.value <= 0) {
|
||||
if ( !prone) {
|
||||
await this.createEmbeddedDocuments("ActiveEffect", [
|
||||
{label: 'EFFECT.StatusProne', icon: 'icons/svg/falling.svg', flags: { core: { statusId: 'prone' } } }
|
||||
])
|
||||
}
|
||||
if ( this.system.resources.hp.value < -5 && !dead) {
|
||||
await this.createEmbeddedDocuments("ActiveEffect", [
|
||||
{label: 'EFFECT.StatusDead', icon: 'icons/svg/skull.svg', flags: { core: { statusId: 'dead' } } }
|
||||
])
|
||||
}
|
||||
ChatMessage.create({
|
||||
alias: this.name,
|
||||
whisper: BoLUtility.getWhisperRecipientsAndGMs(this.name),
|
||||
content: await renderTemplate('systems/bol/templates/chat/chat-vitality-zero.hbs', { name: this.name, img: this.img, hp: this.data.data.resources.hp.value })
|
||||
content: await renderTemplate('systems/bol/templates/chat/chat-vitality-zero.hbs', { name: this.name, img: this.img, hp: this.system.resources.hp.value })
|
||||
})
|
||||
} else {
|
||||
if ( prone ) {
|
||||
await this.deleteEmbeddedDocuments("ActiveEffect", [ prone.id ] )
|
||||
}
|
||||
if ( dead ) {
|
||||
await this.deleteEmbeddedDocuments("ActiveEffect", [ dead.id ] )
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
registerInit(initScore, isCritical, isFumble) {
|
||||
this.update({ 'data.combat.lastinit': initScore, 'data.combat.iscritical': isCritical, 'data.combat.isfumble': isFumble })
|
||||
async registerInit(rollData) {
|
||||
rollData.actor = undefined // Cleanup if present
|
||||
await this.setFlag("world", "last-initiative", rollData)
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
getLastInitData() {
|
||||
return this.data.data.combat
|
||||
clearInitiative() {
|
||||
this.unsetFlag("world", "last-initiative" )
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
getInitiativeRank(rollData = undefined, isCombat = false) {
|
||||
if (!rollData) {
|
||||
rollData = this.getFlag("world", "last-initiative")
|
||||
}
|
||||
let fvttInit = 4 // Pietaille par defaut
|
||||
if (this.type == 'character' ) {
|
||||
fvttInit = 5
|
||||
if (!rollData) {
|
||||
fvttInit = -1
|
||||
if ( isCombat ) {
|
||||
ui.notifications.warn(game.i18n.localize("BOL.ui.warninitiative"))
|
||||
}
|
||||
} else {
|
||||
if (rollData.isLegendary) {
|
||||
fvttInit = 10
|
||||
} else if (rollData.isCritical) {
|
||||
fvttInit = 9
|
||||
} else if (rollData.isSuccess ) {
|
||||
fvttInit = 8
|
||||
} else if (rollData.isFumble) {
|
||||
fvttInit = 3
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( this.getCharType() == 'adversary') {
|
||||
fvttInit = 7
|
||||
}
|
||||
if ( this.getCharType() == 'tough') {
|
||||
fvttInit = 6
|
||||
}
|
||||
return fvttInit
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
async subHeroPoints(nb) {
|
||||
let newHeroP = this.data.data.resources.hero.value - nb;
|
||||
let newHeroP = this.system.resources.hero.value - nb;
|
||||
newHeroP = (newHeroP < 0) ? 0 : newHeroP;
|
||||
await this.update({ 'data.resources.hero.value': newHeroP });
|
||||
await this.update({ 'system.resources.hero.value': newHeroP });
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
async sufferDamage(damage) {
|
||||
let newHP = this.data.data.resources.hp.value - damage;
|
||||
await this.update({ 'data.resources.hp.value': newHP });
|
||||
let newHP = this.system.resources.hp.value - damage
|
||||
await this.update({ 'system.resources.hp.value': newHP })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getArmorFormula() {
|
||||
let protectWorn = this.protections.filter(item => item.data.worn)
|
||||
let protectWorn = this.protections.filter(item => item.system.worn)
|
||||
let formula = ""
|
||||
for (let protect of protectWorn) {
|
||||
if (protect.data.subtype == 'helm') {
|
||||
if (protect.system.subtype == 'helm') {
|
||||
formula += "+1"
|
||||
} else if (protect.data.subtype == 'armor') {
|
||||
} else if (protect.system.subtype == 'armor') {
|
||||
if (BoLUtility.getRollArmor()) {
|
||||
if (!protect.data.properties.soak.formula || protect.data.properties.soak.formula == "") {
|
||||
ui.notifications.warn(`L'armure ${protect.name} n'a pas de formule pour la protection !`)
|
||||
if (!protect.system.properties.soak.formula || protect.system.properties.soak.formula == "") {
|
||||
ui.notifications.warn( game.i18n.localize("BOL.ui.armornoformula", protect.name) )
|
||||
} else {
|
||||
formula += "+" + protect.data.properties.soak.formula
|
||||
formula += "+" + " max(" + protect.system.properties.soak.formula + ",0)"
|
||||
}
|
||||
} else {
|
||||
if (protect.data.properties.soak.value == undefined) {
|
||||
ui.notifications.warn(`L'armure ${protect.name} n'a pas de valeur fixe pour la protection !`)
|
||||
if (protect.system.properties.soak.value == undefined) {
|
||||
ui.notifications.warn( game.i18n.localize("BOL.ui.armornoformula", protect.name) )
|
||||
} else {
|
||||
formula += "+ " + protect.data.properties.soak.value
|
||||
formula += "+ " + protect.system.properties.soak.value
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -606,19 +743,19 @@ export class BoLActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollProtection(itemId) {
|
||||
let armor = this.data.items.get(itemId)
|
||||
let armor = duplicate(this.items.get(itemId))
|
||||
if (armor) {
|
||||
let armorFormula = armor.data.data.properties.soak.formula;
|
||||
let armorFormula = "max(" + armor.system.properties.soak.formula + ", 0)"
|
||||
let rollArmor = new Roll(armorFormula)
|
||||
rollArmor.roll({ async: false }).toMessage();
|
||||
rollArmor.roll({ async: false }).toMessage()
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollWeaponDamage(itemId) {
|
||||
let weapon = this.data.items.get(itemId)
|
||||
let weapon = duplicate(this.items.get(itemId))
|
||||
if (weapon) {
|
||||
let r = new BoLDefaultRoll({ id: randomID(16), isSuccess: true, mode: "weapon", weapon: weapon, actor: this })
|
||||
let r = new BoLDefaultRoll({ id: randomID(16), isSuccess: true, mode: "weapon", weapon: weapon, actorId: this.id, actor: this })
|
||||
r.setSuccess(true)
|
||||
r.rollDamage()
|
||||
}
|
||||
@ -626,10 +763,10 @@ export class BoLActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
toggleEquipItem(item) {
|
||||
const equipable = item.data.data.properties.equipable;
|
||||
const equipable = item.system.properties.equipable;
|
||||
if (equipable) {
|
||||
let itemData = duplicate(item.data);
|
||||
itemData.data.worn = !itemData.data.worn;
|
||||
let itemData = duplicate(item);
|
||||
itemData.system.worn = !itemData.system.worn;
|
||||
return item.update(itemData);
|
||||
}
|
||||
}
|
||||
|
229
module/actor/vehicle-sheet.js
Normal file
229
module/actor/vehicle-sheet.js
Normal file
@ -0,0 +1,229 @@
|
||||
/**
|
||||
* Extend the basic ActorSheet with some very simple modifications
|
||||
* @extends {ActorSheet}
|
||||
*/
|
||||
import { BoLRoll } from "../controllers/bol-rolls.js";
|
||||
import { BoLUtility } from "../system/bol-utility.js";
|
||||
|
||||
export class BoLVehicleSheet extends ActorSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
classes: ["bol", "sheet", "actor"],
|
||||
template: "systems/bol/templates/actor/vehicle-sheet.hbs",
|
||||
width: 860,
|
||||
height: 600,
|
||||
dragDrop: [{ dragSelector: ".items-list .item", dropSelector: null }],
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }]
|
||||
});
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @override */
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
function onLoad() {
|
||||
let logoSheet = BoLUtility.getLogoActorSheet()
|
||||
$(".bol-actor-form").css("backgroundImage",`url(${logoSheet})`)
|
||||
}
|
||||
// Setup everything onload
|
||||
$(function () { onLoad(); });
|
||||
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) return;
|
||||
|
||||
// Add Inventory Item
|
||||
html.find('.item-create').click(this._onItemCreate.bind(this));
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
const item = this.actor.items.get(li.data("itemId"));
|
||||
item.sheet.render(true);
|
||||
})
|
||||
// Equip/Unequip item
|
||||
html.find('.item-equip').click(this._onToggleEquip.bind(this));
|
||||
|
||||
html.find('.create_item').click(ev => {
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: "Nouvel Equipement", type: "item" }], { renderSheet: true });
|
||||
});
|
||||
|
||||
html.find(".toggle-fight-option").click((ev) => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
this.actor.toggleFightOption(li.data("itemId"))
|
||||
})
|
||||
|
||||
html.find(".inc-dec-btns-alchemy").click((ev) => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
this.actor.spendAlchemyPoint(li.data("itemId"), 1)
|
||||
})
|
||||
|
||||
// Incr./Decr. career ranks
|
||||
html.find(".inc-dec-btns").click((ev) => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
if (li) {
|
||||
const item = this.actor.items.get(li.data("itemId"));
|
||||
if (item) {
|
||||
const dataset = ev.currentTarget.dataset;
|
||||
const operator = dataset.operator;
|
||||
const target = dataset.target;
|
||||
const incr = parseInt(dataset.incr)
|
||||
const min = parseInt(dataset.min)
|
||||
const max = parseInt(dataset.max) || 10000
|
||||
let value = eval("item." + target)
|
||||
value = value || 0
|
||||
//console.log("IncDec", item, target, value, operator, min, max)
|
||||
if (operator === "minus") {
|
||||
if (value >= min + incr) value -= incr;
|
||||
else value = min;
|
||||
}
|
||||
if (operator === "plus") {
|
||||
if (value <= max - incr) value += incr;
|
||||
else value = max;
|
||||
}
|
||||
let update = { [`${target}`]: value };
|
||||
item.update(update);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// Delete Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
Dialog.confirm({
|
||||
title: "Suppression",
|
||||
content: `Vous êtes sûr de vouloir supprimer cet item ?`,
|
||||
yes: () => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
this.actor.deleteEmbeddedDocuments("Item", [li.data("itemId")])
|
||||
li.slideUp(200, () => this.render(false));
|
||||
},
|
||||
no: () => { },
|
||||
defaultYes: false,
|
||||
});
|
||||
});
|
||||
|
||||
// Rollable abilities.
|
||||
html.find('.rollable').click(this._onRoll.bind(this));
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @override */
|
||||
async getData(options) {
|
||||
const data = super.getData(options)
|
||||
const actorData = duplicate(data)
|
||||
let formData = duplicate(data)
|
||||
|
||||
formData.config = game.bol.config
|
||||
formData.name = this.actor.name
|
||||
formData.img = this.actor.img
|
||||
formData.system = duplicate(this.actor.system)
|
||||
formData.weapons = this.actor.vehicleWeapons
|
||||
formData.isGM = game.user.isGM
|
||||
formData.options = this.options
|
||||
formData.owner = this.document.isOwner
|
||||
formData.editScore = this.options.editScore
|
||||
formData.description = await TextEditor.enrichHTML(this.actor.system.description, {async: true})
|
||||
|
||||
formData.isGM = game.user.isGM
|
||||
|
||||
console.log("VEHICLEDATA", formData)
|
||||
return formData;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/**
|
||||
* Handle creating a new Owned Item for the actor using initial data defined in the HTML dataset
|
||||
* @param {Event} event The originating click event
|
||||
* @private
|
||||
*/
|
||||
_onItemCreate(event) {
|
||||
event.preventDefault();
|
||||
const header = event.currentTarget;
|
||||
// Get the type of item to create.
|
||||
const type = header.dataset.type;
|
||||
// Grab any data associated with this control.
|
||||
const data = duplicate(header.dataset);
|
||||
// Initialize a default name.
|
||||
const name = `New ${type.capitalize()}`;
|
||||
// Prepare the item object.
|
||||
const itemData = {
|
||||
name: name,
|
||||
type: type,
|
||||
data: data
|
||||
};
|
||||
// Remove the type from the dataset since it's in the itemData.type prop.
|
||||
delete itemData.data["type"];
|
||||
|
||||
// Finally, create the item!
|
||||
return this.actor.createEmbeddedDocuments("Item", [itemData]);
|
||||
}
|
||||
|
||||
_onToggleEquip(event) {
|
||||
event.preventDefault();
|
||||
const li = $(event.currentTarget).closest(".item");
|
||||
const item = this.actor.items.get(li.data("itemId"));
|
||||
return this.actor.toggleEquipItem(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle clickable rolls.
|
||||
* @param {Event} event The originating click event
|
||||
* @private
|
||||
*/
|
||||
_onRoll(event) {
|
||||
event.preventDefault();
|
||||
const element = event.currentTarget
|
||||
const dataset = element.dataset
|
||||
const rollType = dataset.rollType
|
||||
const li = $(event.currentTarget).closest(".item")
|
||||
switch (rollType) {
|
||||
case "attribute":
|
||||
BoLRoll.attributeCheck(this.actor, dataset.key, event)
|
||||
break;
|
||||
case "aptitude":
|
||||
BoLRoll.aptitudeCheck(this.actor, dataset.key, event)
|
||||
break;
|
||||
case "weapon":
|
||||
BoLRoll.weaponCheck(this.actor, event)
|
||||
break;
|
||||
case "spell":
|
||||
BoLRoll.spellCheck(this.actor, event)
|
||||
break;
|
||||
case "alchemy":
|
||||
BoLRoll.alchemyCheck(this.actor, event)
|
||||
break;
|
||||
case "protection":
|
||||
this.actor.rollProtection(li.data("item-id"))
|
||||
break;
|
||||
case "damage":
|
||||
this.actor.rollWeaponDamage(li.data("item-id"))
|
||||
break;
|
||||
case "aptitudexp":
|
||||
this.actor.incAptitudeXP(dataset.key)
|
||||
break;
|
||||
case "attributexp":
|
||||
this.actor.incAttributeXP(dataset.key)
|
||||
break;
|
||||
case "careerxp":
|
||||
this.actor.incCareerXP( li.data("item-id"))
|
||||
break;
|
||||
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
/** @override */
|
||||
setPosition(options = {}) {
|
||||
const position = super.setPosition(options);
|
||||
const sheetBody = this.element.find(".sheet-body");
|
||||
const bodyHeight = position.height - 192;
|
||||
sheetBody.css("height", bodyHeight);
|
||||
return position;
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@
|
||||
// Import Modules
|
||||
import { BoLActor } from "./actor/actor.js"
|
||||
import { BoLActorSheet } from "./actor/actor-sheet.js"
|
||||
import { BoLVehicleSheet } from "./actor/vehicle-sheet.js"
|
||||
import { BoLItem } from "./item/item.js"
|
||||
import { BoLItemSheet } from "./item/item-sheet.js"
|
||||
import { System, BOL } from "./system/config.js"
|
||||
@ -13,6 +14,9 @@ import { BoLUtility } from "./system/bol-utility.js"
|
||||
import { BoLCombatManager } from "./system/bol-combat.js"
|
||||
import { BoLTokenHud } from "./system/bol-action-hud.js"
|
||||
import { BoLHotbar } from "./system/bol-hotbar.js"
|
||||
import { BoLAdventureGenerator } from "./system/bol-adventure-generator.js"
|
||||
import { BoLCommands} from "./system/bol-commands.js"
|
||||
import { BoLCharacterSummary} from "./system/bol-character-summary.js"
|
||||
|
||||
/* -------------------------------------------- */
|
||||
Hooks.once('init', async function () {
|
||||
@ -28,7 +32,7 @@ Hooks.once('init', async function () {
|
||||
// Game socket
|
||||
game.socket.on("system.bol", sockmsg => {
|
||||
BoLUtility.onSocketMessage(sockmsg);
|
||||
});
|
||||
})
|
||||
|
||||
|
||||
/**
|
||||
@ -37,7 +41,7 @@ Hooks.once('init', async function () {
|
||||
*/
|
||||
CONFIG.Combat.initiative = {
|
||||
formula: "2d6+@attributes.mind.value+@aptitudes.init.value",
|
||||
decimals: 3
|
||||
decimals: 2
|
||||
};
|
||||
|
||||
// Define custom Entity classes
|
||||
@ -47,7 +51,9 @@ Hooks.once('init', async function () {
|
||||
|
||||
// Register sheet application classes
|
||||
Actors.unregisterSheet("core", ActorSheet);
|
||||
Actors.registerSheet("bol", BoLActorSheet, { makeDefault: true });
|
||||
Actors.registerSheet("bol", BoLActorSheet, { types: ["character", "encounter"], makeDefault: true })
|
||||
Actors.registerSheet("bol", BoLVehicleSheet, { types: ["vehicle"], makeDefault: true })
|
||||
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
Items.registerSheet("bol", BoLItemSheet, { makeDefault: true });
|
||||
|
||||
@ -55,6 +61,8 @@ Hooks.once('init', async function () {
|
||||
BoLUtility.init()
|
||||
BoLTokenHud.init()
|
||||
BoLHotbar.init()
|
||||
BoLCommands.init()
|
||||
BoLAdventureGenerator.init()
|
||||
|
||||
// Preload Handlebars Templates
|
||||
await preloadHandlebarsTemplates();
|
||||
@ -75,6 +83,7 @@ function registerUsageCount( registerKey ) {
|
||||
name: "Unique world key",
|
||||
scope: "world",
|
||||
config: false,
|
||||
default: "",
|
||||
type: String
|
||||
});
|
||||
|
||||
@ -84,7 +93,10 @@ function registerUsageCount( registerKey ) {
|
||||
game.settings.set(registerKey, "world-key", worldKey )
|
||||
}
|
||||
// Simple API counter
|
||||
let regURL = `https://www.uberwald.me/fvtt_appcount/count.php?name="${registerKey}"&worldKey="${worldKey}"&version="${game.release.generation}.${game.release.build}"&system="${game.system.id}"&systemversion="${game.system.data.version}"`
|
||||
let regURL = `https://www.uberwald.me/fvtt_appcount/count.php?name="${registerKey}"&worldKey="${worldKey}"&version="${game.release.generation}.${game.release.build}"&system="${game.system.id}"&systemversion="${game.system.version}"`
|
||||
//$.ajaxSetup({
|
||||
//headers: { 'Access-Control-Allow-Origin': '*' }
|
||||
//})
|
||||
$.ajax(regURL)
|
||||
}
|
||||
}
|
||||
@ -95,19 +107,25 @@ function welcomeMessage() {
|
||||
user: game.user.id,
|
||||
whisper: [game.user.id],
|
||||
content: `<div id="welcome-message-pegasus"><span class="rdd-roll-part">
|
||||
<strong>Bienvenue dans Barbarians of Lemuria (Ludospherik version)</strong>
|
||||
<p>Les livres nécessaires pour jouer sont disponibles sur le site de l'éditeur : http://www.ludospherik.fr/content/14-barbarians-of-lemuria</p>
|
||||
<p>Les cartes intégrées au système le sont grace à l'aimable autorisation de leur auteur Guillaume Tavernier et des éditions Ludospherik. Merci à eux !.
|
||||
<p>Tout le support et le suivi de ce système es disponible via le Discord Foundry FR : https://discord.gg/pPSDNJk </p>
|
||||
<p>Bon jeu en Lemurie !</p>
|
||||
` });
|
||||
<strong>` + game.i18n.localize("BOL.chat.welcome1") + `</strong><p>` +
|
||||
game.i18n.localize("BOL.chat.welcome2") + "<p>" +
|
||||
game.i18n.localize("BOL.chat.welcome3") + "<p>" +
|
||||
game.i18n.localize("BOL.chat.welcome4") + "</p>" +
|
||||
game.i18n.localize("BOL.chat.welcome5") + "<br>" +
|
||||
game.i18n.localize("BOL.chat.welcome6")
|
||||
} )
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
Hooks.once('ready', async function () {
|
||||
|
||||
BoLUtility.ready()
|
||||
BoLCharacterSummary.ready()
|
||||
|
||||
registerUsageCount('bol')
|
||||
|
||||
|
||||
welcomeMessage()
|
||||
});
|
||||
})
|
||||
|
||||
|
||||
|
@ -7,7 +7,7 @@ export class BoLRoll {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static options() {
|
||||
return { classes: ["bol", "dialog"], width: 480, height: 540 };
|
||||
return { classes: ["bol", "dialog"], width: 480, height: 'fit-content' };
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -16,25 +16,57 @@ export class BoLRoll {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static attributeCheck(actor, key) {
|
||||
static updateApplicableEffects(rollData) {
|
||||
let appEffects = []
|
||||
for( let effect of rollData.bolEffects) {
|
||||
if(effect.system.properties.identifier =="always") {
|
||||
appEffects.push(effect)
|
||||
} else if (effect.system.properties.identifier.includes(rollData.attribute.key)) {
|
||||
appEffects.push(effect)
|
||||
} else if ( rollData.aptitude && effect.system.properties.identifier.includes(rollData.aptitude.key)) {
|
||||
appEffects.push(effect)
|
||||
}
|
||||
}
|
||||
return appEffects
|
||||
}
|
||||
|
||||
let attribute = eval(`actor.data.data.attributes.${key}`)
|
||||
let label = (attribute.label) ? game.i18n.localize(attribute.label) : null
|
||||
let description = game.i18n.localize('BOL.ui.attributeCheck') + " - " + game.i18n.localize(attribute.label)
|
||||
/* -------------------------------------------- */
|
||||
static getCommonRollData(actor, mode, attribute, aptitude = undefined ) {
|
||||
|
||||
let rollData = {
|
||||
mode: "attribute",
|
||||
mode: mode,
|
||||
actorId: actor.id,
|
||||
tokenId: actor.token?.id,
|
||||
img: actor.img,
|
||||
attribute: attribute,
|
||||
attrValue: attribute.value,
|
||||
aptValue: 0,
|
||||
label: label,
|
||||
careerBonus: 0,
|
||||
description: description,
|
||||
armorAgiMalus: actor.getArmorAgiMalus(),
|
||||
armorInitMalus: actor.getArmorInitMalus(),
|
||||
mod: 0
|
||||
adv: "0",
|
||||
mod: 0,
|
||||
modRanged: 0,
|
||||
aptValue: 0,
|
||||
bolEffects: actor.boleffects
|
||||
}
|
||||
if (aptitude) {
|
||||
rollData.aptitude = aptitude
|
||||
rollData.aptValue = aptitude.value
|
||||
}
|
||||
rollData.bolApplicableEffects = this.updateApplicableEffects(rollData)
|
||||
return rollData
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static attributeCheck(actor, key) {
|
||||
|
||||
let attribute = eval(`actor.system.attributes.${key}`)
|
||||
|
||||
let rollData = this.getCommonRollData(actor, "attribute", attribute)
|
||||
rollData.description = game.i18n.localize('BOL.ui.attributeCheck') + " - " + game.i18n.localize(attribute.label)
|
||||
rollData.label = (attribute.label) ? game.i18n.localize(attribute.label) : null
|
||||
|
||||
console.log(">>>>>>>>>>", rollData, actor)
|
||||
return this.displayRollDialog(rollData)
|
||||
}
|
||||
@ -42,27 +74,54 @@ export class BoLRoll {
|
||||
/* -------------------------------------------- */
|
||||
static aptitudeCheck(actor, key) {
|
||||
|
||||
let aptitude = eval(`actor.data.data.aptitudes.${key}`)
|
||||
let aptitude = eval(`actor.system.aptitudes.${key}`)
|
||||
let attrKey = this.getDefaultAttribute(key)
|
||||
let attribute = eval(`actor.data.data.attributes.${attrKey}`)
|
||||
let attribute = eval(`actor.system.attributes.${attrKey}`)
|
||||
|
||||
let label = (aptitude.label) ? game.i18n.localize(aptitude.label) : null;
|
||||
let description = game.i18n.localize('BOL.ui.aptitudeCheck') + " - " + game.i18n.localize(aptitude.label);
|
||||
return this.displayRollDialog(
|
||||
{
|
||||
mode: "aptitude",
|
||||
actorId: actor.id,
|
||||
attribute: attribute,
|
||||
aptitude: aptitude,
|
||||
attrValue: attribute.value,
|
||||
aptValue: aptitude.value,
|
||||
armorAgiMalus: actor.getArmorAgiMalus(),
|
||||
armorInitMalus: actor.getArmorInitMalus(),
|
||||
label: label,
|
||||
careerBonus: 0,
|
||||
description: description,
|
||||
mod: 0
|
||||
let rollData = this.getCommonRollData(actor, "aptitude", attribute, aptitude)
|
||||
|
||||
rollData.label = (aptitude.label) ? game.i18n.localize(aptitude.label) : null
|
||||
rollData.description = game.i18n.localize('BOL.ui.aptitudeCheck') + " - " + game.i18n.localize(aptitude.label)
|
||||
|
||||
return this.displayRollDialog( rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async detectDistance( weapon, target ) {
|
||||
let visible, dist
|
||||
if (weapon.system.properties.ranged || weapon.system.properties.throwing) {
|
||||
console.log("target", target, weapon)
|
||||
visible = canvas.effects.visibility.testVisibility(target.center, { object: _token })
|
||||
dist = Number(canvas.grid.measureDistances([{ ray: new Ray(_token.center, target.center) }], { gridSpaces: false })).toFixed(2)
|
||||
let range = Number(weapon.system.properties.range)
|
||||
let rangeMsg = "BOL.chat.rangeout"
|
||||
if ( dist <= range) {
|
||||
rangeMsg = "BOL.chat.range0"
|
||||
} else if (dist < range*2) {
|
||||
rangeMsg = "BOL.chat.range1"
|
||||
} else if (dist < range*3) {
|
||||
rangeMsg = "BOL.chat.range2"
|
||||
} else if (dist < range*4) {
|
||||
rangeMsg = "BOL.chat.range3"
|
||||
} else if (dist < range*5) {
|
||||
rangeMsg = "BOL.chat.range4"
|
||||
} else if (dist < range*6) {
|
||||
rangeMsg = "BOL.chat.range5"
|
||||
} else if (dist < range*7) {
|
||||
rangeMsg = "BOL.chat.range6"
|
||||
}
|
||||
ChatMessage.create({
|
||||
content: await renderTemplate('systems/bol/templates/chat/chat-info-range.hbs', {
|
||||
weapon: weapon,
|
||||
attackerName: _token.actor.name,
|
||||
defenderName: target.actor.name,
|
||||
weaponRange: weapon.system.properties.range,
|
||||
visible: visible,
|
||||
distance: dist,
|
||||
rangeMsg: rangeMsg
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -70,120 +129,105 @@ export class BoLRoll {
|
||||
|
||||
let target = BoLUtility.getTarget()
|
||||
|
||||
let weaponData = weapon.data.data
|
||||
let attribute = eval(`actor.data.data.attributes.${weaponData.properties.attackAttribute}`)
|
||||
let aptitude = eval(`actor.data.data.aptitudes.${weaponData.properties.attackAptitude}`)
|
||||
let weaponData = weapon.system
|
||||
let attribute = eval(`actor.system.attributes.${weaponData.properties.attackAttribute}`)
|
||||
let aptitude = eval(`actor.system.aptitudes.${weaponData.properties.attackAptitude}`)
|
||||
|
||||
let rollData = this.getCommonRollData(actor, "weapon", attribute, aptitude)
|
||||
|
||||
// Compute distance
|
||||
this.detectDistance( weapon, target)
|
||||
|
||||
// Manage specific case
|
||||
let fightOption = actor.getActiveFightOption()
|
||||
if (fightOption && fightOption.data.fightoptiontype == "fulldefense") {
|
||||
if (fightOption && fightOption.system.fightoptiontype == "fulldefense") {
|
||||
ui.notifications.warn(`{{actor.name}} est en Défense Totale ! Il ne peut pas attaquer ce round.`)
|
||||
return
|
||||
}
|
||||
// Build the roll structure
|
||||
let rolldata = {
|
||||
mode: "weapon",
|
||||
actorId: actor.id,
|
||||
weapon: weapon,
|
||||
isRanged: weaponData.properties.ranged || weaponData.properties.throwing,
|
||||
targetId: target?.id,
|
||||
fightOption: fightOption,
|
||||
careerBonus: 0,
|
||||
defenderId: target?.data?.actorId,
|
||||
attribute: attribute,
|
||||
aptitude: aptitude,
|
||||
attrValue: attribute.value,
|
||||
aptValue: aptitude.value,
|
||||
armorAgiMalus: actor.getArmorAgiMalus(),
|
||||
armorInitMalus: actor.getArmorInitMalus(),
|
||||
mod: 0,
|
||||
modRanged: 0,
|
||||
label: (weapon.name) ? weapon.name : game.i18n.localize('BOL.ui.noWeaponName'),
|
||||
description: game.i18n.localize('BOL.ui.weaponAttack') + " : " + weapon.name,
|
||||
}
|
||||
return this.displayRollDialog(rolldata)
|
||||
|
||||
// Update the roll structure
|
||||
rollData.weapon = weapon
|
||||
rollData.isRanged = weaponData.properties.ranged || weaponData.properties.throwing
|
||||
rollData.targetId = target?.id
|
||||
rollData.fightOption = fightOption
|
||||
rollData.defenderId = target?.actor.id
|
||||
rollData.label = (weapon.name) ? weapon.name : game.i18n.localize('BOL.ui.noWeaponName')
|
||||
rollData.description = game.i18n.localize('BOL.ui.weaponAttack') + " : " + weapon.name
|
||||
|
||||
return this.displayRollDialog(rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static weaponCheck(actor, event) {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
const weapon = actor.items.get(li.data("item-id"))
|
||||
let weapon = actor.items.get(li.data("item-id"))
|
||||
if (!weapon) {
|
||||
ui.notifications.warn("Unable to find weapon !")
|
||||
return
|
||||
}
|
||||
weapon = duplicate(weapon)
|
||||
return this.weaponCheckWithWeapon(actor, weapon)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static alchemyCheck(actor, event) {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
const alchemy = actor.items.get(li.data("item-id"));
|
||||
let alchemy = actor.items.get(li.data("item-id"));
|
||||
if (!alchemy) {
|
||||
ui.notifications.warn("Unable to find Alchemy !");
|
||||
return;
|
||||
}
|
||||
let alchemyData = alchemy.data.data
|
||||
alchemy = duplicate(alchemy)
|
||||
let alchemyData = alchemy.system
|
||||
if (alchemyData.properties.pccurrent < alchemyData.properties.pccost) {
|
||||
ui.notifications.warn("Pas assez de Points de Cration investis dans la Préparation !")
|
||||
ui.notifications.warn("Pas assez de Points de Création investis dans la Préparation !")
|
||||
return
|
||||
}
|
||||
|
||||
let alchemyDef = {
|
||||
mode: "alchemy",
|
||||
actorId: actor.id,
|
||||
alchemy: alchemy,
|
||||
attribute: actor.data.data.attributes.mind,
|
||||
attrValue: actor.data.data.attributes.mind.value,
|
||||
aptValue: 0,
|
||||
careerBonus: actor.getAlchemistBonus(),
|
||||
pcCost: Number(alchemyData.properties.pccost),
|
||||
pcCostCurrent: Number(alchemyData.properties.pccurrent),
|
||||
mod: Number(alchemyData.properties.difficulty),
|
||||
armorAgiMalus: actor.getArmorAgiMalus(),
|
||||
armorInitMalus: actor.getArmorInitMalus(),
|
||||
label: alchemy.name,
|
||||
description: game.i18n.localize('BOL.ui.makeAlchemy') + "+" + alchemy.name,
|
||||
}
|
||||
let rollData = this.getCommonRollData(actor, "alchemy", actor.system.attributes.mind)
|
||||
|
||||
rollData.alchemy = alchemy
|
||||
rollData.careerBonus = actor.getAlchemistBonus()
|
||||
rollData.pcCost = Number(alchemyData.properties.pccost)
|
||||
rollData.pcCostCurrent = Number(alchemyData.properties.pccurrent)
|
||||
rollData.mod = Number(alchemyData.properties.difficulty)
|
||||
rollData.label = alchemy.name
|
||||
rollData.description = game.i18n.localize('BOL.ui.makeAlchemy') + "+" + alchemy.name
|
||||
|
||||
console.log("ALCHEMY!", alchemyDef);
|
||||
return this.displayRollDialog(alchemyDef);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static spellCheckWithSpell( actor, spell ) {
|
||||
let spellData = spell.data.data
|
||||
let spellDef = {
|
||||
mode: "spell",
|
||||
actorId: actor.id,
|
||||
spell: spell,
|
||||
attribute: actor.data.data.attributes.mind,
|
||||
attrValue: actor.data.data.attributes.mind.value,
|
||||
aptValue: 0,
|
||||
ppCurrent: Number(actor.data.data.resources.power.value),
|
||||
careerBonus: actor.getSorcererBonus(),
|
||||
ppCostArmor: actor.getPPCostArmor(),
|
||||
ppCost: Number(spell.data.data.properties.ppcost),
|
||||
mod: Number(spellData.properties.difficulty),
|
||||
armorAgiMalus: actor.getArmorAgiMalus(),
|
||||
armorInitMalus: actor.getArmorInitMalus(),
|
||||
label: spell.name,
|
||||
description: game.i18n.localize('BOL.ui.focusSpell') + " : " + spell.name,
|
||||
}
|
||||
console.log("SPELL!", spellDef)
|
||||
return this.displayRollDialog(spellDef)
|
||||
let rollData = this.getCommonRollData(actor, "spell", actor.system.attributes.mind)
|
||||
|
||||
rollData.spell = spell
|
||||
rollData.ppCurrent = Number(actor.system.resources.power.value),
|
||||
rollData.careerBonus = actor.getSorcererBonus(),
|
||||
rollData.ppCostArmor = actor.getPPCostArmor(),
|
||||
rollData.ppCost = Number(spell.system.properties.ppcost),
|
||||
rollData.mod = Number(spell.system.properties.difficulty),
|
||||
rollData.label = spell.name,
|
||||
rollData.description = game.i18n.localize('BOL.ui.focusSpell') + " : " + spell.name
|
||||
|
||||
//console.log("SPELL!", spellDef)
|
||||
return this.displayRollDialog(rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static spellCheck(actor, event) {
|
||||
if (actor.data.data.resources.power.value <= 0) {
|
||||
if (actor.system.resources.power.value <= 0) {
|
||||
ui.notifications.warn("Plus assez de points de Pouvoir !")
|
||||
return
|
||||
}
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
const spell = actor.items.get(li.data("item-id"))
|
||||
let spell = actor.items.get(li.data("item-id"))
|
||||
if (!spell) {
|
||||
ui.notifications.warn("Impossible de trouver ce sort !")
|
||||
return
|
||||
}
|
||||
spell = duplicate(spell)
|
||||
return this.spellCheckWithSpell( actor, spell)
|
||||
}
|
||||
|
||||
@ -193,8 +237,29 @@ export class BoLRoll {
|
||||
this.updateArmorMalus(this.rollData)
|
||||
this.updatePPCost(this.rollData)
|
||||
|
||||
// get basic dices from boons/flaws
|
||||
let effectModifier = 0
|
||||
this.rollData.bmDice = this.rollData.nbBoons - this.rollData.nbFlaws + this.rollData.bDice - this.rollData.mDice
|
||||
// add applicable bonus/malus dices effects
|
||||
for (let effect of this.rollData.bolApplicableEffects) {
|
||||
if (effect.system.properties.modifier == "1B") {
|
||||
this.rollData.bmDice++;
|
||||
} else if (effect.system.properties.modifier == "1B") {
|
||||
this.rollData.bmDice+=2;
|
||||
} else if (effect.system.properties.modifier == "1M") {
|
||||
this.rollData.bmDice--;
|
||||
} else if (effect.system.properties.modifier == "2M") {
|
||||
this.rollData.bmDice-=2;
|
||||
} else {
|
||||
effectModifier += Number(effect.system.properties.modifier)
|
||||
}
|
||||
}
|
||||
// Keep track of the final effect modifier
|
||||
this.rollData.effectModifier = effectModifier
|
||||
|
||||
// Final number of dices
|
||||
this.rollData.nbDice = 2 + Math.abs(this.rollData.bmDice)
|
||||
// Bonus or Malus ?
|
||||
if (this.rollData.bmDice == 0) {
|
||||
$('#roll-nbdice').val("2")
|
||||
} else {
|
||||
@ -202,12 +267,19 @@ export class BoLRoll {
|
||||
$('#roll-nbdice').val("2 + " + String(Math.abs(this.rollData.bmDice)) + letter)
|
||||
}
|
||||
let rollbase = this.rollData.attrValue + "+" + this.rollData.aptValue
|
||||
if ( this.rollData.weapon && this.rollData.weapon.data.data.properties.onlymodifier ) {
|
||||
if ( this.rollData.weapon && this.rollData.weapon.system.properties.onlymodifier ) {
|
||||
rollbase = ""
|
||||
}
|
||||
$('#roll-modifier').val(rollbase + "+" + this.rollData.careerBonus + "+" + this.rollData.mod + "+" +
|
||||
this.rollData.modRanged + "+" + this.rollData.weaponModifier + "-" + this.rollData.defence + "-" + this.rollData.modArmorMalus + "-" +
|
||||
this.rollData.shieldMalus + "+" + this.rollData.attackModifier + "+" + this.rollData.appliedArmorMalus)
|
||||
this.rollData.shieldMalus + "+" + this.rollData.attackModifier + "+" + this.rollData.appliedArmorMalus + "+" + effectModifier)
|
||||
|
||||
// Rebuild lits of applicable effects
|
||||
let selectEffects = ""
|
||||
for(let effect of this.rollData.bolApplicableEffects) {
|
||||
selectEffects += `<option value="${effect.id}" selected>${effect.name}</option>`
|
||||
}
|
||||
$('#applicable-effects').html(selectEffects)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -219,20 +291,20 @@ export class BoLRoll {
|
||||
let fgItem = rollData.fightOption
|
||||
if (fgItem) {
|
||||
console.log(fgItem)
|
||||
if (fgItem.data.properties.fightoptiontype == "armordefault") {
|
||||
if (fgItem.system.properties.fightoptiontype == "armordefault") {
|
||||
rollData.modArmorMalus = rollData.armorMalus // Activate the armor malus
|
||||
rollData.damagesIgnoresArmor = true
|
||||
}
|
||||
if (fgItem.data.properties.fightoptiontype == "intrepid") {
|
||||
if (fgItem.system.properties.fightoptiontype == "intrepid") {
|
||||
rollData.attackModifier += 2
|
||||
}
|
||||
if (fgItem.data.properties.fightoptiontype == "defense") {
|
||||
if (fgItem.system.properties.fightoptiontype == "defense") {
|
||||
rollData.attackModifier += -1
|
||||
}
|
||||
if (fgItem.data.properties.fightoptiontype == "attack") {
|
||||
if (fgItem.system.properties.fightoptiontype == "attack") {
|
||||
rollData.attackModifier += 1
|
||||
}
|
||||
if (fgItem.data.properties.fightoptiontype == "twoweaponsdef" || fgItem.data.properties.fightoptiontype == "twoweaponsatt") {
|
||||
if (fgItem.system.properties.fightoptiontype == "twoweaponsdef" || fgItem.system.properties.fightoptiontype == "twoweaponsatt") {
|
||||
rollData.attackModifier += -1
|
||||
}
|
||||
}
|
||||
@ -281,16 +353,18 @@ export class BoLRoll {
|
||||
|
||||
html.find('#attr').change((event) => {
|
||||
let attrKey = event.currentTarget.value
|
||||
let actor = game.actors.get( this.rollData.actorId)
|
||||
this.rollData.attribute = duplicate(actor.data.data.attributes[attrKey])
|
||||
this.rollData.attrValue = actor.data.data.attributes[attrKey].value
|
||||
let actor = BoLUtility.getActorFromRollData(this.rollData)
|
||||
this.rollData.attribute = duplicate(actor.system.attributes[attrKey])
|
||||
this.rollData.attrValue = actor.system.attributes[attrKey].value
|
||||
this.rollData.bolApplicableEffects = this.updateApplicableEffects(this.rollData)
|
||||
this.updateTotalDice()
|
||||
})
|
||||
html.find('#apt').change((event) => {
|
||||
let aptKey = event.currentTarget.value
|
||||
let actor = game.actors.get( this.rollData.actorId)
|
||||
this.rollData.aptitude = duplicate(actor.data.data.aptitudes[aptKey])
|
||||
this.rollData.aptValue = actor.data.data.aptitudes[aptKey].value
|
||||
let actor = BoLUtility.getActorFromRollData(this.rollData)
|
||||
this.rollData.aptitude = duplicate(actor.system.aptitudes[aptKey])
|
||||
this.rollData.aptValue = actor.system.aptitudes[aptKey].value
|
||||
this.rollData.bolApplicableEffects = this.updateApplicableEffects(this.rollData)
|
||||
this.updateTotalDice()
|
||||
})
|
||||
|
||||
@ -309,12 +383,12 @@ export class BoLRoll {
|
||||
})
|
||||
html.find('#boon').change((event) => {
|
||||
let boons = $('#boon').val()
|
||||
this.rollData.nbBoons = (!boons || boons.length == 0) ? 0 : Math.max(...boons.map(i => parseInt(i)))
|
||||
this.rollData.nbBoons = (!boons || boons.length == 0) ? 0 : boons.length
|
||||
this.updateTotalDice()
|
||||
})
|
||||
html.find('#flaw').change((event) => {
|
||||
let flaws = $('#flaw').val()
|
||||
this.rollData.nbFlaws = (!flaws || flaws.length == 0) ? 0 : Math.max(...flaws.map(i => parseInt(i)))
|
||||
this.rollData.nbFlaws = (!flaws || flaws.length == 0) ? 0 : flaws.length
|
||||
this.updateTotalDice()
|
||||
})
|
||||
html.find('.bdice').click((event) => {
|
||||
@ -330,18 +404,22 @@ export class BoLRoll {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static preProcessWeapon(rollData) {
|
||||
static preProcessWeapon(rollData, defender) {
|
||||
if (rollData.mode == "weapon") {
|
||||
rollData.weaponModifier = rollData.weapon.data.data.properties.attackModifiers ?? 0;
|
||||
rollData.attackBonusDice = rollData.weapon.data.data.properties.attackBonusDice
|
||||
if (rollData.defender) { // If target is selected
|
||||
rollData.defence = rollData.defender.defenseValue
|
||||
rollData.armorMalus = rollData.defender.armorMalusValue
|
||||
rollData.weaponModifier = rollData.weapon.system.properties.attackModifiers ?? 0
|
||||
rollData.attackBonusDice = rollData.weapon.system.properties.attackBonusDice
|
||||
if ( rollData.attackBonusDice) {
|
||||
rollData.adv = "1B"
|
||||
rollData.bDice = 1
|
||||
}
|
||||
if (defender) { // If target is selected
|
||||
rollData.defence = defender.defenseValue
|
||||
rollData.armorMalus = defender.armorMalusValue
|
||||
rollData.shieldBlock = 'none'
|
||||
let shields = rollData.defender.shields
|
||||
let shields = defender.shields
|
||||
for (let shield of shields) {
|
||||
rollData.shieldBlock = (shield.data.properties.blocking.blockingAll) ? 'blockall' : 'blockone';
|
||||
rollData.shieldAttackMalus = (shield.data.properties.blocking.malus) ? shield.data.properties.blocking.malus : 1;
|
||||
rollData.shieldBlock = (shield.system.properties.blocking.blockingAll) ? 'blockall' : 'blockone';
|
||||
rollData.shieldAttackMalus = (shield.system.properties.blocking.malus) ? shield.system.properties.blocking.malus : 1;
|
||||
rollData.applyShieldMalus = false
|
||||
}
|
||||
}
|
||||
@ -355,7 +433,13 @@ export class BoLRoll {
|
||||
// initialize default flags/values
|
||||
const rollOptionTpl = `systems/bol/templates/dialogs/${rollData.mode}-roll-dialog.hbs`
|
||||
|
||||
let actor = game.actors.get( rollData.actorId )
|
||||
let actor = BoLUtility.getActorFromRollData(rollData)
|
||||
let defender
|
||||
if ( rollData.targetId) {
|
||||
let token = game.scenes.current.tokens.get(rollData.targetId)
|
||||
defender = token.actor
|
||||
}
|
||||
|
||||
rollData.careers = actor.careers
|
||||
rollData.boons = actor.bonusBoons
|
||||
rollData.flaws = actor.malusFlaws
|
||||
@ -381,7 +465,7 @@ export class BoLRoll {
|
||||
rollData.attackBonusDice = false
|
||||
rollData.armorMalus = 0
|
||||
// Specific stuff
|
||||
this.preProcessWeapon(rollData)
|
||||
this.preProcessWeapon(rollData, defender)
|
||||
this.preProcessFightOption(rollData)
|
||||
this.updateArmorMalus(rollData)
|
||||
this.updatePPCost(rollData)
|
||||
@ -411,17 +495,18 @@ export class BoLRoll {
|
||||
ui.notifications.warn("Pas assez de Points de Pouvoir !")
|
||||
return
|
||||
}
|
||||
//console.log("ROLLMALUS", rollData)
|
||||
|
||||
rollData.registerInit = (rollData.aptitude && rollData.aptitude.key == 'init') ? $('#register-init').is(":checked") : false;
|
||||
|
||||
const isMalus = rollData.mDice > 0
|
||||
rollData.nbDice += (rollData.attackBonusDice) ? 1 : 0
|
||||
|
||||
const isMalus = (rollData.bmDice < 0)
|
||||
//rollData.nbDice += (rollData.attackBonusDice) ? 1 : 0
|
||||
|
||||
let rollbase = rollData.attrValue + rollData.aptValue
|
||||
if ( rollData.weapon && rollData.weapon.data.data.properties.onlymodifier ) {
|
||||
if ( rollData.weapon && rollData.weapon.system.properties.onlymodifier ) {
|
||||
rollbase = 0
|
||||
}
|
||||
const modifiers = rollbase + rollData.careerBonus + rollData.mod + rollData.weaponModifier - rollData.defence - rollData.modArmorMalus + rollData.shieldMalus + rollData.attackModifier + rollData.appliedArmorMalus
|
||||
const modifiers = rollbase + rollData.careerBonus + rollData.mod + rollData.weaponModifier - rollData.defence - rollData.modArmorMalus + rollData.shieldMalus + rollData.attackModifier + rollData.appliedArmorMalus + rollData.effectModifier
|
||||
const formula = (isMalus) ? rollData.nbDice + "d6kl2 + " + modifiers : rollData.nbDice + "d6kh2 + " + modifiers
|
||||
rollData.formula = formula
|
||||
rollData.modifiers = modifiers
|
||||
@ -443,7 +528,6 @@ export class BoLRoll {
|
||||
export class BoLDefaultRoll {
|
||||
|
||||
constructor(rollData) {
|
||||
BoLUtility.storeRoll(rollData)
|
||||
this.rollData = rollData
|
||||
if (this.rollData.isSuccess == undefined) { // First init
|
||||
this.rollData.isSuccess = false;
|
||||
@ -451,10 +535,10 @@ export class BoLDefaultRoll {
|
||||
this.rollData.isFumble = false;
|
||||
}
|
||||
if (this.rollData.optionsId) {
|
||||
$(`#${this.rollData.optionsId}`).hide() // Hide the options roll buttons
|
||||
BoLUtility.cleanupButtons( this.rollData.optionsId)
|
||||
}
|
||||
if (this.rollData.applyId) {
|
||||
$(`#${this.rollData.applyId}`).hide() // Hide the options roll buttons
|
||||
BoLUtility.cleanupButtons( this.rollData.applyId)
|
||||
}
|
||||
this.rollData.optionsId = randomID(16)
|
||||
this.rollData.applyId = randomID(16)
|
||||
@ -464,7 +548,7 @@ export class BoLDefaultRoll {
|
||||
async roll() {
|
||||
|
||||
const r = new Roll(this.rollData.formula)
|
||||
// console.log("Roll formula", this.rollData.formula)
|
||||
//console.log("Roll formula", this.rollData.formula)
|
||||
await r.roll({ "async": false })
|
||||
const activeDice = r.terms[0].results.filter(r => r.active)
|
||||
const diceTotal = activeDice.map(r => r.result).reduce((a, b) => a + b)
|
||||
@ -476,20 +560,27 @@ export class BoLDefaultRoll {
|
||||
this.rollData.isLegendary = false
|
||||
this.rollData.isFumble = (diceTotal === 2)
|
||||
this.rollData.isFailure = !this.rollData.isSuccess
|
||||
|
||||
let actor = game.actors.get( this.rollData.actorId)
|
||||
|
||||
//this.rollData.isRealCritical = true
|
||||
//this.rollData.isFumble = true
|
||||
|
||||
let actor = BoLUtility.getActorFromRollData(this.rollData)
|
||||
if (this.rollData.reroll == undefined) {
|
||||
this.rollData.reroll = actor.heroReroll()
|
||||
}
|
||||
|
||||
if (this.rollData.registerInit) {
|
||||
actor.registerInit(r.total, this.rollData.isCritical, this.rollData.isFumble)
|
||||
actor.registerInit(this.rollData)
|
||||
this.rollData.initiativeRank = actor.getInitiativeRank(this.rollData)
|
||||
}
|
||||
if (this.rollData.isSuccess && this.rollData.mode == "spell") { // PP cost management
|
||||
actor.spendPowerPoint(this.rollData.ppCost + this.rollData.ppCostArmor)
|
||||
this.rollData.remainingPP = actor.spendPowerPoint(this.rollData.ppCost + this.rollData.ppCostArmor)
|
||||
}
|
||||
if (this.rollData.mode == "alchemy") { // PP cost management
|
||||
actor.resetAlchemyStatus(this.rollData.alchemy.id)
|
||||
actor.resetAlchemyStatus(this.rollData.alchemy._id)
|
||||
}
|
||||
if ( this.rollData.mode == "bougette" && this.rollData.isFailure) {
|
||||
actor.decBougette()
|
||||
}
|
||||
|
||||
await this.sendChatMessage()
|
||||
@ -497,15 +588,16 @@ export class BoLDefaultRoll {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async sendChatMessage() {
|
||||
let actor = game.actors.get( this.rollData.actorId)
|
||||
this._buildChatMessage(this.rollData).then(msgFlavor => {
|
||||
this.rollData.roll.toMessage({
|
||||
let actor = BoLUtility.getActorFromRollData(this.rollData)
|
||||
this._buildChatMessage(this.rollData).then( async msgFlavor => {
|
||||
let msg = await this.rollData.roll.toMessage({
|
||||
user: game.user.id,
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
//whisper: BoLUtility.getWhisperRecipientsAndGMs(this.rollData.actor.name),
|
||||
flavor: msgFlavor,
|
||||
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
||||
})
|
||||
msg.setFlag("world", "bol-roll-data", this.rollData)
|
||||
})
|
||||
}
|
||||
|
||||
@ -543,34 +635,29 @@ export class BoLDefaultRoll {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async sendDamageMessage() {
|
||||
let actor = game.actors.get( this.rollData.actorId)
|
||||
this._buildDamageChatMessage(this.rollData).then(msgFlavor => {
|
||||
this.rollData.damageRoll.toMessage({
|
||||
let actor = BoLUtility.getActorFromRollData(this.rollData)
|
||||
this._buildDamageChatMessage(this.rollData).then(async msgFlavor => {
|
||||
let msg = await this.rollData.damageRoll.toMessage({
|
||||
user: game.user.id,
|
||||
flavor: msgFlavor,
|
||||
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
||||
flags: { msgType: "default" }
|
||||
})
|
||||
});
|
||||
this.rollData.actor = undefined // Cleanup
|
||||
msg.setFlag("world", "bol-roll-data", this.rollData)
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getDamageAttributeValue(attrDamage) {
|
||||
let attrDamageValue = 0
|
||||
let actor = game.actors.get( this.rollData.actorId)
|
||||
if (attrDamage.includes("vigor")) {
|
||||
attrDamageValue = actor.data.data.attributes.vigor.value
|
||||
if (attrDamage.includes("half")) {
|
||||
attrDamageValue = Math.floor(attrDamageValue / 2)
|
||||
}
|
||||
}
|
||||
return attrDamageValue
|
||||
getDamageAttributeValue(attrDamage, actorId = undefined) {
|
||||
let actor = BoLUtility.getActorFromRollData(this.rollData)
|
||||
return actor.getDamageAttributeValue( attrDamage )
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollDamage() {
|
||||
if (this.rollData.mode != "weapon") { // Only specific process in Weapon mode
|
||||
return;
|
||||
return
|
||||
}
|
||||
|
||||
if (this.rollData.isSuccess) {
|
||||
@ -582,8 +669,8 @@ export class BoLDefaultRoll {
|
||||
if (this.rollData.damageMode == 'damage-plus-12') {
|
||||
bonusDmg = 12
|
||||
}
|
||||
let attrDamageValue = this.getDamageAttributeValue(this.rollData.weapon.data.data.properties.damageAttribute)
|
||||
let weaponFormula = BoLUtility.getDamageFormula(this.rollData.weapon.data.data, this.rollData.fightOption)
|
||||
let attrDamageValue = this.getDamageAttributeValue(this.rollData.weapon.system.properties.damageAttribute)
|
||||
let weaponFormula = BoLUtility.getDamageFormula(this.rollData.weapon.system, this.rollData.fightOption)
|
||||
|
||||
let damageFormula = weaponFormula + "+" + bonusDmg + "+" + attrDamageValue
|
||||
console.log("DAMAGE !!!", damageFormula, attrDamageValue, this.rollData)
|
||||
@ -594,7 +681,7 @@ export class BoLDefaultRoll {
|
||||
await this.rollData.damageRoll.roll({ "async": false })
|
||||
this.rollData.damageTotal = this.rollData.damageRoll.total
|
||||
}
|
||||
$(`#${this.rollData.optionsId}`).hide() // Hide the options roll buttons
|
||||
BoLUtility.cleanupButtons(this.rollData.optionsId)
|
||||
this.sendDamageMessage()
|
||||
}
|
||||
}
|
||||
@ -607,8 +694,8 @@ export class BoLDefaultRoll {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_buildChatMessage(rollData) {
|
||||
const rollMessageTpl = 'systems/bol/templates/chat/rolls/default-roll-card.hbs';
|
||||
return renderTemplate(rollMessageTpl, rollData);
|
||||
const rollMessageTpl = 'systems/bol/templates/chat/rolls/default-roll-card.hbs'
|
||||
return renderTemplate(rollMessageTpl, rollData)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -19,43 +19,43 @@ export class BoLItemSheet extends ItemSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
getData(options) {
|
||||
const data = super.getData(options);
|
||||
const itemData = data.data;
|
||||
data.config = game.bol.config;
|
||||
data.item = itemData;
|
||||
data.data = itemData.data;
|
||||
data.category = itemData.category;
|
||||
data.itemProperties = this.item.itemProperties;
|
||||
async getData(options) {
|
||||
const data = super.getData(options)
|
||||
let itemData = duplicate(data.document)
|
||||
data.config = game.bol.config
|
||||
data.item = itemData
|
||||
data.category = itemData.system.category
|
||||
data.isGM = game.user.isGM;
|
||||
data.itemProperties = this.item.itemProperties;
|
||||
data.description = await TextEditor.enrichHTML(this.object.system.description, {async: true})
|
||||
|
||||
// Dynamic default data fix/adapt
|
||||
if (itemData.type == "item") {
|
||||
if (!itemData.data.category) {
|
||||
itemData.data.category = "equipment"
|
||||
if (!itemData.system.category) {
|
||||
itemData.system.category = "equipment"
|
||||
}
|
||||
if ( itemData.data.category == "equipment" && itemData.data.properties.equipable) {
|
||||
if (!itemData.data.properties.slot) {
|
||||
itemData.data.properties.slot = "-"
|
||||
if ( itemData.system.category == "equipment" && itemData.system.properties.equipable) {
|
||||
if (!itemData.system.properties.slot) {
|
||||
itemData.system.properties.slot = "-"
|
||||
}
|
||||
}
|
||||
if (itemData.data.category == 'spell') {
|
||||
if(!itemData.data.properties.mandatoryconditions) {
|
||||
itemData.data.properties.mandatoryconditions = []
|
||||
if (itemData.system.category == 'spell') {
|
||||
if(!itemData.system.properties.mandatoryconditions) {
|
||||
itemData.system.properties.mandatoryconditions = []
|
||||
}
|
||||
if(!itemData.data.properties.optionnalconditions) {
|
||||
itemData.data.properties.optionnalconditions = []
|
||||
if(!itemData.system.properties.optionnalconditions) {
|
||||
itemData.system.properties.optionnalconditions = []
|
||||
}
|
||||
for (let i = 0; i < 4; i++) {
|
||||
itemData.data.properties.mandatoryconditions[i] = itemData.data.properties.mandatoryconditions[i] ?? ""
|
||||
itemData.system.properties.mandatoryconditions[i] = itemData.system.properties.mandatoryconditions[i] ?? ""
|
||||
}
|
||||
for (let i = 0; i < 8; i++) {
|
||||
itemData.data.properties.optionnalconditions[i] = itemData.data.properties.optionnalconditions[i] ?? ""
|
||||
itemData.system.properties.optionnalconditions[i] = itemData.system.properties.optionnalconditions[i] ?? ""
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!itemData.data.subtype) {
|
||||
itemData.data.category = "origin"
|
||||
if (!itemData.system.subtype) {
|
||||
itemData.system.category = "origin"
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,21 +7,17 @@ export class BoLItem extends Item {
|
||||
* Augment the basic Item data model with additional dynamic data.
|
||||
*/
|
||||
prepareData() {
|
||||
super.prepareData();
|
||||
// console.debug("Item prepareData");
|
||||
// Get the Item's data
|
||||
const itemData = this.data;
|
||||
// console.log(itemData);
|
||||
const actorData = this.actor ? this.actor.data : {};
|
||||
const data = itemData.data;
|
||||
}
|
||||
super.prepareData()
|
||||
|
||||
get properties() {
|
||||
return this.data.properties;
|
||||
const actorData = this.actor ? this.actor.system : {}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
get properties() {
|
||||
return this.system.properties
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/**
|
||||
* Get the Array of item properties which are used in the small sidebar of the description tab
|
||||
* @return {Array}
|
||||
@ -29,11 +25,11 @@ export class BoLItem extends Item {
|
||||
*/
|
||||
get itemProperties() {
|
||||
const props = [];
|
||||
if ( this.data.type === "item" ) {
|
||||
const entries = Object.entries(this.data.data.properties);
|
||||
props.push(...entries.filter(e => e[1] === true).map(e => { return game.bol.config.itemProperties2[e[0]] }));
|
||||
if ( this.type === "item" ) {
|
||||
const entries = Object.entries(this.system.properties)
|
||||
props.push(...entries.filter(e => e[1] === true).map(e => { return game.bol.config.itemProperties2[e[0]] }))
|
||||
}
|
||||
return props.filter(p => !!p);
|
||||
return props.filter(p => !!p)
|
||||
}
|
||||
|
||||
|
||||
|
620
module/system/adventure_data.json
Normal file
620
module/system/adventure_data.json
Normal file
@ -0,0 +1,620 @@
|
||||
{
|
||||
"titre1": [
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Prophétie"
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Grottes",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Collines",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Voleurs",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Sorcier(s)",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": true
|
||||
},
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Bataille"
|
||||
},
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Légende"
|
||||
},
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Tour",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "l'",
|
||||
"name": "Ile",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Pirates",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Druide(s)",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": true
|
||||
},
|
||||
{
|
||||
"prefix": "le",
|
||||
"name": "Navire",
|
||||
"isCarriere": false
|
||||
},
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Couronne",
|
||||
"isObjet": true
|
||||
},
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Cité",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "le",
|
||||
"name": "Désert",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Bête(s)",
|
||||
"isEnnemi": true,
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Démon(s)",
|
||||
"isEnnemi": true,
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "le",
|
||||
"name": "Trésor",
|
||||
"isObjet": true
|
||||
},
|
||||
{
|
||||
"prefix": "l'",
|
||||
"name": "Epée",
|
||||
"isObjet": true
|
||||
},
|
||||
{
|
||||
"prefix": "l'",
|
||||
"name": "Arène",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Marais",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Seigneur(s)",
|
||||
"isEnnemi": true,
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Assassin(s)",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": true
|
||||
},
|
||||
{
|
||||
"prefix": "le",
|
||||
"name": "Culte",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": false
|
||||
},
|
||||
{
|
||||
"prefix": "le",
|
||||
"name": "Secret",
|
||||
"isCarriere": false
|
||||
},
|
||||
{
|
||||
"prefix": "le",
|
||||
"name": "Palais",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Mer",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Barbares",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": true
|
||||
},
|
||||
{
|
||||
"prefix": "le",
|
||||
"name": "Manuscrit",
|
||||
"isObjet": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Plaines",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "le",
|
||||
"name": "Sang",
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Tombe",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Forêt",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Esclaves",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Mendiant(s)",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Montagnes",
|
||||
"isCarriereLieu": true
|
||||
}
|
||||
],
|
||||
"titre2": [
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "mal"
|
||||
},
|
||||
{
|
||||
"prefix": "et le",
|
||||
"name": "Roi Maussade",
|
||||
"isEnnemi": true
|
||||
},
|
||||
{
|
||||
"prefix": "et la",
|
||||
"name": "pestilence",
|
||||
"isEnnemi": false
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Malakut",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "d'",
|
||||
"name": "Halakh",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "d'",
|
||||
"name": "Hyrdral",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "des",
|
||||
"name": "esprits abandonnés",
|
||||
"isEnnemi": true
|
||||
},
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "chaos",
|
||||
"isEnnemi": true
|
||||
},
|
||||
{
|
||||
"prefix": "de la",
|
||||
"name": "folie",
|
||||
"isEnnemi": false
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Satarla",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "d'",
|
||||
"name": "Urceb",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "des",
|
||||
"name": "Terres Désolées",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "de la",
|
||||
"name": "mort",
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "des",
|
||||
"name": "idoles impies",
|
||||
"isObjet": true
|
||||
},
|
||||
{
|
||||
"prefix": "des",
|
||||
"name": "ténèbres",
|
||||
"isObjet": false
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Parsool",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Qiddesh",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Kasht",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "de la ",
|
||||
"name": "falalité",
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "Nécromant",
|
||||
"isEnnemi": true
|
||||
},
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "Néant",
|
||||
"isEnnemi": false
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Lysor",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "d'",
|
||||
"name": "Oosal",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Thulé",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "désespoir",
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "Dieu Bouffi",
|
||||
"isEnnemi": true
|
||||
},
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "silence",
|
||||
"isEnnemi": false
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Tyrus",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "d'",
|
||||
"name": "Ygddar",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "la Côte de Feu",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "des",
|
||||
"name": "ombres cruelles",
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "de la",
|
||||
"name": "poussière écarlate",
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "destin",
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "Valgard",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Qeb",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "la Mer Inconnue",
|
||||
"isLieu": true
|
||||
}
|
||||
],
|
||||
"mission": [
|
||||
{
|
||||
"name": "d’attaquer un lieu."
|
||||
},
|
||||
{
|
||||
"name": "de détruire un certain objet."
|
||||
},
|
||||
{
|
||||
"name": "de kidnapper quelqu’un."
|
||||
},
|
||||
{
|
||||
"name": "d’obtenir une certaine chose."
|
||||
},
|
||||
{
|
||||
"name": "d’explorer un lieu."
|
||||
},
|
||||
{
|
||||
"name": "de sauver une personne."
|
||||
},
|
||||
{
|
||||
"name": "d’échapper à quelqu’un."
|
||||
},
|
||||
{
|
||||
"name": "de fuir un lieu."
|
||||
},
|
||||
{
|
||||
"name": "de trouver une personne."
|
||||
},
|
||||
{
|
||||
"name": "de trouver un lieu."
|
||||
},
|
||||
{
|
||||
"name": "de trouver chose."
|
||||
},
|
||||
{
|
||||
"name": "de protéger une personne."
|
||||
},
|
||||
{
|
||||
"name": "de protéger un lieu."
|
||||
},
|
||||
{
|
||||
"name": "de protéger chose."
|
||||
},
|
||||
{
|
||||
"name": "de dérober une certaine chose."
|
||||
},
|
||||
{
|
||||
"name": "de tuer une personne."
|
||||
},
|
||||
{
|
||||
"name": "de détruire une chose."
|
||||
},
|
||||
{
|
||||
"name": "d’escorter une personne."
|
||||
},
|
||||
{
|
||||
"name": "de transporter une chose."
|
||||
}
|
||||
],
|
||||
"carriere": [
|
||||
"Noble",
|
||||
"Acrobate",
|
||||
"Sorcier",
|
||||
"Alchimiste",
|
||||
"Esclave",
|
||||
"Courtisane",
|
||||
"Médecin",
|
||||
"Marin",
|
||||
"Érudit",
|
||||
"Mendiant",
|
||||
"Scribe",
|
||||
"Poète",
|
||||
"Forgeron",
|
||||
"Prêtre",
|
||||
"Danseur",
|
||||
"Marchand",
|
||||
"Pilote des airs",
|
||||
"Fermier"
|
||||
],
|
||||
"lieux1": [
|
||||
"Palais",
|
||||
"Donjon",
|
||||
"Ruines",
|
||||
"Sanctuaire",
|
||||
"Crypte",
|
||||
"Forteresse",
|
||||
"Tombeau",
|
||||
"Grottes",
|
||||
"Tour",
|
||||
"Antre",
|
||||
"Île",
|
||||
"Montagne"
|
||||
],
|
||||
"lieux2": [
|
||||
"de la mort.",
|
||||
"de la destruction.",
|
||||
"du désespoir.",
|
||||
"des morts-vivants.",
|
||||
"du sage.",
|
||||
"de l'or.",
|
||||
"de la tempête.",
|
||||
"de la terreur.",
|
||||
"descannibales.",
|
||||
"du désespoir.",
|
||||
"des Rois-Sorciers.",
|
||||
"des âmes perdues."
|
||||
],
|
||||
"objets1": [
|
||||
"Livre",
|
||||
"Anneau",
|
||||
"Coupe",
|
||||
"Joyau",
|
||||
"Casque",
|
||||
"Parchemin",
|
||||
"Couronne",
|
||||
"Sceau",
|
||||
"Cristal",
|
||||
"Crâne",
|
||||
"Épée",
|
||||
"Bâton"
|
||||
],
|
||||
"objets2": [
|
||||
"des sept sceaux.",
|
||||
"de l'éternelle douleur.",
|
||||
"du sang bouillonnant.",
|
||||
"de la mort hideuse.",
|
||||
"du pouvoir suprême.",
|
||||
"du serpent sournois.",
|
||||
"du plaisir infini.",
|
||||
"de la richesse illusoire.",
|
||||
"de la cruelle trahison.",
|
||||
"du froid funeste.",
|
||||
"des spectres inapaisés.",
|
||||
"du mystère."
|
||||
],
|
||||
"motivation": [
|
||||
"c’est le genre de choses que fait Krongar.",
|
||||
"sinon il finira en prison.",
|
||||
"il est victime d’un chantage.",
|
||||
"il a trouvé une carte.",
|
||||
"il a été maudit.",
|
||||
"il a eu une vision (peut-être un soir de beuverie).",
|
||||
"il a été engagé pour le faire.",
|
||||
"il a surpris une conversation.",
|
||||
"il a lu quelque chose dans un ancien manuscrit.",
|
||||
"il est tombé accidentellement dans cette affaire.",
|
||||
"il cherche à assouvir une vengeance.",
|
||||
"il a ,été dupé."
|
||||
],
|
||||
"rival": [
|
||||
"un poète obsédé.",
|
||||
"un prince (esse) guerrier.",
|
||||
"un ministre corrompu.",
|
||||
"un sectateur fanatique.",
|
||||
"un noble arrogant.",
|
||||
"un étrange alchimiste.",
|
||||
"un sorcier maléfique.",
|
||||
"un druide cruel.",
|
||||
"un marchand cupide.",
|
||||
"un brigand sans foi ni loi.",
|
||||
"un démon sanguinaire.",
|
||||
"un fantôme errant."
|
||||
],
|
||||
"dieu": [
|
||||
"Tharungozoth",
|
||||
"Yrzlak",
|
||||
"Dyr",
|
||||
"Knothakon",
|
||||
"Hadron",
|
||||
"Shazzadion",
|
||||
"Chiomalla",
|
||||
"Sa’Tel",
|
||||
"Morgazzon",
|
||||
"Hurm",
|
||||
"Afyra",
|
||||
"Grondil",
|
||||
"Zaggath",
|
||||
"Zalkyr",
|
||||
"Fillana",
|
||||
"Lilandra",
|
||||
"Zylidith",
|
||||
"Quathoomar",
|
||||
"Iondal",
|
||||
"Piandra",
|
||||
"Nemmereth",
|
||||
"Charkond",
|
||||
"Karyzon",
|
||||
"Zarymphyxos",
|
||||
"Kryphondus"
|
||||
],
|
||||
"complique1": [
|
||||
"c’est toujours comme ça avec Krongar !",
|
||||
"la situation réveille chez Krongar des peurs ancestrales.",
|
||||
"un usurier et ses hommes de main veulent récupérer leur argent.",
|
||||
"une grave épidémie ravage la région.",
|
||||
"Krongar est traqué pour un crime passé.",
|
||||
"les actions d’un groupe de rebelles rendent la région peu sûre.",
|
||||
"des hordes de guerriers envahissent la région pour la conquérir",
|
||||
"un(e) ancien(ne) admirateur (trice) éconduit(e) cherche à se venger.",
|
||||
"la loi locale est très sévère et interdit une chose nécessaire à l’accomplissement de la mission.",
|
||||
"un(e) admirateur (trice) inattendu(e) déclare son amour.",
|
||||
"un rival qui fut défait autrefois réapparaît et met son grain de sel.",
|
||||
"la folie de Morgazzon fait des ravages dans la région."
|
||||
],
|
||||
"obstacle": [
|
||||
"d’un ancien secret.",
|
||||
"d’un long voyage.",
|
||||
"d’une malédiction.",
|
||||
"d’un voleur rusé.",
|
||||
"d’une forte troupe de soldats.",
|
||||
"d’un énorme monstre.",
|
||||
"d’une horde de monstres.",
|
||||
"d’un manque de temps.",
|
||||
"de gardes et de pièges magiques.",
|
||||
"d’une catastrophe naturelle sur le point de se produire.",
|
||||
"d’une énigme à résoudre.",
|
||||
"d’une bataille à gagner."
|
||||
],
|
||||
"retournement": [
|
||||
"L’ennemi est en fait Krongar lui-même, venu d’une autre réalité !",
|
||||
"Toute cette histoire était un piège machiavélique !",
|
||||
"L’ennemi est en fait un vieil ami ou un allié qui a comploté dans l’ombre !",
|
||||
"Krongar est contraint de s’associer à un rival pour accomplir la mission !",
|
||||
"Tout ce qui semblait ordinaire se révèle en fait surnaturel !",
|
||||
"L’ennemi est en fait le père, la mère, le frère ou la sœur de Krongar !",
|
||||
"Une toute autre mission attend en fait notre héros !",
|
||||
"Parfois, il n’y a pas de retournement de situation !",
|
||||
"i la mission est accomplie, cela entraînera de terribles répercussions !",
|
||||
"Le destin offre à Krongar une chance d’améliorer les choses, et il est renvoyé dans le temps au début de l’aventure. La saga recommence, mais cette fois sans retournement de situation !",
|
||||
"Un ami ou un allié a trahi Krongar !",
|
||||
"Les dieux sont furieux et lui imposent d'autres tâches"
|
||||
],
|
||||
"recompense": [
|
||||
"Rien du tout ! On s’est joué de lui !",
|
||||
"Beaucoup moins qu’escompté.",
|
||||
"Beaucoup moins qu’escompté, mais il gagne au moins la reconnaissance d’une personne haut placée.",
|
||||
"Beaucoup moins qu’escompté, mais il est marqué par les dieux (avantage).",
|
||||
"La récompense escomptée.",
|
||||
"La récompense escomptée, et il est marqué par les dieux (avantage).",
|
||||
"La récompense escomptée, ainsi que la reconnaissance d’une personne haut placée.",
|
||||
"Plus qu’escompté.",
|
||||
"Plus qu’escompté, ainsi que la reconnaissance d’une personne haut placée.",
|
||||
"Plus qu’escompté, et il est marqué par les dieux (avantage).",
|
||||
"Plus qu’escompté, ainsi que la reconnaissance d’une personne haut placée, et il est marqué par les dieux (avantage).",
|
||||
"Une promotion... Longue vie au roi Krongar !"
|
||||
]
|
||||
}
|
@ -31,7 +31,7 @@ export class BoLTokenHud {
|
||||
let actionIndex = Number(event.currentTarget.attributes['data-action-index'].value)
|
||||
let action = hudData.actionsList[actionIndex]
|
||||
const weapon = actor.items.get( action._id )
|
||||
BoLRoll.weaponCheckWithWeapon(hudData.actor, weapon)
|
||||
BoLRoll.weaponCheckWithWeapon(hudData.actor, duplicate(weapon))
|
||||
//console.log("Clicked", action)
|
||||
} )
|
||||
|
||||
|
86
module/system/bol-adventure-generator.js
Normal file
86
module/system/bol-adventure-generator.js
Normal file
@ -0,0 +1,86 @@
|
||||
/* -------------------------------------------- */
|
||||
import { BoLUtility } from "./bol-utility.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class BoLAdventureGenerator {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async init() {
|
||||
this.adventureData = await fetchJsonWithTimeout("systems/bol/module/system/adventure_data.json")
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async createAdventure() {
|
||||
let roll1 = new Roll("1d" + this.adventureData.titre1.length).evaluate({ async: false })
|
||||
let roll2 = new Roll("1d" + this.adventureData.titre2.length).evaluate({ async: false })
|
||||
|
||||
let p1 = this.adventureData.titre1[roll1.result - 1]
|
||||
let p2 = this.adventureData.titre2[roll2.result - 1]
|
||||
|
||||
let story = {}
|
||||
story.title = "Krongar et " + p1.prefix + " " + p1.name + " " + p2.prefix + " " + p2.name
|
||||
|
||||
let rollM = new Roll("1d" + this.adventureData.mission.length).evaluate({ async: false })
|
||||
story.mission = "La mission de Krongar est de " + this.adventureData.mission[rollM.result - 1].name
|
||||
|
||||
if (!p1.isCarriere && !p2.isCarriere) {
|
||||
let rollC = new Roll("1d" + this.adventureData.carriere.length).evaluate({ async: false })
|
||||
story.carriere = "Une carrière : " + this.adventureData.carriere[rollC.result - 1]
|
||||
}
|
||||
|
||||
if (!p1.isLieu && !p2.isLieu) {
|
||||
let rollL1 = new Roll("1d" + this.adventureData.lieux1.length).evaluate({ async: false })
|
||||
let rollL2 = new Roll("1d" + this.adventureData.lieux2.length).evaluate({ async: false })
|
||||
story.lieu = "Un lieu : " + this.adventureData.lieux1[rollL1.result - 1] + " " + this.adventureData.lieux2[rollL2.result - 1]
|
||||
}
|
||||
|
||||
if (!p1.isObjet && !p2.isObjet) {
|
||||
let rollO1 = new Roll("1d" + this.adventureData.objets1.length).evaluate({ async: false })
|
||||
let rollO2 = new Roll("1d" + this.adventureData.objets2.length).evaluate({ async: false })
|
||||
story.objet = "Un objet : " + this.adventureData.objets1[rollO1.result - 1] + " " + this.adventureData.objets2[rollO2.result - 1]
|
||||
}
|
||||
|
||||
let rollMOT = new Roll("1d" + this.adventureData.motivation.length).evaluate({ async: false })
|
||||
story.motivation = "Krongar entreprend cette mission parce que " + this.adventureData.motivation[rollMOT.result - 1]
|
||||
|
||||
if (!p1.isEnnemi && !p2.isEnnemi) {
|
||||
let rollE = new Roll("1d" + this.adventureData.rival.length).evaluate({ async: false })
|
||||
story.rival = "Un rival : " + this.adventureData.rival[rollE.result - 1]
|
||||
}
|
||||
|
||||
let rollDieu = new Roll("1d6").evaluate({ async: false })
|
||||
if (rollDieu.result == 6) {
|
||||
rollDieu = new Roll("1d" + this.adventureData.dieu.length).evaluate({ async: false })
|
||||
story.dieu = "Un Dieu est impliqué : " + this.adventureData.dieu[rollDieu.result - 1]
|
||||
}
|
||||
|
||||
let rollComp = new Roll("1d6").evaluate({ async: false })
|
||||
if (rollComp.result >= 5) {
|
||||
rollComp = new Roll("1d" + this.adventureData.complique1.length).evaluate({ async: false })
|
||||
story.complication = "Une complication : " + this.adventureData.complique1[rollComp.result - 1]
|
||||
}
|
||||
|
||||
let rollObs = new Roll("1d6").evaluate({ async: false })
|
||||
if (rollObs.result >= 5) {
|
||||
rollObs = new Roll("1d" + this.adventureData.obstacle.length).evaluate({ async: false })
|
||||
story.obstacle = "Un obstacle : " + this.adventureData.obstacle[rollObs.result - 1]
|
||||
}
|
||||
|
||||
let rollRet = new Roll("1d6").evaluate({ async: false })
|
||||
if (rollRet.result == 6) {
|
||||
rollRet = new Roll("1d" + this.adventureData.retournement.length).evaluate({ async: false })
|
||||
story.retournement = "Un retournement : " + this.adventureData.retournement[rollRet.result - 1]
|
||||
}
|
||||
|
||||
let rollRec = new Roll("1d" + this.adventureData.recompense.length).evaluate({ async: false })
|
||||
story.recompense = "Pour sa peine, Krongar reçoit " + this.adventureData.recompense[rollRec.result - 1]
|
||||
|
||||
ChatMessage.create({
|
||||
alias: this.name,
|
||||
whisper: BoLUtility.getUsers(user => user.isGM),
|
||||
content: await renderTemplate('systems/bol/templates/chat/chat-adventure-result.hbs',
|
||||
{ name: "Aventure !", img: "icons/commodities/gems/gem-cluster-red.webp", story : story})
|
||||
})
|
||||
|
||||
}
|
||||
}
|
@ -40,7 +40,7 @@ export class BoLCalendar extends Application {
|
||||
constructor() {
|
||||
super();
|
||||
// position
|
||||
this.calendarPos = duplicate(game.settings.get(SYSTEM_RDD, "calendar-pos"));
|
||||
this.calendarPos = duplicate(game.settings.get("bol", "calendar-pos"));
|
||||
if (this.calendarPos == undefined || this.calendarPos.top == undefined) {
|
||||
this.calendrierPos = BoLCalendar.createCalendarPos()
|
||||
game.settings.set("bol", "calendar-pos", this.calendarPos)
|
||||
|
128
module/system/bol-character-summary.js
Normal file
128
module/system/bol-character-summary.js
Normal file
@ -0,0 +1,128 @@
|
||||
/* -------------------------------------------- */
|
||||
import { BoLUtility } from "./bol-utility.js";
|
||||
import { BoLRoll } from "../controllers/bol-rolls.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class BoLCharacterSummary extends Application {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static displayPCSummary(){
|
||||
game.bol.charSummary.render(true)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static createSummaryPos() {
|
||||
return { top: 200, left: 200 };
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static ready() {
|
||||
if ( !game.user.isGM ) { // Uniquement si GM
|
||||
return
|
||||
}
|
||||
let charSummary = new BoLCharacterSummary()
|
||||
game.bol.charSummary = charSummary
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
constructor() {
|
||||
super();
|
||||
//game.settings.set("world", "character-summary-data", {npcList: [], x:0, y:0})
|
||||
this.settings = game.settings.get("world", "character-summary-data")
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
template: "systems/bol/templates/apps/character-summary-template.html",
|
||||
popOut: true,
|
||||
resizable: true,
|
||||
dragDrop: [{ dragSelector: ".items-list .item", dropSelector: null }],
|
||||
classes: ["bol", "dialog"], width: 820, height: 'fit-content'
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getData() {
|
||||
let formData = super.getData();
|
||||
|
||||
formData.pcs = game.actors.filter( ac => ac.type == "character" && ac.hasPlayerOwner )
|
||||
formData.npcs = []
|
||||
let newList = []
|
||||
let toUpdate = false
|
||||
for( let actorId of this.settings.npcList ) {
|
||||
let actor = game.actors.get(actorId)
|
||||
if (actor) {
|
||||
formData.npcs.push( actor )
|
||||
newList.push(actorId)
|
||||
} else {
|
||||
toUpdate = true
|
||||
}
|
||||
}
|
||||
formData.config = game.bol.config
|
||||
|
||||
if ( toUpdate ) {
|
||||
this.settings.npcList = newList
|
||||
//console.log("Going to update ...", this.settings)
|
||||
game.settings.set("world", "character-summary-data", this.settings)
|
||||
}
|
||||
|
||||
return formData
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
updateNPC() {
|
||||
game.settings.set("world", "character-summary-data", game.bol.charSummary.settings)
|
||||
game.bol.charSummary.close()
|
||||
setTimeout( function() { game.bol.charSummary.render(true)}, 500)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _onDrop(event) {
|
||||
//console.log("Dragged data are : ", dragData)
|
||||
let data = event.dataTransfer.getData('text/plain')
|
||||
let dataItem = JSON.parse( data)
|
||||
let actor = fromUuidSync(dataItem.uuid)
|
||||
if (actor) {
|
||||
game.bol.charSummary.settings.npcList.push( actor.id )
|
||||
game.bol.charSummary.updateNPC()
|
||||
|
||||
} else {
|
||||
ui.notifications.warn( game.i18n.localize("BOL.ui.noactorfound") )
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
async activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
html.find('.actor-open').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
const actor = game.actors.get(li.data("actor-id"))
|
||||
actor.sheet.render(true)
|
||||
})
|
||||
|
||||
html.find('.summary-roll').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
const actor = game.actors.get(li.data("actor-id"))
|
||||
let type = $(event.currentTarget).data("type")
|
||||
let key = $(event.currentTarget).data("key")
|
||||
if ( type == "attribute") {
|
||||
BoLRoll.attributeCheck(actor, key, event)
|
||||
} else if (type == "aptitude") {
|
||||
BoLRoll.aptitudeCheck(actor, key, event)
|
||||
}
|
||||
})
|
||||
|
||||
html.find('.actor-delete').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
let actorId = li.data("actor-id")
|
||||
let newList = game.bol.charSummary.settings.npcList.filter(id => id != actorId)
|
||||
game.bol.charSummary.settings.npcList = newList
|
||||
game.bol.charSummary.updateNPC()
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -10,41 +10,22 @@ Init order =
|
||||
3 - Echec critique
|
||||
*/
|
||||
|
||||
import { BoLUtility } from "../system/bol-utility.js";
|
||||
|
||||
|
||||
export class BoLCombatManager extends Combat {
|
||||
|
||||
/************************************************************************************/
|
||||
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
||||
console.log(`${game.data.system.data.title} | Combat.rollInitiative()`, ids, formula, messageOptions);
|
||||
console.log(`${game.system.title} | Combat.rollInitiative()`, ids, formula, messageOptions);
|
||||
// Structure input data
|
||||
ids = typeof ids === "string" ? [ids] : ids;
|
||||
const currentId = this.combatant._id;
|
||||
//const currentId = this.combatant.id;
|
||||
|
||||
// calculate initiative
|
||||
for (let cId = 0; cId < ids.length; cId++) {
|
||||
const combatant = this.combatants.get(ids[cId]);
|
||||
let fvttInit = 5
|
||||
if (combatant.actor.type == 'character') {
|
||||
let initData = combatant.actor.getLastInitData()
|
||||
console.log("Init data !!!", initData)
|
||||
if (initData.isLegendary) {
|
||||
fvttInit = 10
|
||||
} else if (initData.isCritical) {
|
||||
fvttInit = 9
|
||||
} else if (initData.lastinit >= 9) {
|
||||
fvttInit = 8
|
||||
} else if (initData.isFumble) {
|
||||
fvttInit = 3
|
||||
}
|
||||
} else {
|
||||
fvttInit = 4 // Pietaille par defaut
|
||||
if ( combatant.actor.getSubtype == 'adversary') {
|
||||
fvttInit = 7
|
||||
}
|
||||
if ( combatant.actor.getSubtype == 'tough') {
|
||||
fvttInit = 6
|
||||
}
|
||||
}
|
||||
const combatant = this.combatants.get(ids[cId])
|
||||
let fvttInit = combatant.actor.getInitiativeRank(false, true)
|
||||
fvttInit += (cId / 100)
|
||||
await this.updateEmbeddedDocuments("Combatant", [{ _id: ids[cId], initiative: fvttInit }]);
|
||||
}
|
||||
@ -59,7 +40,16 @@ export class BoLCombatManager extends Combat {
|
||||
}
|
||||
super.nextRound()
|
||||
}
|
||||
|
||||
|
||||
/************************************************************************************/
|
||||
_onDelete() {
|
||||
let combatants = this.combatants.contents
|
||||
for (let c of combatants) {
|
||||
let actor = game.actors.get(c.data.actorId)
|
||||
actor.clearInitiative()
|
||||
}
|
||||
super._onDelete()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
110
module/system/bol-commands.js
Normal file
110
module/system/bol-commands.js
Normal file
@ -0,0 +1,110 @@
|
||||
/* -------------------------------------------- */
|
||||
import { BoLAdventureGenerator } from "./bol-adventure-generator.js"
|
||||
import { BoLCharacterSummary } from "./bol-character-summary.js"
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class BoLCommands {
|
||||
|
||||
static init() {
|
||||
if (!game.bol.commands) {
|
||||
const bolCommands = new BoLCommands()
|
||||
bolCommands.registerCommand({ path: ["/adventure"], func: (content, msg, params) => BoLAdventureGenerator.createAdventure(), descr: "Nouvelle idée d'aventure!" });
|
||||
bolCommands.registerCommand({ path: ["/pcview"], func: (content, msg, params) => BoLCharacterSummary.displayPCSummary(), descr: "Affiche la liste des PJs!" });
|
||||
game.bol.commands = bolCommands
|
||||
}
|
||||
|
||||
Hooks.on("chatMessage", (html, content, msg) => {
|
||||
if (content[0] == '/') {
|
||||
let regExp = /(\S+)/g;
|
||||
let commands = content.match(regExp);
|
||||
if (game.bol.commands.processChatCommand(commands, content, msg)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true
|
||||
})
|
||||
|
||||
}
|
||||
constructor() {
|
||||
this.commandsTable = {}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
registerCommand(command) {
|
||||
this._addCommand(this.commandsTable, command.path, '', command);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_addCommand(targetTable, path, fullPath, command) {
|
||||
if (!this._validateCommand(targetTable, path, command)) {
|
||||
return;
|
||||
}
|
||||
const term = path[0];
|
||||
fullPath = fullPath + term + ' '
|
||||
if (path.length == 1) {
|
||||
command.descr = `<strong>${fullPath}</strong>: ${command.descr}`;
|
||||
targetTable[term] = command;
|
||||
}
|
||||
else {
|
||||
if (!targetTable[term]) {
|
||||
targetTable[term] = { subTable: {} };
|
||||
}
|
||||
this._addCommand(targetTable[term].subTable, path.slice(1), fullPath, command)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_validateCommand(targetTable, path, command) {
|
||||
if (path.length > 0 && path[0] && command.descr && (path.length != 1 || targetTable[path[0]] == undefined)) {
|
||||
return true;
|
||||
}
|
||||
console.warn("bolCommands._validateCommand failed ", targetTable, path, command);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* Manage chat commands */
|
||||
processChatCommand(commandLine, content = '', msg = {}) {
|
||||
// Setup new message's visibility
|
||||
let rollMode = game.settings.get("core", "rollMode");
|
||||
if (["gmroll", "blindroll"].includes(rollMode)) msg["whisper"] = ChatMessage.getWhisperRecipients("GM");
|
||||
if (rollMode === "blindroll") msg["blind"] = true;
|
||||
msg["type"] = 0;
|
||||
|
||||
let command = commandLine[0].toLowerCase();
|
||||
let params = commandLine.slice(1);
|
||||
|
||||
return this.process(command, params, content, msg);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
process(command, params, content, msg) {
|
||||
return this._processCommand(this.commandsTable, command, params, content, msg);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_processCommand(commandsTable, name, params, content = '', msg = {}, path = "") {
|
||||
console.log("===> Processing command")
|
||||
let command = commandsTable[name];
|
||||
path = path + name + " ";
|
||||
if (command && command.subTable) {
|
||||
if (params[0]) {
|
||||
return this._processCommand(command.subTable, params[0], params.slice(1), content, msg, path)
|
||||
}
|
||||
else {
|
||||
this.help(msg, command.subTable);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (command && command.func) {
|
||||
const result = command.func(content, msg, params);
|
||||
if (result == false) {
|
||||
BoLCommands._chatAnswer(msg, command.descr);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
@ -2,6 +2,21 @@ import { BoLRoll } from "../controllers/bol-rolls.js";
|
||||
|
||||
export class BoLHotbar {
|
||||
|
||||
|
||||
static async assignToHotBar( item, slot) {
|
||||
let command = `game.bol.BoLHotbar.rollMacro("${item.name}", "${item.type}");`
|
||||
let macro = game.macros.contents.find(m => (m.name === item.name) && (m.command === command))
|
||||
if (!macro) {
|
||||
macro = await Macro.create({
|
||||
name: item.name,
|
||||
type: "script",
|
||||
img: item.img,
|
||||
command: command
|
||||
}, { displaySheet: false })
|
||||
}
|
||||
await game.user.assignHotbarMacro(macro, slot);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a macro when dropping an entity on the hotbar
|
||||
* Item - open roll dialog for item
|
||||
@ -10,55 +25,20 @@ export class BoLHotbar {
|
||||
*/
|
||||
static init( ) {
|
||||
|
||||
Hooks.on("hotbarDrop", async (bar, documentData, slot) => {
|
||||
Hooks.on("hotbarDrop", (bar, documentData, slot) => {
|
||||
// Create item macro if rollable item - weapon, spell, prayer, trait, or skill
|
||||
if (documentData.type == "Item") {
|
||||
console.log("Drop done !!!", bar, documentData, slot)
|
||||
let item = documentData.data
|
||||
let command = `game.bol.BoLHotbar.rollMacro("${item.name}", "${item.type}");`
|
||||
let macro = game.macros.contents.find(m => (m.name === item.name) && (m.command === command))
|
||||
if (!macro) {
|
||||
macro = await Macro.create({
|
||||
name: item.name,
|
||||
type: "script",
|
||||
img: item.img,
|
||||
command: command
|
||||
}, { displaySheet: false })
|
||||
let item = fromUuidSync(documentData.uuid)
|
||||
if (item == undefined) {
|
||||
item = this.actor.items.get(documentData.uuid)
|
||||
}
|
||||
game.user.assignHotbarMacro(macro, slot);
|
||||
}
|
||||
// Create a macro to open the actor sheet of the actor dropped on the hotbar
|
||||
else if (documentData.type == "Actor") {
|
||||
let actor = game.actors.get(documentData.id);
|
||||
let command = `game.actors.get("${documentData.id}").sheet.render(true)`
|
||||
let macro = game.macros.contents.find(m => (m.name === actor.name) && (m.command === command));
|
||||
if (!macro) {
|
||||
macro = await Macro.create({
|
||||
name: actor.data.name,
|
||||
type: "script",
|
||||
img: actor.data.img,
|
||||
command: command
|
||||
}, { displaySheet: false })
|
||||
game.user.assignHotbarMacro(macro, slot);
|
||||
if (item && (item.system.subtype === "weapon" || item.system.category === "spell")) {
|
||||
this.assignToHotBar( item, slot )
|
||||
return false
|
||||
}
|
||||
}
|
||||
// Create a macro to open the journal sheet of the journal dropped on the hotbar
|
||||
else if (documentData.type == "JournalEntry") {
|
||||
let journal = game.journal.get(documentData.id);
|
||||
let command = `game.journal.get("${documentData.id}").sheet.render(true)`
|
||||
let macro = game.macros.contents.find(m => (m.name === journal.name) && (m.command === command));
|
||||
if (!macro) {
|
||||
macro = await Macro.create({
|
||||
name: journal.data.name,
|
||||
type: "script",
|
||||
img: "systems/bol/icons/images/icone_parchement_vierge.webp",
|
||||
command: command
|
||||
}, { displaySheet: false })
|
||||
game.user.assignHotbarMacro(macro, slot);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
/** Roll macro */
|
||||
@ -68,18 +48,18 @@ export class BoLHotbar {
|
||||
if (speaker.token) actor = game.actors.tokens[speaker.token]
|
||||
if (!actor) actor = game.actors.get(speaker.actor)
|
||||
if (!actor) {
|
||||
return ui.notifications.warn(`Selectionnez votre personnage pour utiliser la macro`)
|
||||
return ui.notifications.warn( game.i18n.localize("BOL.ui.selectactor") )
|
||||
}
|
||||
|
||||
let item = actor.items.find(it => it.name === itemName && it.type == itemType)
|
||||
if (!item ) {
|
||||
return ui.notifications.warn(`Impossible de trouver l'objet de cette macro`)
|
||||
return ui.notifications.warn( game.i18n.localize("BOL.ui.itemnotfound") )
|
||||
}
|
||||
// Trigger the item roll
|
||||
if (item.data.data.category === "equipment" && item.data.data.subtype === "weapon") {
|
||||
if (item.system.category === "equipment" && item.system.subtype === "weapon") {
|
||||
return BoLRoll.weaponCheckWithWeapon( actor, item)
|
||||
}
|
||||
if (item.data.data.category === "spell") {
|
||||
if (item.system.category === "spell") {
|
||||
return BoLRoll.spellCheckWithSpell( actor, item)
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ export class BoLUtility {
|
||||
default: true,
|
||||
type: Boolean,
|
||||
onChange: lang => window.location.reload()
|
||||
});
|
||||
})
|
||||
game.settings.register("bol", "useBougette", {
|
||||
name: "Utiliser la Bougette (règle fan-made)",
|
||||
hint: "Utilise un indicateur de Bougette, comme décrit dans l'aide de jeu Gold&Glory du RatierBretonnien (https://www.lahiette.com/leratierbretonnien/)",
|
||||
@ -27,14 +27,39 @@ export class BoLUtility {
|
||||
default: false,
|
||||
type: Boolean,
|
||||
onChange: lang => window.location.reload()
|
||||
});
|
||||
})
|
||||
game.settings.register("world", "character-summary-data", {
|
||||
name: "character-summary-data",
|
||||
scope: "world",
|
||||
config: false,
|
||||
default: { npcList : [], x: 200, y: 200},
|
||||
type: Object
|
||||
})
|
||||
game.settings.register("bol", "logoActorSheet", {
|
||||
name: "Chemin du logo des fiches de perso",
|
||||
hint: "Vous pouvez changer le logo BoL des fiches de perso, pour jouer dans un autre univers (idéalement 346 x 200, défaut : /systems/bol/ui/logo.webp)",
|
||||
scope: "world",
|
||||
config: true,
|
||||
default: "/systems/bol/ui/logo.webp",
|
||||
type: String,
|
||||
onChange: lang => window.location.reload()
|
||||
})
|
||||
game.settings.register("bol", "logoTopLeft", {
|
||||
name: "Chemin du logo haut gauche",
|
||||
hint: "Vous pouvez changer le logo BoL en haut à gauche de chaque écran (idéalement 718 x 416, défaut : /systems/bol/ui/logo2.webp)",
|
||||
scope: "world",
|
||||
config: true,
|
||||
default: "/systems/bol/ui/logo2.webp",
|
||||
type: String,
|
||||
onChange: lang => window.location.reload()
|
||||
})
|
||||
|
||||
this.rollArmor = game.settings.get("bol", "rollArmor") // Roll armor or not
|
||||
this.useBougette = game.settings.get("bol", "useBougette") // Use optionnal bougette rules
|
||||
|
||||
this.actorSheetLogo = game.settings.get("bol", "logoActorSheet") || "/systems/bol/ui/logo.webp"
|
||||
this.logoTopLeft = game.settings.get("bol", "logoTopLeft") || "/systems/bol/ui/logo2.webp"
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getRollArmor() {
|
||||
return this.rollArmor
|
||||
@ -43,9 +68,32 @@ export class BoLUtility {
|
||||
static getUseBougette() {
|
||||
return this.useBougette
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static getLogoActorSheet() {
|
||||
return this.actorSheetLogo
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static getLogoTopLeft() {
|
||||
return this.logoTopLeft
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
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 async ready() {
|
||||
//$("#logo").attr("src", this.getLogoTopLeft() )
|
||||
$("#logo").css("content", `url(${this.getLogoTopLeft()})`)
|
||||
|
||||
CONFIG.statusEffects = duplicate(game.bol.config.statusEffects)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -63,12 +111,12 @@ export class BoLUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static storeRoll(roll) {
|
||||
this.lastRoll = roll
|
||||
this.rollTab[roll.id] = roll
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getLastRoll() {
|
||||
return this.lastRoll
|
||||
static getRoll(rollId) {
|
||||
return this.rollTab[roll.id]
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -127,16 +175,16 @@ export class BoLUtility {
|
||||
return undefined;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static getOtherWhisperRecipients( name) {
|
||||
static getOtherWhisperRecipients(name) {
|
||||
let users = []
|
||||
for( let user of game.users) {
|
||||
for (let user of game.users) {
|
||||
if ( !user.isGM && user.name != name) {
|
||||
users.push( user.data._id)
|
||||
users.push(user.id)
|
||||
}
|
||||
}
|
||||
return users
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getWhisperRecipientsAndGMs(name) {
|
||||
let recep1 = ChatMessage.getWhisperRecipients(name) || [];
|
||||
@ -173,35 +221,47 @@ export class BoLUtility {
|
||||
//console.log("FOUND 1!!! ", actor)
|
||||
if (actor && actor.isOwner) return
|
||||
else if (game.user.isGM || data.author.id === game.user.id) return
|
||||
|
||||
|
||||
const divButtons = chatCard.find('.actions-section')
|
||||
console.log("FOUND 2!! ", divButtons)
|
||||
divButtons.hide()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getRollDataFromMessage(event) {
|
||||
let messageId = BoLUtility.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
return message.getFlag("world", "bol-roll-data")
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static cleanupButtons(id) {
|
||||
$(`#${id}`).hide() // Hide the options roll buttons
|
||||
game.socket.emit("system.bol", { name: "msg_cleanup_buttons", data: { id: id } })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async chatListeners(html) {
|
||||
|
||||
|
||||
// Damage handling
|
||||
html.on("click", '.chat-damage-apply', event => {
|
||||
let rollData = BoLUtility.getLastRoll()
|
||||
$(`#${rollData.applyId}`).hide()
|
||||
let rollData = BoLUtility.getRollDataFromMessage(event)
|
||||
BoLUtility.cleanupButtons(rollData.applyId)
|
||||
BoLUtility.sendAttackSuccess(rollData)
|
||||
});
|
||||
|
||||
html.on("click", '.chat-damage-roll', event => {
|
||||
event.preventDefault();
|
||||
let rollData = BoLUtility.getLastRoll()
|
||||
rollData.damageMode = event.currentTarget.attributes['data-damage-mode'].value;
|
||||
event.preventDefault()
|
||||
let rollData = BoLUtility.getRollDataFromMessage(event)
|
||||
rollData.damageMode = event.currentTarget.attributes['data-damage-mode'].value
|
||||
let bolRoll = new BoLDefaultRoll(rollData)
|
||||
bolRoll.rollDamage()
|
||||
});
|
||||
|
||||
html.on("click", '.transform-legendary-roll', event => {
|
||||
event.preventDefault();
|
||||
let rollData = BoLUtility.getLastRoll()
|
||||
let actor = game.actors.get( rollData.actorId)
|
||||
let rollData = BoLUtility.getRollDataFromMessage(event)
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
actor.subHeroPoints(1)
|
||||
let r = new BoLDefaultRoll(rollData)
|
||||
r.upgradeToLegendary()
|
||||
@ -209,8 +269,8 @@ export class BoLUtility {
|
||||
|
||||
html.on("click", '.transform-heroic-roll', event => {
|
||||
event.preventDefault();
|
||||
let rollData = BoLUtility.getLastRoll()
|
||||
let actor = game.actors.get( rollData.actorId)
|
||||
let rollData = BoLUtility.getRollDataFromMessage(event)
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
actor.subHeroPoints(1)
|
||||
let r = new BoLDefaultRoll(rollData)
|
||||
r.upgradeToHeroic()
|
||||
@ -218,8 +278,8 @@ export class BoLUtility {
|
||||
|
||||
html.on("click", '.hero-reroll', event => {
|
||||
event.preventDefault();
|
||||
let rollData = BoLUtility.getLastRoll()
|
||||
let actor = game.actors.get( rollData.actorId)
|
||||
let rollData = BoLUtility.getRollDataFromMessage(event)
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
actor.subHeroPoints(1)
|
||||
rollData.reroll = false // Disable reroll option for second roll
|
||||
let r = new BoLDefaultRoll(rollData)
|
||||
@ -231,24 +291,24 @@ export class BoLUtility {
|
||||
let attackId = event.currentTarget.attributes['data-attack-id'].value
|
||||
let defenseMode = event.currentTarget.attributes['data-defense-mode'].value
|
||||
let weaponId = (event.currentTarget.attributes['data-weapon-id']) ? event.currentTarget.attributes['data-weapon-id'].value : -1
|
||||
|
||||
// Remove message for all
|
||||
let msgId = BoLUtility.findChatMessageId(event.currentTarget)
|
||||
if (game.user.isGM) {
|
||||
console.log("Process handling !!! -> GM direct damage handling")
|
||||
BoLUtility.processDamageHandling(event, attackId, defenseMode, weaponId)
|
||||
BoLUtility.processDamageHandling(attackId, defenseMode, weaponId, msgId)
|
||||
} else {
|
||||
console.log("Process handling !!! -> socket emit")
|
||||
game.socket.emit("system.bol", { name: "msg_damage_handling", data: { event: event, attackId: attackId, defenseMode: defenseMode, weaponId: weaponId } });
|
||||
game.socket.emit("system.bol", { name: "msg_damage_handling", data: { msgId: msgId, attackId: attackId, defenseMode: defenseMode, weaponId: weaponId } })
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async processDamageHandling(event, attackId, defenseMode, weaponId = -1) {
|
||||
static async processDamageHandling(attackId, defenseMode, weaponId = -1, msgId) {
|
||||
if (!game.user.isGM) {
|
||||
return;
|
||||
return
|
||||
}
|
||||
BoLUtility.removeChatMessageId(BoLUtility.findChatMessageId(event.currentTarget));
|
||||
|
||||
console.log("Damage Handling", event, attackId, defenseMode, weaponId)
|
||||
BoLUtility.removeChatMessageId(msgId)
|
||||
console.log("Damage Handling", attackId, defenseMode, weaponId)
|
||||
// Only GM process this
|
||||
let attackDef = this.attackStore[attackId]
|
||||
if (attackDef && attackDef.defenderId) {
|
||||
@ -256,54 +316,70 @@ export class BoLUtility {
|
||||
return
|
||||
} // ?? Why ???
|
||||
attackDef.defenseDone = true
|
||||
attackDef.defenseMode = defenseMode;
|
||||
let defender = game.actors.get(attackDef.defenderId)
|
||||
attackDef.defenseMode = defenseMode
|
||||
let token = game.scenes.current.tokens.get(attackDef.targetId)
|
||||
let defender = token.actor
|
||||
|
||||
if (defenseMode == 'damage-with-armor') {
|
||||
let armorFormula = defender.getArmorFormula()
|
||||
attackDef.rollArmor = new Roll(armorFormula)
|
||||
attackDef.rollArmor.roll( { async: false } )
|
||||
console.log("Armor roll ", attackDef.rollArmor)
|
||||
attackDef.armorProtect = (attackDef.rollArmor.total < 0) ? 0 : attackDef.rollArmor.total;
|
||||
attackDef.finalDamage = attackDef.damageRoll.total - attackDef.armorProtect;
|
||||
attackDef.finalDamage = (attackDef.finalDamage < 0) ? 0 : attackDef.finalDamage;
|
||||
defender.sufferDamage(attackDef.finalDamage);
|
||||
attackDef.rollArmor.roll({ async: false })
|
||||
attackDef.armorProtect = (attackDef.rollArmor.total < 0) ? 0 : attackDef.rollArmor.total
|
||||
attackDef.finalDamage = attackDef.damageTotal - attackDef.armorProtect
|
||||
attackDef.finalDamage = (attackDef.finalDamage < 0) ? 0 : attackDef.finalDamage
|
||||
defender.sufferDamage(attackDef.finalDamage)
|
||||
console.log("Armor roll -> result ", attackDef)
|
||||
}
|
||||
if (defenseMode == 'damage-without-armor') {
|
||||
attackDef.finalDamage = attackDef.damageRoll.total;
|
||||
defender.sufferDamage(attackDef.finalDamage);
|
||||
attackDef.finalDamage = attackDef.damageTotal
|
||||
defender.sufferDamage(attackDef.finalDamage)
|
||||
}
|
||||
if (defenseMode == 'hero-reduce-damage') {
|
||||
let armorFormula = defender.getArmorFormula();
|
||||
let armorFormula = defender.getArmorFormula()
|
||||
attackDef.rollArmor = new Roll(armorFormula)
|
||||
attackDef.rollArmor.roll({ async: false });
|
||||
attackDef.armorProtect = (attackDef.rollArmor.total < 0) ? 0 : attackDef.rollArmor.total;
|
||||
attackDef.rollHero = new Roll("1d6");
|
||||
attackDef.rollHero.roll({ async: false });
|
||||
attackDef.finalDamage = attackDef.damageRoll.total - attackDef.rollHero.total - attackDef.armorProtect;
|
||||
attackDef.finalDamage = (attackDef.finalDamage < 0) ? 0 : attackDef.finalDamage;
|
||||
defender.sufferDamage(attackDef.finalDamage);
|
||||
defender.subHeroPoints(1);
|
||||
attackDef.rollArmor.roll({ async: false })
|
||||
attackDef.armorProtect = (attackDef.rollArmor.total < 0) ? 0 : attackDef.rollArmor.total
|
||||
attackDef.rollHero = new Roll("1d6")
|
||||
attackDef.rollHero.roll({ async: false })
|
||||
attackDef.finalDamage = attackDef.damageTotal - attackDef.rollHero.total - attackDef.armorProtect
|
||||
attackDef.finalDamage = (attackDef.finalDamage < 0) ? 0 : attackDef.finalDamage
|
||||
defender.sufferDamage(attackDef.finalDamage)
|
||||
defender.subHeroPoints(1)
|
||||
}
|
||||
if (defenseMode == 'hero-in-extremis') {
|
||||
attackDef.finalDamage = 0;
|
||||
attackDef.weaponHero = defender.weapons.find(item => item._id == weaponId);
|
||||
defender.deleteEmbeddedDocuments("Item", [weaponId]);
|
||||
}
|
||||
|
||||
let defenderUser
|
||||
for (let user of game.users) {
|
||||
if (user.character && user.character.id == defender.id) {
|
||||
defenderUser = user
|
||||
}
|
||||
}
|
||||
let damageResults = {
|
||||
attackId: attackDef.id,
|
||||
attacker: attackDef.attacker,
|
||||
rollArmor: attackDef.rollArmor,
|
||||
rollHero: attackDef.rollHero,
|
||||
weaponHero: attackDef.weaponHero,
|
||||
armorProtect: attackDef.armorProtect,
|
||||
name: defender.name,
|
||||
defender: defender,
|
||||
defenseMode: attackDef.defenseMode,
|
||||
finalDamage: attackDef.finalDamage
|
||||
}
|
||||
ChatMessage.create({
|
||||
alias: defender.name,
|
||||
whisper: BoLUtility.getWhisperRecipientsAndGMs(defender.name),
|
||||
content: await renderTemplate('systems/bol/templates/chat/rolls/defense-result-card.hbs', {
|
||||
attackId: attackDef.id,
|
||||
attacker: attackDef.attacker,
|
||||
rollArmor: attackDef.rollArmor,
|
||||
rollHero: attackDef.rollHero,
|
||||
weaponHero: attackDef.weaponHero,
|
||||
armorProtect: attackDef.armorProtect,
|
||||
defender: defender,
|
||||
defenseMode: attackDef.defenseMode,
|
||||
finalDamage: attackDef.finalDamage
|
||||
})
|
||||
content: await renderTemplate('systems/bol/templates/chat/rolls/defense-result-card.hbs', damageResults)
|
||||
})
|
||||
console.log("Defender data : ", defenderUser)
|
||||
ChatMessage.create({
|
||||
alias: defender.name,
|
||||
whisper: BoLUtility.getOtherWhisperRecipients(defenderUser?.name),
|
||||
content: await renderTemplate('systems/bol/templates/chat/rolls/defense-summary-card.hbs', damageResults)
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -386,8 +462,8 @@ export class BoLUtility {
|
||||
}
|
||||
// Build and send the defense message to the relevant people (ie GM + defender)
|
||||
let defender = game.actors.get(attackDef.defenderId)
|
||||
let defenderWeapons = defender.weapons
|
||||
console.log("DEF WEP", attackDef)
|
||||
console.log("DEF WEP", attackDef, defender)
|
||||
let defenderWeapons = defender.weapons || []
|
||||
this.attackStore[attackDef.id] = attackDef // Store !
|
||||
ChatMessage.create({
|
||||
alias: defender.name,
|
||||
@ -408,15 +484,18 @@ export class BoLUtility {
|
||||
if (sockmsg.name == "msg_attack_success") {
|
||||
BoLUtility.processAttackSuccess(sockmsg.data)
|
||||
}
|
||||
if (sockmsg.name == "msg_cleanup_buttons") {
|
||||
$(`#${sockmsg.data.id}`).hide() // Hide the options roll buttons
|
||||
}
|
||||
if (sockmsg.name == "msg_damage_handling") {
|
||||
BoLUtility.processDamageHandling(sockmsg.data.event, sockmsg.data.attackId, sockmsg.data.defenseMode)
|
||||
BoLUtility.processDamageHandling(sockmsg.data.attackId, sockmsg.data.defenseMode, sockmsg.data.weaponId, sockmsg.data.msgId)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static computeSpellCost(spell, nbOptCond = 0) {
|
||||
let pp = spell.data.data.properties.ppcost
|
||||
let minpp = __circle2minpp[spell.data.data.properties.circle]
|
||||
let pp = spell.data.properties.ppcost
|
||||
let minpp = __circle2minpp[spell.data.properties.circle]
|
||||
pp = (pp - nbOptCond < minpp) ? minpp : pp - nbOptCond
|
||||
return pp
|
||||
}
|
||||
@ -441,11 +520,11 @@ export class BoLUtility {
|
||||
let postForm = 'kh' + nbDice
|
||||
let modIndex = 3
|
||||
// Upgrade damage if needed
|
||||
if ( upgradeDamage && ( !res[3] || res[3]=="") ) {
|
||||
if (upgradeDamage && (!res[3] || res[3] == "")) {
|
||||
res[3] = "B" // Upgrade to bonus
|
||||
}
|
||||
if (res[3]) {
|
||||
if ( upgradeDamage && res[3] == 'M') {
|
||||
if (upgradeDamage && res[3] == 'M') {
|
||||
res[3] = "" // Disable lamlus for upgradeDamage
|
||||
}
|
||||
if (res[3] == 'M') {
|
||||
@ -453,11 +532,21 @@ export class BoLUtility {
|
||||
nbDice++
|
||||
modIndex = 4
|
||||
}
|
||||
if (res[3] == 'MM') {
|
||||
postForm = 'kl' + nbDice
|
||||
nbDice += 2
|
||||
modIndex = 4
|
||||
}
|
||||
if (res[3] == 'B') {
|
||||
postForm = 'kh' + nbDice
|
||||
nbDice++
|
||||
modIndex = 4
|
||||
}
|
||||
if (res[3] == 'BB') {
|
||||
postForm = 'kh' + nbDice
|
||||
nbDice += 2
|
||||
modIndex = 4
|
||||
}
|
||||
}
|
||||
formula = "(" + nbDice + "d" + res[2] + reroll + postForm + "+" + modifier + ") *" + multiplier
|
||||
}
|
||||
@ -465,31 +554,29 @@ export class BoLUtility {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async confirmDelete(actorSheet, li) {
|
||||
let itemId = li.data("item-id");
|
||||
let msgTxt = "<p>Are you sure to remove this Item ?";
|
||||
let buttons = {
|
||||
delete: {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
label: "Yes, remove it",
|
||||
callback: () => {
|
||||
actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]);
|
||||
li.slideUp(200, () => actorSheet.render(false));
|
||||
}
|
||||
},
|
||||
cancel: {
|
||||
icon: '<i class="fas fa-times"></i>',
|
||||
label: "Cancel"
|
||||
}
|
||||
}
|
||||
msgTxt += "</p>";
|
||||
let d = new Dialog({
|
||||
title: "Confirm removal",
|
||||
content: msgTxt,
|
||||
buttons: buttons,
|
||||
default: "cancel"
|
||||
});
|
||||
d.render(true);
|
||||
static async loadCompendiumData(compendium) {
|
||||
const pack = game.packs.get(compendium);
|
||||
return await pack?.getDocuments() ?? [];
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async loadCompendium(compendium, filter = item => true) {
|
||||
let compendiumData = await this.loadCompendiumData(compendium);
|
||||
return compendiumData.filter(filter);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async searchItem(dataItem) {
|
||||
let item
|
||||
if (dataItem.pack) {
|
||||
let id = dataItem.id || dataItem._id
|
||||
let items = await this.loadCompendium(dataItem.pack, item => item.id == id)
|
||||
item = items[0] || undefined
|
||||
} else {
|
||||
item = game.items.get(dataItem.id)
|
||||
}
|
||||
return item
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -25,6 +25,10 @@ BOL.damageMultiplier = {
|
||||
"2": "x2",
|
||||
"3": "x3",
|
||||
"4": "x4",
|
||||
"5": "x5",
|
||||
"6": "x6",
|
||||
"7": "7",
|
||||
"8": "x8"
|
||||
}
|
||||
|
||||
BOL.spellType = {
|
||||
@ -111,6 +115,14 @@ BOL.aptitudes = {
|
||||
"def" : "BOL.aptitudes.def"
|
||||
}
|
||||
|
||||
BOL.resources = {
|
||||
"hp" : "BOL.resources.hp",
|
||||
"hero" : "BOL.resources.hero",
|
||||
"faith" : "BOL.resources.faith",
|
||||
"power" : "BOL.resources.power",
|
||||
"alchemypoints" : "BOL.resources.alchemypoints"
|
||||
}
|
||||
|
||||
BOL.weaponSizes = {
|
||||
"unarmed" : "BOL.weaponSize.unarmed",
|
||||
"improvised" : "BOL.weaponSize.improvised",
|
||||
@ -131,6 +143,7 @@ BOL.itemCategories = {
|
||||
"spell" : "BOL.itemCategory.spell",
|
||||
"alchemy" : "BOL.itemCategory.alchemy",
|
||||
"vehicle" : "BOL.itemCategory.vehicle",
|
||||
"vehicleweapon": "BOL.itemCategory.vehicleweapon",
|
||||
"other" : "BOL.itemCategory.other"
|
||||
}
|
||||
|
||||
@ -255,7 +268,8 @@ BOL.featureSubtypes = {
|
||||
"flaw" : "BOL.featureSubtypes.flaw",
|
||||
"language" : "BOL.featureSubtypes.language",
|
||||
"godsfaith" : "BOL.featureSubtypes.gods",
|
||||
"fightoption" : "BOL.featureSubtypes.fightOption"
|
||||
"fightoption" : "BOL.featureSubtypes.fightOption",
|
||||
"boleffect": "BOL.featureSubtypes.effect",
|
||||
}
|
||||
|
||||
BOL.fightOptionTypes = {
|
||||
@ -283,11 +297,18 @@ BOL.actorIcons = {
|
||||
}
|
||||
|
||||
BOL.bougetteState = {
|
||||
"nomoney": "BOL.bougette.nomoney",
|
||||
"tolive": "BOL.bougette.tolive",
|
||||
"easylife": "BOL.bougette.easylife",
|
||||
"luxury": "BOL.bougette.luxury",
|
||||
"rich": "BOL.bougette.rich"
|
||||
"0": "BOL.bougette.nomoney",
|
||||
"1": "BOL.bougette.tolive",
|
||||
"2": "BOL.bougette.easylife",
|
||||
"3": "BOL.bougette.luxury",
|
||||
"4": "BOL.bougette.rich"
|
||||
}
|
||||
BOL.bougetteDice = {
|
||||
"0": "0",
|
||||
"1": "2d6-1",
|
||||
"2": "2d6",
|
||||
"3": "2d6+1",
|
||||
"4": "2d6+2"
|
||||
}
|
||||
|
||||
BOL.creatureSize = {
|
||||
@ -305,4 +326,129 @@ BOL.creatureSize = {
|
||||
"colossal": "BOL.size.colossal"
|
||||
}
|
||||
|
||||
BOL.bolEffectModifier = {
|
||||
"-8": "-8",
|
||||
"-6": "-6",
|
||||
"-4": "-4",
|
||||
"-2": "-2",
|
||||
"-1": "-1",
|
||||
"1B": "1B",
|
||||
"2B": "2B",
|
||||
"1M": "1M",
|
||||
"2M": "2M",
|
||||
"+1": "+1",
|
||||
"+2": "+2",
|
||||
"+4": "+4",
|
||||
"+6": "+6",
|
||||
"+8": "+8",
|
||||
}
|
||||
|
||||
BOL.statusEffects = [
|
||||
{
|
||||
"id": "dead",
|
||||
"label": "EFFECT.StatusDead",
|
||||
"icon": "icons/svg/skull.svg"
|
||||
},
|
||||
{
|
||||
"id": "unconscious",
|
||||
"label": "EFFECT.StatusUnconscious",
|
||||
"icon": "icons/svg/unconscious.svg"
|
||||
},
|
||||
{
|
||||
"id": "sleep",
|
||||
"label": "EFFECT.StatusAsleep",
|
||||
"icon": "icons/svg/sleep.svg"
|
||||
},
|
||||
{
|
||||
"id": "stun",
|
||||
"label": "EFFECT.StatusStunned",
|
||||
"icon": "icons/svg/daze.svg"
|
||||
},
|
||||
{
|
||||
"id": "prone",
|
||||
"label": "EFFECT.StatusProne",
|
||||
"icon": "icons/svg/falling.svg"
|
||||
},
|
||||
{
|
||||
"id": "restrain",
|
||||
"label": "EFFECT.StatusRestrained",
|
||||
"icon": "icons/svg/net.svg"
|
||||
},
|
||||
{
|
||||
"id": "paralysis",
|
||||
"label": "EFFECT.StatusParalysis",
|
||||
"icon": "icons/svg/paralysis.svg"
|
||||
},
|
||||
{
|
||||
"id": "fly",
|
||||
"label": "EFFECT.StatusFlying",
|
||||
"icon": "icons/svg/wing.svg"
|
||||
},
|
||||
{
|
||||
"id": "blind",
|
||||
"label": "EFFECT.StatusBlind",
|
||||
"icon": "icons/svg/blind.svg"
|
||||
},
|
||||
{
|
||||
"id": "deaf",
|
||||
"label": "EFFECT.StatusDeaf",
|
||||
"icon": "icons/svg/deaf.svg"
|
||||
},
|
||||
{
|
||||
"id": "silence",
|
||||
"label": "EFFECT.StatusSilenced",
|
||||
"icon": "icons/svg/silenced.svg"
|
||||
},
|
||||
{
|
||||
"id": "fear",
|
||||
"label": "EFFECT.StatusFear",
|
||||
"icon": "icons/svg/terror.svg"
|
||||
},
|
||||
{
|
||||
"id": "burning",
|
||||
"label": "EFFECT.StatusBurning",
|
||||
"icon": "icons/svg/fire.svg"
|
||||
},
|
||||
{
|
||||
"id": "frozen",
|
||||
"label": "EFFECT.StatusFrozen",
|
||||
"icon": "icons/svg/frozen.svg"
|
||||
},
|
||||
{
|
||||
"id": "shock",
|
||||
"label": "EFFECT.StatusShocked",
|
||||
"icon": "icons/svg/lightning.svg"
|
||||
},
|
||||
{
|
||||
"id": "disease",
|
||||
"label": "EFFECT.StatusDisease",
|
||||
"icon": "icons/svg/biohazard.svg"
|
||||
},
|
||||
{
|
||||
"id": "poison",
|
||||
"label": "EFFECT.StatusPoison",
|
||||
"icon": "icons/svg/poison.svg"
|
||||
},
|
||||
{
|
||||
"id": "curse",
|
||||
"label": "EFFECT.StatusCursed",
|
||||
"icon": "icons/svg/sun.svg"
|
||||
},
|
||||
{
|
||||
"id": "invisible",
|
||||
"label": "EFFECT.StatusInvisible",
|
||||
"icon": "icons/svg/invisible.svg"
|
||||
},
|
||||
{
|
||||
"id": "target",
|
||||
"label": "EFFECT.StatusTarget",
|
||||
"icon": "icons/svg/target.svg"
|
||||
},
|
||||
{
|
||||
"id": "eye",
|
||||
"label": "EFFECT.StatusMarked",
|
||||
"icon": "icons/svg/eye.svg"
|
||||
}
|
||||
]
|
||||
|
||||
BOL.debug = false;
|
@ -103,6 +103,12 @@ export const registerHandlebarsHelpers = function () {
|
||||
Handlebars.registerHelper('sub', function (a, b) {
|
||||
return parseInt(a) - parseInt(b);
|
||||
})
|
||||
Handlebars.registerHelper('abbrev2', function (a) {
|
||||
return a.substring(0,2);
|
||||
})
|
||||
Handlebars.registerHelper('abbrev3', function (a) {
|
||||
return a.substring(0,3);
|
||||
})
|
||||
Handlebars.registerHelper('valueAtIndex', function (arr, idx) {
|
||||
return arr[idx];
|
||||
})
|
||||
|
@ -75,4 +75,18 @@ export default function registerHooks() {
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
/********************************************************************************** */
|
||||
Hooks.on("renderActorDirectory", (app, html, data) => {
|
||||
if (game.user.isGM) {
|
||||
const button = document.createElement('button');
|
||||
button.style.width = '95%';
|
||||
button.innerHTML = game.i18n.localize("BOL.ui.pclistbutton")
|
||||
button.addEventListener('click', () => {
|
||||
game.bol.charSummary.render(true)
|
||||
})
|
||||
html.find('.header-actions').after(button)
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
@ -18,6 +18,9 @@ export const preloadHandlebarsTemplates = async function () {
|
||||
"systems/bol/templates/actor/parts/tabs/actor-biodata.hbs",
|
||||
"systems/bol/templates/actor/parts/tabs/creature-stats.hbs",
|
||||
"systems/bol/templates/actor/parts/tabs/creature-actions.hbs",
|
||||
"systems/bol/templates/actor/parts/tabs/vehicle-stats.hbs",
|
||||
"systems/bol/templates/actor/parts/tabs/vehicle-description.hbs",
|
||||
"systems/bol/templates/actor/parts/tabs/vehicle-weapons.hbs",
|
||||
// ITEMS
|
||||
"systems/bol/templates/item/parts/item-header.hbs",
|
||||
"systems/bol/templates/item/parts/properties/feature-properties.hbs",
|
||||
@ -33,9 +36,11 @@ export const preloadHandlebarsTemplates = async function () {
|
||||
"systems/bol/templates/item/parts/properties/feature/career-properties.hbs",
|
||||
"systems/bol/templates/item/parts/properties/feature/boon-properties.hbs",
|
||||
"systems/bol/templates/item/parts/properties/feature/flaw-properties.hbs",
|
||||
"systems/bol/templates/item/parts/properties/feature/effect-properties.hbs",
|
||||
"systems/bol/templates/item/parts/properties/feature/origin-properties.hbs",
|
||||
"systems/bol/templates/item/parts/properties/feature/race-properties.hbs",
|
||||
"systems/bol/templates/item/parts/properties/feature/fightoption-properties.hbs",
|
||||
"systems/bol/templates/item/parts/properties/item/weapon-vehicle-properties.hbs",
|
||||
|
||||
// DIALOGS
|
||||
"systems/bol/templates/chat/rolls/attack-damage-card.hbs",
|
||||
@ -46,6 +51,7 @@ export const preloadHandlebarsTemplates = async function () {
|
||||
"systems/bol/templates/dialogs/mod-roll-part.hbs",
|
||||
"systems/bol/templates/dialogs/adv-roll-part.hbs",
|
||||
"systems/bol/templates/dialogs/career-roll-part.hbs",
|
||||
"systems/bol/templates/dialogs/effect-roll-part.hbs",
|
||||
"systems/bol/templates/dialogs/boons-roll-part.hbs",
|
||||
"systems/bol/templates/dialogs/flaws-roll-part.hbs",
|
||||
"systems/bol/templates/dialogs/total-roll-part.hbs",
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4
packs/effets-exemples.db
Normal file
4
packs/effets-exemples.db
Normal file
@ -0,0 +1,4 @@
|
||||
{"name":"Vigueur -1","type":"feature","img":"icons/consumables/potions/bottle-conical-corked-labeled-skull-poison-green.webp","system":{"category":null,"subtype":"boleffect","description":"","properties":{"ismalusdice":false,"bonusmalus":-2,"identifier":"system.attributes.vigor","modifier":"-1"},"rank":0},"effects":[],"flags":{"core":{"sourceId":"Item.6fTZ6hOKR4pWbWOe"}},"_stats":{"systemId":"bol","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669218607632,"modifiedTime":1669234720255,"lastModifiedBy":"kQghu0tL1dft5xLu"},"_id":"6fTZ6hOKR4pWbWOe","folder":null,"sort":0,"ownership":{"default":0,"kQghu0tL1dft5xLu":3}}
|
||||
{"name":"Esprit -1","type":"feature","img":"icons/consumables/potions/bottle-conical-corked-labeled-skull-poison-green.webp","system":{"category":null,"subtype":"boleffect","description":"","properties":{"ismalusdice":false,"bonusmalus":-2,"identifier":"system.attributes.mind","modifier":"-1"},"rank":0},"effects":[],"flags":{"core":{"sourceId":"Item.6fTZ6hOKR4pWbWOe"}},"_stats":{"systemId":"bol","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669218607632,"modifiedTime":1669234720255,"lastModifiedBy":"kQghu0tL1dft5xLu"},"_id":"V2geomwPtTBnBeQW","folder":null,"sort":0,"ownership":{"default":0,"kQghu0tL1dft5xLu":3}}
|
||||
{"name":"Agilité -1","type":"feature","img":"icons/consumables/potions/bottle-conical-corked-labeled-skull-poison-green.webp","system":{"category":null,"subtype":"boleffect","description":"","properties":{"ismalusdice":false,"bonusmalus":-2,"identifier":"system.attributes.agility","modifier":"-1"},"rank":0},"effects":[],"flags":{"core":{"sourceId":"Item.6fTZ6hOKR4pWbWOe"}},"_stats":{"systemId":"bol","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669218607632,"modifiedTime":1669234720255,"lastModifiedBy":"kQghu0tL1dft5xLu"},"_id":"eXPNwGQiwnIiGYaK","folder":null,"sort":0,"ownership":{"default":0,"kQghu0tL1dft5xLu":3}}
|
||||
{"name":"Aura -1","type":"feature","img":"icons/consumables/potions/bottle-conical-corked-labeled-skull-poison-green.webp","system":{"category":null,"subtype":"boleffect","description":"","properties":{"ismalusdice":false,"bonusmalus":-2,"identifier":"system.attributes.appeal","modifier":"-1"},"rank":0},"effects":[],"flags":{"core":{"sourceId":"Item.6fTZ6hOKR4pWbWOe"}},"_stats":{"systemId":"bol","systemVersion":"10.3.3","coreVersion":"10.290","createdTime":1669218607632,"modifiedTime":1669234720256,"lastModifiedBy":"kQghu0tL1dft5xLu"},"_id":"zwSNMO9HpiqUCMt8","folder":null,"sort":0,"ownership":{"default":0,"kQghu0tL1dft5xLu":3}}
|
@ -1,4 +1,4 @@
|
||||
{"_id":"19p4FnLRVdw6cx7Y","name":"Arbalète","type":"item","img":"icons/weapons/crossbows/crossbow-blue.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Arbalète</h1><p>une arme de tir qui nécessite peu d’entraînement et offre beaucoup de puissance. Les lourds projectiles tirés par une arbalète portent le nom de carreaux. Il faut un round complet pour charger une arbalète.</p>","properties":{"ranged":true,"melee":false,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":true,"reloadable":true,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"2h":true,"damage":"d6","range":30,"reload":1,"slot":"2hands","attackAttribute":"agility","attackAptitude":"ranged","attackModifiers":null,"damageAttribute":"half-vigor","damageModifiers":null,"damageReroll1":false,"weaponSize":"medium","attackBonusDice":false,"damageMultiplier":"1"},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"_id":"19p4FnLRVdw6cx7Y","name":"Arbalète","type":"item","img":"icons/weapons/crossbows/crossbow-blue.webp","effects":[],"folder":null,"sort":0,"flags":{},"system":{"category":"equipment","subtype":"weapon","description":"<h1>Arbalète</h1><p>une arme de tir qui nécessite peu d’entraînement et offre beaucoup de puissance. Les lourds projectiles tirés par une arbalète portent le nom de carreaux. Il faut un round complet pour charger une arbalète.</p>","properties":{"ranged":true,"melee":false,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":true,"reloadable":true,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"2h":true,"damage":"d6","range":30,"reload":1,"slot":"2hands","attackAttribute":"agility","attackAptitude":"ranged","attackModifiers":null,"damageAttribute":"half-vigor","damageModifiers":null,"damageReroll1":false,"weaponSize":"medium","attackBonusDice":false,"damageMultiplier":"1","natural":false,"onlymodifier":false},"quantity":null,"weight":null,"price":0,"worn":false},"ownership":{"default":0,"EEnCVoPAR7pMjRym":3},"_stats":{"systemId":"bol","systemVersion":"10.3.2","coreVersion":"10.290","createdTime":null,"modifiedTime":1669209273712,"lastModifiedBy":"zN9ZZg5J7XzNELjd"}}
|
||||
{"_id":"3U9Gl7g8D5Ih72HQ","name":"Hache","type":"item","img":"icons/weapons/axes/axe-broad-engraved.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Hache</h1><p>un fer à un ou deux tranchants (qui peut être en bronze, en fer ou en acier) monté sur un manche en bois.</p>","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"throwable":false,"range":3,"damage":"d6","slot":"none","attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"weaponSize":"medium","damageAttribute":"vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"_id":"3UUZjuD4Esgj4ENP","name":"Épée","type":"item","img":"icons/weapons/swords/greatsword-guard-gem-blue.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Épée</h1><p>l’arme favorite des héros. Elle se décline en différents modèles utilisés un peu partout en Lémurie, comme les sabres d’abordage, les tulwars, les cimeterres ou les épées longues. Inscrivez le nom de l’arme que vous voulez sur la fiche de votre personnage en fonction de l’image que vous vous faites de ce dernier. Mais au final, une épée reste une longue lame utilisée pour tuer l’ennemi.</p>","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"damage":"d6","slot":"none","attackBonusDice":false,"throwable":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"weaponSize":"light","damageAttribute":"vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"_id":"3xSSlnw9CDhwg67c","name":"Lance","type":"item","img":"icons/weapons/polearms/glaive-simple.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Lance</h1><p>une hampe de bois de 1,80 m de long (parfois davantage), pourvue d’une pointe, qui peut être lancée ou utilisée au corps à corps, notamment contre des adversaires montés.</p>","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"throwable":false,"range":6,"damage":"d6","slot":"none","attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"weaponSize":"medium","damageAttribute":"vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
@ -6,6 +6,8 @@
|
||||
{"_id":"4GyTrBGnvlyqoh38","name":"Dague","type":"item","img":"icons/weapons/daggers/dagger-jeweled-purple.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Dague</h1><p>cette catégorie regroupe toutes les lames courtes destinées à lacérer ou poignarder un adversaire. Les dagues sont à un ou deux tranchants selon les modèles, et peuvent être lancées aussi bien qu’utilisées au corps à corps. Facilement dissimulable, la dague est l’arme favorite des truands et des assassins.</p>","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":true,"activable":false,"concealable":true,"ignoreshield":false,"powder":false,"bashing":false,"throwable":false,"range":3,"damage":"d6M","slot":"none","stacksize":null,"attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"weaponSize":"light","damageAttribute":"vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"_id":"4NEaikxe0k1vzeqI","name":"Morgenstern","type":"item","img":"icons/weapons/maces/flail-spiked-grey.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Morgenstern</h1><p>une grosse boule de métal hérissée de pointes, montée à l’extrémité d’une longue hampe de 1,20 à 1,50 m de long. Rudimentaire, mais efficace.</p>","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":true,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"damage":"d6B","slot":"none","attackBonusDice":false,"throwable":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"weaponSize":"heavy","damageAttribute":"vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"name":"Lance (Lancer)","type":"item","img":"icons/weapons/polearms/glaive-simple.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Lance</h1><p>une hampe de bois de 1,80 m de long (parfois davantage), pourvue d’une pointe, qui peut être lancée ou utilisée au corps à corps, notamment contre des adversaires montés.</p>","properties":{"ranged":true,"melee":false,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":true,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"throwable":false,"range":6,"damage":"d6","slot":"none","attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"ranged","attackModifiers":null,"weaponSize":"medium","damageAttribute":"half-vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Compendium.bol.equipment.3xSSlnw9CDhwg67c"}},"_id":"4k3SUYYCnqc9uNCm"}
|
||||
{"name":"Projectiles","type":"item","img":"icons/weapons/artillery/ballista-wood-green.webp","system":{"category":"vehicleweapon","subtype":"armor","description":"<p>L’équipage du navire envoie une volée de projectiles (javelines, flèches, billes de fronde) sur le vaisseau ennemi, à condition que ce dernier se trouve au maximum à portée Longue.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"isfiredamage":false,"ishulldamage":false,"iscrewdamage":true,"hulldamage":"d6","hullDamageMultiplier":"1","crewdamage":"d6","crewDamageMultiplier":"1"},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"flags":{},"_stats":{"systemId":"bol","systemVersion":"10.2.1","coreVersion":"10.287","createdTime":1665332723905,"modifiedTime":1665384335829,"lastModifiedBy":"kQghu0tL1dft5xLu"},"_id":"55CWxwKSYgBCbLrG","folder":null,"sort":0,"ownership":{"default":0,"kQghu0tL1dft5xLu":3}}
|
||||
{"name":"Cimeterre","type":"item","img":"icons/weapons/swords/scimitar-guard-red.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.bol.equipment.3UUZjuD4Esgj4ENP"}},"system":{"category":"equipment","subtype":"weapon","description":"<h1>Épée</h1><p>l’arme favorite des héros. Elle se décline en différents modèles utilisés un peu partout en Lémurie, comme les sabres d’abordage, les tulwars, les cimeterres ou les épées longues. Inscrivez le nom de l’arme que vous voulez sur la fiche de votre personnage en fonction de l’image que vous vous faites de ce dernier. Mais au final, une épée reste une longue lame utilisée pour tuer l’ennemi.</p>","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"damage":"d6","slot":"none","attackBonusDice":false,"throwable":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"weaponSize":"light","damageAttribute":"vigor","damageModifiers":1,"damageMultiplier":"1","damageReroll1":false,"natural":false,"onlymodifier":false},"quantity":null,"weight":null,"price":0,"worn":false},"ownership":{"default":0,"EEnCVoPAR7pMjRym":3,"zN9ZZg5J7XzNELjd":3},"_stats":{"systemId":"bol","systemVersion":"10.3.2","coreVersion":"10.290","createdTime":1669206284323,"modifiedTime":1669206324202,"lastModifiedBy":"zN9ZZg5J7XzNELjd"},"folder":null,"sort":0,"_id":"9WkrG0m6w04nq2CG"}
|
||||
{"name":"Massue (Lancer)","type":"item","img":"icons/weapons/clubs/club-simple-stone-purple.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Massue</h1><p>la version lourde du gourdin. Une massue consiste en un solide manche en bois dont l’extrémité, plus volumineuse, sert à fracasser le crâne de ses adversaires, d’où son autre nom de casse-tête.</p>","properties":{"ranged":true,"melee":false,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":true,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"throwable":true,"range":3,"damage":"d6","slot":"none","attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"ranged","attackModifiers":null,"weaponSize":"medium","damageAttribute":"half-vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Compendium.bol.equipment.pncWIrD5z7mk6dbc"}},"_id":"9dk1DqMpZXCgvS2r"}
|
||||
{"_id":"9mDDJnPsOCZRGPJN","name":"Gourdin","type":"item","img":"icons/weapons/clubs/club-barbed-square-black.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Gourdin</h1><p>c’est l’arme la plus rudimentaire qui soit. Un gourdin consiste généralement en un bâton de bois noueux, extrêmement dur et mesurant moins de 90 cm de long. Par commodité, on regroupe sous ce terme toute autre arme contondante du même genre (matraque, etc.). Il est possible d’utiliser un gourdin pour infliger des dégâts non létaux et assommer son ennemi plutôt que de le tuer.</p>","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":true,"damage":"d6M","slot":"none","attackBonusDice":false,"throwable":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"weaponSize":"light","damageAttribute":"vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"_id":"AMDFMOvMhdapUJJF","name":"Dague (Lancer)","type":"item","img":"icons/weapons/daggers/dagger-jeweled-purple.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Dague</h1><p>cette catégorie regroupe toutes les lames courtes destinées à lacérer ou poignarder un adversaire. Les dagues sont à un ou deux tranchants selon les modèles, et peuvent être lancées aussi bien qu’utilisées au corps à corps. Facilement dissimulable, la dague est l’arme favorite des truands et des assassins.</p>","properties":{"ranged":true,"melee":false,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":true,"stackable":true,"activable":false,"concealable":true,"ignoreshield":false,"powder":false,"bashing":false,"throwable":false,"range":3,"damage":"d6M","slot":"none","stacksize":null,"attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"ranged","attackModifiers":null,"weaponSize":"light","damageAttribute":"half-vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Compendium.bol.equipment.4GyTrBGnvlyqoh38"}}}
|
||||
@ -15,16 +17,22 @@
|
||||
{"name":"Masse d’armes (Lancer)","type":"item","img":"icons/weapons/maces/mace-flanged-steel.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Masse d’armes</h1><p>cette arme a la même forme qu’un gourdin, mais possède une tête en métal, souvent agrémentée de pointes ou d’ailettes pour plus d’efficacité. Les masses d’armes à une main peuvent se lancer, mais à courte distance, car elles ne sont pas vraiment prévues pour cet usage.</p>","properties":{"ranged":true,"melee":false,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":true,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"throwable":false,"range":1.5,"damage":"d6","slot":"none","attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"ranged","attackModifiers":null,"weaponSize":"medium","damageAttribute":"half-vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Compendium.bol.equipment.AUqk1SXktM4iDXvr"}},"_id":"BcYQ4pigZSXp1jWb"}
|
||||
{"_id":"D1UjDptdZGFg6Ggx","name":"Hache (Lancer)","type":"item","img":"icons/weapons/axes/axe-broad-engraved.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Hache</h1><p>un fer à un ou deux tranchants (qui peut être en bronze, en fer ou en acier) monté sur un manche en bois.</p>","properties":{"ranged":true,"melee":false,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":true,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"throwable":false,"range":3,"damage":"d6","slot":"none","attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"ranged","attackModifiers":null,"weaponSize":"medium","damageAttribute":"half-vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Compendium.bol.equipment.3U9Gl7g8D5Ih72HQ"}}}
|
||||
{"_id":"E8XHWMpwVHjPZV3M","name":"Hâche à deux mains","type":"item","img":"icons/weapons/axes/axe-double-brown.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Hâche à deux mains</h1><p>Une lourde hache s’utilisant à deux mains.</p>","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":true,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"damage":"d6B","slot":"none","attackBonusDice":false,"throwable":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"weaponSize":"heavy","damageAttribute":"vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"name":"Kriss","type":"item","img":"icons/weapons/daggers/dagger-jeweled-purple.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.bol.equipment.4GyTrBGnvlyqoh38"}},"system":{"category":"equipment","subtype":"weapon","description":"<h1>Dague</h1><p>cette catégorie regroupe toutes les lames courtes destinées à lacérer ou poignarder un adversaire. Les dagues sont à un ou deux tranchants selon les modèles, et peuvent être lancées aussi bien qu’utilisées au corps à corps. Facilement dissimulable, la dague est l’arme favorite des truands et des assassins.</p>","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":true,"activable":false,"concealable":true,"ignoreshield":false,"powder":false,"bashing":false,"throwable":false,"range":3,"damage":"d6M","slot":"none","stacksize":null,"attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"weaponSize":"light","damageAttribute":"vigor","damageModifiers":1,"damageMultiplier":"1","damageReroll1":false,"natural":false,"onlymodifier":false},"quantity":null,"weight":null,"price":0,"worn":true},"ownership":{"default":0,"EEnCVoPAR7pMjRym":3,"zN9ZZg5J7XzNELjd":3},"_stats":{"systemId":"bol","systemVersion":"10.3.2","coreVersion":"10.290","createdTime":1662130019228,"modifiedTime":1669197345576,"lastModifiedBy":"zN9ZZg5J7XzNELjd"},"folder":null,"sort":0,"_id":"EbvPPc9hFGudZYeP"}
|
||||
{"name":"Catapulte (Pierre)","type":"item","img":"icons/weapons/artillery/catapult-simple.webp","system":{"category":"vehicleweapon","subtype":"armor","description":"<p>Les catapultes peuvent tirer des pierres ou des pots de goudron enflammé jusqu’à une portée<br>Extrême. Les pierres font des dégâts à la coque et au gréement du navire, mais peuvent aussi<br>tuer des matelots. Un pot à feu qui explose sur le pont arrose la coque et l’équipage de goudron<br>enflammé, qui continue à brûler jusqu’à ce que l’incendie soit maîtrisé.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"isfiredamage":false,"ishulldamage":true,"iscrewdamage":true,"hulldamage":"d6","hullDamageMultiplier":"1","crewdamage":"d3","crewDamageMultiplier":"1"},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"flags":{},"_stats":{"systemId":"bol","systemVersion":"10.2.1","coreVersion":"10.287","createdTime":1665332723905,"modifiedTime":1665384335828,"lastModifiedBy":"kQghu0tL1dft5xLu"},"_id":"FEEgNQr54HLmbxb4","folder":null,"sort":0,"ownership":{"default":0,"kQghu0tL1dft5xLu":3}}
|
||||
{"_id":"G0qpJmjQPSJshPsC","name":"Bâton-Fronde","type":"item","img":"icons/weapons/slings/slingshot-wood.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Bâton-Fronde</h1><p>Version plus puissante de la fronde, montée au bout d’un bâton (ce qui en fait une arme à deux mains), qui permet des tirs à plus longue portée.</p>","properties":{"ranged":true,"melee":false,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":true,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"2h":true,"damage":"d6M","range":18,"reload":0,"slot":"none","attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"ranged","attackModifiers":null,"weaponSize":"light","damageAttribute":"half-vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"_id":"Gm8Qpfuay4hu2ihq","name":"Grand bouclier","type":"item","img":"icons/equipment/shield/wardoor-wooden-boss-brown.webp","data":{"category":"equipment","subtype":"shield","description":"<h1>Grand bouclier</h1><p>Un personnage ne peut bénéficier de son bouclier que s’il est conscient de l’attaque qui le vise, et donc s’il est prêt à la parer.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":true,"weapon":false,"armor":false,"helm":false,"shield":true,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"modifiers":{"agility":-1,"init":0,"powercost":0,"social":false},"blocking":{"malus":-1,"nbAttacksPerRound":"1","blocking1":false,"blockingAll":true},"slot":"none"},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"name":"Outils de Crochetage","type":"item","img":"icons/sundries/misc/key-angular-white.webp","data":{"category":"equipment","subtype":"other","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"slot":"chest"},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"zN9ZZg5J7XzNELjd":3},"flags":{"core":{"sourceId":"Item.rk4tvTBFlLe87mRM"}},"_id":"HZpsorw1Okd07bvh"}
|
||||
{"_id":"LDklxAUh1IPNPnyi","name":"Mains Nues","type":"item","img":"icons/skills/melee/unarmed-punch-fist.webp","data":{"category":"equipment","subtype":"weapon","description":"","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"concealable":false,"ignoreshield":false,"attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"weaponSize":"unarmed","damage":"d3","damageAttribute":"half-vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false,"bashing":true,"throwable":false},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"zN9ZZg5J7XzNELjd":3},"flags":{"core":{"sourceId":"Item.BSoDfbLMBtwZllDb"}}}
|
||||
{"name":"Corde + Grappin","type":"item","img":"icons/sundries/survival/rope-wrapped-brown.webp","data":{"category":"equipment","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"slot":"chest"},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"zN9ZZg5J7XzNELjd":3},"flags":{"core":{"sourceId":"Item.rk4tvTBFlLe87mRM"}},"_id":"NRBT2VmdzhjDL4fW"}
|
||||
{"name":"Armes Improvisée (Lancer)","type":"item","img":"icons/tools/cooking/knife-cleaver-steel-grey.webp","data":{"category":"equipment","subtype":"weapon","description":"","properties":{"ranged":true,"melee":false,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":true,"stackable":false,"concealable":false,"ignoreshield":false,"attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"ranged","attackModifiers":null,"weaponSize":"improvised","damage":"d3","damageAttribute":"half-vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false,"bashing":true,"throwable":false,"range":null},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"zN9ZZg5J7XzNELjd":3},"flags":{"core":{"sourceId":"Item.BSoDfbLMBtwZllDb"}},"_id":"Oe330qkRSJAQ88mX"}
|
||||
{"name":"Abordage","type":"item","img":"icons/weapons/swords/scimitar-guard-gold.webp","system":{"category":"vehicleweapon","subtype":"weapon","description":"<p>Une action d’Abordage peut être tentée si deux navires sont bloqués l’un contre l’autre suite à une action réussie d’Éperonner ou de Lancer les grappins. L’Abordage est la seule action pour laquelle il n’y a pas de limite aux points de ressources que vous pouvez engager afin d’avoir un bonus au jet d’attaque. L’Abordage est aussi l’occasion pour des héros d’entreprendre des Actions héroïques en mer, de la même façon qu’ils peuvent le faire lors de batailles terrestres. Ces actions formeront une petite aventure à part entière, par exemple si les héros doivent fouiller le navire ennemi tout en affrontant son équipage.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"isfiredamage":false,"ishulldamage":false,"iscrewdamage":true,"hulldamage":"d6","hullDamageMultiplier":"1","crewdamage":"d6","crewDamageMultiplier":"1","isboarding":true,"isspur":false,"isbreakrow":false},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"flags":{},"_stats":{"systemId":"bol","systemVersion":"10.3.2","coreVersion":"10.290","createdTime":1665332723905,"modifiedTime":1669197331084,"lastModifiedBy":"zN9ZZg5J7XzNELjd"},"_id":"Oyz8RcFNq6MzDUBO","folder":null,"sort":0,"ownership":{"default":0,"kQghu0tL1dft5xLu":3}}
|
||||
{"name":"Armes Improvisée","type":"item","img":"icons/tools/hand/shovel-spade-steel-grey.webp","data":{"category":"equipment","subtype":"weapon","description":"","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"concealable":false,"ignoreshield":false,"attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"weaponSize":"improvised","damage":"d3","damageAttribute":"vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false,"bashing":true,"throwable":false},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"zN9ZZg5J7XzNELjd":3},"flags":{"core":{"sourceId":"Item.BSoDfbLMBtwZllDb"}},"_id":"RNHBCCGlpPNIkbFu"}
|
||||
{"name":"Armes Improvisée (Lancer)","type":"item","img":"icons/tools/cooking/knife-cleaver-steel-grey.webp","effects":[],"flags":{"core":{"sourceId":"Item.BSoDfbLMBtwZllDb"}},"system":{"category":"equipment","subtype":"weapon","description":"","properties":{"ranged":true,"melee":false,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":true,"stackable":false,"concealable":false,"ignoreshield":false,"attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"ranged","attackModifiers":null,"weaponSize":"improvised","damage":"d3","damageAttribute":"half-vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false,"bashing":true,"throwable":false,"range":null},"quantity":1,"weight":0,"price":0,"worn":false},"ownership":{"default":0,"zN9ZZg5J7XzNELjd":3},"_stats":{"systemId":"bol","systemVersion":"10.3.2","coreVersion":"10.290","createdTime":1669197361967,"modifiedTime":1669197361967,"lastModifiedBy":"zN9ZZg5J7XzNELjd"},"folder":null,"sort":0,"_id":"URCyzJr7vFAIuN3b"}
|
||||
{"name":"Couteau de Lancer","type":"item","img":"icons/weapons/daggers/dagger-twin-curved-black.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.bol.equipment.4GyTrBGnvlyqoh38"}},"system":{"category":"equipment","subtype":"weapon","description":"<h1>Dague</h1><p>cette catégorie regroupe toutes les lames courtes destinées à lacérer ou poignarder un adversaire. Les dagues sont à un ou deux tranchants selon les modèles, et peuvent être lancées aussi bien qu’utilisées au corps à corps. Facilement dissimulable, la dague est l’arme favorite des truands et des assassins.</p>","properties":{"ranged":true,"melee":false,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":true,"stackable":true,"activable":false,"concealable":true,"ignoreshield":false,"powder":false,"bashing":false,"throwable":false,"range":3,"damage":"d6M","slot":"none","stacksize":null,"attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"ranged","attackModifiers":null,"weaponSize":"light","damageAttribute":"half-vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false,"natural":false,"onlymodifier":false},"quantity":2,"weight":null,"price":0,"worn":false},"ownership":{"kQghu0tL1dft5xLu":3,"zN9ZZg5J7XzNELjd":3},"_stats":{"systemId":"bol","systemVersion":"10.3.2","coreVersion":"10.290","createdTime":1669209202825,"modifiedTime":1669209256671,"lastModifiedBy":"zN9ZZg5J7XzNELjd"},"folder":null,"sort":0,"_id":"W3q72Hop6XYopxpU"}
|
||||
{"name":"Gourdin Clouté","type":"item","img":"icons/weapons/clubs/club-barbed-square-black.webp","effects":[],"flags":{"core":{"sourceId":"Compendium.bol.equipment.9mDDJnPsOCZRGPJN"}},"system":{"category":"equipment","subtype":"weapon","description":"<h1>Gourdin</h1><p>c’est l’arme la plus rudimentaire qui soit. Un gourdin consiste généralement en un bâton de bois noueux, extrêmement dur et mesurant moins de 90 cm de long. Par commodité, on regroupe sous ce terme toute autre arme contondante du même genre (matraque, etc.). Il est possible d’utiliser un gourdin pour infliger des dégâts non létaux et assommer son ennemi plutôt que de le tuer.</p>","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":true,"damage":"d6","slot":"none","attackBonusDice":false,"throwable":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"weaponSize":"light","damageAttribute":"vigor","damageModifiers":2,"damageMultiplier":"1","damageReroll1":false,"natural":false,"onlymodifier":false},"quantity":null,"weight":null,"price":0,"worn":false},"ownership":{"default":0,"EEnCVoPAR7pMjRym":3,"zN9ZZg5J7XzNELjd":3},"_stats":{"systemId":"bol","systemVersion":"10.3.2","coreVersion":"10.290","createdTime":1669208789210,"modifiedTime":1669208814086,"lastModifiedBy":"zN9ZZg5J7XzNELjd"},"folder":null,"sort":0,"_id":"Wq2zN2XVbYwqw2ki"}
|
||||
{"name":"Bottes","type":"item","img":"icons/equipment/feet/boots-collared-leather-brown.webp","data":{"category":"equipment","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"slot":"chest"},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"zN9ZZg5J7XzNELjd":3},"flags":{"core":{"sourceId":"Item.rk4tvTBFlLe87mRM"}},"_id":"X3AR5En9mQhGUrOA"}
|
||||
{"_id":"Z2AaQKweMljBAgt6","name":"Arc","type":"item","img":"icons/weapons/bows/longbow-leather-green.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Arc</h1><p>une longue tige flexible en bois dont les extrémités sont reliées par une corde et qui permet de tirer des flèches. Il existe différentes formes d’arcs.</p>","properties":{"ranged":true,"melee":false,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":true,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"2h":true,"damage":"d6","range":22,"reload":0,"slot":"none","attackAttribute":"agility","attackAptitude":"ranged","attackModifiers":null,"damageAttribute":"half-vigor","damageModifiers":null,"damageReroll1":false,"attackBonusDice":false,"weaponSize":"medium","damageMultiplier":"1"},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"name":"Sac","type":"item","img":"icons/containers/bags/pack-leather-black-brown.webp","data":{"category":"equipment","subtype":"container","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"slot":"chest"},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"zN9ZZg5J7XzNELjd":3},"flags":{"core":{"sourceId":"Item.rk4tvTBFlLe87mRM"}},"_id":"aclqGClakTbXVwAK"}
|
||||
{"name":"Briser les Rames","type":"item","img":"icons/tools/nautical/steering-wheel.webp","system":{"category":"vehicleweapon","subtype":"armor","description":"<p>Le navire attaquant frôle le navire ennemi dans le but de briser ses rangées de rames afin de<br>l’immobiliser sans le couler. Pour cette manœuvre, les navires doivent commencer le round à Bout<br>portant ou à portée Courte. L’attaquant effectue un jet d’action. Le défenseur peut utiliser ses<br>ressources pour éviter l’attaque (ce qui lui octroie un bonus en défense).</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"isfiredamage":false,"ishulldamage":true,"iscrewdamage":false,"hulldamage":"d6","hullDamageMultiplier":"1","crewdamage":"d6","crewDamageMultiplier":"1","isboarding":false,"isspur":false,"isbreakrow":true},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"flags":{},"_stats":{"systemId":"bol","systemVersion":"10.2.1","coreVersion":"10.287","createdTime":1665332723905,"modifiedTime":1665384335828,"lastModifiedBy":"kQghu0tL1dft5xLu"},"_id":"c8XSKMNX8hFr1Lgf","folder":null,"sort":0,"ownership":{"default":0,"kQghu0tL1dft5xLu":3}}
|
||||
{"_id":"cS2LGlXLZegvRGOo","name":"Arbalète lourde","type":"item","img":"icons/weapons/crossbows/crossbow-golden-bolt.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Arbalète lourde</h1><p>plus lourde et plus puissante qu’une arbalète normale, l’arbalète lourde est peu usitée en Lémurie, sauf comme arme de siège portative. Il faut 2 rounds complets pour charger une arbalète lourde.</p>","properties":{"ranged":true,"melee":false,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":true,"reloadable":true,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"2h":true,"damage":"d6B","range":45,"reload":2,"slot":"none","attackAttribute":"agility","attackAptitude":"ranged","attackModifiers":null,"damageAttribute":"half-vigor","damageModifiers":null,"damageReroll1":false,"attackBonusDice":false,"weaponSize":"heavy","damageMultiplier":"1"},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"_id":"d7UV55xQXXfMiGQI","name":"Fronde","type":"item","img":"icons/weapons/slings/slingshot-wood.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Fronde</h1><p>simple pièce de cuir équipée de lanières, une fronde permet de projeter de petites pierres ou des billes de plomb avec une certaine force. C’est une arme peu coûteuse et facile à fabriquer. Il existe une version plus puissante, montée au bout d’un bâton (ce qui en fait une arme à deux mains), qui permet des tirs à plus longue portée.</p>","properties":{"ranged":true,"melee":false,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":true,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"damage":"d6M","range":9,"reload":0,"slot":"none","attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"ranged","attackModifiers":null,"weaponSize":"unarmed","damageAttribute":"half-vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"_id":"gCbETPg0ROGdDfHS","name":"Arc Ghataï","type":"item","img":"icons/weapons/bows/longbow-recurve-brown.webp","data":{"category":"equipment","subtype":"weapon","description":"<p>L’arme emblématique des Ghataï est un arc composite, particulièrement adapté pour des cavaliers. Les archers de cavalerie forment le gros des forces gathaï, qui utilisent des tactiques de harcèlement plutôt que de charge frontale.</p>","properties":{"ranged":true,"melee":false,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":true,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"concealable":false,"ignoreshield":false,"attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"ranged","attackModifiers":null,"weaponSize":"unarmed","damage":"d6","damageAttribute":"half-vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false,"slot":"2hands","bashing":false,"throwable":false,"range":22},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"vpqjUad9wWS9Gk5R":3},"flags":{"core":{"sourceId":"Item.ltAvk5pqfNeqF8gO"}}}
|
||||
@ -35,8 +43,10 @@
|
||||
{"_id":"pncWIrD5z7mk6dbc","name":"Massue","type":"item","img":"icons/weapons/clubs/club-simple-stone-purple.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Massue</h1><p>la version lourde du gourdin. Une massue consiste en un solide manche en bois dont l’extrémité, plus volumineuse, sert à fracasser le crâne de ses adversaires, d’où son autre nom de casse-tête.</p>","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"throwable":false,"range":3,"damage":"d6","slot":"none","attackBonusDice":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"weaponSize":"medium","damageAttribute":"vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"_id":"qG5Jlhjjh7vDtBB1","name":"Fléau","type":"item","img":"icons/weapons/maces/flail-triple-grey.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Fléau</h1><p>un fléau consiste en un manche de bois prolongé d’une chaîne, à l’extrémité de laquelle est fixée une boule hérissée de pointes métalliques. Les fléaux ne sont pas des armes employées couramment en Lémurie, mais les gladiateurs en utilisent parfois dans les arènes. Les attaques au fléau ignorent le bonus en défense accordé par l’emploi d’un bouclier.</p>","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":true,"powder":false,"bashing":false,"damage":"d6","slot":"none","attackBonusDice":false,"throwable":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"weaponSize":"medium","damageAttribute":"vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"_id":"rVLqiqxtfsZ7z6Hw","name":"Rapière","type":"item","img":"icons/weapons/swords/greatsword-flamberge.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Rapière</h1><p>cette épée fine et légère est essentiellement utilisée par les bellâtres et les courtisans des cités-états de Lémurie, chez qui l’escrime a été élevé au rang d’art. La rapière s’utilise généralement en conjonction avec une dague de parade (aussi appelée main gauche), un petit bouclier, ou une simple cape roulée en boule.</p>","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"damage":"d6M","slot":"none","attackBonusDice":false,"throwable":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"weaponSize":"light","damageAttribute":"vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"name":"Crache Feu","type":"item","img":"icons/weapons/artillery/cannon-engraved-gold.webp","system":{"category":"vehicleweapon","subtype":"armor","description":"<p>L’usage de cet appareil d’alchimiste exige des compétences particulières. Sa conception comme<br>la formule du produit qui l’alimente sont des secrets jalousement gardés. Le crache-feu est un<br>gros réservoir pressurisé équipé d’un tube à son sommet. La machine tire un jet de liquide brûlant<br>à de grandes distances (jusqu’à portée Longue).</p>\n<p>Les flammes sont presque impossibles à éteindre.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"isfiredamage":true,"ishulldamage":true,"iscrewdamage":true,"hulldamage":"d6","hullDamageMultiplier":"1","crewdamage":"d6","crewDamageMultiplier":"1","isboarding":false,"isspur":false,"isbreakrow":false},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"flags":{},"_stats":{"systemId":"bol","systemVersion":"10.2.1","coreVersion":"10.287","createdTime":1665332723905,"modifiedTime":1665384335828,"lastModifiedBy":"kQghu0tL1dft5xLu"},"_id":"uBTjNOW9I8dAJPdv","folder":null,"sort":0,"ownership":{"default":0,"kQghu0tL1dft5xLu":3}}
|
||||
{"_id":"vN3CHxyOrXuXHQRY","name":"Bâton","type":"item","img":"icons/weapons/staves/staff-simple-gold.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Bâton</h1><p>une longueur de bois robuste (environ 1,80 m de hauteur), qui sert aussi bien de bâton de marche que d’arme.</p>","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":true,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":true,"damage":"d6","slot":"none","throwable":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"damageAttribute":"vigor","damageModifiers":null,"damageReroll1":false,"attackBonusDice":false,"weaponSize":"unarmed","damageMultiplier":"1"},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"name":"Somnifère","type":"item","img":"icons/consumables/potions/bottle-bulb-corked-labeled-blue.webp","data":{"category":"equipment","subtype":"other","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"slot":"chest"},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"zN9ZZg5J7XzNELjd":3},"flags":{"core":{"sourceId":"Item.rk4tvTBFlLe87mRM"}},"_id":"vgJSyqc6VVxfbWsC"}
|
||||
{"name":"Catapulte (Feu)","type":"item","img":"icons/weapons/artillery/catapult-simple.webp","system":{"category":"vehicleweapon","subtype":"armor","description":"<p>Les catapultes peuvent tirer des pierres ou des pots de goudron enflammé jusqu’à une portée<br>Extrême. Les pierres font des dégâts à la coque et au gréement du navire, mais peuvent aussi<br>tuer des matelots. Un pot à feu qui explose sur le pont arrose la coque et l’équipage de goudron<br>enflammé, qui continue à brûler jusqu’à ce que l’incendie soit maîtrisé.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"isfiredamage":true,"ishulldamage":true,"iscrewdamage":true,"hulldamage":"d3","hullDamageMultiplier":"1","crewdamage":"d3","crewDamageMultiplier":"1"},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"flags":{},"_stats":{"systemId":"bol","systemVersion":"10.2.1","coreVersion":"10.287","createdTime":1665332723905,"modifiedTime":1665384335828,"lastModifiedBy":"kQghu0tL1dft5xLu"},"_id":"vgyGk9PEKJOqfZH2","folder":null,"sort":0,"ownership":{"default":0,"kQghu0tL1dft5xLu":3}}
|
||||
{"name":"Lanterne + Huile + Silex","type":"item","img":"icons/sundries/lights/lantern-iron-yellow.webp","data":{"category":"equipment","subtype":"other","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"slot":"chest"},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"zN9ZZg5J7XzNELjd":3},"flags":{"core":{"sourceId":"Item.rk4tvTBFlLe87mRM"}},"_id":"x86khXdimiKSujjy"}
|
||||
{"_id":"xH95daHpPAQWuiYp","name":"Arme d’hast","type":"item","img":"icons/weapons/polearms/halberd-crescent-small-spiked.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Arme d’hast</h1><p>ce nom recouvre une catégorie d’armes possédant toutes un fer destiné à frapper, fixé au bout d’une longue hampe en bois, qui offre à son utilisateur une grande allonge. Selon leur forme, ces armes à deux mains portent le nom de hallebarde, coutille, guisarme, vouge…</p>","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":true,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"damage":"d6B","slot":"none","throwable":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"damageAttribute":"vigor","damageModifiers":null,"damageReroll1":false,"attackBonusDice":false,"weaponSize":"unarmed","damageMultiplier":"1"},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
{"_id":"xYWeGSCfnPwTq0rV","name":"Épée à deux mains","type":"item","img":"icons/weapons/swords/greatsword-crossguard-silver.webp","data":{"category":"equipment","subtype":"weapon","description":"<h1>Épée à deux mains</h1><p>Une lourde épée pouvant mesurer jusqu’à 1,80 m de long pour les plus grandes, et s’utilisant à deux mains. Elle peut porter différents noms selon les modèles : claymore, espadon, épée bâtarde…</p>","properties":{"ranged":false,"melee":true,"spell":false,"protection":false,"weapon":true,"armor":false,"helm":false,"shield":false,"equipable":true,"consumable":false,"magical":false,"2H":true,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"activable":false,"concealable":false,"ignoreshield":false,"powder":false,"bashing":false,"damage":"d6B","slot":"none","attackBonusDice":false,"throwable":false,"attackAttribute":"agility","attackAptitude":"melee","attackModifiers":null,"weaponSize":"heavy","damageAttribute":"vigor","damageModifiers":null,"damageMultiplier":"1","damageReroll1":false},"quantity":null,"weight":null,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"EEnCVoPAR7pMjRym":3},"flags":{}}
|
||||
|
@ -1,17 +1,17 @@
|
||||
{"name":"Pinxi","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.yRWlUr9BF1gr0hAe"}},"_id":"4CZOPpGP1YzYGLSB"}
|
||||
{"name":"Céruléen","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.2dZ1OrZgx6M47jl5"}},"_id":"61dDXTOhyN3VLHny"}
|
||||
{"name":"Yggdari","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.emz8WuzZsArE0v2U"}},"_id":"8LKy7DkKy8Cd3QuX"}
|
||||
{"name":"Beshaari","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.kzOlopZyDtVZHqca"}},"_id":"9PDA54isBWhIFGqw"}
|
||||
{"name":"Chant du Vent","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.Q9oqF2G0xqPzS08z"}},"_id":"AiG20gJfHhxWNF5v"}
|
||||
{"name":"Wei","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.yRWlUr9BF1gr0hAe"}},"_id":"LpdWKjWDblL4lVG8"}
|
||||
{"name":"Lemurien","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.XDWxHZYrzDyAKPrC"}},"_id":"RzrUDaHczkxVvk1b"}
|
||||
{"name":"Malakutien","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.8PUJGWZtZeARrV5C"}},"_id":"SlDoVbJ5ndxbDVFR"}
|
||||
{"name":"Valgardien","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.Kqy1EMnW5cygirUn"}},"_id":"Td6HDtdzJ2nlGDWa"}
|
||||
{"name":"Festroli","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.0qYsNoL6d0rhLPKl"}},"_id":"cqJnm3azUpN4GiD5"}
|
||||
{"name":"Shamite","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.hDyBLMY9ZDkcKEBs"}},"_id":"dyJoULpfzwZMlJrr"}
|
||||
{"name":"Axien","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.b0e4uZzlo4DFP2gv"}},"_id":"nMboUYMjDqzfASMM"}
|
||||
{"name":"Kashtien","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.RWHkb4OkXhZfURmw"}},"_id":"pUaLtMJVL0xhy2GM"}
|
||||
{"name":"Argot des Mers","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.yRWlUr9BF1gr0hAe"}},"_id":"tXDz4UokSbGh6Rhw"}
|
||||
{"name":"Grooth","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.OpUZ9bTcD7k8iGd1"}},"_id":"u5RK8dQRbcwHtcbM"}
|
||||
{"name":"Ghatai","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.yRWlUr9BF1gr0hAe"}},"_id":"vaAQiuAHdyQrQiUX"}
|
||||
{"name":"Démonique","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.fjq6EF5RN8JXr5vT"}},"_id":"zNHxODKXOL4LtYMe"}
|
||||
{"_id":"4CZOPpGP1YzYGLSB","name":"Pinxi","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>la langue des Xi Lu, encore communément parlée par cette ethnie, même si la plupart des Xi Lu apprennent au moins des rudiments de gathaï, la langue officielle du gouvernement du grand khan.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.yRWlUr9BF1gr0hAe"}}}
|
||||
{"_id":"61dDXTOhyN3VLHny","name":"Céruléen","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>Les nomades bleus parlent leur propre langue, qui n’a pas de forme écrite. Les marchands d’Oomis apprennent souvent le céruléen.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.2dZ1OrZgx6M47jl5"}}}
|
||||
{"_id":"8LKy7DkKy8Cd3QuX","name":"Yggdari","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>C’est le nom de l’ancienne langue des hommes (aussi appelée langue des Anciens). Peu d’individus la parlent aujourd’hui, et encore moins peuvent la lire. Il arrive cependant que d’antiques textes soient retrouvés dans les ruines d’Ygddar, de Qiddesh, de Qeb, de Qar ou d’Oosal, mais leur traduction requiert généralement les services d’un scribe particulièrement compétent.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.emz8WuzZsArE0v2U"}}}
|
||||
{"_id":"9PDA54isBWhIFGqw","name":"Beshaari","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>Les nomades du désert de Beshaar parlent et écrivent leur propre langue. La plupart des habitants d’Halakh parlent le beshaari en plus du lémurien.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.kzOlopZyDtVZHqca"}}}
|
||||
{"_id":"AiG20gJfHhxWNF5v","name":"Chant du Vent","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>La langue chantante des hommes-oiseaux peut évoquer tour à tour le son de la brise se faufilant entre les rochers escarpés des sommets et le sifflement des bourrasques s’engouffrant dans les canyons montagneux et les cavernes. Cette langue est très difficile à parler correctement pour un étranger. Elle possède une forme écrite, qui est tout aussi difficile à maîtriser et à traduire.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.Q9oqF2G0xqPzS08z"}}}
|
||||
{"_id":"LpdWKjWDblL4lVG8","name":"Wei","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>Les Wei possèdent leur propre langue, difficile à maîtriser pour des étrangers en raison de ses sonorités particulières, avec un emploi abondant de claquements de langue. Les Wei n’ont pas d’écriture ; leur culture repose sur la transmission orale des savoirs et des coutumes.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.yRWlUr9BF1gr0hAe"}}}
|
||||
{"_id":"RzrUDaHczkxVvk1b","name":"Lemurien","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>La langue la plus communément parlée en Lémurie. Chaque cité parle cependant son propre dialecte lémurien, ce qui veut dire qu’un voyageur aura parfois du mal à comprendre les gens du coin. Le MJ pourra à l’occasion vous demander de réussir un jet d’esprit pour communiquer avec des gens d’autres cités que la vôtre.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.XDWxHZYrzDyAKPrC"}}}
|
||||
{"_id":"SlDoVbJ5ndxbDVFR","name":"Malakutien","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>Lles habitants de Malakut et de la région environnante parlent leur propre langue.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.8PUJGWZtZeARrV5C"}}}
|
||||
{"_id":"Td6HDtdzJ2nlGDWa","name":"Valgardien","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>Les gens du Valgard parlent et écrivent leur propre langue, qui est étonnamment élaborée.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.Kqy1EMnW5cygirUn"}}}
|
||||
{"_id":"cqJnm3azUpN4GiD5","name":"Festreli","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>A l’origine, le festreli était un dialecte du lémurien, mais il s’en est tellement éloigné qu’il est à présent devenu presque inintelligible pour des locuteurs du lémurien.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.0qYsNoL6d0rhLPKl"}}}
|
||||
{"_id":"dyJoULpfzwZMlJrr","name":"Shamite","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>Les habitants de Shamballah et de la région environnante parlent leur propre langue.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.hDyBLMY9ZDkcKEBs"}}}
|
||||
{"_id":"nMboUYMjDqzfASMM","name":"Axien","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>L’axien est la langue des tribus barbares qui vivent dans la chaîne de l’Axos. Cette langue reste plutôt confinée à cette région montagneuse, mais on raconte que d’anciens textes datant de l’époque lointaine où l’axien était plus largement répandu seraient entreposés dans des grottes oubliées au cœur des montagnes.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.b0e4uZzlo4DFP2gv"}}}
|
||||
{"_id":"pUaLtMJVL0xhy2GM","name":"Kashtien","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>Les habitants des marais de Kasht ont leur propre langue, dont chaque tribu utilise une variante qui lui est propre.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.RWHkb4OkXhZfURmw"}}}
|
||||
{"_id":"tXDz4UokSbGh6Rhw","name":"Argot des Mers","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>Les îles du Crâne, à la population hétéroclite en provenance des quatre coins du monde, ont développé leur propre langue, un assemblage bigarré d’influences diverses. Il n’en existe pas de forme écrite.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.yRWlUr9BF1gr0hAe"}}}
|
||||
{"_id":"u5RK8dQRbcwHtcbM","name":"Grooth","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>Il ne s’agit pas d’une langue à proprement parler, mais plutôt d’un langage rudimentaire fait de grognements, de grimaces, de tapements du pied et de grands mouvements simiesques. Ce langage n’a pas de forme écrite et est totalement inusité en dehors des tribus des grooth.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.OpUZ9bTcD7k8iGd1"}}}
|
||||
{"_id":"vaAQiuAHdyQrQiUX","name":"Ghatai","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>Langue des nomades du sud du Khanat, le ghataï s’apparente à un dialecte ancien du lémurien, avec de nombreux emprunts au pinxi (cf. ci-dessous), pour le vocabulaire notamment. Avec un peu d’ effort et beaucoup de patience, un locuteur du lémurien sera en mesure de communiquer de manière rudimentaire avec des gens qui parlent le ghataï. Cette langue, qui à l’origine ne possédait pas son propre système d’écriture, utilise désormais celui du pinxi.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.yRWlUr9BF1gr0hAe"}}}
|
||||
{"_id":"zNHxODKXOL4LtYMe","name":"Démonique","type":"feature","img":"icons/skills/social/diplomacy-handshake-gray.webp","data":{"category":null,"subtype":"language","description":"<p>C’est l’ancienne langue des Rois- Sorciers, dans laquelle sont rédigés tous les textes remontant à leur époque. Les magiciens, alchimistes, druides et prêtres doivent apprendre le démonique s’ils veulent pouvoir utiliser les puissants sortilèges et recettes alchimiques de cette antique race. Ce langage est particulièrement ardu et ses formes orale et écrite exigent d’être apprises séparément. Les magiciens de Zalut conversent toujours en démonique, à moins de devoir parler à des étrangers.</p>","properties":{},"rank":0},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.fjq6EF5RN8JXr5vT"}}}
|
||||
|
42
packs/objets-alchimie.db
Normal file
42
packs/objets-alchimie.db
Normal file
@ -0,0 +1,42 @@
|
||||
{"name":"Serrure ou piège élaboré","type":"item","img":"icons/environment/traps/saw-steel.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>-4 pour les crocheter/désamorcer ; un piège inflige d6+1 points de dégâts</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"0Yhn3r8AFsKXEKeS"}
|
||||
{"name":"Lance-éclair","type":"item","img":"icons/weapons/crossbows/handcrossbow-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>une arme qui a vaguement la forme d’une arbalète et projette un éclair. Facteur de portée : 75 m ; d6 x2 points de dégâts ignorant les armure</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"1JMT3kjaWSP8umZ4"}
|
||||
{"name":"Armure Mythique","type":"item","img":"icons/equipment/chest/breastplate-helmet-metal.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>comme une armure légendaire, mais sans malus d’agilité ; un héros pourrait même nager en portant cette armure</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"1VKW5IwOhopbnD70"}
|
||||
{"name":"Horloge","type":"item","img":"icons/sundries/misc/hourglass-wood.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"2vB2YGtQUh2Uv1Fm"}
|
||||
{"name":"Habitation intelligente","type":"item","img":"icons/environment/settlement/hut.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"4loLeFR0iwfUnPuK"}
|
||||
{"name":"Création par croisement et hybridation de plantes ou d’animaux mortellement dangereux","type":"item","img":"icons/commodities/flowers/cornflower-gold.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"4siOagfdWzjP5zH7"}
|
||||
{"name":"Substance chimique luminescente","type":"item","img":"icons/consumables/potions/flask-corked-yellow-glow.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>produit de la lumière pour une demi-journée</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"4tw89CLuUKdEPTjP"}
|
||||
{"name":"Ceinture d’allanium","type":"item","img":"icons/equipment/waist/belt-buckle-spiral-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>permet de flotter dans les airs</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"5mTphkODHSGq3nSQ"}
|
||||
{"name":"Outil","type":"item","img":"icons/tools/hand/hammer-mason-white-grey.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Les armes et armures de cette qualité permettent, une fois par round, de relancer un 1 obtenu sur un jet de dégâts/de protection.</p>\n<p>En dehors des armes, les autres créations infligeant des dégâts ou soignant des blessures provoquent respectivement la perte ou la récupération de d3 points de vitalité.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"9Q5RVK5vLFffDzbF"}
|
||||
{"name":"Allume-feu","type":"item","img":"icons/tools/laboratory/bowl-liquid-orange.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>permet d’allumer un feu facilement et rapidement</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"BPWbng0g7yGicbo1"}
|
||||
{"name":"Membre Artificiel","type":"item","img":"icons/commodities/biological/hand-yellow-red.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>non articulé, mais bien plus élégant qu’un simple crochet</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"IuRy0AzysqvPBitL"}
|
||||
{"name":"Arme","type":"item","img":"icons/weapons/swords/greatsword-crossguard-engraved-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Les armes et armures de cette qualité permettent, une fois par round, de relancer un 1 obtenu sur un jet de dégâts/de protection.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"J4dFYrwkmlm0Nmk3"}
|
||||
{"name":"Arme dissimulée dans un Objet Courant","type":"item","img":"icons/weapons/fist/fist-katar-gold.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>En dehors des armes, les autres créations infligeant des dégâts ou soignant des blessures provoquent respectivement la perte ou la récupération de d6 points de vitalité.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"JaB3ain6oqdYMHO5"}
|
||||
{"name":"Création de formes de vie hybrides d’homme et d’animal","type":"item","img":"icons/creatures/magical/humanoid-silhouette-green.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"KNww1UqQ5xDsoipn"}
|
||||
{"name":"Antirouille","type":"item","img":"icons/tools/laboratory/bowl-liquid-black.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>quantité suffisante pour ôter la rouille d’une armure complète</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"KlbAhlqMv2aYrVV6"}
|
||||
{"name":"Cuve de clonage des individus","type":"item","img":"icons/creatures/magical/humanoid-silhouette-aliens-green.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"LDpAggSZbGqrXmlw"}
|
||||
{"name":"Armure","type":"item","img":"icons/equipment/chest/breastplate-scale-grey.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Les armes et armures de cette qualité permettent, une fois par round, de relancer un 1 obtenu sur un jet de dégâts/de protection.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"NOeeuqGt5sRZzjZW"}
|
||||
{"name":"Huile Brulante","type":"item","img":"icons/tools/laboratory/bowl-powder-purple.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>brûle au contact et inflige d6 points de dégâts</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"NsWmlAIAiDgaOouM"}
|
||||
{"name":"Ceinture d’invisibilité","type":"item","img":"icons/equipment/waist/belt-buckle-horned.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>quand on la boucle, cette ceinture offre le même effet que la poudre d’invisibilité</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"RuW6v3YvbEE80rWv"}
|
||||
{"name":"Armure Supérieure","type":"item","img":"icons/equipment/chest/breastplate-layered-leather-stitched.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>offre une protection semblable à celle d’une armure de la catégorie supérieure – une armure légère apporte la même protection qu’une armure moyenne, et une armure lourde apporte une protection de d6. De plus, l’armure diminue de moitié les dégâts supplémentaires infligés par un succès héroïque ou légendaire</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"WXGXDYvnGFqPznDW"}
|
||||
{"name":"Arme Mythique","type":"item","img":"icons/weapons/swords/greatsword-evil-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>comme une arme légendaire, mais elle est de plus considérée comme une arme favorite, cf. l’avantage du même nom</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"XLTcm3ZrC5f2obak"}
|
||||
{"name":"Instrument de musique au son parfait","type":"item","img":"icons/tools/instruments/harp-gold-glowing.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>un dé de bonus pour en jouer</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"YZ9Pd2jmxmEf7Bfr"}
|
||||
{"name":"Arme Légendaire","type":"item","img":"icons/weapons/swords/sword-guard-flanged-purple.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>ajoute un dé de bonus aux jets de dégâts et ignore les armures, à l’exception de celles créées par un alchimiste. De plus, l’arme est incassable. Une arme aussi exceptionnelle se doit de recevoir un nom</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"Z16TTJJBk4gifNi4"}
|
||||
{"name":"Serrure ou piège particulièrement ingénieux","type":"item","img":"icons/environment/traps/metal-spikes.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>-6 pour les crocheter/désamorcer ; le piège inflige d6 x2 points de dégâts</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"cH4xnb61y15y0VB9"}
|
||||
{"name":"Microscope","type":"item","img":"icons/tools/scribal/magnifying-glass.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"czeLiVAATVSJXurP"}
|
||||
{"name":"Dague à lame creuse en verre","type":"item","img":"icons/weapons/daggers/dagger-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>remplie d’acide ou de poison</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"dPjpAs6k4oJ1PBJY"}
|
||||
{"name":"Serrure","type":"item","img":"icons/skills/trades/security-locksmith-key-gray.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>malus de -2 pour la forcer</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"eyhRUXzKxs5USWn4"}
|
||||
{"name":"Création de formes de vie en laboratoire","type":"item","img":"icons/environment/creatures/bug-worm-teeth-green.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"g0LHWZNu9sSppfS1"}
|
||||
{"name":"Armure Légendaire","type":"item","img":"icons/equipment/chest/breastplate-pieced-black-02.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>offre une protection semblable à celle d’une armure de la catégorie supérieure – une armure légère apporte la même protection qu’une armure moyenne, et une armure lourde apporte une protection de d6. De plus, le jet de protection de l’armure se fait avec un dé de bonus, et elle diminue de moitié les dégâts supplémentaires infligés par un succès héroïque ou légendaire.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"ifyxS1mYVPrVva3D"}
|
||||
{"name":"Machine Volante","type":"item","img":"icons/magic/air/wind-weather-sailing-ship.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>nef volante, par exemple</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"kGTTnSlZA6ZoQ3u3"}
|
||||
{"name":"Télescope","type":"item","img":"icons/tools/navigation/spyglass-telescope-brass.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"ket3hVgoT0QwcBEq"}
|
||||
{"name":"Arme Supérieure","type":"item","img":"icons/weapons/swords/greatsword-crossguard-flanged-purple.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>un dé de bonus aux jets de dégâts</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"ki1xuxtM0H4pgTiy"}
|
||||
{"name":"Arbalète à Grappin","type":"item","img":"icons/weapons/crossbows/handcrossbow-black.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>tire un grappin attaché à une corde en soie avec un facteur de portée de 7,5 m</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"kuypZbs1owvKVTqI"}
|
||||
{"name":"Casque permettant à son porteur de respirer sous l’eau","type":"item","img":"icons/equipment/head/helm-spangen-ridged.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"lEfQUM98WsqLkIxz"}
|
||||
{"name":"Périscope","type":"item","img":"icons/tools/scribal/magnifying-glass.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"mNOicjjxjXgZmmLy"}
|
||||
{"name":"Serrure ou piège à la complexité unique","type":"item","img":"icons/commodities/tech/sensor-yellow.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>-8 pour les crocheter/désamorcer ; un piège inflige d6 x3 points de dégâts</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"oB6gDtBff0AxZ79M"}
|
||||
{"name":"Machine dotée d'une semi-conscience","type":"item","img":"icons/creatures/magical/construct-iron-stomping-yellow.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"ok8HQzoEyF9GgSKA"}
|
||||
{"name":"Automate ou golem ayant la forme d’une armure animée","type":"item","img":"icons/magic/symbols/cog-orange-red.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"opFsywlBa1q9cb0z"}
|
||||
{"name":"Navire submersible","type":"item","img":"icons/tools/navigation/sextant-brass-brown.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>un sous-marin descendant à une profondeur maximale de 6 mètres et pouvant emporter un équipage de quatre personnes. Un tuyau flottant jusqu’à la surface alimente le sous-marin en oxygène (et peut être repéré en surface). Le sous-marin contient suffisamment d’air pour rester en plongée pendant une heure. Il se déplace à une vitesse d’environ 8 kilomètres à l’heure, propulsé par la force des membres de l’équipage qui pédalent pour faire tourner l’hélice</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"rg9EZ0jwe2ZdNrcJ"}
|
||||
{"name":"Fabrication d’allanium et de janium","type":"item","img":"icons/commodities/metal/ingot-engraved-gold.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"tcKKDzPjPqTA8doj"}
|
||||
{"name":"Machine de guerre blindée","type":"item","img":"icons/commodities/tech/smoke-bomb-yellow.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"vWhFzHoi5H6kVeFM"}
|
||||
{"name":"Piège","type":"item","img":"icons/environment/traps/trap-jaw-tan.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>malus de -2 pour le repérer et le désamorcer ; inflige d3+1 points de dégât</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"xVWrSPiX0Nwccsn6"}
|
37
packs/potions-alchimie.db
Normal file
37
packs/potions-alchimie.db
Normal file
@ -0,0 +1,37 @@
|
||||
{"name":"Prouesse","type":"item","img":"icons/consumables/potions/bottle-corked-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>un dé de bonus aux jets d’attaque de corps à corps ; durée : une scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"0a8UFoCOd3D35WBb"}
|
||||
{"name":"Immortalité","type":"item","img":"icons/consumables/potions/bottle-conical-corked-labeled-skull-poison-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Prévient toute mort naturelle. Le buveur vieillit lentement, en se desséchant au fil des siècles. Seule une mort violente peut l’ emporter.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"1CGNqrAk8i4yZHMu"}
|
||||
{"name":"Alcool de Qualité","type":"item","img":"icons/consumables/drinks/wine-amphora-clay-gray.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>3 bouteilles</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"1","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"3axZyF07LhrFoIKn"}
|
||||
{"name":"Sommeil Instantané","type":"item","img":"icons/consumables/potions/conical-ornate-purple.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>le buveur doit réussir un jet de vigueur avec votre rang d’alchimiste en malus, ou sombrer dans un profond sommeil pendant une demi-journée.</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"3d31dycrddqS41oH"}
|
||||
{"name":"Feu Alchimique","type":"item","img":"icons/consumables/potions/flask-corked-red-glow.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>une fiole qui, quand elle est brisée, explose en une boule de feu de 3 m de rayon, infligeant d6 x2 points de dégâts</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"3hbPr9YV5UFPT5xV"}
|
||||
{"name":"Acide","type":"item","img":"icons/consumables/potions/vial-cork-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>1 petite fiole, inflige d3 points de dégâts ou peut percer 2,5 cm de bois ou de métal</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"9g9V7Khr66RkfqYp"}
|
||||
{"name":"Beauté","type":"item","img":"icons/consumables/potions/bottle-pear-corked-pink.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>+1 en aura ; durée : une scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"CZoAbYpw5V35ICsl"}
|
||||
{"name":"Puissance","type":"item","img":"icons/consumables/potions/bottle-round-corked-orante-red.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>+1 en vigueur ; durée : une scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"DPbSKaYROI8Ys2QL"}
|
||||
{"name":"Somnifere","type":"item","img":"icons/consumables/potions/bottle-bulb-corked-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>A l’ingestion, provoque 2d6 heures de sommeil profond, 3 doses</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{},"_id":"DukviN6iQWAZxvO6"}
|
||||
{"name":"Antidote Universel","type":"item","img":"icons/consumables/potions/bottle-circular-corked-labeled-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>soigne instantanément n’importe quel empoisonnement, même magique ; 1 dose</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"DzNxbiCwykhOI8il"}
|
||||
{"name":"Agrandissement ou Rapetissement","type":"item","img":"icons/consumables/potions/bottle-corked-red.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Durée : 1 scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"EScizWIAqEGey7k9"}
|
||||
{"name":"Altération permanente","type":"item","img":"icons/consumables/potions/potion-jar-corked-labeled-purple-pink.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>bonus permanent de +1 dans un attribut ; on ne peut bénéficier qu’une seule fois des effets de cet élixir</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"EvAWKqbqVmOAiJuy"}
|
||||
{"name":"Perspicacité","type":"item","img":"icons/consumables/potions/bottle-conical-corked-labeled-shell-cyan.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>+1 en esprit ; durée : une scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"HzRud4Pt5prjxdOp"}
|
||||
{"name":"Anti-Fièvre","type":"item","img":"icons/consumables/potions/bottle-ornate-bat-teal.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>2d6 heures d'effet, 3 doses</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"IwLxp7qwaVqFkXIT"}
|
||||
{"name":"Illusion de la Jeunesse","type":"item","img":"icons/consumables/potions/flask-corked-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>le buveur retrouve l’apparence qu’il avait à 25 ans ; durée : une semaine ; 1 dose</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"LgCquDfrRj68TpGD"}
|
||||
{"name":"Résistance","type":"item","img":"icons/consumables/potions/potion-tube-corked-bat-gold-red.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>la peau du buveur devient aussi résistante qu’une armure, lui offrant d6 de protection ; durée : une scène ; 1 dose</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"OPg1rCpWtrMEwdpi"}
|
||||
{"name":"Régénération Suprême","type":"item","img":"icons/consumables/potions/bottle-corked-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>provoque la régénération d’un membre amputé, d’un œil perdu, etc., annulant le désavantage associé à ce handicap</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"PCGayeKrqCe5y8Yr"}
|
||||
{"name":"Paralysant","type":"item","img":"icons/consumables/potions/potion-bottle-corked-fancy-orange.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>le buveur doit réussir un jet de vigueur avec votre rang d’alchimiste en malus ou se retrouver paralysé pour une durée de 24 heures ; 1 dose</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"ROaHo4M8ry9J0no8"}
|
||||
{"name":"Mort aux Rats","type":"item","img":"icons/consumables/potions/conical-mushroom-poison-red.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Tue les petits animaux nuisibles</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"RYq5MG3t3r1yFsKZ"}
|
||||
{"name":"Philtre d’amour","type":"item","img":"icons/consumables/potions/round-cork-leaf-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>le buveur doit réussir un jet d’esprit avec votre rang d’alchimiste en malus ou tomber follement amoureux ; durée : une lune ; 1 dose</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"RwLL4Ps54lMaUShO"}
|
||||
{"name":"Poudre d’invisibilité","type":"item","img":"icons/consumables/potions/round-decorated-snake-green.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>rend invisible aux yeux d’autrui, à moins d’entreprendre une action qui attire l’attention ; durée : une scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"UBDnUINYuRk1MT67"}
|
||||
{"name":"Antalgique","type":"item","img":"icons/consumables/potions/bottle-ornate-bat-teal.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>2d6 heures d'effet, 3 doses</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"1","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"UlDQi8b2L5nvdfar"}
|
||||
{"name":"Sens Accrus","type":"item","img":"icons/consumables/potions/bottle-round-label-cork-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Un dé de bonus aux jets d’action pour détecter ou repérer quelque chose ; durée : une scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"aExkw1SAqQXQKfih"}
|
||||
{"name":"Antidote contre les Venins Animaux et Poisons Végétaux","type":"item","img":"icons/consumables/potions/bottle-metal-yellow-gray.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>soigne l’ empoisonnement en 1 heure, 3 doses</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"cnOu9ysD1SLZ9s1d"}
|
||||
{"name":"Répulsifs à Insecte","type":"item","img":"icons/consumables/potions/potion-tube-corked-orange.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>4d6 heures d’effet, 3 doses</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"1","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"dadXiS7LGF9hsQFd"}
|
||||
{"name":"Antidote aux Poisons Alchimiques","type":"item","img":"icons/consumables/potions/bottle-bulb-corked-labeled-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Soigne l’ empoisonnement en 1 heure, 3 doses</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"g2dZBvSyW8fUdmvi"}
|
||||
{"name":"Neutralisant d’acide","type":"item","img":"icons/consumables/potions/bottle-conical-corked-purple.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>stoppe instantanément les effets d’une quantité équivalente d’acide ; 9 petites fioles</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"hSftVccCmrEhSYmc"}
|
||||
{"name":"Teinture de respiration aquatique","type":"item","img":"icons/consumables/potions/potion-bottle-corked-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>permet au buveur de respirer sous l’eau pendant une demi-journée</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"iQnztmumTwpX8vbi"}
|
||||
{"name":"Remède contre la Vérole","type":"item","img":"icons/consumables/potions/bottle-conical-corked-tied-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"j0GkKyweP9tQGybn"}
|
||||
{"name":"Métamorphose","type":"item","img":"icons/consumables/potions/bottle-bulb-corked-glowing-red.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>le buveur prend l’apparence d’une autre personne, pour une durée d’une heure. Nécessite quelques cheveux, rognures d’ongles, ou gouttes de sang de la personne en question ; 1 dose</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"lVVZdSHnxj7ISSoE"}
|
||||
{"name":"Vivacité","type":"item","img":"icons/consumables/potions/bottle-round-label-cork-purple.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>+1 en agilité ; durée : une scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"m1TrGH7Y71bcsWvC"}
|
||||
{"name":"Panacée","type":"item","img":"icons/consumables/potions/flask-decorated-label-pink.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>le buveur est guéri de n’importe quelle maladie ; 2 doses</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"pBxSv3oC7qVdWk82"}
|
||||
{"name":"Héroïsme","type":"item","img":"icons/consumables/potions/flask-corked-yellow-glow.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>le buveur bénéficie d’un bonus de +1 à toutes ses aptitudes de combat ; durée : une scène ; 1 dose</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"legend","difficulty":"-2","pccost":4,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"r4v0uPgUkeXiojMu"}
|
||||
{"name":"Poudre de Phénix","type":"item","img":"icons/consumables/potions/potion-bottle-corked-labeled-red.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>une poudre qui brûle au contact, même sous l’ eau, en infligeant d6 x3 points de dégâts</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"mythic","difficulty":"-4","pccost":8,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"seLHMb7EGeX5skWd"}
|
||||
{"name":"Précision","type":"item","img":"icons/consumables/potions/bottle-conical-corked-yellow.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>un dé de bonus aux jets d’attaque de tir ; durée : une scène</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"scarce","difficulty":"-1","pccost":2,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"wxdS4VRUgiEZwteO"}
|
||||
{"name":"Remède contre le Scorbut","type":"item","img":"icons/consumables/potions/bottle-conical-corked-tied-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"0","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"y84Et9OUilBgtqv6"}
|
||||
{"name":"Encre Invisible","type":"item","img":"icons/commodities/materials/feather-blue.webp","data":{"category":"alchemy","subtype":"armor","description":"<p>Réapparaît quand elle est mouillée ou chauffée</p>","properties":{"ranged":false,"melee":false,"spell":false,"protection":false,"weapon":false,"armor":false,"helm":false,"shield":false,"equipable":false,"consumable":false,"magical":false,"2H":false,"reloadable":false,"bow":false,"crossbow":false,"throwing":false,"stackable":false,"alchemytype":"common","difficulty":"1","pccost":1,"pccurrent":0},"quantity":1,"weight":0,"price":0,"worn":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"kQghu0tL1dft5xLu":3},"flags":{"core":{"sourceId":"Item.my6uixIzYHN3qrzY"}},"_id":"y9NHZCxKXMZEqcRo"}
|
138
system.json
138
system.json
@ -1,24 +1,25 @@
|
||||
{
|
||||
"name": "bol",
|
||||
"id": "bol",
|
||||
"title": "Barbarians of Lemuria",
|
||||
"description": "The Barbarians of Lemuria system for FoundryVTT!",
|
||||
"author": "Zigmund,LeRatierBretonnien",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Zigmund"
|
||||
"name": "LeRatierBretonnien",
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"name": "LeRatierBretonnien"
|
||||
"name": "Zigmund",
|
||||
"flags": {}
|
||||
}
|
||||
],
|
||||
"url": "https://github.com/ZigmundKreud/bol",
|
||||
"url": "https://www.uberwald.me/gitea/public/bol",
|
||||
"license": "LICENSE.txt",
|
||||
"flags": {},
|
||||
"version": "1.3.5",
|
||||
"templateVersion": 10,
|
||||
"minimumCoreVersion": "0.8.6",
|
||||
"compatibleCoreVersion": "9",
|
||||
"scripts": [],
|
||||
"version": "10.4.13",
|
||||
"compatibility": {
|
||||
"minimum": "10",
|
||||
"verified": "10",
|
||||
"maximum": "10"
|
||||
},
|
||||
"esmodules": [
|
||||
"module/bol.js"
|
||||
],
|
||||
@ -29,12 +30,20 @@
|
||||
{
|
||||
"lang": "en",
|
||||
"name": "English",
|
||||
"path": "lang/en.json"
|
||||
"path": "lang/en.json",
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"lang": "fr",
|
||||
"name": "Français",
|
||||
"path": "lang/fr.json"
|
||||
"path": "lang/fr.json",
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"lang": "de",
|
||||
"name": "Deutsch",
|
||||
"path": "lang/de.json",
|
||||
"flags": {}
|
||||
}
|
||||
],
|
||||
"packs": [
|
||||
@ -42,64 +51,64 @@
|
||||
"name": "boons",
|
||||
"label": "Avantages",
|
||||
"system": "bol",
|
||||
"path": "./packs/boons.db",
|
||||
"tag": "boon",
|
||||
"path": "packs/boons.db",
|
||||
"type": "Item",
|
||||
"private": false
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"name": "boons",
|
||||
"name": "boonsflawscreatures",
|
||||
"label": "Avantages/Désavantages de Créatures",
|
||||
"system": "bol",
|
||||
"path": "./packs/boonsflawscreatures.db",
|
||||
"tag": "boon",
|
||||
"path": "packs/boonsflawscreatures.db",
|
||||
"type": "Item",
|
||||
"private": false
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"name": "flaws",
|
||||
"label": "Désavantages",
|
||||
"system": "bol",
|
||||
"path": "./packs/flaws.db",
|
||||
"tag": "flaw",
|
||||
"path": "packs/flaws.db",
|
||||
"type": "Item",
|
||||
"private": false
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"name": "careers",
|
||||
"label": "Carrières héroïques",
|
||||
"system": "bol",
|
||||
"path": "./packs/careers.db",
|
||||
"tag": "career",
|
||||
"path": "packs/careers.db",
|
||||
"type": "Item",
|
||||
"private": false
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"name": "origins",
|
||||
"label": "Origines",
|
||||
"system": "bol",
|
||||
"path": "./packs/origins.db",
|
||||
"tag": "origin",
|
||||
"path": "packs/origins.db",
|
||||
"type": "Item",
|
||||
"private": false
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"name": "races",
|
||||
"label": "Races",
|
||||
"system": "bol",
|
||||
"path": "./packs/races.db",
|
||||
"tag": "race",
|
||||
"path": "packs/races.db",
|
||||
"type": "Item",
|
||||
"private": false
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"name": "equipment",
|
||||
"label": "Equipement",
|
||||
"system": "bol",
|
||||
"path": "./packs/equipment.db",
|
||||
"tag": "item",
|
||||
"path": "packs/equipment.db",
|
||||
"type": "Item",
|
||||
"private": false
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"label": "Aides de Jeu",
|
||||
@ -107,7 +116,8 @@
|
||||
"name": "aides-de-jeu",
|
||||
"path": "packs/aides-de-jeu.db",
|
||||
"system": "bol",
|
||||
"private": false
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"label": "Cartes",
|
||||
@ -115,7 +125,8 @@
|
||||
"name": "cartes",
|
||||
"path": "packs/cartes.db",
|
||||
"system": "bol",
|
||||
"private": false
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"label": "Langues",
|
||||
@ -123,7 +134,8 @@
|
||||
"name": "languages",
|
||||
"path": "packs/languages.db",
|
||||
"system": "bol",
|
||||
"private": false
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"label": "Sorts",
|
||||
@ -131,7 +143,8 @@
|
||||
"name": "spells",
|
||||
"path": "packs/spells.db",
|
||||
"system": "bol",
|
||||
"private": false
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"label": "Dieux",
|
||||
@ -139,7 +152,8 @@
|
||||
"name": "godsfaith",
|
||||
"path": "packs/godsfaith.db",
|
||||
"system": "bol",
|
||||
"private": false
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"label": "Options de Combat",
|
||||
@ -147,7 +161,35 @@
|
||||
"name": "fightoptions",
|
||||
"path": "packs/fightoptions.db",
|
||||
"system": "bol",
|
||||
"private": false
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"label": "Alchimie - Potions",
|
||||
"type": "Item",
|
||||
"name": "potions-alchimie",
|
||||
"path": "packs/potions-alchimie.db",
|
||||
"system": "bol",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"label": "Alchimie - Objets",
|
||||
"type": "Item",
|
||||
"name": "objets-alchimie",
|
||||
"path": "packs/objets-alchimie.db",
|
||||
"system": "bol",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"label": "Effets - Exemples",
|
||||
"type": "Item",
|
||||
"name": "effets-exemples",
|
||||
"path": "packs/effets-exemples.db",
|
||||
"system": "bol",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"label": "Créatures",
|
||||
@ -155,18 +197,16 @@
|
||||
"name": "creatures",
|
||||
"path": "packs/creatures.db",
|
||||
"system": "bol",
|
||||
"private": false
|
||||
"private": false,
|
||||
"flags": {}
|
||||
}
|
||||
],
|
||||
"system": [],
|
||||
"dependencies": [],
|
||||
"socket": true,
|
||||
"manifest": "https://raw.githubusercontent.com/ZigmundKreud/bol/master/system.json",
|
||||
"download": "https://github.com/ZigmundKreud/bol/archive/refs/heads/master.zip",
|
||||
"protected": false,
|
||||
"background": "images/map_lemurie.webp",
|
||||
"manifest": "https://www.uberwald.me/gitea/public/bol/raw/v10/system.json",
|
||||
"download": "https://www.uberwald.me/gitea/public/bol/archive/bol-v10.4.13.zip",
|
||||
"background": "systems/bol/ui/page_accueil.webp",
|
||||
"gridDistance": 1.5,
|
||||
"gridUnits": "m",
|
||||
"primaryTokenAttribute": "resources.hp",
|
||||
"secondaryTokenAttribute": "resources.hero"
|
||||
}
|
||||
}
|
@ -2,7 +2,8 @@
|
||||
"Actor": {
|
||||
"types": [
|
||||
"character",
|
||||
"encounter"
|
||||
"encounter",
|
||||
"vehicle"
|
||||
],
|
||||
"templates": {
|
||||
"base": {
|
||||
@ -101,10 +102,10 @@
|
||||
"hp": {
|
||||
"key": "hp",
|
||||
"label": "BOL.resources.hp",
|
||||
"base": 0,
|
||||
"value": 0,
|
||||
"base": 1,
|
||||
"value": 1,
|
||||
"bonus": 0,
|
||||
"max": 0
|
||||
"max": 1
|
||||
},
|
||||
"hero": {
|
||||
"key": "hero",
|
||||
@ -137,10 +138,11 @@
|
||||
},
|
||||
"character": {
|
||||
"templates": [ "base" ],
|
||||
"type": "player",
|
||||
"chartype": "player",
|
||||
"villainy": false,
|
||||
"bougette": {
|
||||
"state": "nomoney"
|
||||
"state": "nomoney",
|
||||
"value": 0
|
||||
},
|
||||
"xp": {
|
||||
"key": "xp",
|
||||
@ -157,10 +159,50 @@
|
||||
},
|
||||
"encounter": {
|
||||
"templates": [ "base" ],
|
||||
"type": "tough",
|
||||
"chartype": "tough",
|
||||
"villainy": false,
|
||||
"size": "",
|
||||
"environment": ""
|
||||
},
|
||||
"vehicle": {
|
||||
"vehicletype": "boat",
|
||||
"attributes": {
|
||||
"hull": {
|
||||
"key": "hull",
|
||||
"label": "BOL.attributes.hull",
|
||||
"value": 0,
|
||||
"min": 0,
|
||||
"max": 5
|
||||
},
|
||||
"crew": {
|
||||
"key": "crew",
|
||||
"label": "BOL.attributes.crew",
|
||||
"value": 0,
|
||||
"min": 0,
|
||||
"max": 5
|
||||
},
|
||||
"resources": {
|
||||
"key": "resources",
|
||||
"label": "BOL.attributes.resources",
|
||||
"value": 0,
|
||||
"min": 0,
|
||||
"max": 5
|
||||
}
|
||||
},
|
||||
"row": {
|
||||
"key": "row",
|
||||
"label": "BOL.attributes.row",
|
||||
"value": 0,
|
||||
"min": 0,
|
||||
"max": 5
|
||||
},
|
||||
"spur": {
|
||||
"value": ""
|
||||
},
|
||||
"status": {
|
||||
|
||||
},
|
||||
"description": ""
|
||||
}
|
||||
},
|
||||
"Item": {
|
||||
|
@ -1,10 +1,29 @@
|
||||
<form class="{{cssClass}} flexcol" autocomplete="off">
|
||||
<form class="{{cssClass}} flexcol bol-actor-form" autocomplete="off">
|
||||
<!--<img class="system-img" src="/systems/bol/ui/logo.webp" height="115" width="190"/> -->
|
||||
|
||||
<div class="wrap flexrow">
|
||||
|
||||
{{!-- Sidebar --}}
|
||||
<div class="sidebar flex0">
|
||||
<div class="sidebar flex0 bol-actor-sidebar">
|
||||
<img class="profile-img" src="{{actor.img}}" data-edit="img" title="{{actor.name}}" height="100" width="100"
|
||||
style="border:1px outset lightgray; box-shadow: 5px 5px 5px gray" />
|
||||
|
||||
<div></div>
|
||||
|
||||
{{#if (count boleffects)}}
|
||||
<ol class="items-list">
|
||||
<li class="item flexrow item-header">
|
||||
<div class="item-name flex2">{{localize "BOL.ui.effects"}}</div>
|
||||
</li>
|
||||
{{#each boleffects as |effect keyEffect|}}
|
||||
<li class="item flexrow" data-item-id="{{effect.id}}">
|
||||
<div class="item-image"><img src="{{effect.img}}" title="{{effect.name}}"/></div>
|
||||
<h4 class="item-name flex2"><a class="item-edit">{{effect.name}}</a></h4>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ol>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
|
||||
<div class="main flex1">
|
||||
@ -14,8 +33,8 @@
|
||||
{{!-- Sheet Tab Navigation --}}
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<a class="item" data-tab="stats">{{localize "BOL.ui.tab.stats"}}</a>
|
||||
<a class="item" data-tab="actions">{{localize "BOL.ui.tab.actions"}}</a>
|
||||
{{#if (ne data.type "creature")}}
|
||||
{{#if (ne charType "creature")}}
|
||||
<a class="item" data-tab="actions">{{localize "BOL.ui.tab.actions"}}</a>
|
||||
<a class="item" data-tab="features">{{localize "BOL.ui.tab.features"}}</a>
|
||||
<a class="item" data-tab="equipment">{{localize "BOL.ui.tab.equipment"}}</a>
|
||||
{{#if (or isSorcerer isAlchemist)}}
|
||||
@ -28,22 +47,21 @@
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
<div class="tab stats" data-group="primary" data-tab="stats">
|
||||
{{#if (eq data.type "creature")}}
|
||||
{{#if (eq charType "creature")}}
|
||||
{{>"systems/bol/templates/actor/parts/tabs/creature-stats.hbs"}}
|
||||
{{> "systems/bol/templates/actor/parts/tabs/creature-actions.hbs"}}
|
||||
{{else}}
|
||||
{{>"systems/bol/templates/actor/parts/tabs/actor-stats.hbs"}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{#if (ne charType "creature")}}
|
||||
<div class="tab actions" data-group="primary" data-tab="actions">
|
||||
{{#if (eq data.type "creature")}}
|
||||
{{> "systems/bol/templates/actor/parts/tabs/creature-actions.hbs"}}
|
||||
{{else}}
|
||||
{{> "systems/bol/templates/actor/parts/tabs/actor-actions.hbs"}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if (ne data.type "creature")}}
|
||||
{{#if (ne charType "creature")}}
|
||||
<div class="tab features" data-group="primary" data-tab="features">
|
||||
{{> "systems/bol/templates/actor/parts/tabs/actor-features.hbs"}}
|
||||
</div>
|
||||
|
@ -2,31 +2,31 @@
|
||||
<header class="sheet-header">
|
||||
<div class="header-field flex1">
|
||||
<div class="header-field-group flexrow">
|
||||
<label class="header-field-label flex2">Nom</label><br/>
|
||||
<label class="header-field-label flex2">{{localize "BOL.ui.name"}}</label><br/>
|
||||
<input class="charname flex6" name="name" type="text" value="{{actor.name}}" placeholder="Name"/>
|
||||
</div>
|
||||
|
||||
{{#if (eq data.type "player")}}
|
||||
{{#if (eq charType "player")}}
|
||||
<div class="header-field-group flexrow">
|
||||
<label class="header-field-label flex2">Experience</label><br/>
|
||||
<label class="header-field-label flex2">{{localize "BOL.ui.xp"}}</label><br/>
|
||||
<div class="header-field-group flex3">
|
||||
<label class="header-field-label flex1" style="font-size: 1.5em; color:#606060;">Dépensée</label><br/>
|
||||
<input class="header-field-value flex1" type="text" name="data.xp.spent" value="{{numberFormat data.xp.spent decimals=0 sign=false}}" data-dtype="Number"/><br/>
|
||||
<label class="header-field-label flex1" style="font-size: 1.5em; color:#606060;">{{localize "BOL.ui.xpspent"}}</label><br/>
|
||||
<input class="header-field-value flex1" type="text" name="system.xp.spent" value="{{numberFormat xp.spent decimals=0 sign=false}}" data-dtype="Number"/><br/>
|
||||
</div>
|
||||
<div class="header-field-group flex3">
|
||||
<label class="header-field-label flex1" style="font-size: 1.5em; color:#606060;"> Totale</label><br/>
|
||||
<input class="header-field-value flex1" type="text" name="data.xp.total" value="{{numberFormat data.xp.total decimals=0 sign=false}}" data-dtype="Number"/><br/>
|
||||
<label class="header-field-label flex1" style="font-size: 1.5em; color:#606060;"> {{localize "BOL.ui.xptotal"}}</label><br/>
|
||||
<input class="header-field-value flex1" type="text" name="system.xp.total" value="{{numberFormat xp.total decimals=0 sign=false}}" data-dtype="Number"/><br/>
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="header-field-group flexrow">
|
||||
<label class="header-field-label flex2">Type : </label><br/>
|
||||
<select class="field-value" name="data.type" data-dtype="String">
|
||||
{{#select data.type}}
|
||||
<option value="creature">Créature</option>
|
||||
<option value="base">Piétaille</option>
|
||||
<option value="tough">Coriace</option>
|
||||
<option value="adversary">Adversaire</option>
|
||||
<select class="field-value" name="system.chartype" data-dtype="String">
|
||||
{{#select charType}}
|
||||
<option value="creature">{{localize "BOL.ui.creature"}}</option>
|
||||
<option value="base">{{localize "BOL.ui.rabble"}}</option>
|
||||
<option value="tough">{{localize "BOL.ui.tough"}}</option>
|
||||
<option value="adversary">{{localize "BOL.ui.villain"}}</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
|
@ -12,14 +12,14 @@
|
||||
<li class="item flexrow" data-item-id="{{item._id}}">
|
||||
<div class="item-image" ><img src="{{item.img}}" title="{{item.name}}"/></div>
|
||||
<h4 class="item-name flex2">{{#if ../weapon}}<a class="rollable" data-roll-type="weapon">{{/if}}{{item.name}}{{#if ../weapon}}</a>{{/if}}</h4>
|
||||
{{#if ../protection}}<div class="item-field"><a class="rollable" data-roll-type="protection">{{item.data.properties.soak.formula}}</a> / {{item.data.properties.soak.value}}</div>{{/if}}
|
||||
{{#if ../blocking}}<div class="item-field">{{item.data.properties.blocking.malus}}</div>{{/if}}
|
||||
{{#if ../protection}}<div class="item-field"><a class="rollable" data-roll-type="protection">{{item.system.properties.soak.formula}}</a> / {{item.system.properties.soak.value}}</div>{{/if}}
|
||||
{{#if ../blocking}}<div class="item-field">{{item.system.properties.blocking.malus}}</div>{{/if}}
|
||||
{{#if ../weapon}}<div class="item-field"><a class="rollable" data-roll-type="damage">
|
||||
{{item.data.properties.damage}}+{{item.data.properties.damageModifiers}} x{{item.data.properties.damageMultiplier}}
|
||||
{{item.system.properties.damage}}+{{item.system.properties.damageModifiers}}x{{item.system.properties.damageMultiplier}}
|
||||
</a></div>{{/if}}
|
||||
{{#if ../ranged}}<div class="item-field">{{item.data.properties.range}}</div>{{else}}<div class="item-field"></div>{{/if}}
|
||||
{{#if ../ranged}}<div class="item-field">{{item.system.properties.range}}</div>{{else}}<div class="item-field"></div>{{/if}}
|
||||
{{#if ../options}}<div class="item-field">
|
||||
{{#if item.data.properties.activated}}
|
||||
{{#if item.system.properties.activated}}
|
||||
<a class="toggle-fight-option">{{localize "BOL.ui.toactivated"}}</a>
|
||||
{{else}}
|
||||
<a class="toggle-fight-option">{{localize "BOL.ui.todeactivated"}}</a>
|
||||
|
@ -1,29 +1,29 @@
|
||||
<ol class="items-list">
|
||||
{{#if (ne data.type "creature")}}
|
||||
{{#if (ne charType "creature")}}
|
||||
<li class="item flexrow item-header">
|
||||
<div class="item-name left">Taille </div>
|
||||
<div class="item-field flex2 left"><input type="text" name="data.details.height" value="{{data.details.height}}"></div>
|
||||
<div class="item-name right">Poids </div>
|
||||
<div class="item-field flex2 "><input type="text" name="data.details.weight" value="{{data.details.weight}}"></div>
|
||||
<div class="item-name right">Age </div>
|
||||
<div class="item-field flex2 "><input type="text" name="data.details.age" value="{{data.details.age}}"></div>
|
||||
<div class="item-name left">{{localize "BOL.ui.biosize"}}</div>
|
||||
<div class="item-field flex2 left"><input type="text" name="system.details.height" value="{{details.height}}"></div>
|
||||
<div class="item-name right">{{localize "BOL.ui.bioweight"}}</div>
|
||||
<div class="item-field flex2 "><input type="text" name="system.details.weight" value="{{details.weight}}"></div>
|
||||
<div class="item-name right">{{localize "BOL.ui.bioage"}} </div>
|
||||
<div class="item-field flex2 "><input type="text" name="system.details.age" value="{{details.age}}"></div>
|
||||
</li>
|
||||
<li class="item flexrow item-header">
|
||||
<div class="item-name left">Cheveux </div>
|
||||
<div class="item-field flex2 left"><input type="text" name="data.details.hait" value="{{data.details.hait}}"></div>
|
||||
<div class="item-name right">Yeux </div>
|
||||
<div class="item-field flex2 "><input type="text" name="data.details.eyes" value="{{data.details.eyes}}"></div>
|
||||
<div class="item-name left">{{localize "BOL.ui.biohair"}} </div>
|
||||
<div class="item-field flex2 left"><input type="text" name="system.details.hait" value="{{details.hait}}"></div>
|
||||
<div class="item-name right">{{localize "BOL.ui.bioeyes"}} </div>
|
||||
<div class="item-field flex2 "><input type="text" name="system.details.eyes" value="{{details.eyes}}"></div>
|
||||
</li>
|
||||
<li class="item flexrow item-header">
|
||||
<div class="item-name left">Signes distinctifs </div>
|
||||
<div class="item-field flex2 left"><input type="text" name="data.details.signs" value="{{data.details.signs}}"></div>
|
||||
<div class="item-name left">{{localize "BOL.ui.biosigns"}} </div>
|
||||
<div class="item-field flex2 left"><input type="text" name="system.details.signs" value="{{details.signs}}"></div>
|
||||
</li>
|
||||
{{else}}
|
||||
<li class="item flexrow item-header">
|
||||
<div class="item-name left">Taille </div>
|
||||
<div class="form-fields center">
|
||||
<select class="field-value size" name="data.details.size" data-dtype="String">
|
||||
{{#select data.details.size}}
|
||||
<select class="field-value size" name="system.details.size" data-dtype="String">
|
||||
{{#select details.size}}
|
||||
{{#each config.creatureSize as |value id|}}
|
||||
<option value="{{id}}">{{localize value}}</option>
|
||||
{{/each}}
|
||||
@ -35,18 +35,18 @@
|
||||
</ol>
|
||||
<ol class="items-list">
|
||||
<li class="item flexrow item-header">
|
||||
<div class="item-name flex4 left">Description</div>
|
||||
<div class="item-name flex4 left">{{localize "BOL.ui.biodescription"}}</div>
|
||||
<div class="item-field flex1 right"></div>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
{{editor content=data.details.biography target="data.details.biography" button=true owner=owner
|
||||
{{editor biography target="system.details.biography" button=true owner=owner
|
||||
editable=editable}}
|
||||
|
||||
<ol class="items-list">
|
||||
<li class="item flexrow item-header">
|
||||
<div class="item-name flex4 left">Notes</div>
|
||||
<div class="item-name flex4 left">{{localize "BOL.ui.bionotes"}}</div>
|
||||
<div class="item-field flex1 right"></div>
|
||||
</li>
|
||||
</ol>
|
||||
{{editor content=data.details.notes target="data.details.notes" button=true owner=owner editable=editable}}
|
||||
{{editor notes target="system.details.notes" button=true owner=owner editable=editable}}
|
@ -21,10 +21,10 @@
|
||||
<li class="item flexrow" data-item-id="{{item._id}}">
|
||||
<div class="item-image {{#if ../weapon}}roll-weapon{{/if}}"><img src="{{item.img}}" title="{{item.name}}"/></div>
|
||||
<h4 class="item-name flex2"><a class="item-edit">{{item.name}}</a></h4>
|
||||
{{#if ../protection}}<div class="item-field">{{item.data.properties.soak.value}}</div>{{/if}}
|
||||
{{#if ../blocking}}<div class="item-field">{{item.data.properties.blocking.malus}}</div>{{/if}}
|
||||
{{#if ../weapon}}<div class="item-field">{{item.data.properties.damage}}</div>{{/if}}
|
||||
{{#if ../ranged}}<div class="item-field">{{item.data.properties.range}}</div>{{else}}<div class="item-field"></div>{{/if}}
|
||||
{{#if ../protection}}<div class="item-field">{{item.system.properties.soak.value}}</div>{{/if}}
|
||||
{{#if ../blocking}}<div class="item-field">{{item.system.properties.blocking.malus}}</div>{{/if}}
|
||||
{{#if ../weapon}}<div class="item-field">{{item.system.properties.damage}}</div>{{/if}}
|
||||
{{#if ../ranged}}<div class="item-field">{{item.system.properties.range}}</div>{{else}}<div class="item-field"></div>{{/if}}
|
||||
</li>
|
||||
{{/each}}
|
||||
</ol>
|
||||
|
@ -1,27 +1,34 @@
|
||||
<!--ARMES-->
|
||||
<button class="create_item">Créer un Equipement</button>
|
||||
|
||||
{{#if useBougette}}
|
||||
<ol class="items-list">
|
||||
<li class="item flexrow item-header">
|
||||
<div class="item-name flex4 left">{{localize "BOL.ui.moneyTitle"}}</div>
|
||||
<div class="item-name flex4 left"> </div>
|
||||
</li>
|
||||
<li class="item flexrow" data-item-id="{{item._id}}">
|
||||
<h4 class="item-name flex4 left">
|
||||
<div class="item-image"><img src="icons/containers/bags/coinpouch-simple-leather-brown.webp" title="{{localize "BOL.ui.money"}}" /></div>
|
||||
{{localize "BOL.ui.money"}}
|
||||
</h4>
|
||||
<select class="field-value" name="data.bougette.state" data-dtype="String">
|
||||
{{#select data.bougette.state}}
|
||||
{{#each config.bougetteState as |value id|}}
|
||||
<option value="{{id}}">{{localize value}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</li>
|
||||
</ol>
|
||||
{{/if}}
|
||||
{{#if useBougette}}
|
||||
<ol class="items-list">
|
||||
<li class="item flexrow item-header">
|
||||
<div class="item-name flex4 left">{{localize "BOL.ui.moneyTitle"}}</div>
|
||||
<div class="item-name flex4 left"> </div>
|
||||
</li>
|
||||
<li class="item flexrow" data-item-id="{{item._id}}">
|
||||
<h4 class="item-name flex4 left">
|
||||
<div class="item-image"><img src="icons/containers/bags/coinpouch-simple-leather-brown.webp" title="{{localize "BOL.ui.money"}}" /></div>
|
||||
{{localize "BOL.ui.money"}}
|
||||
</h4>
|
||||
<div class="item-image">
|
||||
<a class="bougette-roll rollable" data-roll-type="bougette"><i class="darkgreen fas fa-dice"></i></a>
|
||||
</div>
|
||||
{{#if isGM}}
|
||||
<select class="field-value" name="system.bougette.value" data-dtype="String">
|
||||
{{#select bougette.value}}
|
||||
{{#each config.bougetteState as |value id|}}
|
||||
<option value="{{id}}">{{localize value}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
{{else}}
|
||||
<label class="">{{localize bougette.label}}</label></a>
|
||||
{{/if}}
|
||||
</li>
|
||||
</ol>
|
||||
{{/if}}
|
||||
|
||||
<ol class="items-list">
|
||||
<li class="item flexrow item-header">
|
||||
@ -39,26 +46,26 @@
|
||||
<a class="item-edit">{{item.name}}</a>
|
||||
</h4>
|
||||
<div class="item-field flex2 center">
|
||||
{{#if item.data.properties.equipable}}
|
||||
{{#if item.system.properties.equipable}}
|
||||
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
||||
"BOL.equipmentSlots." item.data.properties.slot)}}</span>
|
||||
"BOL.equipmentSlots." item.system.properties.slot)}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item-field group-btns flex1 center">
|
||||
{{#if item.data.properties.stackable}}
|
||||
<a class="inc-dec-btns" data-operator="minus" data-target="data.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||
<span class="item-field">{{item.data.quantity}}</span>
|
||||
<a class="inc-dec-btns" data-operator="plus" data-target="data.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||
{{#if item.system.properties.stackable}}
|
||||
<a class="inc-dec-btns" data-operator="minus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||
<span class="item-field">{{item.system.quantity}}</span>
|
||||
<a class="inc-dec-btns" data-operator="plus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
<span class="item-field">{{item.data.price}}</span>
|
||||
<span class="item-field">{{item.system.price}}</span>
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
{{#if data.properties.equipable}}
|
||||
{{#if data.worn}}
|
||||
{{#if system.properties.equipable}}
|
||||
{{#if system.worn}}
|
||||
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
||||
class="fas fa-shield-alt"></i></a></span>
|
||||
{{else}}
|
||||
@ -92,32 +99,32 @@
|
||||
<a class="item-edit">{{item.name}}</a>
|
||||
</h4>
|
||||
<div class="item-field flex2 center">
|
||||
{{#if item.data.properties.equipable}}
|
||||
{{#if item.system.properties.equipable}}
|
||||
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
||||
"BOL.equipmentSlots." item.data.properties.slot)}}</span>
|
||||
"BOL.equipmentSlots." item.system.properties.slot)}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item-field flex2 center">
|
||||
{{#if item.data.properties.equipable}}
|
||||
{{#if item.system.properties.equipable}}
|
||||
<span class="item-field"
|
||||
style="font-size: smaller; font-style: italic; color:#4b4a44">{{data.properties.soak.formula}}</span>
|
||||
style="font-size: smaller; font-style: italic; color:#4b4a44">{{system.properties.soak.formula}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item-field group-btns flex1 center">
|
||||
{{#if item.data.properties.stackable}}
|
||||
<a class="inc-dec-btns" data-operator="minus" data-target="data.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||
<span class="item-field">{{item.data.quantity}}</span>
|
||||
<a class="inc-dec-btns" data-operator="plus" data-target="data.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||
{{#if item.system.properties.stackable}}
|
||||
<a class="inc-dec-btns" data-operator="minus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||
<span class="item-field">{{item.system.quantity}}</span>
|
||||
<a class="inc-dec-btns" data-operator="plus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
<span class="item-field">{{item.data.price}}</span>
|
||||
<span class="item-field">{{item.system.price}}</span>
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
{{#if data.properties.equipable}}
|
||||
{{#if data.worn}}
|
||||
{{#if system.properties.equipable}}
|
||||
{{#if system.worn}}
|
||||
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
||||
class="fas fa-shield-alt"></i></a></span>
|
||||
{{else}}
|
||||
@ -150,26 +157,26 @@
|
||||
<a class="item-edit">{{item.name}}</a>
|
||||
</h4>
|
||||
<div class="item-field flex2 center">
|
||||
{{#if item.data.properties.equipable}}
|
||||
{{#if item.system.properties.equipable}}
|
||||
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
||||
"BOL.equipmentSlots." item.data.properties.slot)}}</span>
|
||||
"BOL.equipmentSlots." item.system.properties.slot)}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item-field group-btns flex1 center">
|
||||
{{#if item.data.properties.stackable}}
|
||||
<a class="inc-dec-btns" data-operator="minus" data-target="data.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||
<span class="item-field">{{item.data.quantity}}</span>
|
||||
<a class="inc-dec-btns" data-operator="plus" data-target="data.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||
{{#if item.system.properties.stackable}}
|
||||
<a class="inc-dec-btns" data-operator="minus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||
<span class="item-field">{{item.system.quantity}}</span>
|
||||
<a class="inc-dec-btns" data-operator="plus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
<span class="item-field">{{item.data.price}}</span>
|
||||
<span class="item-field">{{item.system.price}}</span>
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
{{#if data.properties.equipable}}
|
||||
{{#if data.worn}}
|
||||
{{#if system.properties.equipable}}
|
||||
{{#if system.worn}}
|
||||
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
||||
class="fas fa-shield-alt"></i></a></span>
|
||||
{{else}}
|
||||
@ -202,26 +209,26 @@
|
||||
<a class="item-edit">{{item.name}}</a>
|
||||
</h4>
|
||||
<div class="item-field flex2 center">
|
||||
{{#if item.data.properties.equipable}}
|
||||
{{#if item.system.properties.equipable}}
|
||||
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
||||
"BOL.equipmentSlots." item.data.properties.slot)}}</span>
|
||||
"BOL.equipmentSlots." item.system.properties.slot)}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item-field group-btns flex1 center">
|
||||
{{#if item.data.properties.stackable}}
|
||||
<a class="inc-dec-btns" data-operator="minus" data-target="data.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||
<span class="item-field">{{item.data.quantity}}</span>
|
||||
<a class="inc-dec-btns" data-operator="plus" data-target="data.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||
{{#if item.system.properties.stackable}}
|
||||
<a class="system-dec-btns" data-operator="minus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||
<span class="item-field">{{item.system.quantity}}</span>
|
||||
<a class="inc-dec-btns" data-operator="plus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
<span class="item-field">{{item.data.price}}</span>
|
||||
<span class="item-field">{{item.system.price}}</span>
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
{{#if data.properties.equipable}}
|
||||
{{#if data.worn}}
|
||||
{{#if system.properties.equipable}}
|
||||
{{#if system.worn}}
|
||||
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
||||
class="fas fa-shield-alt"></i></a></span>
|
||||
{{else}}
|
||||
@ -254,26 +261,26 @@
|
||||
<a class="item-edit">{{item.name}}</a>
|
||||
</h4>
|
||||
<div class="item-field flex2 center">
|
||||
{{#if item.data.properties.equipable}}
|
||||
{{#if item.system.properties.equipable}}
|
||||
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
||||
"BOL.equipmentSlots." item.data.properties.slot)}}</span>
|
||||
"BOL.equipmentSlots." item.system.properties.slot)}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item-field group-btns flex1 center">
|
||||
{{#if item.data.properties.stackable}}
|
||||
<a class="inc-dec-btns" data-operator="minus" data-target="data.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||
<span class="item-field">{{item.data.quantity}}</span>
|
||||
<a class="inc-dec-btns" data-operator="plus" data-target="data.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||
{{#if item.system.properties.stackable}}
|
||||
<a class="inc-dec-btns" data-operator="minus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||
<span class="item-field">{{item.system.quantity}}</span>
|
||||
<a class="inc-dec-btns" data-operator="plus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
<span class="item-field">{{item.data.price}}</span>
|
||||
<span class="item-field">{{item.system.price}}</span>
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
{{#if data.properties.equipable}}
|
||||
{{#if data.worn}}
|
||||
{{#if system.properties.equipable}}
|
||||
{{#if system.worn}}
|
||||
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
||||
class="fas fa-shield-alt"></i></a></span>
|
||||
{{else}}
|
||||
@ -306,26 +313,26 @@
|
||||
<a class="item-edit">{{item.name}}</a>
|
||||
</h4>
|
||||
<div class="item-field flex2 center">
|
||||
{{#if item.data.properties.equipable}}
|
||||
{{#if item.system.properties.equipable}}
|
||||
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
||||
"BOL.equipmentSlots." item.data.properties.slot)}}</span>
|
||||
"BOL.equipmentSlots." item.system.properties.slot)}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item-field group-btns flex1 center">
|
||||
{{#if item.data.properties.stackable}}
|
||||
<a class="inc-dec-btns" data-operator="minus" data-target="data.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||
<span class="item-field">{{item.data.quantity}}</span>
|
||||
<a class="inc-dec-btns" data-operator="plus" data-target="data.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||
{{#if item.system.properties.stackable}}
|
||||
<a class="inc-dec-btns" data-operator="minus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||
<span class="item-field">{{item.system.quantity}}</span>
|
||||
<a class="inc-dec-btns" data-operator="plus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
<span class="item-field">{{item.data.price}}</span>
|
||||
<span class="item-field">{{item.system.price}}</span>
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
{{#if data.properties.equipable}}
|
||||
{{#if data.worn}}
|
||||
{{#if system.properties.equipable}}
|
||||
{{#if system.worn}}
|
||||
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
||||
class="fas fa-shield-alt"></i></a></span>
|
||||
{{else}}
|
||||
@ -358,26 +365,26 @@
|
||||
<a class="item-edit">{{item.name}}</a>
|
||||
</h4>
|
||||
<div class="item-field flex2 center">
|
||||
{{#if item.data.properties.equipable}}
|
||||
{{#if item.system.properties.equipable}}
|
||||
<span class="item-field" style="font-size: smaller; font-style: italic; color:#4b4a44">{{localize (concat
|
||||
"BOL.equipmentSlots." item.data.properties.slot)}}</span>
|
||||
"BOL.equipmentSlots." item.system.properties.slot)}}</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item-field group-btns flex1 center">
|
||||
{{#if item.data.properties.stackable}}
|
||||
<a class="inc-dec-btns" data-operator="minus" data-target="data.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||
<span class="item-field">{{item.data.quantity}}</span>
|
||||
<a class="inc-dec-btns" data-operator="plus" data-target="data.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.data.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||
{{#if item.system.properties.stackable}}
|
||||
<a class="inc-dec-btns" data-operator="minus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-minus-square"></i></a>
|
||||
<span class="item-field">{{item.system.quantity}}</span>
|
||||
<a class="inc-dec-btns" data-operator="plus" data-target="system.quantity" data-incr="1" data-min="0"
|
||||
data-max="{{item.system.properties.stacksize}}"><i class="fas fa-plus-square"></i></a>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
<span class="item-field">{{item.data.price}}</span>
|
||||
<span class="item-field">{{item.system.price}}</span>
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
{{#if data.properties.equipable}}
|
||||
{{#if data.worn}}
|
||||
{{#if system.properties.equipable}}
|
||||
{{#if system.worn}}
|
||||
<span class="item-field"><a class="item-control item-equip" title="{{localize " BOL.ui.unequip"}}"><i
|
||||
class="fas fa-shield-alt"></i></a></span>
|
||||
{{else}}
|
||||
|
@ -16,25 +16,24 @@
|
||||
</h4>
|
||||
<div class="item-field group-btns center flex2">
|
||||
{{#if (equals key "careers")}}
|
||||
<a class="inc-dec-btns" data-operator="minus" data-target="data.rank" data-incr="1" data-min="0" data-max="5"><i class="fas fa-minus-square"></i></a>
|
||||
<span class="item-field">{{item.data.rank}}</span>
|
||||
<a class="inc-dec-btns" data-operator="plus" data-target="data.rank" data-incr="1" data-min="0" data-max="5"><i class="fas fa-plus-square"></i></a>
|
||||
<a class="inc-dec-btns" data-operator="minus" data-target="system.rank" data-incr="1" data-min="0" data-max="5"><i class="fas fa-minus-square"></i></a>
|
||||
<span class="item-field">{{item.system.rank}}</span>
|
||||
<a class="inc-dec-btns" data-operator="plus" data-target="system.rank" data-incr="1" data-min="0" data-max="5"><i class="fas fa-plus-square"></i></a>
|
||||
<span class="item-field"> </span>
|
||||
<span class="tooltip-container">
|
||||
<span class="stat-roll rollable" title="XP" data-roll-type="careerxp" data-key="{{key}}">
|
||||
<i class="xp-next fas fa-arrow-up"></i></span>
|
||||
<span class="tooltiptext">
|
||||
{{#if (eq data.rank 0)}}
|
||||
{{#if (eq system.rank 0)}}
|
||||
1 XP
|
||||
{{else}}
|
||||
{{add data.rank 1}} XP
|
||||
{{add system.rank 1}} XP
|
||||
{{/if}}
|
||||
</span>
|
||||
</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
<div class="item-field flex1 right">
|
||||
<a class="item-control item-log" title="Log Item"><i class="far fa-comment"></i></a>
|
||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
|
@ -14,10 +14,10 @@
|
||||
<a class="rollable" data-roll-type="spell">{{item.name}}</a>
|
||||
</h4>
|
||||
<div class="item-field flex1 center">
|
||||
<span class="item-field">{{item.data.properties.circle}}</span>
|
||||
<span class="item-field">{{item.system.properties.circle}}</span>
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
<span class="item-field">{{item.data.properties.difficulty}}</span>
|
||||
<span class="item-field">{{item.system.properties.difficulty}}</span>
|
||||
</div>
|
||||
<div class="item-field flex1 right">
|
||||
<a class="item-control item-edit" title="{{localize "BOL.ui.edit"}}"><i class="fas fa-square"></i></a>
|
||||
@ -44,13 +44,13 @@
|
||||
<a class="rollable" data-roll-type="alchemy">{{item.name}}</a>
|
||||
</h4>
|
||||
<div class="item-field flex1 center">
|
||||
<span class="item-field">{{localize (concat "BOL.alchemyItem." item.data.properties.alchemytype)}}</span>
|
||||
<span class="item-field">{{localize (concat "BOL.alchemyItem." item.system.properties.alchemytype)}}</span>
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
<span class="item-field">{{item.data.properties.difficulty}}</span>
|
||||
<span class="item-field">{{item.system.properties.difficulty}}</span>
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
<span class="item-field">{{item.data.properties.pccurrent}} / {{item.data.properties.pccost}}</span>
|
||||
<span class="item-field">{{item.system.properties.pccurrent}} / {{item.system.properties.pccost}}</span>
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
<a class="inc-dec-btns-alchemy"><i class="fas fa-plus-square"></i></a>
|
||||
|
@ -1,9 +1,9 @@
|
||||
<div class="attributes flexrow">
|
||||
{{#each data.attributes as |attribute id|}}
|
||||
{{#each attributes as |attribute id|}}
|
||||
<div class="attribute stat flex1 flex-group-center {{key}}">
|
||||
<label class="stat-label"><a class="rollable" data-roll-type="attribute" data-roll="2d6+@attributes.{{key}}.value" data-adv="0" data-key="{{key}}">{{localize label}}</a></label><br/>
|
||||
<input class="stat-value rounded" type="text" name="data.attributes.{{key}}.value" value="{{numberFormat value decimals=0 sign=true}}" data-dtype="Number"/><br/>
|
||||
<span class="stat-roll rollable" title="2d6" data-roll-type="attribute" data-roll="2d6+@attributes.{{key}}.value" data-adv="0" data-key="{{key}}">
|
||||
<input class="stat-value rounded" type="text" name="system.attributes.{{key}}.value" value="{{numberFormat value decimals=0 sign=true}}" data-dtype="Number"/><br/>
|
||||
<span class="stat-roll rollable" title="2d6" data-roll-type="attribute" data-roll="2d6+@attributes.{{key}}.value" data-adv="0" data-key="{{key}}">
|
||||
<i class="darkgreen fas fa-dice"></i>
|
||||
</span>
|
||||
<span class="tooltip-container">
|
||||
@ -22,10 +22,10 @@
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="aptitudes flexrow">
|
||||
{{#each data.aptitudes as |aptitude id|}}
|
||||
{{#each aptitudes as |aptitude id|}}
|
||||
<div class="aptitude stat flex1 flex-group-center">
|
||||
<label class="stat-label"><a class="rollable" data-roll-type="aptitude" data-roll="2d6+@aptitudes.{{key}}.value" data-adv="0" data-key="{{key}}">{{localize label}}</a></label><br/>
|
||||
<input class="stat-value rounded-border" type="text" name="data.aptitudes.{{key}}.value" value="{{numberFormat value decimals=0 sign=true}}" data-dtype="Number"/><br/>
|
||||
<input class="stat-value rounded-border" type="text" name="system.aptitudes.{{key}}.value" value="{{numberFormat value decimals=0 sign=true}}" data-dtype="Number"/><br/>
|
||||
<span class="stat-roll rollable" title="2d6" data-roll-type="aptitude" data-roll="2d6+@aptitudes.{{key}}.value" data-adv="0" data-key="{{key}}">
|
||||
<i class="darkgreen fas fa-dice"></i>
|
||||
</span>
|
||||
@ -50,25 +50,29 @@
|
||||
{{#if @root.isAlchemist}}
|
||||
<div class="resource stat flex1 flex-group-center">
|
||||
<label class="stat-label">{{localize label}}</label><br/>
|
||||
<input class="stat-value" type="text" name="data.resources.{{key}}.value" value="{{numberFormat value decimals=0 sign=false}}" data-dtype="Number"/>
|
||||
{{#if (eq @root.data.type 'player')}}
|
||||
{{#if (exists bonus)}}
|
||||
<span class="flexrow"><label class="stat-max">Bonus:</label><input class="stat-max" type="text" name="data.resources.{{key}}.bonus" value="{{numberFormat bonus decimals=0 sign=false}}" data-dtype="Number"/></span>
|
||||
<input class="stat-value resources-value" type="text" name="system.resources.{{key}}.value" value="{{numberFormat value decimals=0 sign=false}}" data-dtype="Number"/>
|
||||
{{#if (eq @root.chartype 'player')}}
|
||||
{{#if (exists bonus)}}
|
||||
<span class="flexrow"><label class="stat-max bonus-text">Bonus</label><input class="resource-bonus resources-value" type="text" name="system.resources.{{key}}.bonus" value="{{numberFormat bonus decimals=0 sign=false}}" data-dtype="Number"/></span>
|
||||
{{else}}
|
||||
<span class="flexrow"><label class="stat-max resources-value"> </label><input class="resource-bonus resources-novalue" type="text" value="" disabled></span>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<input class="stat-max" type="text" name="data.resources.{{key}}.max" value="{{numberFormat max decimals=0 sign=false}}" data-dtype="Number"/>
|
||||
<input class="resources-value" type="text" name="system.resources.{{key}}.max" value="{{numberFormat max decimals=0 sign=false}}" data-dtype="Number"/>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{else}}
|
||||
<div class="resource stat flex1 flex-group-center">
|
||||
<label class="stat-label">{{localize label}}</label><br/>
|
||||
<input class="stat-value" type="text" name="data.resources.{{key}}.value" value="{{numberFormat value decimals=0 sign=false}}" data-dtype="Number"/>
|
||||
{{#if (eq @root.data.type 'player')}}
|
||||
{{#if (exists bonus)}}
|
||||
<span class="flexrow"><label class="stat-max">Bonus:</label><input class="stat-max" type="text" name="data.resources.{{key}}.bonus" value="{{numberFormat bonus decimals=0 sign=false}}" data-dtype="Number"/></span>
|
||||
<input class="stat-value resources-value" type="text" name="system.resources.{{key}}.value" value="{{numberFormat value decimals=0 sign=false}}" data-dtype="Number"/>
|
||||
{{#if (eq @root.chartype 'player')}}
|
||||
{{#if (exists bonus)}}
|
||||
<span class="flexrow"><label class="stat-max bonus-text">Bonus</label><input class="resource-bonus resources-value" type="text" name="system.resources.{{key}}.bonus" value="{{numberFormat bonus decimals=0 sign=false}}" data-dtype="Number"/></span>
|
||||
{{else}}
|
||||
<span class="flexrow"><label class="stat-max"> </label><input class="resource-bonus resources-novalue" type="text" value="" disabled></span>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<input class="stat-max" type="text" name="data.resources.{{key}}.max" value="{{numberFormat max decimals=0 sign=false}}" data-dtype="Number"/>
|
||||
<input class="resources-value" type="text" name="system.resources.{{key}}.max" value="{{numberFormat max decimals=0 sign=false}}" data-dtype="Number"/>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
|
@ -1,5 +1,7 @@
|
||||
{{#each combatCreature as |combatType id|}}
|
||||
{{#each combat as |combatType id|}}
|
||||
<ol class="items-list">
|
||||
{{#if (isEmpty combatType.items)}}
|
||||
{{else}}
|
||||
<li class="item flexrow item-header">
|
||||
<div class="item-name flex2">{{localize combatType.label}}</div>
|
||||
{{#if protection}}<div class="item-field">{{localize "BOL.ui.protection"}}</div>{{/if}}
|
||||
@ -8,16 +10,17 @@
|
||||
{{#if ranged}}<div class="item-field">{{localize "BOL.ui.range"}}</div>{{else}}<div class="item-field"></div>{{/if}}
|
||||
{{#if options}}<div class="item-field">{{localize "BOL.ui.status"}}</div>{{else}}<div class="item-field"></div>{{/if}}
|
||||
</li>
|
||||
{{/if}}
|
||||
{{#each combatType.items as |item id|}}
|
||||
<li class="item flexrow" data-item-id="{{item._id}}">
|
||||
<div class="item-image" ><img src="{{item.img}}" title="{{item.name}}"/></div>
|
||||
<h4 class="item-name flex2">{{#if ../weapon}}<a class="rollable" data-roll-type="weapon">{{/if}}{{item.name}}{{#if ../weapon}}</a>{{/if}}</h4>
|
||||
{{#if ../protection}}<div class="item-field"><a class="rollable" data-roll-type="protection">{{item.data.properties.soak.formula}}</a> / {{item.data.properties.soak.value}}</div>{{/if}}
|
||||
{{#if ../blocking}}<div class="item-field">{{item.data.properties.blocking.malus}}</div>{{/if}}
|
||||
{{#if ../weapon}}<div class="item-field"><a class="rollable" data-roll-type="damage">{{item.data.properties.damage}}+{{item.data.properties.damageModifiers}} x{{item.data.properties.damageMultiplier}}</a></div>{{/if}}
|
||||
{{#if ../ranged}}<div class="item-field">{{item.data.properties.range}}</div>{{else}}<div class="item-field"></div>{{/if}}
|
||||
{{#if ../protection}}<div class="item-field"><a class="rollable" data-roll-type="protection">{{item.system.properties.soak.formula}}</a> / {{item.system.properties.soak.value}}</div>{{/if}}
|
||||
{{#if ../blocking}}<div class="item-field">{{item.system.properties.blocking.malus}}</div>{{/if}}
|
||||
{{#if ../weapon}}<div class="item-field"><a class="rollable" data-roll-type="damage">{{item.system.properties.damage}}+{{item.system.properties.damageModifiers}} x{{item.system.properties.damageMultiplier}}</a></div>{{/if}}
|
||||
{{#if ../ranged}}<div class="item-field">{{item.system.properties.range}}</div>{{else}}<div class="item-field"></div>{{/if}}
|
||||
{{#if ../options}}<div class="item-field">
|
||||
{{#if item.data.properties.activated}}
|
||||
{{#if item.system.properties.activated}}
|
||||
<a class="toggle-fight-option">{{localize "BOL.ui.toactivated"}}</a>
|
||||
{{else}}
|
||||
<a class="toggle-fight-option">{{localize "BOL.ui.todeactivated"}}</a>
|
||||
|
@ -1,9 +1,9 @@
|
||||
<div class="attributes flexrow">
|
||||
{{#each data.attributes as |attribute id|}}
|
||||
{{#each attributes as |attribute id|}}
|
||||
{{#if (ne id "appeal")}}
|
||||
<div class="attribute stat flex1 flex-group-center {{key}}">
|
||||
<label class="stat-label"><a class="rollable" data-roll-type="attribute" data-roll="2d6+@attributes.{{key}}.value" data-adv="0" data-key="{{key}}">{{localize label}}</a></label><br/>
|
||||
<input class="stat-value rounded" type="text" name="data.attributes.{{key}}.value" value="{{numberFormat value decimals=0 sign=true}}" data-dtype="Number"/><br/>
|
||||
<input class="stat-value rounded" type="text" name="system.attributes.{{key}}.value" value="{{numberFormat value decimals=0 sign=true}}" data-dtype="Number"/><br/>
|
||||
<span class="stat-roll rollable" title="2d6" data-roll-type="attribute" data-roll="2d6+@attributes.{{key}}.value" data-adv="0" data-key="{{key}}">
|
||||
<i class="darkgreen fas fa-dice"></i>
|
||||
</span>
|
||||
@ -15,18 +15,16 @@
|
||||
<div class="aptitudes flexrow">
|
||||
<div class="aptitude stat flex1 flex-group-center">
|
||||
<div class="stat-label"><a class="rollable" data-roll-type="aptitude" data-roll="2d6+@aptitudes.def.value" data-adv="0" data-key="def">{{localize "BOL.aptitudes.def"}}</a></label><br/>
|
||||
<input class="stat-value rounded-border" type="text" name="data.aptitudes.def.value" value="{{numberFormat aptitudes.3.value decimals=0 sign=true}}" data-dtype="Number"/><br/>
|
||||
<input class="stat-value rounded-border" type="text" name="system.aptitudes.def.value" value="{{numberFormat aptitudes.3.value decimals=0 sign=true}}" data-dtype="Number"/><br/>
|
||||
<span class="stat-roll rollable" title="2d6" data-roll-type="aptitude" data-roll="2d6+@aptitudes.def.value" data-adv="0" data-key="def">
|
||||
<i class="darkgreen fas fa-dice"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="resources flexrow">
|
||||
<div class="resource stat flex1 flex-group-center">
|
||||
<label class="stat-label">{{localize "BOL.resources.hp"}}</label><br/>
|
||||
<input class="stat-value" type="text" name="data.resources.hp.value" value="{{numberFormat resources.hp.value decimals=0 sign=false}}" data-dtype="Number"/>
|
||||
<input class="stat-max" type="text" name="data.resources.hp.max" value="{{numberFormat resources.hp.max decimals=0 sign=false}}" data-dtype="Number"/>
|
||||
<input class="stat-value" type="text" name="system.resources.hp.value" value="{{numberFormat resources.hp.value decimals=0 sign=false}}" data-dtype="Number"/>
|
||||
<input class="stat-max" type="text" name="system.resources.hp.max" value="{{numberFormat resources.hp.max decimals=0 sign=false}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
|
10
templates/actor/parts/tabs/vehicle-description.hbs
Normal file
10
templates/actor/parts/tabs/vehicle-description.hbs
Normal file
@ -0,0 +1,10 @@
|
||||
<ol class="items-list">
|
||||
<li class="item flexrow item-header">
|
||||
<div class="item-name flex4 left">{{localize "BOL.ui.biodescription"}}</div>
|
||||
<div class="item-field flex1 right"></div>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
{{editor description target="system.description" button=true owner=owner
|
||||
editable=editable}}
|
||||
|
24
templates/actor/parts/tabs/vehicle-stats.hbs
Normal file
24
templates/actor/parts/tabs/vehicle-stats.hbs
Normal file
@ -0,0 +1,24 @@
|
||||
<hr />
|
||||
|
||||
<div class="resources flexrow">
|
||||
{{#each system.attributes as |attr key|}}
|
||||
<div class="resource stat flex1 flex-group-center">
|
||||
<label class="stat-label">{{localize attr.label}}</label><br />
|
||||
<input class="stat-value resources-value" type="text" name="system.attributes.{{key}}.value"
|
||||
value="{{numberFormat attr.value decimals=0 sign=false}}" data-dtype="Number" />
|
||||
<input class="resources-value" type="text" name="system.attributes.{{key}}.max"
|
||||
value="{{numberFormat attr.max decimals=0 sign=false}}" data-dtype="Number" />
|
||||
</div>
|
||||
{{/each}}
|
||||
|
||||
{{#if (eq system.vehicletype "boat")}}
|
||||
<div class="resource stat flex1 flex-group-center">
|
||||
<label class="stat-label">{{localize system.row.label}}</label><br />
|
||||
<input class="stat-value resources-value" type="text" name="system.row.value"
|
||||
value="{{numberFormat system.row.value decimals=0 sign=false}}" data-dtype="Number" />
|
||||
<input class="resources-value" type="text" name="system.row.max"
|
||||
value="{{numberFormat system.row.max decimals=0 sign=false}}" data-dtype="Number" />
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
30
templates/actor/parts/tabs/vehicle-weapons.hbs
Normal file
30
templates/actor/parts/tabs/vehicle-weapons.hbs
Normal file
@ -0,0 +1,30 @@
|
||||
<div class="item-name flex4 left">{{localize "BOL.ui.vehicleWeapons"}}</div>
|
||||
<ol class="items-list">
|
||||
<li class="item flexrow item-header">
|
||||
<div class="item-name flex4 left">{{localize "BOL.ui.weapons"}}</div>
|
||||
<div class="item-field flex2 center">{{localize "BOL.ui.hullDamage"}}</div>
|
||||
<div class="item-field flex1 center">{{localize "BOL.ui.crewDamage"}}</div>
|
||||
<div class="item-field flex1 center">{{localize "BOL.ui.fireDamage"}}</div>
|
||||
<div class="item-field flex1 right"></div>
|
||||
</li>
|
||||
{{#each weapons as |item id|}}
|
||||
<li class="item flexrow" data-item-id="{{item._id}}">
|
||||
<h4 class="item-name flex4 left">
|
||||
<div class="item-image"><img src="{{item.img}}" title="{{item.name}}" /></div>
|
||||
<a class="item-edit">{{item.name}}</a>
|
||||
</h4>
|
||||
<div class="item-field flex1 center">
|
||||
<span class="item-field">{{item.system.properties.hulldamage}}</span>
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
<span class="item-field">{{item.system.properties.crewdamage}}</span>
|
||||
</div>
|
||||
<div class="item-field flex1 center">
|
||||
<span class="item-field">{{#if item.system.properties.isfiredamage}}X{{else}}-{{/if}}</span>
|
||||
</div>
|
||||
<div class="item-field flex1 right">
|
||||
<a class="item-control item-delete" title="{{localize " BOL.ui.delete"}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ol>
|
66
templates/actor/vehicle-sheet.hbs
Normal file
66
templates/actor/vehicle-sheet.hbs
Normal file
@ -0,0 +1,66 @@
|
||||
<form class="{{cssClass}} flexcol bol-actor-form" autocomplete="off">
|
||||
<!--<img class="system-img" src="/systems/bol/ui/logo.webp" height="115" width="190"/> -->
|
||||
|
||||
<div class="wrap flexrow">
|
||||
|
||||
{{!-- Sidebar --}}
|
||||
<div class="sidebar flex0 bol-actor-sidebar">
|
||||
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" height="100" width="100"
|
||||
style="border:1px outset lightgray; box-shadow: 5px 5px 5px gray" />
|
||||
</div>
|
||||
|
||||
<div class="main flex1">
|
||||
|
||||
{{!-- Sheet Header --}}
|
||||
<header class="sheet-header">
|
||||
<div class="header-field flex1">
|
||||
<div class="header-field-group flexrow">
|
||||
<label class="header-field-label flex2">{{localize "BOL.ui.name"}}</label><br/>
|
||||
<input class="charname flex6" name="name" type="text" value="{{name}}" placeholder="Name"/>
|
||||
</div>
|
||||
<div class="header-field-group flexrow">
|
||||
<label class="header-field-label flex2">Type : </label><br/>
|
||||
<select class="field-value" name="system.vehicletype" data-dtype="String">
|
||||
{{#select system.vehicletype}}
|
||||
<option value="boat">Navire</option>
|
||||
<option value="flyingboat">Nef Volante</option>
|
||||
<option value="chariot">Chariot/Carriole</option>
|
||||
<option value="other">Autre</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{{!-- Sheet Tab Navigation --}}
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<a class="item" data-tab="stats">{{localize "BOL.ui.tab.stats"}}</a>
|
||||
<a class="item" data-tab="description">{{localize "BOL.ui.tab.description"}}</a>
|
||||
</nav>
|
||||
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
<div class="tab stats" data-group="primary" data-tab="stats">
|
||||
{{>"systems/bol/templates/actor/parts/tabs/vehicle-stats.hbs"}}
|
||||
{{>"systems/bol/templates/actor/parts/tabs/vehicle-weapons.hbs"}}
|
||||
|
||||
</div>
|
||||
|
||||
<div class="tab description" data-group="primary" data-tab="description">
|
||||
{{> "systems/bol/templates/actor/parts/tabs/vehicle-description.hbs"}}
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bol-footer flexrow">
|
||||
<div class="footer-left flex1">
|
||||
<img src="/systems/bol/ui/banner.webp" />
|
||||
</div>
|
||||
<div class="footer-center flex1"></div>
|
||||
<div class="footer-right flex1">
|
||||
<img src="/systems/bol/ui/banner.webp" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
85
templates/apps/character-summary-template.html
Normal file
85
templates/apps/character-summary-template.html
Normal file
@ -0,0 +1,85 @@
|
||||
<form class="{{cssClass}} flexcol character-summary-container" autocomplete="off">
|
||||
|
||||
<ol class="items-list">
|
||||
|
||||
<li class="item flexrow item-header">
|
||||
<div class="item-field item-name item-name-fixed-medium">{{localize "BOL.ui.pcname"}}</div>
|
||||
{{#each config.attackAttributes as |attr key|}}
|
||||
<div class="item-field flex2 item-field-fixed-short">{{abbrev3 (localize attr)}}</div>
|
||||
{{/each}}
|
||||
{{#each config.aptitudes as |apt key|}}
|
||||
<div class="item-field flex2 item-field-fixed-short">{{abbrev3 (localize apt)}}</div>
|
||||
{{/each}}
|
||||
{{#each config.resources as |res key|}}
|
||||
<div class="item-field flex2 item-field-fixed-short">{{abbrev3 (localize res)}}</div>
|
||||
{{/each}}
|
||||
<div class="item-field flex1 right">
|
||||
</div>
|
||||
</li>
|
||||
|
||||
{{#each pcs as |pc key|}}
|
||||
<li class="item flexrow" data-actor-id="{{pc.id}}">
|
||||
<div class="item-field item-name item-name-fixed-medium">
|
||||
<a class="actor-open character-summary-rollable">{{pc.name}}</a>
|
||||
</div>
|
||||
{{#each pc.system.attributes as |attr key|}}
|
||||
<div class="item-field flex2 item-field-fixed-short">
|
||||
<a class="summary-roll character-summary-rollable" data-type="attribute" data-key="{{key}}">{{attr.value}}</a>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#each pc.system.aptitudes as |apt key|}}
|
||||
<div class="item-field flex item-field-fixed-short">
|
||||
<a class="summary-roll character-summary-rollable" data-type="aptitude" data-key="{{key}}">{{apt.value}}</a>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#each pc.system.resources as |res key|}}
|
||||
<div class="item-field flex2 item-field-fixed-short">{{res.value}}/{{res.max}}</div>
|
||||
{{/each}}
|
||||
<div class="item-field flex1 right">
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
|
||||
<li class="item flexrow item-header">
|
||||
<div class="item-field item-name item-name-fixed-medium">{{localize "BOL.ui.npcname"}}</div>
|
||||
{{#each config.attackAttributes as |attr key|}}
|
||||
<div class="item-field flex2 item-field-fixed-short">{{abbrev3 (localize attr)}}</div>
|
||||
{{/each}}
|
||||
{{#each config.aptitudes as |apt key|}}
|
||||
<div class="item-field flex2 item-field-fixed-short">{{abbrev3 (localize apt)}}</div>
|
||||
{{/each}}
|
||||
{{#each config.resources as |res key|}}
|
||||
<div class="item-field flex2 item-field-fixed-short">{{abbrev3 (localize res)}}</div>
|
||||
{{/each}}
|
||||
<div class="item-field flex1 right">
|
||||
</div>
|
||||
</li>
|
||||
|
||||
{{#each npcs as |pc key|}}
|
||||
<li class="item flexrow" data-actor-id="{{pc.id}}">
|
||||
<div class="item-field item-name item-name-fixed-medium">
|
||||
<a class="actor-open character-summary-rollable">{{pc.name}}</a>
|
||||
</div>
|
||||
{{#each pc.system.attributes as |attr key|}}
|
||||
<div class="item-field flex2 item-field-fixed-short">
|
||||
<a class="summary-roll character-summary-rollable" data-type="attribute" data-key="{{key}}">{{attr.value}}</a>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#each pc.system.aptitudes as |apt key|}}
|
||||
<div class="item-field flex item-field-fixed-short">
|
||||
<a class="summary-roll character-summary-rollable" data-type="aptitude" data-key="{{key}}">{{apt.value}}</a>
|
||||
</div>
|
||||
{{/each}}
|
||||
{{#each pc.system.resources as |res key|}}
|
||||
<div class="item-field flex2 item-field-fixed-short">{{res.value}}/{{res.max}}</div>
|
||||
{{/each}}
|
||||
<div class="item-field flex1 right">
|
||||
<a class="item-control actor-delete" title="{{localize "BOL.ui.delete"}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
|
||||
</li>
|
||||
{{/each}}
|
||||
|
||||
</ol>
|
||||
|
||||
</form>
|
@ -5,10 +5,9 @@
|
||||
|
||||
<div class="flexrow">
|
||||
{{#if state}}
|
||||
{{name}} active son option de combat {{foName}} pour ce round !
|
||||
{{localize "BOL.chat.fightactive" name=name foName=foName}}
|
||||
{{else}}
|
||||
{{name}} désactive son option de combat {{foName}} pour ce round !
|
||||
{{localize "BOL.chat.fightunactive" name=name foName=foName}}
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
|
||||
|
33
templates/chat/chat-adventure-result.hbs
Normal file
33
templates/chat/chat-adventure-result.hbs
Normal file
@ -0,0 +1,33 @@
|
||||
<div>
|
||||
<img class="chat-icon" src="{{img}}" alt="{{name}}"/>
|
||||
<h2 class="bad"><strong>{{story.title}}</strong></h2>
|
||||
</div>
|
||||
|
||||
<div class="flexrow">
|
||||
|
||||
<br>{{story.mission}}
|
||||
{{#if story.carriere}}
|
||||
<br>{{story.carriere}}
|
||||
{{/if}}
|
||||
{{#if story.lieu}}
|
||||
<br>{{story.lieu}}
|
||||
{{/if}}
|
||||
{{#if story.objet}}
|
||||
<br>{{story.objet}}
|
||||
{{/if}}
|
||||
<br>{{story.motivation}}
|
||||
{{#if story.rival}}
|
||||
<br>{{story.rival}}
|
||||
{{/if}}
|
||||
{{#if story.dieu}}
|
||||
<br>{{story.dieu}}
|
||||
{{/if}}
|
||||
{{#if story.complication}}
|
||||
<br>{{story.complication}}
|
||||
{{/if}}
|
||||
{{#if story.retournement}}
|
||||
<br>{{story.retournement}}
|
||||
{{/if}}
|
||||
<br>{{story.recompense}}
|
||||
</div>
|
||||
|
19
templates/chat/chat-info-range.hbs
Normal file
19
templates/chat/chat-info-range.hbs
Normal file
@ -0,0 +1,19 @@
|
||||
<div>
|
||||
<img class="chat-icon" src="{{weapon.img}}" alt="{{weapon.name}}"/>
|
||||
<h2 class="bad"><strong>{{localize "BOL.chat.rangetitle"}}</strong></h2>
|
||||
</div>
|
||||
|
||||
<div class="flexrow">
|
||||
|
||||
{{localize "BOL.chat.rangeinfo" attackerName=attackerName defenderName=defenderName}}
|
||||
{{#if visible}}
|
||||
<br>{{localize "BOL.chat.rangevisible"}}
|
||||
{{else}}
|
||||
<br>{{localize "BOL.chat.rangenotvisible"}}
|
||||
{{/if}}
|
||||
<br>{{localize "BOL.chat.rangeweaponinfo" weaponName=weapon.name weaponRange=weaponRange}} m.
|
||||
<br>{{localize "BOL.chat.rangeprefix"}} {{distance}} m.
|
||||
<br>{{localize rangeMsg}}
|
||||
|
||||
</div>
|
||||
|
@ -6,17 +6,17 @@
|
||||
<div class="flexrow">
|
||||
|
||||
{{#if (eq hp 0)}}
|
||||
La Vitalité de {{name}} est {{hp}} : il va s'écrouler au sol et sombrer dans l'inconscience !
|
||||
<br>Vous pouvez dépenser 1 Point d'Héroisme pour reprendre vos esprits pendant 1 round.
|
||||
<br>Dans ce cas votre vitalité remonte à son maximum divisé par 2 (arrondi au supérieur).
|
||||
{{localize "BOL.chat.vitalityzero" name=name hp=hp}}
|
||||
<br>{{localize "BOL.chat.vitalityheroism"}}
|
||||
<br>{{localize "BOL.chat.vitalityheroismhint"}}
|
||||
{{else}}
|
||||
La Vitalité de {{name}} est de {{hp}} ! Il est mourant ...
|
||||
<br>Vous pouvez cependant dépenser 1 Point d'Héroisme pour Défier la Mort (cf. page 58).
|
||||
{{localize "BOL.chat.vitalitydying" name=name hp=hp}}
|
||||
<br>{{localize "BOL.chat.vitalitydyingheroism"}}
|
||||
{{/if}}
|
||||
|
||||
{{#if (lt hp -5)}}
|
||||
<br><strong>{{name}} est mort ! </strong>
|
||||
<br>Que son nom soit honoré sur les champs de batailles de Lémurie !
|
||||
<br><strong>{{localize "BOL.chat.isdead" name=name}}</strong>
|
||||
<br>{{localize "BOL.chat.epitaph"}}
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
|
@ -1,11 +1,8 @@
|
||||
<h4><strong>Préparation Alchimique : {{alchemy.name}}</strong></h4>
|
||||
<h4><strong>Points de Création Investis : {{pcCostCurrent}}</strong></h4>
|
||||
<h4><strong>{{localize "BOL.chat.alchemytitle" name=alchemy.name}}</strong></h4>
|
||||
<h4><strong>{{localize "BOL.chat.alchemypoints" pcCostCurrent=pcCostCurrent}}</strong></h4>
|
||||
|
||||
{{#if isSuccess}}
|
||||
La préparation alchimique a été réalisée avec succès !
|
||||
<br>Créez l'item ou l'effet correspondant dans votre Inventaire.
|
||||
<br>L'avancement dans la préparation a été remis à 0.
|
||||
{{localize "BOL.chat.alchemysuccess"}}
|
||||
{{else}}
|
||||
La préparation alchimique a échouée !
|
||||
<br>L'avancement dans la préparation a été remis à 0.
|
||||
{{localize "BOL.chat.alchemyfailure"}}
|
||||
{{/if}}
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
<button class="chat-damage-roll" data-damage-mode="normal-damage" data-attack-id="{{id}}">Lancer les dommages</button>
|
||||
<button class="chat-damage-roll bol-margin-tb-2" data-damage-mode="normal-damage" data-attack-id="{{id}}">{{localize "BOL.chat.rolldamage"}}</button>
|
||||
|
||||
{{#if isCritical}}
|
||||
<button class="chat-damage-roll" data-damage-mode="damage-plus-6" data-attack-id="{{id}}">Lancer les dommages +6</button>
|
||||
<button class="chat-damage-roll" data-damage-mode="damage-plus-12" data-attack-id="{{id}}">Dommages +12 (1 Pt. d'Heroisme)</button>
|
||||
<button class="chat-damage-roll bol-margin-tb-2 " data-damage-mode="damage-plus-6" data-attack-id="{{id}}">{{localize "BOL.chat.rolldamage6"}}</button>
|
||||
<button class="chat-damage-roll bol-margin-tb-2" data-damage-mode="damage-plus-12" data-attack-id="{{id}}">{{localize "BOL.chat.rolldamage12"}}</button>
|
||||
{{/if}}
|
||||
|
@ -1,13 +1,19 @@
|
||||
<img class="chat-icon" src="{{weapon.img}}" alt="{{weapon.name}}"/>
|
||||
<h3><strong>Dommages de {{weapon.name}} : {{damageRoll.total}}</strong></h3>
|
||||
<h3><strong>{{localize "BOL.chat.damageresult" name=weapon.name total=damageRoll.total}}</strong></h3>
|
||||
{{#if defender}}
|
||||
<h3><strong>Cible : {{defender.name}}</strong></h3>
|
||||
<h3><strong>{{localize "BOL.chat.damagetarget" target=defender.name}}</strong></h3>
|
||||
{{/if}}
|
||||
|
||||
{{#if weapon.system.properties.damageReroll1}}
|
||||
<div>
|
||||
<label>{{localize "BOL.chat.weaponreroll1"}}</label>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="actions-section">
|
||||
{{#if targetId}}
|
||||
<div id="{{applyId}}">
|
||||
<button class="chat-damage-apply" data-attack-id="{{id}}">Appliquer les dommages à la cible</button>
|
||||
<button class="chat-damage-apply" data-attack-id="{{id}}">{{localize "BOL.chat.applydamagetotarget"}}</button>
|
||||
</div>
|
||||
<br>
|
||||
{{/if}}
|
||||
|
@ -1,9 +1,13 @@
|
||||
<div>
|
||||
{{#if isSuccess}}
|
||||
{{#if isCritical}}
|
||||
<h2 class="success critical"><i class="fas fa-check-double"></i> {{localize "BOL.ui.critical"}}...
|
||||
{{#if isLegendary}}
|
||||
<h2 class="success critical"><i class="fas fa-check-double"></i> {{localize "BOL.ui.criticallegend"}}...
|
||||
{{else}}
|
||||
<h2 class="success"><i class="fas fa-check"></i> {{localize "BOL.ui.success"}}...
|
||||
{{#if isCritical}}
|
||||
<h2 class="success critical"><i class="fas fa-check-double"></i> {{localize "BOL.ui.critical"}}...
|
||||
{{else}}
|
||||
<h2 class="success"><i class="fas fa-check"></i> {{localize "BOL.ui.success"}}...
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{#if isFailure}}
|
||||
@ -13,20 +17,50 @@
|
||||
<h2 class="failure"><i class="fas fa-times"></i> {{localize "BOL.ui.failure"}}...
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<img class="chat-icon" src="{{actor.img}}" alt="{{actor.name}}"/>
|
||||
<img class="chat-icon" src="{{img}}" alt="{{actor.name}}"/>
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
<h3><strong>{{description}}</strong></h3>
|
||||
|
||||
<div class="actions-section">
|
||||
{{#if isFumble}}
|
||||
{{localize "BOL.chat.fumblemessage"}}
|
||||
{{/if}}
|
||||
|
||||
{{#if fightOption}}
|
||||
<div>
|
||||
Option de combat : {{fightOption.name}}
|
||||
{{localize "BOL.chat.fightoption"}} : {{fightOption.name}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if initiativeRank}}
|
||||
<div>
|
||||
{{localize "BOL.chat.initiative"}}: {{initiativeRank}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq mode "bougette")}}
|
||||
<div>
|
||||
{{localize "BOL.chat.rollbougette"}} :
|
||||
{{#if isSuccess}}
|
||||
{{localize "BOL.chat.bougettesuccess"}}
|
||||
{{else}}
|
||||
{{localize "BOL.chat.bougettefailure"}}
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div id="{{optionsId}}">
|
||||
|
||||
|
||||
|
||||
{{#if isRealCritical}}
|
||||
<div class="bol-margin-tb-2">
|
||||
<a class="content-link" draggable="true" data-uuid="Compendium.bol.aides-de-jeu.Yl1RKQb0BjVUtilk" data-id="Yl1RKQb0BjVUtilk" data-type="JournalEntry" data-pack="bol.aides-de-jeu" data-tooltip="un journal"><i class="fas fa-book-open"></i>Succès Héroïque</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if (and isSuccess weapon)}}
|
||||
{{> "systems/bol/templates/chat/rolls/attack-damage-card.hbs"}}
|
||||
{{/if}}
|
||||
@ -36,18 +70,20 @@
|
||||
{{#if alchemy}}
|
||||
{{> "systems/bol/templates/chat/rolls/alchemy-roll-card.hbs"}}
|
||||
{{/if}}
|
||||
|
||||
|
||||
{{#if reroll}}
|
||||
<button class="chat-button button hero-reroll" data-roll-id=="{{rollId}}" data-actor-id="{{actor.id}}">Relancer (1 P. Heroisme)</button>
|
||||
<button class="chat-button button hero-reroll bol-margin-tb-2" data-roll-id=="{{rollId}}" data-actor-id="{{actor.id}}">{{localize "BOL.chat.reroll"}}</button>
|
||||
{{/if}}
|
||||
{{#if (and isSuccess (not isCritical))}}
|
||||
<button class="chat-button button transform-heroic-roll" data-roll-id=="{{rollId}}" data-actor-id="{{actor.id}}">Transformer en succés Héroïque (1 P. Héroisme)</button>
|
||||
<button class="chat-button button transform-heroic-roll bol-margin-tb-2" data-roll-id=="{{rollId}}" data-actor-id="{{actor.id}}">{{localize "BOL.chat.toheroic"}}</button>
|
||||
{{/if}}
|
||||
|
||||
{{#if isRealCritical}}
|
||||
<button class="chat-button button transform-legendary-roll" data-roll-id=="{{rollId}}" data-actor-id="{{actor.id}}">Transformer en succes Légendaire (1 P. Heroisme)</button>
|
||||
<button class="chat-button button transform-legendary-roll bol-margin-tb-2" data-roll-id=="{{rollId}}" data-actor-id="{{actor.id}}">{{localize "BOL.chat.tolegend"}}</button>
|
||||
{{/if}}
|
||||
|
||||
<br>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
@ -1,18 +1,18 @@
|
||||
<img class="chat-icon" src="{{defender.img}}" alt="{{defender.name}}"/>
|
||||
{{defender.name}} va encaisser {{damageTotal}} dégats !
|
||||
{{localize "BOL.chat.hurttitle" name=defender.name damageTotal=damageTotal}}
|
||||
|
||||
{{#if damagesIgnoresArmor}}
|
||||
<br>C'est une attaque au défaut de l'armure : vous devez encaisser SANS la protection de l'armure !
|
||||
<br>{{localize "BOL.chat.armordefault"}}
|
||||
{{/if}}
|
||||
|
||||
<button class="damage-handling" data-defense-mode="damage-with-armor" data-attack-id="{{attackId}}">Encaisser avec la protection de l'armure</button>
|
||||
<button class="damage-handling" data-defense-mode="damage-without-armor" data-attack-id="{{attackId}}">Encaisser sans la protection de l'armure</button>
|
||||
<button class="damage-handling" data-defense-mode="damage-with-armor" data-attack-id="{{attackId}}">{{localize "BOL.chat.witharmor"}}</button>
|
||||
<button class="damage-handling" data-defense-mode="damage-without-armor" data-attack-id="{{attackId}}">{{localize "BOL.chat.withoutarmor"}}</button>
|
||||
|
||||
{{#if defender.data.data.resources.hero.value}}
|
||||
<button class="damage-handling" data-defense-mode="hero-reduce-damage" data-attack-id="{{attackId}}">Juste une égratignure (1 Point d'Héroisme)</button>
|
||||
{{#if defender.system.resources.hero.value}}
|
||||
<button class="damage-handling" data-defense-mode="hero-reduce-damage" data-attack-id="{{attackId}}">{{localize "BOL.chat.shakeoff"}}</button>
|
||||
|
||||
{{#each defenderWeapons as |weapon idx|}}
|
||||
<button class="damage-handling" data-defense-mode="hero-in-extremis" data-attack-id="{{@root.attackId}}" data-weapon-id="{{weapon._id}}">Parade in Extremis avec {{weapon.name}} (1 Point d'Héroisme)</button>
|
||||
<button class="damage-handling" data-defense-mode="hero-in-extremis" data-attack-id="{{@root.attackId}}" data-weapon-id="{{weapon._id}}">{{localize "BOL.chat.splinteredshield" name=weapon.name}}</button>
|
||||
{{/each}}
|
||||
|
||||
{{/if}}
|
@ -1,23 +1,22 @@
|
||||
<img class="chat-icon" src="{{defender.img}}" alt="{{defender.name}}"/>
|
||||
<h3>Dégats subis par {{defender.name}}</h3>
|
||||
<h3>{{localize "BOL.chat.damagesummary" name=name}}</h3>
|
||||
<ul>
|
||||
<li>
|
||||
{{#if (eq defenseMode "damage-with-armor")}}
|
||||
Protection de l'armure : {{armorProtect}}.
|
||||
{{localize "BOL.chat.protectvalue"}} : {{armorProtect}}.
|
||||
{{/if}}
|
||||
{{#if (eq defenseMode "damage-without-armor")}}
|
||||
Aucune protection d'armure !
|
||||
{{localize "BOL.chat.noprotectvalue"}}
|
||||
{{/if}}
|
||||
{{#if (eq defenseMode "hero-reduce-damage")}}
|
||||
Protection de l'armure : {{armorProtect}}.
|
||||
Un point d'héroisme dépensé, pour une réduction des dommages supplémentaire de {{rollHero.total}}.
|
||||
{{localize "BOL.chat.protectvalue"}} : {{armorProtect}}.
|
||||
{{localize "BOL.chat.heroreducedamage" total=rollHero.total}}
|
||||
{{/if}}
|
||||
{{#if (eq defenseMode "hero-in-extremis")}}
|
||||
Aucun dommage encaissé, grâce à la parade in-extremis avec {{weaponHero.name}}. L'arme a été détruite pendant cette parade !
|
||||
Un point d'héroisme a également été dépensé.
|
||||
{{localize "BOL.chat.herosplintered" name=weaponHero.name}}
|
||||
{{/if}}
|
||||
</li>
|
||||
<li>
|
||||
Encaissement final : {{finalDamage}} dégats !
|
||||
{{localize "BOL.chat.finaldamage" finalDamage=finalDamage}}
|
||||
</li>
|
||||
</ul>
|
||||
|
11
templates/chat/rolls/defense-summary-card.hbs
Normal file
11
templates/chat/rolls/defense-summary-card.hbs
Normal file
@ -0,0 +1,11 @@
|
||||
<img class="chat-icon" src="{{defender.img}}" alt="{{defender.name}}"/>
|
||||
<h3>{{localize "BOL.chat.damagesummary" name=name}}</h3>
|
||||
<ul>
|
||||
<li>
|
||||
{{#if (eq finalDamage 0)}}
|
||||
{{localize "BOL.chat.nodamagesummary"}}
|
||||
{{else}}
|
||||
{{localize "BOL.chat.damageresume" name=name}}
|
||||
{{/if}}
|
||||
</li>
|
||||
</ul>
|
@ -1,4 +1,4 @@
|
||||
<h4><strong>Sort : {{spell.name}}</strong></h4>
|
||||
<h4><strong>Cout en Points de Pouvoir : {{ppCost}}</strong></h4>
|
||||
<h4><strong>Points de Pouvoir restants : {{sub ppCurrent ppCost}}</strong></h4>
|
||||
<h4><strong>{{localize "BOL.chat.spell"}} : {{spell.name}}</strong></h4>
|
||||
<h4><strong>{{localize "BOL.chat.spellcost"}} : {{ppCost}}</strong></h4>
|
||||
<h4><strong>{{localize "BOL.chat.spellremaining"}} : {{remainingPP}}</strong></h4>
|
||||
|
||||
|
@ -5,7 +5,15 @@
|
||||
<div class="flex1 center cell">
|
||||
<input type="radio" class="bdice" name="adv" value="1" {{#if (eq adv "1B")}}checked{{/if}}/>+1dB<br />
|
||||
<input type="radio" class="bdice" name="adv" value="2" {{#if (eq adv "2B")}}checked{{/if}}/>+2dB<br />
|
||||
<input type="radio" class="bdice" name="adv" value="0" {{#if (eq adv "0")}}checked{{/if}}/>0<br />
|
||||
<input type="radio" class="mdice" name="adv" value="1" {{#if (eq adv "1M")}}checked{{/if}}/>+1dM<br />
|
||||
<input type="radio" class="mdice" name="adv" value="2" {{#if (eq adv "2M")}}checked{{/if}}/>+2dM<br />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if attackBonusDice}}
|
||||
<div class="flexrow" style="margin-bottom: 1px;">
|
||||
<label class="flex-group-center">{{localize 'BOL.ui.weaponbonus'}}</label>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
@ -35,6 +35,8 @@
|
||||
|
||||
{{> "systems/bol/templates/dialogs/flaws-roll-part.hbs"}}
|
||||
|
||||
{{> "systems/bol/templates/dialogs/effect-roll-part.hbs"}}
|
||||
|
||||
{{> "systems/bol/templates/dialogs/adv-roll-part.hbs"}}
|
||||
|
||||
{{> "systems/bol/templates/dialogs/mod-roll-part.hbs"}}
|
||||
|
@ -32,6 +32,8 @@
|
||||
|
||||
{{> "systems/bol/templates/dialogs/flaws-roll-part.hbs"}}
|
||||
|
||||
{{> "systems/bol/templates/dialogs/effect-roll-part.hbs"}}
|
||||
|
||||
{{> "systems/bol/templates/dialogs/adv-roll-part.hbs"}}
|
||||
|
||||
{{> "systems/bol/templates/dialogs/mod-roll-part.hbs"}}
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
{{> "systems/bol/templates/dialogs/flaws-roll-part.hbs"}}
|
||||
|
||||
{{> "systems/bol/templates/dialogs/effect-roll-part.hbs"}}
|
||||
|
||||
{{> "systems/bol/templates/dialogs/adv-roll-part.hbs"}}
|
||||
|
||||
{{> "systems/bol/templates/dialogs/mod-roll-part.hbs"}}
|
||||
|
@ -1,5 +1,5 @@
|
||||
<div class="flexrow box-roll">
|
||||
<div class="flex1 center bg-darkred">
|
||||
<div class="flex1 center bg-darkred" >
|
||||
<label for="attr">{{localize 'BOL.ui.attribute'}}</label>
|
||||
</div>
|
||||
<div class="flex1 center cell">
|
||||
|
@ -1,6 +1,6 @@
|
||||
{{#if (count boons)}}
|
||||
<div class="flexrow roll-box" >
|
||||
<div class="flex1 center bg-darkred">
|
||||
<div class="flex1 center bg-darkred" data-tooltip-direction="LEFT" data-tooltip="Click-gauche pour sélectionner, CTRL+Click gauche pour déselectionner">
|
||||
<label for="mod">{{localize 'BOL.ui.boons'}}</label>
|
||||
</div>
|
||||
<div class="flex1 center cell">
|
||||
|
@ -1,12 +1,12 @@
|
||||
{{#if careers}}
|
||||
<div class="flexrow roll-box">
|
||||
<div class="flex1 center bg-darkred">
|
||||
<div class="flex1 center bg-darkred" data-tooltip-direction="LEFT" data-tooltip="Click-gauche pour selectionner, CTRL+Click gauche pour déselectionner">
|
||||
<label for="mod">{{localize 'BOL.ui.careers'}}</label>
|
||||
</div>
|
||||
<div class="flex1 center cell">
|
||||
<select class="flex1" name="career" id="career" data-type="String" multiple>
|
||||
{{#each careers as | career id|}}
|
||||
<option value="{{career.data.rank}}">{{career.name}} ({{numberFormat career.data.rank decimals=0 sign=true}})</option>
|
||||
<option value="{{career.system.rank}}">{{career.name}} ({{numberFormat career.system.rank decimals=0 sign=true}})</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
|
14
templates/dialogs/effect-roll-part.hbs
Normal file
14
templates/dialogs/effect-roll-part.hbs
Normal file
@ -0,0 +1,14 @@
|
||||
{{#if (count bolEffects)}}
|
||||
<div class="flexrow roll-box" >
|
||||
<div class="flex1 center bg-darkred">
|
||||
<label for="mod">{{localize 'BOL.ui.boleffects'}}</label>
|
||||
</div>
|
||||
<div class="flex1 center cell">
|
||||
<select disabled class="flex1" name="applicable-effects" id="applicable-effects" data-type="String" multiple>
|
||||
{{#each bolApplicableEffects as |effect id|}}
|
||||
<option value="{{id}}" selected >{{effect.name}} ({{effect.system.properties.modifier}})</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
@ -1,6 +1,6 @@
|
||||
{{#if (count flaws)}}
|
||||
<div class="flexrow roll-box">
|
||||
<div class="flex1 center bg-darkred">
|
||||
<div class="flex1 center bg-darkred" data-tooltip-direction="LEFT" data-tooltip="Click-gauche pour selectionner, CTRL+Click gauche pour déselectionner">
|
||||
<label for="mod">{{localize 'BOL.ui.flaws'}}</label>
|
||||
</div>
|
||||
<div class="flex1 center cell">
|
||||
|
@ -6,13 +6,13 @@
|
||||
<div class="flex1 center cell">
|
||||
<select name="modRanged" id="modRanged" value="{{mod}}">
|
||||
{{#select modRanged}}
|
||||
<option value="1">Bout portant (+1)</option>
|
||||
<option value="0">Courte (0)</option>
|
||||
<option value="-1">Moyenne (-1)</option>
|
||||
<option value="-2">Longue (-2)</option>
|
||||
<option value="-4">Très longue (-4)</option>
|
||||
<option value="-6">Extrême (-6)</option>
|
||||
<option value="-8">Maximale (-8)</option>
|
||||
<option value="1">{{localize "BOL.dialog.pointblank"}}</option>
|
||||
<option value="0">{{localize "BOL.dialog.close"}}</option>
|
||||
<option value="-1">{{localize "BOL.dialog.medium"}}</option>
|
||||
<option value="-2">{{localize "BOL.dialog.long"}}</option>
|
||||
<option value="-4">{{localize "BOL.dialog.distant"}}</option>
|
||||
<option value="-6">{{localize "BOL.dialog.extreme"}}</option>
|
||||
<option value="-8">{{localize "BOL.dialog.utmost"}}</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
@ -44,17 +44,17 @@
|
||||
<div class="flex1 center cell">
|
||||
<select name="mod" id="mod" value="{{mod}}">
|
||||
{{#select mod}}
|
||||
<option value="4">Inmanquable (+4)</option>
|
||||
<option value="2">Trés Facile (+2)</option>
|
||||
<option value="1">Facile (+1)</option>
|
||||
<option value="0">Moyenne (0)</option>
|
||||
<option value="-1">Ardue (-1)</option>
|
||||
<option value="-2">Difficile (-2)</option>
|
||||
<option value="-4">Très Difficile (-4)</option>
|
||||
<option value="-6">Impossible (-6)</option>
|
||||
<option value="-8">Héroïque (-8)</option>
|
||||
<option value="-10">Mythique (-10)</option>
|
||||
<option value="-12">Divine (-12)</option>
|
||||
<option value="4">{{localize "BOL.dialog.soeasy"}}</option>
|
||||
<option value="2">{{localize "BOL.dialog.veryeasy"}}</option>
|
||||
<option value="1">{{localize "BOL.dialog.easy"}}</option>
|
||||
<option value="0">{{localize "BOL.dialog.moderate"}}</option>
|
||||
<option value="-1">{{localize "BOL.dialog.hard"}}</option>
|
||||
<option value="-2">{{localize "BOL.dialog.tough"}}</option>
|
||||
<option value="-4">{{localize "BOL.dialog.demanding"}}</option>
|
||||
<option value="-6">{{localize "BOL.dialog.formidable"}}</option>
|
||||
<option value="-8">{{localize "BOL.dialog.heroic"}}</option>
|
||||
<option value="-10">{{localize "BOL.dialog.mythic"}}</option>
|
||||
<option value="-12">{{localize "BOL.dialog.divine"}}</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
|
@ -8,7 +8,7 @@
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{{#if weapon.data.data.properties.onlymodifier}}
|
||||
{{#if weapon.system.properties.onlymodifier}}
|
||||
{{else}}
|
||||
{{> "systems/bol/templates/dialogs/attribute-roll-part.hbs"}}
|
||||
{{> "systems/bol/templates/dialogs/aptitude-roll-part.hbs"}}
|
||||
@ -18,7 +18,7 @@
|
||||
<div class="flex1 center bg-darkred">
|
||||
<label for="mod">{{localize 'BOL.ui.attackValue'}}</label>
|
||||
</div>
|
||||
<div class="flex1 center cell">{{weapon.data.data.properties.attackModifiers}}</div>
|
||||
<div class="flex1 center cell">{{weapon.system.properties.attackModifiers}}</div>
|
||||
</div>
|
||||
|
||||
<div class="flexrow roll-box" >
|
||||
@ -56,6 +56,8 @@
|
||||
|
||||
{{> "systems/bol/templates/dialogs/fightoptions-roll-part.hbs"}}
|
||||
|
||||
{{> "systems/bol/templates/dialogs/effect-roll-part.hbs"}}
|
||||
|
||||
{{> "systems/bol/templates/dialogs/adv-roll-part.hbs"}}
|
||||
|
||||
{{> "systems/bol/templates/dialogs/mod-roll-part.hbs"}}
|
||||
|
@ -20,7 +20,7 @@
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{editor content=data.description target="data.description" button=true owner=owner editable=editable}}
|
||||
{{editor description target="system.description" button=true owner=owner editable=editable}}
|
||||
</div>
|
||||
<div class="tab properties" data-group="primary" data-tab="properties">
|
||||
{{#if (eq item.type "item")}}
|
||||
|
@ -1,7 +1,7 @@
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.subtype"}}</label>
|
||||
<select name="data.subtype" value="{{data.subtype}}" data-dtype="String">
|
||||
{{#select data.subtype}}
|
||||
<select name="system.subtype" value="{{item.system.subtype}}" data-dtype="String">
|
||||
{{#select item.system.subtype}}
|
||||
{{#each config.featureSubtypes as |item id|}}
|
||||
<option value="{{id}}">{{localize item}}</option>
|
||||
{{/each}}
|
||||
@ -9,18 +9,21 @@
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{#if (equals data.subtype "career")}}
|
||||
{{#if (equals item.system.subtype "career")}}
|
||||
{{> "systems/bol/templates/item/parts/properties/feature/career-properties.hbs"}}
|
||||
{{/if}}
|
||||
{{#if (equals data.subtype "fightoption")}}
|
||||
{{#if (equals item.system.subtype "fightoption")}}
|
||||
{{> "systems/bol/templates/item/parts/properties/feature/fightoption-properties.hbs"}}
|
||||
{{/if}}
|
||||
{{!#if (equals data.subtype "race")}}
|
||||
{{!> "systems/bol/templates/item/parts/properties/feature/race-properties.hbs"}}
|
||||
{{!/if}}
|
||||
{{#if (equals data.subtype "boon")}}
|
||||
{{#if (equals item.system.subtype "boon")}}
|
||||
{{> "systems/bol/templates/item/parts/properties/feature/boon-properties.hbs"}}
|
||||
{{/if}}
|
||||
{{#if (equals data.subtype "flaw")}}
|
||||
{{#if (equals item.system.subtype "flaw")}}
|
||||
{{> "systems/bol/templates/item/parts/properties/feature/flaw-properties.hbs"}}
|
||||
{{/if}}
|
||||
{{#if (equals item.system.subtype "boleffect")}}
|
||||
{{> "systems/bol/templates/item/parts/properties/feature/effect-properties.hbs"}}
|
||||
{{/if}}
|
||||
|
@ -1,5 +1,5 @@
|
||||
<h3 class="form-header">{{localize 'BOL.featureSubtypes.boon'}}</h3>
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.isbonusdice"}}</label>
|
||||
<input class="field-value" type="checkbox" name="data.properties.isbonusdice" {{checked data.properties.isbonusdice}}>
|
||||
<input class="field-value" type="checkbox" name="system.properties.isbonusdice" {{checked item.system.properties.isbonusdice}}>
|
||||
</div>
|
||||
|
@ -1,17 +1,17 @@
|
||||
<h3 class="form-header">{{localize 'BOL.featureSubtypes.career'}}</h3>
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.rank"}}</label>
|
||||
<input type="text" name="data.rank" value="{{data.rank}}" data-dtype="Number"/>
|
||||
<input type="text" name="system.rank" value="{{item.system.rank}}" data-dtype="Number"/>
|
||||
</div>
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.isSorcerer"}}</label>
|
||||
<input class="field-value" type="checkbox" name="data.properties.sorcerer" {{checked data.properties.sorcerer}}>
|
||||
<input class="field-value" type="checkbox" name="system.properties.sorcerer" {{checked item.system.properties.sorcerer}}>
|
||||
</div>
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.isAlchemist"}}</label>
|
||||
<input class="field-value" type="checkbox" name="data.properties.alchemist" {{checked data.properties.alchemist}}>
|
||||
<input class="field-value" type="checkbox" name="system.properties.alchemist" {{checked item.system.properties.alchemist}}>
|
||||
</div>
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.isPriest"}}</label>
|
||||
<input class="field-value" type="checkbox" name="data.properties.priest" {{checked data.properties.priest}}>
|
||||
<input class="field-value" type="checkbox" name="system.properties.priest" {{checked item.system.properties.priest}}>
|
||||
</div>
|
||||
|
@ -0,0 +1,27 @@
|
||||
<h3 class="form-header">{{localize 'BOL.featureSubtypes.effect'}}</h3>
|
||||
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.attributaptitude"}}</label>
|
||||
<select name="system.properties.identifier" value="{{item.system.properties.identifier}}">
|
||||
{{#select item.system.properties.identifier}}
|
||||
<option value="always">{{localize "BOL.ui.always"}}</option>
|
||||
{{#each config.attackAttributes as |value id|}}
|
||||
<option value="system.attributes.{{id}}">{{localize value}}</option>
|
||||
{{/each}}
|
||||
{{#each config.aptitudes as |value id|}}
|
||||
<option value="system.aptitudes.{{id}}">{{localize value}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.modifier"}}</label>
|
||||
<select name="system.properties.modifier" value="{{item.system.properties.modifier}}">
|
||||
{{#select item.system.properties.modifier}}
|
||||
{{#each config.bolEffectModifier as |modifier id|}}
|
||||
<option value="{{id}}">{{localize modifier}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
@ -3,8 +3,8 @@
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.ui.fightOptionType"}}</label>
|
||||
<div class="form-fields">
|
||||
<select name="data.properties.fightoptiontype" data-dtype="String">
|
||||
{{#select data.properties.fightoptiontype}}
|
||||
<select name="system.properties.fightoptiontype" data-dtype="String">
|
||||
{{#select item.system.properties.fightoptiontype}}
|
||||
{{#each config.fightOptionTypes as |item id|}}
|
||||
<option value="{{id}}">{{localize item}}</option>
|
||||
{{/each}}
|
||||
@ -14,6 +14,6 @@
|
||||
</div>
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.activated"}}</label>
|
||||
<input class="field-value" type="checkbox" name="data.properties.activated" {{checked data.properties.activated}}>
|
||||
<input class="field-value" type="checkbox" name="system.properties.activated" {{checked item.system.properties.activated}}>
|
||||
</div>
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
<h3 class="form-header">{{localize 'BOL.featureSubtypes.flaw'}}</h3>
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.ismalusdice"}}</label>
|
||||
<input class="field-value" type="checkbox" name="data.properties.ismalusdice" {{checked data.properties.ismalusdice}}>
|
||||
<input class="field-value" type="checkbox" name="system.properties.ismalusdice" {{checked item.system.properties.ismalusdice}}>
|
||||
</div>
|
||||
|
@ -1,8 +1,8 @@
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.ui.category"}}</label>
|
||||
<div class="form-fields">
|
||||
<select class="field-value" name="data.category" value="{{data.category}}" data-dtype="String">
|
||||
{{#select data.category}}
|
||||
<select class="field-value" name="system.category" value="{{item.system.category}}" data-dtype="String">
|
||||
{{#select item.system.category}}
|
||||
{{#each config.itemCategories as |item id|}}
|
||||
<option value="{{id}}">{{localize item}}</option>
|
||||
{{/each}}
|
||||
@ -11,18 +11,21 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if (eq data.category "equipment")}}
|
||||
{{#if (eq item.system.category "equipment")}}
|
||||
{{> "systems/bol/templates/item/parts/properties/item/equipment-properties.hbs"}}
|
||||
{{/if}}
|
||||
{{#if (eq data.category "capacity")}}
|
||||
{{#if (eq item.system.category "capacity")}}
|
||||
{{> "systems/bol/templates/item/parts/properties/item/capacity-properties.hbs"}}
|
||||
{{/if}}
|
||||
{{#if (eq data.category "vehicle")}}
|
||||
{{#if (eq item.system.category "vehicle")}}
|
||||
{{> "systems/bol/templates/item/parts/properties/item/vehicle-properties.hbs"}}
|
||||
{{/if}}
|
||||
{{#if (eq data.category "spell")}}
|
||||
{{#if (eq item.system.category "spell")}}
|
||||
{{> "systems/bol/templates/item/parts/properties/item/spell-properties.hbs"}}
|
||||
{{/if}}
|
||||
{{#if (eq data.category "alchemy")}}
|
||||
{{#if (eq item.system.category "alchemy")}}
|
||||
{{> "systems/bol/templates/item/parts/properties/item/alchemy-properties.hbs"}}
|
||||
{{/if}}
|
||||
{{#if (eq item.system.category "vehicleweapon")}}
|
||||
{{> "systems/bol/templates/item/parts/properties/item/weapon-vehicle-properties.hbs"}}
|
||||
{{/if}}
|
||||
|
@ -2,8 +2,8 @@
|
||||
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.alchemyType"}}</label>
|
||||
<select class="field-value" name="data.properties.alchemytype" data-dtype="String">
|
||||
{{#select data.properties.alchemytype}}
|
||||
<select class="field-value" name="system.properties.alchemytype" data-dtype="String">
|
||||
{{#select item.system.properties.alchemytype}}
|
||||
{{#each config.alchemyType as |value id|}}
|
||||
<option value="{{id}}">{{localize value}}</option>
|
||||
{{/each}}
|
||||
@ -13,27 +13,27 @@
|
||||
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.difficulty"}}</label>
|
||||
<select name="data.properties.difficulty" value="{{data.properties.difficulty}}">
|
||||
{{#select data.properties.difficulty}}
|
||||
<option value="2">Trés Facile (+2)</option>
|
||||
<option value="1">Facile (+1)</option>
|
||||
<option value="0">Moyenne (0)</option>
|
||||
<option value="-1">Ardue (-1)</option>
|
||||
<option value="-2">Difficile (-2)</option>
|
||||
<option value="-4">Très Difficile (-4)</option>
|
||||
<option value="-6">Impossible (-6)</option>
|
||||
<option value="-8">Héroïque (-8)</option>
|
||||
<select name="system.properties.difficulty" value="{{item.system.properties.difficulty}}">
|
||||
{{#select item.system.properties.difficulty}}
|
||||
<option value="2">{{localize "BOL.dialog.veryeasy"}}</option>
|
||||
<option value="1">{{localize "BOL.dialog.easy"}}</option>
|
||||
<option value="0">{{localize "BOL.dialog.moderate"}}</option>
|
||||
<option value="-1">{{localize "BOL.dialog.hard"}}</option>
|
||||
<option value="-2">{{localize "BOL.dialog.tough"}}</option>
|
||||
<option value="-4">{{localize "BOL.dialog.demanding"}}</option>
|
||||
<option value="-6">{{localize "BOL.dialog.formidable"}}</option>
|
||||
<option value="-8">{{localize "BOL.dialog.heroic"}}</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.pccost"}}</label>
|
||||
<input class="field-value" type="text" name="data.properties.pccost" value="{{data.properties.pccost}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.properties.pccost" value="{{item.system.properties.pccost}}" data-dtype="Number"/>
|
||||
</div>
|
||||
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.pcnow"}}</label>
|
||||
<input class="field-value" type="text" name="data.properties.pccurrent" value="{{data.properties.pccurrent}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.properties.pccurrent" value="{{item.system.properties.pccurrent}}" data-dtype="Number"/>
|
||||
</div>
|
||||
|
||||
|
@ -3,23 +3,23 @@
|
||||
<label class="property-label">{{localize "BOL.ui.type"}}</label>
|
||||
<div class="form-fields">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.weapon" {{checked data.properties.weapon}}> {{localize "BOL.itemProperty.weapon"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.weapon" {{checked item.system.properties.weapon}}> {{localize "BOL.itemProperty.weapon"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.protection" {{checked data.properties.protection}}> {{localize "BOL.itemProperty.protection"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.protection" {{checked item.system.properties.protection}}> {{localize "BOL.itemProperty.protection"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.magical" {{checked data.properties.magical}}> {{localize "BOL.itemProperty.magical"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.magical" {{checked item.system.properties.magical}}> {{localize "BOL.itemProperty.magical"}}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if data.properties.weapon}}
|
||||
{{#if item.system.properties.weapon}}
|
||||
{{> "systems/bol/templates/item/parts/properties/item/weapon-properties.hbs"}}
|
||||
{{/if}}
|
||||
{{#if data.properties.protection}}
|
||||
{{#if item.system.properties.protection}}
|
||||
{{> "systems/bol/templates/item/parts/properties/item/protection-properties.hbs"}}
|
||||
{{/if}}
|
||||
{{#if data.properties.magical}}
|
||||
{{#if item.system.properties.magical}}
|
||||
{{> "systems/bol/templates/item/parts/properties/item/magical-properties.hbs"}}
|
||||
{{/if}}
|
||||
|
@ -3,8 +3,8 @@
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.ui.subtype"}}</label>
|
||||
<div class="form-fields">
|
||||
<select name="data.subtype" data-dtype="String">
|
||||
{{#select data.subtype}}
|
||||
<select name="system.subtype" data-dtype="String">
|
||||
{{#select item.system.subtype}}
|
||||
{{#each config.itemSubtypes as |item id|}}
|
||||
<option value="{{id}}">{{localize item}}</option>
|
||||
{{/each}}
|
||||
@ -17,13 +17,13 @@
|
||||
<label class="property-label">{{localize "BOL.ui.capacities"}}</label>
|
||||
<div class="form-fields">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.weapon" {{checked data.properties.weapon}}> {{localize "BOL.itemProperty.weapon"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.weapon" {{checked item.system.properties.weapon}}> {{localize "BOL.itemProperty.weapon"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.protection" {{checked data.properties.protection}}> {{localize "BOL.itemProperty.protection"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.protection" {{checked item.system.properties.protection}}> {{localize "BOL.itemProperty.protection"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.magical" {{checked data.properties.magical}}> {{localize "BOL.itemProperty.magical"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.magical" {{checked item.system.properties.magical}}> {{localize "BOL.itemProperty.magical"}}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
@ -32,31 +32,31 @@
|
||||
<label class="property-label">{{localize "BOL.ui.properties"}}</label>
|
||||
<div class="form-fields">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.equipable" {{checked data.properties.equipable}}> {{localize "BOL.itemProperty.equipable"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.equipable" {{checked item.system.properties.equipable}}> {{localize "BOL.itemProperty.equipable"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.stackable" {{checked data.properties.stackable}}> {{localize "BOL.itemProperty.stackable"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.stackable" {{checked item.system.properties.stackable}}> {{localize "BOL.itemProperty.stackable"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.consumable" {{checked data.properties.consumable}}> {{localize "BOL.itemProperty.consumable"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.consumable" {{checked item.system.properties.consumable}}> {{localize "BOL.itemProperty.consumable"}}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
{{#if data.properties.equipable}}
|
||||
{{#if item.system.properties.equipable}}
|
||||
<div class="form-group">
|
||||
<label>{{localize "BOL.itemProperty.worn"}}</label>
|
||||
<div class="form-fields">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.worn" {{checked data.worn}}> {{localize "BOL.itemProperty.worn"}}
|
||||
<input class="field-value" type="checkbox" name="system.worn" {{checked item.system.worn}}> {{localize "BOL.itemProperty.worn"}}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>{{localize "BOL.itemProperty.slot"}}</label>
|
||||
<div class="form-fields center">
|
||||
<select class="field-value" name="data.properties.slot" data-dtype="String">
|
||||
{{#select data.properties.slot}}
|
||||
<select class="field-value" name="system.properties.slot" data-dtype="String">
|
||||
{{#select item.system.properties.slot}}
|
||||
{{#each config.equipmentSlots as |value id|}}
|
||||
<option value="{{id}}">{{localize value}}</option>
|
||||
{{/each}}
|
||||
@ -66,41 +66,34 @@
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if data.properties.stackable}}
|
||||
{{#if item.system.properties.stackable}}
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.ui.quantity"}}</label>
|
||||
<div class="form-fields">
|
||||
<input class="field-value" type="text" name="data.quantity" value="{{data.quantity}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.quantity" value="{{item.system.quantity}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.ui.stacksize"}}</label>
|
||||
<div class="form-fields">
|
||||
<input class="field-value" type="text" name="data.properties.stacksize" value="{{data.properties.stacksize}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.properties.stacksize" value="{{item.system.properties.stacksize}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<!--<div class="form-group">-->
|
||||
<!-- <label class="property-label">{{!localize "BOL.ui.weight"}}</label>-->
|
||||
<!-- <div class="form-fields">-->
|
||||
<!-- <input class="field-value" type="text" name="data.weight" value="{{!data.weight}}" data-dtype="Number"/>-->
|
||||
<!-- </div>-->
|
||||
<!--</div>-->
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.ui.price"}}</label>
|
||||
<div class="form-fields">
|
||||
<input class="field-value" type="text" name="data.price" value="{{data.price}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.price" value="{{item.system.price}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{{#if data.properties.weapon}}
|
||||
{{#if item.system.properties.weapon}}
|
||||
{{> "systems/bol/templates/item/parts/properties/item/weapon-properties.hbs"}}
|
||||
{{/if}}
|
||||
{{#if data.properties.protection}}
|
||||
{{#if item.system.properties.protection}}
|
||||
{{> "systems/bol/templates/item/parts/properties/item/protection-properties.hbs"}}
|
||||
{{/if}}
|
||||
{{#if data.properties.magical}}
|
||||
{{#if item.system.properties.magical}}
|
||||
{{> "systems/bol/templates/item/parts/properties/item/magical-properties.hbs"}}
|
||||
{{/if}}
|
||||
|
@ -3,31 +3,24 @@
|
||||
<label>{{localize "BOL.ui.subtype"}}</label>
|
||||
<div class="form-fields">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.armor" {{checked data.properties.armor}}> {{localize "BOL.itemProperty.armor"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.armor" {{checked item.system.properties.armor}}> {{localize "BOL.itemProperty.armor"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.shield" {{checked data.properties.shield}}> {{localize "BOL.itemProperty.shield"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.shield" {{checked item.system.properties.shield}}> {{localize "BOL.itemProperty.shield"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.helm" {{checked data.properties.helm}}> {{localize "BOL.itemProperty.helm"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.helm" {{checked item.system.properties.helm}}> {{localize "BOL.itemProperty.helm"}}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
<!--<div class="form-group">-->
|
||||
<!-- <label>{{!localize "BOL.ui.properties"}}</label>-->
|
||||
<!-- <div class="form-fields">-->
|
||||
<!-- <label class="checkbox">-->
|
||||
<!-- <input class="field-value" type="checkbox" name="data.properties.throwable" {{!checked data.properties.throwable}}> {{!localize "BOL.itemProperty.throwable"}}-->
|
||||
<!-- </label>-->
|
||||
<!-- </div>-->
|
||||
<!--</div>-->
|
||||
{{#if data.properties.armor}}
|
||||
|
||||
{{#if item.system.properties.armor}}
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.armorQuality"}}</label>
|
||||
<div class="form-fields center">
|
||||
<select class="field-value armorQuality" name="data.properties.armorQuality" data-dtype="String">
|
||||
{{#select data.properties.armorQuality}}
|
||||
<select class="field-value armorQuality" name="system.properties.armorQuality" data-dtype="String">
|
||||
{{#select item.system.properties.armorQuality}}
|
||||
{{#each config.armorQualities as |value id|}}
|
||||
<option value="{{id}}">{{localize value}}</option>
|
||||
{{/each}}
|
||||
@ -38,41 +31,41 @@
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.soakFormula"}}</label>
|
||||
<div class="form-fields">
|
||||
<input class="field-value soakFormula" type="text" name="data.properties.soak.formula" value="{{data.properties.soak.formula}}" data-dtype="String"/>
|
||||
<input class="field-value soakFormula" type="text" name="system.properties.soak.formula" value="{{item.system.properties.soak.formula}}" data-dtype="String"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.soakValue"}}</label>
|
||||
<div class="form-fields">
|
||||
<input class="field-value" type="text" name="data.properties.soak.value" value="{{data.properties.soak.value}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.properties.soak.value" value="{{item.system.properties.soak.value}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if data.properties.helm}}
|
||||
{{#if item.system.properties.helm}}
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.soakModifiers"}}</label>
|
||||
<div class="form-fields">
|
||||
<input class="field-value" type="text" name="data.properties.soak.modifier" value="{{data.properties.soak.modifier}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.properties.soak.modifier" value="{{item.system.properties.soak.modifier}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if data.properties.shield}}
|
||||
{{#if item.system.properties.shield}}
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.blockingMalus"}}</label>
|
||||
<div class="form-fields">
|
||||
<input class="field-value" type="text" name="data.properties.blocking.malus" value="{{data.properties.blocking.malus}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.properties.blocking.malus" value="{{item.system.properties.blocking.malus}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.blockingAttacksBlocked"}}</label>
|
||||
<div class="form-fields">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.blocking.blocking1" {{checked data.properties.blocking.blocking1}}> {{localize "BOL.itemProperty.blocking1Attack"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.blocking.blocking1" {{checked item.system.properties.blocking.blocking1}}> {{localize "BOL.itemProperty.blocking1Attack"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.blocking.blockingAll" {{checked data.properties.blocking.blockingAll}}> {{localize "BOL.itemProperty.blockingAllAttacks"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.blocking.blockingAll" {{checked item.system.properties.blocking.blockingAll}}> {{localize "BOL.itemProperty.blockingAllAttacks"}}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
@ -83,26 +76,26 @@
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemModifiers.init"}}</label>
|
||||
<div class="form-fields">
|
||||
<input class="field-value" type="text" name="data.properties.modifiers.init" value="{{data.properties.modifiers.c}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.properties.modifiers.init" value="{{item.system.properties.modifiers.c}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemModifiers.agility"}}</label>
|
||||
<div class="form-fields">
|
||||
<input class="field-value" type="text" name="data.properties.modifiers.agility" value="{{data.properties.modifiers.agility}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.properties.modifiers.agility" value="{{item.system.properties.modifiers.agility}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemModifiers.powercost"}}</label>
|
||||
<div class="form-fields">
|
||||
<input class="field-value" type="text" name="data.properties.modifiers.powercost" value="{{data.properties.modifiers.powercost}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.properties.modifiers.powercost" value="{{item.system.properties.modifiers.powercost}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemModifiers.social"}}</label>
|
||||
<div class="form-fields">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.modifiers.social" {{checked data.properties.modifiers.social}}>
|
||||
<input class="field-value" type="checkbox" name="system.properties.modifiers.social" {{checked item.system.properties.modifiers.social}}>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -2,8 +2,8 @@
|
||||
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.circle"}}</label>
|
||||
<select class="field-value" name="data.properties.circle" data-dtype="Number">
|
||||
{{#select data.properties.circle}}
|
||||
<select class="field-value" name="system.properties.circle" data-dtype="Number">
|
||||
{{#select item.system.properties.circle}}
|
||||
{{#each config.spellType as |value id|}}
|
||||
<option value="{{id}}">{{localize value}}</option>
|
||||
{{/each}}
|
||||
@ -13,34 +13,34 @@
|
||||
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.difficulty"}}</label>
|
||||
<select name="data.properties.difficulty" value="{{data.properties.difficulty}}">
|
||||
{{#select data.properties.difficulty}}
|
||||
<option value="2">Trés Facile (+2)</option>
|
||||
<option value="1">Facile (+1)</option>
|
||||
<option value="0">Moyenne (0)</option>
|
||||
<option value="-1">Ardue (-1)</option>
|
||||
<option value="-2">Difficile (-2)</option>
|
||||
<option value="-4">Très Difficile (-4)</option>
|
||||
<option value="-6">Impossible (-6)</option>
|
||||
<option value="-8">Héroïque (-8)</option>
|
||||
<select name="system.properties.difficulty" value="{{item.system.properties.difficulty}}">
|
||||
{{#select item.system.properties.difficulty}}
|
||||
<option value="2">{{localize "BOL.dialog.veryeasy"}}</option>
|
||||
<option value="1">{{localize "BOL.dialog.easy"}}</option>
|
||||
<option value="0">{{localize "BOL.dialog.moderate"}}</option>
|
||||
<option value="-1">{{localize "BOL.dialog.hard"}}</option>
|
||||
<option value="-2">{{localize "BOL.dialog.tough"}}</option>
|
||||
<option value="-4">{{localize "BOL.dialog.demanding"}}</option>
|
||||
<option value="-6">{{localize "BOL.dialog.formidable"}}</option>
|
||||
<option value="-8">{{localize "BOL.dialog.heroic"}}</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.ppcost"}}</label>
|
||||
<input class="field-value" type="text" name="data.properties.ppcost" value="{{data.properties.ppcost}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.properties.ppcost" value="{{item.system.properties.ppcost}}" data-dtype="Number"/>
|
||||
</div>
|
||||
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.duration"}}</label>
|
||||
<input class="field-value" type="text" name="data.properties.duration" value="{{data.properties.duration}}" data-dtype="String"/>
|
||||
<input class="field-value" type="text" name="system.properties.duration" value="{{item.system.properties.duration}}" data-dtype="String"/>
|
||||
</div>
|
||||
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.mandatoryconditions"}}</label>
|
||||
<select class="field-value" name="data.properties.nbmandatoryconditions" data-dtype="Number">
|
||||
{{#select data.properties.nbmandatoryconditions}}
|
||||
<select class="field-value" name="system.properties.nbmandatoryconditions" data-dtype="Number">
|
||||
{{#select item.system.properties.nbmandatoryconditions}}
|
||||
<option value="1">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
@ -49,19 +49,19 @@
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{#each data.properties.mandatoryconditions as |cond idx|}}
|
||||
{{#if (lt idx @root.data.properties.nbmandatoryconditions)}}
|
||||
{{#each item.system.properties.mandatoryconditions as |cond idx|}}
|
||||
{{#if (lt idx @root.item.system.properties.nbmandatoryconditions)}}
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.mandatoryconditions"}} {{add idx 1}}</label>
|
||||
<input class="field-value" type="text" name="data.properties.mandatoryconditions.{{idx}}" value="{{cond}}" data-dtype="String"/>
|
||||
<input class="field-value" type="text" name="system.properties.mandatoryconditions.{{idx}}" value="{{cond}}" data-dtype="String"/>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.optionnalconditions"}}</label>
|
||||
<select class="field-value" name="data.properties.nboptionnalconditions" data-dtype="Number">
|
||||
{{#select data.properties.nboptionnalconditions}}
|
||||
<select class="field-value" name="system.properties.nboptionnalconditions" data-dtype="Number">
|
||||
{{#select item.system.properties.nboptionnalconditions}}
|
||||
<option value="1">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
@ -74,11 +74,11 @@
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{#each data.properties.optionnalconditions as |cond idx|}}
|
||||
{{#if (lt idx @root.data.properties.nboptionnalconditions)}}
|
||||
{{#each item.system.optionnalconditions as |cond idx|}}
|
||||
{{#if (lt idx @root.item.system.properties.nboptionnalconditions)}}
|
||||
<div class="property flexrow">
|
||||
<label class="property-label">{{localize "BOL.ui.optionnalconditions"}} {{add idx 1}}</label>
|
||||
<input class="field-value" type="text" name="data.properties.optionnalconditions.{{idx}}" value="{{cond}}" data-dtype="String"/>
|
||||
<input class="field-value" type="text" name="system.properties.optionnalconditions.{{idx}}" value="{{cond}}" data-dtype="String"/>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
@ -86,12 +86,12 @@
|
||||
<div class="property flexrow">
|
||||
<div class="form-fields center">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.spellkeep" {{checked data.properties.spellkeep}}> {{localize "BOL.ui.spellkeep"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.spellkeep" {{checked item.system.properties.spellkeep}}> {{localize "BOL.ui.spellkeep"}}
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-fields center">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.concentrate" {{checked data.properties.concentrate}}> {{localize "BOL.ui.concentrate"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.concentrate" {{checked item.system.properties.concentrate}}> {{localize "BOL.ui.concentrate"}}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -3,8 +3,8 @@
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.ui.subtype"}}</label>
|
||||
<div class="form-fields">
|
||||
<select name="data.subtype" data-dtype="String">
|
||||
{{#select data.subtype}}
|
||||
<select name="system.subtype" data-dtype="String">
|
||||
{{#select item.system.subtype}}
|
||||
{{#each config.vehicleSubtypes as |item id|}}
|
||||
<option value="{{id}}">{{localize item}}</option>
|
||||
{{/each}}
|
||||
@ -16,13 +16,13 @@
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.ui.speed"}}</label>
|
||||
<div class="form-fields">
|
||||
<input class="field-value" type="text" name="data.properties.speed" value="{{data.properties.speed}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.properties.speed" value="{{item.system.properties.speed}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.ui.price"}}</label>
|
||||
<div class="form-fields">
|
||||
<input class="field-value" type="text" name="data.price" value="{{data.price}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.price" value="{{item.system.price}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -3,16 +3,16 @@
|
||||
<label>{{localize "BOL.ui.reach"}}</label>
|
||||
<div class="form-fields">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.melee" {{checked data.properties.melee}}> {{localize "BOL.itemProperty.melee"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.melee" {{checked item.system.properties.melee}}> {{localize "BOL.itemProperty.melee"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.ranged" {{checked data.properties.ranged}}> {{localize "BOL.itemProperty.ranged"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.ranged" {{checked item.system.properties.ranged}}> {{localize "BOL.itemProperty.ranged"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.throwing" {{checked data.properties.throwing}}> {{localize "BOL.itemProperty.throwing"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.throwing" {{checked item.system.properties.throwing}}> {{localize "BOL.itemProperty.throwing"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.natural" {{checked data.properties.natural}}> {{localize "BOL.itemProperty.natural"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.natural" {{checked item.system.properties.natural}}> {{localize "BOL.itemProperty.natural"}}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
@ -21,44 +21,44 @@
|
||||
<label>{{localize "BOL.ui.properties"}}</label>
|
||||
<div class="form-fields">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.2H" {{checked data.properties.2H}}> {{localize "BOL.itemProperty.2H"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.2H" {{checked item.system.properties.2H}}> {{localize "BOL.itemProperty.2H"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.concealable" {{checked data.properties.concealable}}> {{localize "BOL.itemProperty.concealable"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.concealable" {{checked item.system.properties.concealable}}> {{localize "BOL.itemProperty.concealable"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.ignoreshield" {{checked data.properties.ignoreshield}}> {{localize "BOL.itemProperty.ignoreshield"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.ignoreshield" {{checked item.system.properties.ignoreshield}}> {{localize "BOL.itemProperty.ignoreshield"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.attackBonusDice" {{checked data.properties.attackBonusDice}}> {{localize "BOL.itemProperty.attackBonusDice"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.attackBonusDice" {{checked item.system.properties.attackBonusDice}}> {{localize "BOL.itemProperty.attackBonusDice"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.onlymodifier" {{checked data.properties.onlymodifier}}> {{localize "BOL.itemProperty.onlymodifier"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.onlymodifier" {{checked item.system.properties.onlymodifier}}> {{localize "BOL.itemProperty.onlymodifier"}}
|
||||
</label>
|
||||
|
||||
|
||||
{{#if data.properties.ranged}}
|
||||
{{#if item.system.properties.ranged}}
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.reloadable" {{checked data.properties.reloadable}}> {{localize "BOL.itemProperty.reloadable"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.reloadable" {{checked item.system.properties.reloadable}}> {{localize "BOL.itemProperty.reloadable"}}
|
||||
</label>
|
||||
{{/if}}
|
||||
{{#if data.properties.melee}}
|
||||
{{#if item.system.properties.melee}}
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.bashing" {{checked data.properties.bashing}}> {{localize "BOL.itemProperty.bashing"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.bashing" {{checked item.system.properties.bashing}}> {{localize "BOL.itemProperty.bashing"}}
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.throwable" {{checked data.properties.throwable}}> {{localize "BOL.itemProperty.throwable"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.throwable" {{checked item.system.properties.throwable}}> {{localize "BOL.itemProperty.throwable"}}
|
||||
</label>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
{{#if (not data.properties.onlymodifier)}}
|
||||
{{#if (not item.system.properties.onlymodifier)}}
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.attackAttribute"}}</label>
|
||||
<div class="form-fields center">
|
||||
<select class="field-value" name="data.properties.attackAttribute" data-dtype="String">
|
||||
{{#select data.properties.attackAttribute}}
|
||||
<select class="field-value" name="system.properties.attackAttribute" data-dtype="String">
|
||||
{{#select item.system.properties.attackAttribute}}
|
||||
{{#each config.attackAttributes as |value id|}}
|
||||
<option value="{{id}}">{{localize value}}</option>
|
||||
{{/each}}
|
||||
@ -69,8 +69,8 @@
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.attackAptitude"}}</label>
|
||||
<div class="form-fields center">
|
||||
<select class="field-value" name="data.properties.attackAptitude" data-dtype="String">
|
||||
{{#select data.properties.attackAptitude}}
|
||||
<select class="field-value" name="system.properties.attackAptitude" data-dtype="String">
|
||||
{{#select item.system.properties.attackAptitude}}
|
||||
{{#each config.attackAptitudes as |value id|}}
|
||||
<option value="{{id}}">{{localize value}}</option>
|
||||
{{/each}}
|
||||
@ -82,15 +82,15 @@
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.attackModifiers"}}</label>
|
||||
<div class="form-fields center">
|
||||
<input class="field-value" type="text" name="data.properties.attackModifiers" value="{{data.properties.attackModifiers}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.properties.attackModifiers" value="{{item.system.properties.attackModifiers}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.weaponSize"}}</label>
|
||||
<div class="form-fields">
|
||||
<select class="field-value" name="data.properties.weaponSize" data-dtype="String">
|
||||
{{#select data.properties.weaponSize}}
|
||||
<select class="field-value" name="system.properties.weaponSize" data-dtype="String">
|
||||
{{#select item.system.properties.weaponSize}}
|
||||
{{#each config.weaponSizes as |value id|}}
|
||||
<option value="{{id}}">{{localize value}}</option>
|
||||
{{/each}}
|
||||
@ -101,8 +101,8 @@
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.damage"}}</label>
|
||||
<div class="form-fields">
|
||||
<select class="field-value" name="data.properties.damage" data-dtype="String">
|
||||
{{#select data.properties.damage}}
|
||||
<select class="field-value" name="system.properties.damage" data-dtype="String">
|
||||
{{#select item.system.properties.damage}}
|
||||
{{#each config.damageValues as |value id|}}
|
||||
<option value="{{id}}">{{value}}</option>
|
||||
{{/each}}
|
||||
@ -113,8 +113,8 @@
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.damageAttribute"}}</label>
|
||||
<div class="form-fields center">
|
||||
<select class="field-value" name="data.properties.damageAttribute" data-dtype="String">
|
||||
{{#select data.properties.damageAttribute}}
|
||||
<select class="field-value" name="system.properties.damageAttribute" data-dtype="String">
|
||||
{{#select item.system.properties.damageAttribute}}
|
||||
{{#each config.damageAttributes as |value id|}}
|
||||
<option value="{{id}}">{{localize value}}</option>
|
||||
{{/each}}
|
||||
@ -125,14 +125,14 @@
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.damageModifiers"}}</label>
|
||||
<div class="form-fields center">
|
||||
<input class="field-value" type="text" name="data.properties.damageModifiers" value="{{data.properties.damageModifiers}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.properties.damageModifiers" value="{{item.system.properties.damageModifiers}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.damageMultiplier"}}</label>
|
||||
<div class="form-fields center">
|
||||
<select class="field-value" name="data.properties.damageMultiplier" data-dtype="String">
|
||||
{{#select data.properties.damageMultiplier}}
|
||||
<select class="field-value" name="system.properties.damageMultiplier" data-dtype="String">
|
||||
{{#select item.system.properties.damageMultiplier}}
|
||||
{{#each config.damageMultiplier as |value id|}}
|
||||
<option value="{{id}}">{{value}}</option>
|
||||
{{/each}}
|
||||
@ -144,17 +144,17 @@
|
||||
<label class="property-label">{{localize "BOL.itemProperty.damageSpecial"}}</label>
|
||||
<div class="form-fields center">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="data.properties.damageReroll1" {{checked data.properties.damageReroll1}}> {{localize "BOL.itemProperty.damageReroll1"}}
|
||||
<input class="field-value" type="checkbox" name="system.properties.damageReroll1" {{checked item.system.properties.damageReroll1}}> {{localize "BOL.itemProperty.damageReroll1"}}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if (or data.properties.throwing (or data.properties.ranged data.properties.throwable))}}
|
||||
{{#if (or item.system.properties.throwing (or item.system.properties.ranged item.system.properties.throwable))}}
|
||||
<hr/>
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.range"}}</label>
|
||||
<div class="form-fields center">
|
||||
<input class="field-value" type="text" name="data.properties.range" value="{{data.properties.range}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.properties.range" value="{{item.system.properties.range}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
@ -162,7 +162,7 @@
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.reload"}}</label>
|
||||
<div class="form-fields center">
|
||||
<input class="field-value" type="text" name="data.properties.reload" value="{{data.properties.reload}}" data-dtype="Number"/>
|
||||
<input class="field-value" type="text" name="system.properties.reload" value="{{item.system.properties.reload}}" data-dtype="Number"/>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
@ -0,0 +1,93 @@
|
||||
<h3 class="form-header">{{localize "BOL.ui.weaponProperties"}}</h3>
|
||||
|
||||
<hr/>
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.vehicleDamageType"}}</label>
|
||||
<div class="form-fields">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="system.properties.isfiredamage" {{checked item.system.properties.isfiredamage}}> {{localize "BOL.itemProperty.isfiredamage"}}
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-fields">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="system.properties.ishulldamage" {{checked item.system.properties.ishulldamage}}> {{localize "BOL.itemProperty.ishulldamage"}}
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-fields">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="system.properties.iscrewdamage" {{checked item.system.properties.iscrewdamage}}> {{localize "BOL.itemProperty.iscrewdamage"}}
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-fields">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="system.properties.isboarding" {{checked item.system.properties.isboarding}}> {{localize "BOL.itemProperty.isboarding"}}
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-fields">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="system.properties.isspur" {{checked item.system.properties.isspur}}> {{localize "BOL.itemProperty.isspur"}}
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-fields">
|
||||
<label class="checkbox">
|
||||
<input class="field-value" type="checkbox" name="system.properties.isbreakrow" {{checked item.system.properties.isbreakrow}}> {{localize "BOL.itemProperty.isbreakrow"}}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if item.system.properties.ishulldamage}}
|
||||
<hr/>
|
||||
<h3 class="form-header">{{localize "BOL.itemProperty.hulldamage"}}</h3>
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.hulldamage"}}</label>
|
||||
<div class="form-fields">
|
||||
<select class="field-value" name="system.properties.hulldamage" data-dtype="String">
|
||||
{{#select item.system.properties.hulldamage}}
|
||||
{{#each config.damageValues as |value id|}}
|
||||
<option value="{{id}}">{{value}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.hullDamageMultiplier"}}</label>
|
||||
<div class="form-fields center">
|
||||
<select class="field-value" name="system.properties.hullDamageMultiplier" data-dtype="String">
|
||||
{{#select item.system.properties.hullDamageMultiplier}}
|
||||
{{#each config.damageMultiplier as |value id|}}
|
||||
<option value="{{id}}">{{value}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if item.system.properties.iscrewdamage}}
|
||||
<hr/>
|
||||
<h3 class="form-header">{{localize "BOL.itemProperty.crewdamage"}}</h3>
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.crewdamage"}}</label>
|
||||
<div class="form-fields">
|
||||
<select class="field-value" name="system.properties.crewdamage" data-dtype="String">
|
||||
{{#select item.system.properties.crewdamage}}
|
||||
{{#each config.damageValues as |value id|}}
|
||||
<option value="{{id}}">{{value}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="property-label">{{localize "BOL.itemProperty.crewDamageMultiplier"}}</label>
|
||||
<div class="form-fields center">
|
||||
<select class="field-value" name="system.properties.crewDamageMultiplier" data-dtype="String">
|
||||
{{#select item.system.properties.crewDamageMultiplier}}
|
||||
{{#each config.damageMultiplier as |value id|}}
|
||||
<option value="{{id}}">{{value}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
BIN
ui/page_accueil.webp
Normal file
BIN
ui/page_accueil.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 494 KiB |
Reference in New Issue
Block a user