@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 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" | "Fighting" | "Flying" | "Poison" | "Ground" | "Rock" | "Bug" | "Ghost" | "Steel" | "Fire" | "Water" | "Grass" | "Electric" | "Psychic" | "Ice" | "Dragon" | "Dark" | "Fairy" | undefined;
6
- export declare function getBerryResistType(berry: string | undefined): "Normal" | "Fighting" | "Flying" | "Poison" | "Ground" | "Rock" | "Bug" | "Ghost" | "Steel" | "Fire" | "Water" | "Grass" | "Electric" | "Psychic" | "Ice" | "Dragon" | "Dark" | "Fairy" | undefined;
7
- export declare function getFlingPower(item?: string, gen?: GenerationNum): 10 | 100 | 0 | 50 | 30 | 20 | 40 | 80 | 60 | 130 | 85 | 110 | 95 | 90 | 70;
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;
@@ -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;
@@ -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 = i === 1 || !hasTypeBerry
95
- ? damagesAtIndex
96
- : damagesWithoutBerryAtIndex.map(function (d, idx) { return d !== null && d !== void 0 ? d : damagesAtIndex[idx]; });
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 defenderNameAndDamage = this.updateDefenderDamageText(defenderNameAndDamageString, totalMin, totalMax, minPercent, maxPercent);
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()
@@ -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"}
@@ -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++) {
@@ -1 +1 @@
1
- {"version":3,"file":"multicalc.js","sourceRoot":"","sources":["../src/multicalc.ts"],"names":[],"mappings":"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"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robsonbittencourt/calc",
3
- "version": "0.11.16",
3
+ "version": "0.11.17",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "unpkg": "dist/production.min.js",
@@ -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
- const turnDamages = i === 1 || !hasTypeBerry
104
- ? damagesAtIndex
105
- : damagesWithoutBerryAtIndex.map((d, idx) => d ?? damagesAtIndex[idx]);
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
- defenderNameAndDamageString,
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
+ });