@yipe/dice 0.9.0 → 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/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 +221 -84
- package/dist/builder/index.cjs.map +1 -1
- package/dist/builder/index.js +221 -84
- 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 +64 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +64 -15
- 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/pmf/pmf.d.ts +10 -4
- package/dist/pmf/pmf.d.ts.map +1 -1
- package/package.json +2 -2
- package/CHANGELOG.md +0 -456
package/dist/builder/roll.d.ts
CHANGED
|
@@ -37,7 +37,8 @@ export declare class RollBuilder {
|
|
|
37
37
|
reroll(value: number): RollBuilder;
|
|
38
38
|
/** Set finite explode count for max-face explosions (Infinity allowed). */
|
|
39
39
|
explode(count?: number | undefined): RollBuilder;
|
|
40
|
-
/** Apply per-die minimum value (
|
|
40
|
+
/** Apply per-die minimum value (floors each die roll at `val`, e.g. `minimum(3)` treats a 1 or
|
|
41
|
+
* 2 as a 3 -- the 2024 Great Weapon Fighting style). */
|
|
41
42
|
minimum(val: number | undefined): RollBuilder;
|
|
42
43
|
bestOf(count: number | undefined): RollBuilder;
|
|
43
44
|
keepHighest(total: number, count: number): RollBuilder;
|
|
@@ -97,6 +98,7 @@ export declare class HalfRollBuilder extends RollBuilder {
|
|
|
97
98
|
toExpression(): string;
|
|
98
99
|
toAST(): ExpressionNode;
|
|
99
100
|
toPMF(eps?: number): PMF;
|
|
101
|
+
scaleDice(scale: number): RollBuilder;
|
|
100
102
|
copy(): HalfRollBuilder;
|
|
101
103
|
}
|
|
102
104
|
/**
|
|
@@ -117,6 +119,7 @@ export declare class ScaleRollBuilder extends RollBuilder {
|
|
|
117
119
|
toExpression(): string;
|
|
118
120
|
toAST(): ExpressionNode;
|
|
119
121
|
toPMF(eps?: number): PMF;
|
|
122
|
+
scaleDice(scale: number): RollBuilder;
|
|
120
123
|
copy(): ScaleRollBuilder;
|
|
121
124
|
}
|
|
122
125
|
export declare class MaxOfRollBuilder extends RollBuilder {
|
|
@@ -132,6 +135,7 @@ export declare class MaxOfRollBuilder extends RollBuilder {
|
|
|
132
135
|
toExpression(): string;
|
|
133
136
|
toAST(): ExpressionNode;
|
|
134
137
|
toPMF(eps?: number): PMF;
|
|
138
|
+
scaleDice(scale: number): RollBuilder;
|
|
135
139
|
copy(): MaxOfRollBuilder;
|
|
136
140
|
}
|
|
137
141
|
export declare class AlwaysHitBuilder extends RollBuilder {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roll.d.ts","sourceRoot":"","sources":["../../src/builder/roll.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAGtC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"roll.d.ts","sourceRoot":"","sources":["../../src/builder/roll.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1568,7 +1568,7 @@ var _PMF = class _PMF {
|
|
|
1568
1568
|
const id = this.identifier;
|
|
1569
1569
|
let key = `${id}`;
|
|
1570
1570
|
for (let i = 1; i < n; i++) key += `+${id}`;
|
|
1571
|
-
return `${key}@${eps}`;
|
|
1571
|
+
return `${key}@${eps}|${this.fingerprint()}`;
|
|
1572
1572
|
}
|
|
1573
1573
|
/**
|
|
1574
1574
|
* Efficiently computes this PMF convolved with itself `n` times.
|
|
@@ -1919,16 +1919,27 @@ var _PMF = class _PMF {
|
|
|
1919
1919
|
return `v4:${raw ? "RAW" : "N"}:${id1}+${id2}@${eps}|${p1.fingerprint()}|${p2.fingerprint()}`;
|
|
1920
1920
|
}
|
|
1921
1921
|
/**
|
|
1922
|
-
* A
|
|
1923
|
-
* cache keys change
|
|
1924
|
-
*
|
|
1925
|
-
*
|
|
1922
|
+
* A content fingerprint of every bin (probability, per-label `count`, per-label `attr`) plus
|
|
1923
|
+
* the `normalized` flag, so convolution/power cache keys change whenever the underlying
|
|
1924
|
+
* numbers do. Mass/bin-count/face-sum alone are not content-unique: `mapDamage` variants can
|
|
1925
|
+
* keep the same identifier, support, mass, and face sum while differing in per-bin
|
|
1926
|
+
* probabilities or in the `count`/`attr` channels `convolve()`/`power()` actually propagate --
|
|
1927
|
+
* that previously let `power()` return one PMF's cached result for a different PMF. Memoized
|
|
1928
|
+
* because a PMF is immutable once constructed -- this avoids re-deriving the key on every
|
|
1929
|
+
* convolve()/power() call (including cache hits). Bin order is sorted by damage value (and
|
|
1930
|
+
* label keys sorted within each bin) so two equal-content PMFs built via different code paths
|
|
1931
|
+
* fingerprint identically regardless of Map insertion order.
|
|
1926
1932
|
*/
|
|
1927
1933
|
fingerprint() {
|
|
1928
1934
|
if (this._fingerprint === void 0) {
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1935
|
+
const bins = [...this.map.entries()].sort((a, b) => a[0] - b[0]);
|
|
1936
|
+
const parts = [];
|
|
1937
|
+
for (const [damageValue, bin] of bins) {
|
|
1938
|
+
const countStr = Object.keys(bin.count).sort().map((k) => `${k}:${bin.count[k]}`).join(",");
|
|
1939
|
+
const attrStr = bin.attr ? Object.keys(bin.attr).sort().map((k) => `${k}:${bin.attr[k]}`).join(",") : "";
|
|
1940
|
+
parts.push(`${damageValue}:${bin.p}[${countStr}]{${attrStr}}`);
|
|
1941
|
+
}
|
|
1942
|
+
this._fingerprint = `${this.normalized ? 1 : 0}|${parts.join(";")}`;
|
|
1932
1943
|
}
|
|
1933
1944
|
return this._fingerprint;
|
|
1934
1945
|
}
|
|
@@ -2160,11 +2171,13 @@ var _PMF = class _PMF {
|
|
|
2160
2171
|
/** Quantile / inverse CDF for p in [0,1]. Returns smallest x with CDF ≥ p. */
|
|
2161
2172
|
quantile(p) {
|
|
2162
2173
|
if (this.map.size === 0) return 0;
|
|
2174
|
+
const totalMass = this.mass();
|
|
2175
|
+
if (totalMass <= 0) return 0;
|
|
2163
2176
|
const s = this.support().sort((a, b) => a - b);
|
|
2164
2177
|
let acc = 0;
|
|
2165
2178
|
for (const x of s) {
|
|
2166
2179
|
acc += this.pAt(x);
|
|
2167
|
-
if (acc >= p) return x;
|
|
2180
|
+
if (acc / totalMass >= p) return x;
|
|
2168
2181
|
}
|
|
2169
2182
|
return s[s.length - 1];
|
|
2170
2183
|
}
|
|
@@ -3025,6 +3038,12 @@ function combineDiceWithNormalization(dice, normValue, outcomeType, currentNorm,
|
|
|
3025
3038
|
finalResult = finalResult.combine(dice);
|
|
3026
3039
|
return { newNorm: currentNorm * normValue, updatedResult: finalResult };
|
|
3027
3040
|
}
|
|
3041
|
+
function subtractCounts(a, b) {
|
|
3042
|
+
const result = new Dice();
|
|
3043
|
+
for (const [key, value] of a.getFaceEntries()) result.increment(key, value);
|
|
3044
|
+
for (const [key, value] of b.getFaceEntries()) result.increment(key, -value);
|
|
3045
|
+
return result;
|
|
3046
|
+
}
|
|
3028
3047
|
function parseExpression(arr, n) {
|
|
3029
3048
|
const result = (() => {
|
|
3030
3049
|
const res = parseArgument(arr, n);
|
|
@@ -3032,8 +3051,29 @@ function parseExpression(arr, n) {
|
|
|
3032
3051
|
})();
|
|
3033
3052
|
let op = parseOperation(arr);
|
|
3034
3053
|
let finalResult = result;
|
|
3054
|
+
let baseDieMeta = result.privateData?.checkDie && !result.privateData.checkDie.rerollOne ? result.privateData.checkDie : void 0;
|
|
3055
|
+
let bonusOnly = Dice.scalar(0);
|
|
3035
3056
|
while (op != null) {
|
|
3036
3057
|
const arg = !op.unary ? parseArgument(arr, n) : finalResult;
|
|
3058
|
+
let acAlreadyApplied = false;
|
|
3059
|
+
if (baseDieMeta) {
|
|
3060
|
+
if (op === Dice.prototype.addNonZero) {
|
|
3061
|
+
bonusOnly = bonusOnly.add(arg);
|
|
3062
|
+
} else if (op === Dice.prototype.subtract) {
|
|
3063
|
+
bonusOnly = bonusOnly.subtract(arg);
|
|
3064
|
+
} else if (op === Dice.prototype.ac && typeof arg === "number") {
|
|
3065
|
+
const natMaxSlice = bonusOnly.add(baseDieMeta.sides);
|
|
3066
|
+
const restSlice = subtractCounts(finalResult, natMaxSlice);
|
|
3067
|
+
const gatedNatMaxSlice = natMaxSlice.ac(arg);
|
|
3068
|
+
finalResult = restSlice.ac(arg).combine(gatedNatMaxSlice);
|
|
3069
|
+
finalResult.privateData.checkDie = baseDieMeta;
|
|
3070
|
+
finalResult.privateData.natMaxCritSlice = gatedNatMaxSlice;
|
|
3071
|
+
acAlreadyApplied = true;
|
|
3072
|
+
baseDieMeta = void 0;
|
|
3073
|
+
} else {
|
|
3074
|
+
baseDieMeta = void 0;
|
|
3075
|
+
}
|
|
3076
|
+
}
|
|
3037
3077
|
let crit;
|
|
3038
3078
|
let critNorm = 1;
|
|
3039
3079
|
if (arr[0] === "x" || arr[0] === "c") {
|
|
@@ -3044,11 +3084,17 @@ function parseExpression(arr, n) {
|
|
|
3044
3084
|
assertToken(arr, "i");
|
|
3045
3085
|
assertToken(arr, "t");
|
|
3046
3086
|
const count = isXcrit ? parseNumber(arr, n) : 1;
|
|
3047
|
-
|
|
3048
|
-
|
|
3049
|
-
|
|
3050
|
-
|
|
3051
|
-
|
|
3087
|
+
const trackedCritSlice = finalResult.privateData?.natMaxCritSlice;
|
|
3088
|
+
if (count === 1 && trackedCritSlice) {
|
|
3089
|
+
crit = trackedCritSlice;
|
|
3090
|
+
finalResult = subtractCounts(finalResult, trackedCritSlice);
|
|
3091
|
+
} else {
|
|
3092
|
+
crit = new Dice();
|
|
3093
|
+
for (let i = 0; i < count; i++) {
|
|
3094
|
+
const max = finalResult.maxFace();
|
|
3095
|
+
crit.setFace(max, finalResult.get(max));
|
|
3096
|
+
finalResult = finalResult.deleteFace(max);
|
|
3097
|
+
}
|
|
3052
3098
|
}
|
|
3053
3099
|
critNorm = crit.total();
|
|
3054
3100
|
crit = op.call(crit, parseBinaryArgument(arg, arr, n));
|
|
@@ -3099,7 +3145,9 @@ function parseExpression(arr, n) {
|
|
|
3099
3145
|
missNorm = miss && missNorm ? miss.total() / missNorm : 1;
|
|
3100
3146
|
}
|
|
3101
3147
|
let norm = finalResult.total();
|
|
3102
|
-
|
|
3148
|
+
if (!acAlreadyApplied) {
|
|
3149
|
+
finalResult = op.call(finalResult, arg);
|
|
3150
|
+
}
|
|
3103
3151
|
norm = norm ? finalResult.total() / norm : 1;
|
|
3104
3152
|
if (crit) {
|
|
3105
3153
|
const result2 = combineDiceWithNormalization(
|
|
@@ -3290,6 +3338,7 @@ function parseDice(s, n) {
|
|
|
3290
3338
|
if (rerollOne) {
|
|
3291
3339
|
result = result.reroll(1);
|
|
3292
3340
|
}
|
|
3341
|
+
result.privateData.checkDie = { sides, rerollOne };
|
|
3293
3342
|
return result;
|
|
3294
3343
|
}
|
|
3295
3344
|
function peek(arr, expected) {
|