DataModel for a single active effect modification entry.
Stored as system.modifications[] on BodyMindSoulActiveEffect.
Field key patterns (resolved in prepareDerivedData):
resistance. - e.g. resistance.slash
resistance.group. - e.g. resistance.group.kinetic
resistance.all
attribute. - e.g. attribute.str
attribute.group. - e.g. attribute.group.body
attribute.all
vector. - e.g. vector.luck
vector.all
vital..max - e.g. vital.health.max
vital..surgeValue - e.g. vital.health.surgeValue
resource..max - e.g. resource.mana.max
resource..value - e.g. resource.mana.value
damage.incoming - global incoming damage (bonus/multiply)
damage.outgoing - global outgoing damage (bonus/multiply)
damage.outgoing. - per-type outgoing damage (bonus/multiply)
damage.outgoing.group. - per-arctype outgoing damage (bonus/multiply)
damage.outgoing.damageType - override outgoing damage type (set only; value is the type name as a string-encoded value or external convention)
damage.incoming.startingLayer - force starting layer for incoming damage (set only; layer name in mod.label: "tempHp"|"shields"|"health"; deepest of multiple AEs wins)
damage.incoming.confirmNegate - require Confirm-to-Negate for incoming damage (set with value 1; on target)
damage.outgoing.confirmNegate - require Confirm-to-Negate for outgoing damage (set with value 1; on attacker)
damage.incoming.confirmCrit - require Confirm-to-Crit for incoming damage (set with value 1; on target)
damage.outgoing.confirmCrit - require Confirm-to-Crit for outgoing damage (set with value 1; on attacker)
restore.incoming - global incoming restore (bonus/multiply)
restore.outgoing - global outgoing restore (bonus/multiply)
restore..incoming - per-vital incoming restore (bonus/multiply)
restore..outgoing - per-vital outgoing restore (bonus/multiply)
damage.outgoing.keyword. - per-keyword outgoing damage (bonus/multiply); applies when the firing action/weapon carries
damage.outgoing.piercing - global resistance piercing (addBonus = stages); shifts target's resistance ladder up by N, capped at neutral
damage.outgoing.piercing. - per-type resistance piercing (addBonus = stages)
damage.outgoing.piercing.group. - per-arctype resistance piercing (addBonus = stages)
duration.swing. - per-swing-type duration modifier (bonus/multiply); hold swings ignore
duration.swing.all - duration modifier applied to every swing type (stacks with specific types)
duration.effect - effect-duration modifier for tracker-queued effects (caster's side; bonus/multiply)
advantage - advantage stage shift (addStages/setStage)
tracker.revealActions - set=1; string-payload (mod.label): "caster" reveals to AE origin's owner, "all" reveals to all players; processed at queue time in queueSwing()
tracker.revealKeywords - set=1; reveals action keywords in tracker tooltip for any player who can see the action
drawOverride - push a draw override whose lifecycle mirrors the AE; config stored in mod.config
mod.config: { mode, sourceType, sourceDeckId, sourceStackId, charges, expiryType, expiryValue, label }
DataModel for a single active effect modification entry. Stored as system.modifications[] on BodyMindSoulActiveEffect.
Field key patterns (resolved in prepareDerivedData): resistance. - e.g. resistance.slash
resistance.group. - e.g. resistance.group.kinetic
resistance.all
attribute. - e.g. attribute.str
attribute.group. - e.g. attribute.group.body
attribute.all
vector. - e.g. vector.luck
vector.all
vital..max - e.g. vital.health.max
vital..surgeValue - e.g. vital.health.surgeValue
resource..max - e.g. resource.mana.max
resource..value - e.g. resource.mana.value
damage.incoming - global incoming damage (bonus/multiply)
damage.outgoing - global outgoing damage (bonus/multiply)
damage.outgoing. - per-type outgoing damage (bonus/multiply)
damage.outgoing.group. - per-arctype outgoing damage (bonus/multiply)
damage.outgoing.damageType - override outgoing damage type (set only; value is the type name as a string-encoded value or external convention)
damage.incoming.startingLayer - force starting layer for incoming damage (set only; layer name in mod.label: "tempHp"|"shields"|"health"; deepest of multiple AEs wins)
damage.incoming.confirmNegate - require Confirm-to-Negate for incoming damage (set with value 1; on target)
damage.outgoing.confirmNegate - require Confirm-to-Negate for outgoing damage (set with value 1; on attacker)
damage.incoming.confirmCrit - require Confirm-to-Crit for incoming damage (set with value 1; on target)
damage.outgoing.confirmCrit - require Confirm-to-Crit for outgoing damage (set with value 1; on attacker)
restore.incoming - global incoming restore (bonus/multiply)
restore.outgoing - global outgoing restore (bonus/multiply)
restore..incoming - per-vital incoming restore (bonus/multiply)
restore..outgoing - per-vital outgoing restore (bonus/multiply)
damage.outgoing.keyword. - per-keyword outgoing damage (bonus/multiply); applies when the firing action/weapon carries
damage.outgoing.piercing - global resistance piercing (addBonus = stages); shifts target's resistance ladder up by N, capped at neutral
damage.outgoing.piercing. - per-type resistance piercing (addBonus = stages)
damage.outgoing.piercing.group. - per-arctype resistance piercing (addBonus = stages)
duration.swing. - per-swing-type duration modifier (bonus/multiply); hold swings ignore
duration.swing.all - duration modifier applied to every swing type (stacks with specific types)
duration.effect - effect-duration modifier for tracker-queued effects (caster's side; bonus/multiply)
advantage - advantage stage shift (addStages/setStage)
tracker.revealActions - set=1; string-payload (mod.label): "caster" reveals to AE origin's owner, "all" reveals to all players; processed at queue time in queueSwing()
tracker.revealKeywords - set=1; reveals action keywords in tracker tooltip for any player who can see the action
drawOverride - push a draw override whose lifecycle mirrors the AE; config stored in mod.config
mod.config: { mode, sourceType, sourceDeckId, sourceStackId, charges, expiryType, expiryValue, label }