@yipe/dice 0.10.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.
- package/README.md +278 -8
- package/dist/builder/ac.d.ts +44 -1
- package/dist/builder/ac.d.ts.map +1 -1
- package/dist/builder/arguments.d.ts +6 -0
- package/dist/builder/arguments.d.ts.map +1 -0
- package/dist/builder/ast.d.ts +36 -7
- package/dist/builder/ast.d.ts.map +1 -1
- package/dist/builder/attack.d.ts +104 -2
- package/dist/builder/attack.d.ts.map +1 -1
- package/dist/builder/dc.d.ts +13 -0
- package/dist/builder/dc.d.ts.map +1 -1
- package/dist/builder/example.d.ts +11 -15
- package/dist/builder/example.d.ts.map +1 -1
- package/dist/builder/expression.d.ts +72 -0
- package/dist/builder/expression.d.ts.map +1 -0
- package/dist/builder/factory.d.ts +2 -3
- package/dist/builder/factory.d.ts.map +1 -1
- package/dist/builder/index.cjs +3844 -1273
- package/dist/builder/index.cjs.map +1 -1
- package/dist/builder/index.js +3836 -1274
- package/dist/builder/index.js.map +1 -1
- package/dist/builder/nodes.d.ts +8 -1
- package/dist/builder/nodes.d.ts.map +1 -1
- package/dist/builder/prob.d.ts +9 -0
- package/dist/builder/prob.d.ts.map +1 -1
- package/dist/builder/roll.d.ts +157 -19
- package/dist/builder/roll.d.ts.map +1 -1
- package/dist/builder/save.d.ts +6 -1
- package/dist/builder/save.d.ts.map +1 -1
- package/dist/builder/types.d.ts +19 -0
- package/dist/builder/types.d.ts.map +1 -1
- package/dist/common/bounce.d.ts +63 -5
- package/dist/common/bounce.d.ts.map +1 -1
- package/dist/common/lru-cache.d.ts +29 -1
- package/dist/common/lru-cache.d.ts.map +1 -1
- package/dist/common/types.d.ts +33 -0
- package/dist/common/types.d.ts.map +1 -1
- package/dist/index.cjs +1288 -388
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1285 -389
- package/dist/index.js.map +1 -1
- package/dist/parser/dice.d.ts +52 -16
- package/dist/parser/dice.d.ts.map +1 -1
- package/dist/parser/parser.d.ts +1 -5
- package/dist/parser/parser.d.ts.map +1 -1
- package/dist/parser/rollType.d.ts +4 -4
- package/dist/parser/scaleDice.d.ts +14 -0
- package/dist/parser/scaleDice.d.ts.map +1 -0
- package/dist/pmf/mixture.d.ts +17 -3
- package/dist/pmf/mixture.d.ts.map +1 -1
- package/dist/pmf/pmf.d.ts +130 -33
- package/dist/pmf/pmf.d.ts.map +1 -1
- package/dist/pmf/query.d.ts +25 -12
- package/dist/pmf/query.d.ts.map +1 -1
- package/dist/turn/effects.d.ts +114 -0
- package/dist/turn/effects.d.ts.map +1 -0
- package/dist/turn/index.d.ts +3 -1
- package/dist/turn/index.d.ts.map +1 -1
- package/dist/turn/plan.d.ts +115 -12
- package/dist/turn/plan.d.ts.map +1 -1
- package/dist/turn/state.d.ts +22 -8
- package/dist/turn/state.d.ts.map +1 -1
- package/dist/turn/turn.d.ts +162 -26
- package/dist/turn/turn.d.ts.map +1 -1
- package/dist/turn/types.d.ts +180 -21
- package/dist/turn/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/turn/types.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import type { DiceMatchInfo, HasDiceMatchInfo } from "../common/types.js";
|
|
1
2
|
import type { PMF } from "../pmf/pmf.js";
|
|
3
|
+
export type { DiceMatchInfo, HasDiceMatchInfo };
|
|
2
4
|
/**
|
|
3
5
|
* Triggers that read the outcomes of source attacks, as opposed to `not-fired`,
|
|
4
|
-
* which reads another rider. Includes `any-miss`, so this is not "hit triggers".
|
|
6
|
+
* which reads another rider. Includes `any-miss`/`first-miss`, so this is not "hit triggers".
|
|
5
7
|
*/
|
|
6
|
-
export type AttackTriggerOn = "first-hit" | "any-crit" | "any-miss" | "every-hit";
|
|
8
|
+
export type AttackTriggerOn = "first-hit" | "any-crit" | "any-miss" | "first-miss" | "every-hit";
|
|
7
9
|
/**
|
|
8
10
|
* When a rider fires. JSON-safe, so a consumer can persist this verbatim and hand
|
|
9
11
|
* it straight back in a {@link TurnSpec}.
|
|
@@ -11,14 +13,42 @@ export type AttackTriggerOn = "first-hit" | "any-crit" | "any-miss" | "every-hit
|
|
|
11
13
|
* - `first-hit` — the first source that lands. Fires in that source's mode, so a
|
|
12
14
|
* crit on the *first* landing attack doubles the rider's dice (Sneak Attack).
|
|
13
15
|
* - `any-crit` — at least one source crit. Always fires in crit mode (Divine Smite).
|
|
14
|
-
* - `any-miss` — at least one source missed.
|
|
16
|
+
* - `any-miss` — at least one source missed. Its step runs after every declared attack,
|
|
17
|
+
* which is exact only when the reroll is identically distributed to every attack after
|
|
18
|
+
* the one it replaces. An attack-shaped `any-miss` rider that reads a granted modifier
|
|
19
|
+
* or applies a condition's grants is refused (`unsupported-trigger`): at the end of the
|
|
20
|
+
* turn it would see the wrong grants. Use `first-miss` for such rerolls.
|
|
21
|
+
* - `first-miss` — the FIRST source in `of` that missed. Its step runs immediately after
|
|
22
|
+
* that attack (one slot per watched source, sharing one fire bit), so a reroll lands in
|
|
23
|
+
* turn order and anything that reads order — a `first-hit` rider's crit mode, or a
|
|
24
|
+
* granted modifier — sees it where it happened. The exact model of "when you miss, you
|
|
25
|
+
* may reroll" (Unerring Accuracy, Lucky).
|
|
15
26
|
* - `every-hit` — once per landing source, in that hit's mode (Hunter's Mark, Hex, Rage).
|
|
27
|
+
* - `dice-match` — at least one named source's own damage dice showed a duplicate
|
|
28
|
+
* value on hit or crit (Chromatic Orb's bounce). `of` is REQUIRED — unlike the
|
|
29
|
+
* other attack triggers, "every declared attack" has no coherent single meaning
|
|
30
|
+
* for "the dice matched", so there is no default. Each named source must expose
|
|
31
|
+
* a {@link HasDiceMatchInfo} descriptor (an `AttackBuilder`-shaped source does);
|
|
32
|
+
* naming one that doesn't (a bare `PMF`, a `keep`/`bestOf` pool, a string-parsed
|
|
33
|
+
* expression) is a `TurnSpecError`, not a silent "never matches". A damage rider
|
|
34
|
+
* fires in crit mode, its dice doubled, when a crit's dice matched (with several
|
|
35
|
+
* sources, when any matching landing was a crit); otherwise in hit mode.
|
|
16
36
|
* - `not-fired` — the named rider did **not** fire ("flurry of blows if I didn't smite").
|
|
37
|
+
* It may also name a substitute: it then fires when the substitute was never spent.
|
|
17
38
|
*
|
|
18
|
-
* For the attack triggers `of` is a list of attack ids
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
39
|
+
* For the attack triggers besides `dice-match`, `of` is a list of attack ids,
|
|
40
|
+
* attack-shaped rider ids, or declaration tags (see {@link Attack}); a tag expands to
|
|
41
|
+
* every attack carrying it. A rider whose damage is a list of several attacks is not
|
|
42
|
+
* attack-shaped: naming it is `not-an-attack`, and it never joins a default `of`.
|
|
43
|
+
*
|
|
44
|
+
* `of` defaults to every declared attack plus every attack-shaped `any-miss` /
|
|
45
|
+
* `first-miss` rider before it — a reroll continues the attacks it watches. `Turn`'s
|
|
46
|
+
* chaining methods snapshot that at the call that adds the rider (the attacks and
|
|
47
|
+
* rerolls declared so far); a {@link TurnSpec} resolves it when the plan is built,
|
|
48
|
+
* giving a rider the rerolls listed before it in `riders` and a substitute or
|
|
49
|
+
* condition every reroll. Both spellings of one turn therefore watch the same
|
|
50
|
+
* sources. For `not-fired` it is the single required id of the rider being negated —
|
|
51
|
+
* negating a set of riders has no unambiguous meaning, so the type does not offer it.
|
|
22
52
|
*/
|
|
23
53
|
export type Trigger = {
|
|
24
54
|
on: AttackTriggerOn;
|
|
@@ -26,15 +56,21 @@ export type Trigger = {
|
|
|
26
56
|
} | {
|
|
27
57
|
on: "not-fired";
|
|
28
58
|
of: string;
|
|
59
|
+
} | {
|
|
60
|
+
on: "dice-match";
|
|
61
|
+
of: readonly string[];
|
|
29
62
|
};
|
|
30
63
|
/** Anything that can produce a PMF: `RollBuilder`, `AttackBuilder`, `SaveBuilder`, or a `PMF`. */
|
|
31
64
|
export interface ToPMF {
|
|
32
65
|
toPMF(eps?: number): PMF;
|
|
33
66
|
}
|
|
34
67
|
/**
|
|
35
|
-
* Rider or attack damage.
|
|
36
|
-
*
|
|
37
|
-
* `
|
|
68
|
+
* Rider or attack damage. Raw strings are not accepted; wrap one in `d("…")`. On a
|
|
69
|
+
* crit, a rider's dice double and its flats do not: a builder through
|
|
70
|
+
* `doubleDice()`, a `d("…")` string by rewriting its dice terms (`d("2d6+5")` crits
|
|
71
|
+
* as `4d6+5`), a pool inside, then pooled. A bare `PMF` is a fixed distribution with
|
|
72
|
+
* no dice to double, so it is added as-is on a crit. A `d("…")` attack string crits on
|
|
73
|
+
* its own roll: with no crit clause, at its natural 20, with its hit dice doubled.
|
|
38
74
|
*/
|
|
39
75
|
export type Damage = PMF | ToPMF;
|
|
40
76
|
/**
|
|
@@ -44,15 +80,29 @@ export type Damage = PMF | ToPMF;
|
|
|
44
80
|
* `not-an-attack` {@link TurnSpecError} at build time, not a compile error.
|
|
45
81
|
*/
|
|
46
82
|
export type Source = Damage;
|
|
47
|
-
/**
|
|
83
|
+
/**
|
|
84
|
+
* One payload, or several to convolve: Flurry of Blows is `[flurry, flurry]`. A list of
|
|
85
|
+
* several attacks deals their exact summed damage, but it is one payload, not attacks
|
|
86
|
+
* that each land: nothing can watch it in `of`, and it never joins a default `of`. To
|
|
87
|
+
* watch each strike, declare each as its own rider.
|
|
88
|
+
*/
|
|
48
89
|
export type RiderDamage = Damage | readonly Damage[];
|
|
49
90
|
/** Everything about a rider except what it does and when — see `Turn.onFirstHit`. */
|
|
50
91
|
export interface RiderOptions {
|
|
51
92
|
/** Required only if another rider names this one in `of`. */
|
|
52
93
|
id?: string;
|
|
53
|
-
/**
|
|
94
|
+
/**
|
|
95
|
+
* Which attacks to watch: attack ids, attack-shaped rider ids, or declaration tags.
|
|
96
|
+
* Defaults to the attacks declared so far, plus any attack-shaped `any-miss` /
|
|
97
|
+
* `first-miss` rider declared so far (see {@link Trigger}).
|
|
98
|
+
*/
|
|
54
99
|
of?: readonly string[];
|
|
55
|
-
/**
|
|
100
|
+
/**
|
|
101
|
+
* Defaults to `damage` with its dice doubled (builders and `d("…")` strings that can double);
|
|
102
|
+
* an attack or save builder or string, or a bare `PMF` part, is added as-is. A rider that
|
|
103
|
+
* rolls its own attack — one attack, or a list of several — crits on its own roll, so
|
|
104
|
+
* giving it one is an `unused-crit-damage` error.
|
|
105
|
+
*/
|
|
56
106
|
critDamage?: RiderDamage;
|
|
57
107
|
}
|
|
58
108
|
export type Rider = Trigger & {
|
|
@@ -60,6 +110,16 @@ export type Rider = Trigger & {
|
|
|
60
110
|
damage: RiderDamage;
|
|
61
111
|
critDamage?: RiderDamage;
|
|
62
112
|
};
|
|
113
|
+
/** How an attack is declared: `id` names it for `of`; `tag` groups it with others. */
|
|
114
|
+
export interface AttackOptions {
|
|
115
|
+
id?: string;
|
|
116
|
+
/**
|
|
117
|
+
* A name several attacks can share. An `of` entry that is not an id expands to
|
|
118
|
+
* every attack carrying that tag, so a reordered turn cannot silently retarget
|
|
119
|
+
* the way a positional `attack 2` can. A tag matching nothing is `unknown-id`.
|
|
120
|
+
*/
|
|
121
|
+
tag?: string;
|
|
122
|
+
}
|
|
63
123
|
/**
|
|
64
124
|
* A bare source gets the id `attack 1`, `attack 2`, … in declaration order.
|
|
65
125
|
*
|
|
@@ -67,15 +127,104 @@ export type Rider = Trigger & {
|
|
|
67
127
|
* itself: an attack's value is a builder or PMF that this module does not own,
|
|
68
128
|
* so there is nowhere to hang a field.
|
|
69
129
|
*/
|
|
70
|
-
export type Attack = Source | {
|
|
71
|
-
id: string;
|
|
130
|
+
export type Attack = Source | (AttackOptions & {
|
|
72
131
|
source: Source;
|
|
132
|
+
});
|
|
133
|
+
/**
|
|
134
|
+
* When a substitute may be spent: on the first landing it sees (`always`, the
|
|
135
|
+
* default), only when the base payload total (dice plus the payload's own flat
|
|
136
|
+
* bonus, excluding separate-damage channels) is below the threshold for that
|
|
137
|
+
* mode (`below`; a landing spends regardless when no later watched step can
|
|
138
|
+
* still land in that turn state), or by backward induction (`optimal` — not
|
|
139
|
+
* supported in this release).
|
|
140
|
+
*/
|
|
141
|
+
export type SubstitutePolicy = {
|
|
142
|
+
kind: "always";
|
|
143
|
+
} | {
|
|
144
|
+
kind: "below";
|
|
145
|
+
hit: number;
|
|
146
|
+
crit: number;
|
|
147
|
+
} | {
|
|
148
|
+
kind: "optimal";
|
|
73
149
|
};
|
|
150
|
+
/**
|
|
151
|
+
* A once-per-turn payload transform: at the first watched landing the policy
|
|
152
|
+
* accepts, the attack's base payload is replaced by a transform of itself. The
|
|
153
|
+
* JSON-safe form of `Turn.onFirstHit(keepBestDamage())`; callers write the
|
|
154
|
+
* factory, never the string.
|
|
155
|
+
*/
|
|
156
|
+
export interface SubstituteSpec {
|
|
157
|
+
id?: string;
|
|
158
|
+
on: "first-hit";
|
|
159
|
+
/**
|
|
160
|
+
* Omit it: defaults to every declared attack plus every attack-shaped `any-miss` /
|
|
161
|
+
* `first-miss` rider, the same sources the chaining spelling watches (see {@link Trigger}).
|
|
162
|
+
*/
|
|
163
|
+
of?: readonly string[];
|
|
164
|
+
/** Named transform, so a {@link TurnSpec} stays JSON-safe and persistable. */
|
|
165
|
+
substitute: "reroll-keep-higher";
|
|
166
|
+
/** Defaults to `{ kind: "always" }`. */
|
|
167
|
+
policy?: SubstitutePolicy;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* One granted modifier: what it does to the attack rolls that read it, how long it
|
|
171
|
+
* lasts, and which attack rolls read it. JSON-safe — the persisted form of a
|
|
172
|
+
* `Grant` built with `advantage().untilNextAttack()` and friends.
|
|
173
|
+
*
|
|
174
|
+
* - `advantage` / `disadvantage` combine with the reading attack's own roll type by
|
|
175
|
+
* cancellation; a net advantage rolls as many dice as that attacker's
|
|
176
|
+
* `advantageDice` (`ACBuilder.threeDiceAdvantage()`).
|
|
177
|
+
* - `critOnHit` makes every landing attack a crit; a natural 1 still misses.
|
|
178
|
+
* - `until: "next-attack"` is consumed by the next attack roll that reads it, hit or
|
|
179
|
+
* miss; `"end-of-turn"` lasts for the rest of the turn.
|
|
180
|
+
* - `to` lists attack ids, attack-shaped rider ids or tags. Omitted, every later
|
|
181
|
+
* attack roll reads it, attack-shaped riders included (an attack-shaped `any-miss`
|
|
182
|
+
* rider that would read it is refused; see {@link Trigger}).
|
|
183
|
+
*/
|
|
184
|
+
export interface GrantSpec {
|
|
185
|
+
advantage?: true;
|
|
186
|
+
disadvantage?: true;
|
|
187
|
+
critOnHit?: true;
|
|
188
|
+
until: "next-attack" | "end-of-turn";
|
|
189
|
+
to?: readonly string[];
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Grants applied by the outcomes of earlier attacks to later attack rolls: "a hit
|
|
193
|
+
* gives the next attack advantage". The JSON-safe form of `Turn.onEveryHit(grant)`.
|
|
194
|
+
*
|
|
195
|
+
* `on` says which outcome among `of` applies the grants: `every-hit` on each
|
|
196
|
+
* landing, `first-hit` on the first landing only, `any-crit` on each crit,
|
|
197
|
+
* `first-miss` on the first miss, `any-miss` on each miss. Miss damage
|
|
198
|
+
* (`halfOnMiss`, `onMiss`) is a miss, never a landing.
|
|
199
|
+
*
|
|
200
|
+
* `chance` is the probability each application takes (a target's failed save);
|
|
201
|
+
* `grants` apply on that branch and `onSave` on the other one. Each application
|
|
202
|
+
* rolls it afresh, except that an application whose grants are all `end-of-turn`
|
|
203
|
+
* and all already in force is skipped: nothing is rolled and `onSave` does not
|
|
204
|
+
* apply. An application with any `next-attack` grant is always rolled.
|
|
205
|
+
*/
|
|
206
|
+
export interface ConditionSpec {
|
|
207
|
+
id?: string;
|
|
208
|
+
on: AttackTriggerOn;
|
|
209
|
+
/**
|
|
210
|
+
* Omit it: defaults to every declared attack plus every attack-shaped `any-miss` /
|
|
211
|
+
* `first-miss` rider (see {@link Trigger}).
|
|
212
|
+
*/
|
|
213
|
+
of?: readonly string[];
|
|
214
|
+
/** In `[0, 1]`; defaults to 1. */
|
|
215
|
+
chance?: number;
|
|
216
|
+
/** Applied on the fail branch, or with probability `chance`. */
|
|
217
|
+
grants: readonly GrantSpec[];
|
|
218
|
+
/** Applied on the success branch. Requires `chance`. */
|
|
219
|
+
onSave?: readonly GrantSpec[];
|
|
220
|
+
}
|
|
74
221
|
export interface TurnSpec {
|
|
75
222
|
attacks: readonly Attack[];
|
|
76
223
|
riders?: readonly Rider[];
|
|
224
|
+
substitutes?: readonly SubstituteSpec[];
|
|
225
|
+
conditions?: readonly ConditionSpec[];
|
|
77
226
|
}
|
|
78
|
-
export type TurnSpecErrorCode = "unknown-id" | "duplicate-id" | "self-reference" | "cycle" | "not-an-attack" | "unused-crit-damage" | "too-many-groups";
|
|
227
|
+
export type TurnSpecErrorCode = "unknown-id" | "duplicate-id" | "self-reference" | "cycle" | "not-an-attack" | "unused-crit-damage" | "too-many-groups" | "no-dice-descriptor" | "duplicate-substitute" | "attack-after-rider" | "no-rebindable-source" | "unsupported-trigger" | "unsupported-policy" | "too-many-flags";
|
|
79
228
|
/**
|
|
80
229
|
* A malformed turn. `code` is a stable contract: consumer UIs map it to their own
|
|
81
230
|
* states (greyed dropdown option, "trigger missing" row error, …) instead of
|
|
@@ -90,10 +239,20 @@ export declare class TurnSpecError extends Error {
|
|
|
90
239
|
* How many distinct `of` sets a single turn may track.
|
|
91
240
|
*
|
|
92
241
|
* Each group multiplies the state space, so the cap is a cost ceiling rather
|
|
93
|
-
* than a modelling limit. Measured on four attacks with two riders per group
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
242
|
+
* than a modelling limit. Measured on four attacks with two riders per group
|
|
243
|
+
* (every group fed by multiple independent sources — the expensive, dense
|
|
244
|
+
* case): 2.1ms for one group, 3.1 for two, 5.9 for three, 23.5 for four —
|
|
245
|
+
* roughly 4x per group. A `bounce()` chain is the opposite case — each group
|
|
246
|
+
* is fed by exactly ONE step, and the chain is strictly sequential (group N+1
|
|
247
|
+
* only ever reads a nonzero state once group N has already resolved), so its
|
|
248
|
+
* reachable state space grows close to linearly rather than combinatorially;
|
|
249
|
+
* see `dice-match.test.ts`'s latency measurement.
|
|
250
|
+
*
|
|
251
|
+
* 9, not 4: Chromatic Orb's `effectCountScaling: 'spell_level_plus_one'` needs
|
|
252
|
+
* up to `1 + 9 = 10` beams at a 9th-level slot — 9 additional bounces beyond
|
|
253
|
+
* the first. A non-bounce turn tracking 9 independent dense groups would be
|
|
254
|
+
* the pathological case the latency table above warns about; real builds use
|
|
255
|
+
* one or two (the goliath rogue/monk/paladin uses one).
|
|
97
256
|
*/
|
|
98
|
-
export declare const MAX_TRIGGER_GROUPS =
|
|
257
|
+
export declare const MAX_TRIGGER_GROUPS = 9;
|
|
99
258
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/turn/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/turn/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC;;;GAGG;AACH,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,UAAU,GACV,UAAU,GACV,WAAW,CAAC;AAEhB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/turn/types.ts"],"names":[],"mappings":"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"}
|