@yipe/dice 0.8.1 → 0.10.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/README.md +169 -19
- package/dist/builder/ac.d.ts.map +1 -1
- package/dist/builder/ast.d.ts +32 -2
- package/dist/builder/ast.d.ts.map +1 -1
- package/dist/builder/attack.d.ts.map +1 -1
- package/dist/builder/dc.d.ts.map +1 -1
- package/dist/builder/example.d.ts +4 -4
- package/dist/builder/example.d.ts.map +1 -1
- package/dist/builder/index.cjs +889 -90
- package/dist/builder/index.cjs.map +1 -1
- package/dist/builder/index.d.ts +1 -0
- package/dist/builder/index.d.ts.map +1 -1
- package/dist/builder/index.js +886 -91
- package/dist/builder/index.js.map +1 -1
- package/dist/builder/roll.d.ts +5 -1
- package/dist/builder/roll.d.ts.map +1 -1
- package/dist/builder/save.d.ts.map +1 -1
- package/dist/index.cjs +178 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +177 -16
- package/dist/index.js.map +1 -1
- package/dist/parser/dice.d.ts +14 -0
- package/dist/parser/dice.d.ts.map +1 -1
- package/dist/parser/rollType.d.ts +58 -0
- package/dist/parser/rollType.d.ts.map +1 -0
- package/dist/pmf/pmf.d.ts +10 -4
- package/dist/pmf/pmf.d.ts.map +1 -1
- package/dist/pmf/query.d.ts +26 -0
- package/dist/pmf/query.d.ts.map +1 -1
- package/dist/turn/index.d.ts +3 -0
- package/dist/turn/index.d.ts.map +1 -0
- package/dist/turn/plan.d.ts +55 -0
- package/dist/turn/plan.d.ts.map +1 -0
- package/dist/turn/state.d.ts +23 -0
- package/dist/turn/state.d.ts.map +1 -0
- package/dist/turn/turn.d.ts +149 -0
- package/dist/turn/turn.d.ts.map +1 -0
- package/dist/turn/types.d.ts +99 -0
- package/dist/turn/types.d.ts.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -121,6 +121,11 @@ src/
|
|
|
121
121
|
├── parser/ # String-based dice expression parser
|
|
122
122
|
│ ├── parser.ts # Main parser implementation
|
|
123
123
|
│ └── dice.ts # Dice class (legacy parser representation)
|
|
124
|
+
├── turn/ # Turns: attacks + conditional damage riders
|
|
125
|
+
│ ├── types.ts # Trigger, Rider, TurnSpec, TurnSpecError
|
|
126
|
+
│ ├── plan.ts # Spec validation and step/group resolution
|
|
127
|
+
│ ├── state.ts # Packed per-group trigger state
|
|
128
|
+
│ └── turn.ts # Turn class - exact joint distribution
|
|
124
129
|
├── pmf/ # Probability Mass Function core
|
|
125
130
|
│ ├── pmf.ts # PMF class - core data structure
|
|
126
131
|
│ ├── query.ts # DiceQuery - analysis interface
|
|
@@ -329,27 +334,172 @@ try {
|
|
|
329
334
|
}
|
|
330
335
|
```
|
|
331
336
|
|
|
332
|
-
|
|
337
|
+
For UI code that parses on every keystroke, `tryParse()` returns an empty PMF
|
|
338
|
+
instead of throwing, and accepts a bare integer — which the grammar rejects, but
|
|
339
|
+
a half-typed damage field is one for a keystroke or two:
|
|
333
340
|
|
|
334
|
-
|
|
341
|
+
```ts
|
|
342
|
+
import { tryParse } from "@yipe/dice";
|
|
343
|
+
|
|
344
|
+
tryParse("1d6 + 2").mean(); // 5.5
|
|
345
|
+
tryParse("-3").mean(); // -3 — signed integers, which the grammar rejects
|
|
346
|
+
tryParse("0x10").mass(); // 0 — decimal only
|
|
347
|
+
tryParse("1d").mass(); // 0 — empty PMF
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
The failure value has **mass 0**, not a distribution, and convolving it collapses
|
|
351
|
+
the whole result to mass 0 — check `mass()` or skip empties when combining
|
|
352
|
+
several expressions. Where a bad expression should surface rather than be
|
|
353
|
+
absorbed, use `parse()` and handle `DiceParseError`.
|
|
354
|
+
|
|
355
|
+
### Roll Types
|
|
356
|
+
|
|
357
|
+
`withRollType()` rewrites an expression's attack roll, leaving the damage, crit
|
|
358
|
+
and miss clauses alone — the usual way to chart one attack across advantage
|
|
359
|
+
states:
|
|
335
360
|
|
|
336
361
|
```ts
|
|
337
|
-
import {
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
362
|
+
import { withRollType } from "@yipe/dice";
|
|
363
|
+
|
|
364
|
+
const attack = "(d20 + 8 AC 16) * (1d4 + 4) crit (2d4 + 4)";
|
|
365
|
+
|
|
366
|
+
withRollType(attack, "advantage"); // "(d20 > d20 + 8 AC 16) * (1d4 + 4) crit (2d4 + 4)"
|
|
367
|
+
withRollType(attack, "elven accuracy"); // "(d20 > d20 > d20 + 8 AC 16) * ..."
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
Every attack roll is rewritten, so an expression holding several attacks is fully
|
|
371
|
+
converted, nesting and all. Each `d20` is resolved against the nearest enclosing
|
|
372
|
+
check: `AC` is an attack roll, while `DC` is the *target's* saving throw, which
|
|
373
|
+
the attacker's advantage does not affect. Saves therefore come back unchanged, as
|
|
374
|
+
does anything with no check at all, which makes this safe to map over a mixed
|
|
375
|
+
list. A halfling-luck `h` prefix is preserved.
|
|
376
|
+
|
|
377
|
+
### Damage Riders (Sneak Attack, Smite, Hunter's Mark)
|
|
378
|
+
|
|
379
|
+
Most of what makes 5e damage interesting is conditional: Sneak Attack needs *a* dagger to land,
|
|
380
|
+
Divine Smite wants a crit, a flurry of blows only happens if you didn't smite. A **`turn()`** is
|
|
381
|
+
attacks plus riders that fire based on what those attacks did.
|
|
382
|
+
|
|
383
|
+
```ts
|
|
384
|
+
import { turn, d20, d4, d6, roll } from "@yipe/dice/builder";
|
|
385
|
+
|
|
386
|
+
const dagger = d20.plus(8).ac(16).onHit(d4.plus(4));
|
|
387
|
+
|
|
388
|
+
const rogue = turn([dagger, dagger]).onFirstHit(roll(3, d6));
|
|
389
|
+
|
|
390
|
+
rogue.mean(); // 18.6225
|
|
391
|
+
rogue.pmf.pAt(0); // 0.1225 — chance the whole turn whiffs
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
That is the whole API for the common case. A `Turn` resolves the **exact joint distribution**: a
|
|
395
|
+
rider is correlated with the attacks that trigger it, so building one as a separate PMF and
|
|
396
|
+
convolving it in gets the right mean but the wrong shape — the example above would report a whiff
|
|
397
|
+
chance of 0.015 instead of 0.1225.
|
|
398
|
+
|
|
399
|
+
| method | fires | example |
|
|
400
|
+
|---|---|---|
|
|
401
|
+
| `onFirstHit` | once, on the first attack that lands — doubled if it crit | Sneak Attack |
|
|
402
|
+
| `onAnyCrit` | once, if any attack crit | Divine Smite |
|
|
403
|
+
| `onAnyMiss` | once, if any attack missed | Unerring Accuracy, Lucky |
|
|
404
|
+
| `onEveryHit` | once per attack that lands | Hunter's Mark, Hex, Rage |
|
|
405
|
+
| `otherwise` | when the rider before it did *not* | flurry of blows if you didn't smite |
|
|
406
|
+
|
|
407
|
+
#### Extra Attack
|
|
408
|
+
|
|
409
|
+
`attacks(count, source)` mirrors `roll(count, die)`, so the Fighter's four — or eight, with Action
|
|
410
|
+
Surge — stays one line:
|
|
411
|
+
|
|
412
|
+
```ts
|
|
413
|
+
const sword = d20.plus(9).ac(16).onHit(d6.plus(5));
|
|
414
|
+
|
|
415
|
+
turn().attacks(4, sword).onEveryHit(d6).mean(); // 35.0 — hunter's mark on each hit
|
|
416
|
+
turn().attacks(8, sword).onEveryHit(d6).mean(); // 70.0 — action surge
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
#### A rider can be anything that makes damage
|
|
420
|
+
|
|
421
|
+
Riders take the same builders attacks do, so "extra damage" and "an extra attack" are the same call.
|
|
422
|
+
A whole attack, a list of attacks, a flat bonus, or a saving throw all work:
|
|
423
|
+
|
|
424
|
+
```ts
|
|
425
|
+
const dagger = d20.plus(8).ac(16).onHit(d4.plus(4));
|
|
426
|
+
const sword = d20.plus(9).ac(16).onHit(d6.plus(5));
|
|
427
|
+
const greatsword = d20.plus(9).ac(16).onHit(roll(2, d6).plus(5));
|
|
428
|
+
const unarmed = d20.plus(8).ac(16).onHit(d6.plus(4));
|
|
429
|
+
const poison = d20.dc(13).onSaveFailure(roll(3, d6)).saveHalf();
|
|
430
|
+
|
|
431
|
+
turn([greatsword, greatsword]).onAnyCrit(greatsword); // Great Weapon Master's bonus attack
|
|
432
|
+
turn([dagger]).onFirstHit(poison); // hit, then the target saves
|
|
433
|
+
turn([sword, sword]).onEveryHit(flat(2)); // Rage
|
|
434
|
+
turn([dagger, dagger]).onAnyCrit(roll(4, d8)).otherwise([unarmed, unarmed]); // smite, or flurry
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
#### The hard build
|
|
438
|
+
|
|
439
|
+
A goliath rogue/monk/paladin, every trigger at once:
|
|
440
|
+
|
|
441
|
+
```ts
|
|
442
|
+
const goliath = turn([dagger, dagger])
|
|
443
|
+
.onFirstHit(roll(3, d6)) // sneak attack
|
|
444
|
+
.onFirstHit(d10) // fire's burn
|
|
445
|
+
.onAnyCrit(roll(2, d8)) // divine smite
|
|
446
|
+
.otherwise([unarmed, unarmed]) // flurry of blows, if the smite didn't happen
|
|
447
|
+
.onEveryHit(d6); // hunter's mark
|
|
448
|
+
|
|
449
|
+
goliath.mean(); // 39.5903
|
|
450
|
+
goliath.toQuery().damageAttributionChartModel();
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
Two things that would be easy to get wrong are handled for you. Riders sharing a trigger resolve
|
|
454
|
+
**jointly** — sneak attack and fire's burn fire together or not at all, which shows up in the spread
|
|
455
|
+
even though it never moves the mean. And `otherwise()` binds to the rider immediately before it, so
|
|
456
|
+
the smite and the flurry are two branches of one decision and can never both land.
|
|
457
|
+
|
|
458
|
+
#### Asking questions
|
|
459
|
+
|
|
460
|
+
```ts
|
|
461
|
+
const t = turn([dagger, dagger]).onFirstHit(roll(3, d6));
|
|
462
|
+
|
|
463
|
+
t.mean(); // 18.6225
|
|
464
|
+
t.pmf.pAt(0); // 0.1225 — P(whiff)
|
|
465
|
+
t.pmf.stdev(); // 8.8860
|
|
466
|
+
t.toQuery().probTotalAtLeast(20); // 0.5062 — P(20+ damage)
|
|
467
|
+
t.toQuery().percentiles([0.25, 0.5, 0.75]); // [15, 20, 24]
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
#### Ids, errors, and plain data
|
|
471
|
+
|
|
472
|
+
Nothing above needs an `id`: attacks and riders get `attack 1`, `rider 2`, … in declaration order,
|
|
473
|
+
and `otherwise()` finds its own target. Name a rider when you want to ask about it afterwards:
|
|
474
|
+
|
|
475
|
+
```ts
|
|
476
|
+
const paladin = turn([dagger, dagger]).onAnyCrit(roll(2, d8), { id: "smite" });
|
|
477
|
+
|
|
478
|
+
paladin.fireProbability("smite"); // 0.0975
|
|
479
|
+
paladin.attackIds; // ["attack 1", "attack 2"]
|
|
480
|
+
paladin.riderIds; // ["smite"]
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
Every construction path validates immediately and throws a `TurnSpecError` whose `code` —
|
|
484
|
+
`unknown-id`, `cycle`, `not-an-attack`, `duplicate-id`, `self-reference`, `unused-crit-damage`,
|
|
485
|
+
`too-many-groups` — maps
|
|
486
|
+
straight onto a UI field state. A bad `of` fails at the call that introduced it, not later at
|
|
487
|
+
`.mean()`.
|
|
488
|
+
|
|
489
|
+
Each `onX` method takes an optional `{ id, of, critDamage }`, where `of` picks which attacks the
|
|
490
|
+
rider watches and defaults to all of them. All of them are sugar over `rider()`, which takes the
|
|
491
|
+
trigger as plain data — and `Trigger` is JSON-safe, so a UI can persist one and hand it straight
|
|
492
|
+
back:
|
|
493
|
+
|
|
494
|
+
```ts
|
|
495
|
+
import { Turn, d20, d4, d6, roll } from "@yipe/dice/builder";
|
|
496
|
+
|
|
497
|
+
const dagger = d20.plus(8).ac(16).onHit(d4.plus(4));
|
|
351
498
|
|
|
352
|
-
|
|
499
|
+
const fromUI = Turn.from({
|
|
500
|
+
attacks: [{ id: "dagger 1", source: dagger }, { id: "dagger 2", source: dagger }],
|
|
501
|
+
riders: [{ id: "sneak", damage: roll(3, d6), on: "first-hit" }],
|
|
502
|
+
});
|
|
353
503
|
```
|
|
354
504
|
|
|
355
505
|
### Statistics and Charts
|
|
@@ -386,7 +536,7 @@ This repository includes example scripts:
|
|
|
386
536
|
```bash
|
|
387
537
|
yarn example basic
|
|
388
538
|
yarn example stats
|
|
389
|
-
yarn example
|
|
539
|
+
yarn example turn
|
|
390
540
|
yarn example misc
|
|
391
541
|
```
|
|
392
542
|
|
|
@@ -467,7 +617,7 @@ This enables rich statistics like "how much damage comes from crits vs hits".
|
|
|
467
617
|
## 🧱 Roadmap
|
|
468
618
|
|
|
469
619
|
- [ ] Create a **web playground** with live examples
|
|
470
|
-
- [
|
|
620
|
+
- [x] Higher-level `Turn` API for conditional damage riders (0.9.0)
|
|
471
621
|
- [ ] Add more comprehensive 5e rule examples
|
|
472
622
|
- [ ] Performance improvements for DPR-only calculations
|
|
473
623
|
- [ ] Multi-round and sustained vs nova simulations
|
package/dist/builder/ac.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ac.d.ts","sourceRoot":"","sources":["../../src/builder/ac.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;CACvB;AACD,qBAAa,SAAU,SAAQ,WAAW;IACxC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAEpC,YAAY,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY,EAQzE;IAMD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;IAClC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;IAClC,KAAK,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa,CAAC;IACvC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,aAAa,CAAC;IACtD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC;IACnD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC;IACxE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC;IAMrE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAEQ,QAAQ,IAAI,MAAM,GAAG,IAAI,CAGjC;IAGD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAMnC;IAED,WAAW,IAAI,iBAAiB,CAS/B;IAGQ,YAAY,IAAI,MAAM,CAM9B;IAEQ,KAAK,CAAC,GAAG,GAAE,MAAU,GAAG,GAAG,
|
|
1
|
+
{"version":3,"file":"ac.d.ts","sourceRoot":"","sources":["../../src/builder/ac.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;CACvB;AACD,qBAAa,SAAU,SAAQ,WAAW;IACxC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAEpC,YAAY,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY,EAQzE;IAMD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;IAClC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;IAClC,KAAK,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa,CAAC;IACvC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,aAAa,CAAC;IACtD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC;IACnD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC;IACxE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC;IAMrE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAEQ,QAAQ,IAAI,MAAM,GAAG,IAAI,CAGjC;IAGD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAMnC;IAED,WAAW,IAAI,iBAAiB,CAS/B;IAGQ,YAAY,IAAI,MAAM,CAM9B;IAEQ,KAAK,CAAC,GAAG,GAAE,MAAU,GAAG,GAAG,CAsBnC;IAEQ,IAAI,IAAI,SAAS,CAOzB;CACF"}
|
package/dist/builder/ast.d.ts
CHANGED
|
@@ -1,9 +1,39 @@
|
|
|
1
1
|
import { PMF } from "../.js";
|
|
2
|
-
import type { ExpressionNode } from "./nodes.js";
|
|
2
|
+
import type { DieNode, ExpressionNode } from "./nodes.js";
|
|
3
3
|
import type { RollBuilder } from "./roll.js";
|
|
4
|
-
import type { RollConfig } from "./types.js";
|
|
4
|
+
import type { RollConfig, RollType } from "./types.js";
|
|
5
|
+
export declare function dieNodeFromConfig(cfg: RollConfig): DieNode;
|
|
5
6
|
export declare function astFromRollConfigs(configs: readonly RollConfig[]): ExpressionNode | undefined;
|
|
6
7
|
export declare function resolve(node: ExpressionNode, eps?: number): PMF;
|
|
7
8
|
export declare function pmfFromRollBuilder(rb: RollBuilder, eps?: number): PMF;
|
|
9
|
+
/**
|
|
10
|
+
* Resolve a d20-shaped die (honoring reroll/minimum/explode via {@link resolveSingleDie}) then
|
|
11
|
+
* lift it into advantage/disadvantage/elven accuracy. Each of the 2 or 3 rolls compared is an
|
|
12
|
+
* independent draw from that SAME resolved marginal — so a Halfling Lucky reroll or a
|
|
13
|
+
* Trance-of-Order floor applies per-die, matching RAW (you reroll/floor each d20 you roll, not
|
|
14
|
+
* just a single "representative" one). This generalizes {@link d20RollPMF}, which only ever
|
|
15
|
+
* modeled the plain-uniform-plus-reroll-1 case; callers that resolve a die with no minimum/
|
|
16
|
+
* explode/deeper reroll get bit-identical results to `d20RollPMF` (verified: the reroll-only
|
|
17
|
+
* formula below reduces to the same closed form).
|
|
18
|
+
*
|
|
19
|
+
* Deliberately ignores any caller-facing output-precision `eps` (matching `d20RollPMF`'s own
|
|
20
|
+
* contract): this builds the FOUNDATIONAL check-die distribution, where every face carries real
|
|
21
|
+
* probability mass (e.g. 1/20 per face on a flat d20) — pruning it against an output-rounding
|
|
22
|
+
* epsilon (some callers request eps as coarse as 0.1 purely to round the FINAL hit/miss/crit
|
|
23
|
+
* mixture) would silently delete real faces instead of real noise. Always resolves at the
|
|
24
|
+
* library's near-zero {@link defaultEps} internally; only the mixture built on top of this
|
|
25
|
+
* result should be pruned against the caller's requested eps.
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveD20Roll(die: DieNode, rollType: RollType | undefined): PMF;
|
|
28
|
+
/**
|
|
29
|
+
* Resolve a check builder's root die (the to-hit/save d20, or whatever die it wraps), honoring
|
|
30
|
+
* that die's reroll/minimum/explode, then lift by its `rollType`. The single entry point every
|
|
31
|
+
* attack/save check builder ({@link ACBuilder}, {@link AttackBuilder}, {@link AlwaysHitBuilder},
|
|
32
|
+
* {@link AlwaysCritBuilder}, `DCBuilder`, save `resolveProbabilities`) should use instead of
|
|
33
|
+
* reaching for `d20RollPMF(rollType, baseReroll > 0)` directly — that 2-argument summary silently
|
|
34
|
+
* drops `minimum`/`explode` on the root config.
|
|
35
|
+
*/
|
|
36
|
+
export declare function resolveRootD20(check: RollBuilder): PMF;
|
|
37
|
+
export declare function resolveSingleDie(die: DieNode, eps?: number): PMF;
|
|
8
38
|
export declare function getASTSignature(node: ExpressionNode): string;
|
|
9
39
|
//# sourceMappingURL=ast.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/builder/ast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,GAAG,EAAE,MAAM,KAAK,CAAC;AAGpC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/builder/ast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,GAAG,EAAE,MAAM,KAAK,CAAC;AAGpC,OAAO,KAAK,EAIV,OAAO,EACP,cAAc,EAIf,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOpD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAW1D;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,UAAU,EAAE,GAC7B,cAAc,GAAG,SAAS,CAyH5B;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,GAAE,MAAmB,GAAG,GAAG,CAyF3E;AAED,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,WAAW,EACf,GAAG,GAAE,MAAmB,GACvB,GAAG,CAGL;AAID;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,GAAG,CA8BhF;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAOtD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,GAAE,MAAmB,GAAG,GAAG,CAsE5E;AA6PD,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAsD5D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attack.d.ts","sourceRoot":"","sources":["../../src/builder/attack.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"attack.d.ts","sourceRoot":"","sources":["../../src/builder/attack.ts"],"names":[],"mappings":"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"}
|
package/dist/builder/dc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dc.d.ts","sourceRoot":"","sources":["../../src/builder/dc.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"dc.d.ts","sourceRoot":"","sources":["../../src/builder/dc.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;CACZ;AAQD,uDAAuD;AACvD,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED,qBAAa,SAAU,SAAQ,WAAW;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IAExC,YAAY,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,EAGzD;IAEQ,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAOrC;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAEQ,GAAG,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,CAGhD;IAEQ,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAG1C;IAED,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;IACxC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;IACxC,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,CAAC;IAC7C,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,WAAW,CAAC;IAC5D,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;IACzD,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;IAC9E,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;IAMlE,iBAAiB,IAAI,KAAK,CAIlC;IAGQ,YAAY,IAAI,MAAM,CAK9B;IAED;;;;OAIG;IACM,QAAQ,IAAI,MAAM,GAAG,IAAI,CAGjC;IAEQ,KAAK,CAAC,GAAG,GAAE,MAAU,GAAG,GAAG,CAkCnC;CACF"}
|
|
@@ -73,16 +73,16 @@ export declare const halflingAdv: RollBuilder;
|
|
|
73
73
|
export declare const halflingAdvExprExpected = "hd20 > hd20";
|
|
74
74
|
/** Reroll 1s and 2s on 2d6. */
|
|
75
75
|
export declare const twoD6Reroll12: RollBuilder;
|
|
76
|
-
export declare const twoD6Reroll12ExprExpected = "2(d6 reroll
|
|
76
|
+
export declare const twoD6Reroll12ExprExpected = "2(d6 reroll d2)";
|
|
77
77
|
/** Minimum 2 on a d6. */
|
|
78
78
|
export declare const min2OnD6: RollBuilder;
|
|
79
79
|
export declare const min2OnD6ExprExpected = "2>d6";
|
|
80
80
|
/** Keep highest 3 of 4d6. */
|
|
81
81
|
export declare const kh3Of4d6: RollBuilder;
|
|
82
|
-
export declare const kh3Of4d6ExprExpected = "4kh3(
|
|
82
|
+
export declare const kh3Of4d6ExprExpected = "4kh3(1d6)";
|
|
83
83
|
/** Keep lowest 2 of 4d8. */
|
|
84
84
|
export declare const kl2Of4d8: RollBuilder;
|
|
85
|
-
export declare const kl2Of4d8ExprExpected = "4kl2(
|
|
85
|
+
export declare const kl2Of4d8ExprExpected = "4kl2(1d8)";
|
|
86
86
|
/** Advantage on d20. */
|
|
87
87
|
export declare const advD20: RollBuilder;
|
|
88
88
|
export declare const advD20ExprExpected = "d20 > d20";
|
|
@@ -105,7 +105,7 @@ export declare const doubledD8ExprExpected = "2d8 + 5";
|
|
|
105
105
|
* Roll a set of dice and take the highest N dice rolls.
|
|
106
106
|
*/
|
|
107
107
|
export declare const bestOfExample: RollBuilder;
|
|
108
|
-
export declare const bestOfExampleExprExpected = "
|
|
108
|
+
export declare const bestOfExampleExprExpected = "4kh3(1d6)";
|
|
109
109
|
/** Double a d6 roll, resulting in 2d6. */
|
|
110
110
|
export declare const doubleD6: RollBuilder;
|
|
111
111
|
export declare const doubleD6ExprExpected = "2d6";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../../src/builder/example.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,CAAC;AACd,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,MAAM,CAAC;AACd,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAW1C,eAAO,MAAM,UAAU,kCAAkC,CAAC;AAC1D,eAAO,MAAM,sBAAsB,uCAAuC,CAAC;AAG3E,eAAO,MAAM,kBAAkB,kCAAgD,CAAC;AAChF,eAAO,MAAM,8BAA8B,uCACL,CAAC;AAGvC,eAAO,MAAM,yBAAyB,kCAI1B,CAAC;AACb,eAAO,MAAM,qCAAqC,gDACH,CAAC;AAGhD,eAAO,MAAM,eAAe,aAAa,CAAC;AAC1C,eAAO,MAAM,2BAA2B,YAAY,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,aAAsB,CAAC;AACjD,eAAO,MAAM,yBAAyB,YAAY,CAAC;AAEnD,2BAA2B;AAC3B,eAAO,MAAM,yBAAyB,aAAsB,CAAC;AAC7D,eAAO,MAAM,qCAAqC,YAAY,CAAC;AAE/D,uCAAuC;AACvC,eAAO,MAAM,eAAe,aAAuB,CAAC;AACpD,eAAO,MAAM,2BAA2B,YAAY,CAAC;AAErD,0DAA0D;AAC1D,eAAO,MAAM,kBAAkB,aAAgB,CAAC;AAChD,eAAO,MAAM,8BAA8B,YAAY,CAAC;AAExD,0DAA0D;AAC1D,eAAO,MAAM,oBAAoB,aAAiB,CAAC;AACnD,eAAO,MAAM,gCAAgC,YAAY,CAAC;AAE1D,yCAAyC;AACzC,eAAO,MAAM,WAAW,aAAa,CAAC;AACtC,eAAO,MAAM,uBAAuB,YAAY,CAAC;AAEjD;;;KAGK;AACL,eAAO,MAAM,QAAQ,aAAU,CAAC;AAChC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,yBAAyB;AACzB,eAAO,MAAM,qBAAqB,aAAe,CAAC;AAClD,eAAO,MAAM,iCAAiC,SAAS,CAAC;AAExD,kCAAkC;AAClC,eAAO,MAAM,eAAe,aAAgB,CAAC;AAC7C,eAAO,MAAM,2BAA2B,SAAS,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,gBAAgB,aAAgB,CAAC;AAC9C,eAAO,MAAM,4BAA4B,cAAc,CAAC;AAExD,wBAAwB;AACxB,eAAO,MAAM,SAAS,aAAM,CAAC;AAC7B,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAM3C,qBAAqB;AACrB,eAAO,MAAM,cAAc,aAA4C,CAAC;AACxE,eAAO,MAAM,0BAA0B,mCAAmC,CAAC;AAE3E,0BAA0B;AAC1B,eAAO,MAAM,mBAAmB,aAInB,CAAC;AACd,eAAO,MAAM,+BAA+B,oCACT,CAAC;AAEpC,eAAO,MAAM,uBAAuB,aAAqB,CAAC;AAC1D,eAAO,MAAM,mCAAmC,YAAY,CAAC;AAG7D,eAAO,MAAM,iBAAiB,aAAkC,CAAC;AACjE,eAAO,MAAM,6BAA6B,kBAAkB,CAAC;AAM7D,qDAAqD;AACrD,eAAO,MAAM,oBAAoB,aAAO,CAAC;AACzC,eAAO,MAAM,gCAAgC,SAAS,CAAC;AAEvD,4CAA4C;AAC5C,eAAO,MAAM,WAAW,aAAgB,CAAC;AACzC,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAE9C,mCAAmC;AACnC,eAAO,MAAM,WAAW,aAAgC,CAAC;AACzD,eAAO,MAAM,uBAAuB,gBAAgB,CAAC;AAErD,+BAA+B;AAC/B,eAAO,MAAM,aAAa,aAAwB,CAAC;AACnD,eAAO,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../../src/builder/example.ts"],"names":[],"mappings":"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"}
|