From 56f22818352c15727756ef6cb66fb37fda3ccc9d Mon Sep 17 00:00:00 2001 From: cosmo Date: Wed, 15 Apr 2026 15:38:23 +0200 Subject: [PATCH] Added domain registration and global features --- icons/blood.png | Bin 0 -> 12067 bytes icons/dread.png | Bin 0 -> 18645 bytes icons/svg/blood.svg | 3 ++ icons/svg/terror.svg | 6 +++ module.json | 3 +- scripts/features.js | 14 +++++++ scripts/voidborne.js | 95 +++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 icons/blood.png create mode 100644 icons/dread.png create mode 100644 icons/svg/blood.svg create mode 100644 icons/svg/terror.svg create mode 100644 scripts/features.js create mode 100644 scripts/voidborne.js diff --git a/icons/blood.png b/icons/blood.png new file mode 100644 index 0000000000000000000000000000000000000000..e386d27be6a8e06d09f40808739b246c4ad2ee37 GIT binary patch literal 12067 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 Ai2wiq literal 0 HcmV?d00001 diff --git a/icons/svg/blood.svg b/icons/svg/blood.svg new file mode 100644 index 0000000..a6e9f5c --- /dev/null +++ b/icons/svg/blood.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/svg/terror.svg b/icons/svg/terror.svg new file mode 100644 index 0000000..292ea04 --- /dev/null +++ b/icons/svg/terror.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/module.json b/module.json index 555ea74..ae14b98 100755 --- a/module.json +++ b/module.json @@ -70,5 +70,6 @@ "compatibility": {} } ] - } + }, + "esmodules": ["scripts/voidborne.js"] } \ No newline at end of file diff --git a/scripts/features.js b/scripts/features.js new file mode 100644 index 0000000..9db81f8 --- /dev/null +++ b/scripts/features.js @@ -0,0 +1,14 @@ +/** + * Library of Void Features + * Export functions here to make them available globally under window.Void + */ + +export function ComboStrikes() { + console.log("Combo Strikes executed!"); + // Logic for Combo Strikes +} + +export function NewFunction() { + console.log("New Void Function executed!"); + // Logic for New Function +} diff --git a/scripts/voidborne.js b/scripts/voidborne.js new file mode 100644 index 0000000..8979563 --- /dev/null +++ b/scripts/voidborne.js @@ -0,0 +1,95 @@ +// Import generic features from the library file +import * as VoidFeatures from './features.js'; + +const MODULE_ID = 'daggerheart-voidborne'; + +console.log(`${MODULE_ID} | Module JS Loaded`); + +Hooks.once('init', () => { + console.log(`${MODULE_ID} | Initializing The Void (Unofficial)`); + + // Expose the Void features globally + // This allows Void.ComboStrikes(), Void.NewFunction(), etc. + window.Void = window.Void || {}; + + // Assign all exported functions from features.js to window.Void + Object.assign(window.Void, VoidFeatures); + + console.log(`${MODULE_ID} | Void features registered:`, Object.keys(VoidFeatures)); +}); + +Hooks.on('ready', async () => { + // Only run if the system is Daggerheart + if (game.system.id !== 'daggerheart') return; + + // Register Blood and Dread domains in system settings + await registerVoidDomains(); +}); + +async function registerVoidDomains() { + // Access Daggerheart Homebrew Settings + // The system stores homebrew config in a setting named 'Homebrew' (case sensitive check needed) + + // Check if the setting exists + let homebrewSettings; + try { + homebrewSettings = game.settings.get('daggerheart', 'Homebrew'); + } catch (e) { + try { + homebrewSettings = game.settings.get('daggerheart', 'homebrew'); + } catch (e2) { + console.warn(`${MODULE_ID} | Could not find Daggerheart 'Homebrew' or 'homebrew' setting.`); + return; + } + } + + if (!homebrewSettings) return; + + const domainData = { + 'blood': { + id: 'blood', + label: 'Blood', + src: `modules/${MODULE_ID}/icons/blood.png`, + description: 'The Blood domain.' + }, + 'dread': { + id: 'dread', + label: 'Dread', + src: `modules/${MODULE_ID}/icons/dread.png`, + description: 'The Dread domain.' + } + }; + + let updates = false; + // user domains are in homebrewSettings.domains + const currentDomains = { ...(homebrewSettings.domains || {}) }; + + for (const [key, data] of Object.entries(domainData)) { + if (!currentDomains[key]) { + console.log(`${MODULE_ID} | Registering missing domain: ${data.label}`); + currentDomains[key] = data; + updates = true; + } + } + + if (updates) { + // Update the setting + try { + // We need to keep the structure of homebrewSettings intact + const newSettings = { + ...homebrewSettings, + domains: currentDomains + }; + + // We need to know the Key used to set it. + let key = 'Homebrew'; + if (game.settings.settings.has('daggerheart.homebrew')) key = 'homebrew'; + + await game.settings.set('daggerheart', key, newSettings); + + ui.notifications.info(`${MODULE_ID} | Registered missing domains (Blood/Dread) in Homebrew Settings.`); + } catch (err) { + console.error(`${MODULE_ID} | Failed to update settings:`, err); + } + } +}