From ae65b5750fd1174089f7eb94837a94538356f659 Mon Sep 17 00:00:00 2001 From: walcutt Date: Fri, 23 May 2025 12:40:40 -0400 Subject: [PATCH 01/15] Remove heat --- module/data-models.mjs | 8 ---- module/helpers/update-helper.mjs | 12 ++++- module/sheets/hench-actor-sheet.mjs | 1 - templates/actors/boss.hbs | 70 ----------------------------- 4 files changed, 11 insertions(+), 80 deletions(-) diff --git a/module/data-models.mjs b/module/data-models.mjs index 1f2c630..7e90215 100644 --- a/module/data-models.mjs +++ b/module/data-models.mjs @@ -123,8 +123,6 @@ export class BossDataModel extends foundry.abstract.TypeDataModel { details: cappedArrayField(promptField(), 4), storyline: new StringField({ required: true, blank: false, initial: nullStorylineKey, options: storylineKeys}), - heat: new NumberField({ required: true, integer: true, min: 0, initial: 0, max: 18}), - experienceTriggers: cappedArrayField(markableField(), 4), experience: new NumberField({ required: true, integer: true, min: 0, initial: 0, max: 5 }), @@ -144,10 +142,4 @@ export class BossDataModel extends foundry.abstract.TypeDataModel { return this.updateSource(initMutation); } - - get tier() { - const divisor = 18 / 3; - - return Math.ceil(this.heat / divisor); - } } \ No newline at end of file diff --git a/module/helpers/update-helper.mjs b/module/helpers/update-helper.mjs index ce0edaf..9eab12c 100644 --- a/module/helpers/update-helper.mjs +++ b/module/helpers/update-helper.mjs @@ -4,15 +4,17 @@ export const versions = { UNDEFINED: undefined, DRAFT_0: '0', DRAFT_1: '1', + DRAFT_2: '2', }; -export const CURRENT_VERSION = versions.DRAFT_1; +export const CURRENT_VERSION = versions.DRAFT_2; const updateMap = { [versions.UNDEFINED]: versions.DRAFT_0, [versions.EMPTY]: versions.DRAFT_0, [versions.NULL]: versions.DRAFT_0, [versions.DRAFT_0]: versions.DRAFT_1, + [versions.DRAFT_1]: versions.DRAFT_2, }; const updateWarnings = { @@ -24,6 +26,14 @@ const updateWarnings = {
  • You delete and recreate your deck, or update the Ace of Diamonds and add a joker.
  • `, }, + [versions.DRAFT_2]: { + title: `Draft 2 update!`, + content: `The module is now compatible with Draft 2. Due to these changes, we recommend: + + `, + } }; function getWarningsSinceVersion(oldVersion) { diff --git a/module/sheets/hench-actor-sheet.mjs b/module/sheets/hench-actor-sheet.mjs index 0032c10..2455530 100644 --- a/module/sheets/hench-actor-sheet.mjs +++ b/module/sheets/hench-actor-sheet.mjs @@ -19,7 +19,6 @@ export class HenchActorSheet extends ActorSheet { // TODO define system constants for these context.maxStress = 8; context.maxExp = 5; - context.maxHeat = 18; context.minGear = 3; context.maxGear = 5; diff --git a/templates/actors/boss.hbs b/templates/actors/boss.hbs index 629ce38..355415f 100644 --- a/templates/actors/boss.hbs +++ b/templates/actors/boss.hbs @@ -54,76 +54,6 @@ {{/each}} - -
    -
    -
    -
    - Heat -
    -
    - -
    -
    -
    -
    - Tier I -
    -
    -
    -
    - (Nuisance, low-stakes, local cops) -
    -
    -
    - {{#partialint2checkbox maxHeat actor.system.heat 0 6}} - - {{/partialint2checkbox}} -
    -
    -
    - -
    -
    -
    -
    - Tier II -
    -
    -
    -
    - (Full-time, classic stakes, local super) -
    -
    -
    - {{#partialint2checkbox maxHeat actor.system.heat 6 12}} - - {{/partialint2checkbox}} -
    -
    -
    - -
    -
    -
    -
    - Tier III -
    -
    -
    -
    - (Top-class, high-stakes, world's finest heroes) -
    -
    -
    - {{#partialint2checkbox maxHeat actor.system.heat 12 18}} - - {{/partialint2checkbox}} -
    -
    -
    -
    -
    From 5f031ffef4e146680c6ff8bbe15a9a2f3af2dc0f Mon Sep 17 00:00:00 2001 From: walcutt Date: Fri, 23 May 2025 13:00:45 -0400 Subject: [PATCH 02/15] Update cues --- presets/dark.json | 208 +++++---------------------------------------- presets/light.json | 208 +++++---------------------------------------- 2 files changed, 40 insertions(+), 376 deletions(-) diff --git a/presets/dark.json b/presets/dark.json index 8937cba..8d9a771 100644 --- a/presets/dark.json +++ b/presets/dark.json @@ -1,7 +1,7 @@ { "name": "Hench Deck", "type": "deck", - "description": "A standard 52-card deck of playing cards.", + "description": "The starting deck for Hench, dark mode.", "img": "cards/backs/dark-gold.webp", "cards": [ { @@ -46,48 +46,6 @@ "lastModifiedBy": null } }, - { - "name": "Ace of Clubs", - "faces": [ - { - "name": "Ace of Clubs", - "img": "cards/dark-gold/clubs-ace.webp", - "text": "" - } - ], - "width": 2, - "height": 3, - "rotation": 0, - "type": "base", - "value": 1, - "suit": "clubs", - "_id": "KK1BiXxu1gg62jvZ", - "description": "", - "face": 0, - "drawn": false, - "sort": 21, - "flags": {}, - "back": { - "name": "", - "text": "", - "img": null - }, - "origin": "ye4k4c8ILOXk4prz", - "system": { - "cue": "A perfect piece for your master plan.", - "zone": "DECK" - }, - "_stats": { - "compendiumSource": null, - "duplicateSource": null, - "coreVersion": "12.331", - "systemId": "hench", - "systemVersion": "0.0.0", - "createdTime": null, - "modifiedTime": null, - "lastModifiedBy": null - } - }, { "name": "Two of Clubs", "faces": [ @@ -116,7 +74,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You uncover hidden strings.", + "cue": "You discover a weakness.", "zone": "DECK" }, "_stats": { @@ -158,7 +116,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You see a weakness, just out of reach.", + "cue": "You miss some details.", "zone": "DECK" }, "_stats": { @@ -200,7 +158,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You miss some details.", + "cue": "Someone gets the drop on you.", "zone": "DECK" }, "_stats": { @@ -284,49 +242,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You’ve fallen for the trap.", - "zone": "DECK" - }, - "_stats": { - "compendiumSource": null, - "duplicateSource": null, - "coreVersion": "12.331", - "systemId": "hench", - "systemVersion": "0.0.0", - "createdTime": null, - "modifiedTime": null, - "lastModifiedBy": null - } - }, - { - "name": "Ace of Spades", - "faces": [ - { - "name": "Ace of Spades", - "img": "cards/dark-gold/spades-ace.webp", - "text": "" - } - ], - "width": 2, - "height": 3, - "rotation": 0, - "type": "base", - "value": 1, - "suit": "spades", - "_id": "j6p6HBs1pACTX3a4", - "description": "", - "face": 0, - "drawn": false, - "sort": 12, - "flags": {}, - "back": { - "name": "", - "text": "", - "img": null - }, - "origin": "ye4k4c8ILOXk4prz", - "system": { - "cue": "You are the beatdown.", + "cue": "The trap closes in around you.", "zone": "DECK" }, "_stats": { @@ -368,7 +284,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "They cower in fear.", + "cue": "You win without a struggle.", "zone": "DECK" }, "_stats": { @@ -410,7 +326,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You win without a fight.", + "cue": "The fight becomes fair.", "zone": "DECK" }, "_stats": { @@ -452,7 +368,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "It’s an all-out brawl.", + "cue": "It's an all out brawl.", "zone": "DECK" }, "_stats": { @@ -494,7 +410,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You run from the pain.", + "cue": "You're down, but not yet out.", "zone": "DECK" }, "_stats": { @@ -536,49 +452,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "It breaks you.", - "zone": "DECK" - }, - "_stats": { - "compendiumSource": null, - "duplicateSource": null, - "coreVersion": "12.331", - "systemId": "hench", - "systemVersion": "0.0.0", - "createdTime": null, - "modifiedTime": null, - "lastModifiedBy": null - } - }, - { - "name": "Ace of Diamonds", - "faces": [ - { - "name": "Ace of Diamonds", - "img": "cards/dark-gold/diamonds-ace.webp", - "text": "" - } - ], - "width": 2, - "height": 3, - "rotation": 0, - "type": "base", - "value": 1, - "suit": "diamonds", - "_id": "jSk55TE6sIwjA17y", - "description": "", - "face": 0, - "drawn": false, - "sort": 17, - "flags": {}, - "back": { - "name": "", - "text": "", - "img": null - }, - "origin": "ye4k4c8ILOXk4prz", - "system": { - "cue": "You get exactly what you've been looking for.", + "cue": "The job breaks you.", "zone": "DECK" }, "_stats": { @@ -620,7 +494,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You take what you need.", + "cue": "You find something useful.", "zone": "DECK" }, "_stats": { @@ -662,7 +536,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You make it work with what you have.", + "cue": "You stop something that looks important.", "zone": "DECK" }, "_stats": { @@ -704,7 +578,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "The target slips your grasp.", + "cue": "You lose something of yours.", "zone": "DECK" }, "_stats": { @@ -746,7 +620,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You left something critical behind.", + "cue": "You break something you need.", "zone": "DECK" }, "_stats": { @@ -788,49 +662,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You lose your prized possession.", - "zone": "DECK" - }, - "_stats": { - "compendiumSource": null, - "duplicateSource": null, - "coreVersion": "12.331", - "systemId": "hench", - "systemVersion": "0.0.0", - "createdTime": null, - "modifiedTime": null, - "lastModifiedBy": null - } - }, - { - "name": "Ace of Hearts", - "faces": [ - { - "name": "Ace of Hearts", - "img": "cards/dark-gold/hearts-ace.webp", - "text": "" - } - ], - "width": 2, - "height": 3, - "rotation": 0, - "type": "base", - "value": 1, - "suit": "hearts", - "_id": "BcXIqwaqGJLlhKhn", - "description": "", - "face": 0, - "drawn": false, - "sort": 4, - "flags": {}, - "back": { - "name": "", - "text": "", - "img": null - }, - "origin": "ye4k4c8ILOXk4prz", - "system": { - "cue": "Everyone will love you for this.", + "cue": "You fumble something dear to the boss.", "zone": "DECK" }, "_stats": { @@ -872,7 +704,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You earn their approval.", + "cue": "You exceed the Boss's expectations.", "zone": "DECK" }, "_stats": { @@ -914,7 +746,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You take on the danger for your friends.", + "cue": "You become the center of attention.", "zone": "DECK" }, "_stats": { @@ -956,7 +788,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You hurt the bystanders.", + "cue": "You besmirch your reputation.", "zone": "DECK" }, "_stats": { @@ -998,7 +830,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You besmirch your reputation.", + "cue": "You are faced with the worst possible choices.", "zone": "DECK" }, "_stats": { @@ -1072,7 +904,7 @@ "_stats": { "coreVersion": "12.331", "systemId": "hench", - "systemVersion": "0.0.0", + "systemVersion": "0.1.0", "createdTime": 1735270640335, "modifiedTime": 1735271619021, "lastModifiedBy": "qwaGMJc5w5shBqR1" diff --git a/presets/light.json b/presets/light.json index 9ed7e56..0137f25 100644 --- a/presets/light.json +++ b/presets/light.json @@ -1,7 +1,7 @@ { "name": "Hench Deck", "type": "deck", - "description": "A standard 52-card deck of playing cards.", + "description": "The starting deck for Hench, light mode.", "img": "cards/backs/light-soft.webp", "cards": [ { @@ -46,48 +46,6 @@ "lastModifiedBy": null } }, - { - "name": "Ace of Clubs", - "faces": [ - { - "name": "Ace of Clubs", - "img": "cards/light-soft/clubs-ace.webp", - "text": "" - } - ], - "width": 2, - "height": 3, - "rotation": 0, - "type": "base", - "value": 1, - "suit": "clubs", - "_id": "KK1BiXxu1gg62jvZ", - "description": "", - "face": 0, - "drawn": false, - "sort": 21, - "flags": {}, - "back": { - "name": "", - "text": "", - "img": null - }, - "origin": "ye4k4c8ILOXk4prz", - "system": { - "cue": "A perfect piece for your master plan.", - "zone": "DECK" - }, - "_stats": { - "compendiumSource": null, - "duplicateSource": null, - "coreVersion": "12.331", - "systemId": "hench", - "systemVersion": "0.0.0", - "createdTime": null, - "modifiedTime": null, - "lastModifiedBy": null - } - }, { "name": "Two of Clubs", "faces": [ @@ -116,7 +74,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You uncover hidden strings.", + "cue": "You discover a weakness.", "zone": "DECK" }, "_stats": { @@ -158,7 +116,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You see a weakness, just out of reach.", + "cue": "You miss some details.", "zone": "DECK" }, "_stats": { @@ -200,7 +158,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You miss some details.", + "cue": "Someone gets the drop on you.", "zone": "DECK" }, "_stats": { @@ -284,49 +242,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You’ve fallen for the trap.", - "zone": "DECK" - }, - "_stats": { - "compendiumSource": null, - "duplicateSource": null, - "coreVersion": "12.331", - "systemId": "hench", - "systemVersion": "0.0.0", - "createdTime": null, - "modifiedTime": null, - "lastModifiedBy": null - } - }, - { - "name": "Ace of Spades", - "faces": [ - { - "name": "Ace of Spades", - "img": "cards/light-soft/spades-ace.webp", - "text": "" - } - ], - "width": 2, - "height": 3, - "rotation": 0, - "type": "base", - "value": 1, - "suit": "spades", - "_id": "j6p6HBs1pACTX3a4", - "description": "", - "face": 0, - "drawn": false, - "sort": 12, - "flags": {}, - "back": { - "name": "", - "text": "", - "img": null - }, - "origin": "ye4k4c8ILOXk4prz", - "system": { - "cue": "You are the beatdown.", + "cue": "The trap closes in around you.", "zone": "DECK" }, "_stats": { @@ -368,7 +284,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "They cower in fear.", + "cue": "You win without a struggle.", "zone": "DECK" }, "_stats": { @@ -410,7 +326,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You win without a fight.", + "cue": "The fight becomes fair.", "zone": "DECK" }, "_stats": { @@ -452,7 +368,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "It’s an all-out brawl.", + "cue": "It's an all out brawl.", "zone": "DECK" }, "_stats": { @@ -494,7 +410,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You run from the pain.", + "cue": "You're down, but not yet out.", "zone": "DECK" }, "_stats": { @@ -536,49 +452,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "It breaks you.", - "zone": "DECK" - }, - "_stats": { - "compendiumSource": null, - "duplicateSource": null, - "coreVersion": "12.331", - "systemId": "hench", - "systemVersion": "0.0.0", - "createdTime": null, - "modifiedTime": null, - "lastModifiedBy": null - } - }, - { - "name": "Ace of Diamonds", - "faces": [ - { - "name": "Ace of Diamonds", - "img": "cards/light-soft/diamonds-ace.webp", - "text": "" - } - ], - "width": 2, - "height": 3, - "rotation": 0, - "type": "base", - "value": 1, - "suit": "diamonds", - "_id": "jSk55TE6sIwjA17y", - "description": "", - "face": 0, - "drawn": false, - "sort": 17, - "flags": {}, - "back": { - "name": "", - "text": "", - "img": null - }, - "origin": "ye4k4c8ILOXk4prz", - "system": { - "cue": "You get exactly what you've been looking for.", + "cue": "The job breaks you.", "zone": "DECK" }, "_stats": { @@ -620,7 +494,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You take what you need.", + "cue": "You find something useful.", "zone": "DECK" }, "_stats": { @@ -662,7 +536,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You make it work with what you have.", + "cue": "You stop something that looks important.", "zone": "DECK" }, "_stats": { @@ -704,7 +578,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "The target slips your grasp.", + "cue": "You lose something of yours.", "zone": "DECK" }, "_stats": { @@ -746,7 +620,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You left something critical behind.", + "cue": "You break something you need.", "zone": "DECK" }, "_stats": { @@ -788,49 +662,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You lose your prized possession.", - "zone": "DECK" - }, - "_stats": { - "compendiumSource": null, - "duplicateSource": null, - "coreVersion": "12.331", - "systemId": "hench", - "systemVersion": "0.0.0", - "createdTime": null, - "modifiedTime": null, - "lastModifiedBy": null - } - }, - { - "name": "Ace of Hearts", - "faces": [ - { - "name": "Ace of Hearts", - "img": "cards/light-soft/hearts-ace.webp", - "text": "" - } - ], - "width": 2, - "height": 3, - "rotation": 0, - "type": "base", - "value": 1, - "suit": "hearts", - "_id": "BcXIqwaqGJLlhKhn", - "description": "", - "face": 0, - "drawn": false, - "sort": 4, - "flags": {}, - "back": { - "name": "", - "text": "", - "img": null - }, - "origin": "ye4k4c8ILOXk4prz", - "system": { - "cue": "Everyone will love you for this.", + "cue": "You fumble something dear to the boss.", "zone": "DECK" }, "_stats": { @@ -872,7 +704,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You earn their approval.", + "cue": "You exceed the Boss's expectations.", "zone": "DECK" }, "_stats": { @@ -914,7 +746,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You take on the danger for your friends.", + "cue": "You become the center of attention.", "zone": "DECK" }, "_stats": { @@ -956,7 +788,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You hurt the bystanders.", + "cue": "You besmirch your reputation.", "zone": "DECK" }, "_stats": { @@ -998,7 +830,7 @@ }, "origin": "ye4k4c8ILOXk4prz", "system": { - "cue": "You besmirch your reputation.", + "cue": "You are faced with the worst possible choices.", "zone": "DECK" }, "_stats": { @@ -1072,7 +904,7 @@ "_stats": { "coreVersion": "12.331", "systemId": "hench", - "systemVersion": "0.0.0", + "systemVersion": "0.1.0", "createdTime": 1735270640335, "modifiedTime": 1735271619021, "lastModifiedBy": "qwaGMJc5w5shBqR1" From 5f0361588ad2f91892cb05594bb29202888ad016 Mon Sep 17 00:00:00 2001 From: walcutt Date: Fri, 23 May 2025 13:01:59 -0400 Subject: [PATCH 03/15] Add update message --- module/helpers/update-helper.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/module/helpers/update-helper.mjs b/module/helpers/update-helper.mjs index 9eab12c..a80453f 100644 --- a/module/helpers/update-helper.mjs +++ b/module/helpers/update-helper.mjs @@ -31,6 +31,7 @@ const updateWarnings = { content: `The module is now compatible with Draft 2. Due to these changes, we recommend:
    • You create new character sheets for Henches and Bosses, and delete the old ones.
    • +
    • You delete and recreate your deck, as most cues have changed.
    `, } From a1d4e0740826b9151a9f88a7e93c8635221ac918 Mon Sep 17 00:00:00 2001 From: walcutt Date: Fri, 23 May 2025 13:18:25 -0400 Subject: [PATCH 04/15] Add locked moves for pre-selected moves --- module/boss.mjs | 1 + module/data-models.mjs | 1 + module/playbooks.mjs | 21 ++++++++++++++------- templates/actors/boss.hbs | 2 +- templates/actors/hench.hbs | 2 +- 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/module/boss.mjs b/module/boss.mjs index 83ac602..765162b 100644 --- a/module/boss.mjs +++ b/module/boss.mjs @@ -35,6 +35,7 @@ const bossData = { moves: [ { marked: true, + locked: true, name: "Force of Will", description: `Whenever you act, do not draw. Simply declare what you do, and what happens after.`, hasWriteIn: false, diff --git a/module/data-models.mjs b/module/data-models.mjs index 7e90215..21052a6 100644 --- a/module/data-models.mjs +++ b/module/data-models.mjs @@ -30,6 +30,7 @@ const cappedArrayField = (innerField, maxSize, defaultValue = undefined) => new const moveField = () => new SchemaField({ marked: new BooleanField({ required: true, initial: false }), + locked: new BooleanField({ required: false, initial: false }), name: textField(), description: textField(), hasWriteIn: new BooleanField({ required: true, initial: false }), diff --git a/module/playbooks.mjs b/module/playbooks.mjs index 22f244b..040f9dd 100644 --- a/module/playbooks.mjs +++ b/module/playbooks.mjs @@ -183,7 +183,8 @@ const playbooks = { writeIn: null, }, { - marked: false, + marked: true, + locked: true, name: "Forum Lurker", description: `As a prep action you can trawl the web for information about a piece of the setting. State a single fact about this thing and draw. Ignore the cue, and use the rank:
      @@ -282,7 +283,8 @@ const playbooks = { writeIn: null, }, { - marked: false, + marked: true, + locked: true, name: "Like Old Times", description: `As a prep action, you can take an old friend out on the town. Describe how things were between you, back in the day and how you spend time with them now. Then, draw. Ignore the cue, and use the rank:
        @@ -377,7 +379,8 @@ const playbooks = { writeIn: null, }, { - marked: false, + marked: true, + locked: true, name: "Logistics", description: `As a prep action you may tap your connections to procure something unusual. State what you're trying to find, then draw. Ignore the cue, and instead use the rank:
          @@ -466,7 +469,8 @@ const playbooks = { writeIn: null, }, { - marked: false, + marked: true, + locked: true, name: "Friends in Low Places", description: `As a prep action, you can ask an underworld contact to complete an unusual favor. State what you want, then draw. Ignore the cue, and instead use the rank:
            @@ -555,7 +559,8 @@ const playbooks = { writeIn: null, }, { - marked: false, + marked: true, + locked: true, name: "Eavesdropper", description: `As a prep action, you can lurk around where you shouldn't be and listen for secrets. Choose a target or an ally, then draw. Ignore the cue, and instead use the rank:
              @@ -644,7 +649,8 @@ const playbooks = { writeIn: null, }, { - marked: false, + marked: true, + locked: true, name: "Understudy", description: `As a prep action, you can take some henches on a minor crime spree. Explain your petty crimes, then draw. Ignore the cue, and instead use the rank:
                @@ -733,7 +739,8 @@ const playbooks = { writeIn: null, }, { - marked: false, + marked: true, + locked: true, name: "Hobbyist", description: `As a prep action, you can invite a fellow hench to join you in your hobby. Name the hobby, and how they're involved, then draw. Ignore the cue, and instead use the rank:
                  diff --git a/templates/actors/boss.hbs b/templates/actors/boss.hbs index 355415f..7392fb2 100644 --- a/templates/actors/boss.hbs +++ b/templates/actors/boss.hbs @@ -90,7 +90,7 @@ {{#each actor.system.moves}}
                  - +
                  diff --git a/templates/actors/hench.hbs b/templates/actors/hench.hbs index 20e8c48..d4677f1 100644 --- a/templates/actors/hench.hbs +++ b/templates/actors/hench.hbs @@ -230,7 +230,7 @@ {{#each actor.system.moves}}
                  - +
                  From c4b97cf3f6cc0a5bdea11e49b9f8ca83b5d9f986 Mon Sep 17 00:00:00 2001 From: walcutt Date: Fri, 23 May 2025 13:20:46 -0400 Subject: [PATCH 05/15] Superfan update --- module/playbooks.mjs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/module/playbooks.mjs b/module/playbooks.mjs index 040f9dd..2ddf7be 100644 --- a/module/playbooks.mjs +++ b/module/playbooks.mjs @@ -151,12 +151,11 @@ const playbooks = { { marked: false, name: "Encyclopedic Knowledge", - description: `When you first meet a new heroic or villainous character, The Boss may ask you one of the following. You've heard of them before: answer. Whatever you state is true. + description: `When you first meet a new heroic or villainous character, you can decide you've heard of them before, and choose to answer one of the below. Whatever you state is true.
                  • What is their power?
                  • Why are they here?
                  • Who do they work with?
                  • -
                  • Any yes or no question.
                  `, hasWriteIn: false, writeIn: null, @@ -171,7 +170,7 @@ const playbooks = { { marked: false, name: "Just an Average Citizen", - description: `When you are out of uniform no one will suspect you are a henchman until you reveal yourself or act with violence.`, + description: `When you are out of uniform no one can identify you as a henchman until you reveal yourself or act with violence.`, hasWriteIn: false, writeIn: null, }, @@ -186,7 +185,7 @@ const playbooks = { marked: true, locked: true, name: "Forum Lurker", - description: `As a prep action you can trawl the web for information about a piece of the setting. State a single fact about this thing and draw. Ignore the cue, and use the rank: + description: `As a prep action you can trawl the web for information about a piece of the setting. State a single fact about this thing and draw 2. Ignore the cue, and use the rank:
                  • 1-2 — You learn your information is correct but flawed.
                  • 3-6 — You learn your information is false but holds a kernel of truth.
                  • From c9393f9e3777a627dabb66765fb3ed7c805b5ece Mon Sep 17 00:00:00 2001 From: walcutt Date: Fri, 23 May 2025 13:23:00 -0400 Subject: [PATCH 06/15] Badass update --- module/playbooks.mjs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/module/playbooks.mjs b/module/playbooks.mjs index 2ddf7be..03d999d 100644 --- a/module/playbooks.mjs +++ b/module/playbooks.mjs @@ -261,7 +261,7 @@ const playbooks = {
                  • Quick
                  • Unbreakable
                  • Explosive
                  • -
                  • Explosive
                  • +
                  • Untraceable
                  • Sniping
                  `, hasWriteIn: true, @@ -284,12 +284,12 @@ const playbooks = { { marked: true, locked: true, - name: "Like Old Times", - description: `As a prep action, you can take an old friend out on the town. Describe how things were between you, back in the day and how you spend time with them now. Then, draw. Ignore the cue, and use the rank: + name: "Phone a Friend", + description: `As a prep action, you can ask an old friend to complete a favor. State what you want, then draw 2. Ignore the cue, and instead use the rank:
                    -
                  • 1-2 — They want back on your good side. What is the same? What is different now?
                  • -
                  • 3-4 — They might forgive you. What did you do to hurt them?
                  • -
                  • 5-6 — Things will never be the same as they used to be. Why?
                  • +
                  • 1-2 — They do it cleanly.
                  • +
                  • 3-4 — They do it sloppily. A new complication arises.
                  • +
                  • 5-6 — You get roped into doing a favor for them during the next mission. If you fail to follow through, take 2 harm, “Damaged Reputation.”
                  `, hasWriteIn: false, writeIn: null, From 864784b3942c73a4ce9217289bc0cd1fcf6b291e Mon Sep 17 00:00:00 2001 From: walcutt Date: Fri, 23 May 2025 13:33:34 -0400 Subject: [PATCH 07/15] Inventor update --- module/playbooks.mjs | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/module/playbooks.mjs b/module/playbooks.mjs index 03d999d..646d304 100644 --- a/module/playbooks.mjs +++ b/module/playbooks.mjs @@ -312,7 +312,7 @@ const playbooks = { "Doing something unexpected", ], missionPlanningQuestions: [ - "Present your new prototype weapon, which the target is probably weak to.", + "Explain an unconventional or secret weakness of the target.”", "State a fact about the target's defense systems.", "Ask the boss: what secret research is the target hiding?", ], @@ -345,16 +345,10 @@ const playbooks = { moves: [ { marked: false, - name: "Always Prepared", - description: `At the beginning of the action, write a new piece of gear in below. Choose one flaw. You may use this gear this mission, without counting towards your slots. At the end of the mission, erase it. -
                    -
                  • Inaccurate
                  • -
                  • Slow
                  • -
                  • Unstable
                  • -
                  • Cumbersome
                  • -
                  `, - hasWriteIn: true, - writeIn: "", + name: "Unorthodox", + description: `When you use your gear in a manner other than its intended purpose, and you play a 2, 3, or face card, clear 3 stress.`, + hasWriteIn: false, + writeIn: null, }, { marked: false, @@ -365,8 +359,8 @@ const playbooks = { }, { marked: false, - name: "Packmule", - description: `Gain +1 gear slot. Your teammates can mark gear from your sheet, if you let them.`, + name: "Hammerspace", + description: `You can mark any number of gear slots.`, hasWriteIn: false, writeIn: null, }, @@ -380,15 +374,22 @@ const playbooks = { { marked: true, locked: true, - name: "Logistics", - description: `As a prep action you may tap your connections to procure something unusual. State what you're trying to find, then draw. Ignore the cue, and instead use the rank: + name: "Always Prepared", + description: `As a prep action, you can design a new prototype invention. Write it in below and pick 1 flaw. You may use it as gear this mission. Then, draw 2. Ignore the cue, and use the rank:
                    -
                  • 1-2 — You find a source in ample supply. However much you need, you got.
                  • -
                  • 3-4 — You're able to squeeze out a sample. You have barely enough to work with.
                  • -
                  • 5-6 — You catch trouble. Mark 2 heat.
                  • +
                  • 1-2 — You make enough prototypes for the whole team to use. Each player may write it in as an extra gear option for this mission.
                  • +
                  • 3-4 — You're able to make one for yourself.
                  • +
                  • 5-6 — You barely get it out of the lab. Pick an additional flaw.
                  • +
                  +

                  Flaws:

                  +
                    +
                  • Inaccurate
                  • +
                  • Slow
                  • +
                  • Unstable
                  • +
                  • Cumbersome
                  `, - hasWriteIn: false, - writeIn: null, + hasWriteIn: true, + writeIn: "", }, ], }, From 0547d09d8a24544e636dcb1557aa07e043b29464 Mon Sep 17 00:00:00 2001 From: walcutt Date: Fri, 23 May 2025 13:39:13 -0400 Subject: [PATCH 08/15] Demoted update --- module/playbooks.mjs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/module/playbooks.mjs b/module/playbooks.mjs index 646d304..1e563d7 100644 --- a/module/playbooks.mjs +++ b/module/playbooks.mjs @@ -457,7 +457,7 @@ const playbooks = { { marked: false, name: "I've Seen Worse", - description: `During The Action, you can help another character. Describe a similar memory from your past that has prepared you for this moment. They take +1 to their draw (possibly up to 4 cards), and you take one stress.`, + description: `When you team up with a fellow hench, describe a similar memory from your past that has prepared you for this moment. Take +1 to the draw (possibly up to 4 cards), and you take one stress.`, hasWriteIn: false, writeIn: null, }, @@ -471,12 +471,12 @@ const playbooks = { { marked: true, locked: true, - name: "Friends in Low Places", - description: `As a prep action, you can ask an underworld contact to complete an unusual favor. State what you want, then draw. Ignore the cue, and instead use the rank: + name: "Like Old Times", + description: `As a prep action, you can take some henches on a minor crime spree. Explain your petty crimes, then draw 2. Ignore the cue, and instead use the rank:
                    -
                  • 1-2 — They phone it in, but they do it.
                  • -
                  • 3-4 — They do it sloppily. A new complication arises.
                  • -
                  • 5-6 — You get roped into doing a favor for them during the next mission. If you fail to follow through, take 2 harm, "Damaged Reputation."
                  • +
                  • 1-2 — You stir up some recognition and pride. Mark 2 experience, and describe something you've found on the scene.
                  • +
                  • 3-4 — The night is a blur. Mark 1 experience, then describe something you've lost, and something you’ve gained.
                  • +
                  • 5-6 — You cause a complete ruckus. When you draw engagement, treat the result as one level worse. How have you put the mission in jeopardy?
                  `, hasWriteIn: false, writeIn: null, From 7a0d87a25864c71b341c43e1893cdf702dbe7b89 Mon Sep 17 00:00:00 2001 From: walcutt Date: Fri, 23 May 2025 13:39:53 -0400 Subject: [PATCH 09/15] Outcast update --- module/playbooks.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/module/playbooks.mjs b/module/playbooks.mjs index 1e563d7..1c2de73 100644 --- a/module/playbooks.mjs +++ b/module/playbooks.mjs @@ -531,7 +531,7 @@ const playbooks = { ], moves: [ { - marked: true, + marked: false, name: "Teacher's Pet", description: `You live at the base, and are specially favored by the boss. Describe a privilege that only you receive. You cannot clock out.`, hasWriteIn: true, @@ -554,7 +554,7 @@ const playbooks = { { marked: false, name: "Folie à Deux", - description: `At the beginning of the action, choose another hench. Whenever they help you or show support, clear 1 stress. Whenever they fail or are hurt, take 1 stress.`, + description: `At the beginning of the action, choose another hench. Whenever they help you or show support, clear 2 stress. Whenever they fail or are hurt, take 2 stress.`, hasWriteIn: false, writeIn: null, }, @@ -562,7 +562,7 @@ const playbooks = { marked: true, locked: true, name: "Eavesdropper", - description: `As a prep action, you can lurk around where you shouldn't be and listen for secrets. Choose a target or an ally, then draw. Ignore the cue, and instead use the rank: + description: `As a prep action, you can lurk around where you shouldn't be and listen for secrets. Choose a target or an ally, then draw 2. Ignore the cue, and instead use the rank:
                  • 1-2 — You overhear something no one else knows - a future plan, a haunting deed, or their shame.
                  • 3-4 — You overhear a common rumor - a worst held secret, a trick they've pulled, or a romantic tryst.
                  • From e77da43e5c7c74c333e22148af98c9e2e195d6a2 Mon Sep 17 00:00:00 2001 From: walcutt Date: Fri, 23 May 2025 13:43:20 -0400 Subject: [PATCH 10/15] Usurper update --- module/playbooks.mjs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/module/playbooks.mjs b/module/playbooks.mjs index 1c2de73..a63d297 100644 --- a/module/playbooks.mjs +++ b/module/playbooks.mjs @@ -623,14 +623,14 @@ const playbooks = { { marked: false, name: "Defiant", - description: `When you act in opposition to the boss's orders, take 1 less stress if you resist consequences.`, + description: `When you act in opposition to the boss's orders, take 2 less stress if you resist consequences.`, hasWriteIn: false, writeIn: null, }, { marked: false, name: "Steal the Spotlight", - description: `When you claim the boss's actions as your own, clear 1 stress. If your audience believes you, clear 2.`, + description: `When you claim the boss's actions as your own, clear 2 stress. If your audience believes you, clear 3.`, hasWriteIn: false, writeIn: null, }, @@ -643,20 +643,20 @@ const playbooks = { }, { marked: false, - name: "Machinations", - description: `At the start of each mission, secretly note your own goal for this mission. When you complete it, reveal it, and take a free flashback to explain how it fits into your larger plans. Then, you may mark 2 ticks on any one of your tinker clocks.`, + name: "Splinter Cell", + description: `You have loyal henches on the team. When you take the team-building prep time action, you can draw 3 and hold two of the cards for the mission.`, hasWriteIn: false, writeIn: null, }, { marked: true, locked: true, - name: "Understudy", - description: `As a prep action, you can take some henches on a minor crime spree. Explain your petty crimes, then draw. Ignore the cue, and instead use the rank: + name: "Machinations", + description: `As a prep action, secretly note your own goal for this mission, and show it to the boss. During the mission, if you complete this goal, reveal it, then choose one:
                      -
                    • 1-2 — You stir up some recognition and pride. Clear 1 heat, and mark 1 tick on one of your tinker clocks.
                    • -
                    • 3-4 — The night is a blur. Describe something you've lost, and something you've gained.
                    • -
                    • 5-6 — You cause a complete ruckus. Mark 2 heat.
                    • +
                    • Clear all stress.
                    • +
                    • Reduce all marked harm by 1 level. (Level 1 harm is cleared).
                    • +
                    • Mark 2 ticks on one of your tinker clocks.
                    `, hasWriteIn: false, writeIn: null, From 81aa563cfabf1b1d6976bd3cf32407a82510dd80 Mon Sep 17 00:00:00 2001 From: walcutt Date: Fri, 23 May 2025 13:44:26 -0400 Subject: [PATCH 11/15] Timecard update --- module/playbooks.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/module/playbooks.mjs b/module/playbooks.mjs index a63d297..806e047 100644 --- a/module/playbooks.mjs +++ b/module/playbooks.mjs @@ -676,7 +676,7 @@ const playbooks = { ], fixedInclinations: [ "Invoking rules or regulations.", - "Taking the laziest approach.", + "Draw on skills from your mundane life.", ], missionPlanningQuestions: [ "State something that, by Guild rule, the target cannot do to you this mission.", @@ -742,9 +742,9 @@ const playbooks = { marked: true, locked: true, name: "Hobbyist", - description: `As a prep action, you can invite a fellow hench to join you in your hobby. Name the hobby, and how they're involved, then draw. Ignore the cue, and instead use the rank: + description: `As a prep action, you can invite a fellow hench to join you in your hobby. Name the hobby, and how they're involved, then draw 2. Ignore the cue, and instead use the rank:
                      -
                    • 1-2 — You have a wonderful time and brighten each others' spirits. Gain +1 card to your next home life draw.
                    • +
                    • 1-2 — You have a wonderful time and brighten each others' spirits. You each clear 2 stress.
                    • 3-4 — You have a pleasant, but ordinary, time. Clear 1 stress; they mark 1 experience.
                    • 5-6 — You completely lose track of time. Lose a remaining prep action, or take 1 harm "sleep deprived."
                    `, From 53d04e677c35328c797bd5a4b2dab1faba7ca269 Mon Sep 17 00:00:00 2001 From: walcutt Date: Fri, 23 May 2025 13:46:23 -0400 Subject: [PATCH 12/15] Boss update --- module/boss.mjs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/module/boss.mjs b/module/boss.mjs index 765162b..c6cc8af 100644 --- a/module/boss.mjs +++ b/module/boss.mjs @@ -86,14 +86,14 @@ const bossData = { { marked: false, name: "Exceptional Planning", - description: `At the start of each mission, remove one card from the deck. Any time one of your henches draws, you may replace the card they play with the removed card.`, + description: `At the start of each mission, remove one card from the deck, then shuffle. When one of your henches draws, you may replace the card they play with the removed card.`, hasWriteIn: false, writeIn: null, }, { marked: false, - name: "Limelight Lovers", - description: `If your heat is in Tier III, your henches can take 1 stress to take +1 card to any draw (possibly drawing 4).`, + name: "Push the Limits", + description: `Your henches can take 2 stress to take +1 card to any draw (possibly drawing 4).`, hasWriteIn: false, writeIn: null, }, @@ -114,7 +114,7 @@ const bossData = { { marked: false, name: "Guild Bigwig", - description: `During fallout, you may draw a second time and use that card instead. Explain who intervenes on your behalf, and how.`, + description: `During engagement, you may draw a second time and use that card instead.`, hasWriteIn: false, writeIn: null, }, From 940db6cf4a2a11e85deac2cc8fa7cda0f2317a96 Mon Sep 17 00:00:00 2001 From: walcutt Date: Fri, 23 May 2025 15:16:22 -0400 Subject: [PATCH 13/15] Reminder text --- module/playbooks.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/module/playbooks.mjs b/module/playbooks.mjs index 806e047..5ca9896 100644 --- a/module/playbooks.mjs +++ b/module/playbooks.mjs @@ -246,7 +246,7 @@ const playbooks = { { marked: false, name: "Go Overboard", - description: `Once per session, when you throw yourself into overwhelming danger, you can treat any played card as -1 rank and ignore any harm as consequence. This does not extend to your team. (This doesn't reduce a 1 to a 0).`, + description: `Once per session, when you throw yourself into overwhelming danger, you can treat any played card as -1 rank and ignore any harm as consequence. This does not extend to your team. (This wont change the cue of a 2).`, hasWriteIn: false, writeIn: null, }, @@ -353,7 +353,7 @@ const playbooks = { { marked: false, name: "Wirey", - description: `Treat all played ♣ cards as -1 rank. Treat all played ♠ cards as +1 rank. (This won't turn a 1 into a 0, or a 6 into a 7).`, + description: `Treat all played ♣ cards as -1 rank. Treat all played ♠ cards as +1 rank. (This won't turn a 2 into a 1, or a 6 into a 7).`, hasWriteIn: false, writeIn: null, }, @@ -450,7 +450,7 @@ const playbooks = { { marked: false, name: "You're Dead, Kiddo", - description: `When you intimidate someone by describing a past villainous deed, treat any ♥ as -1 rank. (This won't turn an ace into a 0).`, + description: `When you intimidate someone by describing a past villainous deed, treat any ♥ as -1 rank. (This won't change the cue for a 2).`, hasWriteIn: false, writeIn: null, }, From 3cc11097b546d13a9eb90c79a5fff98235fa2787 Mon Sep 17 00:00:00 2001 From: walcutt Date: Fri, 23 May 2025 15:40:14 -0400 Subject: [PATCH 14/15] Add notes section for boss sheet --- module/data-models.mjs | 2 ++ styles/hench.css | 4 ++++ templates/actors/boss.hbs | 16 ++++++++++++++-- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/module/data-models.mjs b/module/data-models.mjs index 21052a6..4e2dde1 100644 --- a/module/data-models.mjs +++ b/module/data-models.mjs @@ -128,6 +128,8 @@ export class BossDataModel extends foundry.abstract.TypeDataModel { experience: new NumberField({ required: true, integer: true, min: 0, initial: 0, max: 5 }), moves: cappedArrayField(moveField(), 13), + + notes: textField(), }; } diff --git a/styles/hench.css b/styles/hench.css index 36147d6..03aaf09 100644 --- a/styles/hench.css +++ b/styles/hench.css @@ -210,4 +210,8 @@ columns: 2; -moz-columns: 2; -webkit-columns: 2; +} + +.hench-height-expand { + height: 100%; } \ No newline at end of file diff --git a/templates/actors/boss.hbs b/templates/actors/boss.hbs index 7392fb2..4372013 100644 --- a/templates/actors/boss.hbs +++ b/templates/actors/boss.hbs @@ -37,7 +37,7 @@
                    -
                    +
                    @@ -55,7 +55,7 @@
                    -
                    +
                    @@ -79,6 +79,18 @@ {{/each}}
                    +
                    +
                    +
                    +
                    + Notes +
                    +
                    +
                    + +
                    +
                    +
                    From b172a763e22b1226c05d36c079e0bc7447ad4056 Mon Sep 17 00:00:00 2001 From: walcutt Date: Mon, 26 May 2025 15:30:48 -0400 Subject: [PATCH 15/15] version update --- system.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system.json b/system.json index 235dde6..2af8f97 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "id": "hench", "title": "HENCH", "description": "HENCH (2025)", - "version": "0.1.0", + "version": "0.1.1", "compatibility": { "minimum": "12", "verified": "12" @@ -33,5 +33,5 @@ }, "url": "https://git.chloeherd.codes/walcutt/hench", "manifest": "https://git.chloeherd.codes/walcutt/hench/raw/branch/develop/system.json", - "download": "https://git.chloeherd.codes/walcutt/hench/archive/0.1.0.zip" + "download": "https://git.chloeherd.codes/walcutt/hench/archive/0.1.1.zip" } \ No newline at end of file