@swrpg-online/dice 0.5.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/LICENSE +21 -0
- package/README.md +43 -0
- package/coverage/clover.xml +113 -0
- package/coverage/coverage-final.json +4 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/dice.ts.html +817 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +146 -0
- package/coverage/lcov-report/index.ts.html +109 -0
- package/coverage/lcov-report/pools.ts.html +253 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +196 -0
- package/coverage/lcov.info +246 -0
- package/dist/dice.d.ts +2 -0
- package/dist/dice.js +229 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +10 -0
- package/dist/pools.d.ts +32 -0
- package/dist/pools.js +53 -0
- package/dist/types.d.ts +26 -0
- package/dist/types.js +2 -0
- package/jest.config.js +7 -0
- package/package.json +27 -0
- package/src/dice.js +229 -0
- package/src/dice.ts +244 -0
- package/src/index.ts +8 -0
- package/src/pools.ts +56 -0
- package/src/types.js +2 -0
- package/src/types.ts +30 -0
- package/tests/dice.test.ts +351 -0
- package/tests/pools.test.ts +86 -0
- package/tsconfig.json +14 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
var addSorting = (function() {
|
|
3
|
+
'use strict';
|
|
4
|
+
var cols,
|
|
5
|
+
currentSort = {
|
|
6
|
+
index: 0,
|
|
7
|
+
desc: false
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
// returns the summary table element
|
|
11
|
+
function getTable() {
|
|
12
|
+
return document.querySelector('.coverage-summary');
|
|
13
|
+
}
|
|
14
|
+
// returns the thead element of the summary table
|
|
15
|
+
function getTableHeader() {
|
|
16
|
+
return getTable().querySelector('thead tr');
|
|
17
|
+
}
|
|
18
|
+
// returns the tbody element of the summary table
|
|
19
|
+
function getTableBody() {
|
|
20
|
+
return getTable().querySelector('tbody');
|
|
21
|
+
}
|
|
22
|
+
// returns the th element for nth column
|
|
23
|
+
function getNthColumn(n) {
|
|
24
|
+
return getTableHeader().querySelectorAll('th')[n];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function onFilterInput() {
|
|
28
|
+
const searchValue = document.getElementById('fileSearch').value;
|
|
29
|
+
const rows = document.getElementsByTagName('tbody')[0].children;
|
|
30
|
+
for (let i = 0; i < rows.length; i++) {
|
|
31
|
+
const row = rows[i];
|
|
32
|
+
if (
|
|
33
|
+
row.textContent
|
|
34
|
+
.toLowerCase()
|
|
35
|
+
.includes(searchValue.toLowerCase())
|
|
36
|
+
) {
|
|
37
|
+
row.style.display = '';
|
|
38
|
+
} else {
|
|
39
|
+
row.style.display = 'none';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// loads the search box
|
|
45
|
+
function addSearchBox() {
|
|
46
|
+
var template = document.getElementById('filterTemplate');
|
|
47
|
+
var templateClone = template.content.cloneNode(true);
|
|
48
|
+
templateClone.getElementById('fileSearch').oninput = onFilterInput;
|
|
49
|
+
template.parentElement.appendChild(templateClone);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// loads all columns
|
|
53
|
+
function loadColumns() {
|
|
54
|
+
var colNodes = getTableHeader().querySelectorAll('th'),
|
|
55
|
+
colNode,
|
|
56
|
+
cols = [],
|
|
57
|
+
col,
|
|
58
|
+
i;
|
|
59
|
+
|
|
60
|
+
for (i = 0; i < colNodes.length; i += 1) {
|
|
61
|
+
colNode = colNodes[i];
|
|
62
|
+
col = {
|
|
63
|
+
key: colNode.getAttribute('data-col'),
|
|
64
|
+
sortable: !colNode.getAttribute('data-nosort'),
|
|
65
|
+
type: colNode.getAttribute('data-type') || 'string'
|
|
66
|
+
};
|
|
67
|
+
cols.push(col);
|
|
68
|
+
if (col.sortable) {
|
|
69
|
+
col.defaultDescSort = col.type === 'number';
|
|
70
|
+
colNode.innerHTML =
|
|
71
|
+
colNode.innerHTML + '<span class="sorter"></span>';
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return cols;
|
|
75
|
+
}
|
|
76
|
+
// attaches a data attribute to every tr element with an object
|
|
77
|
+
// of data values keyed by column name
|
|
78
|
+
function loadRowData(tableRow) {
|
|
79
|
+
var tableCols = tableRow.querySelectorAll('td'),
|
|
80
|
+
colNode,
|
|
81
|
+
col,
|
|
82
|
+
data = {},
|
|
83
|
+
i,
|
|
84
|
+
val;
|
|
85
|
+
for (i = 0; i < tableCols.length; i += 1) {
|
|
86
|
+
colNode = tableCols[i];
|
|
87
|
+
col = cols[i];
|
|
88
|
+
val = colNode.getAttribute('data-value');
|
|
89
|
+
if (col.type === 'number') {
|
|
90
|
+
val = Number(val);
|
|
91
|
+
}
|
|
92
|
+
data[col.key] = val;
|
|
93
|
+
}
|
|
94
|
+
return data;
|
|
95
|
+
}
|
|
96
|
+
// loads all row data
|
|
97
|
+
function loadData() {
|
|
98
|
+
var rows = getTableBody().querySelectorAll('tr'),
|
|
99
|
+
i;
|
|
100
|
+
|
|
101
|
+
for (i = 0; i < rows.length; i += 1) {
|
|
102
|
+
rows[i].data = loadRowData(rows[i]);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// sorts the table using the data for the ith column
|
|
106
|
+
function sortByIndex(index, desc) {
|
|
107
|
+
var key = cols[index].key,
|
|
108
|
+
sorter = function(a, b) {
|
|
109
|
+
a = a.data[key];
|
|
110
|
+
b = b.data[key];
|
|
111
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
112
|
+
},
|
|
113
|
+
finalSorter = sorter,
|
|
114
|
+
tableBody = document.querySelector('.coverage-summary tbody'),
|
|
115
|
+
rowNodes = tableBody.querySelectorAll('tr'),
|
|
116
|
+
rows = [],
|
|
117
|
+
i;
|
|
118
|
+
|
|
119
|
+
if (desc) {
|
|
120
|
+
finalSorter = function(a, b) {
|
|
121
|
+
return -1 * sorter(a, b);
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
for (i = 0; i < rowNodes.length; i += 1) {
|
|
126
|
+
rows.push(rowNodes[i]);
|
|
127
|
+
tableBody.removeChild(rowNodes[i]);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
rows.sort(finalSorter);
|
|
131
|
+
|
|
132
|
+
for (i = 0; i < rows.length; i += 1) {
|
|
133
|
+
tableBody.appendChild(rows[i]);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// removes sort indicators for current column being sorted
|
|
137
|
+
function removeSortIndicators() {
|
|
138
|
+
var col = getNthColumn(currentSort.index),
|
|
139
|
+
cls = col.className;
|
|
140
|
+
|
|
141
|
+
cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
|
|
142
|
+
col.className = cls;
|
|
143
|
+
}
|
|
144
|
+
// adds sort indicators for current column being sorted
|
|
145
|
+
function addSortIndicators() {
|
|
146
|
+
getNthColumn(currentSort.index).className += currentSort.desc
|
|
147
|
+
? ' sorted-desc'
|
|
148
|
+
: ' sorted';
|
|
149
|
+
}
|
|
150
|
+
// adds event listeners for all sorter widgets
|
|
151
|
+
function enableUI() {
|
|
152
|
+
var i,
|
|
153
|
+
el,
|
|
154
|
+
ithSorter = function ithSorter(i) {
|
|
155
|
+
var col = cols[i];
|
|
156
|
+
|
|
157
|
+
return function() {
|
|
158
|
+
var desc = col.defaultDescSort;
|
|
159
|
+
|
|
160
|
+
if (currentSort.index === i) {
|
|
161
|
+
desc = !currentSort.desc;
|
|
162
|
+
}
|
|
163
|
+
sortByIndex(i, desc);
|
|
164
|
+
removeSortIndicators();
|
|
165
|
+
currentSort.index = i;
|
|
166
|
+
currentSort.desc = desc;
|
|
167
|
+
addSortIndicators();
|
|
168
|
+
};
|
|
169
|
+
};
|
|
170
|
+
for (i = 0; i < cols.length; i += 1) {
|
|
171
|
+
if (cols[i].sortable) {
|
|
172
|
+
// add the click event handler on the th so users
|
|
173
|
+
// dont have to click on those tiny arrows
|
|
174
|
+
el = getNthColumn(i).querySelector('.sorter').parentElement;
|
|
175
|
+
if (el.addEventListener) {
|
|
176
|
+
el.addEventListener('click', ithSorter(i));
|
|
177
|
+
} else {
|
|
178
|
+
el.attachEvent('onclick', ithSorter(i));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// adds sorting functionality to the UI
|
|
184
|
+
return function() {
|
|
185
|
+
if (!getTable()) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
cols = loadColumns();
|
|
189
|
+
loadData();
|
|
190
|
+
addSearchBox();
|
|
191
|
+
addSortIndicators();
|
|
192
|
+
enableUI();
|
|
193
|
+
};
|
|
194
|
+
})();
|
|
195
|
+
|
|
196
|
+
window.addEventListener('load', addSorting);
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
TN:
|
|
2
|
+
SF:src/dice.ts
|
|
3
|
+
FN:3,(anonymous_0)
|
|
4
|
+
FN:5,(anonymous_1)
|
|
5
|
+
FN:20,(anonymous_2)
|
|
6
|
+
FN:33,(anonymous_3)
|
|
7
|
+
FN:52,(anonymous_4)
|
|
8
|
+
FN:71,(anonymous_5)
|
|
9
|
+
FN:95,(anonymous_6)
|
|
10
|
+
FN:119,(anonymous_7)
|
|
11
|
+
FN:120,(anonymous_8)
|
|
12
|
+
FN:159,(anonymous_9)
|
|
13
|
+
FN:242,(anonymous_10)
|
|
14
|
+
FNF:11
|
|
15
|
+
FNH:11
|
|
16
|
+
FNDA:77,(anonymous_0)
|
|
17
|
+
FNDA:10,(anonymous_1)
|
|
18
|
+
FNDA:8,(anonymous_2)
|
|
19
|
+
FNDA:14,(anonymous_3)
|
|
20
|
+
FNDA:14,(anonymous_4)
|
|
21
|
+
FNDA:16,(anonymous_5)
|
|
22
|
+
FNDA:15,(anonymous_6)
|
|
23
|
+
FNDA:62,(anonymous_7)
|
|
24
|
+
FNDA:77,(anonymous_8)
|
|
25
|
+
FNDA:62,(anonymous_9)
|
|
26
|
+
FNDA:77,(anonymous_10)
|
|
27
|
+
DA:3,77
|
|
28
|
+
DA:5,1
|
|
29
|
+
DA:6,10
|
|
30
|
+
DA:8,1
|
|
31
|
+
DA:10,3
|
|
32
|
+
DA:12,2
|
|
33
|
+
DA:14,2
|
|
34
|
+
DA:16,2
|
|
35
|
+
DA:20,1
|
|
36
|
+
DA:21,8
|
|
37
|
+
DA:24,3
|
|
38
|
+
DA:27,3
|
|
39
|
+
DA:29,2
|
|
40
|
+
DA:33,1
|
|
41
|
+
DA:34,14
|
|
42
|
+
DA:37,3
|
|
43
|
+
DA:39,1
|
|
44
|
+
DA:42,4
|
|
45
|
+
DA:44,1
|
|
46
|
+
DA:46,4
|
|
47
|
+
DA:48,1
|
|
48
|
+
DA:52,1
|
|
49
|
+
DA:53,14
|
|
50
|
+
DA:55,2
|
|
51
|
+
DA:57,1
|
|
52
|
+
DA:61,4
|
|
53
|
+
DA:63,2
|
|
54
|
+
DA:65,4
|
|
55
|
+
DA:67,1
|
|
56
|
+
DA:71,1
|
|
57
|
+
DA:72,16
|
|
58
|
+
DA:75,2
|
|
59
|
+
DA:78,2
|
|
60
|
+
DA:80,1
|
|
61
|
+
DA:84,4
|
|
62
|
+
DA:87,2
|
|
63
|
+
DA:89,4
|
|
64
|
+
DA:91,1
|
|
65
|
+
DA:95,1
|
|
66
|
+
DA:96,15
|
|
67
|
+
DA:99,2
|
|
68
|
+
DA:102,2
|
|
69
|
+
DA:105,3
|
|
70
|
+
DA:108,2
|
|
71
|
+
DA:111,2
|
|
72
|
+
DA:113,3
|
|
73
|
+
DA:115,1
|
|
74
|
+
DA:119,1
|
|
75
|
+
DA:120,77
|
|
76
|
+
DA:137,62
|
|
77
|
+
DA:138,62
|
|
78
|
+
DA:140,62
|
|
79
|
+
DA:141,34
|
|
80
|
+
DA:142,34
|
|
81
|
+
DA:143,28
|
|
82
|
+
DA:144,15
|
|
83
|
+
DA:146,13
|
|
84
|
+
DA:149,62
|
|
85
|
+
DA:159,1
|
|
86
|
+
DA:161,62
|
|
87
|
+
DA:162,62
|
|
88
|
+
DA:163,62
|
|
89
|
+
DA:164,62
|
|
90
|
+
DA:165,62
|
|
91
|
+
DA:166,62
|
|
92
|
+
DA:169,62
|
|
93
|
+
DA:178,62
|
|
94
|
+
DA:181,62
|
|
95
|
+
DA:182,10
|
|
96
|
+
DA:183,10
|
|
97
|
+
DA:191,62
|
|
98
|
+
DA:192,14
|
|
99
|
+
DA:193,14
|
|
100
|
+
DA:201,62
|
|
101
|
+
DA:202,16
|
|
102
|
+
DA:203,16
|
|
103
|
+
DA:211,62
|
|
104
|
+
DA:212,8
|
|
105
|
+
DA:213,8
|
|
106
|
+
DA:221,62
|
|
107
|
+
DA:222,14
|
|
108
|
+
DA:223,14
|
|
109
|
+
DA:231,62
|
|
110
|
+
DA:232,15
|
|
111
|
+
DA:233,15
|
|
112
|
+
DA:240,62
|
|
113
|
+
DA:242,77
|
|
114
|
+
LF:87
|
|
115
|
+
LH:87
|
|
116
|
+
BRDA:6,0,0,1
|
|
117
|
+
BRDA:6,0,1,3
|
|
118
|
+
BRDA:6,0,2,2
|
|
119
|
+
BRDA:6,0,3,2
|
|
120
|
+
BRDA:6,0,4,2
|
|
121
|
+
BRDA:21,1,0,1
|
|
122
|
+
BRDA:21,1,1,3
|
|
123
|
+
BRDA:21,1,2,1
|
|
124
|
+
BRDA:21,1,3,3
|
|
125
|
+
BRDA:21,1,4,2
|
|
126
|
+
BRDA:34,2,0,2
|
|
127
|
+
BRDA:34,2,1,3
|
|
128
|
+
BRDA:34,2,2,1
|
|
129
|
+
BRDA:34,2,3,3
|
|
130
|
+
BRDA:34,2,4,4
|
|
131
|
+
BRDA:34,2,5,1
|
|
132
|
+
BRDA:34,2,6,4
|
|
133
|
+
BRDA:34,2,7,1
|
|
134
|
+
BRDA:53,3,0,2
|
|
135
|
+
BRDA:53,3,1,1
|
|
136
|
+
BRDA:53,3,2,1
|
|
137
|
+
BRDA:53,3,3,3
|
|
138
|
+
BRDA:53,3,4,4
|
|
139
|
+
BRDA:53,3,5,2
|
|
140
|
+
BRDA:53,3,6,4
|
|
141
|
+
BRDA:53,3,7,1
|
|
142
|
+
BRDA:72,4,0,1
|
|
143
|
+
BRDA:72,4,1,2
|
|
144
|
+
BRDA:72,4,2,1
|
|
145
|
+
BRDA:72,4,3,2
|
|
146
|
+
BRDA:72,4,4,1
|
|
147
|
+
BRDA:72,4,5,2
|
|
148
|
+
BRDA:72,4,6,3
|
|
149
|
+
BRDA:72,4,7,4
|
|
150
|
+
BRDA:72,4,8,1
|
|
151
|
+
BRDA:72,4,9,2
|
|
152
|
+
BRDA:72,4,10,4
|
|
153
|
+
BRDA:72,4,11,1
|
|
154
|
+
BRDA:96,5,0,1
|
|
155
|
+
BRDA:96,5,1,2
|
|
156
|
+
BRDA:96,5,2,1
|
|
157
|
+
BRDA:96,5,3,2
|
|
158
|
+
BRDA:96,5,4,1
|
|
159
|
+
BRDA:96,5,5,3
|
|
160
|
+
BRDA:96,5,6,1
|
|
161
|
+
BRDA:96,5,7,2
|
|
162
|
+
BRDA:96,5,8,1
|
|
163
|
+
BRDA:96,5,9,2
|
|
164
|
+
BRDA:96,5,10,3
|
|
165
|
+
BRDA:96,5,11,1
|
|
166
|
+
BRDA:140,6,0,34
|
|
167
|
+
BRDA:140,6,1,28
|
|
168
|
+
BRDA:143,7,0,15
|
|
169
|
+
BRDA:143,7,1,13
|
|
170
|
+
BRDA:161,8,0,11
|
|
171
|
+
BRDA:161,8,1,51
|
|
172
|
+
BRDA:161,9,0,62
|
|
173
|
+
BRDA:161,9,1,62
|
|
174
|
+
BRDA:162,10,0,14
|
|
175
|
+
BRDA:162,10,1,48
|
|
176
|
+
BRDA:162,11,0,62
|
|
177
|
+
BRDA:162,11,1,62
|
|
178
|
+
BRDA:163,12,0,17
|
|
179
|
+
BRDA:163,12,1,45
|
|
180
|
+
BRDA:163,13,0,62
|
|
181
|
+
BRDA:163,13,1,62
|
|
182
|
+
BRDA:164,14,0,9
|
|
183
|
+
BRDA:164,14,1,53
|
|
184
|
+
BRDA:164,15,0,62
|
|
185
|
+
BRDA:164,15,1,62
|
|
186
|
+
BRDA:165,16,0,14
|
|
187
|
+
BRDA:165,16,1,48
|
|
188
|
+
BRDA:165,17,0,62
|
|
189
|
+
BRDA:165,17,1,62
|
|
190
|
+
BRDA:166,18,0,16
|
|
191
|
+
BRDA:166,18,1,46
|
|
192
|
+
BRDA:166,19,0,62
|
|
193
|
+
BRDA:166,19,1,62
|
|
194
|
+
BRF:78
|
|
195
|
+
BRH:78
|
|
196
|
+
end_of_record
|
|
197
|
+
TN:
|
|
198
|
+
SF:src/index.ts
|
|
199
|
+
FN:1,(anonymous_0)
|
|
200
|
+
FN:4,(anonymous_1)
|
|
201
|
+
FN:5,(anonymous_2)
|
|
202
|
+
FN:6,(anonymous_3)
|
|
203
|
+
FN:7,(anonymous_4)
|
|
204
|
+
FNF:5
|
|
205
|
+
FNH:0
|
|
206
|
+
FNDA:0,(anonymous_0)
|
|
207
|
+
FNDA:0,(anonymous_1)
|
|
208
|
+
FNDA:0,(anonymous_2)
|
|
209
|
+
FNDA:0,(anonymous_3)
|
|
210
|
+
FNDA:0,(anonymous_4)
|
|
211
|
+
DA:1,0
|
|
212
|
+
DA:3,0
|
|
213
|
+
DA:4,0
|
|
214
|
+
DA:5,0
|
|
215
|
+
DA:6,0
|
|
216
|
+
DA:7,0
|
|
217
|
+
LF:6
|
|
218
|
+
LH:0
|
|
219
|
+
BRF:0
|
|
220
|
+
BRH:0
|
|
221
|
+
end_of_record
|
|
222
|
+
TN:
|
|
223
|
+
SF:src/pools.ts
|
|
224
|
+
FN:9,(anonymous_0)
|
|
225
|
+
FN:21,(anonymous_1)
|
|
226
|
+
FN:35,(anonymous_2)
|
|
227
|
+
FN:53,(anonymous_3)
|
|
228
|
+
FNF:4
|
|
229
|
+
FNH:4
|
|
230
|
+
FNDA:2,(anonymous_0)
|
|
231
|
+
FNDA:2,(anonymous_1)
|
|
232
|
+
FNDA:2,(anonymous_2)
|
|
233
|
+
FNDA:2,(anonymous_3)
|
|
234
|
+
DA:9,2
|
|
235
|
+
DA:21,2
|
|
236
|
+
DA:35,1
|
|
237
|
+
DA:40,2
|
|
238
|
+
DA:53,2
|
|
239
|
+
LF:5
|
|
240
|
+
LH:5
|
|
241
|
+
BRDA:21,0,0,1
|
|
242
|
+
BRDA:39,1,0,1
|
|
243
|
+
BRDA:53,2,0,1
|
|
244
|
+
BRF:3
|
|
245
|
+
BRH:3
|
|
246
|
+
end_of_record
|
package/dist/dice.d.ts
ADDED
package/dist/dice.js
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.roll = void 0;
|
|
4
|
+
const rollDie = (sides) => Math.floor(Math.random() * sides) + 1;
|
|
5
|
+
const boostDieResult = (roll) => {
|
|
6
|
+
switch (roll) {
|
|
7
|
+
case 3:
|
|
8
|
+
return { successes: 1, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
9
|
+
case 4:
|
|
10
|
+
return { successes: 1, failures: 0, advantages: 1, threats: 0, triumphs: 0, despair: 0 };
|
|
11
|
+
case 5:
|
|
12
|
+
return { successes: 0, failures: 0, advantages: 2, threats: 0, triumphs: 0, despair: 0 };
|
|
13
|
+
case 6:
|
|
14
|
+
return { successes: 0, failures: 0, advantages: 1, threats: 0, triumphs: 0, despair: 0 };
|
|
15
|
+
default:
|
|
16
|
+
return { successes: 0, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const setBackDieResult = (roll) => {
|
|
20
|
+
switch (roll) {
|
|
21
|
+
case 3:
|
|
22
|
+
case 4:
|
|
23
|
+
return { successes: 0, failures: 1, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
24
|
+
case 5:
|
|
25
|
+
case 6:
|
|
26
|
+
return { successes: 0, failures: 0, advantages: 0, threats: 1, triumphs: 0, despair: 0 };
|
|
27
|
+
default:
|
|
28
|
+
return { successes: 0, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const abilityDieResult = (roll) => {
|
|
32
|
+
switch (roll) {
|
|
33
|
+
case 2:
|
|
34
|
+
case 3:
|
|
35
|
+
return { successes: 1, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
36
|
+
case 4:
|
|
37
|
+
return { successes: 2, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
38
|
+
case 5:
|
|
39
|
+
case 6:
|
|
40
|
+
return { successes: 0, failures: 0, advantages: 1, threats: 0, triumphs: 0, despair: 0 };
|
|
41
|
+
case 7:
|
|
42
|
+
return { successes: 1, failures: 0, advantages: 1, threats: 0, triumphs: 0, despair: 0 };
|
|
43
|
+
case 8:
|
|
44
|
+
return { successes: 0, failures: 0, advantages: 2, threats: 0, triumphs: 0, despair: 0 };
|
|
45
|
+
default:
|
|
46
|
+
return { successes: 0, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const difficultyDieResult = (roll) => {
|
|
50
|
+
switch (roll) {
|
|
51
|
+
case 2:
|
|
52
|
+
return { successes: 0, failures: 1, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
53
|
+
case 3:
|
|
54
|
+
return { successes: 0, failures: 2, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
55
|
+
case 4:
|
|
56
|
+
case 5:
|
|
57
|
+
case 6:
|
|
58
|
+
return { successes: 0, failures: 0, advantages: 0, threats: 1, triumphs: 0, despair: 0 };
|
|
59
|
+
case 7:
|
|
60
|
+
return { successes: 0, failures: 0, advantages: 0, threats: 2, triumphs: 0, despair: 0 };
|
|
61
|
+
case 8:
|
|
62
|
+
return { successes: 0, failures: 1, advantages: 0, threats: 1, triumphs: 0, despair: 0 };
|
|
63
|
+
default:
|
|
64
|
+
return { successes: 0, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const proficiencyDieResult = (roll) => {
|
|
68
|
+
switch (roll) {
|
|
69
|
+
case 2:
|
|
70
|
+
case 3:
|
|
71
|
+
return { successes: 1, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
72
|
+
case 4:
|
|
73
|
+
case 5:
|
|
74
|
+
return { successes: 2, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
75
|
+
case 6:
|
|
76
|
+
return { successes: 0, failures: 0, advantages: 1, threats: 0, triumphs: 0, despair: 0 };
|
|
77
|
+
case 7:
|
|
78
|
+
case 8:
|
|
79
|
+
case 9:
|
|
80
|
+
return { successes: 1, failures: 0, advantages: 1, threats: 0, triumphs: 0, despair: 0 };
|
|
81
|
+
case 10:
|
|
82
|
+
case 11:
|
|
83
|
+
return { successes: 0, failures: 0, advantages: 2, threats: 0, triumphs: 0, despair: 0 };
|
|
84
|
+
case 12:
|
|
85
|
+
return { successes: 0, failures: 0, advantages: 0, threats: 0, triumphs: 1, despair: 0 };
|
|
86
|
+
default:
|
|
87
|
+
return { successes: 0, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
const challengeDieResult = (roll) => {
|
|
91
|
+
switch (roll) {
|
|
92
|
+
case 2:
|
|
93
|
+
case 3:
|
|
94
|
+
return { successes: 0, failures: 1, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
95
|
+
case 4:
|
|
96
|
+
case 5:
|
|
97
|
+
return { successes: 0, failures: 2, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
98
|
+
case 6:
|
|
99
|
+
case 7:
|
|
100
|
+
return { successes: 0, failures: 0, advantages: 0, threats: 1, triumphs: 0, despair: 0 };
|
|
101
|
+
case 8:
|
|
102
|
+
case 9:
|
|
103
|
+
return { successes: 0, failures: 1, advantages: 0, threats: 1, triumphs: 0, despair: 0 };
|
|
104
|
+
case 10:
|
|
105
|
+
case 11:
|
|
106
|
+
return { successes: 0, failures: 0, advantages: 0, threats: 2, triumphs: 0, despair: 0 };
|
|
107
|
+
case 12:
|
|
108
|
+
return { successes: 0, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 1 };
|
|
109
|
+
default:
|
|
110
|
+
return { successes: 0, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
const sumResults = (results) => {
|
|
114
|
+
const sums = results.reduce((acc, curr) => ({
|
|
115
|
+
successes: acc.successes + curr.successes,
|
|
116
|
+
failures: acc.failures + curr.failures,
|
|
117
|
+
advantages: acc.advantages + curr.advantages,
|
|
118
|
+
threats: acc.threats + curr.threats,
|
|
119
|
+
triumphs: acc.triumphs + curr.triumphs,
|
|
120
|
+
despair: acc.despair + curr.despair
|
|
121
|
+
}), {
|
|
122
|
+
successes: 0,
|
|
123
|
+
failures: 0,
|
|
124
|
+
advantages: 0,
|
|
125
|
+
threats: 0,
|
|
126
|
+
triumphs: 0,
|
|
127
|
+
despair: 0
|
|
128
|
+
});
|
|
129
|
+
// Calculate net successes/failures
|
|
130
|
+
let netSuccesses = 0;
|
|
131
|
+
let netFailures = 0;
|
|
132
|
+
if (sums.successes === sums.failures) {
|
|
133
|
+
netSuccesses = 0;
|
|
134
|
+
netFailures = 0;
|
|
135
|
+
}
|
|
136
|
+
else if (sums.successes > sums.failures) {
|
|
137
|
+
netSuccesses = sums.successes - sums.failures;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
netFailures = sums.failures - sums.successes;
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
successes: netSuccesses,
|
|
144
|
+
failures: netFailures,
|
|
145
|
+
advantages: sums.advantages,
|
|
146
|
+
threats: sums.threats,
|
|
147
|
+
triumphs: sums.triumphs,
|
|
148
|
+
despair: sums.despair
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
const roll = (pool) => {
|
|
152
|
+
var _a, _b, _c, _d, _e, _f;
|
|
153
|
+
// Initialize all dice counts to 0 if undefined
|
|
154
|
+
const boostCount = (_a = pool.boostDice) !== null && _a !== void 0 ? _a : 0;
|
|
155
|
+
const abilityCount = (_b = pool.abilityDice) !== null && _b !== void 0 ? _b : 0;
|
|
156
|
+
const proficiencyCount = (_c = pool.proficiencyDice) !== null && _c !== void 0 ? _c : 0;
|
|
157
|
+
const setBackCount = (_d = pool.setBackDice) !== null && _d !== void 0 ? _d : 0;
|
|
158
|
+
const difficultyCount = (_e = pool.difficultyDice) !== null && _e !== void 0 ? _e : 0;
|
|
159
|
+
const challengeCount = (_f = pool.challengeDice) !== null && _f !== void 0 ? _f : 0;
|
|
160
|
+
// Ensure all dice counts are non-negative
|
|
161
|
+
const sanitizedPool = {
|
|
162
|
+
boostDice: Math.max(0, boostCount),
|
|
163
|
+
abilityDice: Math.max(0, abilityCount),
|
|
164
|
+
proficiencyDice: Math.max(0, proficiencyCount),
|
|
165
|
+
setBackDice: Math.max(0, setBackCount),
|
|
166
|
+
difficultyDice: Math.max(0, difficultyCount),
|
|
167
|
+
challengeDice: Math.max(0, challengeCount)
|
|
168
|
+
};
|
|
169
|
+
const detailedResults = [];
|
|
170
|
+
// Roll boost dice
|
|
171
|
+
for (let i = 0; i < sanitizedPool.boostDice; i++) {
|
|
172
|
+
const roll = rollDie(6);
|
|
173
|
+
detailedResults.push({
|
|
174
|
+
type: 'boost',
|
|
175
|
+
roll,
|
|
176
|
+
result: boostDieResult(roll)
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
// Roll ability dice
|
|
180
|
+
for (let i = 0; i < sanitizedPool.abilityDice; i++) {
|
|
181
|
+
const roll = rollDie(8);
|
|
182
|
+
detailedResults.push({
|
|
183
|
+
type: 'ability',
|
|
184
|
+
roll,
|
|
185
|
+
result: abilityDieResult(roll)
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
// Roll proficiency dice
|
|
189
|
+
for (let i = 0; i < sanitizedPool.proficiencyDice; i++) {
|
|
190
|
+
const roll = rollDie(12);
|
|
191
|
+
detailedResults.push({
|
|
192
|
+
type: 'proficiency',
|
|
193
|
+
roll,
|
|
194
|
+
result: proficiencyDieResult(roll)
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
// Roll setback dice
|
|
198
|
+
for (let i = 0; i < sanitizedPool.setBackDice; i++) {
|
|
199
|
+
const roll = rollDie(6);
|
|
200
|
+
detailedResults.push({
|
|
201
|
+
type: 'setback',
|
|
202
|
+
roll,
|
|
203
|
+
result: setBackDieResult(roll)
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
// Roll difficulty dice
|
|
207
|
+
for (let i = 0; i < sanitizedPool.difficultyDice; i++) {
|
|
208
|
+
const roll = rollDie(8);
|
|
209
|
+
detailedResults.push({
|
|
210
|
+
type: 'difficulty',
|
|
211
|
+
roll,
|
|
212
|
+
result: difficultyDieResult(roll)
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
// Roll challenge dice
|
|
216
|
+
for (let i = 0; i < sanitizedPool.challengeDice; i++) {
|
|
217
|
+
const roll = rollDie(12);
|
|
218
|
+
detailedResults.push({
|
|
219
|
+
type: 'challenge',
|
|
220
|
+
roll,
|
|
221
|
+
result: challengeDieResult(roll)
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
results: detailedResults,
|
|
226
|
+
summary: sumResults(detailedResults.map(r => r.result))
|
|
227
|
+
};
|
|
228
|
+
};
|
|
229
|
+
exports.roll = roll;
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDifficultyPool = exports.createOpposedCheck = exports.createCombatCheck = exports.createSkillCheck = exports.roll = void 0;
|
|
4
|
+
var dice_1 = require("./dice");
|
|
5
|
+
Object.defineProperty(exports, "roll", { enumerable: true, get: function () { return dice_1.roll; } });
|
|
6
|
+
var pools_1 = require("./pools");
|
|
7
|
+
Object.defineProperty(exports, "createSkillCheck", { enumerable: true, get: function () { return pools_1.createSkillCheck; } });
|
|
8
|
+
Object.defineProperty(exports, "createCombatCheck", { enumerable: true, get: function () { return pools_1.createCombatCheck; } });
|
|
9
|
+
Object.defineProperty(exports, "createOpposedCheck", { enumerable: true, get: function () { return pools_1.createOpposedCheck; } });
|
|
10
|
+
Object.defineProperty(exports, "createDifficultyPool", { enumerable: true, get: function () { return pools_1.createDifficultyPool; } });
|