Apply temporary local modifiers to the current trigger, from the start of this
outcome onwards through subsequent outcomes in the same trigger context.
Mirrors the existing context.piercingThisFire scratch-field pattern — the pool
is implicit per-trigger, discarded when the context goes out of scope.
Config:
modifiers Array<{ id, field, operation, value, label }> — each row is materialized as a
ModificationModel instance and appended to the trigger pool. Uses the same
field/operation/value schema as document-backed modifications (features, effects).
Each row's id is auto-generated on add (randomID), field/operation are constrained
by combobox UI (same as modification-row UI), value is numeric, label is free text.
Trigger-scoped modifiers are isolated per trigger fire — a multi-hit attack (e.g. Magic Missile)
should NOT have one missile's crit apply to another missile's damage math. See
OUTCOME_REGISTRY.applySwingModifiers for cross-trigger carry-forward (swing scope).
Apply temporary local modifiers to the current trigger, from the start of this outcome onwards through subsequent outcomes in the same trigger context. Mirrors the existing
context.piercingThisFirescratch-field pattern — the pool is implicit per-trigger, discarded when the context goes out of scope.Config: modifiers Array<{ id, field, operation, value, label }> — each row is materialized as a ModificationModel instance and appended to the trigger pool. Uses the same field/operation/value schema as document-backed modifications (features, effects). Each row's id is auto-generated on add (randomID), field/operation are constrained by combobox UI (same as modification-row UI), value is numeric, label is free text.
Trigger-scoped modifiers are isolated per trigger fire — a multi-hit attack (e.g. Magic Missile) should NOT have one missile's crit apply to another missile's damage math. See
OUTCOME_REGISTRY.applySwingModifiersfor cross-trigger carry-forward (swing scope).