Skip to content

Commit 8e65576

Browse files
authored
Merge pull request #73 from asacolips-projects/feature/asacolips/harm-chat-improvements
Improve harm handling in chat, add wild surges
2 parents 5511538 + f3877e3 commit 8e65576

17 files changed

Lines changed: 1677 additions & 46 deletions

src/module/apps/roll-dialog.mjs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,16 @@ export class GrimwildRollDialog extends foundry.applications.api.DialogV2 {
153153
rollData.hasSpark = rollData.spark > 0;
154154
rollData.sparkArray = Array.from({ length: rollData.spark }, (_, i) => i);
155155
rollData.assistants = game.actors.filter((a) => a.type === "character" && a.name !== rollData.name).map((a) => a.name);
156+
// Add weapon mastery as an assistant.
157+
if (rollData.actor) {
158+
const path = rollData.actor.system.path;
159+
const weaponMastery = rollData.actor.itemTypes.talent.filter((t) => t.name.trim().toLowerCase()
160+
.includes("weapon mastery"));
161+
162+
if (path.trim().toLowerCase() === "fighter" || weaponMastery.length > 0) {
163+
rollData.assistants.push("Weapon Mastery");
164+
}
165+
}
156166

157167
options.content = await foundry.applications.handlebars.renderTemplate("systems/grimwild/templates/dialog/stat-roll.hbs", rollData);
158168
options.render = this._render;

src/module/data/actor-character.mjs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,8 @@ export default class GrimwildCharacter extends GrimwildActorBase {
303303
diceDefault: rollData?.stats?.[options.stat].value,
304304
isBloodied: rollData?.isBloodied,
305305
isRattled: rollData?.isRattled,
306-
isMarked: rollData?.stats?.[options.stat].marked
306+
isMarked: rollData?.stats?.[options.stat].marked,
307+
actor: this.parent
307308
}
308309
});
309310
// bail out if they closed the dialog
@@ -369,7 +370,7 @@ export default class GrimwildCharacter extends GrimwildActorBase {
369370
await combatant.setFlag("grimwild", "actionCount", actionCount + 1);
370371

371372
const actor = combatant.actor;
372-
await actor.update({"system.tokenActions.value": Math.max(actor.system.tokenActions.value - 1, 0)});
373+
await actor.update({ "system.tokenActions.value": Math.max(actor.system.tokenActions.value - 1, 0) });
373374

374375
// Update the active turn.
375376
const combatantTurn = combat.turns.findIndex((c) => c.id === combatant.id);

src/module/dice/rolls.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export default class GrimwildRoll extends Roll {
2121
total: isPrivate ? "?" : this.total,
2222
dice: this.dice[0].results,
2323
thorns: this.dice[1].results,
24+
stat: this.options?.stat ?? null,
2425
assists: {},
2526
crit: false,
2627
success: 0,

src/module/documents/chat-message.mjs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ export class GrimwildChatMessage extends ChatMessage {
7575
// Handle event listeners.
7676
const click = this.#onClick.bind(this);
7777
const sparkTakenArray = this.getFlag("grimwild", "sparkTaken") ?? [];
78-
const damageTakenArray = this.getFlag("grimwild", "damageTaken") ?? [];
78+
// const damageTakenArray = this.getFlag("grimwild", "damageTaken") ?? [];
7979
const sparkTaken = sparkTakenArray.includes(game.user.id);
80-
const damageTaken = damageTakenArray.includes(game.user.id);
80+
// const damageTaken = damageTakenArray.includes(game.user.id);
8181
html.querySelectorAll("[data-action]")?.forEach((element) => {
8282
const { action } = element.dataset;
8383
if (action === "updateSpark") {
@@ -87,10 +87,10 @@ export class GrimwildChatMessage extends ChatMessage {
8787
}
8888
}
8989
else if (["applyMark", "applyHarm"].includes(action)) {
90-
if (damageTaken) {
91-
element.setAttribute("disabled", true);
92-
return;
93-
}
90+
// if (damageTaken) {
91+
// element.setAttribute("disabled", true);
92+
// return;
93+
// }
9494
}
9595
element.addEventListener("click", click);
9696
});
@@ -256,7 +256,8 @@ export class GrimwildChatMessage extends ChatMessage {
256256
if (!actor.system[harm === "bloodied" ? "isBloodied" : "isRattled"]) {
257257
update[`system.${harm}.marked`] = true;
258258
if (harmPools) {
259-
update[`system.${harm}.pool.diceNum`] = 1;
259+
const newHarmPool = Math.min(actor.system[harm].pool.diceNum + 1, maxHarm);
260+
update[`system.${harm}.pool.diceNum`] = newHarmPool;
260261
}
261262
}
262263
else if (!harmPools || actor.system[harm].pool.diceNum >= maxHarm) {

src/module/documents/combat.mjs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export class GrimwildCombat extends foundry.documents.Combat {
4848
resetActions() {
4949
for (let combatant of this.combatants) {
5050
combatant.setFlag("grimwild", "actionCount", 0);
51-
combatant.actor.update({"system.tokenActions.value": 2});
51+
combatant.actor.update({ "system.tokenActions.value": 2 });
5252
}
5353
}
5454

@@ -185,8 +185,8 @@ export class GrimwildCombatTracker extends foundry.applications.sidebar.tabs.Com
185185
callback: (li) => {
186186
const combatant = getCombatant(li);
187187
if (combatant) {
188-
combatant?.setFlag("grimwild", "actionCount", 0)
189-
combatant?.actor.update({"system.tokenActions.value": 2});
188+
combatant?.setFlag("grimwild", "actionCount", 0);
189+
combatant?.actor.update({ "system.tokenActions.value": 2 });
190190
}
191191
}
192192
}, {

src/module/grimwild.mjs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ Hooks.once("ready", function () {
325325

326326
if (event.target?.classList.contains("create-crucible")) {
327327
event.preventDefault();
328-
const label = game.i18n.format("DOCUMENT.Create", {type: "Crucible Table"});
328+
const label = game.i18n.format("DOCUMENT.Create", { type: "Crucible Table" });
329329
try {
330330
const crucibleName = await foundry.applications.api.DialogV2.prompt({
331331
window: { title: label },
@@ -339,7 +339,7 @@ Hooks.once("ready", function () {
339339
callback: (event, button, dialog) => button.form.elements.name.value
340340
}
341341
});
342-
const defaultData = Array.fromRange(36,1).map(result => {
342+
const defaultData = Array.fromRange(36, 1).map((result) => {
343343
return {
344344
name: "",
345345
range: [result, result],
@@ -358,9 +358,9 @@ Hooks.once("ready", function () {
358358
}
359359
});
360360
}
361-
catch (error) {
361+
catch(error) {
362362
console.error(error);
363-
return;
363+
364364
}
365365
}
366366
});
@@ -383,7 +383,7 @@ Hooks.on("renderSceneControls", (application, html, data) => {
383383
Hooks.on("renderDocumentDirectory", (application, html, data) => {
384384
if (data.documentName === "RollTable") {
385385
html.querySelector(".header-actions").insertAdjacentHTML("afterbegin", `
386-
<button type="button" class="create-crucible" data-action="createCrucible"><i class="fas fa-grip"></i><span>${game.i18n.format("DOCUMENT.Create", {type: "Crucible"})}</span></button>
386+
<button type="button" class="create-crucible" data-action="createCrucible"><i class="fas fa-grip"></i><span>${game.i18n.format("DOCUMENT.Create", { type: "Crucible" })}</span></button>
387387
`);
388388
}
389389
});

src/module/sheets/item-sheet-vue.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export class GrimwildItemSheetVue extends VueRenderingMixin(GrimwildBaseVueItemS
4040
deleteTracker: this._deleteTracker,
4141
createArrayEntry: this._createArrayEntry,
4242
deleteArrayEntry: this._deleteArrayEntry,
43-
rollPool: this._rollPool,
43+
rollPool: this._rollPool
4444
// @TODO restore when crucibles are added back to talents.
4545
// rollCrucible: this._rollCrucible
4646
},

0 commit comments

Comments
 (0)