AbstractConstruct an empty test result owned by parent — shorthand for
new (subclass)({}, { parent }).
The initiating sohl.core.logic.SohlLogic.
Construct a test result, capturing the speaker and display metadata and binding it to the initiating Logic.
Common result data (speaker, name, title, description); all fields are optional and defaulted.
Must provide options.parent, the initiating Logic.
Human-readable description shown on the result's chat card.
The serialization discriminator for this instance — the concrete class's static Kind. Written into the JSON by toJSON under the kind key and read back by sohl.utils.defaultFromJSON to select the constructor. Derived from the class, never stored per-instance.
Internal identifier for this result (distinct from the display title).
Speaker identity (actor/token/user) used when posting this result to chat.
Title shown at the top of the result's chat card.
Deep-copy this entity, re-parenting the copy under parent with no other
changes. Shorthand for clone({}, { parent }).
The Logic to own the cloned entity.
The cloned entity.
Deep-copy this entity, optionally overriding fields and clone options.
Field overrides applied to the clone.
Clone options (e.g. a new parent).
The cloned entity.
Resolve the test outcome. The base implementation is a no-op that returns
true; subclasses override it to roll dice, compute success levels, and
apply mishaps.
true if the result should be displayed (e.g. posted to chat);
false if the test was cancelled or is not allowed to proceed.
Serialize this result to a plain, persistable object. Results are not stored in the database, but this is used to pass a result between clients (e.g. embedding an evaluated AttackResult in a chat card so the defender's client can reconstruct it).
A plain object representation of this result.
Abstract base class for all test results in the combat resolution pipeline.
Every test in SoHL — skill checks, opposed contests, attacks, defenses — produces a result object that captures the outcome, the speaker identity for chat messages, and a reference back to the Logic that initiated the test.
Class hierarchy
Lifecycle
trueif the result should be displayed.Results are not persisted to the database — they exist transiently during resolution and are displayed via chat cards.