@swrpg-online/dice 1.0.5 → 1.1.0
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/cli.js +20 -9
- package/dist/dice.js +153 -1
- package/dist/types.d.ts +4 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -14,6 +14,7 @@ function parseDiceNotation(input) {
|
|
|
14
14
|
setBackDice: 0,
|
|
15
15
|
difficultyDice: 0,
|
|
16
16
|
challengeDice: 0,
|
|
17
|
+
forceDice: 0,
|
|
17
18
|
};
|
|
18
19
|
// function getImagePath(type: string): string {
|
|
19
20
|
// const basePath = path.join(__dirname, 'images');
|
|
@@ -37,44 +38,44 @@ function parseDiceNotation(input) {
|
|
|
37
38
|
const parts = input.toLowerCase().trim().split(" ");
|
|
38
39
|
for (const part of parts) {
|
|
39
40
|
const count = parseInt(part);
|
|
40
|
-
const color = part.slice(String(count).length);
|
|
41
|
+
const color = part.slice(String(count).length).toLowerCase();
|
|
41
42
|
switch (color) {
|
|
42
|
-
// y/pro = Yellow/Proficiency
|
|
43
|
+
// y/pro = Yellow / Proficiency
|
|
43
44
|
case "y":
|
|
44
45
|
pool.proficiencyDice = count;
|
|
45
46
|
break;
|
|
46
47
|
case "pro":
|
|
47
48
|
pool.proficiencyDice = count;
|
|
48
49
|
break;
|
|
49
|
-
// g/a = Green/Ability
|
|
50
|
+
// g/a = Green / Ability
|
|
50
51
|
case "g":
|
|
51
52
|
pool.abilityDice = count;
|
|
52
53
|
break;
|
|
53
54
|
case "a":
|
|
54
55
|
pool.abilityDice = count;
|
|
55
56
|
break;
|
|
56
|
-
// b/boo = Blue/Boost
|
|
57
|
+
// b/boo = Blue / Boost
|
|
57
58
|
case "b":
|
|
58
59
|
pool.boostDice = count;
|
|
59
60
|
break;
|
|
60
61
|
case "boo":
|
|
61
62
|
pool.boostDice = count;
|
|
62
63
|
break;
|
|
63
|
-
// r/c = Red/ Challenge
|
|
64
|
+
// r/c = Red / Challenge
|
|
64
65
|
case "r":
|
|
65
66
|
pool.challengeDice = count;
|
|
66
67
|
break;
|
|
67
68
|
case "c":
|
|
68
69
|
pool.challengeDice = count;
|
|
69
70
|
break;
|
|
70
|
-
// p/diff = Purple/ Difficulty
|
|
71
|
+
// p/diff = Purple / Difficulty
|
|
71
72
|
case "p":
|
|
72
73
|
pool.difficultyDice = count;
|
|
73
74
|
break;
|
|
74
75
|
case "diff":
|
|
75
76
|
pool.difficultyDice = count;
|
|
76
77
|
break;
|
|
77
|
-
// blk/k/sb/s = Black/Setback
|
|
78
|
+
// blk/k/sb/s = Black / Setback
|
|
78
79
|
case "blk":
|
|
79
80
|
pool.setBackDice = count;
|
|
80
81
|
break;
|
|
@@ -87,8 +88,13 @@ function parseDiceNotation(input) {
|
|
|
87
88
|
case "s":
|
|
88
89
|
pool.setBackDice = count;
|
|
89
90
|
break;
|
|
90
|
-
// w/f = White/Force
|
|
91
|
-
|
|
91
|
+
// w/f = White / Force
|
|
92
|
+
case "w":
|
|
93
|
+
pool.forceDice = count;
|
|
94
|
+
break;
|
|
95
|
+
case "f":
|
|
96
|
+
pool.forceDice = count;
|
|
97
|
+
break;
|
|
92
98
|
}
|
|
93
99
|
}
|
|
94
100
|
return pool;
|
|
@@ -107,6 +113,10 @@ function formatResult(result) {
|
|
|
107
113
|
parts.push(`${result.summary.triumphs} Triumph(s)`);
|
|
108
114
|
if (result.summary.despair > 0)
|
|
109
115
|
parts.push(`${result.summary.despair} Despair(s)`);
|
|
116
|
+
if (result.summary.lightSide > 0)
|
|
117
|
+
parts.push(`${result.summary.lightSide} Light Side(s)`);
|
|
118
|
+
if (result.summary.darkSide > 0)
|
|
119
|
+
parts.push(`${result.summary.darkSide} Dark Side(s)`);
|
|
110
120
|
return parts.join(", ") || "No effects";
|
|
111
121
|
}
|
|
112
122
|
const main = () => {
|
|
@@ -119,6 +129,7 @@ const main = () => {
|
|
|
119
129
|
- r/c = Red / Challenge
|
|
120
130
|
- p/diff = Purple / Difficulty
|
|
121
131
|
- blk/k/sb/s = Black / Setback
|
|
132
|
+
- w/f = White/Force
|
|
122
133
|
`);
|
|
123
134
|
process.exit(1);
|
|
124
135
|
}
|
package/dist/dice.js
CHANGED
|
@@ -12,6 +12,8 @@ const boostDieResult = (roll) => {
|
|
|
12
12
|
threats: 0,
|
|
13
13
|
triumphs: 0,
|
|
14
14
|
despair: 0,
|
|
15
|
+
lightSide: 0,
|
|
16
|
+
darkSide: 0,
|
|
15
17
|
};
|
|
16
18
|
case 4:
|
|
17
19
|
return {
|
|
@@ -21,6 +23,8 @@ const boostDieResult = (roll) => {
|
|
|
21
23
|
threats: 0,
|
|
22
24
|
triumphs: 0,
|
|
23
25
|
despair: 0,
|
|
26
|
+
lightSide: 0,
|
|
27
|
+
darkSide: 0,
|
|
24
28
|
};
|
|
25
29
|
case 5:
|
|
26
30
|
return {
|
|
@@ -30,6 +34,8 @@ const boostDieResult = (roll) => {
|
|
|
30
34
|
threats: 0,
|
|
31
35
|
triumphs: 0,
|
|
32
36
|
despair: 0,
|
|
37
|
+
lightSide: 0,
|
|
38
|
+
darkSide: 0,
|
|
33
39
|
};
|
|
34
40
|
case 6:
|
|
35
41
|
return {
|
|
@@ -39,6 +45,8 @@ const boostDieResult = (roll) => {
|
|
|
39
45
|
threats: 0,
|
|
40
46
|
triumphs: 0,
|
|
41
47
|
despair: 0,
|
|
48
|
+
lightSide: 0,
|
|
49
|
+
darkSide: 0,
|
|
42
50
|
};
|
|
43
51
|
default:
|
|
44
52
|
return {
|
|
@@ -48,6 +56,8 @@ const boostDieResult = (roll) => {
|
|
|
48
56
|
threats: 0,
|
|
49
57
|
triumphs: 0,
|
|
50
58
|
despair: 0,
|
|
59
|
+
lightSide: 0,
|
|
60
|
+
darkSide: 0,
|
|
51
61
|
};
|
|
52
62
|
}
|
|
53
63
|
};
|
|
@@ -62,6 +72,8 @@ const setBackDieResult = (roll) => {
|
|
|
62
72
|
threats: 0,
|
|
63
73
|
triumphs: 0,
|
|
64
74
|
despair: 0,
|
|
75
|
+
lightSide: 0,
|
|
76
|
+
darkSide: 0,
|
|
65
77
|
};
|
|
66
78
|
case 5:
|
|
67
79
|
case 6:
|
|
@@ -72,6 +84,8 @@ const setBackDieResult = (roll) => {
|
|
|
72
84
|
threats: 1,
|
|
73
85
|
triumphs: 0,
|
|
74
86
|
despair: 0,
|
|
87
|
+
lightSide: 0,
|
|
88
|
+
darkSide: 0,
|
|
75
89
|
};
|
|
76
90
|
default:
|
|
77
91
|
return {
|
|
@@ -81,6 +95,8 @@ const setBackDieResult = (roll) => {
|
|
|
81
95
|
threats: 0,
|
|
82
96
|
triumphs: 0,
|
|
83
97
|
despair: 0,
|
|
98
|
+
lightSide: 0,
|
|
99
|
+
darkSide: 0,
|
|
84
100
|
};
|
|
85
101
|
}
|
|
86
102
|
};
|
|
@@ -95,6 +111,8 @@ const abilityDieResult = (roll) => {
|
|
|
95
111
|
threats: 0,
|
|
96
112
|
triumphs: 0,
|
|
97
113
|
despair: 0,
|
|
114
|
+
lightSide: 0,
|
|
115
|
+
darkSide: 0,
|
|
98
116
|
};
|
|
99
117
|
case 4:
|
|
100
118
|
return {
|
|
@@ -104,6 +122,8 @@ const abilityDieResult = (roll) => {
|
|
|
104
122
|
threats: 0,
|
|
105
123
|
triumphs: 0,
|
|
106
124
|
despair: 0,
|
|
125
|
+
lightSide: 0,
|
|
126
|
+
darkSide: 0,
|
|
107
127
|
};
|
|
108
128
|
case 5:
|
|
109
129
|
case 6:
|
|
@@ -114,6 +134,8 @@ const abilityDieResult = (roll) => {
|
|
|
114
134
|
threats: 0,
|
|
115
135
|
triumphs: 0,
|
|
116
136
|
despair: 0,
|
|
137
|
+
lightSide: 0,
|
|
138
|
+
darkSide: 0,
|
|
117
139
|
};
|
|
118
140
|
case 7:
|
|
119
141
|
return {
|
|
@@ -123,6 +145,8 @@ const abilityDieResult = (roll) => {
|
|
|
123
145
|
threats: 0,
|
|
124
146
|
triumphs: 0,
|
|
125
147
|
despair: 0,
|
|
148
|
+
lightSide: 0,
|
|
149
|
+
darkSide: 0,
|
|
126
150
|
};
|
|
127
151
|
case 8:
|
|
128
152
|
return {
|
|
@@ -132,6 +156,8 @@ const abilityDieResult = (roll) => {
|
|
|
132
156
|
threats: 0,
|
|
133
157
|
triumphs: 0,
|
|
134
158
|
despair: 0,
|
|
159
|
+
lightSide: 0,
|
|
160
|
+
darkSide: 0,
|
|
135
161
|
};
|
|
136
162
|
default:
|
|
137
163
|
return {
|
|
@@ -141,6 +167,8 @@ const abilityDieResult = (roll) => {
|
|
|
141
167
|
threats: 0,
|
|
142
168
|
triumphs: 0,
|
|
143
169
|
despair: 0,
|
|
170
|
+
lightSide: 0,
|
|
171
|
+
darkSide: 0,
|
|
144
172
|
};
|
|
145
173
|
}
|
|
146
174
|
};
|
|
@@ -154,6 +182,8 @@ const difficultyDieResult = (roll) => {
|
|
|
154
182
|
threats: 0,
|
|
155
183
|
triumphs: 0,
|
|
156
184
|
despair: 0,
|
|
185
|
+
lightSide: 0,
|
|
186
|
+
darkSide: 0,
|
|
157
187
|
};
|
|
158
188
|
case 3:
|
|
159
189
|
return {
|
|
@@ -163,6 +193,8 @@ const difficultyDieResult = (roll) => {
|
|
|
163
193
|
threats: 0,
|
|
164
194
|
triumphs: 0,
|
|
165
195
|
despair: 0,
|
|
196
|
+
lightSide: 0,
|
|
197
|
+
darkSide: 0,
|
|
166
198
|
};
|
|
167
199
|
case 4:
|
|
168
200
|
case 5:
|
|
@@ -174,6 +206,8 @@ const difficultyDieResult = (roll) => {
|
|
|
174
206
|
threats: 1,
|
|
175
207
|
triumphs: 0,
|
|
176
208
|
despair: 0,
|
|
209
|
+
lightSide: 0,
|
|
210
|
+
darkSide: 0,
|
|
177
211
|
};
|
|
178
212
|
case 7:
|
|
179
213
|
return {
|
|
@@ -183,6 +217,8 @@ const difficultyDieResult = (roll) => {
|
|
|
183
217
|
threats: 2,
|
|
184
218
|
triumphs: 0,
|
|
185
219
|
despair: 0,
|
|
220
|
+
lightSide: 0,
|
|
221
|
+
darkSide: 0,
|
|
186
222
|
};
|
|
187
223
|
case 8:
|
|
188
224
|
return {
|
|
@@ -192,6 +228,8 @@ const difficultyDieResult = (roll) => {
|
|
|
192
228
|
threats: 1,
|
|
193
229
|
triumphs: 0,
|
|
194
230
|
despair: 0,
|
|
231
|
+
lightSide: 0,
|
|
232
|
+
darkSide: 0,
|
|
195
233
|
};
|
|
196
234
|
default:
|
|
197
235
|
return {
|
|
@@ -201,6 +239,8 @@ const difficultyDieResult = (roll) => {
|
|
|
201
239
|
threats: 0,
|
|
202
240
|
triumphs: 0,
|
|
203
241
|
despair: 0,
|
|
242
|
+
lightSide: 0,
|
|
243
|
+
darkSide: 0,
|
|
204
244
|
};
|
|
205
245
|
}
|
|
206
246
|
};
|
|
@@ -215,6 +255,8 @@ const proficiencyDieResult = (roll) => {
|
|
|
215
255
|
threats: 0,
|
|
216
256
|
triumphs: 0,
|
|
217
257
|
despair: 0,
|
|
258
|
+
lightSide: 0,
|
|
259
|
+
darkSide: 0,
|
|
218
260
|
};
|
|
219
261
|
case 4:
|
|
220
262
|
case 5:
|
|
@@ -225,6 +267,8 @@ const proficiencyDieResult = (roll) => {
|
|
|
225
267
|
threats: 0,
|
|
226
268
|
triumphs: 0,
|
|
227
269
|
despair: 0,
|
|
270
|
+
lightSide: 0,
|
|
271
|
+
darkSide: 0,
|
|
228
272
|
};
|
|
229
273
|
case 6:
|
|
230
274
|
return {
|
|
@@ -234,6 +278,8 @@ const proficiencyDieResult = (roll) => {
|
|
|
234
278
|
threats: 0,
|
|
235
279
|
triumphs: 0,
|
|
236
280
|
despair: 0,
|
|
281
|
+
lightSide: 0,
|
|
282
|
+
darkSide: 0,
|
|
237
283
|
};
|
|
238
284
|
case 7:
|
|
239
285
|
case 8:
|
|
@@ -245,6 +291,8 @@ const proficiencyDieResult = (roll) => {
|
|
|
245
291
|
threats: 0,
|
|
246
292
|
triumphs: 0,
|
|
247
293
|
despair: 0,
|
|
294
|
+
lightSide: 0,
|
|
295
|
+
darkSide: 0,
|
|
248
296
|
};
|
|
249
297
|
case 10:
|
|
250
298
|
case 11:
|
|
@@ -255,6 +303,8 @@ const proficiencyDieResult = (roll) => {
|
|
|
255
303
|
threats: 0,
|
|
256
304
|
triumphs: 0,
|
|
257
305
|
despair: 0,
|
|
306
|
+
lightSide: 0,
|
|
307
|
+
darkSide: 0,
|
|
258
308
|
};
|
|
259
309
|
case 12:
|
|
260
310
|
return {
|
|
@@ -264,6 +314,8 @@ const proficiencyDieResult = (roll) => {
|
|
|
264
314
|
threats: 0,
|
|
265
315
|
triumphs: 1,
|
|
266
316
|
despair: 0,
|
|
317
|
+
lightSide: 0,
|
|
318
|
+
darkSide: 0,
|
|
267
319
|
};
|
|
268
320
|
default:
|
|
269
321
|
return {
|
|
@@ -273,6 +325,8 @@ const proficiencyDieResult = (roll) => {
|
|
|
273
325
|
threats: 0,
|
|
274
326
|
triumphs: 0,
|
|
275
327
|
despair: 0,
|
|
328
|
+
lightSide: 0,
|
|
329
|
+
darkSide: 0,
|
|
276
330
|
};
|
|
277
331
|
}
|
|
278
332
|
};
|
|
@@ -287,6 +341,8 @@ const challengeDieResult = (roll) => {
|
|
|
287
341
|
threats: 0,
|
|
288
342
|
triumphs: 0,
|
|
289
343
|
despair: 0,
|
|
344
|
+
lightSide: 0,
|
|
345
|
+
darkSide: 0,
|
|
290
346
|
};
|
|
291
347
|
case 4:
|
|
292
348
|
case 5:
|
|
@@ -297,6 +353,8 @@ const challengeDieResult = (roll) => {
|
|
|
297
353
|
threats: 0,
|
|
298
354
|
triumphs: 0,
|
|
299
355
|
despair: 0,
|
|
356
|
+
lightSide: 0,
|
|
357
|
+
darkSide: 0,
|
|
300
358
|
};
|
|
301
359
|
case 6:
|
|
302
360
|
case 7:
|
|
@@ -307,6 +365,8 @@ const challengeDieResult = (roll) => {
|
|
|
307
365
|
threats: 1,
|
|
308
366
|
triumphs: 0,
|
|
309
367
|
despair: 0,
|
|
368
|
+
lightSide: 0,
|
|
369
|
+
darkSide: 0,
|
|
310
370
|
};
|
|
311
371
|
case 8:
|
|
312
372
|
case 9:
|
|
@@ -317,6 +377,8 @@ const challengeDieResult = (roll) => {
|
|
|
317
377
|
threats: 1,
|
|
318
378
|
triumphs: 0,
|
|
319
379
|
despair: 0,
|
|
380
|
+
lightSide: 0,
|
|
381
|
+
darkSide: 0,
|
|
320
382
|
};
|
|
321
383
|
case 10:
|
|
322
384
|
case 11:
|
|
@@ -327,6 +389,8 @@ const challengeDieResult = (roll) => {
|
|
|
327
389
|
threats: 2,
|
|
328
390
|
triumphs: 0,
|
|
329
391
|
despair: 0,
|
|
392
|
+
lightSide: 0,
|
|
393
|
+
darkSide: 0,
|
|
330
394
|
};
|
|
331
395
|
case 12:
|
|
332
396
|
return {
|
|
@@ -336,6 +400,8 @@ const challengeDieResult = (roll) => {
|
|
|
336
400
|
threats: 0,
|
|
337
401
|
triumphs: 0,
|
|
338
402
|
despair: 1,
|
|
403
|
+
lightSide: 0,
|
|
404
|
+
darkSide: 0,
|
|
339
405
|
};
|
|
340
406
|
default:
|
|
341
407
|
return {
|
|
@@ -345,6 +411,75 @@ const challengeDieResult = (roll) => {
|
|
|
345
411
|
threats: 0,
|
|
346
412
|
triumphs: 0,
|
|
347
413
|
despair: 0,
|
|
414
|
+
lightSide: 0,
|
|
415
|
+
darkSide: 0,
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
};
|
|
419
|
+
const forceDieResult = (roll) => {
|
|
420
|
+
switch (roll) {
|
|
421
|
+
case 1:
|
|
422
|
+
case 2:
|
|
423
|
+
case 3:
|
|
424
|
+
case 4:
|
|
425
|
+
case 5:
|
|
426
|
+
return {
|
|
427
|
+
successes: 0,
|
|
428
|
+
failures: 0,
|
|
429
|
+
advantages: 0,
|
|
430
|
+
threats: 0,
|
|
431
|
+
triumphs: 0,
|
|
432
|
+
despair: 0,
|
|
433
|
+
lightSide: 1,
|
|
434
|
+
darkSide: 0,
|
|
435
|
+
};
|
|
436
|
+
case 6:
|
|
437
|
+
case 7:
|
|
438
|
+
return {
|
|
439
|
+
successes: 0,
|
|
440
|
+
failures: 0,
|
|
441
|
+
advantages: 0,
|
|
442
|
+
threats: 0,
|
|
443
|
+
triumphs: 0,
|
|
444
|
+
despair: 0,
|
|
445
|
+
lightSide: 2,
|
|
446
|
+
darkSide: 0,
|
|
447
|
+
};
|
|
448
|
+
case 8:
|
|
449
|
+
case 9:
|
|
450
|
+
case 10:
|
|
451
|
+
case 11:
|
|
452
|
+
return {
|
|
453
|
+
successes: 0,
|
|
454
|
+
failures: 0,
|
|
455
|
+
advantages: 0,
|
|
456
|
+
threats: 0,
|
|
457
|
+
triumphs: 0,
|
|
458
|
+
despair: 0,
|
|
459
|
+
lightSide: 0,
|
|
460
|
+
darkSide: 1,
|
|
461
|
+
};
|
|
462
|
+
case 12:
|
|
463
|
+
return {
|
|
464
|
+
successes: 0,
|
|
465
|
+
failures: 0,
|
|
466
|
+
advantages: 0,
|
|
467
|
+
threats: 0,
|
|
468
|
+
triumphs: 0,
|
|
469
|
+
despair: 0,
|
|
470
|
+
lightSide: 0,
|
|
471
|
+
darkSide: 2,
|
|
472
|
+
};
|
|
473
|
+
default:
|
|
474
|
+
return {
|
|
475
|
+
successes: 0,
|
|
476
|
+
failures: 0,
|
|
477
|
+
advantages: 0,
|
|
478
|
+
threats: 0,
|
|
479
|
+
triumphs: 0,
|
|
480
|
+
despair: 0,
|
|
481
|
+
lightSide: 0,
|
|
482
|
+
darkSide: 0,
|
|
348
483
|
};
|
|
349
484
|
}
|
|
350
485
|
};
|
|
@@ -356,6 +491,8 @@ const sumResults = (results) => {
|
|
|
356
491
|
threats: acc.threats + curr.threats,
|
|
357
492
|
triumphs: acc.triumphs + curr.triumphs,
|
|
358
493
|
despair: acc.despair + curr.despair,
|
|
494
|
+
lightSide: acc.lightSide + (curr.lightSide || 0),
|
|
495
|
+
darkSide: acc.darkSide + (curr.darkSide || 0),
|
|
359
496
|
}), {
|
|
360
497
|
successes: 0,
|
|
361
498
|
failures: 0,
|
|
@@ -363,6 +500,8 @@ const sumResults = (results) => {
|
|
|
363
500
|
threats: 0,
|
|
364
501
|
triumphs: 0,
|
|
365
502
|
despair: 0,
|
|
503
|
+
lightSide: 0,
|
|
504
|
+
darkSide: 0,
|
|
366
505
|
});
|
|
367
506
|
// Calculate net successes/failures
|
|
368
507
|
let netSuccesses = 0;
|
|
@@ -384,10 +523,12 @@ const sumResults = (results) => {
|
|
|
384
523
|
threats: sums.threats,
|
|
385
524
|
triumphs: sums.triumphs,
|
|
386
525
|
despair: sums.despair,
|
|
526
|
+
lightSide: sums.lightSide,
|
|
527
|
+
darkSide: sums.darkSide,
|
|
387
528
|
};
|
|
388
529
|
};
|
|
389
530
|
const roll = (pool) => {
|
|
390
|
-
var _a, _b, _c, _d, _e, _f;
|
|
531
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
391
532
|
// Initialize all dice counts to 0 if undefined
|
|
392
533
|
const boostCount = (_a = pool.boostDice) !== null && _a !== void 0 ? _a : 0;
|
|
393
534
|
const abilityCount = (_b = pool.abilityDice) !== null && _b !== void 0 ? _b : 0;
|
|
@@ -395,6 +536,7 @@ const roll = (pool) => {
|
|
|
395
536
|
const setBackCount = (_d = pool.setBackDice) !== null && _d !== void 0 ? _d : 0;
|
|
396
537
|
const difficultyCount = (_e = pool.difficultyDice) !== null && _e !== void 0 ? _e : 0;
|
|
397
538
|
const challengeCount = (_f = pool.challengeDice) !== null && _f !== void 0 ? _f : 0;
|
|
539
|
+
const forceCount = (_g = pool.forceDice) !== null && _g !== void 0 ? _g : 0;
|
|
398
540
|
// Ensure all dice counts are non-negative
|
|
399
541
|
const sanitizedPool = {
|
|
400
542
|
boostDice: Math.max(0, boostCount),
|
|
@@ -403,6 +545,7 @@ const roll = (pool) => {
|
|
|
403
545
|
setBackDice: Math.max(0, setBackCount),
|
|
404
546
|
difficultyDice: Math.max(0, difficultyCount),
|
|
405
547
|
challengeDice: Math.max(0, challengeCount),
|
|
548
|
+
forceDice: Math.max(0, forceCount),
|
|
406
549
|
};
|
|
407
550
|
const detailedResults = [];
|
|
408
551
|
// Roll boost dice
|
|
@@ -459,6 +602,15 @@ const roll = (pool) => {
|
|
|
459
602
|
result: challengeDieResult(roll),
|
|
460
603
|
});
|
|
461
604
|
}
|
|
605
|
+
// Roll force dice
|
|
606
|
+
for (let i = 0; i < sanitizedPool.forceDice; i++) {
|
|
607
|
+
const roll = rollDie(12);
|
|
608
|
+
detailedResults.push({
|
|
609
|
+
type: "force",
|
|
610
|
+
roll,
|
|
611
|
+
result: forceDieResult(roll),
|
|
612
|
+
});
|
|
613
|
+
}
|
|
462
614
|
return {
|
|
463
615
|
results: detailedResults,
|
|
464
616
|
summary: sumResults(detailedResults.map((r) => r.result)),
|
package/dist/types.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export type DicePool = {
|
|
|
5
5
|
setBackDice?: number;
|
|
6
6
|
difficultyDice?: number;
|
|
7
7
|
challengeDice?: number;
|
|
8
|
+
forceDice?: number;
|
|
8
9
|
};
|
|
9
10
|
export type DiceResult = {
|
|
10
11
|
successes: number;
|
|
@@ -13,8 +14,10 @@ export type DiceResult = {
|
|
|
13
14
|
threats: number;
|
|
14
15
|
triumphs: number;
|
|
15
16
|
despair: number;
|
|
17
|
+
lightSide: number;
|
|
18
|
+
darkSide: number;
|
|
16
19
|
};
|
|
17
|
-
export type DieType = "boost" | "ability" | "proficiency" | "setback" | "difficulty" | "challenge";
|
|
20
|
+
export type DieType = "boost" | "ability" | "proficiency" | "setback" | "difficulty" | "challenge" | "force";
|
|
18
21
|
export type DetailedDieResult = {
|
|
19
22
|
type: DieType;
|
|
20
23
|
roll: number;
|