diff --git a/scripts/powerEffects.js b/scripts/powerEffects.js index 49fc326..3b4ce12 100644 --- a/scripts/powerEffects.js +++ b/scripts/powerEffects.js @@ -752,6 +752,7 @@ class SummonAllyEffect extends SummonEffect { this.biteClaw = !!(this.inputs[this.inputIndex]) this.combatEdge = !!(this.inputs[this.inputIndex + 1]) this.flight = !!(this.inputs[this.inputIndex + 2]) + await this.prepMirrorSelf() } async prepAdditional () { @@ -830,6 +831,53 @@ class SummonAllyEffect extends SummonEffect { log(`Added ${effect.name} to spawn mutation`) } } + + async prepMirrorSelf () { + if (this.actor.name !== 'Mirror Self') { + return + } + const actorDoc = this.token.actor.clone({ + 'system.wildcard': false, + 'system.fatigue.value': 0, + 'system.wounds.value': 0, + 'system.wounds.max': 0, + 'system.bennies.max': 0, + 'system.bennies.value': 0 + }) + await shim.mergeObject( + this.spawnMutation.actor, { + name: `Mirrored ${this.token.actor.name}`, + img: this.token.actor.img, + system: actorDoc.system + }, { inplace: true, recursive: true } + ) + await shim.mergeObject( + this.spawnMutation.token, { + actorLink: false, + disposition: this.token.document.disposition, + light: this.token.document.light, + sight: this.token.document.sight, + name: `Mirrored ${this.token.name}`, + texture: this.token.document.texture + }, { inplace: true, recursive: true }) + this.spawnMutation.token.texture.scaleX = -1 * this.token.document.texture.scaleX + const effectChanges = [] + for (const item of this.token.actor.items) { + this.spawnMutation.embedded.Item[item.name] = + this.token.actor.getEmbeddedDocument('Item', item.id) + if (item.type === 'skill') { + effectChanges.push({ + key: `@Skill{${item.name}}[system.die.sides]`, + mode: CONST.FOUNDRY.ACTIVE_EFFECT_MODES.ADD, + value: '-2', + priority: 0 + }) + } + } + this.spawnMutation.embedded.ActiveEffect['Mirror Self'] = + shim.createEffectDocument(this.ICON, 'Mirror Self', + this.durationRounds, effectChanges) + } } const PowerClasses = { diff --git a/scripts/shim.js b/scripts/shim.js index 26c7e8c..03d601b 100644 --- a/scripts/shim.js +++ b/scripts/shim.js @@ -41,6 +41,10 @@ export class shim { return game.actors } + static mergeObject (...args) { + return mergeObject(...args) + } + static getStatus (label, name, favorite = true) { const effect = JSON.parse(JSON.stringify( CONFIG.statusEffects.find(se => se.label === label)))