A repository for a FoundryVTT plugin for Kingmaker homebrew.

Moving this branch to typescript, may merge with main branch later

-252
lang/en.json src/lang/en.json
module.json src/module.json
-36
scripts/data/charters.json
··· 1 - [ 2 - { 3 - "id": "conquest", 4 - "boosts": [ 5 - "loyalty", 6 - "free" 7 - ] 8 - }, 9 - { 10 - "id": "expansion", 11 - "boosts": [ 12 - "culture", 13 - "free" 14 - ] 15 - }, 16 - { 17 - "id": "exploration", 18 - "boosts": [ 19 - "stability", 20 - "free" 21 - ] 22 - }, 23 - { 24 - "id": "grant", 25 - "boosts": [ 26 - "economy", 27 - "free" 28 - ] 29 - }, 30 - { 31 - "id": "open", 32 - "boosts": [ 33 - "free" 34 - ] 35 - } 36 - ]
-56
scripts/data/governments.json
··· 1 - [ 2 - { 3 - "id": "despotism", 4 - "boosts": [ 5 - "stability", 6 - "economy", 7 - "free" 8 - ], 9 - "feat": "crush-dissent" 10 - }, 11 - { 12 - "id": "feudalism", 13 - "boosts": [ 14 - "stability", 15 - "culture", 16 - "free" 17 - ], 18 - "feat": "fortified-fiefs" 19 - }, 20 - { 21 - "id": "oligarchy", 22 - "boosts": [ 23 - "loyalty", 24 - "economy", 25 - "free" 26 - ], 27 - "feat": "insider-trading" 28 - }, 29 - { 30 - "id": "republic", 31 - "boosts": [ 32 - "stability", 33 - "loyalty", 34 - "free" 35 - ], 36 - "feat": "pull-together" 37 - }, 38 - { 39 - "id": "thaumocracy", 40 - "boosts": [ 41 - "economy", 42 - "culture", 43 - "free" 44 - ], 45 - "feat": "practical-magic" 46 - }, 47 - { 48 - "id": "yeomanry", 49 - "boosts": [ 50 - "loyalty", 51 - "culture", 52 - "free" 53 - ], 54 - "feat": "muddle-through" 55 - } 56 - ]
-18
scripts/data/heartlands.json
··· 1 - [ 2 - { 3 - "id": "forest-swamp", 4 - "boost": "culture" 5 - }, 6 - { 7 - "id": "hill-plain", 8 - "boost": "loyalty" 9 - }, 10 - { 11 - "id": "lake-river", 12 - "boost": "economy" 13 - }, 14 - { 15 - "id": "mountain-ruins", 16 - "boost": "stability" 17 - } 18 - ]
-58
scripts/kingdom-sheet.js
··· 1 - import { Kingdom } from "./kingdom.js"; 2 - 3 - export class KingdomSheet extends foundry.applications.sheets.ActorSheetV2 { 4 - static get defaultOptions() { 5 - return mergeObject( 6 - super.defaultOptions, 7 - { 8 - template: "kmhb-sheet", 9 - height: "auto" 10 - } 11 - ); 12 - } 13 - 14 - static register() { 15 - foundry.documents.collections.Actors.registerSheet("pf2e", KingdomSheet, { types: ["npc"] }); 16 - } 17 - 18 - _renderHTML(context, options) { 19 - if (context.document.flags['kingdom-homebrew'] === undefined) { 20 - context.document.flags['kingdom-homebrew'] = {}; 21 - } 22 - 23 - if (context.document.flags['kingdom-homebrew'].kingdom === undefined) { 24 - context.document.flags['kingdom-homebrew'].kingdom = new Kingdom(); 25 - } 26 - 27 - return new Promise((resolve, reject) => { 28 - const data = context.document.flags["kingdom-homebrew"].kingdom; 29 - 30 - if (data.constructor === Kingdom) { 31 - resolve(data); 32 - } else { 33 - reject("data is not a Kingdom object"); 34 - } 35 - }); 36 - } 37 - 38 - _replaceHTML(data, element, options) { 39 - foundry.applications.handlebars.renderTemplate("kmhb-sheet", { 40 - tabs: [ 41 - "turn", 42 - "kingdom", 43 - "settlements", 44 - "relations", 45 - "effects" 46 - ] 47 - }).then((html) => { 48 - element.innerHTML = html; 49 - 50 - element.querySelectorAll("nav.kingdom-tabs a").forEach((tab) => { 51 - tab.onclick = (ev) => { 52 - element.querySelector(".active")?.classList.remove("active"); 53 - element.querySelector(`.kingdom-tab[data-tab="${ev.target.dataset.tab}"]`).classList.add("active"); 54 - }; 55 - }); 56 - }); 57 - } 58 - }
-23
scripts/kingdom.js
··· 1 - /** 2 - * A Kingdom structure. 3 - * @typedef {Object} Kingdom 4 - * @property {string} name - The name of the Kingdom 5 - * @property {string} charter - The id of the charter 6 - * @property {string} government - The id of the government 7 - * @property {string} heartland - The id of the heartland 8 - * @property {string[]} boosts - An array of free boosts for the Kingdom 9 - * @property {object} leaders - Leaders of the kingdom. 10 - * @property {string[]} feats - An array of feats for the Kingdom 11 - * @property {number} size - The size of the Kingdom 12 - * @property {object} resourceDice - The resource dice for the Kingdom 13 - * @property {object} commodities - The commodities for the Kingdom 14 - * @property {object} resourcePoints - The resource points for the Kingdom 15 - * @property {object} unrest - The unrest for the Kingdom 16 - * @property {object} ruin - The ruin for the Kingdom 17 - * @property {object[]} groups - Other groups the Kingdom has relations with 18 - * @property {object} krp - The Kingdom Reputation Points 19 - * @property {string[]} settlements - An array of Scene IDs for the Kingdom's settlements 20 - * @property {number} level - The level of the Kingdom 21 - */ 22 - export class Kingdom { 23 - }
-8
scripts/main.js
··· 1 - import { KingdomSheet } from "./kingdom-sheet.js"; 2 - import preloadTemplates from "./preloadTemplates.js"; 3 - 4 - Hooks.on("init", async () => { 5 - KingdomSheet.register(); 6 - await preloadTemplates(); 7 - console.log("Kingdom Homebrew loaded"); 8 - });
-53
scripts/preloadTemplates.js
··· 1 - export default async function preloadTemplates() { 2 - const templateMap = { 3 - "kmhb-sheet": "modules/kingdom-homebrew/templates/sheet.hbs", 4 - "kmhb-tab-link": "modules/kingdom-homebrew/templates/tab-link.hbs", 5 - "kmhb-tab": "modules/kingdom-homebrew/templates/tab.hbs" 6 - }; 7 - 8 - ["turn", "kingdom", "settlements", "relations", "effects"].forEach((tab) => { 9 - templateMap[`kmhb-tab-${tab}`] = `modules/kingdom-homebrew/templates/tabs/tab-${tab}.hbs`; 10 - }); 11 - 12 - for (var i = 0; i < 20; i++) { 13 - templateMap[`kmhb-level-${i + 1}`] = `modules/kingdom-homebrew/templates/levels/level-${i + 1}.hbs`; 14 - } 15 - 16 - Handlebars.registerHelper("genKRPSelect", () => { 17 - return ""; 18 - }); 19 - 20 - Handlebars.registerHelper("getKingdomTab", (tab) => { 21 - return "kmhb-tab-" + tab; 22 - }); 23 - 24 - Handlebars.registerHelper("for-rev", (from, to, dec, block) => { 25 - var accum = ""; 26 - 27 - for (var i = from; i > to; i -= dec) { 28 - accum += block.fn(i); 29 - } 30 - 31 - return new Handlebars.SafeString(accum); 32 - }); 33 - 34 - Handlebars.registerHelper("for", (from, to, inc, block) => { 35 - var accum = ""; 36 - 37 - for (var i = from; i < to; i += inc) { 38 - accum += block.fn(i); 39 - } 40 - 41 - return new Handlebars.SafeString(accum); 42 - }); 43 - 44 - Handlebars.registerHelper("getKingdomLevel", (level) => { 45 - return `kmhb-level-${level}`; 46 - }); 47 - 48 - Handlebars.registerHelper("km-localize", (namespace, key) => { 49 - return "kingdom-homebrew." + namespace + "." + key; 50 - }) 51 - 52 - return foundry.applications.handlebars.loadTemplates(templateMap); 53 - }
styles/kingdom-sheet.css src/styles/kingdom-sheet.css
templates/levels/level-1.hbs src/templates/levels/level-1.hbs
templates/levels/level-10.hbs src/templates/levels/level-10.hbs
templates/levels/level-11.hbs src/templates/levels/level-11.hbs
templates/levels/level-12.hbs src/templates/levels/level-12.hbs
templates/levels/level-13.hbs src/templates/levels/level-13.hbs
templates/levels/level-14.hbs src/templates/levels/level-14.hbs
templates/levels/level-15.hbs src/templates/levels/level-15.hbs
templates/levels/level-16.hbs src/templates/levels/level-16.hbs
templates/levels/level-17.hbs src/templates/levels/level-17.hbs
templates/levels/level-18.hbs src/templates/levels/level-18.hbs
templates/levels/level-19.hbs src/templates/levels/level-19.hbs
templates/levels/level-2.hbs src/templates/levels/level-2.hbs
templates/levels/level-20.hbs src/templates/levels/level-20.hbs
templates/levels/level-3.hbs src/templates/levels/level-3.hbs
templates/levels/level-4.hbs src/templates/levels/level-4.hbs
templates/levels/level-5.hbs src/templates/levels/level-5.hbs
templates/levels/level-6.hbs src/templates/levels/level-6.hbs
templates/levels/level-7.hbs src/templates/levels/level-7.hbs
templates/levels/level-8.hbs src/templates/levels/level-8.hbs
templates/levels/level-9.hbs src/templates/levels/level-9.hbs
templates/sheet.hbs src/templates/sheet.hbs
templates/tab-link.hbs src/templates/tab-link.hbs
templates/tab.hbs src/templates/tab.hbs
templates/tabs/tab-effects.hbs src/templates/tabs/tab-effects.hbs
templates/tabs/tab-kingdom.hbs src/templates/tabs/tab-kingdom.hbs
templates/tabs/tab-relations.hbs src/templates/tabs/tab-relations.hbs
templates/tabs/tab-settlements.hbs src/templates/tabs/tab-settlements.hbs
templates/tabs/tab-turn.hbs src/templates/tabs/tab-turn.hbs