roll-parser 3.1.0 → 3.2.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/CHANGELOG.md +26 -1
- package/MIGRATION.md +225 -8
- package/README.md +185 -60
- package/dist/evaluator/env.d.ts +27 -1
- package/dist/evaluator/env.d.ts.map +1 -1
- package/dist/evaluator/env.js.map +1 -1
- package/dist/evaluator/evaluator.d.ts.map +1 -1
- package/dist/evaluator/evaluator.js +80 -40
- package/dist/evaluator/evaluator.js.map +1 -1
- package/dist/evaluator/modifiers/crit-threshold.d.ts +13 -28
- package/dist/evaluator/modifiers/crit-threshold.d.ts.map +1 -1
- package/dist/evaluator/modifiers/crit-threshold.js +6 -12
- package/dist/evaluator/modifiers/crit-threshold.js.map +1 -1
- package/dist/evaluator/modifiers/explode.d.ts.map +1 -1
- package/dist/evaluator/modifiers/explode.js +7 -1
- package/dist/evaluator/modifiers/explode.js.map +1 -1
- package/dist/evaluator/modifiers/flags.d.ts +9 -2
- package/dist/evaluator/modifiers/flags.d.ts.map +1 -1
- package/dist/evaluator/modifiers/flags.js +4 -11
- package/dist/evaluator/modifiers/flags.js.map +1 -1
- package/dist/evaluator/modifiers/keep-drop.d.ts +1 -3
- package/dist/evaluator/modifiers/keep-drop.d.ts.map +1 -1
- package/dist/evaluator/modifiers/keep-drop.js.map +1 -1
- package/dist/evaluator/modifiers/success-count.d.ts +6 -5
- package/dist/evaluator/modifiers/success-count.d.ts.map +1 -1
- package/dist/evaluator/modifiers/success-count.js +9 -6
- package/dist/evaluator/modifiers/success-count.js.map +1 -1
- package/dist/notation.d.ts +13 -0
- package/dist/notation.d.ts.map +1 -0
- package/dist/notation.js +8 -0
- package/dist/notation.js.map +1 -0
- package/dist/parser/guards.d.ts +38 -0
- package/dist/parser/guards.d.ts.map +1 -1
- package/dist/parser/guards.js +51 -0
- package/dist/parser/guards.js.map +1 -1
- package/dist/parser/parser.d.ts.map +1 -1
- package/dist/parser/parser.js +26 -2
- package/dist/parser/parser.js.map +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +18 -13
- package/dist/render.js.map +1 -1
- package/dist/types.d.ts +15 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -4
- package/src/evaluator/env.ts +27 -1
- package/src/evaluator/evaluator.ts +148 -53
- package/src/evaluator/modifiers/crit-threshold.ts +29 -48
- package/src/evaluator/modifiers/explode.ts +13 -4
- package/src/evaluator/modifiers/flags.ts +13 -13
- package/src/evaluator/modifiers/keep-drop.ts +1 -3
- package/src/evaluator/modifiers/sort.ts +1 -1
- package/src/evaluator/modifiers/success-count.ts +19 -12
- package/src/notation.ts +24 -0
- package/src/parser/guards.ts +92 -1
- package/src/parser/parser.ts +56 -1
- package/src/render.ts +24 -22
- package/src/types.ts +15 -3
- package/src/version.ts +1 -1
|
@@ -14,28 +14,22 @@ export function applyCritThresholds(dice, successThresholds, failThresholds, env
|
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
function applyCritRule(die, rule, natural) {
|
|
17
|
-
die.critical = rule.success.some((t) =>
|
|
18
|
-
die.fumble = rule.fail.some((t) =>
|
|
17
|
+
die.critical = rule.success.some((t) => matchesThreshold(t, die, natural, die.sides));
|
|
18
|
+
die.fumble = rule.fail.some((t) => matchesThreshold(t, die, natural, 1));
|
|
19
19
|
}
|
|
20
|
-
export function inheritCritRule(env, parent, child
|
|
20
|
+
export function inheritCritRule(env, parent, child) {
|
|
21
21
|
const rules = env.critRules;
|
|
22
22
|
if (rules === undefined)
|
|
23
23
|
return;
|
|
24
24
|
const rule = rules.get(parent);
|
|
25
25
|
if (rule === undefined)
|
|
26
26
|
return;
|
|
27
|
-
applyCritRule(child, rule,
|
|
27
|
+
applyCritRule(child, rule, child.initialResult ?? child.result);
|
|
28
28
|
rules.set(child, rule);
|
|
29
29
|
}
|
|
30
|
-
function
|
|
30
|
+
function matchesThreshold(threshold, die, natural, defaultFace) {
|
|
31
31
|
if (threshold === 'default') {
|
|
32
|
-
return natural ===
|
|
33
|
-
}
|
|
34
|
-
return matchesCondition(die.result, threshold.operator, threshold.value);
|
|
35
|
-
}
|
|
36
|
-
function matchesFumble(threshold, die, natural) {
|
|
37
|
-
if (threshold === 'default') {
|
|
38
|
-
return natural === 1 && die.sides > 1;
|
|
32
|
+
return natural === defaultFace && die.sides > 1;
|
|
39
33
|
}
|
|
40
34
|
return matchesCondition(die.result, threshold.operator, threshold.value);
|
|
41
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crit-threshold.js","sourceRoot":"","sources":["../../../src/evaluator/modifiers/crit-threshold.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"crit-threshold.js","sourceRoot":"","sources":["../../../src/evaluator/modifiers/crit-threshold.ts"],"names":[],"mappings":"AA8CA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AASxC,MAAM,UAAU,mBAAmB,CACjC,IAAiB,EACjB,iBAA0C,EAC1C,cAAuC,EACvC,GAAY;IAEZ,MAAM,IAAI,GAAa,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;IAC5E,GAAG,CAAC,SAAS,KAAK,IAAI,OAAO,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC;IAE5B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAS;QAC7C,IAAI,GAAG,CAAC,WAAW,IAAI,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAEjD,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1D,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAOD,SAAS,aAAa,CAAC,GAAc,EAAE,IAAc,EAAE,OAAe;IACpE,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACtF,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAYD,MAAM,UAAU,eAAe,CAAC,GAAY,EAAE,MAAiB,EAAE,KAAgB;IAC/E,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO;IAEhC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO;IAE/B,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAChE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACzB,CAAC;AAOD,SAAS,gBAAgB,CACvB,SAAgC,EAChC,GAAc,EACd,OAAe,EACf,WAAmB;IAEnB,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,OAAO,KAAK,WAAW,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;AAC3E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explode.d.ts","sourceRoot":"","sources":["../../../src/evaluator/modifiers/explode.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3D,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpD;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B,OAAQ,CAAC;AAEpD;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAE1E;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,SAAS,GAAG,SAAS,EAC/B,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,aAAa,CAgBf;
|
|
1
|
+
{"version":3,"file":"explode.d.ts","sourceRoot":"","sources":["../../../src/evaluator/modifiers/explode.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3D,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpD;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B,OAAQ,CAAC;AAEpD;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAE1E;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,SAAS,GAAG,SAAS,EAC/B,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,aAAa,CAgBf;AAoGD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,EAAE,EACjB,aAAa,EAAE,aAAa,EAC5B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,OAAO,GACX,SAAS,EAAE,CAEb;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,EAAE,EACjB,aAAa,EAAE,aAAa,EAC5B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,OAAO,GACX,SAAS,EAAE,CAkCb;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,SAAS,EAAE,EACjB,aAAa,EAAE,aAAa,EAC5B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,OAAO,GACX,SAAS,EAAE,CAEb"}
|
|
@@ -53,7 +53,13 @@ function applyAppendingExplode(pool, shouldExplode, rng, env, storeResult) {
|
|
|
53
53
|
const raw = rollExplosion(sides, rng, env);
|
|
54
54
|
const die = createDieResult(sides, raw, ['exploded', 'kept']);
|
|
55
55
|
die.result = storeResult(raw);
|
|
56
|
-
|
|
56
|
+
if (die.result !== raw)
|
|
57
|
+
die.initialResult = raw;
|
|
58
|
+
if (env.insideVersus) {
|
|
59
|
+
env.explosionDice ??= new WeakSet();
|
|
60
|
+
env.explosionDice.add(die);
|
|
61
|
+
}
|
|
62
|
+
inheritCritRule(env, original, die);
|
|
57
63
|
result.push(die);
|
|
58
64
|
lastRaw = raw;
|
|
59
65
|
iterations += 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explode.js","sourceRoot":"","sources":["../../../src/evaluator/modifiers/explode.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAgB,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAWxC,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,CAAC;AAapD,MAAM,UAAU,kBAAkB,CAChC,QAA+B,EAC/B,cAAkC;IAElC,IAAI,QAAQ,IAAI,IAAI,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;QAC/C,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC;IAC7C,CAAC;IACD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,GAAG;YACN,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,cAAc,CAAC;QAC7C,KAAK,IAAI;YACP,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,cAAc,CAAC;QAC9C,KAAK,GAAG;YACN,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,cAAc,CAAC;QAC7C,KAAK,IAAI;YACP,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,cAAc,CAAC;QAC9C,KAAK,GAAG;YACN,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,cAAc,CAAC;IACjD,CAAC;AACH,CAAC;AAKD,SAAS,aAAa,CAAC,KAAa,EAAE,GAAQ,EAAE,GAAY;IAC1D,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC1B,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,iBAAiB,CAAC,aAAqB;IAC9C,OAAO,IAAI,cAAc,CACvB,8BAA8B,aAAa,WAAW,EACtD,wBAAwB,EACxB,SAAS,CACV,CAAC;AACJ,CAAC;AAYD,SAAS,UAAU,CAAC,GAAc,EAAE,WAAoB;IACtD,IAAI,WAAW,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACjD,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IACpD,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC;
|
|
1
|
+
{"version":3,"file":"explode.js","sourceRoot":"","sources":["../../../src/evaluator/modifiers/explode.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,12 +20,19 @@ import type { DieModifier, DieResult } from '../../types.js';
|
|
|
20
20
|
* `{1d20 vs 2d10, 1d4}>=5` must not count the DC faces as successes.
|
|
21
21
|
*
|
|
22
22
|
* ! Call this behind the shared `hasVersusDc` env flag, never bare. Unguarded
|
|
23
|
-
* ! inside a per-die loop it cost 11-38% on notation that cannot carry the
|
|
24
|
-
* !
|
|
23
|
+
* ! inside a per-die loop it cost 11-38% on notation that cannot carry the
|
|
24
|
+
* ! tag; the flag is `false` until a `vs` has actually tagged something.
|
|
25
25
|
*/
|
|
26
26
|
export declare function isVersusDc(die: DieResult): boolean;
|
|
27
27
|
/** Kept/dropped selection flags — rebuilt by every keep/drop pass. */
|
|
28
28
|
export declare const SELECTION_FLAGS: readonly DieModifier[];
|
|
29
|
+
/**
|
|
30
|
+
* Success-count tally flags — rebuilt by every counting pass. A group lets a
|
|
31
|
+
* second count reach a pool the first one already tagged (`{4d6>=5}<=2f5`);
|
|
32
|
+
* stripping these first is what keeps the outermost count the only one the
|
|
33
|
+
* tags describe.
|
|
34
|
+
*/
|
|
35
|
+
export declare const TALLY_FLAGS: readonly DieModifier[];
|
|
29
36
|
/**
|
|
30
37
|
* Selection flags plus the success-count tally flags. Stripped when a die
|
|
31
38
|
* leaves the pool that tagged it (meta sub-expressions, dropped group
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../../src/evaluator/modifiers/flags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE7D;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAElD;AAED,sEAAsE;AACtE,eAAO,MAAM,eAAe,EAAE,SAAS,WAAW,EAAwB,CAAC;AAE3E;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,WAAW,
|
|
1
|
+
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../../src/evaluator/modifiers/flags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE7D;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAElD;AAED,sEAAsE;AACtE,eAAO,MAAM,eAAe,EAAE,SAAS,WAAW,EAAwB,CAAC;AAE3E;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,WAAW,EAA2B,CAAC;AAE1E;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,WAAW,EAG3D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,WAAW,EAA2C,CAAC;AAE/F,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,EAAE,SAAS,WAAW,EAAoC,CAAC;AAEzF,iEAAiE;AACjE,wBAAgB,UAAU,CACxB,SAAS,EAAE,SAAS,WAAW,EAAE,EACjC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAC/B,WAAW,EAAE,CAEf;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAC1B,SAAS,EAAE,SAAS,WAAW,EAAE,EACjC,QAAQ,EAAE,SAAS,WAAW,EAAE,EAChC,GAAG,KAAK,EAAE,WAAW,EAAE,GACtB,WAAW,EAAE,CAEf"}
|
|
@@ -2,19 +2,12 @@ export function isVersusDc(die) {
|
|
|
2
2
|
return die.modifiers.includes('dc');
|
|
3
3
|
}
|
|
4
4
|
export const SELECTION_FLAGS = ['kept', 'dropped'];
|
|
5
|
+
export const TALLY_FLAGS = ['success', 'failure'];
|
|
5
6
|
export const SELECTION_AND_TALLY_FLAGS = [
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
'success',
|
|
9
|
-
'failure',
|
|
10
|
-
];
|
|
11
|
-
export const META_MERGE_FLAGS = [
|
|
12
|
-
'kept',
|
|
13
|
-
'dropped',
|
|
14
|
-
'success',
|
|
15
|
-
'failure',
|
|
16
|
-
'meta',
|
|
7
|
+
...SELECTION_FLAGS,
|
|
8
|
+
...TALLY_FLAGS,
|
|
17
9
|
];
|
|
10
|
+
export const META_MERGE_FLAGS = [...SELECTION_AND_TALLY_FLAGS, 'meta'];
|
|
18
11
|
export const REROLL_SLOT_FLAGS = ['kept', 'dropped', 'rerolled'];
|
|
19
12
|
export function stripFlags(modifiers, excluded) {
|
|
20
13
|
return modifiers.filter((modifier) => !excluded.includes(modifier));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../../../src/evaluator/modifiers/flags.ts"],"names":[],"mappings":"AA2BA,MAAM,UAAU,UAAU,CAAC,GAAc;IACvC,OAAO,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAGD,MAAM,CAAC,MAAM,eAAe,GAA2B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../../../src/evaluator/modifiers/flags.ts"],"names":[],"mappings":"AA2BA,MAAM,UAAU,UAAU,CAAC,GAAc;IACvC,OAAO,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAGD,MAAM,CAAC,MAAM,eAAe,GAA2B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAQ3E,MAAM,CAAC,MAAM,WAAW,GAA2B,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAO1E,MAAM,CAAC,MAAM,yBAAyB,GAA2B;IAC/D,GAAG,eAAe;IAClB,GAAG,WAAW;CACf,CAAC;AAOF,MAAM,CAAC,MAAM,gBAAgB,GAA2B,CAAC,GAAG,yBAAyB,EAAE,MAAM,CAAC,CAAC;AAG/F,MAAM,CAAC,MAAM,iBAAiB,GAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAGzF,MAAM,UAAU,UAAU,CACxB,SAAiC,EACjC,QAAgC;IAEhC,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtE,CAAC;AAGD,MAAM,UAAU,YAAY,CAC1B,SAAiC,EACjC,QAAgC,EAChC,GAAG,KAAoB;IAEvB,OAAO,CAAC,GAAG,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -19,12 +19,10 @@ import type { DieResult, KeepDropSpec } from '../../types.js';
|
|
|
19
19
|
*/
|
|
20
20
|
export declare function markDroppedIndices(dice: DieResult[], count: number, kind: KeepDropSpec['kind'], selector: KeepDropSpec['selector'], droppedMask: Uint8Array, hasVersusDc: boolean): void;
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* Sums the dice a keep/drop pass left standing.
|
|
23
23
|
*
|
|
24
|
-
* @param dice - Array of die results
|
|
25
24
|
* @param hasVersusDc - Shared env flag; skips the DC exclusion when no `vs` has
|
|
26
25
|
* tagged anything
|
|
27
|
-
* @returns Sum of non-dropped dice
|
|
28
26
|
*/
|
|
29
27
|
export declare function sumKeptDice(dice: DieResult[], hasVersusDc: boolean): number;
|
|
30
28
|
//# sourceMappingURL=keep-drop.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keep-drop.d.ts","sourceRoot":"","sources":["../../../src/evaluator/modifiers/keep-drop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAM9D;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,EAAE,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAC1B,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,EAClC,WAAW,EAAE,UAAU,EACvB,WAAW,EAAE,OAAO,GACnB,IAAI,CAgDN;AAuDD
|
|
1
|
+
{"version":3,"file":"keep-drop.d.ts","sourceRoot":"","sources":["../../../src/evaluator/modifiers/keep-drop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAM9D;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,EAAE,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAC1B,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,EAClC,WAAW,EAAE,UAAU,EACvB,WAAW,EAAE,OAAO,GACnB,IAAI,CAgDN;AAuDD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,OAAO,GAAG,MAAM,CAS3E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keep-drop.js","sourceRoot":"","sources":["../../../src/evaluator/modifiers/keep-drop.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"keep-drop.js","sourceRoot":"","sources":["../../../src/evaluator/modifiers/keep-drop.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,10 +10,11 @@
|
|
|
10
10
|
* excluded from counting and are never tagged.
|
|
11
11
|
*
|
|
12
12
|
* Mutates the input pool in place to add `'success'` / `'failure'` modifier
|
|
13
|
-
* flags — mirrors the mutation pattern of explode and reroll modifiers.
|
|
14
|
-
*
|
|
15
|
-
* (`{4d6>=5}
|
|
16
|
-
*
|
|
13
|
+
* flags — mirrors the mutation pattern of explode and reroll modifiers. The
|
|
14
|
+
* tags are rebuilt, not appended: a group counted after its members
|
|
15
|
+
* (`{4d6>=5}<=2f5`) runs this pass twice over the same dice, and the outermost
|
|
16
|
+
* pass is the one whose arithmetic `RollResult.successes` / `failures` and the
|
|
17
|
+
* rendered markers report.
|
|
17
18
|
*
|
|
18
19
|
* @module evaluator/modifiers/success-count
|
|
19
20
|
*/
|
|
@@ -23,5 +24,5 @@ export type SuccessCountResult = {
|
|
|
23
24
|
successes: number;
|
|
24
25
|
failures: number;
|
|
25
26
|
};
|
|
26
|
-
export declare function countSuccesses(dice: DieResult[], threshold: ResolvedComparePoint, failThreshold: ResolvedComparePoint | undefined, hasVersusDc: boolean): SuccessCountResult;
|
|
27
|
+
export declare function countSuccesses(dice: DieResult[], threshold: ResolvedComparePoint, failThreshold: ResolvedComparePoint | undefined, hasVersusDc: boolean, poolAlreadyCounted: boolean): SuccessCountResult;
|
|
27
28
|
//# sourceMappingURL=success-count.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"success-count.d.ts","sourceRoot":"","sources":["../../../src/evaluator/modifiers/success-count.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"success-count.d.ts","sourceRoot":"","sources":["../../../src/evaluator/modifiers/success-count.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAItE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,EAAE,EACjB,SAAS,EAAE,oBAAoB,EAC/B,aAAa,EAAE,oBAAoB,GAAG,SAAS,EAC/C,WAAW,EAAE,OAAO,EACpB,kBAAkB,EAAE,OAAO,GAC1B,kBAAkB,CAwCpB"}
|
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
import { matchesCondition } from './compare.js';
|
|
2
|
-
import { isVersusDc } from './flags.js';
|
|
3
|
-
export function countSuccesses(dice, threshold, failThreshold, hasVersusDc) {
|
|
2
|
+
import { isVersusDc, stripFlags, TALLY_FLAGS } from './flags.js';
|
|
3
|
+
export function countSuccesses(dice, threshold, failThreshold, hasVersusDc, poolAlreadyCounted) {
|
|
4
4
|
let successes = 0;
|
|
5
5
|
let failures = 0;
|
|
6
6
|
const pool = hasVersusDc ? dice.filter((die) => !isVersusDc(die)) : dice;
|
|
7
|
+
if (poolAlreadyCounted) {
|
|
8
|
+
for (const die of pool) {
|
|
9
|
+
die.modifiers = stripFlags(die.modifiers, TALLY_FLAGS);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
7
12
|
for (const die of pool) {
|
|
8
13
|
if (die.modifiers.includes('dropped'))
|
|
9
14
|
continue;
|
|
10
15
|
if (matchesCondition(die.result, threshold.operator, threshold.value)) {
|
|
11
|
-
|
|
12
|
-
die.modifiers.push('success');
|
|
16
|
+
die.modifiers.push('success');
|
|
13
17
|
successes += 1;
|
|
14
18
|
continue;
|
|
15
19
|
}
|
|
16
20
|
if (failThreshold != null &&
|
|
17
21
|
matchesCondition(die.result, failThreshold.operator, failThreshold.value)) {
|
|
18
|
-
|
|
19
|
-
die.modifiers.push('failure');
|
|
22
|
+
die.modifiers.push('failure');
|
|
20
23
|
failures += 1;
|
|
21
24
|
}
|
|
22
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"success-count.js","sourceRoot":"","sources":["../../../src/evaluator/modifiers/success-count.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"success-count.js","sourceRoot":"","sources":["../../../src/evaluator/modifiers/success-count.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAQjE,MAAM,UAAU,cAAc,CAC5B,IAAiB,EACjB,SAA+B,EAC/B,aAA+C,EAC/C,WAAoB,EACpB,kBAA2B;IAE3B,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,QAAQ,GAAG,CAAC,CAAC;IAQjB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAKzE,IAAI,kBAAkB,EAAE,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,SAAS;QAEhD,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACtE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,SAAS,IAAI,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QAED,IACE,aAAa,IAAI,IAAI;YACrB,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,EACzE,CAAC;YACD,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,QAAQ,IAAI,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notation serialization shared by the two breakdown builders — the
|
|
3
|
+
* evaluator's `expression`/`rendered` strings and `render.ts`.
|
|
4
|
+
*
|
|
5
|
+
* @module notation
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Appends a modifier code to the expression built so far, separating the two
|
|
9
|
+
* with a space when concatenating them would re-lex as a single identifier.
|
|
10
|
+
* The space is the same separator the input used to make them parse.
|
|
11
|
+
*/
|
|
12
|
+
export declare function joinModifierCode(expression: string, code: string): string;
|
|
13
|
+
//# sourceMappingURL=notation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notation.d.ts","sourceRoot":"","sources":["../src/notation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIzE"}
|
package/dist/notation.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const BARE_MODIFIER_END = /(?:cs|cf|sd|s)$/;
|
|
2
|
+
const STARTS_WITH_LETTER = /^[A-Za-z]/;
|
|
3
|
+
export function joinModifierCode(expression, code) {
|
|
4
|
+
return BARE_MODIFIER_END.test(expression) && STARTS_WITH_LETTER.test(code)
|
|
5
|
+
? `${expression} ${code}`
|
|
6
|
+
: `${expression}${code}`;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=notation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notation.js","sourceRoot":"","sources":["../src/notation.ts"],"names":[],"mappings":"AAUA,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAE5C,MAAM,kBAAkB,GAAG,WAAW,CAAC;AAOvC,MAAM,UAAU,gBAAgB,CAAC,UAAkB,EAAE,IAAY;IAC/D,OAAO,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QACxE,CAAC,CAAC,GAAG,UAAU,IAAI,IAAI,EAAE;QACzB,CAAC,CAAC,GAAG,UAAU,GAAG,IAAI,EAAE,CAAC;AAC7B,CAAC"}
|
package/dist/parser/guards.d.ts
CHANGED
|
@@ -52,6 +52,44 @@ export declare function containsDicePool(node: ASTNode): boolean;
|
|
|
52
52
|
* matching `containsDicePool`'s Group rule.
|
|
53
53
|
*/
|
|
54
54
|
export declare function deepContainsDicePool(node: ASTNode): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Returns `true` when this node's total provably equals the sum of its kept
|
|
57
|
+
* dice faces: a pool, a chain of pool modifiers over one, or an addition of
|
|
58
|
+
* those. A multi-sub-roll `Group` qualifies when every sub-roll does, since its
|
|
59
|
+
* total is their sum and `evalGroupKeepDrop` re-flags dropped sub-rolls' dice.
|
|
60
|
+
*
|
|
61
|
+
* Guards the single-sub-roll `Group` keep/drop target, whose flat-pool path
|
|
62
|
+
* totals `sumKeptDice`. Anything else in there — a literal, a subtracted or
|
|
63
|
+
* scaled dice term, a function call, a success count — contributes to the
|
|
64
|
+
* group's own total but not to that face sum, so `{2d6+3}kh2` would lose the
|
|
65
|
+
* `+3` and `{2d6-1d4}kh3` would flip the `1d4` from `-3` to `+3` while dropping
|
|
66
|
+
* nothing.
|
|
67
|
+
*/
|
|
68
|
+
export declare function sumsToKeptFaces(node: ASTNode): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Returns `true` when comparing this node's dice one face at a time is faithful
|
|
71
|
+
* to what it totals. Shaped like `sumsToKeptFaces` but answering a different
|
|
72
|
+
* question, so the two differ on three node types:
|
|
73
|
+
*
|
|
74
|
+
* - `SuccessCount` passes — a nested count re-scores the very same faces.
|
|
75
|
+
* - `Versus` looks only at its roll side — no pool pass ever counts a DC.
|
|
76
|
+
* - a multi-sub-roll `Group` fails everywhere, because its units are subtotals.
|
|
77
|
+
* `sumsToKeptFaces` accepts one, a sum of subtotals still being a face sum.
|
|
78
|
+
*
|
|
79
|
+
* Guards the flat success-count path, whose units are individual dice. The
|
|
80
|
+
* subtotal path takes a direct multi-sub-roll `Group` before this is consulted.
|
|
81
|
+
*/
|
|
82
|
+
export declare function countsPerDie(node: ASTNode): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Deep-walks a node to find any descendant `Dice` or `FateDice`. Unlike
|
|
85
|
+
* `deepContainsDicePool`, a multi-sub-roll `Group` is not a hit in its own
|
|
86
|
+
* right — only real dice are.
|
|
87
|
+
*
|
|
88
|
+
* Used by the success-count parser guard, which tallies individual dice rather
|
|
89
|
+
* than subtotals: a literal-only group satisfies `containsDicePool` yet rolls
|
|
90
|
+
* nothing to tally.
|
|
91
|
+
*/
|
|
92
|
+
export declare function containsDice(node: ASTNode): boolean;
|
|
55
93
|
/**
|
|
56
94
|
* Returns `true` if the pool this node resolves to is (or wraps) a `FateDice`
|
|
57
95
|
* pool. Walks through chained pool modifiers (`KeepDrop` / `Explode` /
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/parser/guards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAMpD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAiB3D;
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/parser/guards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAMpD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAiB3D;AAiED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAyBvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAE3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAqBtD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAwBnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAEnD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAkBvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAE3D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAE5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAErD"}
|
package/dist/parser/guards.js
CHANGED
|
@@ -65,6 +65,7 @@ const isDicePoolHit = (current) => current.type === 'Dice' ||
|
|
|
65
65
|
current.type === 'FateDice' ||
|
|
66
66
|
(current.type === 'Group' && current.expressions.length >= 2);
|
|
67
67
|
const isFateDiceHit = (current) => current.type === 'FateDice';
|
|
68
|
+
const isDiceHit = (current) => current.type === 'Dice' || current.type === 'FateDice';
|
|
68
69
|
const isMultiSubGroupHit = (current) => current.type === 'Group' && current.expressions.length >= 2;
|
|
69
70
|
const isVersusHit = (current) => current.type === 'Versus';
|
|
70
71
|
export function containsDicePool(node) {
|
|
@@ -90,6 +91,56 @@ export function containsDicePool(node) {
|
|
|
90
91
|
export function deepContainsDicePool(node) {
|
|
91
92
|
return someDescendant(node, isDicePoolHit);
|
|
92
93
|
}
|
|
94
|
+
export function sumsToKeptFaces(node) {
|
|
95
|
+
switch (node.type) {
|
|
96
|
+
case 'Dice':
|
|
97
|
+
case 'FateDice':
|
|
98
|
+
return true;
|
|
99
|
+
case 'KeepDrop':
|
|
100
|
+
case 'Explode':
|
|
101
|
+
case 'Reroll':
|
|
102
|
+
case 'DieBound':
|
|
103
|
+
case 'Sort':
|
|
104
|
+
case 'CritThreshold':
|
|
105
|
+
return sumsToKeptFaces(node.target);
|
|
106
|
+
case 'Grouped':
|
|
107
|
+
return sumsToKeptFaces(node.expression);
|
|
108
|
+
case 'Group':
|
|
109
|
+
return node.expressions.every(sumsToKeptFaces);
|
|
110
|
+
case 'BinaryOp':
|
|
111
|
+
return node.operator === '+' && sumsToKeptFaces(node.left) && sumsToKeptFaces(node.right);
|
|
112
|
+
default:
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
export function countsPerDie(node) {
|
|
117
|
+
switch (node.type) {
|
|
118
|
+
case 'Dice':
|
|
119
|
+
case 'FateDice':
|
|
120
|
+
return true;
|
|
121
|
+
case 'KeepDrop':
|
|
122
|
+
case 'Explode':
|
|
123
|
+
case 'Reroll':
|
|
124
|
+
case 'DieBound':
|
|
125
|
+
case 'Sort':
|
|
126
|
+
case 'CritThreshold':
|
|
127
|
+
case 'SuccessCount':
|
|
128
|
+
return countsPerDie(node.target);
|
|
129
|
+
case 'Versus':
|
|
130
|
+
return countsPerDie(node.roll);
|
|
131
|
+
case 'Grouped':
|
|
132
|
+
return countsPerDie(node.expression);
|
|
133
|
+
case 'Group':
|
|
134
|
+
return node.expressions.length === 1 && node.expressions.every(countsPerDie);
|
|
135
|
+
case 'BinaryOp':
|
|
136
|
+
return node.operator === '+' && countsPerDie(node.left) && countsPerDie(node.right);
|
|
137
|
+
default:
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
export function containsDice(node) {
|
|
142
|
+
return someDescendant(node, isDiceHit);
|
|
143
|
+
}
|
|
93
144
|
export function containsFatePool(node) {
|
|
94
145
|
switch (node.type) {
|
|
95
146
|
case 'FateDice':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/parser/guards.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/parser/guards.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,KAAK,KAAK,EAAa,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EACV,OAAO,EAmBR,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/parser/parser.js
CHANGED
|
@@ -2,7 +2,7 @@ import { RollParserError } from '../errors.js';
|
|
|
2
2
|
import { lex } from '../lexer/lexer.js';
|
|
3
3
|
import { TokenType } from '../lexer/tokens.js';
|
|
4
4
|
import { isCritThreshold, isSuccessCount } from './ast.js';
|
|
5
|
-
import { containsDicePool, containsFatePool, containsMultiSubGroup, containsVersus, deepContainsDicePool, unwrapAllTransparent, unwrapGrouped, } from './guards.js';
|
|
5
|
+
import { containsDice, containsDicePool, containsFatePool, containsMultiSubGroup, containsVersus, countsPerDie, deepContainsDicePool, sumsToKeptFaces, unwrapAllTransparent, unwrapGrouped, } from './guards.js';
|
|
6
6
|
export class ParseError extends RollParserError {
|
|
7
7
|
position;
|
|
8
8
|
token;
|
|
@@ -393,6 +393,26 @@ export class Parser {
|
|
|
393
393
|
if (!containsDicePool(target)) {
|
|
394
394
|
throw new ParseError(`Keep/drop modifiers require a dice pool target`, 'INVALID_KEEP_DROP_TARGET', token.position, token);
|
|
395
395
|
}
|
|
396
|
+
const base = unwrapAllTransparent(target);
|
|
397
|
+
if (base.type === 'Group' && base.expressions.length === 1) {
|
|
398
|
+
const inner = base.expressions[0];
|
|
399
|
+
if (inner != null) {
|
|
400
|
+
let innermost = inner;
|
|
401
|
+
while (true) {
|
|
402
|
+
const peeled = unwrapGrouped(innermost);
|
|
403
|
+
if (peeled.type !== 'Group' || peeled.expressions.length !== 1)
|
|
404
|
+
break;
|
|
405
|
+
const next = peeled.expressions[0];
|
|
406
|
+
if (next == null)
|
|
407
|
+
break;
|
|
408
|
+
innermost = next;
|
|
409
|
+
}
|
|
410
|
+
this.rejectSuccessCountTarget(innermost, token);
|
|
411
|
+
if (!sumsToKeptFaces(inner)) {
|
|
412
|
+
throw new ParseError(`Keep/drop on a single-sub-roll group requires added dice terms only`, 'INVALID_KEEP_DROP_TARGET', token.position, token);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
396
416
|
const kind = token.type === TokenType.KEEP_HIGH || token.type === TokenType.KEEP_LOW ? 'keep' : 'drop';
|
|
397
417
|
const selector = token.type === TokenType.KEEP_HIGH || token.type === TokenType.DROP_HIGH
|
|
398
418
|
? 'highest'
|
|
@@ -553,9 +573,13 @@ export class Parser {
|
|
|
553
573
|
}
|
|
554
574
|
parseSuccessCount(target, token) {
|
|
555
575
|
this.rejectSuccessCountTarget(target, token);
|
|
556
|
-
if (!containsDicePool(target)) {
|
|
576
|
+
if (!containsDicePool(target) || !containsDice(target)) {
|
|
557
577
|
throw new ParseError(`Success counting requires a dice pool target`, 'INVALID_SUCCESS_COUNT_TARGET', token.position, token);
|
|
558
578
|
}
|
|
579
|
+
const isSubtotalGroup = target.type === 'Group' && target.expressions.length >= 2;
|
|
580
|
+
if (!isSubtotalGroup && !countsPerDie(target)) {
|
|
581
|
+
throw new ParseError(`Success counting requires a target whose dice can be counted one face at a time`, 'INVALID_SUCCESS_COUNT_TARGET', token.position, token);
|
|
582
|
+
}
|
|
559
583
|
const operator = this.getCompareOp(token);
|
|
560
584
|
const value = this.parseExpression(BP.DICE_LEFT);
|
|
561
585
|
this.rejectSuccessCountTarget(value, token);
|