@firestone-hs/simulate-bgs-battle 1.1.570 → 1.1.572

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.
Files changed (115) hide show
  1. package/dist/cards/card.interface.d.ts +0 -13
  2. package/dist/cards/card.interface.js +1 -5
  3. package/dist/cards/card.interface.js.map +1 -1
  4. package/dist/cards/impl/_card-mappings.js +2 -0
  5. package/dist/cards/impl/_card-mappings.js.map +1 -1
  6. package/dist/cards/impl/enchantments/crystal-infuser-enchantment.d.ts +2 -2
  7. package/dist/cards/impl/enchantments/crystal-infuser-enchantment.js +2 -1
  8. package/dist/cards/impl/enchantments/crystal-infuser-enchantment.js.map +1 -1
  9. package/dist/cards/impl/minion/anubarak-nerubian-king.d.ts +2 -2
  10. package/dist/cards/impl/minion/anubarak-nerubian-king.js +2 -1
  11. package/dist/cards/impl/minion/anubarak-nerubian-king.js.map +1 -1
  12. package/dist/cards/impl/minion/baneling.d.ts +2 -2
  13. package/dist/cards/impl/minion/baneling.js +2 -1
  14. package/dist/cards/impl/minion/baneling.js.map +1 -1
  15. package/dist/cards/impl/minion/battlecruiser.d.ts +2 -2
  16. package/dist/cards/impl/minion/battlecruiser.js +4 -3
  17. package/dist/cards/impl/minion/battlecruiser.js.map +1 -1
  18. package/dist/cards/impl/minion/bronze-steward.d.ts +2 -2
  19. package/dist/cards/impl/minion/bronze-steward.js +2 -1
  20. package/dist/cards/impl/minion/bronze-steward.js.map +1 -1
  21. package/dist/cards/impl/minion/coilskar-sapper.d.ts +2 -2
  22. package/dist/cards/impl/minion/coilskar-sapper.js +2 -1
  23. package/dist/cards/impl/minion/coilskar-sapper.js.map +1 -1
  24. package/dist/cards/impl/minion/cruise-controller.d.ts +2 -2
  25. package/dist/cards/impl/minion/cruise-controller.js +2 -1
  26. package/dist/cards/impl/minion/cruise-controller.js.map +1 -1
  27. package/dist/cards/impl/minion/firescale-hoarder.d.ts +2 -2
  28. package/dist/cards/impl/minion/firescale-hoarder.js +2 -1
  29. package/dist/cards/impl/minion/firescale-hoarder.js.map +1 -1
  30. package/dist/cards/impl/minion/gentle-djinni.d.ts +2 -2
  31. package/dist/cards/impl/minion/gentle-djinni.js +2 -1
  32. package/dist/cards/impl/minion/gentle-djinni.js.map +1 -1
  33. package/dist/cards/impl/minion/glowing-cinder.d.ts +2 -2
  34. package/dist/cards/impl/minion/glowing-cinder.js +2 -1
  35. package/dist/cards/impl/minion/glowing-cinder.js.map +1 -1
  36. package/dist/cards/impl/minion/goldrinn-the-great-wolf.d.ts +2 -2
  37. package/dist/cards/impl/minion/goldrinn-the-great-wolf.js +2 -1
  38. package/dist/cards/impl/minion/goldrinn-the-great-wolf.js.map +1 -1
  39. package/dist/cards/impl/minion/gormling-gourmet.d.ts +2 -2
  40. package/dist/cards/impl/minion/gormling-gourmet.js +2 -1
  41. package/dist/cards/impl/minion/gormling-gourmet.js.map +1 -1
  42. package/dist/cards/impl/minion/impulsive-trickster.d.ts +2 -2
  43. package/dist/cards/impl/minion/impulsive-trickster.js +2 -1
  44. package/dist/cards/impl/minion/impulsive-trickster.js.map +1 -1
  45. package/dist/cards/impl/minion/leeroy-the-reckless.d.ts +2 -2
  46. package/dist/cards/impl/minion/leeroy-the-reckless.js +2 -1
  47. package/dist/cards/impl/minion/leeroy-the-reckless.js.map +1 -1
  48. package/dist/cards/impl/minion/metallic-hunter.d.ts +2 -2
  49. package/dist/cards/impl/minion/metallic-hunter.js +2 -1
  50. package/dist/cards/impl/minion/metallic-hunter.js.map +1 -1
  51. package/dist/cards/impl/minion/mummifier.d.ts +2 -2
  52. package/dist/cards/impl/minion/mummifier.js +2 -1
  53. package/dist/cards/impl/minion/mummifier.js.map +1 -1
  54. package/dist/cards/impl/minion/mutated-lasher.d.ts +2 -2
  55. package/dist/cards/impl/minion/mutated-lasher.js +2 -1
  56. package/dist/cards/impl/minion/mutated-lasher.js.map +1 -1
  57. package/dist/cards/impl/minion/nightmare-par-tea-guest.d.ts +2 -2
  58. package/dist/cards/impl/minion/nightmare-par-tea-guest.js +2 -1
  59. package/dist/cards/impl/minion/nightmare-par-tea-guest.js.map +1 -1
  60. package/dist/cards/impl/minion/operatic-belcher.d.ts +2 -2
  61. package/dist/cards/impl/minion/operatic-belcher.js +2 -1
  62. package/dist/cards/impl/minion/operatic-belcher.js.map +1 -1
  63. package/dist/cards/impl/minion/rylak-metalhead.d.ts +2 -2
  64. package/dist/cards/impl/minion/rylak-metalhead.js +2 -1
  65. package/dist/cards/impl/minion/rylak-metalhead.js.map +1 -1
  66. package/dist/cards/impl/minion/selfless-hero.d.ts +2 -2
  67. package/dist/cards/impl/minion/selfless-hero.js +2 -1
  68. package/dist/cards/impl/minion/selfless-hero.js.map +1 -1
  69. package/dist/cards/impl/minion/shadowdancer.d.ts +2 -2
  70. package/dist/cards/impl/minion/shadowdancer.js +2 -1
  71. package/dist/cards/impl/minion/shadowdancer.js.map +1 -1
  72. package/dist/cards/impl/minion/sharptooth-snapper.d.ts +2 -2
  73. package/dist/cards/impl/minion/sharptooth-snapper.js +5 -1
  74. package/dist/cards/impl/minion/sharptooth-snapper.js.map +1 -1
  75. package/dist/cards/impl/minion/showy-cyclist.d.ts +2 -2
  76. package/dist/cards/impl/minion/showy-cyclist.js +2 -1
  77. package/dist/cards/impl/minion/showy-cyclist.js.map +1 -1
  78. package/dist/cards/impl/minion/silithid-burrower.d.ts +2 -2
  79. package/dist/cards/impl/minion/silithid-burrower.js +2 -1
  80. package/dist/cards/impl/minion/silithid-burrower.js.map +1 -1
  81. package/dist/cards/impl/minion/slumber-sorcerer.d.ts +2 -2
  82. package/dist/cards/impl/minion/slumber-sorcerer.js +2 -1
  83. package/dist/cards/impl/minion/slumber-sorcerer.js.map +1 -1
  84. package/dist/cards/impl/minion/thorncaller.d.ts +2 -2
  85. package/dist/cards/impl/minion/thorncaller.js +2 -1
  86. package/dist/cards/impl/minion/thorncaller.js.map +1 -1
  87. package/dist/cards/impl/minion/thousandth-paper-drake.js +2 -1
  88. package/dist/cards/impl/minion/thousandth-paper-drake.js.map +1 -1
  89. package/dist/cards/impl/minion/three-lil-quilboar.d.ts +2 -2
  90. package/dist/cards/impl/minion/three-lil-quilboar.js +2 -1
  91. package/dist/cards/impl/minion/three-lil-quilboar.js.map +1 -1
  92. package/dist/cards/impl/minion/tunnel-blaster.d.ts +2 -2
  93. package/dist/cards/impl/minion/tunnel-blaster.js +2 -1
  94. package/dist/cards/impl/minion/tunnel-blaster.js.map +1 -1
  95. package/dist/cards/impl/minion/turquoise-skitterer.d.ts +2 -2
  96. package/dist/cards/impl/minion/turquoise-skitterer.js +2 -5
  97. package/dist/cards/impl/minion/turquoise-skitterer.js.map +1 -1
  98. package/dist/cards/impl/minion/valiant-tiger.d.ts +2 -2
  99. package/dist/cards/impl/minion/valiant-tiger.js +2 -1
  100. package/dist/cards/impl/minion/valiant-tiger.js.map +1 -1
  101. package/dist/input-sanitation.js +5 -1
  102. package/dist/input-sanitation.js.map +1 -1
  103. package/dist/simulate-bgs-battle.js +1 -1
  104. package/dist/simulate-bgs-battle.js.map +1 -1
  105. package/dist/simulation/deathrattle-effects.d.ts +2 -1
  106. package/dist/simulation/deathrattle-effects.js +3 -481
  107. package/dist/simulation/deathrattle-effects.js.map +1 -1
  108. package/dist/simulation/deathrattle-orchestration.js +1 -2
  109. package/dist/simulation/deathrattle-orchestration.js.map +1 -1
  110. package/dist/simulation/deathrattle-spawns.d.ts +1 -1
  111. package/dist/simulation/deathrattle-spawns.js +320 -9
  112. package/dist/simulation/deathrattle-spawns.js.map +1 -1
  113. package/dist/simulation/start-of-combat/soc-minion.js +10 -6
  114. package/dist/simulation/start-of-combat/soc-minion.js.map +1 -1
  115. package/package.json +1 -1
@@ -1,22 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rememberDeathrattles = exports.applyMonstrosity = exports.dealDamageToAllMinions = exports.applyWheneverMinionDiesEffect = exports.handleAfterMinionKillsEffect = exports.handleWheneverMinionsKillEffect = exports.applyEarthInvocationEnchantment = exports.applyFireInvocationEnchantment = exports.applyWaterInvocationEnchantment = exports.applyLightningInvocationEnchantment = exports.handleDeathrattleEffects = exports.computeDeathrattleMultiplier = void 0;
3
+ exports.rememberDeathrattles = exports.applyMonstrosity = exports.dealDamageToAllMinions = exports.applyWheneverMinionDiesEffect = exports.handleAfterMinionKillsEffect = exports.handleWheneverMinionsKillEffect = exports.applyRecurringNightmareDeathrattleEffect = exports.applyLeapFroggerEffect = exports.applyEarthInvocationEnchantment = exports.applyFireInvocationEnchantment = exports.applyWaterInvocationEnchantment = exports.applyLightningInvocationEnchantment = exports.computeDeathrattleMultiplier = void 0;
4
4
  const reference_data_1 = require("@firestone-hs/reference-data");
5
- const card_interface_1 = require("../cards/card.interface");
6
- const _card_mappings_1 = require("../cards/impl/_card-mappings");
7
- const divine_shield_1 = require("../keywords/divine-shield");
8
5
  const taunt_1 = require("../keywords/taunt");
9
- const windfury_1 = require("../keywords/windfury");
10
6
  const utils_1 = require("../services/utils");
11
7
  const simulate_bgs_battle_1 = require("../simulate-bgs-battle");
12
8
  const utils_2 = require("../utils");
13
9
  const attack_1 = require("./attack");
14
10
  const cards_in_hand_1 = require("./cards-in-hand");
15
- const deathrattle_on_trigger_1 = require("./deathrattle-on-trigger");
16
11
  const deathrattle_spawns_1 = require("./deathrattle-spawns");
17
12
  const remembered_deathrattle_1 = require("./remembered-deathrattle");
18
13
  const stats_1 = require("./stats");
19
- const golden_1 = require("./utils/golden");
20
14
  const computeDeathrattleMultiplier = (board, boardHero, deadEntity, sharedState) => {
21
15
  var _a, _b, _c, _d, _e;
22
16
  const rivendare = !!board.find((entity) => entity.cardId === "BG_FP1_031" ||
@@ -39,480 +33,6 @@ const computeDeathrattleMultiplier = (board, boardHero, deadEntity, sharedState)
39
33
  return multiplier;
40
34
  };
41
35
  exports.computeDeathrattleMultiplier = computeDeathrattleMultiplier;
42
- const handleDeathrattleEffects = (boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, deadEntityIndexFromRight, otherBoard, otherBoardHero, gameState) => {
43
- var _a, _b;
44
- const multiplier = (0, exports.computeDeathrattleMultiplier)(boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, gameState.sharedState);
45
- const deathrattleTriggeredInput = {
46
- boardWithDeadEntity,
47
- boardWithDeadEntityHero,
48
- deadEntity,
49
- otherBoard,
50
- otherBoardHero,
51
- deadEntityIndexFromRight,
52
- gameState,
53
- };
54
- const cardIds = [deadEntity.cardId, ...((_a = deadEntity.additionalCards) !== null && _a !== void 0 ? _a : [])];
55
- const enchantments = [
56
- ...((_b = deadEntity.enchantments) !== null && _b !== void 0 ? _b : []),
57
- ].sort((a, b) => a.timing - b.timing);
58
- for (const deadEntityCardId of cardIds) {
59
- const deathrattleImpl = _card_mappings_1.cardMappings[deadEntityCardId];
60
- if ((0, card_interface_1.hasDeathrattleEffect)(deathrattleImpl)) {
61
- for (let i = 0; i < multiplier; i++) {
62
- deathrattleImpl.deathrattleEffect(deadEntity, deathrattleTriggeredInput);
63
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
64
- }
65
- }
66
- else {
67
- switch (deadEntityCardId) {
68
- case "TB_BaconShop_HERO_76_Buddy":
69
- case "TB_BaconShop_HERO_76_Buddy_G":
70
- const iterations = deadEntityCardId === "TB_BaconShop_HERO_76_Buddy_G" ? 2 : 1;
71
- for (let i = 0; i < multiplier; i++) {
72
- for (let j = 0; j < iterations; j++) {
73
- let validTargets = boardWithDeadEntity.filter((entity) => !entity.divineShield);
74
- if (!(validTargets === null || validTargets === void 0 ? void 0 : validTargets.length)) {
75
- validTargets = boardWithDeadEntity.filter((entity) => !entity.taunt);
76
- if (!(validTargets === null || validTargets === void 0 ? void 0 : validTargets.length)) {
77
- validTargets = boardWithDeadEntity.filter((entity) => !entity.windfury);
78
- }
79
- }
80
- const target = (0, utils_1.pickRandom)(validTargets);
81
- if (target) {
82
- if (!target.divineShield) {
83
- (0, divine_shield_1.updateDivineShield)(target, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, true, gameState);
84
- }
85
- (0, taunt_1.updateTaunt)(target, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);
86
- (0, windfury_1.updateWindfury)(target, true, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, gameState);
87
- gameState.spectator.registerPowerTarget(deadEntity, target, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero);
88
- }
89
- }
90
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
91
- }
92
- break;
93
- case "BGS_040":
94
- case "TB_BaconUps_154":
95
- for (let i = 0; i < multiplier; i++) {
96
- const nadinaMultiplier = deadEntityCardId === "TB_BaconUps_154" ? 6 : 3;
97
- for (let j = 0; j < nadinaMultiplier; j++) {
98
- const validTargets = boardWithDeadEntity
99
- .filter((e) => (0, utils_2.hasCorrectTribe)(e, boardWithDeadEntityHero, reference_data_1.Race.DRAGON, gameState.anomalies, gameState.allCards))
100
- .filter((entity) => !entity.divineShield);
101
- const target = (0, utils_1.pickRandom)(validTargets);
102
- if (target) {
103
- (0, divine_shield_1.updateDivineShield)(target, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, true, gameState);
104
- gameState.spectator.registerPowerTarget(deadEntity, target, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero);
105
- }
106
- }
107
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
108
- }
109
- break;
110
- case "BG_OG_256":
111
- for (let i = 0; i < multiplier; i++) {
112
- (0, utils_2.addStatsToBoard)(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 1, 1, gameState);
113
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
114
- }
115
- break;
116
- case "TB_BaconUps_025":
117
- for (let i = 0; i < multiplier; i++) {
118
- (0, utils_2.addStatsToBoard)(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 2, 2, gameState);
119
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
120
- }
121
- break;
122
- case "YOD_026":
123
- for (let i = 0; i < multiplier; i++) {
124
- (0, utils_2.grantRandomAttack)(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, deadEntity.attack, gameState);
125
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
126
- }
127
- break;
128
- case "TB_BaconUps_112":
129
- for (let i = 0; i < multiplier; i++) {
130
- (0, utils_2.grantRandomAttack)(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, deadEntity.attack, gameState);
131
- (0, utils_2.grantRandomAttack)(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, deadEntity.attack, gameState);
132
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
133
- }
134
- break;
135
- case "BG29_815":
136
- case "BG29_815_G":
137
- const nightbaneLoops = deadEntityCardId === "BG29_815_G" ? 2 : 1;
138
- for (let i = 0; i < multiplier; i++) {
139
- for (let j = 0; j < nightbaneLoops; j++) {
140
- const pickedTargetEntityIds = [];
141
- for (let k = 0; k < 2; k++) {
142
- const target = (0, utils_1.pickRandomAlive)(boardWithDeadEntity
143
- .filter((e) => ![
144
- "BG29_815",
145
- "BG29_815_G",
146
- ].includes(e.cardId))
147
- .filter((e) => !pickedTargetEntityIds.includes(e.entityId)));
148
- if (!!target) {
149
- pickedTargetEntityIds.push(target.entityId);
150
- (0, stats_1.modifyStats)(target, deadEntity, deadEntity.attack, 0, boardWithDeadEntity, boardWithDeadEntityHero, gameState);
151
- }
152
- }
153
- }
154
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
155
- }
156
- break;
157
- case "BG21_000":
158
- for (let i = 0; i < multiplier; i++) {
159
- applyLeapFroggerEffect(boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, false, gameState, deadEntity.deathrattleRepeats);
160
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
161
- }
162
- break;
163
- case "BG21_000_G":
164
- for (let i = 0; i < multiplier; i++) {
165
- applyLeapFroggerEffect(boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, true, gameState, deadEntity.deathrattleRepeats);
166
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
167
- }
168
- break;
169
- case "BG21_001":
170
- for (let i = 0; i < multiplier; i++) {
171
- const target = (0, utils_2.grantRandomStats)(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 6, 6, reference_data_1.Race.BEAST, true, gameState);
172
- if (!!target) {
173
- gameState.spectator.registerPowerTarget(deadEntity, target, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero);
174
- }
175
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
176
- }
177
- break;
178
- case "BG21_001_G":
179
- for (let i = 0; i < multiplier; i++) {
180
- const target = (0, utils_2.grantRandomStats)(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 12, 12, reference_data_1.Race.BEAST, true, gameState);
181
- if (!!target) {
182
- gameState.spectator.registerPowerTarget(deadEntity, target, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero);
183
- }
184
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
185
- }
186
- break;
187
- case "BG25_022":
188
- case "BG25_022_G":
189
- const scarletMultiplier = deadEntityCardId === "BG25_022_G" ? 2 : 1;
190
- for (let i = 0; i < multiplier; i++) {
191
- const target = (0, utils_2.grantRandomStats)(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, scarletMultiplier * 1, scarletMultiplier * 2, reference_data_1.Race.UNDEAD, false, gameState);
192
- if (!!target) {
193
- gameState.spectator.registerPowerTarget(deadEntity, target, boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero);
194
- }
195
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
196
- }
197
- break;
198
- case "TB_BaconShop_HERO_17_Buddy":
199
- case "TB_BaconShop_HERO_17_Buddy_G":
200
- const squirrelDamage = deadEntity.cardId === "TB_BaconShop_HERO_17_Buddy_G" ? 4 : 2;
201
- for (let i = 0; i < multiplier; i++) {
202
- const numberOfDeadMechsThisCombat = gameState.sharedState.deaths
203
- .filter((entity) => entity.friendly === deadEntity.friendly)
204
- .filter((entity) => (0, utils_2.hasCorrectTribe)(entity, boardWithDeadEntityHero, reference_data_1.Race.MECH, gameState.anomalies, gameState.allCards)).length;
205
- for (let j = 0; j < numberOfDeadMechsThisCombat; j++) {
206
- (0, attack_1.dealDamageToRandomEnemy)(otherBoard, otherBoardHero, deadEntity, squirrelDamage, boardWithDeadEntity, boardWithDeadEntityHero, gameState);
207
- }
208
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
209
- }
210
- break;
211
- case "BG_BOT_606":
212
- case "TB_BaconUps_028":
213
- const kaboomLoops = deadEntity.cardId === "TB_BaconUps_028" ? 2 : 1;
214
- const baseDamage = 4 +
215
- boardWithDeadEntityHero.trinkets.filter((t) => t.cardId === "BG30_MagicItem_803").length *
216
- 10;
217
- for (let i = 0; i < multiplier; i++) {
218
- for (let j = 0; j < kaboomLoops; j++) {
219
- (0, attack_1.dealDamageToRandomEnemy)(otherBoard, otherBoardHero, deadEntity, baseDamage, boardWithDeadEntity, boardWithDeadEntityHero, gameState);
220
- }
221
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
222
- }
223
- break;
224
- case "BG29_843":
225
- case "BG29_843_G":
226
- const fireDancerLoops = deadEntity.cardId === "BG29_843_G" ? 2 : 1;
227
- for (let i = 0; i < multiplier; i++) {
228
- for (let j = 0; j < fireDancerLoops; j++) {
229
- const minionsToDamage = [...otherBoard, ...boardWithDeadEntity];
230
- for (const target of minionsToDamage) {
231
- const isSameSide = target.friendly === deadEntity.friendly;
232
- const board = isSameSide ? boardWithDeadEntity : otherBoard;
233
- const hero = isSameSide ? boardWithDeadEntityHero : otherBoardHero;
234
- (0, attack_1.dealDamageToMinion)(target, board, hero, deadEntity, 1, isSameSide ? otherBoard : boardWithDeadEntity, isSameSide ? otherBoardHero : boardWithDeadEntityHero, gameState);
235
- }
236
- }
237
- (0, attack_1.processMinionDeath)(boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState);
238
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
239
- }
240
- break;
241
- case "BG28_968":
242
- case "BG28_968_G":
243
- const lighterFighterDamage = deadEntity.cardId === "BG28_968_G" ? 8 : 4;
244
- for (let i = 0; i < multiplier; i++) {
245
- for (let j = 0; j < 2; j++) {
246
- const target = (0, utils_1.pickRandomLowestHealth)(otherBoard);
247
- gameState.spectator.registerPowerTarget(deadEntity, target, otherBoard, boardWithDeadEntityHero, otherBoardHero);
248
- (0, attack_1.dealDamageToMinion)(target, otherBoard, otherBoardHero, deadEntity, lighterFighterDamage, boardWithDeadEntity, boardWithDeadEntityHero, gameState);
249
- }
250
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
251
- }
252
- break;
253
- case "BG25_165":
254
- case "BG25_165_G":
255
- const boomboxDamage = deadEntity.cardId === "BG25_165_G" ? 14 : 7;
256
- for (let i = 0; i < multiplier; i++) {
257
- const targets = (0, attack_1.findNearestEnemies)(boardWithDeadEntity, null, deadEntityIndexFromRight, otherBoard, 2, gameState.allCards);
258
- targets.forEach((target) => {
259
- (0, attack_1.dealDamageToMinion)(target, otherBoard, otherBoardHero, deadEntity, boomboxDamage, boardWithDeadEntity, boardWithDeadEntityHero, gameState);
260
- });
261
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
262
- }
263
- break;
264
- case "BG_FP1_024":
265
- case "TB_BaconUps_118":
266
- const damage = deadEntityCardId === "TB_BaconUps_118" ? 2 : 1;
267
- for (let i = 0; i < multiplier; i++) {
268
- const minionsToDamage = [...otherBoard, ...boardWithDeadEntity];
269
- for (const target of minionsToDamage) {
270
- const isSameSide = target.friendly === deadEntity.friendly;
271
- const board = isSameSide ? boardWithDeadEntity : otherBoard;
272
- const hero = isSameSide ? boardWithDeadEntityHero : otherBoardHero;
273
- (0, attack_1.dealDamageToMinion)(target, board, hero, deadEntity, damage, isSameSide ? otherBoard : boardWithDeadEntity, isSameSide ? otherBoardHero : boardWithDeadEntityHero, gameState);
274
- }
275
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
276
- }
277
- break;
278
- case "BG25_399":
279
- case "BG25_399_G":
280
- for (let i = 0; i < multiplier; i++) {
281
- const radioQuantity = deadEntityCardId === "BG25_399_G" ? 2 : 1;
282
- const radioEntities = Array(radioQuantity).fill(deadEntity.lastAffectedByEntity);
283
- (0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, radioEntities, gameState);
284
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
285
- }
286
- break;
287
- case "BG28_900":
288
- case "BG28_900_G":
289
- for (let i = 0; i < multiplier; i++) {
290
- const loops = deadEntityCardId === "BG28_900_G" ? 2 : 1;
291
- const cardsToAdd = Array(loops).fill(null);
292
- (0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, cardsToAdd, gameState);
293
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
294
- }
295
- break;
296
- case "TB_BaconShop_HERO_41_Buddy":
297
- case "TB_BaconShop_HERO_41_Buddy_G":
298
- for (let i = 0; i < multiplier; i++) {
299
- const numberToGild = deadEntityCardId === "TB_BaconShop_HERO_41_Buddy_G" ? 2 : 1;
300
- const targetBoard = boardWithDeadEntity.filter((e) => !e.definitelyDead && e.health > 0);
301
- for (let i = 0; i < Math.min(numberToGild, boardWithDeadEntity.length); i++) {
302
- const rightMostMinion = targetBoard[targetBoard.length - 1 - i];
303
- if (rightMostMinion) {
304
- (0, golden_1.makeMinionGolden)(rightMostMinion, deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, otherBoard, otherBoardHero, gameState);
305
- }
306
- }
307
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
308
- }
309
- break;
310
- case "BG26_360":
311
- case "BG26_360_G":
312
- const statsScourfin = deadEntityCardId === "BG26_360_G" ? 10 : 5;
313
- for (let i = 0; i < multiplier; i++) {
314
- (0, utils_2.grantRandomStats)(deadEntity, boardWithDeadEntityHero.hand.filter((e) => {
315
- var _a;
316
- return ((_a = gameState.allCards.getCard(e.cardId).type) === null || _a === void 0 ? void 0 : _a.toUpperCase()) ===
317
- reference_data_1.CardType[reference_data_1.CardType.MINION];
318
- }), boardWithDeadEntityHero, statsScourfin, statsScourfin, null, true, gameState);
319
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
320
- }
321
- break;
322
- case "BG23_017":
323
- case "BG23_017_G":
324
- for (let i = 0; i < multiplier; i++) {
325
- const sanguineChampionStats = deadEntityCardId === "BG23_017" ? 1 : 2;
326
- boardWithDeadEntityHero.globalInfo.BloodGemAttackBonus += sanguineChampionStats;
327
- boardWithDeadEntityHero.globalInfo.BloodGemHealthBonus += sanguineChampionStats;
328
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
329
- }
330
- break;
331
- case "BG26_160":
332
- case "BG26_160_G":
333
- for (let i = 0; i < multiplier; i++) {
334
- const piperBuff = deadEntityCardId === "BG26_160" ? 1 : 2;
335
- boardWithDeadEntityHero.globalInfo.BloodGemAttackBonus += piperBuff;
336
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
337
- }
338
- break;
339
- case "BG_RLK_957":
340
- for (let i = 0; i < multiplier; i++) {
341
- (0, utils_2.addStatsToBoard)(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 2, 1, gameState, reference_data_1.Race[reference_data_1.Race.UNDEAD]);
342
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
343
- }
344
- break;
345
- case "BG26_GIL_513":
346
- for (let i = 0; i < multiplier; i++) {
347
- (0, utils_2.addStatsToBoard)(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, 1, 0, gameState, null);
348
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
349
- }
350
- break;
351
- case "BG_ICC_099":
352
- for (let i = 0; i < multiplier; i++) {
353
- for (const entity of boardWithDeadEntity) {
354
- (0, attack_1.dealDamageToMinion)(entity, boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, 5, otherBoard, otherBoardHero, gameState);
355
- }
356
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
357
- }
358
- break;
359
- case "BG27_006":
360
- case "BG27_006_G":
361
- for (let i = 0; i < multiplier; i++) {
362
- const witheredSpearhideCardsToAdd = Array(deadEntity.cardId === "BG27_006_G" ? 2 : 1).fill("BG20_GEM");
363
- (0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, witheredSpearhideCardsToAdd, gameState);
364
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
365
- }
366
- break;
367
- case "BG26_055":
368
- case "BG26_055_G":
369
- for (let i = 0; i < multiplier; i++) {
370
- applyRecurringNightmareDeathrattleEffect(boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, deadEntityCardId === "BG26_055_G", gameState);
371
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
372
- }
373
- break;
374
- case "BG27_080":
375
- case "BG27_080_G":
376
- const motleyBuff = deadEntity.cardId === "BG27_080_G" ? 2 : 1;
377
- for (let i = 0; i < multiplier; i++) {
378
- (0, utils_2.grantStatsToMinionsOfEachType)(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, motleyBuff * 2, motleyBuff * 1, gameState);
379
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
380
- }
381
- break;
382
- case "BG28_304":
383
- case "BG28_304_G":
384
- const moroesBuffAtk = deadEntity.cardId === "BG28_304_G" ? 6 : 3;
385
- const moroesBuffHealth = deadEntity.cardId === "BG28_304_G" ? 10 : 5;
386
- for (let i = 0; i < multiplier; i++) {
387
- (0, utils_2.addStatsToBoard)(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, moroesBuffAtk, moroesBuffHealth, gameState, reference_data_1.Race[reference_data_1.Race.UNDEAD]);
388
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
389
- }
390
- break;
391
- case "BG28_306":
392
- case "BG28_306_G":
393
- const steadfastSpiritBuff = deadEntity.cardId === "BG28_306_G" ? 2 : 1;
394
- for (let i = 0; i < multiplier; i++) {
395
- (0, utils_2.addStatsToBoard)(deadEntity, boardWithDeadEntity, boardWithDeadEntityHero, steadfastSpiritBuff, steadfastSpiritBuff, gameState);
396
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
397
- }
398
- break;
399
- case "BG26_148":
400
- case "BG26_148_G":
401
- for (let i = 0; i < multiplier; i++) {
402
- const scraperToAddQuantity = deadEntity.cardId === "BG26_148_G" ? 2 : 1;
403
- const scraperCardsToAdd = [];
404
- for (let i = 0; i < scraperToAddQuantity; i++) {
405
- scraperCardsToAdd.push((0, utils_1.pickRandom)(gameState.cardsData.scrapScraperSpawns));
406
- }
407
- (0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, scraperCardsToAdd, gameState);
408
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
409
- }
410
- break;
411
- case "BG29_862":
412
- case "BG29_862_G":
413
- for (let i = 0; i < multiplier; i++) {
414
- const conjurerToAddQuantity = deadEntity.cardId === "BG29_862_G" ? 2 : 1;
415
- const conjurerCardsToAdd = [];
416
- for (let i = 0; i < conjurerToAddQuantity; i++) {
417
- conjurerCardsToAdd.push((0, utils_1.pickRandom)(gameState.cardsData.battlecryMinions));
418
- }
419
- (0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, conjurerCardsToAdd, gameState);
420
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
421
- }
422
- break;
423
- case "BG25_HERO_103_Buddy":
424
- case "BG25_HERO_103_Buddy_G":
425
- for (let i = 0; i < multiplier; i++) {
426
- const loops = deadEntity.cardId === "BG25_HERO_103_Buddy_G" ? 2 : 1;
427
- for (let j = 0; j < loops; j++) {
428
- const atkBuff = deadEntity.attack;
429
- const healthBuff = deadEntity.maxHealth;
430
- const target = (0, utils_1.pickRandom)(boardWithDeadEntity.filter((e) => e.entityId !== deadEntity.entityId));
431
- if (target) {
432
- (0, stats_1.modifyStats)(target, deadEntity, atkBuff, healthBuff, boardWithDeadEntity, boardWithDeadEntityHero, gameState);
433
- }
434
- }
435
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
436
- }
437
- break;
438
- case "BG29_808":
439
- case "BG29_808_G":
440
- const spikedSaviorLoops = deadEntity.cardId === "BG29_808_G" ? 2 : 1;
441
- for (let i = 0; i < multiplier; i++) {
442
- for (let j = 0; j < spikedSaviorLoops; j++) {
443
- const targetBoard = [...boardWithDeadEntity];
444
- for (const entity of targetBoard) {
445
- (0, stats_1.modifyStats)(entity, deadEntity, 0, 1, boardWithDeadEntity, boardWithDeadEntityHero, gameState);
446
- }
447
- for (const entity of targetBoard) {
448
- (0, attack_1.dealDamageToMinion)(entity, boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, 1, otherBoard, otherBoardHero, gameState);
449
- }
450
- }
451
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
452
- }
453
- break;
454
- default:
455
- if ((0, utils_2.hasMechanic)(gameState.allCards.getCard(deadEntity.cardId), reference_data_1.GameTag[reference_data_1.GameTag.DEATHRATTLE])) {
456
- for (let i = 0; i < multiplier; i++) {
457
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
458
- }
459
- }
460
- break;
461
- }
462
- }
463
- }
464
- for (const enchantment of enchantments) {
465
- const deathrattleImpl = _card_mappings_1.cardMappings[enchantment.cardId];
466
- if ((0, card_interface_1.hasDeathrattleEnchantmentEffect)(deathrattleImpl)) {
467
- for (let i = 0; i < multiplier; i++) {
468
- deathrattleImpl.deathrattleEffectEnchantmentEffect(enchantment, deathrattleTriggeredInput);
469
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
470
- }
471
- }
472
- switch (enchantment.cardId) {
473
- case "BG30_MagicItem_917e":
474
- for (let i = 0; i < multiplier; i++) {
475
- (0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, [null], gameState);
476
- }
477
- break;
478
- case "BG30_MagicItem_411e":
479
- for (let i = 0; i < multiplier; i++) {
480
- (0, cards_in_hand_1.addCardsInHand)(boardWithDeadEntityHero, boardWithDeadEntity, ["BG20_GEM"], gameState);
481
- }
482
- break;
483
- case "BG21_000e":
484
- case "BG21_000_Ge":
485
- applyLeapFroggerEffect(boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, enchantment.cardId === "BG21_000_Ge", gameState, enchantment.repeats || 1);
486
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
487
- break;
488
- case "BG22_HERO_001_Buddy_e1":
489
- for (let i = 0; i < multiplier; i++) {
490
- (0, exports.applyEarthInvocationEnchantment)(boardWithDeadEntity, deadEntity, deadEntity, gameState);
491
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
492
- }
493
- break;
494
- case "BG22_HERO_001_Buddy_e2":
495
- for (let i = 0; i < multiplier; i++) {
496
- (0, exports.applyFireInvocationEnchantment)(boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, deadEntity, gameState);
497
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
498
- }
499
- break;
500
- case "BG22_HERO_001_Buddy_e3":
501
- for (let i = 0; i < multiplier; i++) {
502
- (0, exports.applyWaterInvocationEnchantment)(boardWithDeadEntity, boardWithDeadEntityHero, otherBoardHero, deadEntity, deadEntity, gameState);
503
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
504
- }
505
- break;
506
- case "BG22_HERO_001_Buddy_e4":
507
- for (let i = 0; i < multiplier; i++) {
508
- (0, exports.applyLightningInvocationEnchantment)(boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, otherBoard, otherBoardHero, gameState);
509
- (0, deathrattle_on_trigger_1.onDeathrattleTriggered)(deathrattleTriggeredInput);
510
- }
511
- break;
512
- }
513
- }
514
- };
515
- exports.handleDeathrattleEffects = handleDeathrattleEffects;
516
36
  const applyLightningInvocationEnchantment = (boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, otherBoard, otherBoardHero, gameState) => {
517
37
  const multiplier = (deadEntity === null || deadEntity === void 0 ? void 0 : deadEntity.cardId) === "BG22_HERO_001_Buddy_G" ? 2 : 1;
518
38
  for (let i = 0; i < multiplier; i++) {
@@ -576,6 +96,7 @@ const applyLeapFroggerEffect = (boardWithDeadEntity, boardWithDeadEntityHero, de
576
96
  });
577
97
  }
578
98
  };
99
+ exports.applyLeapFroggerEffect = applyLeapFroggerEffect;
579
100
  const applyRecurringNightmareDeathrattleEffect = (boardWithDeadEntity, boardWithDeadEntityHero, deadEntity, isPremium, gameState, multiplier = 1) => {
580
101
  var _a;
581
102
  multiplier = multiplier || 1;
@@ -596,6 +117,7 @@ const applyRecurringNightmareDeathrattleEffect = (boardWithDeadEntity, boardWith
596
117
  gameState.spectator.registerPowerTarget(deadEntity, target, boardWithDeadEntity, null, null);
597
118
  }
598
119
  };
120
+ exports.applyRecurringNightmareDeathrattleEffect = applyRecurringNightmareDeathrattleEffect;
599
121
  const handleWheneverMinionsKillEffect = (board, hero, otherBoard, otherHero, gameState) => {
600
122
  handleWheneverMinionsKillEffectForBoard(board, hero, otherBoard, otherHero, gameState);
601
123
  handleWheneverMinionsKillEffectForBoard(otherBoard, otherHero, board, hero, gameState);