@swrpg-online/dice 1.3.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dice.js CHANGED
@@ -2,495 +2,167 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.roll = exports.DEFAULT_MAX_TOTAL_DICE = exports.DEFAULT_MAX_DICE_PER_TYPE = void 0;
4
4
  const hints_1 = require("./hints");
5
+ const diceFaces_1 = require("./diceFaces");
5
6
  // Default dice limits for performance and security
6
7
  exports.DEFAULT_MAX_DICE_PER_TYPE = 100;
7
8
  exports.DEFAULT_MAX_TOTAL_DICE = 500;
8
9
  const rollDie = (sides) => Math.floor(Math.random() * sides) + 1;
9
10
  const boostDieResult = (roll) => {
10
- switch (roll) {
11
- case 3:
12
- return {
13
- successes: 1,
14
- failures: 0,
15
- advantages: 0,
16
- threats: 0,
17
- triumphs: 0,
18
- despair: 0,
19
- lightSide: 0,
20
- darkSide: 0,
21
- };
22
- case 4:
23
- return {
24
- successes: 1,
25
- failures: 0,
26
- advantages: 1,
27
- threats: 0,
28
- triumphs: 0,
29
- despair: 0,
30
- lightSide: 0,
31
- darkSide: 0,
32
- };
33
- case 5:
34
- return {
35
- successes: 0,
36
- failures: 0,
37
- advantages: 2,
38
- threats: 0,
39
- triumphs: 0,
40
- despair: 0,
41
- lightSide: 0,
42
- darkSide: 0,
43
- };
44
- case 6:
45
- return {
46
- successes: 0,
47
- failures: 0,
48
- advantages: 1,
49
- threats: 0,
50
- triumphs: 0,
51
- despair: 0,
52
- lightSide: 0,
53
- darkSide: 0,
54
- };
55
- default:
56
- return {
57
- successes: 0,
58
- failures: 0,
59
- advantages: 0,
60
- threats: 0,
61
- triumphs: 0,
62
- despair: 0,
63
- lightSide: 0,
64
- darkSide: 0,
65
- };
66
- }
11
+ const face = diceFaces_1.BOOST_DIE_FACES[roll];
12
+ return {
13
+ successes: face.successes || 0,
14
+ failures: face.failures || 0,
15
+ advantages: face.advantages || 0,
16
+ threats: face.threats || 0,
17
+ triumphs: face.triumphs || 0,
18
+ despair: face.despairs || 0,
19
+ lightSide: face.lightSide || 0,
20
+ darkSide: face.darkSide || 0,
21
+ };
67
22
  };
68
23
  const setBackDieResult = (roll) => {
69
- switch (roll) {
70
- case 3:
71
- case 4:
72
- return {
73
- successes: 0,
74
- failures: 1,
75
- advantages: 0,
76
- threats: 0,
77
- triumphs: 0,
78
- despair: 0,
79
- lightSide: 0,
80
- darkSide: 0,
81
- };
82
- case 5:
83
- case 6:
84
- return {
85
- successes: 0,
86
- failures: 0,
87
- advantages: 0,
88
- threats: 1,
89
- triumphs: 0,
90
- despair: 0,
91
- lightSide: 0,
92
- darkSide: 0,
93
- };
94
- default:
95
- return {
96
- successes: 0,
97
- failures: 0,
98
- advantages: 0,
99
- threats: 0,
100
- triumphs: 0,
101
- despair: 0,
102
- lightSide: 0,
103
- darkSide: 0,
104
- };
105
- }
24
+ const face = diceFaces_1.SETBACK_DIE_FACES[roll];
25
+ return {
26
+ successes: face.successes || 0,
27
+ failures: face.failures || 0,
28
+ advantages: face.advantages || 0,
29
+ threats: face.threats || 0,
30
+ triumphs: face.triumphs || 0,
31
+ despair: face.despairs || 0,
32
+ lightSide: face.lightSide || 0,
33
+ darkSide: face.darkSide || 0,
34
+ };
106
35
  };
107
36
  const abilityDieResult = (roll) => {
108
- switch (roll) {
109
- case 2:
110
- case 3:
111
- return {
112
- successes: 1,
113
- failures: 0,
114
- advantages: 0,
115
- threats: 0,
116
- triumphs: 0,
117
- despair: 0,
118
- lightSide: 0,
119
- darkSide: 0,
120
- };
121
- case 4:
122
- return {
123
- successes: 2,
124
- failures: 0,
125
- advantages: 0,
126
- threats: 0,
127
- triumphs: 0,
128
- despair: 0,
129
- lightSide: 0,
130
- darkSide: 0,
131
- };
132
- case 5:
133
- case 6:
134
- return {
135
- successes: 0,
136
- failures: 0,
137
- advantages: 1,
138
- threats: 0,
139
- triumphs: 0,
140
- despair: 0,
141
- lightSide: 0,
142
- darkSide: 0,
143
- };
144
- case 7:
145
- return {
146
- successes: 1,
147
- failures: 0,
148
- advantages: 1,
149
- threats: 0,
150
- triumphs: 0,
151
- despair: 0,
152
- lightSide: 0,
153
- darkSide: 0,
154
- };
155
- case 8:
156
- return {
157
- successes: 0,
158
- failures: 0,
159
- advantages: 2,
160
- threats: 0,
161
- triumphs: 0,
162
- despair: 0,
163
- lightSide: 0,
164
- darkSide: 0,
165
- };
166
- default:
167
- return {
168
- successes: 0,
169
- failures: 0,
170
- advantages: 0,
171
- threats: 0,
172
- triumphs: 0,
173
- despair: 0,
174
- lightSide: 0,
175
- darkSide: 0,
176
- };
177
- }
37
+ const face = diceFaces_1.ABILITY_DIE_FACES[roll];
38
+ return {
39
+ successes: face.successes || 0,
40
+ failures: face.failures || 0,
41
+ advantages: face.advantages || 0,
42
+ threats: face.threats || 0,
43
+ triumphs: face.triumphs || 0,
44
+ despair: face.despairs || 0,
45
+ lightSide: face.lightSide || 0,
46
+ darkSide: face.darkSide || 0,
47
+ };
178
48
  };
179
49
  const difficultyDieResult = (roll) => {
180
- switch (roll) {
181
- case 2:
182
- return {
183
- successes: 0,
184
- failures: 1,
185
- advantages: 0,
186
- threats: 0,
187
- triumphs: 0,
188
- despair: 0,
189
- lightSide: 0,
190
- darkSide: 0,
191
- };
192
- case 3:
193
- return {
194
- successes: 0,
195
- failures: 2,
196
- advantages: 0,
197
- threats: 0,
198
- triumphs: 0,
199
- despair: 0,
200
- lightSide: 0,
201
- darkSide: 0,
202
- };
203
- case 4:
204
- case 5:
205
- case 6:
206
- return {
207
- successes: 0,
208
- failures: 0,
209
- advantages: 0,
210
- threats: 1,
211
- triumphs: 0,
212
- despair: 0,
213
- lightSide: 0,
214
- darkSide: 0,
215
- };
216
- case 7:
217
- return {
218
- successes: 0,
219
- failures: 0,
220
- advantages: 0,
221
- threats: 2,
222
- triumphs: 0,
223
- despair: 0,
224
- lightSide: 0,
225
- darkSide: 0,
226
- };
227
- case 8:
228
- return {
229
- successes: 0,
230
- failures: 1,
231
- advantages: 0,
232
- threats: 1,
233
- triumphs: 0,
234
- despair: 0,
235
- lightSide: 0,
236
- darkSide: 0,
237
- };
238
- default:
239
- return {
240
- successes: 0,
241
- failures: 0,
242
- advantages: 0,
243
- threats: 0,
244
- triumphs: 0,
245
- despair: 0,
246
- lightSide: 0,
247
- darkSide: 0,
248
- };
249
- }
50
+ const face = diceFaces_1.DIFFICULTY_DIE_FACES[roll];
51
+ return {
52
+ successes: face.successes || 0,
53
+ failures: face.failures || 0,
54
+ advantages: face.advantages || 0,
55
+ threats: face.threats || 0,
56
+ triumphs: face.triumphs || 0,
57
+ despair: face.despairs || 0,
58
+ lightSide: face.lightSide || 0,
59
+ darkSide: face.darkSide || 0,
60
+ };
250
61
  };
251
62
  const proficiencyDieResult = (roll) => {
252
- switch (roll) {
253
- case 2:
254
- case 3:
255
- return {
256
- successes: 1,
257
- failures: 0,
258
- advantages: 0,
259
- threats: 0,
260
- triumphs: 0,
261
- despair: 0,
262
- lightSide: 0,
263
- darkSide: 0,
264
- };
265
- case 4:
266
- case 5:
267
- return {
268
- successes: 2,
269
- failures: 0,
270
- advantages: 0,
271
- threats: 0,
272
- triumphs: 0,
273
- despair: 0,
274
- lightSide: 0,
275
- darkSide: 0,
276
- };
277
- case 6:
278
- return {
279
- successes: 0,
280
- failures: 0,
281
- advantages: 1,
282
- threats: 0,
283
- triumphs: 0,
284
- despair: 0,
285
- lightSide: 0,
286
- darkSide: 0,
287
- };
288
- case 7:
289
- case 8:
290
- case 9:
291
- return {
292
- successes: 1,
293
- failures: 0,
294
- advantages: 1,
295
- threats: 0,
296
- triumphs: 0,
297
- despair: 0,
298
- lightSide: 0,
299
- darkSide: 0,
300
- };
301
- case 10:
302
- case 11:
303
- return {
304
- successes: 0,
305
- failures: 0,
306
- advantages: 2,
307
- threats: 0,
308
- triumphs: 0,
309
- despair: 0,
310
- lightSide: 0,
311
- darkSide: 0,
312
- };
313
- case 12:
314
- return {
315
- successes: 0,
316
- failures: 0,
317
- advantages: 0,
318
- threats: 0,
319
- triumphs: 1,
320
- despair: 0,
321
- lightSide: 0,
322
- darkSide: 0,
323
- };
324
- default:
325
- return {
326
- successes: 0,
327
- failures: 0,
328
- advantages: 0,
329
- threats: 0,
330
- triumphs: 0,
331
- despair: 0,
332
- lightSide: 0,
333
- darkSide: 0,
334
- };
335
- }
63
+ const face = diceFaces_1.PROFICIENCY_DIE_FACES[roll];
64
+ return {
65
+ successes: face.successes || 0,
66
+ failures: face.failures || 0,
67
+ advantages: face.advantages || 0,
68
+ threats: face.threats || 0,
69
+ triumphs: face.triumphs || 0,
70
+ despair: face.despairs || 0,
71
+ lightSide: face.lightSide || 0,
72
+ darkSide: face.darkSide || 0,
73
+ };
336
74
  };
337
75
  const challengeDieResult = (roll) => {
338
- switch (roll) {
339
- case 2:
340
- case 3:
341
- return {
342
- successes: 0,
343
- failures: 1,
344
- advantages: 0,
345
- threats: 0,
346
- triumphs: 0,
347
- despair: 0,
348
- lightSide: 0,
349
- darkSide: 0,
350
- };
351
- case 4:
352
- case 5:
353
- return {
354
- successes: 0,
355
- failures: 2,
356
- advantages: 0,
357
- threats: 0,
358
- triumphs: 0,
359
- despair: 0,
360
- lightSide: 0,
361
- darkSide: 0,
362
- };
363
- case 6:
364
- case 7:
365
- return {
366
- successes: 0,
367
- failures: 0,
368
- advantages: 0,
369
- threats: 1,
370
- triumphs: 0,
371
- despair: 0,
372
- lightSide: 0,
373
- darkSide: 0,
374
- };
375
- case 8:
376
- case 9:
377
- return {
378
- successes: 0,
379
- failures: 1,
380
- advantages: 0,
381
- threats: 1,
382
- triumphs: 0,
383
- despair: 0,
384
- lightSide: 0,
385
- darkSide: 0,
386
- };
387
- case 10:
388
- case 11:
389
- return {
390
- successes: 0,
391
- failures: 0,
392
- advantages: 0,
393
- threats: 2,
394
- triumphs: 0,
395
- despair: 0,
396
- lightSide: 0,
397
- darkSide: 0,
398
- };
399
- case 12:
400
- return {
401
- successes: 0,
402
- failures: 0,
403
- advantages: 0,
404
- threats: 0,
405
- triumphs: 0,
406
- despair: 1,
407
- lightSide: 0,
408
- darkSide: 0,
409
- };
410
- default:
411
- return {
412
- successes: 0,
413
- failures: 0,
414
- advantages: 0,
415
- threats: 0,
416
- triumphs: 0,
417
- despair: 0,
418
- lightSide: 0,
419
- darkSide: 0,
420
- };
421
- }
76
+ const face = diceFaces_1.CHALLENGE_DIE_FACES[roll];
77
+ return {
78
+ successes: face.successes || 0,
79
+ failures: face.failures || 0,
80
+ advantages: face.advantages || 0,
81
+ threats: face.threats || 0,
82
+ triumphs: face.triumphs || 0,
83
+ despair: face.despairs || 0,
84
+ lightSide: face.lightSide || 0,
85
+ darkSide: face.darkSide || 0,
86
+ };
422
87
  };
423
88
  const forceDieResult = (roll) => {
424
- switch (roll) {
425
- case 1:
426
- case 2:
427
- case 3:
428
- case 4:
429
- case 5:
430
- return {
431
- successes: 0,
432
- failures: 0,
433
- advantages: 0,
434
- threats: 0,
435
- triumphs: 0,
436
- despair: 0,
437
- lightSide: 1,
438
- darkSide: 0,
439
- };
440
- case 6:
441
- case 7:
442
- return {
443
- successes: 0,
444
- failures: 0,
445
- advantages: 0,
446
- threats: 0,
447
- triumphs: 0,
448
- despair: 0,
449
- lightSide: 2,
450
- darkSide: 0,
451
- };
452
- case 8:
453
- case 9:
454
- case 10:
455
- case 11:
456
- return {
457
- successes: 0,
458
- failures: 0,
459
- advantages: 0,
460
- threats: 0,
461
- triumphs: 0,
462
- despair: 0,
463
- lightSide: 0,
464
- darkSide: 1,
465
- };
466
- case 12:
467
- return {
468
- successes: 0,
469
- failures: 0,
470
- advantages: 0,
471
- threats: 0,
472
- triumphs: 0,
473
- despair: 0,
474
- lightSide: 0,
475
- darkSide: 2,
476
- };
477
- default:
478
- return {
479
- successes: 0,
480
- failures: 0,
481
- advantages: 0,
482
- threats: 0,
483
- triumphs: 0,
484
- despair: 0,
485
- lightSide: 0,
486
- darkSide: 0,
487
- };
89
+ const face = diceFaces_1.FORCE_DIE_FACES[roll];
90
+ return {
91
+ successes: face.successes || 0,
92
+ failures: face.failures || 0,
93
+ advantages: face.advantages || 0,
94
+ threats: face.threats || 0,
95
+ triumphs: face.triumphs || 0,
96
+ despair: face.despairs || 0,
97
+ lightSide: face.lightSide || 0,
98
+ darkSide: face.darkSide || 0,
99
+ };
100
+ };
101
+ /**
102
+ * Applies dice upgrades and downgrades to a pool.
103
+ * Upgrades are applied first, then downgrades.
104
+ *
105
+ * @param pool - The dice pool to modify
106
+ * @returns A new dice pool with upgrades/downgrades applied
107
+ */
108
+ const applyDiceModifications = (pool) => {
109
+ const modifiedPool = { ...pool };
110
+ // Apply upgrades first (per game rules)
111
+ if (pool.upgradeAbility && pool.upgradeAbility > 0) {
112
+ let upgradesToApply = pool.upgradeAbility;
113
+ const currentAbility = modifiedPool.abilityDice || 0;
114
+ // Upgrade existing ability dice to proficiency
115
+ const upgradedDice = Math.min(currentAbility, upgradesToApply);
116
+ modifiedPool.abilityDice = currentAbility - upgradedDice;
117
+ modifiedPool.proficiencyDice =
118
+ (modifiedPool.proficiencyDice || 0) + upgradedDice;
119
+ upgradesToApply -= upgradedDice;
120
+ // Add remaining upgrades as new proficiency dice
121
+ if (upgradesToApply > 0) {
122
+ modifiedPool.proficiencyDice =
123
+ (modifiedPool.proficiencyDice || 0) + upgradesToApply;
124
+ }
488
125
  }
126
+ if (pool.upgradeDifficulty && pool.upgradeDifficulty > 0) {
127
+ let upgradesToApply = pool.upgradeDifficulty;
128
+ const currentDifficulty = modifiedPool.difficultyDice || 0;
129
+ // Upgrade existing difficulty dice to challenge
130
+ const upgradedDice = Math.min(currentDifficulty, upgradesToApply);
131
+ modifiedPool.difficultyDice = currentDifficulty - upgradedDice;
132
+ modifiedPool.challengeDice =
133
+ (modifiedPool.challengeDice || 0) + upgradedDice;
134
+ upgradesToApply -= upgradedDice;
135
+ // Add remaining upgrades as new challenge dice
136
+ if (upgradesToApply > 0) {
137
+ modifiedPool.challengeDice =
138
+ (modifiedPool.challengeDice || 0) + upgradesToApply;
139
+ }
140
+ }
141
+ // Apply downgrades after upgrades
142
+ if (pool.downgradeProficiency && pool.downgradeProficiency > 0) {
143
+ const currentProficiency = modifiedPool.proficiencyDice || 0;
144
+ const downgradesToApply = Math.min(currentProficiency, pool.downgradeProficiency);
145
+ // Downgrade proficiency dice to ability dice
146
+ modifiedPool.proficiencyDice = currentProficiency - downgradesToApply;
147
+ modifiedPool.abilityDice =
148
+ (modifiedPool.abilityDice || 0) + downgradesToApply;
149
+ // Excess downgrades are ignored (per requirements)
150
+ }
151
+ if (pool.downgradeChallenge && pool.downgradeChallenge > 0) {
152
+ const currentChallenge = modifiedPool.challengeDice || 0;
153
+ const downgradesToApply = Math.min(currentChallenge, pool.downgradeChallenge);
154
+ // Downgrade challenge dice to difficulty dice
155
+ modifiedPool.challengeDice = currentChallenge - downgradesToApply;
156
+ modifiedPool.difficultyDice =
157
+ (modifiedPool.difficultyDice || 0) + downgradesToApply;
158
+ // Excess downgrades are ignored (per requirements)
159
+ }
160
+ return modifiedPool;
489
161
  };
490
- const sumResults = (results, options) => {
162
+ const sumResults = (results, automaticSymbols, options) => {
491
163
  const sums = results.reduce((acc, curr) => ({
492
- successes: acc.successes + curr.successes,
493
- failures: acc.failures + curr.failures,
164
+ successes: acc.successes + curr.successes + curr.triumphs,
165
+ failures: acc.failures + curr.failures + curr.despair,
494
166
  advantages: acc.advantages + curr.advantages,
495
167
  threats: acc.threats + curr.threats,
496
168
  triumphs: acc.triumphs + curr.triumphs,
@@ -498,14 +170,14 @@ const sumResults = (results, options) => {
498
170
  lightSide: acc.lightSide + (curr.lightSide || 0),
499
171
  darkSide: acc.darkSide + (curr.darkSide || 0),
500
172
  }), {
501
- successes: 0,
502
- failures: 0,
503
- advantages: 0,
504
- threats: 0,
505
- triumphs: 0,
506
- despair: 0,
507
- lightSide: 0,
508
- darkSide: 0,
173
+ successes: ((automaticSymbols === null || automaticSymbols === void 0 ? void 0 : automaticSymbols.successes) || 0) + ((automaticSymbols === null || automaticSymbols === void 0 ? void 0 : automaticSymbols.triumphs) || 0),
174
+ failures: ((automaticSymbols === null || automaticSymbols === void 0 ? void 0 : automaticSymbols.failures) || 0) + ((automaticSymbols === null || automaticSymbols === void 0 ? void 0 : automaticSymbols.despairs) || 0),
175
+ advantages: (automaticSymbols === null || automaticSymbols === void 0 ? void 0 : automaticSymbols.advantages) || 0,
176
+ threats: (automaticSymbols === null || automaticSymbols === void 0 ? void 0 : automaticSymbols.threats) || 0,
177
+ triumphs: (automaticSymbols === null || automaticSymbols === void 0 ? void 0 : automaticSymbols.triumphs) || 0,
178
+ despair: (automaticSymbols === null || automaticSymbols === void 0 ? void 0 : automaticSymbols.despairs) || 0,
179
+ lightSide: (automaticSymbols === null || automaticSymbols === void 0 ? void 0 : automaticSymbols.lightSide) || 0,
180
+ darkSide: (automaticSymbols === null || automaticSymbols === void 0 ? void 0 : automaticSymbols.darkSide) || 0,
509
181
  });
510
182
  let netSuccesses = 0;
511
183
  let netFailures = 0;
@@ -519,11 +191,24 @@ const sumResults = (results, options) => {
519
191
  else {
520
192
  netFailures = sums.failures - sums.successes;
521
193
  }
194
+ // Advantages and threats cancel each other out
195
+ let netAdvantages = 0;
196
+ let netThreats = 0;
197
+ if (sums.advantages === sums.threats) {
198
+ netAdvantages = 0;
199
+ netThreats = 0;
200
+ }
201
+ else if (sums.advantages > sums.threats) {
202
+ netAdvantages = sums.advantages - sums.threats;
203
+ }
204
+ else {
205
+ netThreats = sums.threats - sums.advantages;
206
+ }
522
207
  const result = {
523
208
  successes: netSuccesses,
524
209
  failures: netFailures,
525
- advantages: sums.advantages,
526
- threats: sums.threats,
210
+ advantages: netAdvantages,
211
+ threats: netThreats,
527
212
  triumphs: sums.triumphs,
528
213
  despair: sums.despair,
529
214
  lightSide: sums.lightSide,
@@ -545,13 +230,15 @@ const sumResults = (results, options) => {
545
230
  */
546
231
  const roll = (pool, options) => {
547
232
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
548
- const boostCount = (_a = pool.boostDice) !== null && _a !== void 0 ? _a : 0;
549
- const abilityCount = (_b = pool.abilityDice) !== null && _b !== void 0 ? _b : 0;
550
- const proficiencyCount = (_c = pool.proficiencyDice) !== null && _c !== void 0 ? _c : 0;
551
- const setBackCount = (_d = pool.setBackDice) !== null && _d !== void 0 ? _d : 0;
552
- const difficultyCount = (_e = pool.difficultyDice) !== null && _e !== void 0 ? _e : 0;
553
- const challengeCount = (_f = pool.challengeDice) !== null && _f !== void 0 ? _f : 0;
554
- const forceCount = (_g = pool.forceDice) !== null && _g !== void 0 ? _g : 0;
233
+ // Apply dice modifications (upgrades/downgrades)
234
+ const modifiedPool = applyDiceModifications(pool);
235
+ const boostCount = (_a = modifiedPool.boostDice) !== null && _a !== void 0 ? _a : 0;
236
+ const abilityCount = (_b = modifiedPool.abilityDice) !== null && _b !== void 0 ? _b : 0;
237
+ const proficiencyCount = (_c = modifiedPool.proficiencyDice) !== null && _c !== void 0 ? _c : 0;
238
+ const setBackCount = (_d = modifiedPool.setBackDice) !== null && _d !== void 0 ? _d : 0;
239
+ const difficultyCount = (_e = modifiedPool.difficultyDice) !== null && _e !== void 0 ? _e : 0;
240
+ const challengeCount = (_f = modifiedPool.challengeDice) !== null && _f !== void 0 ? _f : 0;
241
+ const forceCount = (_g = modifiedPool.forceDice) !== null && _g !== void 0 ? _g : 0;
555
242
  // Get limits from options or use defaults
556
243
  const maxDicePerType = (_h = options === null || options === void 0 ? void 0 : options.maxDicePerType) !== null && _h !== void 0 ? _h : exports.DEFAULT_MAX_DICE_PER_TYPE;
557
244
  const maxTotalDice = (_j = options === null || options === void 0 ? void 0 : options.maxTotalDice) !== null && _j !== void 0 ? _j : exports.DEFAULT_MAX_TOTAL_DICE;
@@ -670,7 +357,17 @@ const roll = (pool, options) => {
670
357
  result: forceDieResult(roll),
671
358
  });
672
359
  }
673
- const summary = sumResults(detailedResults.map((r) => r.result));
360
+ const automaticSymbols = {
361
+ successes: pool.automaticSuccesses,
362
+ failures: pool.automaticFailures,
363
+ advantages: pool.automaticAdvantages,
364
+ threats: pool.automaticThreats,
365
+ triumphs: pool.automaticTriumphs,
366
+ despairs: pool.automaticDespairs,
367
+ lightSide: pool.automaticLightSide,
368
+ darkSide: pool.automaticDarkSide,
369
+ };
370
+ const summary = sumResults(detailedResults.map((r) => r.result), automaticSymbols, options);
674
371
  if (options === null || options === void 0 ? void 0 : options.hints) {
675
372
  const applicableHints = hints_1.hints.filter((hint) => {
676
373
  const { cost } = hint;