@robsonbittencourt/calc 0.11.16 → 0.11.17
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/items.d.ts +3 -3
- package/dist/multi-result.d.ts +7 -0
- package/dist/multi-result.js +99 -7
- package/dist/multi-result.js.map +1 -1
- package/dist/multicalc.d.ts +1 -0
- package/dist/multicalc.js +10 -1
- package/dist/multicalc.js.map +1 -1
- package/dist/test/stamina-multicalc.test.d.ts +1 -0
- package/dist/test/stamina-multicalc.test.js +104 -0
- package/dist/test/stamina-multicalc.test.js.map +1 -0
- package/package.json +1 -1
- package/src/multi-result.ts +145 -7
- package/src/multicalc.ts +14 -0
- package/src/test/stamina-multicalc.test.ts +147 -0
package/dist/items.d.ts
CHANGED
|
@@ -2,9 +2,9 @@ import type { Generation, TypeName, StatID, GenerationNum } from './data/interfa
|
|
|
2
2
|
export declare const SEED_BOOSTED_STAT: {
|
|
3
3
|
[item: string]: StatID;
|
|
4
4
|
};
|
|
5
|
-
export declare function getItemBoostType(item: string | undefined): "Normal" | "
|
|
6
|
-
export declare function getBerryResistType(berry: string | undefined): "Normal" | "
|
|
7
|
-
export declare function getFlingPower(item?: string, gen?: GenerationNum):
|
|
5
|
+
export declare function getItemBoostType(item: string | undefined): "Normal" | "Fire" | "Water" | "Electric" | "Grass" | "Ice" | "Fighting" | "Poison" | "Ground" | "Flying" | "Psychic" | "Bug" | "Rock" | "Ghost" | "Dragon" | "Dark" | "Steel" | "Fairy" | undefined;
|
|
6
|
+
export declare function getBerryResistType(berry: string | undefined): "Normal" | "Fire" | "Water" | "Electric" | "Grass" | "Ice" | "Fighting" | "Poison" | "Ground" | "Flying" | "Psychic" | "Bug" | "Rock" | "Ghost" | "Dragon" | "Dark" | "Steel" | "Fairy" | undefined;
|
|
7
|
+
export declare function getFlingPower(item?: string, gen?: GenerationNum): 0 | 100 | 10 | 20 | 50 | 30 | 80 | 90 | 40 | 60 | 85 | 130 | 110 | 95 | 70;
|
|
8
8
|
export declare function getNaturalGift(gen: Generation, item: string): {
|
|
9
9
|
t: TypeName;
|
|
10
10
|
p: number;
|
package/dist/multi-result.d.ts
CHANGED
|
@@ -36,6 +36,13 @@ export declare class MultiResult {
|
|
|
36
36
|
desc(): string;
|
|
37
37
|
maxDamage(): number;
|
|
38
38
|
damageWithRemainingUntilTurn(turn: number, rollIndex?: number): number;
|
|
39
|
+
private hasStaminaDefender;
|
|
40
|
+
private initialDefBoost;
|
|
41
|
+
private recomputeDamageCache;
|
|
42
|
+
private consumesTypeBerry;
|
|
43
|
+
private recomputeDamageAtBoost;
|
|
44
|
+
private staminaTurnDamages;
|
|
45
|
+
private staminaHitDamages;
|
|
39
46
|
private mergeBulkStats;
|
|
40
47
|
private modifyStat;
|
|
41
48
|
private boostByStat;
|
package/dist/multi-result.js
CHANGED
|
@@ -40,8 +40,12 @@ exports.MultiResult = void 0;
|
|
|
40
40
|
var result_1 = require("./result");
|
|
41
41
|
var desc_1 = require("./desc");
|
|
42
42
|
var move_1 = require("./move");
|
|
43
|
+
var calc_1 = require("./calc");
|
|
44
|
+
var util_1 = require("./mechanics/util");
|
|
45
|
+
var items_1 = require("./items");
|
|
43
46
|
var MultiResult = (function () {
|
|
44
47
|
function MultiResult(defender, results, koChance, eot) {
|
|
48
|
+
this.recomputeDamageCache = new Map();
|
|
45
49
|
this.defender = defender;
|
|
46
50
|
this.results = results;
|
|
47
51
|
this.koChance = koChance;
|
|
@@ -89,11 +93,23 @@ var MultiResult = (function () {
|
|
|
89
93
|
return withoutBerry !== undefined ? sumDamage(withoutBerry) : null;
|
|
90
94
|
});
|
|
91
95
|
var hasTypeBerry = damagesWithoutBerryAtIndex.some(function (d) { return d !== null; });
|
|
96
|
+
var hasStamina = this.hasStaminaDefender();
|
|
97
|
+
var staminaBoost = hasStamina ? this.initialDefBoost() : 0;
|
|
98
|
+
var staminaTypeBerryAvailable = true;
|
|
92
99
|
for (var i = 1; i <= 10; i++) {
|
|
93
100
|
var turnValue = 0;
|
|
94
|
-
var turnDamages =
|
|
95
|
-
|
|
96
|
-
|
|
101
|
+
var turnDamages = void 0;
|
|
102
|
+
if (hasStamina) {
|
|
103
|
+
var turn = this.staminaTurnDamages(staminaBoost, rollIndex, staminaTypeBerryAvailable);
|
|
104
|
+
turnDamages = turn.damages;
|
|
105
|
+
staminaBoost = turn.nextBoost;
|
|
106
|
+
staminaTypeBerryAvailable = turn.typeBerryAvailable;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
turnDamages = i === 1 || !hasTypeBerry
|
|
110
|
+
? damagesAtIndex
|
|
111
|
+
: damagesWithoutBerryAtIndex.map(function (d, idx) { return d !== null && d !== void 0 ? d : damagesAtIndex[idx]; });
|
|
112
|
+
}
|
|
97
113
|
try {
|
|
98
114
|
for (var turnDamages_1 = (e_2 = void 0, __values(turnDamages)), turnDamages_1_1 = turnDamages_1.next(); !turnDamages_1_1.done; turnDamages_1_1 = turnDamages_1.next()) {
|
|
99
115
|
var dmg = turnDamages_1_1.value;
|
|
@@ -163,15 +179,23 @@ var MultiResult = (function () {
|
|
|
163
179
|
}
|
|
164
180
|
var rowsPerTurn = baseDamages.length;
|
|
165
181
|
var toxicCounter = target.status === 'tox' ? target.toxicCounter : 0;
|
|
182
|
+
var hasStamina = this.hasStaminaDefender();
|
|
183
|
+
var allStaminaDamages = hasStamina ? this.staminaHitDamages(9) : [];
|
|
166
184
|
for (var i = 1; i <= 9; i++) {
|
|
167
|
-
var currentDamages = [];
|
|
168
185
|
var currentBerryRecovery = [];
|
|
169
186
|
var currentBerryThreshold = [];
|
|
170
187
|
for (var j = 0; j < i; j++) {
|
|
171
|
-
currentDamages.push.apply(currentDamages, __spreadArray([], __read(baseDamages), false));
|
|
172
188
|
currentBerryRecovery.push.apply(currentBerryRecovery, __spreadArray([], __read(baseBerryRecovery), false));
|
|
173
189
|
currentBerryThreshold.push.apply(currentBerryThreshold, __spreadArray([], __read(baseBerryThreshold), false));
|
|
174
190
|
}
|
|
191
|
+
var currentDamages = hasStamina
|
|
192
|
+
? allStaminaDamages.slice(0, i * rowsPerTurn)
|
|
193
|
+
: [];
|
|
194
|
+
if (!hasStamina) {
|
|
195
|
+
for (var j = 0; j < i; j++) {
|
|
196
|
+
currentDamages.push.apply(currentDamages, __spreadArray([], __read(baseDamages), false));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
175
199
|
var result = (0, desc_1.computeMultiHitKOChance)(currentDamages, target.curHP(), this.eot.damage, target.maxHP(), currentBerryRecovery, currentBerryThreshold, rowsPerTurn, toxicCounter);
|
|
176
200
|
if (result.chance > 0) {
|
|
177
201
|
var hkoText = i === 1 ? 'OHKO' : "".concat(i, "HKO");
|
|
@@ -249,7 +273,11 @@ var MultiResult = (function () {
|
|
|
249
273
|
var defenderNameAndDamageString = defenderDescription.substring(defenderDescription.indexOf(resultOne.defender.name));
|
|
250
274
|
var _b = this.range(), totalMin = _b.min, totalMax = _b.max;
|
|
251
275
|
var _c = this.rangePercentage(), minPercent = _c.min, maxPercent = _c.max;
|
|
252
|
-
var
|
|
276
|
+
var staminaText = this.hasStaminaDefender()
|
|
277
|
+
? ' (Stamina considered)'
|
|
278
|
+
: '';
|
|
279
|
+
var defenderNameAndDamageWithNote = defenderNameAndDamageString.replace("".concat(resultOne.defender.name, ":"), "".concat(resultOne.defender.name).concat(staminaText, ":"));
|
|
280
|
+
var defenderNameAndDamage = this.updateDefenderDamageText(defenderNameAndDamageWithNote, totalMin, totalMax, minPercent, maxPercent);
|
|
253
281
|
var koChanceText = this.getHKO();
|
|
254
282
|
if (koChanceText) {
|
|
255
283
|
var baseText = defenderNameAndDamage.includes(' -- ')
|
|
@@ -259,7 +287,7 @@ var MultiResult = (function () {
|
|
|
259
287
|
" vs. ".concat(defenderBulk, " ").concat(tera).concat(baseText, " -- ").concat(koChanceText));
|
|
260
288
|
}
|
|
261
289
|
return ("".concat(attackerDescription, " AND ").concat(secondAttackerDescritption) +
|
|
262
|
-
" vs. ".concat(defenderBulk, " ").concat(tera).concat(defenderNameAndDamage));
|
|
290
|
+
" vs. ".concat(defenderBulk, " ").concat(tera).concat(defenderNameAndDamage).concat(staminaText));
|
|
263
291
|
}
|
|
264
292
|
catch (e) {
|
|
265
293
|
return ("".concat(resultOne.attacker.name, " ").concat(resultOne.move.name) +
|
|
@@ -276,6 +304,70 @@ var MultiResult = (function () {
|
|
|
276
304
|
var remainingHp = this.afterTurn(rollIndex).remainingHpUntilTurn(turn);
|
|
277
305
|
return hp - remainingHp;
|
|
278
306
|
};
|
|
307
|
+
MultiResult.prototype.hasStaminaDefender = function () {
|
|
308
|
+
return this.defender.hasAbility('Stamina');
|
|
309
|
+
};
|
|
310
|
+
MultiResult.prototype.initialDefBoost = function () {
|
|
311
|
+
var _a;
|
|
312
|
+
return (_a = this.defender.boosts.def) !== null && _a !== void 0 ? _a : 0;
|
|
313
|
+
};
|
|
314
|
+
MultiResult.prototype.consumesTypeBerry = function (result) {
|
|
315
|
+
var berryType = (0, items_1.getBerryResistType)(this.defender.item);
|
|
316
|
+
return berryType !== undefined && result.move.hasType(berryType);
|
|
317
|
+
};
|
|
318
|
+
MultiResult.prototype.recomputeDamageAtBoost = function (resultIndex, defBoost, typeBerryAvailable) {
|
|
319
|
+
if (typeBerryAvailable === void 0) { typeBerryAvailable = true; }
|
|
320
|
+
var result = this.results[resultIndex];
|
|
321
|
+
var boost = Math.max(-6, Math.min(defBoost, 6));
|
|
322
|
+
var cacheKey = "".concat(resultIndex, ":").concat(boost, ":").concat(typeBerryAvailable ? 1 : 0);
|
|
323
|
+
var cached = this.recomputeDamageCache.get(cacheKey);
|
|
324
|
+
if (cached)
|
|
325
|
+
return cached;
|
|
326
|
+
var defender = this.defender.clone();
|
|
327
|
+
defender.boosts.def = boost;
|
|
328
|
+
defender.stats.def = (0, util_1.getModifiedStat)(defender.rawStats.def, defender.boosts.def, result.gen);
|
|
329
|
+
if (!typeBerryAvailable) {
|
|
330
|
+
defender.item = undefined;
|
|
331
|
+
}
|
|
332
|
+
var recomputed = (0, calc_1.calculate)(result.gen, result.attacker, defender, result.move, result.field);
|
|
333
|
+
var subArrays = (0, result_1.extractDamageSubArrays)(recomputed.damage);
|
|
334
|
+
this.recomputeDamageCache.set(cacheKey, subArrays);
|
|
335
|
+
return subArrays;
|
|
336
|
+
};
|
|
337
|
+
MultiResult.prototype.staminaTurnDamages = function (startBoost, rollIndex, typeBerryAvailable) {
|
|
338
|
+
var damages = [];
|
|
339
|
+
var boost = startBoost;
|
|
340
|
+
var berryAvailable = typeBerryAvailable;
|
|
341
|
+
for (var idx = 0; idx < this.results.length; idx++) {
|
|
342
|
+
var subArrays = this.recomputeDamageAtBoost(idx, boost, berryAvailable);
|
|
343
|
+
var summed = subArrays.reduce(function (acc, sub) { return acc + sub[Math.min(rollIndex, sub.length - 1)]; }, 0);
|
|
344
|
+
damages.push(summed);
|
|
345
|
+
boost = Math.min(boost + subArrays.length, 6);
|
|
346
|
+
if (berryAvailable && this.consumesTypeBerry(this.results[idx])) {
|
|
347
|
+
berryAvailable = false;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return { damages: damages, nextBoost: boost, typeBerryAvailable: berryAvailable };
|
|
351
|
+
};
|
|
352
|
+
MultiResult.prototype.staminaHitDamages = function (turns) {
|
|
353
|
+
var damages = [];
|
|
354
|
+
var boost = this.initialDefBoost();
|
|
355
|
+
var berryAvailable = true;
|
|
356
|
+
for (var turn = 0; turn < turns; turn++) {
|
|
357
|
+
for (var idx = 0; idx < this.results.length; idx++) {
|
|
358
|
+
var subArrays = this.recomputeDamageAtBoost(idx, boost, berryAvailable);
|
|
359
|
+
var consumesBerry = berryAvailable && this.consumesTypeBerry(this.results[idx]);
|
|
360
|
+
subArrays.forEach(function (sub) {
|
|
361
|
+
damages.push(sub);
|
|
362
|
+
boost = Math.min(boost + 1, 6);
|
|
363
|
+
});
|
|
364
|
+
if (consumesBerry) {
|
|
365
|
+
berryAvailable = false;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return damages;
|
|
370
|
+
};
|
|
279
371
|
MultiResult.prototype.mergeBulkStats = function (resultOne, resultTwo, defender) {
|
|
280
372
|
var resultOneDefenderDesc = resultOne
|
|
281
373
|
.desc()
|
package/dist/multi-result.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-result.js","sourceRoot":"","sources":["../src/multi-result.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"multi-result.js","sourceRoot":"","sources":["../src/multi-result.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAMkB;AAGlB,+BAMgB;AAChB,+BAA4B;AAC5B,+BAAiC;AACjC,yCAAiD;AACjD,iCAA2C;AAE3C;IAWE,qBACE,QAAiB,EACjB,OAAiB,EACjB,QAKC,EACD,GAAwC;QA+TlC,yBAAoB,GAAG,IAAI,GAAG,EAAsB,CAAC;QA7T3D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,+BAAS,GAAT,UAAU,SAA8B;;QAA9B,0BAAA,EAAA,YAAY,2BAAkB;QACtC,IAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAChC,IAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC1C,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACpC,IAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;QAE5B,IAAM,MAAM,GAAG,IAAI,WAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACvC,IAAM,OAAO,GAAG,IAAA,mBAAY,EAC1B,GAAG,EACH,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EACxB,QAAQ,EACR,MAAM,EACN,KAAK,CACN,CAAC;QAEF,IAAI,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;;YAEpC,KAAqB,IAAA,KAAA,SAAA,IAAI,CAAC,OAAO,CAAA,gBAAA,4BAAE;gBAA9B,IAAM,MAAM,WAAA;gBACf,IAAM,SAAS,GAAG,IAAA,mBAAY,EAC5B,GAAG,EACH,MAAM,CAAC,QAAQ,EACf,QAAQ,EACR,MAAM,CAAC,IAAI,EACX,KAAK,CACN,CAAC;gBACF,IAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;gBACpE,cAAc,IAAI,YAAY,CAAC;aAChC;;;;;;;;;QAED,IAAM,KAAK,GAAG,IAAA,uBAAgB,EAC5B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EACxB,QAAQ,EACR,GAAG,EACH,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CACrB,CAAC;QAEF,IAAM,IAAI,GAAoB,EAAE,CAAC;QACjC,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,aAAa,GAAG,KAAK,CAAC;QAE1B,IAAM,SAAS,GAAG,UAAC,MAAwC;YACzD,IAAM,SAAS,GAAG,IAAA,+BAAsB,EAAC,MAAM,CAAC,CAAC;YACjD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YACrC,IAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAxC,CAAwC,CAAC,CAAC;YAC5E,OAAO,IAAI,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF,IAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAnB,CAAmB,CAAC,CAAC;QAClE,IAAM,0BAA0B,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,CAAC;YACnD,IAAM,YAAY,GAAG,IAAA,4BAAqB,EAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAClF,OAAO,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrE,CAAC,CAAC,CAAC;QACH,IAAM,YAAY,GAAG,0BAA0B,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,KAAK,IAAI,EAAV,CAAU,CAAC,CAAC;QACtE,IAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC7C,IAAI,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,yBAAyB,GAAG,IAAI,CAAC;QAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;YAC5B,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,WAAW,SAAU,CAAC;YAE1B,IAAI,UAAU,EAAE;gBACd,IAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC;gBACzF,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC3B,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC9B,yBAAyB,GAAG,IAAI,CAAC,kBAAkB,CAAC;aACrD;iBAAM;gBACL,WAAW,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY;oBACpC,CAAC,CAAC,cAAc;oBAChB,CAAC,CAAC,0BAA0B,CAAC,GAAG,CAAC,UAAC,CAAC,EAAE,GAAG,IAAK,OAAA,CAAC,aAAD,CAAC,cAAD,CAAC,GAAI,cAAc,CAAC,GAAG,CAAC,EAAxB,CAAwB,CAAC,CAAC;aAC1E;;gBAED,KAAkB,IAAA,+BAAA,SAAA,WAAW,CAAA,CAAA,wCAAA,iEAAE;oBAA1B,IAAM,GAAG,wBAAA;oBACZ,SAAS,IAAI,GAAG,CAAC;oBAEjB,IACE,CAAC,aAAa;wBACd,KAAK,CAAC,QAAQ,GAAG,CAAC;wBAClB,SAAS,IAAI,KAAK,CAAC,SAAS;wBAC5B,SAAS,GAAG,CAAC,EACb;wBACA,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC;wBAC5B,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC;wBAC5B,IAAI,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE;4BAAE,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;wBAC/D,aAAa,GAAG,IAAI,CAAC;qBACtB;iBACF;;;;;;;;;YAED,IAAI,SAAS,IAAI,CAAC,EAAE;gBAClB,IAAI,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAC,CAAC,CAAC;gBACtD,MAAM;aACP;YAED,SAAS,IAAI,cAAc,CAAC;YAC5B,SAAS,IAAI,cAAc,CAAC;YAC5B,IAAI,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE;gBAAE,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAC,CAAC,CAAC;YAE9D,IAAI,SAAS,IAAI,CAAC,EAAE;gBAClB,MAAM;aACP;SACF;QAED,OAAO,IAAI,wBAAe,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,4BAAM,GAAN;;QACE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YACvD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;SAC3B;QAED,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACxC,IAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAEhC,IAAM,WAAW,GAAe,EAAE,CAAC;QACnC,IAAM,iBAAiB,GAAa,EAAE,CAAC;QACvC,IAAM,kBAAkB,GAAa,EAAE,CAAC;;YAExC,KAAqB,IAAA,KAAA,SAAA,IAAI,CAAC,OAAO,CAAA,gBAAA,4BAAE;gBAA9B,IAAM,MAAM,WAAA;gBACf,IAAM,MAAM,GAAG,IAAA,+BAAsB,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACrD,IAAM,KAAK,GAAG,IAAA,uBAAgB,EAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBAE1E,WAAW,CAAC,IAAI,OAAhB,WAAW,2BAAS,MAAM,WAAE;gBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACtC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACvC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;iBAC1C;aACF;;;;;;;;;QAED,IAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;QACvC,IAAM,YAAY,GAAG,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,IAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC7C,IAAM,iBAAiB,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3B,IAAM,oBAAoB,GAAa,EAAE,CAAC;YAC1C,IAAM,qBAAqB,GAAa,EAAE,CAAC;YAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,oBAAoB,CAAC,IAAI,OAAzB,oBAAoB,2BAAS,iBAAiB,WAAE;gBAChD,qBAAqB,CAAC,IAAI,OAA1B,qBAAqB,2BAAS,kBAAkB,WAAE;aACnD;YAED,IAAM,cAAc,GAAe,UAAU;gBAC3C,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;gBAC7C,CAAC,CAAC,EAAE,CAAC;YAEP,IAAI,CAAC,UAAU,EAAE;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1B,cAAc,CAAC,IAAI,OAAnB,cAAc,2BAAS,WAAW,WAAE;iBACrC;aACF;YAED,IAAM,MAAM,GAAG,IAAA,8BAAuB,EACpC,cAAc,EACd,MAAM,CAAC,KAAK,EAAE,EACd,IAAI,CAAC,GAAG,CAAC,MAAM,EACf,MAAM,CAAC,KAAK,EAAE,EACd,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,EACX,YAAY,CACb,CAAC;YAEF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrB,IAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAG,CAAC,QAAK,CAAC;gBAC7C,IAAM,SAAS,GAAG,MAAM,CAAC,aAAa;oBACpC,CAAC,CAAC,iBAAU,MAAM,CAAC,IAAI,cAAW;oBAClC,CAAC,CAAC,EAAE,CAAC;gBACP,IAAM,OAAO,GACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBACvB,CAAC,CAAC,iBAAU,IAAA,8BAAuB,EAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAE;oBACrD,CAAC,CAAC,EAAE,CAAC;gBAET,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;oBACvB,OAAO,qBAAc,OAAO,SAAG,SAAS,SAAG,OAAO,CAAE,CAAC;iBACtD;gBAED,IAAM,UAAU,GACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;gBACpE,OAAO,UAAG,UAAU,yBAAe,OAAO,SAAG,SAAS,SAAG,OAAO,CAAE,CAAC;aACpE;SACF;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,2BAAK,GAAL;;QACE,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,GAAG,GAAG,CAAC,CAAC;;YAEZ,KAAqB,IAAA,KAAA,SAAA,IAAI,CAAC,OAAO,CAAA,gBAAA,4BAAE;gBAA9B,IAAM,MAAM,WAAA;gBACf,IAAM,MAAM,GAAG,IAAA,+BAAsB,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACrD,IAAM,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;gBAChD,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;gBACb,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;aACd;;;;;;;;;QAED,OAAO,EAAC,GAAG,KAAA,EAAE,GAAG,KAAA,EAAC,CAAC;IACpB,CAAC;IAED,qCAAe,GAAf;QACQ,IAAA,KAAa,IAAI,CAAC,KAAK,EAAE,EAAxB,GAAG,SAAA,EAAE,GAAG,SAAgB,CAAC;QAChC,IAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAE1C,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;YAC3D,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;SAC5D,CAAC;IACJ,CAAC;IAED,kCAAY,GAAZ;QACQ,IAAA,KAAa,IAAI,CAAC,eAAe,EAAE,EAAlC,GAAG,SAAA,EAAE,GAAG,SAA0B,CAAC;QAC1C,OAAO,UAAG,GAAG,gBAAM,GAAG,MAAG,CAAC;IAC5B,CAAC;IAED,0BAAI,GAAJ;;QACE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,OAAO,CAAA,MAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,0CAAE,IAAI,EAAE,KAAI,WAAW,CAAC;SAC/C;QAED,IAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClC,IAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClC,IAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QAEpC,IAAI;YACF,IAAM,mBAAmB,GAAG,SAAS;iBAClC,IAAI,EAAE;iBACN,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAClD,IAAM,0BAA0B,GAAG,SAAS;iBACzC,IAAI,EAAE;iBACN,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAClD,IAAM,mBAAmB,GAAG,SAAS;iBAClC,IAAI,EAAE;iBACN,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAEnD,IAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YACzE,IAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ;gBACtC,CAAC,CAAC,eAAQ,SAAS,CAAC,QAAQ,CAAC,QAAQ,MAAG;gBACxC,CAAC,CAAC,EAAE,CAAC;YACP,IAAM,2BAA2B,GAAG,mBAAmB,CAAC,SAAS,CAC/D,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CACrD,CAAC;YAEI,IAAA,KAAiC,IAAI,CAAC,KAAK,EAAE,EAAvC,QAAQ,SAAA,EAAO,QAAQ,SAAgB,CAAC;YAC9C,IAAA,KAAqC,IAAI,CAAC,eAAe,EAAE,EAArD,UAAU,SAAA,EAAO,UAAU,SAA0B,CAAC;YAElE,IAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE;gBAC3C,CAAC,CAAC,uBAAuB;gBACzB,CAAC,CAAC,EAAE,CAAC;YACP,IAAM,6BAA6B,GAAG,2BAA2B,CAAC,OAAO,CACvE,UAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAG,EAC7B,UAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,SAAG,WAAW,MAAG,CAC5C,CAAC;YAEF,IAAM,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,CACzD,6BAA6B,EAC7B,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAU,CACX,CAAC;YAEF,IAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAEnC,IAAI,YAAY,EAAE;gBAChB,IAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACrD,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAC/B,CAAC,EACD,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CACtC;oBACD,CAAC,CAAC,qBAAqB,CAAC;gBAE1B,OAAO,CACL,UAAG,mBAAmB,kBAAQ,0BAA0B,CAAE;oBAC1D,eAAQ,YAAY,cAAI,IAAI,SAAG,QAAQ,iBAAO,YAAY,CAAE,CAC7D,CAAC;aACH;YAED,OAAO,CACL,UAAG,mBAAmB,kBAAQ,0BAA0B,CAAE;gBAC1D,eAAQ,YAAY,cAAI,IAAI,SAAG,qBAAqB,SAAG,WAAW,CAAE,CACrE,CAAC;SACH;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CACL,UAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,cAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAE;gBACnD,eAAQ,SAAS,CAAC,QAAQ,CAAC,IAAI,cAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAE;gBACxD,eAAQ,SAAS,CAAC,QAAQ,CAAC,IAAI,mDAAgD,CAChF,CAAC;SACH;IACH,CAAC;IAED,+BAAS,GAAT;QACE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC;IAC1B,CAAC;IAED,kDAA4B,GAA5B,UAA6B,IAAY,EAAE,SAA8B;QAA9B,0BAAA,EAAA,YAAY,2BAAkB;QACvE,IAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjC,IAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAEzE,OAAO,EAAE,GAAG,WAAW,CAAC;IAC1B,CAAC;IAEO,wCAAkB,GAA1B;QACE,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAEO,qCAAe,GAAvB;;QACE,OAAO,MAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,mCAAI,CAAC,CAAC;IACvC,CAAC;IAIO,uCAAiB,GAAzB,UAA0B,MAAc;QACtC,IAAM,SAAS,GAAG,IAAA,0BAAkB,EAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEzD,OAAO,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnE,CAAC;IAEO,4CAAsB,GAA9B,UACE,WAAmB,EACnB,QAAgB,EAChB,kBAAyB;QAAzB,mCAAA,EAAA,yBAAyB;QAEzB,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACzC,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QAClD,IAAM,QAAQ,GAAG,UAAG,WAAW,cAAI,KAAK,cAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;QACzE,IAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEvD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAE1B,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACvC,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC;QAC5B,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,IAAA,sBAAe,EAClC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EACrB,QAAQ,CAAC,MAAM,CAAC,GAAG,EACnB,MAAM,CAAC,GAAG,CACX,CAAC;QAEF,IAAI,CAAC,kBAAkB,EAAE;YACvB,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;SAC3B;QAED,IAAM,UAAU,GAAG,IAAA,gBAAS,EAC1B,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,QAAQ,EACf,QAAQ,EACR,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,KAAK,CACb,CAAC;QAEF,IAAM,SAAS,GAAG,IAAA,+BAAsB,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAEnD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,wCAAkB,GAA1B,UACE,UAAkB,EAClB,SAAiB,EACjB,kBAA2B;QAE3B,IAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,KAAK,GAAG,UAAU,CAAC;QACvB,IAAI,cAAc,GAAG,kBAAkB,CAAC;QAExC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAClD,IAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;YAE1E,IAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAC7B,UAAC,GAAG,EAAE,GAAG,IAAK,OAAA,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAA9C,CAA8C,EAC5D,CAAC,CACF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAE9C,IAAI,cAAc,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC/D,cAAc,GAAG,KAAK,CAAC;aACxB;SACF;QAED,OAAO,EAAC,OAAO,SAAA,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAC,CAAC;IACzE,CAAC;IAEO,uCAAiB,GAAzB,UAA0B,KAAa;QACrC,IAAM,OAAO,GAAe,EAAE,CAAC;QAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,IAAI,cAAc,GAAG,IAAI,CAAC;QAE1B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE;YACvC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;gBAClD,IAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;gBAC1E,IAAM,aAAa,GAAG,cAAc,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;gBAElF,SAAS,CAAC,OAAO,CAAC,UAAC,GAAG;oBACpB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjC,CAAC,CAAC,CAAC;gBAEH,IAAI,aAAa,EAAE;oBACjB,cAAc,GAAG,KAAK,CAAC;iBACxB;aACF;SACF;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,oCAAc,GAAtB,UACE,SAAiB,EACjB,SAAiB,EACjB,QAAiB;QAEjB,IAAM,qBAAqB,GAAG,SAAS;aACpC,IAAI,EAAE;aACN,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,IAAM,qBAAqB,GAAG,SAAS;aACpC,IAAI,EAAE;aACN,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAEnD,IAAI,MAAM,GAAG,UAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAK,CAAC;QAE/C,MAAM,IAAI,IAAI,CAAC,UAAU,CACvB,QAAQ,EACR,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,EACL,KAAK,CACN,CAAC;QACF,MAAM,IAAI,IAAI,CAAC,UAAU,CACvB,QAAQ,EACR,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,EACL,KAAK,CACN,CAAC;QAEF,IACE,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAK,CAAC;YACxD,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAK,CAAC,EACxD;YACA,MAAM,IAAI,WAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAE,CAAC;SACzC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,gCAAU,GAAlB,UACE,QAAiB,EACjB,qBAA6B,EAC7B,qBAA6B,EAC7B,IAAY,EACZ,QAAgB;QAEhB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IACE,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACxC,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACxC;YACA,MAAM,IAAI,IAAI,CAAC;YACf,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC3C,MAAM,IAAI,WAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAE,CAAC;YACnC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC9C,MAAM,IAAI,WAAI,QAAQ,CAAE,CAAC;SAC1B;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,iCAAW,GAAnB,UAAoB,OAAgB,EAAE,IAAY;QAChD,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACpD,OAAO,YAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAE,CAAC;SACpC;QAED,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACpD,OAAO,WAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAE,CAAC;SACnC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,oCAAc,GAAtB,UAAuB,OAAgB,EAAE,IAAY;QACnD,IACE,IAAI,KAAK,KAAK;YACd,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAC7D;YAAE,OAAO,GAAG,CAAC;SAAE;QACjB,IACE,IAAI,KAAK,KAAK;YACd,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAC9D;YAAE,OAAO,GAAG,CAAC;SAAE;QAEjB,IACE,IAAI,KAAK,KAAK;YACd,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAC/D;YAAE,OAAO,GAAG,CAAC;SAAE;QACjB,IACE,IAAI,KAAK,KAAK;YACd,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAC5D;YAAE,OAAO,GAAG,CAAC;SAAE;QAEjB,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,8CAAwB,GAAhC,UAAiC,KAAiB;;QAIhD,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,GAAG,GAAG,CAAC,CAAC;;YAEZ,KAAkB,IAAA,UAAA,SAAA,KAAK,CAAA,4BAAA,+CAAE;gBAApB,IAAM,GAAG,kBAAA;gBACZ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClB,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;oBACd,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;iBAC5B;aACF;;;;;;;;;QAED,OAAO,EAAC,GAAG,KAAA,EAAE,GAAG,KAAA,EAAC,CAAC;IACpB,CAAC;IAEO,8CAAwB,GAAhC,UACE,IAAY,EACZ,QAAgB,EAChB,QAAgB,EAChB,UAAkB,EAClB,UAAkB;QAElB,IAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAE7C,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;YACzB,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;YACjD,OAAO,UAAG,MAAM,eAAK,QAAQ,cAAI,QAAQ,eAAK,UAAU,gBAAM,UAAU,OAAI,CAAC;SAC9E;QAED,IAAM,KAAK,GAAG,0CAA0C,CAAC;QAEzD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACpB,OAAO,IAAI,CAAC,OAAO,CACjB,KAAK,EACL,YAAK,QAAQ,cAAI,QAAQ,eAAK,UAAU,gBAAM,UAAU,OAAI,CAC7D,CAAC;SACH;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IACH,kBAAC;AAAD,CAAC,AA9jBD,IA8jBC;AA9jBY,kCAAW"}
|
package/dist/multicalc.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ import type { Move } from './move';
|
|
|
3
3
|
import type { Field } from './field';
|
|
4
4
|
import type { Generation } from './data/interface';
|
|
5
5
|
import { MultiResult } from './multi-result';
|
|
6
|
+
export declare function applyStaminaAfterHit(defender: Pokemon, gen: Generation): void;
|
|
6
7
|
export declare function calculateMulti(gen: Generation, attackers: Pokemon[], defender: Pokemon, moves: Move[], field: Field): MultiResult;
|
package/dist/multicalc.js
CHANGED
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
exports.__esModule = true;
|
|
3
|
-
exports.calculateMulti = void 0;
|
|
3
|
+
exports.calculateMulti = exports.applyStaminaAfterHit = void 0;
|
|
4
4
|
var calc_1 = require("./calc");
|
|
5
5
|
var desc_1 = require("./desc");
|
|
6
|
+
var util_1 = require("./mechanics/util");
|
|
6
7
|
var multi_result_1 = require("./multi-result");
|
|
7
8
|
function updateDefenderHP(defender, nextHP, maxHP) {
|
|
8
9
|
var percentage = (nextHP / maxHP) * 100;
|
|
9
10
|
defender.originalCurHP = Math.round((defender.maxHP(true) * percentage) / 100);
|
|
10
11
|
}
|
|
12
|
+
function applyStaminaAfterHit(defender, gen) {
|
|
13
|
+
if (!defender.hasAbility('Stamina'))
|
|
14
|
+
return;
|
|
15
|
+
defender.boosts.def = Math.min(defender.boosts.def + 1, 6);
|
|
16
|
+
defender.stats.def = (0, util_1.getModifiedStat)(defender.rawStats.def, defender.boosts.def, gen);
|
|
17
|
+
}
|
|
18
|
+
exports.applyStaminaAfterHit = applyStaminaAfterHit;
|
|
11
19
|
function calculateMulti(gen, attackers, defender, moves, field) {
|
|
12
20
|
var results = [];
|
|
13
21
|
var currentDefender = defender.clone();
|
|
@@ -76,6 +84,7 @@ function calculateMulti(gen, attackers, defender, moves, field) {
|
|
|
76
84
|
berryRecoveries.push(initialBerryData.recovery);
|
|
77
85
|
berryThresholds.push(initialBerryData.threshold);
|
|
78
86
|
}
|
|
87
|
+
applyStaminaAfterHit(currentDefender, gen);
|
|
79
88
|
}
|
|
80
89
|
var koChance = { chance: 0, n: 0, text: '', berryConsumed: false };
|
|
81
90
|
for (var i = 1; i <= attackers.length; i++) {
|
package/dist/multicalc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multicalc.js","sourceRoot":"","sources":["../src/multicalc.ts"],"names":[],"mappings":";;;AAAA,+BAAiC;AAMjC,+BAIgB;
|
|
1
|
+
{"version":3,"file":"multicalc.js","sourceRoot":"","sources":["../src/multicalc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
exports.__esModule = true;
|
|
3
|
+
var index_1 = require("../index");
|
|
4
|
+
describe('Stamina combined damage', function () {
|
|
5
|
+
var gen = index_1.Generations.get(9);
|
|
6
|
+
var field = function () { return new index_1.Field({ gameType: 'Doubles' }); };
|
|
7
|
+
var garchomp = function () {
|
|
8
|
+
return new index_1.Pokemon(gen, 'Garchomp', { level: 50, nature: 'Adamant', evs: { atk: 252, spe: 252 } });
|
|
9
|
+
};
|
|
10
|
+
var arcanine = function () {
|
|
11
|
+
return new index_1.Pokemon(gen, 'Arcanine', { level: 50, nature: 'Adamant', evs: { atk: 252, spe: 252 } });
|
|
12
|
+
};
|
|
13
|
+
var earthquakeAndRockSlide = function () { return [new index_1.Move(gen, 'Earthquake'), new index_1.Move(gen, 'Rock Slide')]; };
|
|
14
|
+
test('second attacker hits the Stamina defender at Def +1 in a single turn', function () {
|
|
15
|
+
var archaludon = new index_1.Pokemon(gen, 'Archaludon', { level: 50, ability: 'Stamina' });
|
|
16
|
+
var multiResult = (0, index_1.calculateMulti)(gen, [garchomp(), arcanine()], archaludon, earthquakeAndRockSlide(), field());
|
|
17
|
+
expect(multiResult.results[0].damage).toEqual([114, 114, 116, 116, 120, 120, 120, 122, 122, 126, 126, 128, 128, 132, 132, 134]);
|
|
18
|
+
expect(multiResult.results[1].damage).toEqual([8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10]);
|
|
19
|
+
expect(multiResult.desc()).toBe('252+ Atk Garchomp Earthquake AND 252+ Atk Arcanine Rock Slide vs. 0 HP / 0 Def Archaludon (Stamina considered): 122-144 (73.9 - 87.2%) -- guaranteed 2HKO');
|
|
20
|
+
});
|
|
21
|
+
test('does not add the Stamina note when the defender does not have Stamina', function () {
|
|
22
|
+
var archaludon = new index_1.Pokemon(gen, 'Archaludon', { level: 50, ability: 'Sturdy' });
|
|
23
|
+
var multiResult = (0, index_1.calculateMulti)(gen, [garchomp(), arcanine()], archaludon, earthquakeAndRockSlide(), field());
|
|
24
|
+
expect(multiResult.desc()).not.toContain('Stamina considered');
|
|
25
|
+
});
|
|
26
|
+
test('does not raise Def beyond +6', function () {
|
|
27
|
+
var archaludon = new index_1.Pokemon(gen, 'Archaludon', { level: 50, ability: 'Stamina' });
|
|
28
|
+
archaludon.boosts.def = 6;
|
|
29
|
+
var multiResult = (0, index_1.calculateMulti)(gen, [garchomp(), arcanine()], archaludon, earthquakeAndRockSlide(), field());
|
|
30
|
+
expect(multiResult.results[0].damage).toEqual([30, 30, 30, 30, 30, 30, 30, 32, 32, 32, 32, 32, 32, 32, 32, 36]);
|
|
31
|
+
expect(multiResult.results[1].damage).toEqual([3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4]);
|
|
32
|
+
});
|
|
33
|
+
test('Unaware attacker ignores the boost for its own hit but still raises it for the next attacker', function () {
|
|
34
|
+
var clodsire = new index_1.Pokemon(gen, 'Clodsire', { level: 50, ability: 'Unaware', nature: 'Adamant', evs: { atk: 252 } });
|
|
35
|
+
var archaludon = new index_1.Pokemon(gen, 'Archaludon', { level: 50, ability: 'Stamina' });
|
|
36
|
+
archaludon.boosts.def = 3;
|
|
37
|
+
var multiResult = (0, index_1.calculateMulti)(gen, [clodsire, arcanine()], archaludon, [new index_1.Move(gen, 'Earthquake'), new index_1.Move(gen, 'Rock Slide')], field());
|
|
38
|
+
expect(multiResult.results[0].damage).toEqual([78, 78, 78, 80, 80, 80, 84, 84, 84, 86, 86, 86, 90, 90, 90, 92]);
|
|
39
|
+
expect(multiResult.results[1].damage).toEqual([4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]);
|
|
40
|
+
});
|
|
41
|
+
test('a non-Unaware first attacker is reduced by the pre-existing boost (control for the Unaware case)', function () {
|
|
42
|
+
var clodsire = new index_1.Pokemon(gen, 'Clodsire', { level: 50, ability: 'Water Absorb', nature: 'Adamant', evs: { atk: 252 } });
|
|
43
|
+
var archaludon = new index_1.Pokemon(gen, 'Archaludon', { level: 50, ability: 'Stamina' });
|
|
44
|
+
archaludon.boosts.def = 3;
|
|
45
|
+
var multiResult = (0, index_1.calculateMulti)(gen, [clodsire, arcanine()], archaludon, [new index_1.Move(gen, 'Earthquake'), new index_1.Move(gen, 'Rock Slide')], field());
|
|
46
|
+
expect(multiResult.results[0].damage).toEqual([32, 32, 32, 32, 32, 32, 32, 32, 36, 36, 36, 36, 36, 36, 36, 38]);
|
|
47
|
+
expect(multiResult.results[1].damage).toEqual([4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]);
|
|
48
|
+
});
|
|
49
|
+
describe('KO chance accounts for the rising boost across turns', function () {
|
|
50
|
+
var bulkyEvs = { hp: 252, def: 252, spd: 4 };
|
|
51
|
+
test('Stamina survives longer than the same bulk without Stamina', function () {
|
|
52
|
+
var stamina = new index_1.Pokemon(gen, 'Archaludon', { level: 50, ability: 'Stamina', evs: bulkyEvs });
|
|
53
|
+
var sturdy = new index_1.Pokemon(gen, 'Archaludon', { level: 50, ability: 'Sturdy', evs: bulkyEvs });
|
|
54
|
+
var withStamina = (0, index_1.calculateMulti)(gen, [garchomp(), arcanine()], stamina, earthquakeAndRockSlide(), field());
|
|
55
|
+
var withoutStamina = (0, index_1.calculateMulti)(gen, [garchomp(), arcanine()], sturdy, earthquakeAndRockSlide(), field());
|
|
56
|
+
expect(withStamina.getHKO()).toBe('70.8% chance to 3HKO');
|
|
57
|
+
expect(withoutStamina.getHKO()).toBe('guaranteed 2HKO');
|
|
58
|
+
});
|
|
59
|
+
test('cumulative damage per turn decreases as the boost rises', function () {
|
|
60
|
+
var stamina = new index_1.Pokemon(gen, 'Archaludon', { level: 50, ability: 'Stamina', evs: bulkyEvs });
|
|
61
|
+
var multiResult = (0, index_1.calculateMulti)(gen, [garchomp(), arcanine()], stamina, earthquakeAndRockSlide(), field());
|
|
62
|
+
var cumulative = [1, 2, 3, 4].map(function (turn) { return multiResult.damageWithRemainingUntilTurn(turn, 15); });
|
|
63
|
+
expect(cumulative).toEqual([118, 179, 197, 197]);
|
|
64
|
+
});
|
|
65
|
+
test('a pre-existing Def boost shifts the whole Stamina sequence upward', function () {
|
|
66
|
+
var at1 = new index_1.Pokemon(gen, 'Archaludon', { level: 50, ability: 'Stamina', evs: bulkyEvs });
|
|
67
|
+
at1.boosts.def = 1;
|
|
68
|
+
var multiResult = (0, index_1.calculateMulti)(gen, [garchomp(), arcanine()], at1, earthquakeAndRockSlide(), field());
|
|
69
|
+
expect(multiResult.getHKO()).toBe('0.1% chance to 4HKO');
|
|
70
|
+
expect([1, 2, 3, 4].map(function (turn) { return multiResult.damageWithRemainingUntilTurn(turn, 15); })).toEqual([80, 132, 167, 197]);
|
|
71
|
+
});
|
|
72
|
+
test('a pre-existing Def debuff makes the defender frailer', function () {
|
|
73
|
+
var atNeg = new index_1.Pokemon(gen, 'Archaludon', { level: 50, ability: 'Stamina', evs: bulkyEvs });
|
|
74
|
+
atNeg.boosts.def = -1;
|
|
75
|
+
var multiResult = (0, index_1.calculateMulti)(gen, [garchomp(), arcanine()], atNeg, earthquakeAndRockSlide(), field());
|
|
76
|
+
expect(multiResult.getHKO()).toBe('guaranteed 2HKO');
|
|
77
|
+
});
|
|
78
|
+
test('the simulated turn-1 damage matches the single-turn combined calc when starting boosted', function () {
|
|
79
|
+
var at1 = new index_1.Pokemon(gen, 'Archaludon', { level: 50, ability: 'Stamina', evs: bulkyEvs });
|
|
80
|
+
at1.boosts.def = 1;
|
|
81
|
+
var multiResult = (0, index_1.calculateMulti)(gen, [garchomp(), arcanine()], at1, earthquakeAndRockSlide(), field());
|
|
82
|
+
var singleTurnMax = multiResult.results[0].damage[15] +
|
|
83
|
+
multiResult.results[1].damage[15];
|
|
84
|
+
expect(multiResult.damageWithRemainingUntilTurn(1, 15)).toBe(singleTurnMax);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('type-resist berry is only consumed on the first matching hit', function () {
|
|
88
|
+
var bulkyEvs = { hp: 252, def: 252, spd: 4 };
|
|
89
|
+
test('Shuca Berry halves the Ground hit only on turn 1, full damage afterward', function () {
|
|
90
|
+
var archaludon = new index_1.Pokemon(gen, 'Archaludon', { level: 50, ability: 'Stamina', item: 'Shuca Berry', evs: bulkyEvs });
|
|
91
|
+
var multiResult = (0, index_1.calculateMulti)(gen, [garchomp(), arcanine()], archaludon, earthquakeAndRockSlide(), field());
|
|
92
|
+
expect([1, 2, 3, 4].map(function (turn) { return multiResult.damageWithRemainingUntilTurn(turn, 15); })).toEqual([63, 124, 166, 197]);
|
|
93
|
+
expect(multiResult.getHKO()).toBe('0.1% chance to 4HKO');
|
|
94
|
+
});
|
|
95
|
+
test('Shuca Berry deals more cumulative damage than if it kept resisting every turn', function () {
|
|
96
|
+
var archaludon = new index_1.Pokemon(gen, 'Archaludon', { level: 50, ability: 'Stamina', item: 'Shuca Berry', evs: bulkyEvs });
|
|
97
|
+
var multiResult = (0, index_1.calculateMulti)(gen, [garchomp(), arcanine()], archaludon, earthquakeAndRockSlide(), field());
|
|
98
|
+
var turn2 = multiResult.damageWithRemainingUntilTurn(2, 15) - multiResult.damageWithRemainingUntilTurn(1, 15);
|
|
99
|
+
var turn1Ground = multiResult.results[0].damage[15];
|
|
100
|
+
expect(turn2).toBeGreaterThan(turn1Ground);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=stamina-multicalc.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stamina-multicalc.test.js","sourceRoot":"","sources":["../../src/test/stamina-multicalc.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/multi-result.ts
CHANGED
|
@@ -15,6 +15,9 @@ import {
|
|
|
15
15
|
serializeEndOfTurnTexts,
|
|
16
16
|
} from './desc';
|
|
17
17
|
import {Move} from './move';
|
|
18
|
+
import {calculate} from './calc';
|
|
19
|
+
import {getModifiedStat} from './mechanics/util';
|
|
20
|
+
import {getBerryResistType} from './items';
|
|
18
21
|
|
|
19
22
|
export class MultiResult {
|
|
20
23
|
defender: Pokemon;
|
|
@@ -97,12 +100,24 @@ export class MultiResult {
|
|
|
97
100
|
return withoutBerry !== undefined ? sumDamage(withoutBerry) : null;
|
|
98
101
|
});
|
|
99
102
|
const hasTypeBerry = damagesWithoutBerryAtIndex.some(d => d !== null);
|
|
103
|
+
const hasStamina = this.hasStaminaDefender();
|
|
104
|
+
let staminaBoost = hasStamina ? this.initialDefBoost() : 0;
|
|
105
|
+
let staminaTypeBerryAvailable = true;
|
|
100
106
|
|
|
101
107
|
for (let i = 1; i <= 10; i++) {
|
|
102
108
|
let turnValue = 0;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
109
|
+
let turnDamages: number[];
|
|
110
|
+
|
|
111
|
+
if (hasStamina) {
|
|
112
|
+
const turn = this.staminaTurnDamages(staminaBoost, rollIndex, staminaTypeBerryAvailable);
|
|
113
|
+
turnDamages = turn.damages;
|
|
114
|
+
staminaBoost = turn.nextBoost;
|
|
115
|
+
staminaTypeBerryAvailable = turn.typeBerryAvailable;
|
|
116
|
+
} else {
|
|
117
|
+
turnDamages = i === 1 || !hasTypeBerry
|
|
118
|
+
? damagesAtIndex
|
|
119
|
+
: damagesWithoutBerryAtIndex.map((d, idx) => d ?? damagesAtIndex[idx]);
|
|
120
|
+
}
|
|
106
121
|
|
|
107
122
|
for (const dmg of turnDamages) {
|
|
108
123
|
currentHP -= dmg;
|
|
@@ -163,18 +178,28 @@ export class MultiResult {
|
|
|
163
178
|
|
|
164
179
|
const rowsPerTurn = baseDamages.length;
|
|
165
180
|
const toxicCounter = target.status === 'tox' ? target.toxicCounter : 0;
|
|
181
|
+
const hasStamina = this.hasStaminaDefender();
|
|
182
|
+
const allStaminaDamages = hasStamina ? this.staminaHitDamages(9) : [];
|
|
166
183
|
|
|
167
184
|
for (let i = 1; i <= 9; i++) {
|
|
168
|
-
const currentDamages: number[][] = [];
|
|
169
185
|
const currentBerryRecovery: number[] = [];
|
|
170
186
|
const currentBerryThreshold: number[] = [];
|
|
171
187
|
|
|
172
188
|
for (let j = 0; j < i; j++) {
|
|
173
|
-
currentDamages.push(...baseDamages);
|
|
174
189
|
currentBerryRecovery.push(...baseBerryRecovery);
|
|
175
190
|
currentBerryThreshold.push(...baseBerryThreshold);
|
|
176
191
|
}
|
|
177
192
|
|
|
193
|
+
const currentDamages: number[][] = hasStamina
|
|
194
|
+
? allStaminaDamages.slice(0, i * rowsPerTurn)
|
|
195
|
+
: [];
|
|
196
|
+
|
|
197
|
+
if (!hasStamina) {
|
|
198
|
+
for (let j = 0; j < i; j++) {
|
|
199
|
+
currentDamages.push(...baseDamages);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
178
203
|
const result = computeMultiHitKOChance(
|
|
179
204
|
currentDamages,
|
|
180
205
|
target.curHP(),
|
|
@@ -269,8 +294,16 @@ export class MultiResult {
|
|
|
269
294
|
const {min: totalMin, max: totalMax} = this.range();
|
|
270
295
|
const {min: minPercent, max: maxPercent} = this.rangePercentage();
|
|
271
296
|
|
|
297
|
+
const staminaText = this.hasStaminaDefender()
|
|
298
|
+
? ' (Stamina considered)'
|
|
299
|
+
: '';
|
|
300
|
+
const defenderNameAndDamageWithNote = defenderNameAndDamageString.replace(
|
|
301
|
+
`${resultOne.defender.name}:`,
|
|
302
|
+
`${resultOne.defender.name}${staminaText}:`,
|
|
303
|
+
);
|
|
304
|
+
|
|
272
305
|
const defenderNameAndDamage = this.updateDefenderDamageText(
|
|
273
|
-
|
|
306
|
+
defenderNameAndDamageWithNote,
|
|
274
307
|
totalMin,
|
|
275
308
|
totalMax,
|
|
276
309
|
minPercent,
|
|
@@ -295,7 +328,7 @@ export class MultiResult {
|
|
|
295
328
|
|
|
296
329
|
return (
|
|
297
330
|
`${attackerDescription} AND ${secondAttackerDescritption}` +
|
|
298
|
-
` vs. ${defenderBulk} ${tera}${defenderNameAndDamage}`
|
|
331
|
+
` vs. ${defenderBulk} ${tera}${defenderNameAndDamage}${staminaText}`
|
|
299
332
|
);
|
|
300
333
|
} catch (e) {
|
|
301
334
|
return (
|
|
@@ -317,6 +350,111 @@ export class MultiResult {
|
|
|
317
350
|
return hp - remainingHp;
|
|
318
351
|
}
|
|
319
352
|
|
|
353
|
+
private hasStaminaDefender(): boolean {
|
|
354
|
+
return this.defender.hasAbility('Stamina');
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
private initialDefBoost(): number {
|
|
358
|
+
return this.defender.boosts.def ?? 0;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
private recomputeDamageCache = new Map<string, number[][]>();
|
|
362
|
+
|
|
363
|
+
private consumesTypeBerry(result: Result): boolean {
|
|
364
|
+
const berryType = getBerryResistType(this.defender.item);
|
|
365
|
+
|
|
366
|
+
return berryType !== undefined && result.move.hasType(berryType);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
private recomputeDamageAtBoost(
|
|
370
|
+
resultIndex: number,
|
|
371
|
+
defBoost: number,
|
|
372
|
+
typeBerryAvailable = true,
|
|
373
|
+
): number[][] {
|
|
374
|
+
const result = this.results[resultIndex];
|
|
375
|
+
const boost = Math.max(-6, Math.min(defBoost, 6));
|
|
376
|
+
const cacheKey = `${resultIndex}:${boost}:${typeBerryAvailable ? 1 : 0}`;
|
|
377
|
+
const cached = this.recomputeDamageCache.get(cacheKey);
|
|
378
|
+
|
|
379
|
+
if (cached) return cached;
|
|
380
|
+
|
|
381
|
+
const defender = this.defender.clone();
|
|
382
|
+
defender.boosts.def = boost;
|
|
383
|
+
defender.stats.def = getModifiedStat(
|
|
384
|
+
defender.rawStats.def,
|
|
385
|
+
defender.boosts.def,
|
|
386
|
+
result.gen,
|
|
387
|
+
);
|
|
388
|
+
|
|
389
|
+
if (!typeBerryAvailable) {
|
|
390
|
+
defender.item = undefined;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
const recomputed = calculate(
|
|
394
|
+
result.gen,
|
|
395
|
+
result.attacker,
|
|
396
|
+
defender,
|
|
397
|
+
result.move,
|
|
398
|
+
result.field,
|
|
399
|
+
);
|
|
400
|
+
|
|
401
|
+
const subArrays = extractDamageSubArrays(recomputed.damage);
|
|
402
|
+
this.recomputeDamageCache.set(cacheKey, subArrays);
|
|
403
|
+
|
|
404
|
+
return subArrays;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
private staminaTurnDamages(
|
|
408
|
+
startBoost: number,
|
|
409
|
+
rollIndex: number,
|
|
410
|
+
typeBerryAvailable: boolean,
|
|
411
|
+
): {damages: number[]; nextBoost: number; typeBerryAvailable: boolean} {
|
|
412
|
+
const damages: number[] = [];
|
|
413
|
+
let boost = startBoost;
|
|
414
|
+
let berryAvailable = typeBerryAvailable;
|
|
415
|
+
|
|
416
|
+
for (let idx = 0; idx < this.results.length; idx++) {
|
|
417
|
+
const subArrays = this.recomputeDamageAtBoost(idx, boost, berryAvailable);
|
|
418
|
+
|
|
419
|
+
const summed = subArrays.reduce(
|
|
420
|
+
(acc, sub) => acc + sub[Math.min(rollIndex, sub.length - 1)],
|
|
421
|
+
0,
|
|
422
|
+
);
|
|
423
|
+
damages.push(summed);
|
|
424
|
+
boost = Math.min(boost + subArrays.length, 6);
|
|
425
|
+
|
|
426
|
+
if (berryAvailable && this.consumesTypeBerry(this.results[idx])) {
|
|
427
|
+
berryAvailable = false;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
return {damages, nextBoost: boost, typeBerryAvailable: berryAvailable};
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
private staminaHitDamages(turns: number): number[][] {
|
|
435
|
+
const damages: number[][] = [];
|
|
436
|
+
let boost = this.initialDefBoost();
|
|
437
|
+
let berryAvailable = true;
|
|
438
|
+
|
|
439
|
+
for (let turn = 0; turn < turns; turn++) {
|
|
440
|
+
for (let idx = 0; idx < this.results.length; idx++) {
|
|
441
|
+
const subArrays = this.recomputeDamageAtBoost(idx, boost, berryAvailable);
|
|
442
|
+
const consumesBerry = berryAvailable && this.consumesTypeBerry(this.results[idx]);
|
|
443
|
+
|
|
444
|
+
subArrays.forEach((sub) => {
|
|
445
|
+
damages.push(sub);
|
|
446
|
+
boost = Math.min(boost + 1, 6);
|
|
447
|
+
});
|
|
448
|
+
|
|
449
|
+
if (consumesBerry) {
|
|
450
|
+
berryAvailable = false;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
return damages;
|
|
456
|
+
}
|
|
457
|
+
|
|
320
458
|
private mergeBulkStats(
|
|
321
459
|
resultOne: Result,
|
|
322
460
|
resultTwo: Result,
|
package/src/multicalc.ts
CHANGED
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
getBerryRecovery,
|
|
10
10
|
getEndOfTurn,
|
|
11
11
|
} from './desc';
|
|
12
|
+
import {getModifiedStat} from './mechanics/util';
|
|
12
13
|
|
|
13
14
|
import {MultiResult} from './multi-result';
|
|
14
15
|
|
|
@@ -19,6 +20,17 @@ function updateDefenderHP(defender: Pokemon, nextHP: number, maxHP: number) {
|
|
|
19
20
|
);
|
|
20
21
|
}
|
|
21
22
|
|
|
23
|
+
export function applyStaminaAfterHit(defender: Pokemon, gen: Generation) {
|
|
24
|
+
if (!defender.hasAbility('Stamina')) return;
|
|
25
|
+
|
|
26
|
+
defender.boosts.def = Math.min(defender.boosts.def + 1, 6);
|
|
27
|
+
defender.stats.def = getModifiedStat(
|
|
28
|
+
defender.rawStats.def,
|
|
29
|
+
defender.boosts.def,
|
|
30
|
+
gen,
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
22
34
|
export function calculateMulti(
|
|
23
35
|
gen: Generation,
|
|
24
36
|
attackers: Pokemon[],
|
|
@@ -115,6 +127,8 @@ export function calculateMulti(
|
|
|
115
127
|
berryRecoveries.push(initialBerryData.recovery);
|
|
116
128
|
berryThresholds.push(initialBerryData.threshold);
|
|
117
129
|
}
|
|
130
|
+
|
|
131
|
+
applyStaminaAfterHit(currentDefender, gen);
|
|
118
132
|
}
|
|
119
133
|
|
|
120
134
|
let koChance = {chance: 0, n: 0, text: '', berryConsumed: false};
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/* eslint-disable max-len */
|
|
2
|
+
import {Generations, calculateMulti, Pokemon, Move, Field} from '../index';
|
|
3
|
+
|
|
4
|
+
describe('Stamina combined damage', () => {
|
|
5
|
+
const gen = Generations.get(9);
|
|
6
|
+
const field = () => new Field({gameType: 'Doubles'});
|
|
7
|
+
|
|
8
|
+
const garchomp = () =>
|
|
9
|
+
new Pokemon(gen, 'Garchomp', {level: 50, nature: 'Adamant', evs: {atk: 252, spe: 252}});
|
|
10
|
+
const arcanine = () =>
|
|
11
|
+
new Pokemon(gen, 'Arcanine', {level: 50, nature: 'Adamant', evs: {atk: 252, spe: 252}});
|
|
12
|
+
|
|
13
|
+
const earthquakeAndRockSlide = () => [new Move(gen, 'Earthquake'), new Move(gen, 'Rock Slide')];
|
|
14
|
+
|
|
15
|
+
test('second attacker hits the Stamina defender at Def +1 in a single turn', () => {
|
|
16
|
+
const archaludon = new Pokemon(gen, 'Archaludon', {level: 50, ability: 'Stamina'});
|
|
17
|
+
|
|
18
|
+
const multiResult = calculateMulti(gen, [garchomp(), arcanine()], archaludon, earthquakeAndRockSlide(), field());
|
|
19
|
+
|
|
20
|
+
expect(multiResult.results[0].damage).toEqual([114, 114, 116, 116, 120, 120, 120, 122, 122, 126, 126, 128, 128, 132, 132, 134]);
|
|
21
|
+
expect(multiResult.results[1].damage).toEqual([8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10]);
|
|
22
|
+
expect(multiResult.desc()).toBe('252+ Atk Garchomp Earthquake AND 252+ Atk Arcanine Rock Slide vs. 0 HP / 0 Def Archaludon (Stamina considered): 122-144 (73.9 - 87.2%) -- guaranteed 2HKO');
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
test('does not add the Stamina note when the defender does not have Stamina', () => {
|
|
26
|
+
const archaludon = new Pokemon(gen, 'Archaludon', {level: 50, ability: 'Sturdy'});
|
|
27
|
+
|
|
28
|
+
const multiResult = calculateMulti(gen, [garchomp(), arcanine()], archaludon, earthquakeAndRockSlide(), field());
|
|
29
|
+
|
|
30
|
+
expect(multiResult.desc()).not.toContain('Stamina considered');
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test('does not raise Def beyond +6', () => {
|
|
34
|
+
const archaludon = new Pokemon(gen, 'Archaludon', {level: 50, ability: 'Stamina'});
|
|
35
|
+
archaludon.boosts.def = 6;
|
|
36
|
+
|
|
37
|
+
const multiResult = calculateMulti(gen, [garchomp(), arcanine()], archaludon, earthquakeAndRockSlide(), field());
|
|
38
|
+
|
|
39
|
+
expect(multiResult.results[0].damage).toEqual([30, 30, 30, 30, 30, 30, 30, 32, 32, 32, 32, 32, 32, 32, 32, 36]);
|
|
40
|
+
expect(multiResult.results[1].damage).toEqual([3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4]);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test('Unaware attacker ignores the boost for its own hit but still raises it for the next attacker', () => {
|
|
44
|
+
const clodsire = new Pokemon(gen, 'Clodsire', {level: 50, ability: 'Unaware', nature: 'Adamant', evs: {atk: 252}});
|
|
45
|
+
|
|
46
|
+
const archaludon = new Pokemon(gen, 'Archaludon', {level: 50, ability: 'Stamina'});
|
|
47
|
+
archaludon.boosts.def = 3;
|
|
48
|
+
|
|
49
|
+
const multiResult = calculateMulti(gen, [clodsire, arcanine()], archaludon, [new Move(gen, 'Earthquake'), new Move(gen, 'Rock Slide')], field());
|
|
50
|
+
|
|
51
|
+
expect(multiResult.results[0].damage).toEqual([78, 78, 78, 80, 80, 80, 84, 84, 84, 86, 86, 86, 90, 90, 90, 92]);
|
|
52
|
+
expect(multiResult.results[1].damage).toEqual([4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
test('a non-Unaware first attacker is reduced by the pre-existing boost (control for the Unaware case)', () => {
|
|
56
|
+
const clodsire = new Pokemon(gen, 'Clodsire', {level: 50, ability: 'Water Absorb', nature: 'Adamant', evs: {atk: 252}});
|
|
57
|
+
|
|
58
|
+
const archaludon = new Pokemon(gen, 'Archaludon', {level: 50, ability: 'Stamina'});
|
|
59
|
+
archaludon.boosts.def = 3;
|
|
60
|
+
|
|
61
|
+
const multiResult = calculateMulti(gen, [clodsire, arcanine()], archaludon, [new Move(gen, 'Earthquake'), new Move(gen, 'Rock Slide')], field());
|
|
62
|
+
|
|
63
|
+
expect(multiResult.results[0].damage).toEqual([32, 32, 32, 32, 32, 32, 32, 32, 36, 36, 36, 36, 36, 36, 36, 38]);
|
|
64
|
+
expect(multiResult.results[1].damage).toEqual([4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
describe('KO chance accounts for the rising boost across turns', () => {
|
|
68
|
+
const bulkyEvs = {hp: 252, def: 252, spd: 4};
|
|
69
|
+
|
|
70
|
+
test('Stamina survives longer than the same bulk without Stamina', () => {
|
|
71
|
+
const stamina = new Pokemon(gen, 'Archaludon', {level: 50, ability: 'Stamina', evs: bulkyEvs});
|
|
72
|
+
const sturdy = new Pokemon(gen, 'Archaludon', {level: 50, ability: 'Sturdy', evs: bulkyEvs});
|
|
73
|
+
|
|
74
|
+
const withStamina = calculateMulti(gen, [garchomp(), arcanine()], stamina, earthquakeAndRockSlide(), field());
|
|
75
|
+
const withoutStamina = calculateMulti(gen, [garchomp(), arcanine()], sturdy, earthquakeAndRockSlide(), field());
|
|
76
|
+
|
|
77
|
+
expect(withStamina.getHKO()).toBe('70.8% chance to 3HKO');
|
|
78
|
+
expect(withoutStamina.getHKO()).toBe('guaranteed 2HKO');
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
test('cumulative damage per turn decreases as the boost rises', () => {
|
|
82
|
+
const stamina = new Pokemon(gen, 'Archaludon', {level: 50, ability: 'Stamina', evs: bulkyEvs});
|
|
83
|
+
|
|
84
|
+
const multiResult = calculateMulti(gen, [garchomp(), arcanine()], stamina, earthquakeAndRockSlide(), field());
|
|
85
|
+
|
|
86
|
+
const cumulative = [1, 2, 3, 4].map(turn => multiResult.damageWithRemainingUntilTurn(turn, 15));
|
|
87
|
+
|
|
88
|
+
expect(cumulative).toEqual([118, 179, 197, 197]);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
test('a pre-existing Def boost shifts the whole Stamina sequence upward', () => {
|
|
92
|
+
const at1 = new Pokemon(gen, 'Archaludon', {level: 50, ability: 'Stamina', evs: bulkyEvs});
|
|
93
|
+
at1.boosts.def = 1;
|
|
94
|
+
|
|
95
|
+
const multiResult = calculateMulti(gen, [garchomp(), arcanine()], at1, earthquakeAndRockSlide(), field());
|
|
96
|
+
|
|
97
|
+
expect(multiResult.getHKO()).toBe('0.1% chance to 4HKO');
|
|
98
|
+
expect([1, 2, 3, 4].map(turn => multiResult.damageWithRemainingUntilTurn(turn, 15))).toEqual([80, 132, 167, 197]);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
test('a pre-existing Def debuff makes the defender frailer', () => {
|
|
102
|
+
const atNeg = new Pokemon(gen, 'Archaludon', {level: 50, ability: 'Stamina', evs: bulkyEvs});
|
|
103
|
+
atNeg.boosts.def = -1;
|
|
104
|
+
|
|
105
|
+
const multiResult = calculateMulti(gen, [garchomp(), arcanine()], atNeg, earthquakeAndRockSlide(), field());
|
|
106
|
+
|
|
107
|
+
expect(multiResult.getHKO()).toBe('guaranteed 2HKO');
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
test('the simulated turn-1 damage matches the single-turn combined calc when starting boosted', () => {
|
|
111
|
+
const at1 = new Pokemon(gen, 'Archaludon', {level: 50, ability: 'Stamina', evs: bulkyEvs});
|
|
112
|
+
at1.boosts.def = 1;
|
|
113
|
+
|
|
114
|
+
const multiResult = calculateMulti(gen, [garchomp(), arcanine()], at1, earthquakeAndRockSlide(), field());
|
|
115
|
+
|
|
116
|
+
const singleTurnMax =
|
|
117
|
+
(multiResult.results[0].damage as number[])[15] +
|
|
118
|
+
(multiResult.results[1].damage as number[])[15];
|
|
119
|
+
|
|
120
|
+
expect(multiResult.damageWithRemainingUntilTurn(1, 15)).toBe(singleTurnMax);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
describe('type-resist berry is only consumed on the first matching hit', () => {
|
|
125
|
+
const bulkyEvs = {hp: 252, def: 252, spd: 4};
|
|
126
|
+
|
|
127
|
+
test('Shuca Berry halves the Ground hit only on turn 1, full damage afterward', () => {
|
|
128
|
+
const archaludon = new Pokemon(gen, 'Archaludon', {level: 50, ability: 'Stamina', item: 'Shuca Berry', evs: bulkyEvs});
|
|
129
|
+
|
|
130
|
+
const multiResult = calculateMulti(gen, [garchomp(), arcanine()], archaludon, earthquakeAndRockSlide(), field());
|
|
131
|
+
|
|
132
|
+
expect([1, 2, 3, 4].map(turn => multiResult.damageWithRemainingUntilTurn(turn, 15))).toEqual([63, 124, 166, 197]);
|
|
133
|
+
expect(multiResult.getHKO()).toBe('0.1% chance to 4HKO');
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
test('Shuca Berry deals more cumulative damage than if it kept resisting every turn', () => {
|
|
137
|
+
const archaludon = new Pokemon(gen, 'Archaludon', {level: 50, ability: 'Stamina', item: 'Shuca Berry', evs: bulkyEvs});
|
|
138
|
+
|
|
139
|
+
const multiResult = calculateMulti(gen, [garchomp(), arcanine()], archaludon, earthquakeAndRockSlide(), field());
|
|
140
|
+
|
|
141
|
+
const turn2 = multiResult.damageWithRemainingUntilTurn(2, 15) - multiResult.damageWithRemainingUntilTurn(1, 15);
|
|
142
|
+
const turn1Ground = (multiResult.results[0].damage as number[])[15];
|
|
143
|
+
|
|
144
|
+
expect(turn2).toBeGreaterThan(turn1Ground);
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
});
|