@yipe/dice 0.11.0 → 0.12.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.
Files changed (65) hide show
  1. package/README.md +278 -8
  2. package/dist/builder/ac.d.ts +44 -1
  3. package/dist/builder/ac.d.ts.map +1 -1
  4. package/dist/builder/arguments.d.ts +6 -0
  5. package/dist/builder/arguments.d.ts.map +1 -0
  6. package/dist/builder/ast.d.ts +36 -7
  7. package/dist/builder/ast.d.ts.map +1 -1
  8. package/dist/builder/attack.d.ts +88 -5
  9. package/dist/builder/attack.d.ts.map +1 -1
  10. package/dist/builder/dc.d.ts +13 -0
  11. package/dist/builder/dc.d.ts.map +1 -1
  12. package/dist/builder/example.d.ts +11 -15
  13. package/dist/builder/example.d.ts.map +1 -1
  14. package/dist/builder/expression.d.ts +72 -0
  15. package/dist/builder/expression.d.ts.map +1 -0
  16. package/dist/builder/factory.d.ts +2 -3
  17. package/dist/builder/factory.d.ts.map +1 -1
  18. package/dist/builder/index.cjs +3574 -1359
  19. package/dist/builder/index.cjs.map +1 -1
  20. package/dist/builder/index.js +3567 -1360
  21. package/dist/builder/index.js.map +1 -1
  22. package/dist/builder/nodes.d.ts +7 -1
  23. package/dist/builder/nodes.d.ts.map +1 -1
  24. package/dist/builder/prob.d.ts +9 -0
  25. package/dist/builder/prob.d.ts.map +1 -1
  26. package/dist/builder/roll.d.ts +151 -21
  27. package/dist/builder/roll.d.ts.map +1 -1
  28. package/dist/builder/save.d.ts +6 -1
  29. package/dist/builder/save.d.ts.map +1 -1
  30. package/dist/builder/types.d.ts +18 -0
  31. package/dist/builder/types.d.ts.map +1 -1
  32. package/dist/common/bounce.d.ts +24 -11
  33. package/dist/common/bounce.d.ts.map +1 -1
  34. package/dist/common/lru-cache.d.ts +29 -1
  35. package/dist/common/lru-cache.d.ts.map +1 -1
  36. package/dist/index.cjs +1131 -402
  37. package/dist/index.cjs.map +1 -1
  38. package/dist/index.js +1131 -402
  39. package/dist/index.js.map +1 -1
  40. package/dist/parser/dice.d.ts +52 -16
  41. package/dist/parser/dice.d.ts.map +1 -1
  42. package/dist/parser/parser.d.ts +1 -5
  43. package/dist/parser/parser.d.ts.map +1 -1
  44. package/dist/parser/rollType.d.ts +4 -4
  45. package/dist/parser/scaleDice.d.ts +14 -0
  46. package/dist/parser/scaleDice.d.ts.map +1 -0
  47. package/dist/pmf/mixture.d.ts +17 -3
  48. package/dist/pmf/mixture.d.ts.map +1 -1
  49. package/dist/pmf/pmf.d.ts +118 -33
  50. package/dist/pmf/pmf.d.ts.map +1 -1
  51. package/dist/pmf/query.d.ts +25 -12
  52. package/dist/pmf/query.d.ts.map +1 -1
  53. package/dist/turn/effects.d.ts +114 -0
  54. package/dist/turn/effects.d.ts.map +1 -0
  55. package/dist/turn/index.d.ts +3 -1
  56. package/dist/turn/index.d.ts.map +1 -1
  57. package/dist/turn/plan.d.ts +101 -21
  58. package/dist/turn/plan.d.ts.map +1 -1
  59. package/dist/turn/state.d.ts +14 -8
  60. package/dist/turn/state.d.ts.map +1 -1
  61. package/dist/turn/turn.d.ts +127 -26
  62. package/dist/turn/turn.d.ts.map +1 -1
  63. package/dist/turn/types.d.ts +154 -17
  64. package/dist/turn/types.d.ts.map +1 -1
  65. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- export type ExpressionNode = DieNode | ConstantNode | SumNode | AddNode | KeepNode | D20RollNode | HalfNode | MaxOfNode | ScaleNode;
1
+ export type ExpressionNode = DieNode | ConstantNode | SumNode | AddNode | KeepNode | D20RollNode | HalfNode | MaxOfNode | MaxNode | ScaleNode;
2
2
  export type DieNode = {
3
3
  type: "die";
4
4
  sides: number;
@@ -38,11 +38,17 @@ export type HalfNode = {
38
38
  type: "half";
39
39
  child: ExpressionNode;
40
40
  };
41
+ /** The highest of `count` independent rolls of `child`. */
41
42
  export type MaxOfNode = {
42
43
  type: "maxOf";
43
44
  count: number;
44
45
  child: ExpressionNode;
45
46
  };
47
+ /** The highest of several independent, possibly different rolls (e.g. the better of 3d8 and 2d10). */
48
+ export type MaxNode = {
49
+ type: "max";
50
+ children: ExpressionNode[];
51
+ };
46
52
  /**
47
53
  * Scale the child's result by `numerator / denominator`, then round.
48
54
  *
@@ -1 +1 @@
1
- {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/builder/nodes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,YAAY,GACZ,OAAO,GACP,OAAO,GACP,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAGF,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,cAAc,CAAC;IAGtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,KAAK,CAAC;IACZ,QAAQ,EAAE;QAAE,IAAI,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;KAAE,EAAE,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,WAAW,GAAG,cAAc,GAAG,gBAAgB,CAAC;IAC1D,KAAK,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACrC,KAAK,EAAE,cAAc,CAAC;CACvB,CAAC"}
1
+ {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/builder/nodes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,YAAY,GACZ,OAAO,GACP,OAAO,GACP,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,SAAS,GACT,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAGF,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,cAAc,CAAC;IAGtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,KAAK,CAAC;IACZ,QAAQ,EAAE;QAAE,IAAI,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;KAAE,EAAE,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,WAAW,GAAG,cAAc,GAAG,gBAAgB,CAAC;IAC1D,KAAK,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF,2DAA2D;AAC3D,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,cAAc,CAAC;CACvB,CAAC;AAEF,sGAAsG;AACtG,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,KAAK,CAAC;IACZ,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACrC,KAAK,EAAE,cAAc,CAAC;CACvB,CAAC"}
@@ -1,3 +1,12 @@
1
1
  import { PMF } from "../.js";
2
2
  export declare function d20PmfFromCdf(cdfPow: (k: number) => number, eps?: number): PMF;
3
+ /**
4
+ * `P(X ≥ t)` and `P(X < t)` for `pmf`, each summed from its own bins — so a side with no bins is
5
+ * exactly 0, never the `1 - p` float residue of the other. Used to split a check's bonus dice at the
6
+ * total its natural roll still needs.
7
+ */
8
+ export declare function splitAtThreshold(pmf: PMF, t: number): {
9
+ atLeast: number;
10
+ below: number;
11
+ };
3
12
  //# sourceMappingURL=prob.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prob.d.ts","sourceRoot":"","sources":["../../src/builder/prob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,wBAAgB,aAAa,CAC3B,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAC7B,GAAG,GAAE,MAAY,GAChB,GAAG,CAaL"}
1
+ {"version":3,"file":"prob.d.ts","sourceRoot":"","sources":["../../src/builder/prob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,wBAAgB,aAAa,CAC3B,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAC7B,GAAG,GAAE,MAAY,GAChB,GAAG,CAaL;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAQxF"}
@@ -1,14 +1,32 @@
1
1
  import type { ACBuilder } from "./ac.js";
2
2
  import type { CritConfig } from "../common/types.js";
3
3
  import type { DCBuilder } from "./dc.js";
4
- import type { PMF } from "../pmf/pmf.js";
4
+ import { PMF } from "../pmf/pmf.js";
5
5
  import type { DiceQuery } from "../pmf/query.js";
6
6
  import { AttackBuilder } from "./attack.js";
7
7
  import type { ExpressionNode } from "./nodes.js";
8
8
  import type { RollConfig, RollType } from "./types.js";
9
- /** Clears the plain-roll PMF cache (test/bench seam; mirrors {@link clearAttackCache}). */
9
+ export { AmbiguousKeepError } from "./ast.js";
10
+ /**
11
+ * Thrown when a parsed string (`d("d20+5")`, `RollBuilder.fromArgs("d20+5")`) is used as an attack
12
+ * or save check. A parsed builder carries only its PMF, not the dice and flats a check reads, so
13
+ * the check would silently lose them.
14
+ */
15
+ export declare class ParsedCheckError extends Error {
16
+ readonly expression: string;
17
+ constructor(expression: string, verb: "ac" | "dc");
18
+ }
19
+ /** Clears the plain-roll and single-die PMF caches (test/bench seam; mirrors {@link clearAttackCache}). */
10
20
  export declare function clearRollCache(): void;
11
21
  export declare const defaultConfig: RollConfig;
22
+ /**
23
+ * Index of the config holding a check's natural roll — the die whose 1 misses and whose 20 hits and
24
+ * crits — or -1 when no config can be one. Only a rolled, added die can: a subtracted or zero-count
25
+ * group never is. A d20 outranks every other die (a d30 or d100 beside it is a bonus die); with no
26
+ * d20 the largest die does, and the first of equal dice wins. The same rule the string parser uses
27
+ * to pick a check's natural roll, so `d4.plus(d20)` and `(1d4 + d20 AC n)` agree.
28
+ */
29
+ export declare function naturalRollIndex(configs: readonly RollConfig[]): number;
12
30
  export declare class RollBuilder {
13
31
  protected readonly subRollConfigs: readonly RollConfig[];
14
32
  constructor(countOrConfigs?: number | readonly RollConfig[]);
@@ -28,35 +46,76 @@ export declare class RollBuilder {
28
46
  static fromConfig(config: Partial<RollConfig>): RollBuilder;
29
47
  static fromConfigs(configs: Partial<RollConfig>[]): RollBuilder;
30
48
  static fromArgs(...args: any[]): RollBuilder;
49
+ /**
50
+ * `count` independent copies of `die`, subtracted when `count` is negative. A plain group scales
51
+ * its dice count; a group whose count is part of its meaning (a keep, `bestOf()`, a pool-wide
52
+ * `explodePool()` budget) is copied, so `roll(2, d6.keepHighest(2, 1))` is two best-of-two d6.
53
+ * Each copy brings its own flat modifier, negated with the dice when subtracted.
54
+ */
55
+ protected static repeated(die: RollBuilder, count: number): RollBuilder;
31
56
  d(sides: number | undefined): RollBuilder;
32
57
  plus(modOrRoll: number | RollBuilder | undefined): RollBuilder;
33
58
  plus(count: number, die: RollBuilder): RollBuilder;
34
59
  minus(modOrRoll: number | RollBuilder | undefined): RollBuilder;
35
60
  minus(count: number, die: RollBuilder): RollBuilder;
36
- /** Apply one-pass reroll threshold (k): reroll faces 1..k once, must keep. */
61
+ /**
62
+ * Reroll faces 1..`value` once and keep the second roll (Great Weapon Fighting in the 2014
63
+ * rules). The reroll decides on the die's raw face: on a group that also has a {@link minimum},
64
+ * the floor applies to the kept face afterwards, whichever of the two was called first.
65
+ */
37
66
  reroll(value: number): RollBuilder;
38
- /** Set finite explode count for max-face explosions (Infinity allowed). */
39
- explode(count?: number | undefined): RollBuilder;
67
+ /**
68
+ * Let each die explode: a roll of its highest face adds another die, at most `count` extra dice
69
+ * per die. The cap is required and must be finite; `explode(0)` is a no-op. For one budget
70
+ * shared by the whole pool, use {@link explodePool}.
71
+ */
72
+ explode(count: number): RollBuilder;
40
73
  /**
41
74
  * Set a pool-wide exploding-dice budget: at most `budget` extra dice may be added across the
42
75
  * WHOLE pool (shared), as opposed to {@link explode}'s per-die cap (`n` dice each individually
43
- * allowed up to `explode(k)` extra dice). `budget` must be a finite non-negative integer —
44
- * unlike `explode()`, `Infinity` is not accepted (it would make the pool-wide DP non-terminating).
76
+ * allowed up to `explode(k)` extra dice). `budget` must be a finite non-negative integer.
45
77
  */
46
78
  explodePool(budget: number): RollBuilder;
47
- /** Apply per-die minimum value (floors each die roll at `val`, e.g. `minimum(3)` treats a 1 or
48
- * 2 as a 3 -- the 2024 Great Weapon Fighting style). */
79
+ /**
80
+ * Floor each die at `val`: `minimum(3)` treats a 1 or 2 as a 3 (the 2024 Great Weapon Fighting
81
+ * style). On a group that also has a {@link reroll}, the reroll decides on the raw face and this
82
+ * floor applies to the kept face afterwards, whichever of the two was called first.
83
+ */
49
84
  minimum(val: number | undefined): RollBuilder;
50
85
  bestOf(count: number | undefined): RollBuilder;
86
+ /**
87
+ * Keep the highest `count` of `total`. On one die, that is `count` of `total` rolls of the die;
88
+ * on N dice it is `count` of the N dice when `total` is N and `count` >= 2, or the best of
89
+ * `total` rolls of the whole N-dice group when `count` is 1. Any other shape on N > 1 dice has
90
+ * more than one reading and throws an {@link AmbiguousKeepError}; use {@link keepHighestAll}
91
+ * or a keep on each die instead.
92
+ */
51
93
  keepHighest(total: number, count: number): RollBuilder;
94
+ /**
95
+ * Keep the lowest `count` of `total`; the mirror of {@link keepHighest}. On N > 1 dice,
96
+ * `keepLowest(N, 1)` throws an {@link AmbiguousKeepError}: the lowest single die and the worse
97
+ * of N rolls of the whole group are both plausible readings.
98
+ */
52
99
  keepLowest(total: number, count: number): RollBuilder;
100
+ private withKeep;
53
101
  keepHighestAll(total: number, count: number): PooledRollBuilder;
54
102
  keepLowestAll(total: number, count: number): PooledRollBuilder;
55
103
  withAdvantage(): RollBuilder;
56
104
  withDisadvantage(): RollBuilder;
105
+ /**
106
+ * Sets a roll type. On a roll with a natural d20 (a check: see {@link naturalRollIndex}) it
107
+ * applies to that d20 whatever the call order, so `d20.plus(d4).withAdvantage()` advantages the
108
+ * d20, not the Bless die. Otherwise it applies to the last group.
109
+ */
110
+ private withRollType;
57
111
  add(anotherRoll: RollBuilder | undefined): RollBuilder;
58
112
  withBonus(anotherRoll: RollBuilder): RollBuilder;
59
113
  addRoll(count?: number): RollBuilder;
114
+ /**
115
+ * Multiplies every die group's count by `scale` (crit doubling); flats stay. Throws an
116
+ * {@link AmbiguousCritDoublingError} for a group whose scaled meaning is ambiguous (see
117
+ * {@link ambiguousScaling}): the caller must give the crit explicitly.
118
+ */
60
119
  scaleDice(scale: number): RollBuilder;
61
120
  doubleDice(): RollBuilder;
62
121
  alwaysHits(): AlwaysHitBuilder;
@@ -75,9 +134,19 @@ export declare class RollBuilder {
75
134
  get pmf(): PMF;
76
135
  toQuery(eps?: number): DiceQuery;
77
136
  toAST(): ExpressionNode;
78
- private configToSingleExpressionWithoutModifier;
137
+ /**
138
+ * The config carrying this roll's natural die — see {@link naturalRollIndex} — or, with no
139
+ * such die, the first config (so `rollType`/`baseReroll` still read a flat roll's own fields).
140
+ */
79
141
  getRootDieConfig(): RollConfig | undefined;
80
142
  getAllDieConfigs(): readonly RollConfig[];
143
+ /**
144
+ * The check's dice other than its natural die (Bless, Bane, Guidance), each WITHOUT its flat
145
+ * modifier. `.plus(n)` stores `n` on whichever group came last, so `d20.plus(d4).plus(5)` holds
146
+ * the 5 on the d4 group; every check resolver already adds all flats once via {@link modifier},
147
+ * so a bonus group that kept its own would count it twice and make the check order-dependent.
148
+ * A check with no natural die has every die as a bonus die.
149
+ */
81
150
  getBonusDiceConfigs(): RollConfig[];
82
151
  getBonusDicePMFs(check: RollBuilder, eps?: number): PMF[];
83
152
  get modifier(): number;
@@ -91,12 +160,34 @@ export declare class RollBuilder {
91
160
  * Compose several of these (and plain rolls) into one payload with {@link sumRolls}.
92
161
  */
93
162
  scaleResult(numerator: number, denominator?: number, rounding?: "floor" | "round" | "ceil"): ScaleRollBuilder;
163
+ /**
164
+ * The highest of `count` independent rolls of this whole roll (dice, flats, rerolls and all):
165
+ * `roll(2, d6).plus(3).maxOf(2)` is the better of two 2d6 + 3. Given another roll instead, the
166
+ * higher of this roll and that one: `roll(3, d8).maxOf(roll(2, d10))`.
167
+ */
94
168
  maxOf(count: number): MaxOfRollBuilder;
169
+ maxOf(other: RollBuilder): RollBuilder;
95
170
  ac(_targetAC: number): ACBuilder;
96
171
  dc(_saveDC: number): DCBuilder;
97
172
  }
98
- export declare class HalfRollBuilder extends RollBuilder {
173
+ /**
174
+ * A roll whose value is a transform of whole rolls: halved, scaled, the highest of several, or a
175
+ * sum that keeps such parts. Arithmetic on it (`plus`, `minus`, `add`) composes as a sum that
176
+ * keeps the transform, so `roll(2, d6).half().plus(1)` is floor(2d6 / 2) + 1. Verbs that edit the
177
+ * underlying dice (`reroll`, `minimum`, `keepHighest`, advantage, ...) throw instead: set them on
178
+ * the roll before transforming it.
179
+ */
180
+ declare abstract class TransformedRollBuilder extends RollBuilder {
181
+ /** The call that made this roll, for error messages (e.g. `half()`). */
182
+ protected abstract readonly verb: string;
183
+ protected create(_configs: readonly RollConfig[]): RollBuilder;
184
+ plus(modOrRoll: number | RollBuilder | undefined): RollBuilder;
185
+ plus(count: number, die: RollBuilder): RollBuilder;
186
+ add(anotherRoll: RollBuilder | undefined): RollBuilder;
187
+ }
188
+ export declare class HalfRollBuilder extends TransformedRollBuilder {
99
189
  private readonly innerRoll;
190
+ protected readonly verb = "half()";
100
191
  constructor(innerRoll: RollBuilder);
101
192
  hasHiddenState(): boolean;
102
193
  cacheKey(): string | null;
@@ -110,14 +201,15 @@ export declare class HalfRollBuilder extends RollBuilder {
110
201
  }
111
202
  /**
112
203
  * A roll whose result is scaled by `numerator / denominator` and rounded — the composable
113
- * generalization of {@link HalfRollBuilder}. Renders as `N * (inner)`, `(inner) // D`, or
114
- * `(inner) * N // D`. Terminal (like `half`): use {@link sumRolls} to combine with other rolls.
204
+ * generalization of {@link HalfRollBuilder}. Renders as `N ** (inner)`, `(inner) // D`, or
205
+ * `(inner) ** N // D`. Arithmetic after it keeps the scale (see {@link sumRolls}).
115
206
  */
116
- export declare class ScaleRollBuilder extends RollBuilder {
207
+ export declare class ScaleRollBuilder extends TransformedRollBuilder {
117
208
  private readonly innerRoll;
118
209
  private readonly numerator;
119
210
  private readonly denominator;
120
211
  private readonly rounding;
212
+ protected readonly verb = "scaleResult()";
121
213
  constructor(innerRoll: RollBuilder, numerator: number, denominator?: number, rounding?: "floor" | "round" | "ceil");
122
214
  hasHiddenState(): boolean;
123
215
  cacheKey(): string | null;
@@ -129,16 +221,18 @@ export declare class ScaleRollBuilder extends RollBuilder {
129
221
  scaleDice(scale: number): RollBuilder;
130
222
  copy(): ScaleRollBuilder;
131
223
  }
132
- export declare class MaxOfRollBuilder extends RollBuilder {
224
+ export declare class MaxOfRollBuilder extends TransformedRollBuilder {
133
225
  private readonly innerRoll;
134
226
  private readonly count;
135
227
  private readonly diceCount?;
136
228
  private readonly diceSides?;
229
+ protected readonly verb = "maxOf()";
137
230
  constructor(innerRoll: RollBuilder, count: number, diceCount?: number | undefined, diceSides?: number | undefined);
138
231
  hasHiddenState(): boolean;
139
232
  cacheKey(): string | null;
140
233
  get lastConfig(): RollConfig;
141
234
  getSubRollConfigs(): readonly RollConfig[];
235
+ /** `NkhK(X)` keeps the highest K of N independent copies of X: the max of N rolls is `Nkh1(X)`. */
142
236
  toExpression(): string;
143
237
  toAST(): ExpressionNode;
144
238
  toPMF(eps?: number): PMF;
@@ -158,8 +252,10 @@ export declare class AlwaysHitBuilder extends RollBuilder {
158
252
  onHit(count: number, sides: number, modifier: number): AttackBuilder;
159
253
  get critThreshold(): number;
160
254
  cacheKey(): string | null;
255
+ /** Sets the crit threshold for this always-hitting check: a natural roll at or above it crits. */
161
256
  critOn(critThreshold: number): AlwaysHitBuilder;
162
257
  alwaysCrits(): AlwaysCritBuilder;
258
+ /** The check's natural roll, which is all this builder's own PMF reads (see {@link toPMF}). */
163
259
  toExpression(): string;
164
260
  toPMF(): PMF;
165
261
  copy(): AlwaysHitBuilder;
@@ -183,6 +279,7 @@ export declare class AlwaysCritBuilder extends RollBuilder {
183
279
  get critThreshold(): number;
184
280
  cacheKey(): string | null;
185
281
  critOn(critThreshold: number): AlwaysCritBuilder;
282
+ /** The check's natural roll, which is all this builder's own PMF reads (see {@link toPMF}). */
186
283
  toExpression(): string;
187
284
  toPMF(): PMF;
188
285
  copy(): AlwaysCritBuilder;
@@ -196,20 +293,48 @@ export declare class ParsedRollBuilder extends RollBuilder {
196
293
  protected create(configs: readonly RollConfig[]): RollBuilder;
197
294
  toPMF(_eps?: number): PMF;
198
295
  toExpression(): string;
296
+ /** Refused: a parsed roll has no dice or flats for a check to read (see {@link ParsedCheckError}). */
297
+ ac(_targetAC: number): ACBuilder;
298
+ /** Refused: a parsed roll has no dice or flats for a check to read (see {@link ParsedCheckError}). */
299
+ dc(_saveDC: number): DCBuilder;
199
300
  toAST(): ExpressionNode;
200
301
  copy(): ParsedRollBuilder;
302
+ /**
303
+ * Whether this is a damage expression whose dice a crit doubles: false for one with an AC/DC
304
+ * check or a crit/save/pc/miss clause, or a dice-valued repeat count (`d4d6`), which a crit adds
305
+ * as-is. True for every other expression, including one whose doubling is ambiguous (a keep other
306
+ * than keep-highest-of-1, a min of two dice terms): that is still damage, and {@link doubleDice}
307
+ * refuses it with an `AmbiguousCritDoublingError` so no crit is approximated. Reads the string
308
+ * only; nothing is parsed into a PMF.
309
+ */
310
+ canDoubleDice(): boolean;
311
+ /**
312
+ * A crit doubles every dice term of the expression; flats and operators stay. Throws when
313
+ * {@link canDoubleDice} is false, and for an ambiguous keep (see {@link canDoubleDice}).
314
+ */
201
315
  doubleDice(): ParsedRollBuilder;
316
+ scaleDice(scale: number): ParsedRollBuilder;
202
317
  }
318
+ /**
319
+ * Rebuilds a pool from its pre-pool roll with that roll's dice scaled. This is how a pool's dice
320
+ * double on a crit: `roll(2,d6).plus(3).keepHighestAll(2,1)` crits as
321
+ * `roll(4,d6).plus(3).keepHighestAll(2,1)`, never as the whole pool rolled twice.
322
+ */
323
+ type RepoolScaled = (scale: number) => PooledRollBuilder;
203
324
  export declare class PooledRollBuilder extends RollBuilder {
204
325
  private readonly baseAST;
326
+ /** Prints the pool itself; called only when the expression is asked for. */
205
327
  private readonly baseExpression;
206
- constructor(baseAST: ExpressionNode, baseExpression: string, configs?: readonly RollConfig[]);
328
+ private readonly repoolScaled?;
329
+ constructor(baseAST: ExpressionNode,
330
+ /** Prints the pool itself; called only when the expression is asked for. */
331
+ baseExpression: () => string, configs?: readonly RollConfig[], repoolScaled?: RepoolScaled | undefined);
207
332
  protected create(configs: readonly RollConfig[]): PooledRollBuilder;
208
333
  hasHiddenState(): boolean;
209
334
  cacheKey(): string | null;
210
335
  d(_sides: number | undefined): RollBuilder;
211
336
  reroll(_value: number): RollBuilder;
212
- explode(_count?: number | undefined): RollBuilder;
337
+ explode(_count: number): RollBuilder;
213
338
  explodePool(_budget: number): RollBuilder;
214
339
  minimum(_val: number | undefined): RollBuilder;
215
340
  bestOf(_count: number | undefined): RollBuilder;
@@ -221,15 +346,20 @@ export declare class PooledRollBuilder extends RollBuilder {
221
346
  toAST(): ExpressionNode;
222
347
  toExpression(): string;
223
348
  copy(): PooledRollBuilder;
224
- scaleDice(scale: number): RollBuilder;
349
+ /**
350
+ * Scales the dice inside the pool, then pools — the pool is rebuilt from its own pre-pool roll
351
+ * with that roll's dice scaled, so its trial count and flats never multiply. Dice added after
352
+ * pooling (`pool.plus(roll(1, d4))`) scale too; flat modifiers do not.
353
+ */
354
+ scaleDice(scale: number): PooledRollBuilder;
225
355
  times(count: number): PooledRollBuilder;
226
356
  }
227
357
  /**
228
358
  * Combine several rolls into one additive payload whose PMF is their convolution and whose
229
- * expression is them joined with ` + `. Unlike `a.plus(b)`, this preserves parts that carry
230
- * hidden state (e.g. `roll.scaleResult(1, 2)` / `roll.half()`), so per-damage-type resistance
359
+ * expression is their sum. Unlike merging plain dice, this preserves parts that carry
360
+ * a transform (e.g. `roll.scaleResult(1, 2)` / `roll.half()`), so per-damage-type resistance
231
361
  * and vulnerability survive into both the distribution and the rendered expression.
232
- * Empty parts collapse to `0`; a single part is returned unwrapped.
362
+ * Empty parts collapse to `0`; a single part is returned unwrapped; nested sums are flattened.
233
363
  */
234
364
  export declare function sumRolls(parts: readonly RollBuilder[]): RollBuilder;
235
365
  //# sourceMappingURL=roll.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"roll.d.ts","sourceRoot":"","sources":["../../src/builder/roll.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"roll.d.ts","sourceRoot":"","sources":["../../src/builder/roll.ts"],"names":[],"mappings":"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"}
@@ -13,10 +13,15 @@ export declare class SaveBuilder implements CheckBuilder {
13
13
  constructor(check: DCBuilder, failureEffect?: RollBuilder | undefined, saveOutcome?: SaveOutcome);
14
14
  saveHalf(): SaveBuilder;
15
15
  toExpression(): string;
16
+ /**
17
+ * The save's outcome: `check` is the DC check's own PMF (success at 0, failure at 1, as
18
+ * {@link DCBuilder.toPMF}), `weights` its success/failure chances, `saveFail` the failure payload
19
+ * and `saveSuccess` what a success deals (half, floored, under `saveHalf()`; else 0).
20
+ */
16
21
  resolve(eps?: number): SaveResolution;
17
22
  /**
18
23
  * A cheap, complete key for this save's resolved PMF, or `null` when it can't be cached soundly.
19
- * {@link resolve} reads exactly three things: the DC check (via `resolveProbabilities`), the failure
24
+ * {@link resolve} reads exactly three things: the DC check (via `saveProbabilities`/`toPMF`), the failure
20
25
  * effect's PMF, and the save outcome — so composing their keys pins it. A `ParsedRollBuilder` failure
21
26
  * effect returns `null`, which correctly forces this uncached.
22
27
  */
@@ -1 +1 @@
1
- {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/builder/save.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE5D,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;AAU5C,8FAA8F;AAC9F,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,qBAAa,WAAY,YAAW,YAAY;IAE5C,QAAQ,CAAC,KAAK,EAAE,SAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAH9B,YACW,KAAK,EAAE,SAAS,EACR,aAAa,CAAC,EAAE,WAAW,YAAA,EAC3B,WAAW,GAAE,WAAsB,EAClD;IAEJ,QAAQ,IAAI,WAAW,CAEtB;IAED,YAAY,IAAI,MAAM,CAOrB;IAED,OAAO,CAAC,GAAG,GAAE,MAAY,GAAG,cAAc,CA8BzC;IAED;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAehB,KAAK,CAAC,GAAG,GAAE,MAAU,GAAG,GAAG,CAQ1B;IAED,IAAI,GAAG,QAEN;IAGD,OAAO,CAAC,GAAG,GAAE,MAAU,GAAG,SAAS,CAElC;CACF"}
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/builder/save.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE5D,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;AAU5C,8FAA8F;AAC9F,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,qBAAa,WAAY,YAAW,YAAY;IAE5C,QAAQ,CAAC,KAAK,EAAE,SAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAH9B,YACW,KAAK,EAAE,SAAS,EACR,aAAa,CAAC,EAAE,WAAW,YAAA,EAC3B,WAAW,GAAE,WAAsB,EAClD;IAEJ,QAAQ,IAAI,WAAW,CAEtB;IAED,YAAY,IAAI,MAAM,CAOrB;IAED;;;;OAIG;IACH,OAAO,CAAC,GAAG,GAAE,MAAY,GAAG,cAAc,CA2BzC;IAED;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAehB,KAAK,CAAC,GAAG,GAAE,MAAU,GAAG,GAAG,CAQ1B;IAED,IAAI,GAAG,QAEN;IAGD,OAAO,CAAC,GAAG,GAAE,MAAU,GAAG,SAAS,CAElC;CACF"}
@@ -45,12 +45,30 @@ export type AttackResolution = Resolution & {
45
45
  hit: PMF;
46
46
  crit: PMF;
47
47
  miss: PMF;
48
+ hitBase: PMF;
49
+ critBase: PMF;
50
+ hitSeparate: PMF;
51
+ critSeparate: PMF;
48
52
  weights: {
49
53
  hit: number;
50
54
  crit: number;
51
55
  miss: number;
52
56
  };
53
57
  };
58
+ /**
59
+ * The one re-derivation surface `AttackBuilder.withCheck(fn)` accepts. `roll` is the
60
+ * to-hit + bonus-dice descriptor (AC and crit threshold live alongside it, not inside it);
61
+ * `rollType`/`advantageDice` are the SOURCE's own values (before any grant is combined in —
62
+ * see `combine()` in `ac.ts`); `critOnHit` mirrors the `alwaysCrits()` path.
63
+ */
64
+ export interface Check {
65
+ roll: RollBuilder;
66
+ ac: number;
67
+ critThreshold: number;
68
+ rollType: RollType;
69
+ advantageDice: 2 | 3;
70
+ critOnHit: boolean;
71
+ }
54
72
  export type SaveResolution = Resolution & {
55
73
  saveFail: PMF;
56
74
  saveSuccess: PMF;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/builder/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C,YAAY,EAAE,QAAQ,EAAE,CAAC;AAEzB,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAChE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAClE,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;IACvC,IAAI,IAAI,WAAW,CAAC;IACpB,EAAE,IAAI,WAAW,CAAC;IAClB,EAAE,IAAI,WAAW,CAAC;IAClB,EAAE,IAAI,WAAW,CAAC;IAClB,GAAG,IAAI,WAAW,CAAC;IACnB,GAAG,IAAI,WAAW,CAAC;IACnB,GAAG,IAAI,WAAW,CAAC;IACnB,IAAI,IAAI,WAAW,CAAC;IACpB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAG5C,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAIhB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG,SAAS,CAAC;IACnE,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,GAAG,CAAC;IACX,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG;IAC1C,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,GAAG,CAAC;IACV,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG;IACxC,QAAQ,EAAE,GAAG,CAAC;IACd,WAAW,EAAE,GAAG,CAAC;IACjB,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAClC,YAAY,IAAI,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/builder/types.ts"],"names":[],"mappings":"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"}
@@ -6,18 +6,22 @@
6
6
  * Accounts for two modifiers:
7
7
  * - **Elemental Adept** (`minimumDieRoll >= 2`): rolls below the minimum are
8
8
  * bumped up to it, collapsing the low faces onto a single heavier value.
9
- * - **Empowered Spell** (`rerollDamageDice > 0`): a number of dice may be
9
+ * - **Empowered Spell** (`rerollDamageDice > 0`): up to that many dice may be
10
10
  * rerolled once, giving a second chance at a match.
11
11
  *
12
- * The base and Elemental-Adept cases are computed exactly (see
13
- * {@link pAllDistinct}); the Empowered-Spell reroll is an explicit model layered
14
- * on the exact base match probability.
12
+ * Every case is exact. With Empowered Spell, a roll that already matched stands;
13
+ * otherwise the caster rerolls the dice — which ones and how many, up to the
14
+ * limit — that maximise the chance of a match. The rerolled dice match when they
15
+ * collide among themselves or with a kept die.
15
16
  */
16
17
  /** Options that modify bounce odds via metamagic / feats. */
17
18
  export interface BounceOddsOptions {
18
19
  /** Minimum die roll — e.g. 2 for Elemental Adept, 3 for Great Weapon Fighting 2024. */
19
20
  minimumDieRoll?: number;
20
- /** Number of dice that may be rerolled once — e.g. CHA modifier for Empowered Spell. */
21
+ /**
22
+ * How many dice may be rerolled once — e.g. CHA modifier for Empowered Spell. "Up to":
23
+ * the odds assume the best choice of which dice, and how many, to reroll.
24
+ */
21
25
  rerollDamageDice?: number;
22
26
  }
23
27
  /**
@@ -34,6 +38,11 @@ export declare function faceWeights(faces: number, minimum?: number, reroll?: nu
34
38
  * P(at least two of `diceCount` dice with `dieFaces` faces match), honoring
35
39
  * Elemental Adept and Empowered Spell. Returns a probability in [0, 1].
36
40
  *
41
+ * With `rerollDamageDice`, a roll that matched stands; otherwise up to that many
42
+ * dice are rerolled once, choosing which and how many to maximise the chance of a
43
+ * match (rerolling fewer can be better: a kept Elemental Adept face is a likely
44
+ * target). The fresh dice match when they collide among themselves or with a kept die.
45
+ *
37
46
  * @param diceCount Number of dice rolled.
38
47
  * @param dieFaces Faces per die (e.g. 8 for d8).
39
48
  * @param options Optional metamagic / feat modifiers.
@@ -64,14 +73,18 @@ export declare function jointSumAndMatch(dice: number, weights: readonly number[
64
73
  * `RollBuilder.explodePool()`). The plain `jointSumAndMatch`/`calculateBounceOdds` formulas assume
65
74
  * `dice` i.i.d. dice — false for an exploded pool, since conditioning on a realized size already
66
75
  * reveals some die rolled max. Exploiting that max is the only exploding face: condition on `m`
67
- * (dice showing max) and `k` (dice showing anything else) —
76
+ * (dice showing max, the exploded ones included) and `k` (dice showing anything else) —
68
77
  *
69
78
  * `m ≥ 2` → match is certain (two dice already share the max face).
70
- * `m ≤ 1` → match iff the `k` non-max dice collide among themselves, uniform over `faces - 1`
71
- * non-max faces (they cannot collide with the max face, so the two parts separate).
79
+ * `m ≤ 1` → match iff the `k` non-max dice collide among themselves. Each shows face `v` with
80
+ * the conditional weight `w_v / (1 − pMax)`, and they cannot collide with the max face,
81
+ * so the two parts separate.
82
+ *
83
+ * So a single die can match its own explosion: a lone d8 with budget ≥ 1 matches when it rolls
84
+ * 8 and then 8 again (1/64).
72
85
  *
73
- * `pMax` and `faces` describe the single (non-exploding-budget) die's resolved marginal —
74
- * `pMax = weights[faces - 1]`.
86
+ * `weights` is the single (non-exploding-budget) die's resolved marginal, 1-indexed with the
87
+ * max face last, as {@link faceWeights} returns it.
75
88
  */
76
- export declare function explodingPoolMatchProbability(pMax: number, faces: number, count: number, budget: number): number;
89
+ export declare function explodingPoolMatchProbability(weights: readonly number[], count: number, budget: number): number;
77
90
  //# sourceMappingURL=bounce.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bounce.d.ts","sourceRoot":"","sources":["../../src/common/bounce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC,uFAAuF;IACvF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAI,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAwB5E;AAuDD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,MAAM,CAgCR;AAED;;;;;;;;;;;GAWG;AAEH,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAejG;AA0CD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAY9F;AAoED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,MAAM,CAoBR"}
1
+ {"version":3,"file":"bounce.d.ts","sourceRoot":"","sources":["../../src/common/bounce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC,uFAAuF;IACvF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAI,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAwB5E;AAuDD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,MAAM,CA6CR;AAED;;;;;;;;;;;GAWG;AAEH,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAejG;AA0CD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAuB9F;AAiFD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,MAAM,CAcR"}
@@ -1,10 +1,38 @@
1
1
  /**
2
2
  * Simple LRU cache implementation
3
3
  */
4
+ /**
5
+ * Enable or disable the library's internal caches: the parse cache, the PMF convolution/power
6
+ * cache, and the builder, die, roll, attack, save and check caches. While disabled those caches
7
+ * store nothing and every lookup misses, and disabling empties them. Caches you construct
8
+ * yourself are unaffected unless created with `followsCachingToggle`.
9
+ */
10
+ export declare function setCachingEnabled(enabled: boolean): void;
11
+ /** Returns whether the library's internal caches are currently enabled. */
12
+ export declare function getCachingEnabled(): boolean;
13
+ export interface LRUCacheOptions<V> {
14
+ /** Called with every value as it is stored, e.g. to freeze a shared result. */
15
+ onInsert?: (value: V) => void;
16
+ /**
17
+ * Store and return nothing while {@link setCachingEnabled} has turned caching off, and empty
18
+ * this cache when it does.
19
+ */
20
+ followsCachingToggle?: boolean;
21
+ }
4
22
  export declare class LRUCache<K, V> {
5
23
  private readonly maxSize;
6
24
  private cache;
7
- constructor(maxSize?: number);
25
+ private readonly onInsert?;
26
+ private readonly followsCachingToggle;
27
+ private generation;
28
+ /**
29
+ * @param maxSize Entries kept before the least recently used is evicted. A capacity of 0 or
30
+ * less (or NaN) makes the cache store nothing.
31
+ */
32
+ constructor(maxSize?: number, options?: LRUCacheOptions<V>);
33
+ /** Drops the entries of a toggle-following cache when caching was turned off since last use. */
34
+ private sync;
35
+ private get storing();
8
36
  get(key: K): V | undefined;
9
37
  delete(key: K): void;
10
38
  set(key: K, value: V): this;
@@ -1 +1 @@
1
- {"version":3,"file":"lru-cache.d.ts","sourceRoot":"","sources":["../../src/common/lru-cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IAGZ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,KAAK,CAAmB;IAEhC,YAA6B,OAAO,SAAO,EAAI;IAE/C,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAOzB;IAED,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAEnB;IAED,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAQ1B;IAED,KAAK,IAAI,IAAI,CAEZ;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAEnB;IAED,IAAI,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAE1B;IAED,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAE5B;CACF"}
1
+ {"version":3,"file":"lru-cache.d.ts","sourceRoot":"","sources":["../../src/common/lru-cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAGxD;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC9B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IAWtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAV1B,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAU;IAC/C,OAAO,CAAC,UAAU,CAAmB;IAErC;;;OAGG;IACH,YACmB,OAAO,SAAO,EAC/B,OAAO,GAAE,eAAe,CAAC,CAAC,CAAM,EAIjC;IAED,gGAAgG;IAChG,OAAO,CAAC,IAAI;IAOZ,OAAO,KAAK,OAAO,GAGlB;IAED,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAQzB;IAED,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAEnB;IAED,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAU1B;IAED,KAAK,IAAI,IAAI,CAEZ;IAED,IAAI,IAAI,IAAI,MAAM,CAGjB;IAED,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAEnB;IAED,IAAI,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAG1B;IAED,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAG5B;CACF"}