mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-11 19:25:21 +01:00
Merge branch 'main' into release
This commit is contained in:
commit
9cb5112b62
23 changed files with 73 additions and 80 deletions
13
lang/en.json
13
lang/en.json
|
|
@ -386,7 +386,8 @@
|
|||
"hideNewCountdowns": "Hide New Countdowns"
|
||||
},
|
||||
"DaggerheartMenu": {
|
||||
"title": "GM Tools"
|
||||
"title": "GM Tools",
|
||||
"refreshFeatures": "Refresh Features"
|
||||
},
|
||||
"DeleteConfirmation": {
|
||||
"title": "Delete {type} - {name}",
|
||||
|
|
@ -504,6 +505,7 @@
|
|||
},
|
||||
"navigateLevel": "To Level {level}",
|
||||
"navigateToLevelup": "Return To Levelup",
|
||||
"finishLevelup": "Finish Levelup",
|
||||
"navigateToSummary": "To Summary",
|
||||
"options": {
|
||||
"trait": "Gain a +1 bonus to two unmarked character traits and mark them.",
|
||||
|
|
@ -2105,6 +2107,7 @@
|
|||
},
|
||||
"hope": "Hope",
|
||||
"hordeHp": "Horde HP",
|
||||
"icon": "Icon",
|
||||
"identify": "Identity",
|
||||
"imagePath": "Image Path",
|
||||
"inactiveEffects": "Inactive Effects",
|
||||
|
|
@ -2141,6 +2144,7 @@
|
|||
"recovery": "Recovery",
|
||||
"refresh": "Refresh",
|
||||
"reroll": "Reroll",
|
||||
"rerolled": "Rerolled",
|
||||
"rerollThing": "Reroll {thing}",
|
||||
"resource": "Resource",
|
||||
"roll": "Roll",
|
||||
|
|
@ -2240,7 +2244,9 @@
|
|||
"evolvedDrag": "Drag a form here to evolve it.",
|
||||
"hybridize": "Hybridize",
|
||||
"hybridizeFeatureTitle": "Hybrid Features",
|
||||
"hybridizeDrag": "Drag a form here to hybridize it."
|
||||
"hybridizeDrag": "Drag a form here to hybridize it.",
|
||||
"mainTrait": "Main Trait",
|
||||
"traitBonus": "Trait Bonus"
|
||||
},
|
||||
"Class": {
|
||||
"hopeFeatures": "Hope Features",
|
||||
|
|
@ -2583,7 +2589,8 @@
|
|||
"selectMember": "Select a Member",
|
||||
"rerollTitle": "Reroll Group Roll",
|
||||
"rerollContent": "Are you sure you want to reroll your {trait} check?",
|
||||
"rerollTooltip": "Reroll"
|
||||
"rerollTooltip": "Reroll",
|
||||
"wholePartySelected": "The whole party is selected"
|
||||
},
|
||||
"healingRoll": {
|
||||
"title": "Heal - {damage}",
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ export default class DhpDowntime extends HandlebarsApplicationMixin(ApplicationV
|
|||
if (
|
||||
x.system.resource &&
|
||||
x.system.resource.type &&
|
||||
refreshIsAllowed([this.shortrest ? 'shortRest' : 'longRest'], action.uses.recovery)
|
||||
refreshIsAllowed([this.shortrest ? 'shortRest' : 'longRest'], x.system.resource.recovery)
|
||||
) {
|
||||
acc.push({
|
||||
title: game.i18n.localize(`TYPES.Item.${x.type}`),
|
||||
|
|
|
|||
|
|
@ -139,10 +139,6 @@ export default class CharacterSheet extends DHBaseActorSheet {
|
|||
element.addEventListener('change', this.updateItemResource.bind(this));
|
||||
element.addEventListener('click', e => e.stopPropagation());
|
||||
});
|
||||
htmlElement.querySelectorAll('.inventory-item-quantity').forEach(element => {
|
||||
element.addEventListener('change', this.updateItemQuantity.bind(this));
|
||||
element.addEventListener('click', e => e.stopPropagation());
|
||||
});
|
||||
|
||||
// Add listener for armor marks input
|
||||
htmlElement.querySelectorAll('.armor-marks-input').forEach(element => {
|
||||
|
|
@ -593,14 +589,6 @@ export default class CharacterSheet extends DHBaseActorSheet {
|
|||
this.render();
|
||||
}
|
||||
|
||||
async updateItemQuantity(event) {
|
||||
const item = await getDocFromElement(event.currentTarget);
|
||||
if (!item) return;
|
||||
|
||||
await item.update({ 'system.quantity': event.currentTarget.value });
|
||||
this.render();
|
||||
}
|
||||
|
||||
async updateArmorMarks(event) {
|
||||
const armor = this.document.system.armor;
|
||||
if (!armor) return;
|
||||
|
|
|
|||
|
|
@ -325,7 +325,8 @@ export default function DHApplicationMixin(Base) {
|
|||
if (data.type === 'ActiveEffect' && data.fromInternal !== this.document.uuid) {
|
||||
this.document.createEmbeddedDocuments('ActiveEffect', [data.data]);
|
||||
} else {
|
||||
return super._onDrop(event);
|
||||
// Fallback to super, but note that item sheets do not have this function
|
||||
return super._onDrop?.(event);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -89,6 +89,7 @@ export default class DHBaseActorSheet extends DHApplicationMixin(ActorSheetV2) {
|
|||
value: context.source.system.gold[key]
|
||||
};
|
||||
}
|
||||
context.inventory.hasCurrency = Object.values(context.inventory.currencies).some((c) => c.enabled);
|
||||
}
|
||||
|
||||
return context;
|
||||
|
|
@ -134,6 +135,10 @@ export default class DHBaseActorSheet extends DHApplicationMixin(ActorSheetV2) {
|
|||
_attachPartListeners(partId, htmlElement, options) {
|
||||
super._attachPartListeners(partId, htmlElement, options);
|
||||
|
||||
htmlElement.querySelectorAll('.inventory-item-quantity').forEach(element => {
|
||||
element.addEventListener('change', this.updateItemQuantity.bind(this));
|
||||
element.addEventListener('click', e => e.stopPropagation());
|
||||
});
|
||||
htmlElement.querySelectorAll('.item-button .action-uses-button').forEach(element => {
|
||||
element.addEventListener('contextmenu', DHBaseActorSheet.#modifyActionUses);
|
||||
});
|
||||
|
|
@ -172,6 +177,15 @@ export default class DHBaseActorSheet extends DHApplicationMixin(ActorSheetV2) {
|
|||
return this._getContextMenuCommonOptions.call(this, { usable: true, toChat: true });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* Application Listener Actions */
|
||||
/* -------------------------------------------- */
|
||||
|
||||
async updateItemQuantity(event) {
|
||||
const item = await getDocFromElement(event.currentTarget);
|
||||
await item?.update({ 'system.quantity': event.currentTarget.value });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* Application Clicks Actions */
|
||||
/* -------------------------------------------- */
|
||||
|
|
|
|||
|
|
@ -471,5 +471,5 @@ export function refreshIsAllowed(allowedTypes, typeToCheck) {
|
|||
|
||||
export async function getCritDamageBonus(formula) {
|
||||
const critRoll = new Roll(formula);
|
||||
return critRoll.dice.reduce((acc, dice) => acc + dice.faces, 0);
|
||||
return critRoll.dice.reduce((acc, dice) => acc + dice.faces * dice.number, 0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "domainCard",
|
||||
"folder": "rUGDM9JvGfhh9a2Y",
|
||||
"system": {
|
||||
"description": "<p class=\"Card-Feature\"><em><strong>Arcane Deflection:</strong></em> Once per long rest, <strong>spend a Hope</strong> to negate the damage of an attack targeting you or an ally within Very Close range.</p><p class=\"Card-Feature\"><em><strong>Time Lock:</strong></em> Target an object within Far range. That object stops in time and space exactly where it is until your next rest. If a creature tries to move it, make a <strong>Spellcast Roll</strong> against them to maintain this spell.</p><p class=\"Card-Feature\"><em><strong>Wall of Flame:</strong></em> Make a <strong>Spellcast Roll (15)</strong>. On a success, create a wall of magical flame between two points within Far range. All creatures in its path must choose a side to be on, and anything that subsequently passes through the wall takes <strong>4d10+3</strong> magic damage.</p>",
|
||||
"description": "<p class=\"Card-Feature\"><em><strong>Arcane Deflection:</strong></em> Once per long rest, <strong>spend a Hope</strong> to negate the damage of an attack targeting you or an ally within Very Close range.</p><p class=\"Card-Feature\"><em><strong>Time Lock:</strong></em> Target an object within Far range. That object stops in time and space exactly where it is until your next rest. If a creature tries to move it, make a <strong>Spellcast Roll</strong> against them to maintain this spell.</p><p><em><strong>Wall of Flame:</strong></em> Make a <strong>Spellcast Roll (15)</strong>. On a success, create a temporary wall of magical flame between two points within Far range. All creatures in its path must choose a side to be on, and anything that subsequently passes through the wall takes <strong>4d10+3</strong> magic damage.</p>",
|
||||
"domain": "codex",
|
||||
"recallCost": 2,
|
||||
"level": 4,
|
||||
|
|
@ -66,7 +66,7 @@
|
|||
"type": "attack",
|
||||
"_id": "K26kfjmTEH9zPMMO",
|
||||
"systemPath": "actions",
|
||||
"description": "<p class=\"Card-Feature\">Make a <strong>Spellcast Roll (15)</strong>. On a success, create a wall of magical flame between two points within Far range. All creatures in its path must choose a side to be on, and anything that subsequently passes through the wall takes <strong>4d10+3</strong> magic damage.</p><p>@Template[type:ray|range:f]</p>",
|
||||
"description": "<p class=\"Card-Feature\">Make a <strong>Spellcast Roll (15)</strong>. On a success, create a temporary wall of magical flame between two points within Far range. All creatures in its path must choose a side to be on, and anything that subsequently passes through the wall takes <strong>4d10+3</strong> magic damage.</p><p>@Template[type:ray|range:f]</p>",
|
||||
"chatDisplay": true,
|
||||
"actionType": "action",
|
||||
"cost": [],
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"type": "domainCard",
|
||||
"folder": "eg2vM8j9xhya9Rwa",
|
||||
"system": {
|
||||
"description": "<p class=\"Body-Foundation\"><strong>Spend a Hope</strong> and make an attack against all adversaries within your weapon’s range. Once per long rest, on a success against any targets, add up the damage dealt, then redistribute that damage however you wish between the targets you succeeded against. When you deal damage to a target, roll an additional damage die and add its result to the damage you deal to that target.</p>",
|
||||
"description": "<p><strong>Spend a Hope</strong> and make an attack against all adversaries within your weapon’s range. Once per long rest, on a success against any targets, roll your weapon’s damage and distribute that damage however you wish between the targets you succeeded against. Before you deal damage to each target, roll an additional damage die and add its result to the damage you deal to them.</p>",
|
||||
"domain": "bone",
|
||||
"recallCost": 3,
|
||||
"level": 9,
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
"type": "attack",
|
||||
"_id": "yjEcSlzsWGX79gpB",
|
||||
"systemPath": "actions",
|
||||
"description": "<p class=\"Body-Foundation\"><strong>Spend a Hope</strong> and make an attack against all adversaries within your weapon’s range. Once per long rest, on a success against any targets, add up the damage dealt, then redistribute that damage however you wish between the targets you succeeded against. When you deal damage to a target, roll an additional damage die and add its result to the damage you deal to that target.</p>",
|
||||
"description": "",
|
||||
"chatDisplay": true,
|
||||
"actionType": "action",
|
||||
"cost": [
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
"attached": [],
|
||||
"tier": 2,
|
||||
"equipped": false,
|
||||
"secondary": false,
|
||||
"secondary": true,
|
||||
"burden": "oneHanded",
|
||||
"weaponFeatures": [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"id": "daggerheart",
|
||||
"title": "Daggerheart",
|
||||
"description": "An unofficial implementation of the Daggerheart system",
|
||||
"version": "1.3.0",
|
||||
"version": "1.3.1",
|
||||
"compatibility": {
|
||||
"minimum": "13.346",
|
||||
"verified": "13.351",
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
<div class="suggested-trait-container">{{this}}</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
<button class="action-button" data-action="useSuggestedTraits">{{localize "Use"}}</button>
|
||||
<button class="action-button" data-action="useSuggestedTraits">{{localize "DAGGERHEART.GENERAL.use"}}</button>
|
||||
</fieldset>
|
||||
<div class="traits-inner-container">
|
||||
{{#each traits.values}}
|
||||
|
|
|
|||
|
|
@ -93,13 +93,13 @@
|
|||
|
||||
<footer class="padded">
|
||||
<button type="button" data-action="takeDamage">
|
||||
{{localize "Take"}}
|
||||
{{localize "DAGGERHEART.GENERAL.take"}}
|
||||
<div class="damage-value {{#if this.reducedDamage}}reduced-value{{/if}}">{{this.damage}}</div>
|
||||
{{#if this.reducedDamage}}
|
||||
<i class="fa-solid fa-arrow-right-long"></i>
|
||||
<div class="damage-value">{{this.reducedDamage}}</div>
|
||||
{{/if}}
|
||||
{{localize "Damage"}}
|
||||
{{localize "DAGGERHEART.GENERAL.damage"}}
|
||||
</button>
|
||||
</footer>
|
||||
</div>
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
{{#if (and @root.hasRoll @root.activeTagTeamRoll)}}
|
||||
<div class="tag-team-controller {{#if @root.tagTeamSelected}}selected{{/if}}" data-action="toggleTagTeamRoll">
|
||||
<span><i class="{{ifThen @root.tagTeamSelected "fa-solid" "fa-regular"}} fa-circle"></i></span>
|
||||
<span class="label">{{localize "Tag Team Roll"}}</span>
|
||||
<span class="label">{{localize "DAGGERHEART.APPLICATIONS.TagTeamSelect.title"}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
</header>
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
|
||||
<fieldset class="one-column">
|
||||
<legend>{{localize "DAGGERHEART.UI.Chat.groupRoll.partyTeam"}}</legend>
|
||||
<span class="tooltip-container" {{#if allSelected}}data-tooltip="{{localize "The whole party is selected"}}"{{/if}}>
|
||||
<span class="tooltip-container" {{#if allSelected}}data-tooltip="{{localize "DAGGERHEART.UI.Chat.groupRoll.wholePartySelected"}}"{{/if}}>
|
||||
<input type="text" class="team-push-input" {{disabled @root.allSelected}}/>
|
||||
</span>
|
||||
{{#if (gt this.members.length 0)}}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<footer>
|
||||
<button type="button" data-action="doReroll" {{disabled disabledReroll}}>{{localize "Reroll"}} <i class="fa-solid fa-dice"></i></button>
|
||||
<button type="button" data-action="doReroll" {{disabled disabledReroll}}>{{localize "DAGGERHEART.GENERAL.reroll"}} <i class="fa-solid fa-dice"></i></button>
|
||||
<button type="button" data-action="save" {{disabled saveDisabled}}>{{localize "DAGGERHEART.APPLICATIONS.RerollDialog.acceptCurrentRolls"}}</button>
|
||||
</footer>
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
<div class="levelup-navigation-actions {{#if (not this.showTabs)}}test{{/if}}">
|
||||
{{#if this.navigate.previous.fromSummary}}
|
||||
<button data-action="activatePart" data-part="advancements">{{localize "DAGGERHEART.APPLICATIONS.Levelup.navigateToLevelup"}}</button>
|
||||
<button data-action="save" {{#if (not this.levelup.allLevelsFinished)}}disabled{{/if}}>{{localize "Finish Levelup"}}</button>
|
||||
<button data-action="save" {{#if (not this.levelup.allLevelsFinished)}}disabled{{/if}}>{{localize "DAGGERHEART.APPLICATIONS.Levelup.finishLevelup"}}</button>
|
||||
{{else}}
|
||||
{{#if (not this.navigate.previous.disabled)}}
|
||||
<button data-action="updateCurrentLevel" >{{this.navigate.previous.label}}</button>
|
||||
|
|
|
|||
|
|
@ -5,14 +5,14 @@
|
|||
>
|
||||
{{#if hasIcon}}
|
||||
<fieldset class="one-column">
|
||||
<legend>{{localize "Icon"}}</legend>
|
||||
<legend>{{localize "DAGGERHEART.GENERAL.icon"}}</legend>
|
||||
|
||||
<input type="text" name="icon" value="{{move.icon}}" />
|
||||
</fieldset>
|
||||
{{/if}}
|
||||
|
||||
<fieldset class="one-column">
|
||||
<legend>{{localize "Description"}}</legend>
|
||||
<legend>{{localize "DAGGERHEART.GENERAL.description"}}</legend>
|
||||
|
||||
<prose-mirror name="description" value="{{move.description}}">
|
||||
{{{ move.enrichedDescription }}}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
</div>
|
||||
<div class="toggleable-row">
|
||||
{{formGroup settingFields.schema.fields.currency.fields.coins.fields.label value=settingFields._source.currency.coins.label localize=true}}
|
||||
<input type="checkbox" {{checked settingFields._source.currency.coins.enabled}} disabled />
|
||||
<input type="checkbox" name="currency.coins.enabled" {{checked settingFields._source.currency.coins.enabled}} />
|
||||
</div>
|
||||
<div class="toggleable-row">
|
||||
{{formGroup settingFields.schema.fields.currency.fields.handfuls.fields.label value=settingFields._source.currency.handfuls.label localize=true}}
|
||||
|
|
|
|||
|
|
@ -12,16 +12,18 @@
|
|||
</a>
|
||||
</div>
|
||||
|
||||
<div class="currency-section">
|
||||
{{#each this.inventory.currencies as | currency |}}
|
||||
{{#if currency.enabled}}
|
||||
<div class="input">
|
||||
<span>{{localize currency.label}}</span>
|
||||
{{formInput currency.field value=currency.value enriched=currency.value toggled=true}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{#if this.inventory.hasCurrency}}
|
||||
<div class="currency-section">
|
||||
{{#each this.inventory.currencies as | currency |}}
|
||||
{{#if currency.enabled}}
|
||||
<div class="input">
|
||||
<span>{{localize currency.label}}</span>
|
||||
{{formInput currency.field value=currency.value enriched=currency.value toggled=true}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="items-section">
|
||||
{{> 'daggerheart.inventory-items'
|
||||
|
|
|
|||
|
|
@ -15,37 +15,18 @@
|
|||
</a>
|
||||
</div>
|
||||
|
||||
<div class="currency-section">
|
||||
{{#each this.inventory.currencies as | currency |}}
|
||||
{{#if currency.enabled}}
|
||||
<div class="input">
|
||||
<span>{{localize currency.label}}</span>
|
||||
{{formInput currency.field value=currency.value enriched=currency.value toggled=true}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
{{!-- <div class="input">
|
||||
<span>{{localize this.inventory.currency.coins}}</span>
|
||||
{{formInput systemFields.gold.fields.coins value=source.system.gold.coins enriched=source.system.gold.coins
|
||||
localize=true toggled=true}}
|
||||
{{#if inventory.hasCurrency}}
|
||||
<div class="currency-section">
|
||||
{{#each this.inventory.currencies as | currency |}}
|
||||
{{#if currency.enabled}}
|
||||
<div class="input">
|
||||
<span>{{localize currency.label}}</span>
|
||||
{{formInput currency.field value=currency.value enriched=currency.value toggled=true}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</div>
|
||||
<div class="input">
|
||||
<span>{{localize this.inventory.currency.handfuls}}</span>
|
||||
{{formInput systemFields.gold.fields.handfuls value=source.system.gold.handfuls
|
||||
enriched=source.system.gold.handfuls localize=true toggled=true}}
|
||||
</div>
|
||||
<div class="input">
|
||||
<span>{{localize this.inventory.currency.bags}}</span>
|
||||
{{formInput systemFields.gold.fields.bags value=source.system.gold.bags enriched=source.system.gold.bags
|
||||
localize=true toggled=true}}
|
||||
</div>
|
||||
<div class="input">
|
||||
<span>{{localize this.inventory.currency.chests}}</span>
|
||||
{{formInput systemFields.gold.fields.chests value=source.system.gold.chests
|
||||
enriched=source.system.gold.chests localize=true toggled=true}}
|
||||
</div> --}}
|
||||
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="items-section">
|
||||
{{> 'daggerheart.inventory-items'
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<h2>{{localize "DAGGERHEART.APPLICATIONS.DaggerheartMenu.title"}}</h2>
|
||||
|
||||
<fieldset>
|
||||
<legend>{{localize "Refresh Features"}}</legend>
|
||||
<legend>{{localize "DAGGERHEART.APPLICATIONS.DaggerheartMenu.refreshFeatures"}}</legend>
|
||||
|
||||
<div class="menu-refresh-container">
|
||||
<div class="menu-refresh-inner-container">
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
class="dice reroll-button {{../dice}}"
|
||||
data-die-index="0" data-type="damage" data-damage-type="{{@../../../key}}" data-part="{{@../../key}}" data-dice="{{@../key}}" data-result="{{@key}}"
|
||||
>
|
||||
{{#if hasRerolls}}<i class="fa-solid fa-dice dice-rerolled" data-tooltip="{{localize "Rerolled"}}"></i>{{/if}}
|
||||
{{#if hasRerolls}}<i class="fa-solid fa-dice dice-rerolled" data-tooltip="{{localize "DAGGERHEART.GENERAL.rerolled"}}"></i>{{/if}}
|
||||
{{result}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -9,19 +9,19 @@
|
|||
<div class="tooltip-information-section spaced">
|
||||
{{#with item.system.beastformAttackData}}
|
||||
<div class="tooltip-information">
|
||||
<label>{{localize "Main Trait"}}</label>
|
||||
<label>{{localize "DAGGERHEART.ITEMS.Beastform.mainTrait"}}</label>
|
||||
<div>{{this.trait}}</div>
|
||||
</div>
|
||||
<div class="tooltip-information">
|
||||
<label>{{localize "Trait Bonus"}}</label>
|
||||
<label>{{localize "DAGGERHEART.ITEMS.Beastform.traitBonus"}}</label>
|
||||
<div>{{this.traitBonus}}</div>
|
||||
</div>
|
||||
<div class="tooltip-information">
|
||||
<label>{{localize "Evasion"}}</label>
|
||||
<label>{{localize "DAGGERHEART.GENERAL.evasion"}}</label>
|
||||
<div>{{this.evasionBonus}}</div>
|
||||
</div>
|
||||
<div class="tooltip-information">
|
||||
<label>{{localize "Damage"}}</label>
|
||||
<label>{{localize "DAGGERHEART.GENERAL.damage"}}</label>
|
||||
<div>{{concat this.damageDice ' ' this.damageBonus}} <i class="fa-solid fa-hand-fist"></i></div>
|
||||
</div>
|
||||
{{/with}}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue