Merge branch 'main' into release

This commit is contained in:
WBHarry 2025-12-08 02:35:06 +01:00
commit 9cb5112b62
23 changed files with 73 additions and 80 deletions

View file

@ -386,7 +386,8 @@
"hideNewCountdowns": "Hide New Countdowns" "hideNewCountdowns": "Hide New Countdowns"
}, },
"DaggerheartMenu": { "DaggerheartMenu": {
"title": "GM Tools" "title": "GM Tools",
"refreshFeatures": "Refresh Features"
}, },
"DeleteConfirmation": { "DeleteConfirmation": {
"title": "Delete {type} - {name}", "title": "Delete {type} - {name}",
@ -504,6 +505,7 @@
}, },
"navigateLevel": "To Level {level}", "navigateLevel": "To Level {level}",
"navigateToLevelup": "Return To Levelup", "navigateToLevelup": "Return To Levelup",
"finishLevelup": "Finish Levelup",
"navigateToSummary": "To Summary", "navigateToSummary": "To Summary",
"options": { "options": {
"trait": "Gain a +1 bonus to two unmarked character traits and mark them.", "trait": "Gain a +1 bonus to two unmarked character traits and mark them.",
@ -2105,6 +2107,7 @@
}, },
"hope": "Hope", "hope": "Hope",
"hordeHp": "Horde HP", "hordeHp": "Horde HP",
"icon": "Icon",
"identify": "Identity", "identify": "Identity",
"imagePath": "Image Path", "imagePath": "Image Path",
"inactiveEffects": "Inactive Effects", "inactiveEffects": "Inactive Effects",
@ -2141,6 +2144,7 @@
"recovery": "Recovery", "recovery": "Recovery",
"refresh": "Refresh", "refresh": "Refresh",
"reroll": "Reroll", "reroll": "Reroll",
"rerolled": "Rerolled",
"rerollThing": "Reroll {thing}", "rerollThing": "Reroll {thing}",
"resource": "Resource", "resource": "Resource",
"roll": "Roll", "roll": "Roll",
@ -2240,7 +2244,9 @@
"evolvedDrag": "Drag a form here to evolve it.", "evolvedDrag": "Drag a form here to evolve it.",
"hybridize": "Hybridize", "hybridize": "Hybridize",
"hybridizeFeatureTitle": "Hybrid Features", "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": { "Class": {
"hopeFeatures": "Hope Features", "hopeFeatures": "Hope Features",
@ -2583,7 +2589,8 @@
"selectMember": "Select a Member", "selectMember": "Select a Member",
"rerollTitle": "Reroll Group Roll", "rerollTitle": "Reroll Group Roll",
"rerollContent": "Are you sure you want to reroll your {trait} check?", "rerollContent": "Are you sure you want to reroll your {trait} check?",
"rerollTooltip": "Reroll" "rerollTooltip": "Reroll",
"wholePartySelected": "The whole party is selected"
}, },
"healingRoll": { "healingRoll": {
"title": "Heal - {damage}", "title": "Heal - {damage}",

View file

@ -118,7 +118,7 @@ export default class DhpDowntime extends HandlebarsApplicationMixin(ApplicationV
if ( if (
x.system.resource && x.system.resource &&
x.system.resource.type && x.system.resource.type &&
refreshIsAllowed([this.shortrest ? 'shortRest' : 'longRest'], action.uses.recovery) refreshIsAllowed([this.shortrest ? 'shortRest' : 'longRest'], x.system.resource.recovery)
) { ) {
acc.push({ acc.push({
title: game.i18n.localize(`TYPES.Item.${x.type}`), title: game.i18n.localize(`TYPES.Item.${x.type}`),

View file

@ -139,10 +139,6 @@ export default class CharacterSheet extends DHBaseActorSheet {
element.addEventListener('change', this.updateItemResource.bind(this)); element.addEventListener('change', this.updateItemResource.bind(this));
element.addEventListener('click', e => e.stopPropagation()); 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 // Add listener for armor marks input
htmlElement.querySelectorAll('.armor-marks-input').forEach(element => { htmlElement.querySelectorAll('.armor-marks-input').forEach(element => {
@ -593,14 +589,6 @@ export default class CharacterSheet extends DHBaseActorSheet {
this.render(); 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) { async updateArmorMarks(event) {
const armor = this.document.system.armor; const armor = this.document.system.armor;
if (!armor) return; if (!armor) return;

View file

@ -325,7 +325,8 @@ export default function DHApplicationMixin(Base) {
if (data.type === 'ActiveEffect' && data.fromInternal !== this.document.uuid) { if (data.type === 'ActiveEffect' && data.fromInternal !== this.document.uuid) {
this.document.createEmbeddedDocuments('ActiveEffect', [data.data]); this.document.createEmbeddedDocuments('ActiveEffect', [data.data]);
} else { } else {
return super._onDrop(event); // Fallback to super, but note that item sheets do not have this function
return super._onDrop?.(event);
} }
} }

View file

@ -89,6 +89,7 @@ export default class DHBaseActorSheet extends DHApplicationMixin(ActorSheetV2) {
value: context.source.system.gold[key] value: context.source.system.gold[key]
}; };
} }
context.inventory.hasCurrency = Object.values(context.inventory.currencies).some((c) => c.enabled);
} }
return context; return context;
@ -134,6 +135,10 @@ export default class DHBaseActorSheet extends DHApplicationMixin(ActorSheetV2) {
_attachPartListeners(partId, htmlElement, options) { _attachPartListeners(partId, htmlElement, options) {
super._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 => { htmlElement.querySelectorAll('.item-button .action-uses-button').forEach(element => {
element.addEventListener('contextmenu', DHBaseActorSheet.#modifyActionUses); 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 }); 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 */ /* Application Clicks Actions */
/* -------------------------------------------- */ /* -------------------------------------------- */

View file

@ -471,5 +471,5 @@ export function refreshIsAllowed(allowedTypes, typeToCheck) {
export async function getCritDamageBonus(formula) { export async function getCritDamageBonus(formula) {
const critRoll = new Roll(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);
} }

View file

@ -4,7 +4,7 @@
"type": "domainCard", "type": "domainCard",
"folder": "rUGDM9JvGfhh9a2Y", "folder": "rUGDM9JvGfhh9a2Y",
"system": { "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", "domain": "codex",
"recallCost": 2, "recallCost": 2,
"level": 4, "level": 4,
@ -66,7 +66,7 @@
"type": "attack", "type": "attack",
"_id": "K26kfjmTEH9zPMMO", "_id": "K26kfjmTEH9zPMMO",
"systemPath": "actions", "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, "chatDisplay": true,
"actionType": "action", "actionType": "action",
"cost": [], "cost": [],

View file

@ -4,7 +4,7 @@
"type": "domainCard", "type": "domainCard",
"folder": "eg2vM8j9xhya9Rwa", "folder": "eg2vM8j9xhya9Rwa",
"system": { "system": {
"description": "<p class=\"Body-Foundation\"><strong>Spend a Hope</strong> and make an attack against all adversaries within your weapons 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 weapons range. Once per long rest, on a success against any targets, roll your weapons 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", "domain": "bone",
"recallCost": 3, "recallCost": 3,
"level": 9, "level": 9,
@ -14,7 +14,7 @@
"type": "attack", "type": "attack",
"_id": "yjEcSlzsWGX79gpB", "_id": "yjEcSlzsWGX79gpB",
"systemPath": "actions", "systemPath": "actions",
"description": "<p class=\"Body-Foundation\"><strong>Spend a Hope</strong> and make an attack against all adversaries within your weapons 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, "chatDisplay": true,
"actionType": "action", "actionType": "action",
"cost": [ "cost": [

View file

@ -10,7 +10,7 @@
"attached": [], "attached": [],
"tier": 2, "tier": 2,
"equipped": false, "equipped": false,
"secondary": false, "secondary": true,
"burden": "oneHanded", "burden": "oneHanded",
"weaponFeatures": [ "weaponFeatures": [
{ {

View file

@ -2,7 +2,7 @@
"id": "daggerheart", "id": "daggerheart",
"title": "Daggerheart", "title": "Daggerheart",
"description": "An unofficial implementation of the Daggerheart system", "description": "An unofficial implementation of the Daggerheart system",
"version": "1.3.0", "version": "1.3.1",
"compatibility": { "compatibility": {
"minimum": "13.346", "minimum": "13.346",
"verified": "13.351", "verified": "13.351",

View file

@ -14,7 +14,7 @@
<div class="suggested-trait-container">{{this}}</div> <div class="suggested-trait-container">{{this}}</div>
{{/each}} {{/each}}
</div> </div>
<button class="action-button" data-action="useSuggestedTraits">{{localize "Use"}}</button> <button class="action-button" data-action="useSuggestedTraits">{{localize "DAGGERHEART.GENERAL.use"}}</button>
</fieldset> </fieldset>
<div class="traits-inner-container"> <div class="traits-inner-container">
{{#each traits.values}} {{#each traits.values}}

View file

@ -93,13 +93,13 @@
<footer class="padded"> <footer class="padded">
<button type="button" data-action="takeDamage"> <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> <div class="damage-value {{#if this.reducedDamage}}reduced-value{{/if}}">{{this.damage}}</div>
{{#if this.reducedDamage}} {{#if this.reducedDamage}}
<i class="fa-solid fa-arrow-right-long"></i> <i class="fa-solid fa-arrow-right-long"></i>
<div class="damage-value">{{this.reducedDamage}}</div> <div class="damage-value">{{this.reducedDamage}}</div>
{{/if}} {{/if}}
{{localize "Damage"}} {{localize "DAGGERHEART.GENERAL.damage"}}
</button> </button>
</footer> </footer>
</div> </div>

View file

@ -16,7 +16,7 @@
{{#if (and @root.hasRoll @root.activeTagTeamRoll)}} {{#if (and @root.hasRoll @root.activeTagTeamRoll)}}
<div class="tag-team-controller {{#if @root.tagTeamSelected}}selected{{/if}}" data-action="toggleTagTeamRoll"> <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><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> </div>
{{/if}} {{/if}}
</header> </header>

View file

@ -40,7 +40,7 @@
<fieldset class="one-column"> <fieldset class="one-column">
<legend>{{localize "DAGGERHEART.UI.Chat.groupRoll.partyTeam"}}</legend> <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}}/> <input type="text" class="team-push-input" {{disabled @root.allSelected}}/>
</span> </span>
{{#if (gt this.members.length 0)}} {{#if (gt this.members.length 0)}}

View file

@ -1,4 +1,4 @@
<footer> <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> <button type="button" data-action="save" {{disabled saveDisabled}}>{{localize "DAGGERHEART.APPLICATIONS.RerollDialog.acceptCurrentRolls"}}</button>
</footer> </footer>

View file

@ -3,7 +3,7 @@
<div class="levelup-navigation-actions {{#if (not this.showTabs)}}test{{/if}}"> <div class="levelup-navigation-actions {{#if (not this.showTabs)}}test{{/if}}">
{{#if this.navigate.previous.fromSummary}} {{#if this.navigate.previous.fromSummary}}
<button data-action="activatePart" data-part="advancements">{{localize "DAGGERHEART.APPLICATIONS.Levelup.navigateToLevelup"}}</button> <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}} {{else}}
{{#if (not this.navigate.previous.disabled)}} {{#if (not this.navigate.previous.disabled)}}
<button data-action="updateCurrentLevel" >{{this.navigate.previous.label}}</button> <button data-action="updateCurrentLevel" >{{this.navigate.previous.label}}</button>

View file

@ -5,14 +5,14 @@
> >
{{#if hasIcon}} {{#if hasIcon}}
<fieldset class="one-column"> <fieldset class="one-column">
<legend>{{localize "Icon"}}</legend> <legend>{{localize "DAGGERHEART.GENERAL.icon"}}</legend>
<input type="text" name="icon" value="{{move.icon}}" /> <input type="text" name="icon" value="{{move.icon}}" />
</fieldset> </fieldset>
{{/if}} {{/if}}
<fieldset class="one-column"> <fieldset class="one-column">
<legend>{{localize "Description"}}</legend> <legend>{{localize "DAGGERHEART.GENERAL.description"}}</legend>
<prose-mirror name="description" value="{{move.description}}"> <prose-mirror name="description" value="{{move.description}}">
{{{ move.enrichedDescription }}} {{{ move.enrichedDescription }}}

View file

@ -34,7 +34,7 @@
</div> </div>
<div class="toggleable-row"> <div class="toggleable-row">
{{formGroup settingFields.schema.fields.currency.fields.coins.fields.label value=settingFields._source.currency.coins.label localize=true}} {{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>
<div class="toggleable-row"> <div class="toggleable-row">
{{formGroup settingFields.schema.fields.currency.fields.handfuls.fields.label value=settingFields._source.currency.handfuls.label localize=true}} {{formGroup settingFields.schema.fields.currency.fields.handfuls.fields.label value=settingFields._source.currency.handfuls.label localize=true}}

View file

@ -12,16 +12,18 @@
</a> </a>
</div> </div>
<div class="currency-section"> {{#if this.inventory.hasCurrency}}
{{#each this.inventory.currencies as | currency |}} <div class="currency-section">
{{#if currency.enabled}} {{#each this.inventory.currencies as | currency |}}
<div class="input"> {{#if currency.enabled}}
<span>{{localize currency.label}}</span> <div class="input">
{{formInput currency.field value=currency.value enriched=currency.value toggled=true}} <span>{{localize currency.label}}</span>
</div> {{formInput currency.field value=currency.value enriched=currency.value toggled=true}}
{{/if}} </div>
{{/each}} {{/if}}
</div> {{/each}}
</div>
{{/if}}
<div class="items-section"> <div class="items-section">
{{> 'daggerheart.inventory-items' {{> 'daggerheart.inventory-items'

View file

@ -15,37 +15,18 @@
</a> </a>
</div> </div>
<div class="currency-section"> {{#if inventory.hasCurrency}}
{{#each this.inventory.currencies as | currency |}} <div class="currency-section">
{{#if currency.enabled}} {{#each this.inventory.currencies as | currency |}}
<div class="input"> {{#if currency.enabled}}
<span>{{localize currency.label}}</span> <div class="input">
{{formInput currency.field value=currency.value enriched=currency.value toggled=true}} <span>{{localize currency.label}}</span>
</div> {{formInput currency.field value=currency.value enriched=currency.value toggled=true}}
{{/if}} </div>
{{/each}} {{/if}}
{{!-- <div class="input"> {{/each}}
<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}}
</div> </div>
<div class="input"> {{/if}}
<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>
<div class="items-section"> <div class="items-section">
{{> 'daggerheart.inventory-items' {{> 'daggerheart.inventory-items'

View file

@ -2,7 +2,7 @@
<h2>{{localize "DAGGERHEART.APPLICATIONS.DaggerheartMenu.title"}}</h2> <h2>{{localize "DAGGERHEART.APPLICATIONS.DaggerheartMenu.title"}}</h2>
<fieldset> <fieldset>
<legend>{{localize "Refresh Features"}}</legend> <legend>{{localize "DAGGERHEART.APPLICATIONS.DaggerheartMenu.refreshFeatures"}}</legend>
<div class="menu-refresh-container"> <div class="menu-refresh-container">
<div class="menu-refresh-inner-container"> <div class="menu-refresh-inner-container">

View file

@ -33,7 +33,7 @@
class="dice reroll-button {{../dice}}" 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}}" 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}} {{result}}
</div> </div>
</div> </div>

View file

@ -9,19 +9,19 @@
<div class="tooltip-information-section spaced"> <div class="tooltip-information-section spaced">
{{#with item.system.beastformAttackData}} {{#with item.system.beastformAttackData}}
<div class="tooltip-information"> <div class="tooltip-information">
<label>{{localize "Main Trait"}}</label> <label>{{localize "DAGGERHEART.ITEMS.Beastform.mainTrait"}}</label>
<div>{{this.trait}}</div> <div>{{this.trait}}</div>
</div> </div>
<div class="tooltip-information"> <div class="tooltip-information">
<label>{{localize "Trait Bonus"}}</label> <label>{{localize "DAGGERHEART.ITEMS.Beastform.traitBonus"}}</label>
<div>{{this.traitBonus}}</div> <div>{{this.traitBonus}}</div>
</div> </div>
<div class="tooltip-information"> <div class="tooltip-information">
<label>{{localize "Evasion"}}</label> <label>{{localize "DAGGERHEART.GENERAL.evasion"}}</label>
<div>{{this.evasionBonus}}</div> <div>{{this.evasionBonus}}</div>
</div> </div>
<div class="tooltip-information"> <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>{{concat this.damageDice ' ' this.damageBonus}} <i class="fa-solid fa-hand-fist"></i></div>
</div> </div>
{{/with}} {{/with}}