You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
§18.1 (Stat Checks) and §18.2 (Saves) both end the same way:
"Otherwise, you fail and gain 1 Stress."
The sheet does not do this. checkComputed in src/ts/rules/rollTemplate.ts grades the roll and writes no Stress at all. Today only two things grant it: a missed attack (§28.1, added in #51) and a failed Rest Save (§20.2). A failed Strength Check costs nothing — which is most of the rolls made on the sheet.
Work
A failed Stat Check or Save gains 1 Stress, broadcast as part of the roll template so the card shows it happened rather than the value silently changing.
The pattern already exists: rollAttack grades with gradeAttack, applies the Stress through applyStressDelta, and posts the result. This generalises that to every check.
The grading belongs in a pure function alongside gradeAttack.
The card should name the Stress gained, the way the attack card already says "Attack Failed: Gain 1 Stress".
Applies to Critical Failures too — they are failures.
NPCs must not gain Stress — isNpcSheet exists for exactly this and already gates the attack path (NPC attacks should not grant Stress #147). The same gate applies here.
Ship checks already announce Stress they cannot apply (shipFailureAlert) because a ship cannot write to a crew member's sheet. Do not double up on those.
Does the Rest Save's own failure Stress double with this? §20.2 says a failed Rest Save gains 1 Stress; §18.2 says a failed Save gains 1 Stress. Decide whether that is one Stress or two and say which, with the reasoning — do not let it fall out of the implementation by accident.
Constraints
Never use Promises or await in this legacy sheet's code; only startRoll may be awaited. Stress is read and written after the roll resolves, in a getAttrs callback — see rollAttack.
applyStressDelta is deliberately the single place Stress is written. Keep that.
Append any new phrase to TEMPLATE_PHRASES; never reorder it.
Lands in the same function as the Panic-on-Critical-Failure ticket. Take both together or they will conflict.
§18.1 (Stat Checks) and §18.2 (Saves) both end the same way:
The sheet does not do this.
checkComputedinsrc/ts/rules/rollTemplate.tsgrades the roll and writes no Stress at all. Today only two things grant it: a missed attack (§28.1, added in #51) and a failed Rest Save (§20.2). A failed Strength Check costs nothing — which is most of the rolls made on the sheet.Work
A failed Stat Check or Save gains 1 Stress, broadcast as part of the roll template so the card shows it happened rather than the value silently changing.
The pattern already exists:
rollAttackgrades withgradeAttack, applies the Stress throughapplyStressDelta, and posts the result. This generalises that to every check.gradeAttack.Watch the interactions
applyStressDeltaalready handles both; route through it and do not clamp separately.isNpcSheetexists for exactly this and already gates the attack path (NPC attacks should not grant Stress #147). The same gate applies here.shipFailureAlert) because a ship cannot write to a crew member's sheet. Do not double up on those.Constraints
awaitin this legacy sheet's code; onlystartRollmay be awaited. Stress is read and written after the roll resolves, in agetAttrscallback — seerollAttack.applyStressDeltais deliberately the single place Stress is written. Keep that.TEMPLATE_PHRASES; never reorder it.