Assemble an sohl.entity.result.AttackResult from a strike mode's resolved attack and
impact modifiers. Pure and Foundry-free: it clones the modifiers (so the
result is independent of — and serializable without — the live strike mode)
and rolls a fresh d100 unless one is supplied.
The result is not yet evaluated; the caller runs evaluate() (on the
attacker's client, which owns the speaker) before posting the attack card.
Assemble an sohl.entity.result.AttackResult from a strike mode's resolved attack and impact modifiers. Pure and Foundry-free: it clones the modifiers (so the result is independent of — and serializable without — the live strike mode) and rolls a fresh d100 unless one is supplied.
The result is not yet evaluated; the caller runs
evaluate()(on the attacker's client, which owns the speaker) before posting the attack card.