working but imperfect mirror self

This commit is contained in:
Mike Bloy 2023-09-10 17:39:23 -05:00
parent 66ea4c4388
commit 7dce7780b9
2 changed files with 52 additions and 0 deletions

View File

@ -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 = {

View File

@ -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)))