From a3733fa4cc9091586d93918dc319ab29170f6f3f Mon Sep 17 00:00:00 2001 From: Mike Bloy Date: Tue, 13 Feb 2024 22:29:48 -0600 Subject: [PATCH] add spiritual weapon summon --- CHANGELOG.md | 6 + module.json | 2 +- packs/common-actions/000005.ldb | Bin 15710 -> 17250 bytes packs/common-actions/LOG | 10 +- packs/common-actions/MANIFEST-000002 | Bin 161 -> 162 bytes .../_source/Smite_jGOCDAjMQ3uDOhvn.json | 67 +++++++++++ packs/gear/LOG | 10 +- packs/helper-actors/LOG | 10 +- packs/helper-macros/000005.ldb | Bin 21634 -> 21261 bytes packs/helper-macros/LOG | 10 +- packs/helper-macros/MANIFEST-000002 | Bin 138 -> 138 bytes ...e___Spiritual_Weapon_JzzC728WBjbE7qUP.json | 25 +++++ packs/module-docs/000005.ldb | Bin 17541 -> 17816 bytes packs/module-docs/LOG | 10 +- packs/module-docs/MANIFEST-000002 | Bin 162 -> 162 bytes .../_source/Macros_Mw1g2Fx5dp4SoqVP.json | 12 +- scripts/powerEffects.js | 105 ++++++++++++++++++ scripts/rollHelpers.js | 4 +- 18 files changed, 237 insertions(+), 34 deletions(-) create mode 100644 packs/common-actions/_source/Smite_jGOCDAjMQ3uDOhvn.json create mode 100644 packs/helper-macros/_source/Smite___Spiritual_Weapon_JzzC728WBjbE7qUP.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 5730001..8539505 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +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). +## [2.4.1] 2024-02-13 + +### Added + +- Added support for SWPF Smite's Spiritual Weapon (from the APG) + ## [2.4.0] 2024-02-11 ### Added diff --git a/module.json b/module.json index 7ee4d8b..5148c0f 100644 --- a/module.json +++ b/module.json @@ -1,7 +1,7 @@ { "id": "swade-mb-helpers", "title": "SWADE Helpers (MB)", - "version": "2.4.0", + "version": "2.4.1", "description": "Mike's collection of swade helpers", "authors": [ { diff --git a/packs/common-actions/000005.ldb b/packs/common-actions/000005.ldb index 6f58a619f29bd1b6d828a05decb03bc5db8c06a0..6e1abbad0f4aa8f0f2f575f63e87f413cf532ae7 100644 GIT binary patch delta 5358 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 delta 4219 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 Ky)~(=@BAMtXBR*apdu#Kv~~kQ0(P32SL(uOsa$ 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 delta 6444 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 diff --git a/packs/helper-macros/LOG b/packs/helper-macros/LOG index e2c691d..84c0bee 100644 --- a/packs/helper-macros/LOG +++ b/packs/helper-macros/LOG @@ -1,5 +1,5 @@ -2024/02/11-16:18:02.642184 7fcfc77fe700 Delete type=3 #1 -2024/02/11-16:18:02.644770 7fcfc5d82700 Level-0 table #5: started -2024/02/11-16:18:02.650970 7fcfc5d82700 Level-0 table #5: 21634 bytes OK -2024/02/11-16:18:02.657857 7fcfc5d82700 Delete type=0 #3 -2024/02/11-16:18:02.658018 7fcfc5d82700 Manual compaction at level-0 from '!folders!A3iVDJD2cTuTLpBu' @ 72057594037927935 : 1 .. '!macros!wU2mAUnw3RW9qMT8' @ 0 : 0; will stop at (end) +2024/02/13-22:26:03.793278 7f9d24fbc700 Delete type=3 #1 +2024/02/13-22:26:03.795568 7f9a87fff700 Level-0 table #5: started +2024/02/13-22:26:03.798917 7f9a87fff700 Level-0 table #5: 21261 bytes OK +2024/02/13-22:26:03.801661 7f9a87fff700 Delete type=0 #3 +2024/02/13-22:26:03.801767 7f9a87fff700 Manual compaction at level-0 from '!folders!A3iVDJD2cTuTLpBu' @ 72057594037927935 : 1 .. '!macros!wU2mAUnw3RW9qMT8' @ 0 : 0; will stop at (end) diff --git a/packs/helper-macros/MANIFEST-000002 b/packs/helper-macros/MANIFEST-000002 index d7c62c8b49e4f566bfc1c3e30e98926d0335976c..325bae382b439f495cace0a6a2d084aaea9c167a 100644 GIT binary patch delta 95 zcmeBT>|&f?6d}^$Y#PYG$i%|Qz|6*?&CbNyyNpp$F)cqQCAFwn(a|_F%*D&aC^@7w q#HYZilu?TT3=|Y|6O)Vbixta5jdC4B^U95b!YvDZLo688AqoI1`xX}f delta 95 zcmeBT>|&f?6fyDWHMc+pMkW?c24*%EEp{f>rj?9}ifQ>dDXB%pijKyaVJ==SM#&+i rAwC68rHq;kV4$Fwo0wdbU#wUjYLx33npbWd6mD7Q8)Ctz22lV2p=B3t diff --git a/packs/helper-macros/_source/Smite___Spiritual_Weapon_JzzC728WBjbE7qUP.json b/packs/helper-macros/_source/Smite___Spiritual_Weapon_JzzC728WBjbE7qUP.json new file mode 100644 index 0000000..0db0121 --- /dev/null +++ b/packs/helper-macros/_source/Smite___Spiritual_Weapon_JzzC728WBjbE7qUP.json @@ -0,0 +1,25 @@ +{ + "folder": "hIbrWxg1nDutCSwt", + "name": "Smite - Spiritual Weapon", + "type": "script", + "_id": "JzzC728WBjbE7qUP", + "author": "sVoCvBU1knmXzoYe", + "img": "icons/weapons/hammers/hammer-double-glowing-yellow.webp", + "scope": "global", + "command": "game.modules.get('swade-mb-helpers').api.powerEffects({\n token,\n targets: game.user.targets,\n name: 'spiritual-weapon'\n})", + "sort": 0, + "ownership": { + "default": 0, + "sVoCvBU1knmXzoYe": 3 + }, + "flags": {}, + "_stats": { + "systemId": "swade", + "systemVersion": "3.2.5", + "coreVersion": "11.315", + "createdTime": 1707874116560, + "modifiedTime": 1707875900366, + "lastModifiedBy": "sVoCvBU1knmXzoYe" + }, + "_key": "!macros!JzzC728WBjbE7qUP" +} diff --git a/packs/module-docs/000005.ldb b/packs/module-docs/000005.ldb index 4bb5827cbc0e3c78042399b4c4d12203864e0c40..74ba9935c5399873ac27663315194da560cb55ab 100644 GIT binary patch delta 1267 zcmZ9MZ)_7~9LJxhy^_23`m}c|-GFXBy={~(UFo)tZewX^w;`R`>|k#GL%p@n+GE#V zcXy?Z1Sf_O1`>&fN`Qb!h#{GgI7LK^EQ-D`3yHxHVSRjH6ReHR#TI|O=Lk>}>)|}mI!*$y7Y*7PZZJT!e-*&W$R?7~aY@p%@F%(?rO~%E z_I0L|G>K{j<}PSt?oypAEpFh0Ge9~q#>`M7r0HFdw)a}}xxdi74ekq`1qsF}jbafK zZ1K9%VoqF6*Lp7mtBNHiUzT~-(F%97L=iaY3u0$DCO@=1rc0Z86s z{)Qb%2ii{a!>H#1T~HPAM$8cw@hA~hTp)Q-)+eT(IJz1hn)8dY6PMqR6OZs-#03(+ z^CbsG(&#wr)QC({kd-Eto<_Q}5aq8~r!G+{L2uANTy@H}_#l-dKgYqyQl|ryMB3G- zjov6;6YW&Wca;ywl6j~h_VhbOv!Tf8Ot{y<$c`#wku0;s;KfAhB+)e z=77t94u|q7Xk~FLqC-eOKR_JlAFXnMyeJ_JS0Le^lzG{TvjI^1c0sHX` zEh{B7j#yF66p`5mwCFEv{of$jxW&0bQE@05K6F?V%p zV>w$;xOdY$deaO7Yx~VqN6S46b=X1$BB7R0d-+6KTiW_96kgTV-V%v~!>zp*s`LL{ z;H{;emA1VZrKvh$D<}_qu=D5>H43Cszjd?}X`pb@1h)!x!E$B|(+hyGbdkWv0P` zm?4@s0q--=1#TFhc2#q~^7q`kLI7;yLhK*@>#nuN^{y)4578ehAE*T`fF2UF5klYKEwOeLv4i4P`P6O*PS*7#5pyd++t)aAh!PjXI9 zPQLHq`_6aiJUnv_e)PJjxi!+(8VdVEVK<)^+kb{nb}hgPqLt5V|YAORQV=J@a-%`8xhWpn)>%7>UlAVdB-s@ zQBIPmbO?C;-Vo1@(8h9Gg|Wt!36>umkM)IxaLKoj5DxkMd%o$}A;$G_ccH}izkSAC zu6kKwh>!pwFEKTvcrl0dEMg7PiF)R7Vu2lGh=SUzG4d4SY9^%2#uT&p8aG3K_9v-o zitBgwzAY%CIV@^O#j=>r7Gkqv6uz_K4@#PpMI~8jl$Wye<*Ss#&FxytUtkEFWN%pQ zI!@yRT&6)bwife{9cm}{8yUMtXn1oSh^@D%{cA)9UmvWkVl29INRbyBb#|0qId?EF zr7?};&FD70a@zXs+*RtLBci3eBhkND3R0dtJG!wSq4^vEIiJ6XviLF zCd35SMmi-OX*ro&{)B`z_R*Y-h8hMa1l-%Xt;Z{8F-l2Gn4Pv^l}syn_7qKvS}MoV zR4HM9SR4KU!=6+2CPhO+cfm^crp2Xq-zV|OY{OCRqV>QLt8+|oBN4gG-nW1w!ycyX zb5bg&m48Ws4C^TQn^u$sw0&urIzOpuxU(anByp!7J;N)Cg7k!_6;^(-loK5-kl)=g z&+V9p-Ml`b^elCc`xfNP55w>S&=?%D!{HA^>p0 zA&}dR4+aDf9SKTfzNh-7LLn?Ba$>J{&>_%Yb^KV-I|I5)P_@<}IB&%bJE-jZ6o6?* mUCo{3?Fv8 delta 30 lcmZ3)xQKCrkw~)LMvY7cMkW?c24*%ENp>dI*3OA;F#v2U2893s diff --git a/packs/module-docs/_source/Macros_Mw1g2Fx5dp4SoqVP.json b/packs/module-docs/_source/Macros_Mw1g2Fx5dp4SoqVP.json index 589c15e..e7c54c1 100644 --- a/packs/module-docs/_source/Macros_Mw1g2Fx5dp4SoqVP.json +++ b/packs/module-docs/_source/Macros_Mw1g2Fx5dp4SoqVP.json @@ -38,7 +38,7 @@ }, { "sort": 200000, - "name": "Summoning", + "name": "Summoning & Spiritual Weapon", "type": "text", "_id": "9kDcPyCrI6hbF0qA", "title": { @@ -48,7 +48,7 @@ "image": {}, "text": { "format": 1, - "content": "

The Summon effects expects to have one and only one target, and depends on the existence of an Actor folder called \"Summonables/<POWER>\" on the Actor sidebar (eg \"Summonables/Summon Ally\"). If this folder has subfolders, they'll be used by the macro to sort the list of available summonables. In the Summonables/<POWER> folder and subfolders, place the Actors that are available for summoning.

Template Actors

The Summonables/<POWER> folders are enhanced by template npc actors. If present, these enable additional automation when using some aspects of SWADE or SWPF summoning. All Summon powers (but not Zombie) benefit from an npc actor called \"raise_template\", which should have your handmade or purchased system content's 'Resilient' ability (and any effects embedded in that ability).

Summon Ally

The Summon Ally power requires some additional setup:

  1. an NPC actor called \"Mirror Self\" that has your version of the Construct and Fearless special abilities (only)

  2. (optional but recommended) the additional template actors described below

\"Summonables/Summon Ally\" also benefit from \"bite-claw_template\", \"combat-edge_template\", \"flight_template\", in addition to \"raise_template\" mentioned above. In all template actors, please ensure that no two Items are named exactly the same (eg an Edge named 'Frenzy' and an action named 'Frenzy' will not work) due to a limitation in WarpGate.

(I cannot include these template actors in this module because a) they'd be different for SWADE and SWPF, and b) I can't redistribute the embedded abilities as it is copyrighted material).

bite-claw_template

This npc actor needs items (like a claw weapon and a claws special ability) that are transferred to the summoned token.

combat-edge_template

This npc actor should have every combat edge you want to support dragged to the actor.

flight_template

This npc actor should have a Flight Item (probably a special ability) and/or the Flying active effect.

Zombie

The Zombie power requires an additional step as well. Raises are different for Zombie, as are some other effects. Zombie therefore does not require a \"raise_template\", but does need an \"armed_template\" which should have (only) Items that represent a hand weapon and a ranged weapon.

The macro assumes that both Zombie and Skeleton tokens will be added to the Summonables/Zombie folder, and doesn't attempt to apply the 'Skeletal' modifier directly.

" + "content": "

The Summon effects expects to have one and only one target, and depends on the existence of an Actor folder called \"Summonables/<POWER>\" on the Actor sidebar (eg \"Summonables/Summon Ally\"). If this folder has subfolders, they'll be used by the macro to sort the list of available summonables. In the Summonables/<POWER> folder and subfolders, place the Actors that are available for summoning.

Template Actors

The Summonables/<POWER> folders are enhanced by template npc actors. If present, these enable additional automation when using some aspects of SWADE or SWPF summoning. All Summon powers (but not Zombie) benefit from an npc actor called \"raise_template\", which should have your handmade or purchased system content's 'Resilient' ability (and any effects embedded in that ability).

Summon Ally

The Summon Ally power requires some additional setup:

  1. an NPC actor called \"Mirror Self\" that has your version of the Construct and Fearless special abilities (only)

  2. (optional but recommended) the additional template actors described below

\"Summonables/Summon Ally\" also benefit from \"bite-claw_template\", \"combat-edge_template\", \"flight_template\", in addition to \"raise_template\" mentioned above. In all template actors, please ensure that no two Items are named exactly the same (eg an Edge named 'Frenzy' and an action named 'Frenzy' will not work) due to a limitation in WarpGate.

(I cannot include these template actors in this module because a) they'd be different for SWADE and SWPF, and b) I can't redistribute the embedded abilities as it is copyrighted material).

bite-claw_template

This npc actor needs items (like a claw weapon and a claws special ability) that are transferred to the summoned token.

combat-edge_template

This npc actor should have every combat edge you want to support dragged to the actor.

flight_template

This npc actor should have a Flight Item (probably a special ability) and/or the Flying active effect.

Zombie

The Zombie power requires an additional step as well. Raises are different for Zombie, as are some other effects. Zombie therefore does not require a \"raise_template\", but does need an \"armed_template\" which should have (only) Items that represent a hand weapon and a ranged weapon.

The macro assumes that both Zombie and Skeleton tokens will be added to the Summonables/Zombie folder, and doesn't attempt to apply the 'Skeletal' modifier directly.

Spiritual Weapon

Smite's Spiritual Weapon works as a separate macro from the effect macro, that summons a spiritual weapon. Put the potential Spiritual Weapon tokens in a Summonables/Spiritual Weapon folder. The macro will copy the specified arcane skill from the summoner, but the spiritual weapon actor should have a weapon object with a swid of 'spritual-weapon'. This item will be modified with an action for the arcane skill, and if a raise the damage will be increased.

" }, "video": { "controls": true, @@ -65,8 +65,8 @@ "systemVersion": "3.2.5", "coreVersion": "11.315", "createdTime": 1695617584063, - "modifiedTime": 1707689507522, - "lastModifiedBy": "Aqnn9hCDQPbyTWiq" + "modifiedTime": 1707884427597, + "lastModifiedBy": "sVoCvBU1knmXzoYe" }, "_key": "!journal.pages!Mw1g2Fx5dp4SoqVP.9kDcPyCrI6hbF0qA" }, @@ -331,8 +331,8 @@ "systemVersion": "3.2.5", "coreVersion": "11.315", "createdTime": 1678169291843, - "modifiedTime": 1707689657257, - "lastModifiedBy": "Aqnn9hCDQPbyTWiq" + "modifiedTime": 1707884427597, + "lastModifiedBy": "sVoCvBU1knmXzoYe" }, "_id": "Mw1g2Fx5dp4SoqVP", "folder": null, diff --git a/scripts/powerEffects.js b/scripts/powerEffects.js index e34bd0b..d30f885 100644 --- a/scripts/powerEffects.js +++ b/scripts/powerEffects.js @@ -1378,6 +1378,110 @@ class SummonAllyEffect extends SummonEffect { } } +class SpiritualWeaponEffect extends SummonEffect { + get name () { + return 'Spiritual Weapon' + } + + async prepMenu () { + await super.prepMenu() + this.menuData.buttons = [ + this.menuData.buttons[0], + { label: 'Apply with Raise', value: 'raise' }, + this.menuData.buttons[1] + ] + this.menuData.inputs.pop() + this.menuData.inputs.pop() + this.menuData.inputs[this.menuData.inputs.length - 1].label = 'Weapon to summon' + const arcaneSkills = this.token.actor.items + .filter(i => i.type === 'skill').filter(s => ( + s.system.swid === 'faith' || + s.system.swid === 'spellcasting' || + s.system.swid === 'performance')).map(s => { + return { + value: s.system.swid, + html: s.name + } + }) + this.menuData.inputs.push( + { type: 'select', label: 'Arcane Skill', options: arcaneSkills } + ) + } + + async prepResult () { + this.raise = (this.buttons === 'raise') + this.actorId = this.inputs[this.inputIndex] + this.arcaneSkillSwid = this.inputs[this.inputIndex + 1] + this.actor = shim.actors.get(this.actorId) + this.icon = 'icons/weapons/hammers/hammer-double-glowing-yellow.webp' + this.protoDoc = await this.actor.getTokenDocument() + this.spawnOptions = { + controllingActor: this.token.actor, + duplicates: 1, + updateOpts: { + embedded: { + Item: { renderSheet: null } + } + }, + crosshairs: { + icon: this.icon, + label: `Summon ${this.actor.name}`, + drawOutline: true, + rememberControlled: true + } + } + this.spawnMutation = { + actor: { + name: `${this.token.name}'s ${this.actor.name}`, + system: { + wildcard: this.token.actor.system.wildcard, + attributes: { + spirit: { + die: { + sides: this.token.actor.system.attributes.spirit.die.sides, + modifier: this.token.actor.system.attributes.spirit.die.modifier + }, + 'wild-die': { + sides: this.token.actor.system.attributes.spirit['wild-die'].sides + } + } + } + } + }, + token: { + actorLink: false, + name: `${this.token.name}'s ${this.protoDoc.name}`, + disposition: this.token.document.disposition, + sight: { enabled: false } + }, + embedded: { ActiveEffect: {}, Item: {} } + } + const weaponItemId = this.actor.items.find(i => + i.type === 'weapon' && i.system.swid === 'spiritual-weapon').id + const weaponDoc = this.actor.getEmbeddedDocument('Item', weaponItemId).clone() + const arcaneSkill = this.token.actor.items.find(i => i.type === 'skill' && i.system.swid === this.arcaneSkillSwid) + const arcaneDoc = this.token.actor.getEmbeddedDocument('Item', arcaneSkill.id).clone() + this.spawnMutation.embedded.Item[weaponDoc.name] = { + system: { + damage: '@spi+d4', + actions: { + trait: arcaneDoc.name + } + } + } + // weaponDoc.system.actions.trait = arcaneDoc.name + if (this.raise) { + this.spawnMutation.embedded.Item[weaponDoc.name].system.damage = '@spi+d6' + // weaponDoc.system.damage = '@spi+d6' + } + this.spawnMutation.embedded.Item[arcaneDoc.name] = arcaneDoc + // this.spawnMutation.embedded.Item[weaponDoc.name] = weaponDoc + for (const effectDocument of this.effectDocs) { + this.spawnMutation.embedded.ActiveEffect[effectDocument.name] = effectDocument + } + } +} + class SummonAnimalEffect extends SummonEffect { get name () { return 'Summon Animal' @@ -1597,6 +1701,7 @@ const PowerClasses = { slothspeed: SlothSpeedEffect, smite: SmiteEffect, speed: SlothSpeedEffect, + 'spiritual-weapon': SpiritualWeaponEffect, 'summon ally': SummonAllyEffect, 'summon-ally': SummonAllyEffect, 'summon animal': SummonAnimalEffect, diff --git a/scripts/rollHelpers.js b/scripts/rollHelpers.js index 7c44607..ded7f2f 100644 --- a/scripts/rollHelpers.js +++ b/scripts/rollHelpers.js @@ -73,12 +73,12 @@ export async function preDamageRollModifiers (actor, item, roll, modifiers, opti const target = targets[0] _addArcaneModifiers(target, modifiers) const weaknesses = target.actor.items.filter( - i => i.type === 'ability' && i.system.swid.toLowerCase().includes('weakness')) + i => i.type === 'ability' && i.system.swid.toLowerCase().includes('environmental-weakness')) if (weaknesses.length > 0) { modifiers.push(...weaknesses.map(i => { return { label: i.name, value: '+4', ignore: true } })) } const resistances = target.actor.items.filter( - i => i.type === 'ability' && i.system.swid.toLowerCase().includes('resistance')) + i => i.type === 'ability' && i.system.swid.toLowerCase().includes('environmental-resistance')) if (resistances.length > 0) { modifiers.push(...resistances.map(i => { return { label: i.name, value: '-4', ignore: true } })) }