Deleting old templates

This commit is contained in:
Dapoolp 2025-08-02 03:16:59 +02:00
parent 9b3632be2f
commit aff5998a45
21 changed files with 447 additions and 1015 deletions

View file

@ -56,6 +56,8 @@ Hooks.once('init', () => {
};
CONFIG.Dice.rolls = [...CONFIG.Dice.rolls, DHRoll, DualityRoll, D20Roll, DamageRoll];
Roll.CHAT_TEMPLATE = "systems/daggerheart/templates/ui/chat/foundryRoll.hbs";
Roll.TOOLTIP_TEMPLATE = "systems/daggerheart/templates/ui/chat/foundryRollTooltip.hbs";
CONFIG.MeasuredTemplate.objectClass = placeables.DhMeasuredTemplate;
const { DocumentSheetConfig } = foundry.applications.apps;

View file

@ -2197,6 +2197,9 @@
"deathMove": {
"title": "Death Move"
},
"dicePool": {
"title": "Dice Pool"
},
"domainCard": {
"title": "Domain Card"
},

View file

@ -33,6 +33,9 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
html.querySelectorAll('.duality-action-effect').forEach(element =>
element.addEventListener('click', event => this.onApplyEffect(event, data.message))
);
html.querySelectorAll('.simple-roll-button').forEach(element =>
element.addEventListener('click', event => this.onRollSimple(event, data.message))
);
html.querySelectorAll('.target-container').forEach(element => {
element.addEventListener('mouseenter', this.hoverTarget);
element.addEventListener('mouseleave', this.unhoverTarget);
@ -211,7 +214,6 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
async onDamage(event, message) {
event.stopPropagation();
const { isHit, targets } = this.getTargetList(event, message);
console.log(message, isHit, targets)
if (message.system.onSave && isHit) {
const pendingingSaves = message.system.targets.filter(
@ -251,6 +253,33 @@ export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLo
}
}
async onRollSimple(event, message) {
const buttonType = event.target.dataset.type ?? 'damage',
total = message.rolls.reduce((a,c) => a + Roll.fromJSON(c).total, 0),
damages = {
'hitPoints': {
parts: [
{
applyTo: 'hitPoints',
damageTypes: [],
total
}
]
}
},
targets = Array.from(game.user.targets);
if (targets.length === 0)
return ui.notifications.info(game.i18n.localize('DAGGERHEART.UI.Notifications.noTargetsSelected'));
targets.forEach(target => {
if(buttonType === 'healing')
target.actor.takeHealing(damages);
else
target.actor.takeDamage(damages);
})
}
/**
* Toggle visibility of target containers.
* @param {MouseEvent} event

View file

@ -32,7 +32,6 @@ export default class DHDamageAction extends DHBaseAction {
}
async rollDamage(event, data) {
// console.log(data)
const systemData = data.system ?? data;
let formulas = this.damage.parts.map(p => ({

View file

@ -11,7 +11,6 @@ export default class DamageRoll extends DHRoll {
static DefaultDialog = DamageDialog;
static async buildEvaluate(roll, config = {}, message = {}) {
console.log(roll,config)
if (config.evaluate !== false)
for (const roll of config.roll) await roll.roll.evaluate();
@ -33,6 +32,21 @@ export default class DamageRoll extends DHRoll {
};
}
static async buildPost(roll, config, message) {
if (game.modules.get('dice-so-nice')?.active) {
const pool = foundry.dice.terms.PoolTerm.fromRolls(
Object.values(config.damage).flatMap(r => r.parts.map(p => p.roll))
),
diceRoll = Roll.fromTerms([pool]);
await game.dice3d.showForRoll(diceRoll, game.user, true);
}
await super.buildPost(roll, config, message);
if (config.source?.message) {
const chatMessage = ui.chat.collection.get(config.source.message);
chatMessage.update({ 'system.damage': config.damage });
}
}
static unifyDamageRoll(rolls) {
const unified = {};
rolls.forEach(r => {

View file

@ -64,24 +64,8 @@ export default class DHRoll extends Roll {
}
// Create Chat Message
// if (roll instanceof CONFIG.Dice.daggerheart.DamageRoll && Object.values(config.roll)?.length) {
// const pool = foundry.dice.terms.PoolTerm.fromRolls(
// Object.values(config.roll).flatMap(r => r.parts.map(p => p.roll))
// );
// roll = Roll.fromTerms([pool]);
// }
if (config.source?.message) {
if (game.modules.get('dice-so-nice')?.active) await game.dice3d.showForRoll(roll, game.user, true);
const chatMessage = ui.chat.collection.get(config.source.message);
chatMessage.update({ 'system.damage': config.damage });
} else {
console.log(roll, config)
if (!config.source?.message)
config.message = await this.toMessage(roll, config);
// if(roll._evaluated) {
// const cls = getDocumentClass('ChatMessage');
// await cls.create(config.message, { rollMode: config.selectedRollMode });
// }
}
}
static postEvaluate(roll, config = {}) {

View file

@ -541,12 +541,12 @@ export default class DhpActor extends Actor {
}
canResist(type, resistance) {
if (!type) return 0;
if (!type?.length) return false;
return type.every(t => this.system.resistance[t]?.[resistance] === true);
}
getDamageTypeReduction(type) {
if (!type) return 0;
if (!type?.length) return 0;
const reduction = Object.entries(this.system.resistance).reduce(
(a, [index, value]) => (type.includes(index) ? Math.min(value.reduction, a) : a),
Infinity

View file

@ -93,9 +93,8 @@ export const enrichedDualityRoll = async (
advantage,
type: reaction ? 'reaction' : null
},
chatMessage: {
template: 'systems/daggerheart/templates/ui/chat/duality-roll.hbs'
}
type: 'trait',
hasRoll: true
};
if (target) {

View file

@ -1,341 +0,0 @@
@import '../../utils/colors.less';
.chat-message {
--text-color: light-dark(@dark-blue, @golden);
--bg-color: light-dark(@dark-blue-40, @golden-40);
&.duality {
&.hope {
--text-color: @golden;
--bg-color: @golden-40;
.message-header, .message-content {
background-color: @golden-bg;
}
}
&.fear {
--text-color: @chat-blue;
--bg-color: @chat-blue-40;
.message-header, .message-content {
background-color: @chat-blue-bg;
}
}
&.critical {
--text-color: @chat-purple;
--bg-color: @chat-purple-40;
.message-header, .message-content {
background-color: @chat-purple-bg;
}
}
}
.chat-roll {
font-size: var(--font-size-12);
padding: 0 20px;
> .roll-part-header {
font-size: var(--font-size-14);
}
.roll-part-header {
display: grid;
grid-template-columns: 1fr auto 1fr;
align-items: center;
color: light-dark(@dark, @beige);
margin: 5px 0;
span {
display: flex;
align-items: center;
gap: 5px;
text-transform: capitalize;
padding: 0 10px;
}
&:before, &:after {
content: ' ';
height: 1px;
}
&:before {
background: linear-gradient(90deg,rgba(0, 0, 0, 0) 0%, var(--text-color) 100%);
}
&:after {
background: linear-gradient(90deg,var(--text-color) 0%, rgba(0, 0, 0, 0) 100%);
}
}
.roll-part-extra {
display: flex;
justify-content: center;
align-items: center;
gap: 10px;
margin-top: 8px;
}
.roll-part-content {
display: flex;
flex-direction: column;
align-items: center;
gap: 5px;
padding: 5px 0;
.dice-tooltip {
width: 100%;
.wrapper {
display: flex;
flex-direction: column;
gap: 10px;
> :first-child:not(.target-selector) {
margin-top: 5px;
}
> :last-child {
margin-bottom: 5px;
}
}
}
.roll-result-container {
display: flex;
justify-content: center;
gap: 10px;
color: var(--text-color);
font-weight: 700;
font-family: 'Cinzel', sans-serif;
.roll-result-value {
font-size: var(--font-size-24);
}
.roll-result-desc {
font-size: var(--font-size-16);
margin-top: 2px;
}
}
.roll-difficulty {
margin-top: -5px;
}
.roll-dice {
display: flex;
align-items: center;
justify-content: center;
gap: 5px;
font-weight: 700;
font-family: 'Cinzel', sans-serif;
flex-wrap: wrap;
.roll-die {
display: flex;
flex-direction: column;
gap: 3px;
label {
text-align: center;
height: var(--font-size-12);
}
> div {
display: flex;
align-items: center;
justify-content: center;
gap: 5px;
// font-size: var(--font-size-20);
}
}
}
fieldset {
display: flex;
flex-direction: column;
gap: 10px;
border-color: var(--text-color);
border-radius: 5px;
legend {
display: flex;
align-items: center;
gap: 10px;
padding: 0 5px;
color: var(--text-color);
}
}
.target-selector {
+ .roll-part-extra {
margin: 0;
}
.target-choice {
display: flex;
font-size: var(--font-size-14);
color: var(--text-color);
padding: 5px 0;
.button-target-selection {
flex: 1;
text-align: center;
}
.button-target-selection:hover, .target-selected {
font-weight: bold;
text-shadow: 0px 0px 8px var(--text-color);
}
}
}
i {
text-align: center;
}
.roll-target {
display: flex;
width: 100%;
gap: 10px;
align-items: center;
.target-img {
border-radius: 50%;
width: 40px;
height: 40px;
object-fit: cover;
}
.target-data {
flex: 1;
}
.target-save {
display: flex;
align-items: center;
justify-content: center;
width: 22px;
height: 22px;
&:hover > i {
scale: 1.2;
}
i {
&.fa-check {
color: @green;
}
&.fa-xmark {
color: @medium-red;
}
}
}
}
}
.roll-formula {
background-color: var(--bg-color);
color: var(--text-color);
border-radius: 4px;
padding: 3px 5px;
width: fit-content;
margin: auto;
}
.roll-difficulty, .target-hit-status {
color: @green;
background-color: @green-10;
border: 1px solid currentColor;
border-radius: 4px;
padding: 3px 5px;
text-transform: uppercase;
font-weight: 600;
&.is-miss {
color: @medium-red;
background-color: @medium-red-10;
}
}
.target-hit-status {
width: fit-content;
margin-top: 2px;
}
div[data-action="expandRoll"] {
.roll-part-header > div > span {
&:before, &:after {
content: '\f078';
font-family: var(--font-awesome);
color: var(--text-color);
transition: all 0.3s ease;
}
}
.on-reduced {
display: grid;
overflow: hidden;
grid-template-rows: 1fr;
transition: grid-template-rows 250ms ease;
.wrapper {
display: flex;
gap: 10px;
overflow: hidden;
}
}
&.expanded {
.roll-part-header > div > span {
&:before, &:after {
transform: rotate(180deg);
}
}
.on-reduced {
grid-template-rows: 0fr;
}
}
}
.roll-part + .roll-part {
margin-top: 0;
}
}
.target-section {
.roll-part-content {
gap: 10px;
}
.roll-part-extra {
position: relative;
.target-pending-saves {
display: flex;
align-items: center;
justify-content: center;
height: 25px;
width: 25px;
&.is-absolute {
position: absolute;
bottom: 0;
right: 0;
}
}
}
}
.roll-buttons {
display: flex;
gap: 5px;
margin-top: 8px;
button {
flex: 1;
}
}
.font-20 {
font-size: var(--font-size-20);
}
}

View file

@ -11,7 +11,7 @@
}
}
&.roll {
/* &.roll {
.dice-flavor {
text-align: center;
font-weight: bold;
@ -336,7 +336,7 @@
&:not(.expanded) .dice-tooltip {
grid-template-rows: 0fr;
}
}
} */
button {
&.inner-button {
@ -363,3 +363,354 @@
}
}
}
.daggerheart {
.chat-message {
--text-color: light-dark(@dark-blue, @golden);
--bg-color: light-dark(@dark-blue-40, @golden-40);
&.duality {
&.hope {
--text-color: @golden;
--bg-color: @golden-40;
.message-header, .message-content {
background-color: @golden-bg;
}
}
&.fear {
--text-color: @chat-blue;
--bg-color: @chat-blue-40;
.message-header, .message-content {
background-color: @chat-blue-bg;
}
}
&.critical {
--text-color: @chat-purple;
--bg-color: @chat-purple-40;
.message-header, .message-content {
background-color: @chat-purple-bg;
}
}
}
.chat-roll {
font-size: var(--font-size-12);
padding: 0 20px;
> .roll-part-header {
font-size: var(--font-size-14);
}
.roll-part-header {
display: grid;
grid-template-columns: 1fr auto 1fr;
align-items: center;
color: light-dark(@dark, @beige);
margin: 5px 0;
span {
display: flex;
align-items: center;
gap: 5px;
text-transform: capitalize;
padding: 0 10px;
}
&:before, &:after {
content: ' ';
height: 1px;
}
&:before {
background: linear-gradient(90deg,rgba(0, 0, 0, 0) 0%, var(--text-color) 100%);
}
&:after {
background: linear-gradient(90deg,var(--text-color) 0%, rgba(0, 0, 0, 0) 100%);
}
}
.roll-part-extra {
display: flex;
justify-content: center;
align-items: center;
gap: 10px;
margin-top: 8px;
}
.roll-part-content {
display: flex;
flex-direction: column;
align-items: center;
gap: 5px;
padding: 5px 0;
.dice-tooltip {
width: 100%;
.wrapper {
display: flex;
flex-direction: column;
gap: 10px;
> :first-child:not(.target-selector) {
margin-top: 5px;
}
> :last-child {
margin-bottom: 5px;
}
}
}
.roll-result-container {
display: flex;
justify-content: center;
gap: 10px;
color: var(--text-color);
font-weight: 700;
font-family: 'Cinzel', sans-serif;
.roll-result-value {
font-size: var(--font-size-24);
}
.roll-result-desc {
font-size: var(--font-size-16);
margin-top: 2px;
}
}
.roll-difficulty {
margin-top: -5px;
}
}
}
.roll-dice {
display: flex;
align-items: center;
justify-content: center;
gap: 5px;
font-weight: 700;
font-family: 'Cinzel', sans-serif;
flex-wrap: wrap;
.roll-die {
display: flex;
flex-direction: column;
gap: 3px;
label {
text-align: center;
height: var(--font-size-12);
}
> div {
display: flex;
align-items: center;
justify-content: center;
gap: 5px;
// font-size: var(--font-size-20);
}
}
}
fieldset {
display: flex;
flex-direction: column;
// gap: 10px;
border-color: var(--text-color);
border-radius: 5px;
legend {
display: flex;
align-items: center;
gap: 10px;
padding: 0 5px;
color: var(--text-color);
}
}
.target-selector {
+ .roll-part-extra {
margin: 0;
}
.target-choice {
display: flex;
font-size: var(--font-size-14);
color: var(--text-color);
padding: 5px 0;
.button-target-selection {
flex: 1;
text-align: center;
}
.button-target-selection:hover, .target-selected {
font-weight: bold;
text-shadow: 0px 0px 8px var(--text-color);
}
}
}
i {
text-align: center;
}
.roll-target {
display: flex;
width: 100%;
gap: 10px;
align-items: center;
.target-img {
border-radius: 50%;
width: 40px;
height: 40px;
object-fit: cover;
}
.target-data {
flex: 1;
}
.target-save {
display: flex;
align-items: center;
justify-content: center;
width: 22px;
height: 22px;
&:hover > i {
scale: 1.2;
}
i {
&.fa-check {
color: @green;
}
&.fa-xmark {
color: @medium-red;
}
}
}
}
// }
.roll-formula {
background-color: var(--bg-color);
color: var(--text-color);
border-radius: 4px;
padding: 3px 5px;
width: fit-content;
margin: auto;
}
.roll-difficulty, .target-hit-status {
color: @green;
background-color: @green-10;
border: 1px solid currentColor;
border-radius: 4px;
padding: 3px 5px;
text-transform: uppercase;
font-weight: 600;
&.is-miss {
color: @medium-red;
background-color: @medium-red-10;
}
}
.target-hit-status {
width: fit-content;
margin-top: 2px;
}
div[data-action="expandRoll"] {
.roll-part-header > div > span {
&:before, &:after {
content: '\f078';
font-family: var(--font-awesome);
color: var(--text-color);
transition: all 0.3s ease;
}
}
.on-reduced {
display: grid;
overflow: hidden;
grid-template-rows: 1fr;
transition: grid-template-rows 250ms ease;
.wrapper {
display: flex;
gap: 10px;
overflow: hidden;
}
}
&.expanded {
.roll-part-header > div > span {
&:before, &:after {
transform: rotate(180deg);
}
}
.on-reduced {
grid-template-rows: 0fr;
}
}
}
.roll-part + .roll-part {
margin-top: 0;
}
// }
.target-section {
.roll-part-content {
gap: 10px;
}
.roll-part-extra {
position: relative;
.target-pending-saves {
display: flex;
align-items: center;
justify-content: center;
height: 25px;
width: 25px;
&.is-absolute {
position: absolute;
bottom: 0;
right: 0;
}
}
}
}
.roll-buttons {
display: flex;
gap: 5px;
margin-top: 8px;
button {
flex: 1;
}
}
.font-20 {
font-size: var(--font-size-20);
}
.dice-roll .dice-tooltip fieldset {
margin-bottom: 5px;
.roll-dice {
gap: 10px;
}
}
}
}

View file

@ -1,195 +0,0 @@
@import '../../utils/colors.less';
@import '../../utils/spacing.less';
// .theme-colorful {
// .chat-message.duality {
// border-color: black;
// padding: 8px 0 0 0;
// fieldset.daggerheart.chat {
// border-top-width: 0;
// display: contents;
// legend {
// &:before,
// &:after {
// display: none;
// }
// }
// }
// .message-header {
// color: var(--color-light-3);
// padding: 0 8px;
// }
// &.hope {
// background: linear-gradient(0, rgba(165, 42, 42, 0.6) 40px, rgba(0, 0, 0, 0.6));
// }
// &.fear {
// background: linear-gradient(0, @fearBackgroundEnd, @fearBackgroundStart);
// }
// &.critical {
// background: linear-gradient(0, @criticalBackgroundEnd, @criticalBackgroundStart);
// }
// .chat-message header {
// color: var(--color-light-3);
// }
// > * {
// padding: 0 8px;
// }
// .message-content {
// .duality-modifiers,
// .duality-result,
// .dice-title {
// display: flex;
// }
// .duality-modifiers {
// display: flex;
// gap: 2px;
// margin-bottom: 4px;
// flex-wrap: wrap;
// .duality-modifier {
// padding: 2px;
// border-radius: 6px;
// border: 1px solid;
// background: var(--color-dark-6);
// font-size: 12px;
// white-space: nowrap;
// }
// }
// .dice-flavor {
// color: var(--color-light-1);
// text-shadow: 0 0 1px black;
// border-bottom: 1px solid;
// display: flex;
// align-items: end;
// justify-content: space-between;
// padding: 0 8px;
// margin: 0 -8px 2px;
// font-weight: unset;
// }
// .dice-result {
// .duality-modifiers {
// display: flex; // Default => display: none;
// gap: 2px;
// margin-bottom: 4px;
// .duality-modifier {
// padding: 2px;
// border-radius: 6px;
// border: 1px solid;
// background: var(--color-dark-6);
// font-size: 12px;
// }
// }
// .dice-formula,
// > .dice-total,
// .part-header {
// display: none;
// }
// .dice-tooltip {
// grid-template-rows: 1fr;
// .wrapper {
// .tooltip-part {
// display: flex;
// align-items: end;
// gap: 0.25rem;
// .dice {
// .dice-rolls {
// margin-bottom: 0;
// &.duality {
// li {
// display: flex;
// align-items: center;
// justify-content: center;
// position: relative;
// background: unset;
// line-height: unset;
// font-weight: unset;
// }
// }
// }
// }
// .duality-modifier {
// display: flex;
// margin-bottom: 6px;
// color: var(--color-light-1);
// text-shadow: 0 0 1px black;
// font-size: var(--font-size-16);
// }
// }
// }
// }
// .target-selection {
// label {
// color: var(--color-light-1);
// }
// }
// .target-section {
// margin: 4px 0;
// border: 2px solid;
// margin-top: 5px;
// .dice-total {
// box-shadow: unset;
// border: unset;
// border-radius: unset;
// font-size: var(--font-size-18);
// }
// }
// .dice-actions {
// justify-content: space-between;
// &.duality-alone {
// justify-content: end;
// margin-top: -20px;
// }
// > * {
// display: flex;
// color: var(--color-light-1);
// text-shadow: 0 0 1px black;
// font-weight: bold;
// background: var(--color-dark-1);
// padding: 4px;
// border-color: black;
// min-height: unset;
// height: 26px;
// flex: unset;
// margin: 0;
// }
// .duality-action {
// border-radius: 0 6px 0 0;
// margin-left: -8px;
// &.duality-action-effect {
// border-top-left-radius: 6px;
// margin-left: initial;
// }
// }
// .duality-result {
// border-radius: 6px 0 0 0;
// margin-right: -8px;
// }
// }
// .duality-result {
// display: flex;
// color: var(--color-light-1);
// text-shadow: 0 0 1px black;
// font-weight: bold;
// background: var(--color-dark-1);
// padding: 4px;
// border-color: black;
// min-height: unset;
// height: 26px;
// flex: unset;
// margin: 0;
// margin-left: auto;
// align-self: center;
// border-radius: 6px;
// }
// }
// }
// button {
// &.inner-button {
// color: var(--color-light-1);
// text-shadow: 0 0 1px black;
// font-weight: bold;
// background: var(--color-dark-1);
// border-color: black;
// }
// }
// }
// }

View file

@ -3,7 +3,6 @@
@import './chat/chat.less';
@import './chat/downtime.less';
@import './chat/sheet.less';
@import './chat/theme-colorful.less';
@import './combat-sidebar/combat-sidebar.less';
@import './combat-sidebar/combatant-controls.less';
@ -19,5 +18,3 @@
@import './resources/resources.less';
@import './settings/settings.less';
@import './chat/chat-temp.less';

View file

@ -1,11 +0,0 @@
{{!-- TO DO DELETE ? --}}
{{> 'systems/daggerheart/templates/ui/chat/parts/damage-chat.hbs' damage=this}}
{{> 'systems/daggerheart/templates/ui/chat/parts/target-chat.hbs'}}
<div class="dice-roll daggerheart chat roll">
<div class="dice-result">
<div class="dice-actions">
<button class="damage-button" data-target-hit="true" {{#if (eq targets.length 0)}}disabled{{/if}}>{{localize "DAGGERHEART.UI.Chat.damageRoll.dealDamageToTargets"}}</button>
<button class="damage-button">{{localize "DAGGERHEART.UI.Chat.damageRoll.dealDamage"}}</button>
</div>
</div>
</div>

View file

@ -1,176 +0,0 @@
<div class="chat-roll">
{{!-- Roll Start --}}
<div class="roll-part roll-section">
<div class="roll-part-header"><span>Finesse Check</span></div>
<div class="roll-part-content">
<div class="roll-result-container">
<span class="roll-result-value">18</span>
<span class="roll-result-desc">with hope</span>
</div>
<span class="roll-difficulty">difficulty 15</span>
</div>
<div class="dice-roll" data-action="expandRoll">
<div class="roll-part-header"><div><span>Formula</span></div></div>
<div class="roll-part-content dice-result">
<div class="dice-tooltip">
<div class="wrapper">
<div class="roll-dice">
<div class="roll-die">
<label>Hope</label>
<div>12 <img class="dice-icon" src="systems/daggerheart/assets/icons/dice/hope/d20.svg" alt=""></div>
</div>
<div class="roll-die">
<label></label>
<div>+</div>
</div>
<div class="roll-die">
<label>Fear</label>
<div>6 <img class="dice-icon" src="systems/daggerheart/assets/icons/dice/fear/d12.svg" alt=""></div>
</div>
</div>
</div>
<div class="roll-formula">
1d12 + 1d12 + 0
</div>
</div>
</div>
</div>
</div>
{{!-- Roll End --}}
{{!-- Damage Start --}}
<div class="roll-part damage-section dice-roll" data-action="expandRoll">
<div class="roll-part-header"><div><span>Damage</span></div></div>
<div class="roll-part-extra on-reduced">
<div class="wrapper">
<div class="roll-formula">Hit Points: 10</div>
<div class="roll-formula">Stress: 10</div>
</div>
</div>
<div class="roll-part-content dice-result">
<div class="dice-tooltip">
<div class="wrapper">
<fieldset>
<legend>
Hit Points <div class="roll-formula">Total: 10</div>
</legend>
<label class="roll-part-header"><span>Physical <div class="roll-formula">10</div></span></label>
<div class="roll-dice">
<div class="roll-die">
<div>4 <img class="dice-icon" src="systems/daggerheart/assets/icons/dice/default/d20.svg" alt=""></div>
</div>
<div class="roll-die">
<div>+</div>
</div>
<div class="roll-die">
<div>6</div>
</div>
</div>
<label class="roll-part-header"><span>Magical <div class="roll-formula">10</div></span></label>
<div class="roll-dice">
<div class="roll-die">
<div>4 <img class="dice-icon" src="systems/daggerheart/assets/icons/dice/default/d20.svg" alt=""></div>
</div>
<div class="roll-die">
<div>+</div>
</div>
<div class="roll-die">
<div>6</div>
</div>
</div>
<label class="roll-part-header"><span>Phy/Mag <div class="roll-formula">10</div></span></label>
<div class="roll-dice">
<div class="roll-die">
<div>4 <img class="dice-icon" src="systems/daggerheart/assets/icons/dice/default/d20.svg" alt=""></div>
</div>
<div class="roll-die">
<div>+</div>
</div>
<div class="roll-die">
<div>6</div>
</div>
</div>
</fieldset>
<fieldset>
<legend>
Stress <div class="roll-formula">Total: 10</div>
</legend>
<div class="roll-dice">
<div class="roll-die">
<div>4 <img class="dice-icon" src="systems/daggerheart/assets/icons/dice/default/d20.svg" alt=""></div>
</div>
<div class="roll-die">
<div>+</div>
</div>
<div class="roll-die">
<div>6</div>
</div>
</div>
</fieldset>
</div>
</div>
</div>
</div>
{{!-- Damage End --}}
{{!-- Target Start --}}
<div class="roll-part target-section dice-roll" data-action="expandRoll">
<div class="roll-part-header"><div><span>Target</span></div></div>
<div class="roll-part-extra on-reduced">
<div class="wrapper">
<div class="target-hit-status">2 Hits</div>
<div class="target-hit-status is-miss">2 Miss</div>
</div>
</div>
<div class="roll-part-content dice-result">
<div class="dice-tooltip">
<div class="wrapper">
<div class="target-selector">
<div class="roll-part-header"><div></div></div>
<div class="target-choice"><div class="target-selected">Hit</div><div>Current</div></div>
<div class="roll-part-header"><div></div></div>
</div>
<div class="roll-part-extra">Reaction Roll All Targets<i class="fa-solid fa-shield fa-lg"></i></div>
<div class="roll-target">
<img class="target-img" src="images/goliath_ranger.jpg">
<div class="target-data">
<div class="target-name">Archer Squadron</div>
<div class="target-hit-status is-hit">Hit</div>
</div>
<i class="fa-solid fa-shield fa-lg"></i>
</div>
<div class="roll-target">
<img class="target-img" src="images/goliath_ranger.jpg">
<div class="target-data">
<div class="target-name">Conscript</div>
<div class="target-hit-status is-miss">Miss</div>
</div>
<i class="fa-solid fa-shield fa-lg"></i>
</div>
<div class="roll-target">
<img class="target-img" src="images/goliath_ranger.jpg">
<div class="target-data">
<div class="target-name">Elite Soldier</div>
<div class="target-hit-status is-hit">Hit</div>
</div>
<i class="fa-solid fa-shield fa-lg"></i>
</div>
<div class="roll-target">
<img class="target-img" src="images/goliath_ranger.jpg">
<div class="target-data">
<div class="target-name">Knight of the Realm</div>
<div class="target-hit-status is-miss">Miss</div>
</div>
<i class="fa-solid fa-shield fa-lg"></i>
</div>
</div>
</div>
</div>
</div>
{{!-- Target End --}}
<div class="roll-part-header"><div></div></div>
</div>
{{!-- Button Start --}}
<div class="roll-buttons">
<button>Deal Damage</button>
<button>Apply Effects</button>
</div>
{{!-- Button End --}}

View file

@ -1,223 +0,0 @@
<div class="dice-roll daggerheart chat roll" data-action="expandRoll">
<div class="dice-flavor" data-action="expandRoll">{{title}}</div>
<div class="duality-modifiers" data-action="expandRoll">
{{#each roll.modifiers}}
<div class="duality-modifier">
{{localize label}} {{#if (gte value 0)}}+{{/if}}{{value}}
</div>
{{/each}}
{{#if (eq roll.advantage.type 1)}}
<div class="duality-modifier">
{{localize "DAGGERHEART.GENERAL.Advantage.full"}}
</div>
{{/if}}
{{#if (eq roll.advantage.type -1)}}
<div class="duality-modifier">
{{localize "DAGGERHEART.GENERAL.Disadvantage.full"}}
</div>
{{/if}}
{{#if roll.rally.dice}}
<div class="duality-modifier">
{{localize "DAGGERHEART.CLASS.Feature.rallyDice"}} {{roll.rally.dice}}
</div>
{{/if}}
</div>
<div class="dice-result">
<div class="dice-formula" data-action="expandRoll">{{roll.formula}}</div>
<div class="dice-tooltip">
<div class="wrapper">
<section class="tooltip-part">
<div class="dice" data-action="expandRoll">
<header class="part-header flexrow">
<span class="part-formula">
<span>1{{roll.hope.dice}}</span>
|
<span>1{{roll.fear.dice}}</span>
</span>
<span class="part-total">{{roll.result.total}}</span>
</header>
<div class="flexrow">
<ol class="dice-rolls duality">
<li class="roll die {{roll.hope.dice}}">
<div class="dice-container">
<div class="dice-title">{{localize "DAGGERHEART.GENERAL.hope"}}</div>
{{#if roll.hope.rerolled.any}}<i class="fa-solid fa-dice dice-rerolled" title="{{localize "DAGGERHEART.UI.Tooltip.diceIsRerolled" times=roll.hope.rerolled.rerolls.length}}"></i>{{/if}}
<div class="dice-inner-container hope" data-tooltip="{{localize "DAGGERHEART.GENERAL.rerollThing" thing=(localize "DAGGERHEART.GENERAL.hope")}}">
<button type="checkbox" class="reroll-button" data-die-index="0" data-type="hope">
<div class="dice-wrapper">
<img class="dice" src="../icons/svg/{{roll.hope.dice}}-grey.svg"/>
</div>
<div class="dice-value">{{roll.hope.value}}</div>
</button>
</div>
</div>
</li>
<li class="roll die {{roll.fear.dice}}">
<div class="dice-container">
<div class="dice-title">{{localize "DAGGERHEART.GENERAL.fear"}}</div>
{{#if roll.fear.rerolled.any}}<i class="fa-solid fa-dice dice-rerolled" title="{{localize "DAGGERHEART.UI.Tooltip.diceIsRerolled" times=roll.fear.rerolled.rerolls.length}}"></i>{{/if}}
<div class="dice-inner-container fear" data-tooltip="{{localize "DAGGERHEART.GENERAL.rerollThing" thing=(localize "DAGGERHEART.GENERAL.fear")}}">
<button type="checkbox" class="reroll-button" data-die-index="2" data-type="fear">
<div class="dice-wrapper">
<img class="dice" src="../icons/svg/{{roll.fear.dice}}-grey.svg"/>
</div>
<div class="dice-value">{{roll.fear.value}}</div>
</button>
</div>
</div>
</li>
</ol>
</div>
</div>
{{#if roll.advantage.type}}
<div class="dice" data-action="expandRoll">
<header class="part-header flexrow">
<span class="part-formula">
<span>1{{roll.advantage.dice}}</span>
</span>
<span class="part-total">{{roll.advantage.value}}</span>
</header>
<div class="flexrow">
<ol class="dice-rolls">
<li class="roll die {{roll.advantage.dice}}">
<div class="dice-container">
<div class="dice-inner-container {{#if (eq roll.advantage.type 1)}}advantage{{else}}disadvantage{{/if}}">
<div class="dice-wrapper">
<img class="dice" src="../icons/svg/{{roll.advantage.dice}}-grey.svg"/>
</div>
<div class="dice-value">{{roll.advantage.value}}</div>
</div>
</div>
</li>
</ol>
</div>
</div>
{{/if}}
{{#if roll.rally.dice}}
<div class="dice">
<header class="part-header flexrow">
<span class="part-formula">
<span>1{{roll.rally.dice}}</span>
</span>
<span class="part-total">{{roll.rally.value}}</span>
</header>
<div class="flexrow">
<ol class="dice-rolls">
<li class="roll die {{roll.rally.dice}}">
<div class="dice-container">
<div class="dice-inner-container">
<div class="dice-wrapper">
<img class="dice" src="../icons/svg/{{roll.rally.dice}}-grey.svg"/>
</div>
<div class="dice-value">{{roll.rally.value}}</div>
</div>
</div>
</li>
</ol>
</div>
</div>
{{/if}}
{{#each roll.extra as | extra | }}
<div class="dice" data-action="expandRoll">
<header class="part-header flexrow">
<span class="part-formula">
<span>1{{extra.dice}}</span>
</span>
<span class="part-total">{{extra.value}}</span>
</header>
<div class="flexrow">
<ol class="dice-rolls">
<li class="roll die {{extra.dice}}">
<div class="dice-container">
<div class="dice-inner-container">
<div class="dice-wrapper">
<img class="dice" src="../icons/svg/{{extra.dice}}-grey.svg"/>
</div>
<div class="dice-value">{{extra.value}}</div>
</div>
</div>
</li>
</ol>
</div>
</div>
{{/each}}
{{#if roll.modifierTotal}}<div class="duality-modifier">{{#if (gt roll.modifierTotal 0)}}+{{/if}}{{roll.modifierTotal}}</div>{{/if}}
</section>
</div>
</div>
<div class="dice-total duality {{#if (eq roll.result.duality 1)}}hope{{else}}{{#if (eq roll.result.duality -1)}}fear{{else}}critical{{/if}}{{/if}}">
<div class="dice-total-label">
{{#unless (eq _source.roll.success undefined)}}
{{#if _source.roll.success}}
{{localize "DAGGERHEART.GENERAL.success"}} {{localize "DAGGERHEART.GENERAL.withThing" thing=roll.result.label}}
{{else}}
{{localize "DAGGERHEART.GENERAL.failure"}} {{localize "DAGGERHEART.GENERAL.withThing" thing=roll.result.label}}
{{/if}}
{{else}}
{{roll.result.label}}
{{/unless}}
</div>
<div class="dice-total-value">
{{roll.total}}
</div>
</div>
</div>
</div>
<fieldset class="dice-roll daggerheart chat roll expanded{{#unless damage.roll}} hidden{{/unless}}" data-action="expandRoll">
<legend class="dice-flavor">
{{#if hasHealing}}
{{localize "DAGGERHEART.GENERAL.healing"}}
{{else}}
{{localize "DAGGERHEART.GENERAL.damage"}}
{{/if}}
</legend>
<div class="dice-result">
<div class="dice-tooltip">
<div class="wrapper">
{{> 'systems/daggerheart/templates/ui/chat/parts/damage-chat.hbs' damage=damage noTitle=true}}
</div>
</div>
</div>
</fieldset>
{{> 'systems/daggerheart/templates/ui/chat/parts/target-chat.hbs'}}
<div class="dice-roll daggerheart chat roll">
<div class="dice-result">
<div class="dice-actions{{#unless (or hasDamage hasHealing)}} duality-alone{{/unless}}">
{{#if (or hasDamage hasHealing)}}
{{#if damage.roll}}
<button class="duality-action damage-button" data-target-hit="true" data-value="{{roll.total}}"><span>
{{#if hasHealing}}
{{localize "DAGGERHEART.UI.Chat.healingRoll.applyHealing"}}
{{else}}
{{localize "DAGGERHEART.UI.Chat.damageRoll.dealDamage"}}
{{/if}}
</span></button>
{{else}}
<button class="duality-action duality-action-damage" data-value="{{roll.total}}"><span>
{{#if hasHealing}}
{{localize "DAGGERHEART.UI.Chat.attackRoll.rollHealing"}}
{{else}}
{{localize "DAGGERHEART.UI.Chat.attackRoll.rollDamage"}}
{{/if}}
</span></button>
{{/if}}
{{/if}}
{{#if hasEffect}}
<button class="duality-action-effect" data-value="{{roll.total}}"><span>{{localize "DAGGERHEART.UI.Chat.attackRoll.applyEffect"}}</span></button>
{{/if}}
<div class="duality-result">
<div>{{roll.total}}
{{#if (eq roll.result.duality 1)}}
{{localize "DAGGERHEART.GENERAL.withThing" thing=(localize "DAGGERHEART.GENERAL.hope")}}
{{else}}
{{#if (eq roll.result.duality -1)}}
{{localize "DAGGERHEART.GENERAL.withThing" thing=(localize "DAGGERHEART.GENERAL.fear")}}
{{else}}
{{localize "DAGGERHEART.GENERAL.criticalSuccess"}}
{{/if}}
{{/if}}
</div>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,14 @@
<div class="dice-roll" data-action="expandRoll">
{{#if flavor}}
<div class="dice-flavor">{{flavor}}</div>
{{/if}}
<div class="dice-result">
<div class="dice-formula">{{formula}}</div>
{{{tooltip}}}
<h4 class="dice-total">{{total}}</h4>
</div>
</div>
<div class="roll-buttons">
<button class="simple-roll-button">{{localize "DAGGERHEART.UI.Chat.damageRoll.dealDamage"}}</button>
<button class="simple-roll-button" data-type="healing">{{localize "DAGGERHEART.UI.Chat.healingRoll.applyHealing"}}</button>
</div>

View file

@ -0,0 +1,19 @@
{{#if parts.length}}
<div class="dice-tooltip">
<div class="wrapper">
<fieldset>
<legend>
{{localize "DAGGERHEART.UI.Chat.dicePool.title"}}
</legend>
<div class="roll-dice">
{{#each parts}}
{{#each rolls}}
<div class="roll-die">
<div class="dice {{classes}}">{{result}}</div>
</div>
{{/each}}
{{/each}}
</div>
</div>
</div>
{{/if}}

View file

@ -1,33 +0,0 @@
<div class="dice-roll daggerheart chat roll" data-action="expandRoll">
<div class="dice-flavor">{{title}}</div>
<div class="dice-result">
{{#each roll as | resource index | }}
<div class="dice-formula">{{resource.formula}}</div>
<div class="dice-tooltip">
<div class="wrapper">
{{#each resource.parts}}
<section class="tooltip-part">
<div class="dice">
<header class="part-header flexrow">
<span class="part-formula">{{formula}}</span>
<span class="part-total">{{total}}</span>
</header>
<ol class="dice-rolls">
{{#each dice}}
{{#each results}}
<li class="roll die {{../dice}} min">{{result}}</li>
{{/each}}
{{/each}}
</ol>
</div>
</section>
{{/each}}
</div>
</div>
<div class="dice-total">{{resource.total}}</div>
{{/each}}
<div class="flexrow">
<button class="healing-button"><span>{{localize "DAGGERHEART.UI.Chat.healingRoll.heal"}}</span></button>
</div>
</div>
</div>

View file

@ -13,5 +13,5 @@
<button class="duality-action duality-action-damage">{{localize "DAGGERHEART.UI.Chat.attackRoll.rollHealing"}}</button>
{{/unless}}
{{/if}}
{{#if hasEffect}}<button>{{localize "DAGGERHEART.UI.Chat.attackRoll.applyEffect"}}</button>{{/if}}
{{#if hasEffect}}<button class="duality-action-effect">{{localize "DAGGERHEART.UI.Chat.attackRoll.applyEffect"}}</button>{{/if}}
</div>

View file

@ -1,4 +1,4 @@
<div class="roll-part damage-section dice-roll" data-action="expandRoll">{{log this}}
<div class="roll-part damage-section dice-roll" data-action="expandRoll">
<div class="roll-part-header"><div><span>Damage</span></div></div>
<div class="roll-part-extra on-reduced">
<div class="wrapper">

View file

@ -1,9 +1,9 @@
<div class="roll-part target-section dice-roll" data-action="expandRoll">
<div class="roll-part-header"><div><span>Target</span></div></div>
{{#if (and targets.length (or hasRoll (and hasSave pendingSaves)))}}{{log this}}
{{#if (and targets.length (or (or (gt targetShort.hit 0) (gt targetShort.miss 0)) (and hasSave pendingSaves)))}}
<div class="roll-part-extra on-reduced">
<div class="wrapper">
{{#if hasRoll}}
{{#if (or (gt targetShort.hit 0) (gt targetShort.miss 0))}}
<div class="target-hit-status">{{targetShort.hit}} {{#if (gt targetShort.hit 1)}}{{localize "DAGGERHEART.GENERAL.hit.single"}}{{else}}{{localize "DAGGERHEART.GENERAL.hit.plural"}}{{/if}}</div>
<div class="target-hit-status is-miss">{{targetShort.miss}} {{#if (gt targetShort.miss 1)}}{{localize "DAGGERHEART.GENERAL.miss.single"}}{{else}}{{localize "DAGGERHEART.GENERAL.miss.plural"}}{{/if}}</div>
{{/if}}
@ -29,7 +29,7 @@
<div class="roll-target" data-token="{{id}}">
<img class="target-img" src="{{img}}">
<div class="target-data">
<div class="target-name">{{name}}</div>
<div class="target-name" data-perm-id="{{actorId}}">{{name}}</div>
{{#if (and ../targetSelection ../hasRoll)}}
<div class="target-hit-status {{#if hit}}is-hit{{else}}is-miss{{/if}}">
{{#if hit}}