From 6ed989c4bc1eb80de89b7123c04fb42265116514 Mon Sep 17 00:00:00 2001 From: Mike Bloy Date: Sat, 23 Dec 2023 19:56:26 -0600 Subject: [PATCH 1/2] several changes that were not properly split up - Macro: Request fear check specialization macro - Macro: Fear Table to call the new fearTable api endpoint - API: rulesVersion property - API: fearTable(actor) calls the relevant premium core rules module's fear table - API: added requestFearRollFromTokens special helper - Trait roll hooks for: - Glow/Shroud - Range modifiers - added a summary chat message for the roll results to requested rolls. - added a target number option to requested rolls. --- CHANGELOG.md | 17 +++ macros/requestFearRoll.js | 39 ++++++ macros/requestRoll.js | 6 +- packs/common-actions/CURRENT | 2 +- packs/common-actions/LOG | 8 +- packs/common-actions/LOG.old | 8 -- packs/common-actions/MANIFEST-000002 | Bin 0 -> 161 bytes packs/common-actions/MANIFEST-000014 | Bin 146 -> 0 bytes packs/gear/CURRENT | 2 +- packs/gear/LOG | 8 +- packs/gear/LOG.old | 8 -- packs/gear/MANIFEST-000002 | Bin 0 -> 134 bytes packs/gear/MANIFEST-000014 | Bin 119 -> 0 bytes packs/helper-actors/CURRENT | 2 +- packs/helper-actors/LOG | 8 +- packs/helper-actors/LOG.old | 8 -- packs/helper-actors/MANIFEST-000002 | Bin 0 -> 136 bytes packs/helper-actors/MANIFEST-000014 | Bin 121 -> 0 bytes packs/helper-macros/000005.ldb | Bin 12050 -> 13110 bytes packs/helper-macros/CURRENT | 2 +- packs/helper-macros/LOG | 8 +- packs/helper-macros/LOG.old | 8 -- packs/helper-macros/MANIFEST-000002 | Bin 0 -> 137 bytes packs/helper-macros/MANIFEST-000014 | Bin 122 -> 0 bytes .../_source/Fear_Table_S6HY6RqjPTt0z0yY.json | 25 ++++ .../Request_Fear_Check_qQLM79NpAuilKFrh.json | 25 ++++ .../Request_Notice_Roll_pnLnFrfTTJeodFRy.json | 4 +- .../Request_Roll_G9ksuYJo1512PTo9.json | 4 +- packs/module-docs/000005.ldb | Bin 0 -> 14296 bytes packs/module-docs/000014.ldb | Bin 11373 -> 0 bytes packs/module-docs/CURRENT | 2 +- packs/module-docs/LOG | 8 +- packs/module-docs/LOG.old | 15 --- packs/module-docs/MANIFEST-000002 | Bin 0 -> 161 bytes packs/module-docs/MANIFEST-000015 | Bin 205 -> 0 bytes .../API_Documentation_Q4iS1LIiyy7acuaF.json | 120 +++++++++++++++++- .../_source/Macros_Mw1g2Fx5dp4SoqVP.json | 72 ++++++++++- .../Setting_Adjustments_YSuk1v59tLaL9XUK.json | 6 +- scripts/api.js | 9 +- scripts/helpers.js | 63 ++++++++- scripts/module.js | 4 +- scripts/powerEffects.js | 31 ++++- scripts/rollHelpers.js | 57 ++++++++- scripts/shim.js | 30 +++++ 44 files changed, 514 insertions(+), 95 deletions(-) create mode 100644 macros/requestFearRoll.js delete mode 100644 packs/common-actions/LOG.old create mode 100644 packs/common-actions/MANIFEST-000002 delete mode 100644 packs/common-actions/MANIFEST-000014 delete mode 100644 packs/gear/LOG.old create mode 100644 packs/gear/MANIFEST-000002 delete mode 100644 packs/gear/MANIFEST-000014 delete mode 100644 packs/helper-actors/LOG.old create mode 100644 packs/helper-actors/MANIFEST-000002 delete mode 100644 packs/helper-actors/MANIFEST-000014 delete mode 100644 packs/helper-macros/LOG.old create mode 100644 packs/helper-macros/MANIFEST-000002 delete mode 100644 packs/helper-macros/MANIFEST-000014 create mode 100644 packs/helper-macros/_source/Fear_Table_S6HY6RqjPTt0z0yY.json create mode 100644 packs/helper-macros/_source/Request_Fear_Check_qQLM79NpAuilKFrh.json create mode 100644 packs/module-docs/000005.ldb delete mode 100644 packs/module-docs/000014.ldb delete mode 100644 packs/module-docs/LOG.old create mode 100644 packs/module-docs/MANIFEST-000002 delete mode 100644 packs/module-docs/MANIFEST-000015 diff --git a/CHANGELOG.md b/CHANGELOG.md index e598133..48f9d64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Macro: Request fear check specialization macro +- Macro: Fear Table to call the new fearTable api endpoint +- API: rulesVersion property +- API: fearTable(actor) calls the relevant premium core rules module's fear + table +- API: added requestFearRollFromTokens special helper +- Trait roll hooks for: + - Glow/Shroud + - Range modifiers + +### Changed + +- added a summary chat message for the roll results to requested rolls. +- added a target number option to requested rolls. + ## [2.3.0] 2023-12-19 ### Added diff --git a/macros/requestFearRoll.js b/macros/requestFearRoll.js new file mode 100644 index 0000000..0bc063c --- /dev/null +++ b/macros/requestFearRoll.js @@ -0,0 +1,39 @@ +const requestFearRollFromTokens = game.modules.get('swade-mb-helpers').api.requestRollFromTokens + +async function main () { + let tokens = Array.from(game.user.targets) + if (tokens.length < 1) { + tokens = canvas.tokens.controlled + } + if (tokens.length < 1) { + ui.notifications.error('Please target or select some tokens') + return + } + + const menuData = { + inputs: [ + { type: 'info', label: `Requesting Fear roll from ${tokens.map(t => t.name).join(', ')}` }, + { type: 'number', label: 'Fear Check Penalty', options: 0 } + ], + buttons: [ + { label: 'Request roll', value: 'ok', default: true }, + { label: 'Cancel', value: 'cancel' } + ] + } + const menuConfig = { + title: 'Request Fear roll...' + } + const result = await warpgate.menu(menuData, menuConfig) + + if (result.buttons !== 'ok') { + return + } + console.log(result) + const fear = result.inputs[1] || 0 + const targetNumber = 4 + const options = { targetNumber, fear } + + requestFearRollFromTokens(tokens, options) +} + +main() diff --git a/macros/requestRoll.js b/macros/requestRoll.js index 4372f1a..57aefdc 100644 --- a/macros/requestRoll.js +++ b/macros/requestRoll.js @@ -19,7 +19,8 @@ async function main () { options: [] }, { type: 'number', label: 'Roll Modifier', options: 0 }, - { type: 'text', label: 'Roll Modifier Description', options: 'Roll Modifier' } + { type: 'text', label: 'Roll Modifier Description', options: 'Roll Modifier' }, + { type: 'number', label: 'Target Number', options: 4 } ], buttons: [ { label: 'Request roll', value: 'ok', default: true }, @@ -59,7 +60,8 @@ async function main () { const rollParts = result.inputs[1].split('|') const rollType = (rollParts[0] === 'a' ? 'attribute' : 'skill') const rollDesc = rollParts[1] - const options = {} + const targetNumber = result.inputs[4] || 4 + const options = { targetNumber } if (rollMod !== 0) { options.mods = [{ label: rollModDesc, value: rollMod }] } diff --git a/packs/common-actions/CURRENT b/packs/common-actions/CURRENT index 23b73d9..1a84852 100644 --- a/packs/common-actions/CURRENT +++ b/packs/common-actions/CURRENT @@ -1 +1 @@ -MANIFEST-000014 +MANIFEST-000002 diff --git a/packs/common-actions/LOG b/packs/common-actions/LOG index d59dd93..1194ed8 100644 --- a/packs/common-actions/LOG +++ b/packs/common-actions/LOG @@ -1,3 +1,5 @@ -2023/12/19-22:11:46.585866 7f40dd7bc700 Recovering log #12 -2023/12/19-22:11:46.611108 7f40dd7bc700 Delete type=0 #12 -2023/12/19-22:11:46.611132 7f40dd7bc700 Delete type=3 #10 +2023/12/23-19:53:30.442930 7f73537bf700 Delete type=3 #1 +2023/12/23-19:53:30.445253 7f7351501700 Level-0 table #5: started +2023/12/23-19:53:30.448202 7f7351501700 Level-0 table #5: 12215 bytes OK +2023/12/23-19:53:30.451038 7f7351501700 Delete type=0 #3 +2023/12/23-19:53:30.451169 7f7351501700 Manual compaction at level-0 from '!folders!0nDRFmMBs5DBJU9M' @ 72057594037927935 : 1 .. '!items.effects!RC1Nz6iph8wPPK1B.g9W5hJisq3MsCpZW' @ 0 : 0; will stop at (end) diff --git a/packs/common-actions/LOG.old b/packs/common-actions/LOG.old deleted file mode 100644 index 8d8b6ad..0000000 --- a/packs/common-actions/LOG.old +++ /dev/null @@ -1,8 +0,0 @@ -2023/12/19-14:25:58.734016 7fb0acf3b700 Recovering log #8 -2023/12/19-14:25:58.748444 7fb0acf3b700 Delete type=3 #6 -2023/12/19-14:25:58.748474 7fb0acf3b700 Delete type=0 #8 -2023/12/19-22:08:59.600432 7fb086400700 Level-0 table #13: started -2023/12/19-22:08:59.600452 7fb086400700 Level-0 table #13: 0 bytes OK -2023/12/19-22:08:59.612412 7fb086400700 Delete type=0 #11 -2023/12/19-22:08:59.648733 7fb086400700 Manual compaction at level-0 from '!folders!0nDRFmMBs5DBJU9M' @ 72057594037927935 : 1 .. '!items.effects!RC1Nz6iph8wPPK1B.g9W5hJisq3MsCpZW' @ 0 : 0; will stop at (end) -2023/12/19-22:08:59.648868 7fb086400700 Manual compaction at level-1 from '!folders!0nDRFmMBs5DBJU9M' @ 72057594037927935 : 1 .. '!items.effects!RC1Nz6iph8wPPK1B.g9W5hJisq3MsCpZW' @ 0 : 0; will stop at (end) diff --git a/packs/common-actions/MANIFEST-000002 b/packs/common-actions/MANIFEST-000002 new file mode 100644 index 0000000000000000000000000000000000000000..0916a641673cb50bb46c87418ef77de9ef7f9c95 GIT binary patch literal 161 zcmWIhx#Ncn10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAe$kRS-TOEg7@3$k8JJmE z7%tg3UCsbdDXB%piUxTuL2kLePQ|7!PF|swzKo&_U|^w` zS(2Jtte2XWmYQ5rtQh2M=vQTyS&(5-9uVMd=%kl!8E%^4m04V9>|5+y5EahI577t! DGLbCj literal 0 HcmV?d00001 diff --git a/packs/common-actions/MANIFEST-000014 b/packs/common-actions/MANIFEST-000014 deleted file mode 100644 index 5d83e41819ba6b673cf0454204acd13492b8c380..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmey-)7@Xgz{n_-lUkOVlai$8R9TW*o>`pgoS$2eSd>_jU&PMDx;-mr;}f3@j8gOHy--^-|N)Qj<%H6@#1&{i@6|3o`pgoS$2eSd>_jU&PMD+H5MXm|2pVTde36 zUg;E=YEqKtADNTo=IF-A!~g~``I7MP;51j?T%X+XVzbC3LqvdiQ#l&Qw%3{S((=wBEH;=;7e1k~CV8=p6Mg}k-r~m-a C4vdiQ#l&PFyI3*Q pw9F*k&7-h1-yqU3*s+k2kpT<{DhTjgSH;1=$i&adz%0PR2mln=AbS7+ diff --git a/packs/helper-macros/000005.ldb b/packs/helper-macros/000005.ldb index 4f5464adedfc6602eb2f5b1e400dddadbb281379..a77123e4ff6734a807cd08e8a93e0efbcc9e370a 100644 GIT binary patch delta 3677 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

?#hHnj%+%JNnT2db z9*IL!bQ)_cCT~!f<#>8HW$aRSuHlD>r`xu|edtD8sB%)e9JL%j$t6=fH|eCWqKp4s z^qTEgl-4$x%0y`o6EF^G^FOSHP)&IlHX#cly04}eQu%+>v?~&S7o z8@>+gL)wcgeqSw-TvfOdHJnZ!pk0qcSusAmepA0=+mzOu*g~4h>)m;y5 z=zDcMtU;gGWlT4fXZdcvQ%nvHZsCN<&i(~x%@GGJa0;O6W3njzHjIPV2vdY~~cz zcHRJ@g;(`euj(INQ~f_*rA5xZ)$5)$)qD50?pJ+wZ`l9!UM+vKSx-E;BL7~u7tn9u z_6(a41<5YSn>X*}N0Zl#c(!}f!G5Sxq1KO;=fRGfwIQII0; zjrL;js8xB7IihIAv);TezGqZ)4WtEm+C7lvxXJgYv18~dkJG2Xr>wG&#+1>QuKpZ2 z`z8t&?6?JUg+h@?bI{`t`@G7Pn596MEYV#P$l%=o*CVfY!+N!{{zDh8?vGqIHR|b_ z8%c+Sxvt!xqxS-iro9a<$@6&MPY#q8j^Q)M@J&TXeF1-SbEt4P7Q1`pM<5apg2v=y zMB5qIsG#(1;=*5#gipmES%(gX(>?hErpG-((ZirG_ofpk2N| z>SKMiv!kzv-y2Ef7Usj=+5Q2a0LzFvD|pcMPz5lUd%=W(Bmd}r*<5V}dkj|FgYjp} zfd+RN^yJ0C7fa!maf|ZBt;*z-SzOH_WtJ)v20vw0hsQlHj30!^;IBrsA4iN|{U1Bv B;dlT5 diff --git a/packs/helper-macros/CURRENT b/packs/helper-macros/CURRENT index 23b73d9..1a84852 100644 --- a/packs/helper-macros/CURRENT +++ b/packs/helper-macros/CURRENT @@ -1 +1 @@ -MANIFEST-000014 +MANIFEST-000002 diff --git a/packs/helper-macros/LOG b/packs/helper-macros/LOG index 948bac9..4632a61 100644 --- a/packs/helper-macros/LOG +++ b/packs/helper-macros/LOG @@ -1,3 +1,5 @@ -2023/12/19-22:11:46.967222 7fb6ee7bf700 Recovering log #12 -2023/12/19-22:11:46.993517 7fb6ee7bf700 Delete type=0 #12 -2023/12/19-22:11:46.993540 7fb6ee7bf700 Delete type=3 #10 +2023/12/23-19:53:32.597429 7efcc4fbd700 Delete type=3 #1 +2023/12/23-19:53:32.599577 7efcc3fbb700 Level-0 table #5: started +2023/12/23-19:53:32.602517 7efcc3fbb700 Level-0 table #5: 13110 bytes OK +2023/12/23-19:53:32.605253 7efcc3fbb700 Delete type=0 #3 +2023/12/23-19:53:32.605331 7efcc3fbb700 Manual compaction at level-0 from '!folders!hIbrWxg1nDutCSwt' @ 72057594037927935 : 1 .. '!macros!wU2mAUnw3RW9qMT8' @ 0 : 0; will stop at (end) diff --git a/packs/helper-macros/LOG.old b/packs/helper-macros/LOG.old deleted file mode 100644 index eb01f08..0000000 --- a/packs/helper-macros/LOG.old +++ /dev/null @@ -1,8 +0,0 @@ -2023/12/19-14:25:58.719315 7fb087fff700 Recovering log #8 -2023/12/19-14:25:58.732527 7fb087fff700 Delete type=3 #6 -2023/12/19-14:25:58.732555 7fb087fff700 Delete type=0 #8 -2023/12/19-22:08:59.638378 7fb086400700 Level-0 table #13: started -2023/12/19-22:08:59.638400 7fb086400700 Level-0 table #13: 0 bytes OK -2023/12/19-22:08:59.648647 7fb086400700 Delete type=0 #11 -2023/12/19-22:08:59.648837 7fb086400700 Manual compaction at level-0 from '!folders!hIbrWxg1nDutCSwt' @ 72057594037927935 : 1 .. '!macros!wU2mAUnw3RW9qMT8' @ 0 : 0; will stop at (end) -2023/12/19-22:08:59.677175 7fb086400700 Manual compaction at level-1 from '!folders!hIbrWxg1nDutCSwt' @ 72057594037927935 : 1 .. '!macros!wU2mAUnw3RW9qMT8' @ 0 : 0; will stop at (end) diff --git a/packs/helper-macros/MANIFEST-000002 b/packs/helper-macros/MANIFEST-000002 new file mode 100644 index 0000000000000000000000000000000000000000..cedf5a9477923e25e78f0b3802b50591310a9378 GIT binary patch literal 137 zcmWIhx#Ncn10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAe$kRS-TOEg7@3$k8JJmE z7))kJ=mr3}EI=+Bivl|n>$WsS#kBmKl+>bP#SG7+qVS4z!#tPL66fIZ5=Kr2Fi=p; fO-wGzFIFrMHOh4i%_}z!3b!ou4Y6R9g(v_3?%E{D literal 0 HcmV?d00001 diff --git a/packs/helper-macros/MANIFEST-000014 b/packs/helper-macros/MANIFEST-000014 deleted file mode 100644 index ee8985e1e3f8c59fa118396f3e115163681f4ace..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmZ>r@cM2F10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei1tp>!dhE#kBmKl+>bP z#SG7+qVS4z!#tPL66fIZ5=Kr2Fi=p;O-wGzFIFrMHOh4i%_}z!3b!ou4Y6R9hA7y* S*5M)t10xeZCj+wpiyQ#4Ya t.name).join(', ')}` },\n { type: 'number', label: 'Fear Check Penalty', options: 0 }\n ],\n buttons: [\n { label: 'Request roll', value: 'ok', default: true },\n { label: 'Cancel', value: 'cancel' }\n ]\n }\n const menuConfig = {\n title: 'Request Fear roll...'\n }\n const result = await warpgate.menu(menuData, menuConfig)\n\n if (result.buttons !== 'ok') {\n return\n }\n console.log(result)\n const fear = result.inputs[1] || 0\n const targetNumber = 4\n const options = { targetNumber, fear }\n\n requestFearRollFromTokens(tokens, options)\n}\n\nmain()", + "folder": null, + "sort": 0, + "ownership": { + "default": 0, + "sVoCvBU1knmXzoYe": 3 + }, + "flags": {}, + "_stats": { + "systemId": "swade", + "systemVersion": "3.2.5", + "coreVersion": "11.315", + "createdTime": 1703356535979, + "modifiedTime": 1703357189587, + "lastModifiedBy": "sVoCvBU1knmXzoYe" + }, + "_key": "!macros!qQLM79NpAuilKFrh" +} diff --git a/packs/helper-macros/_source/Request_Notice_Roll_pnLnFrfTTJeodFRy.json b/packs/helper-macros/_source/Request_Notice_Roll_pnLnFrfTTJeodFRy.json index 56853b4..5b43ad5 100644 --- a/packs/helper-macros/_source/Request_Notice_Roll_pnLnFrfTTJeodFRy.json +++ b/packs/helper-macros/_source/Request_Notice_Roll_pnLnFrfTTJeodFRy.json @@ -4,7 +4,7 @@ "scope": "global", "author": "sVoCvBU1knmXzoYe", "img": "icons/sundries/gaming/dice-pair-white-green.webp", - "command": "const requestRollFromTokens = game.modules.get('swade-mb-helpers').api.requestRollFromTokens\n\nconst traitName = 'Notice'\nconst traitType = 'skill' // or 'attribute'\n\nasync function main () {\n let tokens = Array.from(game.user.targets)\n if (tokens.length < 1) {\n tokens = canvas.tokens.controlled\n }\n if (tokens.length < 1) {\n ui.notifications.error('Please target or select some tokens')\n return\n }\n\n const menuData = {\n inputs: [\n { type: 'info', label: `Requesting roll from ${tokens.map(t => t.name).join(', ')}` },\n {\n type: 'info',\n label: `Requesting a ${traitName} roll`\n },\n { type: 'number', label: 'Roll Modifier', options: 0 },\n { type: 'text', label: 'Roll Modifier Description', options: 'Roll Modifier' }\n ],\n buttons: [\n { label: 'Request roll', value: 'ok', default: true },\n { label: 'Cancel', value: 'cancel' }\n ]\n }\n const menuConfig = {\n title: `Request ${traitName} roll...`\n }\n const result = await warpgate.menu(menuData, menuConfig)\n\n if (result.buttons !== 'ok') {\n return\n }\n console.log(result)\n const rollMod = result.inputs[2]\n const rollModDesc = result.inputs[3]\n const rollType = traitType\n const rollDesc = traitName\n const options = {}\n if (rollMod !== 0) {\n options.mods = [{ label: rollModDesc, value: rollMod }]\n }\n\n requestRollFromTokens(tokens, rollType, rollDesc, options)\n}\n\nmain()", + "command": "const requestRollFromTokens = game.modules.get('swade-mb-helpers').api.requestRollFromTokens\n\nconst traitName = 'Notice'\nconst traitType = 'skill' // or 'attribute'\n\nasync function main () {\n let tokens = Array.from(game.user.targets)\n if (tokens.length < 1) {\n tokens = canvas.tokens.controlled\n }\n if (tokens.length < 1) {\n ui.notifications.error('Please target or select some tokens')\n return\n }\n\n const menuData = {\n inputs: [\n { type: 'info', label: `Requesting roll from ${tokens.map(t => t.name).join(', ')}` },\n {\n type: 'info',\n label: `Requesting a ${traitName} roll`\n },\n { type: 'number', label: 'Roll Modifier', options: 0 },\n { type: 'text', label: 'Roll Modifier Description', options: 'Roll Modifier' },\n { type: 'number', label: 'Target Number', options: 4 },\n ],\n buttons: [\n { label: 'Request roll', value: 'ok', default: true },\n { label: 'Cancel', value: 'cancel' }\n ]\n }\n const menuConfig = {\n title: `Request ${traitName} roll...`\n }\n const result = await warpgate.menu(menuData, menuConfig)\n\n if (result.buttons !== 'ok') {\n return\n }\n console.log(result)\n const rollMod = result.inputs[2]\n const rollModDesc = result.inputs[3]\n const rollType = traitType\n const rollDesc = traitName\n const targetNumber = result.inputs[4] || 4\n const options = {targetNumber}\n if (rollMod !== 0) {\n options.mods = [{ label: rollModDesc, value: rollMod }]\n }\n\n requestRollFromTokens(tokens, rollType, rollDesc, options)\n}\n\nmain()", "folder": null, "ownership": { "default": 0, @@ -18,7 +18,7 @@ "systemVersion": "3.2.5", "coreVersion": "11.315", "createdTime": 1700430548162, - "modifiedTime": 1702959790712, + "modifiedTime": 1703297741362, "lastModifiedBy": "sVoCvBU1knmXzoYe" }, "_id": "pnLnFrfTTJeodFRy", diff --git a/packs/helper-macros/_source/Request_Roll_G9ksuYJo1512PTo9.json b/packs/helper-macros/_source/Request_Roll_G9ksuYJo1512PTo9.json index 3cae153..e8f208e 100644 --- a/packs/helper-macros/_source/Request_Roll_G9ksuYJo1512PTo9.json +++ b/packs/helper-macros/_source/Request_Roll_G9ksuYJo1512PTo9.json @@ -4,7 +4,7 @@ "scope": "global", "author": "R9ZgY0IvWl8ovIuT", "img": "icons/sundries/gaming/dice-runed-tan.webp", - "command": "const requestRollFromTokens = game.modules.get('swade-mb-helpers').api.requestRollFromTokens\n\nasync function main () {\n let tokens = Array.from(game.user.targets)\n if (tokens.length < 1) {\n tokens = canvas.tokens.controlled\n }\n if (tokens.length < 1) {\n ui.notifications.error('Please target or select some tokens')\n return\n }\n\n const menuData = {\n inputs: [\n { type: 'info', label: `Requesting roll from ${tokens.map(t => t.name).join(', ')}` },\n {\n type: 'select',\n label: 'Trait to roll',\n options: []\n },\n { type: 'number', label: 'Roll Modifier', options: 0 },\n { type: 'text', label: 'Roll Modifier Description', options: 'Roll Modifier' }\n ],\n buttons: [\n { label: 'Request roll', value: 'ok', default: true },\n { label: 'Cancel', value: 'cancel' }\n ]\n }\n const menuConfig = {\n title: 'Request roll...'\n }\n for (const attribute of ['Agility', 'Smarts', 'Spirit', 'Strength', 'Vigor']) {\n menuData.inputs[1].options.push(\n { html: `Attribute | ${attribute}`, value: `a|${attribute}` }\n )\n }\n const skillSet = new Set()\n for (const token of tokens) {\n const skills = token.actor.items.filter(i => i.type === 'skill' &&\n !['Untrained', 'Unskilled Attempt'].includes(i.name))\n for (const skill of skills) {\n skillSet.add(skill.name)\n }\n }\n for (const skill of Array.from(skillSet).sort()) {\n menuData.inputs[1].options.push(\n { html: `Skill | ${skill}`, value: `s|${skill}` })\n }\n menuData.inputs[1].options.push(\n { html: 'Skill | Untrained', value: 's|NOSKILL' })\n const result = await warpgate.menu(menuData, menuConfig)\n\n if (result.buttons !== 'ok') {\n return\n }\n console.log(result)\n const rollMod = result.inputs[2]\n const rollModDesc = result.inputs[3]\n const rollParts = result.inputs[1].split('|')\n const rollType = (rollParts[0] === 'a' ? 'attribute' : 'skill')\n const rollDesc = rollParts[1]\n const options = {}\n if (rollMod !== 0) {\n options.mods = [{ label: rollModDesc, value: rollMod }]\n }\n\n requestRollFromTokens(tokens, rollType, rollDesc, options)\n}\n\nmain()", + "command": "const requestRollFromTokens = game.modules.get('swade-mb-helpers').api.requestRollFromTokens\n\nasync function main () {\n let tokens = Array.from(game.user.targets)\n if (tokens.length < 1) {\n tokens = canvas.tokens.controlled\n }\n if (tokens.length < 1) {\n ui.notifications.error('Please target or select some tokens')\n return\n }\n\n const menuData = {\n inputs: [\n { type: 'info', label: `Requesting roll from ${tokens.map(t => t.name).join(', ')}` },\n {\n type: 'select',\n label: 'Trait to roll',\n options: []\n },\n { type: 'number', label: 'Roll Modifier', options: 0 },\n { type: 'text', label: 'Roll Modifier Description', options: 'Roll Modifier' },\n { type: 'number', label: 'Target Number', options: 4 },\n ],\n buttons: [\n { label: 'Request roll', value: 'ok', default: true },\n { label: 'Cancel', value: 'cancel' }\n ]\n }\n const menuConfig = {\n title: 'Request roll...'\n }\n for (const attribute of ['Agility', 'Smarts', 'Spirit', 'Strength', 'Vigor']) {\n menuData.inputs[1].options.push(\n { html: `Attribute | ${attribute}`, value: `a|${attribute}` }\n )\n }\n const skillSet = new Set()\n for (const token of tokens) {\n const skills = token.actor.items.filter(i => i.type === 'skill' &&\n !['Untrained', 'Unskilled Attempt'].includes(i.name))\n for (const skill of skills) {\n skillSet.add(skill.name)\n }\n }\n for (const skill of Array.from(skillSet).sort()) {\n menuData.inputs[1].options.push(\n { html: `Skill | ${skill}`, value: `s|${skill}` })\n }\n menuData.inputs[1].options.push(\n { html: 'Skill | Untrained', value: 's|NOSKILL' })\n const result = await warpgate.menu(menuData, menuConfig)\n\n if (result.buttons !== 'ok') {\n return\n }\n console.log(result)\n const rollMod = result.inputs[2]\n const rollModDesc = result.inputs[3]\n const rollParts = result.inputs[1].split('|')\n const rollType = (rollParts[0] === 'a' ? 'attribute' : 'skill')\n const rollDesc = rollParts[1]\n const targetNumber = result.inputs[4] || 4\n const options = {targetNumber}\n if (rollMod !== 0) {\n options.mods = [{ label: rollModDesc, value: rollMod }]\n }\n\n requestRollFromTokens(tokens, rollType, rollDesc, options)\n}\n\nmain()", "folder": null, "ownership": { "default": 0, @@ -18,7 +18,7 @@ "systemVersion": "3.2.5", "coreVersion": "11.315", "createdTime": 1700430548162, - "modifiedTime": 1702959790712, + "modifiedTime": 1703297742414, "lastModifiedBy": "sVoCvBU1knmXzoYe" }, "_id": "G9ksuYJo1512PTo9", diff --git a/packs/module-docs/000005.ldb b/packs/module-docs/000005.ldb new file mode 100644 index 0000000000000000000000000000000000000000..2e76e6047f8bddf97a292d5c72faba59a49fcf7d GIT binary patch literal 14296 zcmcJ0dt6)P{r~g8Ipv&?q)8eu)X<$oC}a(35<-ATkx)Vl7D|CqsHiE

yLp+eb#D85!{6sgXjRC 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 H{rdj`9`s=% literal 0 HcmV?d00001 diff --git a/packs/module-docs/000014.ldb b/packs/module-docs/000014.ldb deleted file mode 100644 index ae757ca7dcac74ed305b14d1e2d1f92e93546530..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11373 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 11373 bytes -2023/12/19-22:08:59.638172 7fb086400700 compacted to: files[ 0 0 1 0 0 0 0 ] -2023/12/19-22:08:59.638243 7fb086400700 Delete type=2 #5 -2023/12/19-22:08:59.638324 7fb086400700 Delete type=2 #13 -2023/12/19-22:08:59.648805 7fb086400700 Manual compaction at level-1 from '!journal.pages!YSuk1v59tLaL9XUK.BxFgDb91dqbkO9h4' @ 17 : 1 .. '!journal.pages!YSuk1v59tLaL9XUK.BxFgDb91dqbkO9h4' @ 0 : 0; will stop at (end) diff --git a/packs/module-docs/MANIFEST-000002 b/packs/module-docs/MANIFEST-000002 new file mode 100644 index 0000000000000000000000000000000000000000..982059d7b4f2188d01238f67592b8a81115226ac GIT binary patch literal 161 zcmWIhx#Ncn10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAe$kRS-TOEg7@3$k8JJmE z7)~w8Se*gnvH-bkEMn|TtT*x%6|?e7i}Dh46g`qk0&+b3-24rF%!0zQ3>Y~Wz`z2g xLa!h(J+)XdGPpF`u*}r5#3#|mG9uJl&#A&K-6hG=Fr_dl+ut(7gi#El5deYMEtvoS literal 0 HcmV?d00001 diff --git a/packs/module-docs/MANIFEST-000015 b/packs/module-docs/MANIFEST-000015 deleted file mode 100644 index c554a59b1ca6123a224b9813a4f32aa14f91715a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 205 zcmd0BewnkKfss)vC$%g!CnZVGsj?)sJhM2}IX|}`u_&=5zlfF5LNP19v?wnzN3S3; zJ+)XdGPpF`u*}r5#3#|mG9uJl&#A&K-6hG=Fr_dl+ut(7gi(+I4A`0Y-bN_GbSru! rl?3E?___HT`j`cUWf?HCLX?qiz7a&Di?C`l2LmIM04D>pAd4{o)N(m- diff --git a/packs/module-docs/_source/API_Documentation_Q4iS1LIiyy7acuaF.json b/packs/module-docs/_source/API_Documentation_Q4iS1LIiyy7acuaF.json index 84c8383..b070f8b 100644 --- a/packs/module-docs/_source/API_Documentation_Q4iS1LIiyy7acuaF.json +++ b/packs/module-docs/_source/API_Documentation_Q4iS1LIiyy7acuaF.json @@ -83,7 +83,7 @@ "image": {}, "text": { "format": 1, - "content": "

async function requestRollFromTokens (tokens, rollType, rollDesc, options = {})

This will request a roll from the tokens given using socketlib to request the roll from the currently logged on owner of the token.

Parameters

  • tokens: The list of tokens to request from

  • rollType: one of the strings 'attribute' or 'skill'

  • rollDesc: the name of the trait being requested

  • options: detailed below

Options

The options object can be completely empty, but can have any or all of the following optional fields:

  • title: The title for the roll dialog, if the default is not required. For the aid of those rolling for multiple tokens, the token's name will be appended to the title

  • flavour: flavour text for the roll chat card. If unspecified, the title text will be used

  • mods: a list of roll modifiers represented as objects of the following fields:

    • label: Label for the modifier

    • value: a positive or negative number, the value of the roll modifier

    • ignore: an optional boolean which, if true, means that the modifier's ignore checkbox will be checked by default

  • modCallback: a function that takes a token as parameter, and returns an array of modifiers as listed above. This will be run for each token and the individual token's mod list will have the resulting list of modifiers appended to the list from 'mods' above.

Returns

The return value is a list of promises which, if fulfilled, are the resulting roll objects from the token's rolls.

" + "content": "
async function requestRollFromTokens (tokens, rollType, rollDesc, options = {})

This will request a roll from the tokens given using socketlib to request the roll from the currently logged on owner of the token.

Parameters

  • tokens: The list of tokens to request from

  • rollType: one of the strings 'attribute' or 'skill'

  • rollDesc: the name of the trait being requested

  • options: detailed below

Options

The options object can be completely empty, but can have any or all of the following optional fields:

  • title: The title for the roll dialog, if the default is not required. For the aid of those rolling for multiple tokens, the token's name will be appended to the title

  • flavour: flavour text for the roll chat card. If unspecified, the title text will be used. (it's spelled flavour to match the SWADE system. \"flavor\" is also accepted.

  • targetNumber: a target number. Defaults to 4, should be an integer

  • mods: a list of roll modifiers represented as objects of the following fields:

    • label: Label for the modifier

    • value: a positive or negative number, the value of the roll modifier

    • ignore: an optional boolean which, if true, means that the modifier's ignore checkbox will be checked by default

  • modCallback: a function that takes a token as parameter, and returns an array of modifiers as listed above. This will be run for each token and the individual token's mod list will have the resulting list of modifiers appended to the list from 'mods' above.

Returns

The return value is a list of promises which, if fulfilled, are the resulting roll objects from the token's rolls.

" }, "video": { "controls": true, @@ -98,13 +98,119 @@ "flags": {}, "_stats": { "systemId": "swade", - "systemVersion": "3.2.2", + "systemVersion": "3.2.5", "coreVersion": "11.315", "createdTime": 1700439709611, - "modifiedTime": 1700440442904, - "lastModifiedBy": "R9ZgY0IvWl8ovIuT" + "modifiedTime": 1703375940967, + "lastModifiedBy": "sVoCvBU1knmXzoYe" }, "_key": "!journal.pages!Q4iS1LIiyy7acuaF.zvPWCYx402kk2hsE" + }, + { + "sort": 150000, + "name": "api.rulesVersion", + "type": "text", + "_id": "QdATvoUe4VuZrl7B", + "title": { + "show": true, + "level": 1 + }, + "image": {}, + "text": { + "format": 1, + "content": "

(property) rulesVersion

This API property gives the premium rules version that is active, preferring Savage Pathfinder over SWADE if both are active. It returns the following key depending on the active premium module, if any.

Active Module

Key

Savage Pathfinder (SWPF)

swpf

Savage Worlds Adventure Edition (SWADE)

swade

None of the above (SWADE System only)

system

" + }, + "video": { + "controls": true, + "volume": 0.5 + }, + "src": null, + "system": {}, + "ownership": { + "default": -1, + "sVoCvBU1knmXzoYe": 3 + }, + "flags": {}, + "_stats": { + "systemId": "swade", + "systemVersion": "3.2.5", + "coreVersion": "11.315", + "createdTime": 1703097132367, + "modifiedTime": 1703097639786, + "lastModifiedBy": "sVoCvBU1knmXzoYe" + }, + "_key": "!journal.pages!Q4iS1LIiyy7acuaF.QdATvoUe4VuZrl7B" + }, + { + "sort": 500000, + "name": "api.fearTable(actor)", + "type": "text", + "_id": "oOCgnw1eVGu6Uj4U", + "title": { + "show": true, + "level": 1 + }, + "image": {}, + "text": { + "format": 1, + "content": "
async function fearTable (actor)

The fear table API property is the fear table macro helper from whichever premium module is currently installed and active. If only the system is active and no core rules premium module is active, this will throw an exception.

" + }, + "video": { + "controls": true, + "volume": 0.5 + }, + "src": null, + "system": {}, + "ownership": { + "default": -1, + "sVoCvBU1knmXzoYe": 3 + }, + "flags": {}, + "_stats": { + "systemId": "swade", + "systemVersion": "3.2.5", + "coreVersion": "11.315", + "createdTime": 1703097422432, + "modifiedTime": 1703097574374, + "lastModifiedBy": "sVoCvBU1knmXzoYe" + }, + "_key": "!journal.pages!Q4iS1LIiyy7acuaF.oOCgnw1eVGu6Uj4U" + }, + { + "sort": 300000, + "name": "api.requestFearRollFromTokens", + "type": "text", + "title": { + "show": true, + "level": 1 + }, + "image": {}, + "text": { + "format": 1, + "content": "
async function requestFearRollFromTokens (tokens, options = {})

This will request a fear roll from the tokens given using socketlib to request the roll from the currently logged on owner of the token. This is a special case of requestRollFromTokens.

Parameters

  • tokens: The list of tokens to request from

  • options: detailed below

Options

The options object can be completely empty, but can have any or all of the following optional fields:

  • title: The title for the roll dialog, if the default is not required. For the aid of those rolling for multiple tokens, the token's name will be appended to the title

  • flavour: flavor text for the roll chat card. If unspecified, the title text will be used (it's spelled flavour because that's how the SWADE system spells it. \"flavor\" is also accepted)

  • fear: the fear penalty. It will do the right thing if this is positive or negative.

Returns

The return value is a list of promises which, if fulfilled, are the resulting roll objects from the token's rolls.

" + }, + "video": { + "controls": true, + "volume": 0.5 + }, + "src": null, + "system": {}, + "ownership": { + "default": -1, + "R9ZgY0IvWl8ovIuT": 3, + "sVoCvBU1knmXzoYe": 3 + }, + "flags": {}, + "_stats": { + "systemId": "swade", + "systemVersion": "3.2.5", + "coreVersion": "11.315", + "createdTime": 1700439709611, + "modifiedTime": 1703375850704, + "lastModifiedBy": "sVoCvBU1knmXzoYe" + }, + "_id": "J0HiPqdHqM27gwUw", + "_key": "!journal.pages!Q4iS1LIiyy7acuaF.J0HiPqdHqM27gwUw" } ], "folder": null, @@ -117,11 +223,11 @@ }, "_stats": { "systemId": "swade", - "systemVersion": "3.2.2", + "systemVersion": "3.2.5", "coreVersion": "11.315", "createdTime": 1700438778794, - "modifiedTime": 1700440473945, - "lastModifiedBy": "R9ZgY0IvWl8ovIuT" + "modifiedTime": 1703375940967, + "lastModifiedBy": "sVoCvBU1knmXzoYe" }, "_id": "Q4iS1LIiyy7acuaF", "sort": 100000, diff --git a/packs/module-docs/_source/Macros_Mw1g2Fx5dp4SoqVP.json b/packs/module-docs/_source/Macros_Mw1g2Fx5dp4SoqVP.json index a01f5e5..f81c991 100644 --- a/packs/module-docs/_source/Macros_Mw1g2Fx5dp4SoqVP.json +++ b/packs/module-docs/_source/Macros_Mw1g2Fx5dp4SoqVP.json @@ -249,6 +249,76 @@ "lastModifiedBy": "sVoCvBU1knmXzoYe" }, "_key": "!journal.pages!Mw1g2Fx5dp4SoqVP.mT3lMGUo9zvqQsOh" + }, + { + "sort": 500000, + "name": "Fear Table", + "type": "text", + "_id": "RxGaSpV6FStZyyBX", + "title": { + "show": true, + "level": 1 + }, + "image": {}, + "text": { + "format": 1, + "content": "

This macro will call the Fear Table macro from whichever premium ruleset (SPWF or SWADE) is active, preferring SWPF.

It will not work if no premium module is active.

" + }, + "video": { + "controls": true, + "volume": 0.5 + }, + "src": null, + "system": {}, + "ownership": { + "default": -1, + "sVoCvBU1knmXzoYe": 3 + }, + "flags": {}, + "_stats": { + "systemId": "swade", + "systemVersion": "3.2.5", + "coreVersion": "11.315", + "createdTime": 1703097037538, + "modifiedTime": 1703097110707, + "lastModifiedBy": "sVoCvBU1knmXzoYe" + }, + "_key": "!journal.pages!Mw1g2Fx5dp4SoqVP.RxGaSpV6FStZyyBX" + }, + { + "sort": 500000, + "name": "Request Fear Check", + "type": "text", + "title": { + "show": true, + "level": 1 + }, + "image": {}, + "text": { + "format": 1, + "content": "

This macro will prompt for a fear penalty and request a spirit roll with that penalty from targeted or selected tokens.

" + }, + "video": { + "controls": true, + "volume": 0.5 + }, + "src": null, + "system": {}, + "ownership": { + "default": -1, + "sVoCvBU1knmXzoYe": 3 + }, + "flags": {}, + "_stats": { + "systemId": "swade", + "systemVersion": "3.2.5", + "coreVersion": "11.315", + "createdTime": 1703097037538, + "modifiedTime": 1703376053416, + "lastModifiedBy": "sVoCvBU1knmXzoYe" + }, + "_id": "CRgBHcoOmH5hvadF", + "_key": "!journal.pages!Mw1g2Fx5dp4SoqVP.CRgBHcoOmH5hvadF" } ], "flags": { @@ -261,7 +331,7 @@ "systemVersion": "3.2.5", "coreVersion": "11.315", "createdTime": 1678169291843, - "modifiedTime": 1702960233927, + "modifiedTime": 1703376053416, "lastModifiedBy": "sVoCvBU1knmXzoYe" }, "_id": "Mw1g2Fx5dp4SoqVP", diff --git a/packs/module-docs/_source/Setting_Adjustments_YSuk1v59tLaL9XUK.json b/packs/module-docs/_source/Setting_Adjustments_YSuk1v59tLaL9XUK.json index afa67b3..90ece84 100644 --- a/packs/module-docs/_source/Setting_Adjustments_YSuk1v59tLaL9XUK.json +++ b/packs/module-docs/_source/Setting_Adjustments_YSuk1v59tLaL9XUK.json @@ -48,7 +48,7 @@ "image": {}, "text": { "format": 1, - "content": "

SWADE Trait and Damage Rolls can now take into account common modifiers based on the target, if there is exactly one attacker and one target. Most will show up on all trait rolls if the target conditions are right. Gang up bonuses will only show up on Fighting rolls.

Any of the proposed modifiers may be ignored by checking the Ignore checkbox. Some modifiers are pre-ignored and must be unchecked to take effect.

The following target conditions are checked for before trait rolls:

  1. Vulnerable

  2. Deflection (as applied by the Deflection power effect from this module)

  3. Arcane Protection (as applied by the Arcane Protection power effect from this module)

  4. Arcane Resistance

  5. Scale Modifiers

  6. Gang Up, taking into account Block and Formation Fighter

The following target conditions are checked for before damage rolls:

  1. Arcane Protection (as applied by the Arcane Protection power effect from this module)

  2. Arcane Resistance

  3. Special Abilities with 'weakness' in the swid (ignored by default, +4 damage)

  4. Special Abilities with 'resistance' in the swid (ignored by default, -4 damage)

  5. Gang Up bonus if the attacker has Pack Tactics

" + "content": "

SWADE Trait and Damage Rolls can now take into account common modifiers based on the target, if there is exactly one attacker and one target. Most will show up on all trait rolls if the target conditions are right. Gang up bonuses will only show up on Fighting rolls.

Any of the proposed modifiers may be ignored by checking the Ignore checkbox. Some modifiers are pre-ignored and must be unchecked to take effect.

The following target conditions are checked for before trait rolls:

  1. Vulnerable

  2. Deflection (as applied by the Deflection power effect from this module)

  3. Glow/Shroud (as applied by the power effect macros from this module)

  4. Arcane Protection (as applied by the Arcane Protection power effect from this module)

  5. Arcane Resistance

  6. Scale Modifiers

  7. Gang Up, taking into account Block and Formation Fighter

  8. Range modifiers

The following target conditions are checked for before damage rolls:

  1. Arcane Protection (as applied by the Arcane Protection power effect from this module)

  2. Arcane Resistance

  3. Special Abilities with 'weakness' in the swid (ignored by default, +4 damage)

  4. Special Abilities with 'resistance' in the swid (ignored by default, -4 damage)

  5. Gang Up bonus if the attacker has Pack Tactics

" }, "video": { "controls": true, @@ -66,7 +66,7 @@ "systemVersion": "3.2.5", "coreVersion": "11.315", "createdTime": 1703044226574, - "modifiedTime": 1703044226574, + "modifiedTime": 1703379713144, "lastModifiedBy": "sVoCvBU1knmXzoYe" }, "_key": "!journal.pages!YSuk1v59tLaL9XUK.BxFgDb91dqbkO9h4" @@ -85,7 +85,7 @@ "systemVersion": "3.2.5", "coreVersion": "11.315", "createdTime": 1695618001902, - "modifiedTime": 1703044226574, + "modifiedTime": 1703379713144, "lastModifiedBy": "sVoCvBU1knmXzoYe" }, "_id": "YSuk1v59tLaL9XUK", diff --git a/scripts/api.js b/scripts/api.js index c638e78..8bd119b 100644 --- a/scripts/api.js +++ b/scripts/api.js @@ -1,5 +1,5 @@ -import { log } from './shim.js' -import { requestRollFromTokens } from './helpers.js' +import { log, shim } from './shim.js' +import { requestFearRollFromTokens, requestRollFromTokens } from './helpers.js' import { powerEffects } from './powerEffects.js' export class api { @@ -11,8 +11,11 @@ export class api { static globals () { const moduleName = 'swade-mb-helpers' game.modules.get(moduleName).api = { + rulesVersion: shim.rulesVersion, + fearTable: shim.fearTableHelper, powerEffects, - requestRollFromTokens + requestRollFromTokens, + requestFearRollFromTokens } } } diff --git a/scripts/helpers.js b/scripts/helpers.js index 5e31f83..14e058f 100644 --- a/scripts/helpers.js +++ b/scripts/helpers.js @@ -1,5 +1,25 @@ import { shim } from './shim.js' +export async function requestFearRollFromTokens (tokens, options = {}) { + // tokens: list of tokens to request the roll from + // options: + // title: tile for the roll dialog. Will have "- {{ token name }}" appended + // flavour: flavor text for the roll card. Defaults to title + // fear: value of the fear modifier. Defaults to 0. Positive number. + const requestingUser = shim.user + const title = options?.title || `${requestingUser.name} requests a Fear check` + const flavour = options?.flavour || options?.flavor || title + const fear = options.fear || 0 + const rollOpts = { + title, + flavour, + mods: [ + { label: 'Fear Penalty', value: Math.abs(fear) * -1, ignore: false } + ] + } + return requestRollFromTokens(tokens, 'attribute', 'spirit', rollOpts) +} + export async function requestRollFromTokens (tokens, rollType, rollDesc, options = {}) { // tokens: list of tokens to request a roll from // rollType: 'attribute' or 'skill @@ -8,17 +28,20 @@ export async function requestRollFromTokens (tokens, rollType, rollDesc, options // title: title for the roll dialog. Will have "- {{ token name }}" // appended // flavour: flavor text for the roll card. Defaults to title + // targetNumber: defaults to 4 // mods: list of modifiers {label: "", value: 0, ignore: false} // modCallback: callback function that takes a token and returns a list of // modifiers in the same format as modifiers, above const requestingUser = shim.user const title = options?.title || `${requestingUser.name} requests a ${rollDesc} roll` const flavour = options?.flavour || options?.flavor || title + const targetNumber = options?.targetNumber || 4 const promises = [] for (const token of tokens) { const owner = shim.warpgateUtil.firstOwner(token.document) const rollOpts = { title: `${title} - ${token.name}`, + targetNumber, flavour } const additionalMods = [] @@ -39,7 +62,45 @@ export async function requestRollFromTokens (tokens, rollType, rollDesc, options promises.push(shim.socket.executeAsUser(requestTokenRoll, owner.id, token.scene.id, token.id, rollType, rollDesc, rollOpts)) } - const results = await Promise.allSettled(promises) + const results = (await Promise.allSettled(promises)).map(r => r.value) + const contentExtra = targetNumber === 4 ? '' : ` vs TN: ${targetNumber}` + const messageData = { + flavor: flavour, + speaker: { alias: 'Requested Roll Results' }, + whisper: [...shim.ChatMessage.getWhisperRecipients('GM'), requestingUser], + content: `

Results of ${rollDesc[0].toUpperCase()}${rollDesc.slice(1)} roll${contentExtra}:

+`, + rolls: [] + } + for (const result of results) { + const token = shim.game.scenes.get(result.sceneId).tokens.get(result.tokenId) + const roll = ( + result.result instanceof shim.CONFIG.Dice.SwadeRoll + ? result.result + : shim.CONFIG.Dice[result.result.class].fromData(result.result) + ) + roll.targetNumber = targetNumber + let textResult = '' + if (roll.successes === -1) { + textResult = 'CRITICAL FAILURE' + } else if (roll.successes === 0) { + textResult = 'failed' + } else if (roll.successes === 1) { + textResult = 'success' + } else { + textResult = `success and ${roll.successes - 1} raise${roll.successes > 2 ? 's' : ''}` + } + messageData.content += ('' + + `` + + `` + + `` + + '') + if (roll) { + messageData.rolls.unshift(roll) + } + } + messageData.content += '
TokenRollResult
${token.name}${roll ? roll.total : 'Canceled'}${textResult}
' + shim.ChatMessage.create(messageData, {}) return results } diff --git a/scripts/module.js b/scripts/module.js index 9e81b1e..d0eec1c 100644 --- a/scripts/module.js +++ b/scripts/module.js @@ -51,7 +51,7 @@ Hooks.on('init', () => { vision: { darkness: { adaptive: false }, defaults: { attenuation: 0.1, contrast: 0, saturation: 0, brightness: 0.75 }, - preferred: true + preferred: false } }) CONFIG.Canvas.visionModes.lowlight = new VisionMode({ @@ -67,7 +67,7 @@ Hooks.on('init', () => { vision: { darkness: { adaptive: false }, defaults: { attenuation: 0.1, contrast: 0, saturation: -0.5, brightness: -0.2 }, - preferred: true + preferred: false } }) }) diff --git a/scripts/powerEffects.js b/scripts/powerEffects.js index 0bb816d..e34bd0b 100644 --- a/scripts/powerEffects.js +++ b/scripts/powerEffects.js @@ -1,5 +1,5 @@ import { CONST, log, shim } from './shim.js' -import { requestRollFromTokens } from './helpers.js' +import { requestFearRollFromTokens, requestRollFromTokens } from './helpers.js' class PowerEffect { constructor (token, targets) { @@ -546,6 +546,34 @@ class EntangleEffect extends TargetedPowerEffect { } } +class FearEffect extends TargetedPowerEffect { + get name () { + return 'Fear' + } + + get baseDurationRounds () { + return 1 + } + + async prepResult () { + this.raise = (this.buttons === 'raise') + } + + async applyResult () { + await super.applyResult() + await shim.wait(1000) + const options = { + title: 'Fear check!', + flavor: 'Failure: roll on the Fear Table if wildcard, Panicked if extra', + mods: [] + } + if (this.raise) { + options.fear = '-2' + } + await requestFearRollFromTokens(this.targets, options) + } +} + class HavocEffect extends TargetedPowerEffect { get name () { return 'Havoc' @@ -1555,6 +1583,7 @@ const PowerClasses = { 'detectconceal-aracana': DetectConcealArcanaEffect, disguise: DisguiseEffect, entangle: EntangleEffect, + fear: FearEffect, havoc: HavocEffect, intangibility: IntangibilityEffect, invisibility: InvisibilityEffect, diff --git a/scripts/rollHelpers.js b/scripts/rollHelpers.js index 8bbf41c..8a606a5 100644 --- a/scripts/rollHelpers.js +++ b/scripts/rollHelpers.js @@ -19,9 +19,30 @@ export async function preTraitRollModifiers (actor, trait, roll, modifiers, opti ) { modifiers.push({ label: 'Target has Deflection', value: '-2', ignore: false }) } + if (targets.some( + target => target.actor.effects.filter( + e => !e.disabled && e.name.toLowerCase().includes('glow')).length > 0) + ) { + modifiers.push({ + label: 'Glowing target (negate 1 point of illumination penalty)', + value: '+1', + ignore: true + }) + } + if (targets.some( + target => target.actor.effects.filter( + e => !e.disabled && e.name.toLowerCase().includes('shroud')).length > 0) + ) { + modifiers.push({ + label: 'Shrouded target', + value: '-1', + ignore: false + }) + } if (targets.length === 1 && token) { const target = targets[0] _addArcaneModifiers(target, modifiers) + _addRangeModifiers(token, target, options, modifiers) const scaleMod = calcScaleMod(token, target) if (scaleMod !== 0) { modifiers.push({ label: 'Scale', value: scaleMod, ignore: false }) @@ -67,6 +88,25 @@ export async function preDamageRollModifiers (actor, item, roll, modifiers, opti } } +function _addRangeModifiers (token, target, options, modifiers) { + if (options?.item?.type !== 'weapon' || !options?.item?.system?.range.includes('/')) { + return + } + const ranges = options.item.system.range.split('/').map(x => parseInt(x)) + const distance = getDistance(token, target) + const rollmods = shim.CONFIG.SWADE.prototypeRollGroups.find(g => g.name === 'Range').modifiers + log('ITEM RANGES:', ranges) + if (distance <= ranges[0]) { + // nothing here + } else if (ranges.length >= 2 && distance <= ranges[1]) { + modifiers.push(rollmods[0]) + } else if (ranges.length >= 3 && distance <= ranges[2]) { + modifiers.push(rollmods[1]) + } else { + modifiers.push(rollmods[2]) // extreme range + } +} + function _addArcaneModifiers (target, modifiers) { if (_findItem(target.actor, 'edge', 'improved-arcane-resistance')) { modifiers.push({ label: 'Arcane Resistance', value: '-4', ignore: true }) @@ -86,12 +126,21 @@ function _addArcaneModifiers (target, modifiers) { } } -function withinRange (origin, target, range) { +function getScaleDistanceMod (token) { + const scale = token.actor.system.stats.scale + return (scale > 0 ? (scale / 2) : 0) +} + +function getDistance (origin, target) { const ray = new Ray(origin, target) + const originScale = getScaleDistanceMod(origin) + const targetScale = getScaleDistanceMod(target) const distance = shim.canvas.grid.measureDistances([{ ray }], { gridSpaces: true })[0] - const originScale = origin.actor.system.stats.scale - const targetScale = target.actor.system.stats.scale - range += (originScale > 0 ? originScale / 2 : 0) + (targetScale > 0 ? targetScale / 2 : 0) + return distance - (originScale + targetScale) +} + +function withinRange (origin, target, range) { + const distance = getDistance(origin, target) return range >= distance } diff --git a/scripts/shim.js b/scripts/shim.js index f8beeb1..affd294 100644 --- a/scripts/shim.js +++ b/scripts/shim.js @@ -17,10 +17,22 @@ export class shim { return ActiveEffect } + static get CONFIG () { + return CONFIG + } + static get Actor () { return Actor } + static get ChatMessage () { + return ChatMessage + } + + static get game () { + return game + } + static get canvas () { return game.canvas } @@ -63,6 +75,16 @@ export class shim { return shim._socket } + static get rulesVersion () { + if (game.modules.get('swpf-core-rules')?.active) { + return 'swpf' + } + if (game.modules.get('swade-core-rules')?.active) { + return 'swade' + } + return 'system' + } + static mergeObject (...args) { return mergeObject(...args) } @@ -136,6 +158,14 @@ export class shim { return warpgate.util } + static get fearTableHelper () { + switch (shim.rulesVersion) { + case 'swade': return coreFearDialog + case 'swpf': return swpfFearDialog + } + throw new ReferenceError('No premium module active. No fear table found') + } + static getActorFolderByPath (path) { const names = path.split('/') if (names[0] === '') { -- 2.30.2 From 8c06f0e2a16baaa0285ffd93658aa1df651862df Mon Sep 17 00:00:00 2001 From: Mike Bloy Date: Tue, 26 Dec 2023 22:09:51 -0600 Subject: [PATCH 2/2] Prepare 2.3.1 --- CHANGELOG.md | 4 +- config/token-variants-global-mappings.json | 660 ++++++++++++++++++ config/torch_swade.json | 111 +++ module.json | 9 +- packs/common-actions/LOG | 10 +- packs/gear/LOG | 10 +- packs/helper-actors/LOG | 10 +- packs/helper-macros/LOG | 10 +- packs/module-docs/000005.ldb | Bin 14296 -> 15582 bytes packs/module-docs/LOG | 10 +- packs/module-docs/MANIFEST-000002 | Bin 161 -> 161 bytes ...rs_for_Other_Modules_w4TImRTAiNiqDWeL.json | 96 +++ 12 files changed, 902 insertions(+), 28 deletions(-) create mode 100755 config/token-variants-global-mappings.json create mode 100644 config/torch_swade.json create mode 100644 packs/module-docs/_source/Helpers_for_Other_Modules_w4TImRTAiNiqDWeL.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 48f9d64..f4d6bd7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,10 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [2.3.1] 2023-12-26 ### Added +- Data file for the Torch module +- Import file for Token Variant Art's global effect mappings - Macro: Request fear check specialization macro - Macro: Fear Table to call the new fearTable api endpoint - API: rulesVersion property diff --git a/config/token-variants-global-mappings.json b/config/token-variants-global-mappings.json new file mode 100755 index 0000000..a0f335d --- /dev/null +++ b/config/token-variants-global-mappings.json @@ -0,0 +1,660 @@ +{ + "globalMappings": [ + { + "imgName": "", + "imgSrc": "", + "priority": 50, + "config": {}, + "overlay": true, + "alwaysOn": false, + "overlayConfig": { + "underlay": false, + "bottom": false, + "top": false, + "inheritTint": false, + "linkRotation": true, + "animation": { + "relative": false, + "rotate": false, + "duration": 30000, + "clockwise": true + }, + "linkMirror": true, + "linkScale": true, + "linkOpacity": false, + "loop": true, + "playOnce": false, + "img": "modules/JB2A_DnD5e/Library/Generic/Item/GlintMany01_01_Regular_Yellow_200x200.webm", + "alpha": 1, + "tint": "", + "offsetX": 0, + "offsetY": 0.38, + "scaleX": 0.4, + "scaleY": 0.4, + "angle": 0, + "filter": "DropShadowFilter", + "filterOptions": { + "rotation": 45, + "distance": 7, + "color": 0, + "alpha": 0.84, + "shadowOnly": false, + "blur": 2, + "quality": 0 + }, + "alwaysVisible": false, + "limitedUsers": [], + "limitOnHover": false, + "limitOnControl": false, + "text": { + "text": "Shaken", + "fontFamily": "Signika", + "fontSize": 36, + "letterSpacing": 0, + "fill": "#FFFFFF", + "dropShadow": "true", + "strokeThickness": 1, + "stroke": "#111111", + "curve": { + "radius": 0, + "invert": null + } + }, + "id": "mwFtNKpD" + }, + "targetActors": null, + "label": "Shaken", + "expression": "Shaken", + "id": "mwFtNKpD" + }, + { + "imgName": "", + "imgSrc": "", + "priority": 50, + "config": {}, + "overlay": true, + "alwaysOn": false, + "overlayConfig": { + "underlay": false, + "bottom": false, + "top": false, + "inheritTint": false, + "linkRotation": true, + "animation": { + "relative": false, + "rotate": true, + "duration": 30000, + "clockwise": true + }, + "linkMirror": true, + "linkScale": true, + "linkOpacity": false, + "loop": true, + "playOnce": false, + "img": "modules/JB2A_DnD5e/Library/Generic/Particles/ParticlesInward02_04_Regular_GreenYellow_400x400.webm", + "alpha": 1, + "tint": "", + "offsetX": 0, + "offsetY": 0, + "scaleX": 1.5, + "scaleY": 1.5, + "angle": 0, + "filter": "DropShadowFilter", + "filterOptions": { + "rotation": 45, + "distance": 7, + "color": 0, + "alpha": 0.84, + "shadowOnly": false, + "blur": 2, + "quality": 0 + }, + "alwaysVisible": false, + "limitedUsers": [], + "limitOnHover": false, + "limitOnControl": false, + "text": { + "text": "", + "fontFamily": "Signika", + "fontSize": 36, + "letterSpacing": 0, + "fill": "#FFFFFF", + "dropShadow": "true", + "strokeThickness": 1, + "stroke": "#111111", + "curve": { + "radius": 0, + "invert": null + } + }, + "id": "toTYr3DQ" + }, + "targetActors": null, + "label": "Distracted", + "expression": "Distracted", + "id": "toTYr3DQ" + }, + { + "imgName": "", + "imgSrc": "", + "priority": 50, + "config": {}, + "overlay": true, + "alwaysOn": false, + "overlayConfig": { + "underlay": false, + "bottom": false, + "top": false, + "inheritTint": false, + "linkRotation": true, + "animation": { + "relative": false, + "rotate": false, + "duration": 5200, + "clockwise": false + }, + "linkMirror": true, + "linkScale": true, + "linkOpacity": false, + "loop": true, + "playOnce": false, + "img": "modules/JB2A_DnD5e/Library/Generic/Marker/MarkerShieldCracked_02_Regular_Purple_400x400.webm", + "alpha": 1, + "tint": "", + "offsetX": 0, + "offsetY": 0, + "scaleX": 1.5, + "scaleY": 1.5, + "angle": 0, + "filter": "OutlineFilter", + "filterOptions": { + "thickness": 1, + "color": 0, + "quality": 0.1 + }, + "alwaysVisible": false, + "limitedUsers": [], + "limitOnHover": false, + "limitOnControl": false, + "text": { + "text": "", + "fontFamily": "Signika", + "fontSize": 36, + "letterSpacing": 0, + "fill": "#FFFFFF", + "dropShadow": "true", + "strokeThickness": 1, + "stroke": "#111111", + "curve": { + "radius": 0, + "invert": null + } + }, + "id": "J4GrRaxL" + }, + "targetActors": null, + "label": "Vulnerable", + "expression": "Vulnerable", + "id": "J4GrRaxL" + }, + { + "imgName": "", + "imgSrc": "", + "priority": 50, + "config": {}, + "overlay": true, + "alwaysOn": false, + "overlayConfig": { + "underlay": false, + "bottom": false, + "top": false, + "inheritTint": false, + "linkRotation": true, + "animation": { + "relative": false, + "rotate": false, + "duration": 5000, + "clockwise": true + }, + "linkMirror": true, + "linkScale": true, + "linkOpacity": false, + "loop": true, + "playOnce": false, + "img": "modules/JB2A_DnD5e/Library/Generic/UI/IconStun_01_Regular_Purple_200x200.webm", + "alpha": 1, + "tint": "", + "offsetX": 0, + "offsetY": 0, + "scaleX": 0.77, + "scaleY": 0.77, + "angle": 0, + "filter": "OutlineFilter", + "filterOptions": { + "thickness": 1, + "color": 0, + "quality": 0.1 + }, + "alwaysVisible": false, + "limitedUsers": [], + "limitOnHover": false, + "limitOnControl": false, + "text": { + "text": "", + "fontFamily": "Signika", + "fontSize": 36, + "letterSpacing": 0, + "fill": "#FFFFFF", + "dropShadow": "true", + "strokeThickness": 1, + "stroke": "#111111", + "curve": { + "radius": 0, + "invert": null + } + }, + "id": "nOfPMsQp" + }, + "targetActors": null, + "label": "Stunned", + "expression": "Stunned", + "id": "nOfPMsQp" + }, + { + "imgName": "", + "imgSrc": "", + "priority": 50, + "config": {}, + "overlay": true, + "alwaysOn": false, + "overlayConfig": { + "underlay": false, + "bottom": false, + "top": false, + "inheritTint": false, + "linkRotation": true, + "animation": { + "relative": false, + "rotate": false, + "duration": 5000, + "clockwise": true + }, + "linkMirror": true, + "linkScale": true, + "linkOpacity": false, + "loop": true, + "playOnce": false, + "img": "modules/JB2A_DnD5e/Library/1st_Level/Entangle/Entangle_01_Green_400x400.webm", + "alpha": 1, + "tint": "", + "offsetX": 0, + "offsetY": 0, + "scaleX": 1, + "scaleY": 1, + "angle": 0, + "filter": "DropShadowFilter", + "filterOptions": { + "rotation": 45, + "distance": 2, + "color": 2367281, + "alpha": 0.84, + "shadowOnly": false, + "blur": 2, + "quality": 0 + }, + "alwaysVisible": false, + "limitedUsers": [], + "limitOnHover": false, + "limitOnControl": false, + "text": { + "text": "", + "fontFamily": "Signika", + "fontSize": 36, + "letterSpacing": 0, + "fill": "#FFFFFF", + "dropShadow": "true", + "strokeThickness": 1, + "stroke": "#111111", + "curve": { + "radius": 0, + "invert": null + } + }, + "id": "rrdhKai4" + }, + "targetActors": null, + "label": "Entangled", + "expression": "Entangled", + "id": "rrdhKai4" + }, + { + "imgName": "", + "imgSrc": "", + "priority": 50, + "config": {}, + "overlay": true, + "alwaysOn": false, + "overlayConfig": { + "underlay": false, + "bottom": false, + "top": false, + "inheritTint": false, + "linkRotation": true, + "animation": { + "relative": false, + "rotate": false, + "duration": 5000, + "clockwise": true + }, + "linkMirror": true, + "linkScale": true, + "linkOpacity": false, + "loop": true, + "playOnce": false, + "img": "modules/JB2A_DnD5e/Library/Generic/Marker/MarkerChainStandard01_01_Regular_Red_Loop_400x400.webm", + "alpha": 1, + "tint": "", + "offsetX": 0, + "offsetY": 0, + "scaleX": 1.75, + "scaleY": 1.75, + "angle": 0, + "filter": "DropShadowFilter", + "filterOptions": { + "rotation": 45, + "distance": 2, + "color": 2367281, + "alpha": 0.84, + "shadowOnly": false, + "blur": 2, + "quality": 0 + }, + "alwaysVisible": false, + "limitedUsers": [], + "limitOnHover": false, + "limitOnControl": false, + "text": { + "text": "", + "fontFamily": "Signika", + "fontSize": 36, + "letterSpacing": 0, + "fill": "#FFFFFF", + "dropShadow": "true", + "strokeThickness": 1, + "stroke": "#111111", + "curve": { + "radius": 0, + "invert": null + } + }, + "id": "5RYi2X9W" + }, + "targetActors": null, + "label": "Bound", + "expression": "Bound", + "id": "5RYi2X9W" + }, + { + "imgName": "", + "imgSrc": "", + "priority": 50, + "config": { + "tv_script": { + "onApply": "", + "onRemove": "", + "tmfxPreset": "dropshadow" + } + }, + "overlay": false, + "alwaysOn": false, + "overlayConfig": { + "id": "KtequnXd" + }, + "targetActors": null, + "label": "Flying", + "expression": "Flying", + "id": "KtequnXd" + }, + { + "imgName": "", + "imgSrc": "", + "priority": 50, + "config": { + "tv_script": { + "onApply": "", + "onRemove": "", + "tmfxPreset": "glow" + } + }, + "overlay": false, + "alwaysOn": false, + "overlayConfig": { + "id": "k4boMPSb" + }, + "targetActors": null, + "label": "Conviction", + "expression": "Conviction", + "id": "k4boMPSb" + }, + { + "imgName": "", + "imgSrc": "", + "priority": 50, + "config": { + "light": { + "dim": 0.25, + "bright": 0, + "color": "#1c71d8", + "alpha": 0.4, + "animation": { + "type": "sunburst", + "speed": 3, + "intensity": 1 + } + } + }, + "overlay": true, + "alwaysOn": false, + "overlayConfig": { + "underlay": false, + "bottom": false, + "top": false, + "inheritTint": false, + "linkRotation": true, + "animation": { + "relative": false, + "rotate": true, + "duration": 5000, + "clockwise": true + }, + "linkMirror": true, + "linkScale": true, + "linkOpacity": false, + "loop": true, + "playOnce": false, + "img": "modules/JB2A_DnD5e/Library/Cantrip/Dancing_Lights/DancingLights_01_Yellow_200x200.webm", + "alpha": 1, + "tint": "", + "offsetX": 0, + "offsetY": 0.52, + "scaleX": 0.41, + "scaleY": 0.41, + "angle": 0, + "filter": "NONE", + "alwaysVisible": false, + "limitedUsers": [], + "limitOnHover": false, + "limitOnControl": false, + "text": { + "text": "", + "fontFamily": "Signika", + "fontSize": 36, + "letterSpacing": 0, + "fill": "#FFFFFF", + "dropShadow": "true", + "strokeThickness": 1, + "stroke": "#111111", + "curve": { + "radius": 0, + "invert": null + } + }, + "id": "eO68BGDl" + }, + "targetActors": null, + "label": "Glow", + "expression": "Glow", + "id": "eO68BGDl" + }, + { + "imgName": "", + "imgSrc": "", + "priority": 50, + "config": { + "texture": { + "tint": "#c0bfbc" + }, + "tv_script": { + "onApply": "", + "onRemove": "", + "tmfxPreset": "smoke" + } + }, + "overlay": false, + "alwaysOn": false, + "overlayConfig": { + "id": "BP0Xx8wD" + }, + "targetActors": null, + "label": "Shroud", + "expression": "Shroud", + "id": "BP0Xx8wD" + }, + { + "imgName": "", + "imgSrc": "", + "priority": 50, + "config": {}, + "overlay": true, + "alwaysOn": false, + "overlayConfig": { + "underlay": false, + "bottom": false, + "top": false, + "inheritTint": false, + "linkRotation": true, + "animation": { + "relative": false, + "rotate": false, + "duration": 5000, + "clockwise": true + }, + "linkMirror": true, + "linkScale": true, + "linkOpacity": false, + "loop": true, + "playOnce": false, + "img": "modules/JB2A_DnD5e/Library/Generic/Marker/MarkerShield_03_Regular_Green_400x400.webm", + "alpha": 1, + "tint": "", + "offsetX": 0, + "offsetY": 0, + "scaleX": 2, + "scaleY": 2, + "angle": 0, + "filter": "OutlineFilter", + "filterOptions": { + "thickness": 1, + "color": 0, + "quality": 0.1 + }, + "alwaysVisible": false, + "limitedUsers": [], + "limitOnHover": false, + "limitOnControl": false, + "text": { + "text": "", + "fontFamily": "Signika", + "fontSize": 36, + "letterSpacing": 0, + "fill": "#FFFFFF", + "dropShadow": "true", + "strokeThickness": 1, + "stroke": "#111111", + "curve": { + "radius": 0, + "invert": null + } + }, + "id": "gRwsZcZK" + }, + "targetActors": null, + "label": "Deflection (melee) || Deflection (range) || Deflection (raise)", + "expression": "Deflection (melee) || Deflection (range) || Deflection (raise)", + "id": "gRwsZcZK" + }, + { + "imgName": "", + "imgSrc": "", + "priority": 50, + "config": {}, + "overlay": true, + "alwaysOn": false, + "overlayConfig": { + "underlay": false, + "bottom": false, + "top": false, + "inheritTint": false, + "linkRotation": true, + "animation": { + "relative": false, + "rotate": false, + "duration": 5000, + "clockwise": true + }, + "linkMirror": true, + "linkScale": true, + "linkOpacity": false, + "loop": true, + "playOnce": false, + "img": "modules/JB2A_DnD5e/Library/1st_Level/Shield/Shield_01_Regular_Blue_Loop_400x400.webm", + "alpha": 1, + "tint": "", + "offsetX": 0, + "offsetY": 0, + "scaleX": 1.6, + "scaleY": 1.6, + "angle": 0, + "filter": "OutlineFilter", + "filterOptions": { + "thickness": 2.9, + "color": 0, + "quality": 0.1 + }, + "alwaysVisible": false, + "limitedUsers": [], + "limitOnHover": false, + "limitOnControl": false, + "text": { + "text": "", + "fontFamily": "Signika", + "fontSize": 36, + "letterSpacing": 0, + "fill": "#FFFFFF", + "dropShadow": "true", + "strokeThickness": 1, + "stroke": "#111111", + "curve": { + "radius": 0, + "invert": null + } + }, + "id": "1po9hq1m" + }, + "targetActors": null, + "label": "Protection", + "expression": "Protection", + "id": "1po9hq1m" + } + ] +} \ No newline at end of file diff --git a/config/torch_swade.json b/config/torch_swade.json new file mode 100644 index 0000000..2993439 --- /dev/null +++ b/config/torch_swade.json @@ -0,0 +1,111 @@ +{ + "swade": { + "system": "swade", + "topology": "standard", + "quantity" : "quantity", + "aliases": { + "Candle (1 hr, 2\" radius)": "Candle", + "Torch (1 hour, 4\" radius)": "Torch", + "Lantern, bullseye (10\" cone)": "Lantern, bullseye", + "Lantern, hooded (6\" radius)": "Lantern, hooded" + }, + "sources": { + "Candle (1 hr, 2\" radius)": { + "states": 2, + "light": [ + { + "bright": 0.5, "dim": 2, "angle": 360, "color": "#e68805", "alpha": 0.15, + "animation": { "type": "torch", "speed": 2, "intensity": 4, "reverse": false } + } + ] + }, + "Everburning Torch": { + "states": 2, + "light": [ + { + "bright": 0.5, "dim": 4, "angle": 360, "color": "#4dfbc2", "alpha": 0.15, + "animation": { "type": "torch", "speed": 2, "intensity": 4, "reverse": false } + } + ] + }, + "Lantern, bullseye (10\" cone)": { + "states": 3, + "light": [ + { + "bright": 4, "dim": 10, "angle": 180, "color": "#e68805", "alpha": 0.15, + "animation": { "type": "torch", "speed": 2, "intensity": 4, "reverse": false } + }, + { + "bright": 0, "dim": 3, "angle": 180, "color": "#e68805", "alpha": 0.15, + "animation": { "type": "torch", "speed": 2, "intensity": 4, "reverse": false } + } + ] + }, + "Lantern, hooded (6\" radius)": { + "states": 2, + "light": [ + { + "bright": 3, "dim": 6, "angle": 360, "color": "#e68805", "alpha": 0.15, + "animation": { "type": "torch", "speed": 2, "intensity": 4, "reverse": false } + } + ] + }, + "Torch (1 hour, 4\" radius)": { + "states": 2, + "light": [ + { + "bright": 0.5, "dim": 4, "angle": 360, "color": "#e68805", "alpha": 0.15, + "animation": { "type": "torch", "speed": 2, "intensity": 5, "reverse": false } + } + ] + }, + "Sunrod": { + "states": 2, + "light": [ + { + "bright": 6, "dim": 12, "angle": 360, "color": "#f9e380", "alpha": 0.15, + "animation": { "type": "sunburst", "speed": 1, "intensity": 3, "reverse": false } + } + ] + }, + "Lamp, Small (3\" radius)": { + "states": 2, + "light": [ + { + "bright": 1, "dim": 3, "angle": 360, "color": "#e9c40c", "alpha": 0.15, + "animation": { "type": "torch", "speed": 1, "intensity": 3, "reverse": false } + } + ] + }, + "Light / Darkness": { + "states": 3, + "light": [ + { + "bright": 1, "dim": 3, "angle": 360, "color": "#e9c40c", "alpha": 0.15, + "animation": { "type": "torch", "speed": 1, "intensity": 3, "reverse": false } + }, + { + "bright": 3, "dim": 10, "angle": 120, "color": "#e68805", "alpha": 0.15, + "animation": { "type": "torch", "speed": 2, "intensity": 4, "reverse": false } + } + ] + }, + "Lantern of Revealing": { + "light": [ + { + "bright": 1, "dim": 5, "angle": 360, "color": "#a80092", "alpha": 0.15, + "animation": { "type": "starlight", "speed": 1, "intensity": 3, "reverse": false } + } + ] + }, + "Robe of Scintillating Colors": { + "light": [ + { + "bright": 3, "dim": 5, "angle": 360, "color": "#888888", "alpha": 0.15, + "animation": { "type": "rainbowswirl", "speed": 1, "intensity": 2, "reverse": false } + } + ] + } + } + } +} diff --git a/module.json b/module.json index cc46075..10b10c7 100644 --- a/module.json +++ b/module.json @@ -110,7 +110,8 @@ }, { "id": "socketlib", - "type": "module" + "type": "module", + "compatibility": {} } ], "recommends": [ @@ -123,6 +124,10 @@ "id": "torch", "type": "module", "compatibility": {} + }, + { + "id": "JB2A_DnD5e", + "type": "module" } ] }, @@ -131,4 +136,4 @@ "download": "https://git.bloy.org/foundryvtt/swade-mb-helpers/archive/main.zip", "license": "./LICENSE", "readme": "./README.md" -} +} \ No newline at end of file diff --git a/packs/common-actions/LOG b/packs/common-actions/LOG index 1194ed8..3203f10 100644 --- a/packs/common-actions/LOG +++ b/packs/common-actions/LOG @@ -1,5 +1,5 @@ -2023/12/23-19:53:30.442930 7f73537bf700 Delete type=3 #1 -2023/12/23-19:53:30.445253 7f7351501700 Level-0 table #5: started -2023/12/23-19:53:30.448202 7f7351501700 Level-0 table #5: 12215 bytes OK -2023/12/23-19:53:30.451038 7f7351501700 Delete type=0 #3 -2023/12/23-19:53:30.451169 7f7351501700 Manual compaction at level-0 from '!folders!0nDRFmMBs5DBJU9M' @ 72057594037927935 : 1 .. '!items.effects!RC1Nz6iph8wPPK1B.g9W5hJisq3MsCpZW' @ 0 : 0; will stop at (end) +2023/12/26-22:07:49.642359 7f460bfff700 Delete type=3 #1 +2023/12/26-22:07:49.645609 7f4609ffb700 Level-0 table #5: started +2023/12/26-22:07:49.649148 7f4609ffb700 Level-0 table #5: 12215 bytes OK +2023/12/26-22:07:49.652094 7f4609ffb700 Delete type=0 #3 +2023/12/26-22:07:49.652273 7f4609ffb700 Manual compaction at level-0 from '!folders!0nDRFmMBs5DBJU9M' @ 72057594037927935 : 1 .. '!items.effects!RC1Nz6iph8wPPK1B.g9W5hJisq3MsCpZW' @ 0 : 0; will stop at (end) diff --git a/packs/gear/LOG b/packs/gear/LOG index b2a559c..bb3ca1a 100644 --- a/packs/gear/LOG +++ b/packs/gear/LOG @@ -1,5 +1,5 @@ -2023/12/23-19:53:31.230991 7f2e1bfff700 Delete type=3 #1 -2023/12/23-19:53:31.233147 7f2e19ffb700 Level-0 table #5: started -2023/12/23-19:53:31.235972 7f2e19ffb700 Level-0 table #5: 6787 bytes OK -2023/12/23-19:53:31.238668 7f2e19ffb700 Delete type=0 #3 -2023/12/23-19:53:31.238744 7f2e19ffb700 Manual compaction at level-0 from '!items!JWyBQe4tnOYljFAF' @ 72057594037927935 : 1 .. '!items!tWWSfEMmLmws6Yb1' @ 0 : 0; will stop at (end) +2023/12/26-22:07:50.435159 7f7f1dfbe700 Delete type=3 #1 +2023/12/26-22:07:50.437815 7f7c7ffff700 Level-0 table #5: started +2023/12/26-22:07:50.440822 7f7c7ffff700 Level-0 table #5: 6787 bytes OK +2023/12/26-22:07:50.443689 7f7c7ffff700 Delete type=0 #3 +2023/12/26-22:07:50.443866 7f7c7ffff700 Manual compaction at level-0 from '!items!JWyBQe4tnOYljFAF' @ 72057594037927935 : 1 .. '!items!tWWSfEMmLmws6Yb1' @ 0 : 0; will stop at (end) diff --git a/packs/helper-actors/LOG b/packs/helper-actors/LOG index f057aed..171c8bb 100644 --- a/packs/helper-actors/LOG +++ b/packs/helper-actors/LOG @@ -1,5 +1,5 @@ -2023/12/23-19:53:31.842430 7f67a8d9f700 Delete type=3 #1 -2023/12/23-19:53:31.844543 7f67837fe700 Level-0 table #5: started -2023/12/23-19:53:31.847334 7f67837fe700 Level-0 table #5: 1751 bytes OK -2023/12/23-19:53:31.850174 7f67837fe700 Delete type=0 #3 -2023/12/23-19:53:31.850251 7f67837fe700 Manual compaction at level-0 from '!actors!U5v4gFHquo0Y1SAq' @ 72057594037927935 : 1 .. '!actors!U5v4gFHquo0Y1SAq' @ 0 : 0; will stop at (end) +2023/12/26-22:07:51.015156 7fb5f1747700 Delete type=3 #1 +2023/12/26-22:07:51.017707 7fb5caffd700 Level-0 table #5: started +2023/12/26-22:07:51.020762 7fb5caffd700 Level-0 table #5: 1751 bytes OK +2023/12/26-22:07:51.023614 7fb5caffd700 Delete type=0 #3 +2023/12/26-22:07:51.023794 7fb5caffd700 Manual compaction at level-0 from '!actors!U5v4gFHquo0Y1SAq' @ 72057594037927935 : 1 .. '!actors!U5v4gFHquo0Y1SAq' @ 0 : 0; will stop at (end) diff --git a/packs/helper-macros/LOG b/packs/helper-macros/LOG index 4632a61..373eea1 100644 --- a/packs/helper-macros/LOG +++ b/packs/helper-macros/LOG @@ -1,5 +1,5 @@ -2023/12/23-19:53:32.597429 7efcc4fbd700 Delete type=3 #1 -2023/12/23-19:53:32.599577 7efcc3fbb700 Level-0 table #5: started -2023/12/23-19:53:32.602517 7efcc3fbb700 Level-0 table #5: 13110 bytes OK -2023/12/23-19:53:32.605253 7efcc3fbb700 Delete type=0 #3 -2023/12/23-19:53:32.605331 7efcc3fbb700 Manual compaction at level-0 from '!folders!hIbrWxg1nDutCSwt' @ 72057594037927935 : 1 .. '!macros!wU2mAUnw3RW9qMT8' @ 0 : 0; will stop at (end) +2023/12/26-22:07:51.541685 7f8180fbd700 Delete type=3 #1 +2023/12/26-22:07:51.544374 7f817ffbb700 Level-0 table #5: started +2023/12/26-22:07:51.547717 7f817ffbb700 Level-0 table #5: 13110 bytes OK +2023/12/26-22:07:51.550539 7f817ffbb700 Delete type=0 #3 +2023/12/26-22:07:51.550708 7f817ffbb700 Manual compaction at level-0 from '!folders!hIbrWxg1nDutCSwt' @ 72057594037927935 : 1 .. '!macros!wU2mAUnw3RW9qMT8' @ 0 : 0; will stop at (end) diff --git a/packs/module-docs/000005.ldb b/packs/module-docs/000005.ldb index 2e76e6047f8bddf97a292d5c72faba59a49fcf7d..b66ed6b7839bbd9154a5a3d6fb6434ce98bd4ed3 100644 GIT binary patch delta 10113 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 delta 8827 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 importable effect mapping for Token Variant Art's global effect configuration can be found at

/modules/swade-mb-helpers/config/token-variants-global-mappings.json

Most of the mappings require that the JB2A module (either the free or Patreon supporter version) be installed. It has configuration for visual effects the following.

  • Arcane Protection

  • Bound and Entangled

  • Conviction

  • Deflection

  • Distracted

  • Flying

  • Glow

  • Protection

  • Shaken

  • Shroud

  • Stunned

  • Vulnerable

" + }, + "video": { + "controls": true, + "volume": 0.5 + }, + "src": null, + "system": {}, + "ownership": { + "default": -1, + "sVoCvBU1knmXzoYe": 3 + }, + "flags": {}, + "_stats": { + "systemId": "swade", + "systemVersion": "3.2.5", + "coreVersion": "11.315", + "createdTime": 1703649017581, + "modifiedTime": 1703649392831, + "lastModifiedBy": "sVoCvBU1knmXzoYe" + }, + "_key": "!journal.pages!w4TImRTAiNiqDWeL.vQhO6BVdKZOubTUQ" + }, + { + "sort": 200000, + "name": "Torch", + "type": "text", + "_id": "VPc10iwSWh4COpk0", + "title": { + "show": true, + "level": 1 + }, + "image": {}, + "text": { + "format": 1, + "content": "

A configuration for the Torch module for many SWPF light giving objects can be found at

/modules/swade-mb-helpers/config/torch_swade.json

Thanks for the original version of this file goes to Mestre Digital and the Savage Pathfinder - Enhanced module.

" + }, + "video": { + "controls": true, + "volume": 0.5 + }, + "src": null, + "system": {}, + "ownership": { + "default": -1, + "sVoCvBU1knmXzoYe": 3 + }, + "flags": {}, + "_stats": { + "systemId": "swade", + "systemVersion": "3.2.5", + "coreVersion": "11.315", + "createdTime": 1703649397890, + "modifiedTime": 1703649397890, + "lastModifiedBy": "sVoCvBU1knmXzoYe" + }, + "_key": "!journal.pages!w4TImRTAiNiqDWeL.VPc10iwSWh4COpk0" + } + ], + "folder": null, + "ownership": { + "default": 0, + "sVoCvBU1knmXzoYe": 3 + }, + "flags": { + "core": { + "sheetClass": "" + } + }, + "_stats": { + "systemId": "swade", + "systemVersion": "3.2.5", + "coreVersion": "11.315", + "createdTime": 1703649004019, + "modifiedTime": 1703649669283, + "lastModifiedBy": "sVoCvBU1knmXzoYe" + }, + "_id": "w4TImRTAiNiqDWeL", + "sort": 0, + "_key": "!journal!w4TImRTAiNiqDWeL" +} -- 2.30.2