Skip to content

Commit dbf2102

Browse files
jziggasterragon-labs[bot]
andauthored
feat(dice): include implicit successes/failures from triumphs/despairs (#17)
- Adjust dice result summation to add triumphs to successes and despairs to failures implicitly. - Add tests verifying automatic triumphs add to successes and automatic despairs add to failures. - Ensure combined counts reflect both explicit and implicit contributions. - Update package dependencies (ts-jest) for testing environment. Co-authored-by: terragon-labs[bot] <terragon-labs[bot]@users.noreply.github.com>
1 parent 40f11c7 commit dbf2102

File tree

4 files changed

+65
-7
lines changed

4 files changed

+65
-7
lines changed

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
"rollup": "^2.79.2",
8282
"rollup-plugin-terser": "^7.0.2",
8383
"semantic-release": "^24.2.0",
84-
"ts-jest": "^29.4.1",
84+
"ts-jest": "^29.4.4",
8585
"tslib": "^2.8.1",
8686
"typescript": "^5.7.2"
8787
},

src/dice.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,8 @@ const sumResults = (
226226
darkSide: acc.darkSide + (curr.darkSide || 0),
227227
}),
228228
{
229-
successes: automaticSymbols?.successes || 0,
230-
failures: automaticSymbols?.failures || 0,
229+
successes: (automaticSymbols?.successes || 0) + (automaticSymbols?.triumphs || 0),
230+
failures: (automaticSymbols?.failures || 0) + (automaticSymbols?.despairs || 0),
231231
advantages: automaticSymbols?.advantages || 0,
232232
threats: automaticSymbols?.threats || 0,
233233
triumphs: automaticSymbols?.triumphs || 0,

tests/modifiers.test.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,64 @@ describe("Dice Pool Modifiers", () => {
9898
cleanup();
9999
});
100100

101+
test("automatic triumphs include implicit successes", () => {
102+
const cleanup = mockMathRandom(0.1); // Low roll for minimal dice contribution
103+
const pool: DicePool = {
104+
automaticTriumphs: 2,
105+
};
106+
107+
const result = roll(pool);
108+
109+
// Should have 2 triumphs and at least 2 successes (implicit)
110+
expect(result.summary.triumphs).toBe(2);
111+
expect(result.summary.successes).toBeGreaterThanOrEqual(2);
112+
cleanup();
113+
});
114+
115+
test("automatic despairs include implicit failures", () => {
116+
const cleanup = mockMathRandom(0.1); // Low roll for minimal dice contribution
117+
const pool: DicePool = {
118+
automaticDespairs: 3,
119+
};
120+
121+
const result = roll(pool);
122+
123+
// Should have 3 despairs and at least 3 failures (implicit)
124+
expect(result.summary.despair).toBe(3);
125+
expect(result.summary.failures).toBeGreaterThanOrEqual(3);
126+
cleanup();
127+
});
128+
129+
test("automatic triumphs add to existing successes", () => {
130+
const cleanup = mockMathRandom(0.1);
131+
const pool: DicePool = {
132+
automaticSuccesses: 3,
133+
automaticTriumphs: 2,
134+
};
135+
136+
const result = roll(pool);
137+
138+
// Should have 2 triumphs and 5 total successes (3 explicit + 2 implicit from triumphs)
139+
expect(result.summary.triumphs).toBe(2);
140+
expect(result.summary.successes).toBe(5);
141+
cleanup();
142+
});
143+
144+
test("automatic despairs add to existing failures", () => {
145+
const cleanup = mockMathRandom(0.1);
146+
const pool: DicePool = {
147+
automaticFailures: 2,
148+
automaticDespairs: 1,
149+
};
150+
151+
const result = roll(pool);
152+
153+
// Should have 1 despair and 3 total failures (2 explicit + 1 implicit from despair)
154+
expect(result.summary.despair).toBe(1);
155+
expect(result.summary.failures).toBe(3);
156+
cleanup();
157+
});
158+
101159
test("adds automatic light side points to roll result", () => {
102160
const cleanup = mockMathRandom(0.5);
103161
const pool: DicePool = {

0 commit comments

Comments
 (0)